Pontoporeia
e0d706c677
tfe.css: tfe-meta-item font-weight 400→700
2026-06-10 00:15:41 +02:00
Pontoporeia
c9fa5943cf
repertoire: rep-entry + col h2 step-0, years col step-3
2026-06-10 00:15:41 +02:00
Pontoporeia
ef6bff895a
admin nav-logo: grid layout for icon+text horizontal alignment and vertical centering
2026-06-10 00:15:41 +02:00
Pontoporeia
9e272873e1
style: set tfe-meta-item default to font-weight 400 so Accès/Licence values render at regular weight
2026-06-10 00:15:41 +02:00
Pontoporeia
3588f22d7b
style: consolidate aria-current nav styles — remove border-radius from base header links, keep global :focus-visible ring, move border-bottom/padding to shared header.css
2026-06-10 00:15:41 +02:00
Pontoporeia
cb2b18e470
style: standardise links to Regular weight (400) with violet accent hover, body to Light (300)
2026-06-10 00:15:41 +02:00
Pontoporeia
cee3345ea3
tfe.php: afficher CC2r + licence, formater contact court, supprimer download PDF
2026-06-10 00:15:41 +02:00
Pontoporeia
24b753a992
fix: add missing csrf_token to htmx checkbox in file access restrictions
...
The 'Activer la restriction d'accès' checkbox in /admin/acces.php used
htmx to POST to settings.php but the #fieldset-restrictions container
was missing a csrf_token hidden input. This caused two bugs:
1. 'Erreur de sécurité, token invalide' error
2. Full /admin/parametres.php HTML injected into #restrictions-response
(due to HTMX following the 302 redirect on CSRF failure)
2026-06-10 00:15:41 +02:00
Pontoporeia
3f200dae70
TFE page: replace dl/dt/dd with p/span for metadata, remove underlines, lowercase keywords/languages/formats, inclusive text, editable restriction messages
2026-06-10 00:15:41 +02:00
Pontoporeia
71949425c7
TFE page: remove underlines from all links, lowercase keywords/languages/formats, inclusive writing, prevent keyword mid-word breaks, editable restriction messages in admin
2026-06-10 00:15:41 +02:00
Pontoporeia
9a8f0cad65
fix(répertoire): colonnes différenciées, scrollbars discrètes, fontes conformes maquette, AP entre crochets
...
- grid-template-columns: années=0.4fr, orientations=1.2fr, AP/finalité/intermédiaires
- scrollbars: WebKit 5px transparent + Firefox scrollbar-width:thin global
- rep-entry: BBBDMSans Regular 398, --step--1
- années: BBBDMSans Medium 498 (semi-bold)
- titres colonnes: Ductus Regular 398, text-secondary, letter-spacing 0.12em
- AP: diminutifs entre crochets (ex: Design et Politique du Multiple [DPM])
- TODO: marquer les 4 correctifs répertoire comme faits
2026-06-10 00:15:33 +02:00
Pontoporeia
df70fba5d4
feat: convert all file inputs to FilePond for standardized uploading
...
- Add csv_import queue type (storeAsFile, no async upload) for CSV import dialog
- Convert file-field.php partial to FilePond with field-name→queue-type mapping
- Conditionally skip server config for storeAsFile queues in buildFilePondOptions
- Skip FilePond init for inputs inside closed <dialog> elements
- Trigger FilePond init when import dialog opens
- Load FilePond CSS/JS assets on admin index page
2026-06-09 13:12:22 +02:00
Pontoporeia
fad38f4e0d
Added more logs to be excluded
2026-06-08 10:25:24 +02:00
Pontoporeia
053f09b181
fix(migration): deduplicate languages before LOWER() in 025_lowercase_languages.sql
...
Two rows (Néerlandais id=5, néerlandais id=3) collided when lowercased,
violating the UNIQUE constraint on languages.name.
Added DELETE to keep the lowest-ID row per LOWER(name) group before
the UPDATE SET name = LOWER(name).
2026-06-08 10:17:00 +02:00
Pontoporeia
f4cb06656e
Improve .gitignore
2026-06-08 10:14:17 +02:00
Pontoporeia
2bb520bb8c
Fix: anchor vendor/ gitignore to root so app/public/assets/js/vendor/ is tracked (htmx, OverType, FilePond)
2026-06-08 10:12:39 +02:00
Pontoporeia
f398a0f1ff
Fix non-constant-time credential comparisons
...
- account.php: replace !== CSRF token check with hash_equals
- ShareLink::setPassword(): also encrypt and store plain-text password
alongside the hash, matching create() behavior so the decrypted_password
decoration stays correct after password updates
2026-05-31 17:49:43 +02:00
Pontoporeia
6246174fc5
Export: add LINK.txt with PeerTube watch URLs to file ZIP export
2026-05-31 17:46:02 +02:00
Pontoporeia
a251aeb500
Fix: bootstrap.php autoload path detects vendor location (same dir vs parent dir) for flat server layout
2026-05-31 17:46:02 +02:00
Pontoporeia
d33a56981e
Fix: deploy-deps patches classmap path (app/src/ → src/) for flat server layout before composer install
2026-05-31 17:46:02 +02:00
Pontoporeia
47405e5334
Fix: split deploy recipe into deploy-code/deploy-deps/deploy-migrate; deploy-deps always syncs composer.json+composer.lock, runs composer install only when lockfile checksum changed
2026-05-31 17:46:02 +02:00
Pontoporeia
4e409c409d
Fix: add ZipArchive guard to export-files.php, add composer install step + composer.json sync to deploy recipe
2026-05-20 12:49:23 +02:00
Pontoporeia
ae66c2baad
Integrate Monolog: replace four logging systems with single PSR-3 factory
...
- Add monolog/monolog dependency (^3.10)
- Create app/Logger.php central factory with channels: app, admin, error, audit
- Each channel gets RotatingFileHandler (30-day retention) with pass-through LineFormatter
preserving existing JSON format contracts
- Rewrite AppLogger as thin facade delegating to Logger::get('app')
- Rewrite ErrorHandler::log() to delegate to Logger::get('error')
- Rewrite AdminLogger file output to delegate to Logger::get('admin'), keep DB writes
- Add Monolog file shadow to Audit via Logger::get('audit') (Option A per monolog-plan)
- Log level controlled by LOG_LEVEL env var (defaults: DEBUG in cli-server, WARNING otherwise)
- Graceful NullHandler fallback when log directory is not writable
- Update SystemController LOG_FILES: remove php_error, add app/admin/error/audit
- JSON app logs parsed to readable one-liners in the log viewer
- Remove nginx config tab (parametres + fragment + template + css)
- Friendly empty-state message when app log files don't exist yet (notYet)
- PHP tail fallback when exec() unavailable
- All 228 PHPUnit tests pass, no call sites changed
2026-05-20 12:28:31 +02:00
Pontoporeia
a6e0aa5887
Add code coverage configuration (phpunit.xml source filter), baseline coverage report (21.27% lines), gitignore coverage/ and .phpunit.result.cache; remove deprecated setAccessible() calls
2026-05-20 02:08:42 +02:00
Pontoporeia
a047062d87
Phase 4 cleanup: migrate old tests to PHPUnit, add ErrorHandler/PureLogic/SearchController tests, remove app/tests/, update justfile test target
2026-05-20 01:55:58 +02:00
Pontoporeia
93625d09b5
Add integration tests (Phase 2: DatabaseExtended, ShareLinkExtended, RateLimitExtended) and controller validation tests (Phase 3: ThesisCreate, ThesisEdit, AutofocusField)
2026-05-20 01:51:41 +02:00
Pontoporeia
7a4d0fafb2
Add PHPUnit setup (Phase 0) and pure-logic tests (Phase 1): Crypto, EmailObfuscator, SystemController helpers, StudentEmail, TfeController OG tags
2026-05-20 01:35:56 +02:00
Pontoporeia
d9e4541749
Remove unused Parsedown.php (replaced by league/commonmark in Phase 1); update phpstan baseline
2026-05-20 01:21:47 +02:00
Pontoporeia
a0cda5b55d
Phase 3: Replace SmtpRelay SMTP socket with PHPMailer
2026-05-20 01:17:44 +02:00
Pontoporeia
ba57820016
Phase 2: Replace PeerTubeService HTTP client with Guzzle
2026-05-20 01:07:41 +02:00
Pontoporeia
5e75cacad7
Phase 1: Replace Parsedown with league/commonmark (4 call sites)
2026-05-20 01:02:09 +02:00
Pontoporeia
4683ba4116
Add composer.json with league/commonmark, guzzlehttp/guzzle, phpmailer/phpmailer; wire autoloader into bootstrap; document de-librairisation strategy and PHP extension setup
2026-05-20 00:53:42 +02:00
Pontoporeia
728f05502c
Combine phpstan, cs-check, cs-fix into lint-php recipe; fix lint issues + test failures + duplicate detection bug
2026-05-20 00:31:19 +02:00
Pontoporeia
2e75a3b35c
Fix beforeunload dialog appearing on edit.php when no changes made
2026-05-19 23:59:07 +02:00
Pontoporeia
42222abe7c
Récapitulatif admin: sections → fieldsets, fichiers en table, marges + pas de thumbnails
2026-05-19 23:58:51 +02:00
Pontoporeia
defc919cd0
cleanup modal: list stale files to remove; storage restructure: documents/ → {objet}/
2026-05-19 23:58:51 +02:00
Pontoporeia
c6199525f9
add sticky thead to index, langues, and mots-clés tables
2026-05-19 23:58:51 +02:00
Pontoporeia
bcf3140aa2
edit submission: redirect to recapitulatif instead of edit
2026-05-19 23:58:51 +02:00
Pontoporeia
4da317de0a
deploy: remove .env from generic file perm check, remove router.php check (dev-only file)
2026-05-19 23:58:51 +02:00
Pontoporeia
5bbf633295
Contenus: add Mots-clés fieldset mirroring Langues, keep dedicated page button as backup, add Annuler cancel button to both bulk action bars, limit both table wraps to max-height:50vh with overflow scroll
2026-05-19 23:58:51 +02:00
Pontoporeia
678f9fc804
Index page: remove Mots-clés button, move export to bulk selection, fix ZipArchive error, move DB export to paramètres, sticky thead
...
- Remove 'Mots-clés' button from toolbar (redundant with admin sidebar tags)
- Replace export dialog with 'Exporter CSV' + 'Exporter fichiers' buttons in bulk selection bar
- Export dispatcher now accepts ?ids=1,2,3 for per-selection export
- All ExportController/Database methods accept optional thesisIds array
- Graceful error message when ZipArchive extension is missing on server
- Move DB export (SQLite download) to paramètres → Maintenance section
- Sticky table column headers (position: sticky, top: 0, z-index: 5) for index page table
2026-05-19 23:58:51 +02:00
Pontoporeia
b484943128
Unnest header.css (native CSS nesting silently broken in browsers without support)
2026-05-19 23:58:51 +02:00
Pontoporeia
2cb8d71fe9
Fix dialog margins, add admin-dialog__body/styles, give trash page horizontal margins
2026-05-19 23:58:51 +02:00
Pontoporeia
d619d2f116
Update TODO after CSS refactoring fixes
2026-05-19 22:34:57 +02:00
Pontoporeia
7cf020c7bd
Refactor CSS architecture per css-methodology-spec.md
...
Split CSS into named layers: reset → colors → typography → base →
components → utilities. Each component has one unique root class in
its own file. No cross-component overrides.
New files:
- reset.css (modern-normalize base — matches project's prior reset)
- colors.css (all colour variables)
- typography.css (font faces, size/space scale, font-family vars)
- base.css (≤ 5 site-wide rules: layout, headings)
- utilities.css (sr-only, skip-link, reduced-motion)
- style.css (root @import file loading all layers)
- components/{links,focus,forms,tables,dialog,details,media,
buttons,badges,toasts,pagination,header,search}.css
Existing files:
- variables.css → backward-compat wrapper (imports colors + typography)
- common.css → backward-compat wrapper (imports style.css)
- Page files (admin, public, form, tfe, apropos, repertoire, system,
file-access) → removed redundant @import url(./variables.css)
- head.php → loads style.css instead of modern-normalize + common.css
- partage pages → load style.css
Fixes vs initial refactoring:
- reset.css: use modern-normalize base (not Tailwind Preflight) to
avoid border/list/heading regressions from aggressive defaults
- components/search.css: restore !important flags on input styles
(needed to override forms.css base input selectors)
- acces.php: add toast feedback on password copy button
Cleaned up duplicate status-badge/toast definitions from admin.css
(now live in components/badges.css and components/toast.css).
2026-05-19 16:55:32 +02:00
Pontoporeia
7c30d1c55d
Fix relink: close modal + HTMX refresh for immediate pool update
...
- After relink, always close the modal (even if FilePond input not found,
e.g. page refreshed by live-reload during the fetch).
- After closing, re-fetch #format-fichiers-block via HTMX from
/admin/fragments/fichiers.php?_thesis_id=N which loads thesis files
from DB and re-renders the fragment with pre-populated FilePond pools.
The afterSwap handler auto-reinitializes FilePond instances.
- Updated admin/fragments/fichiers.php to accept _thesis_id, load
existing files from DB, build per-queue-type JSON, and render in
edit mode.
2026-05-19 01:32:34 +02:00
Pontoporeia
b77bc486e5
Fix relink: FilePond addFile API, yellow border, limbo type + await
...
- Fix addFile argument format: FilePond.addFile() takes (source, options)
as two separate arguments, not a single {source, options} object.
- Change .filepond--file default border from accent-yellow to accent-green.
Existing files loaded in edit mode have type 'local' and never reach
processing-complete state, so they got the yellow border.
- Change relinked file add from type 'local' to 'limbo'. Limbo items
go through DID_COMPLETE_ITEM_PROCESSING which triggers onprocessfile
(ensures syncOrderInput runs with serverId available) and renders
the green checkmark visual.
- Await addFile Promise and close modal in .then() instead of
immediately, ensuring the item is created before cleanup.
- Remove duplicate modal.close() after the addFile block.
2026-05-19 01:13:17 +02:00
Pontoporeia
ae9a8a62c0
deploy: exclude storage/{tmp,documents,theses,triage,backups,logs} from rsync + fix .env perm check to 640
2026-05-19 00:33:28 +02:00
Pontoporeia
41eebf8a02
cleanup: squash commit history from 177 to 98 commits, resolve acces.php conflict markers
2026-05-19 00:09:15 +02:00
Pontoporeia
27e6abc7e4
feat: file browser + relink for orphaned files + htmx fix + header cleanup + fix relinked FilePond integration + resolve acces.php conflict markers
2026-05-19 00:08:06 +02:00