requireAuth(); $publication = new Publication(); $user = $auth->getUser(); // Translation system is auto-initialized when translation.php is included // 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(t('admin_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 = t('admin_category_cannot_delete_with_pubs'); } else { $publication->db->delete('categories', 'id = ?', [$id]); $message = t('admin_category_deleted_success'); } } catch (Exception $e) { $message = t('admin_category_delete_error') . ' ' . $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[] = t('admin_category_name_required'); if (empty($errors)) { try { if ($categoryId > 0) { // Update existing category $publication->db->update('categories', [ 'name' => $name, 'description' => $description ], 'id = ?', [$categoryId]); $message = t('admin_category_updated_success'); } else { // Create new category $publication->db->insert('categories', [ 'name' => $name, 'description' => $description ]); $message = t('admin_category_created_success'); } // Redirect to avoid form resubmission header('Location: categories.php?message=' . urlencode($message)); exit; } catch (Exception $e) { if (strpos($e->getMessage(), 'Duplicate') !== false) { $errors[] = t('admin_category_name_exists'); } else { $errors[] = t('admin_category_save_error') . ' ' . $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']); } ?>