getDateStart(); } catch (\Exception $e) { // ignore any error eg if values are wrong... } } $timezone = Site::getTimezoneFor($idSite); $datetime = $date->toString() . ' ' . $hour . ':00:00'; $hourInTz = (int)Date::factory($datetime, $timezone)->toString('H'); return $hourInTz; } public function formatValue($value, $idSite, Formatter $formatter) { $hourInTz = self::convertHourToHourInSiteTimezone($value, $idSite); return \Piwik\Plugins\VisitTime\getTimeLabel($hourInTz); } // we do not install or define column definition here as we need to create this column when installing as there is // an index on it. Currently we do not define the index here... although we could overwrite the install() method // and add column 'visit_last_action_time' and add index. Problem is there is also an index // INDEX(idsite, config_id, visit_last_action_time) and we maybe not be sure whether idsite already exists at // installing point (we do not know whether idsite column will be added first). /** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return mixed */ public function onNewVisit(Request $request, Visitor $visitor, $action) { return Date::getDatetimeFromTimestamp($request->getCurrentTimestamp()); } /** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return mixed */ public function onExistingVisit(Request $request, Visitor $visitor, $action) { if ($request->getParam('ping') == 1) { return false; } $originalVisitLastActionTime = $visitor->getPreviousVisitColumn('visit_last_action_time'); if (!empty($originalVisitLastActionTime) && Date::factory($originalVisitLastActionTime)->getTimestamp() > $request->getCurrentTimestamp()) { // make sure to not set visit_last_action_time to an earlier time eg if tracking requests aren't sent in order return $originalVisitLastActionTime; } return $this->onNewVisit($request, $visitor, $action); } }