From 4d02abdbb61c7883e3a13e0fde93df49fdeae9fc Mon Sep 17 00:00:00 2001 From: Thomas Steur <thomas.steur@gmail.com> Date: Sun, 7 Aug 2016 11:48:13 +0000 Subject: [PATCH] API.getReportMetadata should work only for one site --- plugins/API/API.php | 13 ++++++++++--- plugins/API/ProcessedReport.php | 19 ++++++++----------- plugins/Actions/Reports/SiteSearchBase.php | 4 ++-- .../common/services/report-metadata-model.js | 4 ++-- plugins/Ecommerce/Reports/Base.php | 6 ++---- plugins/Goals/Reports/Base.php | 6 ++---- plugins/ImageGraph/ImageGraph.php | 7 +++---- 7 files changed, 29 insertions(+), 30 deletions(-) diff --git a/plugins/API/API.php b/plugins/API/API.php index a3a9b4fb02..7548cf312b 100644 --- a/plugins/API/API.php +++ b/plugins/API/API.php @@ -264,19 +264,26 @@ class API extends \Piwik\Plugin\API * Triggers a hook to ask plugins for available Reports. * Returns metadata information about each report (category, name, dimension, metrics, etc.) * - * @param string $idSites Comma separated list of website Ids + * @param string $idSites THIS PARAMETER IS DEPRECATED AND WILL BE REMOVED IN PIWIK 4 * @param bool|string $period * @param bool|Date $date * @param bool $hideMetricsDoc * @param bool $showSubtableReports + * @param int $idSite * @return array */ public function getReportMetadata($idSites = '', $period = false, $date = false, $hideMetricsDoc = false, - $showSubtableReports = false) + $showSubtableReports = false, $idSite = false) { + if (empty($idSite) && !empty($idSites)) { + $idSite = array_shift($idSites); + } elseif (empty($idSites)) { + throw new \Exception('Calling API.getReportMetadata without any idSite is no longer supported since Piwik 3.0.0. Please specifiy at least one idSite via the "idSite" parameter.'); + } + Piwik::checkUserHasViewAccess($idSites); - $metadata = $this->processedReport->getReportMetadata($idSites, $period, $date, $hideMetricsDoc, $showSubtableReports); + $metadata = $this->processedReport->getReportMetadata($idSite, $period, $date, $hideMetricsDoc, $showSubtableReports); return $metadata; } diff --git a/plugins/API/ProcessedReport.php b/plugins/API/ProcessedReport.php index b7dd476075..d957b1e717 100644 --- a/plugins/API/ProcessedReport.php +++ b/plugins/API/ProcessedReport.php @@ -109,7 +109,7 @@ class ProcessedReport public function getReportMetadataByUniqueId($idSite, $apiMethodUniqueId) { - $metadata = $this->getReportMetadata(array($idSite)); + $metadata = $this->getReportMetadata($idSite); foreach ($metadata as $report) { if ($report['uniqueId'] == $apiMethodUniqueId) { @@ -148,23 +148,20 @@ class ProcessedReport * Triggers a hook to ask plugins for available Reports. * Returns metadata information about each report (category, name, dimension, metrics, etc.) * - * @param string $idSites Comma separated list of website Ids + * @param int $idSite * @param bool|string $period * @param bool|Date $date * @param bool $hideMetricsDoc * @param bool $showSubtableReports * @return array */ - public function getReportMetadata($idSites, $period = false, $date = false, $hideMetricsDoc = false, $showSubtableReports = false) + public function getReportMetadata($idSite, $period = false, $date = false, $hideMetricsDoc = false, $showSubtableReports = false) { - $idSites = Site::getIdSitesFromIdSitesString($idSites); - if (!empty($idSites)) { - Piwik::checkUserHasViewAccess($idSites); - } + Piwik::checkUserHasViewAccess($idSite); // as they cache key contains a lot of information there would be an even better cache result by caching parts of // this huge method separately but that makes it also more complicated. leaving it like this for now. - $key = $this->buildReportMetadataCacheKey($idSites, $period, $date, $hideMetricsDoc, $showSubtableReports); + $key = $this->buildReportMetadataCacheKey($idSite, $period, $date, $hideMetricsDoc, $showSubtableReports); $key = CacheId::pluginAware($key); $cache = PiwikCache::getTransientCache(); @@ -172,7 +169,7 @@ class ProcessedReport return $cache->fetch($key); } - $parameters = array('idSites' => $idSites, 'period' => $period, 'date' => $date); + $parameters = array('idSite' => $idSite, 'period' => $period, 'date' => $date); $availableReports = array(); @@ -721,7 +718,7 @@ class ProcessedReport return null; } - private function buildReportMetadataCacheKey($idSites, $period, $date, $hideMetricsDoc, $showSubtableReports) + private function buildReportMetadataCacheKey($idSite, $period, $date, $hideMetricsDoc, $showSubtableReports) { if (isset($_GET) && isset($_POST) && is_array($_GET) && is_array($_POST)) { $request = $_GET + $_POST; @@ -742,7 +739,7 @@ class ProcessedReport } } - $key .= implode(',', $idSites) . ($period === false ? 0 : $period) . ($date === false ? 0 : $date); + $key .= $idSite . 'x' . ($period === false ? 0 : $period) . 'x' . ($date === false ? 0 : $date); $key .= (int)$hideMetricsDoc . (int)$showSubtableReports . Piwik::getCurrentUserLogin(); return 'reportMetadata' . md5($key); } diff --git a/plugins/Actions/Reports/SiteSearchBase.php b/plugins/Actions/Reports/SiteSearchBase.php index d4715e04e6..787ce89fe6 100644 --- a/plugins/Actions/Reports/SiteSearchBase.php +++ b/plugins/Actions/Reports/SiteSearchBase.php @@ -37,9 +37,9 @@ abstract class SiteSearchBase extends Base public function configureReportMetadata(&$availableReports, $infos) { - $idSites = !empty($infos['idSites']) ? $infos['idSites'] : array(); + $idSite = array($infos['idSite']); - if (!$this->isEnabledForIdSites($idSites, Common::getRequestVar('idSite', 0, 'int'))) { + if (!$this->isEnabledForIdSites($idSite, Common::getRequestVar('idSite', 0, 'int'))) { return; } diff --git a/plugins/CoreHome/angularjs/common/services/report-metadata-model.js b/plugins/CoreHome/angularjs/common/services/report-metadata-model.js index fcf8e4690e..c5fd42b73a 100644 --- a/plugins/CoreHome/angularjs/common/services/report-metadata-model.js +++ b/plugins/CoreHome/angularjs/common/services/report-metadata-model.js @@ -39,8 +39,8 @@ if (!reportsPromise) { reportsPromise = piwikApi.fetch({ method: 'API.getReportMetadata', - idSites: piwik.idSite || piwik.broadcast.getValueFromUrl('idSite'), - filter_limit: '-1' + filter_limit: '-1', + idSite: piwik.idSite || piwik.broadcast.getValueFromUrl('idSite') }).then(function (response) { model.reports = response; return response; diff --git a/plugins/Ecommerce/Reports/Base.php b/plugins/Ecommerce/Reports/Base.php index 28a3a4a36f..5fe49dd1e8 100644 --- a/plugins/Ecommerce/Reports/Base.php +++ b/plugins/Ecommerce/Reports/Base.php @@ -54,14 +54,12 @@ abstract class Base extends Report private function isEcommerceEnabledByInfos($infos) { - $idSites = $infos['idSites']; + $idSite = $infos['idSite']; - if (count($idSites) != 1) { + if (empty($idSite)) { return false; } - $idSite = reset($idSites); - return $this->isEcommerceEnabled($idSite); } diff --git a/plugins/Goals/Reports/Base.php b/plugins/Goals/Reports/Base.php index f9e36d6787..4c2a57e755 100644 --- a/plugins/Goals/Reports/Base.php +++ b/plugins/Goals/Reports/Base.php @@ -41,14 +41,12 @@ abstract class Base extends \Piwik\Plugin\Report protected function getIdSiteFromInfos($infos) { - $idSites = $infos['idSites']; + $idSite = $infos['idSite']; - if (count($idSites) != 1) { + if (empty($idSite)) { return null; } - $idSite = reset($idSites); - return $idSite; } diff --git a/plugins/ImageGraph/ImageGraph.php b/plugins/ImageGraph/ImageGraph.php index 9869d37081..86a1d45cfc 100644 --- a/plugins/ImageGraph/ImageGraph.php +++ b/plugins/ImageGraph/ImageGraph.php @@ -52,14 +52,13 @@ class ImageGraph extends \Piwik\Plugin */ public function getReportMetadata(&$reports, $info) { - $idSites = $info['idSites']; + $idSite = $info['idSite']; // If only one website is selected, we add the Graph URL - if (count($idSites) != 1) { + if (empty($idSite)) { return; } - $idSite = reset($idSites); - + // in case API.getReportMetadata was not called with date/period we use sane defaults if (empty($info['period'])) { $info['period'] = 'day'; -- GitLab