diff options
author | Andreas Gohr <andi@splitbrain.org> | 2013-01-16 13:41:42 +0100 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2013-01-16 13:41:42 +0100 |
commit | 741c52751f7b22a3167d9475b2adb1a79f5eeea6 (patch) | |
tree | 5f04097a9e94abce1b0592be1189263f3dc30df7 /lib/plugins/config | |
parent | a24fc53e2623640cf5e2d00de741c1b67c9bb294 (diff) | |
download | rpg-741c52751f7b22a3167d9475b2adb1a79f5eeea6.tar.gz rpg-741c52751f7b22a3167d9475b2adb1a79f5eeea6.tar.bz2 |
parse arrays from config file
Diffstat (limited to 'lib/plugins/config')
-rw-r--r-- | lib/plugins/config/_test/configuration.test.php | 2 | ||||
-rw-r--r-- | lib/plugins/config/settings/config.class.php | 23 |
2 files changed, 21 insertions, 4 deletions
diff --git a/lib/plugins/config/_test/configuration.test.php b/lib/plugins/config/_test/configuration.test.php index ee03f3849..b808ad505 100644 --- a/lib/plugins/config/_test/configuration.test.php +++ b/lib/plugins/config/_test/configuration.test.php @@ -30,4 +30,4 @@ class plugin_config_configuration_test extends DokuWikiTest { $this->assertEquals(array('foo', 'bar', 'baz'), $conf['arr1']); } -}
\ No newline at end of file +} diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php index 5a2aa2980..7f15df6fb 100644 --- a/lib/plugins/config/settings/config.class.php +++ b/lib/plugins/config/settings/config.class.php @@ -157,14 +157,31 @@ if (!class_exists('configuration')) { preg_match_all($pattern,$contents,$matches,PREG_SET_ORDER); for ($i=0; $i<count($matches); $i++) { + $value = $matches[$i][2]; + // correct issues with the incoming data // FIXME ... for now merge multi-dimensional array indices using ____ $key = preg_replace('/.\]\[./',CM_KEYMARKER,$matches[$i][1]); - // remove quotes from quoted strings & unescape escaped data - $value = preg_replace('/^(\'|")(.*)(?<!\\\\)\1$/s','$2',$matches[$i][2]); - $value = strtr($value, array('\\\\'=>'\\','\\\''=>'\'','\\"'=>'"')); + + // handle arrays + if(preg_match('/array ?\((.*)\)/', $value, $match)){ + $arr = explode(',', $match[1]); + + // remove quotes from quoted strings & unescape escaped data + $len = count($arr); + for($j=0; $j<$len; $j++){ + $arr[$j] = preg_replace('/^(\'|")(.*)(?<!\\\\)\1$/s','$2',$arr[$j]); + $arr[$j] = strtr($arr[$j], array('\\\\'=>'\\','\\\''=>'\'','\\"'=>'"')); + } + + $value = $arr; + }else{ + // remove quotes from quoted strings & unescape escaped data + $value = preg_replace('/^(\'|")(.*)(?<!\\\\)\1$/s','$2',$value); + $value = strtr($value, array('\\\\'=>'\\','\\\''=>'\'','\\"'=>'"')); + } $config[$key] = $value; } |