[TASK] Fix CGL errors
[Packages/TYPO3.CMS.git] / typo3 / sysext / backend / Classes / Form / Container / TabsContainer.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\Utility\GeneralUtility;
18 use TYPO3\CMS\Lang\LanguageService;
19
20 /**
21 * Render all tabs of a record that has tabs.
22 *
23 * This container is called from FullRecordContainer and resolves the --div-- structure,
24 * operates on given fieldArrays and calls a PaletteAndSingleContainer for each single tab.
25 */
26 class TabsContainer extends AbstractContainer
27 {
28 /**
29 * Entry method
30 *
31 * @return array As defined in initializeResultArray() of AbstractNode
32 * @throws \RuntimeException
33 */
34 public function render()
35 {
36 $languageService = $this->getLanguageService();
37
38 // All the fields to handle in a flat list
39 $fieldsArray = $this->data['fieldsArray'];
40
41 // Create a nested array from flat fieldArray list
42 $tabsArray = array();
43 // First element will be a --div--, so it is safe to start -1 here to trigger 0 as first array index
44 $currentTabIndex = -1;
45 foreach ($fieldsArray as $fieldString) {
46 $fieldArray = $this->explodeSingleFieldShowItemConfiguration($fieldString);
47 if ($fieldArray['fieldName'] === '--div--') {
48 $currentTabIndex++;
49 if (empty($fieldArray['fieldLabel'])) {
50 throw new \RuntimeException(
51 'A --div-- has no label (--div--;fieldLabel) in showitem of ' . implode(',', $fieldsArray),
52 1426454001
53 );
54 }
55 $tabsArray[$currentTabIndex] = array(
56 'label' => $languageService->sL($fieldArray['fieldLabel']),
57 'elements' => array(),
58 );
59 } else {
60 $tabsArray[$currentTabIndex]['elements'][] = $fieldArray;
61 }
62 }
63
64 $resultArray = $this->initializeResultArray();
65 $resultArray['requireJsModules'][] = 'TYPO3/CMS/Backend/Tabs';
66
67 $domIdPrefix = 'DTM-' . GeneralUtility::shortMD5($this->data['tableName'] . $this->data['databaseRow']['uid']);
68 $tabCounter = 0;
69 $tabElements = array();
70 foreach ($tabsArray as $tabWithLabelAndElements) {
71 $tabCounter ++;
72 $elements = $tabWithLabelAndElements['elements'];
73
74 // Merge elements of this tab into a single list again and hand over to
75 // palette and single field container to render this group
76 $options = $this->data;
77 $options['tabAndInlineStack'][] = array(
78 'tab',
79 $domIdPrefix . '-' . $tabCounter,
80 );
81 $options['fieldsArray'] = array();
82 foreach ($elements as $element) {
83 $options['fieldsArray'][] = implode(';', $element);
84 }
85 $options['renderType'] = 'paletteAndSingleContainer';
86 $childArray = $this->nodeFactory->create($options)->render();
87
88 $tabElements[] = array(
89 'label' => $tabWithLabelAndElements['label'],
90 'content' => $childArray['html'],
91 );
92 $childArray['html'] = '';
93 $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $childArray);
94 }
95
96 $resultArray['html'] = $this->renderTabMenu($tabElements, $domIdPrefix);
97 return $resultArray;
98 }
99
100 /**
101 * @return LanguageService
102 */
103 protected function getLanguageService()
104 {
105 return $GLOBALS['LANG'];
106 }
107 }