diff options
author | mattab <matthieu.aubry@gmail.com> | 2013-07-23 11:52:15 +0400 |
---|---|---|
committer | mattab <matthieu.aubry@gmail.com> | 2013-07-23 11:52:15 +0400 |
commit | 5104d94f3b2250f766b9c520e2da8da9b4cab2e9 (patch) | |
tree | 5f30daf7bc14373fb1bbd0504ce11a771dafc02f /core/WidgetsList.php | |
parent | ae4b1f4e38077b174e4df5b7d4513d63fe026a24 (diff) |
Refs #4059 Work in progress: Conversion to use Namespaces of dozen more classes
Removed many Piwik_ functions, in Piwik 2 it is best practise to use the methods calls instead
Todo: finish converting core/ classes + convert plugins/ classes to use \Piwik\Plugin namespace + fix build + Merge master
Diffstat (limited to 'core/WidgetsList.php')
-rw-r--r-- | core/WidgetsList.php | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/core/WidgetsList.php b/core/WidgetsList.php new file mode 100644 index 0000000000..790ebfa89d --- /dev/null +++ b/core/WidgetsList.php @@ -0,0 +1,176 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + * @category Piwik + * @package PluginsFunctions + */ +namespace Piwik; + +/** + * @package PluginsFunctions + */ +class WidgetsList +{ + /** + * List of widgets + * + * @var array + */ + static protected $widgets = null; + + /** + * Indicates whether the hook was posted or not + * + * @var bool + */ + static protected $hookCalled = false; + + /** + * Returns all available widgets + * The event WidgetsList.add is used to create the list + * + * @return array + */ + static public function get() + { + self::addWidgets(); + Piwik_PostEvent('WidgetsList.get'); + + uksort(self::$widgets, array('Piwik\WidgetsList', '_sortWidgetCategories')); + + $widgets = array(); + foreach (self::$widgets as $key => $v) { + if (isset($widgets[Piwik_Translate($key)])) { + $v = array_merge($widgets[Piwik_Translate($key)], $v); + } + $widgets[Piwik_Translate($key)] = $v; + } + return $widgets; + } + + private static function addWidgets() + { + if (!self::$hookCalled) { + self::$hookCalled = true; + Piwik_PostEvent('WidgetsList.add'); + } + } + + /** + * Sorting method for widget categories + * + * @param string $a + * @param string $b + * @return bool + */ + protected static function _sortWidgetCategories($a, $b) + { + $order = array( + 'VisitsSummary_VisitsSummary', + 'Live!', + 'General_Visitors', + 'UserSettings_VisitorSettings', + 'DevicesDetection_DevicesDetection', + 'Actions_Actions', + 'Actions_SubmenuSitesearch', + 'Referers_Referers', + 'Goals_Goals', + 'Goals_Ecommerce', + '_others_', + 'Example Widgets', + 'ExamplePlugin_exampleWidgets', + ); + + if (($oa = array_search($a, $order)) === false) { + $oa = array_search('_others_', $order); + } + if (($ob = array_search($b, $order)) === false) { + $ob = array_search('_others_', $order); + } + return $oa > $ob; + } + + /** + * Adds an widget to the list + * + * @param string $widgetCategory + * @param string $widgetName + * @param string $controllerName + * @param string $controllerAction + * @param array $customParameters + */ + static public function add($widgetCategory, $widgetName, $controllerName, $controllerAction, $customParameters = array()) + { + $widgetName = Piwik_Translate($widgetName); + $widgetUniqueId = 'widget' . $controllerName . $controllerAction; + foreach ($customParameters as $name => $value) { + if (is_array($value)) { + // use 'Array' for backward compatibility; + // could we switch to using $value[0]? + $value = 'Array'; + } + $widgetUniqueId .= $name . $value; + } + self::$widgets[$widgetCategory][] = array( + 'name' => $widgetName, + 'uniqueId' => $widgetUniqueId, + 'parameters' => array('module' => $controllerName, + 'action' => $controllerAction + ) + $customParameters + ); + } + + + static public function remove($widgetCategory, $widgetName = false) + { + if (empty($widgetName)) { + unset(self::$widgets[$widgetCategory]); + return; + } + foreach (self::$widgets[$widgetCategory] as $id => $widget) { + if ($widget['name'] == $widgetName) { + unset(self::$widgets[$widgetCategory][$id]); + return; + } + } + } + + /** + * Checks if the widget with the given parameters exists in der widget list + * + * @param string $controllerName + * @param string $controllerAction + * @return bool + */ + static public function isDefined($controllerName, $controllerAction) + { + $widgetsList = self::get(); + foreach ($widgetsList as $widgetCategory => $widgets) { + foreach ($widgets as $widget) { + if ($widget['parameters']['module'] == $controllerName + && $widget['parameters']['action'] == $controllerAction + ) { + return true; + } + } + } + return false; + } + + /** + * Method to reset the widget list + * For testing only + */ + public static function _reset() + { + self::$widgets = null; + self::$hookCalled = false; + } +} + + + |