TOPG Reports 1.0.0
Для InstantCMS 2.17.3+

Полный установочный пакет первой публичной версии.

TOPG Reports работает только с жалобами на профили пользователей.

Основные возможности:
- кнопка «Пожаловаться» в чужом профиле;
- модальная форма с причинами жалоб из БД;
- обязательный комментарий для настраиваемых причин;
- защита от дублей и суточный лимит;
- штатные notice InstantCMS администраторам/модераторам;
- очередь жалоб в админке;
- статусы: новая, на рассмотрении, подтверждена, отклонена, обработана;
- внутренние комментарии и журнал действий модератора;
- управление причинами жалоб;
- статистика по статусам, причинам и профилям;
- автоматическое чтение актуальных пользовательских полей профиля InstantCMS;
- поддержка пользовательских наборов полей и сторонних профильных полей;
- поддержка profile_before_view и user_profile_sys_fields;
- серверный визуальный SVG-снимок профиля без Chromium, Puppeteer, Imagick и внешних сервисов;
- встраивание аватара в снимок;
- структурированный JSON-снимок профиля;
- контрольная SHA-256 сумма снимка;
- кнопка очистки всех визуальных скриншотов без удаления жалоб и структурированных данных;
- независимый подсчёт статистики одним SQL aggregate;
- надёжная AJAX-отправка формы с обычным POST fallback;
- шаблоны компонента только в /templates/default/controllers/topg_reports/.

Совместимость:
- InstantCMS 2.17.3+
- PHP 7.4+

Установка:
1. Сделайте резервную копию БД и файлов.
2. Панель управления -> Компоненты -> Установить пакет дополнения.
3. Загрузите ZIP.
4. Откройте TOPG Reports -> Настройки.
5. Проверьте «Получатели notice». По умолчанию установлен ID 1.
6. Очистите кеш InstantCMS.

Важно:
- компонент не блокирует и не удаляет пользователей автоматически;
- пользователь не видит историю отправленных им жалоб;
- жалобы на фото, сообщения, комментарии и форум не реализованы;
- причины жалоб управляются из админки;
- поля профиля не захардкожены: для каждой новой жалобы схема профиля читается из InstantCMS автоматически.


Совместимость с InstantCMS 2.17.3:
Проверены используемые TOPG Reports API в исходном коде InstantCMS 2.17.3:
- hook user_profile_buttons;
- hook profile_before_view;
- hook user_profile_sys_fields;
- cmsTemplate::addTplJSNameFromContext();
- cmsTemplate::renderForm();
- параметр hide_toolbar штатного шаблона формы;
- динамическое получение полей профиля {users}.

Минимальная версия компонента в manifest: InstantCMS 2.17.3.


Исправление контрольной суммы:
- SHA-256 теперь вычисляется после сохранения и повторного чтения JSON+SVG из БД;
- snapshot-поля хранятся как MEDIUMBLOB, чтобы charset/collation таблицы не меняли байты снимка;
- добавлена версия алгоритма profile_snapshot_hash_version;
- старые снимки с hash_version < 2 один раз получают новую baseline-сумму по уже сохранённым данным;
- checksum сравнивает сохранённый snapshot с его baseline и не зависит от последующих изменений текущего профиля пользователя.
