OtPageResolver.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace Opentalent\OtOptimizer\Middleware\Frontend;
  3. use Opentalent\OtCore\Website\OtWebsiteRepository;
  4. use Psr\Http\Message\ResponseInterface;
  5. use Psr\Http\Message\ServerRequestInterface;
  6. use Psr\Http\Server\RequestHandlerInterface;
  7. use TYPO3\CMS\Core\Utility\GeneralUtility;
  8. use TYPO3\CMS\Extbase\Object\ObjectManager;
  9. use TYPO3\CMS\Frontend\Controller\ErrorController;
  10. use TYPO3\CMS\Frontend\Page\PageAccessFailureReasons;
  11. class OtPageResolver extends \TYPO3\CMS\Frontend\Middleware\PageResolver
  12. {
  13. private bool $shallFallback;
  14. public function __construct($controller = null)
  15. {
  16. $this->shallFallback = $_COOKIE['optimize'] != 1 && $_SERVER['TYPO3_OPTIMIZE'] != 1;
  17. parent::__construct($controller);
  18. }
  19. /**
  20. * Resolve the page ID
  21. *
  22. * @param ServerRequestInterface $request
  23. * @param RequestHandlerInterface $handler
  24. * @return ResponseInterface
  25. */
  26. public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
  27. {
  28. if ($this->shallFallback) {
  29. return parent::process($request, $handler);
  30. }
  31. $otWebsiteRepository = GeneralUtility::makeInstance(ObjectManager::class)->get(OtWebsiteRepository::class);
  32. $devMode = $_SERVER['TYPO3_CONTEXT'] == "Development";
  33. $website = $GLOBALS['TYPO3_REQUEST']->getAttribute('ot_website');
  34. $params = $request->getQueryParams();
  35. $pageUid = $otWebsiteRepository->matchUriToPage($website, $request->getUri(), $devMode);
  36. if (!$pageUid > 0) {
  37. return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
  38. $request,
  39. 'The requested page does not exist',
  40. ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND]
  41. );
  42. }
  43. $params['id'] = $pageUid;
  44. $request = $request->withQueryParams($params);
  45. return parent::process($request, $handler);
  46. }
  47. }