• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/datasyncmanager.php
  • Класс: BitrixCalendarSyncManagersDataSyncManager
  • Вызов: DataSyncManager::prepareRecurrenceRule
private function prepareRecurrenceRule(array $event, array &$fields): void
{
	$fields['RRULE']['FREQ'] = $event['PROPERTY_PERIOD_TYPE'];
	$fields['RRULE']['INTERVAL'] = $event['PROPERTY_PERIOD_COUNT'];

	if (empty($fields['DT_LENGTH']) && !empty($event['PROPERTY_EVENT_LENGTH']))
	{
		$fields['DT_LENGTH'] = (int)$fields['PROPERTY_EVENT_LENGTH'];
	}
	else if (isset($event['DT_TO_TS'], $event['DT_FROM_TS']))
	{
		$fields['DT_LENGTH'] = $event['DT_TO_TS'] - $event['DT_FROM_TS'];
	}
	else
	{
		$fields['DT_LENGTH'] = null;
	}

	if ($fields['RRULE']['FREQ'] === 'WEEKLY' && !empty($event['PROPERTY_PERIOD_ADDITIONAL']))
	{
		$fields['RRULE']['BYDAY'] = [];
		$days = explode(',', $event['PROPERTY_PERIOD_ADDITIONAL']);
		foreach ($days as $day)
		{
			$day = CCalendar::WeekDayByInd($day, false);
			if ($day !== false)
			{
				$fields['RRULE']['BYDAY'][] = $day;
			}
		}
		$fields['RRULE']['BYDAY'] = implode(',', $fields['RRULE']['BYDAY']);
	}

	if (!empty($event['PROPERTY_RRULE_COUNT']))
	{
		$fields['RRULE']['COUNT'] = $event['PROPERTY_RRULE_COUNT'];
	}
	else if (!empty($event['PROPERTY_PERIOD_UNTIL']))
	{
		$fields['RRULE']['UNTIL'] = $event['PROPERTY_PERIOD_UNTIL'];
	}
	else
	{
		$fields['RRULE']['UNTIL'] = $event['DT_TO_TS'] ?? null;
	}

	if (!empty($event['EXDATE']))
	{
		$fields['EXDATE'] = $event['EXDATE'];
	}
}