SiteMatcher.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. namespace Opentalent\OtOptimizer\XClass\Routing;
  3. use Opentalent\OtCore\Website\OtWebsiteRepository;
  4. use Psr\Http\Message\ServerRequestInterface;
  5. use TYPO3\CMS\Core\Routing\SiteRouteResult;
  6. use TYPO3\CMS\Core\Utility\GeneralUtility;
  7. use TYPO3\CMS\Extbase\Object\ObjectManager;
  8. /**
  9. * Hooks into the frontend request and use the ot_websites table to resolve the site configuration
  10. * (frontend only)
  11. *
  12. * @internal
  13. */
  14. class SiteMatcher extends \TYPO3\CMS\Core\Routing\SiteMatcher
  15. {
  16. /**
  17. * Override the default Typo3 \TYPO3\CMS\Core\Routing\SiteMatcher
  18. *
  19. * @param ServerRequestInterface $request
  20. * @return \TYPO3\CMS\Core\Routing\RouteResultInterface
  21. * @throws \Opentalent\OtCore\Exception\NoSuchWebsiteException
  22. */
  23. public function matchRequest(ServerRequestInterface $request): \TYPO3\CMS\Core\Routing\RouteResultInterface
  24. {
  25. if ($_COOKIE['optimize'] != 1 && $request->getQueryParams()['optimize'] != 1) {
  26. return parent::matchRequest($request);
  27. }
  28. $devMode = $_SERVER['TYPO3_CONTEXT'] == "Development";
  29. $otWebsiteRepository = GeneralUtility::makeInstance(ObjectManager::class)->get(OtWebsiteRepository::class);
  30. $site = $otWebsiteRepository->matchUriToWebsite($request->getUri(), $devMode);
  31. if ($devMode) {
  32. preg_match("/\w+\/(.*)/", $request->getUri()->getPath(), $m);
  33. $tail = $m[1] ?? "";
  34. } else {
  35. $tail = $request->getUri()->getPath();
  36. }
  37. $language = $site->getDefaultLanguage();
  38. return new SiteRouteResult($request->getUri(), $site, $language, $tail);
  39. }
  40. }