Disk 26.1400.0–26.1500.0: очереди загрузки, аудит и ограничения файлов
Ломающее обновление
Удалены или изменены публичные API — прикладной код может перестать работать.
Диск за две версии получил квоты на сотрудника, запрет форматов, журнал аудита и загрузчик, который переживает перезагрузку страницы. Почти всё это выключено флагами и частично требует лицензии. Свой код проверьте на другом: удалены несколько методов Configuration и VibeOffice, а в 26.1500.0 изменились правила совпадения имён и уникальный индекс b_disk_object.
Новое
Ограничьте форматы и место для сотрудников
С 26.1400.0 администратор задаёт запрещённые форматы и персональные квоты. Функции доступны при флаге DiskRestrictions и подходящей лицензии: облачном тарифе или коробочной редакции «Холдинг». Квоту из кода выдаёт команда, размер — целые гигабайты от 1 до 1048576:
use Bitrix\Disk\Public\Command\Quota\SetUserQuotaCommand;
$result = (new SetUserQuotaCommand(userId: $employeeId, quotaGb: 20))->run();
if (!$result->isSuccess()) {
$codes = array_map(fn ($error) => $error->getCode(), $result->getErrors());
}
Повторный вызов меняет квоту, а не добавляет вторую. Квота меньше уже занятого места сохраняется как есть. Снять квоту — RemoveUserQuotaCommand, занятое место пересчитывается раз в 300 секунд.
Проверка формата смотрит на расширение и на сигнатуру файла, если та распознана уверенно. Она срабатывает при записи файла, новой версии и копировании, перемещение уже лежащего файла не проверяется. Отказ приходит ошибкой модели, например DISK_FILE_22012 или DISK_FILE_22013. Открытая сессия редактора может дописать документ, а при следующем открытии действует новая политика.
В 26.1500.0 добавились запрет файлов без расширения и адресные правила. Сначала проверяются правила сотрудника, затем команды и подразделения, применяется первый непустой уровень. Если на этом уровне есть правило замены, глобальное правило не действует. Итоговую политику для сотрудника видно в интерфейсе.
Включите журнал аудита
В 26.1400.0 появился журнал операций с фильтрами и карточками событий: создание, изменение, копирование, удаление и права. Пишется он при флаге AuditLog (по умолчанию выключен) и включённой настройке аудита, просмотр требует лицензии, настройки меняет администратор. Для подписчиков есть события AuditDomainEvent, AuditObjectEvent, AuditLinkEvent, AuditRightsEvent, для интерфейса — контроллеры Audit и AuditSettings. С 26.1500.0 срок хранения выбирается из 1, 3, 6 месяцев или 1, 2, 3 лет, по умолчанию 6 месяцев, и сокращение срока надо подтвердить.
Дайте загрузке пережить перезагрузку
В 26.1500.0 закреплённый загрузчик хранит очередь файлов и дерево папок на сервере. Закрыли вкладку посреди загрузки — при следующем входе очередь восстановится, в какой бы папке ни был пользователь. Публичные команды и disk.dockeduploader.queue умеют повторять, возобновлять, отменять и закрывать загрузки. Один файл передаёт одна вкладка, а если она пропала, владение освобождается по heartbeat. При повторной фиксации уже записанный файл находится по токену намерения, так что дубля не будет.
Загрузчик выключен флагами DockedUploaderFlag и DockedUploaderPortalFlag, второй работает только вместе с первым. Бизнес-процесс и аналитика после загрузки запускаются не больше одного раза, но при сбое между записью состояния и отправкой могут не запуститься вовсе. Если процесс обязателен, не полагайтесь на восстановление очереди.
Подключите свои сущности и автоматизацию
С 26.1400.0 через событие onBuildRelationProviderList Диск узнаёт, к каким вашим сущностям прикреплён файл. Обработчик возвращает ['MODULE_ID' => ..., 'CLASS' => ...], где класс реализует Bitrix\Disk\Public\Contract\Relation\RelationProviderInterface.
Действия бизнес-процессов из 26.1400.0 получают внутреннюю, скачиваемую или публичную ссылку на файл и переименовывают его с сохранением расширения. Для публичной ссылки задаются срок, пароль, режим доступа и короткий URL. В 26.1500.0 добавлено действие, которое выдаёт и отзывает права от имени указанного оператора.
AI, HTML-редактор и синхронизация
- В 26.1400.0
DiskToolSetрегистрирует 26 инструментов AI Assistant для файлов, папок, истории, корзины, ссылок и доступа. Они работают в контексте пользователя, скачивание ограничено 50 МиБ. - В 26.1500.0 в меню файла появился чат BitrixGPT для текста, Markdown, CSV, офисных документов и PDF до 50 МиБ. Нужны права, интеграция и флаг
BitrixGptFileChatFlag, по умолчанию выключенный. - HTML-редактор 26.1500.0 включается флагом
HtmlEditor. Контроллер файла даётacquireHtmlEditingSessionAction(),saveHtmlEditingSessionAction()иfinishHtmlEditingSessionAction(), сессия живёт 600 секунд. Сохранение принимает операцииsetInnerHTMLиsetAttr, проверяет версию, права, блокировку и разметку и создаёт новую версию документа. DestinationPickerвыбирает до 100 объектов, ищет папки, создаёт подпапки и проверяет права, место и конфликты. В 26.1400.0 его включала опцияdisk_enable_destination_picker, с 26.1500.0 он включён всегда. Мобильная часть — в разборе Diskmobile 26.600.0.- REST V3
disk.sync.index.getотдаёт текстовый индекс доски при флагеBoardIndex. В 26.1500.0 карточка синхронизации получила необязательный разделaccessс доступностью действий, внутренним и публичным доступом, а журнал синхронизации учитывает изменения публичного доступа и sharing.
Что сломается
Уберите удалённые проверки конфигурации
В 26.1400.0 удалены Configuration::isEnabledFileViewerFormats() и FileViewerFormatsFlag: TIFF, WAV и MKV больше не прячутся за отдельным флагом. В 26.1500.0 удалён Configuration::isEnabledHtmlViewer(), и просмотр HTML/HTM не зависит от disk_enable_html_viewer. Новый isEnabledHtmlEditor() отвечает за редактирование и удалённую проверку не заменяет.
Поправьте вызовы конструкторов
В 26.1400.0 конструктор FilePicker\Provider получил ?AvailableStorageService перед ViewerAttributesFactory. Фабрика, переданная четвёртым позиционным аргументом, попадёт не туда: перенесите её в пятый или передайте по имени viewerAttributesFactory:.
В 26.1500.0 у Document\Vibeoffice\EditSessionAdmissionTicket удалены commit() и cancel(), конструктор принимает только результат допуска: EditSessionAdmission::admit() больше не резервирует общий пул сессий OnlyOffice. Удалён и TerminalSessionFinalizer::releaseUserUsage(), а конструктор финализатора теперь принимает только необязательный DocumentStateRepository, без RestrictionManager.
Проверьте сравнение имён
С 26.1500.0 Диск сравнивает имена после нормализации Unicode, без учёта регистра и невидимых символов, но с учётом диакритики. Например, Отчёт.docx и отчёт.docx в одной папке конфликтуют, а cafe и café нет. Это касается загрузки и переименования. Controller\TrackedObject::renameAction() по умолчанию получил $autoCorrect = true и сам исправит имя, для прежнего строгого режима передавайте false.
БД
В 26.1500.0 уникальный индекс NAME, PARENT_ID в b_disk_object заменён на обычный NAME, PARENT_ID, ID и уникальный PARENT_ID, NAME_KEY. Если вы вставляете объекты прямым SQL, уникальность теперь держится на NAME_KEY, лучше перейти на API Диска. В объектах и версиях появился UPLOAD_INTENT_TOKEN с уникальными индексами. b_disk_attached_object.OWNER_PARAMETERS хранит до 512 символов, и ORM запрещает менять сохранённые параметры владельца через update.
Остальные новые таблицы обслуживают квоты, аудит, очистку и очереди загрузки, адресные правила форматов, метрики синхронизации и статистику досок для сводки intranet. Вручную их трогать не нужно.
Мелочи и находки
- В 26.1400.0 очистка незавершённой загрузки не удаляет файл, если его успели прикрепить, переместить, использовать или добавить версию. REST-чтение и скачивание могут пройти через доступное вложение, изменение по-прежнему требует прав хранилища.
- VibeOffice в 26.1400.0 показывает единый экран отказа, повторно проверяет доступ при запросе версии и подтверждает присутствие в шапке документа через Pull.
- В 26.1500.0 появилось отдельное окно прав объекта и хранилища, а пользователь без доступа видит, к кому из сотрудников обратиться.
- В 26.1400.0 исправлены фильтрация и пагинация списка папки, файловый picker научился сортировать по размеру. Документами, хлебными крошками и деревом папок теперь можно пользоваться с клавиатуры и скринридера.
Устаревшие и удалённые API в этой версии
| Символ | Статус | Чем заменять |
|---|---|---|
Bitrix\Disk\Configuration::isEnabledFileViewerFormats()
|
Удалено | — |
Bitrix\Disk\Config\Feature\FileViewerFormatsFlag
|
Удалено | — |
Bitrix\Disk\Configuration::isEnabledHtmlViewer()
|
Удалено | — |
Bitrix\Disk\Document\Vibeoffice\EditSessionAdmissionTicket::commit()
|
Удалено | — |
Bitrix\Disk\Document\Vibeoffice\EditSessionAdmissionTicket::cancel()
|
Удалено | — |
Bitrix\Disk\Document\Vibeoffice\TerminalSessionFinalizer::releaseUserUsage()
|
Удалено | — |