• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/googleapisync.php
  • Класс: BitrixCalendarSyncGoogleApiSync
  • Вызов: GoogleApiSync::prepareToSaveEvent
private function prepareToSaveEvent($eventData, $params = null): array
{
	$newEvent = [];
	$newEvent['summary'] = $eventData['NAME'];

	if (!empty($eventData['ATTENDEES_CODES']) && is_string($eventData['ATTENDEES_CODES']))
	{
		$eventData['ATTENDEES_CODES'] = explode(",", $eventData['ATTENDEES_CODES']);
	}

	if (is_string($eventData['MEETING']))
	{
		$eventData['MEETING'] = unserialize($eventData['MEETING'], ['allowed_classes' => false]);
	}
	if (empty($eventData['MEETING']['LANGUAGE_ID']))
	{
		$eventData['MEETING']['LANGUAGE_ID'] = CCalendar::getUserLanguageId((int)$eventData['OWNER_ID']);
	}

	if (isset($eventData['ATTENDEES_CODES']) && is_countable($eventData['ATTENDEES_CODES']) && count($eventData['ATTENDEES_CODES']) > 1)
	{
		$users = Util::getAttendees($eventData['ATTENDEES_CODES']);
		$newEvent['description'] = Loc::getMessage('ATTENDEES_EVENT', null, $eventData['MEETING']['LANGUAGE_ID']).': '
			. stripcslashes(implode(', ', $users))
			. "rn"
			. $eventData["DESCRIPTION"];
	}
	elseif (!empty($eventData['DESCRIPTION']) && is_string($eventData['DESCRIPTION']))
	{
		$newEvent['description'] = $eventData['DESCRIPTION'];
	}

	if (!empty($eventData['ACCESSIBILITY']) && $eventData['ACCESSIBILITY'] === 'busy')
	{
		$newEvent['transparency'] = 'opaque';
	}
	else
	{
		$newEvent['transparency'] = 'transparent';
	}

	if (!empty($eventData['LOCATION']['NEW']) && is_string($eventData['LOCATION']['NEW']))
	{
		$newEvent['location'] = CCalendar::GetTextLocation($eventData['LOCATION']['NEW']);
	}
	elseif (!empty($eventData['LOCATION']) && is_string($eventData['LOCATION']))
	{
		$newEvent['location'] = CCalendar::GetTextLocation($eventData['LOCATION']);
	}

	if (!empty($eventData['REMIND']))
	{
		$newEvent['reminders'] = $this->prepareRemind($eventData);
	}

	if ($eventData['DT_SKIP_TIME'] === "Y")
	{
		$newEvent['start']['date'] = Util::getDateObject($eventData['DATE_FROM'])
			->format('Y-m-d');
		$newEvent['end']['date'] =  Util::getDateObject($eventData['DATE_TO'])
			->add('+1 day')
			->format('Y-m-d');

		if (!empty($eventData['G_EVENT_ID']))
		{
			$newEvent['start']['dateTime'] = null;
			$newEvent['end']['dateTime'] = null;
			$newEvent['start']['timeZone'] = null;
			$newEvent['end']['timeZone'] = null;
		}
	}
	else
	{
		$newEvent['start']['dateTime'] = Util::getDateObject($eventData['DATE_FROM'], false, $eventData['TZ_FROM'])
			->format(self::DATE_TIME_FORMAT);
		$newEvent['start']['timeZone'] = Util::prepareTimezone($eventData['TZ_FROM'])->getName();

		$newEvent['end']['dateTime'] = Util::getDateObject($eventData['DATE_TO'], false, $eventData['TZ_TO'])
			->format(self::DATE_TIME_FORMAT);
		$newEvent['end']['timeZone'] = Util::prepareTimezone($eventData['TZ_TO'])->getName();

		if (!empty($eventData['G_EVENT_ID']))
		{
			$newEvent['start']['date'] = null;
			$newEvent['end']['date'] = null;
		}
	}

	if (
		!empty($eventData['RRULE'])
		&& is_array($eventData['RRULE'])
		&& isset($eventData['RRULE']['FREQ'])
		&& $eventData['RRULE']['FREQ'] !== 'NONE'
	)
	{
		$newEvent['recurrence'] = $this->prepareRRule($eventData, $params['editNextEvents']);
	}

	if (isset($eventData['ORIGINAL_DATE_FROM']))
	{
		$newEvent['originalStartTime'] = Util::getDateObject($eventData['ORIGINAL_DATE_FROM'], false, $eventData['TZ_FROM'])
			->format(self::DATE_TIME_FORMAT);
	}

	if (isset($eventData['G_EVENT_ID']) && isset($eventData['RECURRENCE_ID']))
	{
		$newEvent['recurringEventId'] = $eventData['G_EVENT_ID'];
	}

	if ($params['syncCaldav'] || isset($eventData['DAV_XML_ID']))
	{
		$newEvent['iCalUID'] = $eventData['DAV_XML_ID'];
	}

	if (isset($eventData['G_EVENT_ID']))
	{
		$newEvent['id'] = $eventData['G_EVENT_ID'];
	}

	if (!empty($eventData['PRIVATE_EVENT']))
	{
		$newEvent['visibility'] = "private";
	}
	else
	{
		$newEvent['visibility'] = "public";
	}

	if (isset($eventData['VERSION']))
	{
		$newEvent['sequence'] = $eventData['VERSION'] - Util::VERSION_DIFFERENCE;
	}

	return $newEvent;
}