From d4c760c19560c720d0df2297f573441de4660140 Mon Sep 17 00:00:00 2001
From: mcramer <m.cramer@pixcept.de>
Date: Wed, 27 Apr 2011 13:41:32 -0400
Subject: [PATCH] Implemented optional custom login name for mailboxes.

---
 install/tpl/system.ini.master                             |    1 
 interface/web/mail/templates/mail_user_list.htm           |    7 +
 interface/web/mail/mail_user_edit.php                     |   22 ++++++-
 config/courier/authmysqlrc                                |    2 
 interface/web/admin/templates/system_config_mail_edit.htm |    6 ++
 install/tpl/pamd_smtp.master                              |    4 
 install/sql/ispconfig3.sql                                |    1 
 install/tpl/opensuse_dovecot-sql.conf.master              |    4 
 install/tpl/sasl_smtpd.conf.master                        |    2 
 interface/web/mail/mail_user_list.php                     |    6 ++
 install/tpl/fedora_dovecot-sql.conf.master                |    4 
 interface/web/mail/lib/lang/en_mail_user_list.lng         |    1 
 interface/web/admin/lib/lang/en_system_config.lng         |    7 +-
 interface/web/mail/lib/lang/de_mail_user_list.lng         |    1 
 install/tpl/mysql-virtual_mailboxes.cf.master             |    4 
 interface/web/admin/lib/lang/de_system_config.lng         |    1 
 interface/web/admin/templates/server_config_mail_edit.htm |    4 
 interface/web/admin/form/system_config.tform.php          |    6 ++
 interface/web/mail/lib/lang/de_mail_user.lng              |    4 +
 interface/web/mail/list/mail_user.list.php                |   25 +++++--
 interface/web/mail/lib/lang/en_mail_user.lng              |    4 +
 interface/web/mail/form/mail_user.tform.php               |   15 +++++
 install/tpl/authmysqlrc.master                            |    2 
 install/tpl/debian6_dovecot-sql.conf.master               |    6 +-
 interface/web/mail/templates/mail_user_mailbox_edit.htm   |    4 +
 install/tpl/debian_dovecot-sql.conf.master                |    4 
 26 files changed, 113 insertions(+), 34 deletions(-)

diff --git a/config/courier/authmysqlrc b/config/courier/authmysqlrc
index 80253c9..144c57a 100644
--- a/config/courier/authmysqlrc
+++ b/config/courier/authmysqlrc
@@ -103,7 +103,7 @@
 #  SELECT MYSQL_UID_FIELD, MYSQL_GID_FIELD, ... WHERE id='loginid'
 #
 
-MYSQL_LOGIN_FIELD	email
+MYSQL_LOGIN_FIELD	login
 
 ##NAME: MYSQL_HOME_FIELD:0
 #
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index ff0cfb1..55daa11 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -589,6 +589,7 @@
   `sys_perm_other` varchar(5) NOT NULL default '',
   `server_id` int(11) unsigned NOT NULL default '0',
   `email` varchar(255) NOT NULL default '',
+  `login` varchar(255) NOT NULL,
   `password` varchar(255) NOT NULL,
   `name` varchar(255) NOT NULL default '',
   `uid` int(11) unsigned NOT NULL default '5000',
diff --git a/install/tpl/authmysqlrc.master b/install/tpl/authmysqlrc.master
index b8f39e3..d44b4f2 100644
--- a/install/tpl/authmysqlrc.master
+++ b/install/tpl/authmysqlrc.master
@@ -8,7 +8,7 @@
 #MYSQL_CLEAR_PWFIELD password
 MYSQL_UID_FIELD uid
 MYSQL_GID_FIELD gid
-MYSQL_LOGIN_FIELD email
+MYSQL_LOGIN_FIELD login
 MYSQL_HOME_FIELD homedir
 MYSQL_MAILDIR_FIELD maildir
 #MYSQL_NAME_FIELD
diff --git a/install/tpl/debian6_dovecot-sql.conf.master b/install/tpl/debian6_dovecot-sql.conf.master
index 73dd0fc..b96ad38 100644
--- a/install/tpl/debian6_dovecot-sql.conf.master
+++ b/install/tpl/debian6_dovecot-sql.conf.master
@@ -120,7 +120,7 @@
 connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE email = '%u' AND disable%Ls = 'n'
