requireAuth(); $publication = new Publication(); $user = $auth->getUser(); $pubId = $_GET['id'] ?? null; $pub = null; $categories = []; $selectedCategories = []; // Get all available categories $allCategories = $publication->getCategories(); if ($pubId) { $pub = $publication->getById($pubId); if (!$pub) { die('Publication not found'); } } // Handle form submission if ($_SERVER['REQUEST_METHOD'] === 'POST') { $title = trim($_POST['title'] ?? ''); $content = trim($_POST['content'] ?? ''); $summary = trim($_POST['summary'] ?? ''); $author = trim($_POST['author'] ?? $user['username']); $status = $_POST['status'] ?? 'draft'; $categoryIds = $_POST['categories'] ?? []; $errors = []; if (empty($title)) $errors[] = 'Title is required'; if (empty($content)) $errors[] = 'Content is required'; if (empty($author)) $errors[] = 'Author is required'; if (empty($errors)) { $data = [ 'title' => $title, 'content' => $content, 'summary' => $summary, 'author' => $author, 'status' => $status ]; try { if ($pubId) { $publication->update($pubId, $data, $categoryIds); $message = 'Publication updated successfully'; } else { $publication->create($data, $categoryIds); $message = 'Publication created successfully'; header('Location: index.php?message=' . urlencode($message)); exit; } } catch (Exception $e) { $errors[] = 'Error saving publication: ' . $e->getMessage(); } } // Preserve form data on error $pub = [ 'title' => $title, 'content' => $content, 'summary' => $summary, 'author' => $author, 'status' => $status ]; $selectedCategories = $categoryIds; } elseif ($pub) { // Get selected categories for existing publication $sql = "SELECT category_id FROM publication_categories WHERE publication_id = ?"; $selectedCategories = array_column($publication->db->fetchAll($sql, [$pubId]), 'category_id'); } ?>