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(); }
private function GetICalContent(array $event, $siteId = null) { static $tzId = ''; if ($tzId === '') { $tzId = CDavICalendarTimeZone::getTimeZoneId(); } $ts = MakeTimeStamp($event["DT_FROM"]); if (date("His", $ts) == '000000') { $dtStart = array("VALUE" => date("Ymd", $ts), "PARAMETERS" => array("VALUE" => "DATE")); } else { $dtStart = array("VALUE" => date("Ymd\\THis", CDavICalendarTimeZone::convertDateToTimeZone($ts, $tzId)), "PARAMETERS" => array("TZID" => $tzId)); } $ts = MakeTimeStamp($event["DT_TO"]); if (date("His", $ts) == '000000') { $dtEnd = array("VALUE" => date("Ymd", $ts + 86400), "PARAMETERS" => array("VALUE" => "DATE")); } else { $dtEnd = array("VALUE" => date("Ymd\\THis", CDavICalendarTimeZone::convertDateToTimeZone($ts, $tzId)), "PARAMETERS" => array("TZID" => $tzId)); } $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" => $dtStart, "DTEND" => $dtEnd); if (isset($event["ACCESSIBILITY"]) && ($event["ACCESSIBILITY"] == 'free' || $event["ACCESSIBILITY"] == 'quest')) { $arICalEvent["TRANSP"] = 'TRANSPARENT'; } else { $arICalEvent["TRANSP"] = 'OPAQUE'; } if (isset($event["LOCATION"])) { if (is_array($event["LOCATION"]) && isset($event["LOCATION"]["NEW"])) { $arICalEvent["LOCATION"] = $event["LOCATION"]["NEW"]; } elseif ($event["LOCATION"] != '') { $arICalEvent["LOCATION"] = $event["LOCATION"]; } } 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["REMIND"]) && is_array($event["REMIND"]) && count($event["REMIND"]) > 0) { $arPeriodMapTmp = array("min" => "M", "hour" => "H", "day" => "D"); $type = $arPeriodMapTmp[$event["REMIND"][0]['type']]; $arICalEvent["@VALARM"] = array("TYPE" => "VALARM", "ACTION" => "DISPLAY", "TRIGGER" => array("PARAMETERS" => array("VALUE" => "DURATION"), "VALUE" => "-P" . ($type == 'D' ? '' : 'T') . $event["REMIND"][0]['count'] . $type)); } if (is_array($event["RRULE"]) && in_array($event["RRULE"]["FREQ"], array("DAILY", "WEEKLY", "MONTHLY", "YEARLY"))) { $val = "FREQ=" . $event["RRULE"]["FREQ"]; $val .= ";INTERVAL=" . $event["RRULE"]["INTERVAL"]; if ($event["RRULE"]["FREQ"] == "WEEKLY" && count($event["RRULE"]["BYDAY"]) > 0) { $val .= ";BYDAY=" . implode(",", $event["RRULE"]["BYDAY"]); } $val .= ";UNTIL=" . date("Ymd\\THis\\Z", MakeTimeStamp($event["DT_TO"])); $ts = MakeTimeStamp($event["DT_FROM"]) + $event["DT_LENGTH"]; $arICalEvent["DTEND"] = array("VALUE" => date("Ymd\\THis", CDavICalendarTimeZone::convertDateToTimeZone($ts, $tzId)), "PARAMETERS" => array("TZID" => $tzId)); $arICalEvent["RRULE"] = $val; } $cal = new CDavICalendar($arICalEvent, $siteId); return $cal->Render(); }