Из-за большого объёма доработок по новой версии я принял решение выложить промежуточную сборку, получившую обозначение Intellect Board 3.05 Rebuild.
Наиболее существенные изменения
- Настроена фильтрация тегов HTML по белому списку, поэтому теперь можно разрешить его применение и рядовым пользователям. Сам список тегов задаётся в файле etc/tags.txt.
- Добавлена поддержка PWA (Progressive Web Application): теперь просмотренные страницы доступны в оффлайн режиме. Также ускорилось открытие страниц за счёт улучшенного кеширования файлов шрифтов, скриптов и стилей.
- Возможность ограничить время редактирования сообщений, а также удалить своё сообщение в течение этого времени, если в теме не появилось новых ответов.
- Решена проблема с поддержкой emoji, коды которых больше 0xFFFFFF.
- Полностью переработано автосохранение форм с сообщением: теперь сохраняется не только основной текст, но и все поля формы. Сохранение делается не только по таймеру, но и при закрытии страницы.
Улучшения юзабилити
- Сделано автодополнение имён пользователей при отправке личных сообщений и поиске в списке участников.
- Добавлена автоматическая генерация teaserов для сообщений в блоге с возможностью задавать минимальную и максимальную длину. При этом разбиение делается с учётом границ абзацев (максимальный приоритет), предложений или их частей, вырезаются изображения, цитаты и таблицы, а также закрываются все открытые теги.
- Улучшено юзабилити модераторских действиях: при разделении сообщений с переносом в существующую тему можно ввести не только её номер, но и часть названия или URL для облегчения поиска. А список разделов при переносе тем выводится с группированиям по категориям и сохранением порядка сортировки.
- «Умный тег» [video] — теперь в него можно помещать не только прямую ссылку на видеофайл, но и ссылки на страницы с видео на наиболее популярных в Рунете видеохостингах: YouTube, Rutube, VKVideo, TikTok, Одноклассники и страницу с видео в Яндекс.Облаке.
- Ссылка «Развернуть» теперь не выводится для коротких цитат и кусков кода, которые сразу показаны полностью.
- Если не задан текст ссылки (т.е. она имеет вид [url]https://intbpro.ru[/url]), то её URL выводится без префикса http:// или https:// и с заглавной буквы: Intbpro.ru для улучшения визуального восприятия. Также автоматически распознаются ссылки на несколько наиболее известных ресурсов (например, YouTube и Telegram) и заменяются на их названия: [url]https://t.me/x4_pro[/url] будет заменена на Telegram: x4_pro, если включена опция «Преобразовывать адреса в ссылки».
- Доработан внешний вид форм и информационных сообщений, форма регистрации пользователя сделана более дружественной к инструментам автодополнения.
Исправление мелких ошибок
- Не работавшая отправка сообщений по Ctrl+Enter, если используется WYSIWYG-режим редактора.
- Ошибки при модерации разделов с "-" в URL.
- Ошибки при отображении категории.
Доработки безопасности
Сделано несколько доработок в плане безопасности: коды и токены для OAuth, а также случайное поле профиля пользователя теперь генерируются с помощью криптографически надёжной функции random_bytes. Для хеширования cookies долгосрочной авторизации и создания авторизационных ссылок-ключей (ссылок с параметром authkey) применяется алгоритм SHA-256 вместо MD5. Также изменены настройки сессионных cookies: они устанавливаются с флагом SameSite=strict.Примечание: смена алгоритма хеширования приведёт к тому, что часть пользователей будет разово разлогинена, также перестанут действовать авторизационные ссылки (например, для отписки от тем), которые были сгенерированы до обновления форума.
Также проведён рефакторинг кода: функция load_lib объявлена устаревшей, а подключение библиотек теперь делается просто через создание экземпляра класса new Library_имя с использованием механизма автоматической загрузки классов PHP.
Изменений в структуре базы данных по сравнению с версией 3.05 не делалось, поэтому запускать install.php и выполнять обновление не требуется. Однако необходимо скопировать файл etc/tags.def в etc/tags.txt и файл etc/routes.def в etc/routes.txt, после чего отредактировать любой раздел, чтобы обновились настройки путей сервера.

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