示例#1
0
 public function __construct($cal, $siteId = null)
 {
     if (!isset($cal) || !is_array($cal) && !is_string($cal)) {
         return;
     }
     $this->component = new CDavICalendarComponent();
     if (is_string($cal)) {
         $this->component->InitializeFromString($cal);
     } else {
         $this->component->SetType('VCALENDAR');
         $this->component->SetProperties(array(new CDavICalendarProperty('VERSION:2.0'), new CDavICalendarProperty('PRODID:-//davical.org//NONSGML AWL Calendar//EN'), new CDavICalendarProperty('METHOD:PUBLISH')));
         $arComps = array();
         $tz = CDavICalendarTimeZone::GetTimezone(CDavICalendarTimeZone::getTimeZoneId());
         if (!empty($tz)) {
             $comptz = new CDavICalendarComponent();
             $comptz->InitializeFromString($tz);
             $arComps[] = $comptz;
         }
         $comp = new CDavICalendarComponent();
         $comp->InitializeFromArray($cal);
         $arComps[] = $comp;
         $this->component->SetComponents($arComps);
     }
 }
示例#2
0
 protected function ConvertRecurrenceToArray($recurrence)
 {
     $arResultItem = array();
     $arAbsoluteMonthlyRecurrence = $recurrence->GetPath("/Recurrence/AbsoluteMonthlyRecurrence");
     if (count($arAbsoluteMonthlyRecurrence) > 0) {
         $arResultItem["RECURRING_TYPE"] = "MONTHLY_ABSOLUTE";
         $arAbsoluteMonthlyRecurrenceInterval = $recurrence->GetPath("/Recurrence/AbsoluteMonthlyRecurrence/Interval");
         if (count($arAbsoluteMonthlyRecurrenceInterval) > 0) {
             $arResultItem["RECURRING_INTERVAL"] = $arAbsoluteMonthlyRecurrenceInterval[0]->GetContent();
         }
         $arAbsoluteMonthlyRecurrenceDayOfMonth = $recurrence->GetPath("/Recurrence/AbsoluteMonthlyRecurrence/DayOfMonth");
         if (count($arAbsoluteMonthlyRecurrenceDayOfMonth) > 0) {
             $arResultItem["RECURRING_DAYOFMONTH"] = $arAbsoluteMonthlyRecurrenceDayOfMonth[0]->GetContent();
         }
     }
     $arRelativeMonthlyRecurrence = $recurrence->GetPath("/Recurrence/RelativeMonthlyRecurrence");
     if (count($arRelativeMonthlyRecurrence) > 0) {
         $arResultItem["RECURRING_TYPE"] = "MONTHLY_RELATIVE";
         $arRelativeMonthlyRecurrenceInterval = $recurrence->GetPath("/Recurrence/RelativeMonthlyRecurrence/Interval");
         if (count($arRelativeMonthlyRecurrenceInterval) > 0) {
             $arResultItem["RECURRING_INTERVAL"] = $arRelativeMonthlyRecurrenceInterval[0]->GetContent();
         }
         $arRelativeMonthlyRecurrenceDaysOfWeek = $recurrence->GetPath("/Recurrence/RelativeMonthlyRecurrence/DaysOfWeek");
         if (count($arRelativeMonthlyRecurrenceDaysOfWeek) > 0) {
             $arResultItem["RECURRING_DAYSOFWEEK"] = $arRelativeMonthlyRecurrenceDaysOfWeek[0]->GetContent();
         }
         $arRelativeMonthlyRecurrenceDayOfWeekIndex = $recurrence->GetPath("/Recurrence/RelativeMonthlyRecurrence/DayOfWeekIndex");
         if (count($arRelativeMonthlyRecurrenceDayOfWeekIndex) > 0) {
             $arResultItem["RECURRING_DAYOFWEEKINDEX"] = $arRelativeMonthlyRecurrenceDayOfWeekIndex[0]->GetContent();
         }
     }
     $arAbsoluteYearlyRecurrence = $recurrence->GetPath("/Recurrence/AbsoluteYearlyRecurrence");
     if (count($arAbsoluteYearlyRecurrence) > 0) {
         $arResultItem["RECURRING_TYPE"] = "YEARLY_ABSOLUTE";
         $arAbsoluteYearlyRecurrenceDayOfMonth = $recurrence->GetPath("/Recurrence/AbsoluteYearlyRecurrence/DayOfMonth");
         if (count($arAbsoluteYearlyRecurrenceDayOfMonth) > 0) {
             $arResultItem["RECURRING_DAYOFMONTH"] = $arAbsoluteYearlyRecurrenceDayOfMonth[0]->GetContent();
         }
         $arAbsoluteYearlyRecurrenceMonth = $recurrence->GetPath("/Recurrence/AbsoluteYearlyRecurrence/Month");
         if (count($arAbsoluteYearlyRecurrenceMonth) > 0) {
             $arResultItem["RECURRING_MONTH"] = $arAbsoluteYearlyRecurrenceMonth[0]->GetContent();
         }
     }
     $arRelativeYearlyRecurrence = $recurrence->GetPath("/Recurrence/RelativeYearlyRecurrence");
     if (count($arRelativeYearlyRecurrence) > 0) {
         $arResultItem["RECURRING_TYPE"] = "YEARLY_RELATIVE";
         $arRelativeYearlyRecurrenceDaysOfWeek = $recurrence->GetPath("/Recurrence/RelativeYearlyRecurrence/DaysOfWeek");
         if (count($arRelativeYearlyRecurrenceDaysOfWeek) > 0) {
             $arResultItem["RECURRING_DAYSOFWEEK"] = $arRelativeYearlyRecurrenceDaysOfWeek[0]->GetContent();
         }
         $arRelativeYearlyRecurrenceDayOfWeekIndex = $recurrence->GetPath("/Recurrence/RelativeYearlyRecurrence/DayOfWeekIndex");
         if (count($arRelativeYearlyRecurrenceDayOfWeekIndex) > 0) {
             $arResultItem["RECURRING_DAYOFWEEKINDEX"] = $arRelativeYearlyRecurrenceDayOfWeekIndex[0]->GetContent();
         }
         $arRelativeYearlyRecurrenceMonth = $recurrence->GetPath("/Recurrence/RelativeYearlyRecurrence/Month");
         if (count($arRelativeYearlyRecurrenceMonth) > 0) {
             $arResultItem["RECURRING_MONTH"] = $arRelativeYearlyRecurrenceMonth[0]->GetContent();
         }
     }
     $arWeeklyRecurrence = $recurrence->GetPath("/Recurrence/WeeklyRecurrence");
     if (count($arWeeklyRecurrence) > 0) {
         $arResultItem["RECURRING_TYPE"] = "WEEKLY";
         $arWeeklyRecurrenceInterval = $recurrence->GetPath("/Recurrence/WeeklyRecurrence/Interval");
         if (count($arWeeklyRecurrenceInterval) > 0) {
             $arResultItem["RECURRING_INTERVAL"] = $arWeeklyRecurrenceInterval[0]->GetContent();
         }
         $arWeeklyRecurrenceDaysOfWeek = $recurrence->GetPath("/Recurrence/WeeklyRecurrence/DaysOfWeek");
         if (count($arWeeklyRecurrenceDaysOfWeek) > 0) {
             $arResultItem["RECURRING_DAYSOFWEEK"] = $arWeeklyRecurrenceDaysOfWeek[0]->GetContent();
         }
     }
     $arDailyRecurrence = $recurrence->GetPath("/Recurrence/DailyRecurrence");
     if (count($arDailyRecurrence) > 0) {
         $arResultItem["RECURRING_TYPE"] = "DAILY";
         $arDailyRecurrenceInterval = $recurrence->GetPath("/Recurrence/DailyRecurrence/Interval");
         if (count($arDailyRecurrenceInterval) > 0) {
             $arResultItem["RECURRING_INTERVAL"] = $arDailyRecurrenceInterval[0]->GetContent();
         }
     }
     $arNumberedRecurrence = $recurrence->GetPath("/Recurrence/NumberedRecurrence");
     if (count($arNumberedRecurrence) > 0) {
         $arNumberedRecurrenceStartDate = $recurrence->GetPath("/Recurrence/NumberedRecurrence/StartDate");
         if (count($arNumberedRecurrenceStartDate) > 0) {
             $arResultItem["RECURRING_STARTDATE"] = CDavICalendarTimeZone::GetFormattedServerDate($arNumberedRecurrenceStartDate[0]->GetContent());
         }
         $arNumberedRecurrenceNumberOfOccurrences = $recurrence->GetPath("/Recurrence/NumberedRecurrence/NumberOfOccurrences");
         if (count($arNumberedRecurrenceNumberOfOccurrences) > 0) {
             $arResultItem["RECURRING_NUMBEROFOCCURRENCES"] = $arNumberedRecurrenceNumberOfOccurrences[0]->GetContent();
         }
     }
     $arNoEndRecurrence = $recurrence->GetPath("/Recurrence/NoEndRecurrence");
     if (count($arNoEndRecurrence) > 0) {
         $arNoEndRecurrenceStartDate = $recurrence->GetPath("/Recurrence/NoEndRecurrence/StartDate");
         if (count($arNoEndRecurrenceStartDate) > 0) {
             $arResultItem["RECURRING_STARTDATE"] = CDavICalendarTimeZone::GetFormattedServerDate($arNoEndRecurrenceStartDate[0]->GetContent());
         }
     }
     $arEndDateRecurrence = $recurrence->GetPath("/Recurrence/EndDateRecurrence");
     if (count($arEndDateRecurrence) > 0) {
         $arEndDateRecurrenceStartDate = $recurrence->GetPath("/Recurrence/EndDateRecurrence/StartDate");
         if (count($arEndDateRecurrenceStartDate) > 0) {
             $arResultItem["RECURRING_STARTDATE"] = CDavICalendarTimeZone::GetFormattedServerDate($arEndDateRecurrenceStartDate[0]->GetContent());
         }
         $arEndDateRecurrenceEndDate = $recurrence->GetPath("/Recurrence/EndDateRecurrence/EndDate");
         if (count($arEndDateRecurrenceEndDate) > 0) {
             $arResultItem["RECURRING_ENDDATE"] = CDavICalendarTimeZone::GetFormattedServerDate($arEndDateRecurrenceEndDate[0]->GetContent());
         }
     }
     return $arResultItem;
 }
