src/Controller/PageController.php line 305
<?phpnamespace App\Controller;use App\Entity\Company;use App\Entity\CompanyType;use App\Entity\Letter;use App\Entity\Page;use App\Entity\Translation\PageTranslation;use App\Repository\PageRepository;use App\Services\PageService;use Doctrine\ORM\EntityManagerInterface;use Gedmo\Translatable\Entity\Translation;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;#[Route('/page')]class PageController extends AbstractController{private EntityManagerInterface $entityManager;public function __construct(EntityManagerInterface $entityManager){$this->entityManager = $entityManager;}#[Route('/new', name: 'app_page_new', methods: ['GET', 'POST'])]public function new(Request $request, EntityManagerInterface $entityManager): Response{$page = new Page();$entityManager->persist($page);$entityManager->flush();return new JsonResponse('success');}#[Route('/about-template/{_locale}', name: 'page_home1555',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function index15(PageRepository $pageRepository){$page = $pageRepository->find(2);$editable = true;return $this->render('@web/page/template.html.twig',['page'=>$page,'editable' => $editable]);}#[Route('/about-template/view/{_locale}', name: 'page_home15555',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function index150(PageRepository $pageRepository){$page = $pageRepository->find(2);$editable = false;return $this->render('@web/page/template.html.twig',['page'=>$page,'editable' => $editable]);}#[Route('/{slug}/{_locale}', name: 'page_work',requirements: ['_locale' => 'en|ru|hy|ka|uk'], defaults: ['_locale' => 'uk'])]public function pageEdit(string $slug,PageRepository $pageRepository){if ($this->getUser() && !$this->isGranted('ROLE_ADMIN')) {return $this->redirectToRoute('page_index');}$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = true;$preview = false;if (str_contains($slug, 'dproc')) {return $this->render('@web/page/template-dproc.html.twig',['page'=>$page,'editable' => $editable,'preview' => $preview]);}if (str_contains($slug, 'violations')) {return $this->render('@web/page/violations.html.twig',['page'=>$page,'editable' => $editable,'preview' => $preview]);}if (str_contains($slug, 'engagement')) {return $this->render('@web/page/template-engagement.html.twig', ['page' => $page,'editable' => $editable,'preview' => $preview,]);}return $this->render('@web/page/template.html.twig',['page'=>$page,'editable' => $editable,'preview' => $preview]);}#[Route('/duplicate/{slug}', name: 'page_duplicate')]public function pageDuplicate(string $slug,PageRepository $pageRepository,Request $request,EntityManagerInterface $entityManager): RedirectResponse{if ($this->getUser() && !$this->isGranted('ROLE_ADMIN')) {return $this->redirectToRoute('page_index');}$page = $pageRepository->findOneBy(['slug' => $slug]);if (!$page) {throw $this->createNotFoundException();}/** DUPLICATE PAGE*/$newPage = clone $page;// reset ID$reflection = new \ReflectionClass($newPage);$idProperty = $reflection->getProperty('id');$idProperty->setAccessible(true);$idProperty->setValue($newPage, null);/** UNIQUE NAME*/$baseName = $page->getName();$counter = 1;do {$newName = $baseName . '-' . $counter;$exists = $pageRepository->findOneBy(['name' => $newName]);$counter++;} while ($exists);$newPage->setName($newName);/** UNIQUE SLUG*/$baseSlug = preg_replace('/-\d+$/', '', $page->getSlug());$counter = 1;do {$newSlug = $baseSlug . '-' . $counter;$exists = $pageRepository->findOneBy(['slug' => $newSlug]);$counter++;} while ($exists);$newPage->setSlug($newSlug);$entityManager->persist($newPage);$entityManager->flush();/** DUPLICATE TRANSLATIONS*/$translations = $entityManager->getRepository(PageTranslation::class)->findBy(['object' => $page]);foreach ($translations as $translation) {$newTranslation = clone $translation;// reset translation ID$trReflection = new \ReflectionClass($newTranslation);$trId = $trReflection->getProperty('id');$trId->setAccessible(true);$trId->setValue($newTranslation, null);// attach to duplicated page$newTranslation->setObject($newPage);$entityManager->persist($newTranslation);}$entityManager->flush();return $this->redirect($request->headers->get('referer'));}#[Route('/dalma/{slug}/{_locale}', name: 'page_dalma_edit',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function pageDalmaEdit(string $slug,PageRepository $pageRepository){$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = true;$preview = false;$dalma = false;return $this->render('@web/page/template-dalma.html.twig',['page'=>$page,'dalma'=>$dalma,'editable' => $editable,'preview' => $preview]);}#[Route('/yeremyan/{slug}/{_locale}', name: 'page_yeremyan_edit',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function pageYeremyanEdit(string $slug,PageRepository $pageRepository){$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = true;$preview = false;$dalma = false;return $this->render('@web/page/template-sherep.html.twig',['page'=>$page,'dalma'=>$dalma,'editable' => $editable,'preview' => $preview]);}#[Route('/birthday/{slug}/{_locale}', name: 'page_birthday_edit',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function pageBirthdayEdit(string $slug,PageRepository $pageRepository){$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = true;$preview = false;$dalma = false;return $this->render('@web/page/template-birthday.html.twig',['page'=>$page,'image'=>null,'dalma'=>$dalma,'editable' => $editable,'preview' => $preview]);}#[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'])]public function pageSeassons(string $slug,int $id,PageRepository $pageRepository){$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = false;$preview = false;$letter = $this->entityManager->getRepository(Letter::class)->findOneBy(['externalId' => (string)$id]);$dalma = false;return $this->render('@web/page/template-christmas.html.twig',['page'=>$page,'image'=>null,'letter'=>$letter,'dalma'=>$dalma,'editable' => false,'viewImage' => false,'preview' => $preview]);}#[Route('/baptism/{slug}/{_locale}', name: 'page_baptism_edit',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function baptismEdit(string $slug,PageRepository $pageRepository){$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = true;$preview = false;return $this->render('@web/page/template-baptism.html.twig',['page'=>$page,'editable' => $editable,'preview' => $preview]);}#[Route('/{slug}/view/{_locale}', name: 'page_view', requirements: ['_locale' => 'en|ru|hy|ka|uk'], defaults: ['_locale' => 'hy'])]public function pageView(string $slug,Request $request,PageRepository $pageRepository){if ($this->getUser() && !$this->isGranted('ROLE_ADMIN')) {return $this->redirectToRoute('page_index');}$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = false;$preview = false;if (str_contains($slug, 'violations') && $request->getLocale() !== 'hy') {return $this->redirectToRoute('page_view', ['slug' => $slug,'_locale' => 'hy',]);}if (str_contains($slug, 'dproc')) {return $this->render('@web/page/template-dproc.html.twig', ['page' => $page,'editable' => $editable,'preview' => $preview,]);}if (str_contains($slug, 'violations')) {return $this->render('@web/page/violations.html.twig', ['page' => $page,'editable' => $editable,'preview' => $preview,]);}if (str_contains($slug, 'engagement')) {return $this->render('@web/page/template-engagement.html.twig', ['page' => $page,'editable' => $editable,'preview' => $preview,]);}return $this->render('@web/page/template.html.twig', ['page' => $page,'editable' => $editable,'preview' => $preview,]);}#[Route('/{slug}/sharing/{_locale}', name: 'page_sharing',requirements: ['_locale' => 'en|ru|hy|ka|uk'], defaults: ['_locale' => 'ru'])]public function pageSharing(string $slug,PageRepository $pageRepository){if ($this->getUser() && !$this->isGranted('ROLE_ADMIN')) {return $this->redirectToRoute('page_index');}$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = false;$preview = false;if (str_contains($slug, 'dproc')) {return $this->render('@web/page/template-dproc.html.twig',['page'=>$page,'editable' => $editable,'preview' => $preview]);}return $this->render('@web/page/sharing.html.twig',['page'=>$page,'editable' => $editable,'preview' => $preview]);}#[Route('/dalma/{slug}/view/{_locale}', name: 'page_dalma_view',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function pageDalmaView(string $slug,PageRepository $pageRepository){$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = false;$preview = false;return $this->render('@web/page/template-dalma.html.twig',['page'=>$page,'editable' => $editable,'preview' => $preview]);}#[Route('/yeremyan/{slug}/view/{_locale}', name: 'page_yeremyan_view',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function pageYeremyanView(string $slug,PageRepository $pageRepository){$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = false;$preview = false;return $this->render('@web/page/template-sherep.html.twig',['page'=>$page,'editable' => $editable,'preview' => $preview]);}#[Route('/birthday/{slug}/view/{_locale}', name: 'page_birthday_view',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function pageBirthdayView(string $slug,PageRepository $pageRepository){$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = false;$preview = false;return $this->render('@web/page/template-birthday.html.twig',['page'=>$page,'editable' => $editable,'preview' => $preview]);}#[Route('/{slug}/preview/{_locale}', name: 'page_preview',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function pagePreview(string $slug,PageRepository $pageRepository){$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = false;$preview = true;return $this->render('@web/page/template.html.twig',['page'=>$page,'editable' => $editable,'preview' => $preview]);}#[Route('/baptism/{slug}/view/{_locale}', name: 'baptism_view',requirements: ['_locale' => 'en|ru|hy'], defaults: ['_locale' => 'ru'])]public function baptismView(string $slug,PageRepository $pageRepository){$page = $pageRepository->findOneBy(['slug' => $slug]);$editable = false;return $this->render('@web/page/template-baptism.html.twig',['page'=>$page,'editable' => $editable]);}#[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'])]public function save(Page $page, Request $request, PageService $pageService): Response{$local = $request->getLocale();$transRepo = $this->entityManager->getRepository(Translation::class);$data = json_decode($request->getContent(), true);if (isset($data['removeImage'])){$method = 'set' . ucfirst($data['field']);if (method_exists($page, $method)) {$page->$method(null);}}else{$page->setTranslatableLocale($local);$transRepo->translate($page,$data['field'],$local, $data['value']);}$getter = $pageService->generateGetter($data['field']);$this->entityManager->flush();$returnData =['field'=>$data['field'],'value'=>$page->$getter($data['field'])];if (isset($data['removeImage'])){$returnData['removeImage'] = true;};return new JsonResponse($returnData);}#[Route('/list', name: 'app_page_list', methods: ['GET'])]public function delete(Request $request, PageRepository $pageRepository, EntityManagerInterface $entityManager): Response{$templates = $pageRepository->findAll();return $this->render('@web/page/templates-list.html.twig',['templates'=>$templates]);}}