From bd991dba843b9d1148f137534c8342aacd6e7201 Mon Sep 17 00:00:00 2001 From: Carsten Rose <carsten.rose@math.uzh.ch> Date: Sun, 29 Jan 2017 22:53:11 +0100 Subject: [PATCH] QuickFormQuery.php: for modeForm='Form Delete' the 'required param' are not respected - this makes sense, cause these parameters typically filled in newly created records. --- extension/qfq/qfq/QuickFormQuery.php | 48 +++++++++++++++------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/extension/qfq/qfq/QuickFormQuery.php b/extension/qfq/qfq/QuickFormQuery.php index 5c4a99da7..be437ca65 100644 --- a/extension/qfq/qfq/QuickFormQuery.php +++ b/extension/qfq/qfq/QuickFormQuery.php @@ -207,30 +207,30 @@ class QuickFormQuery { * FORM_SAVE: The submitted form will be saved. Return Failure or Success as JSON. * FORM_DELETE: * - * @param string $mode FORM_LOAD | FORM_UPDATE | FORM_SAVE | FORM_DELETE + * @param string $formMode FORM_LOAD | FORM_UPDATE | FORM_SAVE | FORM_DELETE * @return array|string * @throws CodeException * @throws UserFormException */ - private function doForm($mode) { + private function doForm($formMode) { $data = ''; $foundInStore = ''; // Fill STORE_FORM - if ($mode === FORM_UPDATE || $mode === FORM_SAVE) { + if ($formMode === FORM_UPDATE || $formMode === FORM_SAVE) { $fillStoreForm = new FillStoreForm(); $fillStoreForm->process(); } - $formName = $this->loadFormSpecification($mode, $foundInStore); - if ($formName === false && $mode !== FORM_DELETE) { + $formName = $this->loadFormSpecification($formMode, $foundInStore); + if ($formName === false && $formMode !== FORM_DELETE) { // No form found: do nothing return ''; } if ($formName !== false) { // Validate only if there is a 'real' form (not a FORM_DELETE with only a tablename). - $sipFound = $this->validateForm($foundInStore); + $sipFound = $this->validateForm($foundInStore, $formMode); } else { // FORM_DELETE without a form definition: Fake the form wiht only a tableName. @@ -246,11 +246,11 @@ class QuickFormQuery { $recordId = $this->store->getVar(SIP_RECORD_ID, STORE_SIP . STORE_TYPO3 . STORE_CLIENT); // For 'new' record always create a new TAB-uniq (for this current form, nowhere else used) SIP. // With such a TAB-uniq SIP, multiple TABs and following repeated NEWs are easily implemented. - if (!$sipFound || ($mode == FORM_LOAD && $recordId == 0)) { + if (!$sipFound || ($formMode == FORM_LOAD && $recordId == 0)) { $this->store->createSipAfterFormLoad($formName); } - if ($mode === FORM_DELETE) { + if ($formMode === FORM_DELETE) { $build = new Delete(); @@ -273,12 +273,12 @@ class QuickFormQuery { } $formAction = new FormAction($this->formSpec, $this->db, $this->phpUnit); - switch ($mode) { + switch ($formMode) { case FORM_LOAD: case FORM_UPDATE: $formAction->elements($recordId, $this->feSpecAction, FE_TYPE_BEFORE_LOAD); - $data = $build->process($mode); + $data = $build->process($formMode); $formAction->elements($recordId, $this->feSpecAction, FE_TYPE_AFTER_LOAD); break; @@ -328,7 +328,7 @@ class QuickFormQuery { $formAction->elements($rc, $this->feSpecAction, FE_TYPE_SENDMAIL); // Retrieve FE Values as JSON - $data = $build->process($mode, $htmlElementNameIdZero); + $data = $build->process($formMode, $htmlElementNameIdZero); break; default: @@ -500,7 +500,7 @@ class QuickFormQuery { * @throws UserFormException * @internal param $foundInStore */ - private function validateForm($formNameFoundInStore) { + private function validateForm($formNameFoundInStore, $formMode) { // Retrieve record_id either from SIP (prefered) or via URL $r = $this->store->getVar(SIP_RECORD_ID, STORE_SIP . STORE_TYPO3 . STORE_CLIENT, '', $recordIdFoundInStore); @@ -554,20 +554,22 @@ class QuickFormQuery { throw new UserFormException("MultiMode selected, but MultiSQL missing", ERROR_MULTI_SQL_MISSING); } - $sipArray = $this->store->getStore(STORE_SIP); - // Check: requiredParameter: '' or 'form' or 'form,grId' or 'form #formname for form,grId' - $param = explode(',', $this->formSpec[F_REQUIRED_PARAMETER]); - foreach ($param AS $name) { + if ($formMode !== FORM_DELETE) { + $sipArray = $this->store->getStore(STORE_SIP); + // Check: requiredParameter: '' or 'form' or 'form,grId' or 'form #formname for form,grId' + $param = explode(',', $this->formSpec[F_REQUIRED_PARAMETER]); + foreach ($param AS $name) { - $name = explode('#', $name, 2); - $name = trim($name[0]); + $name = explode('#', $name, 2); + $name = trim($name[0]); - if ($name === '') { - continue; - } + if ($name === '') { + continue; + } - if (!isset($sipArray[$name])) { - throw new UserFormException("Missing required SIP parameter: $name", ERROR_MISSING_REQUIRED_PARAMETER); + if (!isset($sipArray[$name])) { + throw new UserFormException("Missing required SIP parameter: $name", ERROR_MISSING_REQUIRED_PARAMETER); + } } } -- GitLab