diff options
author | Benaka <diosmosis@users.noreply.github.com> | 2017-09-25 03:29:32 +0300 |
---|---|---|
committer | Matthieu Aubry <mattab@users.noreply.github.com> | 2017-09-25 03:29:32 +0300 |
commit | d6a1f17243434ec80f076a35bf82bd970d984af4 (patch) | |
tree | f914a151ef8d21dd7bef6da3c02a9920c630555c /plugins | |
parent | 74f63f14251f2d6cd86a434077854a0104a24571 (diff) |
Show ecommerce sales by reports under Ecommerce - Sales in dashboard manager. (#11995)
Reports did not show currently, because widget configs in containers with ByDimension layout have modified categories/subcategories.
They thus did not show up under the right category (the category of the widget container). Fixed by using the right category
in getWidgetMetadata (but not getPagesMetadata).
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/API/WidgetMetadata.php | 35 | ||||
-rw-r--r-- | plugins/API/tests/Unit/WidgetMetadataTest.php | 39 | ||||
-rw-r--r-- | plugins/Goals/Pages.php | 6 |
3 files changed, 74 insertions, 6 deletions
diff --git a/plugins/API/WidgetMetadata.php b/plugins/API/WidgetMetadata.php index 2d77e7698d..f6265ca273 100644 --- a/plugins/API/WidgetMetadata.php +++ b/plugins/API/WidgetMetadata.php @@ -10,6 +10,7 @@ namespace Piwik\Plugins\API; use Piwik\Category\CategoryList; use Piwik\Piwik; +use Piwik\Plugins\CoreHome\CoreHome; use Piwik\Report\ReportWidgetConfig; use Piwik\Category\Category; use Piwik\Category\Subcategory; @@ -33,6 +34,7 @@ class WidgetMetadata $flat = array(); foreach ($widgetsList->getWidgetConfigs() as $widgetConfig) { + $metadataOverrides = []; /** @var WidgetConfig[] $widgets */ $widgets = array($widgetConfig); @@ -47,7 +49,21 @@ class WidgetMetadata continue; } - $flat[] = $this->buildWidgetMetadata($widget, $categoryList); + // widgets in containers with ByDimension layout have a special, unrecognized category/subcategory + // (eg, "Sales by Referrer Type"). we change it to the container's category/subcategory so the widget + // will appear in the dashboard manager. + if ($widgetConfig instanceof WidgetContainerConfig + && $widgetConfig->getLayout() == CoreHome::WIDGET_CONTAINER_LAYOUT_BY_DIMENSION + ) { + $metadataOverrides = [ + 'category' => $widgetConfig->getCategoryId(), + 'subcategory' => $widgetConfig->getSubcategoryId(), + 'name' => Piwik::translate($widget->getCategoryId()) . ': ' + . Piwik::translate($widget->getName()), + ]; + } + + $flat[] = $this->buildWidgetMetadata($widget, $categoryList, $metadataOverrides); } } @@ -61,17 +77,26 @@ class WidgetMetadata * @param CategoryList|null $categoryList If null, no category information will be added to the widgets in first * level (they will be added to nested widgets as potentially needed eg for * widgets in ByDimensionView where they are needed to build the left menu) + * @param array $metadataOverrides Overrides for data in `$widget`. Currently only 'name', 'category', 'subcategory' + * are recognized. * @return array */ - public function buildWidgetMetadata(WidgetConfig $widget, $categoryList = null) + public function buildWidgetMetadata(WidgetConfig $widget, $categoryList = null, array $metadataOverrides = []) { + $widgetName = !empty($metadataOverrides['name']) ? $metadataOverrides['name'] : $widget->getName(); + $item = array( - 'name' => Piwik::translate($widget->getName()) + 'name' => Piwik::translate($widgetName), ); if (isset($categoryList)) { - $category = $categoryList->getCategory($widget->getCategoryId()); - $subcategory = $category ? $category->getSubcategory($widget->getSubcategoryId()) : null; + $widgetCategory = !empty($metadataOverrides['category']) + ? $metadataOverrides['category'] : $widget->getCategoryId(); + $widgetSubcategory = !empty($metadataOverrides['subcategory']) + ? $metadataOverrides['subcategory'] : $widget->getSubcategoryId(); + + $category = $categoryList->getCategory($widgetCategory); + $subcategory = $category ? $category->getSubcategory($widgetSubcategory) : null; $item['category'] = $this->buildCategoryMetadata($category); $item['subcategory'] = $this->buildSubcategoryMetadata($subcategory); diff --git a/plugins/API/tests/Unit/WidgetMetadataTest.php b/plugins/API/tests/Unit/WidgetMetadataTest.php index 71d9111ca9..572f89407e 100644 --- a/plugins/API/tests/Unit/WidgetMetadataTest.php +++ b/plugins/API/tests/Unit/WidgetMetadataTest.php @@ -183,6 +183,45 @@ class WidgetMetadataTest extends \PHPUnit_Framework_TestCase ), $widget2); } + public function test_buildWidgetMetadata_ShouldUseOverrideValues_IfSupplied() + { + $categoryList = $this->createCategoryList([ + 'Category' => ['Subcategory'], + 'Category2' => ['Subcategory2'], + ]); + + $config = $this->createWidgetConfig('name', 'Category', 'Subcategory'); + $metadata = $this->metadata->buildWidgetMetadata($config, $categoryList, [ + 'name' => 'changed name', + 'category' => 'Category2', + 'subcategory' => 'Subcategory2', + ]); + + $this->assertEquals([ + 'name' => 'changed name', + 'category' => [ + 'id' => 'Category2', + 'name' => 'Category2', + 'order' => 99, + 'icon' => '', + ], + 'subcategory' => [ + 'id' => 'Subcategory2', + 'name' => 'Subcategory2Name', + 'order' => 99, + ], + 'module' => 'CoreHome', + 'action' => 'render', + 'order' => 99, + 'parameters' => [ + 'module' => 'CoreHome', + 'action' => 'render', + ], + 'uniqueId' => 'widgetCoreHomerender', + 'isWide' => false, + ], $metadata); + } + public function test_buildPageMetadata_ShouldAddContainerInformtion_IfWidgetContainerConfigGiven() { $config = new WidgetContainerConfig(); diff --git a/plugins/Goals/Pages.php b/plugins/Goals/Pages.php index 7ec50e7e28..b8ee1b1fd9 100644 --- a/plugins/Goals/Pages.php +++ b/plugins/Goals/Pages.php @@ -302,7 +302,11 @@ class Pages $widget->setCategoryId($categoryText); $widget->setSubcategoryId($categoryText); $widget->setOrder($order); - $widget->setIsNotWidgetizable(); + if ($ecommerce) { + $widget->setIsWidgetizable(); + } else { + $widget->setIsNotWidgetizable(); + } if (!empty($report['viewDataTable'])) { $widget->forceViewDataTable($report['viewDataTable']); |