blob: fd6c1dcc8b233bf551e64e590740813e9ac4df2a (
plain)
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
|
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
* @category Piwik_Plugins
* @package Piwik_VisitTime
*/
use Piwik\Date;
use Piwik\PluginsArchiver;
class Piwik_VisitTime_Archiver extends PluginsArchiver
{
const SERVER_TIME_RECORD_NAME = 'VisitTime_serverTime';
const LOCAL_TIME_RECORD_NAME = 'VisitTime_localTime';
public function archiveDay()
{
$this->aggregateByLocalTime();
$this->aggregateByServerTime();
}
protected function aggregateByServerTime()
{
$array = $this->getProcessor()->getMetricsForDimension( array("label" => "HOUR(log_visit.visit_last_action_time)" )) ;
$query = $this->getLogAggregator()->queryConversionsByDimension( array("label" => "HOUR(log_conversion.server_time)") );
if ($query === false) {
return;
}
while ($row = $query->fetch()) {
$array->sumMetricsGoals($row['label'], $row);
}
$array->enrichMetricsWithConversions();
$array = $this->convertTimeToLocalTimezone($array);
$this->ensureAllHoursAreSet($array);
$this->getProcessor()->insertBlobRecord(self::SERVER_TIME_RECORD_NAME, $this->getProcessor()->getDataTableFromDataArray($array)->getSerialized());
}
protected function aggregateByLocalTime()
{
$array = $this->getProcessor()->getMetricsForDimension("HOUR(log_visit.visitor_localtime)");
$this->ensureAllHoursAreSet($array);
$this->getProcessor()->insertBlobRecord(self::LOCAL_TIME_RECORD_NAME, $this->getProcessor()->getDataTableFromDataArray($array)->getSerialized());
}
protected function convertTimeToLocalTimezone(Piwik_DataArray &$array)
{
$date = Date::factory($this->getProcessor()->getDateStart()->getDateStartUTC())->toString();
$timezone = $this->getProcessor()->getSite()->getTimezone();
$converted = array();
foreach ($array->getDataArray() as $hour => $stats) {
$datetime = $date . ' ' . $hour . ':00:00';
$hourInTz = (int)Date::factory($datetime, $timezone)->toString('H');
$converted[$hourInTz] = $stats;
}
return new Piwik_DataArray($converted);
}
private function ensureAllHoursAreSet( Piwik_DataArray &$array)
{
$data = $array->getDataArray();
for ($i = 0; $i <= 23; $i++) {
if (empty($data[$i])) {
$array->sumMetricsVisits( $i, Piwik_DataArray::makeEmptyRow());
}
}
}
public function archivePeriod()
{
$dataTableToSum = array(
self::LOCAL_TIME_RECORD_NAME,
self::SERVER_TIME_RECORD_NAME,
);
$this->getProcessor()->aggregateDataTableReports($dataTableToSum);
}
}
|