diff --git a/TODO.md b/TODO.md index 39acae9..7f6e3d9 100644 --- a/TODO.md +++ b/TODO.md @@ -39,6 +39,14 @@ - [x] Update `root` directive in `nginx/posterg.conf` - [x] Update `STORAGE_ROOT` production path in `app/bootstrap.php` +## Centralise Form Templates + +- [x] Extract shared fieldset partials: `fieldset-tfe-info.php`, `fieldset-academic.php`, `fieldset-files.php`, `fieldset-metadata.php`, `fieldset-licence-explanation.php` +- [x] Refactor `templates/admin/add.php` to use shared partials +- [x] Refactor `templates/admin/edit.php` to use shared partials (with edit-mode callable adapters) +- [x] Refactor `partage/index.php` `renderShareLinkForm()` to use shared partials +- [x] Add TODO comments in `partage/index.php` for student-facing explanations (intro block, per-fieldset notes, email note) + ## File Display in Forms & Recaps - [x] Add live file preview to `file-field.php` partial (`data-preview` attribute + `.file-preview-list` container) diff --git a/app/public/partage/index.php b/app/public/partage/index.php index 9d5aa34..7b0f6ce 100644 --- a/app/public/partage/index.php +++ b/app/public/partage/index.php @@ -182,17 +182,15 @@ function renderShareLinkForm(string $slug, array $link): void die('Erreur lors du chargement du formulaire.'); } - $formData = $_SESSION['form_data_share_' . $slug] ?? []; + $formData = $_SESSION['form_data_share_' . $slug] ?? []; unset($_SESSION['form_data_share_' . $slug]); // Determine allowed objet values for this link - $siteSettings = Database::getInstance()->getAllSettings(); + $siteSettings = Database::getInstance()->getAllSettings(); $objetRestriction = $link['objet_restriction'] ?? null; if ($objetRestriction !== null) { - // Link is locked to one type — always show only that $allowedObjet = [$objetRestriction]; } else { - // Build from enabled site settings $allowedObjet = ['tfe']; if (($siteSettings['objet_these_enabled'] ?? '1') === '1') $allowedObjet[] = 'thèse'; if (($siteSettings['objet_frart_enabled'] ?? '1') === '1') $allowedObjet[] = 'frart'; @@ -205,10 +203,13 @@ function renderShareLinkForm(string $slug, array $link): void } $shareCsrfToken = $_SESSION[$shareCsrfKey]; - $pageTitle = 'Soumettre un TFE'; - - // Determine if previously verified by password + $pageTitle = 'Soumettre un TFE'; $isVerified = !empty($_SESSION['share_verified_' . $slug]); + + // Build old()-compatible callable from $formData (share forms use the array variant). + $shareOldFn = fn(string $key, string $default = '') => old($formData, $key, $default); + // No autofocus in the share form — identity function. + $shareWithAutofocusFn = fn(string $field, array $attrs = []) => $attrs; ?> @@ -242,187 +243,97 @@ function renderShareLinkForm(string $slug, array $link): void + +

* Champs obligatoires

-
- Informations du TFE - - 1): ?> -
- -
- - - -
-
- - - - - - - 'name']; include APP_ROOT . '/templates/partials/form/text-field.php'; ?> - 'email']; include APP_ROOT . '/templates/partials/form/text-field.php'; ?> - -
- - Si cette case est cochée, votre contact apparaîtra sur la page publique de votre TFE. -
- -
- - -
-
+ -
- Composition du jury - - - 'jury_promoteur_ext', 'label' => 'Externe à l\'erg', 'checked' => !empty($formData['jury_promoteur_ext'])]; include APP_ROOT . '/templates/partials/form/text-field.php'; ?> - -
-

Lecteurs·rices (optionnel) :

