summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/allconfig.php10
-rw-r--r--lib/private/config.php89
-rw-r--r--lib/private/legacy/config.php10
-rw-r--r--lib/private/systemconfig.php10
-rw-r--r--lib/public/iconfig.php8
-rw-r--r--tests/lib/config.php30
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;