• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/update/eventwithlocationupdate.php
  • Класс: BitrixCalendarUpdateEventWithLocationUpdate
  • Вызов: EventWithLocationUpdate::prepareLocationEvent
private function prepareLocationEvent($event, $meetingRoomArray): ?array
{
	global $DB;
	$id = (int)$event['ID'];
	$dateToRaw = strtotime($event['DATE_TO']);
	$dateFromRaw = strtotime($event['DATE_FROM']);
	$dateTo = CCalendar::Date($dateToRaw);
	$dateFrom = CCalendar::Date($dateFromRaw);

	$RRule = CCalendarEvent::ParseRRULE($event['RRULE']);
	if (isset($RRule['~UNTIL']))
	{
		unset($RRule['~UNTIL']);
	}
	if ($RRule['FREQ'] === 'WEEKLY' && !isset($RRule['BYDAY']))
	{
		return null;
	}

	$skipTime = $event['DT_SKIP_TIME'] === 'Y';

	$phraseLocationParent = 'calendar_#ROOMID#_#EVENTID#';
	$phraseLocationChild = 'calendar_#ROOMID#';
	$result = [];

	$res = $DB->Query("
		SELECT LOCATION 
		FROM b_calendar_event
		WHERE ID = " . $id . ";"
	);
	if ($location = $res->Fetch())
	{
		$location = explode("_", $location['LOCATION']);
		$mrId = $location[1];
		$roomId = $meetingRoomArray[$mrId];

		$locationEventId = RoomsManager::reserveRoom([
			'parentParams' => [
				'arFields' => [
					'DATE_FROM' => $dateFrom,
					'DATE_TO' => $dateTo,
					'TZ_FROM' => $event['TZ_FROM'],
					'TZ_TO' => $event['TZ_TO'],
					'SKIP_TIME' => $skipTime,
					'RRULE' => $RRule,
					'EXDATE' => $event['EXDATE'],
					'CREATED_BY' => (int)$event['CREATED_BY']
				],
				'userId' => (int)$event['CREATED_BY']
			],
			'room_event_id' => false,
			'room_id' => (int)$roomId
		]);

		if ($locationEventId && $roomId)
		{
			$result['parent'] = str_replace(
				['#ROOMID#', '#EVENTID#'],
				[$roomId, $locationEventId],
				$phraseLocationParent
			);
			$result['child'] = str_replace(
				['#ROOMID#'],
				[$roomId],
				$phraseLocationChild
			);
			return $result;
		}
	}

	return null;
}