Ejemplo n.º 1
0
 /**
  * Send a notification
  *
  * @param Notification $notif
  * @param bool         $tryCompile
  * @return bool
  */
 public function send(Notification $notif, $tryCompile = false)
 {
     /** @var $em EntityManager */
     $em = $this->doctrine->getManager();
     if (!$notif->getIsSuper() && $tryCompile) {
         $oldDate = new \DateTime();
         $oldDate->setTime(date('h') - 1, date('i'), date('s'));
         $oldNotif = $em->createQueryBuilder()->select('n')->from('EtuCoreBundle:Notification', 'n')->where('n.createdAt > :oldDate')->andWhere('n.isSuper = 0')->andWhere('n.helper = :helper')->andWhere('n.entityType = :entityType')->andWhere('n.entityId = :entityId')->setParameter('oldDate', $oldDate)->setParameter('helper', $notif->getHelper())->setParameter('entityType', $notif->getEntityType())->setParameter('entityId', $notif->getEntityId())->setMaxResults(1)->getQuery()->getOneOrNullResult();
         if ($oldNotif instanceof Notification) {
             $oldNotif->setEntities(array_merge($oldNotif->getEntities(), $notif->getEntities()));
             $oldNotif->setCreatedAt($notif->getDate());
             $em->persist($oldNotif);
         } else {
             $em->persist($notif);
         }
     } else {
         $em->persist($notif);
     }
     $em->flush();
     return true;
 }
