TYPO3 CMS  TYPO3_8-7
MultiValuePropertiesExtractor.php
Go to the documentation of this file.
1 <?php
2 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 
20 
25 {
26 
32  public function __invoke(string $_, $value, array $matches)
33  {
34  list(, $formElementType, $propertyCollectionName, $propertyCollectionIndex, $propertyCollectionEditorIndex) = $matches;
35 
36  if (
37  $value !== 'Inspector-PropertyGridEditor'
38  && $value !== 'Inspector-MultiSelectEditor'
39  && $value !== 'Inspector-ValidationErrorMessageEditor'
40  ) {
41  return;
42  }
43 
44  $propertyPath = implode(
45  '.',
46  [
47  'formElementsDefinition',
48  $formElementType,
49  'formEditor',
50  'propertyCollections',
51  $propertyCollectionName,
52  $propertyCollectionIndex,
53  'editors',
54  $propertyCollectionEditorIndex,
55  'propertyPath',
56  ]
57  );
58  $propertyValue = ArrayUtility::getValueByPath($this->extractorDto->getPrototypeConfiguration(), $propertyPath, '.');
59 
60  $result = $this->extractorDto->getResult();
61 
62  if (
63  $value === 'Inspector-PropertyGridEditor'
64  || $value === 'Inspector-MultiSelectEditor'
65  ) {
66  $identifierPath = implode(
67  '.',
68  [
69  'formElementsDefinition',
70  $formElementType,
71  'formEditor',
72  'propertyCollections',
73  $propertyCollectionName,
74  $propertyCollectionIndex,
75  'identifier',
76  ]
77  );
78  $identifier = ArrayUtility::getValueByPath($this->extractorDto->getPrototypeConfiguration(), $identifierPath, '.');
79 
80  $result['formElements'][$formElementType]['collections'][$propertyCollectionName][$identifier]['multiValueProperties'][] = $propertyValue;
81  if ($value === 'Inspector-PropertyGridEditor') {
82  $result['formElements'][$formElementType]['collections'][$propertyCollectionName][$identifier]['multiValueProperties'][] = 'defaultValue';
83  }
84  } else {
85  $result['formElements'][$formElementType]['multiValueProperties'][] = $propertyValue;
86  }
87 
88  $this->extractorDto->setResult($result);
89  }
90 }
static getValueByPath(array $array, $path, $delimiter='/')