entityManager = $entityManager; $this->clientManager = $clientManager; $this->hookManager = $hookManager; } public function run(Request $request, Response $response): void { $uid = $request->getQueryParam('uid') ?? null; $action = $request->getQueryParam('action') ?? null; if (empty($uid) || empty($action)) { throw new BadRequest(); } if (!in_array($action, ['accept', 'decline', 'tentative'])) { throw new BadRequest(); } $uniqueId = $this->entityManager ->getRDBRepository('UniqueId') ->where(['name' => $uid]) ->findOne(); if (!$uniqueId) { throw new NotFound(); } $data = $uniqueId->get('data'); $eventType = $data->eventType; $eventId = $data->eventId; $inviteeType = $data->inviteeType; $inviteeId = $data->inviteeId; $link = $data->link; if (!empty($eventType) && !empty($eventId) && !empty($inviteeType) && !empty($inviteeId) && !empty($link)) { $event = $this->entityManager->getEntity($eventType, $eventId); $invitee = $this->entityManager->getEntity($inviteeType, $inviteeId); if (!$event || !$invitee) { throw new NotFound(); } if ($event->get('status') === 'Held' || $event->get('status') === 'Not Held') { throw new NotFound(); } $status = 'None'; $hookMethodName = 'afterConfirmation'; if ($action == 'accept') { $status = 'Accepted'; } else if ($action == 'decline') { $status = 'Declined'; } else if ($action == 'tentative') { $status = 'Tentative'; } $data = (object) [ 'status' => $status ]; $this->entityManager ->getRDBRepository($eventType) ->updateRelation($event, $link, $invitee->getId(), $data); $actionData = [ 'eventName' => $event->get('name'), 'eventType' => $event->getEntityType(), 'eventId' => $event->getId(), 'dateStart' => $event->get('dateStart'), 'action' => $action, 'status' => $status, 'link' => $link, 'inviteeType' => $invitee->getEntityType(), 'inviteeId' => $invitee->getId(), ]; $this->hookManager->process($event->getEntityType(), $hookMethodName, $event, [], $actionData); $runScript = " Espo.require('crm:controllers/event-confirmation', function (Controller) { var controller = new Controller(app.baseController.params, app.getControllerInjection()); controller.masterView = app.masterView; controller.doAction('confirmEvent', ".json_encode($actionData)."); }); "; $this->clientManager->display($runScript); return; } throw new Error(); } }