src/Controller/PageController.php line 82

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Feedback;
  4. use App\Entity\Page;
  5. use App\Form\PageType;
  6. use App\Service\Path\Classes\PathEntity;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Knp\Component\Pager\PaginatorInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\Form\Extension\Core\Type\TextType;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. class PageController extends AbstractController
  15. {
  16.     private $em;
  17.     public function __construct(EntityManagerInterface $em)
  18.     {
  19.         $this->em $em;
  20.     }
  21.     
  22.     /**
  23.      * @Route("/admin/page", name="page_index", methods={"GET"})
  24.      */
  25.     public function index(Request $requestPaginatorInterface $paginator): Response
  26.     {
  27.         $Pages $this->em->getRepository(Page::class)->createQueryBuilder('p')->orderBy('p.id''DESC');
  28.         $defaultData = array('name' => '');
  29.         $form $this->createFormBuilder($defaultData, ['csrf_protection' => false])
  30.             ->add('name'TextType::class, [
  31.                 'required' => false,
  32.                 'label' => 'Название страницы',
  33.             ])
  34.             ->setMethod('GET')
  35.             ->getForm();
  36.         if ($request->getMethod() == 'GET') {
  37.             $form->handleRequest($request);
  38.             $data $form->getData();
  39.         }
  40.         if(!empty($data['name'])){
  41.             $Pages->andWhere('p.name LIKE :name')
  42.                 ->setParameter('name''%'.$data['name'].'%');
  43.         }
  44.         $pagination $paginator->paginate(
  45.             $Pages->getQuery(), $request->query->getInt('page'1), 25);
  46.         $pagination->setTemplate('@KnpPaginator/Pagination/twitter_bootstrap_v4_pagination.html.twig');
  47.         return $this->render('admin/page/index.html.twig', [
  48.             'pagination' => $pagination,
  49.             'form' => $form->createView(),
  50.         ]);
  51.     }
  52.     /**
  53.      * @Route("/admin/page/new", name="page_new", methods={"GET","POST"})
  54.      */
  55.     public function new(Request $requestPathEntity $pathEntity): Response
  56.     {
  57.         $page = new Page();
  58.         $page->setUser($this->getUser());
  59.         $form $this->createForm(PageType::class, $page);
  60.         $form->handleRequest($request);
  61.         if ($form->isSubmitted() && $form->isValid()) {
  62.             $page->setCreated(time());
  63.             $this->em->persist($page);
  64.             $this->em->flush();
  65.             $pathEntity->setPath($page);
  66.             return $this->redirectToRoute('page_index');
  67.         }
  68.         return $this->render('admin/page/new.html.twig', [
  69.             'page' => $page,
  70.             'form' => $form->createView(),
  71.         ]);
  72.     }
  73.     public function show(Page $page): Response
  74.     {
  75.         $pattern = [];
  76.         $replace = [];
  77.         //Обработка шорткодов
  78.         preg_match_all("/\[.*?\]/ui"$page->getBody(), $m);
  79.         if(!empty($m[0][0])){
  80.             foreach ($m[0] as $item){
  81.                 $block explode('='trim(str_replace(['[',']'],'',$item)));
  82.                 if($block[0] == 'reviews'){
  83.                     $direction 0;
  84.                     if($block[1] == 'rinc'){
  85.                         $direction 6;
  86.                     } elseif($block[1] == 'vak'){
  87.                         $direction 5;
  88.                     }
  89.                     $feedbacks $this->em->getRepository(Feedback::class)->createQueryBuilder('f')
  90.                         ->andWhere('f.status = 1')
  91.                         ->andWhere('f.direction = :direction')
  92.                         ->setParameter('direction'$direction)
  93.                         ->orderBy('f.id''DESC')
  94.                         ->setMaxResults(10)
  95.                         ->getQuery()
  96.                         ->getResult();
  97.                     $pattern[] = $item;
  98.                     $replace[] = $this->renderView("page/block/feedback.html.twig",['feedbacks' => $feedbacks]);
  99.                 }
  100.             }
  101.         }
  102.         $page->setBody(str_replace($pattern,$replace,$page->getBody()));
  103.         if($page->getStatus()) {
  104.             return $this->render('page/' $page->getTemplate() . '.html.twig', [
  105.                 'page' => $page,
  106.             ]);
  107.         }
  108.         throw $this->createNotFoundException('404');
  109.     }
  110.     /**
  111.      * @Route("/admin/page/{id}/edit", name="page_edit", methods={"GET","POST"})
  112.      */
  113.     public function edit(Request $requestPage $pagePathEntity $pathEntity): Response
  114.     {
  115.         $form $this->createForm(PageType::class, $page);
  116.         $form->handleRequest($request);
  117.         if ($form->isSubmitted() && $form->isValid()) {
  118.             $this->em->flush();
  119.             $pathEntity->setPath($page);
  120.             return $this->redirectToRoute('page_index');
  121.         }
  122.         return $this->render('admin/page/edit.html.twig', [
  123.             'page' => $page,
  124.             'form' => $form->createView(),
  125.         ]);
  126.     }
  127.     /**
  128.      * @Route("/admin/page/{id}", priority=11, name="page_delete", methods={"DELETE"})
  129.      */
  130.     public function delete(Request $requestPage $page): Response
  131.     {
  132.         if ($this->isCsrfTokenValid('delete'.$page->getId(), $request->request->get('_token'))) {
  133.             $this->em->remove($page);
  134.             $this->em->flush();
  135.         }
  136.         return $this->redirectToRoute('page_index');
  137.     }
  138. }