From 4aec071a74dde0ba017377c48b69195431d24e22 Mon Sep 17 00:00:00 2001 From: diosmosis <benaka@piwik.pro> Date: Mon, 15 Jun 2015 14:00:09 -0700 Subject: [PATCH] Fixes #8110, make sure plugins are sorted correctly during tests. Moved plugin sorting logic from Plugin\Manager to PluginList. --- core/Application/Kernel/PluginList.php | 28 +++++++++++++++++++ core/Plugin/Manager.php | 25 ++--------------- .../TestingEnvironmentManipulator.php | 3 +- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/core/Application/Kernel/PluginList.php b/core/Application/Kernel/PluginList.php index a79a974a40..66fa64eb4e 100644 --- a/core/Application/Kernel/PluginList.php +++ b/core/Application/Kernel/PluginList.php @@ -54,4 +54,32 @@ class PluginList $section = $this->settings->getIniFileChain()->getFrom($pathGlobal, 'Plugins'); return $section['Plugins']; } + + /** + * Sorts an array of plugins in the order they should be loaded. + * + * @params string[] $plugins + * @return \string[] + */ + public function sortPlugins(array $plugins) + { + $global = $this->getPluginsBundledWithPiwik(); + if (empty($global)) { + return $plugins; + } + + $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; + } } diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php index b7a397b587..62a9954d39 100644 --- a/core/Plugin/Manager.php +++ b/core/Plugin/Manager.php @@ -224,7 +224,7 @@ class Manager */ private function updatePluginsConfig($pluginsToLoad) { - $pluginsToLoad = $this->sortPluginsSameOrderAsGlobalConfig($pluginsToLoad); + $pluginsToLoad = $this->pluginList->sortPlugins($pluginsToLoad); $section = PiwikConfig::getInstance()->Plugins; $section['Plugins'] = $pluginsToLoad; PiwikConfig::getInstance()->Plugins = $section; @@ -1326,31 +1326,10 @@ class Manager $pluginsToLoad = array_merge($pluginsToLoad, $this->pluginToAlwaysActivate); } $pluginsToLoad = array_unique($pluginsToLoad); - $pluginsToLoad = $this->sortPluginsSameOrderAsGlobalConfig($pluginsToLoad); + $pluginsToLoad = $this->pluginList->sortPlugins($pluginsToLoad); return $pluginsToLoad; } - private function sortPluginsSameOrderAsGlobalConfig(array $plugins) - { - $global = $this->getPluginsFromGlobalIniConfigFile(); - if (empty($global)) { - return $plugins; - } - $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; - } - public function loadPluginTranslations() { /** @var Translator $translator */ diff --git a/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php b/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php index 42d3cf720c..65fbfc2d32 100644 --- a/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php +++ b/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php @@ -22,7 +22,8 @@ class FakePluginList extends PluginList public function __construct(GlobalSettingsProvider $globalSettingsProvider, $plugins) { parent::__construct($globalSettingsProvider); - $this->plugins = $plugins; + + $this->plugins = $this->sortPlugins($plugins); } public function getActivatedPlugins() -- GitLab