Example #1
0
 /**
  * @Route("/forum/thread/{id}-{slug}/{page}", defaults={"page" = 1}, requirements={"page" = "\d+"}, name="forum_thread")
  * @Template()
  */
 public function threadAction($id, $slug, $page)
 {
     if (!$this->getUser()) {
         return $this->createAccessDeniedResponse();
     }
     $em = $this->getDoctrine()->getManager();
     $thread = $em->createQueryBuilder()->select('t, c')->from('EtuModuleForumBundle:Thread', 't')->leftJoin('t.category', 'c')->where('t.id = :id')->andWhere('t.state != 300')->setParameter('id', $id)->getQuery()->getSingleResult();
     $category = $thread->getCategory();
     $checker = new PermissionsChecker($this->getUser());
     if (!$checker->canRead($category)) {
         return $this->createAccessDeniedResponse();
     }
     $parents = $em->createQueryBuilder()->select('c')->from('EtuModuleForumBundle:Category', 'c')->where('c.left <= :left')->andWhere('c.right >= :right')->setParameter('left', $category->getLeft())->setParameter('right', $category->getRight())->orderBy('c.depth')->getQuery()->getResult();
     $messages = $em->createQueryBuilder()->select('m, u')->from('EtuModuleForumBundle:Message', 'm')->leftJoin('m.author', 'u')->where('m.thread = :thread')->setParameter('thread', $thread)->orderBy('m.createdAt')->getQuery()->getResult();
     $messages = $this->get('knp_paginator')->paginate($messages, $page, 10);
     $cantAnswer = (bool) ($thread->getState() == 200 && !$checker->canLock($category) && !$this->getUser()->getIsAdmin());
     $views = $em->createQueryBuilder()->select('v')->from('EtuModuleForumBundle:View', 'v')->where('v.thread = :thread')->setParameter('thread', $thread)->andWhere('v.user = :user')->setParameter('user', $this->getUser())->getQuery()->getResult();
     if ($this->getUser() && count($views) == 0) {
         $viewed = new View();
         $viewed->setUser($this->getUser())->setThread($thread);
         $em->persist($viewed);
         $em->flush();
     }
     $message = new Message();
     $form = $this->createForm(new MessageType(), $message);
     return array('category' => $category, 'thread' => $thread, 'parents' => $parents, 'messages' => $messages, 'cantAnswer' => $cantAnswer, 'form' => $form->createView());
 }