From f7a2ffc3daae339b3d7bdcb6fb477cc8d3ff5600 Mon Sep 17 00:00:00 2001 From: BeezyT Date: Fri, 4 Nov 2011 14:03:56 +0000 Subject: refs #1820 metrics picker, refs #1454 using Api.get for cross-plugin evolution graphs git-svn-id: http://dev.piwik.org/svn/trunk@5408 59fd770c-687e-43c8-a1e3-f5a4ff64c105 --- plugins/VisitsSummary/API.php | 88 +++++++++------------------------ plugins/VisitsSummary/Controller.php | 30 ++++++----- plugins/VisitsSummary/VisitsSummary.php | 6 --- 3 files changed, 37 insertions(+), 87 deletions(-) (limited to 'plugins/VisitsSummary') diff --git a/plugins/VisitsSummary/API.php b/plugins/VisitsSummary/API.php index f4b2c8228c..1063c29e7b 100644 --- a/plugins/VisitsSummary/API.php +++ b/plugins/VisitsSummary/API.php @@ -35,28 +35,36 @@ class Piwik_VisitsSummary_API { Piwik::checkUserHasViewAccess( $idSite ); $archive = Piwik_Archive::build($idSite, $period, $date, $segment ); - + // array values are comma separated $columns = Piwik::getArrayFromApiParameter($columns); - $countColumnsRequested = count($columns); + $tempColumns = array(); - $allColumns = true; $bounceRateRequested = $actionsPerVisitRequested = $averageVisitDurationRequested = false; - if(!empty($columns)) + if($subsetOfColumns = !empty($columns)) { - $allColumns = false; - if(($bounceRateRequested = array_search('bounce_rate', $columns)) !== false) + // make sure base metrics are there for processed metrics + if(false !== ($bounceRateRequested = array_search('bounce_rate', $columns))) { - $columns = array('nb_visits', 'bounce_count'); + if (!in_array('nb_visits', $columns)) $tempColumns[] = 'nb_visits'; + if (!in_array('bounce_count', $columns)) $tempColumns[] = 'bounce_count'; + unset($columns[$bounceRateRequested]); } - elseif(($actionsPerVisitRequested = array_search('nb_actions_per_visit', $columns)) !== false) + if(false !== ($actionsPerVisitRequested = array_search('nb_actions_per_visit', $columns))) { - $columns = array('nb_actions', 'nb_visits'); + if (!in_array('nb_actions', $columns)) $tempColumns[] = 'nb_actions'; + if (!in_array('nb_visits', $columns)) $tempColumns[] = 'nb_visits'; + unset($columns[$actionsPerVisitRequested]); } - elseif(($averageVisitDurationRequested = array_search('avg_time_on_site', $columns)) !== false) + if(false !== ($averageVisitDurationRequested = array_search('avg_time_on_site', $columns))) { - $columns = array('sum_visit_length', 'nb_visits'); + if (!in_array('sum_visit_length', $columns)) $tempColumns[] = 'sum_visit_length'; + if (!in_array('nb_visits', $columns)) $tempColumns[] = 'nb_visits'; + unset($columns[$averageVisitDurationRequested]); } + + $tempColumns = array_unique($tempColumns); + $columns = array_merge($columns, $tempColumns); } else { @@ -77,7 +85,7 @@ class Piwik_VisitsSummary_API // Force reindex from 0 to N otherwise the SQL bind will fail $columns = array_values($columns); } - + $dataTable = $archive->getDataTableFromNumeric($columns); // Process ratio metrics from base metrics, when requested @@ -94,60 +102,10 @@ class Piwik_VisitsSummary_API $dataTable->filter('ColumnCallbackAddColumnQuotient', array('avg_time_on_site', 'sum_visit_length', 'nb_visits', 0)); } - // If only a computed metrics was requested, we delete other metrics - // that we selected only to process this one metric - if($countColumnsRequested == 1 - && ($bounceRateRequested || $actionsPerVisitRequested || $averageVisitDurationRequested) - ) - { - $dataTable->deleteColumns($columns); - } - return $dataTable; - } - - /** - * merge the columns of two data tables - * used to add the action counts to the visits summary - * manipulates the first table - */ - private function mergeDataTables($table1, $table2, $allColumns=true, $columns=array()) - { - // handle table arrays - if ($table1 instanceof Piwik_DataTable_Array && $table2 instanceof Piwik_DataTable_Array) - { - $subTables2 = $table2->getArray(); - foreach ($table1->getArray() as $index => $subTable1) - { - $subTable2 = $subTables2[$index]; - $this->mergeDataTables($subTable1, $subTable2); - } - return; - } - - $firstRow2 = $table2->getFirstRow(); - if (!$firstRow2) - { - // nothing to add - return; - } + // remove temp metrics that were used to compute processed metrics + $dataTable->deleteColumns($tempColumns); - $firstRow1 = $table1->getFirstRow(); - if (!$firstRow1) - { - // first table has no row yet - $firstRow1 = new Piwik_DataTable_Row; - $table1->addRow($firstRow1); - } - - foreach ($firstRow2->getColumns() as $metric => $value) - { - if (!$allColumns && !in_array($metric, $columns)) - { - // only add the columns that have been requested - continue; - } - $firstRow1->setColumn($metric, $value); - } + return $dataTable; } protected function getNumeric( $idSite, $period, $date, $segment, $toFetch ) diff --git a/plugins/VisitsSummary/Controller.php b/plugins/VisitsSummary/Controller.php index fb634addb0..8465be2e19 100644 --- a/plugins/VisitsSummary/Controller.php +++ b/plugins/VisitsSummary/Controller.php @@ -20,7 +20,8 @@ class Piwik_VisitsSummary_Controller extends Piwik_Controller { $view = Piwik_View::factory('index'); $this->setPeriodVariablesView($view); - $view->graphEvolutionVisitsSummary = $this->getEvolutionGraph( true, array('nb_visits', 'nb_uniq_visitors') ); + $view->graphEvolutionVisitsSummary = $this->getEvolutionGraph( true, + array('VisitsSummary.nb_visits', 'VisitsSummary.nb_uniq_visitors') ); $this->setSparklinesAndNumbers($view); echo $view->render(); } @@ -33,17 +34,13 @@ class Piwik_VisitsSummary_Controller extends Piwik_Controller echo $view->render(); } - public function getEvolutionGraph( $fetch = false, $columns = false) + public function getEvolutionGraph( $fetch = false, $columns = false ) { - $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "VisitsSummary.get"); if(empty($columns)) { $columns = Piwik_Common::getRequestVar('columns'); + $columns = Piwik::getArrayFromApiParameter($columns); } - $view->setColumnsToDisplay($columns); - - $meta = Piwik_API_API::getInstance()->getMetadata(false, 'VisitsSummary', 'get'); - $view->setColumnsTranslations($meta[0]['metrics']); $doc = Piwik_Translate('VisitsSummary_VisitsSummaryDocumentation').'
' . Piwik_Translate('General_BrokenDownReportDocumentation').'

