OtSiteResolver.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. declare(strict_types = 1);
  3. namespace Opentalent\OtOptimizer\XClass\Frontend\Middleware;
  4. use Opentalent\OtOptimizer\Routing\SiteMatcher;
  5. use Psr\Http\Message\ResponseInterface;
  6. use Psr\Http\Message\ServerRequestInterface;
  7. use Psr\Http\Server\RequestHandlerInterface;
  8. use TYPO3\CMS\Core\Utility\GeneralUtility;
  9. use TYPO3\CMS\Extbase\Object\ObjectManager;
  10. /**
  11. *
  12. */
  13. class OtSiteResolver extends \TYPO3\CMS\Frontend\Middleware\SiteResolver
  14. {
  15. private bool $shallFallback;
  16. public function __construct($matcher = null)
  17. {
  18. $this->shallFallback = $_COOKIE['optimize'] != 1;
  19. if ($this->shallFallback) {
  20. parent::__construct($matcher);
  21. }
  22. }
  23. /**
  24. * Resolve the site/language information by checking the page ID or the URL.
  25. *
  26. * @param ServerRequestInterface $request
  27. * @param RequestHandlerInterface $handler
  28. * @return ResponseInterface
  29. */
  30. public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
  31. {
  32. if ($this->shallFallback) {
  33. return parent::process($request, $handler);
  34. }
  35. $matcher = GeneralUtility::makeInstance(ObjectManager::class)->get(SiteMatcher::class);
  36. $routeResult = $matcher->matchRequest($request);
  37. $request = $request->withAttribute('site', $routeResult->getSite());
  38. $request = $request->withAttribute('language', $routeResult->getLanguage());
  39. $request = $request->withAttribute('routing', $routeResult);
  40. // At this point, we later get further route modifiers
  41. // for bw-compat we update $GLOBALS[TYPO3_REQUEST] to be used later in TSFE.
  42. $GLOBALS['TYPO3_REQUEST'] = $request;
  43. return $handler->handle($request);
  44. }
  45. }