From: garvinhicking Date: Mon, 13 Mar 2006 11:16:17 +0000 (+0000) Subject: Huge statistic update by Shrikee / Arnan X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=343c7123caf72782cdfe4d9ba9cb58b7d4bdb2e9;p=s9y.git Huge statistic update by Shrikee / Arnan --- diff --git a/plugins/serendipity_event_statistics/lang_en.inc.php b/plugins/serendipity_event_statistics/lang_en.inc.php index 1db1a59..3d6273a 100644 --- a/plugins/serendipity_event_statistics/lang_en.inc.php +++ b/plugins/serendipity_event_statistics/lang_en.inc.php @@ -62,16 +62,27 @@ @define('PLUGIN_EVENT_STATISTICS_EXT_OPT1', 'No!'); @define('PLUGIN_EVENT_STATISTICS_EXT_OPT2', 'Yes, at the bottom of the page'); @define('PLUGIN_EVENT_STATISTICS_EXT_OPT3', 'Yes, at the top of the page'); -@define('PLUGIN_EVENT_STATISTICS_EXT_VISITORS', 'Nr of vistors'); -@define('PLUGIN_EVENT_STATISTICS_EXT_VISTODAY', 'Nr of vistors today'); -@define('PLUGIN_EVENT_STATISTICS_EXT_VISTOTAL', 'Total nr of vistors'); -@define('PLUGIN_EVENT_STATISTICS_EXT_VISSINCE', 'The extended visitors statistic feature has collected data since'); +@define('PLUGIN_EVENT_STATISTICS_EXT_ALL', 'Set to \'no\' to show only visitor stats'); +@define('PLUGIN_EVENT_STATISTICS_EXT_ALL_DESC', 'Show everything? (default: no)'); +@define('PLUGIN_EVENT_STATISTICS_EXT_ALL1', 'No, hide everything but the counter.'); +@define('PLUGIN_EVENT_STATISTICS_EXT_ALL2', 'Yes, show me all statistics!'); +@define('PLUGIN_EVENT_STATISTICS_EXT_VISITORS', 'Individual counters'); +@define('PLUGIN_EVENT_STATISTICS_EXT_VISTODAY', 'Vistors today'); +@define('PLUGIN_EVENT_STATISTICS_EXT_VISTOTAL', 'Vistors ever'); +@define('PLUGIN_EVENT_STATISTICS_EXT_HITSTODAY', 'Hits today'); +@define('PLUGIN_EVENT_STATISTICS_EXT_HITSTOTAL', 'Hits ever'); +@define('PLUGIN_EVENT_STATISTICS_EXT_VISSINCE', 'Collecting stats since'); +@define('PLUGIN_EVENT_STATISTICS_EXT_COUNTDESC','The hits can go quite high and are purely for indication of pageviews. The hits are updated on EVERY pageview or refresh. This number is NOT a actual visit count.'); @define('PLUGIN_EVENT_STATISTICS_EXT_VISLATEST', 'Latest Visitors'); @define('PLUGIN_EVENT_STATISTICS_EXT_TOPREFS', 'Top Referrers'); @define('PLUGIN_EVENT_STATISTICS_EXT_TOPREFS_NONE', 'No referrers has yet been registered.'); +@define('PLUGIN_EVENT_STATISTICS_EXT_DAYGRAPH', 'Visits based on day'); +@define('PLUGIN_EVENT_STATISTICS_EXT_MONTHGRAPH', 'Visits based on month'); @define('PLUGIN_EVENT_STATISTICS_OUT_EXT_STATISTICS', 'Extended Visitor Statistics'); -@define('PLUGIN_EVENT_STATISTICS_BANNED_HOSTS', 'Ban browsers from beeing counted'); -@define('PLUGIN_EVENT_STATISTICS_BANNED_HOSTS_DESC', 'Insert browsers that should be excluded from counting, separated by "|"'); +@define('PLUGIN_EVENT_STATISTICS_BANNED_HOSTS1', 'Enable, do not count bots'); +@define('PLUGIN_EVENT_STATISTICS_BANNED_HOSTS2', 'Disable, please count bots'); +@define('PLUGIN_EVENT_STATISTICS_BANNED_HOSTS', 'Robot count protection'); +@define('PLUGIN_EVENT_STATISTICS_BANNED_HOSTS_DESC', 'Set to \'yes\' to not count robots. set to \'no\' to count robots. Currently over 25 bots are banned.'); @define('PLUGIN_EVENT_STATISTICS_SHOW_LASTENTRY', 'Show date of last entry'); @define('PLUGIN_EVENT_STATISTICS_SHOW_ENTRYCOUNT', 'Show number of entries'); @@ -87,4 +98,4 @@ @define('PLUGIN_EVENT_STATISTICS_TEXT_MONTHVISITORS', '%s visitor(s) this month'); @define('PLUGIN_EVENT_STATISTICS_SHOW_CURRENTVISITORS', 'Show number of current visitors (aggregate past 15 minutes)'); -@define('PLUGIN_EVENT_STATISTICS_TEXT_CURRENTVISITORS', '%s visitor(s) online'); +@define('PLUGIN_EVENT_STATISTICS_TEXT_CURRENTVISITORS', '%s visitor(s) online'); \ No newline at end of file diff --git a/plugins/serendipity_event_statistics/serendipity_event_statistics.php b/plugins/serendipity_event_statistics/serendipity_event_statistics.php index b3e84b8..7740cd7 100644 --- a/plugins/serendipity_event_statistics/serendipity_event_statistics.php +++ b/plugins/serendipity_event_statistics/serendipity_event_statistics.php @@ -7,7 +7,7 @@ if (file_exists($probelang)) { } include dirname(__FILE__) . '/lang_en.inc.php'; - + class serendipity_event_statistics extends serendipity_event { var $title = PLUGIN_EVENT_STATISTICS_NAME; @@ -19,8 +19,8 @@ class serendipity_event_statistics extends serendipity_event $propbag->add('name', PLUGIN_EVENT_STATISTICS_NAME); $propbag->add('description', PLUGIN_EVENT_STATISTICS_DESC); $propbag->add('stackable', false); - $propbag->add('author', 'Garvin Hicking, Fredrik Sandberg'); - $propbag->add('version', '1.23'); + $propbag->add('author', 'Arnan de Gans, Garvin Hicking, Fredrik Sandberg'); + $propbag->add('version', '1.40'); $propbag->add('requirements', array( 'serendipity' => '0.8', 'smarty' => '2.6.7', @@ -33,35 +33,55 @@ class serendipity_event_statistics extends serendipity_event 'frontend_configure' => true )); - $propbag->add('configuration', array('max_items', 'ext_vis_stat','banned_bots')); + $propbag->add('configuration', array('max_items','ext_vis_stat','stat_all','banned_bots')); } function introspect_config_item($name, &$propbag) { switch($name) { case 'max_items': - $propbag->add('type', 'string'); - $propbag->add('name', PLUGIN_EVENT_STATISTICS_MAX_ITEMS); + $propbag->add('type', 'string'); + $propbag->add('name', PLUGIN_EVENT_STATISTICS_MAX_ITEMS); $propbag->add('description', PLUGIN_EVENT_STATISTICS_MAX_ITEMS_DESC); - $propbag->add('default', 20); + $propbag->add('default', 20); break; case 'ext_vis_stat': - $select = array('no' => PLUGIN_EVENT_STATISTICS_EXT_OPT1, 'yesBot' => PLUGIN_EVENT_STATISTICS_EXT_OPT2, 'yesTop' => PLUGIN_EVENT_STATISTICS_EXT_OPT3); - $propbag->add('type', 'select'); - $propbag->add('name', PLUGIN_EVENT_STATISTICS_EXT_ADD); - $propbag->add('description', PLUGIN_EVENT_STATISTICS_EXT_ADD_DESC); + $select = array('no' => PLUGIN_EVENT_STATISTICS_EXT_OPT1, + 'yesBot' => PLUGIN_EVENT_STATISTICS_EXT_OPT2, + 'yesTop' => PLUGIN_EVENT_STATISTICS_EXT_OPT3); + + $propbag->add('type', 'select'); + $propbag->add('name', PLUGIN_EVENT_STATISTICS_EXT_ADD); + $propbag->add('description', PLUGIN_EVENT_STATISTICS_EXT_ADD_DESC); $propbag->add('select_values', $select); - $propbag->add('default', 'no'); + $propbag->add('default', 'no'); break; - case 'banned_bots': - $propbag->add('type', 'string'); - $propbag->add('name', PLUGIN_EVENT_STATISTICS_BANNED_HOSTS); - $propbag->add('description', PLUGIN_EVENT_STATISTICS_BANNED_HOSTS_DESC); - $propbag->add('default', 'msnbot.msn.com'); + case 'stat_all': + $select = array('no' => PLUGIN_EVENT_STATISTICS_EXT_ALL1, + 'yes' => PLUGIN_EVENT_STATISTICS_EXT_ALL2); + + $propbag->add('type', 'select'); + $propbag->add('name', PLUGIN_EVENT_STATISTICS_EXT_ALL); + $propbag->add('description', PLUGIN_EVENT_STATISTICS_EXT_ALL_DESC); + $propbag->add('select_values', $select); + $propbag->add('default', 'yes'); + + break; + + case 'banned_bots': + $select = array('yes' => PLUGIN_EVENT_STATISTICS_BANNED_HOSTS1, + 'no' => PLUGIN_EVENT_STATISTICS_BANNED_HOSTS2); + + $propbag->add('type', 'select'); + $propbag->add('name', PLUGIN_EVENT_STATISTICS_BANNED_HOSTS); + $propbag->add('description', PLUGIN_EVENT_STATISTICS_BANNED_HOSTS_DESC); + $propbag->add('select_values', $select); + $propbag->add('default', 'yes'); + break; } @@ -86,8 +106,8 @@ class serendipity_event_statistics extends serendipity_event } //checking if db tables exists, otherwise install them - $tableChecker = serendipity_db_query("SELECT counter_id FROM {$serendipity['dbPrefix']}visitors LIMIT 1", true); - if (!is_array($tableChecker)){ + $tableChecker = serendipity_db_query("SELECT counter_id FROM {$serendipity['dbPrefix']}visitors_count LIMIT 1", true); + if (!is_array($tableChecker)) { $this->createTables(); } @@ -95,17 +115,64 @@ class serendipity_event_statistics extends serendipity_event $sessionChecker = serendipity_db_query("SELECT count(sessID) FROM {$serendipity['dbPrefix']}visitors WHERE '".serendipity_db_escape_string(session_id())."' = sessID GROUP BY sessID", true); if (!is_array($sessionChecker) || (is_array($sessionChecker)) && ($sessionChecker[0] == 0)) { + $referer = $useragent = $remoteaddr = 'unknown'; + + // gathering intel + if ($_SERVER['REMOTE_ADDR']) { + $remoteaddr = $_SERVER['REMOTE_ADDR']; + } + if ($_SERVER['HTTP_USER_AGENT']) { + $useragent = $_SERVER['HTTP_USER_AGENT']; + } + if ($_SERVER['HTTP_REFERER']) { + $referer = $_SERVER['HTTP_REFERER']; + } + + $found = 0; + // avoiding banned browsers - $banned_bots = $this->get_config('banned_bots'); - $tmp_array = explode('|', $banned_bots); - $found = 'no'; - for ($i=0; $iget_config('banned_bots') == 'yes') { + // excludelist botagents + $banned_array = array( + '1' => "unknown", + '2' => "Yahoo! Slurp", + '3' => "slurpy", + '4' => "agent 007", + '5' => "ichiro", + '6' => "ia_archiver", + '7' => "zyborg", + '8' => "linkwalker", + '9' => "crawler", + '10' => "python", + '11' => "w3c_validator", + '12' => "almaden", + '13' => "topicspy", + '14' => "poodle predictor", + '15' => "link checker pro", + '16' => "xenu link sleuth", + '17' => "iconsurf", + '18' => "zoe indexer", + '19' => "grub-client", + '20' => "spider", + '21' => "pompos", + '22' => "virus_detector", + '23' => "bot", + '24' => "Wells Search II", + '25' => "Dumbot", + '26' => "GeoBot", + '27' => "DigExt" + ); + + foreach($banned_array AS $ban) { + if (stristr($useragent, $ban)) { + $found = 1; + break; + } } } - if ($found == 'no'){ - $this->countVisitor(); + + if ($found == 0){ + $this->countVisitor($useragent, $remoteaddr, $referer); } } else { // Update visitor timestamp @@ -133,69 +200,69 @@ class serendipity_event_statistics extends serendipity_event } - $first_entry = serendipity_db_query("SELECT timestamp FROM {$serendipity['dbPrefix']}entries ORDER BY timestamp ASC limit 1", true); - $last_entry = serendipity_db_query("SELECT timestamp FROM {$serendipity['dbPrefix']}entries ORDER BY timestamp DESC limit 1", true); - $total_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}entries", true); - $draft_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}entries WHERE isdraft = 'true'", true); - $publish_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}entries WHERE isdraft = 'false'", true); - $author_rows = serendipity_db_query("SELECT author, count(author) as entries FROM {$serendipity['dbPrefix']}entries GROUP BY author ORDER BY author"); - $category_count = serendipity_db_query("SELECT count(categoryid) FROM {$serendipity['dbPrefix']}category", true); - $cat_sql = "SELECT c.category_name, count(e.id) as postings - FROM {$serendipity['dbPrefix']}entrycat ec, - {$serendipity['dbPrefix']}category c, - {$serendipity['dbPrefix']}entries e - WHERE ec.categoryid = c.categoryid AND ec.entryid = e.id - GROUP BY ec.categoryid, c.category_name - ORDER BY postings DESC"; - $category_rows = serendipity_db_query($cat_sql); - - $image_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}images", true); - $image_rows = serendipity_db_query("SELECT extension, count(id) AS images FROM {$serendipity['dbPrefix']}images GROUP BY extension ORDER BY images DESC"); - - $subscriber_count = count(serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}comments WHERE type = 'NORMAL' AND subscribed = 'true' GROUP BY email")); - $subscriber_rows = serendipity_db_query("SELECT e.timestamp, e.id, e.title, count(c.id) as postings - FROM {$serendipity['dbPrefix']}comments c, - {$serendipity['dbPrefix']}entries e - WHERE e.id = c.entry_id AND type = 'NORMAL' AND subscribed = 'true' - GROUP BY e.id, c.email, e.title, e.timestamp - ORDER BY postings DESC - LIMIT $max_items"); - - $comment_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}comments WHERE type = 'NORMAL'", true); - $comment_rows = serendipity_db_query("SELECT e.timestamp, e.id, e.title, count(c.id) as postings - FROM {$serendipity['dbPrefix']}comments c, - {$serendipity['dbPrefix']}entries e - WHERE e.id = c.entry_id AND type = 'NORMAL' - GROUP BY e.id, e.title, e.timestamp - ORDER BY postings DESC - LIMIT $max_items"); - - $commentor_rows = serendipity_db_query("SELECT author, max(email) as email, max(url) as url, count(id) as postings - FROM {$serendipity['dbPrefix']}comments c - WHERE type = 'NORMAL' - GROUP BY author - ORDER BY postings DESC - LIMIT $max_items"); - - $tb_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}comments WHERE type = 'TRACKBACK'", true); - $tb_rows = serendipity_db_query("SELECT e.timestamp, e.id, e.title, count(c.id) as postings - FROM {$serendipity['dbPrefix']}comments c, - {$serendipity['dbPrefix']}entries e - WHERE e.id = c.entry_id AND type = 'TRACKBACK' - GROUP BY e.timestamp, e.id, e.title - ORDER BY postings DESC - LIMIT $max_items"); - - $tbr_rows = serendipity_db_query("SELECT author, max(email) as email, max(url) as url, count(id) as postings - FROM {$serendipity['dbPrefix']}comments c - WHERE type = 'TRACKBACK' - GROUP BY author - ORDER BY postings DESC - LIMIT $max_items"); - - $length = serendipity_db_query("SELECT SUM(LENGTH(body) + LENGTH(extended)) FROM {$serendipity['dbPrefix']}entries", true); - $length_rows = serendipity_db_query("SELECT id, title, (LENGTH(body) + LENGTH(extended)) as full_length FROM {$serendipity['dbPrefix']}entries ORDER BY full_length DESC LIMIT $max_items"); - + if ($this->get_config('stat_all') == 'yes') { + $first_entry = serendipity_db_query("SELECT timestamp FROM {$serendipity['dbPrefix']}entries ORDER BY timestamp ASC limit 1", true); + $last_entry = serendipity_db_query("SELECT timestamp FROM {$serendipity['dbPrefix']}entries ORDER BY timestamp DESC limit 1", true); + $total_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}entries", true); + $draft_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}entries WHERE isdraft = 'true'", true); + $publish_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}entries WHERE isdraft = 'false'", true); + $author_rows = serendipity_db_query("SELECT author, count(author) as entries FROM {$serendipity['dbPrefix']}entries GROUP BY author ORDER BY author"); + $category_count = serendipity_db_query("SELECT count(categoryid) FROM {$serendipity['dbPrefix']}category", true); + $cat_sql = "SELECT c.category_name, count(e.id) as postings + FROM {$serendipity['dbPrefix']}entrycat ec, + {$serendipity['dbPrefix']}category c, + {$serendipity['dbPrefix']}entries e + WHERE ec.categoryid = c.categoryid AND ec.entryid = e.id + GROUP BY ec.categoryid, c.category_name + ORDER BY postings DESC"; + $category_rows = serendipity_db_query($cat_sql); + + $image_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}images", true); + $image_rows = serendipity_db_query("SELECT extension, count(id) AS images FROM {$serendipity['dbPrefix']}images GROUP BY extension ORDER BY images DESC"); + + $subscriber_count = count(serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}comments WHERE type = 'NORMAL' AND subscribed = 'true' GROUP BY email")); + $subscriber_rows = serendipity_db_query("SELECT e.timestamp, e.id, e.title, count(c.id) as postings + FROM {$serendipity['dbPrefix']}comments c, + {$serendipity['dbPrefix']}entries e + WHERE e.id = c.entry_id AND type = 'NORMAL' AND subscribed = 'true' + GROUP BY e.id, c.email, e.title, e.timestamp + ORDER BY postings DESC + LIMIT $max_items"); + + $comment_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}comments WHERE type = 'NORMAL'", true); + $comment_rows = serendipity_db_query("SELECT e.timestamp, e.id, e.title, count(c.id) as postings + FROM {$serendipity['dbPrefix']}comments c, + {$serendipity['dbPrefix']}entries e + WHERE e.id = c.entry_id AND type = 'NORMAL' + GROUP BY e.id, e.title, e.timestamp + ORDER BY postings DESC + LIMIT $max_items"); + + $commentor_rows = serendipity_db_query("SELECT author, max(email) as email, max(url) as url, count(id) as postings + FROM {$serendipity['dbPrefix']}comments c + WHERE type = 'NORMAL' + GROUP BY author + ORDER BY postings DESC + LIMIT $max_items"); + + $tb_count = serendipity_db_query("SELECT count(id) FROM {$serendipity['dbPrefix']}comments WHERE type = 'TRACKBACK'", true); + $tb_rows = serendipity_db_query("SELECT e.timestamp, e.id, e.title, count(c.id) as postings + FROM {$serendipity['dbPrefix']}comments c, + {$serendipity['dbPrefix']}entries e + WHERE e.id = c.entry_id AND type = 'TRACKBACK' + GROUP BY e.timestamp, e.id, e.title + ORDER BY postings DESC + LIMIT $max_items"); + + $tbr_rows = serendipity_db_query("SELECT author, max(email) as email, max(url) as url, count(id) as postings + FROM {$serendipity['dbPrefix']}comments c + WHERE type = 'TRACKBACK' + GROUP BY author + ORDER BY postings DESC + LIMIT $max_items"); + + $length = serendipity_db_query("SELECT SUM(LENGTH(body) + LENGTH(extended)) FROM {$serendipity['dbPrefix']}entries", true); + $length_rows = serendipity_db_query("SELECT id, title, (LENGTH(body) + LENGTH(extended)) as full_length FROM {$serendipity['dbPrefix']}entries ORDER BY full_length DESC LIMIT $max_items"); ?>

