Backend
1 month ago
Factory.php
3 months ago
LegacyUserSettingsMigration.php
1 month ago
Storage.php
1 year ago
UserScopedSettingsAccessManager.php
1 month ago
Storage.php
101 lines
| 1 | <?php |
| 2 | |
| 3 | /** |
| 4 | * Matomo - free/libre analytics platform |
| 5 | * |
| 6 | * @link https://matomo.org |
| 7 | * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later |
| 8 | */ |
| 9 | namespace Piwik\Settings\Storage; |
| 10 | |
| 11 | use Piwik\Settings\Storage\Backend; |
| 12 | /** |
| 13 | * A storage stores values for multiple settings. Storing multiple settings here saves having to do |
| 14 | * a "get" for each individual setting. A storage is usually stared between all individual setting instances |
| 15 | * within a plugin. |
| 16 | */ |
| 17 | class Storage |
| 18 | { |
| 19 | /** |
| 20 | * Array containing all plugin settings values: Array( [setting-key] => [setting-value] ). |
| 21 | * |
| 22 | * @var array |
| 23 | */ |
| 24 | protected $settingsValues = array(); |
| 25 | // for lazy loading of setting values |
| 26 | private $settingValuesLoaded = \false; |
| 27 | /** |
| 28 | * @var Backend\BackendInterface |
| 29 | */ |
| 30 | private $backend; |
| 31 | /** |
| 32 | * Defines whether a value has changed since the settings were loaded or not. |
| 33 | * @var bool |
| 34 | */ |
| 35 | private $isDirty = \false; |
| 36 | public function __construct(Backend\BackendInterface $backend) |
| 37 | { |
| 38 | $this->backend = $backend; |
| 39 | } |
| 40 | /** |
| 41 | * Get the currently used backend for this storage. |
| 42 | * @return Backend\BackendInterface |
| 43 | */ |
| 44 | public function getBackend() |
| 45 | { |
| 46 | return $this->backend; |
| 47 | } |
| 48 | /** |
| 49 | * Saves (persists) the current setting values in the database if a value has actually changed. |
| 50 | */ |
| 51 | public function save() |
| 52 | { |
| 53 | if ($this->isDirty) { |
| 54 | $this->backend->save($this->settingsValues); |
| 55 | $this->isDirty = \false; |
| 56 | Backend\Cache::clearCache(); |
| 57 | } |
| 58 | } |
| 59 | /** |
| 60 | * Returns the current value for a setting. If no value is stored, the default value |
| 61 | * is be returned. |
| 62 | * |
| 63 | * @param string $key The name / key of a setting |
| 64 | * @param mixed $defaultValue Default value that will be used in case no value for this setting exists yet |
| 65 | * @param string $type The PHP internal type the value of the setting should have, see FieldConfig::TYPE_* |
| 66 | * constants. Only an actual value of the setting will be converted to the given type, the |
| 67 | * default value will not be converted. |
| 68 | * @return mixed |
| 69 | */ |
| 70 | public function getValue($key, $defaultValue, $type) |
| 71 | { |
| 72 | $this->loadSettingsIfNotDoneYet(); |
| 73 | if (array_key_exists($key, $this->settingsValues)) { |
| 74 | settype($this->settingsValues[$key], $type); |
| 75 | return $this->settingsValues[$key]; |
| 76 | } |
| 77 | return $defaultValue; |
| 78 | } |
| 79 | /** |
| 80 | * Sets (overwrites) the value of a setting in memory. To persist the change across requests, {@link save()} must be |
| 81 | * called. |
| 82 | * |
| 83 | * @param string $key The name / key of a setting |
| 84 | * @param mixed $value The value that shall be set for the given setting. |
| 85 | */ |
| 86 | public function setValue($key, $value) |
| 87 | { |
| 88 | $this->loadSettingsIfNotDoneYet(); |
| 89 | $this->isDirty = \true; |
| 90 | $this->settingsValues[$key] = $value; |
| 91 | } |
| 92 | private function loadSettingsIfNotDoneYet() |
| 93 | { |
| 94 | if ($this->settingValuesLoaded) { |
| 95 | return; |
| 96 | } |
| 97 | $this->settingValuesLoaded = \true; |
| 98 | $this->settingsValues = $this->backend->load(); |
| 99 | } |
| 100 | } |
| 101 |