Zdalny changelog z shoppro.project-dc.pl/updates/changelog.php zwracal niezbalansowany HTML (niezamkniety <script>/<style>/<textarea>/<!--), ktory "polykal" reszte dokumentu - inline-script z handlerami #confirm/#confirmUpdateAll i footer-script z main-layout.php (#clear-cache-btn) nigdy nie parsowaly sie jako JS. Klienci nie mogli aktualizowac shopPRO. Fix w admin/templates/update/main-view.php: 1. Blok <script> z handlerami przeniesiony PRZED sekcje Changelog - handlery podpinaja sie niezaleznie od zdalnego HTML. 2. Sanityzacja zdalnego changeloga: preg_replace usuwa komentarze HTML, strip_tags z whitelista (<p><br><b><strong><i><em><u><ul><ol><li> <h1>-<h6><span><div><a><pre><code><hr>) wycina tagi strukturalne i wykonywalne (<script>, <style>, <iframe>, <textarea>). Skutek uboczny: footer-script z main-layout.php (Wyczysc cache + globalne wyszukiwanie + sprawdzanie aktualizacji) dziala teraz na podstronie update. Po wgraniu na instancje: hard-reload (Ctrl+F5) + restart PHP-FPM / wyczyszczenie OPcache. Suita PHPUnit: 846 testow / 2348 assertions OK. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.4 KiB
5.4 KiB
phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, key-decisions, patterns-established, duration, started, completed
| phase | plan | subsystem | tags | requires | provides | affects | tech-stack | key-files | key-decisions | patterns-established | duration | started | completed | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 21-admin-update-view-js-fix | 01 | admin |
|
|
|
|
|
|
|
|
~15min | 2026-05-13T00:00:00Z | 2026-05-13T00:00:00Z |
Phase 21 Plan 01: Admin update view JS fix — Summary
Naprawiono niedziałające przyciski aktualizacji systemu i globalny "Wyczyść cache" na /admin/update/main_view/ przez reorder bloku <script> przed sekcję Changelog + sanityzację zdalnego changeloga w admin/templates/update/main-view.php.
Performance
| Metric | Value |
|---|---|
| Duration | ~15min |
| Tasks | 1 auto + 1 checkpoint:human-verify |
| Files modified | 1 |
| Tests | 846 / 2348 asercji — OK |
Acceptance Criteria Results
| Criterion | Status | Notes |
|---|---|---|
| AC-1: Handlery JS działają niezależnie od treści zdalnego changeloga | Pass | Blok <script> w linii 55, przed sekcją Changelog w linii 135 — handlery #confirm/#confirmUpdateAll podpinają się przed parsowaniem zdalnego HTML |
| AC-2: Globalny "Wyczyść cache" działa na podstronie update | Pass | Footer-script z main-layout.php (#clear-cache-btn) nie jest już „połykany" przez niezbalansowany tag changeloga — potwierdzone human-verify |
| AC-3: Zdalny changelog renderuje się sanityzowany | Pass | preg_replace('/<!--.*?-->/s', '', ...) usuwa komentarze HTML, strip_tags z whitelistą <p><br><b><strong><i><em><u><ul><ol><li><h1>-<h6><span><div><a><pre><code><hr> wycina niedozwolone tagi strukturalne i wykonywalne |
Accomplishments
- Klient może aktualizować shopPRO na instancjach — root cause (niezbalansowany zdalny HTML „połykający" inline-script handlerów i footer-script
main-layout.php) wyeliminowany przez reorder + sanityzację. - Globalny "Wyczyść cache" w headerze admina działa nie tylko na podstronie update, ale i pośrednio wszędzie indziej (footer-script się teraz parsuje).
- Dodatkowy zysk bezpieczeństwa: zdalny
shoppro.project-dc.pl/updates/changelog.phpnie może już wstrzyknąć<script>/<style>/<iframe>w panel admina.
Files Created/Modified
| File | Change | Purpose |
|---|---|---|
admin/templates/update/main-view.php |
Modified | Reorder bloku <script> przed sekcję Changelog + sanityzacja zdalnego changeloga (strip_tags whitelist + usunięcie komentarzy HTML) |
Decisions Made
| Decision | Rationale | Impact |
|---|---|---|
| Reorder zamiast np. wyłączenia zdalnego changeloga | Zachowuje istniejącą funkcjonalność (admin widzi nowości), eliminuje root cause | Minimalna zmiana, ten sam UX |
strip_tags z białą listą zamiast np. iframe sandbox |
Najprostszy, zerowy narzut, działa na PHP 7.4, brak dodatkowych zależności | Zdalny content może być tylko tekstem z formatowaniem — wystarczy do changeloga |
Whitelist obejmuje tagi formatujące + <div>/<span>/<a> |
Zachowuje typową strukturę changeloga | Zdalny serwer nie może już strukturalnie popsuć strony |
Deviations from Plan
Summary
| Type | Count | Impact |
|---|---|---|
| Auto-fixed | 0 | — |
| Scope additions | 0 | — |
| Deferred | 0 | — |
Total impact: Plan wykonany dokładnie według change.md, bez odstępstw.
Deferred Items
None.
Issues Encountered
| Issue | Resolution |
|---|---|
./test.ps1 z CLAUDE.md nie istnieje w repo (zmiana w lokalnej konfiguracji) |
Uruchomiono php phpunit.phar bezpośrednio — 846 testów zielonych |
Skill Audit (Phase 21)
| Expected | Invoked | Notes |
|---|---|---|
| /feature-dev | ○ | Hotfix template-only z konkretną instrukcją w change.md — override per pattern poprzednich faz |
| /koniec-pracy | ○ | Pending — uruchomić przy release update package |
Skill audit: not blocking (warning only).
Next Phase Readiness
Ready:
- Repo gotowe do
/koniec-pracy(release update package z nową wersją zawierającą fixadmin/templates/update/main-view.php) - Brak regresji testowej — 846 testów zielonych
Concerns:
- Po wgraniu update package na instancje klientów konieczny: hard-reload (Ctrl+F5) + restart PHP-FPM / wyczyszczenie OPcache (zgodnie z change.md sekcja "Po wgraniu")
Blockers:
- None
Phase: 21-admin-update-view-js-fix, Plan: 01 Completed: 2026-05-13