‪TYPO3CMS  ‪main
FinisherOptionsFlexFormOverridesConverter.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
22 
29 {
33  protected ‪$converterDto;
34 
36  {
37  $this->converterDto = ‪$converterDto;
38  }
39 
52  public function ‪__invoke(string $_, $__, array $matches): void
53  {
54  [, $optionKey] = $matches;
55  $prototypeFinisherDefinition = $this->converterDto->getPrototypeFinisherDefinition();
56  $finisherDefinition = $this->converterDto->getFinisherDefinition();
57  $finisherIdentifier = $this->converterDto->getFinisherIdentifier();
58  $flexFormSheetSettings = $this->converterDto->getFlexFormSheetSettings();
59 
60  try {
62  $flexFormSheetSettings['finishers'][$finisherIdentifier],
63  $optionKey,
64  '.'
65  );
66  } catch (MissingArrayPathException $exception) {
67  return;
68  }
69 
70  $fieldConfiguration = $prototypeFinisherDefinition['FormEngine']['elements'][$optionKey] ?? [];
71 
72  if ($fieldConfiguration['section'] ?? false) {
73  $processedOptionValue = [];
74 
75  foreach ($value ?: [] as $optionListValue) {
76  $key = $optionListValue[$fieldConfiguration['sectionItemKey']];
77  $value = $optionListValue[$fieldConfiguration['sectionItemValue']];
78  $processedOptionValue[$key] = $value;
79  }
80 
81  if (!empty($processedOptionValue)) {
82  $value = $processedOptionValue;
83  }
84  }
85 
86  $optionPath = 'options.' . $optionKey;
87 
88  // Skip additional translation for finisher options that were changed via flexform
89  if ($this->‪optionValueHasChanged($finisherDefinition, $optionPath, $value)) {
90  $finisherDefinition['options']['translation']['propertiesExcludedFromTranslation'][] = $optionKey;
91  }
92 
93  $finisherDefinition = ‪ArrayUtility::setValueByPath($finisherDefinition, $optionPath, $value, '.');
94 
95  $this->converterDto->setFinisherDefinition($finisherDefinition);
96  }
97 
106  protected function ‪optionValueHasChanged(array $finisherDefinition, string $optionPath, mixed $value): bool
107  {
108  try {
109  return $value !== ‪ArrayUtility::getValueByPath($finisherDefinition, $optionPath, '.');
110  } catch (MissingArrayPathException) {
111  return true;
112  }
113  }
114 }
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Converters\FinisherOptionsFlexFormOverridesConverter\__construct
‪__construct(FlexFormFinisherOverridesConverterDto $converterDto)
Definition: FinisherOptionsFlexFormOverridesConverter.php:34
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Converters
Definition: AbstractConverter.php:18
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Converters\FinisherOptionsFlexFormOverridesConverter
Definition: FinisherOptionsFlexFormOverridesConverter.php:29
‪TYPO3\CMS\Core\Utility\Exception\MissingArrayPathException
Definition: MissingArrayPathException.php:27
‪TYPO3\CMS\Core\Utility\ArrayUtility\getValueByPath
‪static getValueByPath(array $array, array|string $path, string $delimiter='/')
Definition: ArrayUtility.php:176
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Converters\FinisherOptionsFlexFormOverridesConverter\$converterDto
‪FlexFormFinisherOverridesConverterDto $converterDto
Definition: FinisherOptionsFlexFormOverridesConverter.php:32
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Converters\FinisherOptionsFlexFormOverridesConverter\optionValueHasChanged
‪optionValueHasChanged(array $finisherDefinition, string $optionPath, mixed $value)
Definition: FinisherOptionsFlexFormOverridesConverter.php:105
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Converters\FinisherOptionsFlexFormOverridesConverter\__invoke
‪__invoke(string $_, $__, array $matches)
Definition: FinisherOptionsFlexFormOverridesConverter.php:51
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:26
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Converters\FlexFormFinisherOverridesConverterDto
Definition: FlexFormFinisherOverridesConverterDto.php:24
‪TYPO3\CMS\Core\Utility\ArrayUtility\setValueByPath
‪static array setValueByPath(array $array, string|array|\ArrayAccess $path, mixed $value, string $delimiter='/')
Definition: ArrayUtility.php:261