prepare("INSERT INTO settings (setting_key, setting_value) VALUES (:key, :value) ON DUPLICATE KEY UPDATE setting_value = :value_update"); $stmt->execute(['key' => 'hero_title', 'value' => $hero_title, 'value_update' => $hero_title]); $stmt->execute(['key' => 'hero_subtitle', 'value' => $hero_subtitle, 'value_update' => $hero_subtitle]); $stmt->execute(['key' => 'slogan', 'value' => $slogan, 'value_update' => $slogan]); $stmt->execute(['key' => 'vision', 'value' => $vision, 'value_update' => $vision]); $stmt->execute(['key' => 'mission', 'value' => $mission, 'value_update' => $mission]); // Handle hero background image replacement if (isset($_FILES['hero_image']) && $_FILES['hero_image']['error'] === UPLOAD_ERR_OK) { $allowed = ['image/jpeg', 'image/png', 'image/webp', 'image/jpg']; if (in_array($_FILES['hero_image']['type'], $allowed)) { // Remove original first $orig_bg = get_setting('hero_image', 'assets/images/hero-bg.jpg'); if (file_exists(__DIR__ . '/../' . $orig_bg) && strpos($orig_bg, 'default') === false) { @unlink(__DIR__ . '/../' . $orig_bg); } $ext = pathinfo($_FILES['hero_image']['name'], PATHINFO_EXTENSION); $filename = 'hero_' . bin2hex(random_bytes(4)) . '.' . $ext; $destination = __DIR__ . '/../assets/images/' . $filename; if (move_uploaded_file($_FILES['hero_image']['tmp_name'], $destination)) { $db_path = 'assets/images/' . $filename; $stmt->execute(['key' => 'hero_image', 'value' => $db_path, 'value_update' => $db_path]); } } else { $error_msg = "Hero image file type invalid. Only JPG, PNG, and WebP are allowed."; } } if (empty($error_msg)) { $success_msg = "Homepage blocks updated successfully."; } } catch (PDOException $e) { $error_msg = "Database Error: " . $e->getMessage(); } } require_once __DIR__ . '/header.php'; require_once __DIR__ . '/navbar.php'; ?>