/** * @param DataTable $table */ public function filter($table) { $userId = new UserId(); if (!$userId->hasDataTableUsers($table) && !$userId->isUsedInAtLeastOneSite(array($this->idSite), $this->period, $this->date)) { $table->deleteColumn(Metrics::INDEX_NB_USERS); } }
public function enrichProcessedReportIfVisitsSummaryGet(&$response, $infos) { if (empty($infos['parameters'][4]) || empty($response['reportData'])) { return; } $params = $infos['parameters']; $idSites = array($params[0]); $period = $params[1]; $date = $params[2]; $module = $params[3]; $method = $params[4]; if (!$this->isRequestingVisitsSummaryGet($module, $method)) { return; } $userId = new UserId(); /** @var DataTable|DataTable\Map $dataTable */ $dataTable = $response['reportData']; if (!$userId->hasDataTableUsers($dataTable) && !$userId->isUsedInAtLeastOneSite($idSites, $period, $date)) { $report = new Get(); $report->removeUsersFromProcessedReport($response); } }
/** * Here you can configure how your report should be displayed. For instance whether your report supports a search * etc. You can also change the default request config. For instance change how many rows are displayed by default. * * @param ViewDataTable $view */ public function configureView(ViewDataTable $view) { $idDimension = Common::getRequestVar('idDimension', 0, 'int'); if ($idDimension < 1) { return; } $isWidget = Common::getRequestVar('widget', 0, 'int'); $module = Common::getRequestVar('module', '', 'string'); if ($isWidget && $module !== 'Widgetize' && $view->isViewDataTableId(HtmlTable::ID)) { // we disable row evolution as it would not forward the idDimension when requesting the row evolution // this is a limitation in row evolution $view->config->disable_row_evolution = true; } $module = $view->requestConfig->getApiModuleToRequest(); $method = $view->requestConfig->getApiMethodToRequest(); $idReport = sprintf('%s_%s_idDimension--%d', $module, $method, $idDimension); if ($view->requestConfig->idSubtable) { $view->config->addTranslation('label', Piwik::translate('Actions_ColumnActionURL')); } elseif (!empty($this->dimension)) { $view->config->addTranslation('label', $this->dimension->getName()); } $view->requestConfig->request_parameters_to_modify['idDimension'] = $idDimension; $view->requestConfig->request_parameters_to_modify['reportUniqueId'] = $idReport; $view->config->custom_parameters['scopeOfDimension'] = $this->scopeOfDimension; if ($this->scopeOfDimension === CustomDimensions::SCOPE_VISIT) { // Goal metrics for each custom dimension of 'visit' scope is processed in Archiver via aggregateFromConversions $view->config->show_goals = true; $view->config->columns_to_display = array('label', 'nb_visits', 'nb_uniq_visitors', 'nb_users', 'nb_actions', 'nb_actions_per_visit', 'avg_time_on_site', 'bounce_rate'); $view->config->filters[] = function (DataTable $table) use($view) { $userId = new UserId(); if (!$userId->hasDataTableUsers($table)) { $view->config->removeColumnToDisplay('nb_users'); } if ($table->getRowsCount() > 0 && !$table->getFirstRow()->hasColumn('nb_uniq_visitors')) { $view->config->removeColumnToDisplay('nb_uniq_visitors'); } }; } elseif ($this->scopeOfDimension === CustomDimensions::SCOPE_ACTION) { $view->config->columns_to_display = array('label', 'nb_hits', 'nb_visits', 'bounce_rate', 'avg_time_on_dimension', 'exit_rate', 'avg_time_generation'); $formatter = new Metrics\Formatter(); // add avg_generation_time tooltip $tooltipCallback = function ($hits, $min, $max) use($formatter) { if (!$hits) { return false; } return Piwik::translate("Actions_AvgGenerationTimeTooltip", array($hits, "<br />", $formatter->getPrettyTimeFromSeconds($min, true), $formatter->getPrettyTimeFromSeconds($max, true))); }; $view->config->filters[] = array('ColumnCallbackAddMetadata', array(array('nb_hits_with_time_generation', 'min_time_generation', 'max_time_generation'), 'avg_time_generation_tooltip', $tooltipCallback)); } $view->config->show_table_all_columns = false; }
private function addSparklineColumns(Sparklines $view) { $currentPeriod = Common::getRequestVar('period'); $currentIdSite = Common::getRequestVar('idSite'); $currentDate = Common::getRequestVar('date'); $displayUniqueVisitors = SettingsPiwik::isUniqueVisitorsEnabled($currentPeriod); $isActionPluginEnabled = Common::isActionsPluginEnabled(); $view->config->addSparklineMetric($displayUniqueVisitors ? array('nb_visits', 'nb_uniq_visitors') : array('nb_visits'), 5); if ($isActionPluginEnabled) { $view->config->addSparklineMetric(array('nb_actions'), 10); // either actions or pageviews will be displayed $view->config->addSparklineMetric(array('nb_pageviews', 'nb_uniq_pageviews'), 20); } else { // make sure to still create a div on the right side for this, just leave it empty $view->config->addPlaceholder(10); } $userId = new UserId(); if ($userId->isUsedInAtLeastOneSite(array($currentIdSite), $currentPeriod, $currentDate)) { $view->config->addSparklineMetric(array('nb_users'), 30); $view->config->addPlaceholder(31); } $view->config->addSparklineMetric(array('avg_time_on_site'), 40); $idSite = Common::getRequestVar('idSite'); if ($isActionPluginEnabled && Site::isSiteSearchEnabledFor($idSite)) { $view->config->addSparklineMetric(array('nb_searches', 'nb_keywords'), 50); } else { // make sure to still create a div on the right side for this, just leave it empty $view->config->addPlaceholder(50); } $view->config->addSparklineMetric(array('bounce_rate'), 60); if ($isActionPluginEnabled) { $view->config->addSparklineMetric(array('nb_downloads', 'nb_uniq_downloads'), 70); $view->config->addSparklineMetric(array('nb_actions_per_visit'), 71); $view->config->addSparklineMetric(array('nb_outlinks', 'nb_uniq_outlinks'), 72); $view->config->addSparklineMetric(array('avg_time_generation'), 73); $view->config->addSparklineMetric(array('max_actions'), 74); } }
private function assertNotUsedInAtLeastOneSite($idSites, $period, $date) { $result = $this->userId->isUsedInAtLeastOneSite($idSites, $period, $date); $this->assertFalse($result); }