‪TYPO3CMS  ‪main
ConfigurationService.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 
44 
50 {
54  protected ‪$formSettings;
55 
59  protected ‪$firstLevelCache = [];
60 
62 
63  public function ‪__construct(‪ConfigurationManagerInterface $configurationManager)
64  {
65  $this->formSettings = $configurationManager->‪getConfiguration(‪ConfigurationManagerInterface::CONFIGURATION_TYPE_YAML_SETTINGS, 'form');
66  }
67 
75  public function ‪getPrototypeConfiguration(string $prototypeName): array
76  {
77  if (!isset($this->formSettings['prototypes'][$prototypeName])) {
79  sprintf('The Prototype "%s" was not found.', $prototypeName),
80  1475924277
81  );
82  }
83  return $this->formSettings['prototypes'][$prototypeName];
84  }
85 
92  {
93  $returnValue = GeneralUtility::makeInstance(
94  ArrayProcessor::class,
95  $this->formSettings['formManager']['selectablePrototypesConfiguration'] ?? []
96  )->forEach(
97  GeneralUtility::makeInstance(
98  ArrayProcessing::class,
99  'selectablePrototypeNames',
100  '^([\d]+)\.identifier$',
101  static function ($_, $value) {
102  return $value;
103  }
104  )
105  );
106 
107  return array_values($returnValue['selectablePrototypeNames'] ?? []);
108  }
109 
135  public function ‪isFormElementPropertyDefinedInFormEditorSetup(ValidationDto $dto): bool
136  {
137  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
138  $dto->getPrototypeName()
139  );
140 
141  $subConfig = $formDefinitionValidationConfiguration['formElements'][$dto->getFormElementType()] ?? [];
142  return $this->‪isPropertyDefinedInFormEditorSetup($dto->getPropertyPath(), $subConfig);
143  }
144 
168  public function ‪isPropertyCollectionPropertyDefinedInFormEditorSetup(ValidationDto $dto): bool
169  {
170  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
171  $dto->getPrototypeName()
172  );
173  $subConfig = $formDefinitionValidationConfiguration['formElements'][$dto->getFormElementType()]['collections'][$dto->getPropertyCollectionName()][$dto->getPropertyCollectionElementIdentifier()] ?? [];
174 
175  return $this->‪isPropertyDefinedInFormEditorSetup($dto->getPropertyPath(), $subConfig);
176  }
177 
187  ValidationDto $dto
188  ): bool {
189  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
190  $dto->getPrototypeName()
191  );
192 
193  $propertyPath = $this->‪getBasePropertyPathFromMultiValueFormElementProperty($dto);
194  return isset(
195  $formDefinitionValidationConfiguration['formElements'][$dto->getFormElementType()]['selectOptions'][$propertyPath]
196  );
197  }
198 
206  ValidationDto $dto,
207  bool $translated = true
208  ): array {
210  throw new ‪PropertyException(
211  sprintf(
212  'No selectOptions found for form element type "%s" and property path "%s"',
213  $dto->getFormElementType(),
214  $dto->getPropertyPath()
215  ),
216  1614264312
217  );
218  }
219 
220  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
221  $dto->getPrototypeName()
222  );
223 
224  $property = $translated ? 'selectOptions' : 'untranslatedSelectOptions';
225  $propertyPath = $this->‪getBasePropertyPathFromMultiValueFormElementProperty($dto);
226  return $formDefinitionValidationConfiguration['formElements'][$dto->getFormElementType()][$property][$propertyPath];
227  }
228 
238  ValidationDto $dto
239  ): bool {
240  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
241  $dto->getPrototypeName()
242  );
243 
245  return isset(
246  $formDefinitionValidationConfiguration['collections'][$dto->getPropertyCollectionName()][$dto->getPropertyCollectionElementIdentifier()]['selectOptions'][$propertyPath]
247  );
248  }
249 
257  ValidationDto $dto,
258  bool $translated = true
259  ): array {
261  throw new ‪PropertyException(
262  sprintf(
263  'No selectOptions found for property collection "%s" and identifier "%s" and property path "%s"',
264  $dto->getPropertyCollectionName(),
265  $dto->getPropertyCollectionElementIdentifier(),
266  $dto->getPropertyPath()
267  ),
268  1614264313
269  );
270  }
271 
272  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
273  $dto->getPrototypeName()
274  );
275 
276  $property = $translated ? 'selectOptions' : 'untranslatedSelectOptions';
278  return $formDefinitionValidationConfiguration['collections'][$dto->getPropertyCollectionName()][$dto->getPropertyCollectionElementIdentifier()][$property][$propertyPath];
279  }
280 
282  ‪ValidationDto $dto
283  ): string {
284  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
285  $dto->‪getPrototypeName()
286  );
287 
288  $propertyPath = $dto->‪getPropertyPath();
289  $multiValueProperties = $formDefinitionValidationConfiguration['formElements'][$dto->‪getFormElementType()]['multiValueProperties'] ?? [];
290  foreach ($multiValueProperties as $multiValueProperty) {
291  if (str_starts_with($propertyPath, $multiValueProperty)) {
292  $propertyPath = $multiValueProperty;
293  continue;
294  }
295  }
296 
297  return $propertyPath;
298  }
299 
301  ‪ValidationDto $dto
302  ): string {
303  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
304  $dto->‪getPrototypeName()
305  );
306 
307  $propertyPath = $dto->‪getPropertyPath();
308  $multiValueProperties = $formDefinitionValidationConfiguration['collections'][$dto->‪getPropertyCollectionName()][$dto->‪getPropertyCollectionElementIdentifier()]['multiValueProperties'] ?? [];
309  foreach ($multiValueProperties as $multiValueProperty) {
310  if (str_starts_with($propertyPath, $multiValueProperty)) {
311  $propertyPath = $multiValueProperty;
312  continue;
313  }
314  }
315 
316  return $propertyPath;
317  }
318 
329  ValidationDto $dto
330  ): bool {
331  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
332  $dto->getPrototypeName()
333  );
334  return isset(
335  $formDefinitionValidationConfiguration['formElements'][$dto->getFormElementType()]['predefinedDefaults'][$dto->getPropertyPath()]
336  );
337  }
338 
348  public function ‪getFormElementPredefinedDefaultValueFromFormEditorSetup(ValidationDto $dto, bool $translated = true)
349  {
351  throw new ‪PropertyException(
352  sprintf(
353  'No predefinedDefaults found for form element type "%s" and property path "%s"',
354  $dto->getFormElementType(),
355  $dto->getPropertyPath()
356  ),
357  1528578401
358  );
359  }
360 
361  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
362  $dto->getPrototypeName()
363  );
364 
365  $property = $translated ? 'predefinedDefaults' : 'untranslatedPredefinedDefaults';
366  return $formDefinitionValidationConfiguration['formElements'][$dto->getFormElementType()][$property][$dto->getPropertyPath()];
367  }
368 
379  ValidationDto $dto
380  ): bool {
381  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
382  $dto->getPrototypeName()
383  );
384  return isset(
385  $formDefinitionValidationConfiguration['collections'][$dto->getPropertyCollectionName()][$dto->getPropertyCollectionElementIdentifier()]['predefinedDefaults'][$dto->getPropertyPath()]
386  );
387  }
388 
398  public function ‪getPropertyCollectionPredefinedDefaultValueFromFormEditorSetup(ValidationDto $dto, bool $translated = true)
399  {
401  throw new ‪PropertyException(
402  sprintf(
403  'No predefinedDefaults found for property collection "%s" and identifier "%s" and property path "%s"',
404  $dto->getPropertyCollectionName(),
405  $dto->getPropertyCollectionElementIdentifier(),
406  $dto->getPropertyPath()
407  ),
408  1528578402
409  );
410  }
411 
412  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
413  $dto->getPrototypeName()
414  );
415 
416  $property = $translated ? 'predefinedDefaults' : 'untranslatedPredefinedDefaults';
417  return $formDefinitionValidationConfiguration['collections'][$dto->getPropertyCollectionName()][$dto->getPropertyCollectionElementIdentifier()][$property][$dto->getPropertyPath()];
418  }
419 
430  public function ‪isFormElementTypeCreatableByFormEditor(ValidationDto $dto): bool
431  {
432  if ($dto->getFormElementType() === 'Form') {
433  return true;
434  }
435  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
436  $dto->getPrototypeName()
437  );
438  return $formDefinitionValidationConfiguration['formElements'][$dto->getFormElementType()]['creatable'] ?? false;
439  }
440 
452  public function ‪isPropertyCollectionElementIdentifierCreatableByFormEditor(ValidationDto $dto): bool
453  {
454  $formDefinitionValidationConfiguration = $this->‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(
455  $dto->getPrototypeName()
456  );
457  return $formDefinitionValidationConfiguration['formElements'][$dto->getFormElementType()]['collections'][$dto->getPropertyCollectionName()][$dto->getPropertyCollectionElementIdentifier()]['creatable'] ?? false;
458  }
459 
465  public function ‪isFormElementTypeDefinedInFormSetup(ValidationDto $dto): bool
466  {
467  $prototypeConfiguration = $this->‪getPrototypeConfiguration($dto->getPrototypeName());
469  $prototypeConfiguration,
470  'formElementsDefinition.' . $dto->getFormElementType(),
471  '.'
472  );
473  }
474 
478  public function ‪getAllBackendTranslationsForTranslationKeys(array $keys, string $prototypeName): array
479  {
480  $translations = [];
481  foreach ($keys as $key) {
482  if (!is_string($key)) {
483  continue;
484  }
485 
486  $translations[$key] = $this->‪getAllBackendTranslationsForTranslationKey($key, $prototypeName);
487  }
488 
489  return $translations;
490  }
491 
492  public function ‪getAllBackendTranslationsForTranslationKey(string $key, string $prototypeName): array
493  {
494  $prototypeConfiguration = $this->‪getPrototypeConfiguration($prototypeName);
495 
496  return $this->‪getTranslationService()->translateToAllBackendLanguages(
497  $key,
498  [],
499  $prototypeConfiguration['formEditor']['translationFiles'] ?? []
500  );
501  }
502 
507  protected function ‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(string $prototypeName): array
508  {
509  $cacheKey = implode('_', ['buildFormDefinitionValidationConfigurationFromFormEditorSetup', $prototypeName]);
510  $configuration = $this->‪getCacheEntry($cacheKey);
511 
512  if ($configuration === null) {
513  $prototypeConfiguration = $this->‪getPrototypeConfiguration($prototypeName);
514  $extractorDto = GeneralUtility::makeInstance(ExtractorDto::class, $prototypeConfiguration);
515 
516  GeneralUtility::makeInstance(ArrayProcessor::class, $prototypeConfiguration)->forEach(
517  GeneralUtility::makeInstance(
518  ArrayProcessing::class,
519  'formElementPropertyPaths',
520  '^formElementsDefinition\.(.*)\.formEditor\.editors\.([\d]+)\.(propertyPath|.*\.propertyPath)$',
521  GeneralUtility::makeInstance(PropertyPathsExtractor::class, $extractorDto)
522  ),
523  GeneralUtility::makeInstance(
524  ArrayProcessing::class,
525  'formElementAdditionalElementPropertyPaths',
526  '^formElementsDefinition\.(.*)\.formEditor\.editors\.([\d]+)\.additionalElementPropertyPaths\.([\d]+)',
527  GeneralUtility::makeInstance(AdditionalElementPropertyPathsExtractor::class, $extractorDto)
528  ),
529  GeneralUtility::makeInstance(
530  ArrayProcessing::class,
531  'formElementRelativeMultiValueProperties',
532  '^formElementsDefinition\.(.*)\.formEditor\.editors\.([\d]+)\.templateName$',
533  GeneralUtility::makeInstance(MultiValuePropertiesExtractor::class, $extractorDto)
534  ),
535  GeneralUtility::makeInstance(
536  ArrayProcessing::class,
537  'formElementSelectOptions',
538  '^formElementsDefinition\.(.*)\.formEditor\.editors\.([\d]+)\.selectOptions\.([\d]+)\.value$',
539  GeneralUtility::makeInstance(SelectOptionsExtractor::class, $extractorDto)
540  ),
541  GeneralUtility::makeInstance(
542  ArrayProcessing::class,
543  'formElementPredefinedDefaults',
544  '^formElementsDefinition\.(.*)\.formEditor\.predefinedDefaults\.(.+)$',
545  GeneralUtility::makeInstance(PredefinedDefaultsExtractor::class, $extractorDto)
546  ),
547  GeneralUtility::makeInstance(
548  ArrayProcessing::class,
549  'formElementCreatable',
550  '^formElementsDefinition\.(.*)\.formEditor.group$',
551  GeneralUtility::makeInstance(IsCreatableFormElementExtractor::class, $extractorDto)
552  ),
553  GeneralUtility::makeInstance(
554  ArrayProcessing::class,
555  'propertyCollectionCreatable',
556  '^formElementsDefinition\.(.*)\.formEditor\.editors\.([\d]+)\.templateName$',
557  GeneralUtility::makeInstance(IsCreatablePropertyCollectionElementExtractor::class, $extractorDto)
558  ),
559  GeneralUtility::makeInstance(
560  ArrayProcessing::class,
561  'propertyCollectionPropertyPaths',
562  '^formElementsDefinition\.(.*)\.formEditor\.propertyCollections\.(finishers|validators)\.([\d]+)\.editors\.([\d]+)\.(propertyPath|.*\.propertyPath)$',
563  GeneralUtility::makeInstance(CollectionPropertyPathsExtractor::class, $extractorDto)
564  ),
565  GeneralUtility::makeInstance(
566  ArrayProcessing::class,
567  'propertyCollectionAdditionalElementPropertyPaths',
568  '^formElementsDefinition\.(.*)\.formEditor\.propertyCollections\.(finishers|validators)\.([\d]+)\.editors\.([\d]+)\.additionalElementPropertyPaths\.([\d]+)',
569  GeneralUtility::makeInstance(AdditionalElementPropertyPathsExtractor::class, $extractorDto)
570  ),
571  GeneralUtility::makeInstance(
572  ArrayProcessing::class,
573  'propertyCollectionRelativeMultiValueProperties',
574  '^formElementsDefinition\.(.*)\.formEditor\.propertyCollections\.(finishers|validators)\.([\d]+)\.editors\.([\d]+)\.templateName$',
575  GeneralUtility::makeInstance(CollectionMultiValuePropertiesExtractor::class, $extractorDto)
576  ),
577  GeneralUtility::makeInstance(
578  ArrayProcessing::class,
579  'propertyCollectionSelectOptions',
580  '^formElementsDefinition\.(.*)\.formEditor\.propertyCollections\.(finishers|validators)\.([\d]+)\.editors\.([\d]+)\.selectOptions\.([\d]+)\.value$',
581  GeneralUtility::makeInstance(CollectionSelectOptionsExtractor::class, $extractorDto)
582  ),
583  GeneralUtility::makeInstance(
584  ArrayProcessing::class,
585  'propertyCollectionPredefinedDefaults',
586  '^(validatorsDefinition|finishersDefinition)\.(.*)\.formEditor\.predefinedDefaults\.(.+)$',
587  GeneralUtility::makeInstance(CollectionPredefinedDefaultsExtractor::class, $extractorDto)
588  )
589  );
590  $configuration = $extractorDto->getResult();
591 
592  $configuration = $this->‪translateValues($prototypeConfiguration, $configuration);
593 
595  $prototypeName,
596  $configuration
597  );
598 
599  $this->‪setCacheEntry($cacheKey, $configuration);
600  }
601 
602  return $configuration;
603  }
604 
633  string $prototypeName,
634  array $configuration
635  ): array {
636  foreach (‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['buildFormDefinitionValidationConfiguration'] ?? [] as $className) {
637  $hookObj = GeneralUtility::makeInstance($className);
638  if (method_exists($hookObj, 'addAdditionalPropertyPaths')) {
639  $validationDto = GeneralUtility::makeInstance(ValidationDto::class, $prototypeName);
640  $propertyPathsFromHook = $hookObj->addAdditionalPropertyPaths($validationDto);
641  if (!is_array($propertyPathsFromHook)) {
642  $message = 'Return value of "%s->addAdditionalPropertyPaths() must be type "array"';
643  throw new ‪PropertyException(sprintf($message, $className), 1528633965);
644  }
645  $configuration = $this->‪addAdditionalPropertyPathsFromHook(
646  $className,
647  $prototypeName,
648  $propertyPathsFromHook,
649  $configuration
650  );
651  }
652  }
653 
654  return $configuration;
655  }
656 
660  protected function ‪addAdditionalPropertyPathsFromHook(
661  string $hookClassName,
662  string $prototypeName,
663  array $propertyPathsFromHook,
664  array $configuration
665  ): array {
666  foreach ($propertyPathsFromHook as $index => $validationDto) {
667  if (!($validationDto instanceof ValidationDto)) {
668  $message = 'Return value of "%s->addAdditionalPropertyPaths()[%s] must be an instance of "%s"';
669  throw new ‪PropertyException(
670  sprintf($message, $hookClassName, $index, ValidationDto::class),
671  1528633966
672  );
673  }
674 
675  if ($validationDto->getPrototypeName() !== $prototypeName) {
676  $message = 'The prototype name "%s" does not match "%s" on "%s->addAdditionalPropertyPaths()[%s]';
677  throw new ‪PropertyException(
678  sprintf(
679  $message,
680  $validationDto->getPrototypeName(),
681  $prototypeName,
682  $hookClassName,
683  $index,
684  ValidationDto::class
685  ),
686  1528634966
687  );
688  }
689 
690  $formElementType = $validationDto->getFormElementType();
691  if (!$this->‪isFormElementTypeDefinedInFormSetup($validationDto)) {
692  $message = 'Form element type "%s" does not exist in prototype configuration "%s"';
693  throw new ‪PropertyException(
694  sprintf($message, $formElementType, $validationDto->getPrototypeName()),
695  1528633967
696  );
697  }
698 
699  if ($validationDto->hasPropertyCollectionName() &&
700  $validationDto->hasPropertyCollectionElementIdentifier()) {
701  $propertyCollectionName = $validationDto->getPropertyCollectionName();
702  $propertyCollectionElementIdentifier = $validationDto->getPropertyCollectionElementIdentifier();
703 
704  if ($propertyCollectionName !== 'finishers' && $propertyCollectionName !== 'validators') {
705  $message = 'The property collection name "%s" for form element "%s" must be "finishers" or "validators"';
706  throw new ‪PropertyException(
707  sprintf($message, $propertyCollectionName, $formElementType),
708  1528636941
709  );
710  }
711 
712  $configuration['formElements'][$formElementType]['collections'][$propertyCollectionName][$propertyCollectionElementIdentifier]['additionalPropertyPaths'][]
713  = $validationDto->getPropertyPath();
714  } else {
715  $configuration['formElements'][$formElementType]['additionalPropertyPaths'][]
716  = $validationDto->getPropertyPath();
717  }
718  }
719 
720  return $configuration;
721  }
722 
723  protected function ‪isPropertyDefinedInFormEditorSetup(string $propertyPath, array $subConfig): bool
724  {
725  if (empty($subConfig)) {
726  return false;
727  }
728  if (
729  in_array($propertyPath, $subConfig['propertyPaths'] ?? [], true)
730  || in_array($propertyPath, $subConfig['additionalElementPropertyPaths'] ?? [], true)
731  || in_array($propertyPath, $subConfig['additionalPropertyPaths'] ?? [], true)
732  ) {
733  return true;
734  }
735  foreach ($subConfig['multiValueProperties'] ?? [] as $relativeMultiValueProperty) {
736  if (str_starts_with($propertyPath, $relativeMultiValueProperty)) {
737  return true;
738  }
739  }
740 
741  return false;
742  }
743 
744  protected function ‪translateValues(array $prototypeConfiguration, array $configuration): array
745  {
746  if (isset($configuration['formElements'])) {
747  $configuration['formElements'] = $this->‪translatePredefinedDefaults(
748  $prototypeConfiguration,
749  $configuration['formElements']
750  );
751 
752  $configuration['formElements'] = $this->‪translateSelectOptions(
753  $prototypeConfiguration,
754  $configuration['formElements']
755  );
756  }
757 
758  foreach ($configuration['collections'] ?? [] as $name => $collections) {
759  $configuration['collections'][$name] = $this->‪translatePredefinedDefaults($prototypeConfiguration, $collections);
760  $configuration['collections'][$name] = $this->‪translateSelectOptions($prototypeConfiguration, $configuration['collections'][$name]);
761  }
762  return $configuration;
763  }
764 
765  protected function ‪translatePredefinedDefaults(array $prototypeConfiguration, array $formElements): array
766  {
767  foreach ($formElements ?? [] as $name => $formElement) {
768  if (!isset($formElement['predefinedDefaults'])) {
769  continue;
770  }
771  $formElement['untranslatedPredefinedDefaults'] = $formElement['predefinedDefaults'];
772  $formElement['predefinedDefaults'] = $this->‪getTranslationService()->translateValuesRecursive(
773  $formElement['predefinedDefaults'],
774  $prototypeConfiguration['formEditor']['translationFiles'] ?? []
775  );
776  $formElements[$name] = $formElement;
777  }
778  return $formElements;
779  }
780 
781  protected function ‪translateSelectOptions(array $prototypeConfiguration, array $formElements): array
782  {
783  foreach ($formElements ?? [] as $name => $formElement) {
784  if (empty($formElement['selectOptions']) || !is_array($formElement['selectOptions'])) {
785  continue;
786  }
787  $formElement['untranslatedSelectOptions'] = $formElement['selectOptions'];
788 
789  $formElement['selectOptions'] = $this->‪getTranslationService()->translateValuesRecursive(
790  $formElement['selectOptions'],
791  $prototypeConfiguration['formEditor']['translationFiles'] ?? []
792  );
793  $formElements[$name] = $formElement;
794  }
795  return $formElements;
796  }
797 
801  protected function ‪getCacheEntry(string $cacheKey)
802  {
803  if (isset($this->firstLevelCache[$cacheKey])) {
804  return $this->firstLevelCache[$cacheKey];
805  }
806  $cacheValue = $this->‪getCacheFrontend()->get('form_' . $cacheKey);
807  return $cacheValue === false ? null : $cacheValue;
808  }
809 
813  protected function ‪setCacheEntry(string $cacheKey, $value): void
814  {
815  $this->‪getCacheFrontend()->set('form_' . $cacheKey, $value);
816  $this->firstLevelCache[$cacheKey] = $value;
817  }
818 
819  protected function ‪getTranslationService(): ‪TranslationService
820  {
821  return $this->translationService instanceof ‪TranslationService
822  ? $this->translationService
823  : GeneralUtility::makeInstance(TranslationService::class);
824  }
825 
826  protected function ‪getCacheFrontend(): ‪FrontendInterface
827  {
828  return GeneralUtility::makeInstance(CacheManager::class)->getCache('assets');
829  }
830 }
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Validators\ValidationDto\getPropertyCollectionName
‪getPropertyCollectionName()
Definition: ValidationDto.php:84
‪TYPO3\CMS\Extbase\Property\Exception
Definition: DuplicateObjectException.php:18
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\FormElement\PredefinedDefaultsExtractor
Definition: PredefinedDefaultsExtractor.php:26
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\PropertyCollectionElement\MultiValuePropertiesExtractor
Definition: MultiValuePropertiesExtractor.php:27
‪TYPO3\CMS\Form\Domain\Configuration
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getAllowedValuesForPropertyCollectionPropertyFromFormEditorSetup
‪getAllowedValuesForPropertyCollectionPropertyFromFormEditorSetup(ValidationDto $dto, bool $translated=true)
Definition: ConfigurationService.php:254
‪TYPO3\CMS\Form\Service\TranslationService
Definition: TranslationService.php:45
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\isFormElementTypeCreatableByFormEditor
‪isFormElementTypeCreatableByFormEditor(ValidationDto $dto)
Definition: ConfigurationService.php:428
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getAllowedValuesForFormElementPropertyFromFormEditorSetup
‪getAllowedValuesForFormElementPropertyFromFormEditorSetup(ValidationDto $dto, bool $translated=true)
Definition: ConfigurationService.php:203
‪TYPO3\CMS\Form\Domain\Configuration\Exception\PrototypeNotFoundException
Definition: PrototypeNotFoundException.php:25
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\isFormElementPropertyDefinedInPredefinedDefaultsInFormEditorSetup
‪isFormElementPropertyDefinedInPredefinedDefaultsInFormEditorSetup(ValidationDto $dto)
Definition: ConfigurationService.php:326
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\FormElement\MultiValuePropertiesExtractor
Definition: MultiValuePropertiesExtractor.php:27
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Validators\ValidationDto\getFormElementType
‪getFormElementType()
Definition: ValidationDto.php:69
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Validators\ValidationDto
Definition: ValidationDto.php:23
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\addAdditionalPropertyPathsFromHook
‪addAdditionalPropertyPathsFromHook(string $hookClassName, string $prototypeName, array $propertyPathsFromHook, array $configuration)
Definition: ConfigurationService.php:658
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getFormElementPredefinedDefaultValueFromFormEditorSetup
‪mixed getFormElementPredefinedDefaultValueFromFormEditorSetup(ValidationDto $dto, bool $translated=true)
Definition: ConfigurationService.php:346
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\ExtractorDto
Definition: ExtractorDto.php:24
‪TYPO3\CMS\Core\Utility\ArrayUtility\isValidPath
‪static bool isValidPath(array $array, array|string $path, string $delimiter='/')
Definition: ArrayUtility.php:141
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getAllBackendTranslationsForTranslationKey
‪getAllBackendTranslationsForTranslationKey(string $key, string $prototypeName)
Definition: ConfigurationService.php:490
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\isFormElementTypeDefinedInFormSetup
‪isFormElementTypeDefinedInFormSetup(ValidationDto $dto)
Definition: ConfigurationService.php:463
‪TYPO3\CMS\Form\Domain\Configuration\ArrayProcessing\ArrayProcessing
Definition: ArrayProcessing.php:27
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\$translationService
‪TranslationService $translationService
Definition: ConfigurationService.php:59
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\isPropertyCollectionPropertyDefinedInPredefinedDefaultsInFormEditorSetup
‪isPropertyCollectionPropertyDefinedInPredefinedDefaultsInFormEditorSetup(ValidationDto $dto)
Definition: ConfigurationService.php:376
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Validators\ValidationDto\getPropertyCollectionElementIdentifier
‪getPropertyCollectionElementIdentifier()
Definition: ValidationDto.php:89
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\$firstLevelCache
‪array $firstLevelCache
Definition: ConfigurationService.php:57
‪TYPO3\CMS\Form\Domain\Configuration\ArrayProcessing\ArrayProcessor
Definition: ArrayProcessor.php:30
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\$formSettings
‪array $formSettings
Definition: ConfigurationService.php:53
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\executeBuildFormDefinitionValidationConfigurationHooks
‪executeBuildFormDefinitionValidationConfigurationHooks(string $prototypeName, array $configuration)
Definition: ConfigurationService.php:630
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\PropertyCollectionElement\PropertyPathsExtractor
Definition: PropertyPathsExtractor.php:27
‪TYPO3\CMS\Core\Cache\CacheManager
Definition: CacheManager.php:36
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\isFormElementPropertyDefinedInFormEditorSetup
‪isFormElementPropertyDefinedInFormEditorSetup(ValidationDto $dto)
Definition: ConfigurationService.php:133
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\isPropertyCollectionElementIdentifierCreatableByFormEditor
‪isPropertyCollectionElementIdentifierCreatableByFormEditor(ValidationDto $dto)
Definition: ConfigurationService.php:450
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\PropertyCollectionElement\PredefinedDefaultsExtractor
Definition: PredefinedDefaultsExtractor.php:26
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\__construct
‪__construct(ConfigurationManagerInterface $configurationManager)
Definition: ConfigurationService.php:61
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface\getConfiguration
‪array getConfiguration(string $configurationType, ?string $extensionName=null, ?string $pluginName=null)
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getAllBackendTranslationsForTranslationKeys
‪getAllBackendTranslationsForTranslationKeys(array $keys, string $prototypeName)
Definition: ConfigurationService.php:476
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService
Definition: ConfigurationService.php:50
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getCacheFrontend
‪getCacheFrontend()
Definition: ConfigurationService.php:824
‪TYPO3\CMS\Core\Cache\Frontend\FrontendInterface
Definition: FrontendInterface.php:22
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getBasePropertyPathFromMultiValueFormElementProperty
‪getBasePropertyPathFromMultiValueFormElementProperty(ValidationDto $dto)
Definition: ConfigurationService.php:279
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\formElementPropertyHasLimitedAllowedValuesDefinedWithinFormEditorSetup
‪formElementPropertyHasLimitedAllowedValuesDefinedWithinFormEditorSetup(ValidationDto $dto)
Definition: ConfigurationService.php:184
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\FormElement\SelectOptionsExtractor
Definition: SelectOptionsExtractor.php:27
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\FormElement\IsCreatableFormElementExtractor
Definition: IsCreatableFormElementExtractor.php:27
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Validators\ValidationDto\getPropertyPath
‪getPropertyPath()
Definition: ValidationDto.php:79
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\isPropertyCollectionPropertyDefinedInFormEditorSetup
‪isPropertyCollectionPropertyDefinedInFormEditorSetup(ValidationDto $dto)
Definition: ConfigurationService.php:166
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getSelectablePrototypeNamesDefinedInFormEditorSetup
‪getSelectablePrototypeNamesDefinedInFormEditorSetup()
Definition: ConfigurationService.php:89
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\PropertyCollectionElement\SelectOptionsExtractor
Definition: SelectOptionsExtractor.php:27
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:26
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getCacheEntry
‪mixed getCacheEntry(string $cacheKey)
Definition: ConfigurationService.php:799
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\translateSelectOptions
‪translateSelectOptions(array $prototypeConfiguration, array $formElements)
Definition: ConfigurationService.php:779
‪TYPO3\CMS\Core\SingletonInterface
Definition: SingletonInterface.php:22
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getPrototypeConfiguration
‪array getPrototypeConfiguration(string $prototypeName)
Definition: ConfigurationService.php:73
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\AdditionalElementPropertyPathsExtractor
Definition: AdditionalElementPropertyPathsExtractor.php:24
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getPropertyCollectionPredefinedDefaultValueFromFormEditorSetup
‪mixed getPropertyCollectionPredefinedDefaultValueFromFormEditorSetup(ValidationDto $dto, bool $translated=true)
Definition: ConfigurationService.php:396
‪TYPO3\CMS\Form\Mvc\Configuration\ConfigurationManagerInterface\CONFIGURATION_TYPE_YAML_SETTINGS
‪const CONFIGURATION_TYPE_YAML_SETTINGS
Definition: ConfigurationManagerInterface.php:30
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\isPropertyDefinedInFormEditorSetup
‪isPropertyDefinedInFormEditorSetup(string $propertyPath, array $subConfig)
Definition: ConfigurationService.php:721
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\buildFormDefinitionValidationConfigurationFromFormEditorSetup
‪buildFormDefinitionValidationConfigurationFromFormEditorSetup(string $prototypeName)
Definition: ConfigurationService.php:505
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getBasePropertyPathFromMultiValuePropertyCollectionElement
‪getBasePropertyPathFromMultiValuePropertyCollectionElement(ValidationDto $dto)
Definition: ConfigurationService.php:298
‪TYPO3\CMS\Form\Domain\Configuration\Exception\PropertyException
Definition: PropertyException.php:25
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\translateValues
‪translateValues(array $prototypeConfiguration, array $configuration)
Definition: ConfigurationService.php:742
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\getTranslationService
‪getTranslationService()
Definition: ConfigurationService.php:817
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\FormElement\PropertyPathsExtractor
Definition: PropertyPathsExtractor.php:27
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\translatePredefinedDefaults
‪translatePredefinedDefaults(array $prototypeConfiguration, array $formElements)
Definition: ConfigurationService.php:763
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\propertyCollectionPropertyHasLimitedAllowedValuesDefinedWithinFormEditorSetup
‪propertyCollectionPropertyHasLimitedAllowedValuesDefinedWithinFormEditorSetup(ValidationDto $dto)
Definition: ConfigurationService.php:235
‪TYPO3\CMS\Form\Domain\Configuration\FormDefinition\Validators\ValidationDto\getPrototypeName
‪getPrototypeName()
Definition: ValidationDto.php:64
‪TYPO3\CMS\Form\Domain\Configuration\FrameworkConfiguration\Extractors\PropertyCollectionElement\IsCreatablePropertyCollectionElementExtractor
Definition: IsCreatablePropertyCollectionElementExtractor.php:27
‪TYPO3\CMS\Form\Mvc\Configuration\ConfigurationManagerInterface
Definition: ConfigurationManagerInterface.php:29
‪TYPO3\CMS\Form\Domain\Configuration\ConfigurationService\setCacheEntry
‪setCacheEntry(string $cacheKey, $value)
Definition: ConfigurationService.php:811