getAllSlides(); // NEW: Get slides from database // If no slides from DB, use placeholders if (empty($slides)) { $slides = [ ['dspsslide_title_en' => 'Welcome to NIPH DSPS', 'dspsslide_description' => 'Your gateway to public health data and insights.', 'dspsslide_photoname' => 'https://placehold.co/1200x400/007bff/ffffff?text=Slide+1+-+Welcome'], ['dspsslide_title_en' => 'Discover Research Data', 'dspsslide_description' => 'Access a wide range of datasets for your studies.', 'dspsslide_photoname' => 'https://placehold.co/1200x400/28a745/ffffff?text=Slide+2+-+Data+Insights'], ['dspsslide_title_en' => 'Stay Informed', 'dspsslide_description' => 'Read the latest announcements and updates from NIPH.', 'dspsslide_photoname' => 'https://placehold.co/1200x400/ffc107/ffffff?text=Slide+3+-+Announcements'], ]; } else { // Adjust photo path for display if coming from DB foreach ($slides as &$slide) { $slide['dspsslide_photoname'] = 'uploads/slides/' . $slide['dspsslide_photoname']; } unset($slide); // Unset reference } $announcements = $announcement_manager->getAllAnnouncements('Published', 3); // Get 3 latest published announcements // If no announcements from DB, use placeholders if (empty($announcements)) { $announcements = [ ['dspsann_title' => 'Important Update on Data Policy', 'dspsann_description' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', 'dspsann_photopath' => 'https://placehold.co/400x250/6c757d/ffffff?text=Announcement+1'], ['dspsann_title' => 'New Data Sources Available', 'dspsann_description' => 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 'dspsann_photopath' => 'https://placehold.co/400x250/6c757d/ffffff?text=Announcement+2'], ['dspsann_title' => 'Upcoming Maintenance Schedule', 'dspsann_description' => 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.', 'dspsann_photopath' => 'https://placehold.co/400x250/6c757d/ffffff?text=Announcement+3'], ]; } else { // Adjust photo path for display if coming from DB foreach ($announcements as &$ann) { if (!empty($ann['dspsann_photopath'])) { $ann['dspsann_photopath'] = 'uploads/announcements/' . $ann['dspsann_photopath']; } else { $ann['dspsann_photopath'] = 'https://placehold.co/400x250/6c757d/ffffff?text=No+Image'; } } unset($ann); // Unset reference } // Fetch data types for classifications section $data_types = $classification_manager->getAllDataTypes(); // Use Classifications manager if (empty($data_types)) { $data_types = [ ['dspstds_name_en' => 'CSV Data', 'icon' => 'fas fa-file-csv', 'color' => 'text-primary', 'description' => 'Explore tabular data in CSV format.'], ['dspstds_name_en' => 'JSON Data', 'icon' => 'fas fa-file-code', 'color' => 'text-success', 'description' => 'Access structured data in JSON format.'], ['dspstds_name_en' => 'API Endpoints', 'icon' => 'fas fa-code-branch', 'color' => 'text-warning', 'description' => 'Integrate with data via API interfaces.'], ['dspstds_name_en' => 'PDF Documents', 'icon' => 'fas fa-file-pdf', 'color' => 'text-danger', 'description' => 'View reports and documents in PDF.'], ]; } else { // Map DB data to include placeholder icons/colors if not stored in DB foreach ($data_types as &$type) { switch ($type['dspstds_name_en']) { case 'CSV': $type['icon'] = 'fas fa-file-csv'; $type['color'] = 'text-primary'; break; case 'JSON': $type['icon'] = 'fas fa-file-code'; $type['color'] = 'text-success'; break; case 'API': $type['icon'] = 'fas fa-code-branch'; $type['color'] = 'text-warning'; break; case 'PDF': $type['icon'] = 'fas fa-file-pdf'; $type['color'] = 'text-danger'; break; default: $type['icon'] = 'fas fa-file'; $type['color'] = 'text-secondary'; break; } $type['description'] = "Explore data of type " . htmlspecialchars($type['dspstds_name_en']) . "."; } unset($type); // Unset reference } // Fetch all categories for the filter dropdown $all_categories = $classification_manager->getAllCategories(); /** * Sanitises rich text content by allowing a limited subset of HTML tags. * * @param string|null $value * @return string */ function dsp_render_rich_text(?string $value): string { if ($value === null) { return ''; } $allowed = '