' @@ -60,7 +57,8 @@ class Piwik_VisitsSummary_Controller extends Piwik_Controller . ''.Piwik_Translate('General_ColumnActionsPerVisit').': ' . Piwik_Translate('General_ColumnActionsPerVisitDocumentation'); - $view->setReportDocumentation($doc); + $view = $this->getLastUnitGraphAcrossPlugins($this->pluginName, __FUNCTION__, $columns, + $selectableColumns = array('VisitsSummary.*', 'Actions.*'), $doc); return $this->renderView($view, $fetch); } @@ -87,14 +85,14 @@ class Piwik_VisitsSummary_Controller extends Piwik_Controller protected function setSparklinesAndNumbers($view) { - $view->urlSparklineNbVisits = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => $view->displayUniqueVisitors ? array('nb_visits', 'nb_uniq_visitors') : array('nb_visits'))); - $view->urlSparklineNbPageviews = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('nb_pageviews', 'nb_uniq_pageviews'))); - $view->urlSparklineNbDownloads = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('nb_downloads', 'nb_uniq_downloads'))); - $view->urlSparklineNbOutlinks = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('nb_outlinks', 'nb_uniq_outlinks'))); - $view->urlSparklineAvgVisitDuration = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('avg_time_on_site'))); - $view->urlSparklineMaxActions = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('max_actions'))); - $view->urlSparklineActionsPerVisit = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('nb_actions_per_visit'))); - $view->urlSparklineBounceRate = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('bounce_rate'))); + $view->urlSparklineNbVisits = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => $view->displayUniqueVisitors ? array('VisitsSummary.nb_visits', 'VisitsSummary.nb_uniq_visitors') : array('VisitsSummary.nb_visits'))); + $view->urlSparklineNbPageviews = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('Actions.nb_pageviews', 'Actions.nb_uniq_pageviews'))); + $view->urlSparklineNbDownloads = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('Actions.nb_downloads', 'Actions.nb_uniq_downloads'))); + $view->urlSparklineNbOutlinks = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('Actions.nb_outlinks', 'Actions.nb_uniq_outlinks'))); + $view->urlSparklineAvgVisitDuration = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('VisitsSummary.avg_time_on_site'))); + $view->urlSparklineMaxActions = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('VisitsSummary.max_actions'))); + $view->urlSparklineActionsPerVisit = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('VisitsSummary.nb_actions_per_visit'))); + $view->urlSparklineBounceRate = $this->getUrlSparkline( 'getEvolutionGraph', array('columns' => array('VisitsSummary.bounce_rate'))); $dataTableVisit = self::getVisitsSummary(); $dataRow = $dataTableVisit->getFirstRow(); diff --git a/plugins/VisitsSummary/VisitsSummary.php b/plugins/VisitsSummary/VisitsSummary.php index 9d8cd04872..20303a27da 100644 --- a/plugins/VisitsSummary/VisitsSummary.php +++ b/plugins/VisitsSummary/VisitsSummary.php @@ -54,12 +54,6 @@ class Piwik_VisitsSummary extends Piwik_Plugin 'nb_actions', 'nb_actions_per_visit', 'bounce_rate', - 'nb_pageviews' => Piwik_Translate('General_ColumnPageviews'), - 'nb_uniq_pageviews' => Piwik_Translate('General_ColumnUniquePageviews'), - 'nb_downloads' => Piwik_Translate('Actions_ColumnDownloads'), - 'nb_uniq_downloads' => Piwik_Translate('Actions_ColumnUniqueDownloads'), - 'nb_outlinks' => Piwik_Translate('Actions_ColumnOutlinks'), - 'nb_uniq_outlinks' => Piwik_Translate('Actions_ColumnUniqueOutlinks'), 'avg_time_on_site' => Piwik_Translate('General_VisitDuration'), 'max_actions' => Piwik_Translate('General_ColumnMaxActions'), // Used to process metrics, not displayed/used directly -- cgit v1.2.3