calendar 25.197.0: тип события call_sync и чат, который создаётся сам
У события календаря появился собственный тип, и первый его пользователь — синхронизированные созвоны: при создании такого события автоматически поднимается чат с гостевой ссылкой. Ломающих изменений нет, все правки сигнатур совместимы.
EVENT_TYPE: событие теперь знает, откуда оно
CreateEventCommand::__construct получил необязательный последний аргумент ?string $eventType = null и геттер getEventType(); обработчик пишет значение в поле EVENT_TYPE. В словаре Dictionary::EVENT_TYPE добавлен 'call_sync' => '#call_sync#'.
Смысл — отличать события, созданные сценарием, от событий, которые пользователь завёл руками. До этого приходилось опознавать их по косвенным признакам (названию, описанию, наличию ссылки), а это всегда хрупко.
Важно, как тип попадает в систему: в формах compacteventform и eventeditform появилось скрытое поле event_type, а CalendarEntryAjax принимает его только из белого списка Dictionary::EVENT_TYPE. Произвольную строку с клиента не проставить — правильный подход, учитывая, что тип управляет автоматикой.
Чат для созвона создаётся сам
Новый подписчик CreateCallSyncChat (__invoke, getEventClasses) подписан на AfterCalendarEventCreated и AfterCalendarEventEdited. Срабатывает он только при getSpecialLabel() === Dictionary::EVENT_TYPE['call_sync'] — то есть на обычные встречи не реагирует.
Зависимости: im (GuestLinkService, GuestChatLink) и intranet (Secretary). Константа GUEST_LINK_URL_MARKER = '#cal-sync-guest'.
Складывается общая картина: событие типа call_sync → чат → гостевая ссылка, по которой внешний участник заходит без учётной записи. Гостевые ссылки в этом же батче переделали в im 26.700.0 — там как раз завезли отдельную область авторизации гостя и очистку неактивных. Стоит смотреть на эти два релиза вместе.
Ещё два новых экшена
CalendarAjax::getStandaloneCompactFormDataAction()— данные компактной формы, только для личного календаря текущего пользователя (type=user). Ограничение зашито в экшен, чужой календарь через него не открыть.SharingAjax::enableAndGetSharingConfigAction()— включает sharing, если он был выключен, и сразу возвращает ссылку, настройки календаря и пользователя. Экономит шаг «сначала включите шаринг в настройках»: раньше это были два действия пользователя, теперь одно.
Под первый экшен сделано JS-расширение calendar.compacteventform-launcher (CompactFormLauncher) — компактную форму создания события теперь можно поднять из любого места интерфейса, не таща за собой весь календарь. Плюс контролы user-sharing.js и user-sharing-controller.js.
Что делать
- Если делаете свою интеграцию созвонов — используйте
EVENT_TYPEвместо распознавания событий по названию. - Собственные типы событий добавлять придётся через
Dictionary::EVENT_TYPE: белый список вCalendarEntryAjaxотсечёт всё остальное. - Планируете встраивать быстрое создание события — посмотрите на
CompactFormLauncherпрежде чем писать свою форму.