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