- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/office365/eventmanager.php
- Класс: Bitrix\Calendar\Sync\Office365\EventManager
- Вызов: EventManager::saveRecurrence
public function saveRecurrence(
SyncEvent $recurrenceEvent,
SectionConnection $sectionConnection,
Context $context
): Result
{
$result = new Result();
if ($recurrenceEvent->getEventConnection())
{
try
{
$masterResult = $this->updateRecurrenceInstance($recurrenceEvent, $context);
}
catch(Calendar\Sync\Exceptions\NotFoundException $e)
{
$this->getEventConnectionMapper()->delete($recurrenceEvent->getEventConnection());
$recurrenceEvent->setEventConnection(null);
return $this->saveRecurrence($recurrenceEvent, $sectionConnection, $context);
}
}
else
{
$masterResult = $this->createRecurrenceInstance($recurrenceEvent, $sectionConnection, $context);
}
if (!$masterResult->isSuccess())
{
$result->addErrors($masterResult->getErrors());
return $result;
}
if ($recurrenceEvent->getEventConnection())
{
$recurrenceEvent->getEventConnection()
->setLastSyncStatus(Calendar\Sync\Dictionary::SYNC_STATUS['success']);
}
$recurrenceEvent
->setAction(Calendar\Sync\Dictionary::SYNC_STATUS['success']);
$excludes = $this->getExcludedDatesCollection($recurrenceEvent);
if ($recurrenceEvent->getInstanceMap())
{
/** @var SyncEvent $instance */
foreach ($recurrenceEvent->getInstanceMap()->getCollection() as $instance)
{
if ($instance->getEvent()->getOriginalDateFrom() === null)
{
$result->addError(
new Main\Error('Instance is invalid - there is not original date from. ['.$instance->getEvent()->getId().']', 400));
continue;
}
if ($instance->getEventConnection())
{
try
{
$instanceResult = $this->updateRecurrenceInstance($instance, $context, $recurrenceEvent->getEventConnection());
}
catch(Calendar\Sync\Exceptions\NotFoundException $e)
{
$this->getEventConnectionMapper()->delete($instance->getEventConnection());
$instance->setEventConnection(null);
$instanceResult = $this->createRecurrenceInstance(
$instance,
$sectionConnection,
$context,
$recurrenceEvent->getEventConnection()
);
}
}
else
{
$instanceResult = $this->createRecurrenceInstance(
$instance,
$sectionConnection,
$context,
$recurrenceEvent->getEventConnection()
);
}
$excludes->removeDateFromCollection($instance->getEvent()->getOriginalDateFrom());
if (
$instance->getEvent()->getStart()->format('Ymd')
!== $instance->getEvent()->getOriginalDateFrom()->format('Ymd')
)
{
$excludes->removeDateFromCollection($instance->getEvent()->getStart());
}
if (!$instanceResult->isSuccess())
{
$result->addErrors($instanceResult->getErrors());
}
if ($instance->getEventConnection())
{
$instance->getEventConnection()->setLastSyncStatus(Calendar\Sync\Dictionary::SYNC_STATUS['success']);
}
}
}
if ($excludes->count() > 0)
{
$context = (new EventContext())->setEventConnection($recurrenceEvent->getEventConnection());
/** @var Main\Type\Date $excludedDate */
foreach ($excludes as $excludedDate)
{
$context->add('sync', 'excludeDate', $excludedDate);
$this->deleteInstance($recurrenceEvent->getEvent(), $context);
}
}
return $result;
}