• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/core/builders/eventbuilder.php
  • Класс: BitrixCalendarCoreBuildersEventBuilder
  • Вызов: EventBuilder::prepareRecurringRule
protected function prepareRecurringRule($ruleData = null): ?RecurringEventRules
{
	if (empty($ruleData))
	{
		return null;
	}

	if (is_string($ruleData))
	{
		$ruleData = CCalendarEvent::ParseRRULE($ruleData);
	}

	if (
		isset($ruleData['FREQ'])
		&& $ruleData['FREQ'] !== 'NONE'
	)
	{
		$rule = new RecurringEventRules($ruleData['FREQ']);

		if (isset($ruleData['COUNT']))
		{
			$rule->setCount((int)$ruleData['COUNT']);
		}

		if (is_string($ruleData['UNTIL'] ?? null))
		{
			$ruleData['UNTIL'] = CCalendarEvent::convertDateToCulture($ruleData['UNTIL']);
			$rule->setUntil(new Date(Util::getDateObject($ruleData['UNTIL'])));
		}

		if (isset($ruleData['INTERVAL']))
		{
			$rule->setInterval((int)$ruleData['INTERVAL']);
		}

		if (!empty($ruleData['BYDAY']) && $ruleData['FREQ'] === RecurringEventRules::FREQUENCY_WEEKLY)
		{
			if (
				is_string($ruleData['BYDAY'])
			)
			{
				$rule->setByDay(explode(",", $ruleData['BYDAY']));
			}
			elseif (
				is_array($ruleData['BYDAY'])
			)
			{
				$rule->setByDay($ruleData['BYDAY']);
			}
		}

		return $rule;
	}

	return null;
}