• Модуль: 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()));
	}
}