private function ConvertCalendarToArray($calendarItem) { $arResultItem = array(); $arItemId = $calendarItem->GetPath("/CalendarItem/ItemId"); if (count($arItemId) > 0) { $arResultItem["XML_ID"] = $arItemId[0]->GetAttribute("Id"); $arResultItem["MODIFICATION_LABEL"] = $arItemId[0]->GetAttribute("ChangeKey"); } $arSubject = $calendarItem->GetPath("/CalendarItem/Subject"); if (count($arSubject) > 0) { $arResultItem["NAME"] = $this->Encode($arSubject[0]->GetContent()); } $arBody = $calendarItem->GetPath("/CalendarItem/Body"); if (count($arBody) > 0) { $arResultItem["DESCRIPTION"] = $this->Encode($arBody[0]->GetContent()); $arResultItem["DETAIL_TEXT_TYPE"] = strtolower($arBody[0]->GetAttribute("BodyType")); if (strtolower($arResultItem["DETAIL_TEXT_TYPE"]) == "html") { $arResultItem["DESCRIPTION"] = preg_replace("/[\\s|\\S]*?<body[^>]*?>([\\s|\\S]*?)<\\/body>[\\s|\\S]*/is" . BX_UTF_PCRE_MODIFIER, "\\1", $arResultItem["DESCRIPTION"]); } } $arImportance = $calendarItem->GetPath("/CalendarItem/Importance"); if (count($arImportance) > 0) { $arResultItem["PROPERTY_IMPORTANCE"] = $arImportance[0]->GetContent(); } $arSensitivity = $calendarItem->GetPath("/CalendarItem/Sensitivity"); if (count($arSensitivity) > 0) { $arResultItem["PROPERTY_SENSITIVITY"] = $arSensitivity[0]->GetContent(); } $arLegacyFreeBusyStatus = $calendarItem->GetPath("/CalendarItem/LegacyFreeBusyStatus"); if (count($arLegacyFreeBusyStatus) > 0) { $arResultItem["PROPERTY_FREEBUSY"] = $arLegacyFreeBusyStatus[0]->GetContent(); } $arDateTimeCreated = $calendarItem->GetPath("/CalendarItem/DateTimeCreated"); if (count($arDateTimeCreated) > 0) { $arResultItem["DATE_CREATE"] = CDavICalendarTimeZone::GetFormattedServerDateTime($arDateTimeCreated[0]->GetContent()); } $arStart = $calendarItem->GetPath("/CalendarItem/Start"); if (count($arStart) > 0) { $arResultItem["ACTIVE_FROM"] = CDavICalendarTimeZone::GetFormattedServerDateTime($arStart[0]->GetContent()); $arResultItem["DT_FROM_TS"] = MakeTimeStamp(CDavICalendarTimeZone::GetFormattedServerDateTime($arStart[0]->GetContent())); } $arResultItem["SKIP_TIME"] = false; $arIsAllDayEvent = $calendarItem->GetPath("/CalendarItem/IsAllDayEvent"); if (count($arIsAllDayEvent) > 0) { $arResultItem["SKIP_TIME"] = $arIsAllDayEvent[0]->GetContent() === 'true'; } $arEnd = $calendarItem->GetPath("/CalendarItem/End"); if (count($arEnd) > 0) { $arResultItem["ACTIVE_TO"] = CDavICalendarTimeZone::GetFormattedServerDateTime($arEnd[0]->GetContent()); $arResultItem["DT_TO_TS"] = MakeTimeStamp(CDavICalendarTimeZone::GetFormattedServerDateTime($arEnd[0]->GetContent())); } $arLocation = $calendarItem->GetPath("/CalendarItem/Location"); if (count($arLocation) > 0) { $arResultItem["PROPERTY_LOCATION"] = $this->Encode($arLocation[0]->GetContent()); } $arReminderIsSet = $calendarItem->GetPath("/CalendarItem/ReminderIsSet"); if (count($arReminderIsSet) > 0 && $arReminderIsSet[0]->GetContent() == "true") { $arReminderMinutesBeforeStart = $calendarItem->GetPath("/CalendarItem/ReminderMinutesBeforeStart"); if (count($arReminderMinutesBeforeStart) > 0) { $arResultItem["PROPERTY_REMIND_SETTINGS"] = $arReminderMinutesBeforeStart[0]->GetContent() . "_min"; $arResultItem["REMINDER_MINUTES_BEFORE_START"] = $arReminderMinutesBeforeStart[0]->GetContent(); } } $arIsRecurring = $calendarItem->GetPath("/CalendarItem/IsRecurring"); if (count($arIsRecurring) > 0) { $arResultItem["IS_RECURRING"] = $arIsRecurring[0]->GetContent() == "true"; } $arCalendarItemType = $calendarItem->GetPath("/CalendarItem/CalendarItemType"); if (count($arCalendarItemType) > 0) { $arResultItem["CALENDAR_ITEM_TYPE"] = $arCalendarItemType[0]->GetContent(); $arResultItem["IS_RECURRING"] = $arResultItem["CALENDAR_ITEM_TYPE"] != "Single"; } $arRecurrence = $calendarItem->GetPath("/CalendarItem/Recurrence"); if (count($arRecurrence) > 0) { $arResultItem = array_merge($arResultItem, $this->ConvertRecurrenceToArray($arRecurrence[0])); } return $arResultItem; }
private function ConvertCalendarToArray($calendarItem) { $arResultItem = array(); $arItemId = $calendarItem->GetPath("/CalendarItem/ItemId"); if (count($arItemId) > 0) { $arResultItem["XML_ID"] = $arItemId[0]->GetAttribute("Id"); $arResultItem["MODIFICATION_LABEL"] = $arItemId[0]->GetAttribute("ChangeKey"); } $arSubject = $calendarItem->GetPath("/CalendarItem/Subject"); if (count($arSubject) > 0) { $arResultItem["NAME"] = $this->Encode($arSubject[0]->GetContent()); } $arBody = $calendarItem->GetPath("/CalendarItem/Body"); if (count($arBody) > 0) { $arResultItem["DETAIL_TEXT"] = $this->Encode($arBody[0]->GetContent()); $arResultItem["DETAIL_TEXT_TYPE"] = strtolower($arBody[0]->GetAttribute("BodyType")); if (strtolower($arResultItem["DETAIL_TEXT_TYPE"]) == "html") { $arResultItem["DETAIL_TEXT"] = trim(strip_tags($arResultItem["DETAIL_TEXT"], '<b><i><u><p><img><a><br><ol><ul><li><hr>')); } } $arImportance = $calendarItem->GetPath("/CalendarItem/Importance"); if (count($arImportance) > 0) { $arResultItem["PROPERTY_IMPORTANCE"] = $arImportance[0]->GetContent(); } $arSensitivity = $calendarItem->GetPath("/CalendarItem/Sensitivity"); if (count($arSensitivity) > 0) { $arResultItem["PROPERTY_SENSITIVITY"] = $arSensitivity[0]->GetContent(); } $arLegacyFreeBusyStatus = $calendarItem->GetPath("/CalendarItem/LegacyFreeBusyStatus"); if (count($arLegacyFreeBusyStatus) > 0) { $arResultItem["PROPERTY_FREEBUSY"] = $arLegacyFreeBusyStatus[0]->GetContent(); } $arDateTimeCreated = $calendarItem->GetPath("/CalendarItem/DateTimeCreated"); if (count($arDateTimeCreated) > 0) { $arResultItem["DATE_CREATE"] = CDavICalendarTimeZone::GetFormattedServerDateTime($arDateTimeCreated[0]->GetContent()); } $arStart = $calendarItem->GetPath("/CalendarItem/Start"); if (count($arStart) > 0) { $arResultItem["ACTIVE_FROM"] = CDavICalendarTimeZone::GetFormattedServerDateTime($arStart[0]->GetContent()); $arResultItem["DT_FROM_TS"] = MakeTimeStamp(CDavICalendarTimeZone::GetFormattedServerDateTime($arStart[0]->GetContent())); } $arEnd = $calendarItem->GetPath("/CalendarItem/End"); if (count($arEnd) > 0) { $arResultItem["ACTIVE_TO"] = CDavICalendarTimeZone::GetFormattedServerDateTime($arEnd[0]->GetContent()); $arResultItem["DT_TO_TS"] = MakeTimeStamp(CDavICalendarTimeZone::GetFormattedServerDateTime($arEnd[0]->GetContent())); } $arLocation = $calendarItem->GetPath("/CalendarItem/Location"); if (count($arLocation) > 0) { $arResultItem["PROPERTY_LOCATION"] = $this->Encode($arLocation[0]->GetContent()); } $arReminderIsSet = $calendarItem->GetPath("/CalendarItem/ReminderIsSet"); if (count($arReminderIsSet) > 0 && $arReminderIsSet[0]->GetContent() == "true") { $arReminderMinutesBeforeStart = $calendarItem->GetPath("/CalendarItem/ReminderMinutesBeforeStart"); if (count($arReminderMinutesBeforeStart) > 0) { $arResultItem["PROPERTY_REMIND_SETTINGS"] = $arReminderMinutesBeforeStart[0]->GetContent() . "_min"; $arResultItem["REMINDER_MINUTES_BEFORE_START"] = $arReminderMinutesBeforeStart[0]->GetContent(); } } $arIsRecurring = $calendarItem->GetPath("/CalendarItem/IsRecurring"); if (count($arIsRecurring) > 0) { $arResultItem["IS_RECURRING"] = $arIsRecurring[0]->GetContent() == "true"; } $arCalendarItemType = $calendarItem->GetPath("/CalendarItem/CalendarItemType"); if (count($arCalendarItemType) > 0) { $arResultItem["CALENDAR_ITEM_TYPE"] = $arCalendarItemType[0]->GetContent(); $arResultItem["IS_RECURRING"] = $arResultItem["CALENDAR_ITEM_TYPE"] != "Single"; } //if (!isset($arResultItem["IS_RECURRING"]) || !$arResultItem["IS_RECURRING"]) //{ if (date("H:i:s", MakeTimeStamp($arResultItem["ACTIVE_FROM"])) == "00:00:00" && date("H:i:s", MakeTimeStamp($arResultItem["ACTIVE_TO"])) == "00:00:00") { $arResultItem["ACTIVE_TO"] = date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME), MakeTimeStamp($arResultItem["ACTIVE_TO"]) - 24 * 60 * 60); } //} $arRecurrence = $calendarItem->GetPath("/CalendarItem/Recurrence"); if (count($arRecurrence) > 0) { $arResultItem = array_merge($arResultItem, $this->ConvertRecurrenceToArray($arRecurrence[0])); } return $arResultItem; }
private function ConvertTaskToArray($taskItem) { $arResultItem = array(); $arItemId = $taskItem->GetPath("/Task/ItemId"); if (count($arItemId) > 0) { $arResultItem["XML_ID"] = $arItemId[0]->GetAttribute("Id"); $arResultItem["MODIFICATION_LABEL"] = $arItemId[0]->GetAttribute("ChangeKey"); } $arSubject = $taskItem->GetPath("/Task/Subject"); if (count($arSubject) > 0) { $arResultItem["SUBJECT"] = $this->Encode($arSubject[0]->GetContent()); } $arBody = $taskItem->GetPath("/Task/Body"); if (count($arBody) > 0) { $arResultItem["BODY"] = $this->Encode($arBody[0]->GetContent()); $arResultItem["BODY_TYPE"] = $arBody[0]->GetAttribute("BodyType"); } $arDateTimeCreated = $taskItem->GetPath("/Task/DateTimeCreated"); if (count($arDateTimeCreated) > 0) { $arResultItem["DATE_CREATE"] = CDavICalendarTimeZone::GetFormattedServerDateTime($arDateTimeCreated[0]->GetContent()); } $arImportance = $taskItem->GetPath("/Task/Importance"); if (count($arImportance) > 0) { $arResultItem["IMPORTANCE"] = $arImportance[0]->GetContent(); } $arReminderIsSet = $taskItem->GetPath("/Task/ReminderIsSet"); if (count($arReminderIsSet) > 0 && $arReminderIsSet[0]->GetContent() == "true") { $arReminderMinutesBeforeStart = $taskItem->GetPath("/Task/ReminderMinutesBeforeStart"); if (count($arReminderMinutesBeforeStart) > 0) { $arResultItem["REMINDER_MINUTES_BEFORE_START"] = $arReminderMinutesBeforeStart[0]->GetContent(); } } $arActualWork = $taskItem->GetPath("/Task/ActualWork"); if (count($arActualWork) > 0) { $arResultItem["ACTUAL_WORK"] = $arActualWork[0]->GetContent(); } $arBillingInformation = $taskItem->GetPath("/Task/BillingInformation"); if (count($arBillingInformation) > 0) { $arResultItem["BILLING_INFORMATION"] = $arBillingInformation[0]->GetContent(); } $arMileage = $taskItem->GetPath("/Task/Mileage"); if (count($arMileage) > 0) { $arResultItem["MILEAGE"] = $arMileage[0]->GetContent(); } $arStartDate = $taskItem->GetPath("/Task/StartDate"); if (count($arStartDate) > 0) { $arResultItem["START_DATE"] = CDavICalendarTimeZone::GetFormattedServerDateTime($arStartDate[0]->GetContent()); } $arDueDate = $taskItem->GetPath("/Task/DueDate"); if (count($arDueDate) > 0) { $arResultItem["DUE_DATE"] = CDavICalendarTimeZone::GetFormattedServerDateTime($arDueDate[0]->GetContent()); } $arIsComplete = $taskItem->GetPath("/Task/IsComplete"); if (count($arIsComplete) > 0) { $arResultItem["IS_COMPLETE"] = $arIsComplete[0]->GetContent() == "true" ? true : false; } $arIsRecurring = $taskItem->GetPath("/Task/IsRecurring"); if (count($arIsRecurring) > 0) { $arResultItem["IS_RECURRING"] = $arIsRecurring[0]->GetContent() == "true" ? true : false; } $arRecurrence = $taskItem->GetPath("/Task/Recurrence"); if (count($arRecurrence) > 0) { $ar = $this->ConvertRecurrenceToArray($arRecurrence[0]); if (count($ar) > 0) { $arResultItem = array_merge($arResultItem, $ar); $arResultItem["IS_RECURRING"] = true; } } $arPercentComplete = $taskItem->GetPath("/Task/PercentComplete"); if (count($arPercentComplete) > 0) { $arResultItem["PERCENT_COMPLETE"] = $arPercentComplete[0]->GetContent(); } $arStatus = $taskItem->GetPath("/Task/Status"); if (count($arStatus) > 0) { $arResultItem["STATUS"] = $arStatus[0]->GetContent(); } $arExtendedProperty = $taskItem->GetPath("/Task/ExtendedProperty"); $extendedPropertiesCount = count($arExtendedProperty); for ($i = 0; $i < $extendedPropertiesCount; $i++) { $arTmp = $arExtendedProperty[$i]->GetContent(); $propertyName = $arTmp[0]->GetAttribute('PropertyName'); $propertyValue = $arTmp[1]->GetContent(); $arResultItem['ExtendedProperty'][$i] = array('Name' => $propertyName, 'Value' => $this->Encode(base64_decode($propertyValue))); } $arStatusDescription = $taskItem->GetPath("/Task/StatusDescription"); if (count($arStatusDescription) > 0) { $arResultItem["STATUS_DESCRIPTION"] = $arStatusDescription[0]->GetContent(); } $arTotalWork = $taskItem->GetPath("/Task/TotalWork"); if (count($arTotalWork) > 0) { $arResultItem["TOTAL_WORK"] = $arTotalWork[0]->GetContent(); } $arOwner = $taskItem->GetPath("/Task/Owner"); if (count($arOwner) > 0) { $arResultItem["OWNER"] = $this->Encode($arOwner[0]->GetContent()); } return $arResultItem; }
private function ConvertICalToArray($event, $calendar) { static $arWeekDayMap = array("SU" => 6, "MO" => 0, "TU" => 1, "WE" => 2, "TH" => 3, "FR" => 4, "SA" => 5); $request = $this->groupdav->GetRequest(); $tzFrom = $event->GetPropertyParameter("DTSTART", "TZID"); $tzTo = $event->GetPropertyParameter("DTEND", "TZID"); $skipTime = !is_null($event->GetPropertyParameter("DTSTART", "VALUE")) && !is_null($event->GetPropertyParameter("DTEND", "VALUE")) && is_null($tzFrom) && is_null($tzTo); $dateFrom = CDavICalendarTimeZone::GetFormattedServerDateTime($event->GetPropertyValue("DTSTART")); $dateTo = CDavICalendarTimeZone::GetFormattedServerDateTime($event->GetPropertyValue("DTEND")); if ($skipTime) { $dateTo = CCalendar::Date(MakeTimeStamp($dateTo) - 86400); } $arFields = array("NAME" => $event->GetPropertyValue("SUMMARY"), "PROPERTY_LOCATION" => $event->GetPropertyValue("LOCATION"), "DETAIL_TEXT" => $event->GetPropertyValue("DESCRIPTION"), "DETAIL_TEXT_TYPE" => 'html', "DATE_FROM" => $dateFrom, "DATE_TO" => $dateTo, "TZ_FROM" => $tzFrom, "TZ_TO" => $tzTo, "SKIP_TIME" => $skipTime, "MODIFIED_BY" => $request->GetPrincipal()->Id(), "DAV_XML_ID" => $event->GetPropertyValue("UID"), "DATE_CREATE" => CDavICalendarTimeZone::GetFormattedServerDateTime($event->GetPropertyValue("CREATED")), "PROPERTY_CATEGORY" => $event->GetPropertyValue("CATEGORIES")); if ($priority = $event->GetPropertyValue("PRIORITY")) { if ($priority <= 3) { $arFields["PROPERTY_IMPORTANCE"] = "high"; } elseif ($priority > 3 && $priority <= 6) { $arFields["PROPERTY_IMPORTANCE"] = "normal"; } else { $arFields["PROPERTY_IMPORTANCE"] = "low"; } } else { $arFields["PROPERTY_IMPORTANCE"] = "normal"; } if ($transp = $event->GetPropertyValue("TRANSP")) { if ($transp == 'TRANSPARENT') { $arFields["PROPERTY_ACCESSIBILITY"] = "free"; } else { $arFields["PROPERTY_ACCESSIBILITY"] = "busy"; } } else { $arFields["PROPERTY_ACCESSIBILITY"] = "busy"; } $arVAlarm = $event->GetComponents("VALARM"); if (count($arVAlarm) > 0 && $event->GetPropertyValue("X-MOZ-LASTACK") == null) { $trigger = $arVAlarm[0]->GetPropertyValue("TRIGGER"); if (preg_match('/^-P(T?)([0-9]+)([HMD])$/i', $trigger, $arMatches)) { $arPeriodMapTmp = array("M" => "min", "H" => "hour", "D" => "day"); $arFields["PROPERTY_REMIND_SETTINGS"] = $arMatches[2] . "_" . $arPeriodMapTmp[$arMatches[3]]; } } if ($rrule = $event->GetPropertyValueParsed("RRULE")) { // RRULE:FREQ=WEEKLY;COUNT=5;INTERVAL=2;BYDAY=TU,SA $arFields["PROPERTY_PERIOD_TYPE"] = $rrule["FREQ"]; $arFields["PROPERTY_PERIOD_COUNT"] = isset($rrule["INTERVAL"]) ? $rrule["INTERVAL"] : 1; if ($arFields["PROPERTY_PERIOD_TYPE"] == "WEEKLY") { if (isset($rrule["BYDAY"])) { $ar = explode(",", $rrule["BYDAY"]); $ar1 = array(); foreach ($ar as $v) { $ar1[] = $arWeekDayMap[strtoupper($v)]; } $arFields["PROPERTY_PERIOD_ADDITIONAL"] = implode(",", $ar1); } else { $arFields["PROPERTY_PERIOD_ADDITIONAL"] = date("w", MakeTimeStamp($arFields["DATE_FROM"])) - 1; if ($arFields["PROPERTY_PERIOD_ADDITIONAL"] < 0) { $arFields["PROPERTY_PERIOD_ADDITIONAL"] = 6; } } } $arFields["PROPERTY_EVENT_LENGTH"] = MakeTimeStamp($arFields["DATE_TO"]) - MakeTimeStamp($arFields["DATE_FROM"]); if (isset($rrule["UNTIL"])) { $arFields["ACTIVE_TO"] = CDavICalendarTimeZone::GetFormattedServerDateTime($rrule["UNTIL"]); } elseif (isset($rrule["COUNT"])) { $eventTime = $this->GetPeriodicEventTime(MakeTimeStamp($arFields["ACTIVE_TO"]), array("freq" => $arFields["PROPERTY_PERIOD_TYPE"], "interval" => $arFields["PROPERTY_PERIOD_COUNT"], "byday" => $arFields["PROPERTY_PERIOD_ADDITIONAL"]), $rrule["COUNT"]); $arFields["ACTIVE_TO"] = date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME), $eventTime); } else { $arFields["ACTIVE_TO"] = date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME), 2145938400); } } return $arFields; }