• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/ical/mailinvitation/incominginvitationrequesthandler.php
  • Класс: BitrixCalendarICalMailInvitationIncomingInvitationRequestHandler
  • Вызов: IncomingInvitationRequestHandler::prepareToUpdateEvent
protected function prepareToUpdateEvent(Event $icalEvent, array $localEvent): array
{
	$event = [];

	if ($icalEvent->getStart() !== null)
	{
		if ($icalEvent->getStart()->getParameterValueByName('tzid') !== null)
		{
			$event['DATE_FROM'] = Helper::getIcalDateTime(
				$icalEvent->getStart()->getValue(),
				$icalEvent->getStart()->getParameterValueByName('tzid')
			)->format(Date::convertFormatToPhp(FORMAT_DATETIME));
			$event['TZ_FROM'] = $icalEvent->getStart()->getParameterValueByName('tzid');
		}
		else
		{
			$event['DATE_FROM'] = Helper::getIcalDate($icalEvent->getStart()->getValue())
				->format(Date::convertFormatToPhp(FORMAT_DATE));
			$event['TZ_FROM'] = null;
		}
	}
	else
	{
		$event['DATE_FROM'] = $localEvent['DATE_FROM'];
		$event['TZ_FROM'] = $localEvent['TZ_FROM'];
	}

	if ($icalEvent->getEnd() !== null)
	{
		if ($icalEvent->getEnd()->getParameterValueByName('tzid') !== null)
		{
			$event['DATE_TO'] = Helper::getIcalDateTime(
				$icalEvent->getEnd()->getValue(),
				$icalEvent->getEnd()->getParameterValueByName('tzid')
			)->format(Date::convertFormatToPhp(FORMAT_DATETIME));
			$event['TZ_TO'] = $icalEvent->getEnd()->getParameterValueByName('tzid');
		}
		else
		{
			$event['DATE_TO'] = Helper::getIcalDate($icalEvent->getEnd()->getValue())
				->format(Date::convertFormatToPhp(FORMAT_DATE));
			$event['TZ_TO'] = null;
		}
	}
	else
	{
		$event['DATE_TO'] = $localEvent['DATE_TO'];
		$event['TZ_TO'] = $localEvent['TZ_TO'];
	}

	if ($icalEvent->getName() !== null)
	{
		$event['NAME'] = $icalEvent->getName()->getValue();
	}

	if ($icalEvent->getModified() !== null)
	{
		$event['TIMESTAMP_X'] = Helper::getIcalDateTime($icalEvent->getModified()->getValue())
			->format(Date::convertFormatToPhp(FORMAT_DATETIME));
	}


	if ($icalEvent->getCreated() !== null)
	{
		$invitationDateCreate = Helper::getIcalDateTime($icalEvent->getCreated()->getValue())->getTimestamp();
		$localDateCreate = Util::getDateObject($localEvent['DATE_CREATE'])->getTimestamp();
		if ($invitationDateCreate === $localDateCreate)
		{
			$event['DATE_CREATE'] = Helper::getIcalDateTime($icalEvent->getCreated()->getValue())
				->format(Date::convertFormatToPhp(FORMAT_DATETIME))
			;
		}
	}

	if ($icalEvent->getDtStamp() !== null)
	{
		$event['DT_STAMP'] = Helper::getIcalDateTime($icalEvent->getDtStamp()->getValue())
			->format(Date::convertFormatToPhp(FORMAT_DATETIME));
	}

	if ($icalEvent->getSequence() !== null && $icalEvent->getSequence()->getValue() > $localEvent['VERSION'])
	{
		$event['VERSION'] = $icalEvent->getSequence()->getValue();
	}

	if ($icalEvent->getDescription() !== null)
	{
		$event['DESCRIPTION'] = $icalEvent->getDescription()->getValue();
	}
	else
	{
		$event['DESCRIPTION'] = null;
	}

	$organizer = [];
	if ($icalEvent->getOrganizer() !== null)
	{
		$organizer = $this->parseOrganizer($icalEvent->getOrganizer());
	}

	$event['OWNER_ID'] = $this->userId;
	$event['MEETING_HOST'] = count($organizer)
		? Helper::getUserIdByEmail($organizer)
		: $localEvent['MEETING_HOST']
	;
	$event['IS_MEETING'] = 1;
	$event['SECTION_CAL_TYPE'] = 'user';
	$event['ATTENDEES_CODES'] = ['U'.$event['OWNER_ID'], 'U'.$event['MEETING_HOST']];
	$event['MEETING_STATUS'] = $this->decision === 'accepted'
		? self::MEETING_STATUS_ACCEPTED
		: self::MEETING_STATUS_DECLINED
	;
	$event['ACCESSIBILITY'] = 'free';
	$event['IMPORTANCE'] = 'normal';
	$event['REMIND'] = [
		'type' => 'min',
		'count' => '15'
	];
	$event['MEETING'] = [
		'HOST_NAME' => $icalEvent->getOrganizer()->getParameterValueByName('cn')
			?? $organizer['EMAIL'] ?? $localEvent['MEETING']['HOST_NAME'],
		'NOTIFY' => 1,
		'REINVITE' => 0,
		'ALLOW_INVITE' => 0,
		'MEETING_CREATOR' => $event['MEETING_HOST'],
		'EXTERNAL_TYPE' => 'mail',
	];

	if ($this->decision === 'declined')
	{
		$event['DELETED'] = self::SAFE_DELETED_YES;
	}

	return $event;
}