Журнал изменений

Журнал изменений

Фильтр и поиск

Всего: 1347 Доступных коммитов | Отфильтровано: 1347 Коммиты | Страница: 87 из 135
03.04.2026
Refactor: migrate security module to canonical fragment API
Автор: Eduard Laas | Дата: 00:30 03.04.2026

Complete the admin fragment refactor for security.php: replace the monolithic admin-security-ban-user-form fragment and getTplAdminForm calls with typed sub-fragments (add-div-input, add-div-textarea, add-div-check, add-div-collapse, add-div-user-search, tabs-panels). Delete stale planning docs now superseded by .agents/ + .rules/.

Core changes:

  1. Ban form (admin/modules/security.php):
  • Replace getTplAdminForm/getTplAdminFormRow with add-div fragment
    • IP/CIDR ban form migrated to typed row data arrays
    • User ban form replaces admin-security-ban-user-form monolith
    • mail/collapse row uses new add-div-collapse + add-div-check
  • Fix getVar key: 'name' -> 'uname' in user ban lookup
  • Replace admin-uploads-config-tabs with tabs-panels fragment
  1. New canonical fragments (templates/admin/fragments/):
  • add-div-check.html, add-div-collapse.html, add-div-input.html
  • add-div-submit.html, add-div-textarea.html, add-div-user-search.html
  • tabs-panels.html, tabs-panels-item.html
  1. Removed legacy fragments:
  • admin-conf-save.html, admin-security-ban-user-form.html, form-submit.html
  1. Docs cleanup:
  • Delete ADMIN_PLAN.md, FRONTEND_PLAN.md, RAW_SLOTS_ADMIN.md
  • Update TEMPLATES.md and TEMPLATE_STATUS.md to reflect new fragment set

Benefits:

  • All admin forms now use a uniform typed-row API
  • Monolithic per-form fragments replaced by composable sub-fragments
  • Stale planning docs removed; authoritative specs live in .agents/.rules/
02.04.2026
Refactor: migrate admin modules and content module to new fragment API
Автор: Eduard Laas | Дата: 17:41 02.04.2026

Update security.php, database.php, and modules/content/admin/index.php to use the canonical input/label-hint/table/edit-tip fragments and add CSRF token verification to all mutating operations in the security module.

Core changes:

  1. Security module CSRF hardening (admin/modules/security.php):
  • bansave(), passsave(), configsave(), delete(): add checkSiteToken() guard at function entry; render _TOKENMISS alert and return early on failure
  • All delete action URLs now include &token=getSiteToken() query parameter
  • banlist() ban-add form: hidden token field added via getTplHiddenInput()
  • passwd() form: hidden token field added
  • config() configsave form: hidden array now passed to config-div.html loop
  1. Fragment migration (admin/modules/security.php):
  • getTplAdminHintLabel() → $tpl->getHtmlFrag('label-hint', [...]) for IP/CIDR, admin file, and dump-skip labels
  • getTplTextInput() → $tpl->getHtmlFrag('input', [...]) for blocker_cookie and afile text inputs
  1. Database module (admin/modules/database.php):
  • getHtmlFrag('admin-input', [...]) → getHtmlFrag('input', [...]) for both submit buttons in dump()
  1. Content module (modules/content/admin/index.php):
  • content(): list view migrated from getTplAdminTableHead/getTplAdminTableRow to $tpl->getHtmlFrag('table', [...]) with head array of column descriptors
  • Row rendering migrated to getHtmlFrag('table-row') + getHtmlFrag('table-row-content')
  • Action menu migrated to getHtmlFrag('edit-tip', [...]) with CSRF token on delete URL
  • Title cell migrated to getHtmlFrag('title-tip', ['items' => [...]]) + cutstr()
  • add(): form rows converted to array-based descriptor format; input/label-hint fragments used for title and RSS URL fields; getTplRefreshTimeSelect() for refresh select; getTplAddDateTime() for date picker; fields_in() replaced by getTplAddFieldRows(); body preview replaced by getTplPreviewContent()
  • Field input normalised: getVar('post', 'field[]', 'raw') + filterFields()

