From a892b8c8007f87c39497dd98aa268d35428416a8 Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Tue, 08 Jun 2010 08:09:49 -0400
Subject: [PATCH] ISPConfig can now handle webdav - user (only at the interface, server to come ;-)

---
 install/tpl/config.inc.php.master                              |    9 
 interface/web/client/client_template_list.php                  |   27 +
 install/tpl/system.ini.master                                  |    1 
 interface/web/sites/lib/lang/de_webdav_user_list.lng           |    8 
 interface/web/sites/lib/module.conf.php                        |   91 ++-
 interface/web/sites/lib/lang/de_webdav_user.lng                |   16 
 interface/web/sites/webdav_user_del.php                        |   50 ++
 interface/web/client/lib/lang/en_client.lng                    |    2 
 interface/web/sites/lib/lang/en_webdav_user_list.lng           |    8 
 install/sql/ispconfig3.sql                                     |   25 +
 interface/web/sites/webdav_user_edit.php                       |  201 ++++++++
 interface/web/sites/list/webdav_user.list.php                  |   99 ++++
 interface/web/client/lib/lang/en_client_template.lng           |    2 
 interface/web/sites/lib/lang/de.lng                            |    2 
 interface/web/admin/templates/system_config_sites_edit.htm     |    4 
 interface/web/client/templates/client_template_edit_limits.htm |  188 ++++---
 interface/web/sites/webdav_user_list.php                       |   51 ++
 interface/web/admin/lib/lang/en_system_config.lng              |    2 
 interface/web/client/templates/client_edit_limits.htm          |  288 ++++++-----
 interface/web/sites/templates/webdav_user_list.htm             |   59 ++
 interface/web/client/form/client.tform.php                     |   14 
 interface/web/client/client_template_del.php                   |    2 
 interface/web/admin/lib/lang/de_system_config.lng              |    2 
 interface/web/sites/form/webdav_user.tform.php                 |  128 +++++
 interface/web/client/lib/lang/de_client.lng                    |    2 
 interface/web/client/client_template_edit.php                  |    2 
 interface/web/admin/form/system_config.tform.php               |   12 
 interface/web/client/lib/lang/de_client_template.lng           |    4 
 interface/web/sites/lib/lang/en.lng                            |    2 
 interface/web/client/form/client_template.tform.php            |   14 
 interface/web/sites/lib/lang/en_webdav_user.lng                |   16 
 interface/web/admin/system_config_edit.php                     |    2 
 interface/web/sites/templates/webdav_user_edit.htm             |   58 ++
 33 files changed, 1,114 insertions(+), 277 deletions(-)

diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index e0a3a92..062bea7 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -89,6 +89,7 @@
   `limit_ftp_user` int(11) NOT NULL default '-1',
   `limit_shell_user` int(11) NOT NULL default '0',
   `ssh_chroot` varchar(255) NOT NULL DEFAULT 'no,jailkit,ssh-chroot',
+  `limit_webdav_user` int(11) NOT NULL default '0',
   `default_dnsserver` int(11) unsigned NOT NULL default '1',
   `limit_dns_zone` int(11) NOT NULL default '-1',
   `limit_dns_record` int(11) NOT NULL default '-1',
@@ -145,6 +146,7 @@
   `limit_web_aliasdomain` int(11) NOT NULL default '-1',
   `limit_ftp_user` int(11) NOT NULL default '-1',
   `limit_shell_user` int(11) NOT NULL default '0',
+  `limit_webdav_user` int(11) NOT NULL default '0',
   `limit_dns_zone` int(11) NOT NULL default '-1',
   `limit_dns_record` int(11) NOT NULL default '-1',
   `limit_database` int(11) NOT NULL default '-1',
@@ -1127,6 +1129,29 @@
 -- --------------------------------------------------------
 
 --
