mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
feat: require 3 mots-clés in partage, language asterisk toggle, admin auto-save checkboxes
- tag-search: add minTags/required params, counter shows red if < 3, accent if ≥ 3 - form.php: pass minTags=3 for partage mode keywords - checkbox-list: support labelHtml for raw HTML label with targetable asterisk span - language-autre-fragment: OOB swap updates #languages-required-asterisk when autre pills change - language-search: client-side update #languages-required-asterisk on pill add/remove - contenus.php: replace 3 form+submit-button fieldsets with HTMX auto-save checkboxes - settings.php: detect HX-Request header, return OOB CSRF token updates, skip redirect
This commit is contained in:
@@ -18,6 +18,7 @@ require_once APP_ROOT . '/src/AdminLogger.php';
|
||||
$db = new Database();
|
||||
$logger = AdminLogger::make();
|
||||
|
||||
$isHxRequest = (isset($_SERVER['HTTP_HX_REQUEST']) && $_SERVER['HTTP_HX_REQUEST'] === 'true');
|
||||
$section = $_POST['section'] ?? '';
|
||||
|
||||
if ($section === 'formulaire') {
|
||||
@@ -34,7 +35,9 @@ if ($section === 'formulaire') {
|
||||
$newValues[$key] = $value;
|
||||
}
|
||||
$logger->logFormSettingsUpdate($newValues);
|
||||
App::flash('success', "Paramètres du formulaire mis à jour.");
|
||||
if (!$isHxRequest) {
|
||||
App::flash('success', "Paramètres du formulaire mis à jour.");
|
||||
}
|
||||
} elseif ($section === 'objet_types') {
|
||||
$newValues = [
|
||||
'objet_these_enabled' => isset($_POST['objet_these_enabled']) ? '1' : '0',
|
||||
@@ -43,7 +46,9 @@ if ($section === 'formulaire') {
|
||||
$db->setSetting('objet_these_enabled', $newValues['objet_these_enabled']);
|
||||
$db->setSetting('objet_frart_enabled', $newValues['objet_frart_enabled']);
|
||||
$logger->logObjetTypesUpdate($newValues);
|
||||
App::flash('success', "Types de travaux mis à jour.");
|
||||
if (!$isHxRequest) {
|
||||
App::flash('success', "Types de travaux mis à jour.");
|
||||
}
|
||||
} elseif ($section === 'smtp') {
|
||||
$smtpData = [
|
||||
'host' => $_POST['smtp_host'] ?? '',
|
||||
@@ -96,5 +101,15 @@ if ($section === 'formulaire') {
|
||||
}
|
||||
|
||||
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
|
||||
|
||||
if ($isHxRequest) {
|
||||
// Return updated CSRF tokens for all three hidden inputs on the page
|
||||
$newToken = htmlspecialchars($_SESSION['csrf_token']);
|
||||
echo '<input type="hidden" id="csrf_token_files" value="' . $newToken . '" hx-swap-oob="true">';
|
||||
echo '<input type="hidden" id="csrf_token_acces" value="' . $newToken . '" hx-swap-oob="true">';
|
||||
echo '<input type="hidden" id="csrf_token_types" value="' . $newToken . '" hx-swap-oob="true">';
|
||||
exit;
|
||||
}
|
||||
|
||||
header('Location: /admin/parametres.php');
|
||||
exit;
|
||||
|
||||
@@ -18,5 +18,16 @@ $selectedIds = isset($_POST['languages']) && is_array($_POST['languages'])
|
||||
? $_POST['languages']
|
||||
: [];
|
||||
$anyChecked = !empty($selectedIds);
|
||||
|
||||
// Also check if any "autre" language pills are present (posted as language_autre[])
|
||||
$hasLangAutre = isset($_POST['language_autre']) && is_array($_POST['language_autre'])
|
||||
&& count(array_filter($_POST['language_autre'], fn($l) => is_string($l) && trim($l) !== '')) > 0;
|
||||
|
||||
// The "Autre(s) langue(s)" label is required if no standard language is checked.
|
||||
// The "Langue(s) du TFE" checkbox list is required if neither standard languages
|
||||
// nor "autre" languages are set.
|
||||
$langAutreRequired = !$anyChecked;
|
||||
$checkboxesRequired = !$anyChecked && !$hasLangAutre;
|
||||
?>
|
||||
<span id="language-autre-required"><?= !$anyChecked ? ' <span class="asterisk">*</span>' : '' ?></span>
|
||||
<span id="language-autre-required"><?= $langAutreRequired ? ' <span class="asterisk">*</span>' : '' ?></span>
|
||||
<span id="languages-required-asterisk" hx-swap-oob="true"><?= $checkboxesRequired ? ' <span class="asterisk">*</span>' : '' ?></span>
|
||||
|
||||
Reference in New Issue
Block a user