/** * @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 canSticky($user, Category $category) { $checker = new PermissionsChecker($user); return $checker->canSticky($category); }