# Changelog - Gallery Plugin with ng-helpers

## Version 0.2.1 (31 января 2026) - Модернизация с ng-helpers v0.2.2

### Интеграция ng-helpers v0.2.2

- ✅ **array_get()** - безопасный доступ к массивам (NEW)
  - Добавлен импорт в config.php: `use function Plugins\{array_get};`
  - 30+ замен $_REQUEST/$\_POST на array_get()
  - Защищены все параметры: section, id, title, description, keywords, skin, icon, if_active, if_rand, images_count, name, gallery
  - Установлены корректные значения по умолчанию (0 для чисел, '' для строк)
  - Предотвращены "Undefined index" предупреждения

- ✅ **logger()** - обновлен формат логирования
  - Файл: lib/library.php
  - Было: `logger('gallery', 'Deleted X comments...')`
  - Стало: `logger('Deleted X comments...', 'info', 'gallery.log')`
  - Новый 3-параметровый формат: logger(message, level, file)

### Улучшения безопасности

- ✅ Все прямые обращения к $\_REQUEST и $\_POST защищены через array_get()
- ✅ Улучшена валидация входных данных в 30+ точках кода
- ✅ Защита параметров галерей и виджетов от некорректного доступа
- ✅ Более явные проверки существования параметров

---

## Version 0.2.0 (18 января 2026)

### Интеграция ng-helpers v0.2.1

- ✅ Добавлена интеграция с ng-helpers
- ✅ Используемые функции:
  - `cache_get()` / `cache_put()` - кэширование данных галерей и страниц
  - `formatBytes()` - форматирование размера файлов изображений
  - `logger()` - логирование просмотров изображений и активности
  - `get_ip()` - получение IP-адреса посетителя для логов
  - `notify()` - современные toast-уведомления вместо msg()
  - `sanitize()` - дополнительная санитизация данных (импортирована)

### Оптимизация производительности

- ✅ **SQL оптимизация**: Заменен подзапрос в `loadGalleries()` на `LEFT JOIN`
  - Было: `(SELECT count(*) FROM images WHERE folder=gallery.name)` - N+1 запросов
  - Стало: `LEFT JOIN images ON i.folder = g.name GROUP BY g.id` - 1 запрос
- ✅ Добавлены проверки `is_array()` перед `count()` во избежание ошибок
- ✅ Оптимизирован метод `widgetAction()` с проверкой результатов запросов

### Система CSS/JS скинов

- ✅ Создана библиотека `lib/library.php` с утилитами
- ✅ Функция `gallery_register_skin_assets($skin, $type)`:
  - Автоматическая регистрация CSS и JS файлов для скинов
  - Приоритет: `templates/{theme}/plugins/gallery/{type}/{skin}/` → `engine/plugins/gallery/tpl/{type}/{skin}/`
  - Поддержка файлов `skin.css` и `skin.js`
  - Интеграция во все методы отображения: `categoryAction`, `widgetAction`, `indexPageAction`, `galleryPageAction`, `imagePageAction`

### Управление комментариями

- ✅ Функция `gallery_delete_comments($imageIds)` для пакетного удаления
- ✅ Автоматическое удаление комментариев при деинсталляции плагина (один запрос)
- ✅ Исправлена интеграция с плагином комментариев:
  - Корректный путь к `comments.show.php`
  - Буферизация вывода через `ob_start()` / `ob_get_clean()`
  - Проверка существования функций перед вызовом
  - Отладочные HTML-комментарии для диагностики

### Исправления ошибок

- ✅ Исправлена ошибка `Call to undefined function formatBytes()`
- ✅ Исправлена ошибка `Call to undefined function gallery_register_skin_assets()`
- ✅ Исправлена ошибка `count(): Argument #1 ($value) must be of type Countable|array, false given`
- ✅ Исправлена ошибка `Unclosed '{'` в методе `imagePageAction()`
- ✅ Исправлены опечатки: `formatSize()` → `formatBytes()`, неправильная переменная в `src_thumb`
- ✅ Исправлен путь к комментариям: убрано дублирование `engine/`

### Улучшения кода

- ✅ Заменены устаревшие `msg()` на современные `notify()` из ng-helpers
- ✅ Добавлена проверка существования файла библиотеки в конструкторе класса
- ✅ Улучшена обработка ошибок с информативными HTML-комментариями
- ✅ Добавлено логирование просмотров изображений с IP-адресом посетителя

### Структура базы данных

- ℹ️ Плагин использует существующее поле `name` для имен файлов
- ℹ️ Сохранена обратная совместимость со старой структурой БД
- ℹ️ Не требуется миграция при обновлении

### Технические детали

- **Зависимости**: ng-helpers v0.2.1+
- **NGCMS**: 0.9.3+ с поддержкой Twig
- **PHP**: 7.4+
- **Шаблонизатор**: Twig

### Удаленные элементы

- ❌ Удалены все временные вызовы функций, вызывавших ошибки
- ❌ Удалены закомментированные блоки устаревшего кода
- ❌ Убраны предупреждения "NB!!!" из документации

---

## Миграция с версии 0.0.1

1. Обновить файлы плагина
2. Убедиться, что установлен ng-helpers v0.2.1+
3. Очистить кеш плагина через админ-панель
4. Миграция БД не требуется

## Известные ограничения

- Использует существующее поле `name` в таблице images (не разделено на title и filename)
- Для использования CSS/JS скинов необходимо создать файлы `skin.css` и `skin.js` в соответствующих папках

## Авторы модернизации

- Модернизация с ng-helpers: 2026
- Оригинальный автор: rusiq (https://github.com/russsiq)
