src/Ox/HoardBundle/Controller/ContentPageController.php line 52

Open in your IDE?
  1. <?php
  2. namespace App\Ox\HoardBundle\Controller;
  3. use Symfony\Component\HttpFoundation\Request;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  6. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  8. use App\Ox\HoardBundle\Entity\ContentPage;
  9. use App\Ox\HoardBundle\Form\ContentPageType;
  10. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  11. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  12. use Symfony\Component\Form\Extension\Core\Type\ButtonType;
  13. /**
  14.  * ContentPage controller.
  15.  *
  16.  * @Route("/content")
  17.  */
  18. class ContentPageController extends AbstractController
  19. {
  20.     /**
  21.      * Lists all ContentPage entities.
  22.      *
  23.      * @Route("/index", name="content", methods={"GET"})
  24.      * @Template("@OxHoardBundle/contentPage/index.html.twig")
  25.      */
  26.     public function indexAction()
  27.     {
  28.         $em $this->getDoctrine()->getManager();
  29.         $entities $em->getRepository('OxHoardBundle:ContentPage')->findAll();
  30.         return array(
  31.             'entities' => $entities,
  32.             'is_authorised_to_edit' => $this->userIsAdmin(),
  33.         );
  34.     }
  35.     /**
  36.      * Lists all ContentPage entities of type News Items.
  37.      *
  38.      * @Route("/news", name="news", methods={"GET"})
  39.      * @Template("@OxHoardBundle/contentPage/news_list.html.twig")
  40.      */
  41.     public function newsItemsAction()
  42.     {
  43.         $em $this->getDoctrine()->getManager();
  44.         $entities $em->getRepository('OxHoardBundle:ContentPage')->findByType(0);
  45.         return array(
  46.             'entities' => $entities,
  47.             'is_authorised_to_edit' => $this->userIsAdmin(),
  48.         );
  49.     }
  50.     /**
  51.      * Creates a new ContentPage entity.
  52.      *
  53.      * @Route("/create", name="content_create", methods={"POST"})
  54.      * @Template("@OxHoardBundle/contentPage/new.html.twig")
  55.      */
  56.     public function createAction(Request $request)
  57.     {
  58.         $entity = new ContentPage();
  59.         $form $this->createCreateForm($entity);
  60.         $form->handleRequest($request);
  61.         if ($form->isValid()) {
  62.             $em $this->getDoctrine()->getManager();
  63.             $em->persist($entity);
  64.             $em->flush();
  65.             return $this->redirect($this->generateUrl('content_show', array('id' => $entity->getId())));
  66.         }
  67.         return array(
  68.             'entity' => $entity,
  69.             'form'   => $form->createView(),
  70.         );
  71.     }
  72.     /**
  73.      * Creates a form to create a ContentPage entity.
  74.      *
  75.      * @param ContentPage $entity The entity
  76.      *
  77.      * @return \Symfony\Component\Form\Form The form
  78.      */
  79.     private function createCreateForm(ContentPage $entity)
  80.     {
  81.         $form $this->createForm(ContentPageType::class, $entity, array(
  82.             'action' => $this->generateUrl('content_create'),
  83.             'method' => 'POST',
  84.         ));
  85.         $form->add('submit'SubmitType::class, array('label' => 'Create'));
  86.         return $form;
  87.     }
  88.     /**
  89.      * Displays a form to create a new ContentPage entity.
  90.      *
  91.      * @Route("/new", name="content_new", methods={"GET"})
  92.      * @Template("@OxHoardBundle/contentPage/new.html.twig")
  93.      */
  94.     public function newAction()
  95.     {
  96.         $entity = new ContentPage();
  97.         $form   $this->createCreateForm($entity);
  98.         return array(
  99.             'entity' => $entity,
  100.             'form'   => $form->createView(),
  101.         );
  102.     }
  103.     /**
  104.      * Finds and displays a ContentPage entity.
  105.      *
  106.      * @Route("/{id}", name="content_show", requirements={
  107.      *      "id": "\d+"
  108.      * }, methods={"GET"})
  109.      * @Template("@OxHoardBundle/contentPage/show.html.twig")
  110.      */
  111.     public function showAction($id)
  112.     {
  113.         $em $this->getDoctrine()->getManager();
  114.         $entity $em->getRepository('OxHoardBundle:ContentPage')->find($id);
  115.         return $this->present($entity);
  116.     }
  117.     /**
  118.      * Finds and displays a ContentPage entity by path.
  119.      *
  120.      * @Route("/{path}", name="content_show_path", methods={"GET"})
  121.      * @Template("@OxHoardBundle/contentPage/show.html.twig")
  122.      */
  123.     public function showByPathAction($path)
  124.     {
  125.         $em $this->getDoctrine()->getManager();
  126.         $entity $em->getRepository('OxHoardBundle:ContentPage')->findOneByPath($path);
  127.         return $this->present($entity);
  128.     }
  129.     private function present($contentItem)
  130.     {
  131.         if (!$contentItem) {
  132.             throw $this->createNotFoundException('Unable to find ContentPage entity.');
  133.         }
  134.         $deleteForm $this->createDeleteForm($contentItem->getId());
  135.         return array(
  136.             'entity'      => $contentItem,
  137.             'delete_form' => $deleteForm->createView(),
  138.             'is_authorised_to_edit' => $this->checkAccess($contentItem'edit'false),
  139.         );
  140.     }
  141.     /**
  142.      * Displays a form to edit an existing ContentPage entity.
  143.      *
  144.      * @Route("/{id}/edit", name="content_edit", methods={"GET"})
  145.      * @Template("@OxHoardBundle/contentPage/edit.html.twig")
  146.      */
  147.     public function editAction($id)
  148.     {
  149.         $em $this->getDoctrine()->getManager();
  150.         $entity $em->getRepository('OxHoardBundle:ContentPage')->find($id);
  151.         if (!$entity) {
  152.             throw $this->createNotFoundException('Unable to find ContentPage entity.');
  153.         }
  154.         $editForm $this->createEditForm($entity);
  155.         $deleteForm $this->createDeleteForm($id);
  156.         return array(
  157.             'entity'      => $entity,
  158.             'edit_form'   => $editForm->createView(),
  159.             'delete_form' => $deleteForm->createView(),
  160.         );
  161.     }
  162.     /**
  163.     * Creates a form to edit a ContentPage entity.
  164.     *
  165.     * @param ContentPage $entity The entity
  166.     *
  167.     * @return \Symfony\Component\Form\Form The form
  168.     */
  169.     private function createEditForm(ContentPage $entity)
  170.     {
  171.         $form $this->createForm(ContentPageType::class, $entity, array(
  172.             'action' => $this->generateUrl('content_update', array('id' => $entity->getId())),
  173.             'method' => 'PUT',
  174.         ));
  175.         $form->add('submit'SubmitType::class, array('label' => 'Update'));
  176.         return $form;
  177.     }
  178.     /**
  179.      * Edits an existing ContentPage entity.
  180.      *
  181.      * @Route("/{id}", name="content_update", methods={"PUT"})
  182.      * @Template("@OxHoardBundle/contentPage/edit.html.twig")
  183.      */
  184.     public function updateAction(Request $request$id)
  185.     {
  186.         $em $this->getDoctrine()->getManager();
  187.         $entity $em->getRepository('OxHoardBundle:ContentPage')->find($id);
  188.         if (!$entity) {
  189.             throw $this->createNotFoundException('Unable to find ContentPage entity.');
  190.         }
  191.         $deleteForm $this->createDeleteForm($id);
  192.         $editForm $this->createEditForm($entity);
  193.         $editForm->handleRequest($request);
  194.         if ($editForm->isValid()) {
  195.             $em->flush();
  196.             return $this->redirect($this->generateUrl('content_show_path', array('path' => $entity->getPath())));
  197.         }
  198.         return array(
  199.             'entity'      => $entity,
  200.             'edit_form'   => $editForm->createView(),
  201.             'delete_form' => $deleteForm->createView(),
  202.         );
  203.     }
  204.     /**
  205.      * Deletes a ContentPage entity.
  206.      *
  207.      * @Route("/{id}", name="content_delete", methods={"DELETE"})
  208.      */
  209.     public function deleteAction(Request $request$id)
  210.     {
  211.         $form $this->createDeleteForm($id);
  212.         $form->handleRequest($request);
  213.         if ($form->isValid()) {
  214.             $em $this->getDoctrine()->getManager();
  215.             $entity $em->getRepository('OxHoardBundle:ContentPage')->find($id);
  216.             if (!$entity) {
  217.                 throw $this->createNotFoundException('Unable to find ContentPage entity.');
  218.             }
  219.             $em->remove($entity);
  220.             $em->flush();
  221.         }
  222.         return $this->redirect($this->generateUrl('content'));
  223.     }
  224.     /**
  225.      * Creates a form to delete a ContentPage entity by id.
  226.      *
  227.      * @param mixed $id The entity id
  228.      *
  229.      * @return \Symfony\Component\Form\Form The form
  230.      */
  231.     private function createDeleteForm($id)
  232.     {
  233.         return $this->createFormBuilder()
  234.             ->setAction($this->generateUrl('content_delete', array('id' => $id)))
  235.             ->setMethod('DELETE')
  236.             ->add('submit'ButtonType::class, array(
  237.                 'label' => 'Delete this content',
  238.                 'attr' => array(
  239.                     'class' => 'delete-button btn-danger'
  240.                 )
  241.             ))
  242.             ->getForm();
  243.     }
  244.         /**
  245.      * checks permission of user's current request
  246.      *
  247.      * @param mixed $entity The entity being validated
  248.      *
  249.      * @param string $attribute - 'view' or 'edit' or 'delete'
  250.      *
  251.      * @param boolean $throwException - whether to throw an exception if false - defaults to true
  252.      *
  253.      * @return boolean
  254.      *
  255.      * @throws \Symfony\Component\Security\Core\Exception\AccessDeniedException
  256.      */
  257.     private function checkAccess($entity$attribute$throwException true) {
  258.         // call security voter(s)
  259.         if (!$this->userIsAdmin()) {
  260.             if ($throwException) {
  261.                 throw new AccessDeniedException('Unauthorised access!');
  262.             }
  263.             return false;
  264.         }
  265.         return true;
  266.     }
  267.     private function userIsAdmin() {
  268.         if($this->getUser() && ($this->getUser()->hasRole('ROLE_ADMIN') || $this->getUser()->hasRole('ROLE_SUPER_ADMIN')))
  269.         {
  270.             return true;
  271.         }
  272.         return false;
  273.     }
  274. }