diff options
author | mattab <matthieu.aubry@gmail.com> | 2013-09-19 07:04:06 +0400 |
---|---|---|
committer | mattab <matthieu.aubry@gmail.com> | 2013-09-19 07:04:06 +0400 |
commit | f66269901cc6df914f745d8fbedb2480cf1f9e5e (patch) | |
tree | 6608439f19411f1c5e5aa704a2c972465c30812e | |
parent | 995d381cc6c16690e6451e105a03e6cd76b160fc (diff) | |
parent | 6b906ed1444d904abc0f39cae0b7da5e5f22c74b (diff) |
Merge remote-tracking branch 'origin/master'
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 |