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
path: root/core
diff options
context:
space:
mode:
authormattab <matthieu.aubry@gmail.com>2014-12-15 09:41:28 +0300
committermattab <matthieu.aubry@gmail.com>2014-12-15 09:41:38 +0300
commit12d4618aebf7d0658e28fef3d50c6ba2d5fb449e (patch)
treeaacb472380bc41b149e200b1736c1e9b09ebd364 /core
parent17f3492b786f466fd393d9ba5e242619526f4feb (diff)
Fixes #6529 before loading plugins in memory, order the list the same as it is in global.ini.php - then load remaining plugins in alphabetical order
Diffstat (limited to 'core')
-rw-r--r--core/Plugin/Manager.php76
1 files changed, 62 insertions, 14 deletions
diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php
index c1e8da7d7f..4beee901c2 100644
--- a/core/Plugin/Manager.php
+++ b/core/Plugin/Manager.php
@@ -207,6 +207,7 @@ class Manager extends Singleton
*/
private function updatePluginsConfig($pluginsToLoad)
{
+ $pluginsToLoad = $this->sortPluginsSameOrderAsGlobalConfig($pluginsToLoad);
$section = PiwikConfig::getInstance()->Plugins;
$section['Plugins'] = $pluginsToLoad;
PiwikConfig::getInstance()->Plugins = $section;
@@ -636,12 +637,7 @@ class Manager extends Singleton
*/
public function isPluginBundledWithCore($name)
{
- // Reading the plugins from the global.ini.php config file
- $pluginsBundledWithPiwik = PiwikConfig::getInstance()->getFromGlobalConfig('Plugins');
- $pluginsBundledWithPiwik = $pluginsBundledWithPiwik['Plugins'];
-
- return (!empty($pluginsBundledWithPiwik)
- && in_array($name, $pluginsBundledWithPiwik))
+ return $this->isPluginEnabledByDefault($name)
|| in_array($name, $this->getCorePluginsDisabledByDefault())
|| $name == self::DEFAULT_THEME;
}
@@ -670,8 +666,7 @@ class Manager extends Singleton
*/
public function loadPlugins(array $pluginsToLoad)
{
- $pluginsToLoad = array_unique($pluginsToLoad);
- $this->pluginsToLoad = $pluginsToLoad;
+ $this->pluginsToLoad = $this->makePluginsToLoad($pluginsToLoad);
$this->reloadActivatedPlugins();
}
@@ -856,12 +851,6 @@ class Manager extends Singleton
*/
private function reloadActivatedPlugins()
{
- if ($this->doLoadAlwaysActivatedPlugins) {
- $this->pluginsToLoad = array_merge($this->pluginsToLoad, $this->pluginToAlwaysActivate);
- }
-
- $this->pluginsToLoad = array_unique($this->pluginsToLoad);
-
$pluginsToPostPendingEventsTo = array();
foreach ($this->pluginsToLoad as $pluginName) {
if (!$this->isPluginLoaded($pluginName)
@@ -1371,6 +1360,65 @@ class Manager extends Singleton
}
}
}
+
+ /**
+ * Reading the plugins from the global.ini.php config file
+ *
+ * @return array
+ */
+ protected function getPluginsFromGlobalIniConfigFile()
+ {
+ $pluginsBundledWithPiwik = PiwikConfig::getInstance()->getFromGlobalConfig('Plugins');
+ $pluginsBundledWithPiwik = $pluginsBundledWithPiwik['Plugins'];
+ return $pluginsBundledWithPiwik;
+ }
+
+ /**
+ * @param $name
+ * @return bool
+ */
+ protected function isPluginEnabledByDefault($name)
+ {
+ $pluginsBundledWithPiwik = $this->getPluginsFromGlobalIniConfigFile();
+
+ if(empty($pluginsBundledWithPiwik)) {
+ return false;
+ }
+ return in_array($name, $pluginsBundledWithPiwik);
+ }
+
+ /**
+ * @param array $pluginsToLoad
+ * @return array
+ */
+ private function makePluginsToLoad(array $pluginsToLoad)
+ {
+ $pluginsToLoad = array_unique($pluginsToLoad);
+ if ($this->doLoadAlwaysActivatedPlugins) {
+ $pluginsToLoad = array_merge($pluginsToLoad, $this->pluginToAlwaysActivate);
+ }
+ $pluginsToLoad = array_unique($pluginsToLoad);
+ $pluginsToLoad = $this->sortPluginsSameOrderAsGlobalConfig($pluginsToLoad);
+ return $pluginsToLoad;
+ }
+
+ private function sortPluginsSameOrderAsGlobalConfig(array $plugins)
+ {
+ $global = $this->getPluginsFromGlobalIniConfigFile();
+ $global = array_values($global);
+ $plugins = array_values($plugins);
+
+ $defaultPluginsLoadedFirst = array_intersect($global, $plugins);
+
+ $otherPluginsToLoadAfterDefaultPlugins = array_diff($plugins, $defaultPluginsLoadedFirst);
+
+ // sort by name to have a predictable order for those extra plugins
+ sort($otherPluginsToLoadAfterDefaultPlugins);
+
+ $sorted = array_merge($defaultPluginsLoadedFirst, $otherPluginsToLoadAfterDefaultPlugins);
+
+ return $sorted;
+ }
}
/**