-#user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('maildir:storage=', floor(quota/1024)) AS quota, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE email = '%u' AND disable%Ls = 'n'
-user_query = SELECT email AS user, maildir AS home, CONCAT('*:storage=', quota , 'B') AS quota_rule FROM mail_user WHERE email = '%u' AND disable%Ls = 'n'
+password_query = SELECT password FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
+#user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('maildir:storage=', floor(quota/1024)) AS quota, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
+user_query = SELECT email AS user, maildir AS home, CONCAT('*:storage=', quota , 'B') AS quota_rule FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
 
diff --git a/install/tpl/debian_dovecot-sql.conf.master b/install/tpl/debian_dovecot-sql.conf.master
index 8777d73..cd61170 100644
--- a/install/tpl/debian_dovecot-sql.conf.master
+++ b/install/tpl/debian_dovecot-sql.conf.master
@@ -120,7 +120,7 @@
 connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE email = '%u' AND disable%Ls = 'n'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('maildir:storage=', floor(quota/1024)) AS quota, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE email = '%u' AND disable%Ls = 'n'
+password_query = SELECT password FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
+user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('maildir:storage=', floor(quota/1024)) AS quota, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
 
 
diff --git a/install/tpl/fedora_dovecot-sql.conf.master b/install/tpl/fedora_dovecot-sql.conf.master
index 17f7422..897f35a 100644
--- a/install/tpl/fedora_dovecot-sql.conf.master
+++ b/install/tpl/fedora_dovecot-sql.conf.master
@@ -133,5 +133,5 @@
 connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE email = '%u' AND disable%Ls = 'n'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('maildir:storage=', floor(quota/1024)) AS quota, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE email = '%u' AND disable%Ls = 'n'
+password_query = SELECT password FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
+user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('maildir:storage=', floor(quota/1024)) AS quota, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
diff --git a/install/tpl/mysql-virtual_mailboxes.cf.master b/install/tpl/mysql-virtual_mailboxes.cf.master
index d013c34..2fe47bb 100644
--- a/install/tpl/mysql-virtual_mailboxes.cf.master
+++ b/install/tpl/mysql-virtual_mailboxes.cf.master
@@ -3,6 +3,6 @@
 dbname = {mysql_server_database}
 table = mail_user
 select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
-where_field = email
+where_field = login
 additional_conditions = and postfix = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
diff --git a/install/tpl/opensuse_dovecot-sql.conf.master b/install/tpl/opensuse_dovecot-sql.conf.master
index 17f7422..897f35a 100644
--- a/install/tpl/opensuse_dovecot-sql.conf.master
+++ b/install/tpl/opensuse_dovecot-sql.conf.master
@@ -133,5 +133,5 @@
 connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE email = '%u' AND disable%Ls = 'n'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('maildir:storage=', floor(quota/1024)) AS quota, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE email = '%u' AND disable%Ls = 'n'
+password_query = SELECT password FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
+user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('maildir:storage=', floor(quota/1024)) AS quota, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
diff --git a/install/tpl/pamd_smtp.master b/install/tpl/pamd_smtp.master
index f03bed9..11b5d16 100644
--- a/install/tpl/pamd_smtp.master
+++ b/install/tpl/pamd_smtp.master
@@ -1,2 +1,2 @@
-auth    required   pam_mysql.so user={mysql_server_ispconfig_user} passwd={mysql_server_ispconfig_password} host={mysql_server_ip} db={mysql_server_database} table=mail_user usercolumn=email passwdcolumn=password crypt=1
-account sufficient pam_mysql.so user={mysql_server_ispconfig_user} passwd={mysql_server_ispconfig_password} host={mysql_server_ip} db={mysql_server_database} table=mail_user usercolumn=email passwdcolumn=password crypt=1
\ No newline at end of file
+auth    required   pam_mysql.so user={mysql_server_ispconfig_user} passwd={mysql_server_ispconfig_password} host={mysql_server_ip} db={mysql_server_database} table=mail_user usercolumn=login passwdcolumn=password crypt=1
+account sufficient pam_mysql.so user={mysql_server_ispconfig_user} passwd={mysql_server_ispconfig_password} host={mysql_server_ip} db={mysql_server_database} table=mail_user usercolumn=login passwdcolumn=password crypt=1
\ No newline at end of file
diff --git a/install/tpl/sasl_smtpd.conf.master b/install/tpl/sasl_smtpd.conf.master
index 35a9c3d..d593423 100644
--- a/install/tpl/sasl_smtpd.conf.master
+++ b/install/tpl/sasl_smtpd.conf.master
@@ -6,4 +6,4 @@
 sql_user: {mysql_server_ispconfig_user}
 sql_passwd: {mysql_server_ispconfig_password}
 sql_database: {mysql_server_database}
