示例#1
0
 /**
  * @Route("/forum/post/{id}-{slug}", name="forum_post")
  * @Template()
  */
 public function postAction($id, $slug)
 {
     if (!$this->getUser()) {
         return $this->createAccessDeniedResponse();
     }
     $em = $this->getDoctrine()->getManager();
     $category = $em->getRepository('EtuModuleForumBundle:Category')->find($id);
     $checker = new PermissionsChecker($this->getUser());
     if (!$checker->canPost($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();
     $thread = new Thread();
     if ($checker->canSticky($category)) {
         $form = $this->createForm(new ThreadType(), $thread);
     } else {
         $form = $this->createForm(new ThreadTypeNoSticky(), $thread);
     }
     $request = $this->get('request');
     if ($request->getMethod() == 'POST') {
         $form->bind($request);
         if ($form->isValid()) {
             if ($thread->getWeight() != 100 && !$checker->canSticky($category)) {
                 $thread->setWeight(100);
             }
             $thread->setAuthor($this->getUser())->setCategory($category)->setCountMessages(1)->setSlug(StringManipulationExtension::slugify($thread->getTitle()));
             $message = $thread->getLastMessage();
             $message->setAuthor($this->getUser())->setCategory($category)->setThread($thread)->setState(100)->setCreatedAt($thread->getCreatedAt());
             $thread->setLastMessage($message);
             foreach ($parents as $parent) {
                 $parent->setLastMessage($message)->setCountMessages($parent->getCountMessages() + 1)->setCountThreads($parent->getCountThreads() + 1);
                 $em->persist($parent);
             }
             $em->persist($thread);
             $cviews = $em->getRepository('EtuModuleForumBundle:CategoryView')->findByCategory($category);
             foreach ($cviews as $cview) {
                 $em->remove($cview);
             }
             $em->flush();
             $this->giveBadges();
             $this->getSubscriptionsManager()->subscribe($this->getUser(), 'message', $thread->getId());
             return $this->redirect($this->generateUrl('forum_thread', array('id' => $thread->getId(), 'slug' => $thread->getSlug())));
         } else {
             return array('errors' => $form->getErrors(), 'category' => $category, 'parents' => $parents, 'form' => $form->createView());
         }
     }
     return array('category' => $category, 'parents' => $parents, 'form' => $form->createView());
 }
 /**
  * @param UserInterface $user
  * @param Category      $category
  * @return bool
  */
 public function canPost($user, Category $category)
 {
     $checker = new PermissionsChecker($user);
     return $checker->canPost($category);
 }