/**
  * @param Request $request
  * @return Response
  * @throws \Exception
  *
  * @ApiDoc(
  *  description="Create a new event",
  *  requirements={
  *      {
  *          "name"="calendar_uri",
  *          "dataType"="string",    
  *          "description"="The uri of the calendar",
  *      },
  *      {
  *          "name"="event_data",
  *          "dataType"="array",
  *          "description"="All the fields of the new event"
  *      }
  *  }
  * )
  */
 public function createEventAction(Request $request)
 {
     $params = array();
     $content = $request->getContent();
     if (!empty($content)) {
         $params = json_decode($content, true);
     }
     if (!isset($params['calendar_uri']) || !isset($params['event_data'])) {
         return $this->buildError(400, 'Missing parameters');
     }
     $calendarBackend = new CalendarBackend($this->get('pmanager'), $this->generateUrl('event_read', [], true), $this->get('slugify'));
     $calendarUri = $params['calendar_uri'];
     $where = Where::create('uri = $*', [$calendarUri]);
     $rawCalendars = $this->get('pmanager')->findWhere('public', 'calendar', $where);
     if ($rawCalendars->count() == 0) {
         return $this->buildError('400', 'CalendarUri given does not correspond to any calendar in the database');
     }
     $calendar = $rawCalendars->get(0);
     $calendarId = $calendar->uid;
     $event = new Event();
     foreach ($params['event_data'] as $name => $value) {
         $event->{$name} = $value;
     }
     $vevent = $event->getVObject();
     $calendarBackend->createCalendarObject($calendarId, $vevent->VEVENT->UID . '.ics', $vevent->serialize());
     return $this->buildResponse(['created' => $vevent->VEVENT->UID->getValue()]);
 }
 /**
  * @param Request $request
  *
  * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  */
 public function eventCreateAction(Request $request)
 {
     $this->denyAccessUnlessGranted('ROLE_USER', null, 'Unable to access this page!');
     $usr = $this->get('security.token_storage')->getToken()->getUser();
     $username = $usr->getUsernameCanonical();
     $calendarBackend = new Calendar($this->get('pmanager'), $this->generateUrl('event_read', [], true), $this->get('slugify'));
     $rawCalendars = $calendarBackend->getCalendarsForUser('principals/' . $username);
     if ($rawCalendars == []) {
         $this->addFlash('danger', 'Vous devez créer au moins 1 calendrier avant de pouvoir créer des événements.');
         return $this->redirectToRoute('event_home');
     }
     $calendars = [];
     foreach ($rawCalendars as $raw) {
         $calendars[$raw['id']] = $raw['{DAV:}displayname'];
     }
     $where = Where::create('slug = $*', [$request->query->get('calendar')]);
     $raws = $this->get('pmanager')->findWhere('public', 'calendar', $where);
     $calendar = null;
     if ($raws->count() > 0) {
         $calendar = $raws->get(0)->uid;
     }
     $event = new Event();
     $form = $this->createForm(new EventType($calendars, $calendar), $event, ['csrf_protection' => false]);
     $form->handleRequest($request);
     if ($form->isValid()) {
         $vevent = $event->getVObject();
         $calendarBackend->createCalendarObject($event->calendarid, $vevent->VEVENT->UID . '.ics', $vevent->serialize());
         $this->addFlash('success', "L'événement a bien été créé.");
         $rawEvent = $this->get('pmanager')->findById('public', 'calendarobject', $vevent->VEVENT->UID);
         return $this->redirectToRoute('event_read', ['slug' => $rawEvent->slug]);
     }
     return $this->render('browser/event_create.html.twig', array('form' => $form->createView()));
     //return new Response("eventCreateAction");
 }