-sql_select: select password from mail_user where email = '%u'
\ No newline at end of file
+sql_select: select password from mail_user where login = '%u'
diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master
index 07d5a4e..8b305ac 100644
--- a/install/tpl/system.ini.master
+++ b/install/tpl/system.ini.master
@@ -7,6 +7,7 @@
 [dns]
 
 [mail]
+enable_custom_login=n
 mailboxlist_webmail_link=y
 webmail_url=
 
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index 3de23d5..b6aa20e 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -162,6 +162,12 @@
 	##################################
 	# Begin Datatable fields
 	##################################
+    'enable_custom_login' => array(
+      'datatype' => 'VARCHAR',
+      'formtype' => 'CHECKBOX',
+      'default' => 'n',
+      'value' => array(0 => 'n', 1 => 'y')
+    ),
 		'mailboxlist_webmail_link' => array (
 			'datatype'	=> 'VARCHAR',
 			'formtype'	=> 'CHECKBOX',
diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index c26e98c..fb337e6 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -19,4 +19,5 @@
 $wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They cannot free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
 $wb['new_domain_txt'] = 'HTML to create a new domain';
 $wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['enable_custom_login_txt'] = 'Abweichenden Login-Namen erlauben';
 ?>
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index 9e8d224..52d50fc 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -12,6 +12,7 @@
 $wb["shelluser_prefix_error_regex"] = 'Char not allowed in shell user prefix.';
 $wb["webdavuser_prefix_error_regex"] = 'Char not allowed in webdav user prefix.';
 $wb["dblist_phpmyadmin_link_txt"] = 'Link to phpmyadmin in DB list';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
 $wb["mailboxlist_webmail_link_txt"] = 'Link to webmail in Mailbox list';
 $wb["webmail_url_txt"] = 'Webmail URL';
 $wb["mailmailinglist_link_txt"] = 'Link to mailing list in Mailing list list';
@@ -21,7 +22,7 @@
 $wb["use_domain_module_hint"] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They cannot free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
 $wb["new_domain_txt"] = 'HTML to create a new domain';
 $wb["webftp_url_txt"] = 'WebFTP URL';
-$wb['admin_mail_txt'] = 'Administrator\'s e-mail';
-$wb["monitor_key_txt"] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Administrator\'s name';
+$wb['admin_mail_txt'] = 'Administrator\'s e-mail';
+$wb["monitor_key_txt"] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Administrator\'s name';
 ?>
diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm
index 2496fdc..94dff00 100644
--- a/interface/web/admin/templates/server_config_mail_edit.htm
+++ b/interface/web/admin/templates/server_config_mail_edit.htm
@@ -68,9 +68,9 @@
         <input name="mailbox_size_limit" id="mailbox_size_limit" value="{tmpl_var name='mailbox_size_limit'}" size="10" maxlength="15" type="text" class="textInput formLengthLimit" />&nbsp;MB
 			</div>
       <div class="ctrlHolder">
-      	<label for="message_size_limit">{tmpl_var name='message_size_limit_txt'}</label>
+        <label for="message_size_limit">{tmpl_var name='message_size_limit_txt'}</label>
         <input name="message_size_limit" id="message_size_limit" value="{tmpl_var name='message_size_limit'}" size="10" maxlength="15" type="text" class="textInput formLengthLimit" />&nbsp;MB
-			</div>
+      </div>
     </fieldset>
 
     <input type="hidden" name="id" value="{tmpl_var name='id'}">
diff --git a/interface/web/admin/templates/system_config_mail_edit.htm b/interface/web/admin/templates/system_config_mail_edit.htm
index c728404..de50e95 100644
--- a/interface/web/admin/templates/system_config_mail_edit.htm
+++ b/interface/web/admin/templates/system_config_mail_edit.htm
@@ -6,6 +6,12 @@
   <div class="pnl_formsarea">
     <fieldset class="inlineLabels">
       <div class="ctrlHolder">
+        <p class="label">{tmpl_var name='enable_custom_login_txt'}</p>
+          <div class="multiField">
+            {tmpl_var name='enable_custom_login'}
+          </div>
+      </div>
+      <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='mailboxlist_webmail_link_txt'}</p>
 					<div class="multiField">
 						{tmpl_var name='mailboxlist_webmail_link'}
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 6cb792a..2cab87d 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -79,6 +79,21 @@
 			'width'		=> '30',
 			'maxlength'	=> '255'
 		),
