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-09-19 07:04:06 +0400
committermattab <matthieu.aubry@gmail.com>2013-09-19 07:04:06 +0400
commitf66269901cc6df914f745d8fbedb2480cf1f9e5e (patch)
tree6608439f19411f1c5e5aa704a2c972465c30812e
parent995d381cc6c16690e6451e105a03e6cd76b160fc (diff)
parent6b906ed1444d904abc0f39cae0b7da5e5f22c74b (diff)
Merge remote-tracking branch 'origin/master'
-rw-r--r--core/DataTableVisualization.php15
-rw-r--r--core/PluginsManager.php78
-rw-r--r--core/View.php20
-rw-r--r--core/Visualization/Graph.php5
-rw-r--r--plugins/CoreHome/templates/_dataTable.twig4
-rw-r--r--plugins/CorePluginsAdmin/Controller.php88
-rwxr-xr-xplugins/CorePluginsAdmin/javascripts/pluginDetail.js37
-rw-r--r--plugins/CorePluginsAdmin/templates/browsePlugins.twig19
-rw-r--r--plugins/CorePluginsAdmin/templates/browseThemes.twig7
-rw-r--r--plugins/CorePluginsAdmin/templates/installPlugin.twig26
-rw-r--r--plugins/CorePluginsAdmin/templates/macros.twig4
-rw-r--r--plugins/CorePluginsAdmin/templates/plugins.twig8
-rw-r--r--plugins/CorePluginsAdmin/templates/themes.twig6
-rw-r--r--plugins/CorePluginsAdmin/templates/updatePlugin.twig6
-rw-r--r--plugins/CoreVisualizations/JqplotDataGenerator/Chart.php2
-rw-r--r--plugins/CoreVisualizations/Visualizations/Cloud.php74
-rw-r--r--plugins/CoreVisualizations/Visualizations/HtmlTable.php18
-rw-r--r--plugins/CoreVisualizations/Visualizations/JqplotGraph.php38
-rw-r--r--plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php18
-rw-r--r--plugins/CoreVisualizations/templates/_dataTableViz_htmlTable.twig2
-rw-r--r--plugins/CoreVisualizations/templates/_dataTableViz_jqplotGraph.twig3
-rw-r--r--plugins/Live/VisitorLog.php18
-rw-r--r--plugins/TreemapVisualization/Treemap.php22
-rw-r--r--plugins/TreemapVisualization/templates/_dataTableViz_treemap.twig2
24 files changed, 291 insertions, 229 deletions
diff --git a/core/DataTableVisualization.php b/core/DataTableVisualization.php
index bfab67dfd6..788ae50064 100644
--- a/core/DataTableVisualization.php
+++ b/core/DataTableVisualization.php
@@ -20,7 +20,7 @@ use Piwik\DataTable;
*
* TODO: must be more in depth
*/
-abstract class DataTableVisualization
+abstract class DataTableVisualization extends View
{
/**
* This event is used to gather all available DataTable visualizations. Callbacks
@@ -31,15 +31,6 @@ abstract class DataTableVisualization
const GET_AVAILABLE_EVENT = 'DataTableVisualization.getAvailable';
/**
- * Rendering function. Must return the view HTML.
- *
- * @param DataTable|DataTable\Map $dataTable The data.
- * @param array $properties The view properties.
- * @return string The visualization HTML.
- */
- //public abstract function render($dataTable, $properties); temporarily commented out
-
- /**
* Default implementation of getDefaultPropertyValues static function.
*
* @return array
@@ -120,11 +111,11 @@ abstract class DataTableVisualization
*/
public static function getVisualizationClassLineage($klass)
{
- $klasses = array_merge(array($klass), class_parents($klass, $autoload = false));
+ $klasses = array_merge(array($klass), array_values(class_parents($klass, $autoload = false)));
$idx = array_search('Piwik\\DataTableVisualization', $klasses);
if ($idx !== false) {
- unset($klasses[$idx]);
+ $klasses = array_slice($klasses, 0, $idx);
}
return array_reverse($klasses);
diff --git a/core/PluginsManager.php b/core/PluginsManager.php
index 11b6e0de7b..6e099f0d78 100644
--- a/core/PluginsManager.php
+++ b/core/PluginsManager.php
@@ -13,6 +13,7 @@ namespace Piwik;
use Piwik\Plugin\MetadataLoader;
use Piwik\Translate;
+use Piwik\Option;
require_once PIWIK_INCLUDE_PATH . '/core/EventDispatcher.php';
@@ -201,6 +202,16 @@ class PluginsManager
throw new \Exception("You are trying to uninstall the plugin $pluginName but it was not found in the directory piwik/plugins/");
}
self::deletePluginFromFilesystem($pluginName);
+
+ $this->removePluginFromPluginsConfig($pluginName);
+ $this->removePluginFromPluginsInstalledConfig($pluginName);
+ $this->removePluginFromTrackerConfig($pluginName);
+
+ Option::getInstance()->delete('version_' . $pluginName);
+
+ Config::getInstance()->forceSave();
+ Filesystem::deleteAllCacheOnUpdate();
+
if($this->isPluginInFilesystem($pluginName)) {
return false;
}
@@ -221,29 +232,17 @@ class PluginsManager
*/
public function deactivatePlugin($pluginName, $plugins = false)
{
- if(empty($plugins)) {
+ if (empty($plugins)) {
$plugins = $this->pluginsToLoad;
}
- $key = array_search($pluginName, $plugins);
$plugin = $this->loadPlugin($pluginName);
if ($plugin !== null) {
$plugin->deactivate();
}
- if ($key !== false) {
- unset($plugins[$key]);
- }
- $this->updatePluginsConfig($plugins);
-
- $pluginsTracker = Config::getInstance()->Plugins_Tracker['Plugins_Tracker'];
- if (!is_null($pluginsTracker)) {
- $key = array_search($pluginName, $pluginsTracker);
- if ($key !== false) {
- unset($pluginsTracker[$key]);
- $this->updatePluginsTrackerConfig($pluginsTracker);
- }
- }
+ $this->removePluginFromPluginsConfig($pluginName, $plugins);
+ $this->removePluginFromTrackerConfig($pluginName);
Config::getInstance()->forceSave();
Filesystem::deleteAllCacheOnUpdate();
@@ -811,6 +810,55 @@ class PluginsManager
return file_exists($path . "/" . $name . ".php")
|| self::isManifestFileFound($path);
}
+
+ /**
+ * @param $pluginName
+ */
+ private function removePluginFromPluginsInstalledConfig($pluginName)
+ {
+ $pluginsInstalled = Config::getInstance()->PluginsInstalled['PluginsInstalled'];
+ $key = array_search($pluginName, $pluginsInstalled);
+ if ($key !== false) {
+ unset($pluginsInstalled[$key]);
+ }
+
+ $this->updatePluginsInstalledConfig($pluginsInstalled);
+ }
+
+ /**
+ * @param $pluginName
+ * @param $plugins
+ * @return mixed
+ */
+ private function removePluginFromPluginsConfig($pluginName, $plugins = false)
+ {
+ if (empty($plugins)) {
+ $plugins = $this->pluginsToLoad;
+ }
+
+ $key = array_search($pluginName, $plugins);
+
+ if ($key !== false) {
+ unset($plugins[$key]);
+ }
+
+ $this->updatePluginsConfig($plugins);
+ }
+
+ /**
+ * @param $pluginName
+ */
+ private function removePluginFromTrackerConfig($pluginName)
+ {
+ $pluginsTracker = Config::getInstance()->Plugins_Tracker['Plugins_Tracker'];
+ if (!is_null($pluginsTracker)) {
+ $key = array_search($pluginName, $pluginsTracker);
+ if ($key !== false) {
+ unset($pluginsTracker[$key]);
+ $this->updatePluginsTrackerConfig($pluginsTracker);
+ }
+ }
+ }
}
/**
diff --git a/core/View.php b/core/View.php
index 65f6b14faf..72395a3598 100644
--- a/core/View.php
+++ b/core/View.php
@@ -57,6 +57,26 @@ class View implements ViewInterface
}
/**
+ * Returns the template filename.
+ *
+ * @return string
+ */
+ public function getTemplateFile()
+ {
+ return $this->template;
+ }
+
+ /**
+ * Returns the variables to bind to the template when rendering.
+ *
+ * @return array
+ */
+ public function getTemplateVars()
+ {
+ return $this->templateVars;
+ }
+
+ /**
* Directly assigns a variable to the view script.
* VAR names may not be prefixed with '_'.
*
diff --git a/core/Visualization/Graph.php b/core/Visualization/Graph.php
index ead67f3169..c47523bbbc 100644
--- a/core/Visualization/Graph.php
+++ b/core/Visualization/Graph.php
@@ -127,9 +127,12 @@ abstract class Graph extends DataTableVisualization
* Constructor.
*
* @param \Piwik\ViewDataTable $view
+ * @param string $template
*/
- public function __construct($view)
+ public function __construct($view, $template)
{
+ parent::__construct($template);
+
if ($view->show_goals) {
$view->translations['nb_conversions'] = Piwik_Translate('Goals_ColumnConversions');
$view->translations['revenue'] = Piwik_Translate('General_TotalRevenue');
diff --git a/plugins/CoreHome/templates/_dataTable.twig b/plugins/CoreHome/templates/_dataTable.twig
index e98ff87591..02b11804c4 100644
--- a/plugins/CoreHome/templates/_dataTable.twig
+++ b/plugins/CoreHome/templates/_dataTable.twig
@@ -1,5 +1,5 @@
{% if properties.show_visualization_only %}
- {{ visualization.render(dataTable, properties)|raw }}
+ {% include visualization.getTemplateFile() with visualization.getTemplateVars() %}
{%- else -%}
{% set summaryRowId = constant('Piwik\\DataTable::ID_SUMMARY_ROW') %}{# ID_SUMMARY_ROW #}
@@ -26,7 +26,7 @@
{% endif %}
</div>
{% else %}
- {{ visualization.render(dataTable, properties, javascriptVariablesToSet)|raw }}
+ {% include visualization.getTemplateFile() with visualization.getTemplateVars() %}
{% endif %}
{% if properties.show_footer %}
diff --git a/plugins/CorePluginsAdmin/Controller.php b/plugins/CorePluginsAdmin/Controller.php
index 41ccd1c33d..4f6f486a2a 100644
--- a/plugins/CorePluginsAdmin/Controller.php
+++ b/plugins/CorePluginsAdmin/Controller.php
@@ -32,32 +32,6 @@ class Controller extends \Piwik\Controller\Admin
private $validSortMethods = array('popular', 'newest', 'alpha');
private $defaultSortMethod = 'popular';
- public function activatePlugin()
- {
- $pluginName = Common::getRequestVar('pluginName', '', 'string');
- $nonce = Common::getRequestVar('nonce', '', 'string');
-
- if (empty($pluginName)) {
- throw new \Exception('Plugin parameter is missing');
- }
-
- if (!Nonce::verifyNonce('CorePluginsAdmin.activatePlugin', $nonce)) {
- throw new \Exception(Piwik_Translate('ExceptionNonceMismatch'));
- }
-
- Nonce::discardNonce('CorePluginsAdmin.activatePlugin');
-
- $plugin = PluginsManager::getInstance()->loadPlugin($pluginName);
-
- if (empty($plugin)) {
- throw new \Exception('Failed to activate, the plugin is not installed');
- }
-
- PluginsManager::getInstance()->activatePlugin($pluginName);
-
- $this->redirectToIndex('CorePluginsAdmin', 'extend');
- }
-
public function updatePlugin()
{
$view = $this->configureView('@CorePluginsAdmin/updatePlugin');
@@ -171,8 +145,8 @@ class Controller extends \Piwik\Controller\Admin
$loadedPlugins = PluginsManager::getInstance()->getLoadedPlugins();
foreach ($plugins as $plugin) {
- $plugin->isInstalled = !empty($loadedPlugins[$plugin->name]);
- $plugin->createdDateTime = Date::factory($plugin->createdDateTime)->getLocalized(Piwik_Translate('CoreHome_ShortDateFormatWithYear'));
+ $plugin->isInstalled = !empty($loadedPlugins[$plugin->name]);
+ $plugin->lastUpdated = Date::factory($plugin->lastUpdated)->getLocalized(Piwik_Translate('CoreHome_ShortDateFormatWithYear'));
}
$view->plugins = $plugins;
@@ -198,8 +172,8 @@ class Controller extends \Piwik\Controller\Admin
$loadedPlugins = PluginsManager::getInstance()->getLoadedPlugins();
foreach ($plugins as $plugin) {
- $plugin->isInstalled = !empty($loadedPlugins[$plugin->name]);
- $plugin->createdDateTime = Date::factory($plugin->createdDateTime)->getLocalized(Piwik_Translate('CoreHome_ShortDateFormatWithYear'));
+ $plugin->isInstalled = !empty($loadedPlugins[$plugin->name]);
+ $plugin->lastUpdated = Date::factory($plugin->lastUpdated)->getLocalized(Piwik_Translate('CoreHome_ShortDateFormatWithYear'));
}
$view->plugins = $plugins;
@@ -218,10 +192,19 @@ class Controller extends \Piwik\Controller\Admin
function plugins()
{
+ $activated = Common::getRequestVar('activated', false, 'integer', $_GET);
+ $pluginName = Common::getRequestVar('pluginName', '', 'string');
+
$view = $this->configureView('@CorePluginsAdmin/plugins');
- $view->updateNonce = Nonce::getNonce('CorePluginsAdmin.updatePlugin');
- $view->pluginsInfo = $this->getPluginsInfo();
+ $view->activatedPluginName = '';
+ if ($activated && $pluginName) {
+ $view->activatedPluginName = $pluginName;
+ }
+
+ $view->updateNonce = Nonce::getNonce('CorePluginsAdmin.updatePlugin');
+ $view->activateNonce = Nonce::getNonce('CorePluginsAdmin.activatePlugin');
+ $view->pluginsInfo = $this->getPluginsInfo();
$view->pluginsHavingUpdate = $this->getPluginsHavingUpdate($themesOnly = false);
@@ -230,12 +213,21 @@ class Controller extends \Piwik\Controller\Admin
function themes()
{
+ $activated = Common::getRequestVar('activated', false, 'integer', $_GET);
+ $pluginName = Common::getRequestVar('pluginName', '', 'string');
+
$view = $this->configureView('@CorePluginsAdmin/themes');
+ $view->activatedPluginName = '';
+ if ($activated && $pluginName) {
+ $view->activatedPluginName = $pluginName;
+ }
+
$pluginsInfo = $this->getPluginsInfo($themesOnly = true);
- $view->updateNonce = Nonce::getNonce('CorePluginsAdmin.updatePlugin');
- $view->pluginsInfo = $pluginsInfo;
+ $view->updateNonce = Nonce::getNonce('CorePluginsAdmin.updatePlugin');
+ $view->activateNonce = Nonce::getNonce('CorePluginsAdmin.activatePlugin');
+ $view->pluginsInfo = $pluginsInfo;
$view->pluginsHavingUpdate = $this->getPluginsHavingUpdate($pluginsInfo, $themesOnly = true);
echo $view->render();
@@ -315,9 +307,33 @@ class Controller extends \Piwik\Controller\Admin
public function activate($redirectAfter = true)
{
- $pluginName = $this->initPluginModification();
+ Piwik::checkUserIsSuperUser();
+
+ $pluginName = Common::getRequestVar('pluginName', '', 'string');
+ $nonce = Common::getRequestVar('nonce', '', 'string');
+
+ if (empty($pluginName)) {
+ throw new \Exception('Plugin parameter is missing');
+ }
+
+ if (!Nonce::verifyNonce('CorePluginsAdmin.activatePlugin', $nonce)) {
+ throw new \Exception(Piwik_Translate('ExceptionNonceMismatch'));
+ }
+
+ Nonce::discardNonce('CorePluginsAdmin.activatePlugin');
+
\Piwik\PluginsManager::getInstance()->activatePlugin($pluginName);
- $this->redirectAfterModification($redirectAfter);
+
+ if ($redirectAfter) {
+ $params = array('activated' => 1, 'pluginName' => $pluginName);
+ $plugin = PluginsManager::getInstance()->loadPlugin($pluginName);
+
+ if ($plugin->isTheme()) {
+ $this->redirectToIndex('CorePluginsAdmin', 'themes', null, null, null, $params);
+ } else {
+ $this->redirectToIndex('CorePluginsAdmin', 'plugins', null, null, null, $params);
+ }
+ }
}
public function uninstall($redirectAfter = true)
diff --git a/plugins/CorePluginsAdmin/javascripts/pluginDetail.js b/plugins/CorePluginsAdmin/javascripts/pluginDetail.js
index 7fb7eb3cc8..2f95fe47dc 100755
--- a/plugins/CorePluginsAdmin/javascripts/pluginDetail.js
+++ b/plugins/CorePluginsAdmin/javascripts/pluginDetail.js
@@ -7,6 +7,43 @@
$(document).ready(function () {
+ function syncMaxHeight (selector) {
+
+ if (!selector) {
+ return;
+ }
+
+ var $nodes = $(selector);
+
+ if (!$nodes) {
+ return;
+ }
+
+ var max = {};
+ $nodes.each(function (index, node) {
+ var $node = $(node);
+ var top = $node.position().top;
+
+ var height = $node.height();
+
+ if (!max[top]) {
+ max[top] = height;
+ } else if (max[top] < height) {
+ max[top] = height;
+ }
+ });
+
+ $nodes.each(function (index, node) {
+ var $node = $(node);
+ var top = $node.position().top;
+
+ $node.height(max[top] + 'px');
+ });
+ }
+
+ syncMaxHeight('.pluginslist .plugin');
+ syncMaxHeight('.themeslist .plugin');
+
$('.pluginslist').on('click', '.more', function (event) {
var pluginName = $( this ).text();
var url = 'module=CorePluginsAdmin&action=pluginDetails&pluginName=' + pluginName;
diff --git a/plugins/CorePluginsAdmin/templates/browsePlugins.twig b/plugins/CorePluginsAdmin/templates/browsePlugins.twig
index e8d2917f37..62b1e89b33 100644
--- a/plugins/CorePluginsAdmin/templates/browsePlugins.twig
+++ b/plugins/CorePluginsAdmin/templates/browsePlugins.twig
@@ -2,17 +2,20 @@
{% block content %}
<style type="text/css">
- .plugin { padding: 15px;border-top: 5px solid white; }
- .plugin.first { border-top: 0px; }
- .plugin.odd { background-color: #F6F5F3; }
- .plugin.even { background-color: #EFEEEC; }
+ .plugin {
+ width: 280px; float: left; border: 1px solid #dadada; padding: 15px; background-color: #F6F5F3;
+ margin-right: 14px; margin-bottom: 15px;
+ }
+ .plugin:hover {
+ background-color: #EFEEEC;
+ }
.plugin li { display: inline-block;padding-right: 10px;font-size: 90%; }
- .plugin ul { list-style: none;margin-left: 0; }
+ .plugin ul { list-style: none;margin-left: 0; line-height: 140%; }
.plugin .header { margin-top: 0px; margin-bottom: 15px; }
.plugin .description { padding-bottom: 10px; }
.plugin .install { float: right; }
.plugin .more { font-weight: bold; text-decoration: none; color: #255792; }
- .pluginslist { margin-top: 20px;max-width:980px;clear: right;border: 1px solid #dadada; padding: 2px; }
+ .pluginslist { margin-top: 20px;max-width:980px;clear: right; }
.infoBox {
font-size: 14px;
margin: 0px 0px 10px 10px;
@@ -61,7 +64,7 @@
{% if plugins|length %}
{% for plugin in plugins %}
- <div class="plugin {{ cycle(['odd', 'even'], loop.index) }} {% if loop.first %}first{% endif %}">
+ <div class="plugin">
{% if plugin.isInstalled %}
<span class="install">Installed</span>
{% else %}
@@ -75,7 +78,7 @@
<hr class="metadataSeparator">
<ul>
<li>Version <strong>{{ plugin.latestVersion }}</strong></li>
- <li>Updated <strong>{{ plugin.createdDateTime }}</strong></li>
+ <li>Updated <strong>{{ plugin.lastUpdated }}</strong></li>
<li>Downloads <strong>{{ plugin.numDownloads }}</strong></li>
</ul>
diff --git a/plugins/CorePluginsAdmin/templates/browseThemes.twig b/plugins/CorePluginsAdmin/templates/browseThemes.twig
index 74fd159287..4455b1d435 100644
--- a/plugins/CorePluginsAdmin/templates/browseThemes.twig
+++ b/plugins/CorePluginsAdmin/templates/browseThemes.twig
@@ -3,7 +3,7 @@
{% block content %}
<style type="text/css">
.plugin li { display: inline-block;padding-right: 10px;font-size: 90%; }
- .plugin ul { list-style: none;margin-left: 0; }
+ .plugin ul { list-style: none;margin-left: 0; line-height: 140%; }
.plugin .description { padding-bottom: 10px; }
.plugin .install { float: right; }
.plugin .more { font-weight: bold; text-decoration: none; color: #1D3256 }
@@ -12,6 +12,9 @@
.plugin { width: 280px; float: left; border: 1px solid #dadada; padding: 15px; background-color: #F6F5F3;
margin-right: 14px; margin-bottom: 15px;
}
+ .plugin:hover {
+ background-color: #EFEEEC;
+ }
.themeslist { margin-top: 20px;max-width:980px;clear:right; }
.infoBox {
font-size: 14px;
@@ -66,7 +69,7 @@
<img src="{{ plugin.screenshots|first }}?w=250&h=250" height="250" width="250"/>
<ul class="metadata">
<li>Version <strong>{{ plugin.latestVersion }}</strong></li>
- <li>Updated <strong>{{ plugin.createdDateTime }}</strong></li>
+ <li>Updated <strong>{{ plugin.lastUpdated }}</strong></li>
<li>Downloads <strong>{{ plugin.numDownloads }}</strong></li>
</ul>
diff --git a/plugins/CorePluginsAdmin/templates/installPlugin.twig b/plugins/CorePluginsAdmin/templates/installPlugin.twig
index 554b667716..8f52649c19 100644
--- a/plugins/CorePluginsAdmin/templates/installPlugin.twig
+++ b/plugins/CorePluginsAdmin/templates/installPlugin.twig
@@ -11,15 +11,31 @@
{% else %}
<div>
- <p>Downloading plugin from Marketplace</p>
- <p>Unzipping plugin</p>
+ {% if plugin.isTheme %}
+ <p>Downloading plugin from Marketplace</p>
- <p>Installing plugin</p>
+ <p>Unzipping plugin</p>
- <p>You have successfully installed the Plugin {{ plugin.name }} {{ plugin.latestVersion }}.</p>
+ <p>Installing plugin</p>
+
+ <p>You have successfully installed the Plugin {{ plugin.name }} {{ plugin.latestVersion }}.</p>
+
+ <p><strong><a href="{{ linkTo({'action': 'activate', 'pluginName': plugin.name, 'nonce': nonce}) }}">Activate Plugin</a></strong>
+
+ {% else %}
+ <p>Downloading theme from Marketplace</p>
+
+ <p>Unzipping theme</p>
+
+ <p>Installing theme</p>
+
+ <p>You have successfully installed the Theme {{ plugin.name }} {{ plugin.latestVersion }}.</p>
+
+ <p><strong><a href="{{ linkTo({'action': 'activate', 'pluginName': plugin.name, 'nonce': nonce}) }}">Activate Theme</a></strong>
+
+ {% endif %}
- <p><strong><a href="{{ linkTo({'action': 'activatePlugin', 'pluginName': plugin.name, 'nonce': nonce}) }}">Activate Plugin</a></strong>
|
<a href="{{ linkTo({'action': 'extend'}) }}">Back to Extend Piwik</a></p>
</div>
diff --git a/plugins/CorePluginsAdmin/templates/macros.twig b/plugins/CorePluginsAdmin/templates/macros.twig
index 62b7e74186..73e9c778ce 100644
--- a/plugins/CorePluginsAdmin/templates/macros.twig
+++ b/plugins/CorePluginsAdmin/templates/macros.twig
@@ -41,7 +41,7 @@
{% endmacro %}
-{% macro tablePlugins(pluginsInfo, token_auth, isTheme) %}
+{% macro tablePlugins(pluginsInfo, token_auth, activateNonce, isTheme) %}
<div class='entityContainer'>
<table class="dataTable entityTable">
@@ -94,7 +94,7 @@
{% if plugin.activated %}
<a href='index.php?module=CorePluginsAdmin&action=deactivate&pluginName={{ name }}&token_auth={{ token_auth }}'>{{ 'CorePluginsAdmin_Deactivate'|translate }}</a>
{% else %}
- <a href='index.php?module=CorePluginsAdmin&action=activate&pluginName={{ name }}&token_auth={{ token_auth }}'>{{ 'CorePluginsAdmin_Activate'|translate }}</a>
+ <a href='index.php?module=CorePluginsAdmin&action=activate&pluginName={{ name }}&nonce={{ activateNonce }}'>{{ 'CorePluginsAdmin_Activate'|translate }}</a>
{% endif %}
{% endif %}
</td>
diff --git a/plugins/CorePluginsAdmin/templates/plugins.twig b/plugins/CorePluginsAdmin/templates/plugins.twig
index 34375460ff..7b6887e915 100644
--- a/plugins/CorePluginsAdmin/templates/plugins.twig
+++ b/plugins/CorePluginsAdmin/templates/plugins.twig
@@ -5,17 +5,21 @@
{% block content %}
<div style="max-width:980px;">
+ {% if activatedPluginName %}
+ <div id="feedback-success">You have successfully activated plugin {{ activatedPluginName }}</div>
+ {% endif %}
+
{% if pluginsHavingUpdate|length %}
<h2>{{ pluginsHavingUpdate|length }} Update(s) available</h2>
- {{ plugins.tablePluginUpdates(pluginsHavingUpdate, updateNonce, 0) }}
+ {{ plugins.tablePluginUpdates(pluginsHavingUpdate, updateNonce, activateNonce, 0) }}
{% endif %}
<h2>{{ 'CorePluginsAdmin_PluginsManagement'|translate }}</h2>
<p>{{ 'CorePluginsAdmin_MainDescription'|translate }}</p>
- {{ plugins.tablePlugins(pluginsInfo, token_auth) }}
+ {{ plugins.tablePlugins(pluginsInfo, token_auth, activateNonce, false) }}
</div>
{% endblock %} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/templates/themes.twig b/plugins/CorePluginsAdmin/templates/themes.twig
index b77b6dd58c..b364c0fabf 100644
--- a/plugins/CorePluginsAdmin/templates/themes.twig
+++ b/plugins/CorePluginsAdmin/templates/themes.twig
@@ -5,6 +5,10 @@
{% block content %}
<div style="max-width:980px;">
+ {% if activatedPluginName %}
+ <div id="feedback-success">You have successfully activated plugin {{ activatedPluginName }}</div>
+ {% endif %}
+
{% if pluginsHavingUpdate|length %}
<h2>{{ pluginsHavingUpdate|length }} Update(s) available</h2>
@@ -15,7 +19,7 @@
<p>{{ 'CorePluginsAdmin_ThemesDescription'|translate }}</p>
- {{ plugins.tablePlugins(pluginsInfo, token_auth, true) }}
+ {{ plugins.tablePlugins(pluginsInfo, token_auth, activateNonce, true) }}
</div>
{% endblock %}
diff --git a/plugins/CorePluginsAdmin/templates/updatePlugin.twig b/plugins/CorePluginsAdmin/templates/updatePlugin.twig
index 700fa75d0b..5f661cb20c 100644
--- a/plugins/CorePluginsAdmin/templates/updatePlugin.twig
+++ b/plugins/CorePluginsAdmin/templates/updatePlugin.twig
@@ -19,8 +19,14 @@
<p>You have successfully updated the Plugin {{ plugin.name }} {{ plugin.latestVersion }}.</p>
+ <p><a href="{{ linkTo({'action': 'plugins'}) }}">Plugins</a>
+ |
+ <a href="{{ linkTo({'action': 'themes'}) }}">Themes</a>
+ |
+ <a href="{{ linkTo({'action': 'extend'}) }}">Extend Piwik</a></p>
</div>
+
{% endif %}
</div>
diff --git a/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php b/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
index b3253b340c..9590c7ef04 100644
--- a/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
+++ b/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
@@ -117,6 +117,6 @@ class Chart
'data' => &$this->data
);
- return Common::json_encode($data);
+ return $data;
}
} \ No newline at end of file
diff --git a/plugins/CoreVisualizations/Visualizations/Cloud.php b/plugins/CoreVisualizations/Visualizations/Cloud.php
index 6b016c38c5..8542416f33 100644
--- a/plugins/CoreVisualizations/Visualizations/Cloud.php
+++ b/plugins/CoreVisualizations/Visualizations/Cloud.php
@@ -44,6 +44,40 @@ class Cloud extends DataTableVisualization
protected $wordsArray = array();
public $truncatingLimit = 50;
+ public function __construct($view)
+ {
+ parent::__construct("@CoreVisualizations/_dataTableViz_tagCloud.twig");
+
+ $self = $this;
+ $view->after_data_loaded_functions[] = function ($dataTable, $view) use ($self) {
+ $columnToDisplay = $view->columns_to_display[1];
+
+ $labelMetadata = array();
+ foreach ($dataTable->getRows() as $row) {
+ $logo = false;
+ if ($view->visualization_properties->display_logo_instead_of_label) {
+ $logo = $row->getMetadata('logo');
+ }
+
+ $label = $row->getColumn('label');
+
+ $labelMetadata[$label] = array(
+ 'logo' => $logo,
+ 'url' => $row->getMetadata('url'),
+ );
+
+ $self->addWord($label, $row->getColumn($columnToDisplay));
+ }
+ $cloudValues = $self->getCloudValues();
+ foreach ($cloudValues as &$value) {
+ $value['logoWidth'] = round(max(16, $value['percent']));
+ }
+
+ $self->labelMetadata = $labelMetadata;
+ $self->cloudValues = $cloudValues;
+ };
+ }
+
public static function getDefaultPropertyValues()
{
return array(
@@ -73,46 +107,6 @@ class Cloud extends DataTableVisualization
}
}
- /**
- * Renders this visualization.
- *
- * @param DataTable $dataTable
- * @param array $properties
- * @return string
- */
- public function render($dataTable, $properties)
- {
- $view = new View("@CoreVisualizations/_dataTableViz_tagCloud.twig");
- $view->properties = $properties;
-
- $columnToDisplay = $properties['columns_to_display'][1];
-
- $labelMetadata = array();
- foreach ($dataTable->getRows() as $row) {
- $logo = false;
- if ($properties['visualization_properties']->display_logo_instead_of_label) {
- $logo = $row->getMetadata('logo');
- }
-
- $label = $row->getColumn('label');
-
- $labelMetadata[$label] = array(
- 'logo' => $logo,
- 'url' => $row->getMetadata('url'),
- );
-
- $this->addWord($label, $row->getColumn($columnToDisplay));
- }
- $cloudValues = $this->getCloudValues();
- foreach ($cloudValues as &$value) {
- $value['logoWidth'] = round(max(16, $value['percent']));
- }
- $view->labelMetadata = $labelMetadata;
- $view->cloudValues = $cloudValues;
-
- return $view->render();
- }
-
private function getCloudValues()
{
$this->shuffleCloud();
diff --git a/plugins/CoreVisualizations/Visualizations/HtmlTable.php b/plugins/CoreVisualizations/Visualizations/HtmlTable.php
index 2b98761d8a..c808a0471d 100644
--- a/plugins/CoreVisualizations/Visualizations/HtmlTable.php
+++ b/plugins/CoreVisualizations/Visualizations/HtmlTable.php
@@ -152,6 +152,8 @@ class HtmlTable extends DataTableVisualization
*/
public function __construct($view)
{
+ parent::__construct("@CoreVisualizations/_dataTableViz_htmlTable.twig");
+
if (Common::getRequestVar('idSubtable', false)
&& $view->visualization_properties->show_embedded_subtable
) {
@@ -167,22 +169,6 @@ class HtmlTable extends DataTableVisualization
}
}
- /**
- * Renders this visualization.
- *
- * @param DataTable $dataTable
- * @param array $properties View Properties.
- * @return string
- */
- public function render($dataTable, $properties) // TODO: $properties should be a viewdatatable, I think.
- {
- $view = new View("@CoreVisualizations/_dataTableViz_htmlTable.twig");
- $view->properties = $properties;
- $view->dataTable = $dataTable;
- $view->idSubtable = Common::getRequestVar('idSubtable', false);
- return $view->render();
- }
-
public static function getDefaultPropertyValues()
{
$defaults = array(
diff --git a/plugins/CoreVisualizations/Visualizations/JqplotGraph.php b/plugins/CoreVisualizations/Visualizations/JqplotGraph.php
index 95cbf7610e..4059df0d7c 100644
--- a/plugins/CoreVisualizations/Visualizations/JqplotGraph.php
+++ b/plugins/CoreVisualizations/Visualizations/JqplotGraph.php
@@ -64,7 +64,7 @@ class JqplotGraph extends Graph
*/
public function __construct($view)
{
- parent::__construct($view);
+ parent::__construct($view, $template = "@CoreVisualizations/_dataTableViz_jqplotGraph.twig");
// do not sort if sorted column was initially "label" or eg. it would make "Visits by Server time" not pretty
if ($view->filter_sort_column != 'label') {
@@ -104,43 +104,11 @@ class JqplotGraph extends Graph
)
));
}
-
- /**
- * Renders this visualization.
- *
- * @param DataTable $dataTable
- * @param array $properties View Properties.
- * @return string
- */
- public function render($dataTable, $properties)
- {
- $view = new View("@CoreVisualizations/_dataTableViz_jqplotGraph.twig");
- $view->properties = $properties;
- $view->dataTable = $dataTable;
- $view->data = $this->getGraphData($dataTable, $properties);
- return $view->render();
- }
- /**
- * Generats JQPlot graph data for a DataTable.
- */
- private function getGraphData($dataTable, $properties)
+ public function getGraphData($dataTable, $properties)
{
- $properties = array_merge($properties, $properties['request_parameters_to_modify']);
$dataGenerator = $this->makeDataGenerator($properties);
-
- $jsonData = $dataGenerator->generate($dataTable);
- return str_replace(array("\r", "\n"), '', $jsonData);
- }
-
- /**
- * Returns a JqplotDataGenerator for the given graph_type in $properties
- * @param array $properties
- * @return JqplotDataGenerator
- */
- protected function makeDataGenerator($properties)
- {
- return JqplotDataGenerator::factory($properties['graph_type'], $properties);
+ return $dataGenerator->generate($dataTable);
}
}
diff --git a/plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php b/plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php
index 398c021a3b..0f2bf2737f 100644
--- a/plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php
+++ b/plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php
@@ -26,21 +26,15 @@ class Pie extends JqplotGraph
parent::__construct($view);
$view->visualization_properties->show_all_ticks = true;
$view->datatable_js_type = 'JqplotPieGraphDataTable';
- }
- public function render($dataTable, $properties)
- {
// make sure only one non-label column is displayed
- $metricColumn = false;
- foreach ($properties['columns_to_display'] as $column) {
- if ($column != 'label') {
- $metricColumn = $column;
- break;
+ $view->after_data_loaded_functions[] = function ($dataTable) use ($view) {
+ $metricColumn = reset($view->columns_to_display);
+ if ($metricColumn == 'label') {
+ $metricColumn = next($view->columns_to_display);
}
- }
- $properties['columns_to_display'] = array($metricColumn ?: 'nb_visits');
-
- return parent::render($dataTable, $properties);
+ $view->columns_to_display = array($metricColumn ?: 'nb_visits');
+ };
}
public static function getDefaultPropertyValues()
diff --git a/plugins/CoreVisualizations/templates/_dataTableViz_htmlTable.twig b/plugins/CoreVisualizations/templates/_dataTableViz_htmlTable.twig
index 67a0d71c0f..bcf7afedd8 100644
--- a/plugins/CoreVisualizations/templates/_dataTableViz_htmlTable.twig
+++ b/plugins/CoreVisualizations/templates/_dataTableViz_htmlTable.twig
@@ -1,7 +1,7 @@
{%- set subtablesAreDisabled = properties.visualization_properties.show_goals_columns|default(false)
and properties.visualization_properties.disable_subtable_when_show_goals|default(false) -%}
{%- set showingEmbeddedSubtable = properties.visualization_properties.show_embedded_subtable is not empty
- and idSubtable is not empty -%}
+ and idSubtable|default(false) -%}
{% if error is defined %}
{{ error.message }}
{% else %}
diff --git a/plugins/CoreVisualizations/templates/_dataTableViz_jqplotGraph.twig b/plugins/CoreVisualizations/templates/_dataTableViz_jqplotGraph.twig
index a87fcb6123..5dfd78b1f3 100644
--- a/plugins/CoreVisualizations/templates/_dataTableViz_jqplotGraph.twig
+++ b/plugins/CoreVisualizations/templates/_dataTableViz_jqplotGraph.twig
@@ -1,4 +1,3 @@
<div class="jqplot-graph">
- <div class="piwik-graph" data-data="{{ data|e('html') }}">
- </div>
+ <div class="piwik-graph" data-data="{{ visualization.getGraphData(dataTable, properties)|json_encode }}"></div>
</div> \ No newline at end of file
diff --git a/plugins/Live/VisitorLog.php b/plugins/Live/VisitorLog.php
index daa09af391..b8fbd2431b 100644
--- a/plugins/Live/VisitorLog.php
+++ b/plugins/Live/VisitorLog.php
@@ -30,22 +30,8 @@ class VisitorLog extends DataTableVisualization
*/
public function __construct($view)
{
- $view->datatable_js_type = 'VisitorLog';
- }
+ parent::__construct("@Live/_dataTableViz_visitorLog.twig");
- /**
- * Renders this visualization.
- *
- * @param DataTable $dataTable
- * @param array $properties View Properties.
- * @return string
- */
- public function render($dataTable, $properties, $javascriptVariablesToSet)
- {
- $view = new View("@Live/_dataTableViz_visitorLog.twig");
- $view->properties = $properties;
- $view->dataTable = $dataTable;
- $view->javascriptVariablesToSet = $javascriptVariablesToSet;
- return $view->render();
+ $view->datatable_js_type = 'VisitorLog';
}
} \ No newline at end of file
diff --git a/plugins/TreemapVisualization/Treemap.php b/plugins/TreemapVisualization/Treemap.php
index a5c0b217f5..721151211f 100644
--- a/plugins/TreemapVisualization/Treemap.php
+++ b/plugins/TreemapVisualization/Treemap.php
@@ -54,7 +54,7 @@ class Treemap extends Graph
// we determine the elements count dynamically based on available width/height
$view->visualization_properties->max_graph_elements = false;
- parent::__construct($view);
+ parent::__construct($view, '@TreemapVisualization/_dataTableViz_treemap.twig');
$view->datatable_js_type = 'TreemapDataTable';
$view->show_pagination_control = false;
@@ -91,22 +91,6 @@ class Treemap extends Graph
}
/**
- * Renders the treemap.
- *
- * @param \Piwik\DataTable $dataTable
- * @param array $properties
- *
- * @return string
- */
- public function render($dataTable, $properties)
- {
- $view = new View('@TreemapVisualization/_dataTableViz_treemap.twig');
- $view->graphData = $this->getGraphData($dataTable, $properties);
- $view->properties = $properties;
- return $view->render();
- }
-
- /**
* Returns the default view property values for this visualization.
*
* @return array
@@ -132,7 +116,7 @@ class Treemap extends Graph
return $this->getCurrentData($dataTable)->getRowsCount() != 0;
}
- private function getGraphData($dataTable, $properties)
+ public function getGraphData($dataTable, $properties)
{
$metric = $this->getMetricToGraph($properties['columns_to_display']);
$translation = empty($properties['translations'][$metric]) ? $metric : $properties['translations'][$metric];
@@ -143,7 +127,7 @@ class Treemap extends Graph
$generator->showEvolutionValues();
}
- return Common::json_encode($generator->generate($dataTable));
+ return $generator->generate($dataTable);
}
public function getMetricToGraph($columnsToDisplay)
diff --git a/plugins/TreemapVisualization/templates/_dataTableViz_treemap.twig b/plugins/TreemapVisualization/templates/_dataTableViz_treemap.twig
index 4762833ea1..00abefd294 100644
--- a/plugins/TreemapVisualization/templates/_dataTableViz_treemap.twig
+++ b/plugins/TreemapVisualization/templates/_dataTableViz_treemap.twig
@@ -1,3 +1,3 @@
-<div class="infoviz-treemap" data-data="{{ graphData }}">
+<div class="infoviz-treemap" data-data="{{ visualization.getGraphData(dataTable, properties)|json_encode }}">
<img class="infoviz-treemap-zoom-out" style="visibility:hidden;" src="plugins/Zeitgeist/images/zoom-out.png"/>
</div> \ No newline at end of file