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

0

У меня много проблем с получением записей в файле.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 всегда будет больше, чем предыдущая запись, последовательность будет увеличена, и МЕТОД изменится на REQUEST, насколько я могу судить, этого должно быть достаточно.

Однако в Android он просто добавляет события снова, в iOS он отображает события, которые уже существуют, с предыдущими подробностями и дает вам возможность снова добавлять события. Итак, мне интересно, что нужно, чтобы обновить существующие события и впоследствии отменить их, используя METHOD: CANCEL, если это необходимо.

Благодарю.

Теги:
icalendar

1 ответ

2

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

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

У корма, подобного этому, должен быть только METHOD:PUBLISH и всегда содержать каждый отдельный элемент в календаре.

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

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

  1. Электронная почта приглашает (aka iMip).
  2. Планирование CalDAV

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

  • 0
    Спасибо за ответ. Я собираюсь разобраться в этом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню