OtPageResolver.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. /**
  14. * Resolve the page ID
  15. *
  16. * @param ServerRequestInterface $request
  17. * @param RequestHandlerInterface $handler
  18. * @return ResponseInterface
  19. * @throws \Opentalent\OtCore\Exception\NoSuchWebsiteException
  20. * @throws \TYPO3\CMS\Core\Error\Http\PageNotFoundException
  21. * @throws \TYPO3\CMS\Extbase\Object\Exception
  22. */
  23. public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
  24. {
  25. $shallFallback = $_COOKIE['optimize'] != 1 && $_SERVER['TYPO3_OPTIMIZE'] != 1;
  26. if ($shallFallback) {
  27. return parent::process($request, $handler);
  28. }
  29. $otWebsiteRepository = GeneralUtility::makeInstance(ObjectManager::class)->get(OtWebsiteRepository::class);
  30. $devMode = $_SERVER['TYPO3_CONTEXT'] == "Development";
  31. if (!$GLOBALS['TYPO3_REQUEST']) {
  32. return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
  33. $request,
  34. 'The requested website does not exist',
  35. ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND]
  36. );
  37. }
  38. $website = $GLOBALS['TYPO3_REQUEST']->getAttribute('ot_website');
  39. $params = $request->getQueryParams();
  40. if (!$website['uid'] > 0) {
  41. return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
  42. $request,
  43. 'The requested website does not exist',
  44. ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND]
  45. );
  46. }
  47. $pageUid = $otWebsiteRepository->matchUriToPage($website, $request->getUri(), $devMode);
  48. if (!$pageUid > 0) {
  49. return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
  50. $request,
  51. 'The requested page does not exist',
  52. ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND]
  53. );
  54. }
  55. $params['id'] = $pageUid;
  56. $request = $request->withQueryParams($params);
  57. return parent::process($request, $handler);
  58. }
  59. }