@@ -439,12 +506,12 @@ class serendipity_event_statistics extends serendipity_event } ?> -
+
-
+
@@ -453,6 +520,7 @@ class serendipity_event_statistics extends serendipity_event extendedVisitorStatistics($max_items); @@ -470,32 +538,57 @@ class serendipity_event_statistics extends serendipity_event } } + //Statistics + function updatestats($action) { + global $serendipity; + + list($year, $month, $day) = split('-', date('Y-m-d')); + $sql = serendipity_db_query("SELECT COUNT(year) AS result FROM {$serendipity['dbPrefix']}visitors_count WHERE year='$year' AND month='$month' AND day='$day'", true); + + $sql_hit_update = "UPDATE {$serendipity['dbPrefix']}visitors_count SET hits = hits+1 WHERE year='$year' AND month='$month' AND day='$day'"; + $sql_day_new = "INSERT INTO {$serendipity['dbPrefix']}visitors_count (year, month, day, visits, hits) VALUES ('$year','$month','$day',1,1)"; + $sql_day_update = "UPDATE {$serendipity['dbPrefix']}visitors_count SET visits = visits+1, hits = hits+1 WHERE year='$year' AND month='$month' AND day='$day'"; + switch($action) { + case "update": + serendipity_db_query($sql_hit_update); + break; + case "new": + if($sql['result'] >= 1) { + serendipity_db_query($sql_day_update); + } else { + serendipity_db_query($sql_day_new); + } + break; + } + } + function updateVisitor() { global $serendipity; + $this->updatestats('update'); + $time = date('H:i'); $day = date('Y-m-d'); - return serendipity_db_query("UPDATE {$serendipity['dbPrefix']}visitors - SET time = '$time', - day = '$day' - WHERE sessID = '" . serendipity_db_escape_string(strip_tags(session_id())) . "'"); + return serendipity_db_query("UPDATE {$serendipity['dbPrefix']}visitors SET time = '$time', day = '$day' WHERE sessID = '" . serendipity_db_escape_string(strip_tags(session_id())) . "'"); } - function countVisitor(){ + function countVisitor($useragent, $remoteaddr, $referer){ global $serendipity; - $referer = $_SERVER['HTTP_REFERER']; + $this->updatestats('new'); + + $thedate = date('Y-m-d'); $values = array( 'sessID' => strip_tags(session_id()), - 'day' => date('Y-m-d'), + 'day' => $thedate, 'time' => date('H:i'), 'ref' => strip_tags($referer), - 'browser'=> strip_tags($_SERVER['HTTP_USER_AGENT']), - 'ip' => strip_tags($_SERVER['REMOTE_ADDR']) + 'browser'=> strip_tags($useragent), + 'ip' => strip_tags($remoteaddr) ); - serendipity_db_insert('visitors', $values); - + serendipity_db_insert('visitors', $values); + // updating the referrer-table if (strlen($referer) >= 1) { @@ -512,9 +605,13 @@ class serendipity_event_statistics extends serendipity_event //removing www $urlC = serendipity_db_escape_string(str_replace('www.', '', $urlB)); + if(strlen($urlC) < 1) { + $urlC = 'unknown'; + } + //updating db - $q = serendipity_db_query("SELECT count(refs) FROM {$serendipity['dbPrefix']}refs WHERE refs = '$urlC' GROUP BY refs", true); - if (!is_array($q) || $q[0] >= 1){ + $q = serendipity_db_query("SELECT count(refs) AS referrer FROM {$serendipity['dbPrefix']}refs WHERE refs = '$urlC' GROUP BY refs", true); + if ($q['referrer'] >= 1){ serendipity_db_query("UPDATE {$serendipity['dbPrefix']}refs SET count=count+1 WHERE (refs = '$urlC')"); } else { serendipity_db_query("INSERT INTO {$serendipity['dbPrefix']}refs (refs, count) VALUES ('$urlC', 1)"); @@ -523,6 +620,61 @@ class serendipity_event_statistics extends serendipity_event } //end of function countVisitor + // Calculate daily stats + function statistics_getdailystats($day, $amount) { + global $serendipity; + + list($year, $month) = split('[-]', date("Y-m")); + if ($day > 0 && $day <32) { + $sql = "SELECT SUM(visits) AS dailyvisit FROM {$serendipity['dbPrefix']}visitors_count WHERE day"; + for ($i=1; $i<32; $i++) { + $sqlfire = $sql . " = '$i' AND year = '$year' AND month = '$month'"; + $res = serendipity_db_query($sqlfire, true); + $container[$i] = $res['dailyvisit']; + } + return $container; + } else if (!is_integer($day)) { + echo "Daycount failed - You've gotta specify a correct date(read: integer!)"; + return "failure"; + } else if ($day < 0 || $day > 32) { + echo "Daycount failed - Days only go from 1 to 31"; + return "failure"; + } + + if (! isset($container)) { + $sql = "SELECT SUM(visits) FROM {$serendipity['dbPrefix']}visitors_count WHERE day = '$day' AND month = '$month' AND year = '$year'"; + $res = serendipity_db_query($sql, true); + return $res; + } + } + + // Calculate monthly stats + function statistics_getmonthlystats($month, $amount) { + global $serendipity; + + $year = date("Y"); + if ($month > 0 && $month < 13) { + $sql = "SELECT SUM(visits) AS monthlyvisit FROM {$serendipity['dbPrefix']}visitors_count WHERE month"; + for ($i=1; $i<13; $i++) { + $sqlfire = $sql . " = '$i' AND year = '$year'"; + $res = serendipity_db_query($sqlfire, true); + $container[$i] = $res['monthlyvisit']; + } + return $container; + } else if (!is_integer($month)) { + echo "Monthcount failed - You've gotta specify a correct month(read: integer!)"; + return "failure"; + } else if ($month < 0 || $month > 13) { + echo "Monthcount failed - Months only go from 1 to 12"; + return "failure"; + } + + if (!isset($container)) { + $sql = "SELECT SUM(visits) FROM {$serendipity['dbPrefix']}visitors_count WHERE month = '$month' AND year = '$year'"; + $res = serendipity_db_query($sql, true); + return $res; + } + } function extendedVisitorStatistics($max_items){ @@ -530,43 +682,153 @@ class serendipity_event_statistics extends serendipity_event // ---------------QUERIES for Viewing statistics ---------------------------------------------- $day = date('Y-m-d'); - $visitors_count_today = serendipity_db_query("SELECT count(counter_id) FROM {$serendipity['dbPrefix']}visitors WHERE day = '".$day."'", true); + list($year, $month, $day) = split('-', $day); + $visitors_count_firstday = serendipity_db_query("SELECT day FROM {$serendipity['dbPrefix']}visitors ORDER BY counter_id ASC LIMIT 1", true); - $visitors_count = serendipity_db_query("SELECT count(counter_id) FROM {$serendipity['dbPrefix']}visitors", true); + $visitors_count_today = serendipity_db_query("SELECT visits FROM {$serendipity['dbPrefix']}visitors_count WHERE year = '".$year."' AND month = '".$month."' AND day = '".$day."'", true); + $visitors_count = serendipity_db_query("SELECT SUM(visits) FROM {$serendipity['dbPrefix']}visitors_count", true); + $hits_count_today = serendipity_db_query("SELECT hits FROM {$serendipity['dbPrefix']}visitors_count WHERE year = '".$year."' AND month = '".$month."' AND day = '".$day."'", true); + $hits_count = serendipity_db_query("SELECT SUM(hits) FROM {$serendipity['dbPrefix']}visitors_count", true); $visitors_latest = serendipity_db_query("SELECT counter_id, day, time, ref, browser, ip FROM {$serendipity['dbPrefix']}visitors ORDER BY counter_id DESC LIMIT ".$max_items.""); - $top_refs = serendipity_db_query("SELECT refs, count FROM {$serendipity['dbPrefix']}refs ORDER BY count DESC LIMIT ".$max_items.""); + $top_refs = serendipity_db_query("SELECT refs, count FROM {$serendipity['dbPrefix']}refs ORDER BY count DESC LIMIT 20"); // ---------------STYLES for Viewing statistics ---------------------------------------------- echo ""; ?>