示例#3
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;
 }
示例#4
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;
 }
示例#5
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;
 }
示例#6
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;
 }
 private function GetICalContent(array $event, $siteId)
 {
     static $tzId = '';
     if ($tzId === '') {
         $tzId = CDavICalendarTimeZone::getTimeZoneId();
     }
     $arICalEvent = array("TYPE" => "VEVENT", "CREATED" => date("Ymd\\THis\\Z", MakeTimeStamp($event["DATE_CREATE"])), "LAST-MODIFIED" => date("Ymd\\THis\\Z", MakeTimeStamp($event["TIMESTAMP_X"])), "DTSTAMP" => date("Ymd\\THis\\Z", MakeTimeStamp($event["TIMESTAMP_X"])), "UID" => $event["DAV_XML_ID"], "SUMMARY" => $event["NAME"], "DTSTART" => array("VALUE" => date("Ymd\\THis", CDavICalendarTimeZone::convertDateToTimeZone($event["DT_FROM_TS"], $tzId)), "PARAMETERS" => array("TZID" => $tzId)), "DTEND" => array("VALUE" => date("Ymd\\THis", CDavICalendarTimeZone::convertDateToTimeZone($event["DT_TO_TS"], $tzId)), "PARAMETERS" => array("TZID" => $tzId)));
     if (isset($event["ACCESSIBILITY"]) && ($event["ACCESSIBILITY"] == 'free' || $event["ACCESSIBILITY"] == 'quest')) {
         $arICalEvent["TRANSP"] = 'TRANSPARENT';
     } else {
         $arICalEvent["TRANSP"] = 'OPAQUE';
     }
     if (isset($event["LOCATION"]) && is_array($event["LOCATION"]) && isset($event["LOCATION"]["NEW"]) && strlen($event["LOCATION"]["NEW"]) > 0) {
         $arICalEvent["LOCATION"] = $event["LOCATION"]["NEW"];
     }
     if (isset($event["IMPORTANCE"])) {
         if ($event["IMPORTANCE"] == "low") {
             $arICalEvent["PRIORITY"] = 9;
         } elseif ($event["IMPORTANCE"] == "high") {
             $arICalEvent["PRIORITY"] = 1;
         } else {
             $arICalEvent["PRIORITY"] = 5;
         }
     }
     if (isset($event["DESCRIPTION"]) && strlen($event["DESCRIPTION"]) > 0) {
         $arICalEvent["DESCRIPTION"] = $event["DESCRIPTION"];
     }
     if (isset($event["PROPERTY_REMIND_SETTINGS"]) && strlen($event["PROPERTY_REMIND_SETTINGS"]) > 0) {
         $arPeriodMapTmp = array("min" => "M", "hour" => "H", "day" => "D");
         $ar = explode("_", $event["PROPERTY_REMIND_SETTINGS"]);
         $arICalEvent["@VALARM"] = array("TYPE" => "VALARM", "ACTION" => "DISPLAY", "TRIGGER" => array("PARAMETERS" => array("VALUE" => "DURATION"), "VALUE" => "-PT" . $ar[0] . $arPeriodMapTmp[$ar[1]]));
     }
     $oneDay = 86400;
     //24*60*60
     if (isset($event["RRULE"]) && is_array($event["RRULE"])) {
         $val = "FREQ=" . $event["RRULE"]["FREQ"];
         if (isset($event["RRULE"]["INTERVAL"]) && $event["RRULE"]["INTERVAL"] !== '') {
             $val .= ";INTERVAL=" . $event["RRULE"]["INTERVAL"];
         }
         if (isset($event["RRULE"]["BYDAY"]) && $event["RRULE"]["BYDAY"] !== '') {
             $val .= ";BYDAY=" . $event["RRULE"]["BYDAY"];
         }
         if (isset($event["RRULE"]["UNTIL"])) {
             if ($event["RRULE"]["UNTIL"] != '') {
                 $val .= ";UNTIL=" . date("Ymd\\THis\\Z", $event["RRULE"]["UNTIL"]);
             }
         } else {
             $val .= ";UNTIL=" . date("Ymd\\THis\\Z", $event["DT_TO_TS"]);
         }
         if ($event["DT_SKIP_TIME"] == 'Y') {
             $arICalEvent["DTSTART"] = date("Ymd", $event["DT_FROM_TS"]);
             $arICalEvent["DTEND"] = array("VALUE" => date("Ymd", CDavICalendarTimeZone::convertDateToTimeZone($event["DT_FROM_TS"] + $event["PROPERTY_EVENT_LENGTH"], $tzId)), "PARAMETERS" => array("TZID" => $tzId));
         } else {
             $arICalEvent["DTEND"] = array("VALUE" => date("Ymd\\THis", CDavICalendarTimeZone::convertDateToTimeZone($event["DT_FROM_TS"] + $event["PROPERTY_EVENT_LENGTH"], $tzId)), "PARAMETERS" => array("TZID" => $tzId));
         }
         $arICalEvent["RRULE"] = $val;
     } elseif (isset($event["PROPERTY_PERIOD_TYPE"]) && strlen($event["PROPERTY_PERIOD_TYPE"]) > 0 && $event["PROPERTY_PERIOD_TYPE"] != "NONE") {
         $val = "FREQ=" . $event["PROPERTY_PERIOD_TYPE"];
         if (isset($event["PROPERTY_PERIOD_COUNT"]) && strlen($event["PROPERTY_PERIOD_COUNT"]) > 0) {
             $val .= ";INTERVAL=" . $event["PROPERTY_PERIOD_COUNT"];
         }
         if ($event["PROPERTY_PERIOD_TYPE"] == "WEEKLY" && strlen($event["PROPERTY_PERIOD_ADDITIONAL"]) > 0) {
             static $arWeekDayMap = array(6 => "SU", 0 => "MO", 1 => "TU", 2 => "WE", 3 => "TH", 4 => "FR", 5 => "SA");
             $ar = explode(",", $event["PROPERTY_PERIOD_ADDITIONAL"]);
             $ar1 = array();
             foreach ($ar as $v) {
                 $ar1[] = $arWeekDayMap[$v];
             }
             $val .= ";BYDAY=" . implode(",", $ar1);
         }
         $val .= ";UNTIL=" . date("Ymd\\THis\\Z", MakeTimeStamp($event["ACTIVE_TO"]));
         if (date("H:i:s", MakeTimeStamp($event["ACTIVE_FROM"])) == "00:00:00" && date("H:i:s", MakeTimeStamp($event["ACTIVE_FROM"]) + $event["PROPERTY_EVENT_LENGTH"]) == "00:00:00") {
             $arICalEvent["DTSTART"] = date("Ymd", MakeTimeStamp($event["ACTIVE_FROM"]));
             $arICalEvent["DTEND"] = array("VALUE" => date("Ymd", CDavICalendarTimeZone::convertDateToTimeZone(MakeTimeStamp($event["ACTIVE_FROM"]) + $event["PROPERTY_EVENT_LENGTH"], $tzId)), "PARAMETERS" => array("TZID" => $tzId));
         } else {
             $arICalEvent["DTEND"] = array("VALUE" => date("Ymd\\THis", CDavICalendarTimeZone::convertDateToTimeZone(MakeTimeStamp($event["ACTIVE_FROM"]) + $event["PROPERTY_EVENT_LENGTH"], $tzId)), "PARAMETERS" => array("TZID" => $tzId));
         }
         $arICalEvent["RRULE"] = $val;
     } else {
         if ($event['DT_SKIP_TIME'] == 'Y') {
             $arICalEvent["DTSTART"] = date("Ymd", $event["DT_FROM_TS"]);
             $arICalEvent["DTEND"] = date("Ymd", $event["DT_TO_TS"] + $oneDay);
             //					$arICalEvent["DTSTART"] = date("Ymd", MakeTimeStamp($event["DT_FROM"]));
             //					$arICalEvent["DTEND"] = date("Ymd", MakeTimeStamp($event["DT_TO"]) + $oneDay);
         }
     }
     // TODO: we have to update SEQUENCE corresponding to rfc5546
     $arICalEvent["SEQUENCE"] = $event["VERSION"];
     $cal = new CDavICalendar($arICalEvent, $siteId);
     return $cal->Render();
 }
示例#8
0
 public static function GetFormattedServerDate($text)
 {
     if (preg_match('/(\\+|-)([0-9]{2}):?([0-9]{2})([0-9]{2})?$/', $text, $match)) {
         $text = substr($text, 0, -strlen($match[0]));
     }
     $date = CDavICalendarTimeZone::ParseDateTime($text, false, null);
     return date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATE), $date);
 }