event) || !isset($decoded->payload->object)) { error_log(sprintf('Did not recognize event notification: %s', $body)); http_response_code(Response::HTTP_UNPROCESSABLE_ENTITY); exit; } $object = $decoded->payload->object; list($objectType, $action) = explode('.', $decoded->event); $em = Database::getManager(); $meetingRepository = $em->getRepository(Meeting::class); $meeting = null; if ($object->id) { /** @var Meeting $meeting */ $meeting = $meetingRepository->findOneBy(['meetingId' => $object->id]); } $activity = null; if ($meeting) { $activity = new MeetingActivity(); $activity->setName($action); $activity->setType($objectType); $activity->setEvent(json_encode($object)); } switch ($objectType) { case 'meeting': $registrantRepository = $em->getRepository(Registrant::class); if (null === $meeting) { exit; } error_log('Meeting '.$action.' - '.$meeting->getId()); error_log(print_r($object, 1)); switch ($action) { case 'deleted': $em->remove($meeting); $em->flush(); exit; break; case 'ended': case 'started': $meeting->setStatus($action); $meeting->addActivity($activity); break; default: $meeting->addActivity($activity); break; } $em->persist($meeting); $em->flush(); break; case 'recording': $recordingRepository = $em->getRepository(Recording::class); $recordingEntity = null; if ($object->uuid) { $recordingEntity = $recordingRepository->findBy(['uuid' => $object->uuid, 'meeting' => $meeting]); } error_log("Recording: $action"); error_log(print_r($object, 1)); switch ($action) { case 'completed': $recording = new Recording(); $recording->setRecordingMeeting(RecordingMeeting::fromObject($object)); $recording->setMeeting($meeting); $meeting->addActivity($activity); $em->persist($meeting); $em->persist($recording); $em->flush(); break; case 'recovered': /*if (null === $recordingEntity) { $em->persist( (new Recording())->setRecordingMeeting(RecordingMeeting::fromObject($object)) ); $em->flush(); }*/ break; case 'trashed': case 'deleted': $meeting->addActivity($activity); $em->persist($meeting); if (null !== $recordingEntity) { $em->remove($recordingEntity); } $em->flush(); break; default: $meeting->addActivity($activity); $em->persist($meeting); $em->flush(); //error_log(sprintf('Event "%s" on %s was unhandled: %s', $action, $objectType, $body)); //http_response_code(501); // Not Implemented break; } break; default: error_log(sprintf('Event "%s" on %s was unhandled: %s', $action, $objectType, $body)); http_response_code(501); // Not Implemented break; }