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:
authormattab <matthieu.aubry@gmail.com>2013-07-23 11:52:15 +0400
committermattab <matthieu.aubry@gmail.com>2013-07-23 11:52:15 +0400
commit5104d94f3b2250f766b9c520e2da8da9b4cab2e9 (patch)
tree5f30daf7bc14373fb1bbd0504ce11a771dafc02f /core/WidgetsList.php
parentae4b1f4e38077b174e4df5b7d4513d63fe026a24 (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.php176
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;
+ }
+}
+
+
+