diff options
-rw-r--r-- | lib/private/allconfig.php | 10 | ||||
-rw-r--r-- | lib/private/config.php | 89 | ||||
-rw-r--r-- | lib/private/legacy/config.php | 10 | ||||
-rw-r--r-- | lib/private/systemconfig.php | 10 | ||||
-rw-r--r-- | lib/public/iconfig.php | 8 | ||||
-rw-r--r-- | tests/lib/config.php | 30 |
6 files changed, 135 insertions, 22 deletions
diff --git a/lib/private/allconfig.php b/lib/private/allconfig.php index d4b4ed6fb6a..421db566866 100644 --- a/lib/private/allconfig.php +++ b/lib/private/allconfig.php @@ -70,6 +70,16 @@ class AllConfig implements \OCP\IConfig { } /** + * Sets and deletes system wide values + * + * @param array $configs Associative array with `key => value` pairs + * If value is null, the config key will be deleted + */ + public function setSystemValues(array $configs) { + $this->systemConfig->setValues($configs); + } + + /** * Sets a new system wide value * * @param string $key the key of the value, under which will be saved diff --git a/lib/private/config.php b/lib/private/config.php index 8544de34b72..586e8c20587 100644 --- a/lib/private/config.php +++ b/lib/private/config.php @@ -41,10 +41,10 @@ class Config { /** * Lists all available config keys - * @return array an array of key names * - * This function returns all keys saved in config.php. Please note that it - * does not return the values. + * Please note that it does not return the values. + * + * @return array an array of key names */ public function getKeys() { return array_keys($this->cache); @@ -52,12 +52,12 @@ class Config { /** * Gets a value from config.php + * + * If it does not exist, $default will be returned. + * * @param string $key key * @param mixed $default = null default value * @return mixed the value or $default - * - * This function gets the value from config.php. If it does not exist, - * $default will be returned. */ public function getValue($key, $default = null) { if (isset($this->cache[$key])) { @@ -68,36 +68,81 @@ class Config { } /** - * Sets a value - * @param string $key key - * @param mixed $value value - * - * This function sets the value and writes the config.php. + * Sets and deletes values and writes the config.php * + * @param array $configs Associative array with `key => value` pairs + * If value is null, the config key will be deleted */ - public function setValue($key, $value) { - // Add change - $this->cache[$key] = $value; + public function setValues(array $configs) { + $needsUpdate = false; + foreach ($configs as $key => $value) { + if ($value !== null) { + $needsUpdate |= $this->set($key, $value); + } else { + $needsUpdate |= $this->delete($key); + } + } - // Write changes - $this->writeData(); + if ($needsUpdate) { + // Write changes + $this->writeData(); + } } /** - * Removes a key from the config - * @param string $key key + * Sets the value and writes it to config.php if required * - * This function removes a key from the config.php. + * @param string $key key + * @param mixed $value value + */ + public function setValue($key, $value) { + if ($this->set($key, $value)) { + // Write changes + $this->writeData(); + } + } + + /** + * This function sets the value * + * @param string $key key + * @param mixed $value value + * @return bool True if the file needs to be updated, false otherwise + */ + protected function set($key, $value) { + if (!isset($this->cache[$key]) || $this->cache[$key] !== $value) { + // Add change + $this->cache[$key] = $value; + return true; + } + + return false; + } + + /** + * Removes a key from the config and removes it from config.php if required + * @param string $key */ public function deleteKey($key) { + if ($this->delete($key)) { + // Write changes + $this->writeData(); + } + } + + /** + * This function removes a key from the config + * + * @param string $key + * @return bool True if the file needs to be updated, false otherwise + */ + protected function delete($key) { if (isset($this->cache[$key])) { // Delete key from cache unset($this->cache[$key]); - - // Write changes - $this->writeData(); + return true; } + return false; } /** diff --git a/lib/private/legacy/config.php b/lib/private/legacy/config.php index 7b711204256..64d01434b11 100644 --- a/lib/private/legacy/config.php +++ b/lib/private/legacy/config.php @@ -59,6 +59,16 @@ class OC_Config { } /** + * Sets and deletes values and writes the config.php + * + * @param array $configs Associative array with `key => value` pairs + * If value is null, the config key will be deleted + */ + public static function setValues(array $configs) { + self::$object->setValues($configs); + } + + /** * Removes a key from the config * @param string $key key * diff --git a/lib/private/systemconfig.php b/lib/private/systemconfig.php index ce6883e5ab3..36cefdb8499 100644 --- a/lib/private/systemconfig.php +++ b/lib/private/systemconfig.php @@ -28,6 +28,16 @@ class SystemConfig { } /** + * Sets and deletes values and writes the config.php + * + * @param array $configs Associative array with `key => value` pairs + * If value is null, the config key will be deleted + */ + public function setValues(array $configs) { + \OC_Config::setValues($configs); + } + + /** * Looks up a system wide defined value * * @param string $key the key of the value, under which it was saved diff --git a/lib/public/iconfig.php b/lib/public/iconfig.php index a1952ef8f84..868a4133d2e 100644 --- a/lib/public/iconfig.php +++ b/lib/public/iconfig.php @@ -35,6 +35,14 @@ namespace OCP; */ interface IConfig { /** + * Sets and deletes system wide values + * + * @param array $configs Associative array with `key => value` pairs + * If value is null, the config key will be deleted + */ + public function setSystemValues(array $configs); + + /** * Sets a new system wide value * * @param string $key the key of the value, under which will be saved diff --git a/tests/lib/config.php b/tests/lib/config.php index 6adba356a1c..91154579ab5 100644 --- a/tests/lib/config.php +++ b/tests/lib/config.php @@ -71,6 +71,36 @@ class Test_Config extends \Test\TestCase { $this->assertEquals($expected, $content); } + public function testSetValues() { + $content = file_get_contents($this->configFile); + $this->assertEquals(self::TESTCONTENT, $content); + + // Changing configs to existing values and deleting non-existing once + // should not rewrite the config.php + $this->config->setValues([ + 'foo' => 'bar', + 'not_exists' => null, + ]); + + $this->assertAttributeEquals($this->initialConfig, 'cache', $this->config); + $content = file_get_contents($this->configFile); + $this->assertEquals(self::TESTCONTENT, $content); + + $this->config->setValues([ + 'foo' => 'moo', + 'alcohol_free' => null, + ]); + $expectedConfig = $this->initialConfig; + $expectedConfig['foo'] = 'moo'; + unset($expectedConfig['alcohol_free']); + $this->assertAttributeEquals($expectedConfig, 'cache', $this->config); + + $content = file_get_contents($this->configFile); + $expected = "<?php\n\$CONFIG = array (\n 'foo' => 'moo',\n 'beers' => \n array (\n 0 => 'Appenzeller',\n " . + " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n);\n"; + $this->assertEquals($expected, $content); + } + public function testDeleteKey() { $this->config->deleteKey('foo'); $expectedConfig = $this->initialConfig; |