- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_event.php
- Класс: CCalendarEvent
- Вызов: CCalendarEvent::onEventDelete
static function onEventDelete(
array $eventData,
array $params = []
): void
{
/** @var BitrixCalendarCoreMappersFactory $mapperFactory */
$mapperFactory = BitrixMainDIServiceLocator::getInstance()->get('calendar.service.mappers.factory');
$exDate = null;
$originalDate = null;
if (!$eventData)
{
return;
}
/** @var Section $section */
$section = $mapperFactory->getSection()->getById((int)$eventData['SECTION_ID']);
if ($section === null)
{
return;
}
$factories = FactoriesCollection::createBySection($section);
if ($factories->count() === 0)
{
return;
}
$recId = $eventData['RECURRENCE_ID'];
if ($recId)
{
$exDate = $eventData['DATE_FROM'];
$originalDate = $eventData['ORIGINAL_DATE_FROM'];
$originalEventData = $eventData;
$eventData = InternalsEventTable::getRow([
'filter' => [
'=PARENT_ID' => $eventData['RECURRENCE_ID'],
'=OWNER_ID' => $eventData['OWNER_ID'],
'=DELETED' => 'N',
]
]);
}
if ($eventData)
{
$event = (new BitrixCalendarCoreBuildersEventBuilderFromArray($eventData))->build();
}
else
{
return;
}
$syncManager = new Synchronization($factories);
$context = new Context([]);
// TODO: there's a dependence of the general on the particular
if (
!empty($params['originalFrom'])
&& (int)($params['userId'] ?? null) === (int)$eventData['OWNER_ID']
)
{
$context->add('sync', 'originalFrom', $params['originalFrom']);
$connection = $mapperFactory->getConnection()->getMap([
'=ACCOUNT_TYPE' => $params['originalFrom'],
'=ENTITY_TYPE' => $event->getCalendarType(),
'=ENTITY_ID' => $event->getOwner()->getId()
])->fetch();
if ($connection)
{
$syncManager->upEventVersion(
$event,
$connection,
$arFields['VERSION'] ?? 1
);
}
}
if ($exDate)
{
$exDate = new BitrixMainTypeDate(CCalendar::Date(CCalendar::Timestamp($exDate), false));
$context->add('sync', 'excludeDate', new BitrixCalendarCoreBaseDate($exDate));
}
if ($originalDate)
{
$originalDate = new BitrixMainTypeDateTime(CCalendar::Date(CCalendar::Timestamp($originalDate)));
$context->add('sync', 'originalDate', new BitrixCalendarCoreBaseDate($originalDate));
}
if ($recId)
{
$result = $syncManager->deleteInstance($event, $context);
if (!$result->isSuccess() && !empty($originalEventData))
{
$originalEvent = (new BitrixCalendarCoreBuildersEventBuilderFromArray($originalEventData))->build();
$syncManager->deleteEvent($originalEvent, $context);
}
}
else
{
$syncManager->deleteEvent($event, $context);
}
}