PageRenderTime 39ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 1ms

/core/Settings/Manager.php

https://github.com/CodeYellowBV/piwik
PHP | 133 lines | 70 code | 22 blank | 41 comment | 6 complexity | b41141e2241dce0325bbff86c1551f37 MD5 | raw file
Possible License(s): LGPL-3.0, JSON, MIT, GPL-3.0, LGPL-2.1, GPL-2.0, AGPL-1.0, BSD-2-Clause, BSD-3-Clause
  1. <?php
  2. /**
  3. * Piwik - free/libre analytics platform
  4. *
  5. * @link http://piwik.org
  6. * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  7. *
  8. */
  9. namespace Piwik\Settings;
  10. use Piwik\Plugin\Manager as PluginManager;
  11. /**
  12. * Settings manager.
  13. *
  14. */
  15. class Manager
  16. {
  17. private static $settings = array();
  18. private static $numPluginsChecked = 0;
  19. /**
  20. * Returns all available plugin settings, even settings for inactive plugins. A plugin has to specify a file named
  21. * `Settings.php` containing a class named `Settings` that extends `Piwik\Plugin\Settings` in order to be
  22. * considered as a plugin setting. Otherwise the settings for a plugin won't be available.
  23. *
  24. * @return \Piwik\Plugin\Settings[] An array containing array([pluginName] => [setting instance]).
  25. */
  26. public static function getAllPluginSettings()
  27. {
  28. $numActivatedPlugins = PluginManager::getInstance()->getNumberOfActivatedPlugins();
  29. if (static::$numPluginsChecked != $numActivatedPlugins) {
  30. static::$numPluginsChecked = $numActivatedPlugins;
  31. static::$settings = array();
  32. }
  33. if (empty(static::$settings)) {
  34. $settings = array();
  35. $pluginNames = PluginManager::getInstance()->getLoadedPluginsName();
  36. foreach ($pluginNames as $pluginName) {
  37. $settings[$pluginName] = self::getPluginSettingsClass($pluginName);
  38. }
  39. static::$settings = array_filter($settings);
  40. }
  41. return static::$settings;
  42. }
  43. private static function isActivatedPlugin($pluginName)
  44. {
  45. return PluginManager::getInstance()->isPluginActivated($pluginName);
  46. }
  47. /**
  48. * Removes all settings made for a specific plugin. Useful while uninstalling a plugin.
  49. *
  50. * @param string $pluginName
  51. */
  52. public static function cleanupPluginSettings($pluginName)
  53. {
  54. $settings = self::getPluginSettingsClass($pluginName);
  55. if (!empty($settings)) {
  56. $settings->removeAllPluginSettings();
  57. }
  58. }
  59. /**
  60. * Gets all plugins settings that have at least one settings a user is allowed to change. Only the settings for
  61. * activated plugins are returned.
  62. *
  63. * @return \Piwik\Plugin\Settings[] An array containing array([pluginName] => [setting instance]).
  64. */
  65. public static function getPluginSettingsForCurrentUser()
  66. {
  67. $settings = static::getAllPluginSettings();
  68. $settingsForUser = array();
  69. foreach ($settings as $pluginName => $setting) {
  70. if (!static::isActivatedPlugin($pluginName)) {
  71. continue;
  72. }
  73. $forUser = $setting->getSettingsForCurrentUser();
  74. if (!empty($forUser)) {
  75. $settingsForUser[$pluginName] = $setting;
  76. }
  77. }
  78. return $settingsForUser;
  79. }
  80. public static function hasPluginSettingsForCurrentUser($pluginName)
  81. {
  82. $pluginNames = array_keys(static::getPluginSettingsForCurrentUser());
  83. return in_array($pluginName, $pluginNames);
  84. }
  85. /**
  86. * Detects whether there are settings for activated plugins available that the current user can change.
  87. *
  88. * @return bool
  89. */
  90. public static function hasPluginsSettingsForCurrentUser()
  91. {
  92. $settings = static::getPluginSettingsForCurrentUser();
  93. return !empty($settings);
  94. }
  95. /**
  96. * Tries to find a settings class for the specified plugin name. Returns null in case the plugin does not specify
  97. * any settings, an instance of the settings class otherwise.
  98. *
  99. * @param string $pluginName
  100. * @return \Piwik\Plugin\Settings|null
  101. */
  102. private static function getPluginSettingsClass($pluginName)
  103. {
  104. $klassName = 'Piwik\\Plugins\\' . $pluginName . '\\Settings';
  105. if (class_exists($klassName) && is_subclass_of($klassName, 'Piwik\\Plugin\\Settings')) {
  106. return new $klassName($pluginName);
  107. }
  108. }
  109. }