vendor/score/cms/src/Controller/OptionAdminController.php line 163

Open in your IDE?
  1. <?php
  2. namespace  Score\CmsBundle\Controller;
  3. use Score\BaseBundle\Services\SeoUrl;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  10. use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
  11. use Score\CmsBundle\Entity\Option;
  12. use Score\CmsBundle\Entity\OptionGroup;
  13. use Score\CmsBundle\Form\Option\OptionFullType;
  14. use Score\CmsBundle\Form\Option\OptionGroupType;
  15. use Score\CmsBundle\Form\Option\OptionType;
  16. /**
  17.  * @Route("/admin/option")
  18.  */
  19. class OptionAdminController extends \Score\BaseBundle\Controller\AdminController
  20. {
  21.     private function canIAccess(OptionGroup $group null$onlyAdmin false)
  22.     {
  23.         if ($onlyAdmin) {
  24.             return $this->getUser()->getIsAdmin();
  25.         }
  26.         if ($group && $group->getCheckUsers()) {
  27.             return $this->getUser()->getIsAdmin() || $group->getUsers()->contains($this->getUser());
  28.         }
  29.         $allowed = ["ROLE_OPTION_MANAGER""ROLE_ADMIN"];
  30.         return (count(array_intersect($allowed$this->getUser()->getRoles())) >= 1);
  31.     }
  32.     /**
  33.      * @Route("/code/{code}", name="score_cms_option_code", methods={"GET"})
  34.      */
  35.     public function optionCodeAction(Request $request$code): Response
  36.     {
  37.         $em $this->getDoctrine()->getManager();
  38.         $option $em->getRepository(Option::class)->findOneByCode($code);
  39.         if ($option === null) {
  40.             $this->addFlash('option_edit_danger'"Text [$code] zatial neexistuje.");
  41.             return $this->redirect($request->headers->get('referer'));
  42.             //return $this->redirectToRoute('score_cms_option_groups');
  43.         }
  44.         $groups $em->getRepository(OptionGroup::class)->findAll();
  45.         foreach ($groups as $g) {
  46.             if ($g->getOptions()->contains($option)) {
  47.                 return $this->redirectToRoute('score_cms_option_edit', ['groupId' => $g->getId(), 'id' => $option->getId()]);
  48.             }
  49.         }
  50.         
  51.         return $this->redirectToRoute('score_cms_option_groups');
  52.     }
  53.     /**
  54.      * @Route("/list/{id}", name="score_cms_option_list", methods={"GET"})
  55.      */
  56.     public function optionListAction(Request $request$id): Response
  57.     {
  58.         $em $this->getDoctrine()->getManager();
  59.         $group $em->getRepository(OptionGroup::class)->find($id);
  60.         if (!$this->canIAccess($group))
  61.             return $this->redirectToRoute('score_cms_option_groups');
  62.         return $this->render('@ScoreCms/Option/list.html.twig', [
  63.             'options' => $group $group->getOptions() : [],
  64.             'groupId' => $id,
  65.         ]);
  66.     }
  67.     
  68.     /**
  69.      * @Route("/new/{groupId}", name="score_cms_option_new", methods={"GET", "POST"})
  70.      * @Route("/edit-full/{groupId}/{id}", name="score_cms_option_edit_full", methods={"GET", "POST"})
  71.      */
  72.     public function editFullAction(Request $request$groupId$id 0): Response
  73.     {
  74.         if (!$this->canIAccess(nulltrue))
  75.             return $this->redirectToRoute('admin_start');
  76.         return $this->editAction($request$groupId$idtrue);
  77.     }      
  78.     /**
  79.     * @Route("/edit/{groupId}/{id}", name="score_cms_option_edit", methods={"GET", "POST"})
  80.     */
  81.    public function editAction(Request $request$groupId$id$full false): Response
  82.    {
  83.         $em $this->getDoctrine()->getManager();
  84.         $group $em->getRepository(OptionGroup::class)->find($groupId);
  85.         $option $em->getRepository(Option::class)->find($id);
  86.        
  87.         if (!$this->canIAccess($group))
  88.             return $this->redirectToRoute('admin_start');
  89.         if (!$group) {
  90.             $this->addFlash('danger''Chyba.');
  91.             return $this->redirectToRoute('admin_start');
  92.         }
  93.         if (!$option) {
  94.             $option = new Option();
  95.             $group->addOption($option);
  96.         }
  97.         $form $this->createForm($full OptionFullType::class : OptionType::class, $option);
  98.         $form->handleRequest($request);
  99.         if ($form->isSubmitted() && $form->isValid()) {
  100.             $em->persist($option);
  101.             $em->flush();
  102.             $this->addFlash('option_edit_success''Údaje boli zmenené');
  103.             return $this->redirectToRoute('score_cms_option_edit', ['groupId' => $groupId'id' => $option->getId()]);
  104.        }
  105.        return $this->render('@ScoreCms/Option/edit.html.twig', [
  106.             'entity' => $option,
  107.             'form' => $form->createView(),
  108.             'group' => $group,
  109.        ]);
  110.    }
  111.     /**
  112.      * @Route("/delete/{groupId}/{id}", name="score_cms_option_delete", methods={"GET"})
  113.      */
  114.     public function deleteAction(Request $request$groupId$id): Response
  115.     {
  116.         if (!$this->canIAccess(nulltrue))
  117.             return $this->redirectToRoute('admin_start');
  118.         $em $this->getDoctrine()->getManager();
  119.         $option $em->getRepository(Option::class)->find($id);
  120.         $group $em->getRepository(OptionGroup::class)->find($groupId);
  121.         if ($option && $group) {    
  122.             $group->removeOption($option);
  123.             $em->persist($group);
  124.             $em->remove($option);
  125.             $em->flush();
  126.             $this->addFlash("admin-success""score.alert.option.deleted");
  127.         }
  128.         return $this->redirectToRoute('score_cms_option_list', ['id' => $groupId]);
  129.     }       
  130.     
  131.     /**
  132.      * ====================   OPTION  GROUP   ==========================
  133.      */
  134.     
  135.     /**
  136.      * @Route("/groups-list", name="score_cms_option_groups", methods={"GET"})
  137.      */
  138.     public function groupListAction(): Response
  139.     {
  140.         if (!$this->canIAccess())
  141.             return $this->redirectToRoute('admin_start');
  142.         $em $this->getDoctrine()->getManager();
  143.         $groups $em->getRepository(OptionGroup::class)->findBy([],['editedAt'=> 'ASC']);
  144.         return $this->render('@ScoreCms/Option/groups_list.html.twig',[
  145.             'groups' => $groups
  146.         ]);
  147.     }
  148.     
  149.     /**
  150.      * @Route("/group-new", name="score_cms_option_group_new", methods={"GET", "POST"})
  151.      * @Route("/group-edit/{id}", name="score_cms_option_group_edit", methods={"GET", "POST"})
  152.      */
  153.     public function groupEditAction(Request $request$id 0): Response
  154.     {
  155.         if (!$this->canIAccess(nulltrue))
  156.             return $this->redirectToRoute('admin_start');
  157.         $em $this->getDoctrine()->getManager();
  158.         $group $em->getRepository(OptionGroup::class)->find($id);
  159.        
  160.         if (!$group) {
  161.             $group = new OptionGroup();
  162.         }
  163.         $form $this->createForm(OptionGroupType::class, $group);
  164.         $form->handleRequest($request);
  165.         if ($form->isSubmitted() && $form->isValid()) {
  166.             $em->persist($group);
  167.             $em->flush();
  168.             $this->addFlash('option_edit_success''Údaje boli zmenené');
  169.             return $this->redirectToRoute('score_cms_option_group_edit', array('id' => $group->getId()));
  170.        }
  171.        return $this->render('@ScoreCms/Option/edit.html.twig', [
  172.            'entity' => $group,
  173.            'form' => $form->createView(),
  174.        ]);
  175.     }
  176.     
  177.     /**
  178.      * @Route("/group-delete/{id}", name="score_cms_option_group_delete", methods={"GET"})
  179.      */
  180.     public function groupDeleteAction(Request $request$id): Response
  181.     {
  182.         if (!$this->canIAccess(nulltrue))
  183.             return $this->redirectToRoute('admin_start');
  184.         $em $this->getDoctrine()->getManager();
  185.         $group $em->getRepository(OptionGroup::class)->find($id);
  186.         if ($group) {
  187.             foreach($group->getOptions() as $option) {
  188.                 $group->removeOption($option);
  189.                 $em->remove($option);
  190.             }           
  191.             $em->persist($group);
  192.             $em->flush();
  193.             $em->remove($group);
  194.             $em->flush();
  195.             $this->addFlash("admin-success""score.alert.option.group.deleted");
  196.         }
  197.         return $this->redirectToRoute('score_cms_option_groups');
  198.     }
  199. }