Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Пишем свой стартап: экспорт файлов iCal в события календаря

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup With PHP: Simplifying Onramp With OAuth
Building Your Startup With PHP: Choosing and Configuring Production Hosting

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Final product image
What You'll Be Creating

Вступление

Этот учебник является частью серии Пишем свой стартап на PHP на Envato Tuts +. В этой серии я направляю вас через запуск приложения из концепции в реальность, используя приложение Планировщик встреч в качестве примера реального приложения. На каждом шаге, я делаю релиз кода планировщика собраний в качестве примеров с открытым исходным кодом, из которых вы можете узнать что-то новое. Я также рассмотрю связанные с запуском бизнес-вопросы по мере их возникновения.

Я также рад сообщить, что планировщик собраний готов. Вы можете отправлять приглашения на собрания, собирать отзывы от своего участника и завершать встречу, импортируя файл iCal, который я опишу сегодня в ваши календари. Итак, посетите MeetingPlanner.io и попробуйте сами.

О чем этот эпизод?

Building Your Startup - Example Invite File in Webmail

В последнем уроке я описал, как я построил командные ссылки и закодированные операции для участников, которые начинают отвечать на приглашения электронной почты, то есть просматривают страницу собрания или принимают или отклоняют место или время.

Я также упомянул, как женщина, с которой я встречался, предположила, что она не знала, увидит ли она меня или нет, без приглашения на собрание, которое я вскоре предоставил. И затем она сказала, что не знает, когда и где будет отображаться без календаря Google. В сегодняшнем учебнике я расскажу, как я создал функцию iCal для доставки файла .ics, который она могла бы импортировать. Всегда полезно, чтобы кто-то мотивировал развитие, но обычно это коллеги или менеджер по развитию.

Напомним, что весь код для Планировщика собраний написан на Yii2 Framework для PHP. Если вы хотите узнать больше о Yii2, ознакомьтесь с нашей параллельной серией Программирование с Yii2 в Envato Tuts +.

Я участвую в нижеуказанных комментариях и особенно интересуюсь, если у вас есть дополнительные идеи или вы хотите предложить темы для будущих учебников. Вы также можете связаться со мной в Twitter @reifman.

Что такое файл iCal?

Определение iCalendar, Wikipedia говорит:

iCalendar - это формат компьютерного файла, который позволяет пользователям Интернета отправлять запросы на собрания и задания другим пользователям Интернета по электронной почте или совместно использовать файлы с расширением .ics.

В принципе, это файл с расширением .ics, который включает в себя соответствующую информацию о собрании, организаторе и посетителях, дату, время и продолжительность, местоположение и многое другое, все в формате, который могут распознать различные платформы и службы календаря.

Хотя iCalendar имеет расширенные функции, на этом этапе минимального жизнеспособного продукта планировщика собраний (MVP) я хотел убедиться, что наши запланированные встречи могут быть легко импортированы в Календарь Google, Apple Calendar и Microsoft Outlook и будут признаны службами электронной почты. Я буду работать дальше, чтобы расширить его функциональность.

Благодаря более ранним учебным пособиям я создал функциональность, которая собирала всю необходимую информацию, такую как участники, даты и время и места. Теперь мне просто нужно было опубликовать данные мероприятия в приложении и доставить его по электронной почте.

Создание файла .ics

Вместо того, чтобы писать код .ics с нуля, я начал с генератора файлов файлов Ahmad Amin и настроил его. Я поместил код в /common/models/Calendar.php.

Файлы iCal различаются в зависимости от того, кем является пользователь. Другими словами, они должны быть персонализированы для доставки. Прежде всего, ссылки на Планировщик собраний должны быть настроены для аутентификации держателю этого конкретного файла .ics.

Во время процесса завершения собрания мы создаем файл событий для каждого участника с уникальными аутентифицированными ссылками:

В модели Meeting метод buildCalendar объединяет все данные, необходимые генератору для каждого пользователя:

Если есть место (для личных встреч), я включаю ссылку на сайт места (если есть) и адрес для встроенных карт. Я решил записать даты и время в формате UTC для простоты.

Создается общая информация о собраниях, а затем добавляются организатор и участники.

Вот как выглядит образец файла, когда он завершен:

Передача файла .ics в качестве дополнения

В этом предыдущем учебном пособии я описал использование встроенной поддержки рассылки Yii2 с расширением SwiftMailer для доставки приглашений на собрание. Для доставки я использовал интеграцию с SMTP-сервисом Mailgun.

Конечно, в прошлом интеграция вложений в сообщения была сложной, но теперь с Yii это довольно легко. Вот код для добавления файла в приглашение на исходящее собрание:

Мне просто нужно было использовать возвращаемый выше $icsPath и использовать метод attachContent, чтобы включить его с приглашением по электронной почте.

Вот как это выглядело, когда оно прибыло в Gmail:

