]> git.mxchange.org Git - friendica.git/blob - include/config.php
Merge branch 'master', remote-tracking branch 'remotes/upstream/master'
[friendica.git] / include / config.php
1 <?php
2
3 /**
4  *
5  * Arbitrary configuration storage
6  * Note:
7  * Please do not store booleans - convert to 0/1 integer values
8  * The get_?config() functions return boolean false for keys that are unset,
9  * and this could lead to subtle bugs.  
10  *
11  * There are a few places in the code (such as the admin panel) where boolean
12  * configurations need to be fixed as of 10/08/2011.
13  */
14
15
16 // retrieve a "family" of config variables from database to cached storage
17
18 if(! function_exists('load_config')) {
19 function load_config($family) {
20         global $a;
21         $r = q("SELECT * FROM `config` WHERE `cat` = '%s'",
22                 dbesc($family)
23         );
24         if(count($r)) {
25                 foreach($r as $rr) {
26                         $k = $rr['k'];
27                         if ($rr['cat'] === 'config') {
28                                 $a->config[$k] = $rr['v'];
29                         } else {
30                                 $a->config[$family][$k] = $rr['v'];
31                         }
32                 }
33         }
34 }}
35
36 // get a particular config variable given the family name
37 // and key. Returns false if not set.
38 // $instore is only used by the set_config function
39 // to determine if the key already exists in the DB
40 // If a key is found in the DB but doesn't exist in
41 // local config cache, pull it into the cache so we don't have
42 // to hit the DB again for this item.
43
44 if(! function_exists('get_config')) {
45 function get_config($family, $key, $instore = false) {
46
47         global $a;
48
49         if(! $instore) {
50                 if(isset($a->config[$family][$key])) {
51                         if($a->config[$family][$key] === '!<unset>!') {
52                                 return false;
53                         }
54                         return $a->config[$family][$key];
55                 }
56         }
57         $ret = q("SELECT `v` FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
58                 dbesc($family),
59                 dbesc($key)
60         );
61         if(count($ret)) {
62                 // manage array value
63                 $val = (preg_match("|^a:[0-9]+:{.*}$|", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']);
64                 $a->config[$family][$key] = $val;
65                 return $val;
66         }
67         else {
68                 $a->config[$family][$key] = '!<unset>!';
69         }
70         return false;
71 }}
72
73 // Store a config value ($value) in the category ($family)
74 // under the key ($key)
75 // Return the value, or false if the database update failed
76
77 if(! function_exists('set_config')) {
78 function set_config($family,$key,$value) {
79         global $a;
80         
81         // manage array value
82         $dbvalue = (is_array($value)?serialize($value):$value);
83         $dbvalue = (is_bool($value) ? intval($value) : $value);
84
85         if(get_config($family,$key,true) === false) {
86                 $a->config[$family][$key] = $value;
87                 $ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ",
88                         dbesc($family),
89                         dbesc($key),
90                         dbesc($dbvalue)
91                 );
92                 if($ret) 
93                         return $value;
94                 return $ret;
95         }
96         
97         $ret = q("UPDATE `config` SET `v` = '%s' WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
98                 dbesc($dbvalue),
99                 dbesc($family),
100                 dbesc($key)
101         );
102
103         $a->config[$family][$key] = $value;
104
105         if($ret)
106                 return $value;
107         return $ret;
108 }}
109
110
111 if(! function_exists('load_pconfig')) {
112 function load_pconfig($uid,$family) {
113         global $a;
114         $r = q("SELECT * FROM `pconfig` WHERE `cat` = '%s' AND `uid` = %d",
115                 dbesc($family),
116                 intval($uid)
117         );
118         if(count($r)) {
119                 foreach($r as $rr) {
120                         $k = $rr['k'];
121                         $a->config[$uid][$family][$k] = $rr['v'];
122                 }
123         }
124 }}
125
126
127
128 if(! function_exists('get_pconfig')) {
129 function get_pconfig($uid,$family, $key, $instore = false) {
130
131         global $a;
132
133         if(! $instore) {
134                 if(isset($a->config[$uid][$family][$key])) {
135                         if($a->config[$uid][$family][$key] === '!<unset>!') {
136                                 return false;
137                         }
138                         return $a->config[$uid][$family][$key];
139                 }
140         }
141
142         $ret = q("SELECT `v` FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
143                 intval($uid),
144                 dbesc($family),
145                 dbesc($key)
146         );
147
148         if(count($ret)) {
149                 $val = (preg_match("|^a:[0-9]+:{.*}$|", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']);
150                 $a->config[$uid][$family][$key] = $val;
151                 return $val;
152         }
153         else {
154                 $a->config[$uid][$family][$key] = '!<unset>!';
155         }
156         return false;
157 }}
158
159 if(! function_exists('del_config')) {
160 function del_config($family,$key) {
161
162         global $a;
163         if(x($a->config[$family],$key))
164                 unset($a->config[$family][$key]);
165         $ret = q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
166                 dbesc($family),
167                 dbesc($key)
168         );
169         return $ret;
170 }}
171
172
173
174 // Same as above functions except these are for personal config storage and take an
175 // additional $uid argument.
176
177 if(! function_exists('set_pconfig')) {
178 function set_pconfig($uid,$family,$key,$value) {
179
180         global $a;
181
182         // manage array value
183         $dbvalue = (is_array($value)?serialize($value):$value);
184
185         if(get_pconfig($uid,$family,$key,true) === false) {
186                 $a->config[$uid][$family][$key] = $value;
187                 $ret = q("INSERT INTO `pconfig` ( `uid`, `cat`, `k`, `v` ) VALUES ( %d, '%s', '%s', '%s' ) ",
188                         intval($uid),
189                         dbesc($family),
190                         dbesc($key),
191                         dbesc($dbvalue)
192                 );
193                 if($ret) 
194                         return $value;
195                 return $ret;
196         }
197         $ret = q("UPDATE `pconfig` SET `v` = '%s' WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
198                 dbesc($dbvalue),
199                 intval($uid),
200                 dbesc($family),
201                 dbesc($key)
202         );
203
204         $a->config[$uid][$family][$key] = $value;
205
206         if($ret)
207                 return $value;
208         return $ret;
209 }}
210
211 if(! function_exists('del_pconfig')) {
212 function del_pconfig($uid,$family,$key) {
213
214         global $a;
215         if(x($a->config[$uid][$family],$key))
216                 unset($a->config[$uid][$family][$key]);
217         $ret = q("DELETE FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
218                 intval($uid),
219                 dbesc($family),
220                 dbesc($key)
221         );
222         return $ret;
223 }}