From 13c771ee55252bb8a825f7d8474de7f704ec5fc5 Mon Sep 17 00:00:00 2001 From: Thomas Steur <thomas.steur@googlemail.com> Date: Tue, 28 Oct 2014 02:20:33 +0100 Subject: [PATCH] refs #6481 in report generator always show the dimensions of the selected plugin even if the plugin is not enabled --- core/Columns/Dimension.php | 20 ++++++++ .../CoreConsole/Commands/GenerateReport.php | 12 +++-- tests/PHPUnit/Unit/Columns/DimensionTest.php | 46 +++++++++++++++++++ 3 files changed, 75 insertions(+), 3 deletions(-) diff --git a/core/Columns/Dimension.php b/core/Columns/Dimension.php index a6f8831a71..d591cea9db 100644 --- a/core/Columns/Dimension.php +++ b/core/Columns/Dimension.php @@ -9,6 +9,7 @@ namespace Piwik\Columns; use Exception; +use Piwik\Plugin; use Piwik\Plugin\ComponentFactory; use Piwik\Plugin\Dimension\ActionDimension; use Piwik\Plugin\Dimension\ConversionDimension; @@ -188,6 +189,25 @@ abstract class Dimension return $dimensions; } + public static function getDimensions(Plugin $plugin) + { + $dimensions = array(); + + foreach (VisitDimension::getDimensions($plugin) as $dimension) { + $dimensions[] = $dimension; + } + + foreach (ActionDimension::getDimensions($plugin) as $dimension) { + $dimensions[] = $dimension; + } + + foreach (ConversionDimension::getDimensions($plugin) as $dimension) { + $dimensions[] = $dimension; + } + + return $dimensions; + } + /** * Creates a Dimension instance from a string ID (see {@link getId()}). * diff --git a/plugins/CoreConsole/Commands/GenerateReport.php b/plugins/CoreConsole/Commands/GenerateReport.php index d03b20781b..9eb7313400 100644 --- a/plugins/CoreConsole/Commands/GenerateReport.php +++ b/plugins/CoreConsole/Commands/GenerateReport.php @@ -10,6 +10,7 @@ namespace Piwik\Plugins\CoreConsole\Commands; use Piwik\Columns\Dimension; +use Piwik\Plugin\Manager; use Piwik\Plugin\Report; use Piwik\Translate; use Symfony\Component\Console\Input\InputInterface; @@ -37,7 +38,7 @@ class GenerateReport extends GeneratePluginBase $reportName = $this->getReportName($input, $output); $category = $this->getCategory($input, $output, $pluginName); $documentation = $this->getDocumentation($input, $output); - list($dimension, $dimensionClass) = $this->getDimension($input, $output); + list($dimension, $dimensionClass) = $this->getDimension($input, $output, $pluginName); $order = $this->getOrder($category); $apiName = $this->getApiName($reportName); @@ -216,10 +217,11 @@ class GenerateReport extends GeneratePluginBase /** * @param InputInterface $input * @param OutputInterface $output + * @param string $pluginName * @return array * @throws \RuntimeException */ - protected function getDimension(InputInterface $input, OutputInterface $output) + protected function getDimension(InputInterface $input, OutputInterface $output, $pluginName) { $dimensions = array(); $dimensionNames = array(); @@ -235,7 +237,11 @@ class GenerateReport extends GeneratePluginBase } } - foreach (Dimension::getAllDimensions() as $dimension) { + $plugin = Manager::getInstance()->loadPlugin($pluginName); + $dimensions = Dimension::getAllDimensions(); + $dimensions = array_merge($dimensions, Dimension::getDimensions($plugin)); + + foreach ($dimensions as $dimension) { $name = $dimension->getName(); if (!empty($name)) { $dimensions[$name] = get_class($dimension); diff --git a/tests/PHPUnit/Unit/Columns/DimensionTest.php b/tests/PHPUnit/Unit/Columns/DimensionTest.php index 6952b3880f..cf0da5ff94 100644 --- a/tests/PHPUnit/Unit/Columns/DimensionTest.php +++ b/tests/PHPUnit/Unit/Columns/DimensionTest.php @@ -136,6 +136,52 @@ namespace Piwik\Tests\Core\Columns $this->assertTrue($foundVisit); } + public function test_getDimensions_shouldReturnAllKindOfDimensionsThatBelongToASpecificPlugin() + { + Manager::getInstance()->loadPlugins(array('Actions', 'Events', 'DevicesDetector', 'Goals')); + + $dimensions = Dimension::getDimensions(Manager::getInstance()->loadPlugin('Actions')); + + $this->assertGreaterThan(10, count($dimensions)); + + $foundVisit = false; + $foundAction = false; + + foreach ($dimensions as $dimension) { + if ($dimension instanceof \Piwik\Plugin\Dimension\ActionDimension) { + $foundAction = true; + } else if ($dimension instanceof \Piwik\Plugin\Dimension\VisitDimension) { + $foundVisit = true; + } + + $this->assertRegExp('/Piwik.Plugins.Actions.Columns/', get_class($dimension)); + } + + $this->assertTrue($foundAction); + $this->assertTrue($foundVisit); + } + + public function test_getDimensions_shouldReturnConversionDimensionsThatBelongToASpecificPlugin() + { + Manager::getInstance()->loadPlugins(array('Actions', 'Events', 'DevicesDetector', 'Goals')); + + $dimensions = Dimension::getDimensions(Manager::getInstance()->loadPlugin('Goals')); + + $this->assertGreaterThan(2, count($dimensions)); + + $foundConversion = false; + + foreach ($dimensions as $dimension) { + if ($dimension instanceof \Piwik\Plugin\Dimension\ConversionDimension) { + $foundConversion = true; + } + + $this->assertRegExp('/Piwik.Plugins.Goals.Columns/', get_class($dimension)); + } + + $this->assertTrue($foundConversion); + } + public function test_getSegment_ShouldReturnConfiguredSegments() { $segments = $this->dimension->getSegments(); -- GitLab