pluginManager = $pluginManager; } /** * * Get user settings implemented by a specific plugin (if implemented by this plugin). * @param string $pluginName * @return SystemSettings|null */ public function getSystemSettings($pluginName) { $plugin = $this->getLoadedAndActivated($pluginName); if ($plugin) { $settings = $plugin->findComponent('SystemSettings', 'Piwik\\Settings\\Plugin\\SystemSettings'); if ($settings) { return StaticContainer::get($settings); } } } /** * Get user settings implemented by a specific plugin (if implemented by this plugin). * @param string $pluginName * @return UserSettings|null */ public function getUserSettings($pluginName) { $plugin = $this->getLoadedAndActivated($pluginName); if ($plugin) { $settings = $plugin->findComponent('UserSettings', 'Piwik\\Settings\\Plugin\\UserSettings'); if ($settings) { return StaticContainer::get($settings); } } } /** * Returns all available system settings. A plugin has to specify a file named `SystemSettings.php` containing a * class named `SystemSettings` that extends `Piwik\Settings\Plugin\SystemSettings` in order to be considered as * a system setting. Otherwise the settings for a plugin won't be available. * * @return SystemSettings[] An array containing array([pluginName] => [setting instance]). */ public function getAllSystemSettings() { $cacheId = CacheId::languageAware('AllSystemSettings'); $cache = PiwikCache::getTransientCache(); if (!$cache->contains($cacheId)) { $pluginNames = $this->pluginManager->getActivatedPlugins(); $byPluginName = array(); foreach ($pluginNames as $plugin) { $component = $this->getSystemSettings($plugin); if (!empty($component)) { $byPluginName[$plugin] = $component; } } $cache->save($cacheId, $byPluginName); } return $cache->fetch($cacheId); } /** * Returns all available user settings. A plugin has to specify a file named `UserSettings.php` containing a class * named `UserSettings` that extends `Piwik\Settings\Plugin\UserSettings` in order to be considered as a plugin * setting. Otherwise the settings for a plugin won't be available. * * @return UserSettings[] An array containing array([pluginName] => [setting instance]). */ public function getAllUserSettings() { $cacheId = CacheId::languageAware('AllUserSettings'); $cache = PiwikCache::getTransientCache(); if (!$cache->contains($cacheId)) { $pluginNames = $this->pluginManager->getActivatedPlugins(); $byPluginName = array(); foreach ($pluginNames as $plugin) { $component = $this->getUserSettings($plugin); if (!empty($component)) { $byPluginName[$plugin] = $component; } } $cache->save($cacheId, $byPluginName); } return $cache->fetch($cacheId); } /** * @api * * Get measurable settings for a specific plugin. * * @param string $pluginName The name of a plugin. * @param int $idSite The ID of a site. If a site is about to be created pass idSite = 0. * @param string|null $idType If null, idType will be detected automatically if the site already exists. Only * needed to set a value when idSite = 0 (this is the case when a site is about) * to be created. * * @return MeasurableSettings|null Returns null if no MeasurableSettings implemented by this plugin or when plugin * is not loaded and activated. Returns an instance of the settings otherwise. */ public function getMeasurableSettings($pluginName, $idSite, $idType = null) { $plugin = $this->getLoadedAndActivated($pluginName); if ($plugin) { $component = $plugin->findComponent('MeasurableSettings', 'Piwik\\Settings\\Measurable\\MeasurableSettings'); if ($component) { return StaticContainer::getContainer()->make($component, array( 'idSite' => $idSite, 'idMeasurableType' => $idType )); } } } /** * @api * * Get all available measurable settings implemented by loaded and activated plugins. * * @param int $idSite The ID of a site. If a site is about to be created pass idSite = 0. * @param string|null $idMeasurableType If null, idType will be detected automatically if the site already exists. * Only needed to set a value when idSite = 0 (this is the case when a site * is about) to be created. * * @return MeasurableSettings[] */ public function getAllMeasurableSettings($idSite, $idMeasurableType = null) { $pluginNames = $this->pluginManager->getActivatedPlugins(); $byPluginName = array(); foreach ($pluginNames as $plugin) { $component = $this->getMeasurableSettings($plugin, $idSite, $idMeasurableType); if (!empty($component)) { $byPluginName[$plugin] = $component; } } return $byPluginName; } private function getLoadedAndActivated($pluginName) { if (!$this->pluginManager->isPluginLoaded($pluginName)) { return; } try { if (!$this->pluginManager->isPluginActivated($pluginName)) { return; } $plugin = $this->pluginManager->getLoadedPlugin($pluginName); } catch (\Exception $e) { // we are not allowed to use possible settings from this plugin, plugin is not active return; } return $plugin; } }