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