Платформа «Перечень 2026»

Система сбора и обработки перечня медицинских изделий

О платформе

Платформа «Перечень 2026» предназначена для сбора, проверки и обработки перечней медицинских изделий от учреждений здравоохранения Гродненской области. Система позволяет организациям загружать свои перечни в формате Excel, отслеживать статус проверки, а администраторам — управлять пользователями, формировать сводные отчёты и экспортировать данные.

Разработка платформы ведётся с 2026 года. Система построена на собственной архитектуре MVC на нативном PHP с интеграцией Telegram-уведомлений.

Информация о системе

Версия платформы2.23.2
Версия PHP8.3.32
База данныхMySQL (ipdby_medtech_2026)
АвторизацияBcrypt + Remember Me (3 года)
УведомленияTelegram

Полезные ссылки

История версий

v2.23.2
от 2026-07-28 PATCH
  • **`config/app.php`** — глобальная функция `e(?string $str, string $default = ''): string`. Циклически декодирует HTML-сущности (любой уровень вложенности), затем экранирует через `htmlspecialchars()` для безопасного вывода
  • **`views/pages/perechen/admin-user-files.php`** — `htmlspecialchars()` заменён на `e()` для имени пользователя и названия организации (строки 10, 20)
  • **`views/pages/perechen/export.php`** — `htmlspecialchars()` заменён на `e()` для названий организаций в фильтре и таблице (строки 129, 137, 242)
  • **`views/pages/perechen/admin-files.php`** — `htmlspecialchars()` заменён на `e()` для названий организаций в фильтре и таблице (строки 65, 138-139)
  • **`views/pages/perechen/admin-orgs.php`** — `htmlspecialchars()` заменён на `e()` для названий организаций (строка 190)
  • **`views/pages/perechen/org_exports.php`** — `htmlspecialchars()` заменён на `e()` для названий организаций (строка 62)
  • **`config/app.php`** — версия: 2.23.2
  • --
v2.23.1
от 2026-07-28 PATCH
  • **`views/pages/perechen/export.php`** — удалён таб «Сводный перечень» (`?tab=reports`); табы переведены на `display:inline-flex;align-items:center;gap:6px`; иконки увеличены с 16×16 до 18×18; убран `margin-right` у SVG; обновлены подсказки
  • **`app/Controllers/AdminPerechenController.php`** — при `?tab=reports` выполняется редирект на `?tab=files`; редиректы после `action=generate` и `generateConsolidated()` теперь ведут на `?tab=files` вместо `?tab=reports`
  • **`config/app.php`** — версия: 2.23.1
  • --
v2.23.0
от 2026-07-28 MINOR
  • **Новый пункт меню «Перечни организаций»** — в сайдбаре после «Экспорт в 1С». Страница с кнопкой «Сформировать перечни для всех организаций» и историей сформированных файлов
  • **`AdminOrgExportsController`** — новый контроллер с методами `index()`, `generate()`, `download()`
  • **Таблица `p2026_org_exports`** — хранит информацию о сформированных перечнях для каждой организации: id организации, имя, имя файла, размер, количество позиций, версия шаблона, кто сформировал, дата
  • **Генерация per-org файлов** — для каждой организации с данными (`parsed_items > 0`) формируется отдельный файл `Perechen_1C_{OrgName}_{date}.xlsx` через `ExcelService::generateFlat1C()` с указанием имени файла
  • **Логирование** — каждое создание перечня логируется в `p2026_status_log` с action `org_export_1c`
  • **`app/Services/ExcelService.php`** — `generateFlat1C()` теперь принимает опциональный 5-й параметр `?string $outFilename = null`. Если передан, файл сохраняется с указанным именем вместо автоматического. Обратная совместимость полная
  • **`index.php`** — 3 новых роута: GET `/admin/perechen/org-exports/`, POST `/admin/perechen/org-exports/generate/`, GET `/admin/perechen/org-exports/download/{id}`
  • **`views/layouts/main.php`** — добавлен пункт меню «Перечни организаций» с иконкой файла
  • **`views/pages/perechen/org_exports.php`** — новая страница с кнопкой генерации, flash-сообщениями, таблицей истории и боковой панелью с описанием
  • --
