• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/update/eventwithlocationupdate.php
  • Класс: BitrixCalendarUpdateEventWithLocationUpdate
  • Вызов: EventWithLocationUpdate::execute
public function execute(array &$result)
{
	$connection = Application::getConnection();
	$sqlHelper = $connection->getSqlHelper();
	if (Loader::includeModule("calendar")
		&& (Option::get('calendar', 'eventWithLocationConverted', 'N') === 'Y')
	)
	{
		RoomsManager::createInstance()->clearCache();
		return self::FINISH_EXECUTION;
	}
	$status = $this->loadCurrentStatus();

	$newStatus = [
		'count' => $status['count'],
		'steps' => $status['steps'],
		'newFinished' => $status['newFinished'],
		'lastEventId' => $status['lastEventId']
	];

	// Update calendar room events
	if (!$status['newFinished'])
	{
		$res = $this->getLocationEvent($newStatus['lastEventId']);
		while ($event = $res->Fetch())
		{
			$eventId = (int)$event['ID'];
			$newStatus['lastEventId'] = $eventId;

			$parentRes = $this->getLocationParentEvent($eventId);
			if ($parentEvent = $parentRes->Fetch())
			{
				$ownerName = $sqlHelper->forSql(CCalendar::GetUserName($parentEvent['CREATED_BY']));
				$parentId = (int)$parentEvent['ID'];
				$this->updateLocationEvent($parentId, $ownerName, $eventId);
			}
			else
			{
				$this->deleteEvent($eventId);
			}

			$newStatus['steps']++;
		}

		if (isset($newStatus['lastEventId']) && $res->SelectedRowsCount() !== 0)
		{
			Option::set('calendar', 'eventWithLocationConvertedStatus', serialize($newStatus));
			$result = [
				'title' => Loc::getMessage("CALENDAR_UPDATE_EVENT_WITH_LOCATION"),
				'count' => $newStatus['count'],
				'steps' => $newStatus['steps'],
				'lastEventId' => $newStatus['lastEventId'],
				'newFinished' => $newStatus['newFinished']
			];

			return self::CONTINUE_EXECUTION;
		}

		$newStatus['newFinished'] = true;
		$newStatus['lastEventId'] = PHP_INT_MAX;
	}

	//update IBlock room events
	$meetingRoomArray = $this->getMeetingRoomArray();

	if ($meetingRoomArray !== null)
	{
		$res = $this->getIBlockEvent($newStatus['lastEventId']);
		while ($event = $res->Fetch())
		{
			$eventId = (int)$event['ID'];
			$newStatus['lastEventId'] = $eventId;
			$phrases = $this->prepareLocationEvent($event, $meetingRoomArray);

			if ($phrases !== null && isset($phrases['child']) && isset($phrases['parent']))
			{
				$this->updateLocationValue($phrases['parent'], $eventId);
				if ($event['IS_MEETING'])
				{
					$this->updateLocationValueForChildEvents($phrases['child'], $eventId);
				}
				RoomsManager::setEventIdForLocation($eventId);
			}

			$newStatus['steps']++;
		}

		if (isset($newStatus['lastEventId']) && $res->SelectedRowsCount() !== 0)
		{
			Option::set('calendar', 'eventWithLocationConvertedStatus', serialize($newStatus));
			$result = [
				'title' => Loc::getMessage("CALENDAR_UPDATE_EVENT_WITH_LOCATION"),
				'count' => $newStatus['count'],
				'steps' => $newStatus['steps'],
				'lastEventId' => $newStatus['lastEventId'],
				'newFinished' => $newStatus['newFinished']
			];

			return self::CONTINUE_EXECUTION;
		}
	}

	Option::set('calendar', 'eventWithLocationConverted', 'Y');
	Option::delete('calendar', ['name' => 'eventWithLocationConvertedStatus']);
	RoomsManager::createInstance()->clearCache();

	return self::FINISH_EXECUTION;
}