diff options
author | BeezyT <timo@ezdesign.de> | 2011-11-04 18:03:56 +0400 |
---|---|---|
committer | BeezyT <timo@ezdesign.de> | 2011-11-04 18:03:56 +0400 |
commit | f7a2ffc3daae339b3d7bdcb6fb477cc8d3ff5600 (patch) | |
tree | ad34e24d200f54e94f15edeb8d485ba624a49608 /plugins/VisitsSummary/API.php | |
parent | 460264a9003701acce15251c52867a63fa021a7a (diff) |
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
Diffstat (limited to 'plugins/VisitsSummary/API.php')
-rw-r--r-- | plugins/VisitsSummary/API.php | 88 |
1 files changed, 23 insertions, 65 deletions
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 ) |