- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/datasyncmanager.php
- Класс: BitrixCalendarSyncManagersDataSyncManager
- Вызов: DataSyncManager::prepareEventParams
private function prepareEventParams(array $event, int $sectionId, int $entityId): Event
{
$fields = [
'ID' => (int)($event['ID'] ?? null),
'NAME' => $this->prepareName($event['NAME']),
'CAL_TYPE' => self::ENTITY_TYPE,
'DESCRIPTION' => $event['DESCRIPTION'] ?? '',
'OWNER_ID' => $entityId,
'CREATED_BY' => $entityId,
'ATTENDEES_CODES' => ['U' . $entityId],
'SECTIONS' => [$sectionId],
'ACCESSIBILITY' => !empty($event['ID'])
? $event['ACCESSIBILITY']
: ($event['PROPERTY_ACCESSIBILITY'] ?? 'busy')
,
'IS_MEETING' => $event['IS_MEETING'] ? true : null,
'IMPORTANCE' => $event['IMPORTANCE'] ?? 'normal',
'REMIND' => is_array($event['REMIND'] ?? null) ? $event['REMIND'] : [],
'RRULE' => is_array($event['RRULE'] ?? null) ? $event['RRULE'] : [],
'VERSION' => (int)$event['VERSION'],
'PRIVATE_EVENT' => (bool)($event['PRIVATE_EVENT'] ?? null),
'DATE_FROM' => $event['DATE_FROM'],
'DATE_TO' => $event['DATE_TO'],
'TZ_FROM' => $event['TZ_FROM'],
'TZ_TO' => $event['TZ_TO'],
'SKIP_TIME' => $event['SKIP_TIME'] ? 'Y' : 'N',
'ACTIVE' => 'Y',
'DELETED' => 'N',
'TIMESTAMP_X' => new DateTime(),
];
if (!empty($event['RECURRENCE_ID']))
{
$fields['RECURRENCE_ID'] = $event['RECURRENCE_ID'];
}
if (!empty($event['MEETING']))
{
$fields['MEETING'] = $event['MEETING'];
$fields['MEETING_HOST'] = $event['MEETING']['MEETING_CREATOR'] ?? null;
}
else
{
$fields['MEETING'] = [
'HOST_NAME' => CCalendar::GetUserName($entityId),
'NOTIFY' => true,
'REINVITE' => false,
'ALLOW_INVITE' => false,
'MEETING_CREATOR' => $entityId,
'HIDE_GUESTS' => true,
'LANGUAGE_ID' => CCalendar::getUserLanguageId($entityId)
];
$fields['MEETING_HOST'] = $entityId;
$fields['MEETING_STATUS'] = 'H';
}
if (!empty($event['ATTENDEES_CODES']))
{
$fields['ATTENDEES_CODES'] = $event['ATTENDEES_CODES'];
}
if (!empty($event['RECURRENCE_ID_DATE']))
{
$fields['ORIGINAL_DATE_FROM'] = $event['RECURRENCE_ID_DATE'];
}
if (!empty($fields['ORIGINAL_DATE_FROM']) && !empty($fields['RECURRENCE_ID']))
{
$fields['RELATIONS'] = ['COMMENT_XML_ID' => CCalendarEvent::GetEventCommentXmlId($fields)];
}
if (empty($fields['TZ_TO']) && $fields['SKIP_TIME'] === 'N')
{
$currentTimezone = (new DateTime())->getTimeZone()->getName();
$fields['TZ_TO'] = $currentTimezone;
$fields['TZ_FROM'] = $currentTimezone;
}
if (!empty($event['SKIP_TIME']))
{
$fields['DATE_FROM'] = CCalendar::Date(CCalendar::Timestamp($fields['DATE_FROM'], false));
$fields['DATE_TO'] = CCalendar::Date(
CCalendar::Timestamp($fields['DATE_TO']) - CCalendar::GetDayLen(),
false
);
}
if (!empty($event['PROPERTY_REMIND_SETTINGS']))
{
if (is_array($event['PROPERTY_REMIND_SETTINGS']))
{
foreach ($event['PROPERTY_REMIND_SETTINGS'] as $remind)
{
$parsed = explode('_', $remind);
$this->prepareRemind($parsed, $fields);
}
}
else
{
$parsed = explode('_', $event['PROPERTY_REMIND_SETTINGS']);
$this->prepareRemind($parsed, $fields);
}
}
if (!empty($event['PROPERTY_IMPORTANCE']))
{
$fields['IMPORTANCE'] = $event['PROPERTY_IMPORTANCE'];
}
if (!empty($event['PROPERTY_LOCATION']))
{
$fields['LOCATION'] = RoomsUtil::unParseTextLocation($event['PROPERTY_LOCATION']);
}
if (!empty($event['DETAIL_TEXT']))
{
$this->prepareDescription($event, $fields);
}
//RRULE SEGMENT
if (
!empty($event['PROPERTY_PERIOD_TYPE'])
&& in_array($event['PROPERTY_PERIOD_TYPE'], ['DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'])
)
{
$this->prepareRecurrenceRule($event, $fields);
}
return (new EventBuilderFromArray($fields))->build();
}