- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/office365/eventmanager.php
- Класс: BitrixCalendarSyncOffice365EventManager
- Вызов: EventManager::createRecurrenceInstance
private function createRecurrenceInstance(
SyncEvent $syncEvent,
SectionConnection $sectionConnection,
Context $context,
EventConnection $masterLink = null
): Result
{
try
{
$eventContext = new EventContext();
$eventContext->merge($context);
if ($masterLink)
{
$eventContext->setEventConnection($masterLink);
$event = (new CoreBuildersEventCloner($syncEvent->getEvent()))->build();
$result = $this->createInstance($event, $eventContext);
}
else
{
$eventContext->setSectionConnection($sectionConnection);
$event = $this->prepareMasterEvent($syncEvent);
$result = $this->create($event, $eventContext);
}
if ($result->isSuccess())
{
if (!$syncEvent->getEvent()->isDeleted())
{
if (!empty($result->getData()['event']['id']))
{
$link = (new EventConnection())
->setEvent($event)
->setConnection($sectionConnection->getConnection())
->setVersion($event->getVersion())
->setVendorEventId($result->getData()['event']['id'])
->setEntityTag($result->getData()['event']['etag'])
->setVendorVersionId($result->getData()['event']['version'])
->setRecurrenceId($result->getData()['event']['recurrence'] ?? null)
->setLastSyncStatus(CalendarSyncDictionary::SYNC_STATUS['success'])
;
$syncEvent
->setEventConnection($link)
->setAction(CalendarSyncDictionary::SYNC_STATUS['success']);
}
else
{
$errMessage = 'Unknown error of creating recurrence '
. ($masterLink ? 'master' : 'instance');
$result->addError(new MainError($errMessage, 400, ['data' => $result->getData()]));
}
}
else
{
$syncEvent->setAction(CalendarSyncDictionary::SYNC_EVENT_ACTION['delete']);
}
}
return $result;
}
catch (CoreBaseBaseException $e)
{
return (new Result())->addError(new MainError($e->getMessage()));
}
}