diff --git a/TODO.md b/TODO.md
index 8ab051f..31de3e7 100644
--- a/TODO.md
+++ b/TODO.md
@@ -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
diff --git a/app/public/admin/actions/settings.php b/app/public/admin/actions/settings.php
index f373f2a..efd616e 100644
--- a/app/public/admin/actions/settings.php
+++ b/app/public/admin/actions/settings.php
@@ -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;
diff --git a/app/public/assets/css/tfe.css b/app/public/assets/css/tfe.css
index 09fe155..46f4b19 100644
--- a/app/public/assets/css/tfe.css
+++ b/app/public/assets/css/tfe.css
@@ -53,27 +53,32 @@ article dl {
/* Each dt/dd pair grouped in a
inside
*/
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 */
diff --git a/app/src/Controllers/TfeController.php b/app/src/Controllers/TfeController.php
index 492da33..a71e688 100644
--- a/app/src/Controllers/TfeController.php
+++ b/app/src/Controllers/TfeController.php
@@ -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,
diff --git a/app/templates/admin/acces.php b/app/templates/admin/acces.php
index 3920550..7403a64 100644
--- a/app/templates/admin/acces.php
+++ b/app/templates/admin/acces.php
@@ -346,6 +346,47 @@
+
+
+
+ Messages des pages TFE
+
+ Personnalisez les textes affichés sur les pages TFE pour les accès restreints et interdits.
+
+
+
+ Message pour les TFE internes (accès restreint)
+
+ Texte affiché quand les fichiers sont masqués :
+
+
+
+
+
+
+
+ Message pour les TFE interdits (non disponible)
+
+ Texte affiché quand le TFE n'est pas disponible :
+
+
+
+
+
+
+
diff --git a/app/templates/public/tfe.php b/app/templates/public/tfe.php
index af2e6db..2d83e29 100644
--- a/app/templates/public/tfe.php
+++ b/app/templates/public/tfe.php
@@ -55,7 +55,7 @@
fn($l) => '' .
- htmlspecialchars($l) .
+ htmlspecialchars(mb_strtolower($l)) .
" ",
$langs,
);
@@ -73,7 +73,7 @@
fn($f) => '' .
- htmlspecialchars($f) .
+ htmlspecialchars(mb_strtolower($f)) .
" ",
$fmts,
);
@@ -91,7 +91,7 @@
fn($k) => '' .
- htmlspecialchars($k) .
+ htmlspecialchars(mb_strtolower($k)) .
" ",
$kws,
);
@@ -295,13 +295,19 @@
- Ce TFE n'est pas disponible en ligne.
+ = htmlspecialchars(
+ $forbiddenMessage ??
+ "Ce TFE n'est pas disponible en ligne.",
+ ) ?>
Accès restreint
- 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.',
+ ) ?>