/** * get the extra data for an overview, can be overridden * * @return array */ protected function getExtra(AnalyticsOverview $overview) { $extra = array(); // add segment if ($overview->getSegment()) { $extra['segment'] = $overview->getSegment()->getQuery(); } return $extra; }
/** * get data and save it for the overview * * @param AnalyticsOverview $overview The overview */ public function getData(&$overview) { $this->output->writeln("\t" . 'Fetching goals..'); // calculate timespan $timespan = $overview->getTimespan() - $overview->getStartOffset(); if ($timespan <= 1) { $extra = array('dimensions' => 'ga:date,ga:hour'); $start = 2; } else { if ($timespan <= 7) { $extra = array('dimensions' => 'ga:date,ga:hour'); $start = 2; } else { if ($timespan <= 31) { $extra = array('dimensions' => 'ga:week,ga:day,ga:date'); $start = 3; } else { $extra = array('dimensions' => 'ga:isoYearIsoWeek'); $start = 1; } } } // add segment if ($overview->getSegment()) { $extra['segment'] = $overview->getSegment()->getQuery(); } $goals = $this->getAllGoals(); if (!$goals) { return; } $goaldata = array(); // Create an array with for each goal an entry to create the metric parameter. foreach ($goals as $key => $value) { $key++; $goaldata[] = array('position' => $key, 'name' => $value->name); } $metrics = $this->prepareMetrics(); $rows = $this->requestGoalResults($overview, $metrics[0], $extra); // Execute an extra query if there are more than 10 goals to query if (sizeof($metrics) > 1) { $rows2 = $this->requestGoalResults($overview, $metrics[1], $extra); $rows2size = sizeof($rows2); for ($i = 0; $i < $rows2size; $i++) { // Merge the results of the extra query data with the previous query data. $rows[$i] = array_merge($rows[$i], array_slice($rows2[$i], $start, sizeof($rows2) - $start)); } } // Create a result array to be parsed and create Goal objects from $goalCollection = array(); $goaldatasize = sizeof($goaldata); for ($i = 0; $i < $goaldatasize; $i++) { $goalEntry = array(); foreach ($rows as $row) { // Create a timestamp for each goal visit (this depends on the timespan of the overview: split per hour, day, week, month) if ($timespan <= 1) { $timestamp = mktime($row[1], 0, 0, substr($row[0], 4, 2), substr($row[0], 6, 2), substr($row[0], 0, 4)); $timestamp = date('Y-m-d H:00', $timestamp); } else { if ($timespan <= 7) { $timestamp = mktime($row[1], 0, 0, substr($row[0], 4, 2), substr($row[0], 6, 2), substr($row[0], 0, 4)); $timestamp = date('Y-m-d H:00', $timestamp); } else { if ($timespan <= 31) { $timestamp = mktime(0, 0, 0, substr($row[2], 4, 2), substr($row[2], 6, 2), substr($row[2], 0, 4)); $timestamp = date('Y-m-d H:00', $timestamp); } else { $timestamp = strtotime(substr($row[0], 0, 4) . 'W' . substr($row[0], 4, 2)); $timestamp = date('Y-m-d H:00', $timestamp); } } } $goalEntry[$timestamp] = $row[$i + $start]; } $goalCollection['goal' . $goaldata[$i]['position']]['name'] = $goaldata[$i]['name']; $goalCollection['goal' . $goaldata[$i]['position']]['position'] = $goaldata[$i]['position']; $goalCollection['goal' . $goaldata[$i]['position']]['visits'] = $goalEntry; } // Parse the goals and append them to the overview. $this->parseGoals($overview, $goalCollection); }