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
|
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\VisitTime\DataTable\Filter;
use Piwik\DataTable;
use Piwik\Period;
/**
* Adds a segment value to each row by interpreting the label value as hour in the website's timezone and
* converting the hour to UTC.
*
* **Basic usage example**
*
* $dataTable->filter('AddSegmentByLabelInUTC', array($idSite = 'UTC+1', $period = 'day', $date = 'today');
*/
class AddSegmentByLabelInUTC extends DataTable\Filter\AddSegmentValue
{
private $timezone;
private $date;
/**
* @param DataTable $table
* @param int $timezone The timezone of the current selected site / the timezone of the labels
* @param string $period The requested period and date is needed to respect daylight saving etc.
* @param string $date
*/
public function __construct($table, $timezone, $period, $date)
{
$this->timezone = $timezone;
$this->date = Period\Factory::build($period, $date)->getDateEnd();
$self = $this;
parent::__construct($table, function ($label) use ($self) {
$hour = str_pad($label, 2, 0, STR_PAD_LEFT);
return $self->convertHourToUtc($hour);
});
}
public function convertHourToUTC($hour)
{
$dateWithHour = $this->date->setTime($hour . ':00:00');
$dateInTimezone = $dateWithHour->setTimezone($this->timezone);
$hourInUTC = $dateInTimezone->getHourUTC();
return $hourInUTC;
}
}
|