Exemplo n.º 1
0
 /**
  * Hooks on Period archiving.
  * Sums up Goal conversions stats, and processes overall conversion rate
  *
  * @param Piwik_Event_Notification $notification
  * @return void
  */
 function archivePeriod($notification)
 {
     /**
      * @var Piwik_ArchiveProcessing 
      */
     $archiveProcessing = $notification->getNotificationObject();
     if (!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) {
         return;
     }
     /*
      * Archive Ecommerce Items
      */
     if ($this->shouldArchiveEcommerceItems($archiveProcessing)) {
         $dataTableToSum = $this->dimensions;
         foreach ($this->dimensions as $recordName) {
             $dataTableToSum[] = self::getItemRecordNameAbandonedCart($recordName);
         }
         $archiveProcessing->archiveDataTable($dataTableToSum);
     }
     /*
      *  Archive General Goal metrics
      */
     $goalIdsToSum = Piwik_Tracker_GoalManager::getGoalIds($archiveProcessing->idsite);
     //Ecommerce
     $goalIdsToSum[] = Piwik_Tracker_GoalManager::IDGOAL_ORDER;
     $goalIdsToSum[] = Piwik_Tracker_GoalManager::IDGOAL_CART;
     //bug here if idgoal=1
     // Overall goal metrics
     $goalIdsToSum[] = false;
     $fieldsToSum = array();
     foreach ($goalIdsToSum as $goalId) {
         $metricsToSum = Piwik_Goals::getGoalColumns($goalId);
         unset($metricsToSum[array_search('conversion_rate', $metricsToSum)]);
         foreach ($metricsToSum as $metricName) {
             $fieldsToSum[] = self::getRecordName($metricName, $goalId);
         }
     }
     $records = $archiveProcessing->archiveNumericValuesSum($fieldsToSum);
     // also recording conversion_rate for each goal
     foreach ($goalIdsToSum as $goalId) {
         $nb_conversions = $records[self::getRecordName('nb_visits_converted', $goalId)];
         $conversion_rate = $this->getConversionRate($nb_conversions, $archiveProcessing);
         $archiveProcessing->insertNumericRecord(self::getRecordName('conversion_rate', $goalId), $conversion_rate);
         // sum up the visits to conversion data table & the days to conversion data table
         $archiveProcessing->archiveDataTable(array(self::getRecordName(self::VISITS_UNTIL_RECORD_NAME, $goalId), self::getRecordName(self::DAYS_UNTIL_CONV_RECORD_NAME, $goalId)));
     }
     // sum up goal overview reports
     $archiveProcessing->archiveDataTable(array(self::getRecordName(self::VISITS_UNTIL_RECORD_NAME), self::getRecordName(self::DAYS_UNTIL_CONV_RECORD_NAME)));
 }
Exemplo n.º 2
0
 /**
  * Returns Goals data
  *
  * @param int $idSite
  * @param string $period
  * @param string $date
  * @param bool $segment
  * @param bool|int $idGoal
  * @param array $columns Array of metrics to fetch: nb_conversions, conversion_rate, revenue
  * @return Piwik_DataTable
  */
 public function get($idSite, $period, $date, $segment = false, $idGoal = false, $columns = array())
 {
     Piwik::checkUserHasViewAccess($idSite);
     $archive = Piwik_Archive::build($idSite, $period, $date, $segment);
     $columns = Piwik::getArrayFromApiParameter($columns);
     // Mapping string idGoal to internal ID
     $idGoal = self::convertSpecialGoalIds($idGoal);
     if (empty($columns)) {
         $columns = Piwik_Goals::getGoalColumns($idGoal);
         if ($idGoal == Piwik_Archive::LABEL_ECOMMERCE_ORDER) {
             $columns[] = 'avg_order_revenue';
         }
     }
     if (in_array('avg_order_revenue', $columns) && $idGoal == Piwik_Archive::LABEL_ECOMMERCE_ORDER) {
         $columns[] = 'nb_conversions';
         $columns[] = 'revenue';
         $columns = array_values(array_unique($columns));
     }
     $columnsToSelect = array();
     foreach ($columns as &$columnName) {
         $columnsToSelect[] = Piwik_Goals::getRecordName($columnName, $idGoal);
     }
     $dataTable = $archive->getDataTableFromNumeric($columnsToSelect);
     // Rewrite column names as we expect them
     foreach ($columnsToSelect as $id => $oldName) {
         $dataTable->renameColumn($oldName, $columns[$id]);
     }
     if ($idGoal == Piwik_Archive::LABEL_ECOMMERCE_ORDER) {
         if ($dataTable instanceof Piwik_DataTable_Array) {
             foreach ($dataTable->getArray() as $row) {
                 $this->enrichTable($row);
             }
         } else {
             $this->enrichTable($dataTable);
         }
     }
     return $dataTable;
 }