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

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

Всего: 888 Доступных коммитов | Отфильтровано: 888 Коммиты | Страница: 1 / 89
Сегодня (17.06.2026)
Chore: relicense from GPL-3.0 to MIT
Автор: Eduard Laas | Дата: 14:41 17.06.2026

Relicense SLAED CMS from GPL-3.0 to MIT and remove the runtime license lock. The project author relicenses their own work, so attribution enforcement is dropped and the obfuscated copyright config is retired.

Core changes:

  1. License text and metadata (LICENSE, composer.json, package.json, README.md):
  2. Replace the GPL-3.0 text with the MIT license and update license fields/badges
  3. Source headers (~396 .php, .htaccess, setup/sql/.sql):
  4. Change "# License: GNU GPL 3" to "# License: MIT"
  5. Normalize the copyright line to "# 2005 - 2026 SLAED"
  6. Runtime license lock removal (core/system.php, setup/index.php):
  7. Remove the _NO_LICENSE admin and setup lock checks
  8. Drop the lic_h/lic_f config keys and their forced rewrite on config save
  9. Replace the four footer builders with a single getLicenseHtml()
  10. Decouple the legacy md5 password salt into a frozen PASS_SALT constant
  11. Remove the now-dead _NO_LICENSE constant from all locale files
  12. Documentation (README, CONTRIBUTING, SECURITY, UPGRADING, CODE_OF_CONDUCT, .rules/architecture.md):
  13. Replace GPL references with MIT

Technical notes:

  • Legacy md5 logins keep working through the frozen PASS_SALT value
  • Historical news seed data in setup/sql/insert.sql is left intact on purpose
  • Third-party code under plugins and vendor is not touched
Style: align and fit the footer license line
Автор: Eduard Laas | Дата: 14:41 17.06.2026

Adjust footer CSS so the MIT license line reads cleanly after the relicense changed the text length.

Core changes:

  1. Site footer (templates/lite/assets/css/theme.css):
  2. Center .sl-copyright/.sl-license and balance the wrapped lines
  3. Admin login footer (templates/admin/assets/css/theme.css):
  4. Reduce .sl-admin-login-copyright font-size so the line fits one row on desktop and narrow widths

Benefits:

  • Footer license stays readable and centered without clipping
Refactor: key page cache by CMS version instead of a static tag
Автор: Eduard Laas | Дата: 12:43 17.06.2026

Replace the hardcoded 'pages-v1' prefix in the page-cache key with the CMS version, so every SLAED release automatically invalidates stale page caches on update without a developer remembering to bump a magic string or admins running a manual cache wipe.

Core changes:

  1. Cache key composition (core/system.php):
  2. Use $conf['version'] as the first hash part in getPageHash() instead of 'pages-v1'
  3. Add $conf to the function globals and fall back to an empty string when unset
  4. Update the function comment to list the real identity parts

Benefits:

  • Page cache regenerates lazily after every version upgrade, fleet-wide
  • No buried version literal to maintain by hand

Technical notes:

  • Content edits keep invalidating through the epoch counter; the version part covers code/release level invalidation

  • Regeneration is lazy per request; old files are reclaimed by the GC sweep
Feature: expose and harden cache_l single-flight toggle for production
Автор: Eduard Laas | Дата: 11:17 17.06.2026

Surface the single-flight page-cache rebuild as an admin setting and harden the runtime so it is safe to enable on production sites. Default stays off; the behavior itself was added in the prior page-cache overhaul.

