[TASK] Clean up MetaTagManager API 57/57157/10
authorBenni Mack <benni@typo3.org>
Sat, 9 Jun 2018 13:41:43 +0000 (15:41 +0200)
committerOliver Hader <oliver.hader@typo3.org>
Sat, 9 Jun 2018 16:16:16 +0000 (18:16 +0200)
Both the MetaTagManagerRegistry and the MetaTagManager are
singletons via TYPO3's SingletonInterface, thus, there is no
need for having a getInstance() within the API itself,
nor in any abstract / generic base classes.

Resolves: #85197
Releases: master
Change-Id: I9aa925a1646a4482313dd740ecc3ae45780c9432
Reviewed-on: https://review.typo3.org/57157
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Oliver Hader <oliver.hader@typo3.org>
Tested-by: Oliver Hader <oliver.hader@typo3.org>
Tested-by: TYPO3com <no-reply@typo3.com>
typo3/sysext/core/Classes/MetaTag/AbstractMetaTagManager.php
typo3/sysext/core/Classes/MetaTag/GenericMetaTagManager.php
typo3/sysext/core/Classes/MetaTag/MetaTagManagerInterface.php
typo3/sysext/core/Classes/MetaTag/MetaTagManagerRegistry.php
typo3/sysext/core/Classes/Page/PageRenderer.php
typo3/sysext/core/Tests/Unit/MetaTag/MetaTagManagerRegistryTest.php
typo3/sysext/core/Tests/Unit/Page/PageRendererTest.php
typo3/sysext/core/ext_localconf.php

