OtSiteResolver.php 2.3 KB

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