• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/office365/converter/eventconverter.php
  • Класс: BitrixCalendarSyncOffice365ConverterEventConverter
  • Вызов: EventConverter::prepareRecurringForDto
private function prepareRecurringForDto(RecurringEventRules $rule, TypeDate $startDate): array
{
	$result = [
		'pattern' => [
			'interval' => $rule->getInterval(),
		],
		'range' => [],
	];
	$dayMap = [
		'MO' => 'monday',
		'TU' => 'tuesday',
		'WE' => 'wednesday',
		'TH' => 'thursday',
		'FR' => 'friday',
		'SA' => 'saturday',
		'SU' => 'sunday',
	];
	if ($rule->getFrequency() === 'WEEKLY')
	{
		$result['pattern']['type'] = 'weekly';

		$firstDayOfWeek = COption::GetOptionString('calendar', 'week_start', 'MO');
		$result['pattern']['firstDayOfWeek'] = $dayMap[$firstDayOfWeek];

		if ($rule->getByday())
		{
			$result['pattern']['daysOfWeek'] = array_map(function ($val) use ($dayMap) {
				return $dayMap[$val] ?? '';
			}, array_values($rule->getByday()));
		}
	}
	elseif ($rule->getFrequency() === 'DAILY')
	{
		$result['pattern']['type'] = 'daily';
	}
	elseif ($rule->getFrequency() === 'MONTHLY')
	{
		$result['pattern']['type'] = 'absoluteMonthly';
		$result['pattern']['interval'] = $rule->getInterval();
		$result['pattern']['dayOfMonth'] = (int) $startDate->format('d');

	}
	elseif ($rule->getFrequency() === 'YEARLY')
	{
		$result['pattern']['type'] = 'absoluteYearly';
		$result['pattern']['dayOfMonth'] = (int) $startDate->format('d');
		$result['pattern']['month'] = (int) $startDate->format('m');
	}
	$result['range']['startDate'] = $startDate->format('Y-m-d');

	if ($rule->getCount())
	{
		$result['range']['type'] = 'numbered';
		$result['range']['numberOfOccurrences'] = $rule->getCount();
		$result['range']['endDate'] = '0001-01-01';
	}
	elseif ($rule->getUntil())
	{
		$result['range']['type'] = 'endDate';
		$result['range']['endDate'] = $rule->getUntil()->format('Y-m-d');
	}
	else
	{
		$result['range']['type'] = 'noEnd';
		$result['range']['endDate'] = $this->getFarFarAwayDate();
	}

	return $result;
}