index b3efe93..34a314c 100644 (file)
@@ -17,7 +17,6 @@ namespace TYPO3\CMS\Core\MetaTag;
  */
 
 use TYPO3\CMS\Core\SingletonInterface;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 abstract class AbstractMetaTagManager implements MetaTagManagerInterface, SingletonInterface
 {
@@ -92,16 +91,6 @@ abstract class AbstractMetaTagManager implements MetaTagManagerInterface, Single
     protected $properties = [];
 
     /**
-     * Gets instance of the manager
-     *
-     * @return MetaTagManagerInterface
-     */
-    public static function getInstance(): MetaTagManagerInterface
-    {
-        return GeneralUtility::makeInstance(__CLASS__);
-    }
-
-    /**
      * Add a property
      *
      * @param string $property Name of the property
index f064b41..b7a03a5 100644 (file)
@@ -17,9 +17,12 @@ namespace TYPO3\CMS\Core\MetaTag;
  */
 
 use TYPO3\CMS\Core\SingletonInterface;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
 
-class GenericMetaTagManager implements MetaTagManagerInterface, SingletonInterface
+/**
+ * Handles typical meta tags (non-grouped). Use AbstractMetaTagManager
+ * to create you own MetaTags, this class is final by design
+ */
+final class GenericMetaTagManager implements MetaTagManagerInterface, SingletonInterface
 {
     /**
      * The separator to define subproperties like og:image:width
@@ -41,6 +44,7 @@ class GenericMetaTagManager implements MetaTagManagerInterface, SingletonInterfa
      * @param string $property
      * @param string $content
      * @param array $subProperties
+     * @param bool $replace
      * @param string $type
      */
     public function addProperty(string $property, string $content, array $subProperties = [], bool $replace = false, string $type = 'name')
@@ -156,14 +160,6 @@ class GenericMetaTagManager implements MetaTagManagerInterface, SingletonInterfa
     }
 
     /**
-     * @return MetaTagManagerInterface
-     */
-    public static function getInstance(): MetaTagManagerInterface
-    {
-        return GeneralUtility::makeInstance(__CLASS__);
-    }
-
-    /**
      * @param string $property
      * @return bool
      */
index ff75542..c84c5ce 100644 (file)
@@ -19,18 +19,12 @@ namespace TYPO3\CMS\Core\MetaTag;
 interface MetaTagManagerInterface
 {
     /**
-     * Gets instance of the manager
-     *
-     * @return MetaTagManagerInterface
-     */
-    public static function getInstance(): MetaTagManagerInterface;
-
-    /**
      * Add a property
      *
      * @param string $property
      * @param string $content
      * @param array $subProperties
+     * @param bool $replace
      * @param string $type
      */
     public function addProperty(string $property, string $content, array $subProperties = [], bool $replace = false, string $type = '');
index 033812f..d736b78 100644 (file)
@@ -20,6 +20,9 @@ use TYPO3\CMS\Core\Service\DependencyOrderingService;
 use TYPO3\CMS\Core\SingletonInterface;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
+/**
+ * Holds all available meta tag managers
+ */
 class MetaTagManagerRegistry implements SingletonInterface
 {
     protected $registry = [];
@@ -32,16 +35,6 @@ class MetaTagManagerRegistry implements SingletonInterface
     }
 
     /**
-     * Returns instance of this class
-     *
-     * @return MetaTagManagerRegistry
-     */
-    public static function getInstance()
-    {
-        return GeneralUtility::makeInstance(self::class);
-    }
-
-    /**
      * Add a MetaTagManager to the registry
      *
      * @param string $name
@@ -70,6 +63,7 @@ class MetaTagManagerRegistry implements SingletonInterface
      */
     public function getManagerForProperty(string $property): MetaTagManagerInterface
     {
+        $property = strtolower($property);
         foreach ($this->getAllManagers() as $manager) {
             if ($manager->canHandleProperty($property)) {
                 return $manager;
@@ -77,7 +71,7 @@ class MetaTagManagerRegistry implements SingletonInterface
         }
 
         // Just a fallback because the GenericMetaTagManager is also registered in the list of MetaTagManagers
-        return GenericMetaTagManager::getInstance();
+        return GeneralUtility::makeInstance(GenericMetaTagManager::class);
     }
 
     /**
index 9ba97b8..e258847 100644 (file)
@@ -374,6 +374,11 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface
     protected $endingSlash = '';
 
     /**
+     * @var MetaTagManagerRegistry
+     */
+    protected $metaTagRegistry;
+
+    /**
      * @param string $templateFile Declare the used template file. Omit this parameter will use default template
      */
     public function __construct($templateFile = '')
@@ -392,6 +397,7 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface
             '-->' . LF . '/*]]>*/' . LF . '</style>' . LF
         ];
 
+        $this->metaTagRegistry = GeneralUtility::makeInstance(MetaTagManagerRegistry::class);
         $this->setMetaTag('name', 'generator', 'TYPO3 CMS');
     }
 
@@ -950,9 +956,7 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface
      */
     public function setMetaTag(string $type, string $name, string $content, array $subProperties = [], $replace = true)
     {
-        /**
-         * Lowercase all the things
-         */
+        // Lowercase all the things
         $type = strtolower($type);
         $name = strtolower($name);
         if (!in_array($type, ['property', 'name', 'http-equiv'], true)) {
@@ -962,8 +966,7 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface
             );
         }
 
-        $metaTagManagerRegistry = MetaTagManagerRegistry::getInstance();
-        $manager = $metaTagManagerRegistry->getManagerForProperty($name);
+        $manager = $this->metaTagRegistry->getManagerForProperty($name);
         $manager->addProperty($name, $content, $subProperties, $replace, $type);
     }
 
