Leitgedanken/msd2/tracking/piwik/core/Widget/WidgetContainerConfig.php
2023-01-23 11:03:31 +01:00

141 lines
3.6 KiB
PHP

<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Widget;
/**
* Defines a new widget container. Widget containers are useful when you want to combine several widgets
* into one unique widgets. For example you could combine an evolution graph widget with a sparklines widget
* and combine them to a single "overview widget". It also allows you to specify layouts meaning you can
* define a layout that will group multiple widgets into one widget displaying a menu on the left side for each
* widget and the actual widget on the right side. By default widgets within a container are displayed vertically
* one after another.
*
* To define a widget container just place a subclass within the `Widgets` folder of your plugin.
*
* @api since Piwik 3.0.0
*/
class WidgetContainerConfig extends WidgetConfig
{
/**
* @var WidgetConfig[]
*/
protected $widgets = array();
protected $layout = '';
protected $id = '';
protected $module = 'CoreHome';
protected $action = 'renderWidgetContainer';
protected $isWidgetizable = false;
/**
* Sets (overwrites) the id of the widget container.
*
* The id can be used by any plugins to add more widgets to this container and it will be also used for the unique
* widget id and in the URL to render this widget.
*
* @param string $id eg 'Products' or 'Contents'
* @return static
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Get the id of the widget.
* @return string
*/
public function getId()
{
return $this->id;
}
/**
* Sets the layout of the container widget.
*
* By default widgets within a container are displayed one after another. In case you want to change this
* behaviour you can specify a layout that will be recognized by the UI. It is not yet possible to define
* custom layouts.
*
* @param string $layout eg 'ByDimension' see {@link Piwik\Plugins\CoreHome\CoreHome::WIDGET_CONTAINER_LAYOUT_BY_DIMENSION}
* @return static
*/
public function setLayout($layout)
{
$this->layout = $layout;
return $this;
}
/**
* Gets the currently set layout.
* @return string
*/
public function getLayout()
{
return $this->layout;
}
/**
* Adds a new widget to the container widget.
*
* @param WidgetConfig $widget
* @return static
*/
public function addWidgetConfig(WidgetConfig $widget)
{
$this->widgets[] = $widget;
return $this;
}
/**
* Set (overwrite) widget configs.
*
* @param WidgetConfig[] $configs
*/
public function setWidgetConfigs($configs)
{
$this->widgets = $configs;
}
/**
* Get all added widget configs.
*
* @return WidgetConfig[]
*/
public function getWidgetConfigs()
{
return $this->widgets;
}
/**
* @inheritdoc
*/
public function getUniqueId()
{
$parameters = $this->getParameters();
unset($parameters['module']);
unset($parameters['action']);
unset($parameters['containerId']);
return WidgetsList::getWidgetUniqueId($this->id, '', $parameters);
}
/**
* @inheritdoc
*/
public function getParameters()
{
$params = parent::getParameters();
$params['containerId'] = $this->getId();
return $params;
}
}