История версий CMS Donate Engine

2026-11-12 09:25:17
fix(cache): separate timestamps from tag invalidation; restore cron cooldown - Repository::getCacheTime/getCacheValue use DBAL (bypass cache) 14 stale value broke cron cooldown - Repository::updateCacheTime skips tag invalidation for timestamp keys (last_run_cron, warmer, users, ...) 14 prevents ms_cache thrashing - DatabaseFactory: tag versions in Redis/FS, not APCu; getAuthDb invalidates shared cache - CFG::onReload !92 DatabaseFactory::refreshAllPipelines: middleware pipeline syncs with runtime config from ms_settings - FPM error_log routed to container stderr via [global] /proc/1/fd/2 - CircuitBreaker::isAvailable uses apcu_exists (health probe was counting as APCu miss on every SQL query) - Regression test: RepositoryCacheTimeTest

2026-11-11 19:10:04
fix(database): correct migration error logging and cross-worker cache invalidation - DBMigration: attach migration name and SQL text to failed-query logs (was: "sql_query() returned false" with no context) - Database: restore lastError after logger INSERT resets it; reset transaction state in finally on commit/rollback failure; sql_escape no longer throws when the logger itself fails - DatabaseFactory: tag invalidation via Redis/FS instead of per-worker APCu; getAuthDb now invalidates shared cache; APCu adapter created only when apcu_enabled() (fallback to Filesystem on CLI/APCu-less SAPI) - ErrorHandler: saveLog returns false when both database and file sinks fail instead of throwing to the caller - updater/Database: escape serialized menu payload before UPDATE 14 fixes SQL syntax error when a menu title contains an apostrophe

2026-11-11 10:10:26
refactor(articles): drop articles_share and SHARE keys

2026-11-10 10:06:02
refactor(articles): model, views, picker, parser

2026-11-09 14:22:02
feat(modal): migrate popupModal to native dialog with bs3 shim Migrate popupModal from bootstrap 3 div.modal to native dialog element. Preserve bs3 api via $.fn.modal shim, so existing modules (rullete.js, php controllers, data-api) keep working without changes. Add cde-dialog.js and cde-dialog.css. Update footer.tpl, header.tpl, shop.js, rullete.js, cde-modules.css, cde-modules-login.css.

2026-11-07 14:05:18
feat(auth): email verification flow, sendpassword UX, contracts

2026-11-07 09:31:27
- Session: flash API (TTL 300s), Symfony flashes bag support - Register: form preserved on error, user sets password, SMTP non-blocking, /register/pending page, /register/verify auto-login, resend rate limit, MX-check, stale cleanup - Auth: block login for unverified email - Migration 19.2.98: fix E_L_F collision + 9 new keys - Tests: 460 pass, 7720 assertions

2026-11-06 12:29:15
build 19.2.96 refactor

2026-11-06 06:35:08
fix(store): return proper 404 page for missing store group and stop logging 404s - StoreGroupQuery::fetchOne(): throw ResourceNotFoundException instead of returning null from an array-typed method (fixes TypeError / white screen) - StoreCatalogController::__invoke(): throw ResourceNotFoundException when group has no server, skip redirect to id-0 - RequestHandler: catch ResourceNotFoundException / NotFoundHttpException and render 404 via Template::error() in the full layout - RequestHandler: handle MethodNotAllowedException with a proper page instead of an empty body - RequestHandler: wrap runLegacy() in try/catch so legacy exceptions don't escape to the PHP error handler - RequestHandler: skip ErrorHandler::logException() for 404 responses, only log real 500 errors and transient container errors

2026-11-06 05:40:52
perf(infra,qa): migrate to ready-made PHP image and cut QA time from 2m to 30s Docker: - replace 460s custom build with joseluisq/php-fpm:8.5 - mount php.ini/apcu.ini/opcache.ini/fpm-pool from docker/php/ - add disable-psr.ini to fix PsrExt vs symfony/cache 8.x conflict - download Composer on first start via entrypoint.sh - set working_dir: /var/www, keep user: ${USER_ID}:${GID} - add tmpfs /usr/local/var/log for FPM log Dependencies: - symfony/* 8.1.10 -> 8.1.11 (15 security advisories fixed) - ResettableServicePass moved to DependencyInjection\Compiler QA speed: - inject SleeperInterface into DownloadManager (-30s of sleep()) - inject SleeperInterface into RetryMiddleware (-0.8s backoff) - fast hash options in HashGeneratorTrait (-5s of bcrypt/argon2) - brianium/paratest -p8 with per-worker cde_test_N isolation - phpstan parallel + Turbo + pcntl/posix (-37s cold run) - createStub instead of createMock (-6 PHPUnit notices) Composer scripts: - rename validate/audit to check-validate/security-audit (names clash with Composer built-ins) - add check-validate and security-audit to qa Before: composer qa ~120s After: composer qa ~30s (phpstan 19.6 + paratest 10.5 + audit)

2026-11-05 13:14:11
refactor(layout): lazy-load feature scripts out of header - donate: move payments-form.js bundle to donate_view.tpl, lazy-load via pjax:complete - store: move rullete.js bundle to modal_rulet.tpl - admin: move admin_modal_edit_product.js bundle to its modal - editor: drop codemirror.js from header, lazy-load in admin.js and articles.php on first formTextEditorInit - preload: prune APCu manifest of missing bundle files

2026-11-05 11:14:58
fix(pjax): rullete lazy-load, donate re-init

2026-11-05 08:43:59
fix(deploy): composer

2026-11-05 08:37:40
fix(donate,shop): make form re-init safe on pjax and stale cache

2026-11-04 14:14:56
fix(donate): make form re-init safe on pjax

2026-11-04 09:01:06
feat(Features): Store stability & typization


2026-11-02 13:29:39
fix(admin): handler leaks, tooltip reload, redirect guard

2026-11-02 13:01:34
feat(ui): instant pjax cache with morph revalidation Restore instant cache paint, add morph-based revalidation that updates only changed nodes without flicker, keep script execution on URL change. - instant cache via getCachedData, no setTimeout - requestDone guard prevents cache overwriting fresh response - morphSafe/morphNodeSafe/syncAttrsSafe update changed nodes only, never remove attributes, skip SCRIPT/STYLE - animateContent: .html() on URL change, morphSafe on same-URL, fallback to .html() on error - image preservation keyed by src + isEqualNode - local _mod/_spl/_page in getAjaxContent - off().on() namespaces in form_submit_ajax, initShopBuySlider, noty click, tooltip destroy - vkladka via .on focus/blur - pmPending/offerPending guards in offerId - showModal reqToken prevents stale response overwrite - responseCheckedData null guard, errorParser Array.isArray - hitle regex guarded for non-string data - currentUrlEarly returns false not true - drop ajaxPrefilter, window.stop, execCommand, timerId, progressTimer, isAnimate, preCacheImagesFromHTML - innerHTML replaced by $().html() to keep script execution - drop console.log in showNoty

2026-11-02 06:19:47
fix(pjax): delay cached render 200ms and reuse existing nodes