Empty the per-language blocks help pages. Their contents described the
previous block-<name>.php naming convention and the old fly/standard
block mechanics, none of which match the current implementation after
the recent block filename normalization and block-rendering refactor.
Core changes:
- Legacy help pages (admin/info/blocks/):
- Empty de.html, en.html, fr.html, pl.html, uk.html
Files are kept in place (they are loaded by the admin help viewer) but carry no body until rewritten against the current architecture
Benefits: - Stops shipping documentation that contradicts the current code - Clears the slate for a rewrite aligned with the new naming and APIs
Technical notes: - No code changes and no path changes; the admin help viewer simply renders an empty help body for this section - New documentation for blocks will land separately once the stack settles
Refresh _meta.base_fingerprint in local config to reflect the new
baseline after the block-filename normalization, slim form-add partial
and liste/form-add caller migration.
Core changes:
- Local config snapshot (config/local.php):
- Update
_meta.base_fingerprintfrom9bac3d77…tof005dfd5…
Benefits: - Keeps the deploy fingerprint consistent with the current tree state - Prevents the integrity check from flagging the refactor as drift
Technical notes: - Value-only change; no structural or behavioural impact
Align call sites with two consolidated template contracts:
- liste partial absorbs table-open/rows/table-close/empty-alert/pager,
replacing the old table + table-row + alert branching in callers
- form-add partial accepts a single fields string; callers now
compose token, name, email, title, category, text, site fields from
atomic fragments themselves
Core changes:
- core/user.php (getPrivateMessageView):
- Introduce local
$messageListhelper that emitslistepartial Convert inbox/outbox/saved lists to build
$rowsarrays and hand them to the helper instead of manual table + alert branching- Switch row loop to
while ($row = ...)pattern used elsewhere - Module callers (modules/*/index.php):
form-add contract migration: * account, contact, recommend, shop.kasse: inject token via
getHtmlFrag('hidden') inside `fields` instead of `token` param
- money, order: drop redundant empty
tokenparam - whois.add, help.add/addview, auto_links.add: replace lbl_*, emailval,
titleval, catselect, hometext, siteval, has_name/is_user with
composed `fields` built from form-field-row fragments
liste partial migration (table + alert + pager collapsed to one call): auto_links.send, clients., content, faq, files, jokes, links,
media, news, pages, shop.kasse/clients/partners, users.*,
account.last/asetup
Consistently switch list loops to
while ($row = $db->getSqlRow())with array destructuring for readability and alignment with existing patterns
Benefits: - One template contract for listings; callers stop emitting scaffolding - Token injection is visible at the call site, matching how all other form fields are composed - Empty-result branches no longer duplicate alert scaffolding - Smaller modules files overall (-362 lines vs +405 lines removed)
Technical notes:
- Pairs with the preceding templates/partials — slim form-add commit
- No behavioural change in output structure; visible HTML matches the
previous table/alert markup (liste is a wrapper around the same
table/table-row/alert fragments)
- getHtmlPart('liste', ...) accepts: rows, table_open,
table_close, optional empty_alert, optional pager_html
Drop all inline field rendering from form-add partials. The partial now only renders the form shell, extrafields, fields and the submit row; per-field scaffolding (token, name, email, title, category, hometext, bodytext, fields_before/after_text, site) is no longer the partial's responsibility.
Core changes:
- Form shell partial (templates/default/partials/form-add.html):
- Remove inline {% if token %} hidden input
- Remove inline {% if has_name %}/{% if is_user %} username blocks
- Remove inline {% if emailval %}, {% if lbl_title %}, {% if lbl_cat %}
- Remove inline {% if hometext %}, {% if bodytext %}, {% if siteval %}
- Remove {% if fields_before_text %} / {% if fields_after_text %} hooks
- Keep: form tag,
extrafields,fields, submit row - Same change applied to templates/lite/partials/form-add.html
- Same change applied to templates/simple/partials/form-add.html
Benefits: - Single rendering contract across themes (no divergent inline markup) - Callers compose the body from atomic fragments they already own - No surprise required fields hidden in the partial; form semantics (required, placeholder, names) live where the data lives
Technical notes:
- Breaking contract: callers must now inject token, name, email, title,
category, text/body, site fields via fields (see accompanying
modules refactor commit)
- Unused params (token, has_name, lbl_*, emailval, hometext,
bodytext, siteval, etc.) are simply ignored by the thinner partial
Unify block file naming across storage, admin UI, default data and docs.
Block files no longer carry a block- prefix; the admin editor, default
dataset, migration and template comments are aligned to the new scheme.
Core changes:
- Block files (blocks/):
Rename 23 block files: block-<name>.php -> <name>.php * Covers navigation, language, user_info, stat, banner_random, forum,
login, menu, modules, news, pages, faq, files, jokes, jokes_random,
auto_links, center*, img, links, search, voting
- No code changes inside block files themselves
- Admin editor (admin/modules/blocks.php):
Update scandir() regex to match
^(.+)\.php$instead of^block-(.+)\.php* Affects add(), fileedit(), filecode(), edit() scannersUpdate POST validation for
bfileto accept bare filenames * addsave(), editsave(), filecode(), filecodesave()- Update filecode() path rewrite to drop the
block-prefix injection - Update title fallback in addsave() to only strip
.php - Default dataset & migration (setup/sql/):
- insert.sql: rewrite default _blocks rows to new filenames
table_update6_3.sql: add UPDATE statement to strip
block-from bfile for existing installations during upgrade- Template comments (templates/*/assets/css/blocks.css):
Update inline doc reference
blocks/block-keywords_search_style.phptoblocks/keywords_search_style.phpin default and lite themes
Benefits: - Consistent filename convention across the codebase - Shorter, cleaner block filenames in admin and storage - Fresh installs and upgrades both land on the new scheme
Technical notes:
- Upgrade path is handled by a single UPDATE in table_update6_3.sql
- Admin regex now accepts any <name>.php under blocks/, which is the
same trust boundary as before (still scoped to the blocks/ directory)
- No behavioural change in block rendering; only naming is affected
Delete all template files that are no longer referenced by any PHP caller after the migration to generic fragments and inlined form-add/form-wrap patterns. Applied uniformly to default, lite, and simple themes.
Core changes:
- Fragments replaced by generic fragment flags:
- submit → form-submit fragment (same rendering, unified contract)
- graphic → span with class + title
- line-stack-item → span with sl-line-stack-item + is_line_break flag
- msg-center → post-div with is_center flag
- messagebox → post-div with class + title fragment
- radio-group → post-div with sl-radio-group class
- category-icon → link with img_src (or span for locked items)
- category-title → link/span with sl-catname class
- category-sub-item → post-div
- div-hr → post-div with has_hr flag
- tip → post-div with date-badge + span inside
- basic-search → caller builds search inline
- Auto-links fragments replaced:
- auto-links-embed-link → link fragment
- auto-links-embed-image → link with img_src
- auto-links-code-row → table-row + textarea
- Code display:
- code-table → table open/close with is_form flag
- Rating/voting:
- voting-post → checkbox/radio + list-item
- voting-basic → post-div with class post-vote
- Shop fragments:
- shop-cart-button → link with is_htmx + onclick_attr
- shop-kasse-content → post-div wrapper
- Email/notification fragments:
- security-mail-message → message-block partial
- rss-source-title → title (is_level_two) + link (is_blank)
- recommend-success-text → alert fragment
- account-comment-section → nested post-div
- Media:
- media-link-row → form-field-row with link label + input
- Partials replaced by form-add/form-wrap + inlined fields:
- contact-form → form-add with form-field-row fields
- files-download-form → form-wrap with hidden + form-submit
- forum-reply-form → form-add with form_attr
- calculator-form → form-add with number/result/button fields
- mini-post-form → form-add
- fieldset-post-form → fieldset-block
- recommend-form, rss-info-form, rss-read-forms → form-add with inlined fields
- shop-kasse-form → retained as named partial (not deleted)
- whois-output → inline fieldset-block composition
Benefits: - Removes ~108 dead template files from the repository - Fragment directory contains only actively used generic components - Partial directory retains only true reusable view shells
Technical notes: - All deleted files have confirmed zero callers after preceding refactor commits - Applied identically to default, lite, and simple themes
Extend generic fragments to support new boolean flags and rendering variants required by the PHP caller migration. Update partials to use fragment includes instead of inline HTML, completing the transition to a fully data-driven template layer. Applied uniformly to default, lite, and simple themes; plus templates/lite/index.php.
Core changes:
link.html: add onclick_attr pass-through for arbitrary onclick without is_delete; is_cart_checkout added to class chain
- list.html: add is_unordered flag to render <ul> instead of <ol>
- post-div.html: add has_hr flag to render <hr> after the closing </div>
span.html: add is_line_break flag (appends <br>); add content_html slot for raw HTML content alongside existing text slot; is_danger class added to chain
title.html: add title_class parameter to override sl-title on h3; add title_html slot for raw HTML in h2/h3/h4 variants; add is_level_four / h4 rendering variant
- checkbox.html: add is_plain flag for plain label-only layout (used in voting polls)
- radio.html: updated data binding for inline voting list rendering
- form-submit.html: align class/input_attr parameters for form-submit callers
- form-field-row.html: minor slot/attribute alignment
- date-badge.html: add class parameter for custom date badge styling
- login-nav.html: convert inline HTML elements to fragment includes:
- input/password fields → {% include 'fragments/input.html' with ... %}
- submit button → {% include 'fragments/button.html' with ... %}
- lost/register/token/refer/op → fragment includes via data arrays from PHP
- form-add.html, form-wrap.html: attribute normalization and slot alignment
- fieldset-block.html: field/content slot updates
- contact-block.html: minor field alignment
Benefits: - login-nav partial is now fully fragment-based — no inline HTML strings - title fragment covers h2/h3/h4 with or without raw HTML content - span and post-div cover remaining inline layout needs without new fragments
Technical notes: - Applied identically to default, lite, and simple themes - templates/lite/index.php updated for related partial/fragment API changes
Replace obsolete single-purpose fragments and partials with generic alternatives across all affected modules. Forms previously delegated to dedicated partials are now built inline using form-add/form-wrap + form-field-row + form-submit, removing the need for thin wrapper partials that added no reusable logic.
Core changes:
submit → form-submit across all callers (account, files, forum, links, money, news/admin, recommend, rss, search, shop, voting, whois, contact): - Replaces the standalone submit input fragment with the standard form-submit
which integrates class and extra-attribute support
Partial-to-inline form migration: - contact: contact-form partial → form-add with inlined form-field-row fields - files/media: files-download-form partial → form-wrap with inline form-submit - forum: forum-reply-form partial → form-add with form_attr for sl-forum-reply-form - money: calculator-form partial → form-add with inlined number/result/button fields - whois: mini-post-form partial → form-add; fieldset-post-form → fieldset-block
Fragment replacements: - auto_links: auto-links-code-row + auto-links-embed-link/image → table-row + textarea - auto_links/news: code-table → table open/close with is_form flag - content/news/links: div-hr → post-div with has_hr flag and id preserved - content: tip → post-div with date-badge + span(sl_views) inside - media: media-link-row → form-field-row with link label and input - voting: voting-basic → post-div with class post-vote - shop: shop-cart-button → link with is_htmx; shop-kasse-content → post-div - recommend: recommend-success-text → alert or direct text
Email/notification fragments: - contact: contact-email-body → message-block partial with lines[] - recommend, rss, money: respective email fragments → message-block partial
Benefits: - Thin wrapper partials (files-download-form, forum-reply-form, calculator-form, mini-post-form, contact-form) no longer needed; forms built from generic parts - submit fragment eliminated as a standalone — form-submit is the canonical form - div-hr, tip, auto-links-code-row removed as call sites are updated
Technical notes: - No functional behavior changes — structure and HTML output remain equivalent - All 17 affected module files updated in this commit
Continue the contract-driven fragment migration: replace obsolete single-purpose fragments with boolean-flag extensions of existing generic fragments or consolidated partials, removing the last CSS class strings from PHP callers.
Core changes:
- Database error display (core/classes/pdo.php):
- pdo-error-badge → getHtmlFrag('span', ['label', 'content_html', 'is_danger' => true])
- Utility helpers (core/helpers.php):
- getTplRadioGroup(): radio-group → post-div with class sl-radio-group
- getTplNewGraphic(): graphic → span with icon class and title
- rss_read(): rss-source-title → title fragment (is_level_two) + link (is_blank)
- letter(): line-stack-item → span with sl-line-stack-item class and is_line_break flag
- addFilescanTask(): security-mail-message → getHtmlPart('message-block', ...)
- encode_php(): code-table → table open/close with is_form flag
- render_blocks(): msg-center → post-div with is_center flag
- warnings(): warning-list → list fragment
- Security email (core/security.php):
- addMail(): security-mail-trace → getHtmlPart('message-block', lines[])
- System helpers (core/system.php):
setHead(): login-nav partial extended with pre-built sub-field data arrays (name_field, password_field, submit_button, lost_link, register_link, token_field, etc.)
setCategories(): category-icon → link with img_src (accessible) or span for locked; category-title → link/span with sl-catname class; category-sub-item → post-div
- getVotingView(): voting-post → checkbox/radio with is_plain + list-item
- User/message rendering (core/user.php):
setComShow(): account-comment-section → nested post-div with id=comm/repcsave; submit → form-submit fragment
setMessageShow(): messagebox → post-div with class message-box + title fragment; introduced $messageBox closure to deduplicate the four view-type branches
- getPrivateMessageView(): submit → form-submit fragment
Benefits: - PHP callers no longer embed CSS class knowledge or HTML structure decisions - login-nav partial now fully self-contained: all sub-elements passed as data arrays - Voting form uses standard checkbox/radio fragments instead of custom voting-post - Security email footers unified through message-block partial
Technical notes: - security-mail-trace and security-mail-message fragments no longer referenced - category-icon and category-title fragments no longer referenced from PHP - voting-post fragment no longer referenced from PHP - code-table fragment no longer referenced from PHP
Regenerated base_fingerprint after the template and core refactor wave to reflect the current canonical state of the codebase.
Core changes:
- Fingerprint update (config/local.php):
- base_fingerprint: f005dfd5acda9f455681e75d1976bf6c15b89e63 → 9bac3d7739a31f67a5d1f459dec1ae23f316a997
Benefits: - Config fingerprint matches the refactored codebase state - Prevents false-positive base-mismatch warnings on next run
Technical notes: - Automatic regeneration; no logic changes





