aggregateByLocalTime(); $this->aggregateByServerTime(); } public function aggregateMultipleReports() { $dataTableRecords = array( self::LOCAL_TIME_RECORD_NAME, self::SERVER_TIME_RECORD_NAME, ); $columnsAggregationOperation = null; $this->getProcessor()->aggregateDataTableRecords( $dataTableRecords, $maximumRowsInDataTableLevelZero = null, $maximumRowsInSubDataTable = null, $columnToSortByBeforeTruncation = null, $columnsAggregationOperation, $columnsToRenameAfterAggregation = null, $countRowsRecursive = array()); } protected function aggregateByServerTime() { $dataArray = $this->getLogAggregator()->getMetricsFromVisitByDimension(array("label" => "HOUR(log_visit.visit_first_action_time)")); $query = $this->getLogAggregator()->queryConversionsByDimension(array("label" => "HOUR(log_conversion.server_time)")); if ($query === false) { return; } while ($conversionRow = $query->fetch()) { $dataArray->sumMetricsGoals($conversionRow['label'], $conversionRow); } $dataArray->enrichMetricsWithConversions(); $dataArray = $this->convertTimeToLocalTimezone($dataArray); $this->ensureAllHoursAreSet($dataArray); $report = $dataArray->asDataTable()->getSerialized(); $this->getProcessor()->insertBlobRecord(self::SERVER_TIME_RECORD_NAME, $report); } protected function aggregateByLocalTime() { $array = $this->getLogAggregator()->getMetricsFromVisitByDimension("HOUR(log_visit.visitor_localtime)"); $this->ensureAllHoursAreSet($array); $report = $array->asDataTable()->getSerialized(); $this->getProcessor()->insertBlobRecord(self::LOCAL_TIME_RECORD_NAME, $report); } protected function convertTimeToLocalTimezone(DataArray &$array) { $date = Date::factory($this->getProcessor()->getParams()->getDateStart()->getDateStartUTC())->toString(); $timezone = $this->getProcessor()->getParams()->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 DataArray($converted); } private function ensureAllHoursAreSet(DataArray &$array) { $data = $array->getDataArray(); for ($i = 0; $i <= 23; $i++) { if (empty($data[$i])) { $array->sumMetricsVisits($i, DataArray::makeEmptyRow()); } } } }