- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/vendorsynchronization.php
- Класс: BitrixCalendarSyncManagersVendorSynchronization
- Вызов: VendorSynchronization::createEvent
public function createEvent(Event $event, EventContext $context): Result
{
$mainResult = new Result();
$data = [];
$factory = $this->factory;
$manager = $factory->getEventManager();
$sectionLink = $context->getSectionConnection();
if (!$sectionLink)
{
return $mainResult->setData([$factory->getConnection()->getVendor()->getCode() => [
'status' => Dictionary::SYNC_STATUS['failed'],
'message' => 'Section link not found', // TODO: Localize?
]]);
}
$eventLink = $this->getEventConnection($event)
?? (new EventConnection())
->setEvent($event)
->setConnection($sectionLink->getConnection());
if ($sectionLink->isActive())
{
try
{
$result = $manager->create($event, $context);
if ($result->isSuccess())
{
$resultData = $result->getData();
$status = Dictionary::SYNC_STATUS['success'];
$eventLink
->setVendorEventId($resultData['event']['id'])
->setEntityTag($resultData['event']['etag'])
->setVendorVersionId($resultData['event']['version'] ?? null)
->setVersion($event->getVersion())
->setLastSyncStatus($status);
if (!empty($result->getData()['data']))
{
$eventLink->setData($result->getData()['data']);
}
}
else
{
$status = Dictionary::SYNC_STATUS['create'];
$eventLink->setLastSyncStatus($status);
}
$syncResult = [
'status' => $status,
'result' => $result,
];
}
catch (NotFoundException $e)
{
// if section was not found on service
$sectionLink->setActive(false)->setSyncToken(null)->setPageToken(null);
$this->mapperFactory->getSectionConnection()->update($sectionLink);
}
}
// dont change to "else", because active status could change in the if section
if (!$sectionLink->isActive())
{
$status = Dictionary::SYNC_STATUS['create'];
$eventLink->setLastSyncStatus($status)->setVendorEventId('');
$syncResult = [
'status' => $status,
];
}
/** @var EventConnection $eventLink */
$eventLink = $eventLink->getId()
? $this->mapperFactory->getEventConnection()->update($eventLink)
: $this->mapperFactory->getEventConnection()->create($eventLink);
$syncResult['eventConnectionId'] = $eventLink->getId();
$data['result'] = $syncResult;
return $mainResult->setData($data);
}