update Piwik to version 2.16 (fixes #91)
This commit is contained in:
parent
9abe039dc8
commit
47263617c5
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,8 +8,11 @@
|
|||
*/
|
||||
namespace Piwik\ViewDataTable;
|
||||
|
||||
use Piwik\Cache;
|
||||
use Piwik\Common;
|
||||
use Piwik\Option;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Report;
|
||||
use Piwik\Plugin\ViewDataTable;
|
||||
use Piwik\Plugins\CoreVisualizations\Visualizations\Cloud;
|
||||
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
|
||||
|
|
@ -17,6 +20,7 @@ use Piwik\Plugins\CoreVisualizations\Visualizations\JqplotGraph\Bar;
|
|||
use Piwik\Plugins\CoreVisualizations\Visualizations\JqplotGraph\Pie;
|
||||
use Piwik\Plugins\Goals\Visualizations\Goals;
|
||||
use Piwik\Plugins\Insights\Visualizations\Insight;
|
||||
use Piwik\Plugin\Manager as PluginManager;
|
||||
|
||||
/**
|
||||
* ViewDataTable Manager.
|
||||
|
|
@ -61,23 +65,35 @@ class Manager
|
|||
*/
|
||||
public static function getAvailableViewDataTables()
|
||||
{
|
||||
$cache = Cache::getTransientCache();
|
||||
$cacheId = 'ViewDataTable.getAvailableViewDataTables';
|
||||
$dataTables = $cache->fetch($cacheId);
|
||||
|
||||
if (!empty($dataTables)) {
|
||||
return $dataTables;
|
||||
}
|
||||
|
||||
$klassToExtend = '\\Piwik\\Plugin\\ViewDataTable';
|
||||
|
||||
/** @var string[] $visualizations */
|
||||
$visualizations = array();
|
||||
$visualizations = PluginManager::getInstance()->findMultipleComponents('Visualizations', $klassToExtend);
|
||||
|
||||
/**
|
||||
* Triggered when gathering all available DataTable visualizations.
|
||||
*
|
||||
*
|
||||
* Plugins that want to expose new DataTable visualizations should subscribe to
|
||||
* this event and add visualization class names to the incoming array.
|
||||
*
|
||||
*
|
||||
* **Example**
|
||||
*
|
||||
*
|
||||
* public function addViewDataTable(&$visualizations)
|
||||
* {
|
||||
* $visualizations[] = 'Piwik\\Plugins\\MyPlugin\\MyVisualization';
|
||||
* }
|
||||
*
|
||||
*
|
||||
* @param array &$visualizations The array of all available visualizations.
|
||||
* @ignore
|
||||
* @deprecated since 2.5.0 Place visualization in a "Visualizations" directory instead.
|
||||
*/
|
||||
Piwik::postEvent('ViewDataTable.addViewDataTable', array(&$visualizations));
|
||||
|
||||
|
|
@ -88,7 +104,7 @@ class Manager
|
|||
throw new \Exception("Invalid visualization class '$viz' found in Visualization.getAvailableVisualizations.");
|
||||
}
|
||||
|
||||
if (!is_subclass_of($viz, '\\Piwik\\Plugin\\ViewDataTable')) {
|
||||
if (!is_subclass_of($viz, $klassToExtend)) {
|
||||
throw new \Exception("ViewDataTable class '$viz' does not extend Plugin/ViewDataTable");
|
||||
}
|
||||
|
||||
|
|
@ -101,6 +117,8 @@ class Manager
|
|||
$result[$vizId] = $viz;
|
||||
}
|
||||
|
||||
$cache->save($cacheId, $result);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
|
@ -150,46 +168,7 @@ class Manager
|
|||
{
|
||||
$result = array();
|
||||
|
||||
// add normal view icons (eg, normal table, all columns, goals)
|
||||
$normalViewIcons = array(
|
||||
'class' => 'tableAllColumnsSwitch',
|
||||
'buttons' => array(),
|
||||
);
|
||||
|
||||
if ($view->config->show_table) {
|
||||
$normalViewIcons['buttons'][] = static::getFooterIconFor(HtmlTable::ID);
|
||||
}
|
||||
|
||||
if ($view->config->show_table_all_columns) {
|
||||
$normalViewIcons['buttons'][] = static::getFooterIconFor(HtmlTable\AllColumns::ID);
|
||||
}
|
||||
|
||||
if ($view->config->show_goals) {
|
||||
$goalButton = static::getFooterIconFor(Goals::ID);
|
||||
if (Common::getRequestVar('idGoal', false) == 'ecommerceOrder') {
|
||||
$goalButton['icon'] = 'plugins/Zeitgeist/images/ecommerceOrder.gif';
|
||||
}
|
||||
|
||||
$normalViewIcons['buttons'][] = $goalButton;
|
||||
}
|
||||
|
||||
if ($view->config->show_ecommerce) {
|
||||
$normalViewIcons['buttons'][] = array(
|
||||
'id' => 'ecommerceOrder',
|
||||
'title' => Piwik::translate('General_EcommerceOrders'),
|
||||
'icon' => 'plugins/Zeitgeist/images/ecommerceOrder.gif',
|
||||
'text' => Piwik::translate('General_EcommerceOrders')
|
||||
);
|
||||
|
||||
$normalViewIcons['buttons'][] = array(
|
||||
'id' => 'ecommerceAbandonedCart',
|
||||
'title' => Piwik::translate('General_AbandonedCarts'),
|
||||
'icon' => 'plugins/Zeitgeist/images/ecommerceAbandonedCart.gif',
|
||||
'text' => Piwik::translate('General_AbandonedCarts')
|
||||
);
|
||||
}
|
||||
|
||||
$normalViewIcons['buttons'] = array_filter($normalViewIcons['buttons']);
|
||||
$normalViewIcons = self::getNormalViewIcons($view);
|
||||
|
||||
if (!empty($normalViewIcons['buttons'])) {
|
||||
$result[] = $normalViewIcons;
|
||||
|
|
@ -201,25 +180,7 @@ class Manager
|
|||
'buttons' => array(),
|
||||
);
|
||||
|
||||
// add graph views
|
||||
$graphViewIcons = array(
|
||||
'class' => 'tableGraphViews tableGraphCollapsed',
|
||||
'buttons' => array(),
|
||||
);
|
||||
|
||||
if ($view->config->show_all_views_icons) {
|
||||
if ($view->config->show_bar_chart) {
|
||||
$graphViewIcons['buttons'][] = static::getFooterIconFor(Bar::ID);
|
||||
}
|
||||
|
||||
if ($view->config->show_pie_chart) {
|
||||
$graphViewIcons['buttons'][] = static::getFooterIconFor(Pie::ID);
|
||||
}
|
||||
|
||||
if ($view->config->show_tag_cloud) {
|
||||
$graphViewIcons['buttons'][] = static::getFooterIconFor(Cloud::ID);
|
||||
}
|
||||
}
|
||||
$graphViewIcons = self::getGraphViewIcons($view);
|
||||
|
||||
$nonCoreVisualizations = static::getNonCoreViewDataTables();
|
||||
|
||||
|
|
@ -236,7 +197,9 @@ class Manager
|
|||
|
||||
$graphViewIcons['buttons'] = array_filter($graphViewIcons['buttons']);
|
||||
|
||||
if (!empty($insightsViewIcons['buttons'])) {
|
||||
if (!empty($insightsViewIcons['buttons'])
|
||||
&& $view->config->show_insights
|
||||
) {
|
||||
$result[] = $insightsViewIcons;
|
||||
}
|
||||
|
||||
|
|
@ -270,4 +233,192 @@ class Manager
|
|||
'icon' => $klass::FOOTER_ICON,
|
||||
);
|
||||
}
|
||||
|
||||
public static function clearAllViewDataTableParameters()
|
||||
{
|
||||
Option::deleteLike('viewDataTableParameters_%');
|
||||
}
|
||||
|
||||
public static function clearUserViewDataTableParameters($userLogin)
|
||||
{
|
||||
Option::deleteLike('viewDataTableParameters_' . $userLogin . '_%');
|
||||
}
|
||||
|
||||
public static function getViewDataTableParameters($login, $controllerAction)
|
||||
{
|
||||
$paramsKey = self::buildViewDataTableParametersOptionKey($login, $controllerAction);
|
||||
$params = Option::get($paramsKey);
|
||||
|
||||
if (empty($params)) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$params = json_decode($params);
|
||||
$params = (array) $params;
|
||||
|
||||
// when setting an invalid parameter, we silently ignore the invalid parameter and proceed
|
||||
$params = self::removeNonOverridableParameters($controllerAction, $params);
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Any parameter set here will be set into one of the following objects:
|
||||
*
|
||||
* - ViewDataTable.requestConfig[paramName]
|
||||
* - ViewDataTable.config.custom_parameters[paramName]
|
||||
* - ViewDataTable.config.custom_parameters[paramName]
|
||||
*
|
||||
* (see ViewDataTable::overrideViewPropertiesWithParams)
|
||||
|
||||
* @param $login
|
||||
* @param $controllerAction
|
||||
* @param $parametersToOverride
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function saveViewDataTableParameters($login, $controllerAction, $parametersToOverride)
|
||||
{
|
||||
$params = self::getViewDataTableParameters($login, $controllerAction);
|
||||
|
||||
foreach ($parametersToOverride as $key => $value) {
|
||||
if ($key === 'viewDataTable'
|
||||
&& !empty($params[$key])
|
||||
&& $params[$key] !== $value) {
|
||||
if (!empty($params['columns'])) {
|
||||
unset($params['columns']);
|
||||
}
|
||||
if (!empty($params['columns_to_display'])) {
|
||||
unset($params['columns_to_display']);
|
||||
}
|
||||
}
|
||||
|
||||
$params[$key] = $value;
|
||||
}
|
||||
|
||||
$paramsKey = self::buildViewDataTableParametersOptionKey($login, $controllerAction);
|
||||
|
||||
// when setting an invalid parameter, we fail and let user know
|
||||
self::errorWhenSettingNonOverridableParameter($controllerAction, $params);
|
||||
|
||||
Option::set($paramsKey, json_encode($params));
|
||||
}
|
||||
|
||||
private static function buildViewDataTableParametersOptionKey($login, $controllerAction)
|
||||
{
|
||||
return sprintf('viewDataTableParameters_%s_%s', $login, $controllerAction);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a meaningful error message when any invalid parameter is being set.
|
||||
*
|
||||
* @param $params
|
||||
* @throws
|
||||
*/
|
||||
private static function errorWhenSettingNonOverridableParameter($controllerAction, $params)
|
||||
{
|
||||
$viewDataTable = self::makeTemporaryViewDataTableInstance($controllerAction, $params);
|
||||
$viewDataTable->throwWhenSettingNonOverridableParameter($params);
|
||||
}
|
||||
|
||||
private static function removeNonOverridableParameters($controllerAction, $params)
|
||||
{
|
||||
$viewDataTable = self::makeTemporaryViewDataTableInstance($controllerAction, $params);
|
||||
$nonOverridableParams = $viewDataTable->getNonOverridableParams($params);
|
||||
|
||||
foreach($params as $key => $value) {
|
||||
if(in_array($key, $nonOverridableParams)) {
|
||||
unset($params[$key]);
|
||||
}
|
||||
}
|
||||
return $params;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $controllerAction
|
||||
* @param $params
|
||||
* @return ViewDataTable
|
||||
* @throws \Exception
|
||||
*/
|
||||
private static function makeTemporaryViewDataTableInstance($controllerAction, $params)
|
||||
{
|
||||
$report = new Report();
|
||||
$viewDataTableType = isset($params['viewDataTable']) ? $params['viewDataTable'] : $report->getDefaultTypeViewDataTable();
|
||||
|
||||
$apiAction = $controllerAction;
|
||||
$loadViewDataTableParametersForUser = false;
|
||||
$viewDataTable = Factory::build($viewDataTableType, $apiAction, $controllerAction, $forceDefault = false, $loadViewDataTableParametersForUser);
|
||||
return $viewDataTable;
|
||||
}
|
||||
|
||||
private static function getNormalViewIcons(ViewDataTable $view)
|
||||
{
|
||||
// add normal view icons (eg, normal table, all columns, goals)
|
||||
$normalViewIcons = array(
|
||||
'class' => 'tableAllColumnsSwitch',
|
||||
'buttons' => array(),
|
||||
);
|
||||
|
||||
if ($view->config->show_table) {
|
||||
$normalViewIcons['buttons'][] = static::getFooterIconFor(HtmlTable::ID);
|
||||
}
|
||||
|
||||
if ($view->config->show_table_all_columns) {
|
||||
$normalViewIcons['buttons'][] = static::getFooterIconFor(HtmlTable\AllColumns::ID);
|
||||
}
|
||||
|
||||
if ($view->config->show_goals) {
|
||||
$goalButton = static::getFooterIconFor(Goals::ID);
|
||||
if (Common::getRequestVar('idGoal', false) == 'ecommerceOrder') {
|
||||
$goalButton['icon'] = 'plugins/Morpheus/images/ecommerceOrder.gif';
|
||||
}
|
||||
|
||||
$normalViewIcons['buttons'][] = $goalButton;
|
||||
}
|
||||
|
||||
if ($view->config->show_ecommerce) {
|
||||
$normalViewIcons['buttons'][] = array(
|
||||
'id' => 'ecommerceOrder',
|
||||
'title' => Piwik::translate('General_EcommerceOrders'),
|
||||
'icon' => 'plugins/Morpheus/images/ecommerceOrder.gif',
|
||||
'text' => Piwik::translate('General_EcommerceOrders')
|
||||
);
|
||||
|
||||
$normalViewIcons['buttons'][] = array(
|
||||
'id' => 'ecommerceAbandonedCart',
|
||||
'title' => Piwik::translate('General_AbandonedCarts'),
|
||||
'icon' => 'plugins/Morpheus/images/ecommerceAbandonedCart.gif',
|
||||
'text' => Piwik::translate('General_AbandonedCarts')
|
||||
);
|
||||
}
|
||||
|
||||
$normalViewIcons['buttons'] = array_filter($normalViewIcons['buttons']);
|
||||
|
||||
return $normalViewIcons;
|
||||
}
|
||||
|
||||
private static function getGraphViewIcons(ViewDataTable $view)
|
||||
{
|
||||
// add graph views
|
||||
$graphViewIcons = array(
|
||||
'class' => 'tableGraphViews tableGraphCollapsed',
|
||||
'buttons' => array(),
|
||||
);
|
||||
|
||||
if ($view->config->show_all_views_icons) {
|
||||
if ($view->config->show_bar_chart) {
|
||||
$graphViewIcons['buttons'][] = static::getFooterIconFor(Bar::ID);
|
||||
}
|
||||
|
||||
if ($view->config->show_pie_chart) {
|
||||
$graphViewIcons['buttons'][] = static::getFooterIconFor(Pie::ID);
|
||||
}
|
||||
|
||||
if ($view->config->show_tag_cloud) {
|
||||
$graphViewIcons['buttons'][] = static::getFooterIconFor(Cloud::ID);
|
||||
}
|
||||
}
|
||||
|
||||
return $graphViewIcons;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue