Example #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);
     }
 }
 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();
 }
Example #3
0
 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();
 }