‪TYPO3CMS  ‪main
AbstractNode.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 
20 use Psr\Log\LoggerAwareInterface;
21 use Psr\Log\LoggerAwareTrait;
24 
28 abstract class ‪AbstractNode implements ‪NodeInterface, LoggerAwareInterface
29 {
30  use LoggerAwareTrait;
31 
35  protected array ‪$data = [];
36 
42  protected ‪$defaultFieldInformation = [];
43 
50  protected ‪$defaultFieldControl = [];
51 
58  protected ‪$defaultFieldWizard = [];
59 
63  public function ‪setData(array ‪$data): void
64  {
65  $this->data = ‪$data;
66  }
67 
73  abstract public function ‪render(): array;
74 
80  protected function ‪initializeResultArray(): array
81  {
83  $javaScriptModules = [];
84 
85  return [
86  // @todo deprecate additionalHiddenFields in TYPO3 v12.0 - this return key is essentially
87  // useless. Elements can simply submit their hidden HTML fields in the html key.
88  'additionalHiddenFields' => [],
89  'additionalInlineLanguageLabelFiles' => [],
90  'stylesheetFiles' => [],
91  'javaScriptModules' => $javaScriptModules,
92  'inlineData' => [],
93  'html' => '',
94  ];
95  }
96 
107  protected function ‪mergeChildReturnIntoExistingResult(array $existing, array $childReturn, bool $mergeHtml = true): array
108  {
109  if ($mergeHtml && !empty($childReturn['html'])) {
110  $existing['html'] .= LF . $childReturn['html'];
111  }
112  foreach ($childReturn['additionalHiddenFields'] ?? [] as $value) {
113  $existing['additionalHiddenFields'][] = $value;
114  }
115  foreach ($childReturn['stylesheetFiles'] ?? [] as $value) {
116  $existing['stylesheetFiles'][] = $value;
117  }
118  foreach ($childReturn['javaScriptModules'] ?? [] as $module) {
119  $existing['javaScriptModules'][] = $module;
120  }
121  foreach ($childReturn['additionalInlineLanguageLabelFiles'] ?? [] as $inlineLanguageLabelFile) {
122  $existing['additionalInlineLanguageLabelFiles'][] = $inlineLanguageLabelFile;
123  }
124  if (!empty($childReturn['inlineData'])) {
125  $existingInlineData = $existing['inlineData'];
126  $childInlineData = $childReturn['inlineData'];
127  ArrayUtility::mergeRecursiveWithOverrule($existingInlineData, $childInlineData);
128  $existing['inlineData'] = $existingInlineData;
129  }
130  return $existing;
131  }
132 
136  protected function ‪getValidationDataAsJsonString(array $config): string
137  {
138  $validationRules = [];
139  if (!empty($config['eval'])) {
140  $evalList = ‪GeneralUtility::trimExplode(',', $config['eval'] ?? '', true);
141  foreach ($evalList as $evalType) {
142  $validationRules[] = [
143  'type' => $evalType,
144  ];
145  }
146  }
147  if (!empty($config['range'])) {
148  $newValidationRule = [
149  'type' => 'range',
150  ];
151  if (!empty($config['range']['lower'])) {
152  $newValidationRule['lower'] = $config['range']['lower'];
153  }
154  if (!empty($config['range']['upper'])) {
155  $newValidationRule['upper'] = $config['range']['upper'];
156  }
157  $validationRules[] = $newValidationRule;
158  }
159  if (!empty($config['maxitems']) || !empty($config['minitems'])) {
160  $minItems = isset($config['minitems']) ? (int)$config['minitems'] : 0;
161  $maxItems = isset($config['maxitems']) ? (int)$config['maxitems'] : 99999;
162  $type = $config['type'] ?: 'range';
163  $validationRules[] = [
164  'type' => $type,
165  'minItems' => $minItems,
166  'maxItems' => $maxItems,
167  ];
168  }
169  if (!empty($config['required'])) {
170  $validationRules[] = ['type' => 'required'];
171  }
172  if (!empty($config['min'])) {
173  $validationRules[] = ['type' => 'min'];
174  }
175  return json_encode($validationRules);
176  }
177 }
‪TYPO3\CMS\Backend\Form\AbstractNode\$defaultFieldInformation
‪array $defaultFieldInformation
Definition: AbstractNode.php:41
‪TYPO3\CMS\Backend\Form
Definition: AbstractNode.php:18
‪TYPO3\CMS\Backend\Form\AbstractNode\mergeChildReturnIntoExistingResult
‪array mergeChildReturnIntoExistingResult(array $existing, array $childReturn, bool $mergeHtml=true)
Definition: AbstractNode.php:104
‪TYPO3\CMS\Backend\Form\AbstractNode\$defaultFieldControl
‪array $defaultFieldControl
Definition: AbstractNode.php:48
‪TYPO3\CMS\Backend\Form\AbstractNode\$defaultFieldWizard
‪array $defaultFieldWizard
Definition: AbstractNode.php:55
‪TYPO3\CMS\Backend\Form\AbstractNode\$data
‪array $data
Definition: AbstractNode.php:35
‪TYPO3\CMS\Backend\Form\NodeInterface
Definition: NodeInterface.php:22
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:26
‪TYPO3\CMS\Backend\Form\AbstractNode\getValidationDataAsJsonString
‪getValidationDataAsJsonString(array $config)
Definition: AbstractNode.php:133
‪TYPO3\CMS\Backend\Form\AbstractNode\setData
‪setData(array $data)
Definition: AbstractNode.php:60
‪TYPO3\CMS\Backend\Form\AbstractNode\render
‪array render()
‪TYPO3\CMS\Backend\Form\AbstractNode
Definition: AbstractNode.php:29
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Utility\GeneralUtility\trimExplode
‪static list< string > trimExplode(string $delim, string $string, bool $removeEmptyValues=false, int $limit=0)
Definition: GeneralUtility.php:822
‪TYPO3\CMS\Backend\Form\AbstractNode\initializeResultArray
‪initializeResultArray()
Definition: AbstractNode.php:77