Market 26.200.0–26.200.100: запрос на установку администратору и окно установки без галочек согласия
В коробочный Битрикс24 пришли две версии market: 26.200.0 и 26.200.100. В 26.200.0 сотрудник без права установки приложений может отправить администратору запрос на установку, а из окна установки убрали галочки согласия с правилами и соглашениями. 26.200.100 чинит окно установки и тулбар страницы «Установленные».
Новое
Запрос на установку вместо тупика (26.200.0)
Раньше пользователь без права установки видел на карточке приложения подсказку «обратитесь к администратору». Теперь кнопка открывает попап «Недостаточно прав для установки» с кнопкой «Отправить запрос». После отправки кнопка блокируется, рядом появляется «Вы уже отправили запрос на установку». Компонент bitrix:market.detail узнаёт об этом из нового arResult['APP']['HAS_ACTIVE_INSTALL_REQUEST'].
Запросы хранит модуль rest, он же шлёт уведомления администраторам в IM и закрывает запросы после установки. Эту часть мы разобрали в rest 26.700.0–26.800.0. market добавил AJAX-действие market.Application.requestInstall и попап market.popup-request-install. Действие можно вызвать и со своей страницы портала, только подключите на ней ui.notification через \Bitrix\Main\UI\Extension::load('ui.notification'), иначе BX.UI.Notification не будет:
BX.ajax.runAction('market.Application.requestInstall', {
data: { code: 'vendor.warehouse', version: '3' },
}).then(() => {
BX.UI.Notification.Center.notify({ content: 'Запрос отправлен администратору' });
}).catch(({ errors }) => {
const alreadySent = errors.some((error) => error.code === 'already_exists');
BX.UI.Notification.Center.notify({
content: alreadySent ? 'Вы уже просили установить это приложение' : errors[0]?.message,
});
});
Пустую версию сервер заменяет на 1, ошибки отдаёт команда rest как есть. Код already_exists значит, что у пользователя уже есть ожидающий запрос на эту версию, denied означает, что он может поставить приложение сам. Ещё бывают already_installed, если версия уже стоит, и not_found, если Маркет не вернул приложение.
Окно установки (26.200.0)
Чекбоксы согласия с Правилами каталога, Лицензионным соглашением и Политикой конфиденциальности из окна установки убрали. Вместо них стоит строка «Устанавливая приложение, вы принимаете условия...» со ссылками на документы, а кнопка установки сама отмечает все согласия. Если у вашего приложения в Маркете свой EULA, пользователь больше не ставит под ним отдельную галочку, принятие засчитывается нажатием кнопки.
Фразу с обратным отсчётом «Приложение откроется автоматически через...» из окна убрали. Финальный экран называется «Приложение установлено» (или «обновлено»). Кнопка на нём одна: «Открыть» у приложения с интерфейсом, «Настроить» у приложения с формой настроек, «Готово» у остальных. Под ней ссылка «Перейти в установленные». Таймер при этом остался, и приложение с интерфейсом через 15 секунд (по умолчанию) откроется само, хотя отсчёта на экране больше нет. В 26.200.100 таймер останавливается, если окно закрыть. Ещё в окне появилась строка о том, что для работы приложения будет создан системный пользователь. В подсказке к ней сказано, что это служебная учётная запись с правами того, кто ставит приложение.
Что сломается
Конструктор VibePlusApplicationLimit (26.200.0)
У Bitrix\Market\Application\VibePlusApplicationLimit, который появился в market 26.150.0, пять необязательных \Closure-провайдеров в конструкторе заменили на два адаптера и флаг. Код, который передавал замыкания (обычно это тесты), упадёт с TypeError, а при именованных аргументах с Error «Unknown named parameter». Адаптеры лежат в Internal, так что снаружи остался только флаг canManageApplications. Он заменяет проверку InstalledListAccess::isAdmin(), от которой зависит действие list в проекции:
<?php declare(strict_types=1);
use Bitrix\Main\Loader;
use Bitrix\Market\Application\VibePlusApplicationLimit;
Loader::requireModule('market');
$projection = (new VibePlusApplicationLimit(canManageApplications: false))->getProjection();
Вызов без аргументов работает как раньше.
Мелочи и находки
market.list-itemи карточкаmarket.detail-componentбольше не тянут окно установки при загрузке страницы. Окно грузится при первом клике черезRuntime.loadExtension('market.popup-install'), оборачивается вmarkRaw(), а повторные клики во время загрузки ждут тот же промис. Приём подходит любому своему расширению наui.vue3, где модальное окно тяжелее списка (26.200.0).- Обработчики закрытия в карточке и списке приложений срабатывали на закрытие любого попапа. Теперь они проверяют, что закрылось окно установки, и останавливают таймер автозапуска приложения. После установки перезагружается слайдер текущего окна, а не верхний (26.200.100).
- Заголовки scope берут последнюю версию фразы
REST_SCOPE_<KEY>_MSGVER_N, перебирая номера по порядку. Если фразы нет, вместо пустой строки показывается имя scope или его ключ (26.200.100). - Тулбар страницы «Установленные» всегда запрашивает у Маркета
METHOD_TOTAL_APPS(счётчик приложений, фильтры поиска), а раньше делал это, только если установленных приложений не было. Фильтры поиска без названия отбрасываются (26.200.100).