1

PHP で作成したカレンダーを Kerio Connect カレンダー (iCal) と同期させようとしています。カレンダーへの接続とイベントの取得に問題はありません。しかし、新しいイベントを PUT しようとすると、空のイベントが追加されたように見えます。次に例を示します。

私の要求:

HEADERS: PUT /calendars/localhost/marcin/Calendar HTTP/1.1 Authorization: Basic bWFyY2luOnJob21hbg== Host: localhost:1212 If-None-Match: * Content-type: text/icalendar Content-Length: 367

要求: BEGIN:VCALENDAR PRODID:-//Kerio Technologies//Kerio Connect//EN METHOD:PUBLISH VERSION:2.0 X-VERSION-KMS:6.2.0 BEGIN:VEVENT DTSTART;VALUE=DATE:20120528T163000 DTEND;VALUE=DATE: 20120528T170000 シーケンス:0 概要:テスト イベント クラス:パブリック優先度:5 トランスポート:OPAQUE X-MICROSOFT-CDO-BUSYSTATUS:BUSY X-LABEL:0 END:VEVENT END:VCALENDAR

応答: HTTP/1.1 201 作成許可: OPTIONS、TRACE、GET、HEAD、DELETE、PUT、COPY、MOVE、PROPFIND、PROPPATCH、SEARCH、SUBSCRIBE、UNSUBSCRIBE、POLL、BDELETE、BCOPY、BMOVE、BPROPPATCH、BPROPFIND、LOCK、UNLO​​CK接続: 閉じる コンテンツの長さ: 0 コンテンツの種類: テキスト/html 日付: 2012 年 5 月 27 日 (日) 13:33:04 GMT ETag: 1f353abd967f4700b8dc18f4d4775ff30000003400000001 場所: /calendars/localhost/marcin/Calendar/ Repl-UID: ResourceTag:

リクエストにどの日付/件名を入れても、作成されたイベントは常に次のようになります。コンポーネント="イベント"; メソッド="公開"; charset="utf-8" Content-Transfer-Encoding: 8bit

BEGIN:VCALENDAR PRODID:-//Kerio Technologies//Kerio Connect//EN METHOD:PUBLISH VERSION:2.0 X-VERSION-KMS:6.2.0 BEGIN:VEVENT DTSTAMP:20120527T133304Z UID:10a69ad8-07f1-4831-a015-4de3dac78351 TRANSP :OPAQUE X-MICROSOFT-CDO-BUSYSTATUS:BUSY END:VEVENT END:VCALENDAR

したがって、件名も日付もありません (DTSTART,DTEND); 空のリクエストを送信しようとしました: BEGIN:VCALENDAR BEGIN:VEVENT END:VEVENT END:VCALENDAR

結果は同じでした。

私はcalDAVが初めてで、ここ数日間これを解決しようとしています。誰かが私を助けて、私が間違っていることを教えてくれたら、それは素晴らしいことです.

よろしくマーティン

4

1 に答える 1

1

私も正確な問題を抱えていました。イベントをプッシュしますが、ケリオには件名や日付が表示されません。これが私が機能することを発見したものです(私はカールを機能させることしかできず、fsockopenでは運がありませんでした):

$uid = "test-12345"; // setting this to an existing uid updates event, a new uid adds event
$url = $account['uri'].'/'.$uid.'.ics'; //http://mail.domain.com/calendars/DOMAIN/USER/Calendar/'.$uid.'.ics'
$userpwd = $account['user'] .":". $account['pass'];
$description = 'My event description here';
$summary = 'My event title 1';
$tstart = '201206015T000000Z';
$tend = '20120616T000000Z';
$tstamp = gmdate("Ymd\THis\Z");

$body = <<<__EOD
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTAMP:$tstamp
DTSTART:$tstart
DTEND:$tend
UID:$uid
DESCRIPTION:$description
LOCATION:Office
SUMMARY:$summary
END:VEVENT
END:VCALENDAR
__EOD;

$headers = array(
    'Content-Type: text/calendar; charset=utf-8',
    'If-None-Match: *',
    'Expect: ',
    'Content-Length: '.strlen($body),
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_exec($ch);
curl_close($ch);
于 2012-06-21T14:58:07.277 に答える