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