- -
- "> - -
- -
-
+ $name, + 'is_external' => !empty($formData["jury_lecteurs_ext:$i"]) ? 1 : 0, + ]; + } + } + // TODO: Add a note explaining the jury composition to students: + // who counts as external, what role each member plays, and + // whether this information will be publicly visible. + require APP_ROOT . '/templates/partials/form/jury-fieldset.php'; + ?> -
- Cadre académique - - 2000, 'max' => date('Y') + 1]; - include APP_ROOT . '/templates/partials/form/text-field.php'; - ?> - - - - - - - - - -
+ -
- Fichiers - - - - -
+ -
- Métadonnées complémentaires + - - - - - - - $at['id'], 'name' => $at['name']]; - }, $enabledAccessTypes); - $defaultAccessType = 2; - $selectedAccessType = isset($formData['access_type_id']) - ? (int)$formData['access_type_id'] - : $defaultAccessType; - $name = 'access_type_id'; - $label = 'Visibilité / Accès :'; - $options = $accessOptions; - $selected = $selectedAccessType; - $placeholder = null; - $required = true; - $attrs = []; - include APP_ROOT . '/templates/partials/form/select-field.php'; - ?> -
- - -
- Degrés d'ouverture et licences - -
-

Je veux que mon TFE soit disponible sous les conditions suivantes :

- -
-

🔓 Libre

-

Mon TFE est en libre accès à tout le monde sur la plateforme des TFE ainsi que dans la bibliothèque de l'erg. Je suis conscient·e des responsabilités et obligations légales qui viennent avec une diffusion externe – et acquiesce avoir lu la documentation prévue à cet effet par l'erg, ainsi qu'avoir discuté des enjeux d'une publication avec l'équipe pédagogique. J'accepte de partager mes droits de diffusion avec l'erg, ce uniquement dans le cadre d'une diffusion sur la plateforme xamxam.

-
    -
  • -
  • -
-

Au moins une des deux cases doit être cochée pour le degré Libre.

-
- -
-

🔒 Interne

-

Mon TFE et ma note d'intention ne sont accessibles que sur place en physique ainsi que sur la plateforme xamxam par la communauté erg. Une note descriptive est disponible sur le site à toustes. J'autorise une (ré-)utilisation et diffusion dans un contexte académique et didactique au sein de l'erg.

-

La diffusion limitée est protégée par le cadre académique/didactique, le travail pourrait donc être diffusé en interne et être cité par d'autres étudiant·es sans implications légales pour l'auteur·ice ni pour l'école.

-
    -
  • -
  • -
-

Au moins une des deux cases doit être cochée.

-
- -
-

🚫 Interdit

-

Mon TFE n'est pas disponible en physique ni sur le site. Une note descriptive est disponible sur le site.

-
-
- -
-

Généralités

-
    -
  • L'auteur·ice peut décider entre trois degrés de partage de son travail : libre, interne, interdit.
  • -
  • L'auteur·ice peut, à tout moment, décider de restreindre le degré d'accès à son travail. Il ne peut néanmoins pas l'ouvrir davantage.
  • -
  • Le choix effectué dans ce formulaire sera d'application une semaine après la soutenance orale de l'auteur·ice. Celui-ci peut donc décider de restreindre ce choix avant sa publication (mais pas l'ouvrir).
  • -
  • L'erg se réserve le droit de restreindre le degré d'ouverture du TFE – ce en accord avec le règlement.
  • -
  • Dans tous les cas, l'auteur·ice garde les droits d'auteurs, de diffusion, d'utilisation, etc. de son travail – sauf si la licence choisie restreindrait ses droits.
  • -
  • La diffusion « xamxam » est indépendante de la diffusion à la BAIU.
  • -
-
-
+ +
E-mail de confirmation - + +
- - -
- - -
+ + $currentLicenseId, + 'duration_info' => $thesis['file_size_info'] ?? '', + 'lien' => $thesis['baiu_link'] ?? '', + 'access_type_id' => $currentAccessTypeId, + ]; + $editMetaOldFn = function (string $key, string $default = '') use ($editMetaFormData) { + return isset($editMetaFormData[$key]) + ? htmlspecialchars((string)$editMetaFormData[$key]) + : $default; + }; + $oldFn = $editMetaOldFn; + $withAutofocusFn = $editWithAutofocusFn; + $formData = $editMetaFormData; + $defaultAccessTypeId = $currentAccessTypeId; + $showDescription = true; + include APP_ROOT . '/templates/partials/form/fieldset-metadata.php'; + ?> + + +
+ Note contextuelle +
+ +
+ + Visible publiquement pour les TFE Interne ou Interdit. Max 1 500 caractères. +
+
+
+ + +
+ Publication +
+ +
+