/**
* @param WidgetConfig $widget
* @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)
* @return array
*/
public function buildWidgetMetadata(WidgetConfig $widget, $categoryList = null)
{
$item = array('name' => Piwik::translate($widget->getName()));
if (isset($categoryList)) {
$category = $categoryList->getCategory($widget->getCategoryId());
$subcategory = $category ? $category->getSubcategory($widget->getSubcategoryId()) : null;
$item['category'] = $this->buildCategoryMetadata($category);
$item['subcategory'] = $this->buildSubcategoryMetadata($subcategory);
}
$item['module'] = $widget->getModule();
$item['action'] = $widget->getAction();
$item['order'] = $widget->getOrder();
$item['parameters'] = $widget->getParameters();
$item['uniqueId'] = $widget->getUniqueId();
$item['isWide'] = $widget->isWide();
$middleware = $widget->getMiddlewareParameters();
if (!empty($middleware)) {
$item['middlewareParameters'] = $middleware;
}
if ($widget instanceof ReportWidgetConfig) {
$item['viewDataTable'] = $widget->getViewDataTable();
$item['isReport'] = true;
}
if ($widget instanceof WidgetContainerConfig) {
$item['layout'] = $widget->getLayout();
$item['isContainer'] = true;
// we do not want to create categories to the inital categoryList. Otherwise we'd maybe display more pages
// etc.
$subCategoryList = new CategoryList();
$this->createMissingCategoriesAndSubcategories($subCategoryList, $widget->getWidgetConfigs());
$children = array();
foreach ($widget->getWidgetConfigs() as $widgetConfig) {
$children[] = $this->buildWidgetMetadata($widgetConfig, $subCategoryList);
}
$item['widgets'] = $children;
}
return $item;
}