From b94726392eb39dcad9c83d4732f717db90fe6f34 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Thu, 05 Mar 2009 11:16:54 -0500
Subject: [PATCH] disable some fields in edit mode.

---
 interface/lib/classes/tform.inc.php |   85 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 70 insertions(+), 15 deletions(-)

diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php
index 813ff80..5a53a4f 100644
--- a/interface/lib/classes/tform.inc.php
+++ b/interface/lib/classes/tform.inc.php
@@ -130,9 +130,7 @@
                 $this->module = $module;
 				$wb = array();
 				
-				$lng_file = ISPC_WEB_PATH.'/lang/lib/lang/'.$_SESSION['s']['language'].'_tform.lng';
-				if(!file_exists($lng_file)) $lng_file = ISPC_WEB_PATH.'/lang/lib/lang/en'.'_tform.lng';
-				include($lng_file);
+				include_once(ISPC_ROOT_PATH.'/lib/lang/'.$_SESSION['s']['language'].'.lng');
                 if($module == '') {
 					$lng_file = "lib/lang/".$_SESSION["s"]["language"]."_".$this->formDef["name"].".lng";
 					if(!file_exists($lng_file)) $lng_file = "lib/lang/en_".$this->formDef["name"].".lng";
@@ -254,6 +252,45 @@
                 return $values;
 
         }
+		
+		//* If the parameter 'valuelimit' is set
+		function applyValueLimit($limit,$values) {
+			
+			global $app;
+			
+			$limit_parts = explode(':',$limit);
+			
+			//* values are limited to a comma separated list
+			if($limit_parts[0] == 'list') {
+				$allowed = explode(',',$limit_parts[1]);
+			}
+			
+			//* values are limited to a field in the client settings
+			if($limit_parts[0] == 'client') {
+				if($_SESSION["s"]["user"]["typ"] == 'admin') {
+					return $values;
+				} else {
+					$client_group_id = $_SESSION["s"]["user"]["default_group"];
+					$client = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+					$allowed = explode(',',$client['lm']);
+				}
+			}
+			
+			//* values are limited to a field in the system settings
+			if($limit_parts[0] == 'system') {
+				$app->uses('getconf');
+				$tmp_conf = $app->getconf->get_global_config($limit_parts[1]);
+				$tmp_key = $limit_parts[2];
+				$allowed = $tmp_conf[$tmp_key];
+			}
+			
+			$values_new = array();
+			foreach($values as $key => $val) {
+				if(in_array($key,$allowed)) $values_new[$key] = $val;
+			}
+			
+			return $values_new;
+		}
 
 
         /**
@@ -283,6 +320,11 @@
                                         if(isset($field['datasource']) && is_array($field['datasource'])) {
                                                 $field["value"] = $this->getDatasourceData($field, $record);
                                         }
+										
+										// If a limitation for the values is set
+										if(isset($field['valuelimit']) && is_array($field["value"])) {
+											$field["value"] = $this->applyValueLimit($field['valuelimit'],$field["value"]);
+										}
 
                                         switch ($field['formtype']) {
                                         case 'SELECT':
@@ -342,7 +384,7 @@
                                                                 $out .= "<span class=\"wf_oneChoice\">\r\n
                                                                 <input type=\"checkbox\" value=\"$k\" id=\"".$key."[]\" name=\"".$key."[]\" $checked>\r\n
                                                                 <label for=\"".$key."[]\" id=\"".$key."[]-L\" class=\"wf_postField\">$v</label>\r\n
-                                                                </span><br />\r\n";
+                                                                </span>\r\n";
                                                         }
                                                 }
                                                 $new_record[$key] = $out;
@@ -375,8 +417,13 @@
 
                                 // If Datasource is set, get the data from there
                                 if(@is_array($field['datasource'])) {
-                                        $field["value"] = $this->getDatasourceData($field, $record);
+                                	$field["value"] = $this->getDatasourceData($field, $record);
                                 }
+								
+								// If a limitation for the values is set
+								if(isset($field['valuelimit']) && is_array($field["value"])) {
+									$field["value"] = $this->applyValueLimit($field['valuelimit'],$field["value"]);
+								}
 
                                 switch ($field['formtype']) {
                                 case 'SELECT':
@@ -433,7 +480,7 @@
                                                         $out .= "<span class=\"wf_oneChoice\">\r\n
                                                         <input type=\"checkbox\" value=\"$k\" id=\"".$key."[]\" name=\"".$key."[]\" $checked>\r\n
                                                         <label for=\"".$key."[]\" id=\"".$key."[]-L\" class=\"wf_postField\">$v</label>\r\n
-                                                        </span><br />\r\n";
+                                                        </span>\r\n";
                                                 }
                                         }
                                         $new_record[$key] = $out;
@@ -488,7 +535,7 @@
                                 switch ($field['datatype']) {
                                 case 'VARCHAR':
                                         if(!@is_array($record[$key])) {
-                                                $new_record[$key] = (isset($record[$key]))?$app->db->quote($record[$key]):'';
+												$new_record[$key] = (isset($record[$key]))?$app->db->quote($record[$key]):'';
                                         } else {
                                                 $new_record[$key] = implode($field['separator'],$record[$key]);
                                         }
@@ -632,14 +679,22 @@
                                         }
                                 break;
 								case 'ISIPV4':
-                                        if(!preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $field_value)) {
-                                                $errmsg = $validator['errmsg'];
-                                                if(isset($this->wordbook[$errmsg])) {
-                                                    $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
-												} else {
-													$this->errorMessage .= $errmsg."<br />\r\n";
-												}
-                                        }
+								$vip=1;
+								if(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $field_value)){
+								$groups=explode(".",$field_value);
+								foreach($groups as $group){
+									if($group<0 OR $group>255)
+									$vip=0;
+								}
+								}else{$vip=0;}
+                                        if($vip==0) {
+										$errmsg = $validator['errmsg'];
+                                          if(isset($this->wordbook[$errmsg])) {
+                                             $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
+										  } else {
+											 $this->errorMessage .= $errmsg."<br />\r\n";
+										  }
+										}
                                 break;
                                 case 'CUSTOM':
                                         // Calls a custom class to validate this record

--
Gitblit v1.9.1