diff --git a/lib/plugins/config/_test/configuration.test.php b/lib/plugins/config/_test/configuration.test.php index 6e9eb0cc6f4ea6f9303d84cfce78b12ee5944447..0185fff9aac71ed9d42a80abd7665f458f6d6f97 100644 --- a/lib/plugins/config/_test/configuration.test.php +++ b/lib/plugins/config/_test/configuration.test.php @@ -11,6 +11,9 @@ class plugin_config_configuration_test extends DokuWikiTest { private $config = ''; private $meta = ''; + /** + * Load config files + */ function __construct() { $this->config = dirname(__FILE__).'/data/config.php'; $this->meta = dirname(__FILE__).'/data/metadata.php'; @@ -22,7 +25,7 @@ class plugin_config_configuration_test extends DokuWikiTest { $conf = $confmgr->_read_config($this->config); - //print_r($conf); + // var_dump($conf); $this->assertEquals('42', $conf['int1']); $this->assertEquals('6*7', $conf['int2']); @@ -36,4 +39,38 @@ class plugin_config_configuration_test extends DokuWikiTest { $this->assertEquals(array('foo', 'bar', 'baz'), $conf['arr1']); } + function test_readconfig_onoff() { + $confmgr = new configuration($this->meta); + + $conf = $confmgr->_read_config($this->config); + + // var_dump($conf); + + $this->assertEquals(0, $conf['onoff1']); + $this->assertEquals(1, $conf['onoff2']); + $this->assertEquals(2, $conf['onoff3']); + $this->assertEquals(0, $conf['onoff4']); + $this->assertEquals(1, $conf['onoff5']); + $this->assertEquals(false, $conf['onoff6']); + $this->assertEquals(true, $conf['onoff7']); + $this->assertEquals('false', $conf['onoff8']); + $this->assertEquals('true', $conf['onoff9']); + + $this->assertEquals('false senctence', $conf['str11']); + $this->assertEquals('true sentence', $conf['str12']); + $this->assertEquals('truesfdf', $conf['str13']); + $this->assertEquals("true", $conf['str14']); + $this->assertEquals("truesfdsf", $conf['str15']); + + $this->assertTrue($conf['onoff1'] == false); + $this->assertTrue($conf['onoff2'] == true); + $this->assertTrue($conf['onoff3'] == true); + $this->assertTrue($conf['onoff4'] == false); + $this->assertTrue($conf['onoff5'] == true); + $this->assertTrue($conf['onoff6'] == false); + $this->assertTrue($conf['onoff7'] == true); + $this->assertTrue($conf['onoff8'] == true); //string + $this->assertTrue($conf['onoff9'] == true); //string + } + } diff --git a/lib/plugins/config/_test/data/config.php b/lib/plugins/config/_test/data/config.php index 83255f937554b94a924560e228dc2bae087f630b..540a9aa55adc07bd44b7eb1107d7b1c05142f369 100644 --- a/lib/plugins/config/_test/data/config.php +++ b/lib/plugins/config/_test/data/config.php @@ -14,3 +14,19 @@ $conf['arr1'] = array('foo','bar', 'baz'); $conf['foo']['bar'] = 'x1'; $conf['foo']['baz'] = 'x2'; + +$conf['onoff1'] = 0; +$conf['onoff2'] = 1; +$conf['onoff3'] = 2; +$conf['onoff4'] = '0'; +$conf['onoff5'] = '1'; +$conf['onoff6'] = false; +$conf['onoff7'] = true; +$conf['onoff8'] = 'false'; +$conf['onoff9'] = 'true'; + +$conf['str11'] = 'false senctence'; +$conf['str12'] = 'true sentence'; +$conf['str13'] = 'truesfdf'; +$conf['str14'] = "true"; +$conf['str15'] = "truesfdsf"; diff --git a/lib/plugins/config/_test/data/metadata.php b/lib/plugins/config/_test/data/metadata.php index 12902e5256fe26212c4c2ddbd29ced843e0476ad..f70d646664a65e529e91f73d8581dbe8ba83edf5 100644 --- a/lib/plugins/config/_test/data/metadata.php +++ b/lib/plugins/config/_test/data/metadata.php @@ -11,3 +11,18 @@ $meta['str5'] = array('string'); $meta['arr1'] = array('array'); +$meta['onoff1'] = array('onoff'); +$meta['onoff2'] = array('onoff'); +$meta['onoff3'] = array('onoff'); +$meta['onoff4'] = array('onoff'); +$meta['onoff5'] = array('onoff'); +$meta['onoff6'] = array('onoff'); +$meta['onoff7'] = array('onoff'); +$meta['onoff8'] = array('onoff'); +$meta['onoff9'] = array('onoff'); + +$meta['str11'] = array('string'); +$meta['str12'] = array('string'); +$meta['str13'] = array('string'); +$meta['str14'] = array('string'); +$meta['str15'] = array('string'); diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php index 7baa8a0735ca64927806259d349988f70c09d085..102fc85469ae25e41d643a79a3c0da22adc7d943 100644 --- a/lib/plugins/config/settings/config.class.php +++ b/lib/plugins/config/settings/config.class.php @@ -220,15 +220,12 @@ if (!class_exists('configuration')) { $len = count($arr); for($j=0; $j<$len; $j++){ $arr[$j] = trim($arr[$j]); - $arr[$j] = preg_replace('/^(\'|")(.*)(?<!\\\\)\1$/s','$2',$arr[$j]); - $arr[$j] = strtr($arr[$j], array('\\\\'=>'\\','\\\''=>'\'','\\"'=>'"')); + $arr[$j] = $this->_readValue($arr[$j]); } $value = $arr; }else{ - // remove quotes from quoted strings & unescape escaped data - $value = preg_replace('/^(\'|")(.*)(?<!\\\\)\1$/s','$2',$value); - $value = strtr($value, array('\\\\'=>'\\','\\\''=>'\'','\\"'=>'"')); + $value = $this->_readValue($value); } $config[$key] = $value; @@ -238,6 +235,32 @@ if (!class_exists('configuration')) { return $config; } + /** + * Convert php string into value + * + * @param string $value + * @return bool|string + */ + protected function _readValue($value) { + $removequotes_pattern = '/^(\'|")(.*)(?<!\\\\)\1$/s'; + $unescape_pairs = array( + '\\\\' => '\\', + '\\\'' => '\'', + '\\"' => '"' + ); + + if($value == 'true') { + $value = true; + } elseif($value == 'false') { + $value = false; + } else { + // remove quotes from quoted strings & unescape escaped data + $value = preg_replace($removequotes_pattern,'$2',$value); + $value = strtr($value, $unescape_pairs); + } + return $value; + } + /** * Returns header of rewritten settings file *