Benefits:

  • CSRF coverage extended to all mutating security module operations
  • Consistent fragment usage eliminates module-specific HTML builders
  • content/add form now uses the same add-div layout as other modules

Technical notes:

  • checkSiteToken() added to bansave (ids 1/2/3), passsave, configsave, delete
  • config-div.html hidden loop expects array of ['nameattr', 'valueattr'] maps
  • field[] input now read as raw array and normalised via filterFields()
Refactor: migrate ad_save(), preview(), and cutstr() to new helper API
Автор: Eduard Laas | Дата: 17:40 02.04.2026

Update three core utility functions in core/system.php to delegate to the canonical helper functions introduced in helpers.php, removing inline HTML construction and aligning with the array-based template API.

Core changes:

  1. ad_save() (core/system.php):
  • Replaced inline <select>/<input> HTML with getTplSaveAction()
  • Passes name, valu, op, noprev as array; logic for preview/delete options is now in getTplSaveAction() and save-action-item.html
  1. preview() (core/system.php):
  • Replaced manual filterMarkdown + getHtmlPart('preview') call with getTplPreviewContent()
  • Renamed $textc parameter to $field to match the field-string convention used by getTplPreviewContent() and getTplViewFieldRows()
  • Returns empty string when all inputs are blank (handled by getTplPreviewContent)
  1. cutstr() (core/system.php):
  • Replaced if/elseif/elseif chain for $end selection with match expression

Benefits:

  • ad_save() and preview() are now pure data-passthrough wrappers
  • Eliminates duplicate HTML logic between system.php and the new helpers
  • cutstr() match expression is more idiomatic PHP 8+

Technical notes:

  • preview() signature change: $textc → $field; all call sites already pass field strings
  • No behaviour change for any of the three functions
Refactor: add shared template helper functions to core/helpers.php
Автор: Eduard Laas | Дата: 17:40 02.04.2026

Introduce six reusable helper functions that build admin and frontend HTML from prepared data structures and canonical fragments, replacing inline HTML construction scattered across modules.

Core changes:

  1. getTplAddFieldRows() (core/helpers.php):
  • Parses module field definitions from $conf['fields'][$mod]
  • Returns array of ['label_html', 'field_html'] rows for add-div layout
  • Dispatches to add-field fragment for text(1), textarea(2), select(3)
  • Delegates to getTplAddDateTime() for date(5) and datetime(4) types
  1. getTplAddDateTime() (core/helpers.php):
  • Renders a date/datetime-local picker paired with a hidden canonical value field
  • Uses static counter for unique IDs across multiple instances on one page
  • Returns add-datetime fragment HTML
  1. getTplRefreshTimeSelect() (core/helpers.php):
  • Renders a fixed-interval <select> (15m/30m/1h/5h/10h/24h)
  • Uses refresh-select-time fragment; defaults to 3600 when value is empty/zero
  1. getTplViewFieldRows() (core/helpers.php):
  • Renders read-only labelled rows from field string + module field definitions
  • Applies filterMarkdown+filterReplaceText for textarea(2) type fields
  • Returns view-field fragment HTML per visible field
  1. getTplPreviewContent() (core/helpers.php):
  • Assembles full preview block: title, body_a, body_b, field rows
  • Uses getHtmlPart('preview-content') for page-level layout
  • Returns empty string when all inputs are blank
  1. getTplSaveAction() (core/helpers.php):
  • Renders save/delete/preview <select> + hidden op + submit button
  • Accepts name, valu, op, noprev keys; conditionally includes delete/preview options
  • Uses save-action + save-action-item fragments

Benefits:

  • Centralises HTML assembly logic; modules only supply data arrays
  • Eliminates repeated inline HTML for date pickers, field loops, and save controls
  • Consistent escaping and fragment usage across all call sites

