2013-11-13 2 views
0

После добавления нескольких событий в один файл ics я использовал данный код для обновления нескольких событий в одном файле ics. Но это не работает. События не обновляются. Любой орган, пожалуйста, помогите мне. Мой код:Обновление нескольких событий в одном файле ics (поток icalendar) с использованием php

$ical = "BEGIN:VCALENDAR";  
$ical .= "\nVERSION:2.0";  
$ical .= "\nPRODID:-//hacksw/handcal//NONSGML v1.0//EN";  
$ical .= "\nMETHOD:REQUEST";  
$ical .= "\nCALSCALE:GREGORIAN";  
$ical .= "\nX-WR-RELCALID:asjh675adashdh";  
$ical .= "\nX-WR-CALNAME:My Nov Calendar"; 

foreach($arr as $newArr){ 
    $ical .= "\nBEGIN:VEVENT";  
    $ical .= "\nUID:" . md5($newArr['stDate']) . "example.com";  
    $ical .= "\nSEQUENCE:1";  
    $ical .= "\nDTSTAMP:" . gmdate('Ymd');  
    $ical .= "\nORGANIZER:[email protected]";  
    $ical .= "\nDTSTART:".$newArr['stDate'];  
    $ical .= "\nDTEND:".$newArr['stDate'];  
    $ical .= "\nSUMMARY:".$newArr['sub'];  
    $ical .= "\nDESCRIPTION:".$newArr['desc'];  
    $ical .= "\nCLASS:PUBLIC";  
    $ical .= "\nSTATUS:CONFIRMED";  
    $ical .= "\nTRANSP:TRANSPARENT";  
    $ical .= "\nEND:VEVENT";  
} 

$ical .= "\nEND:VCALENDAR";  
header('Content-type: text/calendar; charset=utf-8');  
header('Content-Disposition: inline; filename=my-calendar.ics');  
echo $ical;  
exit; 

Я также изменил номер SEQUENCE, но его не работает.

ответ

0

Какое свойство изменяется в каждом случае?

Свойство UID основано на DTSTART каждого события. Поэтому, если вы измените начало события, UID изменится. UID не должны меняться при обновлении события. Это единственное, что должно оставаться постоянным для всего жизненного цикла события.

Не знаете, что gmdate ('Ymd') делает точно, но DTSTAMP должен быть форматом YYYYMMDDTHHMMSSZ.

Тогда вы не указали параметр METHOD = REQUEST в заголовке содержимого, но я не думаю, что это приводит к сбою обновления.

+0

Спасибо за ваш ответ. Но я использовал статический массив с именем $ arr, где значения статические, поэтому значение DTSTART для каждого UID остается таким же. DTSTAMP также принимает значение YYYYMMDD, которое я использовал через gmdate ('Ymd') И, наконец, я уже использовал METHOD = REQUEST в начале моего кода. Пожалуйста, проверьте. Поэтому, пожалуйста, дайте мне знать, что мне нужно сделать для обновления нескольких событий в одном файле ics, используя PHP. –

+0

DTSTAMP ДОЛЖЕН быть в зулу. См. Http://tools.ietf.org/html/rfc5545#section-3.8.7.2. Что касается МЕТОДА, я говорю о заголовке содержимого, а не о свойстве iCalendar. См. Http://tools.ietf.org/html/rfc6047#section-2.4 – arnaudq