src/Controller/Front/PageController.php line 106

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller\Front;
  4. use App\Config\Pages;
  5. use App\Entity\Page\Page;
  6. use App\Entity\Page\PageTranslation;
  7. use App\Provider\PageProviderInterface;
  8. use DateTime;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  16. use Symfony\Component\HttpKernel\Exception\HttpException;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. /**
  19.  * @Route("", name="front-")
  20.  */
  21. class PageController extends AbstractController
  22. {
  23.     private array $locales = [];
  24.     //private SessionInterface $session;
  25.     /**
  26.      * @var ParameterBagInterface
  27.      */
  28.     private ParameterBagInterface $parameterBag;
  29.     private RequestStack $session;
  30.     public function __construct(
  31.         //SessionInterface $session,
  32.         ParameterBagInterface $parameterBag,
  33.         RequestStack $session
  34.     ) {
  35.         $this->locales $parameterBag->get('app.supported_locales_data');
  36.         $this->parameterBag $parameterBag;
  37.         $this->session $session;
  38.     }
  39. //    /**
  40. //     * @Route(
  41. //     *      "",
  42. //     *      name="language-choice",
  43. //     *      methods={"GET"},
  44. //     * )
  45. //     */
  46. //    public function languageChoiceAction(
  47. //        Request $request,
  48. //        PageProviderInterface $pageProvider
  49. //    ): Response {
  50. //        $requestedChangeOfLanguage = (bool)$request->query->get('changeLanguage', null);
  51. //        $requestedEnglish = (bool)$request->query->get('en', null);
  52. //
  53. //        if ($requestedEnglish) {
  54. //            $request->query->remove('en');
  55. //        }
  56. //
  57. //        $mainPage = $pageProvider->getOneByMigrationId(1);
  58. //
  59. //        $isLocaleAlreadyChosen = ($_locale = $this->session->getSession()->get('_locale')) && !$requestedChangeOfLanguage;
  60. //        $isLoggedIn = $this->getUser() !== null;
  61. //
  62. //        if ($isLocaleAlreadyChosen || $isLoggedIn || $requestedEnglish) {
  63. //            $_locale = ($requestedEnglish) ? "en" : $_locale;
  64. //            $mainPageUrl = $mainPage->translate($_locale, false)->getUrl();
  65. //
  66. //            return $this->redirectToRoute('front-page', [
  67. //                "url" => $mainPageUrl,
  68. //                "_locale" => $_locale,
  69. //            ]);
  70. //        }
  71. //
  72. //        $viewParams = [
  73. //            "mainPage" => $mainPage,
  74. //        ];
  75. //
  76. //        return $this->render('front/languages.twig', $viewParams);
  77. //    }
  78.     /**
  79.      * @Route(
  80.      *      path="/{url}",
  81.      *      name="page",
  82.      *      requirements={
  83.      *          "_locale": "%app.supported_locales%",
  84.      *          "url": "[^.]+"
  85.      *      }
  86.      * ),
  87.      * @ParamConverter(
  88.      *      "pageTranslation",
  89.      *      options={
  90.      *          "mapping": {
  91.      *              "url": "url"
  92.      *          }
  93.      *      }
  94.      * )
  95.      */
  96.     public function getPageAction(
  97.         Request $request,
  98.         PageTranslation $pageTranslation,
  99.         string $_locale 'pl',
  100.         string $url ''
  101.     ): Response {
  102.         if ($_locale) {
  103.             if (!$locale $this->locales[$_locale]) {
  104.                 return $this->createNotFoundException("Could not find page translation for locale \"$_locale\"");
  105.             }
  106.             $this->session->getSession()->set('_locale'$_locale);
  107.             $request->setLocale($_locale);
  108.             //$request->setDefaultLocale($_locale);
  109.             //dd($request->getDefaultLocale());
  110.         }
  111.         $user $this->getUser();
  112.         $page $pageTranslation->getTranslatable();
  113.         if (!$page->getIsPublished() && !$user) {
  114.             throw new HttpException(404'This page is not available yet');
  115.         }
  116.         if ($forwardResponse $this->getForwardResponseForPage($page$request)) {
  117.             return $forwardResponse;
  118.         }
  119.         $templatePath $page->getTemplatePath() ?? ($page->getType() == Page::POST 'front/post.twig' 'front/index.twig');
  120.         $viewParams = [
  121.             "entity" => $page,
  122.             "currentUrl" => [
  123.                 "locale" => $request->getLocale(),
  124.             ]
  125.         ];
  126.         if ($request->query->get('shopType')) {
  127.             $viewParams['shopType'] = (string)$request->query->get('shopType');
  128.         }
  129.         $response $this->render($templatePath$viewParams);
  130.         if ("GET" === $request->getMethod()) {
  131.             $response->setPublic();
  132.             $response->setExpires(new DateTime("+1 hour"));
  133.             $response->setMaxAge(3600);
  134.         }
  135.         return $response;
  136.     }
  137.     private function getForwardResponseForPage(Page $pageRequest $request)
  138.     {
  139.         $configForTypes = [
  140.             Pages::CATEGORY => BlogController::class . "::router",
  141.         ];
  142.         $configForSpecificPages = [
  143.             //Pages::BLOG_LIST => BlogController::class . "::router",
  144.         ];
  145.         $controller $configForSpecificPages[$page->getMigrationId()]
  146.             ?? $configForTypes[$page->getType()]
  147.             ?? null;
  148.         if (!$controller) {
  149.             return;
  150.         }
  151.         return $this->forward(
  152.             $controller,
  153.             [
  154.                 "page" => $page,
  155.                 "originalRequest" => $request,
  156.             ]
  157.         );
  158.     }
  159. }