+    'login' => array (
+      'datatype'  => 'VARCHAR',
+      'formtype'  => 'TEXT',
+      'validators'  => array (
+                    0 => array (  'type'  => 'UNIQUE',
+                            'errmsg'=> 'login_error_unique'),
+                    1 => array (  'type'  => 'REGEX',
+                            'regex' => '/^[a-z][\w\.\-_\+@]{1,63}$/',
+                            'errmsg'=> 'login_error_regex'),
+                  ),
+      'default' => '',
+      'value'   => '',
+      'width'   => '30',
+      'maxlength' => '255'
+    ),
 		'password' => array (
 			'datatype'	=> 'VARCHAR',
 			'formtype'	=> 'PASSWORD',
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index 7308396..defbba1 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -39,4 +39,8 @@
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['cc_txt'] = 'Send copy to';
 $wb['cc_error_isemail'] = 'The Send copy to field does not conatin a valid email address';
+$wb['login_error_unique'] = 'Login wird bereits verwendet.';
+$wb['login_error_regex'] = 'Zulässige Zeichen sind A-Z, a-z, 0-9, ., _ und -.';
+$wb['login_txt'] = 'Login (optional)';
+$wb['error_login_email_txt'] = 'Dieser Loginname ist nicht zulässig. Bitte verwenden Sie einen anderen Loginnamen oder die E-Mail-Adresse als Login.';
 ?>
diff --git a/interface/web/mail/lib/lang/de_mail_user_list.lng b/interface/web/mail/lib/lang/de_mail_user_list.lng
index 8d453d0..563f52b 100644
--- a/interface/web/mail/lib/lang/de_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/de_mail_user_list.lng
@@ -4,4 +4,5 @@
 $wb['autoresponder_txt'] = 'Autoresponder';
 $wb['add_new_record_txt'] = 'Neue Mailbox hinzufügen';
 $wb['name_txt'] = 'Realname';
+$wb['login_txt'] = 'Login';
 ?>
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index db58a62..938ae92 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -41,4 +41,8 @@
 $wb['cc_error_isemail'] = 'The -Send copy to- field does not conatin a valid email address';
 $wb['domain_txt'] = 'Domain';
 $wb['now_txt']='Now';
+$wb['login_error_unique'] = 'Login is already taken.';
+$wb['login_error_regex'] = 'Valid characters are A-Z, a-z, 0-9, ., _ and -.';
+$wb['login_txt'] = 'Login (optional)';
+$wb['error_login_email_txt'] = 'This login is not allowed. Please enter a different login or use the mail address as login.';
 ?>
diff --git a/interface/web/mail/lib/lang/en_mail_user_list.lng b/interface/web/mail/lib/lang/en_mail_user_list.lng
index 70497de..d261145 100644
--- a/interface/web/mail/lib/lang/en_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_user_list.lng
@@ -4,4 +4,5 @@
 $wb["autoresponder_txt"] = 'Autoresponder';
 $wb["add_new_record_txt"] = 'Add new Mailbox';
 $wb["name_txt"] = 'Realname';
+$wb["login_txt"] = 'Login';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/list/mail_user.list.php b/interface/web/mail/list/mail_user.list.php
index f3e8c42..5eb648d 100644
--- a/interface/web/mail/list/mail_user.list.php
+++ b/interface/web/mail/list/mail_user.list.php
@@ -47,14 +47,23 @@
 * Suchfelder
 *****************************************************/
 
-$liste["item"][] = array(	'field'		=> "email",
-							'datatype'	=> "VARCHAR",
-							'formtype'	=> "TEXT",
-							'op'		=> "like",
-							'prefix'	=> "%",
-							'suffix'	=> "%",
-							'width'		=> "",
-							'value'		=> "");
+$liste["item"][] = array( 'field'   => "email",
+              'datatype'  => "VARCHAR",
+              'formtype'  => "TEXT",
+              'op'    => "like",
+              'prefix'  => "%",
+              'suffix'  => "%",
+              'width'   => "",
+              'value'   => "");
+
+$liste["item"][] = array( 'field'   => "login",
+              'datatype'  => "VARCHAR",
+              'formtype'  => "TEXT",
+              'op'    => "like",
+              'prefix'  => "%",
+              'suffix'  => "%",
+              'width'   => "",
+              'value'   => "");
 
 $liste["item"][] = array(	'field'		=> "name",
 							'datatype'	=> "VARCHAR",
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index e9a3767..1da1b03 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -75,7 +75,7 @@
 		$app->tpl->setVar("email_local_part",$email_parts[0]);
 		
 		// Getting Domains of the user
-		$sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain';
+		$sql = "SELECT domain, server_id FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain';
 		$domains = $app->db->queryAllRecords($sql);
 		$domain_select = '';
 		if(is_array($domains)) {
@@ -112,6 +112,14 @@
 			$app->tpl->setVar("ar_active", 'checked="checked"');
 		} else {
 			$app->tpl->setVar("ar_active", '');
+		}
+		
+    $app->uses('getconf');
+    $mail_config = $app->getconf->get_global_config('mail');
+		if($mail_config["enable_custom_login"] == "y") {
+		    $app->tpl->setVar("enable_custom_login", 1);
+		} else {
+		    $app->tpl->setVar("enable_custom_login", 0);
 		}
 		
 		parent::onShowEnd();
@@ -165,6 +173,9 @@
 		} // end if user is not admin
 		
 
+    $app->uses('getconf');
+    $mail_config = $app->getconf->get_server_config($domain["server_id"],'mail');
+		
 		//* compose the email field
 		if(isset($_POST["email_local_part"]) && isset($_POST["email_domain"])) {
 			$this->dataRecord["email"] = strtolower($_POST["email_local_part"]."@".$_POST["email_domain"]);
@@ -179,8 +190,6 @@
 			if($this->dataRecord["quota"] != -1) $this->dataRecord["quota"] = $this->dataRecord["quota"] * 1024 * 1024;
 		
 			// setting Maildir, Homedir, UID and GID
-			$app->uses('getconf');
-			$mail_config = $app->getconf->get_server_config($domain["server_id"],'mail');
 			$maildir = str_replace("[domain]",$domain["domain"],$mail_config["maildir_path"]);
 			$maildir = str_replace("[localpart]",strtolower($_POST["email_local_part"]),$maildir);
 			$this->dataRecord["maildir"] = $maildir;
@@ -195,6 +204,13 @@
 			
 		}
 		
+    $sys_config = $app->getconf->get_global_config('mail');
+    if($sys_config["enable_custom_login"] == "y") {
+        if(!isset($_POST["login"])) $this->dataRecord["login"] = $this->dataRecord["email"];
+        elseif(strpos($_POST["login"], '@') !== false && $_POST["login"] != $this->dataRecord["email"]) $app->tform->errorMessage .= $app->tform->lng("error_login_email_txt")."<br>";
+		} else {
+        $this->dataRecord["login"] = $this->dataRecord["email"];
+		}
 		//* if autoresponder checkbox not selected, do not save dates
 		if (!isset($_POST['autoresponder']) && array_key_exists('autoresponder_start_date', $_POST)) {
 			$this->dataRecord['autoresponder_start_date'] = array_map(create_function('$item','return 0;'), $this->dataRecord['autoresponder_start_date']);
diff --git a/interface/web/mail/mail_user_list.php b/interface/web/mail/mail_user_list.php
index 1cc8554..df69948 100644
--- a/interface/web/mail/mail_user_list.php
+++ b/interface/web/mail/mail_user_list.php
@@ -31,6 +31,12 @@
 		} else {
 			$app->tpl->setVar('mailboxlist_webmail_link',0);
 		}
+
+    if($global_config["enable_custom_login"] == "y") {
+        $app->tpl->setVar("enable_custom_login", 1);
+    } else {
+        $app->tpl->setVar("enable_custom_login", 0);
+    }
 		
 		parent::onShow();
 	}
