Problem: <video> elements on tfe.php had no <track kind="captions"> element, violating WCAG 4.1.2 (name, role, value) for video content. Changes: - public/tfe.php: collect all text/vtt files from the thesis file list before rendering; skip standalone rendering of .vtt entries; for each MP4 emit a <track kind="captions" srclang="fr" label="Sous-titres" default> pointing to the N-th VTT file (N-th video paired with N-th caption in document order) - public/media.php: add text/vtt to allowed MIME list; normalise finfo text/plain -> text/vtt for .vtt files; add vtt branch to cache/header block (Content-Type: text/vtt; charset=utf-8, 1-day cache) - public/admin/actions/formulaire.php: allow .vtt uploads (text/vtt MIME, vtt extension); normalise text/plain finfo result; set file_type='caption' for VTT files so they are distinguishable from other thesis files - public/admin/add.php: extend files field accept attr to include .vtt; update hint text to document the VTT sidecar convention VTT files uploaded under theses/ inherit the same access_type visibility gate in media.php as all other thesis content (403 for access_type_id=3).
6.1 KiB
TODO
Pending tasks have been split into topic files under todo/:
| File | Topic |
|---|---|
| todo/01-css-semantic-refactor.md | CSS class audit, semantic HTML (public + admin), inline style extraction, favicon |
| todo/02-php-components.md | Form field partials, shared UI partials, controller extraction, backend maintenance |
| todo/03-system-cache.md | system_cache table, SystemCache class, system.php refactor |
| todo/04-accessibility.md | WCAG 2.1 AA - remaining failures grouped by success criterion |
Recently completed (this session)
-
WCAG 4.1.2
<video>captions —tfe.phpnow emits<track kind="captions">for each MP4 when a.vttsidecar exists (N-th VTT paired with N-th video).formulaire.phpaccepts.vttuploads (file_type='caption', MIME normalised).media.phpservestext/vttwith correct headers and visibility gating. Adminadd.phpfile-field hint documents the.vttupload convention. -
admin/edit.php— WCAG 4.1.2: removedmb_strimwidthtruncation from$accessOptionsmapping; access type<select>options now include full description text (name — description) so the accessible name is unambiguous for screen readers -
public/assets/favicon.svg— created public favicon: brand-purple (#9557b5) rounded square with white "P" lettermark; distinct fromadmin_favicon.svg(archive-restore icon in#c104fc) -
templates/head.php— favicon<link>now selectsfavicon.svg(public) vsadmin_favicon.svg(admin) based on$isAdmin; closestodo/01-css-semantic-refactor.mdfavicon task -
todo/04-accessibility.md— marked WCAG 3.1.1 lang audit and WCAG 4.1.2 select truncation items as done -
todo/01-css-semantic-refactor.md— marked favicon task as done -
admin.css- added[aria-current="page"]rule for admin nav links (border-bottom: 2px solid currentColor; padding-bottom: 1px) fixing WCAG 1.4.1 (active nav link had no non-colour indicator) -
admin.css- fixed undefined--admin-purplevariable in pagination hover; replaced with--accent-primary(same#9557b5value) -
todo/01-css-semantic-refactor.md- audited all CSS/HTML refactor tasks; marked ~15 items as already-done (.admin-main,.admin-page-title,.admin-form-row,.admin-label,.admin-input/select/textarea,.admin-table,.admin-fieldset,tfe.cssclass replacements,search.cssselector,login.php/edit.phpinline styles,admin-alertreplacement, form partial hints) -
todo/04-accessibility.md- marked WCAG 1.4.1 admin nav and--admin-purpleaudit items as completed -
admin/index.php- server-side pagination (25/page);Database::getThesesListCount()added;getThesesList()extended with$limit/$offset;access_typeJOIN added to query (was missing); result-count meta line added;.pagination-wrap+.pagination-btn+.pagination-infostyles added toadmin.css -
checkbox-list.php- replaced<div class="admin-checkbox-list">with<fieldset class="admin-checkbox-group"><legend class="sr-only">...</legend><ul>(WCAG 1.3.1 fix) -
admin.css- replaced.admin-checkbox-listwith.admin-body fieldset.admin-checkbox-group > ulsemantic selectors; addedspan.admin-row-labelas visible label column counterpart -
login.php- wrapped content in<main id="main-content">landmark -
account.php-<div class="admin-account-status">→<dl>;__rowdivs kept;__labelspans →<dt>;admin-danger-zone__descriptiondiv →<p> -
index.php- maintenance bar<div>→<aside role="status" aria-label="Statut du site"> -
add.php/edit.php-autocomplete="name"on author field,autocomplete="email"on contact field -
tags.php- all inlinestyle=attributes removed; sizing/spacing moved to CSS (.admin-input--inline,.admin-select--inline,.admin-inline-form + .admin-inline-form,.admin-tags-count) -
Marked already-done items in todo files: stats
<dl>,thanks.php<section>,scope="col"on both tables,tfe.phpinline styles,role="alert"on flash messages -
admin-submit-wrap→admin-form-footerrename: updated all 6 admin templates (add.php,edit.php,login.php,account.php,import.php,pages-edit.php) and all 8 CSS selectors inadmin.css(.admin-form > div:not(...)exclusion guards,.admin-login-boxoverrides). Closestodo/01-css-semantic-refactor.mdsubmit-wrap task. -
Marked
status-badge.phppartial and WCAG 1.3.1 status-badge items as already-done intodo/02-php-components.mdandtodo/04-accessibility.md(partial + CSS were fully implemented; TODO had not been updated) -
public/index.php— WCAG 2.4.4: home page cards now append<span class="sr-only">, YEAR</span>to each card’s<p>link text so screen readers get unique link names when two theses share the same title -
todo/04-accessibility.md— WCAG 2.4.3: marked back-link focus-order item as already done (tfe-back-linkis already the first DOM element in.tfe-left, before<h1>) -
jury-fieldset.php— WCAG 3.3.2: replaced bare<label>Lecteur·ices :</label>with<fieldset class="admin-jury-lecteurs"><legend>Lecteur·ices</legend>so the lecteur group has a proper programmatic label -
jury-fieldset.php— WCAG 4.1.2: all "Externe" checkboxes (promoteur + each lecteur row, static + dynamically added via JS) now carryaria-label="[Role] — externe"providing group context without visible redundancy -
jury-fieldset.php— WCAG 2.1.1: jury remove buttons verified to have descriptivearia-label="Supprimer le lecteur·ice N"on all rows (static + dynamic) -
admin.css— added.admin-body fieldset fieldset.admin-jury-lecteursrule: strips border/background on the nested lecteur fieldset so it renders as a visual sub-group, not a double-bordered card -
todo/04-accessibility.md— WCAG 1.4.4 + 1.4.12 audited and marked done: all font-sizes arerem; nooverflow:hiddenon essential text content