Technical notes:

  • getTplAddFieldRows() uses filterFields() to normalise array field input
  • getTplAddDateTime() relies on add-datetime fragment with hidden_id/picker_id pair
  • getTplSaveAction() replaces the ad_save() inline HTML builder in core/system.php
Refactor: add canonical fragments and replace legacy template set
Автор: Eduard Laas | Дата: 17:40 02.04.2026

Introduce a complete set of shared, reusable admin fragments that replace the old module-specific ones, and rename preview pages to preview-content across all four themes to align with the new getTplPreviewContent() API.

Core changes:

  1. New admin fragments (templates/admin/fragments/):
  • input.html — generic <input> with optional maxlength, placeholder, required
  • label-hint.html — label with inline hint text
  • edit-tip.html — action menu with view/edit/delete links (replaces inline action builders)
  • table.html — full <table> wrapper with optional head array or raw head_html
  • table-row.html — <tr> wrapper with optional class/attr
  • table-row-content.html — content module table row cells (id, title, date, reads, status, actions)
  • title-tip-item.html — single item inside a sl_tip nav tooltip
  • view-field.html — labelled read-only field for preview pane
  • add-field.html — dynamic form field (text, textarea, select) for module field definitions
  • add-div.html, add-div-row.html, add-div-item.html, add-div-hidden.html — add-form layout
  • add-datetime.html — date/datetime picker with hidden canonical value field
  • refresh-select-time.html — interval select (15m…24h)
  • save-action.html, save-action-item.html — save/delete/preview select + submit button
  • navi-tabs-wrap.html, config-div-hidden.html — supporting layout helpers
  1. Updated fragments:
  • config-div.html — hidden inputs now rendered via {% for item in hidden %} loop
  • title-tip.html — supports content_html, content, items array, and label_text modes
  1. Deleted legacy fragments:
  • admin-input.html, admin-hint-label.html — replaced by input.html, label-hint.html
  • admin-table.html, admin-table-row.html — replaced by table.html, table-row.html
  • admin-content-add-rows.html, admin-content-list-row.html — replaced by generic equivalents
  1. Preview pages/partials renamed across all themes (admin, default, lite, simple):
  • preview.html → preview-content.html (page + partial)
  1. CSS additions (system.css for admin/default/lite, theme.css for simple):
  • Add .sl-preview-, .sl-add-, .sl-save-action styling for new fragment layouts

Benefits:

  • Eliminates module-specific fragment duplication across admin and content modules
  • Uniform fragment API (array-based data) matches PHP helper function signatures
  • preview-content name now matches getTplPreviewContent() and getHtmlPart() call sites

Technical notes:

  • Deleted fragments had no remaining callers after prior refactor commits
  • config-div.html hidden loop requires array of ['nameattr', 'valueattr'] maps
  • title-tip.html is backward-compatible: all four variable modes are supported
Refactor: rename admin helpers to getTpl* and purge misplaced fragments
Автор: Eduard Laas | Дата: 00:14 02.04.2026

Rename legacy admin helper functions to follow the getTpl* naming convention across core/admin.php, completing the function-rename pass started in previous refactor commits. Remove ~210 frontend fragment files that were erroneously tracked under templates/admin/fragments/.

