diff options
-rw-r--r-- | INSTALL | 2 | ||||
-rw-r--r-- | UPGRADING | 2 | ||||
-rwxr-xr-x | bin/installto.sh | 2 | ||||
-rwxr-xr-x | bin/update.sh | 47 | ||||
-rw-r--r-- | config/db.inc.php.dist | 35 | ||||
-rw-r--r-- | config/main.inc.php.dist | 913 | ||||
-rw-r--r-- | installer/config.php | 24 | ||||
-rw-r--r-- | installer/index.php | 18 | ||||
-rw-r--r-- | installer/rcube_install.php | 129 | ||||
-rw-r--r-- | installer/test.php | 112 | ||||
-rw-r--r-- | plugins/additional_message_headers/additional_message_headers.php | 6 | ||||
-rw-r--r-- | plugins/debug_logger/debug_logger.php | 4 | ||||
-rw-r--r-- | plugins/password/README | 2 | ||||
-rw-r--r-- | plugins/show_additional_headers/show_additional_headers.php | 2 | ||||
-rw-r--r-- | plugins/subscriptions_option/subscriptions_option.php | 2 | ||||
-rw-r--r-- | plugins/virtuser_file/virtuser_file.php | 2 | ||||
-rw-r--r-- | plugins/virtuser_query/virtuser_query.php | 2 | ||||
-rw-r--r-- | program/lib/Roundcube/rcube_config.php | 23 |
18 files changed, 180 insertions, 1147 deletions
@@ -59,7 +59,7 @@ CONFIGURATION HINTS =================== Roundcube writes internal errors to the 'errors' log file located in the logs -directory which can be configured in config/main.inc.php. If you want ordinary +directory which can be configured in config/config.inc.php. If you want ordinary PHP errors to be logged there as well, enable the 'php_value error_log' line in the .htaccess file and set the path to the log file accordingly. @@ -39,7 +39,7 @@ it on a unix system, you need to do the following operations by hand: 3. Run ./bin/update.sh from the commandline OR open http://url-to-roundcube/installer/ in a browser and choose "3 Test config". To enable the latter one, you have to temporary set 'enable_installer' - to true in your local config/main.inc.php file. + to true in your local config/config.inc.php file. WARNING: See SQLite database upgrade below. 4. Let the update script/installer check your configuration and update your config files and database schema as suggested by the updater. 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"; } } diff --git a/config/db.inc.php.dist b/config/db.inc.php.dist deleted file mode 100644 index b1f142e56..000000000 --- a/config/db.inc.php.dist +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -/* - +-----------------------------------------------------------------------+ - | Configuration file for database access | - | | - | This file is part of the Roundcube Webmail client | - | Copyright (C) 2005-2013, The Roundcube Dev Team | - | | - | Licensed under the GNU General Public License version 3 or | - | any later version with exceptions for skins & plugins. | - | See the README file for a full license statement. | - +-----------------------------------------------------------------------+ -*/ - -$rcmail_config = array(); - -// Database connection string (DSN) for read+write operations -// Format (compatible with PEAR MDB2): db_provider://user:password@host/database -// Currently supported db_providers: mysql, pgsql, sqlite, mssql or sqlsrv -// For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php -// NOTE: for SQLite use absolute path: 'sqlite:////full/path/to/sqlite.db?mode=0646' -$rcmail_config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail'; - -// Database DSN for read-only operations (if empty write database will be used) -// useful for database replication -$rcmail_config['db_dsnr'] = ''; - -// use persistent db-connections -// beware this will not "always" work as expected -// see: http://www.php.net/manual/en/features.persistent-connections.php -$rcmail_config['db_persistent'] = FALSE; - -// you can define specific table (and sequence) names prefix -$rcmail_config['db_prefix'] = ''; diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist deleted file mode 100644 index 84a0a7a61..000000000 --- a/config/main.inc.php.dist +++ /dev/null @@ -1,913 +0,0 @@ -<?php - -/* - +-----------------------------------------------------------------------+ - | Main configuration file | - | | - | This file is part of the Roundcube Webmail client | - | Copyright (C) 2005-2011, The Roundcube Dev Team | - | | - | Licensed under the GNU General Public License version 3 or | - | any later version with exceptions for skins & plugins. | - | See the README file for a full license statement. | - | | - +-----------------------------------------------------------------------+ - -*/ - -$rcmail_config = array(); - -// ---------------------------------- -// LOGGING/DEBUGGING -// ---------------------------------- - -// system error reporting, sum of: 1 = log; 4 = show, 8 = trace -$rcmail_config['debug_level'] = 1; - -// log driver: 'syslog' or 'file'. -$rcmail_config['log_driver'] = 'file'; - -// date format for log entries -// (read http://php.net/manual/en/function.date.php for all format characters) -$rcmail_config['log_date_format'] = 'd-M-Y H:i:s O'; - -// Syslog ident string to use, if using the 'syslog' log driver. -$rcmail_config['syslog_id'] = 'roundcube'; - -// Syslog facility to use, if using the 'syslog' log driver. -// For possible values see installer or http://php.net/manual/en/function.openlog.php -$rcmail_config['syslog_facility'] = LOG_USER; - -// Log sent messages to <log_dir>/sendmail or to syslog -$rcmail_config['smtp_log'] = true; - -// Log successful logins to <log_dir>/userlogins or to syslog -$rcmail_config['log_logins'] = false; - -// Log session authentication errors to <log_dir>/session or to syslog -$rcmail_config['log_session'] = false; - -// Log SQL queries to <log_dir>/sql or to syslog -$rcmail_config['sql_debug'] = false; - -// Log IMAP conversation to <log_dir>/imap or to syslog -$rcmail_config['imap_debug'] = false; - -// Log LDAP conversation to <log_dir>/ldap or to syslog -$rcmail_config['ldap_debug'] = false; - -// Log SMTP conversation to <log_dir>/smtp or to syslog -$rcmail_config['smtp_debug'] = false; - -// ---------------------------------- -// IMAP -// ---------------------------------- - -// The mail host chosen to perform the log-in. -// Leave blank to show a textbox at login, give a list of hosts -// to display a pulldown menu or set one host as string. -// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls:// -// Supported replacement variables: -// %n - hostname ($_SERVER['SERVER_NAME']) -// %t - hostname without the first part -// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) -// %s - domain name after the '@' from e-mail address provided at login screen -// For example %n = mail.domain.tld, %t = domain.tld -// WARNING: After hostname change update of mail_host column in users table is -// required to match old user data records with the new host. -$rcmail_config['default_host'] = ''; - -// TCP port used for IMAP connections -$rcmail_config['default_port'] = 143; - -// IMAP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or null to use -// best server supported one) -$rcmail_config['imap_auth_type'] = null; - -// If you know your imap's folder delimiter, you can specify it here. -// Otherwise it will be determined automatically -$rcmail_config['imap_delimiter'] = null; - -// If IMAP server doesn't support NAMESPACE extension, but you're -// using shared folders or personal root folder is non-empty, you'll need to -// set these options. All can be strings or arrays of strings. -// Folders need to be ended with directory separator, e.g. "INBOX." -// (special directory "~" is an exception to this rule) -// These can be used also to overwrite server's namespaces -$rcmail_config['imap_ns_personal'] = null; -$rcmail_config['imap_ns_other'] = null; -$rcmail_config['imap_ns_shared'] = null; - -// By default IMAP capabilities are readed after connection to IMAP server -// In some cases, e.g. when using IMAP proxy, there's a need to refresh the list -// after login. Set to True if you've got this case. -$rcmail_config['imap_force_caps'] = false; - -// By default list of subscribed folders is determined using LIST-EXTENDED -// extension if available. Some servers (dovecot 1.x) returns wrong results -// for shared namespaces in this case. http://trac.roundcube.net/ticket/1486225 -// Enable this option to force LSUB command usage instead. -$rcmail_config['imap_force_lsub'] = false; - -// Some server configurations (e.g. Courier) doesn't list folders in all namespaces -// Enable this option to force listing of folders in all namespaces -$rcmail_config['imap_force_ns'] = false; - -// IMAP connection timeout, in seconds. Default: 0 (no limit) -$rcmail_config['imap_timeout'] = 0; - -// Optional IMAP authentication identifier to be used as authorization proxy -$rcmail_config['imap_auth_cid'] = null; - -// Optional IMAP authentication password to be used for imap_auth_cid -$rcmail_config['imap_auth_pw'] = null; - -// Type of IMAP indexes cache. Supported values: 'db', 'apc' and 'memcache'. -$rcmail_config['imap_cache'] = null; - -// Enables messages cache. Only 'db' cache is supported. -$rcmail_config['messages_cache'] = false; - -// Lifetime of IMAP indexes cache. Possible units: s, m, h, d, w -$rcmail_config['imap_cache_ttl'] = '10d'; - -// Lifetime of messages cache. Possible units: s, m, h, d, w -$rcmail_config['messages_cache_ttl'] = '10d'; - -// ---------------------------------- -// SMTP -// ---------------------------------- - -// SMTP server host (for sending mails). -// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls:// -// If left blank, the PHP mail() function is used -// Supported replacement variables: -// %h - user's IMAP hostname -// %n - hostname ($_SERVER['SERVER_NAME']) -// %t - hostname without the first part -// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) -// %z - IMAP domain (IMAP hostname without the first part) -// For example %n = mail.domain.tld, %t = domain.tld -$rcmail_config['smtp_server'] = ''; - -// SMTP port (default is 25; use 587 for STARTTLS or 465 for the -// deprecated SSL over SMTP (aka SMTPS)) -$rcmail_config['smtp_port'] = 25; - -// SMTP username (if required) if you use %u as the username Roundcube -// will use the current username for login -$rcmail_config['smtp_user'] = ''; - -// SMTP password (if required) if you use %p as the password Roundcube -// will use the current user's password for login -$rcmail_config['smtp_pass'] = ''; - -// SMTP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use -// best server supported one) -$rcmail_config['smtp_auth_type'] = ''; - -// Optional SMTP authentication identifier to be used as authorization proxy -$rcmail_config['smtp_auth_cid'] = null; - -// Optional SMTP authentication password to be used for smtp_auth_cid -$rcmail_config['smtp_auth_pw'] = null; - -// SMTP HELO host -// Hostname to give to the remote server for SMTP 'HELO' or 'EHLO' messages -// Leave this blank and you will get the server variable 'server_name' or -// localhost if that isn't defined. -$rcmail_config['smtp_helo_host'] = ''; - -// SMTP connection timeout, in seconds. Default: 0 (no limit) -$rcmail_config['smtp_timeout'] = 0; - -// ---------------------------------- -// LDAP -// ---------------------------------- - -// Type of LDAP cache. Supported values: 'db', 'apc' and 'memcache'. -$rcmail_config['ldap_cache'] = 'db'; - -// Lifetime of LDAP cache. Possible units: s, m, h, d, w -$rcmail_config['ldap_cache_ttl'] = '10m'; - -// ---------------------------------- -// SYSTEM -// ---------------------------------- - -// THIS OPTION WILL ALLOW THE INSTALLER TO RUN AND CAN EXPOSE SENSITIVE CONFIG DATA. -// ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING! -$rcmail_config['enable_installer'] = false; - -// don't allow these settings to be overriden by the user -$rcmail_config['dont_override'] = array(); - -// provide an URL where a user can get support for this Roundcube installation -// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE! -$rcmail_config['support_url'] = ''; - -// replace Roundcube logo with this image -// specify an URL relative to the document root of this Roundcube installation -$rcmail_config['skin_logo'] = null; - -// automatically create a new Roundcube user when log-in the first time. -// a new user will be created once the IMAP login succeeds. -// set to false if only registered users can use this service -$rcmail_config['auto_create_user'] = true; - -// Enables possibility to log in using email address from user identities -$rcmail_config['user_aliases'] = false; - -// use this folder to store log files (must be writeable for apache user) -// This is used by the 'file' log driver. -$rcmail_config['log_dir'] = 'logs/'; - -// use this folder to store temp files (must be writeable for apache user) -$rcmail_config['temp_dir'] = 'temp/'; - -// enforce connections over https -// with this option enabled, all non-secure connections will be redirected. -// set the port for the ssl connection as value of this option if it differs from the default 443 -$rcmail_config['force_https'] = false; - -// tell PHP that it should work as under secure connection -// even if it doesn't recognize it as secure ($_SERVER['HTTPS'] is not set) -// e.g. when you're running Roundcube behind a https proxy -// this option is mutually exclusive to 'force_https' and only either one of them should be set to true. -$rcmail_config['use_https'] = false; - -// Allow browser-autocompletion on login form. -// 0 - disabled, 1 - username and host only, 2 - username, host, password -$rcmail_config['login_autocomplete'] = 0; - -// Forces conversion of logins to lower case. -// 0 - disabled, 1 - only domain part, 2 - domain and local part. -// If users authentication is case-insensitive this must be enabled. -// Note: After enabling it all user records need to be updated, e.g. with query: -// UPDATE users SET username = LOWER(username); -$rcmail_config['login_lc'] = 2; - -// Includes should be interpreted as PHP files -$rcmail_config['skin_include_php'] = false; - -// display software version on login screen -$rcmail_config['display_version'] = false; - -// Session lifetime in minutes -$rcmail_config['session_lifetime'] = 10; - -// Session domain: .example.org -$rcmail_config['session_domain'] = ''; - -// Session name. Default: 'roundcube_sessid' -$rcmail_config['session_name'] = null; - -// Session path. Defaults to PHP session.cookie_path setting. -$rcmail_config['session_path'] = null; - -// Backend to use for session storage. Can either be 'db' (default), 'memcache' or 'php' -// If set to 'memcache', a list of servers need to be specified in 'memcache_hosts' -// Make sure the Memcache extension (http://pecl.php.net/package/memcache) version >= 2.0.0 is installed -// Setting this value to 'php' will use the default session save handler configured in PHP -$rcmail_config['session_storage'] = 'db'; - -// Use these hosts for accessing memcached -// Define any number of hosts in the form of hostname:port or unix:///path/to/socket.file -$rcmail_config['memcache_hosts'] = null; // e.g. array( 'localhost:11211', '192.168.1.12:11211', 'unix:///var/tmp/memcached.sock' ); - -// check client IP in session athorization -$rcmail_config['ip_check'] = false; - -// check referer of incoming requests -$rcmail_config['referer_check'] = false; - -// X-Frame-Options HTTP header value sent to prevent from Clickjacking. -// Possible values: sameorigin|deny. Set to false in order to disable sending them -$rcmail_config['x_frame_options'] = 'sameorigin'; - -// this key is used to encrypt the users imap password which is stored -// in the session record (and the client cookie if remember password is enabled). -// please provide a string of exactly 24 chars. -$rcmail_config['des_key'] = 'rcmail-!24ByteDESkey*Str'; - -// Automatically add this domain to user names for login -// Only for IMAP servers that require full e-mail addresses for login -// Specify an array with 'host' => 'domain' values to support multiple hosts -// Supported replacement variables: -// %h - user's IMAP hostname -// %n - hostname ($_SERVER['SERVER_NAME']) -// %t - hostname without the first part -// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) -// %z - IMAP domain (IMAP hostname without the first part) -// For example %n = mail.domain.tld, %t = domain.tld -$rcmail_config['username_domain'] = ''; - -// This domain will be used to form e-mail addresses of new users -// Specify an array with 'host' => 'domain' values to support multiple hosts -// Supported replacement variables: -// %h - user's IMAP hostname -// %n - http hostname ($_SERVER['SERVER_NAME']) -// %d - domain (http hostname without the first part) -// %z - IMAP domain (IMAP hostname without the first part) -// For example %n = mail.domain.tld, %t = domain.tld -$rcmail_config['mail_domain'] = ''; - -// Password charset. -// Use it if your authentication backend doesn't support UTF-8. -// Defaults to ISO-8859-1 for backward compatibility -$rcmail_config['password_charset'] = 'ISO-8859-1'; - -// How many seconds must pass between emails sent by a user -$rcmail_config['sendmail_delay'] = 0; - -// Maximum number of recipients per message. Default: 0 (no limit) -$rcmail_config['max_recipients'] = 0; - -// Maximum allowednumber of members of an address group. Default: 0 (no limit) -// If 'max_recipients' is set this value should be less or equal -$rcmail_config['max_group_members'] = 0; - -// add this user-agent to message headers when sending -$rcmail_config['useragent'] = 'Roundcube Webmail/'.RCMAIL_VERSION; - -// use this name to compose page titles -$rcmail_config['product_name'] = 'Roundcube Webmail'; - -// try to load host-specific configuration -// see http://trac.roundcube.net/wiki/Howto_Config for more details -$rcmail_config['include_host_config'] = false; - -// path to a text file which will be added to each sent message -// paths are relative to the Roundcube root folder -$rcmail_config['generic_message_footer'] = ''; - -// path to a text file which will be added to each sent HTML message -// paths are relative to the Roundcube root folder -$rcmail_config['generic_message_footer_html'] = ''; - -// add a received header to outgoing mails containing the creators IP and hostname -$rcmail_config['http_received_header'] = false; - -// Whether or not to encrypt the IP address and the host name -// these could, in some circles, be considered as sensitive information; -// however, for the administrator, these could be invaluable help -// when tracking down issues. -$rcmail_config['http_received_header_encrypt'] = false; - -// This string is used as a delimiter for message headers when sending -// a message via mail() function. Leave empty for auto-detection -$rcmail_config['mail_header_delimiter'] = NULL; - -// number of chars allowed for line when wrapping text. -// text wrapping is done when composing/sending messages -$rcmail_config['line_length'] = 72; - -// send plaintext messages as format=flowed -$rcmail_config['send_format_flowed'] = true; - -// According to RFC2298, return receipt envelope sender address must be empty. -// If this option is true, Roundcube will use user's identity as envelope sender for MDN responses. -$rcmail_config['mdn_use_from'] = false; - -// Set identities access level: -// 0 - many identities with possibility to edit all params -// 1 - many identities with possibility to edit all params but not email address -// 2 - one identity with possibility to edit all params -// 3 - one identity with possibility to edit all params but not email address -// 4 - one identity with possibility to edit only signature -$rcmail_config['identities_level'] = 0; - -// Mimetypes supported by the browser. -// attachments of these types will open in a preview window -// either a comma-separated list or an array: 'text/plain,text/html,text/xml,image/jpeg,image/gif,image/png,application/pdf' -$rcmail_config['client_mimetypes'] = null; # null == default - -// Path to a local mime magic database file for PHPs finfo extension. -// Set to null if the default path should be used. -$rcmail_config['mime_magic'] = null; - -// Absolute path to a local mime.types mapping table file. -// This is used to derive mime-types from the filename extension or vice versa. -// Such a file is usually part of the apache webserver. If you don't find a file named mime.types on your system, -// download it from http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types -$rcmail_config['mime_types'] = null; - -// path to imagemagick identify binary -$rcmail_config['im_identify_path'] = null; - -// path to imagemagick convert binary -$rcmail_config['im_convert_path'] = null; - -// Size of thumbnails from image attachments displayed below the message content. -// Note: whether images are displayed at all depends on the 'inline_images' option. -// Set to 0 to display images in full size. -$rcmail_config['image_thumbnail_size'] = 240; - -// maximum size of uploaded contact photos in pixel -$rcmail_config['contact_photo_size'] = 160; - -// Enable DNS checking for e-mail address validation -$rcmail_config['email_dns_check'] = false; - -// Disables saving sent messages in Sent folder (like gmail) (Default: false) -// Note: useful when SMTP server stores sent mail in user mailbox -$rcmail_config['no_save_sent_messages'] = false; - -// ---------------------------------- -// PLUGINS -// ---------------------------------- - -// List of active plugins (in plugins/ directory) -$rcmail_config['plugins'] = array(); - -// ---------------------------------- -// USER INTERFACE -// ---------------------------------- - -// default messages sort column. Use empty value for default server's sorting, -// or 'arrival', 'date', 'subject', 'from', 'to', 'fromto', 'size', 'cc' -$rcmail_config['message_sort_col'] = ''; - -// default messages sort order -$rcmail_config['message_sort_order'] = 'DESC'; - -// These cols are shown in the message list. Available cols are: -// subject, from, to, fromto, cc, replyto, date, size, status, flag, attachment, 'priority' -$rcmail_config['list_cols'] = array('subject', 'status', 'fromto', 'date', 'size', 'flag', 'attachment'); - -// the default locale setting (leave empty for auto-detection) -// RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR -$rcmail_config['language'] = null; - -// use this format for date display (date or strftime format) -$rcmail_config['date_format'] = 'Y-m-d'; - -// give this choice of date formats to the user to select from -$rcmail_config['date_formats'] = array('Y-m-d', 'd-m-Y', 'Y/m/d', 'm/d/Y', 'd/m/Y', 'd.m.Y', 'j.n.Y'); - -// use this format for time display (date or strftime format) -$rcmail_config['time_format'] = 'H:i'; - -// give this choice of time formats to the user to select from -$rcmail_config['time_formats'] = array('G:i', 'H:i', 'g:i a', 'h:i A'); - -// use this format for short date display (derived from date_format and time_format) -$rcmail_config['date_short'] = 'D H:i'; - -// use this format for detailed date/time formatting (derived from date_format and time_format) -$rcmail_config['date_long'] = 'Y-m-d H:i'; - -// store draft message is this mailbox -// leave blank if draft messages should not be stored -// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) -$rcmail_config['drafts_mbox'] = 'Drafts'; - -// store spam messages in this mailbox -// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) -$rcmail_config['junk_mbox'] = 'Junk'; - -// store sent message is this mailbox -// leave blank if sent messages should not be stored -// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) -$rcmail_config['sent_mbox'] = 'Sent'; - -// move messages to this folder when deleting them -// leave blank if they should be deleted directly -// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) -$rcmail_config['trash_mbox'] = 'Trash'; - -// display these folders separately in the mailbox list. -// these folders will also be displayed with localized names -// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) -$rcmail_config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'); - -// Disable localization of the default folder names listed above -$rcmail_config['show_real_foldernames'] = false; - -// automatically create the above listed default folders on first login -$rcmail_config['create_default_folders'] = false; - -// protect the default folders from renames, deletes, and subscription changes -$rcmail_config['protect_default_folders'] = true; - -// if in your system 0 quota means no limit set this option to true -$rcmail_config['quota_zero_as_unlimited'] = false; - -// Make use of the built-in spell checker. It is based on GoogieSpell. -// Since Google only accepts connections over https your PHP installatation -// requires to be compiled with Open SSL support -$rcmail_config['enable_spellcheck'] = true; - -// Enables spellchecker exceptions dictionary. -// Setting it to 'shared' will make the dictionary shared by all users. -$rcmail_config['spellcheck_dictionary'] = false; - -// Set the spell checking engine. 'googie' is the default. 'pspell' is also available, -// but requires the Pspell extensions. When using Nox Spell Server, also set 'googie' here. -$rcmail_config['spellcheck_engine'] = 'googie'; - -// For a locally installed Nox Spell Server, please specify the URI to call it. -// Get Nox Spell Server from http://orangoo.com/labs/?page_id=72 -// Leave empty to use the Google spell checking service, what means -// that the message content will be sent to Google in order to check spelling -$rcmail_config['spellcheck_uri'] = ''; - -// These languages can be selected for spell checking. -// Configure as a PHP style hash array: array('en'=>'English', 'de'=>'Deutsch'); -// Leave empty for default set of available language. -$rcmail_config['spellcheck_languages'] = NULL; - -// Makes that words with all letters capitalized will be ignored (e.g. GOOGLE) -$rcmail_config['spellcheck_ignore_caps'] = false; - -// Makes that words with numbers will be ignored (e.g. g00gle) -$rcmail_config['spellcheck_ignore_nums'] = false; - -// Makes that words with symbols will be ignored (e.g. g@@gle) -$rcmail_config['spellcheck_ignore_syms'] = false; - -// Use this char/string to separate recipients when composing a new message -$rcmail_config['recipients_separator'] = ','; - -// don't let users set pagesize to more than this value if set -$rcmail_config['max_pagesize'] = 200; - -// Minimal value of user's 'refresh_interval' setting (in seconds) -$rcmail_config['min_refresh_interval'] = 60; - -// Enables files upload indicator. Requires APC installed and enabled apc.rfc1867 option. -// By default refresh time is set to 1 second. You can set this value to true -// or any integer value indicating number of seconds. -$rcmail_config['upload_progress'] = false; - -// Specifies for how many seconds the Undo button will be available -// after object delete action. Currently used with supporting address book sources. -// Setting it to 0, disables the feature. -$rcmail_config['undo_timeout'] = 0; - -// ---------------------------------- -// ADDRESSBOOK SETTINGS -// ---------------------------------- - -// This indicates which type of address book to use. Possible choises: -// 'sql' (default), 'ldap' and ''. -// If set to 'ldap' then it will look at using the first writable LDAP -// address book as the primary address book and it will not display the -// SQL address book in the 'Address Book' view. -// If set to '' then no address book will be displayed or only the -// addressbook which is created by a plugin (like CardDAV). -$rcmail_config['address_book_type'] = 'sql'; - -// In order to enable public ldap search, configure an array like the Verisign -// example further below. if you would like to test, simply uncomment the example. -// Array key must contain only safe characters, ie. a-zA-Z0-9_ -$rcmail_config['ldap_public'] = array(); - -// If you are going to use LDAP for individual address books, you will need to -// set 'user_specific' to true and use the variables to generate the appropriate DNs to access it. -// -// The recommended directory structure for LDAP is to store all the address book entries -// under the users main entry, e.g.: -// -// o=root -// ou=people -// uid=user@domain -// mail=contact@contactdomain -// -// So the base_dn would be uid=%fu,ou=people,o=root -// The bind_dn would be the same as based_dn or some super user login. -/* - * example config for Verisign directory - * -$rcmail_config['ldap_public']['Verisign'] = array( - 'name' => 'Verisign.com', - // Replacement variables supported in host names: - // %h - user's IMAP hostname - // %n - hostname ($_SERVER['SERVER_NAME']) - // %t - hostname without the first part - // %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) - // %z - IMAP domain (IMAP hostname without the first part) - // For example %n = mail.domain.tld, %t = domain.tld - 'hosts' => array('directory.verisign.com'), - 'port' => 389, - 'use_tls' => false, - 'ldap_version' => 3, // using LDAPv3 - 'network_timeout' => 10, // The timeout (in seconds) for connect + bind arrempts. This is only supported in PHP >= 5.3.0 with OpenLDAP 2.x - 'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login. - // %fu - The full username provided, assumes the username is an email - // address, uses the username_domain value if not an email address. - // %u - The username prior to the '@'. - // %d - The domain name after the '@'. - // %dc - The domain name hierarchal string e.g. "dc=test,dc=domain,dc=com" - // %dn - DN found by ldap search when search_filter/search_base_dn are used - 'base_dn' => '', - 'bind_dn' => '', - 'bind_pass' => '', - // It's possible to bind for an individual address book - // The login name is used to search for the DN to bind with - 'search_base_dn' => '', - 'search_filter' => '', // e.g. '(&(objectClass=posixAccount)(uid=%u))' - // DN and password to bind as before searching for bind DN, if anonymous search is not allowed - 'search_bind_dn' => '', - 'search_bind_pw' => '', - // Default for %dn variable if search doesn't return DN value - 'search_dn_default' => '', - // Optional authentication identifier to be used as SASL authorization proxy - // bind_dn need to be empty - 'auth_cid' => '', - // SASL authentication method (for proxy auth), e.g. DIGEST-MD5 - 'auth_method' => '', - // Indicates if the addressbook shall be hidden from the list. - // With this option enabled you can still search/view contacts. - 'hidden' => false, - // Indicates if the addressbook shall not list contacts but only allows searching. - 'searchonly' => false, - // Indicates if we can write to the LDAP directory or not. - // If writable is true then these fields need to be populated: - // LDAP_Object_Classes, required_fields, LDAP_rdn - 'writable' => false, - // To create a new contact these are the object classes to specify - // (or any other classes you wish to use). - 'LDAP_Object_Classes' => array('top', 'inetOrgPerson'), - // The RDN field that is used for new entries, this field needs - // to be one of the search_fields, the base of base_dn is appended - // to the RDN to insert into the LDAP directory. - 'LDAP_rdn' => 'cn', - // The required fields needed to build a new contact as required by - // the object classes (can include additional fields not required by the object classes). - 'required_fields' => array('cn', 'sn', 'mail'), - 'search_fields' => array('mail', 'cn'), // fields to search in - // mapping of contact fields to directory attributes - // for every attribute one can specify the number of values (limit) allowed. - // default is 1, a wildcard * means unlimited - 'fieldmap' => array( - // Roundcube => LDAP:limit - 'name' => 'cn', - 'surname' => 'sn', - 'firstname' => 'givenName', - 'jobtitle' => 'title', - 'email' => 'mail:*', - 'phone:home' => 'homePhone', - 'phone:work' => 'telephoneNumber', - 'phone:mobile' => 'mobile', - 'phone:pager' => 'pager', - 'street' => 'street', - 'zipcode' => 'postalCode', - 'region' => 'st', - 'locality' => 'l', - // if you country is a complex object, you need to configure 'sub_fields' below - 'country' => 'c', - 'organization' => 'o', - 'department' => 'ou', - 'jobtitle' => 'title', - 'notes' => 'description', - // these currently don't work: - // 'phone:workfax' => 'facsimileTelephoneNumber', - // 'photo' => 'jpegPhoto', - // 'manager' => 'manager', - // 'assistant' => 'secretary', - ), - // Map of contact sub-objects (attribute name => objectClass(es)), e.g. 'c' => 'country' - 'sub_fields' => array(), - // Generate values for the following LDAP attributes automatically when creating a new record - 'autovalues' => array( - // 'uid' => 'md5(microtime())', // You may specify PHP code snippets which are then eval'ed - // 'mail' => '{givenname}.{sn}@mydomain.com', // or composite strings with placeholders for existing attributes - ), - 'sort' => 'cn', // The field to sort the listing by. - 'scope' => 'sub', // search mode: sub|base|list - 'filter' => '(objectClass=inetOrgPerson)', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act - 'fuzzy_search' => true, // server allows wildcard search - 'vlv' => false, // Enable Virtual List View to more efficiently fetch paginated data (if server supports it) - 'numsub_filter' => '(objectClass=organizationalUnit)', // with VLV, we also use numSubOrdinates to query the total number of records. Set this filter to get all numSubOrdinates attributes for counting - 'sizelimit' => '0', // Enables you to limit the count of entries fetched. Setting this to 0 means no limit. - 'timelimit' => '0', // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit. - 'referrals' => true|false, // Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups - - // definition for contact groups (uncomment if no groups are supported) - // for the groups base_dn, the user replacements %fu, %u, $d and %dc work as for base_dn (see above) - // if the groups base_dn is empty, the contact base_dn is used for the groups as well - // -> in this case, assure that groups and contacts are separated due to the concernig filters! - 'groups' => array( - 'base_dn' => '', - 'scope' => 'sub', // search mode: sub|base|list - 'filter' => '(objectClass=groupOfNames)', - 'object_classes' => array("top", "groupOfNames"), - 'member_attr' => 'member', // name of the member attribute, e.g. uniqueMember - 'name_attr' => 'cn', // attribute to be used as group name - ), -); -*/ - -// An ordered array of the ids of the addressbooks that should be searched -// when populating address autocomplete fields server-side. ex: array('sql','Verisign'); -$rcmail_config['autocomplete_addressbooks'] = array('sql'); - -// The minimum number of characters required to be typed in an autocomplete field -// before address books will be searched. Most useful for LDAP directories that -// may need to do lengthy results building given overly-broad searches -$rcmail_config['autocomplete_min_length'] = 1; - -// Number of parallel autocomplete requests. -// If there's more than one address book, n parallel (async) requests will be created, -// where each request will search in one address book. By default (0), all address -// books are searched in one request. -$rcmail_config['autocomplete_threads'] = 0; - -// Max. numer of entries in autocomplete popup. Default: 15. -$rcmail_config['autocomplete_max'] = 15; - -// show address fields in this order -// available placeholders: {street}, {locality}, {zipcode}, {country}, {region} -$rcmail_config['address_template'] = '{street}<br/>{locality} {zipcode}<br/>{country} {region}'; - -// Matching mode for addressbook search (including autocompletion) -// 0 - partial (*abc*), default -// 1 - strict (abc) -// 2 - prefix (abc*) -// Note: For LDAP sources fuzzy_search must be enabled to use 'partial' or 'prefix' mode -$rcmail_config['addressbook_search_mode'] = 0; - -// ---------------------------------- -// USER PREFERENCES -// ---------------------------------- - -// Use this charset as fallback for message decoding -$rcmail_config['default_charset'] = 'ISO-8859-1'; - -// skin name: folder from skins/ -$rcmail_config['skin'] = 'larry'; - -// Enables using standard browser windows (that can be handled as tabs) -// instead of popup windows -$rcmail_config['standard_windows'] = false; - -// show up to X items in messages list view -$rcmail_config['mail_pagesize'] = 50; - -// show up to X items in contacts list view -$rcmail_config['addressbook_pagesize'] = 50; - -// sort contacts by this col (preferably either one of name, firstname, surname) -$rcmail_config['addressbook_sort_col'] = 'surname'; - -// the way how contact names are displayed in the list -// 0: display name -// 1: (prefix) firstname middlename surname (suffix) -// 2: (prefix) surname firstname middlename (suffix) -// 3: (prefix) surname, firstname middlename (suffix) -$rcmail_config['addressbook_name_listing'] = 0; - -// use this timezone to display date/time -// valid timezone identifers are listed here: php.net/manual/en/timezones.php -// 'auto' will use the browser's timezone settings -$rcmail_config['timezone'] = 'auto'; - -// prefer displaying HTML messages -$rcmail_config['prefer_html'] = true; - -// display remote inline images -// 0 - Never, always ask -// 1 - Ask if sender is not in address book -// 2 - Always show inline images -$rcmail_config['show_images'] = 0; - -// open messages in new window -$rcmail_config['message_extwin'] = false; - -// open message compose form in new window -$rcmail_config['compose_extwin'] = false; - -// compose html formatted messages by default -// 0 - never, 1 - always, 2 - on reply to HTML message, 3 - on forward or reply to HTML message -$rcmail_config['htmleditor'] = 0; - -// show pretty dates as standard -$rcmail_config['prettydate'] = true; - -// save compose message every 300 seconds (5min) -$rcmail_config['draft_autosave'] = 300; - -// default setting if preview pane is enabled -$rcmail_config['preview_pane'] = false; - -// Mark as read when viewed in preview pane (delay in seconds) -// Set to -1 if messages in preview pane should not be marked as read -$rcmail_config['preview_pane_mark_read'] = 0; - -// Clear Trash on logout -$rcmail_config['logout_purge'] = false; - -// Compact INBOX on logout -$rcmail_config['logout_expunge'] = false; - -// Display attached images below the message body -$rcmail_config['inline_images'] = true; - -// Encoding of long/non-ascii attachment names: -// 0 - Full RFC 2231 compatible -// 1 - RFC 2047 for 'name' and RFC 2231 for 'filename' parameter (Thunderbird's default) -// 2 - Full 2047 compatible -$rcmail_config['mime_param_folding'] = 1; - -// Set true if deleted messages should not be displayed -// This will make the application run slower -$rcmail_config['skip_deleted'] = false; - -// Set true to Mark deleted messages as read as well as deleted -// False means that a message's read status is not affected by marking it as deleted -$rcmail_config['read_when_deleted'] = true; - -// Set to true to never delete messages immediately -// Use 'Purge' to remove messages marked as deleted -$rcmail_config['flag_for_deletion'] = false; - -// Default interval for auto-refresh requests (in seconds) -// These are requests for system state updates e.g. checking for new messages, etc. -// Setting it to 0 disables the feature. -$rcmail_config['refresh_interval'] = 60; - -// If true all folders will be checked for recent messages -$rcmail_config['check_all_folders'] = false; - -// If true, after message delete/move, the next message will be displayed -$rcmail_config['display_next'] = true; - -// 0 - Do not expand threads -// 1 - Expand all threads automatically -// 2 - Expand only threads with unread messages -$rcmail_config['autoexpand_threads'] = 0; - -// When replying: -// -1 - don't cite the original message -// 0 - place cursor below the original message -// 1 - place cursor above original message (top posting) -$rcmail_config['reply_mode'] = 0; - -// When replying strip original signature from message -$rcmail_config['strip_existing_sig'] = true; - -// Show signature: -// 0 - Never -// 1 - Always -// 2 - New messages only -// 3 - Forwards and Replies only -$rcmail_config['show_sig'] = 1; - -// Use MIME encoding (quoted-printable) for 8bit characters in message body -$rcmail_config['force_7bit'] = false; - -// Defaults of the search field configuration. -// The array can contain a per-folder list of header fields which should be considered when searching -// The entry with key '*' stands for all folders which do not have a specific list set. -// Please note that folder names should to be in sync with $rcmail_config['default_folders'] -$rcmail_config['search_mods'] = null; // Example: array('*' => array('subject'=>1, 'from'=>1), 'Sent' => array('subject'=>1, 'to'=>1)); - -// Defaults of the addressbook search field configuration. -$rcmail_config['addressbook_search_mods'] = null; // Example: array('name'=>1, 'firstname'=>1, 'surname'=>1, 'email'=>1, '*'=>1); - -// 'Delete always' -// This setting reflects if mail should be always deleted -// when moving to Trash fails. This is necessary in some setups -// when user is over quota and Trash is included in the quota. -$rcmail_config['delete_always'] = false; - -// Directly delete messages in Junk instead of moving to Trash -$rcmail_config['delete_junk'] = false; - -// Behavior if a received message requests a message delivery notification (read receipt) -// 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask) -// 3 = send automatically if sender is in addressbook, otherwise ask the user -// 4 = send automatically if sender is in addressbook, otherwise ignore -$rcmail_config['mdn_requests'] = 0; - -// Return receipt checkbox default state -$rcmail_config['mdn_default'] = 0; - -// Delivery Status Notification checkbox default state -$rcmail_config['dsn_default'] = 0; - -// Place replies in the folder of the message being replied to -$rcmail_config['reply_same_folder'] = false; - -// Sets default mode of Forward feature to "forward as attachment" -$rcmail_config['forward_attachment'] = false; - -// Defines address book (internal index) to which new contacts will be added -// By default it is the first writeable addressbook. -// Note: Use '0' for built-in address book. -$rcmail_config['default_addressbook'] = null; - -// Enables spell checking before sending a message. -$rcmail_config['spellcheck_before_send'] = false; - -// Skip alternative email addresses in autocompletion (show one address per contact) -$rcmail_config['autocomplete_single'] = false; - -// Default font for composed HTML message. -// Supported values: Andale Mono, Arial, Arial Black, Book Antiqua, Courier New, -// Georgia, Helvetica, Impact, Tahoma, Terminal, Times New Roman, Trebuchet MS, Verdana -$rcmail_config['default_font'] = 'Verdana'; - -// Enables display of email address with name instead of a name (and address in title) -$rcmail_config['message_show_email'] = false; 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)) { <input type="hidden" name="_step" value="2" /> <?php -// also load the default config to fill in the fields -$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 '<p class="notice">Copy or download the following configurations and save them in two files'; - echo ' (names above the text box) within the <tt>'.RCMAIL_CONFIG_DIR.'</tt> directory of your Roundcube installation.<br/>'; - echo ' Make sure that there are no characters outside the <tt><?php ?></tt> brackets when saving the files.</p>'; - + echo '<p class="notice">Copy or download the following configuration and save'; + echo ' as <tt><b>config.inc.php</b></tt> within the <tt>'.RCMAIL_CONFIG_DIR.'</tt> directory of your Roundcube installation.<br/>'; + echo ' Make sure that there are no characters outside the <tt><?php ?></tt> brackets when saving the file.'; + echo ' <input type="button" onclick="location.href=\'index.php?_getconfig=1\'" value="Download" /></p>'; + $textbox = new html_textarea(array('rows' => 16, 'cols' => 60, 'class' => "configfile")); - - echo '<div><em>main.inc.php (<a href="index.php?_getfile=main">download</a>)</em></div>'; - echo $textbox->show(($_SESSION['main.inc.php'] = $RCI->create_config('main'))); - - echo '<div style="margin-top:1em"><em>db.inc.php (<a href="index.php?_getfile=db">download</a>)</em></div>'; - echo $textbox->show($_SESSION['db.inc.php'] = $RCI->create_config('db')); + echo $textbox->show(($_SESSION['config'] = $RCI->create_config())); echo '<p class="hint">Of course there are more options to configure. - Have a look at the config files or visit <a href="http://trac.roundcube.net/wiki/Howto_Config">Howto_Config</a> to find out.</p>'; + Have a look at the defaults.inc.php file or visit <a href="http://trac.roundcube.net/wiki/Howto_Config">Howto_Config</a> to find out.</p>'; echo '<p><input type="button" onclick="location.href=\'./index.php?_step=3\'" value="CONTINUE" /></p>'; - + // echo '<style type="text/css"> .configblock { display:none } </style>'; echo "\n<hr style='margin-bottom:1.6em' />\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 '<h2 class="error">The installer is disabled!</h2>'; - echo '<p>To enable it again, set <tt>$rcmail_config[\'enable_installer\'] = true;</tt> in RCUBE_CONFIG_DIR/main.inc.php</p>'; + echo '<p>To enable it again, set <tt>$rcmail_config[\'enable_installer\'] = true;</tt> in RCUBE_CONFIG_DIR/config.inc.php</p>'; echo '</div></body></html>'; 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', @@ -83,43 +78,51 @@ class rcube_install } /** - * 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 = "<?php\n\n"; + foreach ($config as $prop => $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)) { ?> <form action="index.php?_step=3" method="post"> -<h3>Check config files</h3> +<h3>Check config file</h3> <?php -$read_main = is_readable(RCUBE_CONFIG_DIR . 'main.inc.php'); -$read_db = is_readable(RCUBE_CONFIG_DIR . 'db.inc.php'); - -if ($read_main && !empty($RCI->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 '<br />'; -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 '<br />'; -if ($RCI->configured && ($messages = $RCI->check_config())) { - - if (is_array($messages['missing'])) { - echo '<h3 class="warning">Missing config options</h3>'; - echo '<p class="hint">The following config options are not set (not present or empty) in the current configuration.<br/>'; - echo 'Please check the default config files and set the missing properties in your local config files.</p>'; - - echo '<ul class="configwarnings">'; - foreach ($messages['missing'] as $msg) { - echo html::tag('li', null, html::span('propname', $msg['prop']) . ($msg['name'] ? ': ' . $msg['name'] : '')); - } - echo '</ul>'; - } +if ($RCI->configured && ($messages = $RCI->check_config())) { if (is_array($messages['replaced'])) { echo '<h3 class="warning">Replaced config options</h3>'; echo '<p class="hint">The following config options have been replaced or renamed. '; echo 'Please update them accordingly in your config files.</p>'; - + echo '<ul class="configwarings">'; foreach ($messages['replaced'] as $msg) { echo html::tag('li', null, html::span('propname', $msg['prop']) . @@ -64,32 +56,28 @@ if ($RCI->configured && ($messages = $RCI->check_config())) { if (is_array($messages['obsolete'])) { echo '<h3>Obsolete config options</h3>'; echo '<p class="hint">You still have some obsolete or inexistent properties set. This isn\'t a problem but should be noticed.</p>'; - + echo '<ul class="configwarings">'; foreach ($messages['obsolete'] as $msg) { echo html::tag('li', null, html::span('propname', $msg['prop']) . ($msg['name'] ? ': ' . $msg['name'] : '')); } echo '</ul>'; } - - echo '<p class="suggestion">OK, lazy people can download the updated config files here: '; - echo html::a(array('href' => './?_mergeconfig=main'), 'main.inc.php') . ' '; - echo html::a(array('href' => './?_mergeconfig=db'), 'db.inc.php'); + + echo '<p class="suggestion">OK, lazy people can download the updated config file here: '; + echo html::a(array('href' => './?_mergeconfig=1'), 'config.inc.php') . ' '; echo "</p>"; - - + if (is_array($messages['dependencies'])) { echo '<h3 class="warning">Dependency check failed</h3>'; echo '<p class="hint">Some of your configuration settings require other options to be configured or additional PHP modules to be installed</p>'; - + echo '<ul class="configwarings">'; foreach ($messages['dependencies'] as $msg) { echo html::tag('li', null, html::span('propname', $msg['prop']) . ': ' . $msg['explain']); } echo '</ul>'; } - - } ?> @@ -98,30 +86,24 @@ if ($RCI->configured && ($messages = $RCI->check_config())) { <p>Roundcube may need to write/save files into these directories</p> <?php -if ($RCI->configured) { - $pass = false; - - $dirs[] = $RCI->config['temp_dir'] ? $RCI->config['temp_dir'] : 'temp'; - if($RCI->config['log_driver'] != 'syslog') - $dirs[] = $RCI->config['log_dir'] ? $RCI->config['log_dir'] : 'logs'; +$dirs[] = $RCI->config['temp_dir'] ? $RCI->config['temp_dir'] : 'temp'; +if ($RCI->config['log_driver'] != 'syslog') + $dirs[] = $RCI->config['log_dir'] ? $RCI->config['log_dir'] : 'logs'; - foreach ($dirs as $dir) { - $dirpath = $dir[0] == '/' ? $dir : INSTALL_PATH . $dir; - if (is_writable(realpath($dirpath))) { - $RCI->pass($dir); - $pass = true; - } - else { - $RCI->fail($dir, 'not writeable for the webserver'); - } - echo '<br />'; +foreach ($dirs as $dir) { + $dirpath = $dir[0] == '/' ? $dir : INSTALL_PATH . $dir; + if (is_writable(realpath($dirpath))) { + $RCI->pass($dir); + $pass = true; } - - if (!$pass) - echo '<p class="hint">Use <tt>chmod</tt> or <tt>chown</tt> to grant write privileges to the webserver</p>'; + else { + $RCI->fail($dir, 'not writeable for the webserver'); + } + echo '<br />'; } -else { - $RCI->fail('Config', 'Could not read config files'); + +if (!$pass) { + echo '<p class="hint">Use <tt>chmod</tt> or <tt>chown</tt> to grant write privileges to the webserver</p>'; } ?> @@ -151,7 +133,7 @@ if ($RCI->configured) { } } else { - $RCI->fail('Config', 'Could not read config files'); + $RCI->fail('DSN (write)', 'Could not read config file'); } // initialize db with schema found in /SQL/* @@ -427,7 +409,7 @@ if (isset($_POST['imaptest']) && !empty($_POST['_host']) && !empty($_POST['_user After completing the installation and the final tests please <b>remove</b> the whole installer folder from the document root of the webserver or make sure that -<tt>enable_installer</tt> option in config/main.inc.php is disabled.<br /> +<tt>enable_installer</tt> option in <tt>config.inc.php</tt> is disabled.<br /> <br /> These files may expose sensitive configuration data like server passwords and encryption keys diff --git a/plugins/additional_message_headers/additional_message_headers.php b/plugins/additional_message_headers/additional_message_headers.php index 80c58d58b..a43018176 100644 --- a/plugins/additional_message_headers/additional_message_headers.php +++ b/plugins/additional_message_headers/additional_message_headers.php @@ -6,7 +6,7 @@ * Very simple plugin which will add additional headers * to or remove them from outgoing messages. * - * Enable the plugin in config/main.inc.php and add your desired headers: + * Enable the plugin in config.inc.php and add your desired headers: * $rcmail_config['additional_message_headers'] = array('User-Agent'); * * @version @package_version@ @@ -24,7 +24,7 @@ class additional_message_headers extends rcube_plugin function message_headers($args) { - $this->load_config(); + $this->load_config(); // additional email headers $additional_headers = rcmail::get_instance()->config->get('additional_message_headers',array()); @@ -39,5 +39,3 @@ class additional_message_headers extends rcube_plugin return $args; } } - -?> diff --git a/plugins/debug_logger/debug_logger.php b/plugins/debug_logger/debug_logger.php index 87a163785..deb6deb91 100644 --- a/plugins/debug_logger/debug_logger.php +++ b/plugins/debug_logger/debug_logger.php @@ -12,7 +12,7 @@ * which can redirect messages to files. The resulting log files * provide timing and tag quantity results. * - * Enable the plugin in config/main.inc.php and add your desired + * Enable the plugin in config.inc.php and add your desired * log types and files. * * @version @package_version@ @@ -21,7 +21,7 @@ * * Example: * - * config/main.inc.php: + * config.inc.php: * * // $rcmail_config['debug_logger'][type of logging] = name of file in log_dir * // The 'master' log includes timing information diff --git a/plugins/password/README b/plugins/password/README index 0ccc8ad23..73c4f39aa 100644 --- a/plugins/password/README +++ b/plugins/password/README @@ -65,7 +65,7 @@ ------------------- You can specify which database to connect by 'password_db_dsn' option and - what SQL query to execute by 'password_query'. See main.inc.php.dist file for + what SQL query to execute by 'password_query'. See config.inc.php.dist file for more info. Example implementations of an update_passwd function: diff --git a/plugins/show_additional_headers/show_additional_headers.php b/plugins/show_additional_headers/show_additional_headers.php index 1375348c2..c18e6d4b5 100644 --- a/plugins/show_additional_headers/show_additional_headers.php +++ b/plugins/show_additional_headers/show_additional_headers.php @@ -6,7 +6,7 @@ * Proof-of-concept plugin which will fetch additional headers * and display them in the message view. * - * Enable the plugin in config/main.inc.php and add your desired headers: + * Enable the plugin in config.inc.php and add your desired headers: * $rcmail_config['show_additional_headers'] = array('User-Agent'); * * @version @package_version@ diff --git a/plugins/subscriptions_option/subscriptions_option.php b/plugins/subscriptions_option/subscriptions_option.php index 7678d8e94..70ca5602b 100644 --- a/plugins/subscriptions_option/subscriptions_option.php +++ b/plugins/subscriptions_option/subscriptions_option.php @@ -7,7 +7,7 @@ * It includes a toggle on the settings page under "Server Settings". * The preference can also be locked * - * Add it to the plugins list in config/main.inc.php to enable the user option + * Add it to the plugins list in config.inc.php to enable the user option * The user option can be hidden and set globally by adding 'use_subscriptions' * to the 'dont_override' configure line: * $rcmail_config['dont_override'] = array('use_subscriptions'); diff --git a/plugins/virtuser_file/virtuser_file.php b/plugins/virtuser_file/virtuser_file.php index 974f33d3d..ed0eba189 100644 --- a/plugins/virtuser_file/virtuser_file.php +++ b/plugins/virtuser_file/virtuser_file.php @@ -3,7 +3,7 @@ /** * File based User-to-Email and Email-to-User lookup * - * Add it to the plugins list in config/main.inc.php and set + * Add it to the plugins list in config.inc.php and set * path to a virtuser table file to resolve user names and e-mail * addresses * $rcmail_config['virtuser_file'] = ''; diff --git a/plugins/virtuser_query/virtuser_query.php b/plugins/virtuser_query/virtuser_query.php index 9e3dc9071..88001d452 100644 --- a/plugins/virtuser_query/virtuser_query.php +++ b/plugins/virtuser_query/virtuser_query.php @@ -3,7 +3,7 @@ /** * DB based User-to-Email and Email-to-User lookup * - * Add it to the plugins list in config/main.inc.php and set + * Add it to the plugins list in config.inc.php and set * SQL queries to resolve usernames, e-mail addresses and hostnames from the database * %u will be replaced with the current username for login. * %m will be replaced with the current e-mail address for login. diff --git a/program/lib/Roundcube/rcube_config.php b/program/lib/Roundcube/rcube_config.php index 18055f77d..ff398bc00 100644 --- a/program/lib/Roundcube/rcube_config.php +++ b/program/lib/Roundcube/rcube_config.php @@ -69,13 +69,19 @@ class rcube_config */ private function load() { + // Load default settings + if (!$this->load_from_file(RCUBE_CONFIG_DIR . 'defaults.inc.php')) { + $this->errors[] = 'defaults.inc.php was not found.'; + } + // load main config file - if (!$this->load_from_file(RCUBE_CONFIG_DIR . 'main.inc.php')) - $this->errors[] = 'main.inc.php was not found.'; + if (!$this->load_from_file(RCUBE_CONFIG_DIR . 'config.inc.php')) { + $this->errors[] = 'config.inc.php was not found.'; - // load database config - if (!$this->load_from_file(RCUBE_CONFIG_DIR . 'db.inc.php')) - $this->errors[] = 'db.inc.php was not found.'; + // Old configuration files + $this->load_from_file(RCUBE_CONFIG_DIR . 'main.inc.php'); + $this->load_from_file(RCUBE_CONFIG_DIR . 'db.inc.php'); + } // load host-specific configuration $this->load_host_config(); @@ -175,7 +181,12 @@ class rcube_config include($fpath); ob_end_clean(); - if (is_array($rcmail_config)) { + if (is_array($config)) { + $this->merge($config); + return true; + } + // deprecated name of config variable + else if (is_array($rcmail_config)) { $this->merge($rcmail_config); return true; } |