Roundcube Community Forum
Third Party Contributions => Old Style Plug-Ins => Topic started by: RolfXXL on September 15, 2006, 06:04:18 AM
-
Hey ya!
Since i worked with Horde/IMP before, i was used to define multiple Server in a seperated file, specifying alsl the server-specific option
in an array.
Looking at RoundCube the server configuration was really drivin me nuts.
So i created a new server-configuration model like
$rcmail_server['IMAP1'] = array(
'name' => 'IMAP1',
'imap_host' => 'host.imap.com',
'imap_port' => '143',
'mail_domain' => 'imap.com',
'smtp_host' => 'smtp.imap.com',
'smtp_port' => '25',
'smtp_user' => '%u',
'smtp_pass' => '%p',
'smtp_auth_type' => 'LOGIN',
'imap_root' => 'mail/'
);
giving u the opportunity to specify all the options in good-readable style for each server in a new config file server.inc.php.
If the community (so u ;-) ) is interested in it, i would code it clear and free off my debug-code and make a diff, too.
So, interested?
-
I think it would be great do you have any examples?
-
Don`t know what u mean with "example", but here is my patch.
The values used in here can be deleted out of main.inc.php, but i didn`t want to patch your config ;-)
try this:
diff -u --recursive --new-file roundcubemail-0.1beta2.orig/config/server.inc.php round.new/config/server.inc.php
--- roundcubemail-0.1beta2.orig/config/server.inc.php 1970-01-01 01:00:00.000000000 +0100
+++ round.new/config/server.inc.php 2006-09-15 00:11:19.000000000 +0200
@@ -0,0 +1,48 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | Server configuration file |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2005, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | Multiple Static Server with server.inc.php |
+ | Implemented by S.B. |
+ | |
+ +-----------------------------------------------------------------------+
+
+*/
+
+$rcmail_server = array();
+
+$rcmail_server['IMAP1'] = array(
+ 'name' => 'IMAP1',
+ 'imap_host' => 'imap1.host.de',
+ 'imap_port' => '143',
+ 'mail_domain' => 'host.de',
+ 'smtp_host' => 'smtp.host.de',
+ 'smtp_port' => '25',
+ 'smtp_user' => '%u',
+ 'smtp_pass' => '%p',
+ 'smtp_auth_type' => 'LOGIN',
+ 'imap_root' => 'mail/'
+);
+
+$rcmail_server['IMAP2'] = array(
+ 'name' => 'IMAP2',
+ 'imap_host' => 'imap2.server.de',
+ 'imap_port' => '143',
+ 'mail_domain' => 'server.de',
+ 'smtp_host' => 'smtp.server.de',
+ 'smtp_port' => '25',
+ 'smtp_user' => '%u',
+ 'smtp_pass' => '%p',
+ 'smtp_auth_type' => 'LOGIN',
+ 'imap_root' => ''
+);
+
+
+// end of config file
+?>
diff -u --recursive --new-file roundcubemail-0.1beta2.orig/index.php round.new/index.php
--- roundcubemail-0.1beta2.orig/index.php 2006-08-06 17:55:11.000000000 +0200
+++ round.new/index.php 2006-09-15 12:36:01.000000000 +0200
@@ -143,7 +143,9 @@
// try to log in
if ($_action=='login' && $_task=='mail')
{
- $host = $_POST['_host'] ? $_POST['_host'] : $CONFIG['default_host'];
+ $srv_alias = $_POST['_host'];
+ $host = $SERVER[$srv_alias]['imap_host'];
+ $_SESSION['alias'] = $srv_alias;
// check if client supports cookies
if (empty($_COOKIE))
diff -u --recursive --new-file roundcubemail-0.1beta2.orig/program/include/main.inc round.new/program/include/main.inc
--- roundcubemail-0.1beta2.orig/program/include/main.inc 2006-08-06 17:55:11.000000000 +0200
+++ round.new/program/include/main.inc 2006-09-15 12:30:20.000000000 +0200
@@ -34,7 +34,7 @@
function rcmail_startup($task='mail')
{
global $sess_id, $sess_auth, $sess_user_lang;
- global $CONFIG, $INSTALL_PATH, $BROWSER, $OUTPUT, $_SESSION, $IMAP, $DB, $JS_OBJECT_NAME;
+ global $CONFIG, $SERVER, $INSTALL_PATH, $BROWSER, $OUTPUT, $_SESSION, $IMAP, $DB, $JS_OBJECT_NAME;
// check client
$BROWSER = rcube_browser();
@@ -42,6 +42,10 @@
// load config file
include_once('config/main.inc.php');
$CONFIG = is_array($rcmail_config) ? $rcmail_config : array();
+
+ // load server file
+ include_once('config/server.inc.php');
+ $SERVER = is_array($rcmail_server) ? $rcmail_server : array();
// load host-specific configuration
rcmail_load_host_config($CONFIG);
@@ -215,11 +219,12 @@
// this must be done AFTER connecting to the server
function rcmail_set_imap_prop()
{
- global $CONFIG, $IMAP;
+ global $CONFIG, $SERVER, $IMAP;
// set root dir from config
- if (!empty($CONFIG['imap_root']))
- $IMAP->set_rootdir($CONFIG['imap_root']);
+ $srv_alias = $_SESSION['alias'];
+ if (!empty($SERVER[$srv_alias]['imap_root']))
+ $IMAP->set_rootdir($SERVER[$srv_alias]['imap_root']);
if (is_array($CONFIG['default_imap_folders']))
$IMAP->set_default_mailboxes($CONFIG['default_imap_folders']);
@@ -417,8 +422,10 @@
// perfom login to the IMAP server and to the webmail service
function rcmail_login($user, $pass, $host=NULL)
{
- global $CONFIG, $IMAP, $DB, $sess_user_lang;
+ global $CONFIG, $SERVER, $IMAP, $DB, $sess_user_lang;
$user_id = NULL;
+
+ $srv_alias = $_SESSION['alias'];
if (!$host)
$host = $CONFIG['default_host'];
@@ -429,10 +436,10 @@
{
$host = $a_host['host'];
$imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE;
- $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : $CONFIG['default_port']);
+ $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : $SERVER['srv_alias']['imap_port']);
}
else
- $imap_port = $CONFIG['default_port'];
+ $imap_port = $SERVER['srv_alias']['imap_port'];
/* Modify username with domain if required
@@ -525,7 +532,7 @@
// create new entry in users and identities table
function rcmail_create_user($user, $host)
{
- global $DB, $CONFIG, $IMAP;
+ global $DB, $CONFIG, $SERVER, $IMAP;
$user_email = '';
@@ -543,14 +550,15 @@
if ($user_id = $DB->insert_id(get_sequence_name('users')))
{
+ $srv_alias = $_SESSION['alias'];
$mail_domain = $host;
- if (is_array($CONFIG['mail_domain']))
+ if (is_array($SERVER[$srv_alias]['mail_domain']))
{
- if (isset($CONFIG['mail_domain'][$host]))
- $mail_domain = $CONFIG['mail_domain'][$host];
+ if (isset($SERVER[$srv_alias]['mail_domain'][$host]))
+ $mail_domain = $SERVER[$srv_alias]['mail_domain'][$host];
}
- else if (!empty($CONFIG['mail_domain']))
- $mail_domain = $CONFIG['mail_domain'];
+ else if (!empty($SERVER[$srv_alias]['mail_domain']))
+ $mail_domain = $SERVER[$srv_alias]['mail_domain'];
if ($user_email=='')
$user_email = strstr($user, '@') ? $user : sprintf('%s@%s', $user, $mail_domain);
@@ -1686,7 +1694,7 @@
// return code for the webmail login form
function rcmail_login_form($attrib)
{
- global $CONFIG, $OUTPUT, $JS_OBJECT_NAME, $SESS_HIDDEN_FIELD;
+ global $CONFIG, $SERVER, $OUTPUT, $JS_OBJECT_NAME, $SESS_HIDDEN_FIELD;
$labels = array();
$labels['user'] = rcube_label('username');
@@ -1701,17 +1709,24 @@
$fields['user'] = $input_user->show(get_input_value('_user', RCUBE_INPUT_POST));
$fields['pass'] = $input_pass->show();
$fields['action'] = $input_action->show();
+
+ $server_list = array();
+ $val = array();
+
+ while(list($key, $val) = each($SERVER)) {
+ array_push($server_list,$key);
+ }
- if (is_array($CONFIG['default_host']))
+ if (is_array($server_list))
{
$select_host = new select(array('name' => '_host', 'id' => 'rcmloginhost'));
- foreach ($CONFIG['default_host'] as $key => $value)
+ foreach ($server_list as $key => $value)
$select_host->add($value, (is_numeric($key) ? $value : $key));
$fields['host'] = $select_host->show($_POST['_host']);
}
- else if (!strlen($CONFIG['default_host']))
+ else if (!strlen($server_list))
{
$input_host = new textfield(array('name' => '_host', 'id' => 'rcmloginhost', 'size' => 30));
$fields['host'] = $input_host->show($_POST['_host']);
diff -u --recursive --new-file roundcubemail-0.1beta2.orig/program/include/rcube_smtp.inc round.new/program/include/rcube_smtp.inc
--- roundcubemail-0.1beta2.orig/program/include/rcube_smtp.inc 2006-06-26 20:38:03.000000000 +0200
+++ round.new/program/include/rcube_smtp.inc 2006-09-15 12:31:25.000000000 +0200
@@ -51,11 +51,12 @@
*/
function smtp_mail($from, $recipients, &$headers, &$body)
{
- global $SMTP_CONN, $CONFIG, $SMTP_ERROR;
+ global $SMTP_CONN, $CONFIG, $SERVER, $SMTP_ERROR;
$smtp_timeout = null;
- $smtp_host = $CONFIG['smtp_server'];
- $smtp_port = is_numeric($CONFIG['smtp_port']) ? $CONFIG['smtp_port'] : 25;
- $smtp_host_url = parse_url($CONFIG['smtp_server']);
+ $srv_alias = $_SESSION['alias'];
+ $smtp_host = $SERVER[$srv_alias]['smtp_host'];
+ $smtp_port = is_numeric($SERVER[$srv_alias]['smtp_port']) ? $SERVER[$srv_alias]['smtp_port'] : 25;
+ $smtp_host_url = parse_url($SERVER[$srv_alias]['smtp_host']);
// overwrite port
if ($smtp_host_url['host'] && $smtp_host_url['port'])
@@ -90,19 +91,19 @@
}
// attempt to authenticate to the SMTP server
- if ($CONFIG['smtp_user'] && $CONFIG['smtp_pass'])
+ if ($SERVER[$srv_alias]['smtp_user'] && $SERVER[$srv_alias]['smtp_pass'])
{
- if (strstr($CONFIG['smtp_user'], '%u'))
- $smtp_user = str_replace('%u', $_SESSION['username'], $CONFIG['smtp_user']);
+ if (strstr($SERVER[$srv_alias]['smtp_user'], '%u'))
+ $smtp_user = str_replace('%u', $_SESSION['username'], $SERVER[$srv_alias]['smtp_user']);
else
- $smtp_user = $CONFIG['smtp_user'];
+ $smtp_user = $SERVER[$srv_alias]['smtp_user'];
- if (strstr($CONFIG['smtp_pass'], '%p'))
- $smtp_pass = str_replace('%p', decrypt_passwd($_SESSION['password']), $CONFIG['smtp_pass']);
+ if (strstr($SERVER[$srv_alias]['smtp_pass'], '%p'))
+ $smtp_pass = str_replace('%p', decrypt_passwd($_SESSION['password']), $SERVER[$srv_alias]['smtp_pass']);
else
- $smtp_pass = $CONFIG['smtp_pass'];
+ $smtp_pass = $SERVER[$srv_alias]['smtp_pass'];
- $smtp_auth_type = empty($CONFIG['smtp_auth_type']) ? NULL : $CONFIG['smtp_auth_type'];
+ $smtp_auth_type = empty($SERVER[$srv_alias]['smtp_auth_type']) ? NULL : $SERVER[$srv_alias]['smtp_auth_type'];
$result = $SMTP_CONN->auth($smtp_user, $smtp_pass, $smtp_auth_type);
if (PEAR::isError($result))
diff -u --recursive --new-file roundcubemail-0.1beta2.orig/program/steps/mail/sendmail.inc round.new/program/steps/mail/sendmail.inc
--- roundcubemail-0.1beta2.orig/program/steps/mail/sendmail.inc 2006-08-01 00:51:23.000000000 +0200
+++ round.new/program/steps/mail/sendmail.inc 2006-09-14 23:27:23.000000000 +0200
@@ -26,6 +26,9 @@
require_once('Mail/mime.php');
+$srv_alias = $_SESSION['alias'];
+
+
if (!isset($_SESSION['compose']['id']))
{
rcmail_overwrite_action('list');
@@ -225,7 +228,7 @@
if (!$savedraft) {
// send thru SMTP server using custom SMTP library
- if ($CONFIG['smtp_server'])
+ if ($SERVER[$srv_alias]['smtp_host'])
{
// generate list of recipients
$a_recipients = array($mailto);