Blame view
sources/lib/private/appconfig.php
6.25 KB
|
03e52840d
|
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 |
<?php /** * ownCloud * * @author Frank Karlitschek * @author Jakob Sack * @copyright 2012 Frank Karlitschek frank@owncloud.org * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see <http://www.gnu.org/licenses/>. * */ /* * * The following SQL statement is just a help for developers and will not be * executed! * * CREATE TABLE `appconfig` ( * `appid` VARCHAR( 255 ) NOT NULL , * `configkey` VARCHAR( 255 ) NOT NULL , * `configvalue` VARCHAR( 255 ) NOT NULL * ) * */ |
|
6d9380f96
|
35 36 37 |
namespace OC; use \OC\DB\Connection; |
|
03e52840d
|
38 39 40 41 |
/** * This class provides an easy way for apps to store config values in the * database. */ |
|
6d9380f96
|
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 |
class AppConfig implements \OCP\IAppConfig {
/**
* @var \OC\DB\Connection $conn
*/
protected $conn;
private $cache = array();
private $appsLoaded = array();
/**
* @var string[]
*/
private $apps = null;
/**
* @param \OC\DB\Connection $conn
*/
public function __construct(Connection $conn) {
$this->conn = $conn;
}
/**
* @param string $app
* @return string[]
*/
private function getAppCache($app) {
if (!isset($this->cache[$app])) {
$this->cache[$app] = array();
}
return $this->cache[$app];
}
/**
* @param string $app
* @return \string[]
*/
private function getAppValues($app) {
$appCache = $this->getAppCache($app);
if (array_search($app, $this->appsLoaded) === false) {
$query = 'SELECT `configvalue`, `configkey` FROM `*PREFIX*appconfig`'
. ' WHERE `appid` = ?';
$result = $this->conn->executeQuery($query, array($app));
while ($row = $result->fetch()) {
$appCache[$row['configkey']] = $row['configvalue'];
}
$this->appsLoaded[] = $app;
}
$this->cache[$app] = $appCache;
return $appCache;
}
|
|
03e52840d
|
93 |
/** |
|
6d9380f96
|
94 95 96 |
* Get all apps using the config * * @return array an array of app ids |
|
03e52840d
|
97 98 99 100 |
* * This function returns a list of all apps that have at least one * entry in the appconfig table. */ |
|
6d9380f96
|
101 102 103 104 105 106 |
public function getApps() {
if (is_array($this->apps)) {
return $this->apps;
}
$query = 'SELECT DISTINCT `appid` FROM `*PREFIX*appconfig` ORDER BY `appid`';
$result = $this->conn->executeQuery($query);
|
|
03e52840d
|
107 108 |
$apps = array(); |
|
6d9380f96
|
109 110 |
while ($appid = $result->fetchColumn()) {
$apps[] = $appid;
|
|
03e52840d
|
111 |
} |
|
6d9380f96
|
112 |
$this->apps = $apps; |
|
03e52840d
|
113 114 115 116 |
return $apps; } /** |
|
6d9380f96
|
117 118 |
* Get the available keys for an app * |
|
03e52840d
|
119 |
* @param string $app the app we are looking for |
|
6d9380f96
|
120 |
* @return array an array of key names |
|
03e52840d
|
121 122 123 124 |
* * This function gets all keys of an app. Please note that the values are * not returned. */ |
|
6d9380f96
|
125 126 127 128 |
public function getKeys($app) {
$values = $this->getAppValues($app);
$keys = array_keys($values);
sort($keys);
|
|
03e52840d
|
129 130 131 132 |
return $keys; } /** |
|
6d9380f96
|
133 134 |
* Gets the config value * |
|
03e52840d
|
135 136 137 138 139 140 141 142 |
* @param string $app app * @param string $key key * @param string $default = null, default value if the key does not exist * @return string the value or $default * * This function gets a value from the appconfig table. If the key does * not exist the default value will be returned */ |
|
6d9380f96
|
143 144 145 146 147 |
public function getValue($app, $key, $default = null) {
$values = $this->getAppValues($app);
if (isset($values[$key])) {
return $values[$key];
} else {
|
|
03e52840d
|
148 149 150 151 152 |
return $default; } } /** |
|
6d9380f96
|
153 154 |
* check if a key is set in the appconfig * |
|
03e52840d
|
155 156 157 158 |
* @param string $app * @param string $key * @return bool */ |
|
6d9380f96
|
159 160 161 |
public function hasKey($app, $key) {
$values = $this->getAppValues($app);
return array_key_exists($key, $values);
|
|
03e52840d
|
162 163 164 |
} /** |
|
6d9380f96
|
165 166 |
* sets a value in the appconfig * |
|
03e52840d
|
167 168 169 |
* @param string $app app * @param string $key key * @param string $value value |
|
03e52840d
|
170 171 172 |
* * Sets a value. If the key did not exist before it will be created. */ |
|
6d9380f96
|
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
public function setValue($app, $key, $value) {
// Does the key exist? no: insert, yes: update.
if (!$this->hasKey($app, $key)) {
$data = array(
'appid' => $app,
'configkey' => $key,
'configvalue' => $value,
);
$this->conn->insert('*PREFIX*appconfig', $data);
} else {
$oldValue = $this->getValue($app, $key);
if($oldValue === strval($value)) {
return true;
}
$data = array(
'configvalue' => $value,
);
$where = array(
'appid' => $app,
'configkey' => $key,
);
$this->conn->update('*PREFIX*appconfig', $data, $where);
}
if (!isset($this->cache[$app])) {
$this->cache[$app] = array();
|
|
03e52840d
|
198 |
} |
|
6d9380f96
|
199 200 |
if (is_array($this->apps) and array_search($app, $this->apps) === false) {
$this->apps[$app] = $app;
|
|
03e52840d
|
201 |
} |
|
6d9380f96
|
202 |
$this->cache[$app][$key] = $value; |
|
03e52840d
|
203 204 205 |
} /** |
|
6d9380f96
|
206 207 |
* Deletes a key * |
|
03e52840d
|
208 209 |
* @param string $app app * @param string $key key |
|
6d9380f96
|
210 |
* @return boolean|null |
|
03e52840d
|
211 |
*/ |
|
6d9380f96
|
212 213 214 215 216 217 218 219 220 |
public function deleteKey($app, $key) {
$where = array(
'appid' => $app,
'configkey' => $key,
);
$this->conn->delete('*PREFIX*appconfig', $where);
if (isset($this->cache[$app]) and isset($this->cache[$app][$key])) {
unset($this->cache[$app][$key]);
}
|
|
03e52840d
|
221 222 223 |
} /** |
|
6d9380f96
|
224 225 |
* Remove app from appconfig * |
|
03e52840d
|
226 |
* @param string $app app |
|
6d9380f96
|
227 |
* @return boolean|null |
|
03e52840d
|
228 229 230 |
* * Removes all keys in appconfig belonging to the app. */ |
|
6d9380f96
|
231 232 233 234 235 236 237 |
public function deleteApp($app) {
$where = array(
'appid' => $app,
);
$this->conn->delete('*PREFIX*appconfig', $where);
unset($this->cache[$app]);
unset($this->apps[$app]);
|
|
03e52840d
|
238 239 240 241 |
} /** * get multiply values, either the app or key can be used as wildcard by setting it to false |
|
6d9380f96
|
242 243 244 |
* * @param string|false $app * @param string|false $key |
|
03e52840d
|
245 246 |
* @return array */ |
|
6d9380f96
|
247 248 |
public function getValues($app, $key) {
if (($app !== false) == ($key !== false)) {
|
|
03e52840d
|
249 250 |
return false; } |
|
6d9380f96
|
251 252 253 254 255 256 257 258 259 260 261 262 263 |
if ($app !== false) {
return $this->getAppValues($app);
} else {
$query = 'SELECT `configvalue`, `appid` FROM `*PREFIX*appconfig` WHERE `configkey` = ?';
$result = $this->conn->executeQuery($query, array($key));
$values = array();
while ($row = $result->fetch((\PDO::FETCH_ASSOC))) {
$values[$row['appid']] = $row['configvalue'];
}
return $values;
|
|
03e52840d
|
264 |
} |
|
03e52840d
|
265 266 |
} } |