Core changes:

  1. Function renames (core/admin.php):
  • adminFlagBox() → getTplAdminFlagBox()
  • adminDeleteAction() → getTplDeleteAction()
  • adminLinkAction() → getTplLinkAction()
  • adminAjaxAction() → getTplAdminAjaxAction()
  • adminTitleTip() → getTplAdminTitleTip()
  • adminTitleTipLabel() → getTplAdminTipLabel()
  • adminNoteLabel() → getTplAdminNoteLabel()
  • adminMoveControls() → getTplAdminMoveControls()
  • adminMenuItems() → getTplAdminActionMenu()
  • adminCategoryRow/Table → getTplAdminCategoryRow/Table()
  • adminBlockRow/Table → getTplAdminBlockRow/Table()
  • adminFilesRow/Table → getTplAdminFilesRow/Table()
  • adminFilePreview() → getTplAdminFilePreview()
  • adminDangerText() → getTplAdminDangerText()
  1. Module fix (admin/modules/newsletter.php):
  • Added missing $token to global declaration
  1. Fragment cleanup (templates/admin/fragments/):
  • Removed ~210 frontend fragments (account/, forum/, shop/, voting/, editor/, media/, whois/*, etc.) that do not belong in admin/fragments/
  • Modified link-btn.html (minor tweak)

Benefits:

  • All admin rendering helpers now share the getTpl* prefix — consistent API
  • Removes dead template files that were never loaded by the admin layer
  • Reduces template directory noise by ~210 files

Technical notes:

  • All call sites in core/admin.php updated atomically — no external callers
  • Deleted fragments were not referenced by admin code; frontend uses its own template directories
01.04.2026
Refactor: migrate all admin modules to array-based row descriptors
Автор: Eduard Laas | Дата: 23:49 01.04.2026

Replace string-concatenation pattern ($rows .= getTplAdminFormRow(...)) with array descriptors ($rows[] = ['label_html' => ..., 'field_html' => ...]) across all 18 admin modules; getTplAdminRowsTable() now renders arrays internally, eliminating per-module fragment rendering calls.

Core changes:

  1. Row rendering (core/helpers.php):
  • getTplAdminRowsTable() extended to accept array|string
    • array items dispatched to admin-form-row / admin-form-wide / raw_html
    • string path preserved for backward compat
  1. Admin modules (admin/modules/*.php):
  • All 18 modules converted: $rows string → $rows[] array descriptors
  • adminInfoRow() call sites renamed to getTplAdminInfoRow() (core/admin.php)
  1. Fragments (templates/admin/fragments/):
  • Added: config-div, config-div-row, config-div-item, config-div-content
  • Added: admin-menu-item, admin-lang-switch-item, bootstrap-icon
  • Removed: 24 obsolete per-module inline fragments (security, database, messages, newsletter, referers, scheduler, lang, uploads, form-conf, etc.)
  1. CSS (templates/admin/assets/css/system.css):
  • +96 lines of admin UI styles supporting new fragment layout

Benefits:

  • Removes ~330 lines of net HTML/PHP, centralises row rendering in one helper
  • Obsolete one-off fragments eliminated, reducing template surface area
  • Consistent data-driven API for admin form construction across all modules

Technical notes:

  • getTplAdminRowsTable() remains backward compatible with string input
  • Deleted fragments were not referenced anywhere outside their own modules
  • No changes to public-facing templates or user-facing logic
Refactor: update module call sites to use auto-token CSRF and canonical fragments
Автор: Eduard Laas | Дата: 15:29 01.04.2026

Remove manual CSRF token passing from all admin module actions and forms now that checkSiteToken() auto-reads the token from the request context. Update getHtmlFrag() calls to use renamed fragments and canonical variable keys.

Core changes:

  1. CSRF token removal from forms and action guards (admin/modules/*.php):
  • Removed getSiteToken() calls and hidden token inputs from all module forms
  • Removed explicit checkSiteToken(getVar(...)) guards from save/delete handlers
    • Token validation still occurs inside checkSiteToken() via getRequestToken()
  • Affected modules: admins, categories, comments, database, favorites, fields, groups, lang, messages, modules, newsletter, privat, referers, replace, scheduler, statistic, template, uploads
  1. Fragment name updates (admin/modules/*.php, core/admin.php):
  • admin-action-link → comment-action-link
  • admin-action-ajax → comment-action-ajax (via getTplAdminAjaxAction)
  • Added required class/target keys for comment-action-link calls
  1. Core admin updates (core/admin.php):
  • getAdminBlockList(): add optional $token string param (unused, reserved)
  • getAdminInfo(): remove manual token check; remove token hidden input from form
  1. System bootstrap (core/system.php):
  • Minor alignment/cleanup with no behavioral change

Benefits:

  • Eliminates 30+ boilerplate token-extract-and-check blocks across modules
  • CSRF protection remains active via centralized getRequestToken()
  • Consistent fragment naming across all call sites

Technical notes:

  • Implicit CSRF validation: token must arrive via header or POST/GET param
  • No change to token generation or scope logic
  • admin/index.php: CRLF→LF line ending normalization only
Refactor: canonicalize template variable keys and consolidate fragments
Автор: Eduard Laas | Дата: 15:28 01.04.2026

Rename all template variable keys in helper functions to canonical single-word names and eliminate redundant fragment files by merging them into existing general-purpose fragments with conditional params.

Core changes:

  1. Helper variable key renames (core/helpers.php):
  • getTplAdminFlagBox: css_class→class, label_text→label
  • getTplAdminNoteLabel: switches to span-btn fragment; label_text→label, title_attr→title
  • getTplAdminTitleTip: switches to title-tip fragment (was admin-title-tip)
  • getTplAdminAjaxAction: switches to comment-action-ajax fragment (was admin-action-ajax)
  • getTplAdminTabOpen: list_class→class, list_id→id
  • getTplAdminTabLink: is_selected→selected, attrs removed (unused)
  • getTplAdminInfoCount: count_text→count, css_class→class
  • getTplAdminTableHead: th-nosort merged into th with nosort=true param
  1. Fragment deletions (all four themes: admin, default, lite, simple):
  • Deleted: admin-action-ajax.html (replaced by comment-action-ajax)
  • Deleted: admin-action-link.html (replaced by comment-action-link)
  • Deleted: admin-note-label.html (replaced by span-btn)
  • Deleted: admin-title-tip.html (replaced by title-tip)
  • Deleted: th-nosort.html (merged into th with nosort flag)
  • Updated: th.html to handle nosort conditional rendering
  • Updated: admin-security-*.html to match new variable key names

Benefits:

  • Fewer fragment files to maintain across themes
  • Consistent single-word key naming convention throughout helpers
  • th fragment handles both sort and no-sort columns via one template

Technical notes:

  • Fragment renames are breaking changes for any direct getHtmlFrag() callers
  • All call sites in admin modules updated in the following commit
  • No functional HTML output changes
Refactor: add getRequestToken() and smart CSRF token resolution
Автор: Eduard Laas | Дата: 15:28 01.04.2026

Extend the CSRF layer with a dedicated token-reader and a smarter checkSiteToken() that auto-resolves the token from the request context, eliminating the need for callers to pass the token explicitly.

Core changes:

  1. CSRF token reader (core/security.php):
  • Add getRequestToken(): reads token from X-CSRF-Token header, X-XSRF-Token header, POST param, GET param, $_REQUEST fallback
    • Priority: header > POST > GET > $_REQUEST
    • Trims whitespace, returns empty string when absent
  1. CSRF validator (core/security.php):
  • Change checkSiteToken() signature: $tok defaults to '' (auto-read)
    • If $tok is empty, calls getRequestToken() automatically
    • Adds cross-scope fallback: non-ajax scopes also accept global 'ajax' token

Benefits:

  • Callers no longer need to extract and pass the token manually
  • HTMX / fetch requests sending X-CSRF-Token header work out of the box
  • One central place for all token extraction logic

Technical notes:

  • Backward compatible: callers that still pass $tok explicitly continue to work
  • Scope fallback is one-way: ajax-scoped checks do not accept scope-specific tokens
Хотите опробовать SLAED CMS в действии?
Идеи и предложения
Обратная связь
Подтверждение

Поделиться
QR-код

Предварительный просмотр