From 31ed6c6232ab04ecf1c0f1c1e82c5886edb3cc9c Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Thu, 24 Nov 2005 22:49:48 +0000
Subject: [PATCH] Email catchall and forward

---
 interface/lib/classes/listform.inc.php        |   2 +-
 interface/sql/ispconfig3db.sql                |  23 ++--
 interface/web/sites/form/mail_alias.tform.php |   2 -
 .../sites/form/mail_domain_catchall.tform.php | 104 +++++++++++++++++
 .../web/sites/form/mail_forward.tform.php     | 108 ++++++++++++++++++
 .../web/sites/lib/lang/en_mail_alias.lng      |  10 ++
 .../web/sites/lib/lang/en_mail_alias_list.lng |   8 +-
 .../lib/lang/en_mail_domain_catchall.lng      |   8 ++
 .../lib/lang/en_mail_domain_catchall_list.lng |  13 +++
 .../sites/lib/lang/en_mail_domain_list.lng    |   2 +-
 .../web/sites/lib/lang/en_mail_forward.lng    |   7 ++
 .../sites/lib/lang/en_mail_forward_list.lng   |  13 +++
 interface/web/sites/lib/module.conf.php       |   2 +-
 interface/web/sites/list/mail_alias.list.php  |   9 ++
 .../sites/list/mail_domain_catchall.list.php  |  76 ++++++++++++
 .../web/sites/list/mail_forward.list.php      |  78 +++++++++++++
 interface/web/sites/mail_alias_list.php       |   3 +
 .../web/sites/mail_domain_catchall_del.php    |  54 +++++++++
 .../web/sites/mail_domain_catchall_edit.php   |  56 +++++++++
 .../web/sites/mail_domain_catchall_list.php   |  29 +++++
 interface/web/sites/mail_forward_del.php      |  54 +++++++++
 interface/web/sites/mail_forward_edit.php     |  99 ++++++++++++++++
 interface/web/sites/mail_forward_list.php     |  29 +++++
 .../web/sites/templates/mail_alias_edit.htm   |  29 +++++
 .../web/sites/templates/mail_alias_list.htm   |   6 +-
 .../templates/mail_domain_catchall_edit.htm   |  28 +++++
 .../templates/mail_domain_catchall_list.htm   |  30 +++++
 .../web/sites/templates/mail_forward_edit.htm |  25 ++++
 .../web/sites/templates/mail_forward_list.htm |  30 +++++
 interface/web/themes/default/style.css        |   2 +-
 30 files changed, 922 insertions(+), 17 deletions(-)
 create mode 100644 interface/web/sites/form/mail_domain_catchall.tform.php
 create mode 100644 interface/web/sites/form/mail_forward.tform.php
 create mode 100644 interface/web/sites/lib/lang/en_mail_alias.lng
 create mode 100644 interface/web/sites/lib/lang/en_mail_domain_catchall.lng
 create mode 100644 interface/web/sites/lib/lang/en_mail_domain_catchall_list.lng
 create mode 100644 interface/web/sites/lib/lang/en_mail_forward.lng
 create mode 100644 interface/web/sites/lib/lang/en_mail_forward_list.lng
 create mode 100644 interface/web/sites/list/mail_domain_catchall.list.php
 create mode 100644 interface/web/sites/list/mail_forward.list.php
 create mode 100644 interface/web/sites/mail_domain_catchall_del.php
 create mode 100644 interface/web/sites/mail_domain_catchall_edit.php
 create mode 100644 interface/web/sites/mail_domain_catchall_list.php
 create mode 100644 interface/web/sites/mail_forward_del.php
 create mode 100644 interface/web/sites/mail_forward_edit.php
 create mode 100644 interface/web/sites/mail_forward_list.php
 create mode 100644 interface/web/sites/templates/mail_alias_edit.htm
 create mode 100644 interface/web/sites/templates/mail_domain_catchall_edit.htm
 create mode 100644 interface/web/sites/templates/mail_domain_catchall_list.htm
 create mode 100644 interface/web/sites/templates/mail_forward_edit.htm
 create mode 100644 interface/web/sites/templates/mail_forward_list.htm

