Я пытаюсь реализовать два способа синхронизации приложения с календарем Google. Я не нашел разумного описания, как работают повторяющиеся события. Они физически дублируются (имеют собственные идентификаторы) в главном событии? API календаря Google (listEvents) возвращает только главное событие с повторениями (строка). Если у повторений нет собственных идентификаторов, как я могу их удалить? Когда я удаляю одно повторяющееся событие из серии (в календаре Google) в данных из API (listEvents), не упоминается об этом пропущенном повторяющемся событии.
Как работают повторяющиеся события в календаре Google
Ответы (1)
Повторяющееся событие - это серия единичных событий (экземпляров). Вы можете прочитать об экземплярах по следующей ссылке: https://developers.google.com/google-apps/calendar/v3/reference/events/instances.
Если вы хотите удалить повторяющееся событие (все экземпляры), вам необходимо использовать следующий код:
$rec_event = $this->calendar->events->get('primary', $google_event_id);
if ($rec_event && $rec_event->getStatus() != "cancelled") {
$this->calendar->events->delete('primary', $google_event_id); // $google_event_id is id of main event with recurrences
}
Если вы хотите удалить все следующие экземпляры с некоторой даты, вам нужно получить все экземпляры после этой даты, а затем удалить их в цикле:
$opt_params = array('timeMin' => $isoDate); // date of DATE_RFC3339 format, "Y-m-d\TH:i:sP"
$instances = $this->calendar->events->instances($this->calendar_id, $google_event_id, $opt_params);
if ($instances && count($instances->getItems())) {
foreach ($instances->getItems() as $instance) {
$this->calendar->events->delete('primary', $instance->getId());
}
}
Если вы хотите добавить исключение (удалить только один экземпляр повторяющегося события), необходимо использовать почти тот же код, но с другим фильтром:
$opt_params = array('originalStart' => $isoDate); // exception date
$instances = $this->calendar->events->instances($this->calendar_id, $google_event_id, $opt_params);
if ($instances && count($instances->getItems())) {
foreach ($instances->getItems() as $instance) {
$this->calendar->events->delete('primary', $instance->getId());
}
}
person
Natali
schedule
24.04.2014
это не то, как следует обрабатывать удаление будущих событий, поскольку может быть бесконечное количество событий (дата / счет окончания не указаны). Вместо этого следует обновить текущее повторяющееся событие, установив новую дату окончания (или соответствующий счетчик), и создать новое повторяющееся событие, начинающееся с той же даты. Дополнительная информация доступна в официальном документе: developers.google.com/calendar/recurringevents.
- person vir us; 14.05.2020