alert('Требуется авторизация администратора'); window.location.href = '../login.php';"; exit(); } $db = Database::getInstance()->getConnection(); $action = $_GET['action'] ?? 'dashboard'; $message = $_GET['message'] ?? ''; $error = $_GET['error'] ?? ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $post_action = $_POST['action'] ?? ''; try { if ($post_action === 'add_category') { $name = trim($_POST['name'] ?? ''); $slug = strtolower(preg_replace('/[^a-z0-9]+/i', '-', $name)); $parent_id = !empty($_POST['parent_id']) ? (int)$_POST['parent_id'] : NULL; $description = trim($_POST['description'] ?? ''); $sort_order = (int)($_POST['sort_order'] ?? 0); $is_active = isset($_POST['is_active']) ? 1 : 0; if (empty($name)) { throw new Exception('Название категории обязательно'); } $stmt = $db->prepare(" INSERT INTO categories (name, slug, parent_id, description, sort_order, is_active) VALUES (?, ?, ?, ?, ?, ?) "); $result = $stmt->execute([$name, $slug, $parent_id, $description, $sort_order, $is_active]); if ($result) { header('Location: index.php?action=categories&message=Категория+успешно+добавлена'); exit(); } } if ($post_action === 'edit_category' && isset($_POST['category_id'])) { $category_id = (int)$_POST['category_id']; $name = trim($_POST['name'] ?? ''); $parent_id = !empty($_POST['parent_id']) ? (int)$_POST['parent_id'] : NULL; $description = trim($_POST['description'] ?? ''); $sort_order = (int)($_POST['sort_order'] ?? 0); $is_active = isset($_POST['is_active']) ? 1 : 0; if (empty($name)) { throw new Exception('Название категории обязательно'); } $slug = strtolower(preg_replace('/[^a-z0-9]+/i', '-', $name)); $stmt = $db->prepare(" UPDATE categories SET name = ?, slug = ?, parent_id = ?, description = ?, sort_order = ?, is_active = ?, updated_at = CURRENT_TIMESTAMP WHERE category_id = ? "); $stmt->execute([$name, $slug, $parent_id, $description, $sort_order, $is_active, $category_id]); header('Location: index.php?action=categories&message=Категория+обновлена'); exit(); } if ($post_action === 'add_product') { $name = trim($_POST['name'] ?? ''); $slug = strtolower(preg_replace('/[^a-z0-9]+/i', '-', $name)); $category_id = (int)($_POST['category_id'] ?? 0); $description = trim($_POST['description'] ?? ''); $price = (float)($_POST['price'] ?? 0); $old_price = !empty($_POST['old_price']) ? (float)$_POST['old_price'] : NULL; $sku = trim($_POST['sku'] ?? ''); $stock_quantity = (int)($_POST['stock_quantity'] ?? 0); $is_available = isset($_POST['is_available']) ? 1 : 0; $is_featured = isset($_POST['is_featured']) ? 1 : 0; $image_url = trim($_POST['image_url'] ?? ''); $color = trim($_POST['color'] ?? ''); $material = trim($_POST['material'] ?? ''); $card_size = trim($_POST['card_size'] ?? 'small'); if ($category_id <= 0) { $_SESSION['error'] = 'Выберите корректную категорию'; header('Location: index.php?action=add_product'); exit(); } $check_category = $db->prepare("SELECT COUNT(*) FROM categories WHERE category_id = ?"); $check_category->execute([$category_id]); if ($check_category->fetchColumn() == 0) { $_SESSION['error'] = 'Выбранная категория не существует'; header('Location: index.php?action=add_product'); exit(); } if (empty($name)) throw new Exception('Название товара обязательно'); if ($price <= 0) throw new Exception('Цена должна быть больше 0'); if (empty($sku)) { $sku = 'PROD-' . strtoupper(substr(preg_replace('/[^a-z0-9]/i', '', $name), 0, 6)) . '-' . rand(100, 999); } $stmt = $db->prepare(" INSERT INTO products ( category_id, name, slug, description, price, old_price, sku, stock_quantity, is_available, is_featured, image_url, color, material, card_size ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "); $result = $stmt->execute([ $category_id, $name, $slug, $description, $price, $old_price, $sku, $stock_quantity, $is_available, $is_featured, $image_url, $color, $material, $card_size ]); if ($result) { $_SESSION['message'] = 'Товар успешно добавлен'; header('Location: index.php?action=products'); exit(); } } if ($post_action === 'edit_product' && isset($_POST['product_id'])) { $product_id = (int)$_POST['product_id']; $name = trim($_POST['name'] ?? ''); $category_id = (int)($_POST['category_id'] ?? 1); $description = trim($_POST['description'] ?? ''); $price = (float)($_POST['price'] ?? 0); $old_price = !empty($_POST['old_price']) ? (float)$_POST['old_price'] : NULL; $stock_quantity = (int)($_POST['stock_quantity'] ?? 0); $is_available = isset($_POST['is_available']) ? 1 : 0; $image_url = trim($_POST['image_url'] ?? ''); $color = trim($_POST['color'] ?? ''); $material = trim($_POST['material'] ?? ''); if ($category_id <= 0) { $firstCat = $db->query("SELECT category_id FROM categories LIMIT 1")->fetchColumn(); $category_id = $firstCat ?: 1; } $stmt = $db->prepare(" UPDATE products SET name = ?, category_id = ?, description = ?, price = ?, old_price = ?, stock_quantity = ?, is_available = ?, image_url = ?, color = ?, material = ?, updated_at = CURRENT_TIMESTAMP WHERE product_id = ? "); $stmt->execute([ $name, $category_id, $description, $price, $old_price, $stock_quantity, $is_available, $image_url, $color, $material, $product_id ]); header('Location: index.php?action=products&message=Товар+обновлен'); exit(); } if ($post_action === 'delete_category' && isset($_POST['category_id'])) { $categoryId = intval($_POST['category_id']); $checkProducts = $db->prepare("SELECT COUNT(*) FROM products WHERE category_id = ?"); $checkProducts->execute([$categoryId]); $productCount = $checkProducts->fetchColumn(); $checkChildren = $db->prepare("SELECT COUNT(*) FROM categories WHERE parent_id = ?"); $checkChildren->execute([$categoryId]); $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(); } } } catch (PDOException $e) { header('Location: index.php?action=' . $action . '&error=' . urlencode('Ошибка БД: ' . $e->getMessage())); exit(); } catch (Exception $e) { header('Location: index.php?action=' . $action . '&error=' . urlencode($e->getMessage())); exit(); } } try { $stats = [ 'total_products' => $db->query("SELECT COUNT(*) FROM products")->fetchColumn(), 'active_products' => $db->query("SELECT COUNT(*) FROM products WHERE is_available = TRUE")->fetchColumn(), 'total_orders' => $db->query("SELECT COUNT(*) FROM orders")->fetchColumn(), 'total_users' => $db->query("SELECT COUNT(*) FROM users")->fetchColumn(), 'revenue' => $db->query("SELECT COALESCE(SUM(final_amount), 0) FROM orders WHERE status = 'completed'")->fetchColumn() ]; $allCategories = $db->query("SELECT * FROM categories WHERE is_active = TRUE ORDER BY name")->fetchAll(); $parentCategories = $db->query("SELECT * FROM categories WHERE parent_id IS NULL AND is_active = TRUE ORDER BY name")->fetchAll(); switch ($action) { case 'products': $showAll = isset($_GET['show_all']) && $_GET['show_all'] == '1'; $sql = $showAll ? "SELECT p.*, c.name as category_name FROM products p LEFT JOIN categories c ON p.category_id = c.category_id ORDER BY p.created_at DESC" : "SELECT p.*, c.name as category_name FROM products p LEFT JOIN categories c ON p.category_id = c.category_id WHERE p.is_available = TRUE ORDER BY p.created_at DESC"; $data = $db->query($sql)->fetchAll(); break; case 'categories': $data = $db->query(" SELECT c1.*, c2.name as parent_name, (SELECT COUNT(*) FROM products p WHERE p.category_id = c1.category_id) as product_count FROM categories c1 LEFT JOIN categories c2 ON c1.parent_id = c2.category_id ORDER BY c1.sort_order, c1.name ")->fetchAll(); break; case 'orders': $data = $db->query(" SELECT o.*, u.email as user_email FROM orders o LEFT JOIN users u ON o.user_id = u.user_id ORDER BY o.created_at DESC LIMIT 50 ")->fetchAll(); break; case 'users': $data = $db->query("SELECT * FROM users ORDER BY created_at DESC LIMIT 50")->fetchAll(); break; case 'add_product': case 'edit_product': if ($action === 'edit_product' && isset($_GET['id'])) { $productId = (int)$_GET['id']; $stmt = $db->prepare("SELECT * FROM products WHERE product_id = ?"); $stmt->execute([$productId]); $edit_data = $stmt->fetch(); } break; case 'add_category': case 'edit_category': if ($action === 'edit_category' && isset($_GET['id'])) { $categoryId = (int)$_GET['id']; $stmt = $db->prepare("SELECT * FROM categories WHERE category_id = ?"); $stmt->execute([$categoryId]); $edit_data = $stmt->fetch(); } break; } } catch (PDOException $e) { $error = "Ошибка базы данных: " . $e->getMessage(); } ?> AETERNA - Админ-панель

Админ-панель AETERNA

В каталог Выйти
Дашборд Товары Категории Заказы Пользователи

Статистика

Всего товаров

Активных товаров

Заказов

Пользователей

Добавить новый товар Добавить категорию

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

Добавить товар Только активные Показать все
ID Название Категория Цена На складе Статус Действия
0): ?> ✓ Доступен ✗ Недоступен ⚠ Нет на складе

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

Добавить категорию
ID Название Slug Родительская Товаров Действия
Редактировать

Отмена

Отмена

Заказы

№ заказа Клиент Сумма Статус Дата Действия

Пользователи

ID Email ФИО Дата регистрации Статус
✓ Активен ✗ Неактивен