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

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

Всего: 899 Доступных коммитов | Отфильтровано: 899 Коммиты | Страница: 6 / 90
03.06.2026
Fix: run ALTCHA proof-of-work in a self-hosted worker (CSP-safe, no blob)
Автор: Eduard Laas | Дата: 13:43 03.06.2026

Switch the captcha to the ALTCHA external widget build so the proof-of-work runs in a self-hosted same-origin Worker instead of a blob: Worker. This makes the captcha work under a strict Content-Security-Policy (default-src 'self') out of the box, with no per-site CSP change required.

Core changes:

  1. Vendored ALTCHA assets (plugins/altcha/):
  2. Replace the bundled build with the external build altcha.min.js (no blob worker)
  3. Add altcha-sha.js (official SHA-256 PoW worker) and altcha.css

    • Files taken verbatim from altcha@3.0.11 dist (external + workers/sha)
  4. Bootstrap (plugins/altcha/altcha-init.js):
  5. Import the external build and register the SHA-256 worker through $altcha.algorithms.set(...) with a same-origin worker URL

  6. Load altcha.css once and register localized strings via $altcha.i18n
  7. Provider (core/classes/captcha.php):
  8. Document the external-build / self-hosted-worker contract

Benefits:

  • Captcha works under strict CSP on every installation without server changes
  • No blob: workers; proof-of-work stays same-origin

Technical notes:

  • Verified in a real browser under the production CSP (default-src 'self' ...): verified state, same-origin worker, zero CSP violations

  • Backward compatible with the existing SHA-256 challenge/verify (HMAC) logic
Chore: enable the sitemap scheduler job
Автор: Eduard Laas | Дата: 12:37 03.06.2026

Activate the built-in sitemap job (active 0 -> 1); no secret involved.

Fix: adapt ALTCHA captcha to widget v3 and localize it
Автор: Eduard Laas | Дата: 12:37 03.06.2026

The vendored ALTCHA widget is v3.0.11, whose API differs from the previous integration: it reads the challenge attribute (not challengeurl), hides footer/logo via configuration, and ignores a strings attribute. The old markup made the widget fetch the page itself and fail with "Verification failed". This restores verification and adds full localization.

Core changes:

  1. Widget contract (templates/{lite,admin}/fragments/captcha-altcha.html):
  2. Use challenge, language and configuration (hideFooter/hideLogo)
  3. Add an inert JSON island with the localized strings (CSP-safe)
  4. Localized bootstrap (plugins/altcha/altcha-init.js, new):
  5. Imports the widget and registers strings via the $altcha.i18n global before first render, since v3 ships English only

  6. Provider (core/classes/captcha.php):
  7. Pass lang_code from the active $locale (not the default $conf language), strings_json (JSON_HEX_TAG) and the configuration attribute

  8. Document the version-sensitive v3 contract
  9. Strings (lang/*.php): add _CAPTCHA_LOADING/REQUIRED/WAIT in all six languages for complete widget coverage

Verified in a real browser on the registration and admin-login pages, in Russian and after switching to German.

Fix: render registration password hint as HTML
Автор: Eduard Laas | Дата: 12:36 03.06.2026

The password and repeat-password rows passed getTplTitleTip()._PASSWORD through the escaped label key, so the tooltip markup showed as literal text. Use label_html so the hint renders, matching the admin form.

Docs: translate class-candidates analysis to Russian
Автор: Eduard Laas | Дата: 12:36 03.06.2026

Mirror the refactor analysis in Russian (identifiers and code stay English per project rules) so it matches the team's working language.

Fix: harden scheduler runtime and sitemap/backup tasks
Автор: Eduard Laas | Дата: 10:56 03.06.2026

Self-heals stale scheduler configs and surfaces real run results, and fixes two task-level bugs that made jobs fail silently or report wrong metadata.

Core changes:

  1. Scheduler job normalization (core/system.php):
  2. Add getSchedulerJob() as the single read/normalize accessor

    • Enforces canonical type/system for built-in jobs (dbbackup, filescan,
newsletter, sitemap) and drops the legacy 'handler' key
  • Replaces raw $conf['scheduler']['jobs'][...] reads in lock/due/run paths
  • A pre-refactor config (empty 'system', legacy 'handler') no longer makes every system job exit early as 'idle'

  • Manual run feedback (admin/modules/scheduler.php):
  • run() now reports the actual addSchedulerRun() status/message instead of always showing success, so disabled/locked/idle/failed are visible

  • save() derives built-in jobs via getSchedulerJob() and normalizes every job before writing, so a stale schema cannot survive a save

  • Sitemap task (core/system.php):
  • Initialize $info/$htm/$cd before use; count($info) on an undefined value threw a TypeError on PHP 8 when no module produced data

  • Backup task (core/system.php):
  • Resolve the produced archive by actual extension (.zip/.gz/.bz2) instead of a hardcoded .sql.gz, fixing wrong last_backup_file/size metadata

Benefits:

  • Production jobs run regardless of a drifted config; no more silent no-ops
  • Failures become visible in the admin UI

Technical notes:

  • No schema migration shim; normalization is applied at read and write
  • Behavior unchanged when the config is already in the current schema
Fix: skip non-directory entries in module scan
Автор: Eduard Laas | Дата: 10:55 03.06.2026

scandir('modules') also returns files (.htaccess, index.html); probing 'modules/<file>/index.php' tripped open_basedir warnings on production. Guard the file_exists() checks with is_dir() since modules are always directories.

Docs: add class-candidates refactor analysis
Автор: Eduard Laas | Дата: 10:55 03.06.2026

Records which procedural core subsystems would benefit more from class encapsulation than the (stateless) scheduler family, ranked by state/resource coupling, with explicit non-candidates and per-rule refactor constraints.

02.06.2026
Chore: drop ALTCHA LICENSE/VERSION ignore rules
Автор: Eduard Laas | Дата: 15:46 02.06.2026

The vendored meta files are not present and no longer need ignoring.

Refactor: consolidate pagination into a single renderer
Автор: Eduard Laas | Дата: 15:46 02.06.2026

Add getTplPagerView() as the one place that builds the pager wrapper, numbered links, prev/next and dots. getTplPager (count query), getPageNumbers (known counters) and getAsyncPager (HTMX) become thin adapters that supply a per-page link target. The hand-rolled pager loops in the account, auto_links and changelog admin lists and the language editor now call getPageNumbers. Output is unchanged; each theme keeps its own pager fragments, so admin and lite stay independent.

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 90

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

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