mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
Mirrors the mots-clé tag-search system: dropdown suggestions from existing languages via HTMX, pill display with bin-icon remove buttons, 'Créer' option for new languages. Replaces the plain text input. - New partial: templates/partials/form/language-search.php - New fragment: public/partage/language-search-fragment.php - Admin wrapper: public/admin/language-search-fragment.php - Updated language-autre-fragment to return just the required asterisk indicator - Updated both controllers to handle language_autre as array (pill-based) with backward-compatible string path - Updated edit form to compute selectedOtherLanguages from DB - Registered new route in partage/index.php - Fix CSV importer: split comma-separated language column into individual entries - Add htmx active search to admin index, title line-clamp, predefined languages only in checkboxes - Admin index: filter form now uses htmx triggers (input delay:300ms on search, change on selects) to actively search without page reload - Sort links include hx-push-url for back-button support - Added loading indicator bar (.admin-search-indicator) - Title column: line-clamp at 2 lines with overflow hidden, native title attr tooltip for full text - Language checkboxes now show only 3 predefined languages (Français, Anglais, Néerlandais); all others go via the Autre langue search component - Added Database::getPredefinedLanguages() and excluded predefined from language-search-fragment suggestions - Included hidden sort/dir inputs in table-wrap so sort state preserved across filter changes - Fix language-search: block 'Créer' for predefined languages in dropdown The 'Créer' option in the language-search dropdown now also checks against the predefined set (français, anglais, néerlandais) to avoid offering creation of languages that already exist as checkboxes.
89 lines
8.1 KiB
Markdown
89 lines
8.1 KiB
Markdown
# TODO
|
|
|
|
- [x] Remove delete-all TFE from parametres (template, dialog, controller, DB method, logger)
|
|
- [x] Move Formulaire + Types de travaux from parametres to contenus under Paramètres du Formulaire h2
|
|
- [x] Restructure contenus Formulaire: sub-headings for Restrictions, Degré d'ouverture, Types de travaux, Structure
|
|
- [x] Copy mots-clé htmx system (dropdown, pills, create) to Autre Langue input
|
|
- [x] Languages: store lowercase, display with ucfirst (getOrCreateLanguage, CSV import, getAllLanguages, v_theses_full, schema seed data, migration 025)
|
|
- [x] CSV importer: add AP aliases for D&P du multiple, PACS variants, Narraion typo
|
|
- [x] Move default semantic form element styles (checkbox, radio, select) from admin.css/form.css into common.css
|
|
- [x] Keep specific layouts/classes in form.css (admin-form grid, checkbox-group layout, etc.)
|
|
- [x] Ensure selects, checkboxes, and radios are properly styled globally
|
|
- [x] Converge towards the styled form appearance rather than unstyled
|
|
- [x] Fix: replace mb_strlen/mb_substr/mb_strtolower with strlen/substr/strtolower (mbstring extension missing on server, caused fatal error on partage submit at ThesisCreateController line 511)
|
|
- [x] Fix: annexes checkbox in partage form clears other file inputs — scoped HTMX swap to #annexes-input-block instead of replacing entire #format-fichiers-block
|
|
- [x] Fix: website/video/audio inputs should be inline in Fichiers fieldset (not sub-fieldsets) — removed <fieldset class="fichiers-format-extra"> wrappers
|
|
- [x] Fix: video/audio show direct upload input when PeerTube disabled — parallel inputs: PeerTube upload when enabled, direct `files[]` upload when disabled
|
|
- [x] Fix: format checkboxes HTMX include missing has_annexes — added it so annexes state preserved across format changes
|
|
- [x] Fix: format checkbox toggle clears file inputs — split into two blocks: #format-fichiers-block (stable: TFE/annexes/couverture/note) and #format-extras-block (swappable: website/video/audio extras)
|
|
- [x] Fix: remove website label/legend input — website section now shows only URL field
|
|
- [x] Fix: format-extras not appearing — moved #format-extras-block inside Fichiers fieldset (after annexes), uses hx-select to extract from response
|
|
- [x] Remove duration_pages, duration_minutes, file_size_info entirely (form, schema, DB, views, controllers, tests, CSV export, email)
|
|
- [x] Rename cc4r → cc2r everywhere (DB column, schema, PHP code) to fix pre-existing naming inconsistency
|
|
- [x] Merge Publication fieldset's is_published checkbox into Backoffice fieldset
|
|
- [x] Fix: PHP parse error in admin/index.php — `''` escape in single-quoted string not valid in PHP 8.5
|
|
- [x] Add explanation hint to is_published checkbox
|
|
- [x] Admin index: use AP code instead of full name in list and filter dropdown
|
|
- [x] Admin index: remove pagination, show all theses in table
|
|
- [x] Admin index: HTMX column sorting (click header → reload table via HTMX)
|
|
- [x] Admin index: prevent action buttons from stacking vertically
|
|
- [x] Admin index: compact icon-only buttons (SVG) with tooltips replacing text labels
|
|
- [x] Admin index: reduce status badge font size
|
|
- [x] Admin index: change Voir icon to spectacles/circles SVG
|
|
- [x] Admin index: split Statut column into Publié and Accès
|
|
- [x] Admin index: tighten table cell padding to --space-3xs
|
|
- [x] Admin index: remove main padding, add padding to .admin-list-toolbar and #admin-table-wrap
|
|
- [x] Admin index: remove subtitles from Titre column
|
|
- [x] Admin index: add alternating row background colors
|
|
- [x] Admin index: remove #admin-table-container wrapper element, use #admin-table-wrap
|
|
- [x] Admin index: rearrange toolbar — stats beside title, buttons in single row, search inline with selects on right
|
|
- [x] Admin index: fix toolbar search inputs vertical stacking (add flex-direction: row)
|
|
- [x] Admin index: stats as fieldsets with legend labels (Total/Publiés/Attente), centered content
|
|
- [x] Admin index: remove horizontal padding from toolbar and table-wrap (keep bottom padding only)
|
|
- [x] Admin index: make Filtrer/Réinitialiser buttons same size as inputs (add btn--sm)
|
|
- [x] Admin index: rename Importer un CSV → Importer, merge Export CSV + Export fichiers → Exporter modal with checkboxes
|
|
- [x] Create unified /admin/actions/export.php endpoint with ?csv=1&files=1&db=1 support
|
|
- [x] Admin index: move export DB from parametres into exporter modal
|
|
- [x] Admin index: color stats — green for Publiés, yellow for Attente
|
|
- [x] Remove export-db fieldset and dialog from parametres.php
|
|
- [x] Replace large JS script in admin index with minimal version (8 lines vs ~70)
|
|
- [x] Bulk actions: form wraps all checkboxes, no dynamic DOM building in JS
|
|
- [x] Replace emoji/text buttons in acces.php/acces-etudiante.php with Phosphor SVG icon buttons
|
|
- [x] Replace text button in contenus.php with pencil SVG icon button
|
|
- [x] Add Phosphor Icons credit to about page
|
|
- [x] Add back-to-list arrow button to add/edit/recapitulatif/contenus-edit/tags page titles, make bigger (32px)
|
|
- [x] Remove Voir button from admin index — row click navigates to recapitulatif
|
|
- [x] Add hover highlight on clickable table rows
|
|
- [x] AP column no-wrap, N/A values greyed
|
|
- [x] Tags page: back button, admin-main--list, no padding, icon buttons, #admin-table-wrap
|
|
- [x] Move #bulk-actions into fixed-height #bulk-meta-bar at top, prevent layout shift
|
|
- [x] Credits: move Iconographie below Typographies
|
|
- [x] Rename Accès étudiant·e → Liens étudiant·e
|
|
- [x] Add 'name' column to share_links (schema + migration + model)
|
|
- [x] Add edit dialog for share links (edit name, password, expiration)
|
|
- [x] Row click opens link in new tab, remove Visiter button
|
|
- [x] Add update action to acces-etudiante.php controller
|
|
- [x] Add ShareLink::update() method
|
|
- [x] Remove admin-bulk-meta__default (count bar), clean up layout
|
|
- [x] Fix nested form issue: per-row publish/unpublish buttons now submit correctly
|
|
- [x] Fix delete button: stopPropagation prevents row nav on confirm
|
|
- [x] CSV import: set is_published=0 by default instead of 1
|
|
- [x] Fix AP column wrapping: CSS selector main > table didn't match (table nested in div)
|
|
- [x] Admin mobile block screen: fix inline style beating media query, use CSS default display:none instead
|
|
- [x] Fix deploy: add missing 023b migration to rename cc4r→cc2r, make run.php skip 'no such column' errors
|
|
- [x] Fix FK constraint violation on edit: pass null instead of 0 for absent orientation/ap/finality
|
|
- [x] Mots-clés: interactive tag search with HTMX suggestions, pill display, round bin-icon remove buttons
|
|
- [x] Mots-clés: lowercase enforcement, deduplication, absolute dropdown, keyboard arrows/enter/escape, blur hide, spacing + counter above input, CSV import lowercased, space-collapse normalization, minimum 3 keywords required
|
|
- [x] ErrorHandler: shared static helper for structured error_log + user-friendly messages with precise FK field extraction from SQLite errors. Applied to 12 action files + 6 public controllers + 2 form controllers + partage. Covers FK, UNIQUE, NOT NULL constraint types.
|
|
- [x] Fix: findOrCreateAuthor cannot clear email (empty string skips update, leaves old email)
|
|
- [x] Fix: "NON" stored as literal email string in authors table — cleaned existing DB rows, added OUI/NON→null guard in findOrCreateAuthor and CSV import
|
|
- [x] Fix: contact_interne field in edit form never saved — removed dead field from form and dead validation from create controller
|
|
- [x] Fix: formulaire.php unconditionally suppresses display_errors even in dev mode
|
|
- [x] Fix: access_type_id radio has no "none" option — added "— Non défini" radio for admin mode
|
|
- [x] Fix: radio button checked detection broken (int vs string strict comparison in fieldset-licence-explanation.php)
|
|
- [x] Rename author_email → contact_interne in v_theses_full view, controllers, forms, and templates
|
|
- [x] Rename author_show_contact → contact_public in v_theses_full view
|
|
- [x] Restore contact_interne backoffice field with proper variable name, wire to save (takes precedence over mail)
|
|
- [x] Fix: htmlspecialchars(null) crash in old() on admin/add.php and admin/edit.php (null values in form data)
|
|
- [x] Fix: jury-fieldset.php old() return type confusion (array vs string) for jury_lecteur:_interne:_externe keys
|