‪TYPO3CMS  ‪main
PageTitleProviderManager.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 
20 use Psr\Log\LoggerAwareInterface;
21 use Psr\Log\LoggerAwareTrait;
26 
30 class ‪PageTitleProviderManager implements ‪SingletonInterface, LoggerAwareInterface
31 {
32  use LoggerAwareTrait;
33 
37  private ‪$pageTitleCache = [];
38 
39  public function ‪getTitle(): string
40  {
41  $pageTitle = '';
42 
43  $titleProviders = $this->‪getPageTitleProviderConfiguration();
44  $titleProviders = $this->‪setProviderOrder($titleProviders);
45 
46  $orderedTitleProviders = GeneralUtility::makeInstance(DependencyOrderingService::class)
47  ->orderByDependencies($titleProviders);
48 
49  $this->logger->debug('Page title providers ordered', [
50  'orderedTitleProviders' => $orderedTitleProviders,
51  ]);
52 
53  foreach ($orderedTitleProviders as $provider => $configuration) {
54  if (class_exists($configuration['provider']) && is_subclass_of($configuration['provider'], PageTitleProviderInterface::class)) {
56  $titleProviderObject = GeneralUtility::makeInstance($configuration['provider']);
57  if (($pageTitle = $titleProviderObject->getTitle())
58  || ($pageTitle = $this->pageTitleCache[$configuration['provider']] ?? '') !== ''
59  ) {
60  $this->logger->debug('Page title provider {provider} used on page {title}', [
61  'title' => $pageTitle,
62  'provider' => $configuration['provider'],
63  ]);
64  $this->pageTitleCache[$configuration['provider']] = $pageTitle;
65  break;
66  }
67  $this->logger->debug('Page title provider {provider} skipped on page {title}', [
68  'title' => $pageTitle,
69  'provider' => $configuration['provider'],
70  'providerUsed' => $configuration['provider'],
71  ]);
72  }
73  }
74 
75  return $pageTitle;
76  }
77 
81  public function ‪getPageTitleCache(): array
82  {
84  }
85 
89  public function ‪setPageTitleCache(array ‪$pageTitleCache): void
90  {
91  $this->pageTitleCache = ‪$pageTitleCache;
92  }
93 
97  private function ‪getPageTitleProviderConfiguration(): array
98  {
99  $typoscriptService = GeneralUtility::makeInstance(TypoScriptService::class);
100  $config = $typoscriptService->convertTypoScriptArrayToPlainArray(
101  ‪$GLOBALS['TSFE']->config['config'] ?? []
102  );
103 
104  return $config['pageTitleProviders'] ?? [];
105  }
106 
111  protected function ‪setProviderOrder(array $orderInformation): array
112  {
113  foreach ($orderInformation as $provider => &$configuration) {
114  if (isset($configuration['before'])) {
115  if (is_string($configuration['before'])) {
116  $configuration['before'] = GeneralUtility::trimExplode(',', $configuration['before'], true);
117  } elseif (!is_array($configuration['before'])) {
118  throw new \UnexpectedValueException(
119  'The specified "before" order configuration for provider "' . $provider . '" is invalid.',
120  1535803185
121  );
122  }
123  }
124  if (isset($configuration['after'])) {
125  if (is_string($configuration['after'])) {
126  $configuration['after'] = GeneralUtility::trimExplode(',', $configuration['after'], true);
127  } elseif (!is_array($configuration['after'])) {
128  throw new \UnexpectedValueException(
129  'The specified "after" order configuration for provider "' . $provider . '" is invalid.',
130  1535803186
131  );
132  }
133  }
134  }
135  return $orderInformation;
136  }
137 }
‪TYPO3\CMS\Core\PageTitle\PageTitleProviderManager\setProviderOrder
‪string[] setProviderOrder(array $orderInformation)
Definition: PageTitleProviderManager.php:110
‪TYPO3\CMS\Core\PageTitle\PageTitleProviderManager\getTitle
‪getTitle()
Definition: PageTitleProviderManager.php:38
‪TYPO3\CMS\Core\PageTitle
Definition: AbstractPageTitleProvider.php:18
‪TYPO3\CMS\Core\PageTitle\PageTitleProviderManager\setPageTitleCache
‪setPageTitleCache(array $pageTitleCache)
Definition: PageTitleProviderManager.php:88
‪TYPO3\CMS\Core\PageTitle\PageTitleProviderManager\getPageTitleProviderConfiguration
‪getPageTitleProviderConfiguration()
Definition: PageTitleProviderManager.php:96
‪TYPO3\CMS\Core\PageTitle\PageTitleProviderManager
Definition: PageTitleProviderManager.php:31
‪TYPO3\CMS\Core\Service\DependencyOrderingService
Definition: DependencyOrderingService.php:32
‪TYPO3\CMS\Core\TypoScript\TypoScriptService
Definition: TypoScriptService.php:27
‪TYPO3\CMS\Core\SingletonInterface
Definition: SingletonInterface.php:22
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\PageTitle\PageTitleProviderManager\$pageTitleCache
‪array $pageTitleCache
Definition: PageTitleProviderManager.php:36
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:51
‪TYPO3\CMS\Core\PageTitle\PageTitleProviderManager\getPageTitleCache
‪getPageTitleCache()
Definition: PageTitleProviderManager.php:80