TFE page: remove underlines from all links, lowercase keywords/languages/formats, inclusive writing, prevent keyword mid-word breaks, editable restriction messages in admin

This commit is contained in:
Pontoporeia
2026-06-08 10:56:23 +02:00
parent 9a8f0cad65
commit 71949425c7
6 changed files with 98 additions and 14 deletions

View File

@@ -11,3 +11,8 @@
- [x] Répertoire: barres de scroll discrètes (thin + semi-transparentes)
- [x] Répertoire: fontes/graisses conformes à la maquette (Ductus pour titres colonnes, années en bold, etc.)
- [x] Répertoire: diminutifs des AP entre crochets (ex: Design et Politique du Multiple [DPM])
- [x] Page TFE: enlever le soulignage de tous les mots/liens
- [x] Page TFE: harmoniser minuscules pour mots-clés, langues & formats
- [x] Page TFE: corriger texte inclusif ("utilisateur·ices autorisé·es")
- [x] Page TFE: empêcher les mots-clés de se couper au milieu du mot lors du wrapping
- [x] Page TFE: rendre le texte des TFE internes/interdits éditable dans les paramètres

View File

@@ -147,6 +147,18 @@ if ($section === 'formulaire_restrictions') {
PeerTubeService::updateSettings($db, $data);
$logger->logPeerTubeUpdate($enabled === '1');
App::flash('success', 'Paramètres PeerTube mis à jour.');
} elseif ($section === 'tfe_messages') {
if (isset($_POST['tfe_restricted_message'])) {
$db->setSetting('tfe_restricted_message', $_POST['tfe_restricted_message']);
}
if (isset($_POST['tfe_forbidden_message'])) {
$db->setSetting('tfe_forbidden_message', $_POST['tfe_forbidden_message']);
}
if ($isHxRequest) {
hxToastSuccess('Messages TFE mis à jour.');
} else {
App::flash('success', "Messages TFE mis à jour.");
}
} else {
App::flash('error', "Section inconnue.");
}
@@ -166,6 +178,8 @@ if (in_array($section, ['formulaire_acces', 'objet_types'], true)) {
$redirect = '/admin/contenus.php';
} elseif ($section === 'formulaire_restrictions') {
$redirect = '/admin/acces.php';
} elseif ($section === 'tfe_messages') {
$redirect = '/admin/acces.php';
}
header('Location: ' . $redirect);
exit;

View File

