Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenaka <diosmosis@users.noreply.github.com>2017-09-25 03:29:32 +0300
committerMatthieu Aubry <mattab@users.noreply.github.com>2017-09-25 03:29:32 +0300
commitd6a1f17243434ec80f076a35bf82bd970d984af4 (patch)
treef914a151ef8d21dd7bef6da3c02a9920c630555c /plugins/API
parent74f63f14251f2d6cd86a434077854a0104a24571 (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/API')
-rw-r--r--plugins/API/WidgetMetadata.php35
-rw-r--r--plugins/API/tests/Unit/WidgetMetadataTest.php39
2 files changed, 69 insertions, 5 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();