[!!!][TASK] Remove deprecated code in EXT:core
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Configuration / SiteConfiguration.php
index f444f40..30943d0 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 declare(strict_types = 1);
+
 namespace TYPO3\CMS\Core\Configuration;
 
 /*
@@ -69,8 +70,29 @@ class SiteConfiguration
      */
     public function resolveAllExistingSites(): array
     {
+        $sites = [];
+        $siteConfiguration = $this->getAllSiteConfigurationFromFiles();
+        foreach ($siteConfiguration as $identifier => $configuration) {
+            $rootPageId = (int)($configuration['rootPageId'] ?? 0);
+            if ($rootPageId > 0) {
+                $sites[$identifier] = GeneralUtility::makeInstance(Site::class, $identifier, $rootPageId, $configuration);
+            }
+        }
+        return $sites;
+    }
+
+    /**
+     * Read the site configuration from config files.
+     *
+     * @return array
+     * @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
+     */
+    protected function getAllSiteConfigurationFromFiles(): array
+    {
         // Check if the data is already cached
         if ($siteConfiguration = $this->getCache()->get($this->cacheIdentifier)) {
+            // Due to the nature of PhpFrontend, the `<?php` and `#` wraps have to be removed
+            $siteConfiguration = preg_replace('/^<\?php\s*|\s*#$/', '', $siteConfiguration);
             $siteConfiguration = json_decode($siteConfiguration, true);
         }
 
@@ -86,20 +108,30 @@ class SiteConfiguration
             $loader = GeneralUtility::makeInstance(YamlFileLoader::class);
             $siteConfiguration = [];
             foreach ($finder as $fileInfo) {
-                $configuration = $loader->load((string)$fileInfo);
+                $configuration = $loader->load(GeneralUtility::fixWindowsFilePath((string)$fileInfo));
                 $identifier = basename($fileInfo->getPath());
                 $siteConfiguration[$identifier] = $configuration;
             }
             $this->getCache()->set($this->cacheIdentifier, json_encode($siteConfiguration));
         }
-        $sites = [];
-        foreach ($siteConfiguration ?? [] as $identifier => $configuration) {
-            $rootPageId = (int)$configuration['site']['rootPageId'] ?? 0;
-            if ($rootPageId > 0) {
-                $sites[$identifier] = GeneralUtility::makeInstance(Site::class, $identifier, $rootPageId, $configuration['site']);
-            }
-        }
-        return $sites;
+        return $siteConfiguration ?? [];
+    }
+
+    /**
+     * Load plain configuration
+     * This method should only be used in case the original configuration as it exists in the file should be loaded,
+     * for example for writing / editing configuration.
+     *
+     * All read related actions should be performed on the site entity.
+     *
+     * @param string $siteIdentifier
+     * @return array
+     */
+    public function load(string $siteIdentifier): array
+    {
+        $fileName = $this->configPath . '/' . $siteIdentifier . '/' . $this->configFileName;
+        $loader = GeneralUtility::makeInstance(YamlFileLoader::class);
+        return $loader->load(GeneralUtility::fixWindowsFilePath($fileName), YamlFileLoader::PROCESS_IMPORTS);
     }
 
     /**
@@ -109,7 +141,7 @@ class SiteConfiguration
      * @param array $configuration
      * @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
      */
-    public function write(string $siteIdentifier, array $configuration)
+    public function write(string $siteIdentifier, array $configuration): void
     {
         $fileName = $this->configPath . '/' . $siteIdentifier . '/' . $this->configFileName;
         if (!file_exists($fileName)) {
@@ -118,6 +150,7 @@ class SiteConfiguration
         $yamlFileContents = Yaml::dump($configuration, 99, 2);
         GeneralUtility::writeFile($fileName, $yamlFileContents);
         $this->getCache()->remove($this->cacheIdentifier);
+        $this->getCache()->remove('pseudo-sites');
     }
 
     /**
@@ -127,7 +160,7 @@ class SiteConfiguration
      * @param string $newIdentifier
      * @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
      */
-    public function rename(string $currentIdentifier, string $newIdentifier)
+    public function rename(string $currentIdentifier, string $newIdentifier): void
     {
         $result = rename($this->configPath . '/' . $currentIdentifier, $this->configPath . '/' . $newIdentifier);
         if (!$result) {
@@ -143,7 +176,7 @@ class SiteConfiguration
      * @param string $siteIdentifier
      * @throws SiteNotFoundException
      */
-    public function delete(string $siteIdentifier)
+    public function delete(string $siteIdentifier): void
     {
         $sites = $this->resolveAllExistingSites();
         if (!isset($sites[$siteIdentifier])) {
@@ -155,6 +188,7 @@ class SiteConfiguration
         }
         @unlink($fileName);
         $this->getCache()->remove($this->cacheIdentifier);
+        $this->getCache()->remove('pseudo-sites');
     }
 
     /**