Reworks GitHub-mode changelog search to filter the cached window in memory
instead of re-fetching GitHub per query, adds search-term highlighting,
canonical filter URLs, and the system-standard word query parameter.
Core changes:
- In-memory search/filter (modules/changelog/common.php):
- Add chlogFilterCommits() applying search (subject+body), author (name+email) and date-range filters in PHP over the cached window
- chlogLoadCommits() now fetches the unfiltered GitHub window once and filters locally — no per-term GitHub requests or per-term cache files
- Report the window size as total so "Всего/Отфильтровано" show distinct counts
- Search highlighting (modules/changelog/common.php, templates):
- Highlight the search term in commit subject and body via filterTextHighlight()
- Switch the subject slot to raw output ({{{ }}}) so highlight markup renders; this also fixes prior double-escaping of subjects
- Clean filter URLs (modules/changelog/common.php, index.php, admin/index.php):
- Add chlogCanonicalRedirect() that strips empty GET params (author=&datefrom=…) only when present, leaving clean links untouched
- Rename the search parameter from
searchto the system-canonicalwordacross form, pagination and redirect - Hide file filter in GitHub mode (templates, controllers):
- The GitHub commits list API returns no per-commit files, so the file filter is hidden when source=github
- Docs (modules/changelog/admin/info/ru.md):
- Document the caching/window model, search scope, filters and edge cases
Benefits:
- Search costs zero extra GitHub requests and is instant over the window
- Shareable, bookmarkable filter URLs without empty parameters
- Correct counters and properly escaped, highlighted output
Technical notes:
- Internal filter key stays
search; only the public query parameter isword - Filtering is window-scoped in GitHub mode; git mode keeps server-side git log filtering
- No CSRF token on the read-only GET search form, matching the search module
Reworks the GitHub changelog cache to fetch only new commits via ETag revalidation instead of re-downloading the full window on every cache expiry, and raises the commit limit ceiling from 500 to 2000.
Core changes:
- Incremental GitHub fetch (modules/changelog/common.php):
- Add chlogReadCache() returning cached data ignoring TTL, so a stale cache can be revalidated instead of discarded
chlogGhFetch() now revalidates with If-None-Match and walks pages only until a known commit SHA, prepending new commits
- 304 Not Modified returns the cache and refreshes TTL at zero cost
- full rebuild only on empty cache or filtered queries
- Split HTTP into chlogGhUrl/chlogGhRequest/chlogGhResult; store page-1 ETag in cache meta
- Derive page count from the requested limit (ceil(limit/100)) so the configured value is actually reachable
- Commit limit ceiling (modules/changelog/common.php, admin/index.php):
- Introduce CHLOG_MAX_LIMIT = 2000 and replace the hardcoded 500 clamps
- Apply the constant to the config form max attribute and save clamp
- Docs (modules/changelog/admin/info/ru.md):
- Update pagination range to 10-2000
Benefits:
- Hourly refresh costs one conditional request (often 304) instead of a full multi-page re-download
- Repositories with up to 2000 commits load fully; the 500-commit cap is removed
- Shared HTTP layer is reusable and easier to maintain
Technical notes:
- Cache meta gains a page-1 ETag; old caches upgrade on first revalidation (no etag -> 200 -> etag stored)
- Sliding-window semantics preserved: newest kept, oldest trimmed at limit
- Incremental path applies to the unfiltered GitHub view; filtered/search and git mode are unchanged
Removes the explicit horizontal overflow behavior from the admin table shell. The table minimum width rule remains in place while the surrounding layout can control overflow naturally.
Core changes:
- Admin theme stylesheet (templates/admin/assets/css/theme.css):
Removed the .sl-table-shell overflow rule
- Drops forced horizontal scrolling on the shell
- Keeps table min-width behavior unchanged
Benefits:
- Reduces redundant admin table styling
- Lets parent layouts control scrolling behavior
- Keeps the stylesheet slightly simpler
Technical notes:
- No template or JavaScript changes
- No runtime behavior changes outside CSS layout
- Backward compatibility depends on existing parent layout overflow handling
Moves changelog JSON cache files into a dedicated cache subdirectory. This keeps module data separate from page and asset cache files.
Core changes:
- Changelog cache storage (modules/changelog/common.php):
Reads cache entries from storage/cache/changelog
- Keeps the existing sha1 key format
- Preserves TTL and payload validation behavior
Writes cache entries into the changelog namespace
- Creates the module cache directory when needed
- Keeps atomic temp-file writes unchanged
Benefits:
- Reduces cache root clutter
- Aligns module cache data with the namespaced cache layout
- Makes admin cache reporting easier to understand
Technical notes:
- Existing root-level changelog JSON files are not migrated
- Cache keys and response metadata format are unchanged
- No database schema changes
Adds admin-facing controls and documentation for the namespaced cache layout. The configuration screen can now report cache files by namespace and clear the full cache tree through an explicit action.
Core changes:
- Cache configuration admin (admin/modules/config.php):
Added detailed cache directory counts and total size reporting
- Skips protected .htaccess and index.html marker files
- Shows namespace-level cache distribution
Added a CSRF-protected clear-cache action
- Uses Cache::deleteAll() for full cache tree cleanup
- Keeps the action visible only on the optimization tab
- Scheduler and help text (config/scheduler.php, admin/info/.md, admin/lang/.php):
- Registered a disabled Page cache cleanup system job
- Updated cache labels and Russian help documentation for the new cache layout
- Added translations for the clear-cache action
- Admin tabs (templates/admin/assets/js/tabs.js):
- Supports tab-scoped auxiliary action visibility
- Keeps the cache clear button tied to the optimization tab
Benefits:
- Makes cache storage and cleanup visible from admin tools
- Enables scheduled cache cleanup without custom code
- Keeps destructive cache actions scoped and explicit
Technical notes:
- The scheduler job is disabled by default
- Protected marker files are not counted or deleted
- No database schema changes
Introduces a dedicated Cache class and migrates frontend cache delivery away from legacy helpers. Page HTML and asset bundles now use namespaced cache paths and the new validated asset route.
Core changes:
- Cache class (core/classes/cache.php):
Added path, hash, freshness, body, cleanup, and header helpers
- Validates cache type, extension, and hex hash inputs
- Writes cache files atomically with LOCK_EX and rename
- Centralized public/no-store response headers
- Runtime cache flow (core/system.php, index.php, admin/index.php):
Replaced setCache(), setCss(), and setScript() usage
- Adds page cache eligibility and theme/language-aware page hashes
- Stores HTML under storage/cache/pages/html
Migrated CSS and JS bundles to storage/cache/pages/assets
- Delivers bundles through index.php?go=asset&file=<hash>&type=css|js
- Preserves config/header.php script injection behavior
Benefits:
- Separates HTML and asset cache storage by namespace
- Removes legacy md5 text cache delivery routes
- Improves reliability with atomic writes and stricter asset validation
Technical notes:
- Old go=css and go=script routes are removed
- Direct storage/cache web access remains blocked
- Backward compatibility with old storage/cache/*.txt is intentionally not provided
Refactors the voting view renderer and keeps moderator actions separate from poll result items. This prevents the admin action menu from replacing the visible voting options or result rows.
Core changes:
- Voting view renderer (core/system.php):
Simplified voting query and early-return flow
- Keeps multilingual and forced-result behavior explicit
- Preserves existing voting alerts and widget template usage
Separates poll item rendering from moderator action links
- Avoids overwriting the rendered voting item list
- Keeps result, vote, poll, and comment controls intact
Benefits:
- Restores visible voting results for moderator/admin views
- Improves maintainability of the voting renderer
- Reduces branching without changing the public widget contract
Technical notes:
- No database schema changes
- No template key changes
- Backward compatibility preserved for positional calls to getVotingView()
Complete the performance/debug panel styling across admin and lite, unify the lite spacing scale through tokens, and remove unused CSS classes and custom properties. These edits are interleaved within the shared theme/base stylesheets and form one cohesive CSS housekeeping pass.
Core changes:
- Debug panel (theme.css, base.css, debug-section.html):
- Colored section tones, bug icons before error lines, progress-bar parity
- Tokenized legend/fieldset padding/margin/border for admin and lite
- Render tone class in the lite debug-section fragment
- Lite spacing tokenization (lite/theme.css):
Map padding/margin/gap 4/6/8/12px to --sl-space-xs/sm/md/lg
- Negative values and non-scale lengths left intact
- Aligns the lite spacing scale with admin
- Dead CSS removal (admin/lite theme.css and base.css):
- Drop unused classes .sl-bbup-panel and .sl-forum-table-head
Drop unused custom properties (accent-soft, changelog-bg, monitor-*, loading-center, hover--down, admin-tight-, shadow duplicates)
Benefits:
- Consistent admin/lite debug panel and spacing scale
- Less redundancy, smaller stylesheets
Technical notes:
- Presentation only, no markup contract changes
- Verified: no unused --sl-space tokens remain, brace balance intact
Render each recent error time in getDebugErrors() via date_create()->format(_TIMESTRING) instead of the raw stored string, so the debug panel shows dates in the configured system format and keeps the embedded timezone offset.
Core changes:
- Debug error list (system.php):
Parse row time with date_create() and format with _TIMESTRING
- Guard empty time values so no stray leading space is emitted
- Keep channel, message and optional URL layout unchanged
Benefits:
- Consistent, localized timestamps in the performance/debug panel
- Avoids timezone shift from re-parsing with the server default
Technical notes:
- Presentation only, no storage/format change
- Backward compatible