src/Controller/PageController.php line 305

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Company;
  4. use App\Entity\CompanyType;
  5. use App\Entity\Letter;
  6. use App\Entity\Page;
  7. use App\Entity\Translation\PageTranslation;
  8. use App\Repository\PageRepository;
  9. use App\Services\PageService;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Gedmo\Translatable\Entity\Translation;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\RedirectResponse;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. #[Route('/page')]
  19. class PageController extends AbstractController
  20. {
  21.     private EntityManagerInterface $entityManager;
  22.     public function __construct(EntityManagerInterface $entityManager)
  23.     {
  24.         $this->entityManager $entityManager;
  25.     }
  26.     #[Route('/new'name'app_page_new'methods: ['GET''POST'])]
  27.     public function new(Request $requestEntityManagerInterface $entityManager): Response
  28.     {
  29.         $page = new Page();
  30.         $entityManager->persist($page);
  31.         $entityManager->flush();
  32.         return new JsonResponse('success');
  33.     }
  34.     #[Route('/about-template/{_locale}'name'page_home1555',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]
  35.     public function index15(PageRepository  $pageRepository)
  36.     {
  37.         $page $pageRepository->find(2);
  38.         $editable true;
  39.         return $this->render('@web/page/template.html.twig',[
  40.             'page'=>$page,
  41.             'editable' => $editable
  42.         ]);
  43.     }
  44.     #[Route('/about-template/view/{_locale}'name'page_home15555',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]
  45.     public function index150(PageRepository  $pageRepository)
  46.     {
  47.         $page $pageRepository->find(2);
  48.         $editable false;
  49.         return $this->render('@web/page/template.html.twig',[
  50.             'page'=>$page,
  51.             'editable' => $editable
  52.         ]);
  53.     }
  54.     #[Route('/{slug}/{_locale}'name'page_work',requirements: ['_locale' => 'en|ru|hy|ka|uk'], defaults: ['_locale' => 'uk'])]
  55.     public function pageEdit(string $slug,PageRepository  $pageRepository)
  56.     {
  57.         if ($this->getUser() && !$this->isGranted('ROLE_ADMIN')) {
  58.             return $this->redirectToRoute('page_index');
  59.         }
  60.         $page $pageRepository->findOneBy(['slug' => $slug]);
  61.         $editable true;
  62.         $preview false;
  63.         if (str_contains($slug'dproc')) {
  64.             return $this->render('@web/page/template-dproc.html.twig',[
  65.                 'page'=>$page,
  66.                 'editable' => $editable,
  67.                 'preview' => $preview
  68.             ]);
  69.         }
  70.         if (str_contains($slug'violations')) {
  71.             return $this->render('@web/page/violations.html.twig',[
  72.                 'page'=>$page,
  73.                 'editable' => $editable,
  74.                 'preview' => $preview
  75.             ]);
  76.         }
  77.         if (str_contains($slug'engagement')) {
  78.             return $this->render('@web/page/template-engagement.html.twig', [
  79.                 'page' => $page,
  80.                 'editable' => $editable,
  81.                 'preview' => $preview,
  82.             ]);
  83.         }
  84.         return $this->render('@web/page/template.html.twig',[
  85.             'page'=>$page,
  86.             'editable' => $editable,
  87.             'preview' => $preview
  88.         ]);
  89.     }
  90.     #[Route('/duplicate/{slug}'name'page_duplicate')]
  91.     public function pageDuplicate(
  92.         string $slug,
  93.         PageRepository $pageRepository,
  94.         Request $request,
  95.         EntityManagerInterface $entityManager
  96.     ): RedirectResponse
  97.     {
  98.         if ($this->getUser() && !$this->isGranted('ROLE_ADMIN')) {
  99.             return $this->redirectToRoute('page_index');
  100.         }
  101.         $page $pageRepository->findOneBy([
  102.             'slug' => $slug
  103.         ]);
  104.         if (!$page) {
  105.             throw $this->createNotFoundException();
  106.         }
  107.         /*
  108.          * DUPLICATE PAGE
  109.          */
  110.         $newPage = clone $page;
  111.         // reset ID
  112.         $reflection = new \ReflectionClass($newPage);
  113.         $idProperty $reflection->getProperty('id');
  114.         $idProperty->setAccessible(true);
  115.         $idProperty->setValue($newPagenull);
  116.         /*
  117.          * UNIQUE NAME
  118.          */
  119.         $baseName $page->getName();
  120.         $counter 1;
  121.         do {
  122.             $newName $baseName '-' $counter;
  123.             $exists $pageRepository->findOneBy([
  124.                 'name' => $newName
  125.             ]);
  126.             $counter++;
  127.         } while ($exists);
  128.         $newPage->setName($newName);
  129.         /*
  130.          * UNIQUE SLUG
  131.          */
  132.         $baseSlug preg_replace('/-\d+$/'''$page->getSlug());
  133.         $counter 1;
  134.         do {
  135.             $newSlug $baseSlug '-' $counter;
  136.             $exists $pageRepository->findOneBy([
  137.                 'slug' => $newSlug
  138.             ]);
  139.             $counter++;
  140.         } while ($exists);
  141.         $newPage->setSlug($newSlug);
  142.         $entityManager->persist($newPage);
  143.         $entityManager->flush();
  144.         /*
  145.          * DUPLICATE TRANSLATIONS
  146.          */
  147.         $translations $entityManager
  148.             ->getRepository(PageTranslation::class)
  149.             ->findBy([
  150.                 'object' => $page
  151.             ]);
  152.         foreach ($translations as $translation) {
  153.             $newTranslation = clone $translation;
  154.             // reset translation ID
  155.             $trReflection = new \ReflectionClass($newTranslation);
  156.             $trId $trReflection->getProperty('id');
  157.             $trId->setAccessible(true);
  158.             $trId->setValue($newTranslationnull);
  159.             // attach to duplicated page
  160.             $newTranslation->setObject($newPage);
  161.             $entityManager->persist($newTranslation);
  162.         }
  163.         $entityManager->flush();
  164.         return $this->redirect($request->headers->get('referer'));
  165.     }
  166.     #[Route('/dalma/{slug}/{_locale}'name'page_dalma_edit',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]
  167.     public function pageDalmaEdit(string $slug,PageRepository  $pageRepository)
  168.     {
  169.         $page $pageRepository->findOneBy(['slug' => $slug]);
  170.         $editable true;
  171.         $preview false;
  172.         $dalma false;
  173.         return $this->render('@web/page/template-dalma.html.twig',[
  174.             'page'=>$page,
  175.             'dalma'=>$dalma,
  176.             'editable' => $editable,
  177.             'preview' => $preview
  178.         ]);
  179.     }
  180.     #[Route('/yeremyan/{slug}/{_locale}'name'page_yeremyan_edit',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]
  181.     public function pageYeremyanEdit(string $slug,PageRepository  $pageRepository)
  182.     {
  183.         $page $pageRepository->findOneBy(['slug' => $slug]);
  184.         $editable true;
  185.         $preview false;
  186.         $dalma false;
  187.         return $this->render('@web/page/template-sherep.html.twig',[
  188.             'page'=>$page,
  189.             'dalma'=>$dalma,
  190.             'editable' => $editable,
  191.             'preview' => $preview
  192.         ]);
  193.     }
  194.     #[Route('/birthday/{slug}/{_locale}'name'page_birthday_edit',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]
  195.     public function pageBirthdayEdit(string $slug,PageRepository  $pageRepository)
  196.     {
  197.         $page $pageRepository->findOneBy(['slug' => $slug]);
  198.         $editable true;
  199.         $preview false;
  200.         $dalma false;
  201.         return $this->render('@web/page/template-birthday.html.twig',[
  202.             'page'=>$page,
  203.             'image'=>null,
  204.             'dalma'=>$dalma,
  205.             'editable' => $editable,
  206.             'preview' => $preview
  207.         ]);
  208.     }
  209.     #[Route('/seassons/{slug}/{id}/view/{_locale}'name'page_birthday_edit',requirements: ['_locale' => 'en|ru|hy|es|it|fr|el|ua|ka|de'], defaults: ['_locale' => 'ru'])]
  210.     public function pageSeassons(string $slug,int $id,PageRepository  $pageRepository)
  211.     {
  212.         $page $pageRepository->findOneBy(['slug' => $slug]);
  213.         $editable false;
  214.         $preview false;
  215.         $letter $this->entityManager->getRepository(Letter::class)->findOneBy(['externalId' => (string)$id]);
  216.         $dalma false;
  217.         return $this->render('@web/page/template-christmas.html.twig',[
  218.             'page'=>$page,
  219.             'image'=>null,
  220.             'letter'=>$letter,
  221.             'dalma'=>$dalma,
  222.             'editable' => false,
  223.             'viewImage' => false,
  224.             'preview' => $preview
  225.         ]);
  226.     }
  227.     #[Route('/baptism/{slug}/{_locale}'name'page_baptism_edit',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]
  228.     public function baptismEdit(string $slug,PageRepository  $pageRepository)
  229.     {
  230.         $page $pageRepository->findOneBy(['slug' => $slug]);
  231.         $editable true;
  232.         $preview false;
  233.         return $this->render('@web/page/template-baptism.html.twig',[
  234.             'page'=>$page,
  235.             'editable' => $editable,
  236.             'preview' => $preview
  237.         ]);
  238.     }
  239.     #[Route('/{slug}/view/{_locale}'name'page_view'requirements: ['_locale' => 'en|ru|hy|ka|uk'], defaults: ['_locale' => 'hy'])]
  240.     public function pageView(
  241.         string $slug,
  242.         Request $request,
  243.         PageRepository $pageRepository
  244.     )
  245.     {
  246.         if ($this->getUser() && !$this->isGranted('ROLE_ADMIN')) {
  247.             return $this->redirectToRoute('page_index');
  248.         }
  249.         $page $pageRepository->findOneBy(['slug' => $slug]);
  250.         $editable false;
  251.         $preview false;
  252.         if (str_contains($slug'violations') && $request->getLocale() !== 'hy') {
  253.             return $this->redirectToRoute('page_view', [
  254.                 'slug' => $slug,
  255.                 '_locale' => 'hy',
  256.             ]);
  257.         }
  258.         if (str_contains($slug'dproc')) {
  259.             return $this->render('@web/page/template-dproc.html.twig', [
  260.                 'page' => $page,
  261.                 'editable' => $editable,
  262.                 'preview' => $preview,
  263.             ]);
  264.         }
  265.         if (str_contains($slug'violations')) {
  266.             return $this->render('@web/page/violations.html.twig', [
  267.                 'page' => $page,
  268.                 'editable' => $editable,
  269.                 'preview' => $preview,
  270.             ]);
  271.         }
  272.         if (str_contains($slug'engagement')) {
  273.             return $this->render('@web/page/template-engagement.html.twig', [
  274.                 'page' => $page,
  275.                 'editable' => $editable,
  276.                 'preview' => $preview,
  277.             ]);
  278.         }
  279.         return $this->render('@web/page/template.html.twig', [
  280.             'page' => $page,
  281.             'editable' => $editable,
  282.             'preview' => $preview,
  283.         ]);
  284.     }
  285.     #[Route('/{slug}/sharing/{_locale}'name'page_sharing',requirements: ['_locale' => 'en|ru|hy|ka|uk'], defaults: ['_locale' => 'ru'])]
  286.     public function pageSharing(string $slug,PageRepository  $pageRepository)
  287.     {
  288.         if ($this->getUser() && !$this->isGranted('ROLE_ADMIN')) {
  289.             return $this->redirectToRoute('page_index');
  290.         }
  291.         $page $pageRepository->findOneBy(['slug' => $slug]);
  292.         $editable false;
  293.         $preview false;
  294.         if (str_contains($slug'dproc')) {
  295.             return $this->render('@web/page/template-dproc.html.twig',[
  296.                 'page'=>$page,
  297.                 'editable' => $editable,
  298.                 'preview' => $preview
  299.             ]);
  300.         }
  301.         return $this->render('@web/page/sharing.html.twig',[
  302.             'page'=>$page,
  303.             'editable' => $editable,
  304.             'preview' => $preview
  305.         ]);
  306.     }
  307.     #[Route('/dalma/{slug}/view/{_locale}'name'page_dalma_view',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]
  308.     public function pageDalmaView(string $slug,PageRepository  $pageRepository)
  309.     {
  310.         $page $pageRepository->findOneBy(['slug' => $slug]);
  311.         $editable false;
  312.         $preview false;
  313.         return $this->render('@web/page/template-dalma.html.twig',[
  314.             'page'=>$page,
  315.             'editable' => $editable,
  316.             'preview' => $preview
  317.         ]);
  318.     }
  319.     #[Route('/yeremyan/{slug}/view/{_locale}'name'page_yeremyan_view',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]
  320.     public function pageYeremyanView(string $slug,PageRepository  $pageRepository)
  321.     {
  322.         $page $pageRepository->findOneBy(['slug' => $slug]);
  323.         $editable false;
  324.         $preview false;
  325.         return $this->render('@web/page/template-sherep.html.twig',[
  326.             'page'=>$page,
  327.             'editable' => $editable,
  328.             'preview' => $preview
  329.         ]);
  330.     }
  331.     #[Route('/birthday/{slug}/view/{_locale}'name'page_birthday_view',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]
  332.     public function pageBirthdayView(string $slug,PageRepository  $pageRepository)
  333.     {
  334.         $page $pageRepository->findOneBy(['slug' => $slug]);
  335.         $editable false;
  336.         $preview false;
  337.         return $this->render('@web/page/template-birthday.html.twig',[
  338.             'page'=>$page,
  339.             'editable' => $editable,
  340.             'preview' => $preview
  341.         ]);
  342.     }
  343.     #[Route('/{slug}/preview/{_locale}'name'page_preview',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]
  344.     public function pagePreview(string $slug,PageRepository  $pageRepository)
  345.     {
  346.         $page $pageRepository->findOneBy(['slug' => $slug]);
  347.         $editable false;
  348.         $preview true;
  349.         return $this->render('@web/page/template.html.twig',[
  350.             'page'=>$page,
  351.             'editable' => $editable,
  352.             'preview' => $preview
  353.         ]);
  354.     }
  355.     #[Route('/baptism/{slug}/view/{_locale}'name'baptism_view',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]
  356.     public function baptismView(string $slug,PageRepository  $pageRepository)
  357.     {
  358.         $page $pageRepository->findOneBy(['slug' => $slug]);
  359.         $editable false;
  360.         return $this->render('@web/page/template-baptism.html.twig',[
  361.             'page'=>$page,
  362.             'editable' => $editable
  363.         ]);
  364.     }
  365.     #[Route('/save/{_locale}/{id}'name'app_page_save'requirements: ['_locale' => 'en|ru|hy|es|it|fr|el|ua|ka|de|uk'], defaults: ['_locale' => 'ru'], methods: ['POST'])]
  366.     public function save(Page $pageRequest $requestPageService $pageService): Response
  367.     {
  368.         $local $request->getLocale();
  369.         $transRepo $this->entityManager->getRepository(Translation::class);
  370.         $data json_decode($request->getContent(), true);
  371.         if (isset($data['removeImage'])){
  372.             $method 'set' ucfirst($data['field']);
  373.             if (method_exists($page$method)) {
  374.                 $page->$method(null);
  375.             }
  376.         }else{
  377.             $page->setTranslatableLocale($local);
  378.             $transRepo->translate($page,$data['field'],$local$data['value']);
  379.         }
  380.         $getter $pageService->generateGetter($data['field']);
  381.         $this->entityManager->flush();
  382.         $returnData =[
  383.             'field'=>$data['field'],
  384.             'value'=>$page->$getter($data['field'])
  385.         ];
  386.         if (isset($data['removeImage'])){
  387.             $returnData['removeImage'] = true;
  388.         };
  389.         return new JsonResponse($returnData);
  390.     }
  391.     #[Route('/list'name'app_page_list'methods: ['GET'])]
  392.     public function delete(Request $requestPageRepository $pageRepositoryEntityManagerInterface $entityManager): Response
  393.     {
  394.         $templates $pageRepository->findAll();
  395.         return $this->render('@web/page/templates-list.html.twig',[
  396.             'templates'=>$templates
  397.         ]);
  398.     }
  399. }