Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/VisitFrequency/API.php')
-rw-r--r--plugins/VisitFrequency/API.php137
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));
}
}