-


\n"?>
-
+ + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
- ".$visitors_count_today[0]."
\n"; - echo PLUGIN_EVENT_STATISTICS_EXT_VISTOTAL.": ".$visitors_count[0]."
\n"; - ?>
- + + +
+ 0) { ?> + + statistics_getmonthlystats($i, $visitors_count[0]); + echo ''; + } ?> + + 'Jan', '2' => 'Feb', '3' => 'Mar', '4' => 'Apr', '5' => 'May', '6' => 'Jun', + '7' => 'Jul', '8' => 'Aug', '9' => 'Sep', '10' => 'Oct', '11' => 'Nov', '12' => 'Dec'); + $color = "col2"; + for ($i = 1; $i < 13; $i++) { + if ($color == "col1") { + $color ="col2"; + } else { + $color ="col1"; + } + echo ''; + } + ?> +
' . $num[$i]; + $num[$i] = ($num[$i] / 100) * 20 + 1; + echo '
'; + echo '
'. serendipity_strftime('%b', mktime(0, 0, 0, $i, 1, 2000)) .'
+ + +
+ 0) { ?> + + statistics_getdailystats($i, $visitors_count[0]); + echo ''; + } + ?> + + '. $i .''; + } ?> +
' . $num[$i]; + $num[$i] = ($num[$i] / 100) * 40 + 1; + echo '
'; + echo '
+ + + +

