Fix edit form: is_published reset, contact decoupling, note label, author name case

- Fix #1: Add is_published to getThesisRawFields() SELECT so the publish
  checkbox stays checked when editing an already-published TFE.
- Fix #2: Rename 'Note contextuelle' → 'Note contextuelle relative à
  soutenance' in all templates and StudentEmail.
- Fix #3: Update findOrCreateAuthor to also UPDATE the author name when
  a record is found by name (fixes inability to capitalise names).
- Fix #4/#5: Decouple contact_interne (private author email) from
  contact_visible (public contact on TFE page). Add migration 037 to
  add contact_visible TEXT column to theses table and rebuild
  v_theses_full view. Update all controllers, templates, and DB methods
  to treat them independently.
- Fix #6: Investigated libre→interne restriction — no code barrier
  found; likely resolved by is_published fix.
This commit is contained in:
Pontoporeia
2026-06-10 00:17:00 +02:00
parent 3d524226a1
commit 3016c199bd
15 changed files with 164 additions and 37 deletions
+10 -3
View File
@@ -148,6 +148,7 @@ class ThesisCreateController
'subtitle' => $data['subtitle'],
'synopsis' => $data['synopsis'],
'context_note' => $data['contextNote'],
'contact_visible' => $data['contactVisible'] ?? '',
'baiu_link' => $data['lien'],
'license_id' => $data['licenseId'],
'license_custom' => $data['licenseCustom'],
@@ -310,12 +311,17 @@ class ThesisCreateController
if ($contactInterne !== '') {
$mail = $contactInterne;
}
// contact_public: respected if present (admin form); defaults to true for student forms
// where the spec says contact is always visible when provided.
// contact_visible: what appears publicly on the TFE page
// In admin mode: from contact_visible field. In student mode: from mail field.
$contactVisible = trim($post['contact_visible'] ?? '');
if ($contactVisible === '' && $mail !== '') {
$contactVisible = $mail;
}
// showContact for backwards compat
if (array_key_exists('contact_public', $post)) {
$showContact = !empty($post['contact_public']);
} else {
$showContact = $mail !== '';
$showContact = $contactVisible !== '';
}
$annee = filter_var($post['année'] ?? '', FILTER_VALIDATE_INT);
@@ -528,6 +534,7 @@ class ThesisCreateController
return compact(
'authorNames',
'mail',
'contactVisible',
'showContact',
'annee',
'orientationId',
+6 -4
View File
@@ -108,6 +108,7 @@ class ThesisEditController
$currentLicenseId = $rawRow['license_id'] ?? null;
$currentAccessTypeId = $rawRow['access_type_id'] ?? null;
$currentContextNote = $rawRow['context_note'] ?? '';
$currentContactVisible = $rawRow['contact_visible'] ?? '';
// Author contact info (from view)
$contactInterne = $thesis['contact_interne'] ?? '';
@@ -130,6 +131,7 @@ class ThesisEditController
'currentLicenseId' => $currentLicenseId,
'currentAccessTypeId' => $currentAccessTypeId,
'currentContextNote' => $currentContextNote,
'currentContactVisible' => $currentContactVisible,
'contactInterne' => $contactInterne,
'contactPublic' => $contactPublic,
'currentRaw' => $rawRow,
@@ -206,6 +208,7 @@ class ThesisEditController
'finality_id' => ($v = intval($post['finality'] ?? 0)) > 0 ? $v : null,
'synopsis' => trim($post['synopsis'] ?? ''),
'context_note' => trim($post['context_note'] ?? ''),
'contact_visible' => trim($post['contact_visible'] ?? ''),
'baiu_link' => trim($post['lien'] ?? ''),
'license_id' => filter_var($post['license_id'] ?? '', FILTER_VALIDATE_INT) ?: null,
'access_type_id' => filter_var($post['access_type_id'] ?? '', FILTER_VALIDATE_INT) ?: null,
@@ -232,10 +235,9 @@ class ThesisEditController
// ── 2. Authors (alphabetically sorted) ─────────────────────────────
$authorsRaw = trim($post['auteurice'] ?? '');
$showContact = !empty($post['contact_public']);
// contact_interne (backoffice) takes precedence over mail (tfe-info fieldset)
// contact_interne = private email of the first author (backoffice field)
$contactInterne = trim($post['contact_interne'] ?? '');
$firstAuthorEmail = $contactInterne !== '' ? $contactInterne : ($post['mail'] ?? null);
$firstAuthorEmail = $contactInterne !== '' ? $contactInterne : null;
$authorNames = [];
if ($authorsRaw !== '') {
$authorNames = array_values(array_filter(array_map('trim', explode(',', $authorsRaw)), fn ($n) => $n !== ''));
@@ -246,7 +248,7 @@ class ThesisEditController
$authorEntries[] = [
'name' => $name,
'email' => $i === 0 ? $firstAuthorEmail : null,
'show_contact' => $i === 0 ? $showContact : false,
'show_contact' => $i === 0,
];
}
$this->db->setThesisAuthors($thesisId, $authorEntries);