update Piwik to version 2.16 (fixes #91)
This commit is contained in:
parent
296343bf3b
commit
d885a4baa9
5833 changed files with 418860 additions and 226988 deletions
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - Open source web analytics
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
|
|
@ -8,29 +8,41 @@
|
|||
*/
|
||||
namespace Piwik;
|
||||
|
||||
use Piwik\Cache as PiwikCache;
|
||||
use Piwik\Plugin\Report;
|
||||
use Piwik\Plugin\Widgets;
|
||||
|
||||
/**
|
||||
* Manages the global list of reports that can be displayed as dashboard widgets.
|
||||
*
|
||||
*
|
||||
* Reports are added as dashboard widgets through the {@hook WidgetsList.addWidgets}
|
||||
* event. Observers for this event should call the {@link add()} method to add reports.
|
||||
*
|
||||
*
|
||||
* @api
|
||||
* @method static \Piwik\WidgetsList getInstance()
|
||||
*/
|
||||
class WidgetsList
|
||||
class WidgetsList extends Singleton
|
||||
{
|
||||
/**
|
||||
* List of widgets
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
static protected $widgets = null;
|
||||
protected static $widgets = array();
|
||||
|
||||
/**
|
||||
* Indicates whether the hook was posted or not
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
static protected $hookCalled = false;
|
||||
protected static $hookCalled = false;
|
||||
|
||||
/**
|
||||
* In get() we won't use a cached result in case this is true. Instead we will sort the widgets again and cache
|
||||
* a new result. To make tests work...
|
||||
* @var bool
|
||||
*/
|
||||
private static $listCacheToBeInvalidated = false;
|
||||
|
||||
/**
|
||||
* Returns all available widgets.
|
||||
|
|
@ -49,19 +61,33 @@ class WidgetsList
|
|||
* )
|
||||
* ```
|
||||
*/
|
||||
static public function get()
|
||||
public static function get()
|
||||
{
|
||||
$cache = self::getCacheForCompleteList();
|
||||
$cacheId = self::getCacheId();
|
||||
|
||||
if (!self::$listCacheToBeInvalidated && $cache->contains($cacheId)) {
|
||||
return $cache->fetch($cacheId);
|
||||
}
|
||||
|
||||
self::addWidgets();
|
||||
|
||||
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);
|
||||
$category = Piwik::translate($key);
|
||||
|
||||
if (isset($widgets[$category])) {
|
||||
$v = array_merge($widgets[$category], $v);
|
||||
}
|
||||
$widgets[Piwik::translate($key)] = $v;
|
||||
|
||||
$widgets[$category] = $v;
|
||||
}
|
||||
|
||||
$cache->save($cacheId, $widgets);
|
||||
self::$listCacheToBeInvalidated = false;
|
||||
|
||||
return $widgets;
|
||||
}
|
||||
|
||||
|
|
@ -71,20 +97,31 @@ class WidgetsList
|
|||
self::$hookCalled = true;
|
||||
|
||||
/**
|
||||
* Used to collect all available dashboard widgets.
|
||||
*
|
||||
* Subscribe to this event to make your plugin's reports or other controller actions available
|
||||
* as dashboard widgets. Event handlers should call the {@link WidgetsList::add()} method for each
|
||||
* new dashboard widget.
|
||||
*
|
||||
* **Example**
|
||||
*
|
||||
* public function addWidgets()
|
||||
* {
|
||||
* WidgetsList::add('General_Actions', 'General_Pages', 'Actions', 'getPageUrls');
|
||||
* }
|
||||
* @ignore
|
||||
* @deprecated
|
||||
*/
|
||||
Piwik::postEvent('WidgetsList.addWidgets');
|
||||
|
||||
$widgetsList = self::getInstance();
|
||||
|
||||
foreach (Report::getAllReports() as $report) {
|
||||
if ($report->isEnabled()) {
|
||||
$report->configureWidget($widgetsList);
|
||||
}
|
||||
}
|
||||
|
||||
$widgetContainers = Widgets::getAllWidgets();
|
||||
foreach ($widgetContainers as $widgetContainer) {
|
||||
$widgets = $widgetContainer->getWidgets();
|
||||
|
||||
foreach ($widgets as $widget) {
|
||||
$widgetsList->add($widget['category'], $widget['name'], $widget['module'], $widget['method'], $widget['params']);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($widgetContainers as $widgetContainer) {
|
||||
$widgetContainer->configureWidgetsList($widgetsList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -101,7 +138,7 @@ class WidgetsList
|
|||
'VisitsSummary_VisitsSummary',
|
||||
'Live!',
|
||||
'General_Visitors',
|
||||
'UserSettings_VisitorSettings',
|
||||
'General_VisitorSettings',
|
||||
'DevicesDetection_DevicesDetection',
|
||||
'General_Actions',
|
||||
'Events_Events',
|
||||
|
|
@ -110,7 +147,7 @@ class WidgetsList
|
|||
'Goals_Goals',
|
||||
'Goals_Ecommerce',
|
||||
'_others_',
|
||||
'Example Widgets',
|
||||
'About Piwik',
|
||||
'ExamplePlugin_exampleWidgets',
|
||||
);
|
||||
|
||||
|
|
@ -123,6 +160,30 @@ class WidgetsList
|
|||
return $oa > $ob;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the unique id of an widget with the given parameters
|
||||
*
|
||||
* @param $controllerName
|
||||
* @param $controllerAction
|
||||
* @param array $customParameters
|
||||
* @return string
|
||||
*/
|
||||
public static function getWidgetUniqueId($controllerName, $controllerAction, $customParameters = array())
|
||||
{
|
||||
$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;
|
||||
}
|
||||
|
||||
return $widgetUniqueId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a report to the list of dashboard widgets.
|
||||
*
|
||||
|
|
@ -133,18 +194,16 @@ class WidgetsList
|
|||
* @param array $customParameters Extra query parameters that should be sent while getting
|
||||
* this report.
|
||||
*/
|
||||
static public function add($widgetCategory, $widgetName, $controllerName, $controllerAction, $customParameters = array())
|
||||
public static 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;
|
||||
$widgetName = Piwik::translate($widgetName);
|
||||
$widgetUniqueId = self::getWidgetUniqueId($controllerName, $controllerAction, $customParameters);
|
||||
|
||||
if (!array_key_exists($widgetCategory, self::$widgets)) {
|
||||
self::$widgets[$widgetCategory] = array();
|
||||
}
|
||||
|
||||
self::$listCacheToBeInvalidated = true;
|
||||
self::$widgets[$widgetCategory][] = array(
|
||||
'name' => $widgetName,
|
||||
'uniqueId' => $widgetUniqueId,
|
||||
|
|
@ -156,13 +215,13 @@ class WidgetsList
|
|||
|
||||
/**
|
||||
* Removes one or more widgets from the widget list.
|
||||
*
|
||||
*
|
||||
* @param string $widgetCategory The widget category. Can be a translation token.
|
||||
* @param string|false $widgetName The name of the widget to remove. Cannot be a
|
||||
* @param string|false $widgetName The name of the widget to remove. Cannot be a
|
||||
* translation token. If not supplied, the entire category
|
||||
* will be removed.
|
||||
*/
|
||||
static public function remove($widgetCategory, $widgetName = false)
|
||||
public static function remove($widgetCategory, $widgetName = false)
|
||||
{
|
||||
if (!isset(self::$widgets[$widgetCategory])) {
|
||||
return;
|
||||
|
|
@ -170,11 +229,13 @@ class WidgetsList
|
|||
|
||||
if (empty($widgetName)) {
|
||||
unset(self::$widgets[$widgetCategory]);
|
||||
self::$listCacheToBeInvalidated = true;
|
||||
return;
|
||||
}
|
||||
foreach (self::$widgets[$widgetCategory] as $id => $widget) {
|
||||
if ($widget['name'] == $widgetName || $widget['name'] == Piwik::translate($widgetName)) {
|
||||
unset(self::$widgets[$widgetCategory][$id]);
|
||||
self::$listCacheToBeInvalidated = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -187,10 +248,10 @@ class WidgetsList
|
|||
* @param string $controllerAction The controller action of the report.
|
||||
* @return bool
|
||||
*/
|
||||
static public function isDefined($controllerName, $controllerAction)
|
||||
public static function isDefined($controllerName, $controllerAction)
|
||||
{
|
||||
$widgetsList = self::get();
|
||||
foreach ($widgetsList as $widgetCategory => $widgets) {
|
||||
foreach ($widgetsList as $widgets) {
|
||||
foreach ($widgets as $widget) {
|
||||
if ($widget['parameters']['module'] == $controllerName
|
||||
&& $widget['parameters']['action'] == $controllerAction
|
||||
|
|
@ -209,7 +270,18 @@ class WidgetsList
|
|||
*/
|
||||
public static function _reset()
|
||||
{
|
||||
self::$widgets = null;
|
||||
self::$widgets = array();
|
||||
self::$hookCalled = false;
|
||||
self::getCacheForCompleteList()->delete(self::getCacheId());
|
||||
}
|
||||
|
||||
private static function getCacheId()
|
||||
{
|
||||
return CacheId::pluginAware('WidgetsList');
|
||||
}
|
||||
|
||||
private static function getCacheForCompleteList()
|
||||
{
|
||||
return PiwikCache::getTransientCache();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue