コード例 #1
0
 /**
  * @Route("/forum/edit/{threadId}-{slug}/{messageId}", name="forum_edit")
  * @Template()
  */
 public function editAction($messageId)
 {
     if (!$this->getUser()) {
         return $this->createAccessDeniedResponse();
     }
     $em = $this->getDoctrine()->getManager();
     $message = $em->createQueryBuilder()->select('m, t')->from('EtuModuleForumBundle:Message', 'm')->leftJoin('m.thread', 't')->where('m.id = :id')->andWhere('t.state != 300')->setParameter('id', $messageId)->getQuery()->getSingleResult();
     $thread = $message->getThread();
     $category = $message->getCategory();
     $checker = new PermissionsChecker($this->getUser());
     if (!$checker->canEdit($category) || $thread->getState() == 200 && !$checker->canLock($category) && !$this->getUser()->getIsAdmin()) {
         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();
     if ($message->getCreatedAt() == $thread->getCreatedAt()) {
         $form = $this->createForm(new MessageEditType(), $message);
         $typeForm = 'thread';
     } else {
         $form = $this->createForm(new MessageType(), $message);
         $typeForm = 'message';
     }
     $request = $this->get('request');
     if ($request->getMethod() == 'POST') {
         $form->bind($request);
         if ($form->isValid()) {
             $em->persist($message);
             $em->flush();
             $nbMessages = $em->createQueryBuilder()->select('count(m.id)')->from('EtuModuleForumBundle:Message', 'm')->where('m.thread = :thread')->andWhere('m.id <= :mid')->setParameter('thread', $thread->getId())->setParameter('mid', $message->getId())->getQuery()->getSingleScalarResult();
             $page = ceil($nbMessages / 10);
             return $this->redirect($this->generateUrl('forum_thread', array('id' => $thread->getId(), 'slug' => $thread->getSlug(), 'page' => $page)) . '#' . $message->getId());
         } else {
             return array('errors' => $form->getErrors(), 'messageContent' => $message, 'thread' => $thread, 'parents' => $parents, 'form' => $form->createView(), 'category' => $category, 'typeForm' => $typeForm);
         }
     }
     return array('messageContent' => $message, 'thread' => $thread, 'parents' => $parents, 'form' => $form->createView(), 'category' => $category, 'typeForm' => $typeForm);
 }
コード例 #2
0
 /**
  * @param UserInterface $user
  * @param Category      $category
  * @return bool
  */
 public function canEdit($user, Category $category)
 {
     $checker = new PermissionsChecker($user);
     return $checker->canEdit($category);
 }