From 461a30d771edd8bc6606f2c92dfde363514b93b1 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 14 Jun 2013 12:09:08 +0200 Subject: Merge config files (#1487311). Now we have defaults.inc.php and config.inc.php. Renamed $rcmail_config to $config. Old naming and old files are supported for backward compatibility. --- installer/config.php | 24 +++------ installer/index.php | 18 +++---- installer/rcube_install.php | 129 +++++++++++++++++++++++--------------------- installer/test.php | 112 ++++++++++++++++---------------------- 4 files changed, 132 insertions(+), 151 deletions(-) (limited to 'installer') diff --git a/installer/config.php b/installer/config.php index 4fcf5b08e..acdd4ffd1 100644 --- a/installer/config.php +++ b/installer/config.php @@ -9,9 +9,6 @@ if (!class_exists('rcube_install') || !is_object($RCI)) { load_defaults(); - // register these boolean fields $RCI->bool_config_props = array( 'ip_check' => 1, @@ -27,24 +24,19 @@ $RCI->bool_config_props = array( $_SESSION['allowinstaller'] = true; if (!empty($_POST['submit'])) { - - echo '

Copy or download the following configurations and save them in two files'; - echo ' (names above the text box) within the '.RCMAIL_CONFIG_DIR.' directory of your Roundcube installation.
'; - echo ' Make sure that there are no characters outside the <?php ?> brackets when saving the files.

'; - + echo '

Copy or download the following configuration and save'; + echo ' as config.inc.php within the '.RCMAIL_CONFIG_DIR.' directory of your Roundcube installation.
'; + echo ' Make sure that there are no characters outside the <?php ?> brackets when saving the file.'; + echo ' 

'; + $textbox = new html_textarea(array('rows' => 16, 'cols' => 60, 'class' => "configfile")); - - echo '
main.inc.php (download)
'; - echo $textbox->show(($_SESSION['main.inc.php'] = $RCI->create_config('main'))); - - echo '
db.inc.php (download)
'; - echo $textbox->show($_SESSION['db.inc.php'] = $RCI->create_config('db')); + echo $textbox->show(($_SESSION['config'] = $RCI->create_config())); echo '

Of course there are more options to configure. - Have a look at the config files or visit Howto_Config to find out.

'; + Have a look at the defaults.inc.php file or visit Howto_Config to find out.

'; echo '

'; - + // echo ''; echo "\n
\n"; } diff --git a/installer/index.php b/installer/index.php index 0e80b1cd6..4e4a04326 100644 --- a/installer/index.php +++ b/installer/index.php @@ -5,7 +5,7 @@ | Roundcube Webmail setup tool | | Version 0.9-git | | | - | Copyright (C) 2009-2012, The Roundcube Dev Team | + | Copyright (C) 2009-2013, The Roundcube Dev Team | | | | This program is free software: you can redistribute it and/or modify | | it under the terms of the GNU General Public License (with exceptions | @@ -59,12 +59,12 @@ session_start(); $RCI = rcube_install::get_instance(); $RCI->load_config(); -if (isset($_GET['_getfile']) && in_array($_GET['_getfile'], array('main', 'db'))) { - $filename = $_GET['_getfile'] . '.inc.php'; - if (!empty($_SESSION[$filename])) { +if (isset($_GET['_getconfig'])) { + $filename = 'config.inc.php'; + if (!empty($_SESSION['config'])) { header('Content-type: text/plain'); header('Content-Disposition: attachment; filename="'.$filename.'"'); - echo $_SESSION[$filename]; + echo $_SESSION['config']; exit; } else { @@ -74,14 +74,14 @@ if (isset($_GET['_getfile']) && in_array($_GET['_getfile'], array('main', 'db')) } if ($RCI->configured && ($RCI->getprop('enable_installer') || $_SESSION['allowinstaller']) && - isset($_GET['_mergeconfig']) && in_array($_GET['_mergeconfig'], array('main', 'db'))) { - $filename = $_GET['_mergeconfig'] . '.inc.php'; + !empty($_GET['_mergeconfig'])) { + $filename = 'config.inc.php'; header('Content-type: text/plain'); header('Content-Disposition: attachment; filename="'.$filename.'"'); $RCI->merge_config(); - echo $RCI->create_config($_GET['_mergeconfig'], true); + echo $RCI->create_config(); exit; } @@ -122,7 +122,7 @@ if ($RCI->configured && empty($_REQUEST['_step'])) { if ($RCI->configured && !$RCI->getprop('enable_installer') && !$_SESSION['allowinstaller']) { // header("HTTP/1.0 404 Not Found"); echo '

The installer is disabled!

'; - echo '

To enable it again, set $rcmail_config[\'enable_installer\'] = true; in RCUBE_CONFIG_DIR/main.inc.php

'; + echo '

To enable it again, set $rcmail_config[\'enable_installer\'] = true; in RCUBE_CONFIG_DIR/config.inc.php

'; echo ''; exit; } diff --git a/installer/rcube_install.php b/installer/rcube_install.php index c95d936d2..8165401a3 100644 --- a/installer/rcube_install.php +++ b/installer/rcube_install.php @@ -44,11 +44,6 @@ class rcube_install 'top_posting' => 'reply_mode', ); - // these config options are required for a working system - var $required_config = array( - 'db_dsnw', 'des_key', 'session_lifetime', - ); - // list of supported database drivers var $supported_dbs = array( 'MySQL' => 'pdo_mysql', @@ -82,44 +77,52 @@ class rcube_install return $inst; } - /** - * Read the default config files and store properties - */ - function load_defaults() - { - $this->_load_config('.php.dist'); - } - - /** * Read the local config files and store properties */ function load_config() { - $this->config = array(); - $this->_load_config('.php'); - $this->configured = !empty($this->config); + // defaults + if ($config = $this->load_config_file(RCUBE_CONFIG_DIR . 'defaults.inc.php')) { + $this->config = (array) $config; + $this->defaults = $this->config; + } + + $config = null; + + // config + if ($config = $this->load_config_file(RCUBE_CONFIG_DIR . 'config.inc.php')) { + $this->config = array_merge($this->config, $config); + } + else { + if ($config = $this->load_config_file(RCUBE_CONFIG_DIR . 'main.inc.php')) { + $this->config = array_merge($this->config, $config); + } + if ($config = $this->load_config_file(RCUBE_CONFIG_DIR . 'db.inc.php')) { + $this->config = array_merge($this->config, $config); + } + } + + $this->configured = !empty($config); } /** * Read the default config file and store properties - * @access private */ - function _load_config($suffix) + public function load_config_file($file) { - if (is_readable($main_inc = RCUBE_CONFIG_DIR . 'main.inc' . $suffix)) { - include($main_inc); - if (is_array($rcmail_config)) - $this->config += $rcmail_config; - } - if (is_readable($db_inc = RCUBE_CONFIG_DIR . 'db.inc'. $suffix)) { - include($db_inc); - if (is_array($rcmail_config)) - $this->config += $rcmail_config; + if (is_readable($file)) { + include $file; + + // deprecated name of config variable + if (is_array($rcmail_config)) { + return $rcmail_config; + } + + return $config; } } - /** * Getter for a certain config property * @@ -139,21 +142,16 @@ class rcube_install /** - * Take the default config file and replace the parameters - * with the submitted form data + * Create configuration file that contains parameters + * that differ from default values. * - * @param string Which config file (either 'main' or 'db') * @return string The complete config file content */ - function create_config($which, $force = false) + function create_config() { - $out = @file_get_contents(RCUBE_CONFIG_DIR . $which . '.inc.php.dist'); - - if (!$out) - return '[Warning: could not read the config template file]'; + $config = array(); foreach ($this->config as $prop => $default) { - $is_default = !isset($_POST["_$prop"]); $value = !$is_default || $this->bool_config_props[$prop] ? $_POST["_$prop"] : $default; @@ -211,20 +209,26 @@ class rcube_install } // skip this property - if (!$force && !$this->configured && ($value == $default)) + if (!array_key_exists($prop, $this->defaults) || ($value == $this->defaults[$prop])) { continue; + } // save change $this->config[$prop] = $value; + $config[$prop] = $value; + } + + // sort by option name + ksort($config); - // replace the matching line in config file - $out = preg_replace( - '/(\$rcmail_config\[\''.preg_quote($prop).'\'\])\s+=\s+(.+);/Uie', - "'\\1 = ' . rcube_install::_dump_var(\$value, \$prop) . ';'", - $out); + $out = " $value) { + // @TODO: copy option descriptions from defaults.inc.php file? + $out .= "\$config['$prop'] = " . rcube_install::_dump_var($value, $prop) . ";\n"; } + $out .= "\n?>"; - return trim($out); + return $out; } @@ -236,16 +240,13 @@ class rcube_install */ function check_config() { - $this->config = array(); - $this->load_defaults(); - $defaults = $this->config; - $this->load_config(); - if (!$this->configured) + + if (!$this->configured) { return null; + } $out = $seen = array(); - $required = array_flip($this->required_config); // iterate over the current configuration foreach ($this->config as $prop => $value) { @@ -264,12 +265,6 @@ class rcube_install $out['obsolete'][] = array('prop' => 'mime_magic', 'explain' => "Set value to null in order to use system default"); } - // iterate over default config - foreach ($defaults as $prop => $value) { - if (!isset($seen[$prop]) && isset($required[$prop]) && !(is_bool($this->config[$prop]) || strlen($this->config[$prop]))) - $out['missing'][] = array('prop' => $prop); - } - // check config dependencies and contradictions if ($this->config['enable_spellcheck'] && $this->config['spellcheck_engine'] == 'pspell') { if (!extension_loaded('pspell')) { @@ -317,7 +312,6 @@ class rcube_install { $current = $this->config; $this->config = array(); - $this->load_defaults(); foreach ($this->replaced_config as $prop => $replacement) { if (isset($current[$prop])) { @@ -345,7 +339,7 @@ class rcube_install } } - $this->config = array_merge($this->config, $current); + $this->config = array_merge($this->config, $current); foreach (array_keys((array)$current['ldap_public']) as $key) { $this->config['ldap_public'][$key] = $current['ldap_public'][$key]; @@ -563,7 +557,8 @@ class rcube_install } - static function _dump_var($var, $name=null) { + static function _dump_var($var, $name=null) + { // special values switch ($name) { case 'syslog_facility': @@ -576,8 +571,20 @@ class rcube_install if ($val = $list[$var]) return $val; break; - } + case 'mail_header_delimiter': + $var = str_replace(array("\r", "\n"), array('\r', '\n'), $var); + return '"' . $var. '"'; + break; +/* + // RCMAIL_VERSION is undefined here + case 'useragent': + if (preg_match('|^(.*)/('.preg_quote(RCMAIL_VERSION, '|').')$|i', $var, $m)) { + return '"' . addcslashes($var, '"') . '/" . RCMAIL_VERSION'; + } + break; +*/ + } if (is_array($var)) { if (empty($var)) { diff --git a/installer/test.php b/installer/test.php index fb3e7e937..c2e321455 100644 --- a/installer/test.php +++ b/installer/test.php @@ -7,52 +7,44 @@ if (!class_exists('rcube_install') || !is_object($RCI)) { ?>
-

Check config files

+

Check config file

config)) { - $RCI->pass('main.inc.php'); -} -else if ($read_main) { - $RCI->fail('main.inc.php', 'Syntax error'); +if ($read_config = is_readable(RCUBE_CONFIG_DIR . 'defaults.inc.php')) { + $config = $RCI->load_config_file(RCUBE_CONFIG_DIR . 'defaults.inc.php'); + if (!empty($config)) { + $RCI->pass('defaults.inc.php'); + } + else { + $RCI->fail('defaults.inc.php', 'Syntax error'); + } } -else if (!$read_main) { - $RCI->fail('main.inc.php', 'Unable to read file. Did you create the config files?'); +else { + $RCI->fail('defaults.inc.php', 'Unable to read default config file?'); } echo '
'; -if ($read_db && !empty($RCI->config['db_dsnw'])) { - $RCI->pass('db.inc.php'); -} -else if ($read_db) { - $RCI->fail('db.inc.php', 'Syntax error'); +if ($read_config = is_readable(RCUBE_CONFIG_DIR . 'config.inc.php')) { + $config = $RCI->load_config_file(RCUBE_CONFIG_DIR . 'config.inc.php'); + if (!empty($config)) { + $RCI->pass('config.inc.php'); + } + else { + $RCI->fail('config.inc.php', 'Syntax error'); + } } -else if (!$read_db) { - $RCI->fail('db.inc.php', 'Unable to read file. Did you create the config files?'); +else { + $RCI->fail('config.inc.php', 'Unable to read file. Did you create the config file?'); } +echo '
'; -if ($RCI->configured && ($messages = $RCI->check_config())) { - - if (is_array($messages['missing'])) { - echo '

Missing config options

'; - echo '

The following config options are not set (not present or empty) in the current configuration.
'; - echo 'Please check the default config files and set the missing properties in your local config files.

'; - - echo ''; - } +if ($RCI->configured && ($messages = $RCI->check_config())) { if (is_array($messages['replaced'])) { echo '

Replaced config options

'; echo '

The following config options have been replaced or renamed. '; echo 'Please update them accordingly in your config files.

'; - + echo '