@@ -53,27 +53,32 @@ article dl {
/* Each dt/dd pair grouped in a <div> inside <dl> */
article dl > div {
display: flex;
display: grid;
grid-template-columns: auto 1fr;
gap: var(--space-3xs);
flex-wrap: wrap;
}
article dl dt {
color: var(--text-primary);
font-weight: 400;
flex-shrink: 0;
}
article dl dd {
color: var(--text-primary);
font-weight: 700;
margin: 0;
min-width: 0;
word-break: normal;
overflow-wrap: normal;
}
article dl dd a {
color: inherit;
text-decoration: underline;
text-underline-offset: 2px;
text-decoration: none;
}
article dl dd a:hover {
text-decoration: none;
}
/* Note field: align dt/dd to top, value in italics */
@@ -169,13 +174,13 @@ aside figcaption {
font-size: var(--step--1);
font-weight: 500;
color: var(--text-primary);
text-decoration: underline;
text-underline-offset: 2px;
text-decoration: none;
word-break: break-all;
}
.tfe-download-link:hover {
color: var(--accent-primary);
text-decoration: none;
}
.tfe-download-icon {
@@ -192,8 +197,11 @@ aside figcaption {
.tfe-pdf-fallback a {
color: var(--text-primary);
text-decoration: underline;
text-underline-offset: 2px;
text-decoration: none;
}
.tfe-pdf-fallback a:hover {
text-decoration: none;
}
/* "Not available" and "no files" notices */

View File

@@ -106,6 +106,12 @@ class TfeController
. (!empty($data['authors']) ? ' ' . $data['authors'] : '')
. ' XAMXAM';
// Editable messages
$restrictedMessage = $this->db->getSetting('tfe_restricted_message',
'Les fichiers attachés à ce TFE sont réservés aux utilisateur·ices autorisé·es.');
$forbiddenMessage = $this->db->getSetting('tfe_forbidden_message',
"Ce TFE n'est pas disponible en ligne.");
return [
// Core data
'thesisId' => $thesisId,
@@ -125,6 +131,10 @@ class TfeController
'hasRestrictedAccess' => $hasRestrictedAccess,
'shouldHideFiles' => $shouldHideFiles,
// Editable TFE messages
'restrictedMessage' => $restrictedMessage,
'forbiddenMessage' => $forbiddenMessage,
// Page meta
'pageTitle' => $pageTitle,
'metaDescription' => $metaDescription,

View File

@@ -346,6 +346,47 @@
<div id="restrictions-response" aria-live="polite"></div>
</div>
</section>
<!-- ═══════════════════════ TFE MESSAGES ═══════════════════════ -->
<section aria-labelledby="acces-fichiers-messages-title" style="margin-top:var(--space-xl);">
<h3 id="acces-fichiers-messages-title">Messages des pages TFE</h3>
<p style="color:var(--text-secondary);font-size:var(--step--1);">
Personnalisez les textes affichés sur les pages TFE pour les accès restreints et interdits.
</p>
<fieldset id="fieldset-tfe-messages" style="margin-top:var(--space-m);">
<legend>Message pour les TFE internes (accès restreint)</legend>
<div>
<label for="tfe_restricted_message">Texte affiché quand les fichiers sont masqués :</label>
<textarea id="tfe_restricted_message" name="tfe_restricted_message" rows="3"
hx-post="/admin/actions/settings.php"
hx-trigger="change delay:500ms"
hx-target="#tfe-messages-response"
hx-swap="innerHTML"
hx-include="#fieldset-tfe-messages"
style="width:100%;max-width:60ch;"><?= htmlspecialchars($siteSettings['tfe_restricted_message'] ?? 'Les fichiers attachés à ce TFE sont réservés aux utilisateur·ices autorisé·es.') ?></textarea>
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token']) ?>">
<input type="hidden" name="section" value="tfe_messages">
</div>
</fieldset>
<fieldset id="fieldset-tfe-forbidden" style="margin-top:var(--space-m);">
<legend>Message pour les TFE interdits (non disponible)</legend>
<div>
<label for="tfe_forbidden_message">Texte affiché quand le TFE n'est pas disponible :</label>
<textarea id="tfe_forbidden_message" name="tfe_forbidden_message" rows="2"
hx-post="/admin/actions/settings.php"
hx-trigger="change delay:500ms"
hx-target="#tfe-messages-response"
hx-swap="innerHTML"
hx-include="#fieldset-tfe-forbidden"
style="width:100%;max-width:60ch;"><?= htmlspecialchars($siteSettings['tfe_forbidden_message'] ?? "Ce TFE n'est pas disponible en ligne.") ?></textarea>
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token']) ?>">
<input type="hidden" name="section" value="tfe_messages">
</div>
</fieldset>
<div id="tfe-messages-response" aria-live="polite"></div>
</section>
</article>
</main>

View File

@@ -55,7 +55,7 @@
fn($l) => '<a href="/search?query=' .
urlencode($l) .
'">' .
htmlspecialchars($l) .
htmlspecialchars(mb_strtolower($l)) .
"</a>",
$langs,
);
@@ -73,7 +73,7 @@
fn($f) => '<a href="/search?query=' .
urlencode($f) .
'">' .
htmlspecialchars($f) .
htmlspecialchars(mb_strtolower($f)) .
"</a>",
$fmts,
);
@@ -91,7 +91,7 @@
fn($k) => '<a href="/repertoire?kw[]=' .
urlencode($k) .
'">' .
htmlspecialchars($k) .
htmlspecialchars(mb_strtolower($k)) .
"</a>",
$kws,
);
@@ -295,13 +295,19 @@
<?php $_videoIndex = 0; ?>
<?php if ($isInterdit): ?>
<p class="tfe-restricted">
Ce TFE n'est pas disponible en ligne.
<?= htmlspecialchars(
$forbiddenMessage ??
"Ce TFE n'est pas disponible en ligne.",
) ?>
</p>
<?php elseif ($shouldHideFiles): ?>
<div class="tfe-restricted-access">
<p class="tfe-restricted-message">
<strong>Accès restreint</strong><br>
Les fichiers attachés à ce TFE sont réservés aux utilisateurs autorisés.
<?= htmlspecialchars(
$restrictedMessage ??
'Les fichiers attachés à ce TFE sont réservés aux utilisateur·ices autorisé·es.',
) ?>
</p>
<form id="access-request-form" class="tfe-access-request-form"