111 lines
4.6 KiB
PHP
111 lines
4.6 KiB
PHP
<?php
|
||
// catalog_admin_action.php
|
||
session_start();
|
||
require_once 'config/database.php';
|
||
|
||
if (!isset($_SESSION['is_admin']) || $_SESSION['is_admin'] !== true) {
|
||
header('Location: вход.php');
|
||
exit();
|
||
}
|
||
|
||
$db = Database::getInstance()->getConnection();
|
||
$action = $_POST['action'] ?? '';
|
||
|
||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||
try {
|
||
switch ($action) {
|
||
case 'add_category':
|
||
$name = $_POST['name'] ?? '';
|
||
$parent_id = $_POST['parent_id'] ?: null;
|
||
$description = $_POST['description'] ?? null;
|
||
$sort_order = $_POST['sort_order'] ?? 0;
|
||
$is_active = isset($_POST['is_active']) ? 1 : 0;
|
||
|
||
// Создаем slug из названия
|
||
$slug = strtolower(preg_replace('/[^a-z0-9]+/i', '-', $name));
|
||
|
||
$stmt = $db->prepare("
|
||
INSERT INTO categories (name, slug, parent_id, description, sort_order, is_active)
|
||
VALUES (?, ?, ?, ?, ?, ?)
|
||
");
|
||
|
||
$stmt->execute([$name, $slug, $parent_id, $description, $sort_order, $is_active]);
|
||
|
||
header('Location: catalog_admin.php?action=categories&message=Категория успешно добавлена');
|
||
exit();
|
||
|
||
case 'edit_category':
|
||
$category_id = $_POST['category_id'] ?? 0;
|
||
$name = $_POST['name'] ?? '';
|
||
$parent_id = $_POST['parent_id'] ?: null;
|
||
$description = $_POST['description'] ?? null;
|
||
$sort_order = $_POST['sort_order'] ?? 0;
|
||
$is_active = isset($_POST['is_active']) ? 1 : 0;
|
||
|
||
// Создаем slug из названия
|
||
$slug = strtolower(preg_replace('/[^a-z0-9]+/i', '-', $name));
|
||
|
||
$stmt = $db->prepare("
|
||
UPDATE categories SET
|
||
name = ?,
|
||
slug = ?,
|
||
parent_id = ?,
|
||
description = ?,
|
||
sort_order = ?,
|
||
is_active = ?
|
||
WHERE category_id = ?
|
||
");
|
||
|
||
$stmt->execute([$name, $slug, $parent_id, $description, $sort_order, $is_active, $category_id]);
|
||
|
||
header('Location: catalog_admin.php?action=categories&message=Категория успешно обновлена');
|
||
exit();
|
||
|
||
case 'delete_category':
|
||
$category_id = $_POST['category_id'] ?? 0;
|
||
|
||
// Проверяем, есть ли активные товары в этой категории
|
||
$checkStmt = $db->prepare("
|
||
SELECT COUNT(*)
|
||
FROM products
|
||
WHERE category_id = ? AND is_available = TRUE
|
||
");
|
||
$checkStmt->execute([$category_id]);
|
||
$active_products = $checkStmt->fetchColumn();
|
||
|
||
if ($active_products > 0) {
|
||
header('Location: catalog_admin.php?action=categories&error=Невозможно удалить категорию с активными товарами');
|
||
exit();
|
||
}
|
||
|
||
// Проверяем дочерние категории
|
||
$checkChildStmt = $db->prepare("
|
||
SELECT COUNT(*)
|
||
FROM categories
|
||
WHERE parent_id = ? AND is_active = TRUE
|
||
");
|
||
$checkChildStmt->execute([$category_id]);
|
||
$active_children = $checkChildStmt->fetchColumn();
|
||
|
||
if ($active_children > 0) {
|
||
header('Location: catalog_admin.php?action=categories&error=Невозможно удалить категорию с активными дочерними категориями');
|
||
exit();
|
||
}
|
||
|
||
// Удаляем категорию
|
||
$stmt = $db->prepare("DELETE FROM categories WHERE category_id = ?");
|
||
$stmt->execute([$category_id]);
|
||
|
||
header('Location: catalog_admin.php?action=categories&message=Категория успешно удалена');
|
||
exit();
|
||
}
|
||
|
||
} catch (PDOException $e) {
|
||
header('Location: catalog_admin.php?action=categories&error=' . urlencode('Ошибка базы данных: ' . $e->getMessage()));
|
||
exit();
|
||
}
|
||
}
|
||
|
||
header('Location: catalog_admin.php');
|
||
exit();
|
||
?>
|