‪TYPO3CMS  ‪main
TableListViewHelper.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\Http\Message\ServerRequestInterface;
23 use TYPO3\CMS\Backend\Utility\BackendUtility;
30 
70 {
76  protected ‪$escapeOutput = false;
77 
79 
81  {
82  $this->configurationManager = ‪$configurationManager;
83  }
84 
85  public function ‪initializeArguments(): void
86  {
87  parent::initializeArguments();
88  $this->registerArgument('tableName', 'string', 'name of the database table', true);
89  $this->registerArgument('fieldList', 'array', 'list of fields to be displayed. If empty, only the title column (configured in $TCA[$tableName][\'ctrl\'][\'title\']) is shown', false, []);
90  $this->registerArgument('storagePid', 'int', 'by default, records are fetched from the storage PID configured in persistence.storagePid. With this argument, the storage PID can be overwritten');
91  $this->registerArgument('levels', 'int', 'corresponds to the level selector of the TYPO3 list module. By default only records from the current storagePid are fetched', false, 0);
92  $this->registerArgument('filter', 'string', 'corresponds to the "Search String" textbox of the TYPO3 list module. If not empty, only records matching the string will be fetched', false, '');
93  $this->registerArgument('recordsPerPage', 'int', 'amount of records to be displayed at once. Defaults to $TCA[$tableName][\'interface\'][\'maxSingleDBListItems\'] or (if that\'s not set) to 100', false, 0);
94  $this->registerArgument('sortField', 'string', 'table field to sort the results by', false, '');
95  $this->registerArgument('sortDescending', 'bool', 'if TRUE records will be sorted in descending order', false, false);
96  $this->registerArgument('readOnly', 'bool', 'if TRUE, the edit icons won\'t be shown. Otherwise edit icons will be shown, if the current BE user has edit rights for the specified table!', false, false);
97  $this->registerArgument('enableClickMenu', 'bool', 'enables context menu', false, true);
98  $this->registerArgument('enableControlPanels', 'bool', 'enables control panels', false, false);
99  $this->registerArgument('clickTitleMode', 'string', 'one of "edit", "show" (only pages, tt_content), "info', false, '');
100  }
101 
108  public function ‪render(): string
109  {
110  $tableName = $this->arguments['tableName'];
111  $fieldList = $this->arguments['fieldList'];
112  $storagePid = $this->arguments['storagePid'];
113  $levels = $this->arguments['levels'];
114  $filter = $this->arguments['filter'];
115  $recordsPerPage = $this->arguments['recordsPerPage'];
116  $sortField = $this->arguments['sortField'];
117  $sortDescending = $this->arguments['sortDescending'];
118  $readOnly = $this->arguments['readOnly'];
119  $enableClickMenu = $this->arguments['enableClickMenu'];
120  $clickTitleMode = $this->arguments['clickTitleMode'];
121  $enableControlPanels = $this->arguments['enableControlPanels'];
122 
123  $languageService = $this->‪getLanguageService();
124  $backendUser = $this->‪getBackendUser();
126  $renderingContext = $this->renderingContext;
127  $request = $renderingContext->getRequest();
128  if (!$request instanceof ServerRequestInterface) {
129  // All views in backend have at least ServerRequestInterface, no matter if created by
130  // old StandaloneView via BackendViewFactory. Should be fine to assume having a request
131  // here, the early return is just sanitation.
132  return '';
133  }
134 
135  $this->‪getPageRenderer()->loadJavaScriptModule('@typo3/backend/recordlist.js');
136  $this->‪getPageRenderer()->loadJavaScriptModule('@typo3/backend/record-download-button.js');
137  $this->‪getPageRenderer()->loadJavaScriptModule('@typo3/backend/action-dispatcher.js');
138  if ($enableControlPanels === true) {
139  $this->‪getPageRenderer()->loadJavaScriptModule('@typo3/backend/multi-record-selection.js');
140  $this->‪getPageRenderer()->loadJavaScriptModule('@typo3/backend/context-menu.js');
141  }
142 
143  $pageId = (int)($request->getParsedBody()['id'] ?? $request->getQueryParams()['id'] ?? 0);
144  $pointer = (int)($request->getParsedBody()['pointer'] ?? $request->getQueryParams()['pointer'] ?? 0);
145  $pageInfo = BackendUtility::readPageAccess($pageId, $backendUser->getPagePermsClause(‪Permission::PAGE_SHOW)) ?: [];
146  $existingModuleData = $backendUser->getModuleData('web_list');
147  $moduleData = new ModuleData('web_list', is_array($existingModuleData) ? $existingModuleData : []);
148 
149  $dbList = GeneralUtility::makeInstance(DatabaseRecordList::class);
150  $dbList->setRequest($request);
151  $dbList->setModuleData($moduleData);
152  $dbList->pageRow = $pageInfo;
153  if ($readOnly) {
154  $dbList->setIsEditable(false);
155  } else {
156  $dbList->calcPerms = new Permission($backendUser->calcPerms($pageInfo));
157  }
158  $dbList->disableSingleTableView = true;
159  $dbList->clickTitleMode = $clickTitleMode;
160  $dbList->clickMenuEnabled = $enableClickMenu;
161  if ($storagePid === null) {
162  $frameworkConfiguration = $this->configurationManager->getConfiguration(‪ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
163  $storagePid = $frameworkConfiguration['persistence']['storagePid'];
164  }
165  $dbList->start($storagePid, $tableName, $pointer, $filter, $levels, $recordsPerPage);
166  // Column selector is disabled since fields are defined by the "fieldList" argument
167  $dbList->displayColumnSelector = false;
168  $dbList->setFields = [$tableName => $fieldList];
169  $dbList->noControlPanels = !$enableControlPanels;
170  $dbList->sortField = $sortField;
171  $dbList->sortRev = $sortDescending;
172  return $dbList->generateList();
173  }
174 
175  protected function ‪getBackendUser(): ‪BackendUserAuthentication
176  {
177  return ‪$GLOBALS['BE_USER'];
178  }
179 
180  protected function ‪getLanguageService(): ‪LanguageService
181  {
182  return ‪$GLOBALS['LANG'];
183  }
184 }
‪TYPO3\CMS\Fluid\ViewHelpers\Be\TableListViewHelper\$configurationManager
‪ConfigurationManagerInterface $configurationManager
Definition: TableListViewHelper.php:77
‪TYPO3\CMS\Fluid\ViewHelpers\Be\TableListViewHelper\getBackendUser
‪getBackendUser()
Definition: TableListViewHelper.php:174
‪TYPO3\CMS\Fluid\ViewHelpers\Be\TableListViewHelper\getLanguageService
‪getLanguageService()
Definition: TableListViewHelper.php:179
‪TYPO3\CMS\Backend\Module\ModuleData
Definition: ModuleData.php:30
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface
Definition: ConfigurationManagerInterface.php:28
‪TYPO3\CMS\Backend\RecordList\DatabaseRecordList
Definition: DatabaseRecordList.php:68
‪TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendViewHelper
Definition: AbstractBackendViewHelper.php:30
‪TYPO3\CMS\Fluid\ViewHelpers\Be
Definition: AbstractBackendViewHelper.php:18
‪TYPO3\CMS\Core\Type\Bitmask\Permission
Definition: Permission.php:26
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface\CONFIGURATION_TYPE_FRAMEWORK
‪const CONFIGURATION_TYPE_FRAMEWORK
Definition: ConfigurationManagerInterface.php:29
‪TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendViewHelper\getPageRenderer
‪getPageRenderer()
Definition: AbstractBackendViewHelper.php:53
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Core\Type\Bitmask\Permission\PAGE_SHOW
‪const PAGE_SHOW
Definition: Permission.php:35
‪TYPO3\CMS\Fluid\ViewHelpers\Be\TableListViewHelper\initializeArguments
‪initializeArguments()
Definition: TableListViewHelper.php:84
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Fluid\ViewHelpers\Be\TableListViewHelper\injectConfigurationManager
‪injectConfigurationManager(ConfigurationManagerInterface $configurationManager)
Definition: TableListViewHelper.php:79
‪TYPO3\CMS\Fluid\ViewHelpers\Be\TableListViewHelper\$escapeOutput
‪bool $escapeOutput
Definition: TableListViewHelper.php:75
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:46
‪TYPO3\CMS\Fluid\ViewHelpers\Be\TableListViewHelper
Definition: TableListViewHelper.php:70
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Fluid\Core\Rendering\RenderingContext
Definition: RenderingContext.php:35
‪TYPO3\CMS\Fluid\ViewHelpers\Be\TableListViewHelper\render
‪render()
Definition: TableListViewHelper.php:107