@@ -977,14 +980,11 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface
      */
     public function getMetaTag(string $type, string $name): array
     {
-        /**
-         * Lowercase all the things
-         */
+        // Lowercase all the things
         $type = strtolower($type);
         $name = strtolower($name);
 
-        $metaTagManagerRegistry = MetaTagManagerRegistry::getInstance();
-        $manager = $metaTagManagerRegistry->getManagerForProperty($name);
+        $manager = $this->metaTagRegistry->getManagerForProperty($name);
         $propertyContent = $manager->getProperty($name, $type);
 
         if (!empty($propertyContent[0])) {
@@ -1005,14 +1005,11 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface
      */
     public function removeMetaTag(string $type, string $name)
     {
-        /**
-         * Lowercase all the things
-         */
+        // Lowercase all the things
         $type = strtolower($type);
         $name = strtolower($name);
 
-        $metaTagManagerRegistry = MetaTagManagerRegistry::getInstance();
-        $manager = $metaTagManagerRegistry->getManagerForProperty($name);
+        $manager = $this->metaTagRegistry->getManagerForProperty($name);
         $manager->removeProperty($name, $type);
     }
 
@@ -1648,9 +1645,9 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface
      */
     protected function renderMetaTagsFromAPI()
     {
-        $metaTagManagerRegistry = MetaTagManagerRegistry::getInstance();
         $metaTags = [];
-        foreach ($metaTagManagerRegistry->getAllManagers() as $manager) {
+        $metaTagManagers = $this->metaTagRegistry->getAllManagers();
+        foreach ($metaTagManagers as $manager) {
             if ($properties = $manager->renderAllProperties()) {
                 $metaTags[] = $properties;
             }
index d929f94..abd1e2c 100644 (file)
@@ -28,17 +28,9 @@ class MetaTagManagerRegistryTest extends \TYPO3\TestingFramework\Core\Unit\UnitT
     /**
      * @test
      */
-    public function checkGetInstanceReturnsMetaTagManagerRegistryInstance()
-    {
-        return $this->assertInstanceOf(MetaTagManagerRegistry::class, MetaTagManagerRegistry::getInstance());
-    }
-
-    /**
-     * @test
-     */
     public function checkRegisterNonExistingManagerDoesntThrowErrorWhenFetchingManagers()
     {
-        $metaTagManagerRegistry = MetaTagManagerRegistry::getInstance();
+        $metaTagManagerRegistry = new MetaTagManagerRegistry();
 
         $metaTagManagerRegistry->registerManager('name', 'fake//class//name');
         $metaTagManagerRegistry->getAllManagers();
index 90fe3d0..d598121 100644 (file)
@@ -269,7 +269,7 @@ class PageRendererTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
     public function getAddedMetaTag()
     {
         /** @var \TYPO3\CMS\Core\Page\PageRenderer|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $subject */
-        $subject = $this->getAccessibleMock(\TYPO3\CMS\Core\Page\PageRenderer::class, ['whatDoesThisDo'], [], '', false);
+        $subject = $this->getAccessibleMock(\TYPO3\CMS\Core\Page\PageRenderer::class, ['whatDoesThisDo']);
         $subject->setMetaTag('nAme', 'Author', 'foobar');
         $actualResult = $subject->getMetaTag('naMe', 'AUTHOR');
         $expectedResult = [
@@ -286,7 +286,7 @@ class PageRendererTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
     public function overrideMetaTag()
     {
         /** @var \TYPO3\CMS\Core\Page\PageRenderer|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $subject */
-        $subject = $this->getAccessibleMock(\TYPO3\CMS\Core\Page\PageRenderer::class, ['whatDoesThisDo'], [], '', false);
+        $subject = $this->getAccessibleMock(\TYPO3\CMS\Core\Page\PageRenderer::class, ['whatDoesThisDo']);
         $subject->setMetaTag('nAme', 'Author', 'Axel Foley');
         $subject->setMetaTag('nAme', 'Author', 'foobar');
         $actualResult = $subject->getMetaTag('naMe', 'AUTHOR');
@@ -304,7 +304,7 @@ class PageRendererTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
     public function unsetAddedMetaTag()
     {
         /** @var \TYPO3\CMS\Core\Page\PageRenderer|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $subject */
-        $subject = $this->getAccessibleMock(\TYPO3\CMS\Core\Page\PageRenderer::class, ['whatDoesThisDo'], [], '', false);
+        $subject = $this->getAccessibleMock(\TYPO3\CMS\Core\Page\PageRenderer::class, ['whatDoesThisDo']);
         $subject->setMetaTag('nAme', 'Author', 'foobar');
         $subject->removeMetaTag('naMe', 'AUTHOR');
         $actualResult = $subject->getMetaTag('naMe', 'AUTHOR');
index 70a86c3..a1b392d 100644 (file)
@@ -125,7 +125,7 @@ unset($extractorRegistry);
     'TCEMAIN.translateToMessage = Translate to %s:'
 );
 
-$metaTagManagerRegistry = \TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry::getInstance();
+$metaTagManagerRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry::class);
 $metaTagManagerRegistry->registerManager(
     'opengraph',
     \TYPO3\CMS\Core\MetaTag\OpenGraphMetaTagManager::class