PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 1.3.1
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v1.3.1
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / core / Settings / Storage / Storage.php
matomo / app / core / Settings / Storage Last commit date
Backend 6 years ago Factory.php 6 years ago Storage.php 6 years ago
Storage.php
118 lines
1 <?php
2 /**
3 * Piwik - free/libre analytics platform
4 *
5 * @link https://matomo.org
6 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
7 *
8 */
9
10 namespace Piwik\Settings\Storage;
11
12 use Piwik\Settings\Storage\Backend;
13
14 /**
15 * A storage stores values for multiple settings. Storing multiple settings here saves having to do
16 * a "get" for each individual setting. A storage is usually stared between all individual setting instances
17 * within a plugin.
18 */
19 class Storage
20 {
21 /**
22 * Array containing all plugin settings values: Array( [setting-key] => [setting-value] ).
23 *
24 * @var array
25 */
26 protected $settingsValues = array();
27
28 // for lazy loading of setting values
29 private $settingValuesLoaded = false;
30
31 /**
32 * @var Backend\BackendInterface
33 */
34 private $backend;
35
36 /**
37 * Defines whether a value has changed since the settings were loaded or not.
38 * @var bool
39 */
40 private $isDirty = false;
41
42 public function __construct(Backend\BackendInterface $backend)
43 {
44 $this->backend = $backend;
45 }
46
47 /**
48 * Get the currently used backend for this storage.
49 * @return Backend\BackendInterface
50 */
51 public function getBackend()
52 {
53 return $this->backend;
54 }
55
56 /**
57 * Saves (persists) the current setting values in the database if a value has actually changed.
58 */
59 public function save()
60 {
61 if ($this->isDirty) {
62 $this->backend->save($this->settingsValues);
63
64 $this->isDirty = false;
65
66 Backend\Cache::clearCache();
67 }
68 }
69
70 /**
71 * Returns the current value for a setting. If no value is stored, the default value
72 * is be returned.
73 *
74 * @param string $key The name / key of a setting
75 * @param mixed $defaultValue Default value that will be used in case no value for this setting exists yet
76 * @param string $type The PHP internal type the value of the setting should have, see FieldConfig::TYPE_*
77 * constants. Only an actual value of the setting will be converted to the given type, the
78 * default value will not be converted.
79 * @return mixed
80 */
81 public function getValue($key, $defaultValue, $type)
82 {
83 $this->loadSettingsIfNotDoneYet();
84
85 if (array_key_exists($key, $this->settingsValues)) {
86 settype($this->settingsValues[$key], $type);
87 return $this->settingsValues[$key];
88 }
89
90 return $defaultValue;
91 }
92
93 /**
94 * Sets (overwrites) the value of a setting in memory. To persist the change across requests, {@link save()} must be
95 * called.
96 *
97 * @param string $key The name / key of a setting
98 * @param mixed $value The value that shall be set for the given setting.
99 */
100 public function setValue($key, $value)
101 {
102 $this->loadSettingsIfNotDoneYet();
103
104 $this->isDirty = true;
105 $this->settingsValues[$key] = $value;
106 }
107
108 private function loadSettingsIfNotDoneYet()
109 {
110 if ($this->settingValuesLoaded) {
111 return;
112 }
113
114 $this->settingValuesLoaded = true;
115 $this->settingsValues = $this->backend->load();
116 }
117 }
118