v2.22.1
от 2026-07-28 PATCH
  • **`app/Controllers/AdminReportsController.php`** — `generate()` теперь использует те же данные, что и 1C export (файлы с `parsed_items > 0`, один на организацию, приоритет `included_in_report`), вызывает `ExcelService::generateFlat1C()` вместо `generateConsolidatedReport()`, сохраняет версию шаблона в `p2026_exports.template_version`
  • **`views/pages/reports/index.php`** — заголовки, шаги и текст переведены на 1С-тематику. Кнопка «Сформировать отчёт» → «Сформировать перечень для 1С». Добавлена кнопка «Скачать шаблон 1С». Кнопка «Параметры» ведёт на `/admin/perechen/export/`
  • **`views/layouts/main.php`** — пункт сайдбара «Сводные отчёты» → «Экспорт в 1С`
  • --
v2.22.0
от 2026-07-28 MINOR
  • **auto_login теперь работает** — в `Auth::tryRememberMe()` добавлена проверка `AND auto_login = 1` в SQL-запросе. Теперь если пользователь отключил «Входить без пароля», автоматический вход не сработает, даже если remember_token сохранился в БД (например, после переключения между аккаунтами через switch)
  • **clearRememberCookie() при logout** — исправлено, что при logout'е через `/login/forget/{id}` (удаление своего аккаунта) кука remember_me гарантированно чистится
  • **`/login/forget/{id}`** — удаляет аккаунт из списка известных (`p2026_auth_known_accounts`) + очищает remember_token в БД. Если удаляемый аккаунт — текущий в сессии, происходит полный logout
  • **`/login/logout-all/`** — очищает все известные аккаунты для device_id, все remember_token в БД, полный logout. Все аккаунты выходят, при следующем визите нужно вводить пароль
  • **Кнопка «×»** в свитчере (профильное меню) — для каждого известного аккаунта (кроме текущего) появилась иконка удаления из списка
  • **Кнопка «Выйти из всех аккаунтов»** на странице `/login/` — отображается когда пользователь уже в системе и когда показывает список известных аккаунтов
  • **`app/Middleware\Auth.php`** — `tryRememberMe()`: SQL добавлено `AND auto_login = 1`
  • **`app/Controllers/AuthController.php`** — новые методы `forgetAccount()` (POST /login/forget/{id}) и `logoutAll()` (POST /login/logout-all/)
  • **`index.php`** — 2 новых роута
  • **`views/layouts/main.php`** — в свитчере аккаунтов добавлена кнопка «×» для удаления
  • **`views/pages/login.php`** — добавлена кнопка «Выйти из всех аккаунтов» для обоих сценариев (авторизован / список известных)
  • --
v2.21.2
от 2026-07-28 PATCH
  • **Баг сохранения auto_login** — чекбокс заменён на `.switch`-переключатель с `input[type=hidden]`, который всегда отправляет `0` или `1`. Теперь переключение реально работает (ранее сервер не видел `$_POST['auto_login']` при снятой галочке)
  • **help-popup подсказки** — убрано `overflow:hidden`, обрезавшее тень; добавлена стрелка `::after`; добавлено закрытие по клику вне попапа
  • **`views/pages/settings/user/security.php`** — чекбокс (строка 45) заменён на `.switch-row` с `toggleSwitch()` JS; скрытый `input[name=auto_login]` + inline CSS для стрелки попапа + скрипт закрытия попапа по клику вне
  • --
v2.21.1
от 2026-07-28 PATCH
  • **Табы пользовательских настроек** — страница `/settings/` разделена на 4 вкладки с отдельными URL: Учётная запись (account), Уведомления (notifications), Внешний вид (appearance), Безопасность (security)
  • **Самостоятельное управление auto-login** — пользователь может включить/отключить автоматический вход на вкладке «Безопасность». При отключении remember_token очищается, при следующем входе потребуется пароль
  • **Помощь (help popup)** — на вкладке безопасности для раздела «Автоматический вход» добавлен вопросительный знак с подсказкой
  • **`SettingsController`** — полностью переписан: добавлены методы `account()`, `notifications()`, `appearance()`, `security()`, `update()`. Старый `index()` удалён. Admin-пользователи по-прежнему редиректятся на `/admin/settings/`
  • **`index.php`** — добавлены 4 GET-роута для вкладок и 1 POST-роут для обновления настроек
  • **`views/pages/settings/user/`** — новая папка с 5 файлами: `_tabs.php`, `account.php`, `notifications.php`, `appearance.php`, `security.php`
  • **`views/pages/settings.php`** — больше не используется (можно удалить в следующей итерации)
  • Автоматический вход (auto-login) теперь можно отключить от имени пользователя, а не только от администратора. Ранее на вкладке «Безопасность» был только декоративный переключатель `.switch.on` без функционала
  • Затронутые файлы: SettingsController.php, index.php, config/app.php, views/pages/settings/user/*, changelog.md
  • Версия: 2.22.0 → 2.21.1
  • --
v2.22.0
от 2026-07-28 MINOR
  • **Табы редактирования пользователя** — страница `/admin/users/edit/{id}` разделена на 4 вкладки с отдельными URL: Основное (main), Контакты (contacts), Настройки (settings), Безопасность (security)
  • **Вкладка «Безопасность»** — новый раздел с блоками:
  • **Колонка `auto_login`** в `p2026_users` (TINYINT, default 1) — хранит настройку автоматического входа для каждого пользователя
  • **`AdminUsersController`** — добавлены методы: `editContacts()`, `editSettings()`, `editSecurity()`, `clearSessions()`. `edit()` теперь рендерит вкладку «Основное». `update()` поддерживает `_tab` для редиректа и `auto_login` для управления remember_token
  • **`REMEMBER_ME_LIFETIME`** — изменён с 86400 * 365 * 3 (~3 года) на 86400 * 180 (~6 месяцев)
  • **`index.php`** — добавлены 4 новых роута для вкладок and clear-sessions
  • Затронутые файлы: AdminUsersController.php, index.php, config/app.php, _tabs.php, edit_main.php, edit_contacts.php, edit_settings.php, edit_security.php, changelog.md, p2026_users (auto_login column)
  • Версия: 2.20.0 → 2.22.0
  • --
v2.20.0
от 2026-07-28 MINOR
  • **Account Switcher на странице входа** — при повторном посещении login-страницы пользователь видит список ранее использованных аккаунтов в виде карточек: аватар (первая буква имени), имя, логин, организация, роль. Клик по карточке — мгновенный вход без пароля
  • **Кнопка «+ Другой аккаунт»** — скрывает список аккаунтов и показывает стандартную форму входа с логином и паролем
  • **Переключение аккаунтов внутри системы** — в профильном меню (правый верхний угол) добавлен раздел «Сменить пользователя» со списком всех известных аккаунтов. Переключение в один клик
  • **Таблица `p2026_auth_known_accounts`** — хранит связку device_id ↔ user_id, позволяя использовать несколько аккаунтов на одном устройстве
  • **Device ID cookie** — персистентный идентификатор устройства (5 лет), связывающий все известные аккаунты
  • **Страница входа** — полный редизайн: Google-style карточки аккаунтов, скрываемая форма входа, адаптация под пустой список (стандартная форма)
  • **AuthController** — добавлен метод `switchAccount()` для бесшовного переключения, логика сохранения известных аккаунтов
  • **Auth middleware** — добавлены методы: `getDeviceId()`, `saveKnownAccount()`, `getKnownAccounts()`
  • **Профильное меню** — динамический список известных аккаунтов для быстрого переключения
  • Переключение между аккаунтами работает только для device_id, который ранее использовал этот аккаунт — проверка `p2026_auth_known_accounts`
  • Device ID генерируется как `bin2hex(random_bytes(32))` — 64 символа, криптостойкий
  • При logout'е device_id сохраняется (аккаунты остаются известными)
  • Затронутые файлы: AuthController.php, Auth.php, login.php, main.php, index.php, p2026_auth_known_accounts
  • Версия: 2.19.0 → 2.20.0
  • --
v2.19.0
от 2026-07-28 MINOR
  • **SemVer-версионирование шаблонов** — при загрузке нового шаблона администратор выбирает тип изменения (PATCH / MINOR / MAJOR), следующая версия рассчитывается автоматически на основе текущей активной
  • **Переименование шаблона** — администратор может задать читаемое имя шаблона (например, «Перечень 2026 v3 — июль»), отображаемое в интерфейсе
  • **История версий** — полная история загруженных шаблонов с возможностью скачивания любой предыдущей версии и переключения активного шаблона
  • **Связь шаблон ↔ 1С** — при формировании экспорта 1С или сводного отчёта текущая версия активного шаблона записывается в `p2026_exports.template_version` и отображается в логе
  • **FATAL ERROR: Unknown column 'original_name'** — таблица `p2026_templates` была добавлена с неполным набором полей; добавлены `original_name`, `file_size`, `uploaded_by`, `description`, `uploaded_at`
  • **Таблица `p2026_exports`** — добавлено поле `template_version VARCHAR(20)` для связи экспорта с версией шаблона
  • **Шаблон активации** — старые шаблоны не удаляются; администратор может вернуться к любой предыдущей версии
  • **Клиентский интерфейс** — отображается версия активного шаблона и дата загрузки
  • Затронутые файлы: AdminPerechenController.php, admin-template.php, index.php (routes), p2026_templates, p2026_exports
  • Версия: 2.18.3 → 2.19.0
  • --
v2.18.3
от 2026-07-28 PATCH
  • **Устранена ошибка FK constraint 1452** — при вводе неверного пароля сайт возвращал ошибку 500 вместо корректного сообщения «Неверный логин или пароль». Исправлен nullable-тип в логировании авторизации
  • **Проблема «клиент не может войти как другой пользователь»** — конечный пользователь оказывался «залипшим» под учётной записью администратора из-за автоматического входа. Страница входа теперь всегда отображается с блоком «Вы вошли как ...» и кнопкой «Выйти»
  • **Сохранение логина при ошибке** — поле «Логин» сохраняет введённое значение при неудачной попытке входа
  • **Чекбокс «Запомнить меня»** — опциональный параметр; cookie для автоматического входа создаётся только по явному согласию пользователя
  • **Блок «Вы вошли как ...»** — при автоматическом входе через cookie на форме отображается текущий пользователь с кнопкой «Выйти»
  • **Деплой test → dev (стейдж)** — выполнен перенос актуального кода и данных из тестового окружения в стейдж-окружение
  • Затронутые файлы: AuthController, Auth middleware, login.php, config/app.php
  • Версия: 2.18.0 → 2.18.3
  • --
v2.18.0
от 2026-07-21 MINOR
  • **Тестовое окружение на Laravel Herd** — развёрнуто полноценное тестовое окружение на локальном компьютере с использованием Laravel Herd (PHP 8.4). Тестовый стек: MariaDB 10.11.11, порт 3306, БД `ipdby_medtech_2026_test` (16 таблиц, 67 пользователей)
  • **Трёхуровневая архитектура деплоя** — внедрена модель local → dev → prod с автоматическим определением окружения через hostname. Каждое окружение имеет свою БД, настройки и файл `.env`
  • **Автоматические бэкапы VDS** — настроен ежедневный бэкап (cron 03:00) с ротацией 7 дней. Бэкапы: база данных + uploads + конфигурация
  • **Страница версий** (`/admin/settings/versions/`) — добавлена страница с полной историей изменений платформы в формате changelog, доступная из панели администратора
  • **Отладка PHP-окружения** — добавлена константа `ASSET_URL` в `public/index.php` для корректной работы статических ресурсов в тестовом окружении
  • **Конфигурация подключения к БД** — исправлена критическая ошибка с оператором Elvis. Ранее пустая строка в `.env` интерпретировалась как falsy и переключалась на production-пароль. Замена на явную проверку на null для всех 4 параметров
  • **Пути к статическим ресурсам** — исправлены relative-пути в шаблонах для кроссплатформенной совместимости
  • --
v2.17.2
от 2026-07-09 PATCH
  • **Эмодзи заменены на SVG-иконки** — на странице безопасности все HTML-entity-эмодзи заменены на inline SVG-графику. Каждая иконка — минималистичный векторный рисунок
  • **Динамическая окраска рекомендаций** — блоки рекомендаций отражают фактическое состояние переключателя. Четыре статуса: серый (нейтральная), зелёный (всё верно), жёлтый (отклонение), красный (критическое). При переключении цвета меняются мгновенно
  • **CLI health-check: исправлена проверка настроек** — скрипт проверки здоровья теперь использует env-специфичные настройки вместо глобальных
  • --
v2.17.1
от 2026-07-09 PATCH
  • **Увеличены шрифты** — все мелкие элементы переведены на более читаемые размеры (13–18px вместо 11–15px)
  • **Переработан блок рекомендаций** — вместо мелкого серого italic теперь тёмный текст на светлом фоне с цветным бордером (зелёный для обычных, красный для критических)
  • **Улучшена структура** — заголовки окружений увеличены, заголовки секций выделены жирным,.footer структурирован строками
  • --
v2.17.0
от 2026-07-09 MINOR
  • **Env-специфичные настройки** — новая функция `envSetting()` проверяет переменные окружения с префиксом `SETTING_`. Приоритет: env → БД (миграция с версий < 2.16.0)
  • **Рекомендации на странице безопасности** — для каждого переключателя в трёх блоках (DEV/TEST/PROD) добавлены цветные подсказки: что рекомендуется включить/выключить. Критические рекомендации подсвечены красным
  • **Env-специфичные уведомления** — `notify_fatal_telegram`, `health_check_telegram`, `health_check_email`, `health_check_cli_enabled` переведены на env-префиксную архитектуру
  • --
v2.16.0
от 2026-07-09 MINOR
  • **Environments — контекстные настройки безопасности** — на странице «Настройки → Безопасность» отображаются три блока: «Локальная», «Тестовая», «Продакшн» — с собственными переключателями
  • **Функция `envSetting()`** — глобальная функция-обёртка над `setting()`, автоматически подставляющая префикс окружения для env-специфичных настроек
  • **ErrorHandler::loadConfig()** — переведён с `setting()` на `envSetting()` — на production ошибки логируются/показываются в соответствии с настройками production
  • **UI** — три визуальных блока с цветовой индикацией (зелёный — local, жёлтый — staging, красный — production). Текущее окружение подсвечено
  • --
v2.15.4
от 2026-07-09 PATCH
  • **Настройка `health_check_cli_enabled`** — на вкладке «Уведомления» добавлен переключатель для отключения CLI-скрипта проверки здоровья. На локальном хостинге скрипт работает в тихом режиме
  • **Шрифт на страницах Health Report** — размер текста увеличен с 13px до 15–16px для статистики, процентов и категорий
  • **PowerShell-команда** — добавлены флаги для скрытого запуска без всплывающего окна
  • --
v2.15.3
от 2026-07-09 MINOR
  • **PSR-3 + Monolog в ErrorHandler** — ErrorHandler реализует `Psr\Log\LoggerInterface` с Monolog `StreamHandler` (файл лога) и `TelegramBotHandler` (критические ошибки в Telegram)
  • **Плавная анимация collapsible** — collapsible-блоки на страницах Dashboard и Health теперь открываются и закрываются плавно через CSS transition
  • **Collapsible-блоки больше не зависают в открытом состоянии** — убран inline onclick, дублировавший глобальный обработчик
  • **ErrorHandler** — статические helper-методы `info()`, `warn()`, `error()`, `sync()` удалены. Логирование переведено на instance-методы
  • --
v2.15.2
от 2026-07-08 PATCH
  • **Конфликт ErrorHandler и Logger** — в `index.php` последовательно вызывались `ErrorHandler::init()` и `Logger::replaceErrorLog()`. Второй вызов перезаписывал обработчики первого. Все ошибки уходили не в тот лог. Исправлено: ErrorHandler::init() вызывает Logger::replaceErrorLog() внутри себя
  • **Неверная проверка в ErrorHandler::write()** — метод проверял `log_system_events` вместо `log_php_errors`. PHP-ошибки не записывались, даже когда логирование было включено
  • **Collapsible-секции Health Check** — CSS `max-height: 0 !important` заменён на вычисление `scrollHeight` через JS. При закрытии высота принудительно устанавливается в 0 через requestAnimationFrame
  • --
v2.15.1
от 2026-07-08 PATCH
  • **Collapsible: цифры статистики больше не исчезают** — некорректный CSS-селектор выбирал внутренний span с цифрами вместо стрелки. Заменён на корректный выбор дочернего элемента
  • --
v2.15.0
от 2026-07-08 MINOR
  • **Сохранение Health Check в Markdown** — новая кнопка «Скачать Markdown» на странице Health Check Dashboard. Файл сохраняется локально для последующего анализа
  • **Новая вкладка «Health Check»** — Health Check Dashboard выделен из раздела «Синхронизация» в отдельный пункт меню
  • **UI Health Check Dashboard** — ширина колонки «Рекомендации» увеличена, шрифт увеличен, цвет заменён для лучшей читаемости
  • --
v2.14.2
от 2026-07-08 PATCH
  • **Общие настройки больше не сбрасываются в 0** — метод `update()` теперь сохраняет только те поля, которые присутствуют в `$_POST`. Раньше при сохранении любой вкладки все остальные настройки затирались значением `'0'`
  • **Значения настроек в БД** — исправлены с `'0'` на корректные после предыдущего бага
  • **Health Check — Email-уведомления** — новый переключатель «Health Check — уведомления на Email» в разделе «Проверка здоровья»
  • **SMTP-настройки в `.env`** — добавлены переменные для SMTP/IMAP. Сервис почты при наличии настроек в `.env` использует их вместо БД
  • --
v2.14.1
от 2026-07-08 PATCH
  • **Локальный сайт после перезагрузки ПК** — старт OSPanel добавлен в автозагрузку. Исправлен `config/database.php` для корректного подключения к локальной БД
  • **Telegram-уведомления** — в первую строку сообщения добавлен домен сайта для идентификации источника события
  • --
v2.14.0
от 2026-07-08 MINOR
  • **Health Check CLI + Windows Task Scheduler** — CLI-скрипт для периодической проверки `/health/` endpoint. Задача создана в планировщике Windows (каждые 5 минут)
  • **Health Check endpoint `/health/`** — JSON-диагностика: окружение, БД, пользователь, все проверки. Без авторизации
  • **Настройки Health Check в админ-панели** — вкладка «Уведомления»: блок «Проверка здоровья» с переключателями Telegram/Email уведомлений
  • **Секреты перенесены в `.env`** — Telegram-токен и Chat ID перенесены из hardcoded-значений в переменные окружения
  • --
v2.13.2
от 2026-07-08 PATCH
  • **Переключатели теперь работают корректно** — удалены inline-скрипты из шаблонов настроек, которые дублировали глобальный обработчик и вызывали double-fire (оба обработчика срабатывали одновременно, возвращая значение обратно)
  • **Обработка ошибок fetch в toggle** — при ошибке сохранения переключатель возвращается в исходное состояние с toast-уведомлением
  • --
v2.13.1
от 2026-07-08 PATCH
  • **Переключатели в настройках работают** — во всех вкладках («Уведомления», «Безопасность») переключатели отправляют AJAX-запрос при клике — не требуется нажимать «Сохранить изменения»
  • --
v2.13.0
от 2026-07-07 MINOR
  • **Health Check v2 — 44 проверки** — новый конфиг `config/health.php` с функциями `fullHealth()`, `health()`, `healthSummary()`, `healthByCategory()`
  • **Dashboard v2** — группа Health Check с collapsible-секциями, цветовые индикаторы, колонка «Оптимально» и «Рекомендация», проценты здоровья
  • **Monolog (PSR-3)** — структурное логирование с 5 каналами: platform, migration, auth, mail, error. Каждый канал пишет в отдельный файл. Каналы error/migration/auth отправляют критические ошибки в Telegram
  • **PHP-DI (PSR-11)** — контейнер внедрения зависимостей для MigrationService, EmailService и 4 логгеров
  • **PHPStan level 2** — статический анализ кода. Прогон: 0 ошибок
  • **PHP (12)** — версия, memory_limit, max_execution_time, OPcache, расширения
  • **База данных (6)** — подключение, версия MySQL, кодировка, движки, размер БД
  • **Безопасность (9)** — APP_ENV, APP_DEBUG, HTTPS, cookie, защита .env
  • **Почта (3)** — PHPMailer установлен, SMTP настроен, from-адрес
  • **Файловая система (6)** — директории, свободное место, vendor/
  • **Окружение (5)** — версия платформы, часовой пояс, ОС
  • **Производительность (3)** — gzip, session, output_buffering
  • **Duplicate constant warnings** — убраны `@define()` в health.php, константы перенесены перед include
  • **Telegram-404 crash** — обёрнуты вызовы Logger в try-catch — при невалидном токене страница не падает
  • --
v2.12.1
от 2026-07-07 PATCH
  • **phpMyAdmin** — создан проект в локальном окружении с отдельным доменом для доступа к БД через веб-интерфейс
  • --
v2.12.0
от 2026-07-07 MINOR
  • **Отдельные маршруты для каждой вкладки настроек:**
  • **Hash-навигация заменена на URL-навигацию** — вкладки переключаются через `<a href>`, каждая доступна по прямой ссылке
  • **Созданы 7 новых view-файлов** с общей навигацией `_tabs.php`
  • **7 новых методов в AdminSettingsController** — каждый загружает свой шаблон и передаёт параметры
  • --
v2.11.0
от 2026-07-07 MAJOR
  • **Vite 8.1.3** — dev-сервер с HMR, production-сборка в `public/dist/`
  • **Tailwind CSS v4** — установлен через @tailwindcss/vite-плагин. Доступны все Tailwind-утилиты прямо в PHP-шаблонах
  • **PHP-хелпер для Vite** — функции `vite_tags()`, `vite_asset()`, `vite_is_dev()` для переключения между dev и production
  • **Система сборки** — статические CSS/JS-файлы заменены на Vite с динамической загрузкой через manifest
  • **Входные точки** — `resources/css/main.css`, `resources/css/admin.css`, `resources/js/app.js`
  • --
v2.10.0
от 2026-07-07 MINOR
  • **Off-canvas мобильное меню** — сайдбар превращается в выдвижную панель с затемнённым оверлеем. Открывается по hamburger-кнопке, закрывается по ✕, тапу на оверлей или resize
  • **5 адаптивных breakpoints:** `>1600px` (крупные), `1025-1600px` (десктоп), `769-1024px` (планшеты), `481-768px` (portrait), `<=480px` (телефоны)
  • **Desktop-коллапс** — кнопка сворачивания сайдбара видна только на >768px
  • **CSS-переменные для responsive** — все breakpoints и правила собраны в `main.css`
  • **Layout** — добавлены sidebar-header, hamburger, overlay, topbar-left
  • **JS** — логика мобильного меню (hamburger, оверлей, close, resize handler, авто-закрытие при навигации)
  • --
v2.9.1
от 2026-07-07 PATCH
  • **Раздел «Перечень»** — все вкладки переведены на CSS-переменные и адаптированы под тёмную тему
  • **Исправлены инлайн-цвета** в dashboard.php и admin.css
  • --
v2.9.0
от 2026-07-07 MINOR
  • **Тема оформления (светлая/тёмная)** — переключатель на вкладке «Внешний вид». Изменение применяется мгновенно через `data-theme` атрибут и CSS-переменные
  • **CSS-переменные для тем** — `--log-bg`, `--log-header-bg`, `--log-text`, `--log-muted` определены для обеих тем
  • **Страница `/admin/logs/`** — эмодзи заменён на SVG-иконку; все inline-цвета заменены на CSS-переменные
  • --
v2.8.1
от 2026-07-07 PATCH
  • **Страница `/admin/logs/` больше не пустая** — `AdminLogsController::index()` не выводил результат. Добавлен вывод через `echo view('layouts/main', ...)`
  • --
v2.8.0
от 2026-07-07 MINOR
  • **EmailService** — новый сервис с методами: `send()` (SMTP + mail fallback + логирование), `testSmtp()`, `testImap()`, `log()`, `getLog()`, `getTemplates()`, `saveTemplate()`, `profileConfig()`, `statusHtml()`
  • **Почтовые профили** — два профиля: «Локальный хостинг» и «Виртуальный хостинг» — каждый со своими SMTP и IMAP настройками
  • **История отправки писем** — таблица `p2026_email_log` — логируются все попытки отправки (SENT, SMTP_FAIL, MAIL_FAIL)
  • **Шаблоны писем** — таблица `p2026_email_templates` с шаблонами `fatal_error` и `login_notify`
  • **Индикаторы статуса** — «SMTP настроен/не настроен», «IMAP настроен/не настроен» для каждого профиля
  • **Кнопки проверки SMTP и IMAP** для каждого профиля
  • --
v2.7.1
от 2026-07-07 PATCH
  • **Настройки IMAP** — хост, порт, шифрование, логин, пароль
  • **Тип хостинга** — переключатель «Локальный / Виртуальный» с автоматической подстановкой рекомендуемых параметров
  • **Проверка IMAP** — кнопка «Проверить IMAP-соединение» с AJAX-результатом
  • --
v2.7.0
от 2026-07-06 MINOR
  • **SMTP-настройки в интерфейсе** — новая вкладка «Почта» с полями хост, порт, логин, пароль, шифрование
  • **PHPMailer** — установлен через Composer, `sendEmail()` переписан на SMTP с fallback на `mail()`
  • **Rate-limiting FATAL-уведомлений** — не чаще 1 раза в 300 секунд, предотвращение спама при циклических ошибках
  • **Мгновенное сохранение переключателей** — AJAX-запрос при клике, без нажатия «Сохранить»
  • **Переключатели в настройках** — теперь визуально остаются в положении после клика
  • --
v2.6.0
от 2026-07-06 MINOR
  • **PHPStan — статический анализ кода** — установлен через Composer, создан конфиг (level 1), прогон: 0 ошибок
  • **Автоматическая отправка FATAL-ошибок в Telegram** — при критической ошибке отправляется сообщение с сайтом, текстом, файлом и строкой
  • **Автоматическая отправка FATAL-ошибок на email** — HTML-письмо с данными об ошибке
  • **Переключатели** «Telegram — критическая ошибка» и «Email — критическая ошибка» в настройках
  • Исправлены 3 ошибки в DashboardController и ExcelService
  • --
v2.5.1
от 2026-07-06 PATCH
  • **Сохранение переключателей логирования** — добавлены ключи в контроллер
  • **Порядок пунктов меню** — «Обращения в поддержку» перенесено в раздел «Пользователи», «Логи ошибок» — в «Систему»
  • **Вкладки синхронизации** — добавлена hash-навигация; первая вкладка «Обзор» активна по умолчанию
  • **Путь загрузок** — отображается моноширинным шрифтом с word-break для длинных путей
  • --
v2.5.0
от 2026-07-06 MINOR
  • **ErrorHandler** — перехватывает PHP-ошибки и исключения, записывает в лог с уровнями INFO / WARNING / ERROR / FATAL / SYNC
  • **Раздел «Логи ошибок»** (`/admin/logs/`) — просмотр лога в стиле терминала, фильтр по уровню, скачивание и очистка
  • **Настройки логирования** — 4 переключателя: PHP-ошибки, события системы, операции синхронизации, показ ошибок
  • **Вкладка «Архитектура CI/CD»** — текущая и целевая схема деплоя, скрипты, подключения, дорожная карта
  • --
v2.4.0
от 2026-07-06 MINOR
  • **MigrationService** — сканирует папку `database/migrations/`, отслеживает применённые миграции, применяет по одной или все
  • **Раздел «Синхронизация»** (`/admin/sync/`) с 4 вкладками:
  • **Первая миграция** — `V1__create_migrations_table.sql`
  • --
v2.3.0
от 2026-07-06 MINOR
  • **Режим обслуживания** — middleware блокирует доступ не-администраторам при наличии файла `maintenance.flag`
  • **Вкладка «Развёртывание»** — статус площадок, кнопки включения/выключения режима обслуживания
  • **PowerShell-скрипты** — автоматизация переноса dev → prod с бэкапом и проверкой
  • **Инструкция по развёртыванию** — подробный порядок действий (7 шагов)
  • --
v2.2.6
от 2026-07-06 PATCH
  • **Синтаксическая ошибка** — неэкранированный обратный слеш в строковом литерале
  • **Удалён мусорный файл** — резервная копия, не относящаяся к рабочей версии
  • --
v2.2.5
от 2026-07-06 PATCH
  • **Логирование операций с пользователями** — создание, редактирование (детализация изменённых полей), удаление
  • **Журнал входов/выходов** — события авторизации попадают в общий журнал
  • **Раскрывающиеся строки** — детали изменений отображаются в таблице «Поле → Было → Стало»
  • **Фильтр по типу действия** — выпадающий список всех уникальных действий
  • --
v2.2.4
от 2026-07-05 PATCH
  • **Редактирование пользователя** — переключатели «Активен» и «Тестовый пользователь» теперь работают
  • **Данные не сохранялись** — внутри основной формы была вложена форма удаления, браузер закрывал внешнюю форму. Delete-форма вынесена после закрытия основной
  • **«Опасная зона»** — удаление пользователя теперь только во вкладке «Безопасность»
  • --
v2.2.3
от 2026-07-04 PATCH
  • **Полученные файлы** — нумерация сквозная, сортировка по всем столбцам, статус-фильтр исправлен, фильтр даты, столбец «Проверено»
  • **Перечень** — увеличены шрифты и контрастность, кнопки увеличены, фильтры с сохранением параметров при пагинации
  • **Кнопки действий** — новый класс `.action-btn-sm` с контрастной рамкой и увеличенным размером
  • --
v2.2.2
от 2026-07-04 PATCH
  • **Прогресс-бар «План кампании»** — теперь основан на времени (01.06–31.07), а не на готовности организаций
  • **Воронка «Авторизованы в системе»** — показывает всех зарегистрированных клиентов
  • **«Динамика за неделю»** — рассчитывается динамически на основе недельных данных
  • --
v2.2.1
от 2026-07-04 PATCH
  • **Шрифты** — увеличены все мелкие шрифты (8–13px → 11–15px)
  • **Контраст** — затемнены серые тексты, усилены рамки и фон карточек
  • **Google-стиль** — тени Material Design 3, цвета Google, шрифт Roboto
  • **Pill-формы** — все кнопки, поля поиска, фильтры скруглены (border-radius: 50px)
  • --
v2.2.0
от 2026-07-02 MINOR
  • **Система уведомлений** — новая вкладка «Уведомления» с переключателями: Telegram — вход, загрузка файла, изменение статуса; Email — вход
  • **Настройки в БД** — переключатели сохраняются в таблице `p2026_settings`, а не хардкодом
  • **Хелпер-функции** `setting()` и `setSetting()` для работы с настройками с кэшированием
  • **Интерфейс настроек** — убраны нефункциональные коллапс-треугольники, поля привязаны к БД
  • --
v2.1.8
от 2026-07-02 PATCH
  • **CSS cache busting** — добавлен `?v=filemtime(...)` к CSS-файлам
  • **Динамическая версия** — версия системы вынесена в константу `APP_VERSION`
  • **Полная история версий** — добавлена в changelog (начиная с 1.0.0)
  • **Вкладки в настройках** — используют hash-навигацию (`#general`, `#security`, `#appearance`, `#versions`)
  • --
