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