From 1e45da277b6e28ff65967d38c12b298872efb059 Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Fri, 01 Aug 2008 17:37:59 -0400 Subject: [PATCH] Added translation functions for the tabs of forms. --- interface/lib/classes/tform.inc.php | 316 ++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 232 insertions(+), 84 deletions(-) diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php index dd489c3..9f920c6 100644 --- a/interface/lib/classes/tform.inc.php +++ b/interface/lib/classes/tform.inc.php @@ -104,10 +104,11 @@ var $errorMessage = ''; var $dateformat = "d.m.Y"; - var $formDef; + var $formDef; var $wordbook; var $module; var $primary_id; + var $diffrec = array(); /** * Laden der Tabellendefinition @@ -134,10 +135,16 @@ $this->formDef = $form; $this->module = $module; + $wb = array(); + if($module == '') { + if(is_file("lib/lang/".$_SESSION["s"]["language"]."_".$this->formDef["name"].".lng")) { include_once("lib/lang/".$_SESSION["s"]["language"]."_".$this->formDef["name"].".lng"); + } } else { + if(is_file("../$module/lib/lang/".$_SESSION["s"]["language"]."_".$this->formDef["name"].".lng")) { include_once("../$module/lib/lang/".$_SESSION["s"]["language"]."_".$this->formDef["name"].".lng"); + } } $this->wordbook = $wb; @@ -155,7 +162,8 @@ */ function decode($record,$tab) { if(!is_array($this->formDef['tabs'][$tab])) $app->error("Tab ist leer oder existiert nicht (TAB: $tab)."); - if(is_array($record)) { + $new_record = ''; + if(is_array($record)) { foreach($this->formDef['tabs'][$tab]['fields'] as $key => $field) { switch ($field['datatype']) { case 'VARCHAR': @@ -190,6 +198,7 @@ } } + return $new_record; } @@ -215,7 +224,11 @@ $querystring = str_replace("{GROUPID}",$_SESSION["s"]["user"]["default_group"],$querystring); $querystring = str_replace("{GROUPS}",$_SESSION["s"]["user"]["groups"],$querystring); $table_idx = $this->formDef['db_table_idx']; - $querystring = str_replace("{RECORDID}",$record[$table_idx],$querystring); + + $tmp_recordid = (isset($record[$table_idx]))?$record[$table_idx]:0; + $querystring = str_replace("{RECORDID}",$tmp_recordid,$querystring); + unset($tmp_recordid); + $querystring = str_replace("{AUTHSQL}",$this->getAuthSQL('r'),$querystring); // Getting the records @@ -272,14 +285,14 @@ $val = $record[$key]; // If Datasource is set, get the data from there - if(is_array($field['datasource'])) { + if(isset($field['datasource']) && is_array($field['datasource'])) { $field["value"] = $this->getDatasourceData($field, $record); } switch ($field['formtype']) { case 'SELECT': + $out = ''; if(is_array($field['value'])) { - $out = ''; foreach($field['value'] as $k => $v) { $selected = ($k == $val)?' SELECTED':''; $out .= "<option value='$k'$selected>$v</option>\r\n"; @@ -313,8 +326,8 @@ break; case 'CHECKBOX': - $checked = (empty($val))?'':' CHECKED'; - $new_record[$key] = "<input name=\"".$key."\" type=\"checkbox\" value=\"".$field['value']."\" $checked>\r\n"; + $checked = ($val == $field['value'][1])?' CHECKED':''; + $new_record[$key] = "<input name=\"".$key."\" type=\"checkbox\" value=\"".$field['value'][1]."\" $checked>\r\n"; break; case 'CHECKBOXARRAY': @@ -361,7 +374,7 @@ foreach($this->formDef['tabs'][$tab]['fields'] as $key => $field) { // If Datasource is set, get the data from there - if(is_array($field['datasource'])) { + if(@is_array($field['datasource'])) { $field["value"] = $this->getDatasourceData($field, $record); } @@ -370,11 +383,12 @@ if(is_array($field['value'])) { $out = ''; foreach($field['value'] as $k => $v) { - $selected = ($k == $val)?' SELECTED':''; - $out .= "<option value='$k'$selected>$v</option>\r\n"; + //$selected = ($k == $val)?' SELECTED':''; + $selected = ''; + $out .= "<option value='$k'$selected>$v</option>\r\n"; } } - $new_record[$key] = $out; + if(isset($out)) $new_record[$key] = $out; break; case 'MULTIPLE': if(is_array($field['value'])) { @@ -397,8 +411,9 @@ break; case 'CHECKBOX': - $checked = (empty($field["default"]))?'':' CHECKED'; - $new_record[$key] = "<input name=\"".$key."\" type=\"checkbox\" value=\"".$field['value']."\" $checked>\r\n"; + // $checked = (empty($field["default"]))?'':' CHECKED'; + $checked = ($field["default"] == $field['value'][1])?' CHECKED':''; + $new_record[$key] = "<input name=\"".$key."\" type=\"checkbox\" value=\"".$field['value'][1]."\" $checked>\r\n"; break; case 'CHECKBOXARRAY': @@ -462,12 +477,12 @@ if(is_array($record)) { foreach($this->formDef['tabs'][$tab]['fields'] as $key => $field) { - if(is_array($field['validators'])) $this->validateField($key, $record[$key], $field['validators']); + if(isset($field['validators']) && is_array($field['validators'])) $this->validateField($key, (isset($record[$key]))?$record[$key]:'', $field['validators']); switch ($field['datatype']) { case 'VARCHAR': - if(!is_array($record[$key])) { - $new_record[$key] = addslashes($record[$key]); + if(!@is_array($record[$key])) { + $new_record[$key] = (isset($record[$key]))?addslashes($record[$key]):''; } else { $new_record[$key] = implode($field['separator'],$record[$key]); } @@ -483,10 +498,12 @@ if($record[$key] > 0) { list($tag,$monat,$jahr) = explode('.',$record[$key]); $new_record[$key] = mktime(0,0,0,$monat,$tag,$jahr); - } + } else { + $new_record[$key] = 0; + } break; case 'INTEGER': - $new_record[$key] = intval($record[$key]); + $new_record[$key] = (isset($record[$key]))?intval($record[$key]):0; //if($new_record[$key] != $record[$key]) $new_record[$key] = $field['default']; //if($key == 'refresh') die($record[$key]); break; @@ -499,7 +516,7 @@ } // The use of the field value is deprecated, use validators instead - if($field['regex'] != '') { + if(isset($field['regex']) && $field['regex'] != '') { // Enable that "." matches also newlines $field['regex'] .= 's'; if(!preg_match($field['regex'], $record[$key])) { @@ -526,7 +543,9 @@ function validateField($field_name, $field_value, $validators) { global $app; - + + $escape = '`'; + // loop trough the validators foreach($validators as $validator) { @@ -535,7 +554,11 @@ $validator['regex'] .= 's'; if(!preg_match($validator['regex'], $field_value)) { $errmsg = $validator['errmsg']; - $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + } else { + $this->errorMessage .= $errmsg."<br>\r\n"; + } } break; case 'UNIQUE': @@ -543,39 +566,63 @@ $num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM ".$escape.$this->formDef['db_table'].$escape. " WHERE $field_name = '".$app->db->quote($field_value)."'"); if($num_rec["number"] > 0) { $errmsg = $validator['errmsg']; - $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + } else { + $this->errorMessage .= $errmsg."<br>\r\n"; + } } } else { $num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM ".$escape.$this->formDef['db_table'].$escape. " WHERE $field_name = '".$app->db->quote($field_value)."' AND ".$this->formDef['db_table_idx']." != ".$this->primary_id); if($num_rec["number"] > 0) { $errmsg = $validator['errmsg']; - $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + } else { + $this->errorMessage .= $errmsg."<br>\r\n"; + } } } break; case 'NOTEMPTY': if(empty($field_value)) { $errmsg = $validator['errmsg']; - $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + } else { + $this->errorMessage .= $errmsg."<br>\r\n"; + } } break; case 'ISEMAIL': if(!preg_match("/^\w+[\w.-]*\w+@\w+[\w.-]*\w+\.[a-z]{2,10}$/i", $field_value)) { $errmsg = $validator['errmsg']; - $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + } else { + $this->errorMessage .= $errmsg."<br>\r\n"; + } } break; case 'ISINT': $tmpval = intval($field_value); if($tmpval === 0 and !empty($field_value)) { $errmsg = $validator['errmsg']; - $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + } else { + $this->errorMessage .= $errmsg."<br>\r\n"; + } } break; case 'ISPOSITIVE': if(!is_numeric($field_value) || $field_value <= 0){ $errmsg = $validator['errmsg']; - $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n"; + } else { + $this->errorMessage .= $errmsg."<br>\r\n"; + } } break; case 'CUSTOM': @@ -584,11 +631,14 @@ $validator_class = $validator['class']; $validator_function = $validator['function']; $app->uses($validator_class); - $this->errorMessage .= $app->$validator_class->$validator_function($validator); + $this->errorMessage .= $app->$validator_class->$validator_function($field_name, $field_value, $validator); } else { $this->errorMessage .= "Custom validator class or function is empty<br>\r\n"; } break; + default: + $this->errorMessage .= "Unknown Validator: ".$validator['type']; + break; } @@ -613,11 +663,11 @@ if(count($this->formDef['tabs'][$tab]['fields']) == 0) return ''; // checking permissions - if($this->formDef['auth'] == 'yes') { + if($this->formDef['auth'] == 'yes' && $_SESSION["s"]["user"]["typ"] != 'admin') { if($action == "INSERT") { if(!$this->checkPerm($primary_id,'i')) $this->errorMessage .= "Insert denied.<br>\r\n"; } else { - if(!$this->checkPerm($primary_id,'u')) $this->errorMessage .= "Insert denied.<br>\r\n"; + if(!$this->checkPerm($primary_id,'u')) $this->errorMessage .= "Update denied.<br>\r\n"; } } @@ -642,26 +692,61 @@ if($field['formtype'] == 'PASSWORD') { $sql_insert_key .= "`$key`, "; if($field['encryption'] == 'CRYPT') { - $sql_insert_val .= "'".crypt($record[$key])."', "; + $salt="$1$"; + for ($n=0;$n<11;$n++) { + $salt.=chr(mt_rand(64,126)); + } + $salt.="$"; + // $salt = substr(md5(time()),0,2); + $record[$key] = crypt($record[$key],$salt); } else { - $sql_insert_val .= "md5('".$record[$key]."'), "; + $record[$key] = md5($record[$key]); } + $sql_insert_val .= "'".addslashes($record[$key])."', "; + } elseif ($field['formtype'] == 'CHECKBOX') { + $sql_insert_key .= "`$key`, "; + if($record[$key] == '') { + // if a checkbox is not set, we set it to the unchecked value + $sql_insert_val .= "'".$field['value'][0]."', "; + $record[$key] = $field['value'][0]; + } else { + $sql_insert_val .= "'".$record[$key]."', "; + } } else { $sql_insert_key .= "`$key`, "; $sql_insert_val .= "'".$record[$key]."', "; } } else { if($field['formtype'] == 'PASSWORD') { - if($field['encryption'] == 'CRYPT') { - $sql_update .= "`$key` = '".crypt($record[$key])."', "; + if(isset($field['encryption']) && $field['encryption'] == 'CRYPT') { + $salt="$1$"; + for ($n=0;$n<11;$n++) { + $salt.=chr(mt_rand(64,126)); + } + $salt.="$"; + // $salt = substr(md5(time()),0,2); + $record[$key] = crypt($record[$key],$salt); } else { - $sql_update .= "`$key` = md5('".$record[$key]."'), "; + $record[$key] = md5($record[$key]); } + $sql_update .= "`$key` = '".addslashes($record[$key])."', "; + } elseif ($field['formtype'] == 'CHECKBOX') { + if($record[$key] == '') { + // if a checkbox is not set, we set it to the unchecked value + $sql_update .= "`$key` = '".$field['value'][0]."', "; + $record[$key] = $field['value'][0]; + } else { + $sql_update .= "`$key` = '".$record[$key]."', "; + } } else { $sql_update .= "`$key` = '".$record[$key]."', "; } } - } + } else { + // we unset the password filed, if empty to tell the datalog function + // that the password has not been changed + unset($record[$key]); + } } } @@ -694,16 +779,13 @@ } else { if($primary_id != 0) { $sql_update = substr($sql_update,0,-2); - $sql = "UPDATE ".$escape.$this->formDef['db_table'].$escape." SET ".$sql_update." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id; + $sql = "UPDATE ".$escape.$this->formDef['db_table'].$escape." SET ".$sql_update." WHERE ".$this->getAuthSQL('u')." AND ".$this->formDef['db_table_idx']." = ".$primary_id; if($sql_ext_where != '') $sql .= " and ".$sql_ext_where; } else { $app->error("Primary ID fehlt!"); } } - - // Daten in History tabelle speichern - if($this->errorMessage == '' and $this->formDef['db_history'] == 'yes') $this->datalogSave($action,$primary_id,$record); - + return $sql; } @@ -731,20 +813,24 @@ // definiere Tabs foreach( $this->formDef["tabs"] as $key => $tab) { - $tab['name'] = $key; + $tab['name'] = $key; if($tab['name'] == $active_tab) { - // Wenn Modul gesetzt, dann setzte template pfad relativ zu modul. - if($this->module != '') $tab["template"] = "../".$this->module."/".$tab["template"]; + // Wenn Modul gesetzt, dann setzte template pfad relativ zu modul. + if($this->module != '') $tab["template"] = "../".$this->module."/".$tab["template"]; - // �berpr�fe, ob das Template existiert, wenn nicht - // dann generiere das Template - if(!is_file($tab["template"])) { - $app->uses('tform_tpl_generator'); - $app->tform_tpl_generator->buildHTML($this->formDef,$tab['name']); - } + // �berpr�fe, ob das Template existiert, wenn nicht + // dann generiere das Template + + // Translate the title of the tab + $tab['title'] = $this->lng($tab['title']); + + if(!is_file($tab["template"])) { + $app->uses('tform_tpl_generator'); + $app->tform_tpl_generator->buildHTML($this->formDef,$tab['name']); + } - $app->tpl->setInclude('content_tpl',$tab["template"]); + $app->tpl->setInclude('content_tpl',$tab["template"]); $tab["active"] = 1; $_SESSION["s"]["form"]["tab"] = $tab['name']; } else { @@ -766,18 +852,24 @@ $app->tpl->setVar('form_active_tab',$active_tab); // Set form title - $form_hint = '<b>'.$this->formDef["title"].'</b>'; - if($this->formDef["description"] != '') $form_hint .= '<br><br>'.$this->formDef["description"]; + $form_hint = '<b>'.$this->lng($this->formDef["title"]).'</b>'; + if($this->formDef["description"] != '') $form_hint .= '<br><br>'.$this->lng($this->formDef["description"]); $app->tpl->setVar('form_hint',$form_hint); // Set Wordbook for this form $app->tpl->setVar($this->wordbook); - } + } + function getDataRecord($primary_id) { + global $app; + $escape = '`'; + $sql = "SELECT * FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id; + return $app->db->queryOneRecord($sql); + } + - - function datalogSave($action,$primary_id,$record_new) { + function datalogSave($action,$primary_id, $record_old, $record_new) { global $app,$conf; // F�ge Backticks nur bei unvollst�ndigen Tabellennamen ein @@ -787,32 +879,71 @@ $escape = '`'; } - if($action == "UPDATE") { - $sql = "SELECT * FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id; - $record_old = $app->db->queryOneRecord($sql); - } else { - $record_old = array(); - } - $diffrec = array(); - - if(is_array($record_new)) { + + if(is_array($record_new) && count($record_new) > 0) { foreach($record_new as $key => $val) { - if($record_old[$key] != $val) { - // Datensatz hat sich ge�ndert - $diffrec[$key] = array('old' => $record_old[$key], - 'new' => $val); + if(@$record_old[$key] != $val) { + // Record has changed + $diffrec[$key] = array('old' => @$record_old[$key], + 'new' => $val); + } + } + } elseif(is_array($record_old)) { + foreach($record_old as $key => $val) { + if($record_new[$key] != $val) { + // Record has changed + $diffrec[$key] = array('new' => $record_new[$key], + 'old' => $val); } } } + $this->diffrec = $diffrec; + + + // Full diff records for ISPConfig, they have a different format then the simple diffrec + $diffrec_full = array(); - if(count($diffrec) > 0) { - $diffstr = $app->db->quote(serialize($diffrec)); + if(is_array($record_old) && count($record_old) > 0) { + foreach($record_old as $key => $val) { + //if(isset($record_new[$key]) && $record_new[$key] != $val) { + if(!isset($record_new[$key]) || $record_new[$key] != $val) { + // Record has changed + $diffrec_full['old'][$key] = $val; + $diffrec_full['new'][$key] = $record_new[$key]; + } else { + $diffrec_full['old'][$key] = $val; + $diffrec_full['new'][$key] = $val; + } + } + } elseif(is_array($record_new)) { + foreach($record_new as $key => $val) { + if(isset($record_new[$key]) && $record_old[$key] != $val) { + // Record has changed + $diffrec_full['new'][$key] = $val; + $diffrec_full['old'][$key] = $record_old[$key]; + } else { + $diffrec_full['new'][$key] = $val; + $diffrec_full['old'][$key] = $val; + } + } + } + + // Insert the server_id, if the record has a server_id + $server_id = (isset($record_old["server_id"]) && $record_old["server_id"] > 0)?$record_old["server_id"]:0; + if(isset($record_new["server_id"])) $server_id = $record_new["server_id"]; + + if(count($this->diffrec) > 0) { + $diffstr = $app->db->quote(serialize($diffrec_full)); $username = $app->db->quote($_SESSION["s"]["user"]["username"]); $dbidx = $this->formDef['db_table_idx'].":".$primary_id; - $action = ($action == 'INSERT')?'i':'u'; - $sql = "INSERT INTO sys_datalog (dbtable,dbidx,action,tstamp,user,data) VALUES ('".$this->formDef['db_table']."','$dbidx','$action','".time()."','$username','$diffstr')"; - $app->db->query($sql); + // $action = ($action == 'INSERT')?'i':'u'; + + if($action == 'INSERT') $action = 'i'; + if($action == 'UPDATE') $action = 'u'; + if($action == 'DELETE') $action = 'd'; + $sql = "INSERT INTO sys_datalog (dbtable,dbidx,server_id,action,tstamp,user,data) VALUES ('".$this->formDef['db_table']."','$dbidx','$server_id','$action','".time()."','$username','$diffstr')"; + $app->db->query($sql); } return true; @@ -820,14 +951,18 @@ } function getAuthSQL($perm) { + if($_SESSION["s"]["user"]["typ"] == 'admin') { + return '1'; + } else { + $groups = ( $_SESSION["s"]["user"]["groups"] ) ? $_SESSION["s"]["user"]["groups"] : 0; + $sql = '('; + $sql .= "(sys_userid = ".$_SESSION["s"]["user"]["userid"]." AND sys_perm_user like '%$perm%') OR "; + $sql .= "(sys_groupid IN (".$groups.") AND sys_perm_group like '%$perm%') OR "; + $sql .= "sys_perm_other like '%$perm%'"; + $sql .= ')'; - $sql = '('; - $sql .= "(sys_userid = ".$_SESSION["s"]["user"]["userid"]." AND sys_perm_user like '%$perm%') OR "; - $sql .= "(sys_groupid IN (".$_SESSION["s"]["user"]["groups"].") AND sys_perm_group like '%$perm%') OR "; - $sql .= "sys_perm_other like '%$perm%'"; - $sql .= ')'; - - return $sql; + return $sql; + } } /* @@ -853,8 +988,8 @@ } } else { $result = false; - if($this->formDef["auth_preset"]["userid"] == $_SESSION["s"]["user"]["userid"] && stristr($perm,$this->formDef["auth_preset"]["perm_user"])) $result = true; - if($this->formDef["auth_preset"]["groupid"] == $_SESSION["s"]["user"]["groupid"] && stristr($perm,$this->formDef["auth_preset"]["perm_group"])) $result = true; + if(@$this->formDef["auth_preset"]["userid"] == $_SESSION["s"]["user"]["userid"] && stristr($perm,$this->formDef["auth_preset"]["perm_user"])) $result = true; + if(@$this->formDef["auth_preset"]["groupid"] == $_SESSION["s"]["user"]["groupid"] && stristr($perm,$this->formDef["auth_preset"]["perm_group"])) $result = true; if(@stristr($this->formDef["auth_preset"]["perm_other"],$perm)) $result = true; // if preset == 0, everyone can insert a record of this type @@ -870,7 +1005,7 @@ // Welcher Tab wird angezeigt if($this->errorMessage == '') { // wenn kein Fehler vorliegt - if($_REQUEST["next_tab"] != '') { + if(isset($_REQUEST["next_tab"]) && $_REQUEST["next_tab"] != '') { // wenn n�chster Tab bekannt $active_tab = $_REQUEST["next_tab"]; } else { @@ -888,6 +1023,19 @@ function getCurrentTab() { return $_SESSION["s"]["form"]["tab"]; } + + + // translation function for forms, tries the form wordbook first and if this fails, it tries the global wordbook + function lng($msg) { + global $app; + + if(isset($this->wordbook[$msg])) { + return $this->wordbook[$msg]; + } else { + return $app->lng($msg); + } + + } } -- Gitblit v1.9.1