Пример #1
0
 public function Put($id, $siteId, $account, $arPath)
 {
     $calendarId = $this->GetCalendarId($siteId, $account, $arPath);
     if ($calendarId == null) {
         return '404 Not Found';
     }
     CDav::Report("CDavCalendarHandler::Put", "calendarId", $calendarId);
     $request = $this->groupdav->GetRequest();
     $oldEvent = $this->GetEntry('PUT', $id, $calendarId);
     if (!is_null($oldEvent) && !is_array($oldEvent)) {
         return $oldEvent;
     }
     $charset = "utf-8";
     $arContentParameters = $request->GetContentParameters();
     //CDav::Report("CDavCalendarHandler::Put", "arContentParameters", $arContentParameters);
     if (!empty($arContentParameters['CONTENT_TYPE'])) {
         $arContentType = explode(';', $arContentParameters['CONTENT_TYPE']);
         if (count($arContentType) > 1) {
             array_shift($arContentType);
             foreach ($arContentType as $attribute) {
                 $attribute = trim($attribute);
                 list($key, $value) = explode('=', $attribute);
                 if (strtolower($key) == 'charset') {
                     $charset = strtolower($value);
                 }
             }
         }
     }
     $content = $request->GetRequestBody();
     $content = htmlspecialcharsback($content);
     //CDav::Report("CDavCalendarHandler::Put", "content", $content);
     if (is_array($oldEvent)) {
         $eventId = $oldEvent['ID'];
     } else {
         // Search the same event without ID
         $eventId = 0;
     }
     $cs = CDav::GetCharset($siteId);
     if (is_null($cs) || empty($cs)) {
         $cs = "utf-8";
     }
     $content = $GLOBALS["APPLICATION"]->ConvertCharset($content, $charset, $cs);
     CDav::Report("CDavCalendarHandler::Put", "content (converted " . $charset . " -> " . $cs . ")", $content);
     $cal = new CDavICalendar($content, $siteId);
     $arEvents = $cal->GetComponents('VTIMEZONE', false);
     if (count($arEvents) <= 0) {
         return '404 Not Found';
     }
     $arFields = $this->ConvertICalToArray($arEvents[0], $cal);
     if ($eventId > 0) {
         $arFields['ID'] = $eventId;
     } else {
         $arFields['CREATED_BY'] = $arFields['MODIFIED_BY'];
     }
     if (isset($arFields['DAV_XML_ID'])) {
         $arFields['XML_ID'] = $arFields['DAV_XML_ID'];
     }
     CDav::Report("CDavCalendarHandler::Put", "arFields", $arFields);
     $eventId = CCalendar::ModifyEvent($calendarId, $arFields);
     if (is_bool($eventId)) {
         return $eventId;
     }
     if (!is_numeric($eventId)) {
         return false;
     }
     //header('ETag: '.$this->GetETag($calendarId, $xmlId));
     //$path = preg_replace('|(.*)/[^/]*|', '\1/', $request->GetPath());
     //header('Location: '.$request->GetBaseUri().$path.$this->GetPath($xmlId));
     return "201 Created";
 }
 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)
 {
     $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["XML_ID"], "SUMMARY" => $event["NAME"], "DTSTART" => array("VALUE" => date("Ymd\\THis", MakeTimeStamp($event["ACTIVE_FROM"])), "PARAMETERS" => array("TZID" => CDav::GetTimezoneId($siteId))), "DTEND" => array("VALUE" => date("Ymd\\THis", MakeTimeStamp($event["ACTIVE_TO"])), "PARAMETERS" => array("TZID" => CDav::GetTimezoneId($siteId))));
     if (isset($event["PROPERTY_ACCESSIBILITY"]) && ($event["PROPERTY_ACCESSIBILITY"] == 'free' || $event["PROPERTY_ACCESSIBILITY"] == 'quest')) {
         $arICalEvent["TRANSP"] = 'TRANSPARENT';
     } else {
         $arICalEvent["TRANSP"] = 'OPAQUE';
     }
     if (isset($event["PROPERTY_LOCATION"]) && strlen($event["PROPERTY_LOCATION"]) > 0) {
         $arICalEvent["LOCATION"] = $event["PROPERTY_LOCATION"];
     }
     if (isset($event["PROPERTY_IMPORTANCE"])) {
         if ($event["PROPERTY_IMPORTANCE"] == "low") {
             $arICalEvent["PRIORITY"] = 9;
         } elseif ($event["PROPERTY_IMPORTANCE"] == "high") {
             $arICalEvent["PRIORITY"] = 1;
         } else {
             $arICalEvent["PRIORITY"] = 5;
         }
     }
     if (isset($event["DETAIL_TEXT"]) && strlen($event["DETAIL_TEXT"]) > 0) {
         $arICalEvent["DESCRIPTION"] = strip_tags($event["DETAIL_TEXT"]);
     }
     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]]));
     }
     if (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", MakeTimeStamp($event["ACTIVE_FROM"]) + $event["PROPERTY_EVENT_LENGTH"]), "PARAMETERS" => array("TZID" => CDav::GetTimezoneId($siteId)));
         } else {
             $arICalEvent["DTEND"] = array("VALUE" => date("Ymd\\THis", MakeTimeStamp($event["ACTIVE_FROM"]) + $event["PROPERTY_EVENT_LENGTH"]), "PARAMETERS" => array("TZID" => CDav::GetTimezoneId($siteId)));
         }
         $arICalEvent["RRULE"] = $val;
     } else {
         if (date("H:i:s", MakeTimeStamp($event["ACTIVE_FROM"])) == "00:00:00" && date("H:i:s", MakeTimeStamp($event["ACTIVE_TO"])) == "00:00:00") {
             $arICalEvent["DTSTART"] = date("Ymd", MakeTimeStamp($event["ACTIVE_FROM"]));
             $arICalEvent["DTEND"] = date("Ymd", MakeTimeStamp($event["ACTIVE_TO"]) + 24 * 60 * 60);
         }
     }
     $cal = new CDavICalendar($arICalEvent, $siteId);
     return $cal->Render();
 }
 private function GetICalContent(array $event, $siteId)
 {
     $oneDay = 86400;
     //24*60*60
     $dateFrom = date("Ymd\\THis", MakeTimeStamp($event["DATE_FROM"]));
     $dateTo = date("Ymd\\THis", MakeTimeStamp($event["DATE_TO"]));
     $tzFrom = $event["TZ_FROM"];
     $tzTo = $event["TZ_TO"];
     $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"]);
     if ($event["DT_SKIP_TIME"] == 'Y') {
         $arICalEvent["DTSTART"] = date("Ymd", MakeTimeStamp($event["DATE_FROM"]));
         $arICalEvent["DTEND"] = date("Ymd", MakeTimeStamp($event["DATE_TO"]) + $oneDay);
     } else {
         $arICalEvent["DTSTART"] = array("VALUE" => $dateFrom, "PARAMETERS" => array("TZID" => $tzFrom));
         $arICalEvent["DTEND"] = array("VALUE" => $dateTo, "PARAMETERS" => array("TZID" => $tzTo));
     }
     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]]));
     }
     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"] != '' && intval($event["RRULE"]["UNTIL"]) == $event["RRULE"]["UNTIL"]) {
                 $val .= ";UNTIL=" . date("Ymd\\THis\\Z", $event["RRULE"]["UNTIL"]);
             } else {
                 if ($event["RRULE"]["UNTIL"] != '') {
                     $val .= ";UNTIL=" . date("Ymd\\THis\\Z", MakeTimeStamp($event["RRULE"]["UNTIL"]));
                 }
             }
         } else {
             $val .= ";UNTIL=" . date("Ymd\\THis\\Z", $event['DATE_TO_TS_UTC'] + intVal(date("Z")));
         }
         $arICalEvent["RRULE"] = $val;
     }
     // TODO: we have to update SEQUENCE corresponding to rfc5546
     $arICalEvent["SEQUENCE"] = $event["VERSION"];
     $cal = new CDavICalendar($arICalEvent, $siteId);
     return $cal->Render();
 }