mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
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:
5
TODO.md
5
TODO.md
@@ -11,3 +11,8 @@
|
|||||||
- [x] Répertoire: barres de scroll discrètes (thin + semi-transparentes)
|
- [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: 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] 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
|
||||||
|
|||||||
@@ -147,6 +147,18 @@ if ($section === 'formulaire_restrictions') {
|
|||||||
PeerTubeService::updateSettings($db, $data);
|
PeerTubeService::updateSettings($db, $data);
|
||||||
$logger->logPeerTubeUpdate($enabled === '1');
|
$logger->logPeerTubeUpdate($enabled === '1');
|
||||||
App::flash('success', 'Paramètres PeerTube mis à jour.');
|
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 {
|
} else {
|
||||||
App::flash('error', "Section inconnue.");
|
App::flash('error', "Section inconnue.");
|
||||||
}
|
}
|
||||||
@@ -166,6 +178,8 @@ if (in_array($section, ['formulaire_acces', 'objet_types'], true)) {
|
|||||||
$redirect = '/admin/contenus.php';
|
$redirect = '/admin/contenus.php';
|
||||||
} elseif ($section === 'formulaire_restrictions') {
|
} elseif ($section === 'formulaire_restrictions') {
|
||||||
$redirect = '/admin/acces.php';
|
$redirect = '/admin/acces.php';
|
||||||
|
} elseif ($section === 'tfe_messages') {
|
||||||
|
$redirect = '/admin/acces.php';
|
||||||
}
|
}
|
||||||
header('Location: ' . $redirect);
|
header('Location: ' . $redirect);
|
||||||
exit;
|
exit;
|
||||||
|
|||||||
@@ -53,27 +53,32 @@ article dl {
|
|||||||
|
|
||||||
/* Each dt/dd pair grouped in a <div> inside <dl> */
|
/* Each dt/dd pair grouped in a <div> inside <dl> */
|
||||||
article dl > div {
|
article dl > div {
|
||||||
display: flex;
|
display: grid;
|
||||||
|
grid-template-columns: auto 1fr;
|
||||||
gap: var(--space-3xs);
|
gap: var(--space-3xs);
|
||||||
flex-wrap: wrap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
article dl dt {
|
article dl dt {
|
||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
article dl dd {
|
article dl dd {
|
||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
min-width: 0;
|
||||||
|
word-break: normal;
|
||||||
|
overflow-wrap: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
article dl dd a {
|
article dl dd a {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
text-decoration: underline;
|
text-decoration: none;
|
||||||
text-underline-offset: 2px;
|
}
|
||||||
|
|
||||||
|
article dl dd a:hover {
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note field: align dt/dd to top, value in italics */
|
/* Note field: align dt/dd to top, value in italics */
|
||||||
@@ -169,13 +174,13 @@ aside figcaption {
|
|||||||
font-size: var(--step--1);
|
font-size: var(--step--1);
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
text-decoration: underline;
|
text-decoration: none;
|
||||||
text-underline-offset: 2px;
|
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tfe-download-link:hover {
|
.tfe-download-link:hover {
|
||||||
color: var(--accent-primary);
|
color: var(--accent-primary);
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tfe-download-icon {
|
.tfe-download-icon {
|
||||||
@@ -192,8 +197,11 @@ aside figcaption {
|
|||||||
|
|
||||||
.tfe-pdf-fallback a {
|
.tfe-pdf-fallback a {
|
||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
text-decoration: underline;
|
text-decoration: none;
|
||||||
text-underline-offset: 2px;
|
}
|
||||||
|
|
||||||
|
.tfe-pdf-fallback a:hover {
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* "Not available" and "no files" notices */
|
/* "Not available" and "no files" notices */
|
||||||
|
|||||||
@@ -106,6 +106,12 @@ class TfeController
|
|||||||
. (!empty($data['authors']) ? ' – ' . $data['authors'] : '')
|
. (!empty($data['authors']) ? ' – ' . $data['authors'] : '')
|
||||||
. ' – XAMXAM';
|
. ' – 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 [
|
return [
|
||||||
// Core data
|
// Core data
|
||||||
'thesisId' => $thesisId,
|
'thesisId' => $thesisId,
|
||||||
@@ -125,6 +131,10 @@ class TfeController
|
|||||||
'hasRestrictedAccess' => $hasRestrictedAccess,
|
'hasRestrictedAccess' => $hasRestrictedAccess,
|
||||||
'shouldHideFiles' => $shouldHideFiles,
|
'shouldHideFiles' => $shouldHideFiles,
|
||||||
|
|
||||||
|
// Editable TFE messages
|
||||||
|
'restrictedMessage' => $restrictedMessage,
|
||||||
|
'forbiddenMessage' => $forbiddenMessage,
|
||||||
|
|
||||||
// Page meta
|
// Page meta
|
||||||
'pageTitle' => $pageTitle,
|
'pageTitle' => $pageTitle,
|
||||||
'metaDescription' => $metaDescription,
|
'metaDescription' => $metaDescription,
|
||||||
|
|||||||
@@ -346,6 +346,47 @@
|
|||||||
<div id="restrictions-response" aria-live="polite"></div>
|
<div id="restrictions-response" aria-live="polite"></div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</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>
|
</article>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
fn($l) => '<a href="/search?query=' .
|
fn($l) => '<a href="/search?query=' .
|
||||||
urlencode($l) .
|
urlencode($l) .
|
||||||
'">' .
|
'">' .
|
||||||
htmlspecialchars($l) .
|
htmlspecialchars(mb_strtolower($l)) .
|
||||||
"</a>",
|
"</a>",
|
||||||
$langs,
|
$langs,
|
||||||
);
|
);
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
fn($f) => '<a href="/search?query=' .
|
fn($f) => '<a href="/search?query=' .
|
||||||
urlencode($f) .
|
urlencode($f) .
|
||||||
'">' .
|
'">' .
|
||||||
htmlspecialchars($f) .
|
htmlspecialchars(mb_strtolower($f)) .
|
||||||
"</a>",
|
"</a>",
|
||||||
$fmts,
|
$fmts,
|
||||||
);
|
);
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
fn($k) => '<a href="/repertoire?kw[]=' .
|
fn($k) => '<a href="/repertoire?kw[]=' .
|
||||||
urlencode($k) .
|
urlencode($k) .
|
||||||
'">' .
|
'">' .
|
||||||
htmlspecialchars($k) .
|
htmlspecialchars(mb_strtolower($k)) .
|
||||||
"</a>",
|
"</a>",
|
||||||
$kws,
|
$kws,
|
||||||
);
|
);
|
||||||
@@ -295,13 +295,19 @@
|
|||||||
<?php $_videoIndex = 0; ?>
|
<?php $_videoIndex = 0; ?>
|
||||||
<?php if ($isInterdit): ?>
|
<?php if ($isInterdit): ?>
|
||||||
<p class="tfe-restricted">
|
<p class="tfe-restricted">
|
||||||
Ce TFE n'est pas disponible en ligne.
|
<?= htmlspecialchars(
|
||||||
|
$forbiddenMessage ??
|
||||||
|
"Ce TFE n'est pas disponible en ligne.",
|
||||||
|
) ?>
|
||||||
</p>
|
</p>
|
||||||
<?php elseif ($shouldHideFiles): ?>
|
<?php elseif ($shouldHideFiles): ?>
|
||||||
<div class="tfe-restricted-access">
|
<div class="tfe-restricted-access">
|
||||||
<p class="tfe-restricted-message">
|
<p class="tfe-restricted-message">
|
||||||
<strong>Accès restreint</strong><br>
|
<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>
|
</p>
|
||||||
|
|
||||||
<form id="access-request-form" class="tfe-access-request-form"
|
<form id="access-request-form" class="tfe-access-request-form"
|
||||||
|
|||||||
Reference in New Issue
Block a user