v2.1.7
от 2026-06-27 PATCH
  • **Рабочий стол (dashboard)** — воронка готовности, круг с процентом, бар-чарт, карточки быстрых действий, план кампании, узкие места, последние события
  • **Перечень — Организации** — 5 карточек статистики, прогресс-бар, таблица с бейджами
  • **Перечень — Полученные файлы** — 5 карточек статистики, фильтры, 3-dot меню действий, пагинация
  • **CSS** — добавлены большие блока стилей `.ar-*` (таблицы/фильтры/статистика) и `.db-*` (dashboard)
  • --
v2.1.6
от 2026-06-26 PATCH
  • Редизайн админ-панели
  • Блоки статистики, воронка готовности, бар-чарт
  • --
v2.1.5
от 2026-06-20 PATCH
  • Страница поддержки с формой обращений
  • Telegram-уведомления о входе администраторов
  • --
v2.1.4
от 2026-06-15 PATCH
  • Импорт/экспорт пользователей
  • Журнал действий (лог)
  • --
v2.1.3
от 2026-06-10 PATCH
  • Hash-навигация вкладок настроек
  • Мелкие исправления интерфейса
  • --
v2.1.2
от 2026-06-05 PATCH
  • Раздел «Версии системы» в настройках
  • Чтение changelog.md и отображение истории версий
  • --
v2.1.1
от 2026-05-30 PATCH
  • Роль «клиент» и интерфейс загрузки перечней
  • Разграничение доступа admin/client
  • --
v2.1.0
от 2026-05-20 MINOR
  • Полноценная админ-панель (CRUD пользователей, организаций)
  • Аутентификация с Remember Me (3 года)
  • Система сессий и middleware (Router)
  • --
v2.0.0
от 2026-05-01 MAJOR
  • Первый публичный запуск платформы «Перечень 2026»
  • Основной функционал: авторизация, загрузка/проверка файлов, формирование отчётов
  • Архитектура MVC на нативном PHP
  • Интеграция с Telegram
  • --
v1.0.0
от 2026-04-15 MAJOR
  • Первоначальная версия платформы
  • Базовая архитектура, маршрутизация, шаблонизация
  • Подключение к БД, конфигурация окружения
Вернуться на страницу входа