diff --git a/interface/lib/classes/listform.inc.php b/interface/lib/classes/listform.inc.php
index eadc20373c..a6dc1fa119 100644
--- a/interface/lib/classes/listform.inc.php
+++ b/interface/lib/classes/listform.inc.php
@@ -77,7 +77,7 @@ class listform {
 				if(is_array($i['value'])) {
 					$out = '<option value=""></option>';
 					foreach($i['value'] as $k => $v) {
-						$selected = ($k == $_SESSION["search"][$list_name][$search_prefix.$field])?' SELECTED':'';
+						$selected = ($k == $_SESSION["search"][$list_name][$search_prefix.$field] && $_SESSION["search"][$list_name][$search_prefix.$field] != '')?' SELECTED':'';
 						$out .= "<option value='$k'$selected>$v</option>\r\n";
 					}
 				}
diff --git a/interface/sql/ispconfig3db.sql b/interface/sql/ispconfig3db.sql
index 08a880d540..ddfacecdb8 100644
--- a/interface/sql/ispconfig3db.sql
+++ b/interface/sql/ispconfig3db.sql
@@ -3,7 +3,7 @@
 # http://www.phpmyadmin.net/ (download page)
 #
 # Host: localhost
-# Erstellungszeit: 24. November 2005 um 00:31
+# Erstellungszeit: 24. November 2005 um 23:49
 # Server Version: 4.0.23
 # PHP-Version: 5.0.3
 # Datenbank: `ispconfig3`
@@ -104,11 +104,16 @@ INSERT INTO mail_domain VALUES (2, 1, 0, 'riud', 'riud', '', 1, 'test2.de', 'ali
 
 DROP TABLE IF EXISTS mail_domain_catchall;
 CREATE TABLE mail_domain_catchall (
-  virtual_default_id int(11) NOT NULL auto_increment,
+  domain_catchall_id int(11) NOT NULL auto_increment,
+  sys_userid int(11) NOT NULL default '0',
+  sys_groupid int(11) NOT NULL default '0',
+  sys_perm_user varchar(5) NOT NULL default '',
+  sys_perm_group varchar(5) NOT NULL default '',
+  sys_perm_other varchar(5) NOT NULL default '',
   server_id int(11) NOT NULL default '0',
   domain varchar(255) NOT NULL default '',
-  dest varchar(255) NOT NULL default '',
-  PRIMARY KEY  (virtual_default_id),
+  destination varchar(255) NOT NULL default '',
+  PRIMARY KEY  (domain_catchall_id),
   KEY server_id (server_id,domain)
 ) TYPE=MyISAM;
 
@@ -168,7 +173,7 @@ CREATE TABLE mail_mailman_domain (
 
 DROP TABLE IF EXISTS mail_redirect;
 CREATE TABLE mail_redirect (
-  email_id int(11) NOT NULL auto_increment,
+  redirect_id int(11) NOT NULL auto_increment,
   sys_userid int(11) NOT NULL default '0',
   sys_groupid int(11) NOT NULL default '0',
   sys_perm_user varchar(5) NOT NULL default '',
@@ -178,8 +183,8 @@ CREATE TABLE mail_redirect (
   email varchar(255) NOT NULL default '',
   destination varchar(255) NOT NULL default '',
   type enum('alias','forward') NOT NULL default 'alias',
-  enabled enum('yes','no') NOT NULL default 'yes',
-  PRIMARY KEY  (email_id),
+  active enum('0','1') NOT NULL default '1',
+  PRIMARY KEY  (redirect_id),
   KEY server_id (server_id,email)
 ) TYPE=MyISAM;
 
@@ -187,6 +192,8 @@ CREATE TABLE mail_redirect (
 # Daten für Tabelle `mail_redirect`
 #
 
+INSERT INTO mail_redirect VALUES (1, 1, 0, 'riud', 'riud', '', 1, 'tom@test.de', 'till@test.de', 'alias', '1');
+INSERT INTO mail_redirect VALUES (2, 1, 0, 'riud', 'riud', '', 1, 'hallo@test.de', 't.brehm@ensign.de', 'forward', '1');
 # --------------------------------------------------------
 
 #
@@ -332,6 +339,8 @@ INSERT INTO sys_datalog VALUES (25, 'mail_box', 'mailbox_id:1', 'u', 1132787761,
 INSERT INTO sys_datalog VALUES (26, 'mail_box', 'mailbox_id:0', 'i', 1132787775, 'admin', 'a:3:{s:9:"server_id";a:2:{s:3:"old";N;s:3:"new";i:1;}s:5:"email";a:2:{s:3:"old";N;s:3:"new";s:12:"test@test.de";}s:6:"active";a:2:{s:3:"old";N;s:3:"new";i:1;}}');
 INSERT INTO sys_datalog VALUES (27, 'mail_box', 'mailbox_id:1', 'u', 1132788121, 'admin', 'a:1:{s:8:"cryptpwd";a:2:{s:3:"old";s:34:"$1$ye3.TQ1.$v/RvqbuU.Gh7UrLlA6HqX/";s:3:"new";s:0:"";}}');
 INSERT INTO sys_datalog VALUES (28, 'mail_box', 'mailbox_id:1', 'u', 1132788482, 'admin', 'a:1:{s:8:"cryptpwd";a:2:{s:3:"old";s:34:"$1$ye3.TQ1.$v/RvqbuU.Gh7UrLlA6HqX/";s:3:"new";s:0:"";}}');
+INSERT INTO sys_datalog VALUES (29, 'mail_redirect', 'redirect_id:0', 'i', 1132859789, 'admin', 'a:5:{s:9:"server_id";a:2:{s:3:"old";N;s:3:"new";i:1;}s:5:"email";a:2:{s:3:"old";N;s:3:"new";s:11:"tom@test.de";}s:11:"destination";a:2:{s:3:"old";N;s:3:"new";s:12:"till@test.de";}s:4:"type";a:2:{s:3:"old";N;s:3:"new";s:5:"alias";}s:6:"active";a:2:{s:3:"old";N;s:3:"new";i:1;}}');
+INSERT INTO sys_datalog VALUES (30, 'mail_redirect', 'redirect_id:0', 'i', 1132868928, 'admin', 'a:5:{s:9:"server_id";a:2:{s:3:"old";N;s:3:"new";i:1;}s:5:"email";a:2:{s:3:"old";N;s:3:"new";s:13:"hallo@test.de";}s:11:"destination";a:2:{s:3:"old";N;s:3:"new";s:17:"t.brehm@ensign.de";}s:4:"type";a:2:{s:3:"old";N;s:3:"new";s:7:"forward";}s:6:"active";a:2:{s:3:"old";N;s:3:"new";i:1;}}');
 # --------------------------------------------------------
 
 #
diff --git a/interface/web/sites/form/mail_alias.tform.php b/interface/web/sites/form/mail_alias.tform.php
index a4a4f3dc94..4944a934bc 100644
--- a/interface/web/sites/form/mail_alias.tform.php
+++ b/interface/web/sites/form/mail_alias.tform.php
@@ -71,8 +71,6 @@ $form["tabs"]['alias'] = array (
 			'formtype'	=> 'TEXT',
 			'validators'	=> array ( 	0 => array (	'type'	=> 'ISEMAIL',
 														'errmsg'=> 'email_error_isemail'),
-										1 => array (	'type'	=> 'UNIQUE',
-														'errmsg'=> 'email_error_unique'),
 									),
 			'default'	=> '',
 			'value'		=> '',
diff --git a/interface/web/sites/form/mail_domain_catchall.tform.php b/interface/web/sites/form/mail_domain_catchall.tform.php
new file mode 100644
index 0000000000..30c4d2f0f1
--- /dev/null
+++ b/interface/web/sites/form/mail_domain_catchall.tform.php
@@ -0,0 +1,104 @@
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"] 			= "Email Catchall";
+$form["description"] 	= "";
+$form["name"] 			= "mail_domain_catchall";
+$form["action"]			= "mail_domain_catchall_edit.php";
+$form["db_table"]		= "mail_domain_catchall";
+$form["db_table_idx"]	= "domain_catchall_id";
+$form["db_history"]		= "yes";
+$form["tab_default"]	= "catchall";
+$form["list_default"]	= "mail_domain_catchall_list.php";
+$form["auth"]			= 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['catchall'] = array (
+	'title' 	=> "Domain Catchall",
+	'width' 	=> 150,
+	'template' 	=> "templates/mail_domain_catchall_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'server_id' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'VARCHAR',
+			'default'	=> '',
+			'value'		=> ''
+		),
+		'domain' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'UNIQUE',
+														'errmsg'=> 'domain_error_unique'),
+									),
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => "SELECT domain FROM mail_domain WHERE type = 'local' ORDER BY domain",
+										'keyfield'=> 'domain',
+										'valuefield'=> 'domain'
+									 ),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'destination' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'active' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> '1',
+			'value'		=> '1'
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/form/mail_forward.tform.php b/interface/web/sites/form/mail_forward.tform.php
new file mode 100644
index 0000000000..7d8fd2f3af
--- /dev/null
+++ b/interface/web/sites/form/mail_forward.tform.php
@@ -0,0 +1,108 @@
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"] 			= "Email Forward";
+$form["description"] 	= "";
+$form["name"] 			= "mail_forward";
+$form["action"]			= "mail_forward_edit.php";
+$form["db_table"]		= "mail_redirect";
+$form["db_table_idx"]	= "redirect_id";
+$form["db_history"]		= "yes";
+$form["tab_default"]	= "forward";
+$form["list_default"]	= "mail_forward_list.php";
+$form["auth"]			= 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['forward'] = array (
+	'title' 	=> "Email forward",
+	'width' 	=> 100,
+	'template' 	=> "templates/mail_forward_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'server_id' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'email' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISEMAIL',
+														'errmsg'=> 'email_error_isemail'),
+									),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'destination' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'type' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'default'	=> '',
+			'value'		=> array('forward'=>'Forward','alias' => 'Alias')
+		),
+		'active' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> '1',
+			'value'		=> '1'
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_mail_alias.lng b/interface/web/sites/lib/lang/en_mail_alias.lng
new file mode 100644
index 0000000000..28c7dda9b2
--- /dev/null
+++ b/interface/web/sites/lib/lang/en_mail_alias.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["email_txt"] = 'Email';
+$wb["destination_txt"] = 'Destination';
+$wb["active_txt"] = 'Active';
+$wb["btn_save_txt"] = 'Save';
+$wb["btn_cancel_txt"] = 'Cancel';
+$wb["email_error_isemail"] = 'Emailaddress is empty.';
+$wb["email_error_unique"] = 'Duplicate Emailaddress.';
+$wb["no_domain_perm"] = "You have no permission for this domain.";
+?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_mail_alias_list.lng b/interface/web/sites/lib/lang/en_mail_alias_list.lng
index a17055a2d8..1cdb039e17 100644
--- a/interface/web/sites/lib/lang/en_mail_alias_list.lng
+++ b/interface/web/sites/lib/lang/en_mail_alias_list.lng
@@ -1,11 +1,13 @@
 <?php
-$wb["list_head_txt"] = 'mail_alias';
-$wb["email_txt"] = 'email';
-$wb["destination_txt"] = 'destination';
+$wb["list_head_txt"] = 'Email Alias';
+$wb["email_txt"] = 'Email';
+$wb["destination_txt"] = 'Destination';
 $wb["page_txt"] = 'Page';
 $wb["page_of_txt"] = 'of';
 $wb["page_next_txt"] = 'Next';
 $wb["page_back_txt"] = 'Back';
 $wb["delete_txt"] = 'Delete';
 $wb["filter_txt"] = 'Filter';
+$wb["add_new_record_txt"] = 'Add new Email alias';
+$wb["active_txt"] = 'Active';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_mail_domain_catchall.lng b/interface/web/sites/lib/lang/en_mail_domain_catchall.lng
new file mode 100644
index 0000000000..e14f136ac8
--- /dev/null
+++ b/interface/web/sites/lib/lang/en_mail_domain_catchall.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["server_id_txt"] = 'server_id';
+$wb["domain_txt"] = 'domain';
+$wb["destination_txt"] = 'destination';
+$wb["active_txt"] = 'active';
+$wb["btn_save_txt"] = 'Save';
+$wb["btn_cancel_txt"] = 'Cancel';
+?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_mail_domain_catchall_list.lng b/interface/web/sites/lib/lang/en_mail_domain_catchall_list.lng
new file mode 100644
index 0000000000..1144404e4c
--- /dev/null
+++ b/interface/web/sites/lib/lang/en_mail_domain_catchall_list.lng
@@ -0,0 +1,13 @@
+<?php
+$wb["list_head_txt"] = 'Email Catchall';
+$wb["server_id_txt"] = 'Server';
+$wb["domain_txt"] = 'Domain';
+$wb["destination_txt"] = 'Destination email address';
+$wb["page_txt"] = 'Page';
+$wb["page_of_txt"] = 'of';
+$wb["page_next_txt"] = 'Next';
+$wb["page_back_txt"] = 'Back';
+$wb["delete_txt"] = 'Delete';
+$wb["filter_txt"] = 'Filter';
+$wb["add_new_record_txt"] = 'Add new Catchall';
+?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_mail_domain_list.lng b/interface/web/sites/lib/lang/en_mail_domain_list.lng
index 990fa9d0da..2532583330 100644
--- a/interface/web/sites/lib/lang/en_mail_domain_list.lng
+++ b/interface/web/sites/lib/lang/en_mail_domain_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb["list_head_txt"] = 'Email Domains';
+$wb["list_head_txt"] = 'Email Domain';
 $wb["server_id_txt"] = 'Server';
 $wb["domain_txt"] = 'Domain';
 $wb["page_txt"] = 'Page';
diff --git a/interface/web/sites/lib/lang/en_mail_forward.lng b/interface/web/sites/lib/lang/en_mail_forward.lng
new file mode 100644
index 0000000000..4f927b3591
--- /dev/null
+++ b/interface/web/sites/lib/lang/en_mail_forward.lng
@@ -0,0 +1,7 @@
+<?php
+$wb["email_txt"] = 'Email';
+$wb["destination_txt"] = 'Destination Email';
+$wb["active_txt"] = 'Active';
+$wb["btn_save_txt"] = 'Save';
+$wb["btn_cancel_txt"] = 'Cancel';
+?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_mail_forward_list.lng b/interface/web/sites/lib/lang/en_mail_forward_list.lng
new file mode 100644
index 0000000000..829f079989
--- /dev/null
+++ b/interface/web/sites/lib/lang/en_mail_forward_list.lng
@@ -0,0 +1,13 @@
+<?php
+$wb["list_head_txt"] = 'Mail Forward';
+$wb["active_txt"] = 'Active';
+$wb["email_txt"] = 'Email';
+$wb["destination_txt"] = 'Destination';
+$wb["page_txt"] = 'Page';
+$wb["page_of_txt"] = 'of';
+$wb["page_next_txt"] = 'Next';
+$wb["page_back_txt"] = 'Back';
+$wb["delete_txt"] = 'Delete';
+$wb["filter_txt"] = 'Filter';
+$wb["add_new_record_txt"] = 'Add new Email forward';
+?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/module.conf.php b/interface/web/sites/lib/module.conf.php
index a36f049d3a..ff465d54ab 100644
--- a/interface/web/sites/lib/module.conf.php
+++ b/interface/web/sites/lib/module.conf.php
@@ -54,7 +54,7 @@ $module = array (
         array (
           'title' => 'Email Catchall',
           'target' => 'content',
-          'link' => 'sites/mail_catchall_list.php',
+          'link' => 'sites/mail_domain_catchall_list.php',
         ),
       ),
     ),
diff --git a/interface/web/sites/list/mail_alias.list.php b/interface/web/sites/list/mail_alias.list.php
index 4f32455f30..a7d1838720 100644
--- a/interface/web/sites/list/mail_alias.list.php
+++ b/interface/web/sites/list/mail_alias.list.php
@@ -47,6 +47,15 @@ $liste["auth"]				= "yes";
 * Suchfelder
 *****************************************************/
 
+$liste["item"][] = array(	'field'		=> "active",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "SELECT",
+							'op'		=> "=",
+							'prefix'	=> "",
+							'suffix'	=> "",
+							'width'		=> "",
+							'value'		=> array('1' => "Yes",'0' => "No"));
+
 $liste["item"][] = array(	'field'		=> "email",
 							'datatype'	=> "VARCHAR",
 							'formtype'	=> "TEXT",
diff --git a/interface/web/sites/list/mail_domain_catchall.list.php b/interface/web/sites/list/mail_domain_catchall.list.php
new file mode 100644
index 0000000000..131343e36b
--- /dev/null
+++ b/interface/web/sites/list/mail_domain_catchall.list.php
@@ -0,0 +1,76 @@
+<?php
+
+/*
+	Datatypes:
+	- INTEGER
+	- DOUBLE
+	- CURRENCY
+	- VARCHAR
+	- TEXT
+	- DATE
+*/
+
+
+
+// Name of the list
+$liste["name"] 				= "mail_domain_catchall";
+
+// Database table
+$liste["table"] 			= "mail_domain_catchall";
+
+// Index index field of the database table
+$liste["table_idx"]			= "domain_catchall_id";
+
+// Search Field Prefix
+$liste["search_prefix"] 	= "search_";
+
+// Records per page
+$liste["records_per_page"] 	= 15;
+
+// Script File of the list
+$liste["file"]				= "mail_domain_catchall_list.php";
+
+// Script file of the edit form
+$liste["edit_file"]			= "mail_domain_catchall_edit.php";
+
+// Script File of the delete script
+$liste["delete_file"]		= "mail_domain_catchall_del.php";
+
+// Paging Template
+$liste["paging_tpl"]		= "templates/paging.tpl.htm";
+
+// Enable auth
+$liste["auth"]				= "yes";
+
+
+/*****************************************************
+* Suchfelder
+*****************************************************/
+
+$liste["item"][] = array(	'field'		=> "server_id",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "TEXT",
+							'op'		=> "like",
+							'prefix'	=> "%",
+							'suffix'	=> "%",
+							'width'		=> "",
+							'value'		=> "");
+
+$liste["item"][] = array(	'field'		=> "domain",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "TEXT",
+							'op'		=> "like",
+							'prefix'	=> "%",
+							'suffix'	=> "%",
+							'width'		=> "",
+							'value'		=> "");
+
+$liste["item"][] = array(	'field'		=> "destination",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "TEXT",
+							'op'		=> "like",
+							'prefix'	=> "%",
+							'suffix'	=> "%",
+							'width'		=> "",
+							'value'		=> "");
+?>
\ No newline at end of file
diff --git a/interface/web/sites/list/mail_forward.list.php b/interface/web/sites/list/mail_forward.list.php
new file mode 100644
index 0000000000..2b1f027270
--- /dev/null
+++ b/interface/web/sites/list/mail_forward.list.php
@@ -0,0 +1,78 @@
+<?php
+
+/*
+	Datatypes:
+	- INTEGER
+	- DOUBLE
+	- CURRENCY
+	- VARCHAR
+	- TEXT
+	- DATE
+*/
+
+
+
+// Name of the list
+$liste["name"] 				= "mail_forward";
+
+// Database table
+$liste["table"] 			= "mail_redirect";
+
+// Index index field of the database table
+$liste["table_idx"]			= "redirect_id";
+
+// Search Field Prefix
+$liste["search_prefix"] 	= "search_";
+
+// Records per page
+$liste["records_per_page"] 	= 15;
+
+// Script File of the list
+$liste["file"]				= "mail_forward_list.php";
+
+// Script file of the edit form
+$liste["edit_file"]			= "mail_forward_edit.php";
+
+// Script File of the delete script
+$liste["delete_file"]		= "mail_forward_del.php";
+
+// Paging Template
+$liste["paging_tpl"]		= "templates/paging.tpl.htm";
+
+// Enable auth
+$liste["auth"]				= "yes";
+
+
+/*****************************************************
+* Suchfelder
+*****************************************************/
+
+$liste["item"][] = array(	'field'		=> "active",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "SELECT",
+							'op'		=> "=",
+							'prefix'	=> "",
+							'suffix'	=> "",
+							'width'		=> "",
+							'value'		=> array('1' => "Yes",'0' => "No"));
+
+$liste["item"][] = array(	'field'		=> "email",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "TEXT",
+							'op'		=> "like",
+							'prefix'	=> "%",
+							'suffix'	=> "%",
+							'width'		=> "",
+							'value'		=> "");
+
+$liste["item"][] = array(	'field'		=> "destination",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "TEXT",
+							'op'		=> "like",
+							'prefix'	=> "%",
+							'suffix'	=> "%",
+							'width'		=> "",
+							'value'		=> "");
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/mail_alias_list.php b/interface/web/sites/mail_alias_list.php
index d3646fc01c..d1fce3b46e 100644
--- a/interface/web/sites/mail_alias_list.php
+++ b/interface/web/sites/mail_alias_list.php
@@ -20,6 +20,9 @@ if(!stristr($_SESSION["s"]["user"]["modules"],$_SESSION["s"]["module"]["name"]))
 
 $app->uses('listform_actions');
 
+// Limit the results to alias domains
+$app->listform_actions->SQLExtWhere = "type = 'alias'";
+
 $app->listform_actions->onLoad();
 
 
diff --git a/interface/web/sites/mail_domain_catchall_del.php b/interface/web/sites/mail_domain_catchall_del.php
new file mode 100644
index 0000000000..83024d8cbc
--- /dev/null
+++ b/interface/web/sites/mail_domain_catchall_del.php
@@ -0,0 +1,54 @@
+<?php
+
+/*
+Copyright (c) 2005, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/mail_domain_catchall.list.php";
+$tform_def_file = "form/mail_domain_catchall.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+// Checke Berechtigungen für Modul
+if(!stristr($_SESSION["s"]["user"]["modules"],$_SESSION["s"]["module"]["name"])) {
+	header("Location: ../index.php");
+	exit;
+}
+
+$app->uses("tform_actions");
+$app->tform_actions->onDelete();
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/mail_domain_catchall_edit.php b/interface/web/sites/mail_domain_catchall_edit.php
new file mode 100644
index 0000000000..83e7e7db1f
--- /dev/null
+++ b/interface/web/sites/mail_domain_catchall_edit.php
@@ -0,0 +1,56 @@
+<?php
+/*
+Copyright (c) 2005, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$tform_def_file = "form/mail_domain_catchall.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+// Checking module permissions
+if(!stristr($_SESSION["s"]["user"]["modules"],$_SESSION["s"]["module"]["name"])) {
+	header("Location: ../index.php");
+	exit;
+}
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions');
+
+// let tform_actions handle the page
+$app->tform_actions->onLoad();
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/mail_domain_catchall_list.php b/interface/web/sites/mail_domain_catchall_list.php
new file mode 100644
index 0000000000..9b52fb5726
--- /dev/null
+++ b/interface/web/sites/mail_domain_catchall_list.php
@@ -0,0 +1,29 @@
+<?php
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/mail_domain_catchall.list.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+// Checking module permissions
+if(!stristr($_SESSION["s"]["user"]["modules"],$_SESSION["s"]["module"]["name"])) {
+	header("Location: ../index.php");
+	exit;
+}
+
+$app->uses('listform_actions');
+
+// Limit the results to alias domains
+$app->listform_actions->SQLExtWhere = "type = 'local'";
+
+$app->listform_actions->onLoad();
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/mail_forward_del.php b/interface/web/sites/mail_forward_del.php
new file mode 100644
index 0000000000..e9b179b43b
--- /dev/null
+++ b/interface/web/sites/mail_forward_del.php
@@ -0,0 +1,54 @@
+<?php
+
+/*
+Copyright (c) 2005, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/mail_forward.list.php";
+$tform_def_file = "form/mail_forward.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+// Checke Berechtigungen für Modul
+if(!stristr($_SESSION["s"]["user"]["modules"],$_SESSION["s"]["module"]["name"])) {
+	header("Location: ../index.php");
+	exit;
+}
+
+$app->uses("tform_actions");
+$app->tform_actions->onDelete();
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/mail_forward_edit.php b/interface/web/sites/mail_forward_edit.php
new file mode 100644
index 0000000000..25e12f0e17
--- /dev/null
+++ b/interface/web/sites/mail_forward_edit.php
@@ -0,0 +1,99 @@
+<?php
+/*
+Copyright (c) 2005, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$tform_def_file = "form/mail_forward.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+// Checking module permissions
+if(!stristr($_SESSION["s"]["user"]["modules"],$_SESSION["s"]["module"]["name"])) {
+	header("Location: ../index.php");
+	exit;
+}
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+	
+	function onShowEnd() {
+		global $app, $conf;
+		
+		$email = $this->dataRecord["email"];
+		$email_parts = explode("@",$email);
+		$app->tpl->setVar("email_local_part",$email_parts[0]);
+		
+		// Getting Domains of the user
+		$sql = "SELECT domain FROM mail_domain WHERE type = 'local' AND ".$app->tform->getAuthSQL('r');
+		$domains = $app->db->queryAllRecords($sql);
+		$domain_select = '';
+		foreach( $domains as $domain) {
+			$selected = ($domain["domain"] == $email_parts[1])?'SELECTED':'';
+			$domain_select .= "<option value='$domain[domain]' $selected>$domain[domain]</option>\r\n";
+		}
+		$app->tpl->setVar("email_domain",$domain_select);
+		
+		parent::onShowEnd();
+	}
+	
+	function onSubmit() {
+		global $app, $conf;
+		
+		// Check if Domain belongs to user
+		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r'));
+		if($domain["domain"] != $_POST["email_domain"]) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"];
+		 		
+		// compose the email field
+		$this->dataRecord["email"] = $_POST["email_local_part"]."@".$_POST["email_domain"];
+		// Set the server id of the mailbox = server ID of mail domain.
+		$this->dataRecord["server_id"] = $domain["server_id"];
+		
+		unset($this->dataRecord["email_local_part"]);
+		unset($this->dataRecord["email_domain"]);
+		
+		parent::onSubmit();
+	}
+	
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/mail_forward_list.php b/interface/web/sites/mail_forward_list.php
new file mode 100644
index 0000000000..77330c44bc
--- /dev/null
+++ b/interface/web/sites/mail_forward_list.php
@@ -0,0 +1,29 @@
+<?php
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/mail_forward.list.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+// Checking module permissions
+if(!stristr($_SESSION["s"]["user"]["modules"],$_SESSION["s"]["module"]["name"])) {
+	header("Location: ../index.php");
+	exit;
+}
+
+$app->uses('listform_actions');
+
+// Limit the results to alias domains
+$app->listform_actions->SQLExtWhere = "type = 'forward'";
+
+$app->listform_actions->onLoad();
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/templates/mail_alias_edit.htm b/interface/web/sites/templates/mail_alias_edit.htm
new file mode 100644
index 0000000000..289519e70f
--- /dev/null
+++ b/interface/web/sites/templates/mail_alias_edit.htm
@@ -0,0 +1,29 @@
+<table width="500" border="0" cellspacing="0" cellpadding="2">
+  <tr>
+    <td width="126" class="frmText11">{tmpl_var name='email_txt'}:</td>
+    <td width="366" class="frmText11"><input name="email_local_part" type="text" class="text" value="{tmpl_var name='email_local_part'}" size="10" maxlength="50"> @ <select name="email_domain">{tmpl_var name="email_domain"}</select></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11">{tmpl_var name='destination_txt'}:</td>
+    <td width="366" class="frmText11">
+		<select name="destination" class="text">
+			{tmpl_var name='destination'}
+		</select>
+	</td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11">{tmpl_var name='active_txt'}:</td>
+    <td width="366" class="frmText11">{tmpl_var name='active'}</td>
+  </tr>  <tr>
+    <td class="frmText11">&nbsp;</td>
+    <td class="frmText11">&nbsp;</td>
+  </tr>
+  <tr>
+    <td>&nbsp;</td>
+    <td><input name="btn_save" type="submit" class="button" value="{tmpl_var name='btn_save_txt'}">
+      <input name="btn_cancel" type="button" class="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="self.location.href='mail_alias_list.php';">
+    </td>
+  </tr>
+</table>
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+<input type="hidden" name="type" value="alias">
\ No newline at end of file
diff --git a/interface/web/sites/templates/mail_alias_list.htm b/interface/web/sites/templates/mail_alias_list.htm
index deefcc4444..ba98918bdc 100644
--- a/interface/web/sites/templates/mail_alias_list.htm
+++ b/interface/web/sites/templates/mail_alias_list.htm
@@ -1,18 +1,22 @@
 <form name="myform" action="mail_alias_list.php" method="POST">
 <div class="frmTextHead"><tmpl_var name="list_head_txt"></div><br />
+<input type="button" value="{tmpl_var name="add_new_record_txt"}" onClick="location.href='mail_alias_edit.php'" /><br /><br />
 <table width="100%" border="0" cellspacing="0" cellpadding="4">
   <tr>
+    <td class="tblHead"><tmpl_var name="active_txt"></td>
     <td class="tblHead"><tmpl_var name="email_txt"></td>
     <td class="tblHead"><tmpl_var name="destination_txt"></td>
     <td class="tblHead">&nbsp;</td>
   </tr>
   <tr>
+    <td class="frmText11"><select name="search_active" onChange="document.myform.submit();">{tmpl_var name='search_active'}</select></td>
     <td class="frmText11"><input type="text" name="search_email" value="{tmpl_var name='search_email'}" class="text" /></td>
     <td class="frmText11"><input type="text" name="search_destination" value="{tmpl_var name='search_destination'}" class="text" /></td>
     <td class="frmText11" align="right"><input name="Filter" type="submit" id="Filter" value="{tmpl_var name="filter_txt"}"></td>
   </tr>
   <tmpl_loop name="records">
   <tr bgcolor="{tmpl_var name="bgcolor"}">
+    <td class="frmText11"><a href="mail_alias_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="active"}</a></td>
     <td class="frmText11"><a href="mail_alias_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="email"}</a></td>
     <td class="frmText11"><a href="mail_alias_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="destination"}</a></td>
     <td class="frmText11" align="right">[<a href="javascript: del_record('mail_alias_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}');" class="frmText11">{tmpl_var name='delete_txt'}</a>]</td>
@@ -20,7 +24,7 @@
   </tmpl_loop>
 
   <tr>
-  	<td colspan="3" height="40" align="center" class="tblFooter"><tmpl_var name="paging"></td>
+  	<td colspan="4" height="40" align="center" class="tblFooter"><tmpl_var name="paging"></td>
   </tr>
 </table>
 </form>
\ No newline at end of file
diff --git a/interface/web/sites/templates/mail_domain_catchall_edit.htm b/interface/web/sites/templates/mail_domain_catchall_edit.htm
new file mode 100644
index 0000000000..892da9c31c
--- /dev/null
+++ b/interface/web/sites/templates/mail_domain_catchall_edit.htm
@@ -0,0 +1,28 @@
+<table width="500" border="0" cellspacing="0" cellpadding="2">
+  <tr>
+    <td width="126" class="frmText11">{tmpl_var name='domain_txt'}:</td>
+    <td width="366" class="frmText11">
+		<select name="domain" class="text">
+			{tmpl_var name='domain'}
+		</select>
+	</td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11">{tmpl_var name='destination_txt'}:</td>
+    <td width="366" class="frmText11"><input name="destination" type="text" class="text" value="{tmpl_var name='destination'}" size="30" maxlength="255"></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11">{tmpl_var name='active_txt'}:</td>
+    <td width="366" class="frmText11">{tmpl_var name='active'}</td>
+  </tr>  <tr>
+    <td class="frmText11">&nbsp;</td>
+    <td class="frmText11">&nbsp;</td>
+  </tr>
+  <tr>
+    <td>&nbsp;</td>
+    <td><input name="btn_save" type="submit" class="button" value="{tmpl_var name='btn_save_txt'}">
+      <input name="btn_cancel" type="button" class="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="self.location.href='mail_domain_catchall_list.php';">
+    </td>
+  </tr>
+</table>
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
\ No newline at end of file
diff --git a/interface/web/sites/templates/mail_domain_catchall_list.htm b/interface/web/sites/templates/mail_domain_catchall_list.htm
new file mode 100644
index 0000000000..c2b5f6d41b
--- /dev/null
+++ b/interface/web/sites/templates/mail_domain_catchall_list.htm
@@ -0,0 +1,30 @@
+<form name="myform" action="mail_domain_catchall_list.php" method="POST">
+<div class="frmTextHead"><tmpl_var name="list_head_txt"></div><br />
+<input type="button" value="{tmpl_var name="add_new_record_txt"}" onClick="location.href='mail_domain_catchall_edit.php'" /><br /><br />
+<table width="100%" border="0" cellspacing="0" cellpadding="4">
+  <tr>
+    <td class="tblHead"><tmpl_var name="server_id_txt"></td>
+    <td class="tblHead"><tmpl_var name="domain_txt"></td>
+    <td class="tblHead"><tmpl_var name="destination_txt"></td>
+    <td class="tblHead">&nbsp;</td>
+  </tr>
+  <tr>
+    <td class="frmText11"><input type="text" name="search_server_id" value="{tmpl_var name='search_server_id'}" class="text" /></td>
+    <td class="frmText11"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" class="text" /></td>
+    <td class="frmText11"><input type="text" name="search_destination" value="{tmpl_var name='search_destination'}" class="text" /></td>
+    <td class="frmText11" align="right"><input name="Filter" type="submit" id="Filter" value="{tmpl_var name="filter_txt"}"></td>
+  </tr>
+  <tmpl_loop name="records">
+  <tr bgcolor="{tmpl_var name="bgcolor"}">
+    <td class="frmText11"><a href="mail_domain_catchall_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="server_id"}</a></td>
+    <td class="frmText11"><a href="mail_domain_catchall_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="domain"}</a></td>
+    <td class="frmText11"><a href="mail_domain_catchall_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="destination"}</a></td>
+    <td class="frmText11" align="right">[<a href="javascript: del_record('mail_domain_catchall_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}');" class="frmText11">{tmpl_var name='delete_txt'}</a>]</td>
+  </tr>
+  </tmpl_loop>
+
+  <tr>
+  	<td colspan="4" height="40" align="center" class="tblFooter"><tmpl_var name="paging"></td>
+  </tr>
+</table>
+</form>
\ No newline at end of file
diff --git a/interface/web/sites/templates/mail_forward_edit.htm b/interface/web/sites/templates/mail_forward_edit.htm
new file mode 100644
index 0000000000..798b08bcc9
--- /dev/null
+++ b/interface/web/sites/templates/mail_forward_edit.htm
@@ -0,0 +1,25 @@
+<table width="500" border="0" cellspacing="0" cellpadding="2">
+  <tr>
+    <td width="126" class="frmText11">{tmpl_var name='email_txt'}:</td>
+    <td width="366" class="frmText11"><input name="email_local_part" type="text" class="text" value="{tmpl_var name='email_local_part'}" size="10" maxlength="50"> @ <select name="email_domain">{tmpl_var name="email_domain"}</select></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11">{tmpl_var name='destination_txt'}:</td>
+    <td width="366" class="frmText11"><input name="destination" type="text" class="text" value="{tmpl_var name='destination'}" size="30" maxlength="255"></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11">{tmpl_var name='active_txt'}:</td>
+    <td width="366" class="frmText11">{tmpl_var name='active'}</td>
+  </tr>  <tr>
+    <td class="frmText11">&nbsp;</td>
+    <td class="frmText11">&nbsp;</td>
+  </tr>
+  <tr>
+    <td>&nbsp;</td>
+    <td><input name="btn_save" type="submit" class="button" value="{tmpl_var name='btn_save_txt'}">
+      <input name="btn_cancel" type="button" class="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="self.location.href='mail_forward_list.php';">
+    </td>
+  </tr>
+</table>
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+<input type="hidden" name="type" value="forward">
\ No newline at end of file
diff --git a/interface/web/sites/templates/mail_forward_list.htm b/interface/web/sites/templates/mail_forward_list.htm
new file mode 100644
index 0000000000..a92ea8f75e
--- /dev/null
+++ b/interface/web/sites/templates/mail_forward_list.htm
@@ -0,0 +1,30 @@
+<form name="myform" action="mail_forward_list.php" method="POST">
+<div class="frmTextHead"><tmpl_var name="list_head_txt"></div><br />
+<input type="button" value="{tmpl_var name="add_new_record_txt"}" onClick="location.href='mail_forward_edit.php'" /><br /><br />
+<table width="100%" border="0" cellspacing="0" cellpadding="4">
+  <tr>
+    <td class="tblHead"><tmpl_var name="active_txt"></td>
+    <td class="tblHead"><tmpl_var name="email_txt"></td>
+    <td class="tblHead"><tmpl_var name="destination_txt"></td>
+    <td class="tblHead">&nbsp;</td>
+  </tr>
+  <tr>
+    <td class="frmText11"><select name="search_active" onChange="document.myform.submit();">{tmpl_var name='search_active'}</select></td>
+    <td class="frmText11"><input type="text" name="search_email" value="{tmpl_var name='search_email'}" class="text" /></td>
+    <td class="frmText11"><input type="text" name="search_destination" value="{tmpl_var name='search_destination'}" class="text" /></td>
+    <td class="frmText11" align="right"><input name="Filter" type="submit" id="Filter" value="{tmpl_var name="filter_txt"}"></td>
+  </tr>
+  <tmpl_loop name="records">
+  <tr bgcolor="{tmpl_var name="bgcolor"}">
+    <td class="frmText11"><a href="mail_forward_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="active"}</a></td>
+    <td class="frmText11"><a href="mail_forward_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="email"}</a></td>
+    <td class="frmText11"><a href="mail_forward_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="destination"}</a></td>
+    <td class="frmText11" align="right">[<a href="javascript: del_record('mail_forward_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}');" class="frmText11">{tmpl_var name='delete_txt'}</a>]</td>
+  </tr>
+  </tmpl_loop>
+
+  <tr>
+  	<td colspan="4" height="40" align="center" class="tblFooter"><tmpl_var name="paging"></td>
+  </tr>
+</table>
+</form>
\ No newline at end of file
diff --git a/interface/web/themes/default/style.css b/interface/web/themes/default/style.css
index f7e8c93c85..830af634da 100644
--- a/interface/web/themes/default/style.css
+++ b/interface/web/themes/default/style.css
@@ -152,7 +152,7 @@ textarea,input.text,select,option{
 .frmTextHead {
 	font-family: Verdana, Arial, Helvetica, sans-serif;
 	font-weight: bold;
-	font-size: 20px;
+	font-size: 18px;
 	color: #496FA8;
 	text-decoration: none;
 
-- 
GitLab