‪TYPO3CMS  ‪main
SiteDatabaseEditRow.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 
25 
32 {
36  protected ‪$siteConfiguration;
37 
39  {
40  $this->siteConfiguration = ‪$siteConfiguration;
41  }
42 
48  public function ‪addData(array $result): array
49  {
50  if ($result['command'] !== 'edit' || !empty($result['databaseRow'])) {
51  return $result;
52  }
53 
54  $tableName = $result['tableName'];
55  $siteFinder = GeneralUtility::makeInstance(SiteFinder::class, $this->siteConfiguration);
56  if ($tableName === 'site') {
57  $rootPageId = (int)$result['vanillaUid'];
58  $rowData = $this->‪getRawConfigurationForSiteWithRootPageId($siteFinder, $rootPageId);
59  $result['databaseRow']['uid'] = $rowData['rootPageId'];
60  $result['databaseRow']['identifier'] = $result['customData']['siteIdentifier'];
61  } elseif (in_array($tableName, ['site_errorhandling', 'site_language', 'site_route', 'site_base_variant'], true)) {
62  $rootPageId = (int)($result['inlineTopMostParentUid'] ?? $result['inlineParentUid']);
63  try {
64  $rowData = $this->‪getRawConfigurationForSiteWithRootPageId($siteFinder, $rootPageId);
65  $parentFieldName = $result['inlineParentFieldName'];
66  if (!isset($rowData[$parentFieldName])) {
67  throw new \RuntimeException('Field "' . $parentFieldName . '" not found', 1520886092);
68  }
69  $rowData = $rowData[$parentFieldName][$result['vanillaUid']];
70  $result['databaseRow']['uid'] = $result['vanillaUid'];
71  } catch (SiteNotFoundException $e) {
72  $rowData = [];
73  }
74  } else {
75  throw new \RuntimeException('Other tables not implemented', 1520886234);
76  }
77 
78  foreach ($rowData as $fieldName => $value) {
79  // Flat values only - databaseRow has no "tree"
80  if (!is_array($value)) {
81  $result['databaseRow'][$fieldName] = $value;
82  }
83  }
84  // All "records" are always on pid 0
85  $result['databaseRow']['pid'] = 0;
86  return $result;
87  }
88 
89  protected function ‪getRawConfigurationForSiteWithRootPageId(‪SiteFinder $siteFinder, int $rootPageId): array
90  {
91  $site = $siteFinder->‪getSiteByRootPageId($rootPageId);
92  // load config as it is stored on disk (without replacements)
93  $configuration = $this->siteConfiguration->load($site->getIdentifier());
94  // @todo parse pseudo TCA and react on type==select and renderType==selectMultipleSideBySide
95  if (is_array($configuration['dependencies'] ?? null)) {
96  $configuration['dependencies'] = implode(',', $configuration['dependencies']);
97  }
98  return $configuration;
99  }
100 }
‪TYPO3\CMS\Backend\Form\FormDataProvider\SiteDatabaseEditRow\getRawConfigurationForSiteWithRootPageId
‪getRawConfigurationForSiteWithRootPageId(SiteFinder $siteFinder, int $rootPageId)
Definition: SiteDatabaseEditRow.php:88
‪TYPO3\CMS\Core\Site\SiteFinder\getSiteByRootPageId
‪getSiteByRootPageId(int $rootPageId)
Definition: SiteFinder.php:75
‪TYPO3\CMS\Core\Exception\SiteNotFoundException
Definition: SiteNotFoundException.php:25
‪TYPO3\CMS\Core\Site\SiteFinder
Definition: SiteFinder.php:31
‪TYPO3\CMS\Core\Configuration\SiteConfiguration
Definition: SiteConfiguration.php:47
‪TYPO3\CMS\Backend\Form\FormDataProvider\SiteDatabaseEditRow\$siteConfiguration
‪SiteConfiguration $siteConfiguration
Definition: SiteDatabaseEditRow.php:35
‪TYPO3\CMS\Backend\Form\FormDataProvider\SiteDatabaseEditRow\__construct
‪__construct(SiteConfiguration $siteConfiguration)
Definition: SiteDatabaseEditRow.php:37
‪TYPO3\CMS\Backend\Form\FormDataProvider\SiteDatabaseEditRow\addData
‪addData(array $result)
Definition: SiteDatabaseEditRow.php:47
‪TYPO3\CMS\Backend\Form\FormDataProvider
Definition: AbstractDatabaseRecordProvider.php:16
‪TYPO3\CMS\Backend\Form\FormDataProviderInterface
Definition: FormDataProviderInterface.php:23
‪TYPO3\CMS\Backend\Form\FormDataProvider\SiteDatabaseEditRow
Definition: SiteDatabaseEditRow.php:32
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52