# АО «Кузбасс‑пригород» — официальный сайт

Сборка подготовлена для размещения на сервере компании. Публичные страницы содержат расписание, услуги, контакты, пресс-центр, обращения граждан, туризм и вакансии.

## Административный кабинет

Кабинет расположен в папке `admin/` и доступен только из корпоративной подсети `10.228.1.0/24`.

Стартовая учетная запись:

```text
login: admin
password: KpAdmin-2026#74vR
```

После первого входа создайте персональные учетные записи сотрудников и удалите стартовую учетную запись.

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

## Статистика

Публичные страницы отправляют агрегированный счетчик посещений в `api/stats.php`. В кабинете есть раздел «Статистика сайта» с графиком за 30 дней, количеством просмотров, количеством посетителей и популярными страницами.


## Расписание Яндекс

Для полного списка станций Кемеровской области — Кузбасса сайт использует `api/yandex-rasp.php?action=stations`. При наличии ключа Яндекс Расписаний каталог автоматически подтягивается из `stations_list` и сохраняется в `assets/data/stations.generated.json`. Резервный локальный список содержит основные станции, включая Новокузнецк, Новокузнецк-Восточный, Кемерово-Пасс., Белово, Прокопьевск, Междуреченск, Таштагол, Тайгу, Юргу и Анжерскую.

После установки ключа можно принудительно обновить каталог:

```bash
php api/refresh-yandex-stations.php
```

Если сервер сбрасывает соединение на большом `stations_list` (`Recv failure: Connection reset by peer`), скачайте файл отдельно с IPv4, HTTP/1.1, повторами и импортируйте его без повторного обращения к сети:

```bash
curl -4 --http1.1 --retry 5 --retry-all-errors --compressed -L \
  -o /tmp/yandex-stations.json \
  'https://api.rasp.yandex-net.ru/v3.0/stations_list/?apikey=ВАШ_КЛЮЧ&lang=ru_RU&format=json'

php api/refresh-yandex-stations.php --file=/tmp/yandex-stations.json
```

Также можно посмотреть справку:

```bash
php api/refresh-yandex-stations.php --help
```

Или открыть по защищенному токену:

```text
/api/refresh-yandex-stations.php?token=ВАШ_REFRESH_TOKEN
```

## Безопасность

- `/admin` ограничен подсетью `10.228.1.0/24` в PHP и в примерах конфигурации Apache/Nginx.
- `/storage` закрыт от прямой раздачи.
- Загруженные через кабинет изображения сохраняются в `assets/uploads/`; PHP-скрипты в этой папке запрещены через `.htaccess`.
- Пользователи хранятся в `storage/private/users.json` с хешами паролей.
- Формы обращений используют капчу, серверную валидацию и CSRF-защиту сессии.

## Проверка перед публикацией

```bash
find . -name '*.php' -print0 | xargs -0 -n1 php -l
node --check assets/js/app.js
node --check assets/js/content-loader.js
node --check assets/js/cash-offices.js
```
