kirill.khorkov a4092adf2e feat: Add complete reviews system with star ratings
 New Features:
- Reviews system with 1-5 star ratings
- User can add, edit, and delete their own reviews
- One review per product per user (DB constraint)
- Automatic average rating calculation
- Review count tracking
- Interactive star selection UI
- AJAX-powered review submission
- Responsive design for all devices

🗄️ Database:
- New 'reviews' table with full structure
- Added 'rating' and 'review_count' fields to products
- PostgreSQL triggers for automatic rating updates
- Database functions for rating calculations
- Indexes for performance optimization

📦 Backend (PHP):
- Review model with 15+ methods
- ReviewController with 5 actions
- Updated Product model to include ratings
- Updated ProductController to load reviews
- 5 new API endpoints

🎨 Frontend:
- Reviews list component (_reviews_list.php)
- Review form component (_review_form.php)
- Reviews sechow page
- Star ratings in catalog view
- Interactive JavaScript (200+ lines)
- Adaptive styles (400+ lines)

🔒 Security:
- Server-side authorization checks
- XSS protection (htmlspecialchars)
- SQL injection protection (PDO prepared)
- Input validation (client + server)
- Access control for review editing

📝 Modified Files:
- app/Models/Product.php - added rating fields to queries
- app/Controllers/ProductController.php - loads reviews
- app/Views/products/show.php - reviews section
- app/Views/products/catalog.php - star ratings
- config/routes.php - review endpoints
- public/style_for_cite.less - rating styles

🆕 New Files:
- app/Models/Review.php
- app/Controllers/ReviewController.php
- app/Views/products/_reviews_list.php
- app/Views/products/_review_form.php
2026-01-06 17:04:09 +03:00
2026-01-03 21:55:16 +03:00

AETERNA - Интернет-магазин мебели

Современный интернет-магазин мебели на PHP с MVC архитектурой.

Структура проекта

aeterna/
├── app/                    # Приложение
│   ├── Controllers/        # Контроллеры
│   ├── Core/              # Ядро (App, Router, View, etc.)
│   ├── Models/            # Модели
│   └── Views/             # Шаблоны
├── config/                 # Конфигурация
│   ├── app.php            # Настройки приложения
│   ├── database.php       # Настройки БД
│   └── routes.php         # Маршруты
├── public/                 # Публичная директория (DocumentRoot)
│   ├── index.php          # Точка входа
│   ├── assets/            # Статические файлы
│   │   ├── css/
│   │   ├── js/
│   │   └── images/        # Изображения
│   └── .htaccess          # Правила Apache
├── storage/                # Хранилище
│   └── uploads/           # Загруженные файлы
├── tests/                  # Тесты
├── docker/                 # Docker конфигурация
│   └── apache/
├── docker-compose.yml
├── Dockerfile
└── README.md

Требования

  • PHP 8.2+
  • PostgreSQL 14+
  • Apache с mod_rewrite или Nginx
  • Docker (опционально)

Установка

Вариант 1: Docker (рекомендуется)

# Клонировать репозиторий
git clone <repository-url>
cd aeterna

# Запустить контейнеры
docker-compose up -d

# Приложение будет доступно по адресу:
# http://localhost:8080

Вариант 2: Локальный сервер

Apache

  1. Настройте DocumentRoot на директорию public/
<VirtualHost *:80>
    ServerName aeterna.local
    DocumentRoot /path/to/aeterna/public
    
    <Directory /path/to/aeterna/public>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
  1. Включите mod_rewrite:
sudo a2enmod rewrite
sudo systemctl restart apache2

Nginx

server {
    listen 80;
    server_name aeterna.local;
    root /path/to/aeterna/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Конфигурация

База данных

Отредактируйте config/database.php или используйте переменные окружения:

export DB_HOST=localhost
export DB_PORT=5432
export DB_DATABASE=aeterna
export DB_USERNAME=user
export DB_PASSWORD=password

Приложение

Отредактируйте config/app.php:

  • debug - режим отладки (false для продакшена)
  • url - URL приложения
  • admin_emails - email адреса администраторов

Функционал

Для покупателей

  • Каталог товаров с фильтрацией
  • Корзина покупок
  • Оформление заказов
  • Регистрация и авторизация

Для администраторов

  • Управление товарами
  • Управление категориями
  • Управление заказами
  • Управление пользователями

Маршруты

Метод URL Описание
GET / Главная страница
GET /catalog Каталог товаров
GET /product/{id} Страница товара
GET /cart Корзина
GET /login Вход
GET /register Регистрация
GET /admin Админ-панель

Технологии

  • Backend: PHP 8.2, MVC архитектура
  • Database: PostgreSQL
  • Frontend: HTML5, CSS3/LESS, JavaScript, jQuery
  • Сервер: Apache/Nginx
  • Контейнеризация: Docker

Лицензия

MIT License

Автор

AETERNA Team

Description
No description provided
Readme 45 MiB
Languages
PHP 77.3%
Less 13.6%
JavaScript 6.8%
Hack 2.1%
CSS 0.2%