Skip to content
Extraits de code Groupes Projets
Valider 182d91d7 rédigé par mattab's avatar mattab
Parcourir les fichiers

Plugins refactoring out logic + Now ignoring plugins that do not have the...

Plugins refactoring out logic + Now ignoring plugins that do not have the Manifest JSON file (they might be Piwik 1.X plugin)
parent bd09583b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -34,7 +34,7 @@ class PluginsManager ...@@ -34,7 +34,7 @@ class PluginsManager
/** /**
* Default theme used in Piwik. * Default theme used in Piwik.
*/ */
const DEFAULT_THEME="Zeitgeist"; const DEFAULT_THEME = "Zeitgeist";
protected $doLoadAlwaysActivatedPlugins = true; protected $doLoadAlwaysActivatedPlugins = true;
protected $pluginToAlwaysActivate = array( protected $pluginToAlwaysActivate = array(
...@@ -54,6 +54,13 @@ class PluginsManager ...@@ -54,6 +54,13 @@ class PluginsManager
self::DEFAULT_THEME, 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 // If a plugin hooks onto at least an event starting with "Tracker.", we load the plugin during tracker
const TRACKER_EVENT_PREFIX = 'Tracker.'; const TRACKER_EVENT_PREFIX = 'Tracker.';
...@@ -114,7 +121,7 @@ class PluginsManager ...@@ -114,7 +121,7 @@ class PluginsManager
* @param string $name Name of plugin * @param string $name Name of plugin
* @return bool * @return bool
*/ */
public function isPluginAlwaysActivated($name) private function isPluginAlwaysActivated($name)
{ {
return in_array($name, $this->pluginToAlwaysActivate); return in_array($name, $this->pluginToAlwaysActivate);
} }
...@@ -125,13 +132,9 @@ class PluginsManager ...@@ -125,13 +132,9 @@ class PluginsManager
* @param $name * @param $name
* @return bool * @return bool
*/ */
public function isPluginUninstallable($name) private function isPluginUninstallable($name)
{ {
// Reading the plugins from the global.ini.php config file return !$this->isPluginBundledWithCore($name);
$pluginsBundledWithPiwik = Config::getInstance()->getFromDefaultConfig('Plugins');
$pluginsBundledWithPiwik = $pluginsBundledWithPiwik['Plugins'];
return !in_array($name, $pluginsBundledWithPiwik);
} }
/** /**
...@@ -340,6 +343,70 @@ class PluginsManager ...@@ -340,6 +343,70 @@ class PluginsManager
return false; 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 * Load the specified plugins
* *
...@@ -721,7 +788,7 @@ class PluginsManager ...@@ -721,7 +788,7 @@ class PluginsManager
{ {
$name = basename($path); $name = basename($path);
return file_exists($path . "/" . $name . ".php") return file_exists($path . "/" . $name . ".php")
|| file_exists($path . "/" . MetadataLoader::PLUGIN_JSON_FILENAME); || self::isManifestFileFound($path);
} }
} }
......
...@@ -202,38 +202,13 @@ class Controller extends \Piwik\Controller\Admin ...@@ -202,38 +202,13 @@ class Controller extends \Piwik\Controller\Admin
protected function getPluginsInfo($themesOnly = false) protected function getPluginsInfo($themesOnly = false)
{ {
$plugins = array(); $plugins = PluginsManager::getInstance()->returnLoadedPluginsInfo();
$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();
}
foreach ($plugins as $pluginName => &$plugin) { foreach ($plugins as $pluginName => &$plugin) {
if (!isset($plugin['info'])) { if (!isset($plugin['info'])) {
$plugin['info'] = array( $plugin['info'] = array(
'description' => '<strong><em>' . Piwik_Translate('CorePluginsAdmin_PluginCannotBeFound') 'description' => '<strong><em>' . Piwik_Translate('CorePluginsAdmin_PluginCannotBeFound')
. '</strong></em>', . '</strong></em>',
'version' => Piwik_Translate('General_Unknown'), 'version' => Piwik_Translate('General_Unknown'),
'theme' => false, 'theme' => false,
); );
...@@ -243,7 +218,7 @@ class Controller extends \Piwik\Controller\Admin ...@@ -243,7 +218,7 @@ class Controller extends \Piwik\Controller\Admin
$pluginsFiltered = $this->keepPluginsOrThemes($themesOnly, $plugins); $pluginsFiltered = $this->keepPluginsOrThemes($themesOnly, $plugins);
return $pluginsFiltered; return $pluginsFiltered;
} }
protected function keepPluginsOrThemes($themesOnly, $plugins) protected function keepPluginsOrThemes($themesOnly, $plugins)
{ {
$pluginsFiltered = array(); $pluginsFiltered = array();
......
...@@ -19,7 +19,7 @@ use Piwik\Unzip; ...@@ -19,7 +19,7 @@ use Piwik\Unzip;
*/ */
class PluginInstaller class PluginInstaller
{ {
const PATH_TO_DOWNLOAD = '/tmp/plugins/'; const PATH_TO_DOWNLOAD = '/tmp/latest/plugins/';
const PATH_TO_EXTRACT = '/plugins/'; const PATH_TO_EXTRACT = '/plugins/';
private $pluginName; private $pluginName;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter