| 1 | <?php |
|---|
| 2 | |
|---|
| 3 | |
|---|
| 4 | |
|---|
| 5 | |
|---|
| 6 | function getStatistics($blogid) { |
|---|
| 7 | global $database; |
|---|
| 8 | $stats = array('total' => 0, 'today' => 0, 'yesterday' => 0); |
|---|
| 9 | $result = DBQuery::queryCell("SELECT visits FROM {$database['prefix']}BlogStatistics WHERE blogid = $blogid"); |
|---|
| 10 | if (!empty($result)) $stats['total'] = $result; |
|---|
| 11 | |
|---|
| 12 | $result = DBQuery::queryColumn("SELECT date, visits FROM {$database['prefix']}DailyStatistics WHERE blogid = $blogid AND `date` in ('" . Timestamp::getDate()."','".Timestamp::getDate(time()-86400)."')"); |
|---|
| 13 | $stat['today'] = $stat['yesterday'] = 0; |
|---|
| 14 | foreach($result as $data) { |
|---|
| 15 | if($data['date'] == Timestamp::getDate()) $stats['today'] = $data['date']; |
|---|
| 16 | if($data['date'] == Timestamp::getDate(time()-86400)) $stats['yesterday'] = $data['date']; |
|---|
| 17 | } |
|---|
| 18 | |
|---|
| 19 | return $stats; |
|---|
| 20 | } |
|---|
| 21 | |
|---|
| 22 | function getDailyStatistics($period) { |
|---|
| 23 | global $database, $blogid; |
|---|
| 24 | return DBQuery::queryAll("SELECT date, visits |
|---|
| 25 | FROM {$database['prefix']}DailyStatistics |
|---|
| 26 | WHERE blogid = $blogid |
|---|
| 27 | AND LEFT(date, 6) = $period |
|---|
| 28 | ORDER BY date DESC"); |
|---|
| 29 | } |
|---|
| 30 | |
|---|
| 31 | function getMonthlyStatistics($blogid) { |
|---|
| 32 | global $database; |
|---|
| 33 | $statistics = array(); |
|---|
| 34 | if ($result = DBQuery::queryAll("SELECT left(date, 6) date, sum(visits) visits |
|---|
| 35 | FROM {$database['prefix']}DailyStatistics |
|---|
| 36 | WHERE blogid = $blogid |
|---|
| 37 | GROUP BY left(date, 6) |
|---|
| 38 | ORDER BY date DESC")) { |
|---|
| 39 | foreach($result as $record) |
|---|
| 40 | array_push($statistics, $record); |
|---|
| 41 | } |
|---|
| 42 | return $statistics; |
|---|
| 43 | } |
|---|
| 44 | |
|---|
| 45 | function getRefererStatistics($blogid) { |
|---|
| 46 | global $database; |
|---|
| 47 | $statistics = array(); |
|---|
| 48 | if ($result = DBQuery::queryAll("SELECT host, count FROM {$database['prefix']}RefererStatistics WHERE blogid = $blogid order by count desc limit 20")) { |
|---|
| 49 | foreach($result as $record) |
|---|
| 50 | array_push($statistics, $record); |
|---|
| 51 | } |
|---|
| 52 | return $statistics; |
|---|
| 53 | } |
|---|
| 54 | |
|---|
| 55 | function getRefererLogsWithPage($page, $count) { |
|---|
| 56 | global $database; |
|---|
| 57 | return fetchWithPaging("SELECT host, url, referred FROM {$database['prefix']}RefererLogs WHERE blogid = ".getBlogId()." ORDER BY referred DESC", $page, $count); |
|---|
| 58 | } |
|---|
| 59 | |
|---|
| 60 | function getRefererLogs() { |
|---|
| 61 | global $database; |
|---|
| 62 | return DBQuery::queryAll("SELECT host, url, referred FROM {$database['prefix']}RefererLogs WHERE blogid = ".getBlogId()." ORDER BY referred DESC LIMIT 1500"); |
|---|
| 63 | } |
|---|
| 64 | |
|---|
| 65 | function updateVisitorStatistics($blogid) { |
|---|
| 66 | global $database, $blogURL; |
|---|
| 67 | if (!fireEvent('UpdatingVisitorStatistics', true)) |
|---|
| 68 | return; |
|---|
| 69 | if (doesHaveOwnership()) |
|---|
| 70 | return; |
|---|
| 71 | $id = session_id(); |
|---|
| 72 | if(DBQuery::queryCount("SELECT blog FROM {$database['prefix']}SessionVisits WHERE id = '$id' AND address = '{$_SERVER['REMOTE_ADDR']}' AND blog = $blogid") > 0) |
|---|
| 73 | return; |
|---|
| 74 | if (DBQuery::queryCount("INSERT INTO {$database['prefix']}SessionVisits values('$id', '{$_SERVER['REMOTE_ADDR']}', $blogid)") > 0) { |
|---|
| 75 | if(DBQuery::queryCount("UPDATE {$database['prefix']}BlogStatistics SET visits = visits + 1 WHERE blogid = $blogid") < 1) { |
|---|
| 76 | DBQuery::execute("INSERT into {$database['prefix']}BlogStatistics values($blogid, 1)"); |
|---|
| 77 | } |
|---|
| 78 | |
|---|
| 79 | $period = Timestamp::getDate(); |
|---|
| 80 | if(DBQuery::queryCount("UPDATE {$database['prefix']}DailyStatistics SET visits = visits + 1 WHERE blogid = $blogid AND `date` = $period") < 1) { |
|---|
| 81 | DBQuery::execute("INSERT into {$database['prefix']}DailyStatistics values($blogid, $period, 1)"); |
|---|
| 82 | } |
|---|
| 83 | if (!empty($_SERVER['HTTP_REFERER'])) { |
|---|
| 84 | $referer = parse_url($_SERVER['HTTP_REFERER']); |
|---|
| 85 | if (!empty($referer['host']) && (($referer['host'] != $_SERVER['HTTP_HOST']) || (strncmp($referer['path'], $blogURL, strlen($blogURL)) != 0))) { |
|---|
| 86 | requireComponent('Textcube.Data.Filter'); |
|---|
| 87 | if (Filter::isFiltered('ip', $_SERVER['REMOTE_ADDR']) || Filter::isFiltered('url', $_SERVER['HTTP_REFERER'])) |
|---|
| 88 | return; |
|---|
| 89 | if (!fireEvent('AddingRefererLog', true, array('host' => $referer['host'], 'url' => $_SERVER['HTTP_REFERER']))) |
|---|
| 90 | return; |
|---|
| 91 | $host = DBQuery::escapeString(UTF8::lessenAsEncoding($referer['host'], 64)); |
|---|
| 92 | $url = DBQuery::escapeString(UTF8::lessenAsEncoding($_SERVER['HTTP_REFERER'], 255)); |
|---|
| 93 | DBQuery::query("INSERT INTO {$database['prefix']}RefererLogs values($blogid, '$host', '$url', UNIX_TIMESTAMP())"); |
|---|
| 94 | DBQuery::query("DELETE FROM {$database['prefix']}RefererLogs WHERE referred < UNIX_TIMESTAMP() - 604800"); |
|---|
| 95 | if (!DBQuery::execute("UPDATE {$database['prefix']}RefererStatistics SET count = count + 1 WHERE blogid = $blogid AND host = '$host'")) |
|---|
| 96 | DBQuery::execute("INSERT into {$database['prefix']}RefererStatistics values($blogid, '$host', 1)"); |
|---|
| 97 | } |
|---|
| 98 | } |
|---|
| 99 | } |
|---|
| 100 | } |
|---|
| 101 | |
|---|
| 102 | function setTotalStatistics($blogid) { |
|---|
| 103 | global $database; |
|---|
| 104 | DBQuery::execute("DELETE FROM {$database['prefix']}DailyStatistics WHERE blogid = $blogid"); |
|---|
| 105 | $prevCount = DBQuery::queryCell("SELECT visits FROM {$database['prefix']}BlogStatistics WHERE blogid = $blogid"); |
|---|
| 106 | if ((!is_null($prevCount)) && ($prevCount == 0)) |
|---|
| 107 | return true; |
|---|
| 108 | if(DBQuery::execute("UPDATE {$database['prefix']}BlogStatistics SET visits = 0 WHERE blogid = $blogid")) { |
|---|
| 109 | return true; |
|---|
| 110 | } else { |
|---|
| 111 | $result = DBQuery::execute("INSERT INTO {$database['prefix']}BlogStatistics values($blogid, 0)"); |
|---|
| 112 | return $result; |
|---|
| 113 | } |
|---|
| 114 | } |
|---|
| 115 | ?> |
|---|