tag * bool $showAutosaveStatus — render the "Brouillon enregistré" status indicator * * Website: * string $existingWebsiteUrl * string $existingWebsiteLabel * array $checkedFormatsForSiteWeb */ // ── Defaults ────────────────────────────────────────────────────────────────── $mode = $mode ?? 'add'; $formExtraAttrs = $formExtraAttrs ?? ''; $showAutosaveStatus = $showAutosaveStatus ?? false; // In admin add/edit, no field is required (admins can save partial records) $adminMode = ($mode === 'add' || $mode === 'edit'); $formAction = $formAction ?? ''; $hiddenFields = $hiddenFields ?? ''; $formData = $formData ?? []; $synopsisExtra = $synopsisExtra ?? ""; $juryPromoteur = $juryPromoteur ?? null; $juryPromoteurs = $juryPromoteurs ?? []; $juryPromoteurUlb = $juryPromoteurUlb ?? null; $juryPromoteursUlb = $juryPromoteursUlb ?? []; $lecteursInternes = $lecteursInternes ?? []; $lecteursExternes = $lecteursExternes ?? []; $juryPresident = $juryPresident ?? null; $showPromoteurUlb = $showPromoteurUlb ?? true; $promoteurUlbConditional = $promoteurUlbConditional ?? false; $libreEnabled = $libreEnabled ?? true; $interneEnabled = $interneEnabled ?? true; $interditEnabled = $interditEnabled ?? true; $generalitiesHtml = $generalitiesHtml ?? ""; $defaultAccessTypeId = $defaultAccessTypeId ?? 2; // Optional flags $showIntroHelp = $showIntroHelp ?? false; $showFlash = $showFlash ?? false; $showContact = $showContact ?? false; $showCoverPreview = $showCoverPreview ?? false; $showExistingFiles = $showExistingFiles ?? false; $showBannerPreview = false; // Banners merged into covers — field removed $showBackoffice = $showBackoffice ?? false; $showEmailConfirmation = $showEmailConfirmation ?? false; $oldFn = $oldFn ?? (function_exists('old') ? 'old' : fn($k, $d = '') => $d); $withAutofocusFn = $withAutofocusFn ?? fn($field, $attrs = []) => $attrs; $filesMode = $filesMode ?? 'add'; $existingWebsiteUrl = $existingWebsiteUrl ?? ''; $existingWebsiteLabel = $existingWebsiteLabel ?? ''; $checkedFormatsForSiteWeb = $checkedFormatsForSiteWeb ?? []; // Duration (value + unit) $durationValue = $durationValue ?? null; $durationUnit = $durationUnit ?? 'pages'; // WCAG 3.3.1: which field has a validation error (set by caller from App::consumeAutofocus()) $errorFieldName = $errorFieldName ?? null; ?>
>

* Champs obligatoires

Contact
L'adresse est toujours conservée en interne comme contact de référence.
Langue(s) is_string($l) && trim($l) !== '')) > 0; $required = !$adminMode && !$_hasLangAutre; $hxPost = $mode === 'partage' ? "/partage/fragments/language-autre.php" : "/admin/fragments/language-autre.php"; $hxTarget = "#languages-required-asterisk"; $hxSwap = "outerHTML"; $labelHtml = htmlspecialchars($label) . '' . ($required ? ' *' : '') . ''; include APP_ROOT . "/templates/partials/form/checkbox-list.php"; unset($hxSwap, $_hasLangAutre, $labelHtml); ?> trim($_l)]; } } } elseif (!empty($selectedOtherLanguages) && is_array($selectedOtherLanguages)) { $_selectedOtherLangs = array_map(fn($n) => ['name' => $n], $selectedOtherLanguages); } else { $_langRaw = $formData["language_autre"] ?? ''; if (is_string($_langRaw) && $_langRaw !== '') { foreach (array_map('trim', explode(',', $_langRaw)) as $_l) { if ($_l !== '') { $_selectedOtherLangs[] = ['name' => $_l]; } } } } ?>
Mots-clés trim($_t)]; } } } elseif (!empty($currentTags) && is_array($currentTags)) { $_selectedTags = array_map(fn($n) => ['name' => $n], $currentTags); } else { $_tagsRaw = $formData["tag"] ?? ''; if (is_string($_tagsRaw) && $_tagsRaw !== '') { foreach (array_map('trim', explode(',', $_tagsRaw)) as $_t) { if ($_t !== '') { $_selectedTags[] = ['name' => $_t]; } } } } $name = "tag"; $label = "Mots-clés :"; $placeholder = "Rechercher un mot-clé…"; $hint = "Tapez pour rechercher ou créer des mots-clés."; $selectedTags = $_selectedTags; $required = !$adminMode; $minTags = ($mode === 'partage') ? 3 : 0; $hxPost = ($mode === 'partage') ? "/partage/fragments/pill-search.php" : "/admin/fragments/pill-search.php"; include APP_ROOT . "/templates/partials/form/tag-search.php"; unset($_tagsRaw, $_selectedTags, $_t, $name, $label, $placeholder, $hint, $selectedTags, $hxPost, $minTags, $required); ?>
(string)((int)$f['id']), 'options' => [ 'type' => 'local', 'file' => [ 'name' => $f['file_name'] ?? basename($f['file_path'] ?? ''), 'size' => (int)($f['file_size'] ?? 0), 'type' => $f['mime_type'] ?? 'application/octet-stream', ], ], ]; } // Include session temp files so uploads survive page reload require_once APP_ROOT . '/src/FilepondHandler.php'; $tempFiles = FilepondHandler::getSessionTempFiles($queueType); foreach ($tempFiles as $tf) { $result[] = $tf; } return $result; }; if ($filesMode === 'add'): ?>
Durée
Optionnel. Exemples : 88 pages, 32 minutes, 1.5 heures, 120 Mo.
Backoffice
Visible publiquement pour les TFE Interne ou Interdit. Max 1 500 caractères.
" step="0.01" min="0" max="20" placeholder="sur 20"> Note du jury (interne, non visible publiquement).
Notes internes (non visibles publiquement).
Case logistique : cocher si un exemplaire physique est disponible à la BAIU.
Case logistique : cocher si un exemplaire physique est disponible à l'ERG.
Email privé de l'étudiant·e, utilisé pour l'envoi de la confirmation du formulaire. Non visible publiquement.
Si coché, la fiche apparaîtra dans les résultats de recherche du site public.
E-mail de confirmation