ICS (iCal) ИЗДАТЬ / ЗАПРОСИТЬ / ОТМЕНИТЬ

У меня много проблем с получением записей в файле .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, если это будет необходимо.

Благодарю.

0

Решение

То, что вы пытаетесь сделать, невозможно.

Что вы, вероятно, должны делать, это создать канал iCalendar. (Обычно webcal:// для этого используется нестандартная схема URI).

Такой корм должен иметь только METHOD:PUBLISH и всегда содержать каждый элемент в календаре.

Чтобы обновить записи в этом фиде, вам нужно просто обновить сам фид. Все элементы, которые вы удаляете в этом фиде, удаляются из календаря.

METHOD:CANCEL а также METHOD:REQUEST другие методы iTip, которые не используются в этом контексте. Для них есть два основных применения:

  1. Приглашения по электронной почте (a.k.a. iMip).
  2. Планирование CalDAV

Эти методы действительно имеют значение только для событий iCalendar, которые имеют ORGANIZER а также ATTENDEEs

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]