• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/ical/mailinvitation/incominginvitationrequesthandler.php
  • Класс: BitrixCalendarICalMailInvitationIncomingInvitationRequestHandler
  • Вызов: IncomingInvitationRequestHandler::prepareEventToSave
protected function prepareEventToSave(Event $icalEvent): 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;
		}
	}

	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;
		}
	}

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

	if ($icalEvent->getUid() !== null)
	{
		$event['DAV_XML_ID'] = $icalEvent->getUid();
	}

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

	if ($icalEvent->getCreated() !== null)
	{
		$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)
	{
		$event['VERSION'] = $icalEvent->getSequence()->getValue();
	}

	if ($icalEvent->getRRule() !== null)
	{
		$rrule = $this->parseRRule($icalEvent->getRRule());
		if (isset($rrule['FREQ']) && in_array($rrule['FREQ'], Dictionary::RRULE_FREQUENCY, true))
		{
			$event['RRULE']['FREQ'] = $rrule['FREQ'];

			if (isset($rrule['COUNT']) && (int)$rrule['COUNT'] > 0)
			{
				$event['RRULE']['COUNT'] = $rrule['COUNT'];
			}
			elseif (isset($rrule['UNTIL']))
			{
				$now = Util::getDateObject(null, false)->getTimestamp();
				$until = Helper::getIcalDateTime($rrule['UNTIL']);
				if ($now < $until->getTimestamp())
				{
					$event['RRULE']['UNTIL'] = $until->format(Date::convertFormatToPhp(FORMAT_DATE));
				}
			}

			if ($rrule['FREQ'] === Dictionary::RRULE_FREQUENCY['weekly'] && isset($rrule['BYDAY']))
			{
				$event['RRULE']['BYDAY'] = $rrule['BYDAY'];
			}

			if (isset($rrule['INTERVAL']))
			{
				$event['RRULE']['INTERVAL'] = $rrule['INTERVAL'];
			}
			else
			{
				$event['RRULE']['INTERVAL'] = 1;
			}
		}
	}

	$event['DESCRIPTION'] = $icalEvent->getDescription() !== null
		? $icalEvent->getDescription()->getValue()
		: ''
	;


	$this->organizer = $this->parseOrganizer($icalEvent->getOrganizer());
	$event['MEETING_HOST'] = Helper::getUserIdByEmail($this->organizer);

	$event['OWNER_ID'] = $this->userId;
	$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() !== null
			? $icalEvent->getOrganizer()->getParameterValueByName('cn')
			: $this->organizer['EMAIL'],
		'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;
}