示例#1
0
 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;
 }
示例#2
0
 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;
 }
示例#3
0
 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;
 }
示例#4
0
 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;
 }