2 namespace TYPO3\CMS\Form\Domain\Factory;
57 $elements = json_decode((
string)$json,
true);
58 $typoscriptArray = array();
61 if ($typoscriptArray[
'10.'] && is_array($typoscriptArray[
'10.']) && !empty($typoscriptArray[
'10.'])) {
78 if (is_array($elements)) {
80 foreach ($elements as $element) {
81 if ($element[
'xtype']) {
83 switch ($element[
'xtype']) {
84 case 'typo3-form-wizard-elements-basic-button':
86 case 'typo3-form-wizard-elements-basic-checkbox':
88 case 'typo3-form-wizard-elements-basic-fileupload':
90 case 'typo3-form-wizard-elements-basic-hidden':
92 case 'typo3-form-wizard-elements-basic-password':
94 case 'typo3-form-wizard-elements-basic-radio':
96 case 'typo3-form-wizard-elements-basic-reset':
98 case 'typo3-form-wizard-elements-basic-select':
100 case 'typo3-form-wizard-elements-basic-submit':
102 case 'typo3-form-wizard-elements-basic-textarea':
104 case 'typo3-form-wizard-elements-basic-textline':
106 case 'typo3-form-wizard-elements-predefined-email':
108 case 'typo3-form-wizard-elements-content-header':
110 case 'typo3-form-wizard-elements-content-textblock':
113 case 'typo3-form-wizard-elements-basic-fieldset':
115 case 'typo3-form-wizard-elements-predefined-name':
117 $this->
getContainer($element, $parent, $elementCounter);
119 case 'typo3-form-wizard-elements-predefined-checkboxgroup':
121 case 'typo3-form-wizard-elements-predefined-radiogroup':
123 $this->
getContainer($element, $parent, $elementCounter,
true);
125 case 'typo3-form-wizard-elements-basic-form':
127 $this->
getContainer($element, $parent, $elementCounter);
128 $this->
getForm($element, $parent, $elementCounter);
134 $elementCounter = $elementCounter + 10;
148 protected function getContainer(array $element, array &$parent, $elementCounter, $childrenWithParentName =
false)
150 if ($element[
'elementContainer'] && $element[
'elementContainer'][
'items']) {
151 $this->
convertToTyposcriptArray($element[
'elementContainer'][
'items'], $parent[$elementCounter .
'.'], $childrenWithParentName);
167 protected function getForm(array $element, array &$parent, $elementCounter)
170 if (!empty($this->validationRules)) {
187 protected function getDefaultElementSetup(array $element, array &$parent, $elementCounter, $childrenWithParentName =
false)
190 if (is_null($contentObjectType) ===
false) {
191 $parent[$elementCounter] = $contentObjectType;
192 $parent[$elementCounter .
'.'] = array();
193 if ($element[
'configuration']) {
194 $this->
setConfiguration($element, $parent, $elementCounter, $childrenWithParentName);
207 $contentObjectType = null;
208 $shortXType = str_replace(
'typo3-form-wizard-elements-',
'', $element[
'xtype']);
209 list($category, $type) = explode(
'-', $shortXType);
212 $contentObjectType = strtoupper($type);
216 case 'checkboxgroup':
219 $contentObjectType = strtoupper($type);
222 $contentObjectType =
'TEXTLINE';
225 $contentObjectType =
'FIELDSET';
233 $contentObjectType = strtoupper($type);
238 return $contentObjectType;
251 protected function setConfiguration(array $element, array &$parent, $elementCounter, $childrenWithParentName =
false)
253 foreach ($element[
'configuration'] as $key => $value) {
256 $this->
setAttributes($value, $parent, $elementCounter, $childrenWithParentName);
262 $this->
setFilters($value, $parent, $elementCounter);
265 $this->
setLabel($value, $parent, $elementCounter);
268 $this->
setLayout($element, $value, $parent, $elementCounter);
271 $this->
setLegend($value, $parent, $elementCounter);
274 $this->
setOptions($element, $value, $parent, $elementCounter);
276 case 'postProcessor':
280 $this->
setPrefix($value, $parent, $elementCounter);
286 $this->
setVarious($element, $value, $parent, $elementCounter);
303 protected function setAttributes(array $attributes, array &$parent, $elementCounter, $childrenWithParentName =
false)
305 foreach ($attributes as $key => $value) {
306 if ($key ===
'name' && $value ===
'' && !$childrenWithParentName) {
310 $parent[$elementCounter .
'.'][$key] = $value;
327 $parent[$elementCounter .
'.'][
'confirmation'] = $confirmation;
338 protected function setFilters(array $filters, array &$parent, $elementCounter)
340 if (!empty($filters)) {
341 $parent[$elementCounter .
'.'][
'filters'] = array();
343 foreach ($filters as $name => $filterConfiguration) {
344 $parent[$elementCounter .
'.'][
'filters'][$filterCounter] = $name;
345 $parent[$elementCounter .
'.'][
'filters'][$filterCounter .
'.'] = $filterConfiguration;
359 protected function setLabel(array $label, array &$parent, $elementCounter)
361 if ($label[
'value'] !=
'') {
362 $parent[$elementCounter .
'.'][
'label.'][
'value'] = $label[
'value'];
379 protected function setLayout(array $element, $value, array &$parent, $elementCounter)
381 switch ($element[
'xtype']) {
382 case 'typo3-form-wizard-elements-basic-button':
384 case 'typo3-form-wizard-elements-basic-fileupload':
386 case 'typo3-form-wizard-elements-basic-password':
388 case 'typo3-form-wizard-elements-basic-reset':
390 case 'typo3-form-wizard-elements-basic-submit':
392 case 'typo3-form-wizard-elements-basic-textline':
393 if ($value ===
'back') {
394 $parent[$elementCounter .
'.'][
'layout'] =
'<input />' . LF .
'<label />';
397 case 'typo3-form-wizard-elements-basic-checkbox':
399 case 'typo3-form-wizard-elements-basic-radio':
400 if ($value ===
'front') {
401 $parent[$elementCounter .
'.'][
'layout'] =
'<label />' . LF .
'<input />';
404 case 'typo3-form-wizard-elements-basic-select':
405 if ($value ===
'back') {
406 $parent[$elementCounter .
'.'][
'layout'] =
'<select>' . LF .
'<elements />' . LF .
'</select>' . LF .
'<label />';
409 case 'typo3-form-wizard-elements-basic-textarea':
410 if ($value ===
'back') {
411 $parent[$elementCounter .
'.'][
'layout'] =
'<textarea />' . LF .
'<label />';
427 protected function setLegend(array $legend, array &$parent, $elementCounter)
429 if ($legend[
'value'] !=
'') {
430 $parent[$elementCounter .
'.'][
'legend.'][
'value'] = $legend[
'value'];
447 protected function setOptions(array $element, array $options, array &$parent, $elementCounter)
449 if (is_array($options) && $element[
'xtype'] ===
'typo3-form-wizard-elements-basic-select') {
451 foreach ($options as $option) {
452 $parent[$elementCounter .
'.'][$optionCounter] =
'OPTION';
453 $parent[$elementCounter .
'.'][$optionCounter .
'.'][
'text'] = $option[
'text'];
454 if (isset($option[
'attributes'])) {
455 $parent[$elementCounter .
'.'][$optionCounter .
'.'] += $option[
'attributes'];
457 $optionCounter = $optionCounter + 10;
470 protected function setPostProcessor(array $postProcessors, array &$parent, $elementCounter)
472 if (!empty($postProcessors)) {
473 $parent[$elementCounter .
'.'][
'postProcessor'] = array();
474 $postProcessorCounter = 1;
475 foreach ($postProcessors as $name => $postProcessorConfiguration) {
476 $parent[$elementCounter .
'.'][
'postProcessor'][$postProcessorCounter] = $name;
477 $parent[$elementCounter .
'.'][
'postProcessor'][$postProcessorCounter .
'.'] = $postProcessorConfiguration;
478 $postProcessorCounter++;
493 protected function setPrefix($prefix, array &$parent, $elementCounter)
495 $parent[$elementCounter .
'.'][
'prefix'] = $prefix;
510 foreach ($validationRules as $name => $ruleConfiguration) {
511 if (isset($element[
'configuration'][
'attributes'][
'name']) && $element[
'configuration'][
'attributes'][
'name'] !=
'') {
512 $ruleConfiguration[
'element'] = $element[
'configuration'][
'attributes'][
'name'];
513 }
elseif (isset($element[
'configuration'][
'various'][
'name']) && $element[
'configuration'][
'various'][
'name'] !=
'') {
514 $ruleConfiguration[
'element'] = $element[
'configuration'][
'various'][
'name'];
519 $this->validationRules[$this->validationRulesCounter .
'.'] = $ruleConfiguration;
520 $this->validationRulesCounter++;
533 protected function setVarious(array $element, array $various, array &$parent, $elementCounter)
535 foreach ($various as $key => $value) {
544 $parent[$elementCounter .
'.'][$key] = (string)$value;
564 $typoscript .= str_repeat(TAB, $tabCount) . str_replace(
'.',
'', $addKey) .
' {' . LF;
567 foreach ($typoscriptArray as $key => $value) {
568 if (!is_array($value)) {
569 if (strstr($value, LF)) {
570 $typoscript .= str_repeat(TAB, $tabCount) . $key .
' (' . LF;
571 if ($key !==
'text') {
572 $value = str_replace(LF, LF . str_repeat(TAB, ($tabCount + 1)), $value);
573 $typoscript .= str_repeat(TAB, ($tabCount + 1)) . $value . LF;
575 $typoscript .= $value . LF;
577 $typoscript .= str_repeat(TAB, $tabCount) .
')' . LF;
579 $typoscript .= str_repeat(TAB, $tabCount) . $key .
' = ' . $value . LF;
587 $typoscript .= str_repeat(TAB, $tabCount) .
'}' . LF;