/**
  * 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);
 }