| | |
| | | <?php
|
| | |
|
| | | /*
|
| | | Copyright (c) 2005, Till Brehm, projektfarm Gmbh
|
| | | Copyright (c) 2007, Till Brehm, projektfarm Gmbh
|
| | | All rights reserved.
|
| | |
|
| | | Redistribution and use in source and binary forms, with or without modification,
|
| | |
| | | /**
|
| | | * Formularbehandlung
|
| | | *
|
| | | * Funktionen zur Umwandlung von Formulardaten
|
| | | * sowie zum vorbereiten von HTML und SQL
|
| | | * Ausgaben
|
| | | * Functions to validate, display and save form values
|
| | | *
|
| | | * Tabellendefinition
|
| | | * Database table field definitions
|
| | | *
|
| | | * Datentypen:
|
| | | * - INTEGER (Wandelt Ausdrücke in Int um)
|
| | | * Datatypes:
|
| | | * - INTEGER (Converts data to int automatically)
|
| | | * - DOUBLE
|
| | | * - CURRENCY (Formatiert Zahlen nach Währungsnotation)
|
| | | * - VARCHAR (kein weiterer Format Check)
|
| | | * - DATE (Datumsformat, Timestamp Umwandlung)
|
| | | * - CURRENCY (Formats digits in currency notation)
|
| | | * - VARCHAR (No format check)
|
| | | * - DATE (Date format, converts from and to linux timestamps automatically)
|
| | | *
|
| | | * Formtype:
|
| | | * - TEXT (normales Textfeld)
|
| | | * - PASSWORD (Feldinhalt wird nicht angezeigt)
|
| | | * - SELECT (Gibt Werte als option Feld aus)
|
| | | * - MULTIPLE (Select-Feld mit nehreren Werten)
|
| | | * - TEXT (Normal text field)
|
| | | * - PASSWORD (password field, the content will not be displayed again to the user)
|
| | | * - SELECT (Option fiield)
|
| | | * - MULTIPLE (Allows selection of multiple values)
|
| | | *
|
| | | * VALUE:
|
| | | * - Wert oder Array
|
| | | * - Value or array
|
| | | *
|
| | | * SEPARATOR
|
| | | * - Trennzeichen für multiple Felder
|
| | | * - separator char used for fileds with multiple values
|
| | | *
|
| | | * Hinweis:
|
| | | * Das ID-Feld ist nicht bei den Table Values einzufügen.
|
| | | * Hint: The auto increment (ID) filed of the table has not be be definied eoarately.
|
| | | *
|
| | | * @package form
|
| | | * @author Till Brehm
|
| | | * @version 1.1
|
| | | */
|
| | |
|
| | | class tform {
|
| | |
|
| | | /**
|
| | | * Definition der Tabelle (array)
|
| | | * Table definition (array)
|
| | | * @var tableDef
|
| | | */
|
| | | var $tableDef;
|
| | |
| | | var $action;
|
| | |
|
| | | /**
|
| | | * Tabellenname (String)
|
| | | * Table name (String)
|
| | | * @var table_name
|
| | | */
|
| | | var $table_name;
|
| | |
|
| | | /**
|
| | | * Debug Variable
|
| | | * Enable debigging
|
| | | * @var debug
|
| | | */
|
| | | var $debug = 0;
|
| | |
|
| | | /**
|
| | | * name des primary Field der Tabelle (string)
|
| | | * name of the primary field of the datbase table (string)
|
| | | * @var table_index
|
| | | */
|
| | | var $table_index;
|
| | |
|
| | | /**
|
| | | * enthält die Fehlermeldung bei Überprüfung
|
| | | * der Variablen mit Regex
|
| | | * contains the error message
|
| | | * @var errorMessage
|
| | | */
|
| | | var $errorMessage = '';
|
| | |
| | | var $diffrec = array();
|
| | |
|
| | | /**
|
| | | * Laden der Tabellendefinition
|
| | | * Loading of the table definition
|
| | | *
|
| | | * @param file: Pfad zur Tabellendefinition
|
| | | * @param file: path to the form definition file
|
| | | * @return true
|
| | | */
|
| | | /*
|
| | |
| | | $this->module = $module;
|
| | | $wb = array();
|
| | |
|
| | | include_once(ISPC_ROOT_PATH.'/lib/lang/'.$_SESSION['s']['language'].'.lng');
|
| | | 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");
|
| | | }
|
| | | $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";
|
| | | include($lng_file);
|
| | | } 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");
|
| | | }
|
| | | $lng_file = "../$module/lib/lang/".$_SESSION["s"]["language"]."_".$this->formDef["name"].".lng";
|
| | | if(!file_exists($lng_file)) $lng_file = "../$module/lib/lang/en_".$this->formDef["name"].".lng";
|
| | | include($lng_file);
|
| | | }
|
| | | $this->wordbook = $wb;
|
| | |
|
| | |
| | |
|
| | |
|
| | | /**
|
| | | * Konvertiert die Daten des übergebenen assoziativen
|
| | | * Arrays in "menschenlesbare" Form.
|
| | | * Datentyp Konvertierung, z.B. für Ausgabe in Listen.
|
| | | * Converts the data in the array to human readable format
|
| | | * Datatype conversion e.g. to show the data in lists
|
| | | *
|
| | | * @param record
|
| | | * @return record
|
| | | */
|
| | | function decode($record,$tab) {
|
| | | if(!is_array($this->formDef['tabs'][$tab])) $app->error("Tab ist leer oder existiert nicht (TAB: $tab).");
|
| | | if(!is_array($this->formDef['tabs'][$tab])) $app->error("Tab does not exist or the tab is empty (TAB: $tab).");
|
| | | $new_record = '';
|
| | | if(is_array($record)) {
|
| | | foreach($this->formDef['tabs'][$tab]['fields'] as $key => $field) {
|
| | |
| | | $app->uses($datasource_class);
|
| | | $values = $app->$datasource_class->$datasource_function($field, $record);
|
| | | } else {
|
| | | $this->errorMessage .= "Custom datasource class or function is empty<br>\r\n";
|
| | | $this->errorMessage .= "Custom datasource class or function is empty<br />\r\n";
|
| | | }
|
| | | }
|
| | |
|
| | | 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;
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * Record für Ausgabe in Formularen vorbereiten.
|
| | | * Prepare the data record to show the data in a form.
|
| | | *
|
| | | * @param record = Datensatz als Array
|
| | | * @param action = NEW oder EDIT
|
| | |
| | |
|
| | | $this->action = $action;
|
| | |
|
| | | if(!is_array($this->formDef)) $app->error("Keine Formdefinition vorhanden.");
|
| | | if(!is_array($this->formDef['tabs'][$tab])) $app->error("Tab ist leer oder existiert nicht (TAB: $tab).");
|
| | | if(!is_array($this->formDef)) $app->error("No form definition found.");
|
| | | if(!is_array($this->formDef['tabs'][$tab])) $app->error("The tab is empty or does not exist (TAB: $tab).");
|
| | |
|
| | | $new_record = array();
|
| | | if($action == 'EDIT') {
|
| | |
| | | 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':
|
| | |
| | | case 'MULTIPLE':
|
| | | if(is_array($field['value'])) {
|
| | |
|
| | | // aufsplitten ergebnisse
|
| | | // Split
|
| | | $vals = explode($field['separator'],$val);
|
| | |
|
| | | // HTML schreiben
|
| | | // write HTML
|
| | | $out = '';
|
| | | foreach($field['value'] as $k => $v) {
|
| | |
|
| | |
| | |
|
| | | case 'CHECKBOX':
|
| | | $checked = ($val == $field['value'][1])?' CHECKED':'';
|
| | | $new_record[$key] = "<input name=\"".$key."\" type=\"checkbox\" value=\"".$field['value'][1]."\" $checked>\r\n";
|
| | | $new_record[$key] = "<input name=\"".$key."\" id=\"".$key."\" value=\"".$field['value'][1]."\" type=\"checkbox\" $checked />\r\n";
|
| | | break;
|
| | |
|
| | | case 'CHECKBOXARRAY':
|
| | |
| | | foreach($vals as $tvl) {
|
| | | if(trim($tvl) == trim($k)) $checked = ' CHECKED';
|
| | | }
|
| | | $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";
|
| | | $out .= "<label for=\"".$key."[]\" class=\"inlineLabel\"><input name=\"".$key."[]\" id=\"".$key."[]\" value=\"$k\" type=\"checkbox\" $checked /> $v</label>\r\n";
|
| | | }
|
| | | }
|
| | | $new_record[$key] = $out;
|
| | |
| | | $out = '';
|
| | | foreach($field['value'] as $k => $v) {
|
| | | $checked = ($k == $val)?' CHECKED':'';
|
| | | $out .= "<span class=\"wf_oneChoice\">\r\n
|
| | | <input type=\"radio\" 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";
|
| | | //$out .= "<label for=\"".$key."[]\" class=\"inlineLabel\"><input name=\"".$key."[]\" id=\"".$key."[]\" value=\"$k\" type=\"radio\" $checked/> $v</label>\r\n";
|
| | | $out .= "<input name=\"".$key."[]\" id=\"".$key."[]\" value=\"$k\" type=\"radio\" $checked/> $v\r\n";
|
| | | }
|
| | | }
|
| | | $new_record[$key] = $out;
|
| | |
| | |
|
| | | // 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':
|
| | |
| | | case 'CHECKBOX':
|
| | | // $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";
|
| | | $new_record[$key] = "<input name=\"".$key."\" id=\"".$key."\" value=\"".$field['value'][1]."\" type=\"checkbox\" $checked />\r\n"; |
| | | break;
|
| | |
|
| | | case 'CHECKBOXARRAY':
|
| | |
| | | foreach($vals as $tvl) {
|
| | | if(trim($tvl) == trim($k)) $checked = ' CHECKED';
|
| | | }
|
| | | $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";
|
| | | $out .= "<label for=\"".$key."[]\" class=\"inlineLabel\"><input name=\"".$key."[]\" id=\"".$key."[]\" value=\"$k\" type=\"checkbox\" $checked /> $v</label>\r\n";
|
| | | }
|
| | | }
|
| | | $new_record[$key] = $out;
|
| | |
| | | $out = '';
|
| | | foreach($field['value'] as $k => $v) {
|
| | | $checked = ($k == $field["default"])?' CHECKED':'';
|
| | | $out .= "<span class=\"wf_oneChoice\">\r\n
|
| | | <input type=\"radio\" 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";
|
| | | //$out .= "<label for=\"".$key."[]\" class=\"inlineLabel\"><input name=\"".$key."[]\" id=\"".$key."[]\" value=\"$k\" type=\"radio\" $checked/> $v</label>\r\n";
|
| | | $out .= "<input name=\"".$key."[]\" id=\"".$key."[]\" value=\"$k\" type=\"radio\" $checked/> $v\r\n";
|
| | | }
|
| | | }
|
| | | $new_record[$key] = $out;
|
| | |
| | | }
|
| | |
|
| | | /**
|
| | | * Record in "maschinen lesbares" Format überführen
|
| | | * und Werte gegen reguläre Ausdrücke prüfen.
|
| | | * Rewrite the record data to be stored in the database
|
| | | * and check values with regular expressions.
|
| | | *
|
| | | * @param record = Datensatz als Array
|
| | | * @return record
|
| | |
| | | function encode($record,$tab) {
|
| | | global $app;
|
| | |
|
| | | if(!is_array($this->formDef['tabs'][$tab])) $app->error("Tab ist leer oder existiert nicht (TAB: $tab).");
|
| | | if(!is_array($this->formDef['tabs'][$tab])) $app->error("Tab is empty or does not exist (TAB: $tab).");
|
| | | //$this->errorMessage = '';
|
| | |
|
| | | if(is_array($record)) {
|
| | |
| | | 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]);
|
| | | }
|
| | |
| | | }
|
| | | break;
|
| | | case 'INTEGER':
|
| | | $new_record[$key] = (isset($record[$key]))?intval($record[$key]):0;
|
| | | $new_record[$key] = (isset($record[$key]))?$record[$key]:0;
|
| | | //if($new_record[$key] != $record[$key]) $new_record[$key] = $field['default'];
|
| | | //if($key == 'refresh') die($record[$key]);
|
| | | break;
|
| | |
| | | $field['regex'] .= 's';
|
| | | if(!preg_match($field['regex'], $record[$key])) {
|
| | | $errmsg = $field['errmsg'];
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n";
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | if(!preg_match($validator['regex'], $field_value)) {
|
| | | $errmsg = $validator['errmsg'];
|
| | | if(isset($this->wordbook[$errmsg])) {
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n";
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
|
| | | } else {
|
| | | $this->errorMessage .= $errmsg."<br>\r\n";
|
| | | $this->errorMessage .= $errmsg."<br />\r\n";
|
| | | }
|
| | | }
|
| | | break;
|
| | |
| | | if($num_rec["number"] > 0) {
|
| | | $errmsg = $validator['errmsg'];
|
| | | if(isset($this->wordbook[$errmsg])) {
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n";
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
|
| | | } else {
|
| | | $this->errorMessage .= $errmsg."<br>\r\n";
|
| | | $this->errorMessage .= $errmsg."<br />\r\n";
|
| | | }
|
| | | }
|
| | | } else {
|
| | |
| | | if($num_rec["number"] > 0) {
|
| | | $errmsg = $validator['errmsg'];
|
| | | if(isset($this->wordbook[$errmsg])) {
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n";
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
|
| | | } else {
|
| | | $this->errorMessage .= $errmsg."<br>\r\n";
|
| | | $this->errorMessage .= $errmsg."<br />\r\n";
|
| | | }
|
| | | }
|
| | | }
|
| | |
| | | if(empty($field_value)) {
|
| | | $errmsg = $validator['errmsg'];
|
| | | if(isset($this->wordbook[$errmsg])) {
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n";
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
|
| | | } else {
|
| | | $this->errorMessage .= $errmsg."<br>\r\n";
|
| | | $this->errorMessage .= $errmsg."<br />\r\n";
|
| | | }
|
| | | }
|
| | | break;
|
| | |
| | | if(!preg_match("/^\w+[\w.-]*\w+@\w+[\w.-]*\w+\.[a-z]{2,10}$/i", $field_value)) {
|
| | | $errmsg = $validator['errmsg'];
|
| | | if(isset($this->wordbook[$errmsg])) {
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n";
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
|
| | | } else {
|
| | | $this->errorMessage .= $errmsg."<br>\r\n";
|
| | | $this->errorMessage .= $errmsg."<br />\r\n";
|
| | | }
|
| | | }
|
| | | break;
|
| | |
| | | if($tmpval === 0 and !empty($field_value)) {
|
| | | $errmsg = $validator['errmsg'];
|
| | | if(isset($this->wordbook[$errmsg])) {
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n";
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
|
| | | } else {
|
| | | $this->errorMessage .= $errmsg."<br>\r\n";
|
| | | $this->errorMessage .= $errmsg."<br />\r\n";
|
| | | }
|
| | | }
|
| | | break;
|
| | |
| | | if(!is_numeric($field_value) || $field_value <= 0){
|
| | | $errmsg = $validator['errmsg'];
|
| | | if(isset($this->wordbook[$errmsg])) {
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n";
|
| | | $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
|
| | | } else {
|
| | | $this->errorMessage .= $errmsg."<br>\r\n";
|
| | | $this->errorMessage .= $errmsg."<br />\r\n";
|
| | | }
|
| | | }
|
| | | break;
|
| | | case 'ISIPV4':
|
| | | $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
|
| | |
| | | $app->uses($validator_class);
|
| | | $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";
|
| | | $this->errorMessage .= "Custom validator class or function is empty<br />\r\n";
|
| | | }
|
| | | break;
|
| | | default:
|
| | |
| | | }
|
| | |
|
| | | /**
|
| | | * SQL Statement für Record erzeugen.
|
| | | * Create the SQL staement.
|
| | | *
|
| | | * @param record = Datensatz als Array
|
| | | * @param action = INSERT oder UPDATE
|
| | |
| | | // checking permissions
|
| | | 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";
|
| | | if(!$this->checkPerm($primary_id,'i')) $this->errorMessage .= "Insert denied.<br />\r\n";
|
| | | } else {
|
| | | if(!$this->checkPerm($primary_id,'u')) $this->errorMessage .= "Update denied.<br>\r\n";
|
| | | if(!$this->checkPerm($primary_id,'u')) $this->errorMessage .= "Update denied.<br />\r\n";
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | $sql_insert_val = '';
|
| | | $sql_update = '';
|
| | |
|
| | | if(!is_array($this->formDef)) $app->error("Keine Formulardefinition vorhanden.");
|
| | | if(!is_array($this->formDef['tabs'][$tab])) $app->error("Tab ist leer oder existiert nicht (TAB: $tab).");
|
| | | if(!is_array($this->formDef)) $app->error("Form definition not found.");
|
| | | if(!is_array($this->formDef['tabs'][$tab])) $app->error("The tab is empty or does not exist (TAB: $tab).");
|
| | |
|
| | | // gehe durch alle Felder des Tabs
|
| | | // go trough all fields of the tab
|
| | | if(is_array($record)) {
|
| | | foreach($this->formDef['tabs'][$tab]['fields'] as $key => $field) {
|
| | | // Wenn es kein leeres Passwortfeld ist
|
| | |
| | | }
|
| | |
|
| | |
|
| | | // Füge Backticks nur bei unvollständigen Tabellennamen ein
|
| | | // Add backticks for incomplete table names
|
| | | if(stristr($this->formDef['db_table'],'.')) {
|
| | | $escape = '';
|
| | | } else {
|
| | |
| | |
|
| | | if($action == "INSERT") {
|
| | | if($this->formDef['auth'] == 'yes') {
|
| | | // Setze User und Gruppe
|
| | | // Set user and group
|
| | | $sql_insert_key .= "`sys_userid`, ";
|
| | | $sql_insert_val .= ($this->formDef["auth_preset"]["userid"] > 0)?"'".$this->formDef["auth_preset"]["userid"]."', ":"'".$_SESSION["s"]["user"]["userid"]."', ";
|
| | | $sql_insert_key .= "`sys_groupid`, ";
|
| | |
| | | $sql_insert_val = substr($sql_insert_val,0,-2);
|
| | | $sql = "INSERT INTO ".$escape.$this->formDef['db_table'].$escape." ($sql_insert_key) VALUES ($sql_insert_val)";
|
| | | } else {
|
| | | if($this->formDef['auth'] == 'yes') {
|
| | | if($primary_id != 0) {
|
| | | $sql_update = substr($sql_update,0,-2);
|
| | | $sql = "UPDATE ".$escape.$this->formDef['db_table'].$escape." SET ".$sql_update." WHERE ".$this->getAuthSQL('u')." AND ".$this->formDef['db_table_idx']." = ".$primary_id;
|
| | |
| | | } else {
|
| | | $app->error("Primary ID fehlt!");
|
| | | }
|
| | | } 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;
|
| | | if($sql_ext_where != '') $sql .= " and ".$sql_ext_where;
|
| | | } else {
|
| | | $app->error("Primary ID fehlt!");
|
| | | }
|
| | | }
|
| | | //* return a empty string if there is nothing to update
|
| | | if(trim($sql_update) == '') $sql = '';
|
| | | }
|
| | |
|
| | | return $sql;
|
| | |
| | |
|
| | | $active_tab = $this->getNextTab();
|
| | |
|
| | | // definiere Tabs
|
| | | // go trough the tabs
|
| | | foreach( $this->formDef["tabs"] as $key => $tab) {
|
| | |
|
| | | $tab['name'] = $key;
|
| | | if($tab['name'] == $active_tab) {
|
| | |
|
| | | // Wenn Modul gesetzt, dann setzte template pfad relativ zu modul.
|
| | | // If module is set, then set the template path relative to the module..
|
| | | if($this->module != '') $tab["template"] = "../".$this->module."/".$tab["template"];
|
| | |
|
| | | // überprüfe, ob das Template existiert, wenn nicht
|
| | | // dann generiere das Template
|
| | | // Generate the template if it does not exist yet.
|
| | |
|
| | | // Translate the title of the tab
|
| | | $tab['title'] = $this->lng($tab['title']);
|
| | |
| | | $tab["active"] = 0;
|
| | | }
|
| | |
|
| | | // Die Datenfelder werden für die Tabs nicht benötigt
|
| | | // Unset unused variables.
|
| | | unset($tab["fields"]);
|
| | | unset($tab["plugins"]);
|
| | |
|
| | |
| | | function datalogSave($action,$primary_id, $record_old, $record_new) {
|
| | | global $app,$conf;
|
| | |
|
| | | // Füge Backticks nur bei unvollständigen Tabellennamen ein
|
| | | // Add backticks for incomplete table names.
|
| | | if(stristr($this->formDef['db_table'],'.')) {
|
| | | $escape = '';
|
| | | } else {
|
| | | $escape = '`';
|
| | | }
|
| | |
|
| | | $diffrec = array();
|
| | | |
| | | $this->diffrec = array();
|
| | | /*
|
| | | if(is_array($record_new) && count($record_new) > 0) {
|
| | | foreach($record_new as $key => $val) {
|
| | | if(@$record_old[$key] != $val) {
|
| | |
| | | }
|
| | | }
|
| | | $this->diffrec = $diffrec;
|
| | | |
| | | */
|
| | |
|
| | | // Full diff records for ISPConfig, they have a different format then the simple diffrec
|
| | | $diffrec_full = array();
|
| | |
| | | // Record has changed
|
| | | $diffrec_full['old'][$key] = $val;
|
| | | $diffrec_full['new'][$key] = $record_new[$key];
|
| | | $this->diffrec[$key] = array( 'new' => $record_new[$key],
|
| | | 'old' => $val);
|
| | | } else {
|
| | | $diffrec_full['old'][$key] = $val;
|
| | | $diffrec_full['new'][$key] = $val;
|
| | |
| | | // Record has changed
|
| | | $diffrec_full['new'][$key] = $val;
|
| | | $diffrec_full['old'][$key] = $record_old[$key];
|
| | | $this->diffrec[$key] = array( 'old' => @$record_old[$key],
|
| | | 'new' => $val);
|
| | | } else {
|
| | | $diffrec_full['new'][$key] = $val;
|
| | | $diffrec_full['old'][$key] = $val;
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | //$this->diffrec = $diffrec;
|
| | | // 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));
|
| | | $diffstr = addslashes(serialize($diffrec_full));
|
| | | $username = $app->db->quote($_SESSION["s"]["user"]["username"]);
|
| | | $dbidx = $this->formDef['db_table_idx'].":".$primary_id;
|
| | | // $action = ($action == 'INSERT')?'i':'u';
|
| | |
| | | }
|
| | |
|
| | | /*
|
| | | Diese funktion überprüft, ob ein User die Berechtigung $perm für den Datensatz mit der ID $record_id
|
| | | hat. It record_id = 0, dann wird gegen die user Defaults des Formulares getestet.
|
| | | This function checks if a user has the parmissions $perm for the data record with the ID $record_id
|
| | | If record_id = 0, the the permissions are tested against the defaults of the form file.
|
| | | */
|
| | | function checkPerm($record_id,$perm) {
|
| | | global $app;
|
| | |
|
| | | if($record_id > 0) {
|
| | | // Füge Backticks nur bei unvollständigen Tabellennamen ein
|
| | | // Add backticks for incomplete table names.
|
| | | if(stristr($this->formDef['db_table'],'.')) {
|
| | | $escape = '';
|
| | | } else {
|
| | |
| | | }
|
| | |
|
| | | function getNextTab() {
|
| | | // Welcher Tab wird angezeigt
|
| | | // Which tab is shown
|
| | | if($this->errorMessage == '') {
|
| | | // wenn kein Fehler vorliegt
|
| | | // If there is no error
|
| | | if(isset($_REQUEST["next_tab"]) && $_REQUEST["next_tab"] != '') {
|
| | | // wenn nächster Tab bekannt
|
| | | // If the next tab is known
|
| | | $active_tab = $_REQUEST["next_tab"];
|
| | | } else {
|
| | | // ansonsten ersten tab nehmen
|
| | | // else use the default tab
|
| | | $active_tab = $this->formDef['tab_default'];
|
| | | }
|
| | | } else {
|
| | | // bei Fehlern den gleichen Tab nochmal anzeigen
|
| | | // Show the same tab again in case of an error
|
| | | $active_tab = $_SESSION["s"]["form"]["tab"];
|
| | | }
|
| | |
|
| | |
| | | return $_SESSION["s"]["form"]["tab"];
|
| | | }
|
| | |
|
| | | function isReadonlyTab($tab) {
|
| | | if(isset($this->formDef['tabs'][$tab]['readonly']) && $this->formDef['tabs'][$tab]['readonly'] == true) {
|
| | | function isReadonlyTab($tab, $primary_id) {
|
| | | global $app, $conf;
|
| | | |
| | | // Add backticks for incomplete table names.
|
| | | if(stristr($this->formDef['db_table'],'.')) {
|
| | | $escape = '';
|
| | | } else {
|
| | | $escape = '`';
|
| | | }
|
| | | |
| | | $sql = "SELECT sys_userid FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id;
|
| | | $record = $app->db->queryOneRecord($sql);
|
| | | |
| | | // return true if the readonly flag of the form is set and the current loggedin user is not the owner of the record.
|
| | | if(isset($this->formDef['tabs'][$tab]['readonly']) && $this->formDef['tabs'][$tab]['readonly'] == true && $record['sys_userid'] != $_SESSION["s"]["user"]["userid"]) {
|
| | | return true;
|
| | | } else {
|
| | | return false;
|