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