Building a Startup iCal Files - Gmail Invitation

Когда я открыл файл приглашения в Mac OS, Apple Calendar представил этот первый шаг, чтобы выбрать календарь, чтобы добавить событие:

Building a Startup iCal Files - Apple Calendar Add Event Dialog Box

Вот как это выглядит в дневном режиме моего календаря:

Building a Startup iCal Files - Apple Calendar Day View of Event

Как только событие будет добавлено, оно будет выглядеть так, когда вы нажмете на него:

Building a Startup iCal Files - Apple Calendar Right Pane View of Event

В целом, генерация событий оказалась довольно скромной работой и успешной в ее реализации. Альфа-люди были впечатлены, и мы использовали его для реальных личных встреч.

Проблемы во время разработки

В то время как я узнал о .ics и экспериментировал с ним, мои учетные записи в электронной почте на FastMail только периодически узнавали мои .ics-файлы по приглашению календаря. Мне нужно было обновить свойства, которые я включил, чтобы это распознавалось.

Более правильная структуризация содержимого файла .ics позволила FastMail автоматически распознать вложение:

Building a Startup iCal Files - FastMail Recognizing ics File as Event

К сожалению, кнопка Добавить в календарь ссылается на собственный календарь, который я не использую. Опять же, чтобы добавить в Apple Calendar, как и в Gmail, мне пришлось загрузить и открыть файл .ics.

Кажется, Mac OS распознала файлы, как только они были открыты. Это навело бы меня на пару шагов по созданию события Apple Calendar (показано выше).

Мне также нужно было установить уникальный идентификатор для событий, чтобы мы могли отправлять обновления в будущем. Пока что наш идентификатор встречи базы данных с '@meetingplanner.io' достаточно, например. uid = 23522@meetingplanner.io.

Обеспечение адекватного предоставления часовых поясов в форматах файлов .ics потребовало дополнительных исследований. Для простоты я полагаюсь на генератор Амина для кодирования дат и времени в формате UTC. У меня больше работы в Планировщике собраний для управления часовыми поясами для пользователей.

Я также оставил продолжительность и время окончания от Планировщика собраний. Это будет кое-что, что я должен запланировать в ближайшее время, вероятно, просто добавив продолжительность (в часах) для средней встречи.

Будущие проблемы

В конечном счете, я бы хотел, чтобы Meeting Planner использовал более широкую функциональность iCal. Первоначально я просто хотел, чтобы основные функции работали для MVP. Вот несколько идей ниже.

Возможно, я хочу создать пользовательский параметр в Планировщике собраний, который добавит сигналы тревоги в записи календаря людей. В iCal это называется VALARM, например:

Когда люди обновляют исходное событие, даже после его завершения, я хочу поддерживать обновления события в своем календаре. Это требует доставки VEVENT с идентичным UID, но с инкрементной SEQUENCE (через TutorialsBag):

В настоящее время я не отслеживаю последовательное поле для обновлений.

Я также хотел бы поддержать файлы отмены, которые удаляют событие из календарей. Итак, если человек отменяет встречу с планировщиком собраний, мы отправляем файл iCal посетителям, которые удаляют событие из своего календаря:

Со временем я хотел бы кэшировать файлы .ics для каждого события и участника для проблем с производительностью и хранением. Я хотел бы предоставить некоторое управление файлами, чтобы уменьшить возможное место на диске, необходимое для их хранения, поскольку они нужны только в течение короткого промежутка времени и могут быть легко восстановлены по требованию.

Я также хочу, чтобы каталог, в котором они хранятся, был защищен, так что они не могут быть подвергнуты риску, так как они включают в себя много личной и частной информации, такой как адреса электронной почты и именно там, где вы можете найти конкретных людей в определенное время.

В будущем я также хотел бы попытаться интегрировать менее регулярно используемые расширенные функции iCal для непосредственного подключения к Meeting Planner. Например, мы сможем отменить или перенести собрания из вашей программы календаря iCal с помощью программных интерфейсов планировщика собраний, вместо того, чтобы возвращаться на сайт Планировщика собраний.

Что дальше?

Следите за предстоящими учебниками в нашей серии. В следующем эпизоде я опишу, как добавить поддержку регистрации через Google, Facebook и Twitter, а также как подключить существующие учетные записи к этим социальным сетям с целью ускорения адаптации и упрощения использования.

Опять же, планировщик собраний готов к использованию. Попробуй и спланируй встречу сейчас!

Пожалуйста, не стесняйтесь добавлять свои вопросы и комментарии ниже; Я стараюсь участвовать в обсуждениях на регулярной основе. Вы также можете связаться со мной в Twitter @reifman.

Я также начинаю экспериментировать с WeFunder, основываясь на реализации новых правил SEC. Пожалуйста, обратите внимание на наш профиль. Я могу написать об этом как часть этой серии.

Ссылки по теме

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.