Core changes:

  1. Admin toggle (admin/modules/config.php):
  2. Add a yes/no control with hint for cache_l in the cache settings block
  3. Persist cache_l from the config save handler
  4. Read with a '0' fallback so the form is safe before local.php is regenerated
  5. Localized strings (admin/lang/de.php, en.php, fr.php, pl.php, ru.php, uk.php):
  6. Add _CACHELOCK label and _CACHELOCKINFO hint across all six languages
  7. Phrase the label per locale; keep the English "single-flight" term only in en
  8. Runtime hardening (core/system.php, core/classes/cache.php):
  9. Skip serving an empty stale body so waiting requests never get a blank page
  10. Keep held rebuild locks fresh with touch() so the sweeper leaves them alone
  11. Garbage-collect stale lock files via deleteStale('locks') and a SWEEP list
  12. Documentation (admin/info/config/ru.md):
  13. Describe cache_l as recommended for high-traffic projects, off by default

Benefits:

  • Admins can enable single-flight rebuilds without editing config files
  • No blank pages under concurrent expiry; lock directory stays bounded

Technical notes:

  • cache_l default lives in config/global.php and is read via empty()
  • Lock files live under storage/cache/pages/locks and are swept by the GC job
  • Cold-start (no stale file yet) is not de-duplicated by design; single-flight only applies once a previous version exists

Perf: overhaul page-cache key, headers, GC, invalidation and single-flight
Автор: Eduard Laas | Дата: 09:29 17.06.2026

Rework the full-page HTML cache so it scales for high traffic: normalize the cache key, serve correct browser/CDN headers, retain files by age, invalidate on content change, and collapse concurrent rebuilds. Generation timing now shows on cached responses without baking a stale value into the stored file.

Core changes:

  1. Generation timing on cached pages (core/system.php):
  2. Replace the per-render time string with a GEN_MARK sentinel baked into the body
  3. Add getTimedHtml() to swap the marker for live timing right before output, or strip it when generation timing (db_t) is off

  4. Inject on both the live echo and the page-cache hit path
  5. Cache key normalization (core/classes/cache.php, core/system.php):
  6. Add Cache::filterCacheUrl() to drop tracking parameters (utm_*, gclid, yclid, fbclid, _openstat) and order query groups while preserving array order

  7. Feed it into getPageHash() so equivalent URLs map to one cache file
  8. Browser/CDN headers and conditional GET (index.php, core/classes/cache.php, core/system.php):
  9. Replace the premature public header in index.php with a safe no-store default
  10. Send public Cache-Control plus a real Last-Modified (file mtime) only for cacheable guest pages, and answer If-Modified-Since with 304

  11. Add Cache::checkNotModified(); suppress browser caching while db_t is on so the timing line never goes stale

  12. Retention-based garbage collection (core/classes/cache.php, core/system.php, admin/info/config/ru.md):
  13. Add Cache::deleteStale() to remove page-cache files older than max(cache_tСмайл - 24, 86400)
  14. Switch addCacheGcTask() from a full wipe to the retention sweep
  15. Document that cache_t is HTML freshness, cache_d is browser max-age, and GC retention derives from cache_t

  16. Global epoch invalidation (core/classes/cache.php, core/system.php, core/classes/pdo.php, index.php):
  17. Add Cache::getEpoch()/addEpoch() with a once-per-request flock bump; include the epoch in getPageHash() so a bump invalidates every cached page

  18. Bump from the DB layer on successful state-changing SQL under ADMIN_FILE, which covers all admin content modules through one hook

  19. Bump on frontend comment, post and voting submissions
  20. Single-flight rebuild (core/classes/cache.php, core/system.php, config/global.php):
  21. Add Cache::getRebuildLock()/setRebuildFree() using a non-blocking flock with shutdown release; serve the stale file when another worker already rebuilds

  22. Gate behind the new cache_l config flag, default off

Benefits:

  • Tracking-only URL variants share one cache file instead of fragmenting it
  • Cached pages can be revalidated by the browser/CDN with 304 instead of full sends
  • Disk stays bounded; content edits no longer wait up to cache_t to refresh
  • Concurrent expiry no longer triggers a thundering herd of full rebuilds

