mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-05-06 19:19:19 +02:00
Names, roles, emails, and credits on the À propos page were hardcoded directly in apropos.php HTML. To update a contact meant editing a template file — risky for non-developers and easy to introduce a typo or broken mailto link. Changes: - config/apropos.php: new config array with erg_url, contacts[] (name, role, email per person) and credits[] (label/value pairs); follows the same pattern as config/admin_credentials.php - public/apropos.php: loads config via require; aside section now loops over $apropos['contacts'] and $apropos['credits'] with htmlspecialchars throughout; hardcoded HTML strings removed entirely Also audited todo/02-php-components.md and marked 8 stale items as done: all 5 form field partials were already implemented and in use, the flash-message consolidation was already handled by App::consumeFlash(), and the RateLimit cache dir was already at storage/cache/rate_limit (excluded from deploy rsync).
2.4 KiB
2.4 KiB
PHP Components (Reusable Partials)
Form field partials — templates/partials/form/
text-field.php— already implemented; used acrossadd.phpandedit.phpfor all single-line fieldsselect-field.php— already implemented; used for orientation, ap, finality, license, access type, etc.checkbox-list.php— already implemented with<fieldset>/<legend class="sr-only">/<ul>structure for WCAG 1.3.1file-field.php— already implemented; used for cover image, banner, and TFE filesjury-fieldset.php— already implemented; single partial shared byadd.phpandedit.php; includes all WCAG aria-labels and JS for dynamic rows
Shared UI partials — templates/partials/
pagination.php— partial created and used in bothsearch.phpand (now)admin/index.php;admin/index.phpalso gained proper server-side pagination (25/page) with filter-aware$baseParamsstatus-badge.php— partial fully implemented (templates/partials/status-badge.php) with$badgeType/$badgeValueAPI; CSS rules inadmin.css; used inadmin/index.phpfor publish + access badgesadmin-alert.php— already done;flash-messages.phpcallsApp::consumeFlash()which handles all legacy key variants (_flash_error,error,admin_error,edit_error,form_error,success,admin_success,edit_success) and clears them all
Controller Extraction (In Progress)
- Extract
SearchController— most complex public page - Extract
SystemController— biggest single-file win, 500→8 lines - Extract
ThesisEditController— mergesedit.php+actions/edit.php, deduplicates jury fieldset - Extract remaining controllers one by one
- Consolidate action handlers into controller methods
- Unify flash message keys project-wide to
_flash_error/_flash_success - Move OG tag construction into controller logic
- Extract inline CSS/JS from
system.phpinto separate assets
Backend Maintenance
RateLimitcache dir — already instorage/cache/rate_limit;justfiledeploy excludesstorage/cache/*from rsync. APCu/SQLite migration deferred (not blocking).apropos.phpcontacts and credits — moved toconfig/apropos.phpconfig array (contacts[],credits[],erg_url);apropos.phploops over the config withhtmlspecialchars; update names/emails by editing only the config file