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. --- bin/installto.sh | 2 +- bin/update.sh | 47 +++++++++++++++++++---------------------------- 2 files changed, 20 insertions(+), 29 deletions(-) (limited to 'bin') diff --git a/bin/installto.sh b/bin/installto.sh index 8e1ab1fbf..269a5dc06 100755 --- a/bin/installto.sh +++ b/bin/installto.sh @@ -50,7 +50,7 @@ if (strtolower($input) == 'y') { break; } } - foreach (array('index.php','.htaccess','config/main.inc.php.dist','config/db.inc.php.dist','CHANGELOG','README.md','UPGRADING','LICENSE') as $file) { + foreach (array('index.php','.htaccess','config/defaults.inc.php','CHANGELOG','README.md','UPGRADING','LICENSE') as $file) { if (!system("rsync -av " . INSTALL_PATH . "$file $target_dir/$file")) { $err = true; break; diff --git a/bin/update.sh b/bin/update.sh index 05956b933..1a6fbd32d 100755 --- a/bin/update.sh +++ b/bin/update.sh @@ -45,23 +45,11 @@ $RCI->load_config(); if ($RCI->configured) { $success = true; - + if ($messages = $RCI->check_config()) { $success = false; $err = 0; - // list missing config options - if (is_array($messages['missing'])) { - echo "WARNING: Missing config options:\n"; - echo "(These config options should be present in the current configuration)\n"; - - foreach ($messages['missing'] as $msg) { - echo "- '" . $msg['prop'] . ($msg['name'] ? "': " . $msg['name'] : "'") . "\n"; - $err++; - } - echo "\n"; - } - // list old/replaced config options if (is_array($messages['replaced'])) { echo "WARNING: Replaced config options:\n"; @@ -93,24 +81,27 @@ if ($RCI->configured) { // positive: let's merge the local config with the defaults if (strtolower($input) == 'y') { - $copy1 = $copy2 = $write1 = $write2 = false; - + $error = $writed = false; + // backup current config - echo ". backing up the current config files...\n"; - $copy1 = copy(RCMAIL_CONFIG_DIR . '/main.inc.php', RCMAIL_CONFIG_DIR . '/main.old.php'); - $copy2 = copy(RCMAIL_CONFIG_DIR . '/db.inc.php', RCMAIL_CONFIG_DIR . '/db.old.php'); - - if ($copy1 && $copy2) { + echo ". backing up the current config file(s)...\n"; + + foreach (array('config', 'main', 'db') as $file) { + if (file_exists(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php')) + if (!copy(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php', RCMAIL_CONFIG_DIR . '/' . $file . '.old.php')) { + $error = true; + } + } + } + + if (!$error) { $RCI->merge_config(); - - echo ". writing " . RCMAIL_CONFIG_DIR . "/main.inc.php...\n"; - $write1 = file_put_contents(RCMAIL_CONFIG_DIR . '/main.inc.php', $RCI->create_config('main', true)); - echo ". writing " . RCMAIL_CONFIG_DIR . "/main.db.php...\n"; - $write2 = file_put_contents(RCMAIL_CONFIG_DIR . '/db.inc.php', $RCI->create_config('db', true)); + echo ". writing " . RCMAIL_CONFIG_DIR . "/config.inc.php...\n"; + $writed = file_put_contents(RCMAIL_CONFIG_DIR . '/config.inc.php', $RCI->create_config()); } - + // Success! - if ($write1 && $write2) { + if ($writed) { echo "Done.\n"; echo "Your configuration files are now up-to-date!\n"; @@ -121,7 +112,7 @@ if ($RCI->configured) { } } else { - echo "Failed to write config files!\n"; + echo "Failed to write config file(s)!\n"; echo "Grant write privileges to the current user or update the files manually according to the above messages.\n"; } } -- cgit v1.2.3 From 9bacb2cd3f7e8f96a29f651460954965c400aac6 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 28 Jun 2013 22:27:59 +0200 Subject: Prepare config migration: - Show warning in installer and hints how to migrate - Let update.sh create the new config file if legacy config is detected - Provide a sample config file for manual configuration - Define a list of options which always should be written to local config --- INSTALL | 11 +++--- bin/update.sh | 30 +++++++++++----- config/config.inc.php.sample | 85 ++++++++++++++++++++++++++++++++++++++++++++ config/defaults.inc.php | 12 +++---- installer/config.php | 13 ++++--- installer/index.php | 12 +++++-- installer/rcube_install.php | 7 +++- 7 files changed, 144 insertions(+), 26 deletions(-) create mode 100644 config/config.inc.php.sample (limited to 'bin') diff --git a/INSTALL b/INSTALL index 4573c55af..b80d3323b 100644 --- a/INSTALL +++ b/INSTALL @@ -141,10 +141,13 @@ Best solution is to install a cronjob running this script daily. MANUAL CONFIGURATION ==================== -First of all, rename the files config/*.inc.php.dist to config/*.inc.php. -You can then change these files according to your environment and your needs. -Details about the config parameters can be found in the config files. -See http://trac.roundcube.net/wiki/Howto_Install for even more guidance. +First of all, copy the sample configuration file config/config.inc.php.sample +to config/config.inc.php and make the necessary adjustments according to your +environment and your needs. More configuration options can be copied from the +config/defaults.inc.php file into your local config.inc.php file as needed. +Read the comments above the individual configuration options to find out what +they do or read http://trac.roundcube.net/wiki/Howto_Install for even more +guidance. You can also modify the default .htaccess file. This is necessary to increase the allowed size of file attachments, for example: diff --git a/bin/update.sh b/bin/update.sh index 1a6fbd32d..b5000bbe5 100755 --- a/bin/update.sh +++ b/bin/update.sh @@ -36,17 +36,17 @@ if (!$opts['version']) { $opts['version'] = RCMAIL_VERSION; } -if ($opts['version'] && version_compare(version_parse($opts['version']), version_parse(RCMAIL_VERSION), '>=')) - die("Nothing to be done here. Bye!\n"); - - $RCI = rcube_install::get_instance(); $RCI->load_config(); +if ($opts['version'] && version_compare(version_parse($opts['version']), version_parse(RCMAIL_VERSION), '>=') && !$RCI->legacy_config) + die("Nothing to be done here. Bye!\n"); + + if ($RCI->configured) { $success = true; - if ($messages = $RCI->check_config()) { + if (($messages = $RCI->check_config()) || $RCI->legacy_config) { $success = false; $err = 0; @@ -74,6 +74,12 @@ if ($RCI->configured) { echo "\n"; } + if (!$err && $RCI->legacy_config) { + echo "WARNING: Your configuration needs to be migrated!\n"; + echo "We changed the configuration files structure and your two config files main.inc.php and db.inc.php have to be merged into one single file.\n"; + $err++; + } + // ask user to update config files if ($err) { echo "Do you want me to fix your local configuration? (y/N)\n"; @@ -81,13 +87,13 @@ if ($RCI->configured) { // positive: let's merge the local config with the defaults if (strtolower($input) == 'y') { - $error = $writed = false; + $error = $written = false; // backup current config echo ". backing up the current config file(s)...\n"; foreach (array('config', 'main', 'db') as $file) { - if (file_exists(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php')) + if (file_exists(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php')) { if (!copy(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php', RCMAIL_CONFIG_DIR . '/' . $file . '.old.php')) { $error = true; } @@ -97,11 +103,11 @@ if ($RCI->configured) { if (!$error) { $RCI->merge_config(); echo ". writing " . RCMAIL_CONFIG_DIR . "/config.inc.php...\n"; - $writed = file_put_contents(RCMAIL_CONFIG_DIR . '/config.inc.php', $RCI->create_config()); + $written = file_put_contents(RCMAIL_CONFIG_DIR . '/config.inc.php', $RCI->create_config()); } // Success! - if ($writed) { + if ($written) { echo "Done.\n"; echo "Your configuration files are now up-to-date!\n"; @@ -110,6 +116,12 @@ if ($RCI->configured) { foreach ($messages['missing'] as $msg) echo "- '" . $msg['prop'] . ($msg['name'] ? "': " . $msg['name'] : "'") . "\n"; } + + if ($RCI->legacy_config) { + foreach (array('main', 'db') as $file) { + @unlink(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php'); + } + } } else { echo "Failed to write config file(s)!\n"; diff --git a/config/config.inc.php.sample b/config/config.inc.php.sample new file mode 100644 index 000000000..22a269460 --- /dev/null +++ b/config/config.inc.php.sample @@ -0,0 +1,85 @@ +bool_config_props = array( $_SESSION['allowinstaller'] = true; if (!empty($_POST['submit'])) { - 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 '

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

'; + echo ' '; + if ($RCI->legacy_config) { + echo '

Afterwards, please remove the old configuration files main.inc.php and db.inc.php'; + echo ' from the config directory.'; + } + echo '

'; $textbox = new html_textarea(array('rows' => 16, 'cols' => 60, 'class' => "configfile")); echo $textbox->show(($_SESSION['config'] = $RCI->create_config())); @@ -640,7 +645,7 @@ $select_param_folding->add('Full RFC 2231 (Roundcube, Thunderbird)', '0'); $select_param_folding->add('RFC 2047/2231 (MS Outlook, OE)', '1'); $select_param_folding->add('Full RFC 2047 (deprecated)', '2'); -echo $select_param_folding->show(intval($RCI->getprop('mime_param_folding'))); +echo $select_param_folding->show(strval($RCI->getprop('mime_param_folding'))); ?>
How to encode attachment long/non-ascii names
diff --git a/installer/index.php b/installer/index.php index 4e4a04326..dc4c0a43f 100644 --- a/installer/index.php +++ b/installer/index.php @@ -121,8 +121,16 @@ if ($RCI->configured && empty($_REQUEST['_step'])) { // exit if installation is complete 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/config.inc.php

'; + if ($RCI->configured && $RCI->legacy_config) { + echo '

Your configuration needs to be migrated!

'; + echo '

We changed the configuration files structure and your installation needs to be updated accordingly.

'; + echo '

Please run the bin/update.sh script from the command line or set

  $rcmail_config[\'enable_installer\'] = true;

'; + echo ' in your RCUBE_CONFIG_DIR/main.inc.php to let the installer help you migrating it.

'; + } + else { + echo '

The installer is disabled!

'; + 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 5d766f4d0..06622de4d 100644 --- a/installer/rcube_install.php +++ b/installer/rcube_install.php @@ -28,10 +28,12 @@ class rcube_install var $failures = 0; var $config = array(); var $configured = false; + var $legacy_config = false; var $last_error = null; var $email_pattern = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9])'; var $bool_config_props = array(); + var $local_config = array('db_dsnw', 'default_host', 'support_url', 'des_key', 'plugins'); var $obsolete_config = array('db_backend', 'double_auth'); var $replaced_config = array( 'skin_path' => 'skin', @@ -157,6 +159,9 @@ class rcube_install $is_default = !isset($_POST["_$prop"]); $value = !$is_default || $this->bool_config_props[$prop] ? $_POST["_$prop"] : $default; + if ($prop == 'enable_installer') + $value = false; + // convert some form data if ($prop == 'debug_level' && !$is_default) { if (is_array($value)) { @@ -211,7 +216,7 @@ class rcube_install } // skip this property - if (!array_key_exists($prop, $this->defaults) || ($value == $this->defaults[$prop])) { + if ((!array_key_exists($prop, $this->defaults) || ($value == $this->defaults[$prop])) && !in_array($prop, $this->local_config)) { continue; } -- cgit v1.2.3 From 447fc6a657c6dc588510750617068bdd47209569 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 28 Jun 2013 23:04:10 +0200 Subject: Improve update.sh script; fix bad wording --- bin/update.sh | 22 ++++++++++------------ config/config.inc.php.sample | 2 +- 2 files changed, 11 insertions(+), 13 deletions(-) (limited to 'bin') diff --git a/bin/update.sh b/bin/update.sh index b5000bbe5..133d9f7ab 100755 --- a/bin/update.sh +++ b/bin/update.sh @@ -5,7 +5,7 @@ | bin/update.sh | | | | This file is part of the Roundcube Webmail client | - | Copyright (C) 2010-2011, The Roundcube Dev Team | + | Copyright (C) 2010-2013, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -25,7 +25,7 @@ require_once INSTALL_PATH . 'program/include/clisetup.php'; require_once INSTALL_PATH . 'installer/rcube_install.php'; // get arguments -$opts = rcube_utils::get_opt(array('v' => 'version')); +$opts = rcube_utils::get_opt(array('v' => 'version', 'y' => 'accept')); // ask user if no version is specified if (!$opts['version']) { @@ -39,10 +39,6 @@ if (!$opts['version']) { $RCI = rcube_install::get_instance(); $RCI->load_config(); -if ($opts['version'] && version_compare(version_parse($opts['version']), version_parse(RCMAIL_VERSION), '>=') && !$RCI->legacy_config) - die("Nothing to be done here. Bye!\n"); - - if ($RCI->configured) { $success = true; @@ -82,11 +78,13 @@ if ($RCI->configured) { // ask user to update config files if ($err) { - echo "Do you want me to fix your local configuration? (y/N)\n"; - $input = trim(fgets(STDIN)); + if (!$opts['accept']) { + echo "Do you want me to fix your local configuration? (y/N)\n"; + $input = trim(fgets(STDIN)); + } // positive: let's merge the local config with the defaults - if (strtolower($input) == 'y') { + if ($opts['accept'] || strtolower($input) == 'y') { $error = $written = false; // backup current config @@ -146,8 +144,8 @@ if ($RCI->configured) { } } - // check database schema - if ($RCI->config['db_dsnw']) { + // update database schema + if ($RCI->config['db_dsnw'] && $opts['version'] && version_compare(version_parse($opts['version']), version_parse(RCMAIL_VERSION), '<')) { echo "Executing database schema update.\n"; system(INSTALL_PATH . "bin/updatedb.sh --package=roundcube --version=" . $opts['version'] . " --dir=" . INSTALL_PATH . DIRECTORY_SEPARATOR . "SQL", $res); @@ -156,7 +154,7 @@ if ($RCI->configured) { } // index contacts for fulltext searching - if (version_compare(version_parse($opts['version']), '0.6.0', '<')) { + if ($opts['version'] && version_compare(version_parse($opts['version']), '0.6.0', '<')) { system(INSTALL_PATH . 'bin/indexcontacts.sh'); } diff --git a/config/config.inc.php.sample b/config/config.inc.php.sample index 22a269460..9a42ba9f5 100644 --- a/config/config.inc.php.sample +++ b/config/config.inc.php.sample @@ -5,7 +5,7 @@ | Local configuration for the Roundcube Webmail installation. | | | | This is a sample configuration file only containing the minumum | - | setup required for a functional installation. Copy more config | + | setup required for a functional installation. Copy more options | | from defaults.inc.php to this file to override the defaults. | | | | This file is part of the Roundcube Webmail client | -- cgit v1.2.3