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; case 'order_details': if (isset($_GET['id'])) { $orderId = (int)$_GET['id']; // Получаем информацию о заказе $stmt = $db->prepare(" SELECT o.*, u.email as user_email, u.full_name as user_full_name FROM orders o LEFT JOIN users u ON o.user_id = u.user_id WHERE o.order_id = ? "); $stmt->execute([$orderId]); $order = $stmt->fetch(); // Получаем товары в заказе if ($order) { $stmt = $db->prepare(" SELECT oi.*, p.image_url FROM order_items oi LEFT JOIN products p ON oi.product_id = p.product_id WHERE oi.order_id = ? "); $stmt->execute([$orderId]); $order_items = $stmt->fetchAll(); } } break; } } catch (PDOException $e) { $error = "Ошибка базы данных: " . $e->getMessage(); } ?> AETERNA - Админ-панель

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

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

Статистика

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

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

Заказов

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

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

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

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

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

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

Отмена

Отмена

Заказы

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

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

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

Детали заказа #

Информация о заказе

Номер заказа:
Дата создания:
Статус:
Способ оплаты:
Способ доставки:

Информация о клиенте

ФИО:
Email:
Телефон:
Регион:
Адрес доставки:
Индекс:

Товары в заказе

Изображение Товар Цена Количество Сумма
<?= htmlspecialchars($item['product_name']) ?>
шт.

Итого

0): ?>
Товары:
Скидка: -
Доставка:
Итого к оплате:

Примечания

Заказ не найден
Вернуться к списку заказов