From fb30430cc9fb10cdef0d8b3811fbb4e5d470d381 Mon Sep 17 00:00:00 2001 From: Carsten Rose <carsten.rose@math.uzh.ch> Date: Tue, 10 May 2016 13:30:07 +0200 Subject: [PATCH] DynamicUpdate for checkBoxMulti: not possible at the moment - a persistant store per browser tab is necessary. Some work already done. FillStoreForm.php: clientValues will be copied to STORE_FORM if mode=show|requiered or flag 'dynamicUpdate' is set. Fixed bug with additional ',' in collectMultiValues(). --- extension/qfq/qfq/Constants.php | 4 +- extension/qfq/qfq/store/FillStoreForm.php | 45 +++++++++++------------ 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/extension/qfq/qfq/Constants.php b/extension/qfq/qfq/Constants.php index 4a03414a0..c1a3c6661 100644 --- a/extension/qfq/qfq/Constants.php +++ b/extension/qfq/qfq/Constants.php @@ -45,7 +45,7 @@ const RETURN_ARRAY = 'return_array'; const SQL_FORM_ELEMENT_SPECIFIC_CONTAINER = "SELECT *, ? AS 'nestedInFieldSet' FROM FormElement AS fe WHERE fe.formId = ? AND fe.deleted = 'no' AND FIND_IN_SET(fe.class, ? ) AND fe.feIdContainer = ? AND fe.enabled='yes' ORDER BY fe.ord, fe.id"; const SQL_FORM_ELEMENT_ALL_CONTAINER = "SELECT *, ? AS 'nestedInFieldSet' FROM FormElement AS fe WHERE fe.formId = ? AND fe.deleted = 'no' AND FIND_IN_SET(fe.class, ? ) AND fe.enabled='yes' ORDER BY fe.ord, fe.id"; -const SQL_FORM_ELEMENT_SIMPLE_ALL_CONTAINER = "SELECT fe.id, fe.name, fe.label, fe.type, fe.checkType, fe.checkPattern, fe.mode, fe.modeSql, fe.parameter FROM FormElement AS fe, Form AS f WHERE f.name = ? AND f.id = fe.formId AND fe.deleted = 'no' AND fe.class = 'native' AND fe.enabled='yes' ORDER BY fe.ord, fe.id"; +const SQL_FORM_ELEMENT_SIMPLE_ALL_CONTAINER = "SELECT fe.id, fe.name, fe.label, fe.type, fe.checkType, fe.checkPattern, fe.mode, fe.modeSql, fe.parameter, fe.dynamicUpdate FROM FormElement AS fe, Form AS f WHERE f.name = ? AND f.id = fe.formId AND fe.deleted = 'no' AND fe.class = 'native' AND fe.enabled='yes' ORDER BY fe.ord, fe.id"; // SANITIZE Classifier const SANITIZE_ALLOW_ALNUMX = "alnumx"; @@ -385,6 +385,8 @@ const FE_SUBRECORD_ROW_TITLE = '_rowTitle'; const FE_TYPE = 'type'; const FE_MODE = 'mode'; const FE_MODE_SQL = 'modeSql'; +// TODO: Konstante FE_DYNAMIC_UPDATE ueberall einsetzen +const FE_DYNAMIC_UPDATE = 'dynamicUpdate'; // FormElement columns: via parameter field const FE_DATE_FORMAT = 'dateFormat'; // value: FORMAT_DATE_INTERNATIONAL | FORMAT_DATE_GERMAN diff --git a/extension/qfq/qfq/store/FillStoreForm.php b/extension/qfq/qfq/store/FillStoreForm.php index 8f6308b38..f86198c12 100644 --- a/extension/qfq/qfq/store/FillStoreForm.php +++ b/extension/qfq/qfq/store/FillStoreForm.php @@ -144,31 +144,22 @@ class FillStoreForm { } } - switch ($formElement[FE_MODE]) { - case FE_MODE_REQUIRED: - case FE_MODE_SHOW: - if (isset($clientValues[$clientFieldName])) { - - switch ($formElement[FE_TYPE]) { - case 'date': - case 'datetime': - case 'time': - if ($clientValues[$clientFieldName] !== '') // do not check empty values - $newValues[$formElement['name']] = $this->doDateTime($formElement, $clientValues[$clientFieldName]); - break; - default: - $newValues[$formElement['name']] = Sanitize::sanitize($clientValues[$clientFieldName], - $formElement['checkType'], $formElement['checkPattern'], SANATIZE_EXCEPTION); - break; - } + // copy value to $newValues + if (isset($clientValues[$clientFieldName])) { + if ($formElement[FE_DYNAMIC_UPDATE] === 'yes' || $formElement[FE_MODE] === FE_MODE_REQUIRED || $formElement[FE_MODE] === FE_MODE_SHOW) { + switch ($formElement[FE_TYPE]) { + case 'date': + case 'datetime': + case 'time': + if ($clientValues[$clientFieldName] !== '') // do not check empty values + $newValues[$formElement['name']] = $this->doDateTime($formElement, $clientValues[$clientFieldName]); + break; + default: + $newValues[$formElement['name']] = Sanitize::sanitize($clientValues[$clientFieldName], + $formElement['checkType'], $formElement['checkPattern'], SANATIZE_EXCEPTION); + break; } - break; - - case FE_MODE_READONLY: - case FE_MODE_HIDDEN: - continue; - default: - throw new CodeException("Unknown mode: " . $formElement[FE_MODE], ERROR_UNKNOWN_MODE); + } } } @@ -186,9 +177,11 @@ class FillStoreForm { private function collectMultiValues($clientFieldName, array $clientValues) { $checkboxKey = HelperFormElement::prependFormElementIdCheckBoxMulti($clientFieldName, 'h'); + // Check there is a hidden value with naming in checkbox multi syntax if (isset($clientValues[$checkboxKey])) { $checkboxValue = $clientValues[$checkboxKey]; + $pattern = '/' . HelperFormElement::prependFormElementIdCheckBoxMulti($clientFieldName, '\d+') . '/'; foreach ($clientValues as $key => $value) { if (1 === preg_match($pattern, $key)) { @@ -196,6 +189,10 @@ class FillStoreForm { } } + if (isset($checkboxValue[0]) && $checkboxValue[0] === ',') { + $checkboxValue = substr($checkboxValue, 1); + } + $clientValues[$clientFieldName] = $checkboxValue; } -- GitLab