mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
- Removed 'Supprimer tous les TFE' danger zone from parametres (template, dialog, backend handler, Database::deleteAllTheses(), AdminLogger method) - Moved Formulaire section (access type toggles, restricted files) from parametres to contenus under new h2 'Paramètres du Formulaire' - Moved Types de travaux from parametres to contenus as sub-section under Paramètres du Formulaire - Existing 'Structure du formulaire' section now a sub-heading (h3) under Paramètres du Formulaire in contenus - Sub-sections: Restrictions d'accès aux fichiers, Degré d'ouverture, Types de travaux, Structure du Formulaire - Added siteSettings query to contenus controller
250 lines
12 KiB
PHP
250 lines
12 KiB
PHP
<main id="main-content">
|
|
<h1>Contenus</h1>
|
|
|
|
<?php
|
|
$flash = App::consumeFlash();
|
|
?>
|
|
<?php if ($flash['success']): ?>
|
|
<div class="flash-success" role="alert"><?= htmlspecialchars($flash['success']) ?></div>
|
|
<?php endif; ?>
|
|
<?php if ($flash['error']): ?>
|
|
<div class="flash-error" role="alert"><?= htmlspecialchars($flash['error']) ?></div>
|
|
<?php endif; ?>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════════
|
|
PAGES STATIQUES
|
|
═══════════════════════════════════════════════════════════════════ -->
|
|
<section aria-labelledby="static-pages-title">
|
|
<h2 id="static-pages-title">Pages statiques</h2>
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">Slug</th>
|
|
<th scope="col">Titre</th>
|
|
<th scope="col">Mis à jour</th>
|
|
<th scope="col">Action</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($pages as $p): ?>
|
|
<tr>
|
|
<td><code><?= htmlspecialchars($p['slug']) ?></code></td>
|
|
<td><?= htmlspecialchars($p['title']) ?></td>
|
|
<td><?= htmlspecialchars($p['updated_at'] ?? '—') ?></td>
|
|
<td>
|
|
<a href="/admin/contenus-edit.php?slug=<?= urlencode($p['slug']) ?>"
|
|
class="admin-icon-btn admin-icon-btn--edit" title="Éditer">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" viewBox="0 0 256 256"><path d="M248,92.68a15.86,15.86,0,0,0-4.69-11.31L174.63,12.68a16,16,0,0,0-22.63,0L123.57,41.11l-58,21.77A16.06,16.06,0,0,0,55.35,75.23L32.11,214.68A8,8,0,0,0,40,224a8.4,8.4,0,0,0,1.32-.11l139.44-23.24a16,16,0,0,0,12.35-10.17l21.77-58L243.31,104A15.87,15.87,0,0,0,248,92.68Zm-69.87,92.19L63.32,204l47.37-47.37a28,28,0,1,0-11.32-11.32L52,192.7,71.13,77.86,126,57.29,198.7,130ZM112,132a12,12,0,1,1,12,12A12,12,0,0,1,112,132Zm96-15.32L139.31,48l24-24L232,92.68Z"></path></svg>
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</section>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════════
|
|
PARAMÈTRES DU FORMULAIRE
|
|
═══════════════════════════════════════════════════════════════════ -->
|
|
<section aria-labelledby="form-settings-title">
|
|
<h2 id="form-settings-title">Paramètres du Formulaire</h2>
|
|
|
|
<!-- ── Restrictions d'accès aux fichiers ── -->
|
|
<fieldset>
|
|
<legend>Restrictions d'accès aux fichiers</legend>
|
|
|
|
<form method="post" action="actions/settings.php" class="param-form">
|
|
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token']) ?>">
|
|
<input type="hidden" name="section" value="formulaire">
|
|
|
|
<label class="param-checkbox">
|
|
<input type="checkbox" name="restricted_files_enabled" value="1"
|
|
<?= ($siteSettings['restricted_files_enabled'] ?? '0') === '1' ? 'checked' : '' ?>>
|
|
<span>
|
|
<strong>Activer la restriction d'accès</strong><br>
|
|
<small>Pour les TFE de type "Interne", masquer les fichiers et exiger une demande d'accès par email. Les métadonnées et le résumé restent visibles publiquement.</small>
|
|
</span>
|
|
</label>
|
|
|
|
<button type="submit" class="btn btn--primary">Enregistrer</button>
|
|
</form>
|
|
</fieldset>
|
|
|
|
<!-- ── Degré d'ouverture ── -->
|
|
<fieldset>
|
|
<legend>Degré d'ouverture</legend>
|
|
<p>Options de visibilité disponibles dans le formulaire d'ajout de TFE.</p>
|
|
<p class="param-note">L'option <strong>Libre</strong> ne sera activée qu'à partir de l'année académique prochaine.</p>
|
|
|
|
<form method="post" action="actions/settings.php" class="param-form">
|
|
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token']) ?>">
|
|
<input type="hidden" name="section" value="formulaire">
|
|
|
|
<label class="param-checkbox">
|
|
<input type="checkbox" name="access_type_interdit_enabled" value="1"
|
|
<?= ($siteSettings['access_type_interdit_enabled'] ?? '1') === '1' ? 'checked' : '' ?>>
|
|
<span>
|
|
<strong>Interdit</strong><br>
|
|
<small>TFE non disponible en physique ni sur le site</small>
|
|
</span>
|
|
</label>
|
|
|
|
<label class="param-checkbox">
|
|
<input type="checkbox" name="access_type_interne_enabled" value="1"
|
|
<?= ($siteSettings['access_type_interne_enabled'] ?? '1') === '1' ? 'checked' : '' ?>>
|
|
<span>
|
|
<strong>Interne</strong><br>
|
|
<small>TFE accessible uniquement sur place en physique</small>
|
|
</span>
|
|
</label>
|
|
|
|
<label class="param-checkbox param-checkbox--disabled">
|
|
<input type="checkbox" name="access_type_libre_enabled" value="1"
|
|
<?= ($siteSettings['access_type_libre_enabled'] ?? '0') === '1' ? 'checked' : '' ?>>
|
|
<span>
|
|
<strong>Libre</strong><br>
|
|
<small>Libre accès — disponible à partir de l'année académique prochaine</small>
|
|
</span>
|
|
</label>
|
|
|
|
<button type="submit" class="btn btn--primary">Enregistrer</button>
|
|
</form>
|
|
</fieldset>
|
|
|
|
<!-- ── Types de travaux ── -->
|
|
<fieldset>
|
|
<legend>Types de travaux</legend>
|
|
<p>Active ou désactive les types de travaux dans les formulaires et la consultation. Un type désactivé ne peut plus être soumis ni affiché sur le site.</p>
|
|
<p class="param-note">Le type <strong>TFE</strong> est toujours actif et ne peut pas être désactivé.</p>
|
|
|
|
<form method="post" action="actions/settings.php" class="param-form">
|
|
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token']) ?>">
|
|
<input type="hidden" name="section" value="objet_types">
|
|
|
|
<label class="param-checkbox param-checkbox--disabled">
|
|
<input type="checkbox" disabled checked>
|
|
<span>
|
|
<strong>TFE</strong><br>
|
|
<small>Travail de fin d'études — toujours actif</small>
|
|
</span>
|
|
</label>
|
|
|
|
<label class="param-checkbox">
|
|
<input type="checkbox" name="objet_these_enabled" value="1"
|
|
<?= ($siteSettings['objet_these_enabled'] ?? '1') === '1' ? 'checked' : '' ?>>
|
|
<span>
|
|
<strong>Thèse</strong><br>
|
|
<small>Thèses doctorales</small>
|
|
</span>
|
|
</label>
|
|
|
|
<label class="param-checkbox">
|
|
<input type="checkbox" name="objet_frart_enabled" value="1"
|
|
<?= ($siteSettings['objet_frart_enabled'] ?? '1') === '1' ? 'checked' : '' ?>>
|
|
<span>
|
|
<strong>Frart</strong><br>
|
|
<small>Formation de recherche en art</small>
|
|
</span>
|
|
</label>
|
|
|
|
<button type="submit" class="btn btn--primary">Enregistrer</button>
|
|
</form>
|
|
</fieldset>
|
|
|
|
<!-- ── Structure du formulaire ── -->
|
|
<fieldset>
|
|
<legend>Structure du Formulaire</legend>
|
|
<p class="fhb-hint">
|
|
Chaque <strong>bloc d'aide</strong> s'affiche au-dessus de sa section dans le formulaire de soumission.
|
|
Le <strong>bouton rond</strong> active/désactive l'affichage.
|
|
</p>
|
|
|
|
<?php
|
|
$blocks = $formHelpBlocks;
|
|
|
|
// ── Student form structure — each help block above its fieldset ───────────
|
|
// Pairs: [help_key, fieldset_name, fieldset_inputs]
|
|
$pairs = [
|
|
// Top of form
|
|
['partage_intro', null, null],
|
|
|
|
// Informations du TFE
|
|
['fieldset_tfe_info', 'Informations du TFE',
|
|
['Titre', 'Sous-titre', 'Auteur·ice(s)', 'Contact visible', 'Synopsis']],
|
|
|
|
// Langue(s)
|
|
['fieldset_languages', 'Langue(s)',
|
|
['Langues du TFE (cases à cocher)', 'Autre(s) langue(s)']],
|
|
|
|
// Mots-clés
|
|
['fieldset_keywords', 'Mots-clés',
|
|
['Mots-clés (max 10), séparés par des virgules']],
|
|
|
|
// Cadre académique
|
|
['fieldset_academic', 'Cadre académique',
|
|
['Année', 'Orientation', 'AP', 'Finalité']],
|
|
|
|
// Composition du jury
|
|
['fieldset_jury', 'Composition du jury',
|
|
['Président·e', 'Promoteur·ice(s)', 'Lecteur·ices']],
|
|
|
|
// Format(s) + Fichiers
|
|
['fieldset_files', 'Format(s) + Fichiers',
|
|
['Formats (PDF, vidéo, audio, site web…)', 'Couverture', 'Note d\'intention', 'Fichier principal', 'Annexes']],
|
|
|
|
// Métadonnées complémentaires (supprimé)
|
|
// Ces champs sont redondants avec les fichiers attachés
|
|
|
|
// Degrés d'ouverture et licences
|
|
['fieldset_access', 'Degrés d\'ouverture et licences',
|
|
['Généralités', 'Degré (libre/interne/interdit)', 'Licence', 'CC2r']],
|
|
|
|
// E-mail de confirmation
|
|
['fieldset_email', 'E-mail de confirmation',
|
|
['Adresse e-mail']],
|
|
];
|
|
?>
|
|
|
|
<div class="fhb-structure">
|
|
<?php foreach ($pairs as [$helpKey, $fieldsetName, $inputs]):
|
|
// Help block
|
|
$b = $blocks[$helpKey] ?? ['content' => '', 'name' => '', 'enabled' => 0];
|
|
$title = $b['name'] ?: ($fieldsetName ?? $helpKey);
|
|
?>
|
|
<div class="fhb-block-wrapper" data-key="<?= htmlspecialchars($helpKey) ?>">
|
|
<div class="fhb-inline"
|
|
hx-get="/admin/form-help-inline-fragment.php?key=<?= urlencode($helpKey) ?>"
|
|
hx-trigger="load"
|
|
hx-swap="outerHTML">
|
|
<div class="fhb-inline-name"><?= htmlspecialchars($title) ?></div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php if ($fieldsetName !== null): ?>
|
|
<div class="fhb-fieldset-card">
|
|
<div class="fhb-fieldset-card-legend"><?= htmlspecialchars($fieldsetName) ?></div>
|
|
<?php if ($inputs): ?>
|
|
<ul class="fhb-fieldset-card-inputs">
|
|
<?php foreach ($inputs as $inp): ?>
|
|
<li><?= htmlspecialchars($inp) ?></li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</fieldset>
|
|
</section>
|
|
|
|
</main>
|
|
|
|
<script>
|
|
(function () {
|
|
var otScript = document.createElement('script');
|
|
otScript.src = '<?= App::assetV('/assets/js/overtype.min.js') ?>';
|
|
document.head.appendChild(otScript);
|
|
})();
|
|
</script>
|