+
- +

- -
-
- -
+
+
-
+
$row) { - if ($color == "col4"){$color ="col5";}else{$color ="col4";} - echo ""; + if ($color == "col4") { + $color ="col5"; + } else { + $color ="col4"; + } + echo ''; } } else { echo PLUGIN_EVENT_STATISTICS_EXT_TOPREFS_NONE; @@ -614,11 +875,10 @@ class serendipity_event_statistics extends serendipity_event
".$i++.". ".$row['refs']." (".$row['count'].")
'.$i++.'. '.$row['refs'].' ('.$row['count'].')
-
+ add('name', PLUGIN_EVENT_STATISTICS_NAME); $propbag->add('description', PLUGIN_EVENT_STATISTICS_NAME); $propbag->add('stackable', true); - $propbag->add('author', 'Garvin Hicking'); - $propbag->add('version', '1.0'); + $propbag->add('author', 'Arnan de Gans, Garvin Hicking'); + $propbag->add('version', '1.1'); $propbag->add('requirements', array( 'serendipity' => '0.8', 'smarty' => '2.6.7', @@ -153,6 +153,7 @@ class serendipity_plugin_statistics extends serendipity_plugin if (!file_exists($cachef) || filesize($cachef) == 0 || filemtime($cachef) < (time() - $cachetime)) { // Create statistics + list($year, $month, $day) = split('-', date('Y-m-d')); $content = ''; if (serendipity_db_bool($this->get_config('show_lastentry'))) { @@ -177,7 +178,7 @@ class serendipity_plugin_statistics extends serendipity_plugin } if (serendipity_db_bool($this->get_config('show_monthvisitors'))) { - $res = serendipity_db_query("SELECT count(counter_id) AS monthvisitors FROM {$serendipity['dbPrefix']}visitors WHERE day LIKE '" . date('Y-m') . "-%'", true, 'assoc'); + $res = serendipity_db_query("SELECT sum(visits) AS monthvisitors FROM {$serendipity['dbPrefix']}visitors_count WHERE year='".$year."' AND month='".$month."' AND day='".$day."'", true, 'assoc'); if (is_array($res) && isset($res['monthvisitors'])) { $content .= '
' . sprintf($this->get_config('text_monthvisitors'), '' . $res['monthvisitors'] . '') . "
\n"; } @@ -212,4 +213,4 @@ class serendipity_plugin_statistics extends serendipity_plugin } } -/* vim: set sts=4 ts=4 expandtab : */ +/* vim: set sts=4 ts=4 expandtab : */ \ No newline at end of file