settings = $settings; } /** * Returns the list of plugins that should be loaded. Used by the container factory to * load plugin specific DI overrides. * * @return string[] */ public function getActivatedPlugins() { $section = $this->settings->getSection('Plugins'); return @$section['Plugins'] ?: array(); } /** * Returns the list of plugins that are bundled with Piwik. * * @return string[] */ public function getPluginsBundledWithPiwik() { $pathGlobal = $this->settings->getPathGlobal(); $section = $this->settings->getIniFileChain()->getFrom($pathGlobal, 'Plugins'); return $section['Plugins']; } /** * Returns the plugins bundled with core package that are disabled by default. * * @return string[] */ public function getCorePluginsDisabledByDefault() { return array_merge($this->corePluginsDisabledByDefault, $this->coreThemesDisabledByDefault); } /** * 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; } // we need to make sure a possibly disabled plugin will be still loaded before any 3rd party plugin $global = array_merge($global, $this->corePluginsDisabledByDefault); $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; } }