/**
  * @Route(
  *      "/user/membership/{login}/events/create",
  *      name="memberships_orga_events_create",
  *      options={"expose"=true}
  * )
  * @Template()
  */
 public function createAction(Request $request, $login)
 {
     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();
     }
     $start = $request->query->get('s');
     $end = $request->query->get('e');
     $allDay = $request->query->get('a') == 'true' ? true : false;
     if (!$start || !$end) {
         throw $this->createNotFoundException();
     }
     $orga = $membership->getOrganization();
     $event = new Event(null, \DateTime::createFromFormat('d-m-Y--H-i', $start), \DateTime::createFromFormat('d-m-Y--H-i', $end));
     $event->setOrga($orga)->setIsAllDay($allDay);
     $categories = array();
     foreach (Event::$categories as $category) {
         $categories[$category] = 'events.categories.' . $category;
     }
     $form = $this->createFormBuilder($event)->add('title')->add('category', 'choice', array('choices' => $categories))->add('file', 'file')->add('location', 'textarea')->add('privacy', 'choice', array('choices' => array(Event::PRIVACY_PUBLIC => 'events.memberships.create.privacy.public', Event::PRIVACY_PRIVATE => 'events.memberships.create.privacy.private'), 'required' => true))->add('description', 'redactor')->getForm();
     if ($request->getMethod() == 'POST' && $form->submit($request)->isValid()) {
         $em->persist($event);
         $em->flush();
         $event->upload();
         $entity = array('id' => $event->getId(), 'title' => $event->getTitle(), 'category' => $categories[$event->getCategory()], 'orga' => array('id' => $event->getOrga()->getId(), 'name' => $event->getOrga()->getName()));
         // Send notifications to subscribers of all eventts
         $notif = new Notification();
         $notif->setModule($this->getCurrentBundle()->getIdentifier())->setHelper('event_created_all')->setAuthorId($this->getUser()->getId())->setEntityType('event')->setEntityId(0)->addEntity($entity);
         $this->getNotificationsSender()->send($notif);
         // Send notifications to subscribers of specific category
         $notif = new Notification();
         $availableCategories = Event::$categories;
         array_unshift($availableCategories, 'all');
         $keys = array_flip($availableCategories);
         $notif->setModule($this->getCurrentBundle()->getIdentifier())->setHelper('event_created_category')->setAuthorId($this->getUser()->getId())->setEntityType('event-category')->setEntityId($keys[$event->getCategory()])->addEntity($entity);
         $this->getNotificationsSender()->send($notif);
         // Confirmation
         $this->get('session')->getFlashBag()->set('message', array('type' => 'success', 'message' => 'events.memberships.create.confirm'));
         return $this->redirect($this->generateUrl('memberships_orga_events', array('login' => $login, 'day' => $event->getBegin()->format('d'), 'month' => $event->getBegin()->format('m'), 'year' => $event->getBegin()->format('Y'))));
     }
     return array('memberships' => $memberships, 'membership' => $membership, 'orga' => $orga, 'form' => $form->createView(), 'event' => $event);
 }