/** * @param string $entityType * @param integer $entityId * @param User $user * @param \DateTime $date * @return bool */ public function subscribe(User $user, $entityType, $entityId, \DateTime $date = null) { /** @var $em EntityManager */ $em = $this->doctrine->getManager(); if (!$this->isSubscriber($user, $entityType, $entityId)) { $subscription = new Subscription(); $subscription->setEntityType($entityType); $subscription->setEntityId($entityId); $subscription->setUser($user); if ($date instanceof \DateTime) { $subscription->setCreatedAt($date); } $em->persist($subscription); $em->flush(); } return true; }
/** * @Route("/{id}-{slug}/edit", requirements = {"id" = "\d+"}, name="bugs_edit") * @Template() */ public function editAction($id, $slug) { if (!$this->getUserLayer()->isUser()) { return $this->createAccessDeniedResponse(); } /** @var $em EntityManager */ $em = $this->getDoctrine()->getManager(); /** @var $bug Issue */ $bug = $em->createQueryBuilder()->select('i, u, a')->from('EtuModuleBugsBundle:Issue', 'i')->leftJoin('i.user', 'u')->leftJoin('i.assignee', 'a')->where('i.id = :id')->setParameter('id', $id)->setMaxResults(1)->getQuery()->getOneOrNullResult(); if (!$bug) { throw $this->createNotFoundException('Issue #' . $id . ' not found'); } if (StringManipulationExtension::slugify($bug->getTitle()) != $slug) { throw $this->createNotFoundException('Invalid slug'); } if ($bug->getUser()->getId() != $this->getUser()->getId() && !$this->getUser()->getIsAdmin()) { throw new AccessDeniedHttpException('Vous n\'avez pas le droit de modifier ce signalement.'); } $form = $this->createFormBuilder($bug)->add('title')->add('criticality', 'choice', array('choices' => array(Issue::CRITICALITY_SECURITY => 'bugs.criticality.60', Issue::CRITICALITY_CRITICAL => 'bugs.criticality.50', Issue::CRITICALITY_MAJOR => 'bugs.criticality.40', Issue::CRITICALITY_MINOR => 'bugs.criticality.30', Issue::CRITICALITY_VISUAL => 'bugs.criticality.20', Issue::CRITICALITY_TYPO => 'bugs.criticality.10')))->add('body')->getForm(); $request = $this->getRequest(); if ($request->getMethod() == 'POST' && $form->bind($request)->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($bug); $em->flush(); // Subscribe automatically the user at the issue $subscription = new Subscription(); $subscription->setUser($this->getUser()); $subscription->setEntityType('issue'); $subscription->setEntityId($bug->getId()); $em->persist($subscription); $em->flush(); $this->get('session')->getFlashBag()->set('message', array('type' => 'success', 'message' => 'bugs.bugs.edit.confirm')); return $this->redirect($this->generateUrl('bugs_view', array('id' => $bug->getId(), 'slug' => StringManipulationExtension::slugify($bug->getTitle())))); } return array('form' => $form->createView()); }