+-- Table structure for table  `webdav_user`
+--
+
+CREATE TABLE `webdav_user` (
+  `webdav_user_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `parent_domain_id` int(11) unsigned NOT NULL default '0',
+  `username` varchar(64) default NULL,
+  `password` varchar(64) default NULL,
+  `active` enum('n','y') NOT NULL default 'y',
+  `dir` varchar(255) default NULL,
+  PRIMARY KEY  (`webdav_user_id`)
+) ENGINE=MyISAM
+
+
+-- --------------------------------------------------------
+
+--
 -- Table structure for table  `attempts_login`
 --
 
diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master
index c5a2d52..63d95fb 100644
--- a/install/tpl/config.inc.php.master
+++ b/install/tpl/config.inc.php.master
@@ -1,7 +1,6 @@
 <?php
-
 /*
-Copyright (c) 2007 - 2009, Till Brehm, projektfarm Gmbh
+Copyright (c) 2007 - 2010, Till Brehm, projektfarm Gmbh
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
@@ -151,4 +150,10 @@
 define("LOGLEVEL_WARN",1);
 define("LOGLEVEL_ERROR",2);
 
+//** include a local config-file if there is one
+//** IMPORTANT!!!
+//** DO NOT MAKE A COPY OF THIS FILE AS LOCAL CONFIG-FILE
+//** USE A EMPTY FILE AND ONLY COPY THE SETTINGS IN IT, YOU NEED TO OVERRIDE
+if (is_file('config.inc.local.php')) include_once 'config.inc.local.php';
+
 ?>
diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master
index 4459ca2..bf85ec5 100644
--- a/install/tpl/system.ini.master
+++ b/install/tpl/system.ini.master
@@ -17,6 +17,7 @@
 dbuser_prefix=c[CLIENTID]
 ftpuser_prefix=[CLIENTNAME]
 shelluser_prefix=[CLIENTNAME]
+webdavuser_prefix=[CLIENTNAME]
 dblist_phpmyadmin_link=y
 phpmyadmin_url=
 
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index db0d353..b776400 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -106,6 +106,18 @@
 			'width'		=> '30',
 			'maxlength'	=> '255'
 		),
+		'webdavuser_prefix' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
+														'errmsg'=> 'webdavuser_prefix_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
 		'dblist_phpmyadmin_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 a4e6182..d3d907e 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -3,11 +3,13 @@
 $wb['dbname_prefix_txt'] = 'Datenbanknamen Prefix';
 $wb['dbuser_prefix_txt'] = 'Datenbankbenutzer Prefix';
 $wb['shelluser_prefix_txt'] = 'Shellbenutzer Prefix';
+$wb['webdavuser_prefix_txt'] = 'Webdavbenutzer Prefix';
 $wb['ftpuser_prefix_txt'] = 'FTP Benutzer Prefix';
 $wb['dbname_prefix_error_regex'] = 'Zeichen nicht erlaubt in Datenbanknamen Prefix.';
 $wb['dbuser_prefix_error_regex'] = 'Zeichen nicht erlaubt in Datenbankbenutzer Prefix.';
 $wb['ftpuser_prefix_error_regex'] = 'Zeichen nicht erlaubt in FTP Benutzer Prefix.';
 $wb['shelluser_prefix_error_regex'] = 'Zeichen nicht erlaubt in Shellbenutzer Prefix.';
+$wb['webdavuser_prefix_error_regex'] = 'Zeichen nicht erlaubt in Webdavbenutzer Prefix.';
 $wb['dblist_phpmyadmin_link_txt'] = 'Link zu phpMyAdmin in der Datenbankliste';
 $wb['mailboxlist_webmail_link_txt'] = 'Link zu Webmail in der Mailboxliste';
 $wb['webmail_url_txt'] = 'Webmail URL';
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index 3cb319c..69957ce 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -4,11 +4,13 @@
 $wb['dbname_prefix_txt'] = 'Database name prefix';
 $wb['dbuser_prefix_txt'] = 'Database user prefix';
 $wb['shelluser_prefix_txt'] = 'Shell user prefix';
+$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
 $wb['ftpuser_prefix_txt'] = 'FTP user prefix';
 $wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
 $wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
 $wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
 $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['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
 $wb['webmail_url_txt'] = 'Webmail URL';
diff --git a/interface/web/admin/system_config_edit.php b/interface/web/admin/system_config_edit.php
index f6a4c05..70f26be 100644
--- a/interface/web/admin/system_config_edit.php
+++ b/interface/web/admin/system_config_edit.php
@@ -1,6 +1,6 @@
 <?php
 /*
-Copyright (c) 2008, Till Brehm, projektfarm Gmbh
+Copyright (c) 2008-2010, Till Brehm, projektfarm Gmbh
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
diff --git a/interface/web/admin/templates/system_config_sites_edit.htm b/interface/web/admin/templates/system_config_sites_edit.htm
index 996a941..9dc8d1b 100644
--- a/interface/web/admin/templates/system_config_sites_edit.htm
+++ b/interface/web/admin/templates/system_config_sites_edit.htm
@@ -22,6 +22,10 @@
         <input name="shelluser_prefix" id="shelluser_prefix" value="{tmpl_var name='shelluser_prefix'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
 	  </div>
       <div class="ctrlHolder">
+      	<label for="webdavuser_prefix">{tmpl_var name='webdavuser_prefix_txt'}</label>
+        <input name="webdavuser_prefix" id="webdavuser_prefix" value="{tmpl_var name='webdavuser_prefix'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+	  </div>
+      <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='dblist_phpmyadmin_link_txt'}</p>
 					<div class="multiField">
 						{tmpl_var name='dblist_phpmyadmin_link'}
diff --git a/interface/web/client/client_template_del.php b/interface/web/client/client_template_del.php
index 1dcdbac..dbe8639 100644
--- a/interface/web/client/client_template_del.php
+++ b/interface/web/client/client_template_del.php
@@ -1,6 +1,6 @@
 <?php
 /*
-Copyright (c) 2007-2008, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+Copyright (c) 2007-2010, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
diff --git a/interface/web/client/client_template_edit.php b/interface/web/client/client_template_edit.php
index bf27959..d3f5c65 100644
--- a/interface/web/client/client_template_edit.php
+++ b/interface/web/client/client_template_edit.php
@@ -1,6 +1,6 @@
 <?php
 /*
-Copyright (c) 2007-2008, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+Copyright (c) 2007-2010, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
diff --git a/interface/web/client/client_template_list.php b/interface/web/client/client_template_list.php
index 093de6e..da316a7 100644
--- a/interface/web/client/client_template_list.php
+++ b/interface/web/client/client_template_list.php
@@ -1,4 +1,31 @@
 <?php
+/*
+Copyright (c) 2007-2010, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+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.
+*/
 require_once('../../lib/config.inc.php');
 require_once('../../lib/app.inc.php');
 
diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php
index a229262..b38fdb9 100644
--- a/interface/web/client/form/client.tform.php
+++ b/interface/web/client/form/client.tform.php
@@ -626,6 +626,20 @@
 			'valuelimit' => 'client:ssh_chroot',
 			'value'		=> array('no' => 'None', 'jailkit' => 'Jailkit')
 		),
+		'limit_webdav_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_webdav_user_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
 		'default_dnsserver' => array (
 			'datatype'	=> 'INTEGER',
 			'formtype'	=> 'SELECT',
diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php
index 1b7ed25..9b9a3a5 100644
--- a/interface/web/client/form/client_template.tform.php
+++ b/interface/web/client/form/client_template.tform.php
@@ -367,6 +367,20 @@
 			'rows'		=> '',
 			'cols'		=> ''
 		),
+		'limit_webdav_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_webdav_user_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
 		'limit_dns_zone' => array (
 			'datatype'	=> 'INTEGER',
 			'formtype'	=> 'TEXT',
diff --git a/interface/web/client/lib/lang/de_client.lng b/interface/web/client/lib/lang/de_client.lng
index 6237798..1e45f85 100644
--- a/interface/web/client/lib/lang/de_client.lng
+++ b/interface/web/client/lib/lang/de_client.lng
@@ -55,6 +55,7 @@
 $wb['limit_dns_zone_txt'] = 'Max. Anzahl an DNS Zonen';
 $wb['limit_dns_record_txt'] = 'Max. Anzahl an DNS Einträge';
 $wb['limit_shell_user_txt'] = 'Max. Anzahl an Shell Benutzer';
+$wb['limit_webdav_user_txt'] = 'Max. Anzahl an Webdav Benutzer';
 $wb['username_error_empty'] = 'Benutzername ist leer.';
 $wb['username_error_unique'] = 'Der Benutzername muss einzigartig sein.';
 $wb['limit_maildomain_error_notint'] = 'Das Email Domain Limit muss eine Nummer sein.';
@@ -74,6 +75,7 @@
 $wb['limit_web_subdomain_error_notint'] = 'Das Webseite Subdomain Limit muss eine Nummer sein.';
 $wb['limit_ftp_user_error_notint'] = 'Das FTP Benutzer Limit muss eine Nummer sein.';
 $wb['limit_shell_user_error_notint'] = 'Das Shell Benutzer Limit muss eine Nummer sein.';
+$wb['limit_webdav_user_error_notint'] = 'Das Webdav Benutzer Limit muss eine Nummer sein.';
 $wb['limit_dns_zone_error_notint'] = 'Das DNS Einträge Limit muss eine Nummer sein.';
 $wb['default_dbserver_txt'] = 'Standarddatenbankserver';
 $wb['limit_database_error_notint'] = 'Das Datenbank Limit muss eine Nummer sein.';
diff --git a/interface/web/client/lib/lang/de_client_template.lng b/interface/web/client/lib/lang/de_client_template.lng
index c2b0f03..8d43fbf 100644
--- a/interface/web/client/lib/lang/de_client_template.lng
+++ b/interface/web/client/lib/lang/de_client_template.lng
@@ -26,7 +26,8 @@
 $wb['limit_ftp_user_txt'] = 'Max. Anzahl an FTP Benutzer';
 $wb['limit_dns_zone_txt'] = 'Max. Anzahl an DNS Zonen';
 $wb['limit_dns_record_txt'] = 'Max. Anzahl an DNS Einträgen';
-$wb['limit_shell_user_txt'] = 'Max. Anzahl an Shellbenutzer';
+$wb['limit_shell_user_txt'] = 'Max. Anzahl an Shell Benutzer';
+$wb["limit_webdav_user_txt"] = 'Max. Anzahl an Webdav Benutzer';
 $wb['limit_maildomain_error_notint'] = 'Das Emaildomain Limit muss eine Nummer sein.';
 $wb['limit_mailbox_error_notint'] = 'Das Mailbox Limit muss eine Nummer sein.';
 $wb['limit_mailalias_error_notint'] = 'Das Emailalias Limit muss eine Nummer sein.';
@@ -44,6 +45,7 @@
 $wb['limit_web_subdomain_error_notint'] = 'Das Webseiten Subdomain Limit muss eine Nummer sein.';
 $wb['limit_ftp_user_error_notint'] = 'Das FTP Benutzer Limit muss eine Nummer sein.';
 $wb['limit_shell_user_error_notint'] = 'Das Shell Benutzer Limit muss eine Nummer sein.';
+$wb["limit_webdav_user_error_notint"] = 'Das Webdav Benutzer Limit muss eine Nummer sein.';
 $wb['limit_dns_zone_error_notint'] = 'Das DNS Einträge Limit muss eine Nummer sein.';
 $wb['limit_database_error_notint'] = 'Das Datenbanken Limit muss eine Nummer sein.';
 $wb['limit_cron_error_notint'] = 'Das Cron Job Limit muss eine Nummer sein.';
diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng
index e87ba45..9c028f3 100644
--- a/interface/web/client/lib/lang/en_client.lng
+++ b/interface/web/client/lib/lang/en_client.lng
@@ -56,6 +56,7 @@
 $wb["limit_dns_zone_txt"] = 'Max. number of DNS zones';
 $wb["limit_dns_record_txt"] = 'Max. number DNS records';
 $wb["limit_shell_user_txt"] = 'Max. number of Shell users';
+$wb["limit_webdav_user_txt"] = 'Max. number of Webdav users';
 $wb["limit_client_txt"] = 'Max. number of Clients';
 $wb["username_error_empty"] = 'Username is empty.';
 $wb["username_error_unique"] = 'The username must be unique.';
@@ -77,6 +78,7 @@
 $wb["limit_web_subdomain_error_notint"] = 'The website subdomain limit must be a number.';
 $wb["limit_ftp_user_error_notint"] = 'The ftp user limit must be a number.';
 $wb["limit_shell_user_error_notint"] = 'The shell user limit must be a number.';
+$wb["limit_webdav_user_error_notint"] = 'The webdav user limit must be a number.';
 $wb["limit_dns_zone_error_notint"] = 'The dns zone limit must be a number.';
 $wb["limit_dns_zone_error_notint"] = 'The dns record limit must be a number.';
 $wb["limit_client_error_notint"] = 'The sub client limit must be a number.';
diff --git a/interface/web/client/lib/lang/en_client_template.lng b/interface/web/client/lib/lang/en_client_template.lng
index 3972663..ca8d4f7 100644
--- a/interface/web/client/lib/lang/en_client_template.lng
+++ b/interface/web/client/lib/lang/en_client_template.lng
@@ -28,6 +28,7 @@
 $wb["limit_dns_zone_txt"] = 'Max. number of DNS zones';
 $wb["limit_dns_record_txt"] = 'Max. number DNS records';
 $wb["limit_shell_user_txt"] = 'Max. number of Shell users';
+$wb["limit_webdav_user_txt"] = 'Max. number of Webdav users';
 $wb["limit_client_txt"] = 'Max. number of Clients';
 $wb["limit_maildomain_error_notint"] = 'The email domain limit must be a number.';
 $wb["limit_mailbox_error_notint"] = 'The mailbox limit must be a number.';
@@ -47,6 +48,7 @@
 $wb["limit_web_subdomain_error_notint"] = 'The website subdomain limit must be a number.';
 $wb["limit_ftp_user_error_notint"] = 'The ftp user limit must be a number.';
 $wb["limit_shell_user_error_notint"] = 'The shell user limit must be a number.';
+$wb["limit_webdav_user_error_notint"] = 'The webdav user limit must be a number.';
 $wb["limit_dns_zone_error_notint"] = 'The dns zone limit must be a number.';
 $wb["limit_dns_zone_error_notint"] = 'The dns record limit must be a number.';
 $wb["limit_database_txt"] = 'Max. number of Databases';
diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm
index ba18508..aa35ded 100644
--- a/interface/web/client/templates/client_edit_limits.htm
+++ b/interface/web/client/templates/client_edit_limits.htm
@@ -3,188 +3,192 @@
 
 <div class="panel panel_client">
 
-<tmpl_if name="is_admin">
-  <div class="pnl_toolsarea">
-    <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-      <div class="buttons">
-				<button class="positive iconstxt icoAdd" type="button" value="Add additional template" onClick="addAdditionalTemplate();"><span>Add additional template</span></button>
-				<button class="negative iconstxt icoDelete" type="button" value="Delete additional template" onClick="delAdditionalTemplate();"><span>Delete additional template</span></button>
-      </div>
-    </fieldset>
-  </div>
-</tmpl_if>
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Limits</legend>
-<tmpl_if name="is_admin">
-      <div class="ctrlHolder">
-      	<label for="template_master">{tmpl_var name='template_master_txt'}</label>
-        <select name="template_master" id="template_master" class="selectInput">
+	<tmpl_if name="is_admin">
+		<div class="pnl_toolsarea">
+			<fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
+				<div class="buttons">
+					<button class="positive iconstxt icoAdd" type="button" value="Add additional template" onClick="addAdditionalTemplate();"><span>Add additional template</span></button>
+					<button class="negative iconstxt icoDelete" type="button" value="Delete additional template" onClick="delAdditionalTemplate();"><span>Delete additional template</span></button>
+				</div>
+			</fieldset>
+		</div>
+	</tmpl_if>
+
+	<div class="pnl_formsarea">
+		<fieldset class="inlineLabels"><legend>Limits</legend>
+			<tmpl_if name="is_admin">
+				<div class="ctrlHolder">
+					<label for="template_master">{tmpl_var name='template_master_txt'}</label>
+					<select name="template_master" id="template_master" class="selectInput">
 					{tmpl_var name='template_master'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="template_additional">{tmpl_var name='template_additional_txt'}</label>
-        <select name="tpl_add_select" id="tpl_add_select" class="selectInput">
+					</select>
+				</div>
+				<div class="ctrlHolder">
+					<label for="template_additional">{tmpl_var name='template_additional_txt'}</label>
+					<select name="tpl_add_select" id="tpl_add_select" class="selectInput">
 					{tmpl_var name='tpl_add_select'}
-				</select>
-	      <div id="template_additional_list"><br /><br />{tmpl_var name='template_additional_list'}</div>
-	  	  <input type="hidden" id="template_additional" name="template_additional" value="{tmpl_var name='template_additional'}">
-      </div>
-	  <div class="ctrlHolder">
-	    &nbsp;
-	  </div>
-</tmpl_if>
-      <div class="ctrlHolder">
-      	<label for="default_mailserver">{tmpl_var name='default_mailserver_txt'}</label>
-        <select name="default_mailserver" id="default_mailserver" class="selectInput">
+					</select>
+					<div id="template_additional_list"><br /><br />{tmpl_var name='template_additional_list'}</div>
+					<input type="hidden" id="template_additional" name="template_additional" value="{tmpl_var name='template_additional'}">
+				</div>
+				<div class="ctrlHolder">
+					&nbsp;
+				</div>
+			</tmpl_if>
+			<div class="ctrlHolder">
+				<label for="default_mailserver">{tmpl_var name='default_mailserver_txt'}</label>
+				<select name="default_mailserver" id="default_mailserver" class="selectInput">
 					{tmpl_var name='default_mailserver'}
 				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
-        <input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
-        <input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
+				<input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
-        <input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
+				<input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-	  <div class="ctrlHolder">
-      	<label for="limit_mailaliasdomain">{tmpl_var name='limit_mailaliasdomain_txt'}</label>
-        <input name="limit_mailaliasdomain" id="limit_mailaliasdomain" value="{tmpl_var name='limit_mailaliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
+				<input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
-        <input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailaliasdomain">{tmpl_var name='limit_mailaliasdomain_txt'}</label>
+				<input name="limit_mailaliasdomain" id="limit_mailaliasdomain" value="{tmpl_var name='limit_mailaliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
-        <input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
+				<input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
-        <input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
+				<input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
-        <input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
+				<input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
-        <input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
+				<input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
-        <input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+			<div class="ctrlHolder">
+				<label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
+				<input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
-        <input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
+				<input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
-        <input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
+				<input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
-        <input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
+				<input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="default_webserver">{tmpl_var name='default_webserver_txt'}</label>
-        <select name="default_webserver" id="default_webserver" class="selectInput">
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
+				<input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="default_webserver">{tmpl_var name='default_webserver_txt'}</label>
+				<select name="default_webserver" id="default_webserver" class="selectInput">
 					{tmpl_var name='default_webserver'}
 				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
-        <input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-	  <div class="ctrlHolder">
-      	<label for="limit_web_quota">{tmpl_var name='limit_web_quota_txt'}</label>
-        <input name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-	  </div>
-      <div class="ctrlHolder">
+			<div class="ctrlHolder">
+				<label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
+				<input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_web_quota">{tmpl_var name='limit_web_quota_txt'}</label>
+				<input name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+			</div>
+			<div class="ctrlHolder">
 				<p class="label">{tmpl_var name='web_php_options_txt'}</p>
-					<div class="multiField">
+				<div class="multiField">
 						{tmpl_var name='web_php_options'}
-					</div>
+				</div>
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
-        <input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
+				<input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
-        <input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
+				<input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
-        <input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
+				<input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
-        <input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
+				<input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
+			<div class="ctrlHolder">
 				<p class="label">{tmpl_var name='ssh_chroot_txt'}</p>
-					<div class="multiField">
+				<div class="multiField">
 						{tmpl_var name='ssh_chroot'}
-					</div>
+				</div>
 			</div>
-      <div class="ctrlHolder">
-      	<label for="default_dnsserver">{tmpl_var name='default_dnsserver_txt'}</label>
-        <select name="default_dnsserver" id="default_dnsserver" class="selectInput">
+			<div class="ctrlHolder">
+				<label for="limit_webdav_user">{tmpl_var name='limit_webdav_user_txt'}</label>
+				<input name="limit_webdav_user" id="limit_webdav_user" value="{tmpl_var name='limit_webdav_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="default_dnsserver">{tmpl_var name='default_dnsserver_txt'}</label>
+				<select name="default_dnsserver" id="default_dnsserver" class="selectInput">
 					{tmpl_var name='default_dnsserver'}
 				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
-        <input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
-        <input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
+				<input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="default_dbserver">{tmpl_var name='default_dbserver_txt'}</label>
-        <select name="default_dbserver" id="default_dbserver" class="selectInput">
+			<div class="ctrlHolder">
+				<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
+				<input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="default_dbserver">{tmpl_var name='default_dbserver_txt'}</label>
+				<select name="default_dbserver" id="default_dbserver" class="selectInput">
 					{tmpl_var name='default_dbserver'}
 				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
-        <input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-        <label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
-        <input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
+				<input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
+				<input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
             </div>
-      <div class="ctrlHolder">
-        <label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
-        <select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
-          {tmpl_var name='limit_cron_type'}
-        </select>
+			<div class="ctrlHolder">
+				<label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
+				<select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
+					{tmpl_var name='limit_cron_type'}
+				</select>
             </div>
-      <div class="ctrlHolder">
-        <label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
-        <input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
+				<input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
             </div>
-	  <div class="ctrlHolder">
-      	<label for="limit_traffic_quota">{tmpl_var name='limit_traffic_quota_txt'}</label>
-        <input name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-	  </div>
-    </fieldset>
+			<div class="ctrlHolder">
+				<label for="limit_traffic_quota">{tmpl_var name='limit_traffic_quota_txt'}</label>
+				<input name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+			</div>
+		</fieldset>
 
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+		<input type="hidden" name="id" value="{tmpl_var name='id'}">
 
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
+		<div class="buttonHolder buttons">
+			<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+			<button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+		</div>
+	</div>
+
 </div>
diff --git a/interface/web/client/templates/client_template_edit_limits.htm b/interface/web/client/templates/client_template_edit_limits.htm
index 6509329..43cdda3 100644
--- a/interface/web/client/templates/client_template_edit_limits.htm
+++ b/interface/web/client/templates/client_template_edit_limits.htm
@@ -3,122 +3,126 @@
 
 <div class="panel panel_client_template">
 
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Limits</legend>
-      <div class="ctrlHolder">
-      	<label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
-        <input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+	<div class="pnl_formsarea">
+		<fieldset class="inlineLabels"><legend>Limits</legend>
+			<div class="ctrlHolder">
+				<label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
+				<input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
-        <input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
+				<input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
-        <input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
+				<input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailaliasdomain">{tmpl_var name='limit_mailaliasdomain_txt'}</label>
-        <input name="limit_mailaliasdomain" id="limit_mailaliasdomain" value="{tmpl_var name='limit_mailaliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailaliasdomain">{tmpl_var name='limit_mailaliasdomain_txt'}</label>
+				<input name="limit_mailaliasdomain" id="limit_mailaliasdomain" value="{tmpl_var name='limit_mailaliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-	  <div class="ctrlHolder">
-      	<label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
-        <input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
+				<input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
-        <input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
+				<input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
-        <input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
+				<input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
-        <input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
+				<input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
-        <input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
+				<input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
-        <input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
+				<input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
-        <input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
+				<input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
-        <input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
+				<input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
-        <input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
+				<input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
-        <input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
+				<input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-	  <div class="ctrlHolder">
-      	<label for="limit_web_quota">{tmpl_var name='limit_web_quota_txt'}</label>
-        <input name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-	  </div>
-      <div class="ctrlHolder">
-      	<label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
-        <input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_web_quota">{tmpl_var name='limit_web_quota_txt'}</label>
+				<input name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
-        <input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
+				<input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
-        <input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
+				<input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
-        <input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
+				<input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
-        <input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
+				<input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
-        <input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_webdav_user">{tmpl_var name='limit_webdav_user_txt'}</label>
+				<input name="limit_webdav_user" id="limit_webdav_user" value="{tmpl_var name='limit_webdav_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
-        <input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
+				<input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-        <label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
-        <input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
+				<input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
+				<input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
+				<input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
             </div>
-      <div class="ctrlHolder">
-        <label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
-        <select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
-          {tmpl_var name='limit_cron_type'}
-        </select>
+			<div class="ctrlHolder">
+				<label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
+				<select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
+					{tmpl_var name='limit_cron_type'}
+				</select>
             </div>
-      <div class="ctrlHolder">
-        <label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
-        <input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			<div class="ctrlHolder">
+				<label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
+				<input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
             </div>
-	  <div class="ctrlHolder">
-      	<label for="limit_traffic_quota">{tmpl_var name='limit_traffic_quota_txt'}</label>
-        <input name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-	  </div>
-    </fieldset>
+			<div class="ctrlHolder">
+				<label for="limit_traffic_quota">{tmpl_var name='limit_traffic_quota_txt'}</label>
+				<input name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+			</div>
+		</fieldset>
 
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+		<input type="hidden" name="id" value="{tmpl_var name='id'}">
 
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_template_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
+		<div class="buttonHolder buttons">
+			<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_template_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+			<button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+		</div>
+	</div>
+
 </div>
diff --git a/interface/web/sites/form/webdav_user.tform.php b/interface/web/sites/form/webdav_user.tform.php
new file mode 100644
index 0000000..35132fe
--- /dev/null
+++ b/interface/web/sites/form/webdav_user.tform.php
@@ -0,0 +1,128 @@
+<?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"] 			= "Webdav-User";
+$form["description"] 	= "";
+$form["name"] 			= "webdav_user";
+$form["action"]			= "webdav_user_edit.php";
+$form["db_table"]		= "webdav_user";
+$form["db_table_idx"]	= "webdav_user_id";
+$form["db_history"]		= "yes";
+$form["tab_default"]	= "webdav";
+$form["list_default"]	= "webdav_user_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"]['webdav'] = array (
+	'title' 	=> "Webdav User",
+	'width' 	=> 100,
+	'template' 	=> "templates/webdav_user_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'server_id' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT server_id,server_name FROM server WHERE mirror_server_id = 0 AND {AUTHSQL} ORDER BY server_name',
+										'keyfield'=> 'server_id',
+										'valuefield'=> 'server_name'
+									 ),
+			'value'		=> ''
+		),
+		'parent_domain_id' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => "SELECT domain_id,domain FROM web_domain WHERE type = 'vhost' AND {AUTHSQL} ORDER BY domain",
+										'keyfield'=> 'domain_id',
+										'valuefield'=> 'domain'
+									 ),
+			'value'		=> ''
+		),
+		'username' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'UNIQUE',
+														'errmsg'=> 'username_error_unique'),
+										1 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[\w\.\-]{0,64}$/',
+														'errmsg'=> 'username_error_regex'),
+									),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'password' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'PASSWORD',
+			'encryption' => 'CRYPT',
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'active' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> 'y',
+			'value'		=> array(0 => 'n',1 => 'y')
+		),
+		'dir' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
+														'errmsg'=> 'directory_error_empty'),
+									),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/de.lng b/interface/web/sites/lib/lang/de.lng
index d921ad4..54231a4 100644
--- a/interface/web/sites/lib/lang/de.lng
+++ b/interface/web/sites/lib/lang/de.lng
@@ -11,6 +11,8 @@
 $wb['FTP-User'] = 'FTP Benutzer';
 $wb['FTP'] = 'FTP';
 $wb['Shell-User'] = 'Shell Benutzer';
+$wb['Webdav-User'] = 'Webdav Benutzer';
+$wb['Webdav'] = 'Webdav';
 $wb['Shell'] = 'Shell';
 $wb['Websites'] = 'Websites';
 $wb['Stats'] = 'Statistiken';
diff --git a/interface/web/sites/lib/lang/de_webdav_user.lng b/interface/web/sites/lib/lang/de_webdav_user.lng
new file mode 100644
index 0000000..8b14415
--- /dev/null
+++ b/interface/web/sites/lib/lang/de_webdav_user.lng
@@ -0,0 +1,16 @@
+<?php
+$wb["dir_txt"] = 'Verzeichnis';
+$wb["server_id_txt"] = 'Server';
+$wb["parent_domain_id_txt"] = 'Website';
+$wb["username_txt"] = 'Username';
+$wb["password_txt"] = 'Password';
+$wb["password_strength_txt"] = 'Password strength';
+$wb['active_txt'] = 'Aktiv';
+$wb["limit_webdav_user_txt"] = 'Die maximale Anzahl an Webdav Benutzer für ihr Konto wurde erreicht.';
+$wb['username_error_empty'] = 'Benutzername ist leer.';
+$wb['username_error_unique'] = 'Der Benutzername muss einzigartig sein.';
+$wb['username_error_regex'] = 'Der Benutzername enthält nicht erlaubte Zeichen.';
+$wb['directory_error_empty'] = 'Verzeichnis ist leer.';
+$wb['password_strength_txt'] = 'Passwortkomplexität';
+$wb['parent_domain_id_error_empty'] = 'Keine Website ausgewählt.';
+?>
diff --git a/interface/web/sites/lib/lang/de_webdav_user_list.lng b/interface/web/sites/lib/lang/de_webdav_user_list.lng
new file mode 100644
index 0000000..a9ae0c9
--- /dev/null
+++ b/interface/web/sites/lib/lang/de_webdav_user_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Webdav-Benutzer';
+$wb["active_txt"] = 'Aktiv';
+$wb["server_id_txt"] = 'Server';
+$wb["parent_domain_id_txt"] = 'Website';
+$wb["username_txt"] = 'Benutzername';
+$wb["add_new_record_txt"] = 'Neuen Webdavbenutzer hinzufügen';
+?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en.lng b/interface/web/sites/lib/lang/en.lng
index 36c63bc..669a971 100644
--- a/interface/web/sites/lib/lang/en.lng
+++ b/interface/web/sites/lib/lang/en.lng
@@ -13,6 +13,8 @@
 $wb['FTP'] = 'FTP';
 $wb['Shell-User'] = 'Shell-User';
 $wb['Shell'] = 'Shell';
+$wb['Webdav-User'] = 'Webdav Benutzer';
+$wb['Webdav'] = 'Webdav';
 $wb['Websites'] = 'Websites';
 $wb["Stats"] = 'Statistics';
 $wb["Cron"] = 'Cron';
diff --git a/interface/web/sites/lib/lang/en_webdav_user.lng b/interface/web/sites/lib/lang/en_webdav_user.lng
new file mode 100644
index 0000000..09cf6ff
--- /dev/null
+++ b/interface/web/sites/lib/lang/en_webdav_user.lng
@@ -0,0 +1,16 @@
+<?php
+$wb["dir_txt"] = 'Directory';
+$wb["server_id_txt"] = 'Server';
+$wb["parent_domain_id_txt"] = 'Website';
+$wb["username_txt"] = 'Username';
+$wb["password_txt"] = 'Password';
+$wb["password_strength_txt"] = 'Password strength';
+$wb["active_txt"] = 'Active';
+$wb["limit_webdav_user_txt"] = 'The max. number of webdav users for your account is reached.';
+$wb["username_error_empty"] = 'Username is empty.';
+$wb["username_error_unique"] = 'The username must be unique.';
+$wb["username_error_regex"] = 'The username contains charachters that are not allowed.';
+$wb["directory_error_empty"] = 'Directory empty.';
+$wb["parent_domain_id_error_empty"] = 'No website selected.';
+$wb['password_strength_txt'] = 'Password strength';
+?>
diff --git a/interface/web/sites/lib/lang/en_webdav_user_list.lng b/interface/web/sites/lib/lang/en_webdav_user_list.lng
new file mode 100644
index 0000000..072e3ea
--- /dev/null
+++ b/interface/web/sites/lib/lang/en_webdav_user_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Webdav-User';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["parent_domain_id_txt"] = 'Website';
+$wb["username_txt"] = 'Username';
+$wb["add_new_record_txt"] = 'Add new Webdav-User';
+?>
\ 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 09fdfe8..3b727ee 100644
--- a/interface/web/sites/lib/module.conf.php
+++ b/interface/web/sites/lib/module.conf.php
@@ -11,25 +11,25 @@
 */
 
 $items[] = array( 'title' 	=> "Website",
-				  'target' 	=> 'content',
-				  'link'	=> 'sites/web_domain_list.php',
-				  'html_id' => 'domain_list');
+		'target' 	=> 'content',
+		'link'	=> 'sites/web_domain_list.php',
+		'html_id' => 'domain_list');
 
 
 $items[] = array( 'title' 	=> "Subdomain",
-				  'target' 	=> 'content',
-				  'link'	=> 'sites/web_subdomain_list.php',
-				  'html_id' => 'subdomain_list');
+		'target' 	=> 'content',
+		'link'	=> 'sites/web_subdomain_list.php',
+		'html_id' => 'subdomain_list');
 
 
 $items[] = array( 'title'   => "Aliasdomain",
-                  'target'  => 'content',
-                  'link'    => 'sites/web_aliasdomain_list.php',
-                  'html_id' => 'aliasdomain_list');
+		'target'  => 'content',
+		'link'    => 'sites/web_aliasdomain_list.php',
+		'html_id' => 'aliasdomain_list');
 
 $module["nav"][] = array(	'title'	=> 'Websites',
-							'open' 	=> 1,
-							'items'	=> $items);
+		'open' 	=> 1,
+		'items'	=> $items);
 
 // clean up
 unset($items);
@@ -39,48 +39,65 @@
 */
 
 $items[] = array( 'title' 	=> "FTP-User",
-				  'target' 	=> 'content',
-				  'link'	=> 'sites/ftp_user_list.php',
-				  'html_id' => 'ftp_user_list');
+		'target' 	=> 'content',
+		'link'	=> 'sites/ftp_user_list.php',
+		'html_id' => 'ftp_user_list');
 
 
 $module["nav"][] = array(	'title'	=> 'FTP',
-							'open' 	=> 1,
-							'items'	=> $items);
+		'open' 	=> 1,
+		'items'	=> $items);
 
 // clean up
 unset($items);
 
 /*
-	FTP User menu
+	Shell User menu
 */
 
 $items[] = array( 'title' 	=> "Shell-User",
-				  'target' 	=> 'content',
-				  'link'	=> 'sites/shell_user_list.php',
-				  'html_id' => 'shell_user_list');
+		'target' 	=> 'content',
+		'link'	=> 'sites/shell_user_list.php',
+		'html_id' => 'shell_user_list');
 
 
 $module["nav"][] = array(	'title'	=> 'Shell',
-							'open' 	=> 1,
-							'items'	=> $items);
+		'open' 	=> 1,
+		'items'	=> $items);
 
 // clean up
 unset($items);
+
+/*
+ *	Webdav User menu
+ */
+$items[] = array( 'title' 	=> "Webdav-User",
+		'target' 	=> 'content',
+		'link'	=> 'sites/webdav_user_list.php',
+		'html_id' => 'webdav_user_list');
+
+
+$module["nav"][] = array(	'title'	=> 'Webdav',
+		'open' 	=> 1,
+		'items'	=> $items);
+
+// clean up
+unset($items);
+
 
 /*
 	Databases menu
 */
 
 $items[] = array( 'title' 	=> "Database",
-				  'target' 	=> 'content',
-				  'link'	=> 'sites/database_list.php',
-				  'html_id' => 'database_list');
+		'target' 	=> 'content',
+		'link'	=> 'sites/database_list.php',
+		'html_id' => 'database_list');
 
 
 $module["nav"][] = array(	'title'	=> 'Database',
-							'open' 	=> 1,
-							'items'	=> $items);
+		'open' 	=> 1,
+		'items'	=> $items);
 
 
 /*
@@ -89,28 +106,28 @@
 $items = array();
 
 $items[] = array( 'title'   => "Cron Jobs",
-                  'target'  => 'content',
-                  'link'    => 'sites/cron_list.php',
-                  'html_id' => 'cron_list');
+		'target'  => 'content',
+		'link'    => 'sites/cron_list.php',
+		'html_id' => 'cron_list');
 
 
 $module["nav"][] = array(   'title' => 'Cron',
-                            'open'  => 1,
-                            'items' => $items);
+		'open'  => 1,
+		'items' => $items);
 
 
 //**** Statistics menu
 $items = array();
 
 $items[] = array( 'title'   => 'Web traffic',
-                  'target'  => 'content',
-                  'link'    => 'sites/web_sites_stats.php',
-                  'html_id' => 'websites_stats');
+		'target'  => 'content',
+		'link'    => 'sites/web_sites_stats.php',
+		'html_id' => 'websites_stats');
 
 
 $module['nav'][] = array(   'title' => 'Statistics',
-                            'open'  => 1,
-                            'items' => $items);
+		'open'  => 1,
+		'items' => $items);
 
 
 
diff --git a/interface/web/sites/list/webdav_user.list.php b/interface/web/sites/list/webdav_user.list.php
new file mode 100644
index 0000000..fc3ed0c
--- /dev/null
+++ b/interface/web/sites/list/webdav_user.list.php
@@ -0,0 +1,99 @@
+<?php
+
+/*
+	Datatypes:
+	- INTEGER
+	- DOUBLE
+	- CURRENCY
+	- VARCHAR
+	- TEXT
+	- DATE
+*/
+
+
+
+// Name of the list
+$liste["name"] 				= "webdav_user";
+
+// Database table
+$liste["table"] 			= "webdav_user";
+
+// Index index field of the database table
+$liste["table_idx"]			= "webdav_user_id";
+
+// Search Field Prefix
+$liste["search_prefix"] 	= "search_";
+
+// Records per page
+$liste["records_per_page"] 	= 15;
+
+// Script File of the list
+$liste["file"]				= "webdav_user_list.php";
+
+// Script file of the edit form
+$liste["edit_file"]			= "webdav_user_edit.php";
+
+// Script File of the delete script
+$liste["delete_file"]		= "webdav_user_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('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>",'n' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+
+
+$liste["item"][] = array(	'field'		=> "server_id",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "SELECT",
+							'op'		=> "like",
+							'prefix'	=> "%",
+							'suffix'	=> "%",
+							'datasource'	=> array ( 	'type'	=> 'SQL',
+														'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
+														'keyfield'=> 'server_id',
+														'valuefield'=> 'server_name'
+									 				  ),
+							'width'		=> "",
+							'value'		=> "");
+
+$liste["item"][] = array(	'field'		=> "parent_domain_id",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "SELECT",
+							'op'		=> "=",
+							'prefix'	=> "",
+							'suffix'	=> "",
+							'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => "SELECT domain_id,domain FROM web_domain WHERE type = 'vhost' AND {AUTHSQL} ORDER BY domain",
+										'keyfield'=> 'domain_id',
+										'valuefield'=> 'domain'
+									 ),
+							'width'		=> "",
+							'value'		=> "");
+
+$liste["item"][] = array(	'field'		=> "username",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "TEXT",
+							'op'		=> "like",
+							'prefix'	=> "%",
+							'suffix'	=> "%",
+							'width'		=> "",
+							'value'		=> "");
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/templates/webdav_user_edit.htm b/interface/web/sites/templates/webdav_user_edit.htm
new file mode 100644
index 0000000..4b5063f
--- /dev/null
+++ b/interface/web/sites/templates/webdav_user_edit.htm
@@ -0,0 +1,58 @@
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_webdav_user">
+
+	<div class="pnl_formsarea">
+		<fieldset class="inlineLabels">
+			<div class="ctrlHolder">
+				<tmpl_if name="edit_disabled">
+					<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
+					<select name="parent_domain_id" id="parent_domain_id" class="selectInput" disabled="disabled">
+					{tmpl_var name='parent_domain_id'}
+					</select>
+					<input type="hidden" name="parent_domain_id" value="{tmpl_var name='parent_domain_id_value'}" />
+					<tmpl_else>
+						<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
+						<select name="parent_domain_id" id="parent_domain_id" class="selectInput">
+					{tmpl_var name='parent_domain_id'}
+						</select>
+				</tmpl_if>
+			</div>
+			<div class="ctrlHolder">
+				<label for="username">{tmpl_var name='username_txt'}</label>
+				<div style="float: left;">{tmpl_var name='username_prefix'} </div>
+				<input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput formLengthFourth"/>
+			</div>
+			<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)"/>
+			</div>
+			<div class="ctrlHolder">
+				<p class="label">{tmpl_var name='password_strength_txt'}</p>
+				<div id="passBar"></div>
+				<p class="formHint"><span id="passText">&nbsp;</span></p>
+			</div>
+			<div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+				<div class="multiField">
+						{tmpl_var name='active'}
+				</div>
+			</div>
+			<div class="ctrlHolder">
+				<label for="dir">{tmpl_var name='dir_txt'}</label>
+				<div style="float: left;">webdav/</div>
+				<input name="dir" id="dir" value="{tmpl_var name='dir'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+
+		</fieldset>
+
+		<input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+		<div class="buttonHolder buttons">
+			<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/webdav_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+			<button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/webdav_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+		</div>
+	</div>
+
+</div>
diff --git a/interface/web/sites/templates/webdav_user_list.htm b/interface/web/sites/templates/webdav_user_list.htm
new file mode 100644
index 0000000..2f6d69c
--- /dev/null
+++ b/interface/web/sites/templates/webdav_user_list.htm
@@ -0,0 +1,59 @@
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_list_webdav_user">
+
+  <div class="pnl_toolsarea">
+    <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
+      <div class="buttons">
+        <button class="iconstxt icoAdd" type="button" onClick="loadContent('sites/webdav_user_edit.php');">
+          <span>{tmpl_var name="add_new_record_txt"}</span>
+        </button>
+      </div>
+    </fieldset>
+  </div>
+
+  <div class="pnl_listarea">
+    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+      <table class="list">
+        <thead>
+          <tr>
+            <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
+            <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
+            <th class="tbl_col_parent_domain_id" scope="col"><tmpl_var name="parent_domain_id_txt"></th>
+            <th class="tbl_col_username" scope="col"><tmpl_var name="username_txt"></th>
+            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+          </tr>
+          <tr>
+            <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','sites/webdav_user_list.php');">{tmpl_var name='search_active'}</select></td>
+            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','sites/webdav_user_list.php');">{tmpl_var name='search_server_id'}</select></td>
+            <td class="tbl_col_parent_domain_id"><select name="search_parent_domain_id" onChange="submitForm('pageForm','sites/webdav_user_list.php');">{tmpl_var name='search_parent_domain_id'}</select></td>
+            <td class="tbl_col_username"><input type="text" name="search_username" value="{tmpl_var name='search_username'}" /></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','sites/shell_user_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
+          </tr>
+        </thead>
+        <tbody>
+          <tmpl_loop name="records">
+          <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+            <td class="tbl_col_active"><a href="#" onClick="loadContent('sites/webdav_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
+            <td class="tbl_col_server_id"><a href="#" onClick="loadContent('sites/webdav_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
+            <td class="tbl_col_parent_domain_id"><a href="#" onClick="loadContent('sites/webdav_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="parent_domain_id"}</a></td>
+            <td class="tbl_col_username"><a href="#" onClick="loadContent('sites/webdav_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="username"}</a></td>
+            <td class="tbl_col_buttons">
+              <div class="buttons icons16">    
+                <a class="icons16 icoDelete" href="javascript: del_record('sites/webdav_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+              </div>
+            </td>
+          </tr>
+          </tmpl_loop>
+        </tbody>
+        <tfoot>
+          <tr>
+            <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+          </tr>
+        </tfoot>
+      </table>
+    </fieldset>
+  </div>
+
+</div>
diff --git a/interface/web/sites/webdav_user_del.php b/interface/web/sites/webdav_user_del.php
new file mode 100644
index 0000000..ca92412
--- /dev/null
+++ b/interface/web/sites/webdav_user_del.php
@@ -0,0 +1,50 @@
+<?php
+/*
+Copyright (c) 2010 Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+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/webdav_user.list.php";
+$tform_def_file = "form/webdav_user.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('sites');
+
+$app->uses("tform_actions");
+$app->tform_actions->onDelete();
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/webdav_user_edit.php b/interface/web/sites/webdav_user_edit.php
new file mode 100644
index 0000000..19a0f78
--- /dev/null
+++ b/interface/web/sites/webdav_user_edit.php
@@ -0,0 +1,201 @@
+<?php
+/*
+Copyright (c) 2010 Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+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/webdav_user.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+require_once('tools.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('sites');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+	
+	function onShowNew() {
+		global $app, $conf;
+		
+		// we will check only users, not admins
+		if($_SESSION["s"]["user"]["typ"] == 'user') {
+			if(!$app->tform->checkClientLimit('limit_webdav_user')) {
+				$app->error($app->tform->wordbook["limit_webdav_user_txt"]);
+			}
+			if(!$app->tform->checkResellerLimit('limit_webdav_user')) {
+				$app->error('Reseller: '.$app->tform->wordbook["limit_webdav_user_txt"]);
+			}
+		}
+		
+		parent::onShowNew();
+	}
+
+	function onShowEnd() {
+		global $app, $conf, $interfaceConf;
+		/*
+		 * If the names are restricted -> remove the restriction, so that the
+		 * data can be edited
+		 */
+		
+		$app->uses('getconf');
+		$global_config = $app->getconf->get_global_config('sites');
+		$webdavuser_prefix = replacePrefix($global_config['webdavuser_prefix'], $this->dataRecord);
+		
+		if ($this->dataRecord['username'] != ""){
+			/* REMOVE the restriction */
+			$app->tpl->setVar("username", str_replace($webdavuser_prefix , '', $this->dataRecord['username']));
+		}
+		if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+			$app->tpl->setVar("username_prefix", $global_config['webdavuser_prefix']);
+		} else {
+			$app->tpl->setVar("username_prefix", $webdavuser_prefix);
+		}
+		
+		if($this->id > 0) {
+			//* we are editing a existing record
+			$app->tpl->setVar("edit_disabled", 1);
+			$app->tpl->setVar("parent_domain_id_value", $this->dataRecord["parent_domain_id"]);
+		} else {
+			$app->tpl->setVar("edit_disabled", 0);
+		}
+
+		parent::onShowEnd();
+	}
+	
+	function onSubmit() {
+		global $app, $conf;
+		
+		// Get the record of the parent domain
+		$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".intval(@$this->dataRecord["parent_domain_id"]));
+		
+		// Set a few fixed values
+		$this->dataRecord["server_id"] = $parent_domain["server_id"];
+		
+		if(isset($this->dataRecord['username']) && trim($this->dataRecord['username']) == '') $app->tform->errorMessage .= $app->tform->lng('username_error_empty').'<br />';
+		if(isset($this->dataRecord['username']) && empty($this->dataRecord['parent_domain_id'])) $app->tform->errorMessage .= $app->tform->lng('parent_domain_id_error_empty').'<br />';
+		
+		parent::onSubmit();
+	}
+	
+	function onBeforeInsert() {
+		global $app, $conf, $interfaceConf;
+
+		/*
+		 * If the names should be restricted -> do it!
+		 */
+		if ($app->tform->errorMessage == ''){
+			
+			$app->uses('getconf');
+			$global_config = $app->getconf->get_global_config('sites');
+			$webdavuser_prefix = replacePrefix($global_config['webdavuser_prefix'], $this->dataRecord);
+			
+			/* restrict the names */
+			$this->dataRecord['username'] = $webdavuser_prefix . $this->dataRecord['username'];
+		}
+		parent::onBeforeInsert();
+	}
+	
+	function onAfterInsert() {
+		global $app, $conf;
+		
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($this->dataRecord["parent_domain_id"]));
+		$server_id = $web["server_id"];
+		$dir = $web["document_root"];
+		
+		// The Webdav user shall be owned by the same group then the website
+		$sys_groupid = $web['sys_groupid'];
+		
+		$sql = "UPDATE webdav_user SET server_id = $server_id, dir = '$dir', sys_groupid = '$sys_groupid' WHERE shell_user_id = ".$this->id;
+		$app->db->query($sql);
+		
+	}
+	
+	function onBeforeUpdate() {
+		global $app, $conf, $interfaceConf;
+		
+		/*
+		 * If the names should be restricted -> do it!
+		 */
+		if ($app->tform->errorMessage == '') {
+			/*
+			* If the names should be restricted -> do it!
+			*/
+			$app->uses('getconf');
+			$global_config = $app->getconf->get_global_config('sites');
+			$webdavuser_prefix = replacePrefix($global_config['webdavuser_prefix'], $this->dataRecord);
+			
+			/* restrict the names */
+			$this->dataRecord['username'] = $webdavuser_prefix . $this->dataRecord['username'];
+		}
+	}
+	
+	function onAfterUpdate() {
+		global $app, $conf;
+		
+		
+	}
+	
+	function getClientName() {
+		global $app, $conf;
+	
+		if($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+			// Get the group-id of the user
+			$client_group_id = $_SESSION["s"]["user"]["default_group"];
+		} else {
+			// Get the group-id from the data itself
+			$web = $app->db->queryOneRecord("SELECT sys_groupid FROM web_domain WHERE domain_id = ".intval($this->dataRecord['parent_domain_id']));
+			$client_group_id = $web['sys_groupid'];
+		}
+		/* get the name of the client */
+		$tmp = $app->db->queryOneRecord("SELECT name FROM sys_group WHERE groupid = " . $client_group_id);
+		$clientName = $tmp['name'];
+		if ($clientName == "") $clientName = 'default';
+		$clientName = convertClientName($clientName);
+		
+		return $clientName;
+	
+	}
+	
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/webdav_user_list.php b/interface/web/sites/webdav_user_list.php
new file mode 100644
index 0000000..bac3de9
--- /dev/null
+++ b/interface/web/sites/webdav_user_list.php
@@ -0,0 +1,51 @@
+<?php
+/*
+Copyright (c) 2010 Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+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.
+*/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/webdav_user.list.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+//* Check permissions for module
+$app->auth->check_module_permissions('sites');
+
+$app->uses('listform_actions');
+
+$app->listform_actions->onLoad();
+
+
+?>
\ No newline at end of file

--
Gitblit v1.9.1