diff options
Diffstat (limited to 'plugins/VisitFrequency/API.php')
-rw-r--r-- | plugins/VisitFrequency/API.php | 137 |
1 files changed, 37 insertions, 100 deletions
diff --git a/plugins/VisitFrequency/API.php b/plugins/VisitFrequency/API.php index d712b67831..986489f8eb 100644 --- a/plugins/VisitFrequency/API.php +++ b/plugins/VisitFrequency/API.php @@ -15,8 +15,10 @@ */ class Piwik_VisitFrequency_API { - static private $instance = null; + const RETURNING_VISITOR_SEGMENT = "visitorType==returning"; + const COLUMN_SUFFIX = "_returning"; + static private $instance = null; static public function getInstance() { if (self::$instance == null) { @@ -27,113 +29,48 @@ class Piwik_VisitFrequency_API public function get($idSite, $period, $date, $segment = false, $columns = false) { - Piwik::checkUserHasViewAccess($idSite); - $archive = Piwik_Archive::build($idSite, $period, $date, $segment); - - // array values are comma separated - $columns = Piwik::getArrayFromApiParameter($columns); - $tempColumns = array(); - - $bounceRateReturningRequested = $averageVisitDurationReturningRequested = $actionsPerVisitReturningRequested = false; - if (!empty($columns)) { - // make sure base metrics are there for processed metrics - if (false !== ($bounceRateReturningRequested = array_search('bounce_rate_returning', $columns))) { - if (!in_array('nb_visits_returning', $columns)) $tempColumns[] = 'nb_visits_returning'; - if (!in_array('bounce_count_returning', $columns)) $tempColumns[] = 'bounce_count_returning'; - unset($columns[$bounceRateReturningRequested]); - } - if (false !== ($actionsPerVisitReturningRequested = array_search('nb_actions_per_visit_returning', $columns))) { - if (!in_array('nb_actions_returning', $columns)) $tempColumns[] = 'nb_actions_returning'; - if (!in_array('nb_visits_returning', $columns)) $tempColumns[] = 'nb_visits_returning'; - unset($columns[$actionsPerVisitReturningRequested]); - } - if (false !== ($averageVisitDurationReturningRequested = array_search('avg_time_on_site_returning', $columns))) { - if (!in_array('sum_visit_length_returning', $columns)) $tempColumns[] = 'sum_visit_length_returning'; - if (!in_array('nb_visits_returning', $columns)) $tempColumns[] = 'nb_visits_returning'; - unset($columns[$averageVisitDurationReturningRequested]); - } - - $tempColumns = array_unique($tempColumns); - $columns = array_merge($columns, $tempColumns); - } else { - $bounceRateReturningRequested = $averageVisitDurationReturningRequested = $actionsPerVisitReturningRequested = true; - $columns = array( - 'nb_visits_returning', - 'nb_actions_returning', - 'max_actions_returning', - 'sum_visit_length_returning', - 'bounce_count_returning', - 'nb_visits_converted_returning', - ); - - if ($period == 'day') { - $columns = array_merge(array('nb_uniq_visitors_returning'), $columns); - } - } - $dataTable = $archive->getDataTableFromNumeric($columns); - - // Process ratio metrics - if ($bounceRateReturningRequested !== false) { - $dataTable->filter('ColumnCallbackAddColumnPercentage', array('bounce_rate_returning', 'bounce_count_returning', 'nb_visits_returning', 0)); - } - if ($actionsPerVisitReturningRequested !== false) { - $dataTable->filter('ColumnCallbackAddColumnQuotient', array('nb_actions_per_visit_returning', 'nb_actions_returning', 'nb_visits_returning', 1)); - } - if ($averageVisitDurationReturningRequested !== false) { - $dataTable->filter('ColumnCallbackAddColumnQuotient', array('avg_time_on_site_returning', 'sum_visit_length_returning', 'nb_visits_returning', 0)); - } - - // remove temporary metrics that were used to compute processed metrics - $dataTable->deleteColumns($tempColumns); - - return $dataTable; + $segment = $this->appendReturningVisitorSegment($segment); + + $this->unprefixColumns($columns); + $params = array( + 'idSite' => $idSite, + 'period' => $period, + 'date' => $date, + 'segment' => $segment, + 'columns' => implode(',', $columns), + 'format' => 'original', + 'serialize' => 0 // tests set this to 1 + ); + $table = Piwik_API_Request::processRequest('VisitsSummary.get', $params); + $this->prefixColumns($table, $period); + return $table; } - protected function getNumeric($idSite, $period, $date, $toFetch) + protected function appendReturningVisitorSegment($segment) { - Piwik::checkUserHasViewAccess($idSite); - $archive = Piwik_Archive::build($idSite, $period, $date); - $dataTable = $archive->getNumeric($toFetch); - return $dataTable; - } - - /** - * @ignore - */ - public function getVisitsReturning($idSite, $period, $date) - { - return $this->getNumeric($idSite, $period, $date, 'nb_visits_returning'); - } - - /** - * @ignore - */ - public function getActionsReturning($idSite, $period, $date) - { - return $this->getNumeric($idSite, $period, $date, 'nb_actions_returning'); - } - - /** - * @ignore - */ - public function getSumVisitsLengthReturning($idSite, $period, $date) - { - return $this->getNumeric($idSite, $period, $date, 'sum_visit_length_returning'); + if (empty($segment)) { + $segment = ''; + } else { + $segment .= Piwik_SegmentExpression::AND_DELIMITER; + } + $segment .= self::RETURNING_VISITOR_SEGMENT; + return $segment; } - /** - * @ignore - */ - public function getBounceCountReturning($idSite, $period, $date) + protected function unprefixColumns(&$columns) { - return $this->getNumeric($idSite, $period, $date, 'bounce_count_returning'); + $columns = Piwik::getArrayFromApiParameter($columns); + foreach ($columns as &$column) { + $column = str_replace(self::COLUMN_SUFFIX, "", $column); + } } - /** - * @ignore - */ - public function getConvertedVisitsReturning($idSite, $period, $date) + protected function prefixColumns($table, $period) { - return $this->getNumeric($idSite, $period, $date, 'nb_visits_converted_returning'); + $rename = array(); + foreach (Piwik_VisitsSummary_API::getInstance()->getColumns($period) as $oldColumn) { + $rename[$oldColumn] = $oldColumn . self::COLUMN_SUFFIX; + } + $table->filter('ReplaceColumnNames', array($rename)); } } |