diff options
author | BeezyT <timo@ezdesign.de> | 2011-11-09 22:07:25 +0400 |
---|---|---|
committer | BeezyT <timo@ezdesign.de> | 2011-11-09 22:07:25 +0400 |
commit | 820e604a34df00bada49218d04f6ba26db5c9699 (patch) | |
tree | fa661f2a931b2080cacf8adac3e8f33c9310b33c /plugins | |
parent | 33a126a06782669c787803c2d966ae115c4ee64f (diff) |
refs #1820 added metrics picker to more core reports. some language updates to make metrics consistent and short. new api methods for comparing metrics in Referers and VisitsSummary. minor tweaks.
git-svn-id: http://dev.piwik.org/svn/trunk@5421 59fd770c-687e-43c8-a1e3-f5a4ff64c105
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/CoreHome/templates/jqplot.js | 4 | ||||
-rw-r--r-- | plugins/Referers/API.php | 55 | ||||
-rw-r--r-- | plugins/Referers/Controller.php | 58 | ||||
-rw-r--r-- | plugins/VisitFrequency/API.php | 36 | ||||
-rw-r--r-- | plugins/VisitFrequency/Controller.php | 46 | ||||
-rw-r--r-- | plugins/VisitFrequency/VisitFrequency.php | 2 | ||||
-rw-r--r-- | plugins/VisitsSummary/API.php | 2 |
7 files changed, 149 insertions, 54 deletions
diff --git a/plugins/CoreHome/templates/jqplot.js b/plugins/CoreHome/templates/jqplot.js index 83c36dacb7..c238d34575 100644 --- a/plugins/CoreHome/templates/jqplot.js +++ b/plugins/CoreHome/templates/jqplot.js @@ -947,7 +947,9 @@ JQPlot.prototype = { // try to display popover to the right var margin = (parseInt(pickerLink.css('marginLeft'), 10) - 4); - if (margin + neededSpace < plotWidth) { + if (margin + neededSpace < plotWidth + // make sure it's not too far to the left + || margin - neededSpace + 60 < 0) { pickerPopover.css('marginLeft', margin + 'px').show(); } else { // display to the left diff --git a/plugins/Referers/API.php b/plugins/Referers/API.php index b61d2b151a..fc23849a32 100644 --- a/plugins/Referers/API.php +++ b/plugins/Referers/API.php @@ -54,6 +54,61 @@ class Piwik_Referers_API return $dataTable; } + /** + * This is a combined report that contains one row with the visits per referrer + * as columns. It is used internally to make comparing the referrers with the + * metrics picker possible. + */ + public function getVisitsPerRefererType($idSite, $period, $date, $segment=false) + { + $dataTable = $this->getRefererType($idSite, $period, $date, $segment); + + $isDataTableArray = $dataTable instanceof Piwik_DataTable_Array; + $result = new Piwik_DataTable_Array; + + if ($isDataTableArray) + { + $array = $dataTable->getArray(); + $result->metadata = $dataTable->metadata; + } + else + { + $array = array($dataTable); + } + + $rowBase = array( + 'nb_visits_'.Piwik_Common::REFERER_TYPE_DIRECT_ENTRY => 0, + 'nb_visits_'.Piwik_Common::REFERER_TYPE_SEARCH_ENGINE => 0, + 'nb_visits_'.Piwik_Common::REFERER_TYPE_WEBSITE => 0, + 'nb_visits_'.Piwik_Common::REFERER_TYPE_CAMPAIGN => 0 + ); + + foreach ($array as $tableIndex => $dataTable) + { + $newTable = new Piwik_DataTable; + $columns = $rowBase; + foreach ($dataTable->getRows() as $row) + { + $visits = $row->getColumn(Piwik_Archive::INDEX_NB_VISITS); + $refType = $row->getColumn('label'); + $label = 'nb_visits_'.$refType; + $columns[$label] = $visits; + } + $newTable->addRowFromArray(array( + Piwik_DataTable_Row::COLUMNS => $columns + )); + $result->addTable($newTable, $tableIndex); + } + + if (!$isDataTableArray) + { + $array = $result->getArray(); + $result = $array[0]; + } + + return $result; + } + public function getKeywords($idSite, $period, $date, $segment = false, $expanded = false) { $dataTable = $this->getDataTable('Referers_searchEngineByKeyword', $idSite, $period, $date, $segment, $expanded); diff --git a/plugins/Referers/Controller.php b/plugins/Referers/Controller.php index 5451744b0f..453feb504d 100644 --- a/plugins/Referers/Controller.php +++ b/plugins/Referers/Controller.php @@ -20,7 +20,7 @@ class Piwik_Referers_Controller extends Piwik_Controller { $view = Piwik_View::factory('index'); - $view->graphEvolutionReferers = $this->getEvolutionGraph(true, Piwik_Common::REFERER_TYPE_DIRECT_ENTRY, array('nb_visits')); + $view->graphEvolutionReferers = $this->getEvolutionGraph(true, Piwik_Common::REFERER_TYPE_DIRECT_ENTRY); $view->nameGraphEvolutionReferers = 'ReferersgetEvolutionGraph'; $view->numberDistinctSearchEngines = $this->getNumberOfDistinctSearchEngines(true); @@ -38,10 +38,10 @@ class Piwik_Referers_Controller extends Piwik_Controller $view->$name = $value; } // sparkline for the historical data of the above values - $view->urlSparklineSearchEngines = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_visits'), 'typeReferer' => Piwik_Common::REFERER_TYPE_SEARCH_ENGINE)); - $view->urlSparklineDirectEntry = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_visits'), 'typeReferer' => Piwik_Common::REFERER_TYPE_DIRECT_ENTRY)); - $view->urlSparklineWebsites = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_visits'), 'typeReferer' => Piwik_Common::REFERER_TYPE_WEBSITE)); - $view->urlSparklineCampaigns = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_visits'), 'typeReferer' => Piwik_Common::REFERER_TYPE_CAMPAIGN)); + $view->urlSparklineSearchEngines = $this->getUrlSparkline('getEvolutionGraph', array('typeReferer' => Piwik_Common::REFERER_TYPE_SEARCH_ENGINE)); + $view->urlSparklineDirectEntry = $this->getUrlSparkline('getEvolutionGraph', array('typeReferer' => Piwik_Common::REFERER_TYPE_DIRECT_ENTRY)); + $view->urlSparklineWebsites = $this->getUrlSparkline('getEvolutionGraph', array('typeReferer' => Piwik_Common::REFERER_TYPE_WEBSITE)); + $view->urlSparklineCampaigns = $this->getUrlSparkline('getEvolutionGraph', array('typeReferer' => Piwik_Common::REFERER_TYPE_CAMPAIGN)); // sparklines for the evolution of the distinct keywords count/websites count/ etc $view->urlSparklineDistinctSearchEngines = $this->getUrlSparkline('getLastDistinctSearchEnginesGraph'); @@ -246,36 +246,48 @@ class Piwik_Referers_Controller extends Piwik_Controller Piwik_Common::REFERER_TYPE_CAMPAIGN => 'Referers_Campaigns', ); - public function getEvolutionGraph( $fetch = false, $typeReferer = false, $columns = false) + public function getEvolutionGraph( $fetch = false, $typeReferer = false, $columns = array() ) { - $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, 'Referers.getRefererType'); - if(empty($typeReferer)) + $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, 'Referers.getVisitsPerRefererType'); + + $typeReferrerRequest = Piwik_Common::getRequestVar('typeReferer', false); + if ($typeReferrerRequest !== false) { - $typeReferer = Piwik_Common::getRequestVar('typeReferer'); + $typeReferer = $typeReferrerRequest; } + if(empty($columns)) { - $columns = Piwik_Common::getRequestVar('columns'); + $columns = Piwik_Common::getRequestVar('columns', false); + $columns = Piwik::getArrayFromApiParameter($columns); + } + + // if referrer type is set, transform it into the corresponding column name + if ($typeReferer !== false) + { + $columns[] = 'nb_visits_'.$typeReferer; } - $columns = !is_array($columns) ? array($columns) : $columns; + $view->setColumnsToDisplay($columns); - $view->setParametersToModify(array('typeReferer' => $typeReferer)); - foreach($columns as $columnName) + + $translations = array(); + $selectableColumns = array(); + foreach ($this->referrerTypeToLabel as $id => $langString) { - $columnTranslation = $view->getColumnTranslation($columnName); - $referrerTypeTranslation = $this->referrerTypeToLabel[$typeReferer]; - $view->setColumnTranslation( - $columnName, - Piwik_Translate('Referers_MetricsFromRefererTypeGraphLegend', - array( Piwik_Translate($columnTranslation), - Piwik_Translate($referrerTypeTranslation) - ) - ) - ); + $label = 'nb_visits_'.$id; + $selectableColumns[] = $label; + + $translations[$label] = Piwik_Translate('Referers_MetricsFromRefererTypeGraphLegend', + array(Piwik_Translate('General_ColumnNbVisits'), Piwik_Translate($langString))); } + + $view->setColumnsTranslations($translations); + $view->setSelectableColumns($selectableColumns); + $view->setReportDocumentation(Piwik_Translate('Referers_EvolutionDocumentation').'<br />' .Piwik_Translate('General_BrokenDownReportDocumentation').'<br />' .Piwik_Translate('Referers_EvolutionDocumentationMoreInfo', '"'.Piwik_Translate('Referers_DetailsByRefererType').'"')); + return $this->renderView($view, $fetch); } diff --git a/plugins/VisitFrequency/API.php b/plugins/VisitFrequency/API.php index d6212b4793..30e909de47 100644 --- a/plugins/VisitFrequency/API.php +++ b/plugins/VisitFrequency/API.php @@ -31,24 +31,35 @@ class Piwik_VisitFrequency_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(); $bounceRateReturningRequested = $averageVisitDurationReturningRequested = $actionsPerVisitReturningRequested = false; if(!empty($columns)) { - if(($bounceRateReturningRequested = array_search('bounce_rate_returning', $columns)) !== false) + // make sure base metrics are there for processed metrics + if(false !== ($bounceRateReturningRequested = array_search('bounce_rate_returning', $columns))) { - $columns = array('nb_visits_returning', 'bounce_count_returning'); + 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]); } - elseif(($actionsPerVisitReturningRequested = array_search('nb_actions_per_visit_returning', $columns)) !== false) + if(false !== ($actionsPerVisitReturningRequested = array_search('nb_actions_per_visit_returning', $columns))) { - $columns = array('nb_actions_returning', 'nb_visits_returning'); + 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]); } - elseif(($averageVisitDurationReturningRequested = array_search('avg_time_on_site_returning', $columns)) !== false) + if(false !== ($averageVisitDurationReturningRequested = array_search('avg_time_on_site_returning', $columns))) { - $columns = array('sum_visit_length_returning', 'nb_visits_returning'); + 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 { @@ -83,14 +94,9 @@ class Piwik_VisitFrequency_API $dataTable->filter('ColumnCallbackAddColumnQuotient', array('avg_time_on_site_returning', 'sum_visit_length_returning', 'nb_visits_returning', 0)); } - // If only a computed metrics was requested, we delete other metrics - // that we selected only to process this one metric - if($countColumnsRequested == 1 - && ($bounceRateReturningRequested || $averageVisitDurationReturningRequested || $actionsPerVisitReturningRequested) - ) - { - $dataTable->deleteColumns($columns); - } + // remove temporary metrics that were used to compute processed metrics + $dataTable->deleteColumns($tempColumns); + return $dataTable; } diff --git a/plugins/VisitFrequency/Controller.php b/plugins/VisitFrequency/Controller.php index 526dd9076b..d8339176ab 100644 --- a/plugins/VisitFrequency/Controller.php +++ b/plugins/VisitFrequency/Controller.php @@ -33,25 +33,45 @@ class Piwik_VisitFrequency_Controller extends Piwik_Controller public function getEvolutionGraph( $fetch = false, $columns = false) { - $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "VisitFrequency.get"); if(empty($columns)) { $columns = Piwik_Common::getRequestVar('columns'); + $columns = Piwik::getArrayFromApiParameter($columns); } - $view->setColumnsToDisplay($columns); - $view->setColumnsTranslations(array( - 'nb_visits_returning' => Piwik_Translate('VisitFrequency_ColumnReturningVisits'), - 'nb_actions_returning' => Piwik_Translate('VisitFrequency_ColumnActionsByReturningVisits'), - 'avg_time_on_site_returning' => Piwik_Translate('VisitFrequency_ColumnAverageVisitDurationForReturningVisitors'), - 'bounce_rate_returning' => Piwik_Translate('VisitFrequency_ColumnBounceRateForReturningVisits'), - 'nb_actions_per_visit_returning' => Piwik_Translate('VisitFrequency_ColumnAvgActionsPerReturningVisit'), - )); - $doc = Piwik_Translate('VisitFrequency_ReturningVisitsDocumentation').'<br />' - . Piwik_Translate('General_BrokenDownReportDocumentation').'<br />' - . Piwik_Translate('VisitFrequency_ReturningVisitDocumentation'); + $documentation = Piwik_Translate('VisitFrequency_ReturningVisitsDocumentation').'<br />' + . Piwik_Translate('General_BrokenDownReportDocumentation').'<br />' + . Piwik_Translate('VisitFrequency_ReturningVisitDocumentation'); - $view->setReportDocumentation($doc); + $selectableColumns = array( + // columns from VisitFrequency.get + 'nb_visits_returning', + 'nb_actions_returning', + 'nb_actions_per_visit_returning', + 'bounce_rate_returning', + 'avg_time_on_site_returning', + // columns from VisitsSummary.get + 'nb_visits', + 'nb_actions', + 'nb_actions_per_visit', + 'bounce_rate', + 'avg_time_on_site' + ); + + $period = Piwik_Common::getRequestVar('period', false); + if ($period == 'day') + { + // add number of unique (returning) visitors for period=day + $selectableColumns = array_merge( + array($selectableColumns[0]), + array('nb_uniq_visitors_returning'), + array_slice($selectableColumns, 1, -4), + array('nb_uniq_visitors'), + array_slice($selectableColumns, -4)); + } + + $view = $this->getLastUnitGraphAcrossPlugins($this->pluginName, __FUNCTION__, $columns, + $selectableColumns, $documentation); return $this->renderView($view, $fetch); } diff --git a/plugins/VisitFrequency/VisitFrequency.php b/plugins/VisitFrequency/VisitFrequency.php index d731a428be..74b5d54435 100644 --- a/plugins/VisitFrequency/VisitFrequency.php +++ b/plugins/VisitFrequency/VisitFrequency.php @@ -53,8 +53,8 @@ class Piwik_VisitFrequency extends Piwik_Plugin 'avg_time_on_site_returning' => Piwik_Translate('VisitFrequency_ColumnAverageVisitDurationForReturningVisitors'), 'bounce_rate_returning' => Piwik_Translate('VisitFrequency_ColumnBounceRateForReturningVisits'), 'nb_actions_per_visit_returning' => Piwik_Translate('VisitFrequency_ColumnAvgActionsPerReturningVisit'), + 'nb_uniq_visitors_returning' => Piwik_Translate('VisitFrequency_ColumnUniqueReturningVisitors'), // Not displayed -// 'nb_uniq_visitors_returning', // 'nb_visits_converted_returning', // 'sum_visit_length_returning', // 'max_actions_returning', diff --git a/plugins/VisitsSummary/API.php b/plugins/VisitsSummary/API.php index 1063c29e7b..28495d9a45 100644 --- a/plugins/VisitsSummary/API.php +++ b/plugins/VisitsSummary/API.php @@ -41,7 +41,7 @@ class Piwik_VisitsSummary_API $tempColumns = array(); $bounceRateRequested = $actionsPerVisitRequested = $averageVisitDurationRequested = false; - if($subsetOfColumns = !empty($columns)) + if(!empty($columns)) { // make sure base metrics are there for processed metrics if(false !== ($bounceRateRequested = array_search('bounce_rate', $columns))) |