- Модуль: dav
- Путь к файлу: ~/bitrix/modules/dav/classes/general/exchangecalendar2.php
- Класс: CDavExchangeCalendar
- Вызов: CDavExchangeCalendar::ConvertCalendarToArray
private function ConvertCalendarToArray($calendarItem): array
{
$arResultItem = [];
$arItemId = $calendarItem->GetPath("/CalendarItem/ItemId");
if (!empty($arItemId))
{
$arResultItem["XML_ID"] = $arItemId[0]->GetAttribute("Id");
$arResultItem["MODIFICATION_LABEL"] = $arItemId[0]->GetAttribute("ChangeKey");
}
$arSubject = $calendarItem->GetPath("/CalendarItem/Subject");
if (!empty($arSubject))
{
$arResultItem["NAME"] = $this->Encode($arSubject[0]->GetContent());
}
$arBody = $calendarItem->GetPath("/CalendarItem/Body");
if (!empty($arBody))
{
$arResultItem["DESCRIPTION"] = $this->Encode($arBody[0]->GetContent());
$arResultItem["DETAIL_TEXT_TYPE"] = mb_strtolower($arBody[0]->GetAttribute("BodyType"));
if (mb_strtolower($arResultItem["DETAIL_TEXT_TYPE"]) === "html")
{
$arResultItem["DESCRIPTION"] = preg_replace(
"/[s|S]*?]*?>([s|S]*?)[s|S]*/is".BX_UTF_PCRE_MODIFIER,
"\1",
$arResultItem["DESCRIPTION"]
);
}
}
$arImportance = $calendarItem->GetPath("/CalendarItem/Importance");
if (!empty($arImportance))
{
$arResultItem["PROPERTY_IMPORTANCE"] = $arImportance[0]->GetContent();
}
$arSensitivity = $calendarItem->GetPath("/CalendarItem/Sensitivity");
if (!empty($arSensitivity))
{
$arResultItem["PROPERTY_SENSITIVITY"] = $arSensitivity[0]->GetContent();
}
$arLegacyFreeBusyStatus = $calendarItem->GetPath("/CalendarItem/LegacyFreeBusyStatus");
if (!empty($arLegacyFreeBusyStatus))
{
$arResultItem["PROPERTY_FREEBUSY"] = $arLegacyFreeBusyStatus[0]->GetContent();
}
$arDateTimeCreated = $calendarItem->GetPath("/CalendarItem/DateTimeCreated");
if (!empty($arDateTimeCreated))
{
$arResultItem["DATE_CREATE"] = CDavICalendarTimeZone::GetFormattedServerDateTime($arDateTimeCreated[0]->GetContent());
}
$arResultItem["SKIP_TIME"] = false;
$arIsAllDayEvent = $calendarItem->GetPath("/CalendarItem/IsAllDayEvent");
if (!empty($arIsAllDayEvent))
{
$arResultItem["SKIP_TIME"] = $arIsAllDayEvent[0]->GetContent() === 'true';
}
$arTimezone = $calendarItem->GetPath("/CalendarItem/TimeZone");
if (!empty($arTimezone) && !$arResultItem["SKIP_TIME"])
{
$parts = explode(" ", $this->Encode($arTimezone[0]->GetContent()), 2);
$timezone = null;
if (isset($parts[1]))
{
$timezones = explode(", ", $parts[1]);
if (!empty($timezones))
{
$timezone = $this->PrepareTimezone($timezones[0]);
}
}
$arResultItem['TIMEZONE'] = $timezone !== null
? $timezone->getName()
: Util::getServerTimezoneName()
;
}
$arStart = $calendarItem->GetPath("/CalendarItem/Start");
if (!empty($arStart))
{
$dateFrom = $this->GetDateTimeFromExchangeTime($arStart[0]->GetContent());
if (!$arResultItem["SKIP_TIME"])
{
if (is_string($arResultItem['TIMEZONE']))
{
$dateFrom->setTimeZone(new DateTimeZone($arResultItem['TIMEZONE']));
}
$arResultItem["ACTIVE_FROM"] = $dateFrom->format(Date::convertFormatToPhp(FORMAT_DATETIME));
}
else
{
$arResultItem["ACTIVE_FROM"] = $dateFrom->add('+12 hours')->format(Date::convertFormatToPhp(FORMAT_DATETIME));
}
$arResultItem["DT_FROM_TS"] = MakeTimeStamp(CDavICalendarTimeZone::GetFormattedServerDateTime($arStart[0]->GetContent()));
}
$arEnd = $calendarItem->GetPath("/CalendarItem/End");
if (!empty($arEnd))
{
$dateTo = $this->GetDateTimeFromExchangeTime($arEnd[0]->GetContent());
if (!$arResultItem["SKIP_TIME"])
{
if (is_string($arResultItem['TIMEZONE']))
{
$dateTo->setTimeZone(new DateTimeZone($arResultItem['TIMEZONE']));
}
$arResultItem["ACTIVE_TO"] = $dateTo->format(Date::convertFormatToPhp(FORMAT_DATETIME));
}
else
{
$arResultItem["ACTIVE_TO"] = $dateTo->add('+12 hours')->format(Date::convertFormatToPhp(FORMAT_DATETIME));
}
$arResultItem["DT_TO_TS"] = MakeTimeStamp(CDavICalendarTimeZone::GetFormattedServerDateTime($arEnd[0]->GetContent()));
}
$arLocation = $calendarItem->GetPath("/CalendarItem/Location");
if (!empty($arLocation))
{
$arResultItem["PROPERTY_LOCATION"] = $this->Encode($arLocation[0]->GetContent());
}
$arReminderIsSet = $calendarItem->GetPath("/CalendarItem/ReminderIsSet");
if (!empty($arReminderIsSet) && ($arReminderIsSet[0]->GetContent() === "true"))
{
$arReminderMinutesBeforeStart = $calendarItem->GetPath("/CalendarItem/ReminderMinutesBeforeStart");
if (!empty($arReminderMinutesBeforeStart))
{
$arResultItem["PROPERTY_REMIND_SETTINGS"] = $arReminderMinutesBeforeStart[0]->GetContent()."_min";
$arResultItem["REMINDER_MINUTES_BEFORE_START"] = $arReminderMinutesBeforeStart[0]->GetContent();
}
}
$arIsRecurring = $calendarItem->GetPath("/CalendarItem/IsRecurring");
if (!empty($arIsRecurring))
{
$arResultItem["IS_RECURRING"] = ($arIsRecurring[0]->GetContent() === "true");
}
$arCalendarItemType = $calendarItem->GetPath("/CalendarItem/CalendarItemType");
if (!empty($arCalendarItemType))
{
$arResultItem["CALENDAR_ITEM_TYPE"] = $arCalendarItemType[0]->GetContent();
$arResultItem["IS_RECURRING"] = ($arResultItem["CALENDAR_ITEM_TYPE"] !== "Single");
}
$arRecurrence = $calendarItem->GetPath("/CalendarItem/Recurrence");
if (!empty($arRecurrence))
{
$arResultItem = array_merge($arResultItem, $this->ConvertRecurrenceToArray($arRecurrence[0]));
}
$arIsMeeting = $calendarItem->GetPath("/CalendarItem/IsMeeting");
if (!empty($arIsMeeting))
{
$arResultItem["IS_MEETING"] = ($arIsMeeting[0]->GetContent() === "true");
}
$arResultItem["ATTENDEES_EMAIL_LIST"] = [];
$arResultItem["ATTENDEES_RESPONSE"] = [];
if (isset($arResultItem["IS_MEETING"]) && $arResultItem["IS_MEETING"])
{
$arRequiredAttendees = $calendarItem->GetPath("/CalendarItem/RequiredAttendees");
if (!empty($arRequiredAttendees))
{
$arRequiredAttendees = $arRequiredAttendees[0]->GetContent();
foreach ($arRequiredAttendees as $requiredAttendee)
{
$email = $requiredAttendee->GetPath("/Attendee/Mailbox/EmailAddress");
if (!empty($email))
{
$email = $email[0]->GetContent();
$response = $requiredAttendee->GetPath("/Attendee/ResponseType");
$response = !empty($response) ? $response[0]->GetContent() : 'Unknown';
$arResultItem["ATTENDEES_EMAIL_LIST"][] = $email;
$arResultItem["ATTENDEES_RESPONSE"][$email] = $response;
}
}
}
// IsResponseRequested
// MyResponseType > NoResponseReceived|Organizer
$organizerEmail = $calendarItem->GetPath("/CalendarItem/Organizer/Mailbox/EmailAddress");
if ($organizerEmail && $organizerEmail[0])
{
$arResultItem["ORGANIZER_EMAIL"] = $organizerEmail[0]->GetContent();
if (
!empty($organizerEmail)
&& !in_array($arResultItem["ORGANIZER_EMAIL"], $arResultItem["ATTENDEES_EMAIL_LIST"], true)
)
{
$arResultItem["ATTENDEES_EMAIL_LIST"] = array_merge([$arResultItem["ORGANIZER_EMAIL"]], $arResultItem["ATTENDEES_EMAIL_LIST"]);
}
}
$arResultItem["IS_MEETING"] = !empty($arResultItem["ATTENDEES_EMAIL_LIST"]);
}
return $arResultItem;
}