2c6d1cd3d2356faeaa3c2299b0d57309b19de62a
[Packages/TYPO3.CMS.git] / typo3 / sysext / backend / Classes / Form / Container / ListOfFieldsContainer.php
1 <?php
2 namespace TYPO3\CMS\Backend\Form\Container;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 use TYPO3\CMS\Core\Localization\LanguageService;
18 use TYPO3\CMS\Core\Utility\GeneralUtility;
19
20 /**
21 * Render a given list of field of a TCA table.
22 *
23 * This is an entry container called from FormEngine to handle a
24 * list of specific fields. Access rights are checked here and globalOption array
25 * is prepared for further processing of single fields by PaletteAndSingleContainer.
26 */
27 class ListOfFieldsContainer extends AbstractContainer
28 {
29 /**
30 * Entry method
31 *
32 * @return array As defined in initializeResultArray() of AbstractNode
33 */
34 public function render()
35 {
36 $table = $this->data['tableName'];
37 $fieldListToRender = $this->data['fieldListToRender'];
38 $recordTypeValue = $this->data['recordTypeValue'];
39
40 // Load the description content for the table if requested
41 if ($GLOBALS['TCA'][$table]['interface']['always_description']) {
42 $languageService = $this->getLanguageService();
43 $languageService->loadSingleTableDescription($table);
44 }
45
46 $fieldListToRender = array_unique(GeneralUtility::trimExplode(',', $fieldListToRender, true));
47
48 $fieldsByShowitem = $this->data['processedTca']['types'][$recordTypeValue]['showitem'];
49 $fieldsByShowitem = GeneralUtility::trimExplode(',', $fieldsByShowitem, true);
50
51 $finalFieldsList = [];
52 foreach ($fieldListToRender as $fieldName) {
53 foreach ($fieldsByShowitem as $fieldByShowitem) {
54 $fieldByShowitemArray = $this->explodeSingleFieldShowItemConfiguration($fieldByShowitem);
55 if ($fieldByShowitemArray['fieldName'] === $fieldName) {
56 $finalFieldsList[] = implode(';', $fieldByShowitemArray);
57 break;
58 }
59 if ($fieldByShowitemArray['fieldName'] === '--palette--'
60 && isset($this->data['processedTca']['palettes'][$fieldByShowitemArray['paletteName']]['showitem'])
61 && is_string($this->data['processedTca']['palettes'][$fieldByShowitemArray['paletteName']]['showitem'])
62 ) {
63 $paletteName = $fieldByShowitemArray['paletteName'];
64 $paletteFields = GeneralUtility::trimExplode(',', $this->data['processedTca']['palettes'][$paletteName]['showitem'], true);
65 foreach ($paletteFields as $paletteField) {
66 $paletteFieldArray = $this->explodeSingleFieldShowItemConfiguration($paletteField);
67 if ($paletteFieldArray['fieldName'] === $fieldName) {
68 $finalFieldsList[] = implode(';', $paletteFieldArray);
69 break;
70 }
71 }
72 }
73 }
74 }
75
76 $options = $this->data;
77 $options['fieldsArray'] = $finalFieldsList;
78 $options['renderType'] = 'paletteAndSingleContainer';
79 return $this->nodeFactory->create($options)->render();
80 }
81
82 /**
83 * @return LanguageService
84 */
85 protected function getLanguageService()
86 {
87 return $GLOBALS['LANG'];
88 }
89 }