mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-08-10 15:21:22 +02:00
Issue 1 — hidden seeds overriding user input: Removed all hidden seed inputs (cc2r, want_license, license_id, license_custom). The .licence-license-choice div is now rendered directly from $formData on page load instead of via HTMX load trigger. This eliminates stale-seed interference on both HTMX radio changes and full form submits. Issue 2 — Interne want_license uncheck clearing CC2r: When want_license is unchecked, CC2r and licence selections are cleared (section hidden). Added hidden want_license=0 so the fragment handler can distinguish "arriving from another access type" (no want_license in POST → preserve values) from "explicit Interne toggle" (want_license present → clear CC2r if off). CC2r is independently toggleable within the visible section. Licence dropdown placeholder changed to 'Aucune licence' for an explicit no-licence choice.
137 lines
6.9 KiB
PHP
137 lines
6.9 KiB
PHP
<?php
|
||
/**
|
||
* Shared partial - "Degrés d'ouverture et licences" fieldset.
|
||
*
|
||
* Renders:
|
||
* 1. Généralités (editable via form help blocks)
|
||
* 2. Radio choice: Libre / Interne / Interdit (filtered by enabled flags)
|
||
* 3. Licence dropdown + custom licence text input
|
||
* 4. CC2r checkbox
|
||
*
|
||
* Variables consumed:
|
||
* array $formData - raw form data for repopulation
|
||
* array $licenseTypes - [{id, name}]
|
||
* bool $libreEnabled - show Libre option (always true for admin)
|
||
* bool $interneEnabled - show Interne option
|
||
* bool $interditEnabled - show Interdit option
|
||
* string $generalitiesHtml - HTML content for Généralités section (editable)
|
||
* int $defaultAccessTypeId - default selected access type (default: 2)
|
||
*/
|
||
|
||
$formData = $formData ?? [];
|
||
$licenseTypes = $licenseTypes ?? [];
|
||
$libreEnabled = $libreEnabled ?? true;
|
||
$interneEnabled = $interneEnabled ?? true;
|
||
$interditEnabled = $interditEnabled ?? true;
|
||
$generalitiesHtml = $generalitiesHtml ?? '';
|
||
$defaultAccessTypeId = $defaultAccessTypeId ?? 2;
|
||
$adminMode = $adminMode ?? false;
|
||
?>
|
||
<fieldset class="licence-explanation">
|
||
<legend>Degrés d'ouverture et licences</legend>
|
||
|
||
<!-- Degré d'ouverture -->
|
||
<div class="licence-choice">
|
||
<p class="licence-prompt">J'autorise l'erg à archiver mon TFE de la manière suivante :</p>
|
||
<?php
|
||
// access_type_id may be null (meaning "not set"). Keep null to select "-" radio.
|
||
$selectedAccess = array_key_exists('access_type_id', $formData) ? $formData['access_type_id'] : $defaultAccessTypeId;
|
||
?>
|
||
|
||
<?php if ($adminMode): ?>
|
||
<div class="licence-degree">
|
||
<label class="admin-checkbox-label">
|
||
<input type="radio" name="access_type_id" value=""
|
||
hx-post="/admin/fragments/licence.php"
|
||
hx-target=".licence-license-choice"
|
||
hx-swap="outerHTML"
|
||
hx-include="closest fieldset"
|
||
<?= $selectedAccess === '' || $selectedAccess === null ? 'checked' : '' ?>>
|
||
<strong>-</strong> Non défini
|
||
</label>
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
<?php if ($libreEnabled): ?>
|
||
<div class="licence-degree">
|
||
<label class="admin-checkbox-label">
|
||
<input type="radio" name="access_type_id" value="1"
|
||
hx-post="<?= $adminMode ? '/admin/fragments/licence.php' : '/partage/fragments/licence.php' ?>"
|
||
hx-target=".licence-license-choice"
|
||
hx-swap="outerHTML"
|
||
hx-include="closest fieldset"
|
||
<?= (string)$selectedAccess === '1' ? 'checked' : '' ?> <?= $adminMode ? '' : 'required' ?>>
|
||
<strong>🔓 Libre</strong>
|
||
<br>
|
||
</label>
|
||
<details class="licence-details">
|
||
<summary class="licence-summary"> <?= icon('circle-i') ?> Info</summary>
|
||
<p>
|
||
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 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.
|
||
</p>
|
||
</details>
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
<?php if ($interneEnabled): ?>
|
||
<div class="licence-degree">
|
||
<label class="admin-checkbox-label">
|
||
<input type="radio" name="access_type_id" value="2"
|
||
hx-post="<?= $adminMode ? '/admin/fragments/licence.php' : '/partage/fragments/licence.php' ?>"
|
||
hx-target=".licence-license-choice"
|
||
hx-swap="outerHTML"
|
||
hx-include="closest fieldset"
|
||
<?= (string)$selectedAccess === '2' ? 'checked' : '' ?> <?= $adminMode ? '' : 'required' ?>>
|
||
<strong>🔒 Interne</strong>
|
||
</label>
|
||
<br>
|
||
<details class="licence-details">
|
||
<summary class="licence-summary"> <?= icon('circle-i') ?> Info</summary>
|
||
<p>
|
||
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.
|
||
</p>
|
||
</details>
|
||
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
<?php if ($interditEnabled): ?>
|
||
<div class="licence-degree">
|
||
<label class="admin-checkbox-label">
|
||
<input type="radio" name="access_type_id" value="3"
|
||
hx-post="<?= $adminMode ? '/admin/fragments/licence.php' : '/partage/fragments/licence.php' ?>"
|
||
hx-target=".licence-license-choice"
|
||
hx-swap="outerHTML"
|
||
hx-include="closest fieldset"
|
||
<?= (string)$selectedAccess === '3' ? 'checked' : '' ?> <?= $adminMode ? '' : 'required' ?>>
|
||
<strong>🚫 Interdit</strong>
|
||
|
||
</label>
|
||
<br>
|
||
<details class="licence-details">
|
||
<summary class="licence-summary"> <?= icon('circle-i') ?> Info</summary>
|
||
<p>
|
||
Mon TFE n'est pas disponible en physique ni sur le site. Une note descriptive est disponible sur le site.
|
||
</p>
|
||
</details>
|
||
</div>
|
||
<?php endif; ?>
|
||
<p class="licence-note"><em>L'auteur·ice peut, à tout moment, décider de restreindre son propre choix. Iel ne peut par contre pas l'ouvrir.</em></p>
|
||
</div>
|
||
|
||
<!-- Licence - rendered from stored data on page load; swapped via htmx when radio changes -->
|
||
<?php
|
||
$initialAccess = array_key_exists('access_type_id', $formData) ? $formData['access_type_id'] : $defaultAccessTypeId;
|
||
if ($initialAccess === '' || $initialAccess === null) {
|
||
$initialAccess = (string)$defaultAccessTypeId;
|
||
}
|
||
$cc2r = !empty($formData['cc2r']);
|
||
$wantLicense = $cc2r || !empty($formData['license_id']) || !empty($formData['license_custom']);
|
||
$licenseId = $formData['license_id'] ?? '';
|
||
$licenseCustom = $formData['license_custom'] ?? '';
|
||
$accessTypeId = (string)$initialAccess;
|
||
$hxPost = $adminMode ? '/admin/fragments/licence.php' : '/partage/fragments/licence.php';
|
||
include APP_ROOT . '/templates/partials/form/_licence.php';
|
||
?>
|
||
</fieldset>
|