requireAuth(); $publication = new Publication(); $user = $auth->getUser(); // Handle actions $action = $_GET['action'] ?? ''; $message = ''; $category = null; if ($action === 'edit' && isset($_GET['id'])) { $id = (int)$_GET['id']; $category = $publication->db->fetch("SELECT * FROM categories WHERE id = ?", [$id]); if (!$category) { die('Category not found'); } } if ($action === 'delete' && isset($_GET['id'])) { $id = (int)$_GET['id']; try { // Check if category has publications $pubCount = $publication->db->fetch("SELECT COUNT(*) as count FROM publication_categories WHERE category_id = ?", [$id])['count']; if ($pubCount > 0) { $message = 'Cannot delete category with associated publications'; } else { $publication->db->delete('categories', 'id = ?', [$id]); $message = 'Category deleted successfully'; } } catch (Exception $e) { $message = 'Error deleting category: ' . $e->getMessage(); } } // Handle form submission if ($_SERVER['REQUEST_METHOD'] === 'POST') { $name = trim($_POST['name'] ?? ''); $description = trim($_POST['description'] ?? ''); $categoryId = (int)($_POST['category_id'] ?? 0); $errors = []; if (empty($name)) $errors[] = 'Category name is required'; if (empty($errors)) { try { if ($categoryId > 0) { // Update existing category $publication->db->update('categories', [ 'name' => $name, 'description' => $description ], 'id = ?', [$categoryId]); $message = 'Category updated successfully'; } else { // Create new category $publication->db->insert('categories', [ 'name' => $name, 'description' => $description ]); $message = 'Category created successfully'; } // Redirect to avoid form resubmission header('Location: categories.php?message=' . urlencode($message)); exit; } catch (Exception $e) { if (strpos($e->getMessage(), 'Duplicate') !== false) { $errors[] = 'Category name already exists'; } else { $errors[] = 'Error saving category: ' . $e->getMessage(); } } } // Preserve form data on error $category = [ 'name' => $name, 'description' => $description, 'id' => $categoryId ]; } // Get all categories $categories = $publication->getCategories(); // Handle message from redirect if (isset($_GET['message'])) { $message = htmlspecialchars($_GET['message']); } ?>