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