mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-05-06 19:19:19 +02:00
src/TfeController.php (new, 195 lines): - Dedicated controller for the public TFE detail page - create(): Database singleton injection, ready-to-use factory - handle(): validates id param (redirect to index.php on missing/invalid/404), loads thesis via getThesisById(), fetches access type via getThesisAccessTypeId() - buildMetaDescription(): strip_tags + 160-char mb_substr truncation - resolveOgImage(): banner_path → first image file → empty string resolution - buildOgTags(): full og:type/title/description/url/image/image_alt/site_name + article:author / article:published_time assembly - collectCaptionPaths(): ordered list of VTT paths for N-th-video pairing - returns flat array of all view variables including ogTags, captionFiles, pageTitle, metaDescription, isInterdit, bodyClass, extraCss, currentNav public/tfe.php (271 → 206 lines): - Reduced to 9-line dispatcher: require TfeController, create(), handle(), extract() - $db reference removed from view layer entirely - Inline OG tag block (~20 lines) removed - Inline meta-description block (~5 lines) removed - Inline caption-collection loop (~10 lines) removed - $captionFiles replaces $_captionFiles in the video pairing section todo/02-php-components.md: - TfeController extraction marked done - 'Move OG tag construction into controller logic' marked done - Remaining item narrowed to public/index.php home-page controller
4.4 KiB
4.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—src/SearchController.php; rate-limiting, param sanitisation, DB queries, OG meta, and author-map construction moved out ofpublic/search.php; entry point is now a 6-line dispatcher (create()+handle()+extract()); view template unchanged - Extract
SystemController—src/SystemController.php(452 lines); all status checks, disk/PHP info, log reading, nginx config reading, and line classifiers centralised;system.phpreduced 582→282 lines;system-fragment.phpreduced 213→137 lines with all duplicatedfrag_*helpers eliminated - Extract
ThesisEditController—src/ThesisEditController.php(285 lines);load()fetches thesis row, current language/format/jury selections and all lookup tables for the view;save()validates and persists metadata, authors, jury, languages, formats, tags, banner in a transaction; staticautofocusFieldForError()centralises WCAG 3.3.1 field-name mapping;admin/edit.phpreduced 191→162 lines;actions/edit.phpreduced 153→53 lines - Extract
TfeController—src/TfeController.php; ID validation, thesis load (404→redirect), access-type check, meta-description assembly, OG/Twitter tag construction (banner→image→empty resolution), WebVTT caption-file collection, and all page-meta variables moved out ofpublic/tfe.php; entry point is now a 9-line dispatcher (create()+handle()+extract());tfe.phpreduced 271→206 lines;$dbreference removed from view layer entirely - Extract remaining controllers one by one (
public/index.phphome page) - Consolidate action handlers into controller methods
- Unify flash message keys project-wide to
_flash_error/_flash_success— all callers already useApp::flash(); removed dead legacy-key fallback chains (error,admin_error,edit_error,form_error,success,admin_success,edit_success) fromconsumeFlash() - Move OG tag construction into controller logic — all three public controllers (
SearchController,TfeController, and the new home-page controller once extracted) build$ogTagsinternally and return it as a plain array key; no OG tag assembly remains in entry-point scripts - Extract inline CSS/JS from
system.phpinto separate assets — JS moved topublic/assets/js/system.js(loaded via$extraJs); 4 inlinestyle=attributes replaced with CSS classes; only dynamic CSS custom properties (--disk-pct,--disk-color) remain as inline styles because they carry PHP runtime values
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