- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/controller/sharingajax.php
- Класс: BitrixCalendarControllerSharingAjax
- Вызов: SharingAjax::saveEventAction
public function saveEventAction(): array
{
$connection = Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
$result = [];
$request = $this->getRequest();
$userName = $sqlHelper->forSql(trim($request['userName'] ?? ''));
$userContact = $sqlHelper->forSql(trim($request['userContact'] ?? ''));
$parentLinkHash = $sqlHelper->forSql(trim($request['parentLinkHash'] ?? ''));
$ownerId = (int)($request['ownerId'] ?? null);
$ownerCreated = ($request['ownerCreated'] ?? null) === 'true';
$contactDataError = !SharingSharingEventManager::validateContactData($userContact);
$contactNameError = !SharingSharingEventManager::validateContactName($userName);
if ($contactDataError || $contactNameError)
{
$this->addError(new Error(Loc::getMessage('EC_SHARINGAJAX_INCORRECT_CONTACT_DATA')));
return [
'contactDataError' => $contactDataError,
'contactNameError' => $contactNameError,
];
}
/** @var SharingLinkLink $link */
$link = $this->getSharingLinkFactory()->getLinkByHash($parentLinkHash);
if (
!$link
|| !$link->isActive()
|| $link->getObjectType() !== SharingLinkHelper::USER_SHARING_TYPE
|| $link->getObjectId() !== $ownerId
)
{
$this->addError(new Error('Link not found'));
return $result;
}
$userParams = [
'NAME' => $userName,
'CONTACT_DATA' => $userContact,
];
if ($ownerCreated)
{
$userId = SharingUser::getInstance()->getAnonymousUserForOwner($userParams);
}
else
{
$userId = SharingUser::getInstance()->login(true, $userParams);
}
if (!$userId)
{
$this->addError(new Error(Loc::getMessage('EC_SHARINGAJAX_USER_NOT_FOUND')));
return $result;
}
$eventData = SharingSharingEventManager::getEventDataFromRequest($request);
$eventData['eventName'] = SharingSharingEventManager::getSharingEventNameByUserName($userName);
$event = SharingSharingEventManager::prepareEventForSave($eventData, $userId);
$sharingEventManager = new SharingSharingEventManager($event, $userId, $ownerId, $parentLinkHash);
$eventCreateResult = $sharingEventManager->createEvent(false, $userParams['NAME']);
if ($errors = $eventCreateResult->getErrors())
{
$this->addError($errors[0]);
return $result;
}
/** @var Event $event */
$event = $eventCreateResult->getData()['event'];
/** @var SharingLinkEventLink $eventLink */
$eventLink = $eventCreateResult->getData()['eventLink'];
// Auto-accepting meeting for manager
CCalendarEvent::SetMeetingStatus([
'eventId' => $event->getId(),
'userId' => $ownerId,
'status' => 'Y',
'hostNotification' => false,
'sharingAutoAccept' => true,
]);
/** @var Event $event */
$event = (new MappersFactory())->getEvent()->getById($event->getId());
$notificationService = null;
if (SharingEventManager::isEmailCorrect($userContact))
{
$notificationService = (new SharingNotificationMail())
->setEventLink($eventLink)
->setEvent($event)
;
}
if ($notificationService !== null)
{
$notificationService->notifyAboutMeetingStatus($userContact);
}
return [
'eventId' => $event->getId(),
'eventName' => $event->getName(),
'eventLinkId' => $eventLink->getId(),
'eventLinkHash' => $eventLink->getHash(),
'eventLinkShortUrl' => SharingHelper::getShortUrl($eventLink->getUrl()),
];
}