ftimme
2012-09-04 b889edb33e4a09cc1f65d2fb9ad9f9ea16b1eae9
interface/lib/classes/tform.inc.php
@@ -150,6 +150,8 @@
            if(isset($wb_global)) unset($wb_global);
            
                $this->wordbook = $wb;
            $this->dateformat = $app->lng('conf_format_dateshort');
                return true;
        }
@@ -170,8 +172,14 @@
            if(isset($record[$table_idx])) $new_record[$table_idx] = intval($record[$table_idx ]);
            
            if(is_array($record)) {
                        foreach($this->formDef['tabs'][$tab]['fields'] as $key => $field) {
                                switch ($field['datatype']) {
                  foreach($this->formDef['tabs'][$tab]['fields'] as $key => $field) {
                        //* Apply filter to record value.
                        if(isset($field['filters']) && is_array($field['filters'])) {
                           $record[$key] = $this->filterField($key, (isset($record[$key]))?$record[$key]:'', $field['filters'], 'SHOW');
                        }
                        switch ($field['datatype']) {
                                case 'VARCHAR':
                                        $new_record[$key] = $record[$key];
                                break;
@@ -362,7 +370,12 @@
                        $record = $this->decode($record,$tab);
                        if(is_array($record)) {
                                foreach($this->formDef['tabs'][$tab]['fields'] as $key => $field) {
                                        $val = $record[$key];
                                        if(isset($record[$key])) {
                                 $val = $record[$key];
                              } else {
                                 $val = '';
                              }
                                        // If Datasource is set, get the data from there
                                        if(isset($field['datasource']) && is_array($field['datasource'])) {
@@ -476,7 +489,11 @@
                                        break;
                                        default:
                                 if(isset($record[$key])) {
                                                $new_record[$key] = htmlspecialchars($record[$key]);
                                 } else {
                                    $new_record[$key] = '';
                                 }
                                        }
                                }
                        }
@@ -608,8 +625,16 @@
                if(is_array($record)) {
                        foreach($this->formDef['tabs'][$tab]['fields'] as $key => $field) {
                                if(isset($field['validators']) && is_array($field['validators'])) $this->validateField($key, (isset($record[$key]))?$record[$key]:'', $field['validators']);
                        //* Apply filter to record value
                                if(isset($field['filters']) && is_array($field['filters'])) {
                           $record[$key] = $this->filterField($key, (isset($record[$key]))?$record[$key]:'', $field['filters'], 'SAVE');
                        }
                        //* Validate record value
                        if(isset($field['validators']) && is_array($field['validators'])) {
                           $this->validateField($key, (isset($record[$key]))?$record[$key]:'', $field['validators']);
                        }
                                switch ($field['datatype']) {
                                case 'VARCHAR':
@@ -693,6 +718,55 @@
                }
                return $new_record;
        }
      /**
        * process the filters for a given field.
        *
        * @param field_name = Name of the field
        * @param field_value = value of the field
        * @param filters = Array of filters
      * @param filter_event = 'SAVE'or 'SHOW'
        * @return record
        */
        function filterField($field_name, $field_value, $filters, $filter_event) {
         global $app;
         $returnval = $field_value;
         //* Loop trough all filters
         foreach($filters as $filter) {
            if($filter['event'] == $filter_event) {
               switch ($filter['type']) {
                  case 'TOLOWER':
                     $returnval = strtolower($field_value);
                  break;
                  case 'TOUPPER':
                     $returnval = strtoupper($field_value);
                  break;
                  case 'IDNTOASCII':
                     if(function_exists('idn_to_ascii')) {
                        $returnval = idn_to_ascii($field_value);
                     } else {
                        $returnval = $field_value;
                     }
                  break;
                  case 'IDNTOUTF8':
                     if(function_exists('idn_to_utf8')) {
                        $returnval = idn_to_utf8($field_value);
                     } else {
                        $returnval = $field_value;
                     }
                  break;
                  default:
                     $this->errorMessage .= "Unknown Filter: ".$filter['type'];
                  break;
               }
            }
         }
         return $returnval;
        }
        /**
        * process the validators for a given field.
@@ -758,7 +832,17 @@
                                        }
                                break;
                                case 'ISEMAIL':
                                        if(!preg_match("/^\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\w+\.[a-zA-Z0-9\-]{2,30}$/i", $field_value)) {
                                    if(function_exists('filter_var')) {
                              if(filter_var($field_value, FILTER_VALIDATE_EMAIL) === false) {
                                 $errmsg = $validator['errmsg'];
                                            if(isset($this->wordbook[$errmsg])) {
                                                $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
                                 } else {
                                    $this->errorMessage .= $errmsg."<br />\r\n";
                                 }
                                        }
                           } else {
                              if(!preg_match("/^\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\w+\.[a-zA-Z0-9\-]{2,30}$/i", $field_value)) {
                                                $errmsg = $validator['errmsg'];
                                                if(isset($this->wordbook[$errmsg])) {
                                                    $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
@@ -766,8 +850,19 @@
                                       $this->errorMessage .= $errmsg."<br />\r\n";
                                    }
                                        }
                           }
                                break;
                                case 'ISINT':
                           if(function_exists('filter_var')) {
                              if($field_value != '' && filter_var($field_value, FILTER_VALIDATE_INT) === false) {
                                 $errmsg = $validator['errmsg'];
                                 if(isset($this->wordbook[$errmsg])) {
                                                $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
                                 } else {
                                    $this->errorMessage .= $errmsg."<br />\r\n";
                                 }
                                        }
                           } else {
                                        $tmpval = intval($field_value);
                                        if($tmpval === 0 and !empty($field_value)) {
                                                $errmsg = $validator['errmsg'];
@@ -777,6 +872,7 @@
                                       $this->errorMessage .= $errmsg."<br />\r\n";
                                    }
                                        }
                           }
                                break;
                                case 'ISPOSITIVE':
                                        if(!is_numeric($field_value) || $field_value <= 0){
@@ -836,6 +932,27 @@
                           }
                        }
                                break;
                        case 'RANGE':
                                        //* Checks if the value is within the given range or above / below a value
                              //* Range examples: < 10 = ":10", between 2 and 10 = "2:10", above 5 = "5:".
                              $range_parts = explode(':',trim($validator['range']));
                              $ok = true;
                                        if($range_parts[0] != '' && $field_value < $range_parts[0]) {
                                 $ok = false;
                              }
                              if($range_parts[1] != '' && $field_value > $range_parts[1]) {
                                 $ok = false;
                              }
                              if($ok != true) {
                                 $errmsg = $validator['errmsg'];
                                 if(isset($this->wordbook[$errmsg])) {
                                    $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
                                 } else {
                                    $this->errorMessage .= $errmsg."<br />\r\n";
                                 }
                                        }
                              unset($range_parts);
                                break;
                                case 'CUSTOM':
                                        // Calls a custom class to validate this record
                                        if($validator['class'] != '' and $validator['function'] != '') {
@@ -885,7 +1002,7 @@
                $this->action = $action;
                $this->primary_id = $primary_id;
                $record = $this->encode($record,$tab);
                $record = $this->encode($record,$tab,true);
                $sql_insert_key = '';
                $sql_insert_val = '';
                $sql_update = '';
@@ -903,15 +1020,7 @@
                                                if($field['formtype'] == 'PASSWORD') {
                                                        $sql_insert_key .= "`$key`, ";
                                                        if($field['encryption'] == 'CRYPT') {
                                                                $salt="$1$";
                                                $base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
                                                for ($n=0;$n<8;$n++) {
                                                   //$salt.=chr(mt_rand(64,126));
                                                   $salt.=$base64_alphabet[mt_rand(0,63)];
                                                }
                                                $salt.="$";
                                                // $salt = substr(md5(time()),0,2);
                                                $record[$key] = crypt(stripslashes($record[$key]),$salt);
                                                $record[$key] = $app->auth->crypt_password(stripslashes($record[$key]));
                                                $sql_insert_val .= "'".$app->db->quote($record[$key])."', ";
                                          } elseif ($field['encryption'] == 'MYSQL') {
                                                $sql_insert_val .= "PASSWORD('".$app->db->quote($record[$key])."'), ";
@@ -938,15 +1047,7 @@
                                        } else {
                                                if($field['formtype'] == 'PASSWORD') {
                                          if(isset($field['encryption']) && $field['encryption'] == 'CRYPT') {
                                                                $salt="$1$";
                                                $base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
                                                for ($n=0;$n<8;$n++) {
                                                   //$salt.=chr(mt_rand(64,126));
                                                   $salt.=$base64_alphabet[mt_rand(0,63)];
                                                }
                                                $salt.="$";
                                                // $salt = substr(md5(time()),0,2);
                                                $record[$key] = crypt(stripslashes($record[$key]),$salt);
                                                                $record[$key] = $app->auth->crypt_password(stripslashes($record[$key]));
                                                $sql_update .= "`$key` = '".$app->db->quote($record[$key])."', ";
                                          } elseif (isset($field['encryption']) && $field['encryption'] == 'MYSQL') {
                                                $sql_update .= "`$key` = PASSWORD('".$app->db->quote($record[$key])."'), ";
@@ -1024,7 +1125,7 @@
               //* return a empty string if there is nothing to update
               if(trim($sql_update) == '') $sql = '';
                }
                return $sql;
        }
@@ -1069,7 +1170,7 @@
                     $app->uses('tform_tpl_generator');
                     $app->tform_tpl_generator->buildHTML($this->formDef,$tab['name']);
                }
                $app->tpl->setVar('readonly_tab', (isset($tab['readonly']) && $tab['readonly'] == true));
                $app->tpl->setInclude('content_tpl',$tab["template"]);
                $tab["active"] = 1;
                $_SESSION["s"]["form"]["tab"] = $tab['name'];