У меня много проблем с получением записей в файле .ics, сгенерированном из PHP, для обновления. Вот пример того, что я использую:
<?php
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename=calendar.ics');
$time = time();
$dtstamp = date('Ymd', $time). 'T' . date('His', $time) . 'Z'; echo "\r\n";
?>
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//My Event
METHOD:PUBLISH
X-WR-CALNAME:MyCal
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:[email protected]
SEQUENCE:0
UID:ABC123
DTSTART:20150601T120000
DTEND:20150601T130000
SUMMARY:Event 1 - <?php echo date('His', $time) ."\r\n"; ?>
LOCATION:Location 1
DESCRIPTION:This is Event 1 - <?php echo date('His', $time) ."\r\n"; ?>
END:VEVENT
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:[email protected]
SEQUENCE:0
UID:DEF123
DTSTART:20150601T160000
DTEND:20150601T170000
SUMMARY:Event 2 - <?php echo date('His', $time) ."\r\n"; ?>
LOCATION:Location 2
DESCRIPTION:This is Event 2 - <?php echo date('His', $time) ."\r\n"; ?>
END:VEVENT
END:VCALENDAR
Так что это для вывода событий по URL-адресу, который можно нажать на устройстве Android или iOS и добавить в календарь. Следующим шагом будет обновление элементов событий при необходимости. Я пытался сделать это с чем-то вроде этого (первоначальный PHP намеренно опущен):
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//My Event
METHOD:PUBLISH
X-WR-CALNAME:MyCal
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:[email protected]
SEQUENCE:1
UID:ABC123
DTSTART:20150601T123000
DTEND:20150601T130000
SUMMARY:Event 1 - <?php echo date('His', $time) ."\r\n"; ?>
LOCATION:Location 1
DESCRIPTION:This is Event 1 - <?php echo date('His', $time) ."\r\n"; ?>
END:VEVENT
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:[email protected]
SEQUENCE:1
UID:DEF123
DTSTART:20150601T163000
DTEND:20150601T170000
SUMMARY:Event 2 - <?php echo date('His', $time) ."\r\n"; ?>
LOCATION:Location 2
DESCRIPTION:This is Event 2 - <?php echo date('His', $time) ."\r\n"; ?>
END:VEVENT
END:VCALENDAR
Поскольку DTSTAMP всегда будет больше, чем предыдущая запись, последовательность была увеличена, и МЕТОД изменился на ЗАПРОС, насколько я могу судить, этого должно быть достаточно.
Однако в Android он просто добавляет события снова, в iOS он отображает события, которые уже существуют, с предыдущими деталями, и дает вам только возможность добавить события снова. Итак, мне интересно, что нужно, чтобы обновить существующие события, а затем отменить их, используя METHOD: CANCEL, если это будет необходимо.
Благодарю.
То, что вы пытаетесь сделать, невозможно.
Что вы, вероятно, должны делать, это создать канал iCalendar. (Обычно webcal://
для этого используется нестандартная схема URI).
Такой корм должен иметь только METHOD:PUBLISH
и всегда содержать каждый элемент в календаре.
Чтобы обновить записи в этом фиде, вам нужно просто обновить сам фид. Все элементы, которые вы удаляете в этом фиде, удаляются из календаря.
METHOD:CANCEL
а также METHOD:REQUEST
другие методы iTip, которые не используются в этом контексте. Для них есть два основных применения:
Эти методы действительно имеют значение только для событий iCalendar, которые имеют ORGANIZER
а также ATTENDEE
s
Других решений пока нет …