# Галерея фото (PHP + MySQL) Актуальная версия проекта — это MySQL-контур с двумя основными точками входа: - `index.php` — публичная витрина (разделы, тематики, карточки фото, комментарии), - `admin.php?token=...` — закрытая админка (управление разделами/тематиками/фото/пользователями/комментариями/настройками). ## Что умеет проект - Иерархия каталога: разделы + тематики (2 уровня). - Для фото поддерживаются версии `before` и `after`. - Версия `after` на публичной части отдается с watermark (текст, яркость и угол настраиваются в админке). - Комментарии доступны только по персональной viewer-ссылке. - Для карточек каталога используются превью из `thumbs/`. - Превью создаются/обновляются автоматически при загрузке, замене и повороте изображения. ## Инструкция для пользователей ### Если у вас нет специальной ссылки - Откройте главную страницу галереи и выберите раздел или тематику в левом меню. - Для просмотра фотографии нажмите на карточку в каталоге. - Переключение по фото: стрелки `←` и `→` на клавиатуре (или кнопки на экране). - Навигация по разделам/тематикам: `Shift + ↑/↓` или `Ctrl + ↑/↓`. - Комментарии в этом режиме недоступны: блок комментариев открыт только для пользователей с персональной ссылкой. ### Если у вас есть специальная viewer-ссылка - Откройте галерею только по персональной ссылке вида `/?viewer=...`. - В режиме viewer доступны все обычные функции просмотра и дополнительно форма комментария. - Напишите комментарий и нажмите «Отправить» (или `Shift + Enter`). - Отправка происходит без перезагрузки страницы; после успешной отправки появится сообщение «Ваш комментарий отправлен.». - Не передавайте свою viewer-ссылку другим: она дает право оставлять комментарии от вашего имени. ## Структура ```text photo.andr33v.ru/ ├─ index.php # публичная витрина ├─ admin.php # админка по токену ├─ style.css # базовые стили ├─ favicon.svg ├─ config.php.example # шаблон конфига БД и деплоя ├─ secrets.php.example # шаблон секретов админки ├─ lib/ │ ├─ db.php # PDO + загрузка config.php │ ├─ db_gallery.php # доступ к данным галереи │ ├─ thumbs.php # генерация/чтение/удаление превью │ ├─ admin_http.php # JSON-ответы админки │ ├─ admin_deploy.php # проверка обновлений и запуск деплоя │ ├─ admin_get_actions.php # GET-экшены админки │ ├─ admin_post_actions.php # POST-экшены админки │ └─ admin_helpers.php # helper-функции админки ├─ migrations/ │ ├─ 001_init.sql │ ├─ 002_site_settings.sql │ ├─ 003_comment_users_plain_token.sql │ └─ 004_topics.sql ├─ scripts/ │ ├─ migrate.php # запуск миграций │ ├─ generate_thumbs.php # backfill превью │ └─ deploy.sh # deploy на shared hosting ├─ photos/ # оригиналы (runtime) ├─ thumbs/ # превью (runtime) └─ data/ # runtime (логи/служебные файлы) ``` ## Требования - PHP 8.2+ - MySQL 8+ (или совместимая MariaDB) - PHP-расширения: - `pdo_mysql` (обязательно), - `gd` или `imagick` (для watermark/превью). ## Быстрый старт 1. Создай `config.php`: ```bash cp config.php.example config.php ``` 2. Заполни доступы к БД в `config.php`. Для деплоя из админки в `config.php` можно задать: - `deploy.remote_name` (обычно `origin`), - `deploy.remote_url` (по умолчанию `git@github.com:wrkandreev/reframe.git`), - `deploy.branch` (`main` или `dev`). 3. Создай `secrets.php`: ```bash cp secrets.php.example secrets.php ``` 4. Заполни минимум `admin_token` в `secrets.php`. 5. Прогон миграций: ```bash php scripts/migrate.php ``` 6. Локальный запуск: ```bash php -S 127.0.0.1:8080 ``` 7. Открой: - `http://127.0.0.1:8080` — публичная часть, - `http://127.0.0.1:8080/admin.php?token=` — админка (токен из `secrets.php`). ## Настройка админки Админка использует секреты из `secrets.php`. Создай файл: ```bash cp secrets.php.example secrets.php ``` Минимально заполни: - `admin_token` — длинный случайный секрет. Опционально можно ограничить доступ: - `basic_auth_user` / `basic_auth_pass` — HTTP Basic слой поверх админки, - `allowed_admin_ips` — белый список IP (строгое совпадение строк). В админке доступны разделы: - Разделы, - Тематики, - Фото, - Пользователи, - Комментарии, - Настройки (welcome + watermark параметры). ## Превью и watermark - Публичный каталог карточек грузит превью через `?action=thumb&file_id=...`. - Превью создаются автоматически в `thumbs/`: - при загрузке файлов, - при замене файлов, - после поворота. - Для старых данных можно догенерировать превью: ```bash php scripts/generate_thumbs.php ``` - Версия `after` в публичке отдается с watermark (`?action=image&file_id=...`). ## Деплой Деплой запускается из админки (вкладка `Настройки`): - кнопка `Проверить обновления` делает `git fetch` и сравнивает `HEAD` с `/`, - если локальная ветка отстает и не расходится (`behind > 0`, `ahead = 0`) — показывается кнопка `Обновить проект`. Скрипт `scripts/deploy.sh`: 1. настраивает remote из `REMOTE_NAME`/`REMOTE_URL` (если передан `REMOTE_URL`), 2. делает `git fetch --prune`, 3. переключает код на `/` через `git reset --hard`, 4. запускает миграции `php scripts/migrate.php`, 5. сохраняет runtime-папки (`photos`, `thumbs`, `data`). Важно: деплой-скрипт перетирает рабочие изменения в репозитории на сервере. ## Примечания - Проект принудительно редиректит на HTTPS и non-www через `.htaccess`. - Для production рекомендуется включить IP whitelist и/или Basic Auth в `secrets.php`. - Если `config.php` отсутствует, приложение корректно падает с ошибкой подключения к БД.