diff --git a/TODO.md b/TODO.md index fe92a64..aba20b2 100644 --- a/TODO.md +++ b/TODO.md @@ -22,6 +22,7 @@ - [x] Decorelate formats from fichiers: no HTMX toggling; Site web/Vidéo/Audio always visible - [x] Sticky formats fieldset inside parent container - [x] Server-side progress: PeerTubeService writes to temp file, client polls progress endpoint +- [x] Refactor licence fieldset: Libre→CC2r+licence, Interne→opt-in licence, Interdit→none ## HTMX Toast Feedback for Settings Checkboxes (contenus.php) diff --git a/app/public/admin/licence-fragment.php b/app/public/admin/licence-fragment.php index 3ae2221..0287676 100644 --- a/app/public/admin/licence-fragment.php +++ b/app/public/admin/licence-fragment.php @@ -1,20 +1,22 @@ getAllLicenseTypes(); ?>
= nl2br(htmlspecialchars($thesis['remarks'])) ?>
++ 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. +
++ 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. +
++ 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. +
+L'auteur·ice peut, à tout moment, décider de restreindre son propre choix. Iel ne peut par contre pas l'ouvrir.
diff --git a/qq b/qq new file mode 100644 index 0000000..fba29dc --- /dev/null +++ b/qq @@ -0,0 +1,255 @@ +[1m[38;5;2m@[0m [1m[38;5;13mpkn[38;5;8mwmmky[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;14m2026-05-11 14:44:19[39m [38;5;12m7e8[38;5;8m166d7[39m[0m +│ [1m[38;5;3m(no description set)[39m[0m +○ [1m[38;5;5mkm[0m[38;5;8mxvkmqm[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 14:36:01[39m [1m[38;5;4m3f7[0m[38;5;8mb2961[39m +│ [38;5;2m(empty)[39m wrap licence fragment content in nested fieldset with legend +○ [1m[38;5;5myup[0m[38;5;8munuzo[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 14:36:01[39m [1m[38;5;4m678[0m[38;5;8mf1d3c[39m +│ refactor licence fragment: Libre→CC2r+licence, Interne→opt-in want_license, Interdit→none +○ [1m[38;5;5mpny[0m[38;5;8mrukop[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 14:24:27[39m [1m[38;5;4m8cc[0m[38;5;8m0bc34[39m +│ Added details and summary to the license choosing element. +○ [1m[38;5;5mll[0m[38;5;8mmtqprz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 13:55:19[39m [1m[38;5;4mf0[0m[38;5;8mbf86cb[39m +│ [38;5;2m(empty)[39m guard syncOrderInput against undefined pond instance during FilePond init +○ [1m[38;5;5mmr[0m[38;5;8mtoqozz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 13:55:19[39m [1m[38;5;4mb5[0m[38;5;8m31602f[39m +│ server-side upload progress: poll /admin/actions/upload-progress.php via token; progress file written during PeerTube uploads +○ [1m[38;5;5mnw[0m[38;5;8mozruss[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 13:38:35[39m [1m[38;5;4m41[0m[38;5;8m5a03cb[39m +│ decorelate formats from fichiers: no HTMX toggles, all slots always visible; progress bar 25/75 split; sticky formats fieldset +○ [1m[38;5;5mqv[0m[38;5;8mnunynl[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 13:33:20[39m [1m[38;5;4m12[0m[38;5;8m09931c[39m +│ upload progress bar: fieldset layout, accent colors, file name display, completion animation, 800ms delay before redirect +○ [1m[38;5;5mql[0m[38;5;8mvmyvuo[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 13:24:09[39m [1m[38;5;4m24[0m[38;5;8me1048a[39m +│ Bump peertube embed audio player height + remove figure for iframes in tfe.php +○ [1m[38;5;5mtx[0m[38;5;8mzqmwnx[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 13:10:01[39m [1m[38;5;4mb75[0m[38;5;8m4732c[39m +│ fix PeerTube upload: switch to simple multipart POST /api/v1/videos/upload with CURLFile; remove resumable protocol +○ [1m[38;5;5msu[0m[38;5;8mrwmkqz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 13:00:07[39m [1m[38;5;4m1b3[0m[38;5;8m4dd14[39m +│ fix PeerTube upload: pass original filename in init body; chunk Content-Type → application/octet-stream +○ [1m[38;5;5muss[0m[38;5;8mkovxu[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 12:53:57[39m [1m[38;5;4m8c0[0m[38;5;8mf90fe[39m +│ fix PeerTube init: remove waitTranscoding, add category+commentsEnabled; switch PATCH back to POSTFIELDS; remove verbose logging; clean curl_close +○ [1m[38;5;5mnll[0m[38;5;8mmqxnz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 12:50:44[39m [1m[38;5;4m68[0m[38;5;8m6be3c3[39m +│ fix PeerTube PATCH: use CURLOPT_INFILE stream for binary body; global CURL_HTTP_VERSION_2_0; fix chunkNum off-by-one +○ [1m[38;5;5mmxq[0m[38;5;8mulkkl[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 12:46:02[39m [1m[38;5;4m3f2[0m[38;5;8m8ed35[39m +│ fix PeerTube PATCH: force HTTP/2 (CURL_HTTP_VERSION_2_0) to match init connection +○ [1m[38;5;5moll[0m[38;5;8mozskx[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 12:43:41[39m [1m[38;5;4mff[0m[38;5;8m9070c4[39m +│ debug PeerTube PATCH 400: let curl negotiate HTTP version, log raw hex body +○ [1m[38;5;5mlu[0m[38;5;8mxqovts[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 12:42:45[39m [1m[38;5;4m83[0m[38;5;8m7f6ef9[39m +│ debug PeerTube PATCH 400: force HTTP/1.1, set CURLOPT_INFILESIZE, log verbose tail +○ [1m[38;5;5mmos[0m[38;5;8mupsso[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 12:40:24[39m [1m[38;5;4m59[0m[38;5;8m89baac[39m +│ fix PeerTube upload: force HTTP/1.1 for PATCH chunks; remove deprecated CURLOPT_BINARYTRANSFER +○ [1m[38;5;5mnn[0m[38;5;8moxlkll[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 12:38:56[39m [1m[38;5;4md9[0m[38;5;8m357537[39m +│ fix PeerTube upload: add CURLOPT_VERBOSE debug; use BINARYTRANSFER for chunk body +○ [1m[38;5;5myxk[0m[38;5;8mvwkqy[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 12:35:54[39m [1m[38;5;4m7ea[0m[38;5;8m832f1[39m +│ fix PeerTube upload: Google-resumable (Location header, PATCH), +debug logging +○ [1m[38;5;5mkk[0m[38;5;8mxkwlvw[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 12:21:45[39m [1m[38;5;4md1[0m[38;5;8m213cf9[39m +│ fix PeerTube upload: use Google-resumable protocol (Location header + PATCH) instead of PUT; capture response headers; ensure chunk size multiple of 256KB +○ [1m[38;5;5musx[0m[38;5;8mlqwxk[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 12:09:14[39m [1m[38;5;4m7e0[0m[38;5;8m28d3f[39m +│ Cleanup acces fichier section +○ [1m[38;5;5mom[0m[38;5;8mwsuqoy[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 11:40:50[39m [1m[38;5;4m56[0m[38;5;8mab779e[39m +│ move Restrictions d'accès aux fichiers from contenus.php to acces.php +○ [1m[38;5;5musm[0m[38;5;8myqlwr[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 11:35:11[39m [1m[38;5;4m03[0m[38;5;8mc9d317[39m +│ cleanup: merge SMTP fields into single fieldset, rename to Emails +○ [1m[38;5;5mrxw[0m[38;5;8mmppwn[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 11:28:58[39m [1m[38;5;4m5a[0m[38;5;8m45cb02[39m +│ fix: remove alt labels, fix curl_close deprecation, fix PeerTube description param +○ [1m[38;5;5mmqo[0m[38;5;8myqups[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 11:24:57[39m [1m[38;5;4m42[0m[38;5;8m722c21[39m +│ feat: PeerTube channel by name, test button, always-visible FilePond pools +○ [1m[38;5;5mqm[0m[38;5;8moswsvt[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 11:15:06[39m [1m[38;5;4m679[0m[38;5;8m120b6[39m +│ feat: shared SMTP credentials + resumable PeerTube upload + embed improvements +○ [1m[38;5;5msx[0m[38;5;8mpsrqsl[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 11:01:25[39m [1m[38;5;4mfd[0m[38;5;8m3ad3d3[39m +│ feat: add PeerTube alternate audio/video labels and FilePond pools +○ [1m[38;5;5mqr[0m[38;5;8mtmmwro[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 10:31:19[39m [1m[38;5;4m2f[0m[38;5;8mb392f6[39m +│ fix: make schema.sql fully idempotent — add IF NOT EXISTS to all CREATE INDEX, CREATE TRIGGER, and CREATE VIEW statements +○ [1m[38;5;5mpy[0m[38;5;8mlyqurz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 04:45:23[39m [1m[38;5;4m674[0m[38;5;8m5734d[39m +│ feat(backup): deploy cron-based SQLite backups to production +○ [1m[38;5;5mpqno[0m[38;5;8mvwxx[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:43:09[39m [1m[38;5;4m16[0m[38;5;8m4df763[39m +│ fix(production): fix multiple remote server errors from nginx logs +○ [1m[38;5;5mrxp[0m[38;5;8mvwzkt[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:43:09[39m [1m[38;5;4mcf[0m[38;5;8mc55073[39m +│ feat(admin): add htmx toast feedback for settings checkboxes in contenus.php +○ [1m[38;5;5mss[0m[38;5;8mtzwlpk[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:43[39m [1m[38;5;4m677[0m[38;5;8mf5050[39m +│ feat(deploy): upload deploy-server.sh, run migrations, fix migrate.sh server layout +○ [1m[38;5;5mmy[0m[38;5;8msnnsru[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:43[39m [1m[38;5;4md6[0m[38;5;8m548157[39m +│ feat(deploy): upload and run deploy-server.sh before permission verification, run migrations +○ [1m[38;5;5munnm[0m[38;5;8morqw[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:43[39m [1m[38;5;4m0f[0m[38;5;8mf5abbe[39m +│ feat(deploy): upload and run deploy-server.sh before permission verification +○ [1m[38;5;5mrqr[0m[38;5;8mkkkuo[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:43[39m [1m[38;5;4m17[0m[38;5;8m8a8577[39m +│ feat(deploy): add deploy-verify-permissions recipe to check ownership/permissions after rsync +○ [1m[38;5;5mkp[0m[38;5;8mvxplms[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:43[39m [1m[38;5;4mac[0m[38;5;8m53d0da[39m +│ fix: settings handler was treating hidden value="0" as truthy +○ [1m[38;5;5mku[0m[38;5;8mslmqps[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:43[39m [1m[38;5;4m97[0m[38;5;8mabb41b[39m +│ fix: use HTMX auto-save with hidden value=0 inputs in separate fieldsets +○ [1m[38;5;5mqq[0m[38;5;8mssmzsl[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:43[39m [1m[38;5;4mbd4[0m[38;5;8md5bff[39m +│ fix: split formulaire section into separate forms to avoid cross-resets +○ [1m[38;5;5mtm[0m[38;5;8mklpprq[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:43[39m [1m[38;5;4m7a[0m[38;5;8m2525e0[39m +│ fix: replace HTMX auto-save checkboxes with regular form + Enregistrer button +○ [1m[38;5;5mrs[0m[38;5;8mwkvuzm[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:43[39m [1m[38;5;4m61[0m[38;5;8m8356af[39m +│ fix: settings checkboxes could not be unchecked + could not be checked independently +○ [1m[38;5;5mws[0m[38;5;8mtuyzym[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:43[39m [1m[38;5;4m18d[0m[38;5;8m9bd1a[39m +│ feat: implement SQLite backup & data integrity plan (Phases 2-4) +○ [1m[38;5;5mou[0m[38;5;8mqzmwvn[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:42[39m [1m[38;5;4m28[0m[38;5;8m608d2c[39m +│ feat: implement SQLite backup & data integrity plan (Phases 2-4) +○ [1m[38;5;5mps[0m[38;5;8mvklxsu[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:42[39m [1m[38;5;4mc7[0m[38;5;8m012c91[39m +│ fix: exclude entire var/ from rsync --delete to preserve logs +○ [1m[38;5;5mnlv[0m[38;5;8msnzkz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:42[39m [1m[38;5;4m9c[0m[38;5;8m4138fa[39m +│ fix: add hx-swap="none" to admin auto-save checkboxes to prevent page swap +○ [1m[38;5;5molz[0m[38;5;8mzwmwr[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:42[39m [1m[38;5;4mae[0m[38;5;8m12c463[39m +│ feat: require 3 mots-clés in partage, language asterisk toggle, admin auto-save checkboxes +○ [1m[38;5;5mnq[0m[38;5;8mmqrqmo[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:42[39m [1m[38;5;4mf65[0m[38;5;8m44c5d[39m +│ fix: obfuscate email in contact links, raise rate limits, make Libre toggleable +○ [1m[38;5;5mry[0m[38;5;8mqustol[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:42[39m [1m[38;5;4med[0m[38;5;8mfc1fd0[39m +│ import dialog: add Terminé button, fix padding, make success permanent, avoid POST resend +○ [1m[38;5;5msns[0m[38;5;8mxswsz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:42[39m [1m[38;5;4m4b[0m[38;5;8me7b931[39m +│ fix: jury-fieldset.php calling old() with wrong signature for partage +○ [1m[38;5;5mwp[0m[38;5;8mspurnq[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:42[39m [1m[38;5;4mc3[0m[38;5;8m61702d[39m +│ Make Auteur(s) and Accès columns sortable alphabetically in admin list +○ [1m[38;5;5mzx[0m[38;5;8mryvzkv[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-11 03:35:42[39m [1m[38;5;4md2[0m[38;5;8m570bc3[39m +│ Improve recap page + fix CSV import for jury roles +○ [1m[38;5;5mvqx[0m[38;5;8mpnkox[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 22:20:29[39m [1m[38;5;4m9d[0m[38;5;8md791cd[39m +│ fix migration 028, promoteurice repopulation, DB bootstrap +○ [1m[38;5;5mxz[0m[38;5;8mnsyswm[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 22:18:05[39m [1m[38;5;4mb9[0m[38;5;8m52709e[39m +│ FilePond production hardening +○ [1m[38;5;5mvqn[0m[38;5;8monzxp[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:31:56[39m [1m[38;5;4m99[0m[38;5;8mc51201[39m +│ remove accept attributes from FilePond inputs, rely on beforeAddFile validation +○ [1m[38;5;5mrl[0m[38;5;8mqsxozn[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:29:40[39m [1m[38;5;4m9b[0m[38;5;8m9445fe[39m +│ fix file validation: use extension-based check in beforeAddFile, drop plugin +○ [1m[38;5;5mwm[0m[38;5;8mzntpxp[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:25:45[39m [1m[38;5;4mfa[0m[38;5;8m1697bf[39m +│ add filepond-plugin-file-validate-type + server-side file warnings +○ [1m[38;5;5mstm[0m[38;5;8muuwmv[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:19:58[39m [1m[38;5;4mccd[0m[38;5;8mf1c36[39m +│ add server-side video/audio size limits (2 GB) and fix missing annexe queue validation +○ [1m[38;5;5mtq[0m[38;5;8mwpzqtq[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:10:51[39m [1m[38;5;4m25[0m[38;5;8m24574a[39m +│ [38;5;3m(no description set)[39m +○ [1m[38;5;5mwv[0m[38;5;8mkvvpmv[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:35[39m [1m[38;5;4mdc[0m[38;5;8m099a5f[39m +│ fix annexe validation, FilePond type validation, and styling +○ [1m[38;5;5mrp[0m[38;5;8mtplqsr[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:35[39m [1m[38;5;4m70[0m[38;5;8m3b5dc2[39m +│ Add FilePond pools for couverture, note_intention, video, audio +○ [1m[38;5;5mzmv[0m[38;5;8mkxops[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:35[39m [1m[38;5;4m39[0m[38;5;8mce6dbf[39m +│ [38;5;3m(no description set)[39m +○ [1m[38;5;5myuu[0m[38;5;8mqpnwp[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4m55[0m[38;5;8m8d7c06[39m +│ Fix FilePond integration: decouple format extras from main file inputs +○ [1m[38;5;5mztz[0m[38;5;8mtkrsu[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4m01[0m[38;5;8m7e2657[39m +│ [38;5;3m(no description set)[39m +○ [1m[38;5;5mqw[0m[38;5;8mltvwqq[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4mfe[0m[38;5;8m503dcd[39m +│ Replace custom file-upload-queue.js with FilePond +○ [1m[38;5;5mpno[0m[38;5;8mtuyzv[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4m19[0m[38;5;8m1d2d7a[39m +│ [38;5;3m(no description set)[39m +○ [1m[38;5;5mur[0m[38;5;8mrtosru[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4m02[0m[38;5;8m272555[39m +│ fix: stop checkbox click in admin index from navigating to recapitulatif +○ [1m[38;5;5mym[0m[38;5;8mrzpvln[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4m2e[0m[38;5;8mc34999[39m +│ fix: spurious HTMX console warnings from checkbox-list default hx-include +○ [1m[38;5;5mmuzs[0m[38;5;8mwpkw[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4m40[0m[38;5;8m4696bf[39m +│ fix: repair form submission with queued files + add comprehensive debug logging +○ [1m[38;5;5mow[0m[38;5;8mnwlmpo[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4m6e[0m[38;5;8m99f3e9[39m +│ Replace HTMX+PHP file upload queues with client-side JS +○ [1m[38;5;5mxl[0m[38;5;8mprulto[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4m52[0m[38;5;8mee3530[39m +│ Replace HTMX+PHP file upload queues with client-side JS +○ [1m[38;5;5mqu[0m[38;5;8mkzomwx[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4m0e[0m[38;5;8m31760f[39m +│ Replace HTMX+PHP file upload queues with client-side JS +○ [1m[38;5;5mmqn[0m[38;5;8mvolnz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4mdb3[0m[38;5;8m00c32[39m +│ Replace HTMX+PHP file upload queues with client-side JS +○ [1m[38;5;5mut[0m[38;5;8mnzmtom[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 21:06:34[39m [1m[38;5;4me2[0m[38;5;8mcd7804[39m +│ Replace HTMX+PHP file upload queues with client-side JS +○ [1m[38;5;5myr[0m[38;5;8mpmtrsy[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 16:35:04[39m [1m[38;5;4m0b5[0m[38;5;8m9d667[39m +│ fix: scoped HTMX file validation, add validation to TFE/PeerTube inputs +○ [1m[38;5;5mmxv[0m[38;5;8mvqust[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 16:32:34[39m [1m[38;5;4ma6[0m[38;5;8m6ff5c1[39m +│ refactor: session-based incremental TFE upload via HTMX, drop SortableJS +○ [1m[38;5;5muv[0m[38;5;8mnvvyny[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 15:55:35[39m [1m[38;5;4m04[0m[38;5;8mc1c3c6[39m +│ fix: req annexes, add HTMX inline file validation (MIME/size) +○ [1m[38;5;5myz[0m[38;5;8mtqkpzz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 15:31:02[39m [1m[38;5;4mdd6[0m[38;5;8m4d5c9[39m +│ fix: TFE and annexes files not saved, plus keyword validation and file preview CSS +○ [1m[38;5;5mro[0m[38;5;8mqtyzln[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 15:05:24[39m [1m[38;5;4m94[0m[38;5;8mf0df20[39m +│ feat: obfuscate all email addresses and mailto links as HTML entities +○ [1m[38;5;5msv[0m[38;5;8mprwkko[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:51:25[39m [1m[38;5;4ma9[0m[38;5;8m0b8b4d[39m +│ fix: add help email, preserve file names on validation error, license fix +○ [1m[38;5;5mkv[0m[38;5;8myyvksn[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:51:25[39m [1m[38;5;4mbb[0m[38;5;8mfd786c[39m +│ fix: add help email, preserve file names on validation error, license fix +○ [1m[38;5;5mmou[0m[38;5;8mmuszm[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mab[0m[38;5;8m4601b9[39m +│ Fix language-search fragment +○ [1m[38;5;5mxvq[0m[38;5;8monoyt[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m64[0m[38;5;8mb18fdb[39m +│ Add sidebar TOC, simplify Données Secondaires section +○ [1m[38;5;5mty[0m[38;5;8motlpxt[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m22[0m[38;5;8m799820[39m +│ Add Mots-clés and Langues management to contenus page +○ [1m[38;5;5msnt[0m[38;5;8mroxlt[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m47[0m[38;5;8m670245[39m +│ Move Formulaire settings to contenus, remove delete-all TFE +○ [1m[38;5;5mqxu[0m[38;5;8mprqpt[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m1b5[0m[38;5;8md0db6[39m +│ Add language-search component for Autre Langue input + active search in lists +○ [1m[38;5;5mstt[0m[38;5;8mrwkly[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m586[0m[38;5;8m23625[39m +│ CSV importer: boolean and ap variants/typos +○ [1m[38;5;5mpnt[0m[38;5;8mwsqvs[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mb83b[0m[38;5;8m316e[39m +│ Rename author_email→contact_interne, author_show_contact→contact_public across view/controllers/templates +○ [1m[38;5;5mvpw[0m[38;5;8muyvyv[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m43[0m[38;5;8mcf6b4b[39m +│ Fix: email clearing in findOrCreateAuthor, htmlspecialchars(null) crash in old(), dead contact_interne field, access_type_id radio clearing +○ [1m[38;5;5msz[0m[38;5;8mktqmnn[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m80[0m[38;5;8m9d77b1[39m +│ Error tests, FK violations fix +○ [1m[38;5;5munnn[0m[38;5;8mvyqs[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m6c[0m[38;5;8ma873c8[39m +│ Admin mobile block: fix inline style beating media query +○ [1m[38;5;5mnz[0m[38;5;8mllwsxo[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mba[0m[38;5;8m41cc9e[39m +│ Fix bulk form nesting, remove count bar, stopPropagation on actions +○ [1m[38;5;5mvu[0m[38;5;8mmvtlyz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mef[0m[38;5;8md01b93[39m +│ Rename Liens étudiant·e, add link name + edit dialog +○ [1m[38;5;5mso[0m[38;5;8mmsyvxz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mc8[0m[38;5;8mbe0aae[39m +│ Bulk bar anti-shift, tags icons, AP no-wrap, credits reorder +○ [1m[38;5;5mzl[0m[38;5;8mkousvq[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m73[0m[38;5;8mef6301[39m +│ Add back buttons, row click navigation, remove Voir button +○ [1m[38;5;5mzmu[0m[38;5;8myukuk[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mdb0[0m[38;5;8m21566[39m +│ Replace emoji/text buttons with Phosphor SVG icons, add credits +○ [1m[38;5;5mkx[0m[38;5;8mwyyswm[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m92[0m[38;5;8mcea357[39m +│ Replace large admin index script with minimal JS +○ [1m[38;5;5mpkr[0m[38;5;8mnmpks[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m30[0m[38;5;8mef10fd[39m +│ Move export DB to Exporter modal, color stats +○ [1m[38;5;5mtu[0m[38;5;8mrvpxsq[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mb2[0m[38;5;8mb09243[39m +│ Refactor: Admin index +○ [1m[38;5;5myxp[0m[38;5;8mntrsp[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mdf[0m[38;5;8mf6e2af[39m +│ add explanation hint to is_published checkbox in Backoffice fieldset +○ [1m[38;5;5mnt[0m[38;5;8mmqzyop[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mf6b[0m[38;5;8m4ac09[39m +│ Merge Publication fieldset's is_published checkbox into Backoffice fieldset +○ [1m[38;5;5mrt[0m[38;5;8mqxvoqk[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mcc6[0m[38;5;8m5b385[39m +│ Remove duration_pages/duration_minutes/file_size_info; rename cc4r → cc2r in DB and code +○ [1m[38;5;5mkl[0m[38;5;8mpxpwlm[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mad[0m[38;5;8mf080d1[39m +│ fix: resolve partage form submission issues +○ [1m[38;5;5mru[0m[38;5;8mznqknn[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m8e[0m[38;5;8mebf684[39m +│ css: moved + tweaked styles to common.css +○ [1m[38;5;5mmt[0m[38;5;8mtylpmt[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mcb[0m[38;5;8mef12b5[39m +│ link creation: fieldset with checkboxes for objet restriction, TFE checked by default +○ [1m[38;5;5mww[0m[38;5;8mrwtomz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mdd1[0m[38;5;8m33522[39m +│ switch thesis-add-header to grid layout: title | badge, subtitle spans full width +○ [1m[38;5;5moo[0m[38;5;8mlsxuow[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4md7[0m[38;5;8mff6b42[39m +│ Update: subtitle below header + top gradient +○ [1m[38;5;5mvn[0m[38;5;8mprsrzm[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m23[0m[38;5;8mec2c7b[39m +│ remove duplicate Image de couverture in edit form — moved cover preview+removal into fichiers-fragment.php, removed duplicate from edit-existing-files-block +○ [1m[38;5;5mztk[0m[38;5;8mmwwkl[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mc0[0m[38;5;8m668225[39m +│ .env and todo +○ [1m[38;5;5mtoq[0m[38;5;8mvqlop[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m1f[0m[38;5;8mdd450f[39m +│ overtype editor rounded corners +○ [1m[38;5;5mms[0m[38;5;8mwkvnyl[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4md8[0m[38;5;8m7158db[39m +│ Cleanup and normalize headers +○ [1m[38;5;5mux[0m[38;5;8mqyvyvt[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4mf1[0m[38;5;8me2651f[39m +│ refactor public search bar +○ [1m[38;5;5mxvt[0m[38;5;8mqzyom[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m585[0m[38;5;8m21915[39m +│ Redesign focus rings +○ [1m[38;5;5mvr[0m[38;5;8mqmwvrx[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:26:45[39m [1m[38;5;4m10[0m[38;5;8mcfa469[39m +│ unify form element styles in common.css +○ [1m[38;5;5mrv[0m[38;5;8mvmuxsz[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-10 14:25:53[39m [1m[38;5;4m0be[0m[38;5;8m7f533[39m +│ style: tweaking admin section + some public +○ [1m[38;5;5mtow[0m[38;5;8mstynu[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-09 14:44:48[39m [1m[38;5;4mb7f[0m[38;5;8mf2776[39m +│ EDIT THIS → refactor: unify edit mode Format+Fichiers with add/partage HTMX fragment +○ [1m[38;5;5mqnt[0m[38;5;8mtznqt[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-09 14:44:48[39m [1m[38;5;4m3c[0m[38;5;8mdd3893[39m +│ Refactor: Form improvements and cleanup: note contextuel, annexes, fichiers +○ [1m[38;5;5mwq[0m[38;5;8mmrrrwu[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-09 14:44:48[39m [1m[38;5;4ma8[0m[38;5;8maeb0d6[39m +│ feat: dual upload system — direct file storage + PeerTube API integration +○ [1m[38;5;5mnsn[0m[38;5;8murqzv[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-09 14:44:48[39m [1m[38;5;4m5f[0m[38;5;8mbd6243[39m +│ fix: justfile shebang recipes indentation (spaces → tabs) +○ [1m[38;5;5mrqz[0m[38;5;8myxzyt[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-09 14:44:48[39m [1m[38;5;4m4c[0m[38;5;8m030bd5[39m +│ Refactor + feat: unify format/fichiers HTMX fragment, reorder format types, add file constraints, fix admin auth +○ [1m[38;5;5mmuzr[0m[38;5;8muvwl[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-09 14:44:48[39m [1m[38;5;4m7b[0m[38;5;8medda02[39m +│ Encrypt SMTP password at rest with AES-256-GCM +○ [1m[38;5;5mov[0m[38;5;8mqmwmol[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-09 14:42:07[39m [1m[38;5;4m62[0m[38;5;8m7b0c4e[39m +│ Remove required from all admin add/edit form inputs +○ [1m[38;5;5mvpo[0m[38;5;8mmqrst[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-08 22:58:25[39m [1m[38;5;4mb833[0m[38;5;8m1a08[39m +│ fix: replace .php-suffixed public URLs blocked by nginx catch-all +○ [1m[38;5;5mqnx[0m[38;5;8mltqyq[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-08 22:58:25[39m [1m[38;5;4m189[0m[38;5;8mf4368[39m +│ fix: 403 on /language-autre-fragment.php — add explicit nginx location block +○ [1m[38;5;5mnsl[0m[38;5;8mznwmk[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-08 22:58:25[39m [1m[38;5;4m6b[0m[38;5;8ma13e00[39m +│ test: add ShareLinkTest + PureLogicTest (TDD), fix coverMap undefined in SearchController +○ [1m[38;5;5mnv[0m[38;5;8mntmkyx[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-08 22:58:25[39m [1m[38;5;4m15[0m[38;5;8md54fa1[39m +│ add Néerlandais language option and make language_autre conditionally required +○ [1m[38;5;5mqxq[0m[38;5;8myzmzp[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-08 22:58:25[39m [1m[38;5;4mf3[0m[38;5;8md96155[39m +│ merge banners into covers: remove banner field, migrate files, add covers to search/home/repertoire cards +○ [1m[38;5;5mrxn[0m[38;5;8mnnvpu[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-08 22:58:05[39m [1m[38;5;4me3[0m[38;5;8m896811[39m +│ Fix migrations and deploy issues + errors + linting +[1m[38;5;14m◆[0m [1m[38;5;5mpqnt[0m[38;5;8mkzml[39m [38;5;3mpontoporeia@happyngreen.fr[39m [38;5;6m2026-05-07 23:39:41[39m [38;5;5mmain[39m [1m[38;5;4mbdd[0m[38;5;8m95341[39m +│ Extract shared TFE form partial — single source of truth for add/edit/partage +~