- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/vendorsynchronization.php
- Класс: BitrixCalendarSyncManagersVendorSynchronization
- Вызов: VendorSynchronization::deleteEvent
public function deleteEvent(Event $event, EventContext $context): Result
{
global $DB;
$mainResult = new Result();
$resultData = [];
$factory = $this->factory;
$sectionLink = $context->getSectionConnection();
if (!$sectionLink)
{
// TODO: can't be, maybe need log
$mainResult->addError(new Error('Section connection not found'));
return $mainResult;
}
$manager = $factory->getEventManager();
$eventLink = $context->getEventConnection();
if ($eventLink && $eventLink->getVendorEventId() && $sectionLink->isActive())
{
try
{
$result = $manager->delete($event, $context);
if ($result->isSuccess())
{
if ($event->getRecurringRule())
{
$childToDelete = [];
$childIds = EventConnectionTable::query()
->setSelect(['ID', 'EVENT'])
->where('EVENT.RECURRENCE_ID', $event->getParentId())
->where('EVENT.OWNER_ID', $event->getOwner()->getId())
->exec()
;
while ($child = $childIds->fetch())
{
$childToDelete[] = $child['ID'];
}
if ($childToDelete)
{
$DB->Query("DELETE FROM b_calendar_event_connection
WHERE ID IN (" . implode(',', $childToDelete) . ")
AND CONNECTION_ID = '{$factory->getConnection()->getId()}';
");
}
}
$status = Dictionary::SYNC_STATUS['success'];
$this->mapperFactory->getEventConnection()->delete($eventLink);
}
else
{
$status = Dictionary::SYNC_STATUS['delete'];
$eventLink->setLastSyncStatus($status);
$this->mapperFactory->getEventConnection()->update($eventLink);
}
}
catch (NotFoundException $e)
{
$status = Dictionary::SYNC_STATUS['delete'];
$this->mapperFactory->getEventConnection()->delete($eventLink);
}
}
elseif ($eventLink && !$sectionLink->isActive())
{
$status = Dictionary::SYNC_STATUS['delete'];
$eventLink->setLastSyncStatus($status);
$this->mapperFactory->getEventConnection()->update($eventLink);
}
else
{
$status = Dictionary::SYNC_STATUS['success'];
}
$resultData[$factory->getConnection()->getVendor()->getCode()] = [
'status' => $status,
];
return $mainResult->setData($resultData);
}