‪TYPO3CMS  ‪main
MetaTagManagerRegistry.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 
23 
28 {
32  protected ‪$registry = [];
33 
37  private ‪$instances = [];
38 
42  private ‪$managers;
43 
44  public function ‪__construct()
45  {
46  $this->registry['generic'] = [
47  'module' => GenericMetaTagManager::class,
48  ];
49  }
50 
54  public function ‪registerManager(string $name, string $className, array $before = ['generic'], array $after = [])
55  {
56  if (!count($before)) {
57  $before[] = 'generic';
58  }
59 
60  $this->registry[$name] = [
61  'module' => $className,
62  'before' => $before,
63  'after' => $after,
64  ];
65  $this->managers = null;
66  }
67 
71  public function ‪getManagerForProperty(string $property): ‪MetaTagManagerInterface
72  {
73  $property = strtolower($property);
74  foreach ($this->‪getAllManagers() as $manager) {
75  if ($manager->canHandleProperty($property)) {
76  return $manager;
77  }
78  }
79 
80  // Just a fallback because the GenericMetaTagManager is also registered in the list of MetaTagManagers
81  return GeneralUtility::makeInstance(GenericMetaTagManager::class);
82  }
83 
89  public function ‪getAllManagers(): array
90  {
91  if ($this->managers !== null) {
92  return ‪$this->managers;
93  }
94 
95  $orderedManagers = GeneralUtility::makeInstance(DependencyOrderingService::class)->orderByDependencies(
96  $this->registry
97  );
98 
99  $this->managers = [];
100  foreach ($orderedManagers as $manager => $managerConfiguration) {
101  $module = $managerConfiguration['module'];
102  if (class_exists($module)) {
103  $this->instances[$module] = $this->instances[$module] ?? GeneralUtility::makeInstance($module);
104  $this->managers[$manager] = $this->instances[$module];
105  }
106  }
107 
108  return ‪$this->managers;
109  }
110 
114  public function ‪removeAllManagers()
115  {
116  $this->registry = [];
117  $this->managers = null;
118  }
119 
123  public function ‪updateState(array $state): void
124  {
125  $this->instances = [];
126  foreach ($state['instances'] ?? [] as $module => $instanceState) {
127  $instance = GeneralUtility::makeInstance($module);
128  $instance->updateState($instanceState);
129  $this->instances[$module] = $instance;
130  }
131  $this->managers = null;
132  }
133 
137  public function ‪getState(): array
138  {
139  return [
140  'instances' => array_map(
141  static fn(‪MetaTagManagerInterface $instance): array => $instance->‪getState(),
142  $this->instances,
143  ),
144  ];
145  }
146 }
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry\getAllManagers
‪MetaTagManagerInterface[] getAllManagers()
Definition: MetaTagManagerRegistry.php:86
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry\removeAllManagers
‪removeAllManagers()
Definition: MetaTagManagerRegistry.php:111
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry\updateState
‪updateState(array $state)
Definition: MetaTagManagerRegistry.php:120
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry\$instances
‪MetaTagManagerInterface[] $instances
Definition: MetaTagManagerRegistry.php:35
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerInterface\getState
‪getState()
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry
Definition: MetaTagManagerRegistry.php:28
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerInterface
Definition: MetaTagManagerInterface.php:21
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry\__construct
‪__construct()
Definition: MetaTagManagerRegistry.php:41
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry\registerManager
‪registerManager(string $name, string $className, array $before=['generic'], array $after=[])
Definition: MetaTagManagerRegistry.php:51
‪TYPO3\CMS\Core\MetaTag
Definition: AbstractMetaTagManager.php:18
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry\getState
‪getState()
Definition: MetaTagManagerRegistry.php:134
‪TYPO3\CMS\Core\Service\DependencyOrderingService
Definition: DependencyOrderingService.php:32
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry\$managers
‪MetaTagManagerInterface[] null $managers
Definition: MetaTagManagerRegistry.php:39
‪TYPO3\CMS\Core\SingletonInterface
Definition: SingletonInterface.php:22
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry\$registry
‪mixed[] $registry
Definition: MetaTagManagerRegistry.php:31
‪TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry\getManagerForProperty
‪getManagerForProperty(string $property)
Definition: MetaTagManagerRegistry.php:68
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52