From f4f57bd153f22cb587db2b9abe12f1b7b9b55cd2 Mon Sep 17 00:00:00 2001 From: "kirill.khorkov" Date: Wed, 17 Dec 2025 01:24:01 +0300 Subject: [PATCH] fix --- Dockerfile | 3 --- docker-compose.yml | 1 - docker/apache/entrypoint.sh | 4 ---- docker/apache/vhosts.conf | 5 ----- migrations/001_initial_schema.sql | 9 --------- migrations/002_add_cart_orders.sql | 20 -------------------- migrations/003_add_product_fields.sql | 14 -------------- migrations/004_grant_admin_to_admin_mail.sql | 10 +--------- migrations/seed_data.sql | 13 ++----------- public/admin/fix_delete_category.php | 3 --- public/admin/index.php | 13 +------------ public/assets/js/checkout.js | 4 ---- public/assets/less/mixins.less | 3 --- public/assets/less/style.less | 3 --- public/mixins.less | 3 --- public/product.php | 2 -- public/profile.php | 2 -- public/style_for_cite.less | 7 ------- 18 files changed, 4 insertions(+), 115 deletions(-) diff --git a/Dockerfile b/Dockerfile index ee8783b..a1811fb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,10 @@ FROM php:8.2-apache -# Установка PostgreSQL драйвера RUN apt-get update && apt-get install -y libpq-dev \ && docker-php-ext-install pdo pdo_pgsql \ && apt-get clean && rm -rf /var/lib/apt/lists/* -# Включить модули Apache RUN a2enmod rewrite headers alias -# Установка рабочей директории WORKDIR /var/www/html diff --git a/docker-compose.yml b/docker-compose.yml index 55629e7..d89d53b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,4 +25,3 @@ services: networks: cite_practica_network: driver: bridge - diff --git a/docker/apache/entrypoint.sh b/docker/apache/entrypoint.sh index 5fcc26a..f3844b9 100755 --- a/docker/apache/entrypoint.sh +++ b/docker/apache/entrypoint.sh @@ -1,16 +1,12 @@ #!/bin/bash set -e -# Включаем модули Apache a2enmod rewrite a2enmod headers -# Добавляем admin в hosts echo "127.0.0.1 admin" >> /etc/hosts -# Активируем виртуальный хост a2ensite 000-default -# Запускаем Apache exec apache2-foreground diff --git a/docker/apache/vhosts.conf b/docker/apache/vhosts.conf index 919b964..c5833bd 100644 --- a/docker/apache/vhosts.conf +++ b/docker/apache/vhosts.conf @@ -2,8 +2,6 @@ ServerName admin ServerAlias localhost DocumentRoot /var/www/html - - # Alias для пути /cite_practica/ Alias /cite_practica /var/www/html/cite_practica @@ -19,13 +17,10 @@ DirectoryIndex cite_mebel.php index.php index.html - # Настройка PHP SetHandler application/x-httpd-php - # Логи ErrorLog ${APACHE_LOG_DIR}/cite_practica_error.log CustomLog ${APACHE_LOG_DIR}/cite_practica_access.log combined - diff --git a/migrations/001_initial_schema.sql b/migrations/001_initial_schema.sql index c57629b..3b55c9b 100644 --- a/migrations/001_initial_schema.sql +++ b/migrations/001_initial_schema.sql @@ -1,7 +1,3 @@ --- 001_initial_schema.sql --- Создание базовых таблиц для AETERNA - --- Таблица пользователей CREATE TABLE IF NOT EXISTS users ( user_id SERIAL PRIMARY KEY, email VARCHAR(255) UNIQUE NOT NULL, @@ -16,7 +12,6 @@ CREATE TABLE IF NOT EXISTS users ( is_admin BOOLEAN DEFAULT FALSE ); --- Таблица категорий CREATE TABLE IF NOT EXISTS categories ( category_id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, @@ -29,7 +24,6 @@ CREATE TABLE IF NOT EXISTS categories ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); --- Таблица подкатегорий CREATE TABLE IF NOT EXISTS subcategories ( subcategory_id SERIAL PRIMARY KEY, category_id INTEGER REFERENCES categories(category_id) ON DELETE CASCADE, @@ -41,7 +35,6 @@ CREATE TABLE IF NOT EXISTS subcategories ( created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); --- Таблица товаров CREATE TABLE IF NOT EXISTS products ( product_id SERIAL PRIMARY KEY, category_id INTEGER REFERENCES categories(category_id) ON DELETE SET NULL, @@ -64,10 +57,8 @@ CREATE TABLE IF NOT EXISTS products ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); --- Индексы для быстрого поиска CREATE INDEX IF NOT EXISTS idx_products_category ON products(category_id); CREATE INDEX IF NOT EXISTS idx_products_available ON products(is_available); CREATE INDEX IF NOT EXISTS idx_products_price ON products(price); CREATE INDEX IF NOT EXISTS idx_categories_parent ON categories(parent_id); CREATE INDEX IF NOT EXISTS idx_categories_active ON categories(is_active); - diff --git a/migrations/002_add_cart_orders.sql b/migrations/002_add_cart_orders.sql index e4bf13c..7f741f6 100644 --- a/migrations/002_add_cart_orders.sql +++ b/migrations/002_add_cart_orders.sql @@ -1,7 +1,3 @@ --- 002_add_cart_orders.sql --- Таблицы для корзины и заказов - --- Таблица корзины CREATE TABLE IF NOT EXISTS cart ( cart_id SERIAL PRIMARY KEY, user_id INTEGER REFERENCES users(user_id) ON DELETE CASCADE, @@ -12,36 +8,23 @@ CREATE TABLE IF NOT EXISTS cart ( UNIQUE(user_id, product_id) ); --- Таблица заказов CREATE TABLE IF NOT EXISTS orders ( order_id SERIAL PRIMARY KEY, order_number VARCHAR(50) UNIQUE NOT NULL, user_id INTEGER REFERENCES users(user_id) ON DELETE SET NULL, - - -- Контактная информация customer_name VARCHAR(100) NOT NULL, customer_email VARCHAR(255) NOT NULL, customer_phone VARCHAR(20) NOT NULL, - - -- Адрес доставки delivery_address TEXT NOT NULL, delivery_region VARCHAR(100), postal_code VARCHAR(20), - - -- Способы delivery_method VARCHAR(50) DEFAULT 'courier', payment_method VARCHAR(50) DEFAULT 'card', - - -- Суммы subtotal DECIMAL(10, 2) NOT NULL, discount_amount DECIMAL(10, 2) DEFAULT 0, delivery_price DECIMAL(10, 2) DEFAULT 0, final_amount DECIMAL(10, 2) NOT NULL, - - -- Промокод promo_code VARCHAR(50), - - -- Статус и даты status VARCHAR(30) DEFAULT 'pending', notes TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, @@ -49,7 +32,6 @@ CREATE TABLE IF NOT EXISTS orders ( completed_at TIMESTAMP ); --- Таблица позиций заказа CREATE TABLE IF NOT EXISTS order_items ( item_id SERIAL PRIMARY KEY, order_id INTEGER REFERENCES orders(order_id) ON DELETE CASCADE, @@ -61,10 +43,8 @@ CREATE TABLE IF NOT EXISTS order_items ( created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); --- Индексы CREATE INDEX IF NOT EXISTS idx_cart_user ON cart(user_id); CREATE INDEX IF NOT EXISTS idx_orders_user ON orders(user_id); CREATE INDEX IF NOT EXISTS idx_orders_status ON orders(status); CREATE INDEX IF NOT EXISTS idx_orders_created ON orders(created_at); CREATE INDEX IF NOT EXISTS idx_order_items_order ON order_items(order_id); - diff --git a/migrations/003_add_product_fields.sql b/migrations/003_add_product_fields.sql index 3fbb9ba..0b337cd 100644 --- a/migrations/003_add_product_fields.sql +++ b/migrations/003_add_product_fields.sql @@ -1,57 +1,43 @@ --- 003_add_product_fields.sql --- Добавление дополнительных полей (если таблицы уже существуют) - --- Добавляем поля в products если их нет DO $$ BEGIN - -- color IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'products' AND column_name = 'color') THEN ALTER TABLE products ADD COLUMN color VARCHAR(50); END IF; - -- material IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'products' AND column_name = 'material') THEN ALTER TABLE products ADD COLUMN material VARCHAR(100); END IF; - -- card_size IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'products' AND column_name = 'card_size') THEN ALTER TABLE products ADD COLUMN card_size VARCHAR(20) DEFAULT 'small'; END IF; END $$; --- Добавляем поля в users если их нет DO $$ BEGIN - -- city IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'users' AND column_name = 'city') THEN ALTER TABLE users ADD COLUMN city VARCHAR(100); END IF; - -- last_login IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'users' AND column_name = 'last_login') THEN ALTER TABLE users ADD COLUMN last_login TIMESTAMP; END IF; END $$; --- Добавляем поля в categories если их нет DO $$ BEGIN - -- updated_at IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'categories' AND column_name = 'updated_at') THEN ALTER TABLE categories ADD COLUMN updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP; END IF; - -- created_at IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'categories' AND column_name = 'created_at') THEN ALTER TABLE categories ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP; END IF; END $$; - diff --git a/migrations/004_grant_admin_to_admin_mail.sql b/migrations/004_grant_admin_to_admin_mail.sql index 2ccf98c..f60a702 100644 --- a/migrations/004_grant_admin_to_admin_mail.sql +++ b/migrations/004_grant_admin_to_admin_mail.sql @@ -1,14 +1,9 @@ --- 004_grant_admin_to_admin_mail.sql --- Миграция: Назначение прав администратора пользователю admin@mail.ru - --- Обновляем пользователя admin@mail.ru, давая ему права администратора UPDATE users SET is_admin = TRUE, is_active = TRUE, updated_at = CURRENT_TIMESTAMP WHERE email = 'admin@mail.ru'; --- Проверяем результат DO $$ DECLARE updated_count INTEGER; @@ -17,7 +12,6 @@ BEGIN GET DIAGNOSTICS updated_count = ROW_COUNT; IF updated_count > 0 THEN - -- Получаем информацию об обновленном пользователе SELECT user_id, email, full_name, is_admin, is_active INTO user_info FROM users @@ -28,11 +22,10 @@ BEGIN RAISE NOTICE 'ФИО: %, Админ: %, Активен: %', user_info.full_name, user_info.is_admin, user_info.is_active; ELSE - -- Если пользователь не найден, создаем его с правами админа INSERT INTO users (email, password_hash, full_name, phone, city, is_admin, is_active) VALUES ( 'admin@mail.ru', - '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', -- admin123 + '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Администратор', '+79129991223', 'Москва', @@ -47,4 +40,3 @@ BEGIN RAISE NOTICE 'Пользователь admin@mail.ru создан/обновлен с правами администратора'; END IF; END $$; - diff --git a/migrations/seed_data.sql b/migrations/seed_data.sql index ca1af50..0cc3ea1 100644 --- a/migrations/seed_data.sql +++ b/migrations/seed_data.sql @@ -1,11 +1,7 @@ --- seed_data.sql --- Начальные данные для AETERNA - --- Администратор (пароль: admin123) INSERT INTO users (email, password_hash, full_name, phone, city, is_admin, is_active) VALUES ( 'admin@aeterna.ru', - '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', -- admin123 + '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Администратор AETERNA', '+79129991223', 'Москва', @@ -13,11 +9,10 @@ VALUES ( TRUE ) ON CONFLICT (email) DO NOTHING; --- Тестовый пользователь (пароль: user123) INSERT INTO users (email, password_hash, full_name, phone, city, is_admin, is_active) VALUES ( 'user@test.com', - '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', -- user123 + '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', 'Тестовый Пользователь', '+79111234567', 'Санкт-Петербург', @@ -25,7 +20,6 @@ VALUES ( TRUE ) ON CONFLICT (email) DO NOTHING; --- Категории INSERT INTO categories (name, slug, description, sort_order, is_active) VALUES ('Диваны', 'divany', 'Прямые и угловые диваны для гостиной', 1, TRUE), ('Кресла', 'kresla', 'Кресла для гостиной и офиса', 2, TRUE), @@ -35,7 +29,6 @@ INSERT INTO categories (name, slug, description, sort_order, is_active) VALUES ('Светильники', 'svetilniki', 'Торшеры, люстры и настольные лампы', 6, TRUE) ON CONFLICT (slug) DO NOTHING; --- Товары INSERT INTO products (category_id, name, slug, description, price, old_price, sku, stock_quantity, is_available, image_url, color, material, card_size) VALUES (1, 'Светильник MINNIGHT', 'svetilnik-minnight', 'Настольный светильник в современном стиле', 7999, 9999, 'LAMP-MIN-001', 15, TRUE, 'img2/1_2.png', 'Черный', 'Металл', 'small'), (3, 'Кровать MODER', 'krovat-moder', 'Двуспальная кровать с мягким изголовьем', 45999, 55999, 'BED-MOD-001', 5, TRUE, 'img2/3_3.png', 'Серый', 'Дерево/Ткань', 'large'), @@ -48,7 +41,6 @@ INSERT INTO products (category_id, name, slug, description, price, old_price, sk (1, 'Диван HEMMINS', 'divan-hemmins', 'Большой модульный диван для всей семьи', 89999, 110000, 'SOFA-HEM-001', 2, TRUE, 'img2/9_9.png', 'Темно-серый', 'Ткань', 'full-width') ON CONFLICT (slug) DO NOTHING; --- Выводим статистику DO $$ DECLARE users_count INTEGER; @@ -62,4 +54,3 @@ BEGIN RAISE NOTICE 'Загружено: % пользователей, % категорий, % товаров', users_count, categories_count, products_count; END $$; - diff --git a/public/admin/fix_delete_category.php b/public/admin/fix_delete_category.php index e48faec..436536b 100644 --- a/public/admin/fix_delete_category.php +++ b/public/admin/fix_delete_category.php @@ -4,7 +4,6 @@ header('Content-Type: application/json; charset=utf-8'); session_start(); require_once __DIR__ . '/../config/database.php'; -// Проверка прав администратора if (!isset($_SESSION['isAdmin']) || !$_SESSION['isAdmin']) { echo json_encode(['success' => false, 'message' => 'Доступ запрещен']); exit(); @@ -21,7 +20,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { try { $db = Database::getInstance()->getConnection(); - // Проверяем, есть ли товары в этой категории $checkStmt = $db->prepare("SELECT COUNT(*) FROM products WHERE category_id = ?"); $checkStmt->execute([$categoryId]); $productCount = $checkStmt->fetchColumn(); @@ -31,7 +29,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { exit(); } - // Удаляем категорию $stmt = $db->prepare("DELETE FROM categories WHERE category_id = ?"); $stmt->execute([$categoryId]); diff --git a/public/admin/index.php b/public/admin/index.php index 379815e..f908805 100644 --- a/public/admin/index.php +++ b/public/admin/index.php @@ -150,7 +150,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $material = trim($_POST['material'] ?? ''); if ($category_id <= 0) { - $firstCat = $db->query("SELECT category_id FROM categories LIMIT 1")->fetchColumn(); $category_id = $firstCat ?: 1; } @@ -192,24 +191,18 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $childCount = $checkChildren->fetchColumn(); if ($productCount > 0) { - $stmt = $db->prepare("UPDATE categories SET is_active = FALSE WHERE category_id = ?"); $stmt->execute([$categoryId]); - header('Location: index.php?action=categories&message=Категория+скрыта+(содержит+товары)'); exit(); } elseif ($childCount > 0) { - $stmt = $db->prepare("UPDATE categories SET is_active = FALSE WHERE category_id = ?"); $stmt->execute([$categoryId]); - header('Location: index.php?action=categories&message=Категория+скрыта+(имеет+дочерние+категории)'); exit(); } else { - $stmt = $db->prepare("DELETE FROM categories WHERE category_id = ?"); $stmt->execute([$categoryId]); - header('Location: index.php?action=categories&message=Категория+удалена'); exit(); } @@ -224,7 +217,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } try { - $stats = [ 'total_products' => $db->query("SELECT COUNT(*) FROM products")->fetchColumn(), 'active_products' => $db->query("SELECT COUNT(*) FROM products WHERE is_available = TRUE")->fetchColumn(), @@ -502,13 +494,11 @@ try { - + - Редактировать -