39038-vm/admin_faqs.php
2026-03-07 18:26:14 +00:00

256 lines
12 KiB
PHP

<?php
declare(strict_types=1);
require_once __DIR__ . '/includes/layout.php';
$errors = [];
$flash = null;
$editFaqId = isset($_GET['edit_faq']) ? (int)$_GET['edit_faq'] : 0;
db()->exec("
CREATE TABLE IF NOT EXISTS faqs (
id INT AUTO_INCREMENT PRIMARY KEY,
question_en VARCHAR(255) NOT NULL,
answer_en TEXT NOT NULL,
question_ar VARCHAR(255) DEFAULT NULL,
answer_ar TEXT DEFAULT NULL,
sort_order INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['add_faq'])) {
$questionEn = trim($_POST['question_en'] ?? '');
$answerEn = trim($_POST['answer_en'] ?? '');
$questionAr = trim($_POST['question_ar'] ?? '');
$answerAr = trim($_POST['answer_ar'] ?? '');
$sortOrder = (int)($_POST['sort_order'] ?? 0);
if ($questionEn === '' || $answerEn === '') {
$errors[] = 'Question and Answer (English) are required.';
} else {
try {
$stmt = db()->prepare("INSERT INTO faqs (question_en, answer_en, question_ar, answer_ar, sort_order) VALUES (?, ?, ?, ?, ?)");
$stmt->execute([
$questionEn,
$answerEn,
$questionAr !== '' ? $questionAr : null,
$answerAr !== '' ? $answerAr : null,
$sortOrder
]);
$flash = 'FAQ added successfully.';
} catch (Throwable $e) {
$errors[] = 'Failed to add FAQ: ' . $e->getMessage();
}
}
} elseif (isset($_POST['update_faq'])) {
$faqId = (int)($_POST['faq_id'] ?? 0);
$questionEn = trim($_POST['question_en'] ?? '');
$answerEn = trim($_POST['answer_en'] ?? '');
$questionAr = trim($_POST['question_ar'] ?? '');
$answerAr = trim($_POST['answer_ar'] ?? '');
$sortOrder = (int)($_POST['sort_order'] ?? 0);
if ($faqId <= 0 || $questionEn === '' || $answerEn === '') {
$errors[] = 'FAQ ID, Question, and Answer (English) are required.';
} else {
try {
$stmt = db()->prepare("UPDATE faqs SET question_en = ?, answer_en = ?, question_ar = ?, answer_ar = ?, sort_order = ? WHERE id = ?");
$stmt->execute([
$questionEn,
$answerEn,
$questionAr !== '' ? $questionAr : null,
$answerAr !== '' ? $answerAr : null,
$sortOrder,
$faqId
]);
$flash = 'FAQ updated successfully.';
$editFaqId = 0;
} catch (Throwable $e) {
$errors[] = 'Failed to update FAQ: ' . $e->getMessage();
}
}
} elseif (isset($_POST['delete_faq'])) {
$faqId = (int)($_POST['faq_id'] ?? 0);
if ($faqId <= 0) {
$errors[] = 'Invalid FAQ selected.';
} else {
try {
$stmt = db()->prepare("DELETE FROM faqs WHERE id = ?");
$stmt->execute([$faqId]);
$flash = 'FAQ deleted successfully.';
$editFaqId = 0;
} catch (Throwable $e) {
$errors[] = 'Failed to delete FAQ: ' . $e->getMessage();
}
}
}
}
$faqs = db()->query("SELECT * FROM faqs ORDER BY sort_order ASC, id DESC")->fetchAll();
$editingFaq = null;
if ($editFaqId > 0) {
foreach ($faqs as $faq) {
if ((int)$faq['id'] === $editFaqId) {
$editingFaq = $faq;
break;
}
}
}
render_header('Manage FAQs', 'admin');
?>
<div class="row g-4">
<div class="col-lg-3">
<?php render_admin_sidebar('faqs'); ?>
</div>
<div class="col-lg-9">
<div class="page-intro mb-4">
<h1 class="h3 mb-1">Frequently Asked Questions</h1>
<p class="text-muted mb-0">Manage the Q&A list displayed on the public FAQ page.</p>
</div>
<?php if ($flash): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?= e($flash) ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php endif; ?>
<?php if ($errors): ?>
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<?= e(implode(' ', $errors)) ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php endif; ?>
<?php if ($editingFaq): ?>
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white border-bottom-0 pt-4 pb-0">
<h5 class="mb-0">Edit FAQ</h5>
</div>
<div class="card-body">
<form method="post" class="row g-3">
<input type="hidden" name="faq_id" value="<?= e((string)$editingFaq['id']) ?>">
<div class="col-md-6">
<label class="form-label" for="edit_question_en">Question (EN) <span class="text-danger">*</span></label>
<input id="edit_question_en" type="text" name="question_en" class="form-control" value="<?= e($editingFaq['question_en']) ?>" required>
</div>
<div class="col-md-6">
<label class="form-label" for="edit_question_ar">Question (AR)</label>
<input id="edit_question_ar" type="text" name="question_ar" class="form-control" value="<?= e((string)($editingFaq['question_ar'] ?? '')) ?>" dir="auto">
</div>
<div class="col-md-6">
<label class="form-label" for="edit_answer_en">Answer (EN) <span class="text-danger">*</span></label>
<textarea id="edit_answer_en" name="answer_en" class="form-control" rows="4" required><?= e($editingFaq['answer_en']) ?></textarea>
</div>
<div class="col-md-6">
<label class="form-label" for="edit_answer_ar">Answer (AR)</label>
<textarea id="edit_answer_ar" name="answer_ar" class="form-control" rows="4" dir="auto"><?= e((string)($editingFaq['answer_ar'] ?? '')) ?></textarea>
</div>
<div class="col-md-4">
<label class="form-label" for="edit_sort_order">Sort Order</label>
<input id="edit_sort_order" type="number" name="sort_order" class="form-control" value="<?= e((string)$editingFaq['sort_order']) ?>">
</div>
<div class="col-12 mt-4">
<button type="submit" name="update_faq" class="btn btn-primary px-4 me-2">Save Changes</button>
<a class="btn btn-outline-secondary px-4" href="<?= e(url_with_lang('admin_faqs.php')) ?>">Cancel</a>
</div>
</form>
</div>
</div>
<?php else: ?>
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white border-bottom-0 pt-4 pb-0">
<h5 class="mb-0">Add New FAQ</h5>
</div>
<div class="card-body">
<form method="post" class="row g-3">
<div class="col-md-6">
<label class="form-label" for="question_en">Question (EN) <span class="text-danger">*</span></label>
<input id="question_en" type="text" name="question_en" class="form-control" required>
</div>
<div class="col-md-6">
<label class="form-label" for="question_ar">Question (AR)</label>
<input id="question_ar" type="text" name="question_ar" class="form-control" dir="auto">
</div>
<div class="col-md-6">
<label class="form-label" for="answer_en">Answer (EN) <span class="text-danger">*</span></label>
<textarea id="answer_en" name="answer_en" class="form-control" rows="3" required></textarea>
</div>
<div class="col-md-6">
<label class="form-label" for="answer_ar">Answer (AR)</label>
<textarea id="answer_ar" name="answer_ar" class="form-control" rows="3" dir="auto"></textarea>
</div>
<div class="col-md-4">
<label class="form-label" for="sort_order">Sort Order (Optional)</label>
<input id="sort_order" type="number" name="sort_order" class="form-control" value="0">
</div>
<div class="col-12 mt-4">
<button type="submit" name="add_faq" class="btn btn-primary px-4"><i class="bi bi-plus-circle me-2"></i>Add FAQ</button>
</div>
</form>
</div>
</div>
<?php endif; ?>
<div class="card border-0 shadow-sm">
<div class="card-header bg-white border-bottom-0 pt-4 pb-3">
<h5 class="mb-0">Current FAQs</h5>
</div>
<div class="card-body p-0">
<?php if (!$faqs): ?>
<div class="text-center p-5 text-muted">
<i class="bi bi-question-circle display-4 mb-3 d-block text-secondary opacity-50"></i>
<p class="mb-0">No FAQs added yet.</p>
</div>
<?php else: ?>
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th class="ps-4">Sort</th>
<th>Question (EN)</th>
<th>Answer Extract</th>
<th class="text-end pe-4">Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($faqs as $faq): ?>
<tr>
<td class="ps-4 text-muted"><small><?= e((string)$faq['sort_order']) ?></small></td>
<td class="fw-medium"><?= e($faq['question_en']) ?></td>
<td class="text-muted"><small><?= e(mb_strimwidth($faq['answer_en'], 0, 50, '...')) ?></small></td>
<td class="text-end pe-4">
<a class="btn btn-sm btn-light border me-1" href="<?= e(url_with_lang('admin_faqs.php', ['edit_faq' => (int)$faq['id']])) ?>" title="Edit">
<i class="bi bi-pencil"></i>
</a>
<form method="post" class="d-inline" onsubmit="return confirm('Are you sure you want to delete this FAQ?');">
<input type="hidden" name="faq_id" value="<?= e((string)$faq['id']) ?>">
<button type="submit" name="delete_faq" class="btn btn-sm btn-light border text-danger" title="Delete">
<i class="bi bi-trash"></i>
</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
<?php render_footer(); ?>