Technical notes:

  • New config flag cache_l (default 0); cache_b now also fixes public headers on non-cacheable HTML

  • Epoch and lock files live under storage/cache/pages; deleteStale and deleteAll preserve .htaccess and index.html

  • Single-flight serves stale only when cache_l is enabled; otherwise behavior is unchanged

Вчера (16.06.2026)
Style: add user actions menu trigger and align comment/forum post headers
Автор: Eduard Laas | Дата: 16:00 16.06.2026

Render the consolidated user actions menu as a popover trigger and rework the comment and forum-post header layout for symmetric, browser-independent alignment.

Core changes:

  1. Popover fragment (templates/lite/fragments/popover.html, templates/admin/fragments/popover.html):
  2. Add is_user_menu flag: user-menu trigger class and bi-menu-button-wide-fill icon
  3. Wrap items/view/edit/delete menu entries in li for valid list markup
  4. Comment header (templates/lite/fragments/comment.html, templates/lite/assets/css/theme.css):
  5. Place the user and editor gear cluster before the post number
  6. Lay out the header on a 1fr auto 1fr grid: fixed-width author column, meta aligned from the left, action cluster on the right

  7. Forum post (templates/lite/fragments/forum-post.html, templates/lite/assets/css/theme.css):
  8. Move the user menu into the meta cluster before the post number
  9. Flex the meta bar and drop its fixed height so date and cluster never overlap the post body

  10. Center the nickname plate with flexbox for consistent cross-browser rendering
  11. Gear styling (templates/lite/assets/css/theme.css):
  12. User gear shares the editor gear styling (grey, brand-blue on hover)

Benefits:

  • Symmetric, consistent post headers regardless of nickname length
  • Valid li/a menu markup in both lite and admin themes

Technical notes:

  • Template markup and CSS only; no behavior change
Refactor: consolidate popover action-menu builders into getActionMenu
Автор: Eduard Laas | Дата: 15:59 16.06.2026

Replace the duplicated action-menu builders (add_menu, getUserMenu and two inline $actionMenu closures) with a single getActionMenu() helper and route comment, forum, private-message and clients menus through it.

Core changes:

  1. Action-menu helper (core/system.php):
  2. Add getActionMenu(array $items, bool $user = false)

    • Wraps each prepared HTML item in list-item and builds the popover
    • Editor gear by default, user menu (is_user_menu, _USER) when $user is true
  3. Remove add_menu() and getUserMenu()
  4. Replace the inline implode(list-item) menu builds in getComments and getVotingView with getActionMenu()

  5. Comment author menu (core/system.php):
  6. Build the user actions menu (personal/message/profile/site) and pass it as btn_user instead of separate btn_personal/btn_pm/btn_profile/btn_web

  7. Forum (modules/forum/index.php):
  8. Fold author actions plus quote-reply into the user menu via getActionMenu(..., true); route the editor menu through getActionMenu

  9. Private messages (core/user.php):
  10. Remove both $actionMenu closures; use getActionMenu() for every menu
  11. Build the PM author menu (profile/site) via getActionMenu(..., true)
  12. Clients (modules/clients/index.php):
  13. Route the row action menu through getActionMenu(explode('||', ...))

Benefits:

  • One menu builder instead of four near-duplicates
  • Consistent user-menu contract across all front-end modules

Technical notes:

  • Behavior preserved; popover fragment items_html API unchanged
Эта неделя (15.06.2026)
Perf: rework final HTML output normalizer for readable, fast view-source
Автор: Eduard Laas | Дата: 16:21 15.06.2026

Replace the cache-only getCompressHtml() with a single getOutputHtml() that normalizes the assembled page in setFoot() before echo and before page-cache write, so users always receive processed HTML even when page-cache is off.

Core changes:

  1. Output normalizer (core/system.php):
  2. Add getOutputHtml(string $html, bool $full = false) replacing getCompressHtml()

    • Protect script/style/pre/code/textarea bodies and comments first, exposing
