• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/office365/converter/converter.php
  • Класс: BitrixCalendarSyncOffice365ConverterConverter
  • Вызов: Converter::makeRecurringRule
private function makeRecurringRule(?Office365DtoRecurrenceDto $recurrenceDto = null): ?RecurringEventRules
{
	if (!$recurrenceDto)
	{
		return null;
	}
	switch ($recurrenceDto->pattern->type)
	{
		case Helper::RECURRENCE_TYPES['daily']:
			$result = new RecurringEventRules(
				RecurringEventRules::FREQUENCY['daily'],
				$recurrenceDto->pattern->interval
			);

			break;
		case Helper::RECURRENCE_TYPES['weekly']:
			$result = new RecurringEventRules(
				RecurringEventRules::FREQUENCY['weekly'],
				$recurrenceDto->pattern->interval
			);
			if ($recurrenceDto->pattern->daysOfWeek)
			{
				$byDay = array_map(static function ($value)
				{
					return strtoupper(substr($value, 0, 2));
				}, $recurrenceDto->pattern->daysOfWeek);

				$result->setByDay($byDay);
			}

			break;
		case Helper::RECURRENCE_TYPES['absoluteMonthly']:
			$result = new RecurringEventRules(
				RecurringEventRules::FREQUENCY['monthly'],
				$recurrenceDto->pattern->interval
			);

			break;
		case Helper::RECURRENCE_TYPES['absoluteYearly']:
			$result = new RecurringEventRules(
				RecurringEventRules::FREQUENCY['yearly'],
				$recurrenceDto->pattern->interval
			);

			break;
		default:
			return null;
	}

	if (!empty($recurrenceDto->range->numberOfOccurrences))
	{
		$result->setCount($recurrenceDto->range->numberOfOccurrences);
	}
	if ($recurrenceDto->range->endDate >= $recurrenceDto->range->startDate)
	{
		$until = new BitrixMainTypeDate($recurrenceDto->range->endDate, 'Y-m-d');
		$result->setUntil(new Date($until));
	}
	else
	{
		$result->setUntil($this->getFarFarAwayDate());
	}

	return $result;
}