diff --git a/interface/web/mail/templates/mail_user_list.htm b/interface/web/mail/templates/mail_user_list.htm
index fe3838b..a0fe815 100644
--- a/interface/web/mail/templates/mail_user_list.htm
+++ b/interface/web/mail/templates/mail_user_list.htm
@@ -19,13 +19,15 @@
         <thead>
           <tr>
             <th class="tbl_col_email" scope="col"><tmpl_var name="email_txt"></th>
-			<th class="tbl_col_name" scope="col"><tmpl_var name="name_txt"></th>
+      <tmpl_if name="enable_custom_login"><th class="tbl_col_login" scope="col"><tmpl_var name="login_txt"></th></tmpl_if>
+      <th class="tbl_col_name" scope="col"><tmpl_var name="name_txt"></th>
             <th class="tbl_col_autoresponder" scope="col"><tmpl_var name="autoresponder_txt"></th>
             <th class="tbl_col_buttons" scope="col">&nbsp;</th>
           </tr>
           <tr>
             <td class="tbl_col_email"><input type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
 			<td class="tbl_col_name"><input type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+<tmpl_if name="enable_custom_login"><td class="tbl_col_login"><input type="text" name="search_login" value="{tmpl_var name='search_login'}" /></td></tmpl_if>
             <td class="tbl_col_autoresponder"><input type="text" name="search_autoresponder" value="{tmpl_var name='search_autoresponder'}" /></td>
             <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','mail/mail_user_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
           </tr>
