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