- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_event.php
- Класс: CCalendarEvent
- Вызов: CCalendarEvent::GetRRULEDescription
static function GetRRULEDescription($event, $html = false, $showUntil = true)
{
$res = '';
if (!empty($event['RRULE']))
{
$event['RRULE'] = self::ParseRRULE($event['RRULE']);
if (!empty($event['RRULE']['BYDAY']))
{
$event['RRULE']['BYDAY'] = self::sortByDay($event['RRULE']['BYDAY']);
}
switch($event['RRULE']['FREQ'])
{
case 'DAILY':
if ((int)$event['RRULE']['INTERVAL'] === 1)
{
$res = GetMessage('EC_RRULE_EVERY_DAY');
}
else
{
$res = GetMessage('EC_RRULE_EVERY_DAY_1', array('#DAY#' => $event['RRULE']['INTERVAL']));
}
break;
case 'WEEKLY':
$daysList = [];
foreach ($event['RRULE']['BYDAY'] as $day)
{
$daysList[] = GetMessage('EC_'.$day);
}
$daysList = implode(', ', $daysList);
if ((int)$event['RRULE']['INTERVAL'] === 1)
{
$res = GetMessage('EC_RRULE_EVERY_WEEK', [
'#DAYS_LIST#' => $daysList
]);
}
else
{
$res = GetMessage('EC_RRULE_EVERY_WEEK_1', [
'#WEEK#' => $event['RRULE']['INTERVAL'],
'#DAYS_LIST#' => $daysList
]);
}
break;
case 'MONTHLY':
if ((int)$event['RRULE']['INTERVAL'] === 1)
{
$res = GetMessage('EC_RRULE_EVERY_MONTH');
}
else
{
$res = GetMessage('EC_RRULE_EVERY_MONTH_1', [
'#MONTH#' => $event['RRULE']['INTERVAL']
]);
}
break;
case 'YEARLY':
$fromTs = CCalendar::Timestamp($event['DATE_FROM']);
if ($event['DT_SKIP_TIME'] !== "Y")
{
$fromTs -= $event['~USER_OFFSET_FROM'] ?? 0;
}
if ((int)$event['RRULE']['INTERVAL'] === 1)
{
$res = GetMessage('EC_RRULE_EVERY_YEAR', [
'#DAY#' => FormatDate('j', $fromTs), // day
'#MONTH#' => FormatDate('n', $fromTs) // month
]);
}
else
{
$res = GetMessage('EC_RRULE_EVERY_YEAR_1', [
'#YEAR#' => $event['RRULE']['INTERVAL'],
'#DAY#' => FormatDate('j', $fromTs), // day
'#MONTH#' => FormatDate('n', $fromTs) // month
]);
}
break;
}
if ($html)
{
$res .= '
';
}
else
{
$res .= ', ';
}
if (isset($event['~DATE_FROM']))
{
$res .= GetMessage('EC_RRULE_FROM', array('#FROM_DATE#' => CCalendar::Date(CCalendar::Timestamp($event['~DATE_FROM']), false)));
}
else
{
$res .= GetMessage('EC_RRULE_FROM', array('#FROM_DATE#' => CCalendar::Date(CCalendar::Timestamp($event['DATE_FROM']), false)));
}
if ($showUntil && ($event['RRULE']['UNTIL'] ?? null) != CCalendar::GetMaxDate())
{
$res .= ' '.GetMessage('EC_RRULE_UNTIL', array('#UNTIL_DATE#' => CCalendar::Date(CCalendar::Timestamp($event['RRULE']['UNTIL']), false)));
}
elseif ($showUntil && (($event['RRULE']['COUNT'] ?? null) > 0))
{
$res .= ', '.GetMessage('EC_RRULE_COUNT', array('#COUNT#' => $event['RRULE']['COUNT']));
}
}
return $res;
}