Skip to content
Extraits de code Groupes Projets
Valider 4d02abdb rédigé par Thomas Steur's avatar Thomas Steur
Parcourir les fichiers

API.getReportMetadata should work only for one site

parent 31ded59b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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;
}
......
......@@ -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);
}
......
......@@ -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;
}
......
......@@ -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;
......
......@@ -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);
}
......
......@@ -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;
}
......
......@@ -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';
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter