Я создаю систему календаря, используя FullCalendar в качестве переднего конца. Бэкэнд будет MySQL/PHP.iCal backend - повторяющиеся даты
Он будет хранить список общедоступных назначений для пользователей, которые создаются и вставляются приложением. Эти встречи будут единственным событием, которое начнется и завершится в тот же день. Кроме того, пользователи смогут отмечать их несоблюдение в календаре из-за личных обязательств. Эта последняя функциональность требует использования повторяющихся событий. Вместо того, чтобы повторно изобретать колесо, я смотрел на использование структуры, основанной на iCal. Этот пост был очень полезен ical-field-list-for-database-schema-based-on-ical-standard при определении структуры базы данных.
Я создал форму заявки, которая позволяет пользователю вводить необходимые данные для хранения частной одиночной/повторяющейся встречи. После отправки формы данные отправляются через Ajax на сервер. Я нашел отличный PHP-скрипт, который генерирует массив повторяющихся дат на основе параметров, введенных пользователем, либо в их родном формате, либо с использованием RRULE.
Я не уверен, что лучше всего хранить/извлекать эти повторяющиеся даты. Приложение должно иметь возможность отображать представление календаря для пользователя, включая государственные и частные даты. Приложение также должно будет иметь возможность возвращать, например, всех пользователей, которые могут быть свободными в течение определенного периода времени/даты.
Достаточно ли хранить все события в формате iCal и иметь возможность получать события по запросу? Проблема, которую я предвижу, заключается в том, что повторяющиеся события нелегко искать, поскольку их параметры должны быть расширены «на лету»? Я рассматривал возможность создания второй таблицы каждого отдельного события (сгенерированного) со ссылкой на исходный RRULE, который его создал. Я хотел бы ограничить количество повторяющихся дат, которые могут вводить пользователи, чтобы пользователи не входили в мероприятие каждый день в течение следующих 100 лет! Я думаю, что этот подход также позволил бы мне редактировать отдельные события, которые были первоначально созданы повторяющимся правилом.
Это хороший подход, или есть лучший способ?
Я искал этот сайт, но не нашел эту страницу, содержащую много полезной информации - спасибо. Я думаю, что подход с двумя таблицами правильный, один для rrule, который, в свою очередь, генерирует таблицу событий. Мне придется подумать о бесконечных (или длительных) событиях и просто ограничить их или периодически расширять (возможно, на задании cron). Календарь не только доступен пользователю, который его создал, но должен быть запрошен, чтобы найти «свободные слоты» в системе, поэтому мне нужно будет полностью развернуть rrule (ы) для всех пользователей, охватывающих соответствующие временные рамки (с). – Dave