- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/vendorsynchronization.php
- Класс: BitrixCalendarSyncManagersVendorSynchronization
- Вызов: VendorSynchronization::updateRecurrence
public function updateRecurrence(SyncEvent $recurrenceEvent, EventContext $context): Result
{
$mainResult = new Result();
$resultData = [];
$factory = $this->factory;
$manager = $factory->getEventManager();
/** @var SectionConnection $sectionLink */
$sectionLink = $context->getSectionConnection();
if (!$sectionLink)
{
$mainResult->addError(new Error('Section connection not found'));
return $mainResult;
}
$context->add('sync', 'vendorSectionId', $sectionLink->getVendorSectionId());
$recurrenceEvent->getEvent()->setUid(
$recurrenceEvent->getEventConnection()->getVendorEventId()
);
if (
(int)$recurrenceEvent->getEventConnection()->getEventVersion()
=== $recurrenceEvent->getEvent()->getVersion()
)
{
$result = new Result();
$result->setData([
'event' => [
'id' => $recurrenceEvent->getEventConnection()->getVendorEventId(),
'etag' => $recurrenceEvent->getEventConnection()->getEntityTag(),
],
]);
$status = Dictionary::SYNC_STATUS['success'];
}
else
{
try
{
$result = $manager->updateRecurrence($recurrenceEvent, $sectionLink, $context);
if ($result->isSuccess())
{
$masterResult = $this->updateEventLink($recurrenceEvent);
$instanceResult = [];
/** @var SyncEvent $instance */
foreach ($recurrenceEvent->getInstanceMap()->getCollection() as $instance)
{
if ($instance->getEventConnection() && $instance->getEventConnection()->getId())
{
$instanceResult[] = $this->updateEventLink($instance);
}
else
{
$instanceResult[] = $this->createEventLink(
$instance,
$this->factory->getConnection()->getId()
);
}
}
$status = Dictionary::SYNC_STATUS['success'];
}
else
{
$status = Dictionary::SYNC_STATUS['failed'];
}
}
catch (NotFoundException $e)
{
$recurrenceEvent->getEvent()->setUid(null);
return $this->createRecurrence($recurrenceEvent, $context);
}
}
$resultData[$factory->getConnection()->getVendor()->getCode()] = [
'result' => $result,
'status' => $status,
'linkMasterResult' => $masterResult ?? null,
'linkInstancesResult' => $instanceResult ?? null,
];
return $mainResult->setData($resultData);
}