/** * @Route( * "/user/membership/{login}/events/edit/{id}", * defaults={"_format"="json"}, * name="memberships_orga_events_ajax_edit", * options={"expose"=true} * ) * @Template() */ public function ajaxEditAction(Request $request, $login, Event $event) { 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(); if ($event->getOrga()->getId() != $orga->getId()) { return $this->createAccessDeniedResponse(); } $eventUpdate = $request->request->get('event'); if (!$eventUpdate) { throw $this->createNotFoundException('No event patch provided'); } $oldInterval = $event->getEnd()->diff($event->getBegin()); if (isset($eventUpdate['allDay'])) { $event->setIsAllDay($eventUpdate['allDay'] == 'true'); $oldInterval = \DateInterval::createFromDateString('1 second'); } if (isset($eventUpdate['start'])) { $event->setBegin(\DateTime::createFromFormat('d-m-Y--H-i', $eventUpdate['start'])); $end = \DateTime::createFromFormat('d-m-Y--H-i', $eventUpdate['start']); $end->add($oldInterval); $event->setEnd($end); } if (isset($eventUpdate['end'])) { $event->setEnd(\DateTime::createFromFormat('d-m-Y--H-i', $eventUpdate['end'])); } $em->persist($event); $em->flush(); return new Response(json_encode(array('status' => 'success'))); }