Ejemplo n.º 2
0
 /**
  * @Route("/forum/answer/{id}-{slug}", name="forum_answer")
  * @Template()
  */
 public function answerAction($id, $slug)
 {
     if (!$this->getUser()) {
         return $this->createAccessDeniedResponse();
     }
     $em = $this->getDoctrine()->getManager();
     $thread = $em->createQueryBuilder()->select('t, c')->from('EtuModuleForumBundle:Thread', 't')->leftJoin('t.category', 'c')->where('t.id = :id')->andWhere('t.state != 300')->setParameter('id', $id)->getQuery()->getSingleResult();
     $category = $thread->getCategory();
     $checker = new PermissionsChecker($this->getUser());
     if (!$checker->canAnswer($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();
     $message = new Message();
     $form = $this->createForm(new MessageType(), $message);
     $request = $this->get('request');
     if ($request->getMethod() == 'POST') {
         $form->bind($request);
         if ($form->isValid()) {
             $message->setAuthor($this->getUser())->setCategory($category)->setThread($thread)->setState(100);
             $thread->setCountMessages($thread->getCountMessages() + 1)->setLastMessage($message);
             foreach ($parents as $parent) {
                 $parent->setLastMessage($message)->setCountMessages($parent->getCountMessages() + 1);
                 $em->persist($parent);
             }
             $em->persist($thread);
             $views = $em->getRepository('EtuModuleForumBundle:View')->findByThread($thread);
             foreach ($views as $view) {
                 $em->remove($view);
             }
             $cviews = $em->getRepository('EtuModuleForumBundle:CategoryView')->findByCategory($category);
             foreach ($cviews as $cview) {
                 $em->remove($cview);
             }
             $em->flush();
             $this->giveBadges();
             $page = ceil($thread->getCountMessages() / 10);
             $notif = new Notification();
             $notif->setModule($this->getCurrentBundle()->getIdentifier())->setHelper('thread_answered')->setAuthorId($this->getUser()->getId())->setEntityType('message')->setEntityId($thread->getId())->addEntity($message);
             $this->getNotificationsSender()->send($notif);
             $this->getSubscriptionsManager()->subscribe($this->getUser(), 'message', $thread->getId());
             return $this->redirect($this->generateUrl('forum_thread', array('id' => $thread->getId(), 'slug' => $thread->getSlug(), 'page' => $page)) . '#' . $message->getId());
         } else {
             return array('errors' => $form->getErrors(), 'thread' => $thread, 'parents' => $parents, 'form' => $form->createView());
         }
     }
     return array('thread' => $thread, 'parents' => $parents, 'form' => $form->createView());
 }
Ejemplo n.º 3
0
 /**
  * @Route("/{id}/subscribe", name="covoiturage_my_subscribe")
  */
 public function subscribeAction($id)
 {
     if (!$this->getUserLayer()->isUser()) {
         return $this->createAccessDeniedResponse();
     }
     /** @var EntityManager $em */
     $em = $this->getDoctrine()->getManager();
     /** @var Covoit $covoit */
     $covoit = $em->createQueryBuilder()->select('c, s, u, sc, ec')->from('EtuModuleCovoitBundle:Covoit', 'c')->leftJoin('c.subscriptions', 's')->leftJoin('c.startCity', 'sc')->leftJoin('c.endCity', 'ec')->leftJoin('s.user', 'u')->where('c.id = :id')->setParameter('id', (int) $id)->getQuery()->getOneOrNullResult();
     if (!$covoit) {
         throw $this->createNotFoundException();
     }
     if (!$this->getUser()->getPhoneNumber()) {
         $this->get('session')->getFlashBag()->set('message', array('type' => 'error', 'message' => 'covoit.messages.required_phone'));
     } elseif ($covoit->hasUser($this->getUser())) {
         $this->get('session')->getFlashBag()->set('message', array('type' => 'error', 'message' => 'covoit.messages.already_subscribed'));
     } else {
         $subscription = new CovoitSubscription();
         $subscription->setCovoit($covoit);
         $subscription->setUser($this->getUser());
         $subscription->setPhoneNumber($this->getUser()->getPhoneNumber());
         $covoit->addSubscription($subscription);
         $em->persist($subscription);
         $em->persist($covoit);
         $em->flush();
         // Notify followers
         $notif = new Notification();
         $notif->setModule($this->getCurrentBundle()->getIdentifier())->setHelper('covoit_subscription')->setAuthorId($this->getUser()->getId())->setEntityType('covoit')->setEntityId($covoit->getId())->addEntity($subscription);
         $this->getNotificationsSender()->send($notif);
         // Add current user as subscriber
         $this->getSubscriptionsManager()->subscribe($this->getUser(), 'covoit', $covoit->getId());
         $this->get('session')->getFlashBag()->set('message', array('type' => 'success', 'message' => 'covoit.messages.subscribed'));
     }
     return $this->redirect($this->generateUrl('covoiturage_view', ['id' => $covoit->getId(), 'slug' => $covoit->getStartCity()->getSlug() . '-' . $covoit->getEndCity()->getSlug()]));
 }
Ejemplo n.º 4
0
 /**
  * @Route("/user/membership/{login}/notification", name="memberships_orga_notifications")
  * @Template()
  */
 public function notificationAction($login)
 {
     if (!$this->getUserLayer()->isUser()) {
         return $this->createAccessDeniedResponse();
     }
     /** @var $em EntityManager */
     $em = $this->getDoctrine()->getManager();
     $query = $em->createQueryBuilder()->select('m, o')->from('EtuUserBundle:Member', 'm')->leftJoin('m.organization', 'o')->andWhere('m.user = :user')->setParameter('user', $this->getUser()->getId())->orderBy('m.role', 'DESC')->addOrderBy('o.name', 'ASC')->getQuery();
     $query->useResultCache(true, 60);
     /** @var $memberships Member[] */
     $memberships = $query->getResult();
     $membership = null;
     foreach ($memberships as $m) {
         if ($m->getOrganization()->getLogin() == $login) {
             $membership = $m;
             break;
         }
     }
     if (!$membership) {
         throw $this->createNotFoundException('Membership or organization not found for login ' . $login);
     }
     if (!$membership->hasPermission('notify')) {
         return $this->createAccessDeniedResponse();
     }
     $orga = $membership->getOrganization();
     $notif = new \stdClass();
     $notif->link = null;
     $notif->content = '';
     $notif->orga_name = $orga->getName();
     $form = $this->createFormBuilder($notif)->add('link', 'url', array('required' => false))->add('content', 'textarea', array('required' => true, 'max_length' => 140))->getForm();
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST' && $form->bind($request)->isValid()) {
         $notification = new Notification();
         $notification->setEntityType('orga')->setEntityId($orga->getId())->setModule('assos')->setAuthorId($this->getUser()->getId())->setHelper('orga_message')->addEntity($notif);
         $this->getNotificationsSender()->send($notification, false);
         $this->get('session')->getFlashBag()->set('message', array('type' => 'success', 'message' => 'user.memberships.notification.confirm'));
         return $this->redirect($this->generateUrl('memberships_orga_notifications', array('login' => $login)));
     }
     return array('memberships' => $memberships, 'membership' => $membership, 'form' => $form->createView());
 }
Ejemplo n.º 5
0
 /**
  * @Route("/{id}-{slug}/close", requirements = {"id" = "\d+"}, name="bugs_admin_close")
  * @Template()
  */
 public function closeAction($id, $slug)
 {
     if (!$this->getUserLayer()->isUser() || !$this->getUser()->hasPermission('bugs.admin')) {
         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');
     }
     $bug->close();
     $em->persist($bug);
     $comment = new Comment();
     $comment->setIsStateUpdate(true);
     $comment->setIssue($bug);
     $comment->setUser($this->getUser());
     $comment->setBody($this->get('translator')->trans('bugs.bugs_admin.close.message', array('%adminName%' => $this->getUser()->getFullName())));
     $em->persist($comment);
     $em->flush();
     // Send notifications to subscribers
     $notif = new Notification();
     $notif->setModule($this->getCurrentBundle()->getIdentifier())->setHelper('bugs_closed')->setAuthorId($this->getUser()->getId())->setEntityType('issue')->setEntityId($bug->getId())->addEntity($bug);
     $this->getNotificationsSender()->send($notif);
     $this->get('session')->getFlashBag()->set('message', array('type' => 'success', 'message' => 'bugs.bugs_admin.close.success'));
     return $this->redirect($this->generateUrl('bugs_view', array('id' => $bug->getId(), 'slug' => StringManipulationExtension::slugify($bug->getTitle()))));
 }
 /**
  * @param Covoit $covoit
  * @return Notification
  */
 private function createNotification(Covoit $covoit)
 {
     $notif = new Notification();
     $notif->setModule('covoit')->setHelper('covoit_alert')->setEntityType('covoit-alert')->addEntity($covoit);
     return $notif;
 }
Ejemplo n.º 7
0
 /**
  * @Route("/{slug}-{name}/send-review", name="uvs_view_send_review")
  * @Template()
  */
 public function sendReviewAction(Request $request, $slug, $name)
 {
     if (!$this->getUserLayer()->isUser()) {
         return $this->createAccessDeniedResponse();
     }
     /** @var EntityManager $em */
     $em = $this->getDoctrine()->getManager();
     /** @var UV $uv */
     $uv = $em->getRepository('EtuModuleUVBundle:UV')->findOneBy(array('slug' => $slug));
     if (!$uv) {
         throw $this->createNotFoundException(sprintf('UV for slug %s not found', $slug));
     }
     if (StringManipulationExtension::slugify($uv->getName()) != $name) {
         return $this->redirect($this->generateUrl('uvs_view_send_review', array('slug' => $uv->getSlug(), 'name' => StringManipulationExtension::slugify($uv->getName()))), 301);
     }
     $review = new Review();
     $review->setUv($uv)->setSender($this->getUser())->setSemester(User::currentSemester());
     $form = $this->createFormBuilder($review)->add('type', 'choice', array('choices' => Review::$types, 'required' => true))->add('semester', 'choice', array('choices' => Review::availableSemesters(), 'required' => true))->add('file', null, array('required' => true))->getForm();
     if ($request->getMethod() == 'POST' && $form->submit($request)->isValid()) {
         $review->upload();
         $em->persist($review);
         $em->flush();
         // Notify subscribers
         $notif = new Notification();
         $review->file = null;
         $notif->setModule($this->getCurrentBundle()->getIdentifier())->setHelper('uv_new_review')->setAuthorId($this->getUser()->getId())->setEntityType('uv')->setEntityId($uv->getId())->addEntity($review);
         $this->getNotificationsSender()->send($notif);
         // Add badges
         $count = $em->createQueryBuilder()->select('COUNT(r) as nb')->from('EtuModuleUVBundle:Review', 'r')->where('r.sender = :user')->setParameter('user', $this->getUser()->getId())->getQuery()->getSingleScalarResult();
         $user = $this->getUser();
         if ($count >= 1) {
             BadgesManager::userAddBadge($user, 'uvs_reviews', 1);
         } else {
             BadgesManager::userRemoveBadge($user, 'uvs_reviews', 1);
         }
         if ($count >= 2) {
             BadgesManager::userAddBadge($user, 'uvs_reviews', 2);
         } else {
             BadgesManager::userRemoveBadge($user, 'uvs_reviews', 2);
         }
         if ($count >= 4) {
             BadgesManager::userAddBadge($user, 'uvs_reviews', 3);
         } else {
             BadgesManager::userRemoveBadge($user, 'uvs_reviews', 3);
         }
         if ($count >= 10) {
             BadgesManager::userAddBadge($user, 'uvs_reviews', 4);
         } else {
             BadgesManager::userRemoveBadge($user, 'uvs_reviews', 4);
         }
         BadgesManager::userPersistBadges($user);
         $em->persist($user);
         $em->flush();
         $this->get('session')->getFlashBag()->set('message', array('type' => 'success', 'message' => 'uvs.main.sendReview.confirm'));
         return $this->redirect($this->generateUrl('uvs_view', array('slug' => $slug, 'name' => $name)));
     }
     return array('uv' => $uv, 'form' => $form->createView());
 }
Ejemplo n.º 8
0
 /**
  * @Route(
  *      "/user/membership/{login}/event/{id}-{slug}/delete/{confirm}",
  *      defaults={"confirm"=false},
  *      name="memberships_orga_events_delete"
  * )
  * @Template()
  */
 public function deleteAction(Request $request, $login, $id, $slug, $confirm = false)
 {
     if (!$this->getUserLayer()->isUser()) {
         return $this->createAccessDeniedResponse();
     }
     /** @var $em EntityManager */
     $em = $this->getDoctrine()->getManager();
     /** @var $memberships Member[] */
     $memberships = $em->createQueryBuilder()->select('m, o')->from('EtuUserBundle:Member', 'm')->leftJoin('m.organization', 'o')->andWhere('m.user = :user')->setParameter('user', $this->getUser()->getId())->orderBy('m.role', 'DESC')->addOrderBy('o.name', 'ASC')->getQuery()->getResult();
     $membership = null;
     foreach ($memberships as $m) {
         if ($m->getOrganization()->getLogin() == $login) {
             $membership = $m;
             break;
         }
     }
     if (!$membership) {
         throw $this->createNotFoundException('Membership or organization not found for login ' . $login);
     }
     if (!$membership->hasPermission('events')) {
         return $this->createAccessDeniedResponse();
     }
     $orga = $membership->getOrganization();
     /** @var $event Event */
     $event = $em->createQueryBuilder()->select('e, o')->from('EtuModuleEventsBundle:Event', 'e')->leftJoin('e.orga', 'o')->where('e.uid = :id')->setParameter('id', $id)->setMaxResults(1)->getQuery()->getOneOrNullResult();
     if (!$event) {
         throw $this->createNotFoundException('Event #' . $id . ' not found');
     }
     if (StringManipulationExtension::slugify($event->getTitle()) != $slug) {
         return $this->redirect($this->generateUrl('events_view', array('id' => $id, 'slug' => StringManipulationExtension::slugify($event->getTitle()))), 301);
     }
     if ($event->getOrga()->getId() != $orga->getId()) {
         return $this->createAccessDeniedResponse();
     }
     if ($confirm) {
         $entity = array('id' => $event->getId(), 'title' => $event->getTitle(), 'location' => $event->getLocation(), 'begin' => $event->getBegin(), 'end' => $event->getEnd(), 'orga' => array('id' => $event->getOrga()->getId(), 'name' => $event->getOrga()->getName()));
         // Send notifications to subscribers
         $notif = new Notification();
         $notif->setModule($this->getCurrentBundle()->getIdentifier())->setHelper('event_deleted')->setAuthorId($this->getUser()->getId())->setEntityType('event')->setEntityId($event->getId())->addEntity($entity);
         $this->getNotificationsSender()->send($notif);
         $em->createQueryBuilder()->delete()->from('EtuModuleEventsBundle:Answer', 'a')->where('a.event = :id')->setParameter('id', $event->getId())->getQuery()->execute();
         $em->remove($event);
         $em->flush();
         // Confirmation
         $this->get('session')->getFlashBag()->set('message', array('type' => 'success', 'message' => 'events.memberships.delete.confirm'));
         return $this->redirect($this->generateUrl('memberships_orga_events', array('login' => $login)));
     }
     return array('memberships' => $memberships, 'membership' => $membership, 'orga' => $orga, 'event' => $event);
 }
Ejemplo n.º 9
0
 /**
  * @Route("/create", name="bugs_create")
  * @Template()
  */
 public function createAction()
 {
     if (!$this->getUserLayer()->isUser()) {
         return $this->createAccessDeniedResponse();
     }
     if (!$this->getUser()->hasPermission('bugs.add')) {
         throw new AccessDeniedHttpException('Vous n\'avez pas la permission nécessaire pour signaler un problème.');
     }
     $bug = new Issue();
     $bug->setUser($this->getUser());
     $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()) {
         /** @var $em EntityManager */
         $em = $this->getDoctrine()->getManager();
         $em->persist($bug);
         $em->flush();
         // Send notifications to subscribers ("entityId = 0" mean all opened bugs)
         $notif = new Notification();
         $notif->setModule($this->getCurrentBundle()->getIdentifier())->setHelper('bugs_new_opened')->setAuthorId($this->getUser()->getId())->setEntityType('issue')->setEntityId(0)->addEntity($bug);
         $this->getNotificationsSender()->send($notif);
         // Subscribe automatically the user at the issue
         $this->getSubscriptionsManager()->subscribe($this->getUser(), 'issue', $bug->getId());
         $this->get('session')->getFlashBag()->set('message', array('type' => 'success', 'message' => 'bugs.bugs.create.confirm'));
         return $this->redirect($this->generateUrl('bugs_view', array('id' => $bug->getId(), 'slug' => StringManipulationExtension::slugify($bug->getTitle()))));
     }
     return array('form' => $form->createView());
 }
