[TASK] Add SiteInterface to site handling 85/57085/5
authorBenni Mack <benni@typo3.org>
Tue, 29 May 2018 22:10:04 +0000 (00:10 +0200)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Thu, 2 Aug 2018 14:31:41 +0000 (16:31 +0200)
In order to allow sites without configuration
(e.g. based on sys_domain records),  a site interface
is added which also allows to code against.

Resolves: #85717
Releases: master
Change-Id: Icc3c8f574855d2c54560d49320dda6de426977e5
Reviewed-on: https://review.typo3.org/57085
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/core/Classes/Site/Entity/Site.php
typo3/sysext/core/Classes/Site/Entity/SiteInterface.php [new file with mode: 0644]
typo3/sysext/core/Classes/Site/Entity/SiteLanguage.php
typo3/sysext/core/Classes/Site/SiteFinder.php
typo3/sysext/frontend/Classes/ContentObject/Menu/AbstractMenuContentObject.php

index 5e55433..54fe12c 100644 (file)
@@ -25,7 +25,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 /**
  * Entity representing a single site with available languages
  */
-class Site
+class Site implements SiteInterface
 {
     protected const ERRORHANDLER_TYPE_PAGE = 'Page';
     protected const ERRORHANDLER_TYPE_FLUID = 'Fluid';
@@ -112,7 +112,8 @@ class Site
     }
 
     /**
-     * Gets the identifier of this site
+     * Gets the identifier of this site,
+     * mainly used when maintaining / configuring sites.
      *
      * @return string
      */
@@ -142,7 +143,7 @@ class Site
     }
 
     /**
-     * Returns all available langauges of this site
+     * Returns all available languages of this site
      *
      * @return SiteLanguage[]
      */
diff --git a/typo3/sysext/core/Classes/Site/Entity/SiteInterface.php b/typo3/sysext/core/Classes/Site/Entity/SiteInterface.php
new file mode 100644 (file)
index 0000000..26f18e0
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+declare(strict_types = 1);
+
+namespace TYPO3\CMS\Core\Site\Entity;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\Error\PageErrorHandler\PageErrorHandlerInterface;
+
+interface SiteInterface
+{
+    /**
+     * Returns the root page ID of this site
+     *
+     * @return int
+     */
+    public function getRootPageId(): int;
+
+    /**
+     * Returns all available languages of this site
+     *
+     * @return SiteLanguage[]
+     */
+    public function getLanguages(): array;
+
+    /**
+     * Returns a language of this site, given by the sys_language_uid
+     *
+     * @param int $languageId
+     * @return SiteLanguage
+     * @throws \InvalidArgumentException
+     */
+    public function getLanguageById(int $languageId): SiteLanguage;
+
+    /**
+     * Returns a ready-to-use error handler, to be used within the ErrorController
+     *
+     * @param int $statusCode
+     * @return PageErrorHandlerInterface
+     * @throws \RuntimeException
+     */
+    public function getErrorHandler(int $statusCode): PageErrorHandlerInterface;
+}
index ced7eb5..4233f07 100644 (file)
@@ -22,7 +22,7 @@ namespace TYPO3\CMS\Core\Site\Entity;
 class SiteLanguage
 {
     /**
-     * @var Site
+     * @var SiteInterface
      */
     protected $site;
 
@@ -112,13 +112,13 @@ class SiteLanguage
 
     /**
      * SiteLanguage constructor.
-     * @param Site $site
+     * @param SiteInterface $site
      * @param int $languageId
      * @param string $locale
      * @param string $base
      * @param array $attributes
      */
-    public function __construct(Site $site, int $languageId, string $locale, string $base, array $attributes)
+    public function __construct(SiteInterface $site, int $languageId, string $locale, string $base, array $attributes)
     {
         $this->site = $site;
         $this->languageId = $languageId;
@@ -179,9 +179,9 @@ class SiteLanguage
     }
 
     /**
-     * @return Site
+     * @return SiteInterface
      */
-    public function getSite(): Site
+    public function getSite(): SiteInterface
     {
         return $this->site;
     }
index 48f9503..1b82c16 100644 (file)
@@ -22,6 +22,7 @@ use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
 use TYPO3\CMS\Core\Exception\SiteNotFoundException;
 use TYPO3\CMS\Core\Site\Entity\Site;
+use TYPO3\CMS\Core\Site\Entity\SiteInterface;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
@@ -69,7 +70,7 @@ class SiteFinder
      *
      * @return array
      */
-    public function getBaseUris(): array
+    protected function getBaseUris(): array
     {
         $baseUrls = [];
         foreach ($this->sites as $site) {
@@ -87,10 +88,10 @@ class SiteFinder
      * Find a site by given root page id
      *
      * @param int $rootPageId
-     * @return Site
+     * @return SiteInterface
      * @throws SiteNotFoundException
      */
-    public function getSiteByRootPageId(int $rootPageId): Site
+    public function getSiteByRootPageId(int $rootPageId): SiteInterface
     {
         if (isset($this->mappingRootPageIdToIdentifier[$rootPageId])) {
             return $this->sites[$this->mappingRootPageIdToIdentifier[$rootPageId]];
@@ -140,10 +141,10 @@ class SiteFinder
      *
      * @param int $pageId
      * @param array $alternativeRootLine
-     * @return Site
+     * @return SiteInterface
      * @throws SiteNotFoundException
      */
-    public function getSiteByPageId(int $pageId, array $alternativeRootLine = null): Site
+    public function getSiteByPageId(int $pageId, array $alternativeRootLine = null): SiteInterface
     {
         if (is_array($alternativeRootLine)) {
             foreach ($alternativeRootLine as $pageInRootLine) {
index 3ff5e80..4fbcf4e 100644 (file)
@@ -19,7 +19,7 @@ use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Context\LanguageAspect;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\RelationHandler;
-use TYPO3\CMS\Core\Site\Entity\Site;
+use TYPO3\CMS\Core\Site\Entity\SiteInterface;
 use TYPO3\CMS\Core\Site\SiteFinder;
 use TYPO3\CMS\Core\TimeTracker\TimeTracker;
 use TYPO3\CMS\Core\TypoScript\TemplateService;
@@ -2333,10 +2333,10 @@ abstract class AbstractMenuContentObject
     /**
      * Returns the currently configured "site" if a site is configured (= resolved) in the current request.
      *
-     * @return Site
+     * @return SiteInterface
      * @throws \TYPO3\CMS\Core\Exception\SiteNotFoundException
      */
-    protected function getCurrentSite(): Site
+    protected function getCurrentSite(): SiteInterface
     {
         $finder = GeneralUtility::makeInstance(SiteFinder::class);
         return $finder->getSiteByPageId((int)$this->getTypoScriptFrontendController()->id);