From f316dde8b7aa6a7cc1f26186c46644d0274acf3f Mon Sep 17 00:00:00 2001 From: Clemens Schwaighofer Date: Wed, 9 Oct 2019 10:55:54 +0900 Subject: [PATCH] CoreLibs Fix mandator check & sub group checks for unique input --- www/lib/CoreLibs/Output/Form/Generate.php | 57 ++++++++++++++++------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/www/lib/CoreLibs/Output/Form/Generate.php b/www/lib/CoreLibs/Output/Form/Generate.php index 47bd7cc4..88e57ba9 100644 --- a/www/lib/CoreLibs/Output/Form/Generate.php +++ b/www/lib/CoreLibs/Output/Form/Generate.php @@ -727,7 +727,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO $EDIT_FGCOLOR_T = 'edit_fgcolor'; } $output_name = $this->table_array[$element_name]['output_name']; - if (isset($this->table_array[$element_name]['mandatory'])) { + if (isset($this->table_array[$element_name]['mandatory']) && + $this->table_array[$element_name]['mandatory'] + ) { $output_name .= ' *'; } // create right side depending on 'definiton' in table_array @@ -1022,6 +1024,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO } // switch } // for each error to check } elseif (isset($value['mandatory']) && + $value['mandatory'] && ( // for all 'normal' fields ($this->table_array[$key]['type'] != 'password' && $this->table_array[$key]['type'] != 'drop_down_db_input' && !$this->table_array[$key]['value']) || @@ -1065,7 +1068,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO if (is_array($this->reference_array)) { reset($this->reference_array); foreach ($this->reference_array as $key => $value) { - if ($this->reference_array[$key]['mandatory'] && !$this->reference_array[$key]['selected'][0]) { + if (isset($this->reference_array[$key]['mandatory']) && + $this->reference_array[$key]['mandatory'] && + !$this->reference_array[$key]['selected'][0]) { $this->msg .= sprintf($this->l->__('Please select at least one Element from field %s!
'), $this->reference_array[$key]['output_name']); } } @@ -1119,20 +1124,25 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO for ($i = 0; $i < $max; $i ++) { // either one of the post pks is set, or the mandatory foreach ($reference_array['elements'] as $el_name => $data_array) { - if (isset($data_array['mandatory'])) { + if (isset($data_array['mandatory']) && $data_array['mandatory']) { $mand_name = $data_array['output_name']; } // check if there is a primary ket inside, so it is okay if (isset($data_array['pk_id']) && count($_POST[$prfx.$el_name]) && - isset($reference_array['mandatory']) + isset($reference_array['mandatory']) && + $reference_array['mandatory'] ) { $mand_okay = 1; } // we found a mandatory field. check now if one is set to satisfy the main mandatory // also check, if this field is mandatory and its not set, but any other, throw an error // $this->debug('edit_error_chk', 'RG error - Data['.$prfx.$el_name.': '.$_POST[$prfx.$el_name][$i].' | '.$_POST[$prfx.$el_name].' - '.$reference_array['enable_name'].' - '.$_POST[$reference_array['enable_name']][$_POST[$prfx.$el_name][$i]]); - if (isset($data_array['mandatory']) && $_POST[$prfx.$el_name][$i]) { + if (isset($data_array['mandatory']) && + $data_array['mandatory'] && + isset($_POST[$prfx.$el_name][$i]) && + $_POST[$prfx.$el_name][$i] + ) { $mand_okay = 1; $row_okay[$i] = 1; } elseif ($data_array['type'] == 'radio_group' && !isset($_POST[$prfx.$el_name])) { @@ -1145,7 +1155,10 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO // $this->debug('edit_error_chk', '[$i]'); $element_set[$i] = 1; $row_okay[$i] = 1; - } elseif (isset($data_array['mandatory']) && !$_POST[$prfx.$el_name][$i]) { + } elseif (isset($data_array['mandatory']) && + $data_array['mandatory'] && + !$_POST[$prfx.$el_name][$i] + ) { $row_okay[$i] = 0; } // do optional error checks like for normal fields @@ -1153,19 +1166,20 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO if (isset($data_array['error_check'])) { foreach (explode('|', $data_array['error_check']) as $error_check) { switch ($error_check) { - // check unique, check if field in table is not yet exist + // check unique, check if field is filled and not same in _POST set case 'unique': - $q = 'SELECT '.$_pk_name.' FROM '.$table_name.' WHERE '.$el_name.' = '."'".$this->dbEscapeString($_POST[$prfx.$el_name][$i])."'"; - if ($this->table_array[$this->int_pk_name]['value']) { - $q .= ' AND '.$this->int_pk_name.' <> '.$this->table_array[$this->int_pk_name]['value']; - } - list($key) = $this->dbReturnRow($q); - if ($key) { + // must be set for double check + if ($_POST[$prfx.$el_name][$i] && + count(array_keys($_POST[$prfx.$el_name], $_POST[$prfx.$el_name][$i])) >= 2 + ) { $this->msg .= sprintf($this->l->__('The field %s in row %s can be used only once!
'), $reference_array['output_name'], $i); } break; case 'alphanumericspace': - if (!preg_match("/^[0-9A-Za-z\ ]+$/", $_POST[$prfx.$el_name][$i])) { + // only check if set + if ($_POST[$prfx.$el_name][$i] && + !preg_match("/^[0-9A-Za-z\ ]+$/", $_POST[$prfx.$el_name][$i]) + ) { $this->msg .= sprintf($this->l->__('Please enter a valid alphanumeric (Numbers and Letters, spaces allowed) value for the %s Field and row %s!
'), $reference_array['output_name'], $i); } break; @@ -1176,7 +1190,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO } // main mandatory is met -> error msg - if (!$mand_okay && isset($reference_array['mandatory'])) { + if (!$mand_okay && + isset($reference_array['mandatory']) && + $reference_array['mandatory']) { $this->msg .= sprintf($this->l->__('You need to enter at least one data set for field %s!
'), $reference_array['output_name']); } for ($i = 0; $i < $max; $i ++) { @@ -1472,6 +1488,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO // if we have enable name & delete set, then only insert/update those which are flagged as active // check if mandatory field is set, if not set 'do not write flag' if (isset($data_array['mandatory']) && + $data_array['mandatory'] && (!isset($_POST[$prfx.$el_name][$i]) || (isset($_POST[$prfx.$el_name][$i]) && empty($_POST[$prfx.$el_name][$i]))) ) { $no_write[$i] = 1; @@ -1678,7 +1695,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO { $data = array(); $output_name = $this->reference_array[$table_name]['output_name']; - if ($this->reference_array[$table_name]['mandatory']) { + if (isset($this->reference_array[$table_name]['mandatory']) && + $this->reference_array[$table_name]['mandatory'] + ) { $output_name .= ' *'; } $data['name'] = $this->reference_array[$table_name]['other_table_pk']; @@ -1708,7 +1727,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO $data = array(); // output name for the viewable left table td box, prefixed with * if mandatory $output_name = $this->element_list[$table_name]['output_name']; - if (isset($this->element_list[$table_name]['mandatory'])) { + if (isset($this->element_list[$table_name]['mandatory']) && + $this->element_list[$table_name]['mandatory'] + ) { $output_name .= ' *'; } // delete button name, if there is one set @@ -1789,7 +1810,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO if ($this->error) { if (isset($_POST[$el_name]) && is_array($_POST[$el_name])) { // this is for the new line - $proto[$el_name] = $_POST[$el_name][(count($_POST[$el_name]) - 1)]; + $proto[$el_name] = isset($_POST[$el_name][(count($_POST[$el_name]) - 1)]) ? $_POST[$el_name][(count($_POST[$el_name]) - 1)] : 0; } else { $proto[$el_name] = 0; }