Ejemplo n.º 10
0
 /**
  * @Route("/{slug}-{id}", requirements={"slug"=".+"}, name="covoiturage_view")
  * @Template()
  */
 public function viewAction(Request $request, $id, $slug)
 {
     if (!$this->getUserLayer()->isUser()) {
         return $this->createAccessDeniedResponse();
     }
     /** @var EntityManager $em */
     $em = $this->getDoctrine()->getManager();
     /** @var Covoit $covoit */
     $covoit = $em->createQueryBuilder()->select('c, cs, ca')->from('EtuModuleCovoitBundle:Covoit', 'c')->leftJoin('c.author', 'ca')->leftJoin('c.subscriptions', 'cs')->where('c.id = :id')->setParameter('id', $id)->getQuery()->getOneOrNullResult();
     if (!$covoit) {
         throw $this->createNotFoundException('Covoit not found');
     }
     // One URL to rule them all
     if ($slug != $covoit->getStartCity()->getSlug() . '-' . $covoit->getEndCity()->getSlug()) {
         return $this->redirect($this->generateUrl('covoiturage_view', ['id' => $covoit->getId(), 'slug' => $covoit->getStartCity()->getSlug() . '-' . $covoit->getEndCity()->getSlug()]), 301);
     }
     $message = new CovoitMessage();
     $message->setAuthor($this->getUser());
     $message->setCovoit($covoit);
     $messageForm = $this->createForm($this->get('etu.covoit.form.message'), $message);
     if ($request->getMethod() == 'POST' && $messageForm->submit($request)->isValid()) {
         $em->persist($message);
         $em->flush();
         // Send notifications to subscribers
         $notif = new Notification();
         $notif->setModule($this->getCurrentBundle()->getIdentifier())->setHelper('covoit_new_message')->setAuthorId($this->getUser()->getId())->setEntityType('covoit')->setEntityId($covoit->getId())->addEntity($message);
         $this->getNotificationsSender()->send($notif);
         // Add current user as subscriber
         $this->getSubscriptionsManager()->subscribe($this->getUser(), 'covoit', $covoit->getId());
         $this->get('session')->getFlashBag()->set('message', array('type' => 'success', 'message' => 'covoit.messages.message_sent'));
         return $this->redirect($this->generateUrl('covoiturage_view', ['id' => $covoit->getId(), 'slug' => $covoit->getStartCity()->getSlug() . '-' . $covoit->getEndCity()->getSlug()]));
     }
     return ['covoit' => $covoit, 'messageForm' => $messageForm->createView()];
 }