only the opening tag so multiline <script src> tags get normalized too
  • Squeeze multiline class lists and multiline tags to a single line
  • Keep the template's own indentation; only drop blank lines from false {% if %}
  • full=true keeps the legacy maximal-compression path and strips non-IE comments
  1. Output and cache wiring (core/system.php):
  2. Echo the readable (full=false) output to the user on every request
  3. Compress (full=true) only the copy written to storage/cache/pages/html when cache_c=1, restoring the original cache-only compression contract

Benefits:

  • Heavy parsing runs only on the few multiline matches, not on every tag
  • Real homepage normalization measured at ~0.32 ms vs ~4.3 ms for a tokenizer
  • view-source has no multiline tags, no multiline class, no giant glued lines

Technical notes:

  • storage/cache/templates keeps compiled PHP only; final HTML is never written there
  • Output is idempotent; script/style/pre/code/textarea bodies stay byte-for-byte
  • Behavior change: live echo is now normalized for readability on every request; with cache_c=1 a cache hit still serves compressed HTML while a miss serves readable HTML, matching the previous cache-only compression semantics

Style: Update lite theme controls and spacing
Автор: Eduard Laas | Дата: 15:03 15.06.2026

This commit refines lite theme layout spacing, rating control presentation, and floating feedback links. It removes the separate contact-block partial now that both layouts render the feedback link directly.

Core changes:

  1. Theme spacing and controls (theme.css, base.css):
  2. Add a shared grid gap variable and apply it to card and post grids.

    • Adjust full-view width and metadata alignment rules.
    • Refine rating badges, star hover preview, and mobile metadata stacking.
  3. Update floating idea and feedback tabs to grow from the screen edge.

    • Uses sideways writing mode where supported.
    • Avoids edge gaps during hover and focus states.
  4. Lite layouts (app.html, home.html):
  5. Render the feedback tab directly in both layouts.
  6. Keep the layout output independent of a separate partial payload.
  7. Theme foot variables (index.php, contact-block.html):
  8. Remove contactblock generation from theme foot variables.
  9. Delete the unused contact-block partial.

Benefits:

  • Reduces one template indirection in the lite footer path.
  • Improves consistency of grid spacing and floating controls.
  • Keeps rating UI states clearer for interactive and static displays.

Technical notes:

  • No database or storage changes.
  • Template output changes are limited to the lite theme.
  • Backward compatible for existing theme data except the removed internal contactblock variable.
Refactor: Consolidate rating ajax workflow
Автор: Eduard Laas | Дата: 15:03 15.06.2026

This commit unifies rating rendering and voting request handling so star and like controls share one data contract. It also switches live rating actions to POST requests with CSRF headers.

Core changes:

  1. Rating rendering helper (core/helpers.php):
  2. Collapse duplicate star and like rendering branches into one shared template payload.

    • Builds a common vote query and live-state wrapper.
    • Provides CSRF token data for live HTMX requests.
  3. Rating request handler (core/system.php):
  4. Replace repeated module-specific branches with a table and field map.

    • Keeps duplicate-vote checks by user, ip, and cookie.
    • Persists votes through prepared statements and returns the refreshed rating block.
  5. Rating fragments (rating-bar.html, rating-like.html):
  6. Use the shared vote_query payload for live interactions.

    • Sends votes with hx-post instead of hx-get.
    • Adds CSRF headers to live rating containers.

Benefits:

  • Removes duplicated rating control rendering logic.
  • Makes rating vote handling easier to audit and extend.
  • Aligns state-changing rating actions with POST semantics.

Technical notes:

  • No database schema changes.
  • The template payload for rating controls is updated.
  • Backward compatible for existing persisted rating values.

Всего: 888 на 89 страницах по 10 на каждой странице

1 2 3 4 5 6 7 8 9 10 89

Хотите опробовать SLAED CMS в действии?

Идеи и предложения
Обратная связь