@@ -34,6 +36,7 @@
           <tmpl_loop name="records">
           <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
             <td class="tbl_col_email"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="email"}</a></td>
+            <tmpl_if name="enable_custom_login"><td class="tbl_col_login"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="login"}</a></td></tmpl_if>
             <td class="tbl_col_name"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="name"}</a></td>
 			<td class="tbl_col_autoresponder"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="autoresponder"}</a></td>
             <td class="tbl_col_buttons">
@@ -48,7 +51,7 @@
 
         <tfoot>
           <tr>
-            <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+            <td class="tbl_footer tbl_paging" colspan="<tmpl_if name="enable_custom_login">5<tmpl_else>4</tmpl_if>"><tmpl_var name="paging"></td>
           </tr>
         </tfoot>
       </table>
diff --git a/interface/web/mail/templates/mail_user_mailbox_edit.htm b/interface/web/mail/templates/mail_user_mailbox_edit.htm
index 8edc59d..ff3d086 100644
--- a/interface/web/mail/templates/mail_user_mailbox_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailbox_edit.htm
@@ -17,6 +17,10 @@
           <label for="email_domain" class="blockLabel formLengthEmailDomain">{tmpl_var name='domain_txt'}<select name="email_domain" id="email_domain" class="selectInput">{tmpl_var name='email_domain'}</select></label>
         </div>
       </div>
+      <tmpl_if name="enable_custom_login"><div class="ctrlHolder">
+        <label for="login">{tmpl_var name='login_txt'}</label>
+        <input type="text" id="login" name="login" size="20" value="{tmpl_var name='login'}" class="textInput" /></label>
+      </div></tmpl_if>
       <div class="ctrlHolder">
       	<label for="password">{tmpl_var name='password_txt'}</label>
         <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />

--
Gitblit v1.9.1