From 182d91d76f91c8a373cf0e95a875e5038bf07299 Mon Sep 17 00:00:00 2001 From: mattab <matthieu.aubry@gmail.com> Date: Tue, 17 Sep 2013 15:59:11 +1200 Subject: [PATCH] Plugins refactoring out logic + Now ignoring plugins that do not have the Manifest JSON file (they might be Piwik 1.X plugin) --- core/PluginsManager.php | 85 +++++++++++++++++--- plugins/CorePluginsAdmin/Controller.php | 31 +------ plugins/CorePluginsAdmin/PluginInstaller.php | 2 +- 3 files changed, 80 insertions(+), 38 deletions(-) diff --git a/core/PluginsManager.php b/core/PluginsManager.php index b56f4a4e43..48e13ead16 100644 --- a/core/PluginsManager.php +++ b/core/PluginsManager.php @@ -34,7 +34,7 @@ class PluginsManager /** * Default theme used in Piwik. */ - const DEFAULT_THEME="Zeitgeist"; + const DEFAULT_THEME = "Zeitgeist"; protected $doLoadAlwaysActivatedPlugins = true; protected $pluginToAlwaysActivate = array( @@ -54,6 +54,13 @@ class PluginsManager self::DEFAULT_THEME, ); + protected $corePluginsDisabledByDefault = array( + 'AnonymizeIP', + 'DBStats', + 'DevicesDetection', + 'TreemapVisualization', // should be moved to marketplace + ); + // If a plugin hooks onto at least an event starting with "Tracker.", we load the plugin during tracker const TRACKER_EVENT_PREFIX = 'Tracker.'; @@ -114,7 +121,7 @@ class PluginsManager * @param string $name Name of plugin * @return bool */ - public function isPluginAlwaysActivated($name) + private function isPluginAlwaysActivated($name) { return in_array($name, $this->pluginToAlwaysActivate); } @@ -125,13 +132,9 @@ class PluginsManager * @param $name * @return bool */ - public function isPluginUninstallable($name) + private function isPluginUninstallable($name) { - // Reading the plugins from the global.ini.php config file - $pluginsBundledWithPiwik = Config::getInstance()->getFromDefaultConfig('Plugins'); - $pluginsBundledWithPiwik = $pluginsBundledWithPiwik['Plugins']; - - return !in_array($name, $pluginsBundledWithPiwik); + return !$this->isPluginBundledWithCore($name); } /** @@ -340,6 +343,70 @@ class PluginsManager return false; } + /** + * Loads in memory the Plugins specified in the config.ini.php file + * + * @return array + */ + public function returnLoadedPluginsInfo() + { + $plugins = array(); + + $listPlugins = array_merge( + $this->readPluginsDirectory(), + Config::getInstance()->Plugins['Plugins'] + ); + $listPlugins = array_unique($listPlugins); + foreach ($listPlugins as $pluginName) { + // If the plugin is not core and looks bogus, do not load + if($this->isPluginThirdPartyAndBogus($pluginName)) + { +// echo $pluginName; + continue; + } + + $this->loadPlugin($pluginName); + + $plugins[$pluginName] = array( + 'activated' => $this->isPluginActivated($pluginName), + 'alwaysActivated' => $this->isPluginAlwaysActivated($pluginName), + 'uninstallable' => $this->isPluginUninstallable($pluginName), + ); + } + $this->loadPluginTranslations(); + + $loadedPlugins = $this->getLoadedPlugins(); + foreach ($loadedPlugins as $oPlugin) { + $pluginName = $oPlugin->getPluginName(); + $plugins[$pluginName]['info'] = $oPlugin->getInformation(); + } + return $plugins; + } + + + protected static function isManifestFileFound($path) + { + return file_exists($path . "/" . MetadataLoader::PLUGIN_JSON_FILENAME); + } + + protected function isPluginBundledWithCore($name) + { + // Reading the plugins from the global.ini.php config file + $pluginsBundledWithPiwik = Config::getInstance()->getFromDefaultConfig('Plugins'); + $pluginsBundledWithPiwik = $pluginsBundledWithPiwik['Plugins']; + + return in_array($name, $pluginsBundledWithPiwik) + || in_array($name, $this->corePluginsDisabledByDefault); + } + + protected function isPluginThirdPartyAndBogus($pluginName) + { + $path = $this->getPluginsDirectory() . $pluginName; + return !$this->isPluginBundledWithCore($pluginName) + && !$this->isManifestFileFound($path); + } + + /** * Load the specified plugins * @@ -721,7 +788,7 @@ class PluginsManager { $name = basename($path); return file_exists($path . "/" . $name . ".php") - || file_exists($path . "/" . MetadataLoader::PLUGIN_JSON_FILENAME); + || self::isManifestFileFound($path); } } diff --git a/plugins/CorePluginsAdmin/Controller.php b/plugins/CorePluginsAdmin/Controller.php index 946eb15c4c..566ab4f76c 100644 --- a/plugins/CorePluginsAdmin/Controller.php +++ b/plugins/CorePluginsAdmin/Controller.php @@ -202,38 +202,13 @@ class Controller extends \Piwik\Controller\Admin protected function getPluginsInfo($themesOnly = false) { - $plugins = array(); - - $pluginsManager = \Piwik\PluginsManager::getInstance(); - $listPlugins = array_merge( - $pluginsManager->readPluginsDirectory(), - Config::getInstance()->Plugins['Plugins'] - ); - $listPlugins = array_unique($listPlugins); - foreach ($listPlugins as $pluginName) { - \Piwik\PluginsManager::getInstance()->loadPlugin($pluginName); - $plugins[$pluginName] = array( - 'activated' => $pluginsManager->isPluginActivated($pluginName), - 'alwaysActivated' => $pluginsManager->isPluginAlwaysActivated($pluginName), - 'uninstallable' => $pluginsManager->isPluginUninstallable($pluginName), - ); - } - $pluginsManager->loadPluginTranslations(); - - $loadedPlugins = $pluginsManager->getLoadedPlugins(); - - foreach ($loadedPlugins as $oPlugin) { - $pluginName = $oPlugin->getPluginName(); - - $plugins[$pluginName]['info'] = $oPlugin->getInformation(); - } - + $plugins = PluginsManager::getInstance()->returnLoadedPluginsInfo(); foreach ($plugins as $pluginName => &$plugin) { if (!isset($plugin['info'])) { $plugin['info'] = array( 'description' => '<strong><em>' . Piwik_Translate('CorePluginsAdmin_PluginCannotBeFound') - . '</strong></em>', + . '</strong></em>', 'version' => Piwik_Translate('General_Unknown'), 'theme' => false, ); @@ -243,7 +218,7 @@ class Controller extends \Piwik\Controller\Admin $pluginsFiltered = $this->keepPluginsOrThemes($themesOnly, $plugins); return $pluginsFiltered; } - + protected function keepPluginsOrThemes($themesOnly, $plugins) { $pluginsFiltered = array(); diff --git a/plugins/CorePluginsAdmin/PluginInstaller.php b/plugins/CorePluginsAdmin/PluginInstaller.php index 5978f2cc83..f9c04d8a7f 100644 --- a/plugins/CorePluginsAdmin/PluginInstaller.php +++ b/plugins/CorePluginsAdmin/PluginInstaller.php @@ -19,7 +19,7 @@ use Piwik\Unzip; */ class PluginInstaller { - const PATH_TO_DOWNLOAD = '/tmp/plugins/'; + const PATH_TO_DOWNLOAD = '/tmp/latest/plugins/'; const PATH_TO_EXTRACT = '/plugins/'; private $pluginName; -- GitLab