From b2ea52214c939ee1167ef1b93210500fad5257d5 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Mon, 12 Sep 2011 11:47:20 -0400
Subject: [PATCH] Fixed: FS#684 - client templates not complete

---
 install/sql/incremental/upd_0018.sql                           |    2 +
 interface/web/client/tools.inc.php                             |   63 ++++++++++++++++++++++++++-----
 interface/web/client/lib/lang/en_client_template.lng           |    2 +
 interface/web/client/form/client_template.tform.php            |   16 ++++++++
 interface/web/client/templates/client_template_edit_limits.htm |   12 ++++++
 5 files changed, 84 insertions(+), 11 deletions(-)

diff --git a/install/sql/incremental/upd_0018.sql b/install/sql/incremental/upd_0018.sql
new file mode 100644
index 0000000..191f031
--- /dev/null
+++ b/install/sql/incremental/upd_0018.sql
@@ -0,0 +1,2 @@
+alter table client_template add column web_php_options varchar(255) not null default 'no' after limit_web_quota;
+alter table client_template add column ssh_chroot varchar(255) not null default 'no' after limit_shell_user;
\ No newline at end of file
diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php
index d38fdd5..0f93fcb 100644
--- a/interface/web/client/form/client_template.tform.php
+++ b/interface/web/client/form/client_template.tform.php
@@ -325,6 +325,14 @@
 			'rows'		=> '',
 			'cols'		=> ''
 		),
+		'web_php_options' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'default'	=> '',
+			'separator' => ',',
+			'valuelimit' => 'client:web_php_options',
+			'value'		=> array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP')
+		),
 		'limit_web_aliasdomain' => array (
 			'datatype'	=> 'INTEGER',
 			'formtype'	=> 'TEXT',
@@ -381,6 +389,14 @@
 			'rows'		=> '',
 			'cols'		=> ''
 		),
+		'ssh_chroot' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'default'	=> '',
+			'separator' => ',',
+			'valuelimit' => 'client:ssh_chroot',
+			'value'		=> array('no' => 'None', 'jailkit' => 'Jailkit')
+		),
 		'limit_webdav_user' => array (
 			'datatype'	=> 'INTEGER',
 			'formtype'	=> 'TEXT',
diff --git a/interface/web/client/lib/lang/en_client_template.lng b/interface/web/client/lib/lang/en_client_template.lng
index c6d9977..a79cb03 100644
--- a/interface/web/client/lib/lang/en_client_template.lng
+++ b/interface/web/client/lib/lang/en_client_template.lng
@@ -67,4 +67,6 @@
 $wb["limit_openvz_vm_txt"] = 'Max. number of virtual servers';
 $wb["limit_openvz_vm_template_id_txt"] = 'Force virtual server template';
 $wb["limit_openvz_vm_error_notint"] = 'The virtual server limit must be a number.';
+$wb["ssh_chroot_txt"] = 'SSH-Chroot Options';
+$wb["web_php_options_txt"] = 'PHP Options';
 ?>
\ No newline at end of file
diff --git a/interface/web/client/templates/client_template_edit_limits.htm b/interface/web/client/templates/client_template_edit_limits.htm
index 12fba84..ac62a7c 100644
--- a/interface/web/client/templates/client_template_edit_limits.htm
+++ b/interface/web/client/templates/client_template_edit_limits.htm
@@ -70,6 +70,12 @@
 				<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">
+						{tmpl_var name='web_php_options'}
+				</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>
@@ -86,6 +92,12 @@
 				<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">
+				<p class="label">{tmpl_var name='ssh_chroot_txt'}</p>
+				<div class="multiField">
+						{tmpl_var name='ssh_chroot'}
+				</div>
+			</div>
+			<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>
diff --git a/interface/web/client/tools.inc.php b/interface/web/client/tools.inc.php
index a6cd525..abc85ae 100644
--- a/interface/web/client/tools.inc.php
+++ b/interface/web/client/tools.inc.php
@@ -59,16 +59,57 @@
 			/* maybe the template is deleted in the meantime */
 			if (is_array($addLimits)){
 				foreach($addLimits as $k => $v){
-					if($k == 'limit_cron_type') {
-						$limits[$k] = $v;
-					} elseif($k == 'limit_cron_frequency') {
-						if($v < $limits[$k]) $limits[$k] = $v;
-					} else {
-						if ($limits[$k] > -1){
-							if ($v == -1) {
-								$limits[$k] = -1;
-							} else {
-								$limits[$k] += $v;
+					/* we can remove this condition, but it is easier to debug with it (don't add ids and other non-limit values) */
+					if (strpos($k, 'limit') !== false){
+						/* process the numerical limits */
+						if (is_numeric($v)){
+							/* switch for special cases */
+							switch ($k){
+							case 'limit_cron_frequency':
+								if ($v < $limits[$k]) $limits[$k] = $v;
+								/* silent adjustment of the minimum cron frequency to 1 minute */
+								/* maybe this control test should be done via validator definition in tform.php file, but I don't know how */
+								if ($limits[$k] < 1) $limits[$k] = 1;
+							break;
+
+							default:
+								if ($limits[$k] > -1){
+									if ($v == -1){
+										$limits[$k] = -1;
+									}
+									else {
+										$limits[$k] += $v;
+									}
+								}
+							}
+						}
+						/* process the string limits (CHECKBOXARRAY, SELECT etc.) */
+						elseif (is_string($v)){
+							switch ($app->tform->formDef["tabs"]["limits"]["fields"][$k]['formtype']){
+							case 'CHECKBOXARRAY':
+								if (!isset($limits[$k])){
+									$limits[$k] = array();
+								}
+
+								$limits_values = $limits[$k];
+								if (is_string($limits[$k])){
+									$limits_values = explode($app->tform->formDef["tabs"]["limits"]["fields"][$k]["separator"],$limits[$k]);
+								}
+								$additional_values = explode($app->tform->formDef["tabs"]["limits"]["fields"][$k]["separator"],$v);
+
+								/* unification of limits_values (master template) and additional_values (additional template) */
+								$limits_unified = array();
+								foreach($app->tform->formDef["tabs"]["limits"]["fields"][$k]["value"] as $key => $val){
+									if (in_array($key,$limits_values) || in_array($key,$additional_values)) $limits_unified[] = $key;
+								}
+								$limits[$k] = implode($app->tform->formDef["tabs"]["limits"]["fields"][$k]["separator"],$limits_unified);
+							break;
+							
+							case 'SELECT':
+								$limit_values = array_keys($app->tform->formDef["tabs"]["limits"]["fields"][$k]["value"]);
+								/* choose the lower index of the two SELECT items */
+								$limits[$k] = $limit_values[min(array_search($limits[$k], $limit_values), array_search($v, $limit_values))];
+							break;
 							}
 						}
 					}
@@ -82,7 +123,7 @@
 	 */
 	$update = '';
 	foreach($limits as $k => $v){
-		if (strpos($k, 'limit') !== false && !is_array($v)){
+		if ((strpos($k, 'limit') !== false or $k == 'ssh_chroot' or $k == 'web_php_options') && !is_array($v)){
 			if ($update != '') $update .= ', ';
 			$update .= '`' . $k . "`='" . $v . "'";
 		}

--
Gitblit v1.9.1