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); } }
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; }
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 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 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 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(); }
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); }