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