diff options
author | Thomas Steur <thomas.steur@gmail.com> | 2015-02-10 00:37:42 +0300 |
---|---|---|
committer | Thomas Steur <thomas.steur@gmail.com> | 2015-02-10 06:52:08 +0300 |
commit | dc9db2d155f5c73140abe7e27a3fb2824ff1100b (patch) | |
tree | f39bfbc6cea62b32bec06dff29b87aa47fa692ed /plugins/VisitsSummary | |
parent | 7c099358991996ecb98a2d4c1d5eb88af41d0f57 (diff) |
refs #6705 Hide users metric in case the feature is not used.
This is an alternative solution to fix this problem. The difference
here is that we only do an additional call to VisitsSummary::get
if users is 0. The disadvantage is that eg API.getReportMetadata
will report that nb_users exist but the API.getProcessedReport
might not return it. This already caused some problems while
trying to implement it like this as API.getProcessedReport will
add all metrics returned by getReportMetadata automatically. So even
if we remove nb_users in the API output of VisitsSummary.get it
would be still added again. Another disadvantage of this solution
is that the code is more fragile as we have to map parameters
like $params[0] to idSite, $params[1] to period, ...
Diffstat (limited to 'plugins/VisitsSummary')
-rw-r--r-- | plugins/VisitsSummary/Reports/Get.php | 20 | ||||
-rw-r--r-- | plugins/VisitsSummary/VisitsSummary.php | 51 |
2 files changed, 50 insertions, 21 deletions
diff --git a/plugins/VisitsSummary/Reports/Get.php b/plugins/VisitsSummary/Reports/Get.php index 7786c5a99e..bced863b07 100644 --- a/plugins/VisitsSummary/Reports/Get.php +++ b/plugins/VisitsSummary/Reports/Get.php @@ -40,26 +40,6 @@ class Get extends \Piwik\Plugin\Report $this->order = 1; } - public function configureReportMetadata(&$availableReports, $infos) - { - if (!$this->isEnabled()) { - return; - } - - $usersKey = array_search('nb_users', $this->metrics); - if ($usersKey !== false && !empty($infos['idSites']) && !empty($infos['period']) && !empty($infos['date'])) { - $userId = new UserId(); - $isUserIdUsed = $userId->isUsedInAtLeastOneSite($infos['idSites'], $infos['period'], $infos['date']); - - if (!$isUserIdUsed) { - unset($this->metrics[$usersKey]); - $this->metrics = array_values($this->metrics); - } - } - - parent::configureReportMetadata($availableReports, $infos); - } - public function getMetrics() { $metrics = parent::getMetrics(); diff --git a/plugins/VisitsSummary/VisitsSummary.php b/plugins/VisitsSummary/VisitsSummary.php index cc6782f216..4150f7dfaf 100644 --- a/plugins/VisitsSummary/VisitsSummary.php +++ b/plugins/VisitsSummary/VisitsSummary.php @@ -7,6 +7,8 @@ * */ namespace Piwik\Plugins\VisitsSummary; +use Piwik\DataTable; +use Piwik\Plugins\CoreHome\Columns\UserId; /** * Note: This plugin does not hook on Daily and Period Archiving like other Plugins because it reports the @@ -23,10 +25,57 @@ class VisitsSummary extends \Piwik\Plugin public function getListHooksRegistered() { return array( - 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles' + 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles', + 'API.API.getProcessedReport.end' => 'enrichProcessedReportIfVisitsSummaryGet', ); } + public function enrichProcessedReportIfVisitsSummaryGet(&$response, $infos) + { + $params = $infos['parameters']; + $module = $params[3]; + $method = $params[4]; + + if ($module !== 'VisitsSummary' || $method !== 'get') { + return; + } + + $userId = new UserId(); + + /** @var DataTable|DataTable\Map $dataTable */ + $dataTable = $response['reportData']; + + if ($userId->hasDataTableUsers($dataTable)) { + return; + } + + $idSites = $params[0]; + if (!is_array($idSites)) { + $idSites = array($idSites); + } + + $period = $params[1]; + $date = $params[2]; + + if ($userId->isUsedInAtLeastOneSite($idSites, $period, $date)) { + return; + } + + if (!empty($response['metadata']['metrics']['nb_users'])) { + unset($response['metadata']['metrics']['nb_users']); + } + + if (!empty($response['metadata']['metricsDocumentation']['nb_users'])) { + unset($response['metadata']['metricsDocumentation']['nb_users']); + } + + if (!empty($response['columns']['nb_users'])) { + unset($response['columns']['nb_users']); + } + + $dataTable->deleteColumn('nb_users'); + } + public function getStylesheetFiles(&$stylesheets) { $stylesheets[] = "plugins/VisitsSummary/stylesheets/datatable.less"; |