diff options
Diffstat (limited to 'plugins/Actions/Reports/Base.php')
-rw-r--r-- | plugins/Actions/Reports/Base.php | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/plugins/Actions/Reports/Base.php b/plugins/Actions/Reports/Base.php new file mode 100644 index 0000000000..c94cb33503 --- /dev/null +++ b/plugins/Actions/Reports/Base.php @@ -0,0 +1,118 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\Actions\Reports; + +use Piwik\Common; +use Piwik\MetricsFormatter; +use Piwik\Piwik; +use Piwik\Plugin\ViewDataTable; +use Piwik\Plugins\Actions\Actions; +use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable; +use Piwik\API\Request; + +abstract class Base extends \Piwik\Plugin\Report +{ + protected function init() + { + $this->category = 'General_Actions'; + } + + protected function addBaseDisplayProperties(ViewDataTable $view) + { + $view->config->datatable_js_type = 'ActionsDataTable'; + $view->config->search_recursive = true; + $view->config->show_table_all_columns = false; + $view->requestConfig->filter_limit = Actions::ACTIONS_REPORT_ROWS_DISPLAY; + $view->config->show_all_views_icons = false; + + if ($view->isViewDataTableId(HtmlTable::ID)) { + $view->config->show_embedded_subtable = true; + } + + if (Request::shouldLoadExpanded()) { + + if ($view->isViewDataTableId(HtmlTable::ID)) { + $view->config->show_expanded = true; + } + + $view->config->filters[] = function ($dataTable) { + Actions::setDataTableRowLevels($dataTable); + }; + } + + $view->config->filters[] = function ($dataTable) use ($view) { + if ($view->isViewDataTableId(HtmlTable::ID)) { + $view->config->datatable_css_class = 'dataTableActions'; + } + }; + } + + protected function addPageDisplayProperties(ViewDataTable $view) + { + $view->config->addTranslations(array( + 'nb_hits' => Piwik::translate('General_ColumnPageviews'), + 'nb_visits' => Piwik::translate('General_ColumnUniquePageviews'), + 'avg_time_on_page' => Piwik::translate('General_ColumnAverageTimeOnPage'), + 'bounce_rate' => Piwik::translate('General_ColumnBounceRate'), + 'exit_rate' => Piwik::translate('General_ColumnExitRate'), + 'avg_time_generation' => Piwik::translate('General_ColumnAverageGenerationTime'), + )); + + // prettify avg_time_on_page column + $getPrettyTimeFromSeconds = '\Piwik\MetricsFormatter::getPrettyTimeFromSeconds'; + $view->config->filters[] = array('ColumnCallbackReplace', array('avg_time_on_page', $getPrettyTimeFromSeconds)); + + // prettify avg_time_generation column + $avgTimeCallback = function ($time) { + return $time ? MetricsFormatter::getPrettyTimeFromSeconds($time, true, true, false) : "-"; + }; + $view->config->filters[] = array('ColumnCallbackReplace', array('avg_time_generation', $avgTimeCallback)); + + // add avg_generation_time tooltip + $tooltipCallback = function ($hits, $min, $max) { + if (!$hits) { + return false; + } + + return Piwik::translate("Actions_AvgGenerationTimeTooltip", array( + $hits, + "<br />", + MetricsFormatter::getPrettyTimeFromSeconds($min), + MetricsFormatter::getPrettyTimeFromSeconds($max) + )); + }; + $view->config->filters[] = array('ColumnCallbackAddMetadata', + array( + array('nb_hits_with_time_generation', 'min_time_generation', 'max_time_generation'), + 'avg_time_generation_tooltip', + $tooltipCallback + ) + ); + + $this->addExcludeLowPopDisplayProperties($view); + } + + protected function addExcludeLowPopDisplayProperties(ViewDataTable $view) + { + if (Common::getRequestVar('enable_filter_excludelowpop', '0', 'string') != '0') { + $view->requestConfig->filter_excludelowpop = 'nb_hits'; + $view->requestConfig->filter_excludelowpop_value = function () { + // computing minimum value to exclude (2 percent of the total number of actions) + $visitsInfo = \Piwik\Plugins\VisitsSummary\Controller::getVisitsSummary()->getFirstRow(); + $nbActions = $visitsInfo->getColumn('nb_actions'); + $nbActionsLowPopulationThreshold = floor(0.02 * $nbActions); + + // we remove 1 to make sure some actions/downloads are displayed in the case we have a very few of them + // and each of them has 1 or 2 hits... + return min($visitsInfo->getColumn('max_actions') - 1, $nbActionsLowPopulationThreshold - 1); + }; + } + } + +} |