- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_event.php
- Класс: CCalendarEvent
- Вызов: CCalendarEvent::CheckFields
static function CheckFields(&$arFields, $currentEvent = [], $userId = false)
{
$arFields['ID'] = (int)($arFields['ID'] ?? null);
$arFields['PARENT_ID'] = (int)($arFields['PARENT_ID'] ?? 0);
$arFields['OWNER_ID'] = (int)($arFields['OWNER_ID'] ?? 0);
if (!isset($arFields['TIMESTAMP_X']))
{
$arFields['TIMESTAMP_X'] = CCalendar::Date(time(), true, false);
}
if (!$userId)
{
$userId = CCalendar::GetCurUserId();
}
if (!isset($arFields['DT_SKIP_TIME']) && isset($currentEvent['DT_SKIP_TIME']))
{
$arFields['DT_SKIP_TIME'] = $currentEvent['DT_SKIP_TIME'];
}
if (!isset($arFields['DATE_FROM']) && isset($currentEvent['DATE_FROM']))
{
$arFields['DATE_FROM'] = $currentEvent['DATE_FROM'];
}
if (!isset($arFields['DATE_TO']) && isset($currentEvent['DATE_TO']))
{
$arFields['DATE_TO'] = $currentEvent['DATE_TO'];
}
$isNewEvent = !isset($arFields['ID']) || $arFields['ID'] <= 0;
if (!isset($arFields['DATE_CREATE']) && $isNewEvent)
{
$arFields['DATE_CREATE'] = $arFields['TIMESTAMP_X'];
}
// Skip time
if (isset($arFields['SKIP_TIME']))
{
$arFields['DT_SKIP_TIME'] = $arFields['SKIP_TIME'] ? 'Y' : 'N';
unset($arFields['SKIP_TIME']);
}
elseif (isset($arFields['DT_SKIP_TIME']) && $arFields['DT_SKIP_TIME'] !== 'Y' && $arFields['DT_SKIP_TIME'] !== 'N')
{
unset($arFields['DT_SKIP_TIME']);
}
unset($arFields['DT_FROM'], $arFields['DT_TO']);
$arFields['DT_SKIP_TIME'] = ($arFields['DT_SKIP_TIME'] ?? null) !== 'Y' ? 'N' : 'Y';
$fromTs = CCalendar::Timestamp($arFields['DATE_FROM'], false, $arFields['DT_SKIP_TIME'] !== 'Y');
$toTs = CCalendar::Timestamp($arFields['DATE_TO'], false, $arFields['DT_SKIP_TIME'] !== 'Y');
$arFields['DATE_FROM'] = CCalendar::Date($fromTs);
$arFields['DATE_TO'] = CCalendar::Date($toTs);
if (!$fromTs)
{
$arFields['DATE_FROM'] = FormatDate("SHORT", time());
$fromTs = CCalendar::Timestamp($arFields['DATE_FROM'], false, false);
if (!$toTs)
{
$arFields['DATE_TO'] = $arFields['DATE_FROM'];
$toTs = $fromTs;
$arFields['DT_SKIP_TIME'] = 'Y';
}
}
elseif (!$toTs)
{
$arFields['DATE_TO'] = $arFields['DATE_FROM'];
$toTs = $fromTs;
}
if (($arFields['DT_SKIP_TIME'] ?? null) !== 'Y')
{
$arFields['DT_SKIP_TIME'] = 'N';
if (!isset($arFields['TZ_FROM']) && isset($currentEvent['TZ_FROM']))
{
$arFields['TZ_FROM'] = $currentEvent['TZ_FROM'];
}
if (!isset($arFields['TZ_TO']) && isset($currentEvent['TZ_TO']))
{
$arFields['TZ_TO'] = $currentEvent['TZ_TO'];
}
if (!isset($arFields['TZ_FROM']) && !isset($arFields['TZ_TO']))
{
$userTimezoneName = CCalendar::GetUserTimezoneName($userId, true);
$arFields['TZ_FROM'] = $userTimezoneName;
$arFields['TZ_TO'] = $userTimezoneName;
}
if (!isset($arFields['TZ_OFFSET_FROM']))
{
$arFields['TZ_OFFSET_FROM'] = CCalendar::GetTimezoneOffset($arFields['TZ_FROM'], $fromTs);
}
if (!isset($arFields['TZ_OFFSET_TO']))
{
$arFields['TZ_OFFSET_TO'] = CCalendar::GetTimezoneOffset($arFields['TZ_TO'], $toTs);
}
}
if (!isset($arFields['TZ_OFFSET_FROM']))
{
$arFields['TZ_OFFSET_FROM'] = 0;
}
if (!isset($arFields['TZ_OFFSET_TO']))
{
$arFields['TZ_OFFSET_TO'] = 0;
}
if (!isset($arFields['DATE_FROM_TS_UTC']))
{
$arFields['DATE_FROM_TS_UTC'] = $fromTs - $arFields['TZ_OFFSET_FROM'];
}
if (!isset($arFields['DATE_TO_TS_UTC']))
{
$arFields['DATE_TO_TS_UTC'] = $toTs - $arFields['TZ_OFFSET_TO'];
}
if ($arFields['DATE_FROM_TS_UTC'] > $arFields['DATE_TO_TS_UTC'])
{
$arFields['DATE_TO'] = $arFields['DATE_FROM'];
$arFields['DATE_TO_TS_UTC'] = $arFields['DATE_FROM_TS_UTC'];
$arFields['TZ_OFFSET_TO'] = $arFields['TZ_OFFSET_FROM'];
$arFields['TZ_TO'] = $arFields['TZ_FROM'];
}
$h24 = 60 * 60 * 24; // 24 hours
if (($arFields['DT_SKIP_TIME'] ?? null) === 'Y')
{
unset($arFields['TZ_FROM'], $arFields['TZ_TO'], $arFields['TZ_OFFSET_FROM'], $arFields['TZ_OFFSET_TO']);
}
// Event length in seconds
if (!isset($arFields['DT_LENGTH']) || (int)$arFields['DT_LENGTH'] === 0)
{
if ((int)$fromTs === (int)$toTs && date('H:i', $fromTs) === '00:00' && $arFields['DT_SKIP_TIME'] === 'Y') // One day
{
$arFields['DT_LENGTH'] = $h24;
}
else
{
$arFields['DT_LENGTH'] = (int)($arFields['DATE_TO_TS_UTC'] - $arFields['DATE_FROM_TS_UTC']);
if (($arFields['DT_SKIP_TIME'] ?? null) === "Y") // We have dates without times
{
$arFields['DT_LENGTH'] += $h24;
}
}
}
if (empty($arFields['VERSION']))
{
$arFields['VERSION'] = 1;
}
// Accessibility
$arFields['ACCESSIBILITY'] = mb_strtolower(trim($arFields['ACCESSIBILITY'] ?? ''));
if (!in_array($arFields['ACCESSIBILITY'], ['busy', 'quest', 'free', 'absent'], true))
{
$arFields['ACCESSIBILITY'] = 'busy';
}
// Importance
$arFields['IMPORTANCE'] = mb_strtolower(trim($arFields['IMPORTANCE'] ?? ''));
if (!in_array($arFields['IMPORTANCE'], ['high', 'normal', 'low']))
{
$arFields['IMPORTANCE'] = 'normal';
}
// Color
$arFields['COLOR'] = CCalendar::Color($arFields['COLOR'] ?? null, false);
// Section
if (
isset($arFields['SECTIONS'])
&& !is_array($arFields['SECTIONS'])
&& (int)$arFields['SECTIONS'] > 0
)
{
$arFields['SECTIONS'] = (array)((int)($arFields['SECTIONS'] ?? null));
}
self::checkRecurringRuleField($arFields, $toTs, ($currentEvent['EXDATE'] ?? null));
// Location
if (!isset($arFields['LOCATION']) || !is_array($arFields['LOCATION']))
{
$arFields['LOCATION'] = [
"NEW" => is_string($arFields['LOCATION'] ?? null)
? $arFields['LOCATION']
: ""
];
}
// Private
$arFields['PRIVATE_EVENT'] = isset($arFields['PRIVATE_EVENT']) && $arFields['PRIVATE_EVENT'];
return true;
}