main · Главный модуль 26.650.0 Заметное

main 26.650.0: сброс счётчиков ленты пачкой и превью своих ссылок без похода наружу

3 мин чтения
Узнавайте о ломающих изменениях Битрикса раньше, чем они доедут до прода: свежие разборы — в канале @bxmax_updates

Два изменения в ядре, оба — про лишнюю работу, которую система делала на ровном месте. Счётчики живой ленты научились сбрасываться одним вызовом вместо цикла, а превью ссылок перестало ходить HTTP-запросом на собственный портал. Ломающих удалений нет: все правки сигнатур — добавление аргументов с дефолтами.

Счётчики ленты: один вызов вместо N

Появился CAllUserCounter::clearLiveFeedCodes():

        \CUserCounter::clearLiveFeedCodes(
    $userId,
    ['**', 'livefeed'],   // коды счётчиков
    SITE_ID,
    sendPull: true,
    cleanCache: true,
);

    

Зачем — понятно из соседнего модуля в том же батче. В im 26.800.0 приехали LiveFeedReadAllHandler и событие onSpaceLiveFeedReadAll: сценарий «прочитать всё» в ленте. Раньше он означал обход кодов по одному, и на каждый код — свой pull-event и своя инвалидация кэша. Пользователь жал одну кнопку, портал получал пачку пушей. Теперь коды гасятся списком, а pull уходит один.

Рядом — SendPullEvent() с новым аргументом $ensureZeroForGroupedCode = false. Это про застревающие счётчики: когда сгруппированный код обнуляется, клиенту нужно явно отправить ноль, иначе UI останется с висящей цифрой, которую нечем сбить.

UrlPreview: свой домен больше не дёргаем снаружи

Новый protected-метод UrlPreview::isOwnDomain(Uri $uri) сравнивает хост ссылки с SITE_SERVER_NAME и опцией main.server_name. Если хост свой и Router::dispatch() узнаёт URL — превью помечается как TYPE_DYNAMIC и строится без внешнего запроса.

До этого портал, встретив в сообщении ссылку на самого себя, честно шёл за ней HTTP-клиентом. В худшем случае — на закрытом контуре, за прокси или при кривом DNS — этот запрос просто не проходил, и превью внутренних страниц не работало вовсе. Заодно на один исходящий запрос по пользовательской ссылке меньше — обычная SSRF-гигиена.

API миграций: два новых параметра

Ядро продолжает докручивать UpdateSystem\Migration (модули на него как раз массово переезжают в этом же батче):

  • Migration\Event::register() / registerCompatible() — ?int $sort = null, порядок вызова обработчика. Раньше сортировку в миграции задать было нечем, всегда получалось 100.
  • Migration\Stepper::add() / addIfModuleExists() / addIfModuleInstalled() — ?int $execDelay = null, задержка первого запуска.

С execDelay есть неочевидная деталь, которую видно только в коде: внутри стоит max($delay, $execDelay ?? 0), где $delay — среда исполнения (60 секунд по умолчанию, 600 в облаке, 900 при установке дистрибутива). То есть execDelay умеет только отодвинуть запуск, но не приблизить. Указать 10 секунд и получить старт через 10 не выйдет — параметр про «этот степпер тяжёлый, пусть подождёт подольше».

Что делать

  • Если у вас есть свой сценарий массового прочтения ленты — перепишите цикл на clearLiveFeedCodes().
  • Если наследуете Event::register, Stepper::add или SendPullEvent — допишите новые параметры в сигнатуру наследника, иначе PHP 8 выдаст предупреждение о несовместимости.
  • Обычные вызовы этих методов трогать не нужно: все аргументы опциональные.

Новая версия вышла — разбор уже в Telegram

В канале @bxmax_updates публикуем каждый свежий разбор: что сломается, что устарело и что появилось в API. Узнаете до того, как обновите прод.

Подписаться

Читайте дальше

main 26.1000.0 Ломающее Свежее

Main 26.900.0–26.1000.0: агенты без eval, AJAX-контроллеры прячут текст исключений, экспорт только с подписью

Главный модуль приехал двумя версиями сразу, 26.900.0 и 26.1000.0 (прошлую, 26.800.0, мы разбирали [здесь](/bitrix-updates/main/main-26-800-0)). В 26.900.0 агенты уходят с `eval` на `Callback`, в `bitrix.php` появляются команды `main:*`, в `main.core` — клиент `HttpClient`, а Tokenizer стал обязател…

1 мин
main 26.800.0 Безопасность

Main 26.800.0: закрыт SSRF через ftp://, а translit и выбор SMTP-отправителя работают иначе

Main 26.800.0 закрывает SSRF в `CFile::MakeFileArray()` через ссылки `ftp://` и в RSS-гаджете, а заодно чистит ввод при инлайн-редактировании в `CAdminUiList` и в `menu_edit.php`. Сильнее по проектам ударят изменения поведения: `CUtil::translit()` оставляет на конце `_`, почта по-другому выбирает SM…

1 мин
main 26.750.0 Заметное

Main 26.750.0: точка в имени плейсхолдера больше не ломает почтовые шаблоны

Main 26.750.0 меняет три файла ядра, +16/−5 строк, и заметная правка среди них одна (вторая, в лицензионном `ActivationSystem`, служебная). Но сидит она в месте, где из почтового шаблона генерируется PHP-код, так что посмотреть на неё стоит всем, у кого в шаблонах есть плейсхолдеры с точкой в имени,…

5 мин
main 26.700.0 Заметное

Main 26.700.0: в ядре появились фича-флаги

Битрикс выкатил main 26.700.0 — и это тот редкий случай, когда в ядре появляется целая новая подсистема: фича-флаги `Bitrix\Main\Config\Feature` с двумя таблицами в БД. Плюс несколько тихих поведенческих изменений, которые стоит проверить, если у вас не-UTF-8 сайт, кастомные фильтры пользователей ил…

4 мин
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…

Можно закрыть чат и перейти на другую страницу. Когда ответ будет готов, на кнопке Домового появится отметка.

Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти