Files
shopPRO/.paul/phases/21-admin-update-view-js-fix/21-01-SUMMARY.md
Jacek Pyziak 073069c303 fix: dziala aktualizacja systemu i Wyczysc cache na /admin/update/main_view/ (v0.353)
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>
2026-05-13 23:10:08 +02:00

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
template
js
htmlsanitize
update
admin-panel
phase provides
none none
Działające przyciski aktualizacji systemu (`#confirm`, `#confirmUpdateAll`) na /admin/update/main_view/
Działający globalny przycisk "Wyczyść cache" (`#clear-cache-btn`) na tej podstronie
Sanityzacja zdalnego changeloga (whitelist tagów formatujących + usunięcie komentarzy HTML)
admin update workflow
future remote-content includes
added patterns
Zdalne file_get_contents w szablonie sanityzować przez strip_tags z whitelistą + usunięcie komentarzy HTML; krytyczne <script> renderować PRZED takim includem
created modified
admin/templates/update/main-view.php
Reorder: blok <script> z handlerami PRZED sekcję Changelog (nie po) — odporność na uszkodzony zdalny HTML
Whitelist strip_tags ogranicza zdalny changelog do tagów formatujących; <script>/<style>/<textarea>/<iframe> wykluczone
Sanityzacja zdalnego HTML w szablonach admina: preg_replace('/<!--.*?-->/s', '', $html) + strip_tags(whitelist)
~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.php nie 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ą fix admin/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