/** * @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"); }