diff --git a/typo3/sysext/form/Classes/Hooks/HandleIncomingFormValues.php b/typo3/sysext/form/Classes/Hooks/HandleIncomingFormValues.php index b132fecc3f5c6e3da07da55d5e24feae223ba14c..36a038fe726147ff15c8d674ca099ef9b9d820db 100644 --- a/typo3/sysext/form/Classes/Hooks/HandleIncomingFormValues.php +++ b/typo3/sysext/form/Classes/Hooks/HandleIncomingFormValues.php @@ -113,6 +113,7 @@ class HandleIncomingFormValues implements SingletonInterface { $element->getParentElement()->setAdditionalArgument('atLeastOneCheckedChildElement', TRUE); } } elseif ($element->getElementType() === 'OPTION') { + $modelValue = (string)($element->getAdditionalArgument('value') ?: $element->getElementCounter()); if ($element->getParentElement()->getElementType() === 'OPTGROUP') { $parentName = $element->getParentElement()->getParentElement()->getName(); } else { @@ -121,7 +122,7 @@ class HandleIncomingFormValues implements SingletonInterface { $incomingData = $formBuilder->getIncomingData()->getIncomingField($parentName); /* Multiselect */ if (is_array($incomingData)) { - if (in_array($modelValue, $incomingData)) { + if (in_array($modelValue, $incomingData, TRUE)) { $element->setHtmlAttribute('selected', 'selected'); } else { $element->setHtmlAttribute('selected', NULL); diff --git a/typo3/sysext/form/Classes/ViewHelpers/AggregateSelectOptionsViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/AggregateSelectOptionsViewHelper.php index bf5f251e940eeb46f9aa1585277a8b4bc1a1ce2e..a1f0a69f07affb24e996f388a6d5d2277d8c62fc 100644 --- a/typo3/sysext/form/Classes/ViewHelpers/AggregateSelectOptionsViewHelper.php +++ b/typo3/sysext/form/Classes/ViewHelpers/AggregateSelectOptionsViewHelper.php @@ -15,17 +15,13 @@ namespace TYPO3\CMS\Form\ViewHelpers; */ use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; +use TYPO3\CMS\Form\Domain\Model\Element; /** * Aggregator for the select options */ class AggregateSelectOptionsViewHelper extends AbstractViewHelper { - /** - * @var \TYPO3\CMS\Form\Domain\Model\Form - */ - protected $model; - /** * @var array */ @@ -37,14 +33,14 @@ class AggregateSelectOptionsViewHelper extends AbstractViewHelper { protected $selectedValues = array(); /** - * @param \TYPO3\CMS\Form\Domain\Model\Element\AbstractElement $model + * @param Element $model * @param boolean $returnSelectedValues * @return array */ - public function render($model, $returnSelectedValues = FALSE) { + public function render(Element $model, $returnSelectedValues = FALSE) { foreach ($model->getChildElements() as $element) { - $this->createElement($element, array()); + $this->createElement($element); } if ($returnSelectedValues === TRUE) { @@ -55,20 +51,20 @@ class AggregateSelectOptionsViewHelper extends AbstractViewHelper { } /** - * @param \TYPO3\CMS\Form\Domain\Model\Element\AbstractElement $model + * @param Element $model * @param array $optGroupData * @return void */ - public function createElement($model, $optGroupData = array()) { + protected function createElement(Element $model, array $optGroupData = array()) { $this->checkElementForOptgroup($model, $optGroupData); } /** - * @param \TYPO3\CMS\Form\Domain\Model\Element\AbstractElement $model + * @param Element $model * @param array $optGroupData * @return void */ - protected function checkElementForOptgroup($model, $optGroupData = array()) { + protected function checkElementForOptgroup(Element $model, array $optGroupData = array()) { if ($model->getElementType() === 'OPTGROUP') { $optGroupData = array( 'label' => $model->getAdditionalArgument('label'), @@ -77,13 +73,13 @@ class AggregateSelectOptionsViewHelper extends AbstractViewHelper { $this->getChildElements($model, $optGroupData); } else { $optionData = array( - 'value' => $model->getAdditionalArgument('value'), + 'value' => $model->getAdditionalArgument('value') ?: $model->getElementCounter(), 'label' => $model->getAdditionalArgument('text'), 'selected' => $model->getHtmlAttribute('selected'), ); - if ($model->getHtmlAttribute('selected') == 'selected') { - $this->selectedValues[] = $model->getAdditionalArgument('value'); + if (!empty($optionData['selected'])) { + $this->selectedValues[] = $optionData['value']; } if (count($optGroupData)) { @@ -93,18 +89,18 @@ class AggregateSelectOptionsViewHelper extends AbstractViewHelper { } else { $this->options[] = $optionData; } - return $model; } } /** - * @param \TYPO3\CMS\Form\Domain\Model\Element\AbstractElement $model + * @param Element $model * @param array $optGroupData * @return void */ - protected function getChildElements($model, $optGroupData = array()) { + protected function getChildElements(Element $model, array $optGroupData = array()) { foreach ($model->getChildElements() as $element) { $this->createElement($element, $optGroupData); } } + } diff --git a/typo3/sysext/form/Resources/Private/Partials/Compatibility/Confirmation/FlatElements/Select.html b/typo3/sysext/form/Resources/Private/Partials/Compatibility/Confirmation/FlatElements/Select.html index ae70c1beef6268b2bc9eff8ff2c714c91d77ab72..772230c7f289af3b105dc8ed739c211aeeb0469b 100644 --- a/typo3/sysext/form/Resources/Private/Partials/Compatibility/Confirmation/FlatElements/Select.html +++ b/typo3/sysext/form/Resources/Private/Partials/Compatibility/Confirmation/FlatElements/Select.html @@ -4,16 +4,66 @@ <f:format.raw>{model.layout.elementOuterWrap.0}</f:format.raw> <ol> </f:if> - <f:for each="<form:aggregateSelectOptions model='{model}' />" as="option"> + <f:for each="{form:aggregateSelectOptions(model:model)}" as="option"> <f:if condition="{option.options}"> <f:then> <f:for each="{option.options}" as="optgroupOption"> - <f:if condition="{optgroupOption.selected} == 'selected'"> + <f:if condition="{optgroupOption.selected}"> <f:if condition="{model.showElement}"> <f:format.raw>{model.layout.elementOuterWrap.0}</f:format.raw> {optgroupOption.label} <f:format.raw>{model.layout.elementOuterWrap.1}</f:format.raw> </f:if> + <f:if condition="{model.additionalArguments.multiple}"> + <f:then> + <f:form.hidden + class="{model.additionalArguments.class}" + dir="{model.additionalArguments.dir}" + id="{model.additionalArguments.id}" + lang="{model.additionalArguments.lang}" + style="{model.additionalArguments.style}" + title="{model.additionalArguments.title}" + accesskey="{model.additionalArguments.accesskey}" + tabindex="{model.additionalArguments.tabindex}" + onclick="{model.additionalArguments.onclick}" + + name="{model.additionalArguments.prefix}[{model.additionalArguments.name}][]" + value="{option.value}" + + additionalAttributes="{model.htmlAttributes}" + /> + </f:then> + <f:else> + <f:form.hidden + class="{model.additionalArguments.class}" + dir="{model.additionalArguments.dir}" + id="{model.additionalArguments.id}" + lang="{model.additionalArguments.lang}" + style="{model.additionalArguments.style}" + title="{model.additionalArguments.title}" + accesskey="{model.additionalArguments.accesskey}" + tabindex="{model.additionalArguments.tabindex}" + onclick="{model.additionalArguments.onclick}" + + name="{model.additionalArguments.prefix}[{model.additionalArguments.name}]" + value="{option.value}" + + additionalAttributes="{model.htmlAttributes}" + /> + </f:else> + </f:if> + </f:if> + </f:for> + </f:then> + <f:else> + <f:if condition="{option.selected}"> + <f:if condition="{model.showElement}"> + <f:format.raw>{model.layout.elementOuterWrap.0}</f:format.raw> + {option.label} + <f:format.raw>{model.layout.elementOuterWrap.1}</f:format.raw> + </f:if> + <f:if condition="{model.additionalArguments.multiple}"> + <f:then> <f:form.hidden class="{model.additionalArguments.class}" dir="{model.additionalArguments.dir}" @@ -26,36 +76,30 @@ onclick="{model.additionalArguments.onclick}" name="{model.additionalArguments.prefix}[{model.additionalArguments.name}][]" - value="{optgroupOption.value}" + value="{option.value}" additionalAttributes="{model.htmlAttributes}" /> - </f:if> - </f:for> - </f:then> - <f:else> - <f:if condition="{option.selected} == 'selected'"> - <f:if condition="{model.showElement}"> - <f:format.raw>{model.layout.elementOuterWrap.0}</f:format.raw> - {option.label} - <f:format.raw>{model.layout.elementOuterWrap.1}</f:format.raw> - </f:if> - <f:form.hidden - class="{model.additionalArguments.class}" - dir="{model.additionalArguments.dir}" - id="{model.additionalArguments.id}" - lang="{model.additionalArguments.lang}" - style="{model.additionalArguments.style}" - title="{model.additionalArguments.title}" - accesskey="{model.additionalArguments.accesskey}" - tabindex="{model.additionalArguments.tabindex}" - onclick="{model.additionalArguments.onclick}" + </f:then> + <f:else> + <f:form.hidden + class="{model.additionalArguments.class}" + dir="{model.additionalArguments.dir}" + id="{model.additionalArguments.id}" + lang="{model.additionalArguments.lang}" + style="{model.additionalArguments.style}" + title="{model.additionalArguments.title}" + accesskey="{model.additionalArguments.accesskey}" + tabindex="{model.additionalArguments.tabindex}" + onclick="{model.additionalArguments.onclick}" - name="{model.additionalArguments.prefix}[{model.additionalArguments.name}][]" - value="{option.value}" + name="{model.additionalArguments.prefix}[{model.additionalArguments.name}]" + value="{option.value}" - additionalAttributes="{model.htmlAttributes}" - /> + additionalAttributes="{model.htmlAttributes}" + /> + </f:else> + </f:if> </f:if> </f:else> </f:if> diff --git a/typo3/sysext/form/Resources/Private/Partials/Compatibility/PostProcessor/Mail/Html/FlatElements/Select.html b/typo3/sysext/form/Resources/Private/Partials/Compatibility/PostProcessor/Mail/Html/FlatElements/Select.html index f8e7497b54909781b6494978ca6ef6c3e902e59b..ffa5c6198b0bab4beeafbc0c87191254fd14d761 100644 --- a/typo3/sysext/form/Resources/Private/Partials/Compatibility/PostProcessor/Mail/Html/FlatElements/Select.html +++ b/typo3/sysext/form/Resources/Private/Partials/Compatibility/PostProcessor/Mail/Html/FlatElements/Select.html @@ -5,22 +5,22 @@ <em>{model.additionalArguments.label}</em> </td> <td> -<f:for each="<form:aggregateSelectOptions model='{model}' />" as="option"> +<f:for each="{form:aggregateSelectOptions(model:model)}" as="option"> <f:if condition="{option.options}"> <f:then> <f:for each="{option.options}" as="optgroupOption"> -<f:if condition="{optgroupOption.selected} == 'selected'"> - <div class="csc-form-element csc-form-element-{model.elementTypeLowerCase}">{optgroupOption.value}</div> +<f:if condition="{optgroupOption.selected}"> + <div class="csc-form-element csc-form-element-{model.elementTypeLowerCase}">{optgroupOption.label}</div> </f:if> </f:for> </f:then> <f:else> -<f:if condition="{option.selected} == 'selected'"> - <div class="csc-form-element csc-form-element-{model.elementTypeLowerCase}">{option.value}</div> +<f:if condition="{option.selected}"> + <div class="csc-form-element csc-form-element-{model.elementTypeLowerCase}">{option.label}</div> </f:if> </f:else> </f:if> </f:for> </td> </tr> -</f:if> \ No newline at end of file +</f:if> diff --git a/typo3/sysext/form/Resources/Private/Partials/Compatibility/PostProcessor/Mail/Plain/FlatElements/Select.html b/typo3/sysext/form/Resources/Private/Partials/Compatibility/PostProcessor/Mail/Plain/FlatElements/Select.html index 1d6cba8b6a6f70c17dccc726579f446d2c097fa3..122c8666ff2045bd88639451c9e6d38dd00433ab 100644 --- a/typo3/sysext/form/Resources/Private/Partials/Compatibility/PostProcessor/Mail/Plain/FlatElements/Select.html +++ b/typo3/sysext/form/Resources/Private/Partials/Compatibility/PostProcessor/Mail/Plain/FlatElements/Select.html @@ -1,3 +1,3 @@ -{namespace form=TYPO3\CMS\Form\ViewHelpers}<f:if condition="{model.showElement}"><form:plainMail labelContent="{model}" newLineAfterLabel="1" indent="4" /><f:for each="<form:aggregateSelectOptions model='{model}' />" as="option"><f:if condition="{option.options}"><f:then><f:for each="{option.options}" as="optgroupOption"><f:if condition="{optgroupOption.selected} == 'selected'"><form:plainMail content="{optgroupOption.value}" /> -</f:if></f:for></f:then><f:else><f:if condition="{option.selected} == 'selected'"><form:plainMail content="{option.value}" /> +{namespace form=TYPO3\CMS\Form\ViewHelpers}<f:if condition="{model.showElement}"><form:plainMail labelContent="{model}" newLineAfterLabel="1" indent="4" /><f:for each="{form:aggregateSelectOptions(model:model)}" as="option"><f:if condition="{option.options}"><f:then><f:for each="{option.options}" as="optgroupOption"><f:if condition="{optgroupOption.selected}"><form:plainMail content="{optgroupOption.label}" /> +</f:if></f:for></f:then><f:else><f:if condition="{option.selected}"><form:plainMail content="{option.label}" /> </f:if></f:else></f:if></f:for><form:plainMail indent="-4"/></f:if> \ No newline at end of file diff --git a/typo3/sysext/form/Resources/Private/Partials/Compatibility/Show/FlatElements/Select.html b/typo3/sysext/form/Resources/Private/Partials/Compatibility/Show/FlatElements/Select.html index e3b15c56d9170fad2b883662291d704f9e8d3200..494df691bc986f8b9bd99f3fc3d500f6d5587b39 100644 --- a/typo3/sysext/form/Resources/Private/Partials/Compatibility/Show/FlatElements/Select.html +++ b/typo3/sysext/form/Resources/Private/Partials/Compatibility/Show/FlatElements/Select.html @@ -21,7 +21,7 @@ optionLabelField="label" optionValueField="value" - options='<form:aggregateSelectOptions model="{model}" />' + options="{form:aggregateSelectOptions(model:model)}" prependOptionLabel="{model.additionalArguments.prependOptionLabel}" prependOptionValue="{model.additionalArguments.prependOptionValue}" selectAllByDefault="{model.additionalArguments.selectAllByDefault}" diff --git a/typo3/sysext/form/Resources/Private/Partials/Default/Confirmation/FlatElements/Select.html b/typo3/sysext/form/Resources/Private/Partials/Default/Confirmation/FlatElements/Select.html index 32e6eca80b26813eade42d547017d928837eba89..68101e523d272be3a05bdefec426969259edcdb0 100644 --- a/typo3/sysext/form/Resources/Private/Partials/Default/Confirmation/FlatElements/Select.html +++ b/typo3/sysext/form/Resources/Private/Partials/Default/Confirmation/FlatElements/Select.html @@ -7,16 +7,66 @@ </label> <ol> </f:if> -<f:for each="<form:aggregateSelectOptions model='{model}' />" as="option"> +<f:for each="{form:aggregateSelectOptions(model:model)}" as="option"> <f:if condition="{option.options}"> <f:then> <f:for each="{option.options}" as="optgroupOption"> - <f:if condition="{optgroupOption.selected} == 'selected'"> + <f:if condition="{optgroupOption.selected}"> <f:if condition="{model.showElement}"> <li class="csc-form-element csc-form-element-{model.elementTypeLowerCase}"> {optgroupOption.label} </li> </f:if> + <f:if condition="{model.additionalArguments.multiple}"> + <f:then> + <f:form.hidden + class="{model.additionalArguments.class}" + dir="{model.additionalArguments.dir}" + id="{model.additionalArguments.id}" + lang="{model.additionalArguments.lang}" + style="{model.additionalArguments.style}" + title="{model.additionalArguments.title}" + accesskey="{model.additionalArguments.accesskey}" + tabindex="{model.additionalArguments.tabindex}" + onclick="{model.additionalArguments.onclick}" + + name="{model.additionalArguments.prefix}[{model.additionalArguments.name}][]" + value="{optgroupOption.value}" + + additionalAttributes="{model.htmlAttributes}" + /> + </f:then> + <f:else> + <f:form.hidden + class="{model.additionalArguments.class}" + dir="{model.additionalArguments.dir}" + id="{model.additionalArguments.id}" + lang="{model.additionalArguments.lang}" + style="{model.additionalArguments.style}" + title="{model.additionalArguments.title}" + accesskey="{model.additionalArguments.accesskey}" + tabindex="{model.additionalArguments.tabindex}" + onclick="{model.additionalArguments.onclick}" + + name="{model.additionalArguments.prefix}[{model.additionalArguments.name}]" + value="{optgroupOption.value}" + + additionalAttributes="{model.htmlAttributes}" + /> + </f:else> + </f:if> + </f:if> + </f:for> + </f:then> + <f:else> + <f:if condition="{option.selected}"> + <f:if condition="{model.showElement}"> + <li class="csc-form-element csc-form-element-{model.elementTypeLowerCase}"> + {option.label} + </li> + </f:if> + <f:if condition="{model.additionalArguments.multiple}"> + <f:then> <f:form.hidden class="{model.additionalArguments.class}" dir="{model.additionalArguments.dir}" @@ -29,36 +79,30 @@ onclick="{model.additionalArguments.onclick}" name="{model.additionalArguments.prefix}[{model.additionalArguments.name}][]" - value="{optgroupOption.value}" + value="{option.value}" additionalAttributes="{model.htmlAttributes}" /> - </f:if> - </f:for> - </f:then> - <f:else> - <f:if condition="{option.selected} == 'selected'"> - <f:if condition="{model.showElement}"> - <li class="csc-form-element csc-form-element-{model.elementTypeLowerCase}"> - {option.label} - </li> - </f:if> - <f:form.hidden - class="{model.additionalArguments.class}" - dir="{model.additionalArguments.dir}" - id="{model.additionalArguments.id}" - lang="{model.additionalArguments.lang}" - style="{model.additionalArguments.style}" - title="{model.additionalArguments.title}" - accesskey="{model.additionalArguments.accesskey}" - tabindex="{model.additionalArguments.tabindex}" - onclick="{model.additionalArguments.onclick}" + </f:then> + <f:else> + <f:form.hidden + class="{model.additionalArguments.class}" + dir="{model.additionalArguments.dir}" + id="{model.additionalArguments.id}" + lang="{model.additionalArguments.lang}" + style="{model.additionalArguments.style}" + title="{model.additionalArguments.title}" + accesskey="{model.additionalArguments.accesskey}" + tabindex="{model.additionalArguments.tabindex}" + onclick="{model.additionalArguments.onclick}" - name="{model.additionalArguments.prefix}[{model.additionalArguments.name}][]" - value="{option.value}" + name="{model.additionalArguments.prefix}[{model.additionalArguments.name}]" + value="{option.value}" - additionalAttributes="{model.htmlAttributes}" - /> + additionalAttributes="{model.htmlAttributes}" + /> + </f:else> + </f:if> </f:if> </f:else> </f:if> diff --git a/typo3/sysext/form/Resources/Private/Partials/Default/PostProcessor/Mail/Html/FlatElements/Select.html b/typo3/sysext/form/Resources/Private/Partials/Default/PostProcessor/Mail/Html/FlatElements/Select.html index f8e7497b54909781b6494978ca6ef6c3e902e59b..b37519f68de60e4a0deb4e66932e3b3a08404b98 100644 --- a/typo3/sysext/form/Resources/Private/Partials/Default/PostProcessor/Mail/Html/FlatElements/Select.html +++ b/typo3/sysext/form/Resources/Private/Partials/Default/PostProcessor/Mail/Html/FlatElements/Select.html @@ -5,18 +5,18 @@ <em>{model.additionalArguments.label}</em> </td> <td> -<f:for each="<form:aggregateSelectOptions model='{model}' />" as="option"> +<f:for each="{form:aggregateSelectOptions(model:model)}" as="option"> <f:if condition="{option.options}"> <f:then> <f:for each="{option.options}" as="optgroupOption"> -<f:if condition="{optgroupOption.selected} == 'selected'"> - <div class="csc-form-element csc-form-element-{model.elementTypeLowerCase}">{optgroupOption.value}</div> +<f:if condition="{optgroupOption.selected}"> + <div class="csc-form-element csc-form-element-{model.elementTypeLowerCase}">{optgroupOption.label}</div> </f:if> </f:for> </f:then> <f:else> -<f:if condition="{option.selected} == 'selected'"> - <div class="csc-form-element csc-form-element-{model.elementTypeLowerCase}">{option.value}</div> +<f:if condition="{option.selected}"> + <div class="csc-form-element csc-form-element-{model.elementTypeLowerCase}">{option.label}</div> </f:if> </f:else> </f:if> diff --git a/typo3/sysext/form/Resources/Private/Partials/Default/PostProcessor/Mail/Plain/FlatElements/Select.html b/typo3/sysext/form/Resources/Private/Partials/Default/PostProcessor/Mail/Plain/FlatElements/Select.html index 1d6cba8b6a6f70c17dccc726579f446d2c097fa3..122c8666ff2045bd88639451c9e6d38dd00433ab 100644 --- a/typo3/sysext/form/Resources/Private/Partials/Default/PostProcessor/Mail/Plain/FlatElements/Select.html +++ b/typo3/sysext/form/Resources/Private/Partials/Default/PostProcessor/Mail/Plain/FlatElements/Select.html @@ -1,3 +1,3 @@ -{namespace form=TYPO3\CMS\Form\ViewHelpers}<f:if condition="{model.showElement}"><form:plainMail labelContent="{model}" newLineAfterLabel="1" indent="4" /><f:for each="<form:aggregateSelectOptions model='{model}' />" as="option"><f:if condition="{option.options}"><f:then><f:for each="{option.options}" as="optgroupOption"><f:if condition="{optgroupOption.selected} == 'selected'"><form:plainMail content="{optgroupOption.value}" /> -</f:if></f:for></f:then><f:else><f:if condition="{option.selected} == 'selected'"><form:plainMail content="{option.value}" /> +{namespace form=TYPO3\CMS\Form\ViewHelpers}<f:if condition="{model.showElement}"><form:plainMail labelContent="{model}" newLineAfterLabel="1" indent="4" /><f:for each="{form:aggregateSelectOptions(model:model)}" as="option"><f:if condition="{option.options}"><f:then><f:for each="{option.options}" as="optgroupOption"><f:if condition="{optgroupOption.selected}"><form:plainMail content="{optgroupOption.label}" /> +</f:if></f:for></f:then><f:else><f:if condition="{option.selected}"><form:plainMail content="{option.label}" /> </f:if></f:else></f:if></f:for><form:plainMail indent="-4"/></f:if> \ No newline at end of file diff --git a/typo3/sysext/form/Resources/Private/Partials/Default/Show/FlatElements/Select.html b/typo3/sysext/form/Resources/Private/Partials/Default/Show/FlatElements/Select.html index ff3382b509cc38104d384871d6c77e1a63aa6d29..3dd57d004ff2f4cc9e704d5867a1588d30a9506e 100644 --- a/typo3/sysext/form/Resources/Private/Partials/Default/Show/FlatElements/Select.html +++ b/typo3/sysext/form/Resources/Private/Partials/Default/Show/FlatElements/Select.html @@ -31,7 +31,7 @@ optionLabelField="label" optionValueField="value" - options='<form:aggregateSelectOptions model="{model}" />' + options="{form:aggregateSelectOptions(model:model)}" prependOptionLabel="{model.additionalArguments.prependOptionLabel}" prependOptionValue="{model.additionalArguments.prependOptionValue}" selectAllByDefault="{model.additionalArguments.selectAllByDefault}"