diff --git a/extension/Classes/Core/AbstractBuildForm.php b/extension/Classes/Core/AbstractBuildForm.php index 6582f7670b54e5e3bd5c1fdb70937b734d16e344..6b07e41eb5070832deabdc7948421234f7c90687 100644 --- a/extension/Classes/Core/AbstractBuildForm.php +++ b/extension/Classes/Core/AbstractBuildForm.php @@ -1104,7 +1104,7 @@ abstract class AbstractBuildForm { } /** - * Create an array with standard elements for 'mode' (hidden, disabled, required) + * Create an array with standard elements for 'mode' (hidden, disabled, required, readonly) * and add 'form-element', 'value'. * 'Generic Element Update': add via API_ELEMENT_UPDATE 'label' and 'note'. * All collected data as array - will be later converted to JSON. @@ -1113,11 +1113,13 @@ abstract class AbstractBuildForm { * @param string|array $value * @param array $formElement * + * @param int $optionIdx + * @param string $class * @return array * @throws \CodeException * @throws \UserFormException */ - private function getFormElementForJson($htmlFormElementName, $value, array $formElement) { + private function getFormElementForJson($htmlFormElementName, $value, array $formElement, $optionIdx = 0, $optionClass = '') { $addClassRequired = array(); $json = $this->getJsonFeMode($formElement[FE_MODE]); // disabled, required @@ -1149,11 +1151,13 @@ abstract class AbstractBuildForm { $addClassRequired = HelperFormElement::getRequiredPositionClass($formElement[F_FE_REQUIRED_POSITION]); } + // Label if (isset($formElement[FE_LABEL])) { $key = $formElement[FE_HTML_ID] . HTML_ID_EXTENSION_LABEL; $json[API_ELEMENT_UPDATE][$key][API_ELEMENT_CONTENT] = $this->buildLabel($htmlFormElementName, $formElement[FE_LABEL], $addClassRequired[FE_LABEL] ?? ''); } + // Note if (isset($formElement[FE_NOTE])) { $key = $formElement[FE_HTML_ID] . HTML_ID_EXTENSION_NOTE; if (!empty($addClassRequired[FE_NOTE])) { @@ -1162,6 +1166,7 @@ abstract class AbstractBuildForm { $json[API_ELEMENT_UPDATE][$key][API_ELEMENT_CONTENT] = $formElement[FE_NOTE]; } + // Input if (isset($formElement[FE_TYPE])) { $key = $formElement[FE_HTML_ID] . HTML_ID_EXTENSION_INPUT; @@ -1174,15 +1179,26 @@ abstract class AbstractBuildForm { if (!empty($formElement[FE_MODE_SQL])) { $class = is_numeric($formElement[FE_BS_INPUT_COLUMNS]) ? ('col-md-' . $formElement[FE_BS_INPUT_COLUMNS]) : $formElement[FE_BS_INPUT_COLUMNS]; // $class = 'col-md-' . $formElement[FE_BS_INPUT_COLUMNS] . ' '; - $class .= ($formElement[FE_MODE] == FE_MODE_HIDDEN) ? ' hidden' : ''; - $json[API_ELEMENT_UPDATE][$key][API_ELEMENT_ATTRIBUTE]['class'] = $class; $json[API_ELEMENT_UPDATE][$key][API_ELEMENT_ATTRIBUTE]['required'] = ($formElement[FE_MODE] == 'required'); $json[API_ELEMENT_UPDATE][$key][API_ELEMENT_ATTRIBUTE]['hidden'] = $statusHidden; $json[API_ELEMENT_UPDATE][$key][API_ELEMENT_ATTRIBUTE]['readonly'] = $json['disabled'] ? 'readonly' : 'false'; + // Checkbox: Copy attributes to every checkbox: + // #7974 - nicht klar ob das hier wirklich sinnvoll ist: checkboxen gehen nicht auf readonly bei dynamic update - auch mit diesem IF nicht. + if ($formElement[FE_TYPE] == FE_TYPE_CHECKBOX) { + $optionsKey = $formElement[FE_HTML_ID] . '-' . $optionIdx; + $json[API_ELEMENT_UPDATE][$optionsKey][API_ELEMENT_ATTRIBUTE] = $json[API_ELEMENT_UPDATE][$key][API_ELEMENT_ATTRIBUTE]; + $json[API_ELEMENT_UPDATE][$optionsKey][API_ELEMENT_ATTRIBUTE]['data-disabled'] = $json['disabled'] ? 'yes' : 'no'; + $json[API_ELEMENT_UPDATE][$optionsKey][API_ELEMENT_ATTRIBUTE]['class'] = $optionClass; + } + + $class .= ($formElement[FE_MODE] == FE_MODE_HIDDEN) ? ' hidden' : ''; + $json[API_ELEMENT_UPDATE][$key][API_ELEMENT_ATTRIBUTE]['class'] = $class; + if ($pattern !== null) { $json[API_ELEMENT_UPDATE][$key][API_ELEMENT_ATTRIBUTE]['pattern'] = $pattern; } + } // #3647 @@ -2309,7 +2325,7 @@ abstract class AbstractBuildForm { } $html .= $htmlElement . $br; - $json[] = $this->getFormElementForJson($htmlFormElementNameUniq, $jsonValue, $formElement); + $json[] = $this->getFormElementForJson($htmlFormElementNameUniq, $jsonValue, $formElement, $ii, $checkboxClass); }