‪TYPO3CMS  ‪main
PageTsBackendLayoutDataProvider.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;
22 
67 {
71  private array ‪$backendLayouts = [];
72 
73  public function ‪addBackendLayouts(‪DataProviderContext $dataProviderContext, ‪BackendLayoutCollection $backendLayoutCollection): void
74  {
75  $this->‪generateBackendLayouts($dataProviderContext, null);
76  foreach ($this->backendLayouts as $backendLayoutConfig) {
77  $backendLayout = $this->‪createBackendLayout($backendLayoutConfig);
78  $backendLayoutCollection->‪add($backendLayout);
79  }
80  }
81 
89  {
90  $this->‪generateBackendLayouts(null, $pageId);
91  if (array_key_exists(‪$identifier, $this->backendLayouts)) {
92  return $this->‪createBackendLayout($this->backendLayouts[‪$identifier]);
93  }
94  return null;
95  }
96 
101  private function ‪getPageTsConfig(?‪DataProviderContext $dataProviderContext, ?int $pageId): array
102  {
103  if ($dataProviderContext === null && $pageId === null) {
104  throw new \RuntimeException('Either $dataProviderContext or $pageId must be provided', 1676380686);
105  }
106  if ($dataProviderContext) {
107  return $dataProviderContext->‪getPageTsConfig();
108  }
109  return BackendUtility::getPagesTSconfig($pageId);
110  }
111 
115  private function ‪generateBackendLayouts(?‪DataProviderContext $dataProviderContext, ?int $pageId): void
116  {
117  $pageTsConfig = $this->‪getPageTsConfig($dataProviderContext, $pageId);
118  if (!empty($pageTsConfig['mod.']['web_layout.']['BackendLayouts.'])) {
119  ‪$backendLayouts = (array)$pageTsConfig['mod.']['web_layout.']['BackendLayouts.'];
120  foreach (‪$backendLayouts as ‪$identifier => ‪$data) {
122  $this->‪attachBackendLayout($backendLayout);
123  }
124  }
125  }
126 
130  private function ‪generateBackendLayoutFromTsConfig(string ‪$identifier, array ‪$data): ?array
131  {
132  $backendLayout = [];
133  if (is_array(‪$data['config.']['backend_layout.'] ?? null)) {
134  $backendLayout['uid'] = substr(‪$identifier, 0, -1);
135  $backendLayout['title'] = ‪$data['title'] ?? $backendLayout['uid'];
136  $backendLayout['icon'] = ‪$data['icon'] ?? '';
137  // Convert PHP array back to plain TypoScript to process it
138  $config = ‪ArrayUtility::flatten(‪$data['config.']);
139  $backendLayout['config'] = '';
140  foreach ($config as $row => $value) {
141  $backendLayout['config'] .= $row . ' = ' . $value . "\r\n";
142  }
143  return $backendLayout;
144  }
145  return null;
146  }
147 
151  private function ‪attachBackendLayout(mixed $backendLayout = null): void
152  {
153  if ($backendLayout) {
154  $this->backendLayouts[$backendLayout['uid']] = $backendLayout;
155  }
156  }
157 
162  {
163  $backendLayout = ‪BackendLayout::create((string)‪$data['uid'], ‪$data['title'], ‪$data['config']);
164  $backendLayout->setIconPath(‪$data['icon'] ?? '');
165  $backendLayout->setData(‪$data);
166  return $backendLayout;
167  }
168 }
‪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\DataProviderContext\getPageTsConfig
‪getPageTsConfig()
Definition: DataProviderContext.php:77
‪TYPO3\CMS\Backend\View\BackendLayout\PageTsBackendLayoutDataProvider\createBackendLayout
‪createBackendLayout(array $data)
Definition: PageTsBackendLayoutDataProvider.php:161
‪TYPO3\CMS\Backend\View\BackendLayout\DataProviderInterface
Definition: DataProviderInterface.php:23
‪TYPO3\CMS\Backend\View\BackendLayout\PageTsBackendLayoutDataProvider\getBackendLayout
‪getBackendLayout($identifier, $pageId)
Definition: PageTsBackendLayoutDataProvider.php:88
‪TYPO3\CMS\Backend\View\BackendLayout\BackendLayoutCollection\add
‪add(BackendLayout $backendLayout)
Definition: BackendLayoutCollection.php:68
‪TYPO3\CMS\Backend\View\BackendLayout\PageTsBackendLayoutDataProvider
Definition: PageTsBackendLayoutDataProvider.php:67
‪TYPO3\CMS\Backend\View\BackendLayout\PageTsBackendLayoutDataProvider\addBackendLayouts
‪addBackendLayouts(DataProviderContext $dataProviderContext, BackendLayoutCollection $backendLayoutCollection)
Definition: PageTsBackendLayoutDataProvider.php:73
‪TYPO3\CMS\Backend\View\BackendLayout\PageTsBackendLayoutDataProvider\generateBackendLayoutFromTsConfig
‪generateBackendLayoutFromTsConfig(string $identifier, array $data)
Definition: PageTsBackendLayoutDataProvider.php:130
‪TYPO3\CMS\Core\Utility\ArrayUtility\flatten
‪static flatten(array $array, string $prefix='', bool $keepDots=false)
Definition: ArrayUtility.php:469
‪TYPO3\CMS\Backend\View\BackendLayout\BackendLayout\create
‪static create(string $identifier, string $title, string|array $configuration)
Definition: BackendLayout.php:40
‪TYPO3\CMS\Backend\View\BackendLayout\PageTsBackendLayoutDataProvider\attachBackendLayout
‪attachBackendLayout(mixed $backendLayout=null)
Definition: PageTsBackendLayoutDataProvider.php:151
‪TYPO3\CMS\Backend\View\BackendLayout\PageTsBackendLayoutDataProvider\$backendLayouts
‪array $backendLayouts
Definition: PageTsBackendLayoutDataProvider.php:71
‪TYPO3\CMS\Backend\View\BackendLayout
Definition: BackendLayout.php:18
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:26
‪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\Backend\View\BackendLayout\PageTsBackendLayoutDataProvider\generateBackendLayouts
‪generateBackendLayouts(?DataProviderContext $dataProviderContext, ?int $pageId)
Definition: PageTsBackendLayoutDataProvider.php:115
‪TYPO3\CMS\Backend\View\BackendLayout\PageTsBackendLayoutDataProvider\getPageTsConfig
‪getPageTsConfig(?DataProviderContext $dataProviderContext, ?int $pageId)
Definition: PageTsBackendLayoutDataProvider.php:101
‪TYPO3\CMS\Backend\View\BackendLayout\DataProviderContext
Definition: DataProviderContext.php:26