-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAPI.php
134 lines (116 loc) · 3.68 KB
/
API.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
/**
* Latest Referrers Plugin
* API
*
* Author: Timo Besenreuther
* EZdesign.de
* Created: 2010-09-01
* Modified: 2010-09-02
*/
class Piwik_LatestReferrers_API {
// singleton instance
static private $instance = null;
/** Get singleton instance
* @return Piwik_SiteSearch_API */
static public function getInstance() {
if (self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
}
/** Get latest new link referrers
* @return Piwik_DataTable */
public function getLatestNewLinks($idSite, $period, $date) {
return $this->getLatestLinks($idSite, $period, $date, true);
}
/** Get latest link referrers
* @return Piwik_DataTable */
public function getLatestLinks($idSite, $period, $date, $onlyNew=false, $type=false) {
Piwik::checkUserHasViewAccess($idSite);
$group = array();
$onlyNewSql = '';
if ($onlyNew) {
$onlyNewSql = 'HAVING `'.Piwik_LatestReferrers::OCCURRENCES.'` = 1';
} else {
$group[] = 'visit.referer_name';
$group[] = 'visit.visit_entry_idaction_url';
}
if (!$type) {
$type = Piwik_Common::REFERER_TYPE_WEBSITE;
}
if ($type == Piwik_Common::REFERER_TYPE_WEBSITE) {
$group[] = 'visit.referer_url';
$select = 'visit.referer_url AS `'
. Piwik_LatestReferrers::REFERRER_URL.'`';
} else {
$group[] = 'visit.referer_keyword';
$select = 'visit.referer_keyword AS `'
. Piwik_LatestReferrers::REFERRER_KEYWORD.'`';
}
$sql = '
SELECT
visit.referer_name AS `'.Piwik_LatestReferrers::REFERRER.'`,
visit.visit_entry_idaction_url AS `'.Piwik_LatestReferrers::ENTRY_URL.'`,
action.name AS `'.Piwik_LatestReferrers::ENTRY_URL.'`,
COUNT(idvisit) AS `'.Piwik_LatestReferrers::OCCURRENCES.'`,
MAX(visit.visit_first_action_time) AS `'.Piwik_LatestReferrers::TIME.'`,
'.$select.'
FROM
'.Piwik_Common::prefixTable('log_visit').' AS visit
LEFT JOIN
'.Piwik_Common::prefixTable('log_action').' AS action
ON visit.visit_entry_idaction_url = action.idaction
WHERE
visit.idsite = '.intval($idSite).' AND
visit.referer_type = '.intval($type).'
GROUP BY
'.implode(', ', $group).'
'.$onlyNewSql.'
ORDER BY
`'.Piwik_LatestReferrers::TIME.'` DESC
LIMIT
0, 20
';
return $this->buildDataTableFromSql($sql);
}
/** Get latest new searches
* @return Piwik_DataTable */
public function getLatestNewSearches($idSite, $period, $date) {
$type = Piwik_Common::REFERER_TYPE_SEARCH_ENGINE;
return $this->getLatestLinks($idSite, $period, $date, true, $type);
}
/** Get latest searches
* @return Piwik_DataTable */
public function getLatestSearches($idSite, $period, $date) {
$type = Piwik_Common::REFERER_TYPE_SEARCH_ENGINE;
return $this->getLatestLinks($idSite, $period, $date, false, $type);
}
/** Build DataTable from sql
* @return Piwik_DataTable */
private function buildDataTableFromSql($sql, $bind=array()) {
$data = Piwik_FetchAll($sql, $bind);
return $this->buildDataTable($data);
}
/** Build DataTable from array
* @return Piwik_DataTable */
private function buildDataTable(&$data) {
$entryUrl = Piwik_LatestReferrers::ENTRY_URL;
$refUrl = Piwik_LatestReferrers::REFERRER_URL;
$dataTable = new Piwik_DataTable();
foreach ($data as &$row) {
// build data table row
$rowData = array(Piwik_DataTable_Row::COLUMNS => $row);
// add entry url
$rowData[Piwik_DataTable_Row::METADATA]['url'] = array(
$entryUrl => $row[$entryUrl]);
// add referrer url, if available
if (isset($row[$refUrl])) {
$rowData[Piwik_DataTable_Row::METADATA]['url'][$refUrl] = $row[$refUrl];
}
$dataTable->addRow(new Piwik_DataTable_Row($rowData));
}
return $dataTable;
}
}
?>