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