2014-12-14 3 views
0

CalDAV를 사용하여 캘린더에 새 레코드를 추가하는 방법은 무엇입니까?CalDavClient 새 레코드 추가

require_once 'class.CalDavClient.php'; 

$cal = new CalDAVClient(
'###', 
'###', 
'###' 
); 
if (isset($options["PROPFIND"])) { 
    $cal->SetDepth(1); 
    $folder_xml = $cal->DoXMLRequest(
    "PROPFIND", 
    '<?xml version="1.0" encoding="utf-8" ?> 
     <propfind xmlns="DAV:"><prop><getcontentlength/><getcontenttype/> 
<resourcetype/><getetag/></prop></propfind>' 

    ); 
} 

$date_from = date('Ymd', mktime(0, 0, 0, date('m')-3, date('d'), date('Y'))); 
$calendar_events = CalDAVClient::normalize_events($cal->GetEvents($date_from, 
"20991212"), $row['calendar_Title']); 

print_r($calendar_events); 

을하지만 난 새 이벤트를 추가하는 방법 : 그 코드에 의해, 배열로 썬더 버드 번개 달력에서 내 모든 현재 recors을받을 수 있나요? 나는 문서를 찾았지만 그것에 대해 아무것도 찾을 수 없습니다.

답변

1

새 이벤트를 만들려면 새 이벤트를 나타내는 iCalendar 엔터티와 함께 ​​HTTP PUT 작업을 사용합니다.

이 멋진 소개 : http://sabre.io/dav/building-a-caldav-client/

+0

좋은 문서를 보내 주셔서 감사합니다! :) 나는 저를위한 거기 해결책을 찾아 냈다. – kxc

0

덕분에 내가 나를 위해 해결책을 발견 링크 HNH 에, 내가 요청에 대한 데이터

public function create_event($title, $desc, $tstart, $tend) { 

    $event_id = $this->generate_eventID(); 
    $tstamp = gmdate("Ymd\THis\Z"); 
    $xml = "BEGIN:VCALENDAR\n". 
      "VERSION:2.0\n". 
      "BEGIN:VEVENT\n". 
      "DTSTAMP:$tstamp\n". 
      "DTSTART:$tstart\n". 
      "DTEND:$tend\n". 
      "UID:$event_id\n". 
      "DESCRIPTION:$desc\n". 
      "LOCATION:Office\n". 
      "SUMMARY:$title\n". 
      "END:VEVENT\n". 
      "END:VCALENDAR"; 
    $etag = $this->DoPUTRequest($this->base_url . $event_id . '.ics', $xml); 

    return $etag; 
} 

지금을 생성 클래스 CalDavCliet에서 그 방법을 만들어 그 방법을 사용하여 새 레코드를 추가 할 수 있습니다.

$etag = $cal->create_event('тест1', 'описание...', '20141220T173000Z', '20141220T180000Z'); 
if (!empty($etag)) { 
    echo "Событие успешно добавлено !"; 
} 

나는 어떻게 자동으로 새 레코드에 대한 eID를 생성하므로 그 방법을 써서 썬더 버드 클라이언트처럼 "간단한"eID를 생성합니다.

protected function generate_eventID() { 
    $characters = 'abcdefghijklmnopqrstuvwxyz'; 
    $charactersLength = strlen($characters); 
    $eventID = ''; 
    for ($i = 0; $i < 8; $i++) {$eventID .= $characters[rand(0, $charactersLength - 1)];} 
    for ($i = 0; $i < 3; $i++) { 
     $eventID .= '-'; 
     for ($j = 0; $j < 4; $j++) {$eventID .= $characters[rand(0, $charactersLength - 1)];} 
    } 
    $eventID .= '-'; 
    for ($i = 0; $i < 12; $i++) {$eventID .= $characters[rand(0, $charactersLength - 1)];} 

    return $eventID; 
} 
+0

이것이 맞습니다. 정규 DAV를 사용하면 클라이언트가 resource-id와 UID (다른 방법으로 다를 수 있음)를 선택합니다. 이미 리소스가 존재하는 경우 (생성 된 이름이 이미 사용 된 경우)로부터 보호하려면 If-None-Match : * 헤더를 create-PUT과 함께 사용하십시오. 일반적인 전략은 충돌에 대한 카운터를 추가하는 것입니다 (예 : uid.1, uid.2 - 작동 할 때까지). VEVENT의 UID를 사용하십시오 - CalDAV 서버가 그 고유성을 보장합니다 (참고 : 일부는 캘린더에서 고유해야하며 일부는 서버에서 고유해야 함). – hnh

관련 문제