| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Plugin; |
|
|
| use Piwik\Container\StaticContainer; |
| use Piwik\Piwik; |
| use Piwik\Plugin; |
| use Piwik\Widget\Widget; |
| use Piwik\Widget\WidgetConfig; |
| use Piwik\Widget\WidgetContainerConfig; |
|
|
| |
| |
| |
| class WidgetsProvider |
| { |
| |
| |
| |
| private $pluginManager; |
|
|
| public function __construct(Plugin\Manager $pluginManager) |
| { |
| $this->pluginManager = $pluginManager; |
| } |
|
|
| |
| |
| |
| |
| |
| public function getWidgetConfigs() |
| { |
| $widgetClasses = $this->getAllWidgetClassNames(); |
|
|
| $configs = array(); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Piwik::postEvent('Widget.addWidgetConfigs', array(&$configs)); |
|
|
| foreach ($widgetClasses as $widgetClass) { |
| $configs[] = $this->getWidgetConfigForClassName($widgetClass); |
| } |
|
|
| return $configs; |
| } |
|
|
| |
| |
| |
| |
| public function getWidgetContainerConfigs() |
| { |
| $configs = array(); |
|
|
| $widgetContainerConfigs = $this->getAllWidgetContainerConfigClassNames(); |
| foreach ($widgetContainerConfigs as $widgetClass) { |
| $configs[] = StaticContainer::get($widgetClass); |
| } |
|
|
| return $configs; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function factory($module, $action) |
| { |
| if (empty($module) || empty($action)) { |
| return null; |
| } |
|
|
| try { |
| if (!$this->pluginManager->isPluginActivated($module)) { |
| return null; |
| } |
|
|
| $plugin = $this->pluginManager->getLoadedPlugin($module); |
| } catch (\Exception $e) { |
| |
| return null; |
| } |
|
|
| $widgets = $plugin->findMultipleComponents('Widgets', 'Piwik\\Widget\\Widget'); |
|
|
| foreach ($widgets as $widgetClass) { |
| $config = $this->getWidgetConfigForClassName($widgetClass); |
| if ($config->getAction() === $action) { |
| $config->checkIsEnabled(); |
| return StaticContainer::get($widgetClass); |
| } |
| } |
|
|
| return null; |
| } |
|
|
| private function getWidgetConfigForClassName($widgetClass) |
| { |
| |
| $config = new WidgetConfig(); |
| $config->setModule($this->getModuleFromWidgetClassName($widgetClass)); |
| $config->setAction($this->getActionFromWidgetClassName($widgetClass)); |
| $widgetClass::configure($config); |
|
|
| return $config; |
| } |
|
|
| |
| |
| |
| private function getAllWidgetClassNames() |
| { |
| return $this->pluginManager->findMultipleComponents('Widgets', 'Piwik\\Widget\\Widget'); |
| } |
|
|
| private function getModuleFromWidgetClassName($widgetClass) |
| { |
| $parts = explode('\\', $widgetClass); |
|
|
| return $parts[2]; |
| } |
|
|
| private function getActionFromWidgetClassName($widgetClass) |
| { |
| $parts = explode('\\', $widgetClass); |
|
|
| if (count($parts) >= 4) { |
| return lcfirst(end($parts)); |
| } |
|
|
| return ''; |
| } |
|
|
| |
| |
| |
| private function getAllWidgetContainerConfigClassNames() |
| { |
| return $this->pluginManager->findMultipleComponents('Widgets', 'Piwik\\Widget\\WidgetContainerConfig'); |
| } |
| } |
|
|