/** * @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); }
/** * @param UserInterface $user * @param Category $category * @return bool */ public function canEdit($user, Category $category) { $checker = new PermissionsChecker($user); return $checker->canEdit($category); }