- Update inc/announcements.php to support listing, fetching by ID, toggling, and deleting multiple announcements - Upgrade admin/index.php to an announcement management view with data table, status indicators, and create/edit sub-views - Add admin table and action styles to styles.css without using inline style blocks - Update index.php to render all currently active banner and hours announcements dynamically
103 lines
3.1 KiB
PHP
103 lines
3.1 KiB
PHP
<?php
|
|
/**
|
|
* Announcements helper functions
|
|
*/
|
|
|
|
require_once __DIR__ . '/db.php';
|
|
|
|
function get_active_announcements(): array {
|
|
$pdo = get_db();
|
|
$today = date('Y-m-d');
|
|
|
|
$sql = "
|
|
SELECT * FROM announcements
|
|
WHERE is_active = 1
|
|
AND (start_date IS NULL OR start_date = '' OR start_date <= :today1)
|
|
AND (end_date IS NULL OR end_date = '' OR end_date >= :today2)
|
|
ORDER BY id DESC
|
|
";
|
|
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->execute([
|
|
':today1' => $today,
|
|
':today2' => $today
|
|
]);
|
|
return $stmt->fetchAll() ?: [];
|
|
}
|
|
|
|
function get_active_announcement(): ?array {
|
|
$all = get_active_announcements();
|
|
return !empty($all) ? $all[0] : null;
|
|
}
|
|
|
|
function get_all_announcements(): array {
|
|
$pdo = get_db();
|
|
$stmt = $pdo->query("SELECT * FROM announcements ORDER BY id DESC");
|
|
return $stmt->fetchAll() ?: [];
|
|
}
|
|
|
|
function get_announcement_by_id(int $id): ?array {
|
|
$pdo = get_db();
|
|
$stmt = $pdo->prepare("SELECT * FROM announcements WHERE id = ?");
|
|
$stmt->execute([$id]);
|
|
$item = $stmt->fetch();
|
|
return $item ?: null;
|
|
}
|
|
|
|
function delete_announcement(int $id): bool {
|
|
$pdo = get_db();
|
|
$stmt = $pdo->prepare("DELETE FROM announcements WHERE id = ?");
|
|
return $stmt->execute([$id]);
|
|
}
|
|
|
|
function toggle_announcement_active(int $id): bool {
|
|
$pdo = get_db();
|
|
$stmt = $pdo->prepare("UPDATE announcements SET is_active = CASE WHEN is_active = 1 THEN 0 ELSE 1 END, updated_at = CURRENT_TIMESTAMP WHERE id = ?");
|
|
return $stmt->execute([$id]);
|
|
}
|
|
|
|
function save_announcement(array $data, ?int $id = null): int {
|
|
$pdo = get_db();
|
|
|
|
$isActive = !empty($data['is_active']) ? 1 : 0;
|
|
$type = in_array($data['type'] ?? '', ['holiday', 'special', 'closure']) ? $data['type'] : 'holiday';
|
|
$headline = trim($data['headline'] ?? '');
|
|
$message = trim($data['message'] ?? '');
|
|
$startDate = !empty($data['start_date']) ? trim($data['start_date']) : null;
|
|
$endDate = !empty($data['end_date']) ? trim($data['end_date']) : null;
|
|
$showBanner = !empty($data['show_banner']) ? 1 : 0;
|
|
$showInHours = !empty($data['show_in_hours']) ? 1 : 0;
|
|
|
|
if ($id && $id > 0) {
|
|
$stmt = $pdo->prepare("
|
|
UPDATE announcements SET
|
|
is_active = ?,
|
|
type = ?,
|
|
headline = ?,
|
|
message = ?,
|
|
start_date = ?,
|
|
end_date = ?,
|
|
show_banner = ?,
|
|
show_in_hours = ?,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = ?
|
|
");
|
|
$stmt->execute([
|
|
$isActive, $type, $headline, $message, $startDate, $endDate,
|
|
$showBanner, $showInHours, $id
|
|
]);
|
|
return $id;
|
|
} else {
|
|
$stmt = $pdo->prepare("
|
|
INSERT INTO announcements (
|
|
is_active, type, headline, message, start_date, end_date, show_banner, show_in_hours
|
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
");
|
|
$stmt->execute([
|
|
$isActive, $type, $headline, $message, $startDate, $endDate,
|
|
$showBanner, $showInHours
|
|
]);
|
|
return (int)$pdo->lastInsertId();
|
|
}
|
|
}
|