}
}
+ /**
+ * Remove a config element from the config file.
+ *
+ * @param string $setting Asked setting, keys separated with dots.
+ * @param bool $write Write the new setting in the config file, default false.
+ * @param bool $isLoggedIn User login state, default false.
+ *
+ * @throws \Exception Invalid
+ */
+ public function remove($setting, $write = false, $isLoggedIn = false)
+ {
+ if (empty($setting) || ! is_string($setting)) {
+ throw new \Exception(t('Invalid setting key parameter. String expected, got: '). gettype($setting));
+ }
+
+ // During the ConfigIO transition, map legacy settings to the new ones.
+ if ($this->configIO instanceof ConfigPhp && isset(ConfigPhp::$LEGACY_KEYS_MAPPING[$setting])) {
+ $setting = ConfigPhp::$LEGACY_KEYS_MAPPING[$setting];
+ }
+
+ $settings = explode('.', $setting);
+ self::removeConfig($settings, $this->loadedConfig);
+ if ($write) {
+ $this->write($isLoggedIn);
+ }
+ }
+
/**
* Check if a settings exists.
*
*
* @param array $settings Ordered array which contains keys to find.
* @param mixed $value
- * @param array $conf Loaded settings, then sub-array.
+ * @param array $conf Loaded settings, then sub-array.
*
* @return mixed Found setting or NOT_FOUND flag.
*/
$conf[$setting] = $value;
}
+ /**
+ * Recursive function which find asked setting in the loaded config and deletes it.
+ *
+ * @param array $settings Ordered array which contains keys to find.
+ * @param array $conf Loaded settings, then sub-array.
+ *
+ * @return mixed Found setting or NOT_FOUND flag.
+ */
+ protected static function removeConfig($settings, &$conf)
+ {
+ if (!is_array($settings) || count($settings) == 0) {
+ return self::$NOT_FOUND;
+ }
+
+ $setting = array_shift($settings);
+ if (count($settings) > 0) {
+ return self::removeConfig($settings, $conf[$setting]);
+ }
+ unset($conf[$setting]);
+ }
+
/**
* Set a bunch of default values allowing Shaarli to start without a config file.
*/
$this->assertEquals('testSetWriteGetNested', $this->conf->get('foo.bar.key.stuff'));
}
+ public function testSetDeleteNested()
+ {
+ $this->conf->set('foo.bar.key.stuff', 'testSetDeleteNested');
+ $this->assertTrue($this->conf->exists('foo.bar'));
+ $this->assertTrue($this->conf->exists('foo.bar.key.stuff'));
+ $this->assertEquals('testSetDeleteNested', $this->conf->get('foo.bar.key.stuff'));
+
+ $this->conf->remove('foo.bar');
+ $this->assertFalse($this->conf->exists('foo.bar.key.stuff'));
+ $this->assertFalse($this->conf->exists('foo.bar'));
+ }
+
/**
* Set with an empty key.
*
$this->conf->set(array('foo' => 'bar'), 'stuff');
}
+ /**
+ * Remove with an empty key.
+ *
+ * @expectedException \Exception
+ * @expectedExceptionMessageRegExp #^Invalid setting key parameter. String expected, got.*#
+ */
+ public function testRmoveEmptyKey()
+ {
+ $this->conf->remove('');
+ }
+
/**
* Try to write the config without mandatory parameter (e.g. 'login').
*