Ajouter les pages personnalisées au site public
This commit is contained in:
parent
9e05196440
commit
21ee1bec36
17 changed files with 428 additions and 65 deletions
|
|
@ -759,6 +759,7 @@ final class SettingsController
|
|||
'saved' => isset($_GET['saved']),
|
||||
'error' => (string) ($_GET['error'] ?? ''),
|
||||
'images' => $images,
|
||||
'customPages' => PublicPageService::all(),
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
@ -869,22 +870,30 @@ final class SettingsController
|
|||
'public_site_routing' => $routing,
|
||||
'public_site_about_enabled' => isset($_POST['public_site_about_enabled']) ? '1' : '0',
|
||||
];
|
||||
foreach (
|
||||
[
|
||||
'public_site_home_title' => 150,
|
||||
'public_site_name' => 150,
|
||||
'public_site_home_text' => 5000,
|
||||
'public_site_about_title' => 150,
|
||||
'public_site_about_text' => 10000,
|
||||
'public_site_donation_title' => 150,
|
||||
'public_site_donation_text' => 10000,
|
||||
'public_site_contact_text' => 5000,
|
||||
'public_site_legal_text' => 15000,
|
||||
'public_site_privacy_text' => 15000,
|
||||
]
|
||||
as $key => $max
|
||||
) {
|
||||
$values[$key] = mb_substr(trim((string) ($_POST[$key] ?? '')), 0, $max);
|
||||
$navigation = json_decode((string) ($_POST['public_site_navigation_order'] ?? '[]'), true);
|
||||
$navigation = is_array($navigation) ? array_values(array_unique(array_filter($navigation, static function ($item): bool {
|
||||
if (!is_string($item)) return false;
|
||||
return in_array($item, ['home','animals','about','donation','contact'], true)
|
||||
|| (bool) preg_match('/^custom:[a-z0-9-]{1,80}$/', $item);
|
||||
}))) : [];
|
||||
$submittedPageSlugs = [];
|
||||
foreach ((array) ($_POST['pages'] ?? []) as $submittedPage) {
|
||||
if (!is_array($submittedPage) || !empty($submittedPage['delete'])) continue;
|
||||
$submittedSlug = PublicPageService::normalizeSlug((string) ($submittedPage['slug'] ?? $submittedPage['title'] ?? ''));
|
||||
if ($submittedSlug !== '') $submittedPageSlugs[] = $submittedSlug;
|
||||
}
|
||||
$navigation = array_values(array_filter($navigation, static function (string $item) use ($submittedPageSlugs): bool {
|
||||
return !str_starts_with($item, 'custom:') || in_array(substr($item, 7), $submittedPageSlugs, true);
|
||||
}));
|
||||
foreach (['home','animals','about','donation','contact'] as $required) {
|
||||
if (!in_array($required, $navigation, true)) $navigation[] = $required;
|
||||
}
|
||||
$values['public_site_navigation_order'] = json_encode($navigation, JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR);
|
||||
foreach (['public_site_home_title','public_site_name','public_site_about_title','public_site_donation_title'] as $key) {
|
||||
$values[$key] = mb_substr(trim((string) ($_POST[$key] ?? '')), 0, 150);
|
||||
}
|
||||
foreach (['public_site_home_text','public_site_about_text','public_site_donation_text','public_site_contact_text','public_site_legal_text','public_site_privacy_text'] as $key) {
|
||||
$values[$key] = trim((string) ($_POST[$key] ?? ''));
|
||||
}
|
||||
$customCss = trim((string) ($_POST['public_site_custom_css'] ?? ''));
|
||||
if (strlen($customCss) > 30000 || preg_match('/(?:<\/style|@import|expression\s*\(|javascript\s*:|behavior\s*:|-moz-binding|url\s*\()/i', $customCss)) {
|
||||
|
|
@ -914,9 +923,19 @@ final class SettingsController
|
|||
}
|
||||
$values[$key] = $url;
|
||||
}
|
||||
AppSettings::save($values, Auth::id());
|
||||
AuditService::log('public_site_saved', '/settings/public-site/save', 'Configuration du site public modifiée');
|
||||
header('Location: /settings/public-site?saved=1');
|
||||
$db = DB::pdo();
|
||||
try {
|
||||
$db->beginTransaction();
|
||||
AppSettings::save($values, Auth::id());
|
||||
PublicPageService::saveAll((array) ($_POST['pages'] ?? []));
|
||||
$db->commit();
|
||||
AuditService::log('public_site_saved', '/settings/public-site/save', 'Configuration du site public modifiée');
|
||||
header('Location: /settings/public-site?saved=1');
|
||||
} catch (Throwable $e) {
|
||||
if ($db->inTransaction()) $db->rollBack();
|
||||
$message = $e instanceof InvalidArgumentException ? $e->getMessage() : SecurityService::publicError($e);
|
||||
header('Location: /settings/public-site?error=' . rawurlencode($message));
|
||||
}
|
||||
exit();
|
||||
}
|
||||
public static function audit(): void
|
||||
|
|
|
|||
Loading…
Reference in a new issue