Improve recap page + fix CSV import for jury roles

recapitulatif.php (partage):
- Center .thanks-success and add bottom margin/padding
- Display ALL fields: identifier, synopsis, languages, formats,
  jury (all roles), baiu link, license, access type
- Add validation notice asking user to verify info, with
  xamxam@erg.be contact link (email obfuscated)

StudentEmail:
- Add 'Note contextuelle' and license_custom to email recap
- Rename 'Promoteur·ice(s)' to 'Promoteur·ice(s) interne'
- Change email message to ask student to verify info + contact
  for errors

CSV export/import:
- Add 3 new CSV columns: Lecteur·ice(s) interne,
  Lecteur·ice(s) externe, Promoteur·ice(s) ULB
- Export splits supervisors by role/is_external/is_ulb into
  separate columns
- Import inserts supervisors with correct role, is_external,
  and is_ulb flags (was: all treated as generic supervisors)
- Add header matching for short distinguishers (ulb, externe)
  via str_contains fallback
This commit is contained in:
Pontoporeia
2026-05-10 22:36:28 +02:00
parent 8545daaccc
commit 406752bc6f
8 changed files with 208 additions and 30 deletions

View File

@@ -8,6 +8,8 @@ if (!defined('APP_ROOT')) {
App::boot();
}
require_once APP_ROOT . '/src/EmailObfuscator.php';
$thesisId = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if ($thesisId <= 0) {
@@ -69,9 +71,18 @@ $pageTitle = 'Merci — TFE enregistré';
<?php endif; ?>
</div>
<div class="recap-validate-notice">
<p>Veuillez vérifier les informations ci-dessous. Si vous constatez une erreur, contactez-nous à <a href="<?= EmailObfuscator::mailto('xamxam@erg.be') ?>"><?= EmailObfuscator::email('xamxam@erg.be') ?></a>.</p>
</div>
<section class="recap-section">
<h2>Récapitulatif de votre soumission</h2>
<dl class="recap-dl">
<?php if (!empty($thesis['identifier'])): ?>
<dt>Identifiant</dt>
<dd><?= htmlspecialchars($thesis['identifier']) ?></dd>
<?php endif; ?>
<dt>Titre</dt>
<dd><?= htmlspecialchars($thesis['title']) ?></dd>
@@ -105,10 +116,60 @@ $pageTitle = 'Merci — TFE enregistré';
<dd><?= htmlspecialchars($thesis['finality_type']) ?></dd>
<?php endif; ?>
<?php if (!empty($thesis['synopsis'])): ?>
<dt>Synopsis</dt>
<dd><?= nl2br(htmlspecialchars($thesis['synopsis'])) ?></dd>
<?php endif; ?>
<?php if (!empty($thesis['languages'])): ?>
<dt>Langue(s)</dt>
<dd><?= htmlspecialchars($thesis['languages']) ?></dd>
<?php endif; ?>
<?php if (!empty($thesis['formats'])): ?>
<dt>Format(s)</dt>
<dd><?= htmlspecialchars($thesis['formats']) ?></dd>
<?php endif; ?>
<?php if (!empty($thesis['keywords'])): ?>
<dt>Mots-clés</dt>
<dd><?= htmlspecialchars($thesis['keywords']) ?></dd>
<?php endif; ?>
<?php if (!empty($thesis['jury_promoteurs'])): ?>
<dt>Promoteur·ice(s) interne</dt>
<dd><?= htmlspecialchars($thesis['jury_promoteurs']) ?></dd>
<?php endif; ?>
<?php if (!empty($thesis['jury_promoteurs_ulb'])): ?>
<dt>Promoteur·ice(s) ULB</dt>
<dd><?= htmlspecialchars($thesis['jury_promoteurs_ulb']) ?></dd>
<?php endif; ?>
<?php if (!empty($thesis['jury_lecteurs_internes'])): ?>
<dt>Lecteur·ice(s) interne</dt>
<dd><?= htmlspecialchars($thesis['jury_lecteurs_internes']) ?></dd>
<?php endif; ?>
<?php if (!empty($thesis['jury_lecteurs_externes'])): ?>
<dt>Lecteur·ice(s) externe</dt>
<dd><?= htmlspecialchars($thesis['jury_lecteurs_externes']) ?></dd>
<?php endif; ?>
<?php if (!empty($thesis['baiu_link'])): ?>
<dt>Lien</dt>
<dd><a href="<?= htmlspecialchars($thesis['baiu_link']) ?>" target="_blank" rel="noopener"><?= htmlspecialchars($thesis['baiu_link']) ?></a></dd>
<?php endif; ?>
<?php if (!empty($thesis['license_type'])): ?>
<dt>Licence</dt>
<dd><?= htmlspecialchars($thesis['license_type']) ?><?= !empty($thesis['license_custom']) ? ' — ' . htmlspecialchars($thesis['license_custom']) : '' ?></dd>
<?php endif; ?>
<?php if (!empty($thesis['access_type'])): ?>
<dt>Type d'accès</dt>
<dd><?= htmlspecialchars($thesis['access_type']) ?></dd>
<?php endif; ?>
</dl>
</section>