]> git.mxchange.org Git - friendica.git/blob - src/Core/Config/Adapter/PreloadConfigAdapter.php
check if value is set
[friendica.git] / src / Core / Config / Adapter / PreloadConfigAdapter.php
1 <?php
2
3 namespace Friendica\Core\Config\Adapter;
4
5 use Friendica\Database\DBA;
6
7 /**
8  * Preload Configuration Adapter
9  *
10  * Minimizes the number of database queries to retrieve configuration values at the cost of memory.
11  *
12  * @author Hypolite Petovan <hypolite@mrpetovan.com>
13  */
14 class PreloadConfigAdapter extends AbstractDbaConfigAdapter implements IConfigAdapter
15 {
16         private $config_loaded = false;
17
18         /**
19          * {@inheritdoc}
20          */
21         public function load($cat = 'config')
22         {
23                 $return = [];
24
25                 if (!$this->isConnected()) {
26                         return $return;
27                 }
28
29                 if ($this->config_loaded) {
30                         return $return;
31                 }
32
33                 $configs = DBA::select('config', ['cat', 'v', 'k']);
34                 while ($config = DBA::fetch($configs)) {
35                         $return[$config['cat']][$config['k']] = $config['v'];
36                 }
37                 DBA::close($configs);
38
39                 $this->config_loaded = true;
40
41                 return $return;
42         }
43
44         /**
45          * {@inheritdoc}
46          */
47         public function get($cat, $key)
48         {
49                 if (!$this->isConnected()) {
50                         return '!<unset>!';
51                 }
52
53                 $config = DBA::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $key]);
54                 if (DBA::isResult($config)) {
55                         // manage array value
56                         $value = (preg_match("|^a:[0-9]+:{.*}$|s", $config['v']) ? unserialize($config['v']) : $config['v']);
57
58                         return $value;
59                 } else {
60
61                         return '!<unset>!';
62                 }
63         }
64
65         /**
66          * {@inheritdoc}
67          */
68         public function set($cat, $key, $value)
69         {
70                 if (!$this->isConnected()) {
71                         return false;
72                 }
73
74                 // We store our setting values as strings.
75                 // So we have to do the conversion here so that the compare below works.
76                 // The exception are array values.
77                 $compare_value = !is_array($value) ? (string)$value : $value;
78
79                 if ($this->get($cat, $key) === $compare_value) {
80                         return true;
81                 }
82
83                 // manage array value
84                 $dbvalue = is_array($value) ? serialize($value) : $value;
85
86                 $result = DBA::update('config', ['v' => $dbvalue], ['cat' => $cat, 'k' => $key], true);
87
88                 return $result;
89         }
90
91         /**
92          * {@inheritdoc}
93          */
94         public function delete($cat, $key)
95         {
96                 if (!$this->isConnected()) {
97                         return false;
98                 }
99
100                 $result = DBA::delete('config', ['cat' => $cat, 'k' => $key]);
101
102                 return $result;
103         }
104
105         /**
106          * {@inheritdoc}
107          */
108         public function isLoaded($cat, $key)
109         {
110                 if (!$this->isConnected()) {
111                         return false;
112                 }
113
114                 return $this->config_loaded;
115         }
116 }