From 47278835f5173a65b797643e2a90edfcb55a1c5f Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 28 Jun 2013 22:54:29 +0200 Subject: Preserve comments and order from existing or default config files --- installer/rcube_install.php | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/installer/rcube_install.php b/installer/rcube_install.php index 06622de4d..da636555b 100644 --- a/installer/rcube_install.php +++ b/installer/rcube_install.php @@ -118,6 +118,28 @@ class rcube_install if (is_readable($file)) { include $file; + // read comments from config file + if (function_exists('token_get_all')) { + $tokens = token_get_all(file_get_contents($file)); + $in_config = false; + $buffer = ''; + for ($i=0; $i < count($tokens); $i++) { + $token = $tokens[$i]; + if ($token[0] == T_VARIABLE && $token[1] == '$config' || $token[1] == '$rcmail_config') { + $in_config = true; + if ($buffer && $tokens[$i+1] == '[' && $tokens[$i+2][0] == T_CONSTANT_ENCAPSED_STRING) { + $propname = trim($tokens[$i+2][1], "'\""); + $this->comments[$propname] = $buffer; + $buffer = ''; + $i += 3; + } + } + else if ($in_config && $token[0] == T_COMMENT) { + $buffer .= strtr($token[1], array('\n' => "\n")); + } + } + } + // deprecated name of config variable if (is_array($rcmail_config)) { return $rcmail_config; @@ -225,15 +247,13 @@ class rcube_install $config[$prop] = $value; } - // sort by option name - ksort($config); - $out = " $value) { - // @TODO: copy option descriptions from defaults.inc.php file? - $out .= "\$config['$prop'] = " . rcube_install::_dump_var($value, $prop) . ";\n"; + // copy option descriptions from existing config or defaults.inc.php + $out .= $this->comments[$prop]; + $out .= "\$config['$prop'] = " . rcube_install::_dump_var($value, $prop) . ";\n\n"; } - $out .= "\n?>"; return $out; } -- cgit v1.2.3