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