root/trunk/lib/model/blog.statistics.php @ 4782

Revision 4782, 5.2 KB (checked in by inureyes, 3 years ago)

#708

Line 
1<?php
2/// Copyright (c) 2004-2007, Needlworks / Tatter Network Foundation
3/// All rights reserved. Licensed under the GPL.
4/// See the GNU General Public License for more details. (/doc/LICENSE, /doc/COPYRIGHT)
5
6function 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
22function 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
31function 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
45function 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
55function 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
60function 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
65function 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
102function 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?>
Note: See TracBrowser for help on using the browser.