‪TYPO3CMS  ‪main
DefaultDataProvider.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 TYPO3\CMS\Backend\Utility\BackendUtility;
29 
34 {
38  protected string ‪$tableName = 'backend_layout';
39 
45  public function ‪addBackendLayouts(
46  ‪DataProviderContext $dataProviderContext,
47  ‪BackendLayoutCollection $backendLayoutCollection
48  ): void {
49  $layoutData = $this->‪getLayoutData(
50  $dataProviderContext->‪getFieldName(),
51  $dataProviderContext->‪getPageTsConfig(),
52  $dataProviderContext->‪getPageId()
53  );
54 
55  foreach ($layoutData as ‪$data) {
56  $backendLayout = $this->‪createBackendLayout($data);
57  $backendLayoutCollection->‪add($backendLayout);
58  }
59  }
60 
68  {
69  $backendLayout = null;
70 
71  if ((string)‪$identifier === 'default') {
72  return $this->‪createDefaultBackendLayout();
73  }
74 
75  ‪$data = BackendUtility::getRecordWSOL($this->tableName, (int)‪$identifier);
76 
77  if (is_array(‪$data)) {
78  $backendLayout = $this->‪createBackendLayout(‪$data);
79  }
80 
81  return $backendLayout;
82  }
83 
88  {
90  'default',
91  'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.backend_layout.default',
93  );
94  }
95 
100  {
101  $backendLayout = ‪BackendLayout::create((string)‪$data['uid'], ‪$data['title'], ‪$data['config']);
102  $backendLayout->setIconPath($this->‪getIconPath($data));
103  $backendLayout->setData(‪$data);
104  return $backendLayout;
105  }
106 
110  protected function ‪getIconPath(array $icon): string
111  {
112  $fileRepository = GeneralUtility::makeInstance(FileRepository::class);
113  $references = $fileRepository->findByRelation($this->tableName, 'icon', (int)$icon['uid']);
114  if (!empty($references)) {
115  $icon = reset($references);
116  return $icon->getPublicUrl();
117  }
118  return '';
119  }
120 
129  protected function ‪getLayoutData(string $fieldName, array $pageTsConfig, int $pageUid): array
130  {
131  $storagePid = $this->‪getStoragePid($pageTsConfig);
132  $pageTsConfigId = $this->‪getPageTSconfigIds($pageTsConfig);
133 
134  // Add layout records
135  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
136  ->getQueryBuilderForTable($this->tableName);
137  $queryBuilder->getRestrictions()
138  ->add(
139  GeneralUtility::makeInstance(
140  WorkspaceRestriction::class,
141  GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('workspace', 'id')
142  )
143  );
144  $queryBuilder
145  ->select('*')
146  ->from($this->tableName)
147  ->where(
148  $queryBuilder->expr()->or(
149  $queryBuilder->expr()->and(
150  $queryBuilder->expr()->comparison(
151  $queryBuilder->createNamedParameter($pageTsConfigId[$fieldName], ‪Connection::PARAM_INT),
152  ExpressionBuilder::EQ,
153  $queryBuilder->createNamedParameter(0, ‪Connection::PARAM_INT)
154  ),
155  $queryBuilder->expr()->comparison(
156  $queryBuilder->createNamedParameter($storagePid, ‪Connection::PARAM_INT),
157  ExpressionBuilder::EQ,
158  $queryBuilder->createNamedParameter(0, ‪Connection::PARAM_INT)
159  )
160  ),
161  $queryBuilder->expr()->or(
162  $queryBuilder->expr()->eq(
163  'backend_layout.pid',
164  $queryBuilder->createNamedParameter($pageTsConfigId[$fieldName], ‪Connection::PARAM_INT)
165  ),
166  $queryBuilder->expr()->eq(
167  'backend_layout.pid',
168  $queryBuilder->createNamedParameter($storagePid, ‪Connection::PARAM_INT)
169  )
170  ),
171  $queryBuilder->expr()->and(
172  $queryBuilder->expr()->comparison(
173  $queryBuilder->createNamedParameter($pageTsConfigId[$fieldName], ‪Connection::PARAM_INT),
174  ExpressionBuilder::EQ,
175  $queryBuilder->createNamedParameter(0, ‪Connection::PARAM_INT)
176  ),
177  $queryBuilder->expr()->eq(
178  'backend_layout.pid',
179  $queryBuilder->createNamedParameter($pageUid, ‪Connection::PARAM_INT)
180  )
181  )
182  )
183  );
184 
185  if (!empty(‪$GLOBALS['TCA'][$this->tableName]['ctrl']['sortby'])) {
186  $queryBuilder->orderBy(‪$GLOBALS['TCA'][$this->tableName]['ctrl']['sortby']);
187  }
188 
189  $statement = $queryBuilder->executeQuery();
190 
191  $results = [];
192  while (‪$record = $statement->fetchAssociative()) {
193  BackendUtility::workspaceOL($this->tableName, ‪$record);
194  if (is_array(‪$record)) {
195  $results[‪$record['t3ver_oid'] ?: ‪$record['uid']] = ‪$record;
196  }
197  }
198 
199  return $results;
200  }
201 
205  protected function ‪getStoragePid(array $pageTsConfig): int
206  {
207  $storagePid = 0;
208 
209  if (!empty($pageTsConfig['TCEFORM.']['pages.']['_STORAGE_PID'])) {
210  $storagePid = (int)$pageTsConfig['TCEFORM.']['pages.']['_STORAGE_PID'];
211  }
212 
213  return $storagePid;
214  }
215 
219  protected function ‪getPageTSconfigIds(array $pageTsConfig): array
220  {
221  $pageTsConfigIds = [
222  'backend_layout' => 0,
223  'backend_layout_next_level' => 0,
224  ];
225 
226  if (!empty($pageTsConfig['TCEFORM.']['pages.']['backend_layout.']['PAGE_TSCONFIG_ID'])) {
227  $pageTsConfigIds['backend_layout'] = (int)$pageTsConfig['TCEFORM.']['pages.']['backend_layout.']['PAGE_TSCONFIG_ID'];
228  }
229 
230  if (!empty($pageTsConfig['TCEFORM.']['pages.']['backend_layout_next_level.']['PAGE_TSCONFIG_ID'])) {
231  $pageTsConfigIds['backend_layout_next_level'] = (int)$pageTsConfig['TCEFORM.']['pages.']['backend_layout_next_level.']['PAGE_TSCONFIG_ID'];
232  }
233 
234  return $pageTsConfigIds;
235  }
236 }
‪TYPO3\CMS\Backend\View\BackendLayout\DefaultDataProvider\getBackendLayout
‪getBackendLayout($identifier, $pageId)
Definition: DefaultDataProvider.php:67
‪TYPO3\CMS\Backend\View\BackendLayout\BackendLayoutCollection
Definition: BackendLayoutCollection.php:22
‪TYPO3\CMS\Backend\View\BackendLayout\BackendLayout\$data
‪array $data
Definition: BackendLayout.php:38
‪TYPO3\CMS\Backend\View\BackendLayout\DefaultDataProvider\$tableName
‪string $tableName
Definition: DefaultDataProvider.php:38
‪TYPO3\CMS\Core\Database\Connection\PARAM_INT
‪const PARAM_INT
Definition: Connection.php:52
‪TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder
Definition: ExpressionBuilder.php:40
‪TYPO3\CMS\Backend\View\BackendLayout\DataProviderContext\getPageTsConfig
‪getPageTsConfig()
Definition: DataProviderContext.php:77
‪TYPO3\CMS\Backend\View\BackendLayout\DataProviderInterface
Definition: DataProviderInterface.php:23
‪TYPO3\CMS\Backend\View\BackendLayout\BackendLayoutCollection\add
‪add(BackendLayout $backendLayout)
Definition: BackendLayoutCollection.php:68
‪TYPO3\CMS\Backend\View\BackendLayout\DataProviderContext\getFieldName
‪getFieldName()
Definition: DataProviderContext.php:55
‪TYPO3\CMS\Backend\View\BackendLayout\DefaultDataProvider\getIconPath
‪getIconPath(array $icon)
Definition: DefaultDataProvider.php:110
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:54
‪TYPO3\CMS\Backend\View\BackendLayout\DefaultDataProvider\addBackendLayouts
‪addBackendLayouts(DataProviderContext $dataProviderContext, BackendLayoutCollection $backendLayoutCollection)
Definition: DefaultDataProvider.php:45
‪TYPO3\CMS\Backend\View\BackendLayout\DefaultDataProvider\createDefaultBackendLayout
‪createDefaultBackendLayout()
Definition: DefaultDataProvider.php:87
‪TYPO3\CMS\Backend\View\BackendLayout\BackendLayout\create
‪static create(string $identifier, string $title, string|array $configuration)
Definition: BackendLayout.php:40
‪TYPO3\CMS\Core\Resource\FileRepository
Definition: FileRepository.php:38
‪TYPO3\CMS\Backend\View\BackendLayoutView\getDefaultColumnLayout
‪static getDefaultColumnLayout()
Definition: BackendLayoutView.php:293
‪TYPO3\CMS\Webhooks\Message\$record
‪identifier readonly int readonly array $record
Definition: PageModificationMessage.php:36
‪TYPO3\CMS\Backend\View\BackendLayout\DataProviderContext\getPageId
‪getPageId()
Definition: DataProviderContext.php:33
‪TYPO3\CMS\Backend\View\BackendLayout\DefaultDataProvider\getPageTSconfigIds
‪getPageTSconfigIds(array $pageTsConfig)
Definition: DefaultDataProvider.php:219
‪TYPO3\CMS\Backend\View\BackendLayout\DefaultDataProvider\getLayoutData
‪array getLayoutData(string $fieldName, array $pageTsConfig, int $pageUid)
Definition: DefaultDataProvider.php:129
‪TYPO3\CMS\Backend\View\BackendLayout
Definition: BackendLayout.php:18
‪TYPO3\CMS\Core\Database\Connection
Definition: Connection.php:41
‪TYPO3\CMS\Backend\View\BackendLayoutView
Definition: BackendLayoutView.php:37
‪TYPO3\CMS\Backend\View\BackendLayout\DefaultDataProvider\createBackendLayout
‪createBackendLayout(array $data)
Definition: DefaultDataProvider.php:99
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Backend\View\BackendLayout\BackendLayout\$identifier
‪string $identifier
Definition: BackendLayout.php:28
‪TYPO3\CMS\Backend\View\BackendLayout\BackendLayout
Definition: BackendLayout.php:27
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Backend\View\BackendLayout\DataProviderContext
Definition: DataProviderContext.php:26
‪TYPO3\CMS\Backend\View\BackendLayout\DefaultDataProvider
Definition: DefaultDataProvider.php:34
‪TYPO3\CMS\Backend\View\BackendLayout\DefaultDataProvider\getStoragePid
‪getStoragePid(array $pageTsConfig)
Definition: DefaultDataProvider.php:205
‪TYPO3\CMS\Core\Database\Query\Restriction\WorkspaceRestriction
Definition: WorkspaceRestriction.php:39