diff --git a/.claude/scheduled_tasks.lock b/.claude/scheduled_tasks.lock new file mode 100644 index 0000000..03cbb1c --- /dev/null +++ b/.claude/scheduled_tasks.lock @@ -0,0 +1 @@ +{"sessionId":"67436f78-3aa8-4e1d-b1bd-475562c4b01e","pid":21052,"acquiredAt":1777156013131} \ No newline at end of file diff --git a/.paul/codebase/README.md b/.paul/codebase/README.md deleted file mode 100644 index e24253c..0000000 --- a/.paul/codebase/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Codebase Map — cmsPRO - -> Generated: 2026-04-26 | Auto-generated by /paul:map-codebase - -## Documents - -| File | Contents | -|------|---------| -| [overview.md](overview.md) | Project summary, modules, entry points, refactoring status | -| [stack.md](stack.md) | PHP runtime, database, frontend libs, server config, external services | -| [architecture.md](architecture.md) | Directory map, patterns, routing, caching, namespaces | -| [conventions.md](conventions.md) | Naming, class patterns, PHPDoc, return types, DB access | -| [testing.md](testing.md) | PHPUnit setup, test structure, stubs, adding new tests | -| [integrations.md](integrations.md) | Email, geolocation, analytics, update server, file manager | -| [concerns.md](concerns.md) | Technical debt prioritized CRITICAL → HIGH → MEDIUM → LOW | - -## Quick Reference - -- **Architecture**: Controls → (deprecated) Factories → Domain Repositories → Medoo/MySQL -- **New code goes in**: `autoload/Domain/{Entity}/{Entity}Repository.php` -- **Tests go in**: `tests/Unit/Domain/{Entity}/{Entity}RepositoryTest.php` -- **Global helper**: `\S::method()` (legacy) or `\Shared\Helpers\Helpers::method()` (preferred) -- **Templates**: `templates/{module}/template.php` (user override: `templates_user/`) -- **CSRF**: `\Shared\Security\CsrfToken::getToken()` / `::validate($token)` -- **Cache**: `\Shared\Cache\CacheHandler::store($key, $data, $ttl)` / `::fetch($key)` - -## Top Issues to Fix - -1. **CRITICAL**: `unserialize()` on cookie — `admin/ajax/pages.php:36,49` -2. **CRITICAL**: Path traversal in updates — `autoload/admin/factory/class.Update.php:76-80` -3. **HIGH**: Missing input validation everywhere -4. **HIGH**: Password hash in auto-login cookie — `admin/index.php:59-61` -5. **MEDIUM**: God class Helpers.php (1220 lines) — needs splitting diff --git a/.paul/codebase/db_schema.md b/.paul/codebase/db_schema.md new file mode 100644 index 0000000..242dd25 --- /dev/null +++ b/.paul/codebase/db_schema.md @@ -0,0 +1,12 @@ +# Database Schema + +> Schemat bazy danych — tabele, kolumny, FK, indeksy. +> Generowany automatycznie przez /paul:map-codebase, aktualizowany przez apply-phase. + +## Engine + +MySQL — konfiguracja w `config.php`, abstrakcja Medoo 1.7.3 (`libraries/medoo/medoo.php`), prefix tabel: `pp_` + +## Tables + +> Uruchom `/paul:map-codebase` aby wypełnić ten plik szczegółowym schematem tabel. diff --git a/.paul/codebase/overview.md b/.paul/codebase/overview.md deleted file mode 100644 index 43d3fdc..0000000 --- a/.paul/codebase/overview.md +++ /dev/null @@ -1,54 +0,0 @@ -# cmsPRO — Project Overview - -> Generated: 2026-04-26 | Milestone: v0.1 Refaktoryzacja - -## What is cmsPRO? - -cmsPRO is a Polish-language PHP CMS with a **hybrid transitional architecture**. The codebase is actively being refactored from a legacy procedural/OOP mixed approach toward a clean Domain-Driven Design structure with Repository pattern. - -## Core Capabilities - -| Module | Description | -|--------|-------------| -| Articles | CRUD, multi-language, versioning, scheduling, galleries, tags, SEO | -| Pages | Static pages with layouts, caching, inline editing | -| Newsletter | Subscription, templates, cron-based batch sending | -| Layouts | HTML/CSS template system with Savant3 rendering | -| Users | Admin users, privileges matrix, 2FA support | -| Languages | Multi-language content, URL routing, session caching | -| Banners | Homepage banners with multi-language support | -| Scontainers | Reusable content blocks/widgets | -| Authors | Author management for articles | -| SEO | Meta tags, slugs, noindex, robots.txt, sitemap | -| File Manager | Upload, browse, thumbnail generation | -| Settings | DB-stored site config, WebP toggle, lazy loading | -| Updates | Versioned ZIP updates with license validation | -| Backups | DB backup/restore utilities | - -## Entry Points - -| File | Purpose | -|------|---------| -| `index.php` | Frontend entry point and router | -| `admin/index.php` | Admin panel entry point | -| `ajax.php` | Frontend AJAX handler | -| `admin/ajax.php` | Admin AJAX handler (routes to `admin/ajax/*.php`) | -| `api.php` | API endpoint | -| `cron.php` | Scheduled tasks (newsletter batch sending) | -| `download.php` | File download handler | - -## Current Refactoring Status - -The project is in **Phase 5 of Milestone v0.1 Refaktoryzacja**. - -Migration pattern: -- **Done**: Domain repositories created for all 10 main entities -- **Done**: Factory classes converted to deprecated wrappers delegating to repositories -- **In progress**: SeoAdditional, Cron, Releases domains -- **Pending**: Remove factory layer, inject repositories directly into controls - -## Version - -- Current app version: **1.695** -- Update channel: stable/beta via `updates/` ZIP packages -- License validation via `pp_update_licenses` table diff --git a/.paul/codebase/todo.md b/.paul/codebase/todo.md new file mode 100644 index 0000000..078d295 --- /dev/null +++ b/.paul/codebase/todo.md @@ -0,0 +1,4 @@ +# TODO + +> Luźny parking pomysłów, rzeczy do sprawdzenia, rzeczy które mogą nigdy nie być wdrożone. +> Nie wymaga formalności — wrzucaj co chcesz. diff --git a/.paul/docs/API.md b/.paul/docs/API.md new file mode 100644 index 0000000..cce27e0 --- /dev/null +++ b/.paul/docs/API.md @@ -0,0 +1,3 @@ +# API + +> Endpointy, kontrakty request/response, autentykacja. diff --git a/.paul/docs/ARCHITECTURE.md b/.paul/docs/ARCHITECTURE.md new file mode 100644 index 0000000..e76060e --- /dev/null +++ b/.paul/docs/ARCHITECTURE.md @@ -0,0 +1,3 @@ +# ARCHITECTURE + +> Struktura klas, modulow, przeplywow i zaleznosci w projekcie. diff --git a/.paul/docs/DB_SCHEMA.md b/.paul/docs/DB_SCHEMA.md new file mode 100644 index 0000000..737ad36 --- /dev/null +++ b/.paul/docs/DB_SCHEMA.md @@ -0,0 +1,3 @@ +# DB_SCHEMA + +> Schemat bazy danych — tabele, kolumny, FK, indeksy. diff --git a/.paul/docs/DECISIONS.md b/.paul/docs/DECISIONS.md new file mode 100644 index 0000000..59239f4 --- /dev/null +++ b/.paul/docs/DECISIONS.md @@ -0,0 +1,3 @@ +# DECISIONS + +> Kluczowe decyzje techniczne i ich uzasadnienia. diff --git a/.paul/docs/STACK.md b/.paul/docs/STACK.md new file mode 100644 index 0000000..bad9fe6 --- /dev/null +++ b/.paul/docs/STACK.md @@ -0,0 +1,3 @@ +# STACK + +> Stack technologiczny, wersje, zaleznosci, srodowisko. diff --git a/.paul/docs/TECH_CHANGELOG.md b/.paul/docs/TECH_CHANGELOG.md new file mode 100644 index 0000000..861d346 --- /dev/null +++ b/.paul/docs/TECH_CHANGELOG.md @@ -0,0 +1,3 @@ +# TECH_CHANGELOG + +> Chronologiczny log zmian technicznych — co i dlaczego. diff --git a/.paul/docs/TODO.md b/.paul/docs/TODO.md new file mode 100644 index 0000000..e5893db --- /dev/null +++ b/.paul/docs/TODO.md @@ -0,0 +1,3 @@ +# TODO + +> Luzny parking pomyslow, rzeczy do sprawdzenia. diff --git a/.paul/governance/governance_2026-04-25.jsonl b/.paul/governance/governance_2026-04-25.jsonl new file mode 100644 index 0000000..651c7ba --- /dev/null +++ b/.paul/governance/governance_2026-04-25.jsonl @@ -0,0 +1,2 @@ +{"ts":"2026-04-25T21:59:21Z","tool":"Bash","cmd":"diff -q \"C:/visual studio code/projekty/cmsPRO/autoload/admin/controls/class.Update.php\" \"C:/visual studio code/projekty/cmstest.pagedev.pl/autoload/admin/controls/class.Update.php\" 2>&1; echo \"-","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T21:59:48Z","tool":"Bash","cmd":"diff -q \"C:/visual studio code/projekty/cmsPRO/autoload/Shared/Helpers/Helpers.php\" \"C:/visual studio code/projekty/cmstest.pagedev.pl/autoload/Shared/Helpers/Helpers.php\" 2>&1; echo \"---\"; diff","cwd":"/c/visual studio code/projekty/cmsPRO"} diff --git a/.paul/governance/governance_2026-04-26.jsonl b/.paul/governance/governance_2026-04-26.jsonl new file mode 100644 index 0000000..8f2ede8 --- /dev/null +++ b/.paul/governance/governance_2026-04-26.jsonl @@ -0,0 +1,84 @@ +{"ts":"2026-04-25T22:00:08Z","tool":"Bash","cmd":"curl -sS \"http://www.cmspro.project-dc.pl/updates/versions.php\" 2>&1 | head -20; echo \"===NO KEY===\"; curl -sS \"http://www.cmspro.project-dc.pl/updates/versions.php?key=test123\" 2>&1 | head -20\","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:00:20Z","tool":"Bash","cmd":"curl -sSI \"http://www.cmspro.project-dc.pl/updates/versions.php?key=test\" 2>&1 | grep -i -E \"location|HTTP/\"; echo \"---FOLLOW---\"; curl -sSL \"http://www.cmspro.project-dc.pl/updates/versions.ph","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:39:39Z","tool":"Bash","cmd":"wc -l \"C:\\\\visual studio code\\\\projekty\\\\cmsPRO/autoload/Domain/Articles/ArticlesRepository.php\" \"C:\\\\visual studio code\\\\projekty\\\\cmsPRO/autoload/Domain/Pages/PagesRepository.php\" \"","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:40:05Z","tool":"Bash","cmd":"for file in /c/visual\\\\ studio\\\\ code/projekty/cmsPRO/autoload/Domain/*/*.php; do wc -l \"$file\"; done\"},\"tool_response\":{\"stdout\":\"648 /c/visual studio code/projekty/cmsPRO/autoload/Domain","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:40:27Z","tool":"Bash","cmd":"wc -l \"C:\\\\visual studio code\\\\projekty\\\\cmsPRO/admin/ajax.php\" \"C:\\\\visual studio code\\\\projekty\\\\cmsPRO/admin/ajax/articles.php\" \"C:\\\\visual studio code\\\\projekty\\\\cmsPRO/admi","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:42:47Z","tool":"Bash","cmd":"mkdir -p \"C:/visual studio code/projekty/cmsPRO/.paul/codebase\"\",\"description\":\"Create .paul/codebase directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isIm","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:43:05Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\codebase\\\\overview.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:43:22Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\codebase\\\\stack.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:43:51Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\codebase\\\\architecture.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:44:20Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\codebase\\\\conventions.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:44:39Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\codebase\\\\testing.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:44:55Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\codebase\\\\integrations.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:45:39Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\codebase\\\\concerns.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:45:56Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\codebase\\\\README.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:46:01Z","tool":"Bash","cmd":"cd \"C:/visual studio code/projekty/cmsPRO\" && git add .paul/codebase/ && git commit -m \"$(cat <<'EOF'\\ndocs(codebase): mapa kodu wygenerowana przez /paul:map-codebase\\n\\n7 dokumentów w .paul/co","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:49:08Z","tool":"Bash","cmd":"mkdir -p \"/c/visual studio code/projekty/cmsPRO/.paul/phases/05-domain-seoadditional-cron-releases\"\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isImage\":false,\"no","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:50:01Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\phases\\\\05-domain-seoadditional-cron-releases\\\\05-01-PLAN.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:50:13Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:50:23Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:50:27Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:51:44Z","tool":"Bash","cmd":"mkdir -p \"/c/visual studio code/projekty/cmsPRO/autoload/Domain/SeoAdditional\"\",\"description\":\"Create SeoAdditional domain directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"inter","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:51:54Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\autoload\\\\Domain\\\\SeoAdditional\\\\SeoAdditionalRepository.php","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:51:59Z","tool":"Bash","cmd":"mkdir -p \"C:/visual studio code/projekty/cmsPRO/autoload/Domain/Cron\"\",\"description\":\"Create Domain/Cron directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"i","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:52:04Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\autoload\\\\admin\\\\factory\\\\class.SeoAdditional.php","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:52:11Z","tool":"Bash","cmd":"php -l \"/c/visual studio code/projekty/cmsPRO/autoload/Domain/SeoAdditional/SeoAdditionalRepository.php\" && php -l \"/c/visual studio code/projekty/cmsPRO/autoload/admin/factory/class.SeoAdditional.","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:52:31Z","tool":"Bash","cmd":"mkdir -p '/c/visual studio code/projekty/cmsPRO/autoload/Domain/Releases'\",\"description\":\"Create Domain\\\\Releases directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:52:47Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\autoload\\\\Domain\\\\Releases\\\\ReleasesRepository.php","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:53:04Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\autoload\\\\Domain\\\\Cron\\\\CronRepository.php","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:53:10Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\autoload\\\\class.Cron.php","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:53:11Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\autoload\\\\Domain\\\\Releases\\\\UpdateRepository.php","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:53:16Z","tool":"Bash","cmd":"php -l \"C:/visual studio code/projekty/cmsPRO/autoload/Domain/Cron/CronRepository.php\" && php -l \"C:/visual studio code/projekty/cmsPRO/autoload/class.Cron.php\"\",\"description\":\"PHP syntax chec","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:53:20Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\autoload\\\\admin\\\\factory\\\\class.Releases.php","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:53:24Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\autoload\\\\admin\\\\factory\\\\class.Update.php","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:53:31Z","tool":"Bash","cmd":"php -l '/c/visual studio code/projekty/cmsPRO/autoload/Domain/Releases/ReleasesRepository.php' && php -l '/c/visual studio code/projekty/cmsPRO/autoload/Domain/Releases/UpdateRepository.php' && php -l","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:54:02Z","tool":"Bash","cmd":"php -l \"C:/visual studio code/projekty/cmsPRO/autoload/Domain/SeoAdditional/SeoAdditionalRepository.php\" && php -l \"C:/visual studio code/projekty/cmsPRO/autoload/Domain/Cron/CronRepository.php\" &","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:54:10Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:54:16Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:55:41Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\phases\\\\05-domain-seoadditional-cron-releases\\\\05-01-SUMMARY.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:56:02Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\changelog\\\\2026-04-26.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:56:08Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\changelog\\\\2026-04-26.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:56:17Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\PROJECT.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:56:23Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\PROJECT.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:56:28Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\PROJECT.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:56:34Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:56:39Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:56:58Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:57:05Z","tool":"Bash","cmd":"cd \"/c/visual studio code/projekty/cmsPRO\" && git add autoload/Domain/SeoAdditional/SeoAdditionalRepository.php autoload/Domain/Cron/CronRepository.php autoload/Domain/Releases/ReleasesRepository.ph","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:57:14Z","tool":"Bash","cmd":"cd \"/c/visual studio code/projekty/cmsPRO\" && git commit -m \"$(cat <<'EOF'\\nfeat(05-domain-seoadditional-cron-releases): Domain layer kompletny — SeoAdditional + Cron + Releases\\n\\nPhase 5 com","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:57:45Z","tool":"Bash","cmd":"cd \"/c/visual studio code/projekty/cmsPRO\" && php vendor/bin/phpunit 2>&1\",\"description\":\"Run PHPUnit tests\"},\"tool_response\":{\"stdout\":\"PHPUnit 10.5.63 by Sebastian Bergmann and contribut","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:57:47Z","tool":"Bash","cmd":"cd \"/c/visual studio code/projekty/cmsPRO\" && git log --oneline -5\",\"description\":\"Recent commits for convention reference\"},\"tool_response\":{\"stdout\":\"f7c7c0b feat(05-domain-seoadditional","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:57:56Z","tool":"Bash","cmd":"cd \"/c/visual studio code/projekty/cmsPRO\" && head -60 docs/PROJECT_STRUCTURE.md\",\"description\":\"Check PROJECT_STRUCTURE.md for Domain repos section\"},\"tool_response\":{\"stdout\":\"# Struktur","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:58:03Z","tool":"Bash","cmd":"cd \"/c/visual studio code/projekty/cmsPRO\" && grep -n \"Domain\\\\|Faza\\\\|fase\\\\|Phase\" docs/PROJECT_STRUCTURE.md | head -40\",\"description\":\"Find Domain repos section in PROJECT_STRUCTURE.m","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:58:19Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\docs\\\\PROJECT_STRUCTURE.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:58:27Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\updates\\\\versions.php","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:58:35Z","tool":"Bash","cmd":"cd \"/c/visual studio code/projekty/cmsPRO\" && git add docs/PROJECT_STRUCTURE.md updates/versions.php && git commit -m \"$(cat <<'EOF'\\nbuild(update): paczka 1.696 — Domain layer kompletny (Phase ","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:58:43Z","tool":"Bash","cmd":"cd \"/c/visual studio code/projekty/cmsPRO\" && git tag v1.696\",\"description\":\"Create version tag\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isImage\":false,\"no","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:58:51Z","tool":"Bash","cmd":"cd \"/c/visual studio code/projekty/cmsPRO\" && powershell -ExecutionPolicy Bypass -File ./build-update.ps1 -FromTag v1.695 -ToTag v1.696 -ChangelogEntry \"NEW - Domain layer kompletny: SeoAdditional,","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:59:00Z","tool":"Bash","cmd":"cd \"/c/visual studio code/projekty/cmsPRO\" && git add \"updates/1.60/ver_1.696.zip\" \"updates/1.60/ver_1.696_manifest.json\" && git commit --amend --no-edit\",\"description\":\"Amend commit to incl","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T22:59:10Z","tool":"Bash","cmd":"cd \"/c/visual studio code/projekty/cmsPRO\" && git push && git push --tags 2>&1\",\"timeout\":30000,\"description\":\"Push commits and tags\"},\"tool_response\":{\"stdout\":\"remote: . Processing 1 r","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:13:47Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\init-project.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:13:53Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\init-project.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:13:59Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:14:14Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:14:23Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:14:27Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:14:38Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:15:07Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:15:19Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:15:26Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:15:44Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:15:49Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:16:01Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:16:12Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\map-codebase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:16:25Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\apply-phase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:16:39Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\apply-phase.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:16:44Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\templates\\\\CLAUDE-TEMPLATE.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:16:49Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\templates\\\\CLAUDE-TEMPLATE.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:16:59Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\codebase\\\\todo.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:17:03Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\.paul\\\\codebase\\\\db_schema.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:17:08Z","tool":"Bash","cmd":"rm -rf \"C:/visual studio code/projekty/cmsPRO/.paul/docs\" && rm -f \"C:/visual studio code/projekty/cmsPRO/.paul/codebase/overview.md\" \"C:/visual studio code/projekty/cmsPRO/.paul/codebase/README.","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:17:27Z","tool":"Edit","file":"C:\\\\Users\\\\jacek\\\\.claude\\\\paul-framework\\\\workflows\\\\init-project.md","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:24:30Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\autoload\\\\Domain\\\\Releases\\\\UpdateRepository.php","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:33:15Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\updates\\\\1.60\\\\ver_1.696_manifest.json","cwd":"/c/visual studio code/projekty/cmsPRO"} +{"ts":"2026-04-25T23:43:51Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\cmsPRO\\\\build-update.ps1","cwd":"/c/visual studio code/projekty/cmsPRO"} diff --git a/.paul/phases/04h-hotfix-https-updates/04h-01-PLAN.md b/.paul/phases/04h-hotfix-https-updates/04h-01-PLAN.md new file mode 100644 index 0000000..2ff51a3 --- /dev/null +++ b/.paul/phases/04h-hotfix-https-updates/04h-01-PLAN.md @@ -0,0 +1,379 @@ +--- +phase: 04h-hotfix-https-updates +plan: 01 +type: execute +wave: 1 +depends_on: [] +files_modified: + - autoload/Shared/Helpers/Helpers.php + - autoload/admin/factory/class.Update.php + - C:/visual studio code/projekty/cmstest.pagedev.pl/autoload/class.S.php + - C:/visual studio code/projekty/cmstest.pagedev.pl/autoload/admin/factory/class.Update.php + - updates/cmsPro.zip + - updates/1.50/ver_1.519.zip + - updates/**/ver_*.zip (audit + warunkowy patch) + - updates/**/ver_*_manifest.json (regeneracja checksum_zip jeśli paczka patchowana) +autonomous: false +delegation: off +--- + + +## Goal +Naprawić mechanizm wykrywania nowych wersji aktualizacji (HTTP 301 → HTTPS bug) w trzech warstwach: +1. Bieżący kod cmsPRO (źródło) +2. Instancja testowa cmstest.pagedev.pl (działający bug) +3. Wszystkie dystrybuowane paczki (cmsPro.zip baseline + ver_*.zip), aby nowe instalacje cmsPRO nigdy nie utknęły z tym samym problemem + +## Purpose +Serwer cmspro.project-dc.pl został przeniesiony z HTTP na HTTPS i odpowiada `301 Moved Permanently`. +PHP-owy `file_get_contents()` bez kontekstu nie podąża za redirectem, więc zwraca HTML 301 zamiast listy wersji. +Skutkiem `(float)max($html_lines)` daje 0 i `S::get_new_version()` nigdy nie pokazuje nowszej wersji niż zainstalowana. +Aktualnie WSZYSTKIE instancje cmsPRO zainstalowane przed migracją serwera są zablokowane. + +## Output +- Patch HTTP→HTTPS w kodzie źródłowym i w instancji testowej +- Audit-report listujący każdą paczkę aktualizacji zawierającą `http://www.cmspro.project-dc.pl` +- Patchowane paczki ZIP + zaktualizowane manifesty (SHA256) +- ver_1.519.zip rozszerzony o poprawione class.S.php i class.Update.php — "kotwica fixa" dla instancji przechodzących przez tę wersję +- Lista plików do uploadu na cmspro.project-dc.pl (dla użytkownika) + + + +## Project Context +@.paul/PROJECT.md +@.paul/STATE.md +@.paul/ROADMAP.md + +## Source Files +@autoload/Shared/Helpers/Helpers.php +@autoload/admin/factory/class.Update.php +@build-update.ps1 + + + + +## AC-1: Kod źródłowy cmsPRO używa HTTPS +```gherkin +Given pliki autoload/Shared/Helpers/Helpers.php oraz autoload/admin/factory/class.Update.php +When zostają zaktualizowane +Then nie zawierają już ciągu "http://www.cmspro.project-dc.pl" +And zawierają "https://www.cmspro.project-dc.pl" +``` + +## AC-2: Instancja testowa jest odblokowana +```gherkin +Given instancja w C:\visual studio code\projekty\cmstest.pagedev.pl\ na wersji 1.519 +When pliki autoload/class.S.php i autoload/admin/factory/class.Update.php zostają poprawione (http→https) +And sesja "new-version" zostaje wyczyszczona (przez wylogowanie/restart sesji) +Then panel admina pokazuje nową wersję > 1.519 +And klik "Aktualizuj" pobiera kolejną paczkę bez błędu +``` + +## AC-3: Wszystkie paczki dystrybucyjne wolne od bug-a +```gherkin +Given katalog updates/ z plikami cmsPro.zip oraz updates/**/ver_*.zip +When skrypt audit przeskanuje każdą paczkę +Then żadna paczka nie zawiera pliku z ciągiem "http://www.cmspro.project-dc.pl" +And paczki które zawierały bug zostały sparowane z patched-wersjami +And manifesty (jeśli istnieją) mają zaktualizowane checksum_zip (SHA256) zgodne z nowym ZIP +``` + +## AC-4: ver_1.519.zip jest "kotwicą fixa" +```gherkin +Given oryginalny ver_1.519.zip zawiera tylko class.Articles.php +When zostaje rozszerzony o poprawione autoload/class.S.php i autoload/admin/factory/class.Update.php +Then każda nowa instancja cmsPRO przechodząca update do 1.519 dostaje plik z https:// +And tym samym może wykryć i pobrać kolejne aktualizacje +``` + +## AC-5: Audit report dostarczony +```gherkin +Given wykonany skrypt audit +When skanowanie się kończy +Then powstaje plik .paul/phases/04h-hotfix-https-updates/audit-report.md +Z listą: każda paczka, jakie zawiera podejrzane pliki, czy zawiera http://, akcja podjęta (patched|skipped|N/A) +``` + + + + + + + Task 1: Patch kodu źródłowego cmsPRO (HTTP → HTTPS) + + autoload/Shared/Helpers/Helpers.php, + autoload/admin/factory/class.Update.php + + + Zamień wszystkie wystąpienia `http://www.cmspro.project-dc.pl` → `https://www.cmspro.project-dc.pl` + w obu plikach (Edit replace_all). + + Plików łącznie ~6 wystąpień: + - Helpers.php:456 (versions.php) + - factory/class.Update.php: versions.php, .zip, _manifest.json, _sql.txt, _files.txt + + NIE dodawaj kontekstu stream (follow_location=1) — wystarczy zmiana protokołu, bo + serwer obsługuje HTTPS bezpośrednio i bez redirectu. + NIE zmieniaj logiki parsowania, kontroli wersji, manifestów — tylko URL. + NIE ruszaj index.php:92 (`\S::get( 'hash' ) == $settings['update_key']`) — to inna sprawa. + + + grep -c "http://www.cmspro.project-dc.pl" autoload/Shared/Helpers/Helpers.php autoload/admin/factory/class.Update.php + → wynik 0:0 (zero wystąpień) + grep -c "https://www.cmspro.project-dc.pl" → wynik >=1:>=4 + + AC-1 satisfied + + + + Task 2: Hotfix instancji testowej cmstest.pagedev.pl + + C:/visual studio code/projekty/cmstest.pagedev.pl/autoload/class.S.php, + C:/visual studio code/projekty/cmstest.pagedev.pl/autoload/admin/factory/class.Update.php + + + W instancji testowej zamień `http://www.cmspro.project-dc.pl` → `https://www.cmspro.project-dc.pl` + w obu plikach (Edit replace_all). + + Pliki w instancji testowej mają STARSZĄ strukturę (przed refaktoringiem) — class.S.php + zawiera get_new_version(), class.Update.php (factory) zawiera 4 wystąpienia URL + (versions.php, .zip, _sql.txt, _files.txt — bez manifest, bez SHA256). + + Po patchu trzeba poinstruować użytkownika, żeby: + - wylogował się z panelu (wyczyści sesję `new-version`), + - lub w przeglądarce otworzył dowolny link admina po wylogowaniu i ponownym zalogowaniu. + + NIE modyfikuj innych plików w instancji testowej — to środowisko UAT, ma odzwierciedlać + stan produkcyjny. + + + grep -c "http://www.cmspro.project-dc.pl" w obu plikach → 0:0 + + AC-2 satisfied (część kodowa, weryfikacja UAT w Task 8) + + + + Task 3: Skrypt audit paczek aktualizacji + + .paul/phases/04h-hotfix-https-updates/scripts/audit-packages.ps1, + .paul/phases/04h-hotfix-https-updates/audit-report.md + + + Napisz PowerShell-owy skrypt audytujący wszystkie ZIP-y w `updates/` (rekurencyjnie), + który dla każdego ZIP: + 1. Wymienia pliki kandydujące: `autoload/class.S.php`, `autoload/Shared/Helpers/Helpers.php`, + `autoload/admin/factory/class.Update.php` (i ich starsze warianty jak `class.Update.php`). + 2. Jeśli któryś istnieje — rozpakowuje go do tempu, sprawdza zawartość `Select-String -Pattern 'http://www\.cmspro\.project-dc\.pl'`. + 3. Wynik dla każdej paczki: { package, files_present, has_buggy_url, action }. + + Skrypt MUSI obsłużyć też `updates/cmsPro.zip` (base install). + Skrypt NIE patchuje paczek — tylko raportuje. Patch w Task 4. + + Output do `audit-report.md` jako tabela markdown sortowana wersjami. + Skrypt nie wymaga uprawnień do zapisu w paczkach. + + + pwsh -File .paul/phases/04h-hotfix-https-updates/scripts/audit-packages.ps1 + → audit-report.md powstaje i zawiera wpis dla cmsPro.zip + co najmniej ver_1.518, ver_1.620 + + AC-5 satisfied: pełna lista dotkniętych paczek + + + + + Czy patchować WSZYSTKIE paczki z bugiem, czy tylko baseline cmsPro.zip + ver_1.519 jako kotwica? + + + Po audycie znamy listę dotkniętych paczek. Możliwe strategie: + - Patch wszystkich (pełna sanityzacja, ale każda zmieniona paczka wymaga regeneracji manifestu+checksum + i upload na serwer). + - Patch minimum (cmsPro.zip + ver_1.519 jako kotwica) — nowe instalacje od zera są OK, + a każdy upgrade dochodząc do 1.519 dostaje fix. + + Decyzja zależy od liczby dotkniętych paczek z audit-report.md. + + + + + + Select: full-patch lub minimal-patch + + + + Task 4: Patch dotkniętych paczek (zgodnie z decyzją z Task 3.5) + + updates/cmsPro.zip, + updates/1.50/ver_1.518.zip (jeśli buggy), + updates/1.60/ver_1.620.zip (jeśli buggy), + updates/**/ver_*.zip (każda inna z audit-report.md jeśli wybrano full-patch), + updates/**/ver_*_manifest.json (regeneracja checksum_zip dla patched paczek z manifestem) + + + Dla każdej paczki do patcha: + 1. Skopiuj ZIP do tempu (backup) + 2. Wyciągnij plik(i) zawierające http://www.cmspro.project-dc.pl + 3. Zamień http:// → https:// (zachowaj BOM, encoding UTF-8 bez BOM zgodnie z konwencją projektu) + 4. Wsadź spowrotem do ZIP-a (Compress-Archive -Update lub System.IO.Compression.ZipArchive) + 5. Jeśli istnieje `ver_X.YYY_manifest.json` w tym samym katalogu — przelicz SHA256 całego ZIP + i zaktualizuj `checksum_zip` w manifeście (format: `sha256:HEX`) + 6. Zachowaj oryginał jako `.bak` w tym samym katalogu + + Dla cmsPro.zip nie ma manifestu (to base install) — sam ZIP wystarczy. + + NIE ruszaj paczek, które audit zaznaczył jako N/A (brak buggy plików). + NIE zmieniaj struktury katalogów wewnątrz ZIP-ów. + + + Powtórz audit z Task 3 — każda zmieniona paczka pokazuje `has_buggy_url: false`. + Dla każdej paczki z manifestem: `(Get-FileHash -Algorithm SHA256 paczka.zip).Hash.ToLower()` + równe wartości checksum_zip w manifeście. + + AC-3 satisfied + + + + Task 5: Wstrzyknięcie kotwicy fixa do ver_1.519.zip + + updates/1.50/ver_1.519.zip + + + ver_1.519.zip oryginalnie zawiera tylko `autoload/admin/controls/class.Articles.php`. + Dodać do niego (Compress-Archive -Update lub równoważne): + - `autoload/class.S.php` — wersja z https:// (taka sama jaka ląduje w cmsPro.zip post-patch) + - `autoload/admin/factory/class.Update.php` — wersja z https:// + - `autoload/admin/controls/class.Update.php` — bez zmian (kontrola, nie ma URL) + - `autoload/admin/view/class.Update.php` — bez zmian + + Pliki muszą mieć strukturę pasującą do legacy układu (PRZED refaktoringiem do Shared\Helpers), + czyli class.S.php zawiera get_new_version() inline. Skopiuj odpowiednie wersje z post-patched + `cmsPro.zip` lub z wcześniejszej paczki (np. patched ver_1.518.zip jeśli była buggy). + + Cel: każda instancja cmsPRO doczołgająca się do 1.519 dostaje WORKING klient HTTPS, + nawet jeśli wcześniejsze paczki były buggy. + + Jeśli istnieje ver_1.519_manifest.json — dodaj wpisy `files.added` z nowo wstrzykniętymi + plikami i przelicz checksum_zip. + Jeśli nie istnieje — opcjonalnie wygeneruj go (zgodnie ze schematem z build-update.ps1). + + + unzip -l updates/1.50/ver_1.519.zip → zawiera autoload/class.S.php oraz autoload/admin/factory/class.Update.php + unzip -p updates/1.50/ver_1.519.zip autoload/class.S.php | grep -c "https://" → >=1 + unzip -p updates/1.50/ver_1.519.zip autoload/class.S.php | grep -c "http://www.cmspro" → 0 + + AC-4 satisfied + + + + Task 6: Generacja listy plików do uploadu na serwer + + .paul/phases/04h-hotfix-https-updates/upload-checklist.md + + + Wygeneruj plik z listą paczek wymagających uploadu na cmspro.project-dc.pl/updates/: + - cmsPro.zip (jeśli zmieniony) + - każda zmieniona ver_*.zip wraz ze swoim manifestem (jeśli istnieje) + - ver_1.519.zip + ewentualny nowy ver_1.519_manifest.json + + Format: tabela markdown { plik, ścieżka źródłowa, ścieżka docelowa na serwerze, SHA256 }. + Dodaj sekcję "Po uploadzie" z krokami: smoke-test (curl https://.../updates/versions.php?key=KLUCZ), + weryfikacja że versions.php nadal zwraca poprawną listę. + + + Plik istnieje i zawiera co najmniej cmsPro.zip + ver_1.519.zip + smoke-test command + + Dostarczona instrukcja uploadu dla użytkownika + + + + + Zestaw spatchowanych paczek + cmsPro.zip + ver_1.519.zip kotwica fixa, gotowe do uploadu. + + + 1. Otwórz `.paul/phases/04h-hotfix-https-updates/upload-checklist.md` + 2. Wgraj wskazane pliki na serwer cmspro.project-dc.pl do katalogu updates/ + (FTP/SSH/panel hostingu — wedle Twojej procedury) + 3. Uruchom smoke-test: + curl -sS "https://www.cmspro.project-dc.pl/updates/versions.php?key=DOWOLNY_VALID_KEY" + → powinno zwrócić listę wersji bez 301 + 4. Pobierz testowo jedną z paczek: + curl -sS -o /tmp/test.zip "https://www.cmspro.project-dc.pl/updates/1.50/ver_1.519.zip" + file /tmp/test.zip → powinno być "Zip archive" + + Wpisz "uploaded" gdy paczki są na serwerze, lub opisz problem + + + + + Hotfix instancji testowej: pliki zaktualizowane lokalnie + paczki na serwerze. + + + 1. W instancji testowej (cmstest.pagedev.pl) wyloguj się i zaloguj ponownie do panelu + (czyści sesję `new-version`). + 2. Wejdź w sekcję aktualizacji (admin → Aktualizacja). + 3. Sprawdź: + - Pokazuje wersję 1.519 jako bieżącą + - Pokazuje "Dostępna nowa wersja: X.YYY" gdzie X.YYY > 1.519 + - Klik "Aktualizuj" przebiega bez błędu i zwiększa wersję + 4. Powtórz update kilka razy aż dojdziesz do najnowszej dostępnej wersji. + 5. Sprawdź `libraries/version.ini` w instancji — odzwierciedla najnowszą wersję. + + Wpisz "approved" gdy aktualizacje działają, lub opisz problem + + + + + + +## DO NOT CHANGE +- index.php:92 (`\S::get('hash') == $settings['update_key']`) — to oddzielna funkcja (front-devel mode), nie URL +- Logika parsowania wersji, manifestów, SQL — tylko URL ma się zmienić +- Struktura katalogowa updates/ na serwerze — tylko zawartość plików +- Inne pliki w instancji testowej cmstest.pagedev.pl — to UAT, ma odzwierciedlać prod +- Roadmap Phase 5+ — to hotfix poza roadmapą, nie blokuje Phase 5 + +## SCOPE LIMITS +- Plan NIE refaktoryzuje update systemu do nowej architektury (to robota dla Phase 5/13) +- Plan NIE wprowadza retry/cURL/stream-context — wystarczy zmiana protokołu, serwer wspiera HTTPS bezpośrednio +- Plan NIE patchuje pojedynczych instancji produkcyjnych poza testową — użytkownicy końcowi dostaną fix przez kotwicę 1.519 lub baseline cmsPro.zip +- Plan NIE rozwiązuje problemu "stare instancje na <1.519 zablokowane przed migracją serwera" — wymagałyby manualnego patcha (out of scope) + + + + +Przed zamknięciem planu: +- [ ] Task 1 verify (grep w kodzie cmsPRO) +- [ ] Task 2 verify (grep w instancji testowej) +- [ ] Task 3: audit-report.md istnieje i jest kompletny +- [ ] Task 4: powtórzony audit pokazuje 0 buggy paczek (dla full-patch) lub tylko nie-patched paczki świadomie pominięte +- [ ] Task 5: ver_1.519.zip zawiera fix files +- [ ] Task 6: upload-checklist.md istnieje +- [ ] Checkpoint upload: użytkownik potwierdził upload + smoke-test OK +- [ ] Checkpoint UAT: instancja testowa aktualizuje się do najnowszej wersji bez błędu +- [ ] Wszystkie AC spełnione + + + +- Bieżąca instancja testowa odblokowana — widzi i instaluje aktualizacje > 1.519 +- Bazowy install (cmsPro.zip) na serwerze nie zawiera buggy http:// +- ver_1.519.zip jest "kotwicą fixa" dla każdej nowej instalacji +- Audit report dokumentuje stan wszystkich paczek +- Brak regresji w innych modułach (URL change to jedyna ingerencja) + + + +Po zamknięciu utwórz `.paul/phases/04h-hotfix-https-updates/04h-01-SUMMARY.md` +zawierający: +- Co zmieniono (kod + paczki) +- Listę paczek patched z SHA256 przed/po +- Decyzję checkpoint (full-patch vs minimal-patch) i uzasadnienie +- Lessons learned (np. "zawsze używać HTTPS w endpointach update", "rozważyć stream context z follow_location jako defense-in-depth") +- Sugestię dla Phase 5/13 Releases+Update: rozważyć cURL z verify SSL i obsługą redirectów jako trwałe rozwiązanie + diff --git a/.paul/phases/04h-hotfix-https-updates/04h-01-SUMMARY.md b/.paul/phases/04h-hotfix-https-updates/04h-01-SUMMARY.md new file mode 100644 index 0000000..94191de --- /dev/null +++ b/.paul/phases/04h-hotfix-https-updates/04h-01-SUMMARY.md @@ -0,0 +1,170 @@ +--- +phase: 04h-hotfix-https-updates +plan: 01 +subsystem: infra +tags: [https, urlencode, ftp-cleanup, update-mechanism, license-key] + +requires: + - phase: pre-paul (legacy update mechanism) + provides: file_get_contents-based update polling +provides: + - HTTPS-only update endpoint (kod + 121 paczek + cmsPro.zip + kotwica 1.519) + - urlencode($settings['update_key']) wrap (kod + 64 paczek + kotwica) + - Audit/patcher PowerShell scripts dla updates/ ZIP-ow + - FTP cleanup script (.bak removal lokalnie + zdalnie) +affects: [phase-5 (Releases+Update Domain repo), phase-13 (Admin: Update controller)] + +tech-stack: + added: [] + patterns: + - "Audit-then-patch script pair: oddzielne audyt vs mutating skrypty (idempotent verify)" + - "Anchor-package strategy: wstrzykniecie fixa w istniejaca paczke aktualizacji jako ratunkowy punkt zaczepienia" + +key-files: + created: + - .paul/phases/04h-hotfix-https-updates/scripts/audit-packages.ps1 + - .paul/phases/04h-hotfix-https-updates/scripts/patch-packages.ps1 + - .paul/phases/04h-hotfix-https-updates/scripts/patch-urlencode.ps1 + - .paul/phases/04h-hotfix-https-updates/scripts/inject-anchor-1519.ps1 + - .paul/phases/04h-hotfix-https-updates/scripts/cleanup-baks.ps1 + - .paul/phases/04h-hotfix-https-updates/audit-report.md + - .paul/phases/04h-hotfix-https-updates/patch-log.md + - .paul/phases/04h-hotfix-https-updates/patch-urlencode-log.md + - .paul/phases/04h-hotfix-https-updates/upload-checklist.md + modified: + - autoload/Shared/Helpers/Helpers.php + - autoload/admin/factory/class.Update.php + - updates/cmsPro.zip + - updates/**/ver_*.zip (121 paczek http->https + 64 urlencode) + - 2x ver_*_manifest.json (przeliczone checksum_zip SHA256) + +key-decisions: + - "full-patch zamiast minimal-patch: 121 paczek > ryzyko regresji przy chain-update" + - "urlencode jako oddzielny patch po wykryciu bug-a #2 podczas UAT (klucz licencji z #)" + - ".NET FtpWebRequest zamiast curl --quote dla cleanup (PowerShell 5.1 traktuje stderr curl jako fatal)" + +patterns-established: + - "Reverse-engineering bug w produkcji: curl probe serwera wyzwolil odkrycie HTTP 301 redirect" + - "Bug discovery podczas UAT: drugi bug (urlencode) ujawniony dopiero po naprawieniu pierwszego" + +duration: ~90min +started: 2026-04-25T22:00:00Z +completed: 2026-04-26T00:35:00Z +--- + +# Phase 04h Plan 01: Hotfix HTTPS Update Endpoint Summary + +**Naprawa zablokowanego mechanizmu aktualizacji w cmsPRO: HTTP->HTTPS w kodzie + 121 paczkach, urlencode klucza licencji w 64 paczkach, kotwica fixa w ver_1.519.zip, cleanup 1085 backupow z FTP+lokalnie. Test instance odblokowana i potwierdzona przez user-a.** + +## Performance + +| Metric | Value | +|--------|-------| +| Duration | ~90min | +| Started | 2026-04-25 22:00 | +| Completed | 2026-04-26 00:35 | +| Tasks | 8 zaplanowane + 3 dodatkowe (urlencode patch, urlencode w paczkach, cleanup .bak) | +| Files modified | 4 PHP source + 124 paczki (cmsPro + 121 ZIP + 2 manifest) + 1085 .bak removed | + +## Acceptance Criteria Results + +| Criterion | Status | Notes | +|-----------|--------|-------| +| AC-1: Kod cmsPRO uzywa HTTPS | Pass | Helpers.php + factory/Update.php; 0 wystapien http:// | +| AC-2: Instancja testowa odblokowana | Pass | User potwierdzil "Zadzialalo" po dodaniu urlencode | +| AC-3: Wszystkie paczki wolne od bug-a | Pass | Audit po patchu: 0 paczek z http://, 0 paczek z raw $settings['update_key'] w URL | +| AC-4: ver_1.519.zip jako kotwica fixa | Pass | Zawiera class.S.php (37958B) + class.Update.php (2886B), oba z https + urlencode. SHA256: 14e5754c75884fcc... | +| AC-5: Audit report dostarczony | Pass | audit-report.md + patch-log.md + patch-urlencode-log.md | + +## Accomplishments + +- **Odblokowanie WSZYSTKICH instancji cmsPRO**: kazda instancja ktora dotrze do 1.519 dostaje wbudowana kotwice z dzialajacym klientem update (https + urlencode) +- **Identyfikacja DWOCH bugow** (HTTP 301 redirect i URL fragment-cutting na #) podczas jednej sesji +- **Idempotentne skrypty audit+patch+cleanup** mozliwe do reuse gdyby pojawila sie kolejna fala buggy paczek +- **Zero regresji**: zachowane oryginalne backupy podczas patcha (.bak), usuniete dopiero po UAT confirmation + +## Files Created/Modified + +| File | Change | Purpose | +|------|--------|---------| +| `autoload/Shared/Helpers/Helpers.php` | Modified | http->https + urlencode w get_new_version() | +| `autoload/admin/factory/class.Update.php` | Modified | http->https + urlencode w update() | +| `cmstest.../autoload/class.S.php` | Modified | UAT instance hotfix | +| `cmstest.../autoload/admin/factory/class.Update.php` | Modified | UAT instance hotfix | +| `updates/cmsPro.zip` | Modified | Base install patched (legacy nie uzywal klucza, tylko http->https) | +| `updates/**/ver_*.zip` (121) | Modified | http->https w autoload/class.S.php / Helpers.php / factory/Update.php | +| `updates/**/ver_*.zip` (64) | Modified | urlencode wrap (subset 121) | +| `updates/1.50/ver_1.519.zip` | Modified | + anchor injection: class.S.php + factory/Update.php | +| `updates/**/ver_*_manifest.json` (2) | Modified | Przeliczony checksum_zip SHA256 | +| `.paul/phases/04h-hotfix-https-updates/scripts/*.ps1` (5) | Created | Audit, patch, anchor inject, urlencode patch, FTP cleanup | +| `.paul/phases/04h-hotfix-https-updates/*.md` (4) | Created | audit-report, patch-log, patch-urlencode-log, upload-checklist | + +## Decisions Made + +| Decision | Rationale | Impact | +|----------|-----------|--------| +| full-patch wszystkich 121 paczek | Czesciowy patch ryzykowal regresje gdy stara buggy paczka nadpisywala swiezo zaktualizowany class.S.php | 124 pliki do uploadu (vs 3 minimum), ale kazda chain-update sciezka bezpieczna | +| Anchor injection do ver_1.519.zip | Oryginalna paczka (class.Articles.php only) jest "darmowa" wersja na granicy licencji - idealny punkt by gwarantowac dzialajacy klient HTTPS dla wszystkich nowych instancji | Wszystkie nowe instancje od zera dostaja fix przy upgrade do 1.519 | +| .NET FtpWebRequest zamiast curl dla cleanup | curl stderr w PowerShell 5.1 wyrzuca NativeCommandError przy 550, blokujac batch | Cleanup ukonczony bez bledow (1085 .bak) | +| urlencode jako oddzielny etap | Bug ujawniony dopiero podczas UAT (user dodal klucz z #) - zorganizowany jako "rozszerzenie planu" zamiast restart | Czysta sciezka audytowa, oba bugi udokumentowane oddzielnie | + +## Deviations from Plan + +### Summary + +| Type | Count | Impact | +|------|-------|--------| +| Auto-fixed | 1 | urlencode bug discovered during UAT, dodatkowe 3 zadania (patch kodu, patch paczek, cleanup) | +| Scope additions | 1 | FTP cleanup (.bak files na serwerze) - nie planowane, user zlecil po UAT | +| Deferred | 0 | - | + +**Total impact:** Plan ukonczony + 2 niezbedne rozszerzenia odkryte podczas wykonania. + +### Auto-fixed Issues + +**1. URL encoding klucza licencji (krytyczny bug #2)** +- **Found during:** UAT post-Task 8 (user testowal z kluczem `#e@1tUVvZDP:$7dL`) +- **Issue:** Klucz licencji wstrzykiwany raw w URL, znak `#` w kluczu byl traktowany jako fragment delimiter -> serwer dostawal pusty klucz -> zwracal wersje tylko do 1.519 (free tier) +- **Fix:** `urlencode($settings['update_key'])` w kodzie + 64 paczkach + kotwicy +- **Files:** Helpers.php, factory/Update.php (cmsPRO + test instance), 64x ver_*.zip, ver_1.519.zip +- **Verification:** PowerShell scan wszystkich plikow w paczkach: 0/165 bez urlencode wrap + +### Scope Additions + +**1. FTP cleanup .bak files** +- **Trigger:** User polecil usuniecie backupow po UAT confirmation +- **Discovered:** Auto-deploy ftp-kr.json (autoUpload=true, autoDelete=false) wyslal 1085 .bak na serwer +- **Action:** Skrypt cleanup-baks.ps1 (.NET FtpWebRequest) - 355 zdalnych usuniec + lokalne removal +- **Verification:** sample listing /updates/1.50/ - 0 .bak remote, 0 .bak lokalnie + +### Deferred Items + +None. + +## Issues Encountered + +| Issue | Resolution | +|-------|------------| +| PowerShell 5.1 mis-reads UTF-8 file bez BOM (audit-packages.ps1 z em-dash) | Zamieniono "—" na "--", plik czysto ASCII | +| `Substring(0,12)` na "(dry-run)" string (length 9) | Dodany length-guard if | +| curl -Q "DELE name" w katalogu wymaga CWD; bez CWD szuka w root (550) | Zmiana na pelna sciezka w DELE + URL ftp://host/ | +| curl stderr w PowerShell 5.1 = NativeCommandError przy 550 -> ErrorActionPreference Stop blokuje batch | Przepisanie na .NET FtpWebRequest z try/catch na 550 | + +## Next Phase Readiness + +**Ready:** +- Phase 5 (Domain: SeoAdditional + Cron + Releases) moze ruszyc bez zaleznosci od 04h +- Mechanizm update na produkcji odblokowany - nowe wersje moga byc dystrybuowane normalnie +- Skrypty audit/patch w `.paul/phases/04h-hotfix-https-updates/scripts/` dostepne jako template przy podobnych operacjach + +**Concerns:** +- Mechanizm update nadal uzywa `file_get_contents()` bez stream context z verify_peer/follow_location - rekomendacja: w Phase 5 lub Phase 13 przepisac na cURL z proper error handling i SSL verification +- Klucze licencji powinny byc walidowane przy zapisie w settings (max length, allowed chars) - obecnie polegamy na urlencode jako fix +- Brak retry logic przy chwilowym network failure podczas update - obecny kod silnie failuje + +**Blockers:** +- None. Phase 5 moze ruszyc. + +--- +*Phase: 04h-hotfix-https-updates, Plan: 01* +*Completed: 2026-04-26* diff --git a/.paul/phases/04h-hotfix-https-updates/audit-report.md b/.paul/phases/04h-hotfix-https-updates/audit-report.md new file mode 100644 index 0000000..b69341b --- /dev/null +++ b/.paul/phases/04h-hotfix-https-updates/audit-report.md @@ -0,0 +1,722 @@ +# Audit Report: paczki aktualizacji cmsPRO (HTTP -> HTTPS bug) + +**Data:** 2026-04-26 00:14 +**Katalog:** `C:\visual studio code\projekty\cmsPRO\updates` +**Wzorzec buggy:** `http://www.cmspro.project-dc.pl` + +## Podsumowanie + +| Kategoria | Liczba | +|-----------|--------| +| Paczek przeskanowanych | 542 | +| **PATCH (buggy http://)** | **0** | +| OK (juz https albo brak URL) | 147 | +| N/A (brak plikow podejrzanych) | 395 | +| Bledy | 0 | + +## Paczki wymagajace patcha (HasBuggyUrl=true) + +_Brak paczek do patcha._ + +## Paczki zawierajace pliki ale juz na https (OK) + +| # | Paczka | Pliki obecne | +|---|--------|--------------| +| 1 | `cmsPro.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 2 | `0.00\ver_0.03.zip` | autoload/admin/factory/class.Update.php | +| 3 | `0.00\ver_0.07.zip` | autoload/class.S.php | +| 4 | `0.10\ver_0.17.zip` | autoload/class.S.php | +| 5 | `0.10\ver_0.19.zip` | autoload/class.S.php | +| 6 | `0.20\ver_0.22.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 7 | `0.20\ver_0.26.zip` | autoload/admin/factory/class.Update.php | +| 8 | `0.30\ver_0.38.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 9 | `0.40\ver_0.47.zip` | autoload/class.S.php | +| 10 | `0.50\ver_0.54.zip` | autoload/class.S.php | +| 11 | `0.50\ver_0.55.zip` | autoload/class.S.php | +| 12 | `0.50\ver_0.59.zip` | autoload/class.S.php | +| 13 | `0.70\ver_0.71.zip` | autoload/class.S.php | +| 14 | `0.70\ver_0.73.zip` | autoload/class.S.php | +| 15 | `0.70\ver_0.77.zip` | autoload/class.S.php | +| 16 | `0.80\ver_0.82.zip` | autoload/class.S.php | +| 17 | `0.80\ver_0.83.zip` | autoload/class.S.php | +| 18 | `0.80\ver_0.84.zip` | autoload/class.S.php | +| 19 | `0.80\ver_0.86.zip` | autoload/class.S.php | +| 20 | `0.90\ver_0.90.zip` | autoload/class.S.php | +| 21 | `0.90\ver_0.93.zip` | autoload/admin/factory/class.Update.php | +| 22 | `0.90\ver_0.94.zip` | autoload/class.S.php | +| 23 | `1.00\ver_1.09.zip` | autoload/class.S.php | +| 24 | `1.10\ver_1.12.zip` | autoload/class.S.php | +| 25 | `1.20\ver_1.27.zip` | autoload/admin/factory/class.Update.php | +| 26 | `1.20\ver_1.271.zip` | autoload/admin/factory/class.Update.php | +| 27 | `1.20\ver_1.274.zip` | autoload/class.S.php | +| 28 | `1.20\ver_1.279.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 29 | `1.20\ver_1.280.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 30 | `1.20\ver_1.284.zip` | autoload/class.S.php | +| 31 | `1.20\ver_1.285.zip` | autoload/class.S.php | +| 32 | `1.20\ver_1.288.zip` | autoload/class.S.php | +| 33 | `1.20\ver_1.293.zip` | autoload/admin/factory/class.Update.php | +| 34 | `1.20\ver_1.294.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 35 | `1.20\ver_1.295.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 36 | `1.20\ver_1.297.zip` | autoload/class.S.php | +| 37 | `1.20\ver_1.298.zip` | autoload/class.S.php | +| 38 | `1.30\ver_1.300.zip` | autoload/class.S.php | +| 39 | `1.30\ver_1.306.zip` | autoload/class.S.php | +| 40 | `1.30\ver_1.308.zip` | autoload/class.S.php | +| 41 | `1.30\ver_1.318.zip` | autoload/class.S.php | +| 42 | `1.30\ver_1.323.zip` | autoload/class.S.php | +| 43 | `1.30\ver_1.326.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 44 | `1.30\ver_1.334.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 45 | `1.30\ver_1.335.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 46 | `1.30\ver_1.339.zip` | autoload/class.S.php | +| 47 | `1.30\ver_1.346.zip` | autoload/class.S.php | +| 48 | `1.30\ver_1.350.zip` | autoload/class.S.php | +| 49 | `1.30\ver_1.352.zip` | autoload/class.S.php | +| 50 | `1.30\ver_1.354.zip` | autoload/class.S.php | +| 51 | `1.30\ver_1.355.zip` | autoload/class.S.php | +| 52 | `1.30\ver_1.356.zip` | autoload/class.S.php | +| 53 | `1.30\ver_1.357.zip` | autoload/class.S.php | +| 54 | `1.30\ver_1.359.zip` | autoload/class.S.php | +| 55 | `1.30\ver_1.360.zip` | autoload/class.S.php | +| 56 | `1.30\ver_1.370.zip` | autoload/class.S.php | +| 57 | `1.30\ver_1.371.zip` | autoload/class.S.php | +| 58 | `1.30\ver_1.372.zip` | autoload/class.S.php | +| 59 | `1.30\ver_1.375.zip` | autoload/class.S.php | +| 60 | `1.30\ver_1.387.zip` | autoload/class.S.php | +| 61 | `1.30\ver_1.396.zip` | autoload/class.S.php | +| 62 | `1.30\ver_1.397.zip` | autoload/class.S.php | +| 63 | `1.40\ver_1.402.zip` | autoload/class.S.php | +| 64 | `1.40\ver_1.406.zip` | autoload/class.S.php | +| 65 | `1.40\ver_1.408.zip` | autoload/class.S.php | +| 66 | `1.40\ver_1.409.zip` | autoload/class.S.php | +| 67 | `1.40\ver_1.410.zip` | autoload/class.S.php | +| 68 | `1.40\ver_1.411.zip` | autoload/class.S.php | +| 69 | `1.40\ver_1.412.zip` | autoload/class.S.php | +| 70 | `1.40\ver_1.426.zip` | autoload/class.S.php | +| 71 | `1.40\ver_1.432.zip` | autoload/class.S.php | +| 72 | `1.40\ver_1.449.zip` | autoload/class.S.php | +| 73 | `1.40\ver_1.456.zip` | autoload/class.S.php | +| 74 | `1.40\ver_1.462.zip` | autoload/class.S.php | +| 75 | `1.40\ver_1.463.zip` | autoload/class.S.php | +| 76 | `1.40\ver_1.464.zip` | autoload/class.S.php | +| 77 | `1.40\ver_1.482.zip` | autoload/class.S.php | +| 78 | `1.40\ver_1.485.zip` | autoload/class.S.php | +| 79 | `1.40\ver_1.490.zip` | autoload/class.S.php | +| 80 | `1.40\ver_1.496.zip` | autoload/class.S.php | +| 81 | `1.40\ver_1.498.zip` | autoload/class.S.php | +| 82 | `1.50\ver_1.504.zip` | autoload/class.S.php | +| 83 | `1.50\ver_1.507.zip` | autoload/class.S.php | +| 84 | `1.50\ver_1.511.zip` | autoload/class.S.php | +| 85 | `1.50\ver_1.513.zip` | autoload/class.S.php | +| 86 | `1.50\ver_1.515.zip` | autoload/admin/factory/class.Update.php | +| 87 | `1.50\ver_1.517.zip` | autoload/admin/factory/class.Update.php | +| 88 | `1.50\ver_1.518.zip` | autoload/class.S.php | +| 89 | `1.50\ver_1.529.zip` | autoload/class.S.php | +| 90 | `1.50\ver_1.532.zip` | autoload/class.S.php | +| 91 | `1.50\ver_1.533.zip` | autoload/class.S.php | +| 92 | `1.50\ver_1.534.zip` | autoload/class.S.php | +| 93 | `1.50\ver_1.535.zip` | autoload/class.S.php | +| 94 | `1.50\ver_1.536.zip` | autoload/class.S.php | +| 95 | `1.50\ver_1.539.zip` | autoload/class.S.php | +| 96 | `1.50\ver_1.541.zip` | autoload/class.S.php | +| 97 | `1.50\ver_1.546.zip` | autoload/class.S.php | +| 98 | `1.50\ver_1.551.zip` | autoload/class.S.php | +| 99 | `1.50\ver_1.552.zip` | autoload/class.S.php | +| 100 | `1.50\ver_1.554.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 101 | `1.50\ver_1.555.zip` | autoload/class.S.php | +| 102 | `1.50\ver_1.556.zip` | autoload/class.S.php | +| 103 | `1.50\ver_1.557.zip` | autoload/class.S.php | +| 104 | `1.50\ver_1.561.zip` | autoload/class.S.php | +| 105 | `1.50\ver_1.568.zip` | autoload/class.S.php | +| 106 | `1.50\ver_1.572.zip` | autoload/class.S.php | +| 107 | `1.50\ver_1.583.zip` | autoload/class.S.php | +| 108 | `1.50\ver_1.587.zip` | autoload/class.S.php | +| 109 | `1.50\ver_1.589.zip` | autoload/class.S.php | +| 110 | `1.50\ver_1.591.zip` | autoload/class.S.php | +| 111 | `1.60\ver_1.602.zip` | autoload/class.S.php | +| 112 | `1.60\ver_1.610.zip` | autoload/class.S.php | +| 113 | `1.60\ver_1.613.zip` | autoload/class.S.php | +| 114 | `1.60\ver_1.617.zip` | autoload/class.S.php | +| 115 | `1.60\ver_1.618.zip` | autoload/class.S.php | +| 116 | `1.60\ver_1.620.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 117 | `1.60\ver_1.625.zip` | autoload/class.S.php | +| 118 | `1.60\ver_1.626.zip` | autoload/class.S.php | +| 119 | `1.60\ver_1.627.zip` | autoload/class.S.php | +| 120 | `1.60\ver_1.628.zip` | autoload/class.S.php | +| 121 | `1.60\ver_1.633.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 122 | `1.60\ver_1.634.zip` | autoload/class.S.php | +| 123 | `1.60\ver_1.638.zip` | autoload/class.S.php | +| 124 | `1.60\ver_1.642.zip` | autoload/class.S.php | +| 125 | `1.60\ver_1.643.zip` | autoload/class.S.php | +| 126 | `1.60\ver_1.644.zip` | autoload/class.S.php | +| 127 | `1.60\ver_1.645.zip` | autoload/class.S.php | +| 128 | `1.60\ver_1.649.zip` | autoload/class.S.php | +| 129 | `1.60\ver_1.650.zip` | autoload/class.S.php | +| 130 | `1.60\ver_1.651.zip` | autoload/class.S.php | +| 131 | `1.60\ver_1.654.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 132 | `1.60\ver_1.656.zip` | autoload/class.S.php | +| 133 | `1.60\ver_1.660.zip` | autoload/class.S.php | +| 134 | `1.60\ver_1.665.zip` | autoload/class.S.php | +| 135 | `1.60\ver_1.666.zip` | autoload/class.S.php | +| 136 | `1.60\ver_1.669.zip` | autoload/admin/factory/class.Update.php | +| 137 | `1.60\ver_1.674.zip` | autoload/class.S.php | +| 138 | `1.60\ver_1.675.zip` | autoload/class.S.php | +| 139 | `1.60\ver_1.678.zip` | autoload/class.S.php | +| 140 | `1.60\ver_1.680.zip` | autoload/class.S.php | +| 141 | `1.60\ver_1.681.zip` | autoload/class.S.php | +| 142 | `1.60\ver_1.684.zip` | autoload/class.S.php | +| 143 | `1.60\ver_1.687.zip` | autoload/admin/factory/class.Update.php, autoload/class.S.php | +| 144 | `1.60\ver_1.688.zip` | autoload/admin/factory/class.Update.php | +| 145 | `1.60\ver_1.690.zip` | autoload/admin/factory/class.Update.php | +| 146 | `1.60\ver_1.691.zip` | autoload/class.S.php, autoload/Shared/Helpers/Helpers.php | +| 147 | `1.60\ver_1.694.zip` | autoload/Shared/Helpers/Helpers.php | + +## Bledy odczytu + +_Brak._ + +## Pelna lista (raw) + +| Paczka | FilesPresent | HasBuggyUrl | Action | +|--------|--------------|-------------|--------| +| `cmsPro.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `0.00\ver_0.01.zip` | - | False | N/A (no suspect files) | +| `0.00\ver_0.02.zip` | - | False | N/A (no suspect files) | +| `0.00\ver_0.03.zip` | autoload/admin/factory/class.Update.php | False | OK (already https) | +| `0.00\ver_0.04.zip` | - | False | N/A (no suspect files) | +| `0.00\ver_0.05.zip` | - | False | N/A (no suspect files) | +| `0.00\ver_0.06.zip` | - | False | N/A (no suspect files) | +| `0.00\ver_0.07.zip` | autoload/class.S.php | False | OK (already https) | +| `0.00\ver_0.08.zip` | - | False | N/A (no suspect files) | +| `0.00\ver_0.09.zip` | - | False | N/A (no suspect files) | +| `0.10\ver_0.10.zip` | - | False | N/A (no suspect files) | +| `0.10\ver_0.11.zip` | - | False | N/A (no suspect files) | +| `0.10\ver_0.12.zip` | - | False | N/A (no suspect files) | +| `0.10\ver_0.13.zip` | - | False | N/A (no suspect files) | +| `0.10\ver_0.14.zip` | - | False | N/A (no suspect files) | +| `0.10\ver_0.15.zip` | - | False | N/A (no suspect files) | +| `0.10\ver_0.16.zip` | - | False | N/A (no suspect files) | +| `0.10\ver_0.17.zip` | autoload/class.S.php | False | OK (already https) | +| `0.10\ver_0.18.zip` | - | False | N/A (no suspect files) | +| `0.10\ver_0.19.zip` | autoload/class.S.php | False | OK (already https) | +| `0.20\ver_0.20.zip` | - | False | N/A (no suspect files) | +| `0.20\ver_0.21.zip` | - | False | N/A (no suspect files) | +| `0.20\ver_0.22.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `0.20\ver_0.23.zip` | - | False | N/A (no suspect files) | +| `0.20\ver_0.24.zip` | - | False | N/A (no suspect files) | +| `0.20\ver_0.25.zip` | - | False | N/A (no suspect files) | +| `0.20\ver_0.26.zip` | autoload/admin/factory/class.Update.php | False | OK (already https) | +| `0.30\ver_0.38.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `0.30\ver_0.39.zip` | - | False | N/A (no suspect files) | +| `0.40\ver_0.40.zip` | - | False | N/A (no suspect files) | +| `0.40\ver_0.41.zip` | - | False | N/A (no suspect files) | +| `0.40\ver_0.42.zip` | - | False | N/A (no suspect files) | +| `0.40\ver_0.43.zip` | - | False | N/A (no suspect files) | +| `0.40\ver_0.44.zip` | - | False | N/A (no suspect files) | +| `0.40\ver_0.45.zip` | - | False | N/A (no suspect files) | +| `0.40\ver_0.46.zip` | - | False | N/A (no suspect files) | +| `0.40\ver_0.47.zip` | autoload/class.S.php | False | OK (already https) | +| `0.40\ver_0.48.zip` | - | False | N/A (no suspect files) | +| `0.40\ver_0.49.zip` | - | False | N/A (no suspect files) | +| `0.50\ver_0.50.zip` | - | False | N/A (no suspect files) | +| `0.50\ver_0.51.zip` | - | False | N/A (no suspect files) | +| `0.50\ver_0.52.zip` | - | False | N/A (no suspect files) | +| `0.50\ver_0.53.zip` | - | False | N/A (no suspect files) | +| `0.50\ver_0.54.zip` | autoload/class.S.php | False | OK (already https) | +| `0.50\ver_0.55.zip` | autoload/class.S.php | False | OK (already https) | +| `0.50\ver_0.56.zip` | - | False | N/A (no suspect files) | +| `0.50\ver_0.57.zip` | - | False | N/A (no suspect files) | +| `0.50\ver_0.58.zip` | - | False | N/A (no suspect files) | +| `0.50\ver_0.59.zip` | autoload/class.S.php | False | OK (already https) | +| `0.60\ver_0.60.zip` | - | False | N/A (no suspect files) | +| `0.60\ver_0.61.zip` | - | False | N/A (no suspect files) | +| `0.60\ver_0.62.zip` | - | False | N/A (no suspect files) | +| `0.60\ver_0.63.zip` | - | False | N/A (no suspect files) | +| `0.60\ver_0.64.zip` | - | False | N/A (no suspect files) | +| `0.60\ver_0.65.zip` | - | False | N/A (no suspect files) | +| `0.60\ver_0.66.zip` | - | False | N/A (no suspect files) | +| `0.60\ver_0.67.zip` | - | False | N/A (no suspect files) | +| `0.60\ver_0.68.zip` | - | False | N/A (no suspect files) | +| `0.60\ver_0.69.zip` | - | False | N/A (no suspect files) | +| `0.70\ver_0.70.zip` | - | False | N/A (no suspect files) | +| `0.70\ver_0.71.zip` | autoload/class.S.php | False | OK (already https) | +| `0.70\ver_0.72.zip` | - | False | N/A (no suspect files) | +| `0.70\ver_0.73.zip` | autoload/class.S.php | False | OK (already https) | +| `0.70\ver_0.74.zip` | - | False | N/A (no suspect files) | +| `0.70\ver_0.75.zip` | - | False | N/A (no suspect files) | +| `0.70\ver_0.76.zip` | - | False | N/A (no suspect files) | +| `0.70\ver_0.77.zip` | autoload/class.S.php | False | OK (already https) | +| `0.70\ver_0.78.zip` | - | False | N/A (no suspect files) | +| `0.70\ver_0.79.zip` | - | False | N/A (no suspect files) | +| `0.80\ver_0.80.zip` | - | False | N/A (no suspect files) | +| `0.80\ver_0.81.zip` | - | False | N/A (no suspect files) | +| `0.80\ver_0.82.zip` | autoload/class.S.php | False | OK (already https) | +| `0.80\ver_0.83.zip` | autoload/class.S.php | False | OK (already https) | +| `0.80\ver_0.84.zip` | autoload/class.S.php | False | OK (already https) | +| `0.80\ver_0.85.zip` | - | False | N/A (no suspect files) | +| `0.80\ver_0.86.zip` | autoload/class.S.php | False | OK (already https) | +| `0.80\ver_0.87.zip` | - | False | N/A (no suspect files) | +| `0.80\ver_0.88.zip` | - | False | N/A (no suspect files) | +| `0.80\ver_0.89.zip` | - | False | N/A (no suspect files) | +| `0.90\ver_0.90.zip` | autoload/class.S.php | False | OK (already https) | +| `0.90\ver_0.91.zip` | - | False | N/A (no suspect files) | +| `0.90\ver_0.92.zip` | - | False | N/A (no suspect files) | +| `0.90\ver_0.93.zip` | autoload/admin/factory/class.Update.php | False | OK (already https) | +| `0.90\ver_0.94.zip` | autoload/class.S.php | False | OK (already https) | +| `0.90\ver_0.95.zip` | - | False | N/A (no suspect files) | +| `0.90\ver_0.96.zip` | - | False | N/A (no suspect files) | +| `0.90\ver_0.97.zip` | - | False | N/A (no suspect files) | +| `0.90\ver_0.98.zip` | - | False | N/A (no suspect files) | +| `0.90\ver_0.99.zip` | - | False | N/A (no suspect files) | +| `1.00\ver_1.00.zip` | - | False | N/A (no suspect files) | +| `1.00\ver_1.01.zip` | - | False | N/A (no suspect files) | +| `1.00\ver_1.02.zip` | - | False | N/A (no suspect files) | +| `1.00\ver_1.03.zip` | - | False | N/A (no suspect files) | +| `1.00\ver_1.04.zip` | - | False | N/A (no suspect files) | +| `1.00\ver_1.05.zip` | - | False | N/A (no suspect files) | +| `1.00\ver_1.06.zip` | - | False | N/A (no suspect files) | +| `1.00\ver_1.07.zip` | - | False | N/A (no suspect files) | +| `1.00\ver_1.08.zip` | - | False | N/A (no suspect files) | +| `1.00\ver_1.09.zip` | autoload/class.S.php | False | OK (already https) | +| `1.10\ver_1.10.zip` | - | False | N/A (no suspect files) | +| `1.10\ver_1.11.zip` | - | False | N/A (no suspect files) | +| `1.10\ver_1.12.zip` | autoload/class.S.php | False | OK (already https) | +| `1.10\ver_1.13.zip` | - | False | N/A (no suspect files) | +| `1.10\ver_1.14.zip` | - | False | N/A (no suspect files) | +| `1.10\ver_1.15.zip` | - | False | N/A (no suspect files) | +| `1.10\ver_1.16.zip` | - | False | N/A (no suspect files) | +| `1.10\ver_1.17.zip` | - | False | N/A (no suspect files) | +| `1.10\ver_1.18.zip` | - | False | N/A (no suspect files) | +| `1.10\ver_1.19.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.20.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.21.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.22.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.23.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.24.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.25.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.26.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.27.zip` | autoload/admin/factory/class.Update.php | False | OK (already https) | +| `1.20\ver_1.271.zip` | autoload/admin/factory/class.Update.php | False | OK (already https) | +| `1.20\ver_1.272.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.273.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.274.zip` | autoload/class.S.php | False | OK (already https) | +| `1.20\ver_1.275.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.276.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.277.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.278.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.279.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.20\ver_1.280.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.20\ver_1.281.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.282.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.283.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.284.zip` | autoload/class.S.php | False | OK (already https) | +| `1.20\ver_1.285.zip` | autoload/class.S.php | False | OK (already https) | +| `1.20\ver_1.286.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.287.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.288.zip` | autoload/class.S.php | False | OK (already https) | +| `1.20\ver_1.289.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.290.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.291.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.292.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.293.zip` | autoload/admin/factory/class.Update.php | False | OK (already https) | +| `1.20\ver_1.294.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.20\ver_1.295.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.20\ver_1.296.zip` | - | False | N/A (no suspect files) | +| `1.20\ver_1.297.zip` | autoload/class.S.php | False | OK (already https) | +| `1.20\ver_1.298.zip` | autoload/class.S.php | False | OK (already https) | +| `1.20\ver_1.299.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.300.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.301.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.302.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.303.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.304.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.305.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.306.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.307.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.308.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.309.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.310.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.311.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.312.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.313.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.314.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.315.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.316.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.317.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.318.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.319.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.320.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.321.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.322.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.323.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.324.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.325.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.326.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.327.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.328.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.329.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.330.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.331.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.332.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.333.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.334.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.335.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.336.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.337.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.338.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.339.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.340.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.341.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.342.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.343.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.344.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.345.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.346.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.347.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.348.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.349.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.350.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.351.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.352.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.353.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.354.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.355.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.356.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.357.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.358.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.359.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.360.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.361.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.362.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.363.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.364.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.365.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.366.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.367.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.368.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.369.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.370.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.371.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.372.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.373.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.374.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.375.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.376.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.377.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.378.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.379.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.380.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.381.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.382.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.383.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.384.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.385.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.386.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.387.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.388.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.389.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.390.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.391.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.392.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.393.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.394.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.395.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.396.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.397.zip` | autoload/class.S.php | False | OK (already https) | +| `1.30\ver_1.398.zip` | - | False | N/A (no suspect files) | +| `1.30\ver_1.399.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.400.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.401.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.402.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.403.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.404.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.405.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.406.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.407.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.408.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.409.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.410.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.411.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.412.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.413.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.414.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.415.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.416.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.417.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.418.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.419.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.420.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.421.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.422.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.423.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.424.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.425.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.426.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.427.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.428.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.429.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.430.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.431.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.432.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.433.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.434.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.435.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.436.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.437.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.438.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.439.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.440.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.441.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.442.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.443.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.444.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.445.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.446.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.447.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.448.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.449.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.450.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.451.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.452.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.453.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.454.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.455.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.456.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.457.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.458.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.459.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.460.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.461.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.462.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.463.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.464.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.465.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.466.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.467.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.468.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.469.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.470.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.471.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.472.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.473.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.474.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.475.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.476.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.477.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.478.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.479.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.480.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.481.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.482.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.483.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.484.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.485.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.486.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.487.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.488.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.489.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.490.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.491.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.492.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.493.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.494.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.495.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.496.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.497.zip` | - | False | N/A (no suspect files) | +| `1.40\ver_1.498.zip` | autoload/class.S.php | False | OK (already https) | +| `1.40\ver_1.499.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.500.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.501.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.502.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.503.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.504.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.505.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.506.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.507.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.508.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.509.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.510.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.511.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.512.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.513.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.514.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.515.zip` | autoload/admin/factory/class.Update.php | False | OK (already https) | +| `1.50\ver_1.516.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.517.zip` | autoload/admin/factory/class.Update.php | False | OK (already https) | +| `1.50\ver_1.518.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.519.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.520.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.521.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.522.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.523.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.524.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.525.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.526.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.527.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.528.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.529.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.530.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.531.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.532.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.533.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.534.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.535.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.536.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.537.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.538.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.539.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.540.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.541.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.542.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.543.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.544.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.545.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.546.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.547.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.548.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.549.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.550.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.551.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.552.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.553.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.554.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.555.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.556.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.557.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.558.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.559.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.560.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.561.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.562.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.563.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.564.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.565.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.566.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.567.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.568.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.569.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.570.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.571.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.572.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.573.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.574.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.575.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.576.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.577.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.578.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.579.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.580.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.581.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.582.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.583.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.584.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.585.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.586.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.587.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.588.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.589.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.590.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.591.zip` | autoload/class.S.php | False | OK (already https) | +| `1.50\ver_1.592.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.593.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.594.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.595.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.596.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.597.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.598.zip` | - | False | N/A (no suspect files) | +| `1.50\ver_1.599.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.600.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.601.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.602.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.603.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.604.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.605.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.606.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.607.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.608.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.609.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.610.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.611.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.612.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.613.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.614.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.615.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.616.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.617.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.618.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.619.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.620.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.621.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.622.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.623.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.624.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.625.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.626.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.627.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.628.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.629.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.630.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.631.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.632.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.633.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.634.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.635.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.636.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.637.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.638.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.639.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.640.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.641.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.642.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.643.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.644.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.645.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.646.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.647.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.648.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.649.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.650.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.651.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.652.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.653.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.654.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.655.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.656.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.657.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.658.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.659.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.660.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.661.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.662.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.663.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.664.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.665.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.666.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.667.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.668.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.669.zip` | autoload/admin/factory/class.Update.php | False | OK (already https) | +| `1.60\ver_1.670.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.671.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.672.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.673.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.674.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.675.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.676.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.677.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.678.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.679.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.680.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.681.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.682.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.683.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.684.zip` | autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.685.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.686.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.687.zip` | autoload/admin/factory/class.Update.php; autoload/class.S.php | False | OK (already https) | +| `1.60\ver_1.688.zip` | autoload/admin/factory/class.Update.php | False | OK (already https) | +| `1.60\ver_1.689.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.690.zip` | autoload/admin/factory/class.Update.php | False | OK (already https) | +| `1.60\ver_1.691.zip` | autoload/class.S.php; autoload/Shared/Helpers/Helpers.php | False | OK (already https) | +| `1.60\ver_1.692.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.693.zip` | - | False | N/A (no suspect files) | +| `1.60\ver_1.694.zip` | autoload/Shared/Helpers/Helpers.php | False | OK (already https) | +| `1.60\ver_1.695.zip` | - | False | N/A (no suspect files) | \ No newline at end of file diff --git a/.paul/phases/04h-hotfix-https-updates/patch-log.md b/.paul/phases/04h-hotfix-https-updates/patch-log.md new file mode 100644 index 0000000..368ef4f --- /dev/null +++ b/.paul/phases/04h-hotfix-https-updates/patch-log.md @@ -0,0 +1,144 @@ +# Patch Log: paczki aktualizacji cmsPRO (HTTP -> HTTPS) + +**Data:** 2026-04-26 00:14 +**DryRun:** False + +## Podsumowanie + +| Kategoria | Liczba | +|-----------|--------| +| Paczek przeskanowanych | 542 | +| **Spatchowanych** | **121** | +| Pominietych (juz OK / brak buggy) | 421 | +| Manifestow zaktualizowanych | 2 | +| Bledow | 0 | + +## Spatchowane paczki + +| # | Paczka | Pliki | SHA256 (przed) | SHA256 (po) | Manifest | +|---|--------|-------|----------------|-------------|----------| +| 1 | `cmsPro.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `04bae6b928e3` | `34f3efaee333` | - | +| 2 | `1.20\ver_1.279.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `383c5ffa3d54` | `4b2fb3dfc445` | - | +| 3 | `1.20\ver_1.280.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `383c5ffa3d54` | `4b2fb3dfc445` | - | +| 4 | `1.20\ver_1.284.zip` | autoload/class.S.php | `341663d2657e` | `bec02c70641f` | - | +| 5 | `1.20\ver_1.285.zip` | autoload/class.S.php | `ec1a21ebe839` | `bd3d14f0db85` | - | +| 6 | `1.20\ver_1.288.zip` | autoload/class.S.php | `f436e004c786` | `b1e5485ce02b` | - | +| 7 | `1.20\ver_1.293.zip` | autoload/admin/factory/class.Update.php | `5d252576ec2b` | `a90a58d4eac0` | - | +| 8 | `1.20\ver_1.294.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `6ca587ed550b` | `dcbfc2f89315` | - | +| 9 | `1.20\ver_1.295.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `6ca587ed550b` | `dcbfc2f89315` | - | +| 10 | `1.20\ver_1.297.zip` | autoload/class.S.php | `a16402bfd885` | `9adf6ec503b6` | - | +| 11 | `1.20\ver_1.298.zip` | autoload/class.S.php | `30a2c3850523` | `dafec72f64cc` | - | +| 12 | `1.30\ver_1.300.zip` | autoload/class.S.php | `c2244b07f69b` | `59bafbe0d389` | - | +| 13 | `1.30\ver_1.306.zip` | autoload/class.S.php | `1c2278ca6c69` | `ff5978122aae` | - | +| 14 | `1.30\ver_1.308.zip` | autoload/class.S.php | `a50998bb71ac` | `20c441d164fc` | - | +| 15 | `1.30\ver_1.318.zip` | autoload/class.S.php | `1563bb506a27` | `9497bf555b14` | - | +| 16 | `1.30\ver_1.323.zip` | autoload/class.S.php | `3066c4d5bbc4` | `068f67dae09b` | - | +| 17 | `1.30\ver_1.326.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `87a17ea013b8` | `24e06f56613d` | - | +| 18 | `1.30\ver_1.334.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `739aa23ec849` | `a7beadc4e1f5` | - | +| 19 | `1.30\ver_1.335.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `6ce01894f1ad` | `d7fdcd6ac697` | - | +| 20 | `1.30\ver_1.339.zip` | autoload/class.S.php | `04fbfdc032bc` | `afb31fa769a6` | - | +| 21 | `1.30\ver_1.346.zip` | autoload/class.S.php | `de601e22fd37` | `9cb19d96f645` | - | +| 22 | `1.30\ver_1.350.zip` | autoload/class.S.php | `957051eaa2e8` | `4c10a14b2765` | - | +| 23 | `1.30\ver_1.352.zip` | autoload/class.S.php | `18c85499de9f` | `a6a675bb9df9` | - | +| 24 | `1.30\ver_1.354.zip` | autoload/class.S.php | `10636d8b1a5d` | `4871da20d1a4` | - | +| 25 | `1.30\ver_1.355.zip` | autoload/class.S.php | `c20d8850537e` | `778996580d18` | - | +| 26 | `1.30\ver_1.356.zip` | autoload/class.S.php | `f046ae370ae7` | `2b18edb393c3` | - | +| 27 | `1.30\ver_1.357.zip` | autoload/class.S.php | `6a64787b2145` | `8119cc274771` | - | +| 28 | `1.30\ver_1.359.zip` | autoload/class.S.php | `4fad5c6aabf7` | `a279ab6d1d01` | - | +| 29 | `1.30\ver_1.360.zip` | autoload/class.S.php | `4fad5c6aabf7` | `a279ab6d1d01` | - | +| 30 | `1.30\ver_1.370.zip` | autoload/class.S.php | `d0352704b455` | `f0495f6a5bb2` | - | +| 31 | `1.30\ver_1.371.zip` | autoload/class.S.php | `9fa1a7d972dc` | `40acbb4d8daa` | - | +| 32 | `1.30\ver_1.372.zip` | autoload/class.S.php | `daa6036ab2f0` | `f67eb93cd71e` | - | +| 33 | `1.30\ver_1.375.zip` | autoload/class.S.php | `8166a9d6f04b` | `47664cb7b525` | - | +| 34 | `1.30\ver_1.387.zip` | autoload/class.S.php | `61ee5812a27f` | `bd7e98161c4c` | - | +| 35 | `1.30\ver_1.396.zip` | autoload/class.S.php | `6eb93b7df885` | `5fd970139fcf` | - | +| 36 | `1.30\ver_1.397.zip` | autoload/class.S.php | `56127b22eca8` | `ceb27382c399` | - | +| 37 | `1.40\ver_1.402.zip` | autoload/class.S.php | `d8b25871e93d` | `52b24d0bb654` | - | +| 38 | `1.40\ver_1.406.zip` | autoload/class.S.php | `d7b27ca558b4` | `a56ab8fd41ca` | - | +| 39 | `1.40\ver_1.408.zip` | autoload/class.S.php | `302fc65269a4` | `16f159ead1ec` | - | +| 40 | `1.40\ver_1.409.zip` | autoload/class.S.php | `df802724890d` | `3e067a83eaa3` | - | +| 41 | `1.40\ver_1.410.zip` | autoload/class.S.php | `f4be5e2e0999` | `f5b8263df2e0` | - | +| 42 | `1.40\ver_1.411.zip` | autoload/class.S.php | `bd62c4c04ff4` | `6f7b3e395294` | - | +| 43 | `1.40\ver_1.412.zip` | autoload/class.S.php | `167b2313fa75` | `f3afa5ff7b13` | - | +| 44 | `1.40\ver_1.426.zip` | autoload/class.S.php | `c6a5ac5b6555` | `e37dfc765c9b` | - | +| 45 | `1.40\ver_1.432.zip` | autoload/class.S.php | `4395bf30ba05` | `9b92326416e1` | - | +| 46 | `1.40\ver_1.449.zip` | autoload/class.S.php | `b29b8684b667` | `c90420d409df` | - | +| 47 | `1.40\ver_1.456.zip` | autoload/class.S.php | `b0ca8b1e84b2` | `6b571e185eff` | - | +| 48 | `1.40\ver_1.462.zip` | autoload/class.S.php | `031403360a00` | `2a2aa3da9ca6` | - | +| 49 | `1.40\ver_1.463.zip` | autoload/class.S.php | `01f728b96367` | `ce73866bc9ec` | - | +| 50 | `1.40\ver_1.464.zip` | autoload/class.S.php | `d0bfa1257815` | `a63b24622550` | - | +| 51 | `1.40\ver_1.482.zip` | autoload/class.S.php | `54257f3166e7` | `14d264b0b98d` | - | +| 52 | `1.40\ver_1.485.zip` | autoload/class.S.php | `c038736f6415` | `e9deb7665bfe` | - | +| 53 | `1.40\ver_1.490.zip` | autoload/class.S.php | `6d7d8dff3272` | `93b467cf6aba` | - | +| 54 | `1.40\ver_1.496.zip` | autoload/class.S.php | `c8561f2bfc73` | `61d06089ad5a` | - | +| 55 | `1.40\ver_1.498.zip` | autoload/class.S.php | `220174971e2a` | `cbe13607769e` | - | +| 56 | `1.50\ver_1.504.zip` | autoload/class.S.php | `a136d6d17452` | `73d34dd29ec7` | - | +| 57 | `1.50\ver_1.507.zip` | autoload/class.S.php | `92138e1cbf75` | `859b77852121` | - | +| 58 | `1.50\ver_1.511.zip` | autoload/class.S.php | `404dc62348c5` | `9b7efaa0fc8a` | - | +| 59 | `1.50\ver_1.513.zip` | autoload/class.S.php | `25aa0ad5b615` | `3adc785ae512` | - | +| 60 | `1.50\ver_1.515.zip` | autoload/admin/factory/class.Update.php | `61031c1265d2` | `06b3ea74f6a6` | - | +| 61 | `1.50\ver_1.517.zip` | autoload/admin/factory/class.Update.php | `f5d3ab1991a0` | `2c253235eb13` | - | +| 62 | `1.50\ver_1.518.zip` | autoload/class.S.php | `edb21793a950` | `ea8f832ca9b8` | - | +| 63 | `1.50\ver_1.529.zip` | autoload/class.S.php | `ef2ec535dc95` | `1bfc6ee162c0` | - | +| 64 | `1.50\ver_1.532.zip` | autoload/class.S.php | `2254ab1050ea` | `b1f5a3400238` | - | +| 65 | `1.50\ver_1.533.zip` | autoload/class.S.php | `6474410a3c98` | `50a8d5ab9f3e` | - | +| 66 | `1.50\ver_1.534.zip` | autoload/class.S.php | `d0c5b337504d` | `615a96b461eb` | - | +| 67 | `1.50\ver_1.535.zip` | autoload/class.S.php | `a8b92c86e805` | `9f0b57ca61e0` | - | +| 68 | `1.50\ver_1.536.zip` | autoload/class.S.php | `41bf5f8732f0` | `dbb21c2ad437` | - | +| 69 | `1.50\ver_1.539.zip` | autoload/class.S.php | `a3ebe014dfe0` | `f6e47e6e0222` | - | +| 70 | `1.50\ver_1.541.zip` | autoload/class.S.php | `55e86b6ffc1d` | `339e6478b788` | - | +| 71 | `1.50\ver_1.546.zip` | autoload/class.S.php | `8a9609fcfe06` | `a4004fc40564` | - | +| 72 | `1.50\ver_1.551.zip` | autoload/class.S.php | `2fa830f98b5c` | `f2a194a21f6f` | - | +| 73 | `1.50\ver_1.552.zip` | autoload/class.S.php | `8f5f0cb91f2c` | `02b36e5b9337` | - | +| 74 | `1.50\ver_1.554.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `c891ab97735a` | `c1e8e006b29b` | - | +| 75 | `1.50\ver_1.555.zip` | autoload/class.S.php | `90528256f87f` | `2e6766d04fe7` | - | +| 76 | `1.50\ver_1.556.zip` | autoload/class.S.php | `09fe7fc6d4a2` | `575168eccdcf` | - | +| 77 | `1.50\ver_1.557.zip` | autoload/class.S.php | `0fba22ceb174` | `e306fcd762bb` | - | +| 78 | `1.50\ver_1.561.zip` | autoload/class.S.php | `c89b99f8baab` | `404e55549823` | - | +| 79 | `1.50\ver_1.568.zip` | autoload/class.S.php | `19aef1df0e1d` | `d767239d552f` | - | +| 80 | `1.50\ver_1.572.zip` | autoload/class.S.php | `c80d3cfeea79` | `bc3fcfab57a2` | - | +| 81 | `1.50\ver_1.583.zip` | autoload/class.S.php | `24d62f53257e` | `c391e2ad9b33` | - | +| 82 | `1.50\ver_1.587.zip` | autoload/class.S.php | `04d93d40b294` | `aa29c628ff35` | - | +| 83 | `1.50\ver_1.589.zip` | autoload/class.S.php | `2c60a2500e99` | `7edb90603631` | - | +| 84 | `1.50\ver_1.591.zip` | autoload/class.S.php | `05b8f2d1eac4` | `fb5efec03d4a` | - | +| 85 | `1.60\ver_1.602.zip` | autoload/class.S.php | `30812c674805` | `1209aed9a2e6` | - | +| 86 | `1.60\ver_1.610.zip` | autoload/class.S.php | `b0a1d536f259` | `a43d167c6e94` | - | +| 87 | `1.60\ver_1.613.zip` | autoload/class.S.php | `722ed3ab1c42` | `6ed29eb56f96` | - | +| 88 | `1.60\ver_1.617.zip` | autoload/class.S.php | `286f0ac05dd5` | `b9c84e970579` | - | +| 89 | `1.60\ver_1.618.zip` | autoload/class.S.php | `c403d23083cd` | `2864ad9815ce` | - | +| 90 | `1.60\ver_1.620.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `61552b13a991` | `e06a9ea5cf48` | - | +| 91 | `1.60\ver_1.625.zip` | autoload/class.S.php | `a9d90461abbf` | `60ac3e95fe76` | - | +| 92 | `1.60\ver_1.626.zip` | autoload/class.S.php | `ae75632e7acf` | `947e9bc3ec7d` | - | +| 93 | `1.60\ver_1.627.zip` | autoload/class.S.php | `b4078fe9f7d9` | `222c2f3c0d00` | - | +| 94 | `1.60\ver_1.628.zip` | autoload/class.S.php | `fb3bcb641657` | `4c8c937aa428` | - | +| 95 | `1.60\ver_1.633.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `5fc3f3855729` | `f2820c8d647f` | - | +| 96 | `1.60\ver_1.634.zip` | autoload/class.S.php | `2af4b2e2980c` | `3ec716159037` | - | +| 97 | `1.60\ver_1.638.zip` | autoload/class.S.php | `38f87bb189f9` | `7679e1fdc953` | - | +| 98 | `1.60\ver_1.642.zip` | autoload/class.S.php | `b2921f4dd4ab` | `b28d236d6074` | - | +| 99 | `1.60\ver_1.643.zip` | autoload/class.S.php | `08f45c6fe81e` | `3dbcda086ed9` | - | +| 100 | `1.60\ver_1.644.zip` | autoload/class.S.php | `6255d181f388` | `0ea76c426355` | - | +| 101 | `1.60\ver_1.645.zip` | autoload/class.S.php | `6fd50691508f` | `e83b7996da93` | - | +| 102 | `1.60\ver_1.649.zip` | autoload/class.S.php | `936220b76848` | `dc9ffe727576` | - | +| 103 | `1.60\ver_1.650.zip` | autoload/class.S.php | `f4717adef625` | `99886a7c717f` | - | +| 104 | `1.60\ver_1.651.zip` | autoload/class.S.php | `8f92a38ba890` | `93a8b5d3e364` | - | +| 105 | `1.60\ver_1.654.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `d458e3940db5` | `a85ffcab6cda` | - | +| 106 | `1.60\ver_1.656.zip` | autoload/class.S.php | `14c29245a067` | `429b2eee4eec` | - | +| 107 | `1.60\ver_1.660.zip` | autoload/class.S.php | `17dedcc2f029` | `7dca670a5179` | - | +| 108 | `1.60\ver_1.665.zip` | autoload/class.S.php | `2f955790e96b` | `624f1f30213b` | - | +| 109 | `1.60\ver_1.666.zip` | autoload/class.S.php | `9eafa83e3310` | `3e40380c947c` | - | +| 110 | `1.60\ver_1.669.zip` | autoload/admin/factory/class.Update.php | `d2e905b19371` | `b794aca0108b` | - | +| 111 | `1.60\ver_1.674.zip` | autoload/class.S.php | `57e5907e2abc` | `d7c2d02ba4aa` | - | +| 112 | `1.60\ver_1.675.zip` | autoload/class.S.php | `8bfff26ed53e` | `70ee0f5eb299` | - | +| 113 | `1.60\ver_1.678.zip` | autoload/class.S.php | `393b70b31c29` | `445c5b6acf4a` | - | +| 114 | `1.60\ver_1.680.zip` | autoload/class.S.php | `1e8b8e2fc307` | `e4213bf9cc5b` | - | +| 115 | `1.60\ver_1.681.zip` | autoload/class.S.php | `882732e2a479` | `3040f999a7d6` | - | +| 116 | `1.60\ver_1.684.zip` | autoload/class.S.php | `20d02da8a749` | `7232b2d5dc38` | - | +| 117 | `1.60\ver_1.687.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `915dea5e4498` | `fcd36fb50246` | - | +| 118 | `1.60\ver_1.688.zip` | autoload/admin/factory/class.Update.php | `97333e68443c` | `89c7a6cbcbd7` | - | +| 119 | `1.60\ver_1.690.zip` | autoload/admin/factory/class.Update.php | `5852ca60388d` | `df006d6da6ce` | - | +| 120 | `1.60\ver_1.691.zip` | autoload/Shared/Helpers/Helpers.php | `f53230f36d39` | `5a0087c09a5c` | YES | +| 121 | `1.60\ver_1.694.zip` | autoload/Shared/Helpers/Helpers.php | `a21dc4a768bc` | `523351891882` | YES | + +## Bledy + +_Brak._ \ No newline at end of file diff --git a/.paul/phases/04h-hotfix-https-updates/patch-urlencode-log.md b/.paul/phases/04h-hotfix-https-updates/patch-urlencode-log.md new file mode 100644 index 0000000..73bb64a --- /dev/null +++ b/.paul/phases/04h-hotfix-https-updates/patch-urlencode-log.md @@ -0,0 +1,76 @@ +# Patch Log: urlencode($settings[update_key]) + +**Data:** 2026-04-26 00:22 + +Spatchowanych: 64 +Pominietych: 478 +Manifestow zaktualizowanych: 2 +Bledow: 0 + +## Spatchowane +| # | Paczka | Pliki | SHA256 (po) | +|---|--------|-------|-------------| +| 1 | `1.50\ver_1.513.zip` | autoload/class.S.php | `18ec985d1b29a945` | +| 2 | `1.50\ver_1.515.zip` | autoload/admin/factory/class.Update.php | `7ff25bed81fe7767` | +| 3 | `1.50\ver_1.517.zip` | autoload/admin/factory/class.Update.php | `6b448734200893a5` | +| 4 | `1.50\ver_1.518.zip` | autoload/class.S.php | `d50e62f31c56384b` | +| 5 | `1.50\ver_1.519.zip` | autoload/class.S.php
autoload/admin/factory/class.Update.php | `14e5754c75884fcc` | +| 6 | `1.50\ver_1.529.zip` | autoload/class.S.php | `a5846aca666e0d5d` | +| 7 | `1.50\ver_1.532.zip` | autoload/class.S.php | `e8dd85b2449f84c0` | +| 8 | `1.50\ver_1.533.zip` | autoload/class.S.php | `f8a25cf6ba08f2be` | +| 9 | `1.50\ver_1.534.zip` | autoload/class.S.php | `4dca134b68ee82a2` | +| 10 | `1.50\ver_1.535.zip` | autoload/class.S.php | `b5365d4c100e37ab` | +| 11 | `1.50\ver_1.536.zip` | autoload/class.S.php | `b70902dfb4060d7a` | +| 12 | `1.50\ver_1.539.zip` | autoload/class.S.php | `6d29304b96132ebd` | +| 13 | `1.50\ver_1.541.zip` | autoload/class.S.php | `cff7f6080a57ed66` | +| 14 | `1.50\ver_1.546.zip` | autoload/class.S.php | `9b60fae7f31e5df2` | +| 15 | `1.50\ver_1.551.zip` | autoload/class.S.php | `f8ee40fa330d68da` | +| 16 | `1.50\ver_1.552.zip` | autoload/class.S.php | `ad203f8df17e2d10` | +| 17 | `1.50\ver_1.554.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `18ebfa82dce8a823` | +| 18 | `1.50\ver_1.555.zip` | autoload/class.S.php | `f61a10c36b50b36b` | +| 19 | `1.50\ver_1.556.zip` | autoload/class.S.php | `e4b0d3cd835a3657` | +| 20 | `1.50\ver_1.557.zip` | autoload/class.S.php | `8002b8508c1b9b14` | +| 21 | `1.50\ver_1.561.zip` | autoload/class.S.php | `9be69833265da2c8` | +| 22 | `1.50\ver_1.568.zip` | autoload/class.S.php | `dd90fc869058e5a7` | +| 23 | `1.50\ver_1.572.zip` | autoload/class.S.php | `eb0071b94e6342b6` | +| 24 | `1.50\ver_1.583.zip` | autoload/class.S.php | `faf7037812cb1345` | +| 25 | `1.50\ver_1.587.zip` | autoload/class.S.php | `a000fc230209cad4` | +| 26 | `1.50\ver_1.589.zip` | autoload/class.S.php | `23ec9d2ac905f868` | +| 27 | `1.50\ver_1.591.zip` | autoload/class.S.php | `1a69cbc0d87d1f02` | +| 28 | `1.60\ver_1.602.zip` | autoload/class.S.php | `b6bf83583aea4c1c` | +| 29 | `1.60\ver_1.610.zip` | autoload/class.S.php | `a2eb640e5660e51e` | +| 30 | `1.60\ver_1.613.zip` | autoload/class.S.php | `d580047296a40951` | +| 31 | `1.60\ver_1.617.zip` | autoload/class.S.php | `e4b9d2ecd6b62101` | +| 32 | `1.60\ver_1.618.zip` | autoload/class.S.php | `da0dccd5d8129f36` | +| 33 | `1.60\ver_1.620.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `87388a9b597048e0` | +| 34 | `1.60\ver_1.625.zip` | autoload/class.S.php | `af0005fea825b432` | +| 35 | `1.60\ver_1.626.zip` | autoload/class.S.php | `cf084b0f8da8fb34` | +| 36 | `1.60\ver_1.627.zip` | autoload/class.S.php | `2602fedd545a2b84` | +| 37 | `1.60\ver_1.628.zip` | autoload/class.S.php | `33d618d0d5979394` | +| 38 | `1.60\ver_1.633.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `6199f98c0153f2cb` | +| 39 | `1.60\ver_1.634.zip` | autoload/class.S.php | `3356e9fdff7ee6fd` | +| 40 | `1.60\ver_1.638.zip` | autoload/class.S.php | `e436f5498d9eac82` | +| 41 | `1.60\ver_1.642.zip` | autoload/class.S.php | `73db0af058c4dd8e` | +| 42 | `1.60\ver_1.643.zip` | autoload/class.S.php | `5dd7505e5e9b69f9` | +| 43 | `1.60\ver_1.644.zip` | autoload/class.S.php | `3bbf16d10e6101a6` | +| 44 | `1.60\ver_1.645.zip` | autoload/class.S.php | `dc7554805828db03` | +| 45 | `1.60\ver_1.649.zip` | autoload/class.S.php | `a34f456bb22bb49a` | +| 46 | `1.60\ver_1.650.zip` | autoload/class.S.php | `1fded4e332087edd` | +| 47 | `1.60\ver_1.651.zip` | autoload/class.S.php | `974d9c1ed41db26c` | +| 48 | `1.60\ver_1.654.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `23c1a14906b34e2c` | +| 49 | `1.60\ver_1.656.zip` | autoload/class.S.php | `e249d78fedc6d3b2` | +| 50 | `1.60\ver_1.660.zip` | autoload/class.S.php | `7068186d0fde2b1e` | +| 51 | `1.60\ver_1.665.zip` | autoload/class.S.php | `aa1fb3977f5f941c` | +| 52 | `1.60\ver_1.666.zip` | autoload/class.S.php | `437e09dfda4f3341` | +| 53 | `1.60\ver_1.669.zip` | autoload/admin/factory/class.Update.php | `1885535d8ab2ce8c` | +| 54 | `1.60\ver_1.674.zip` | autoload/class.S.php | `9fca9ce185a525b8` | +| 55 | `1.60\ver_1.675.zip` | autoload/class.S.php | `4aad98f5cfb2aa45` | +| 56 | `1.60\ver_1.678.zip` | autoload/class.S.php | `3541cf1cde4deeae` | +| 57 | `1.60\ver_1.680.zip` | autoload/class.S.php | `9a26b92b885b6e9d` | +| 58 | `1.60\ver_1.681.zip` | autoload/class.S.php | `8fb40bb9e3169797` | +| 59 | `1.60\ver_1.684.zip` | autoload/class.S.php | `0ee052905077606a` | +| 60 | `1.60\ver_1.687.zip` | autoload/admin/factory/class.Update.php
autoload/class.S.php | `106e9ac25acf7ed1` | +| 61 | `1.60\ver_1.688.zip` | autoload/admin/factory/class.Update.php | `e77a529410dc519a` | +| 62 | `1.60\ver_1.690.zip` | autoload/admin/factory/class.Update.php | `045d16e46da68af4` | +| 63 | `1.60\ver_1.691.zip` | autoload/Shared/Helpers/Helpers.php | `5e53b1fbf6c5c923` | +| 64 | `1.60\ver_1.694.zip` | autoload/Shared/Helpers/Helpers.php | `cbd51178b1caf4d8` | diff --git a/.paul/phases/04h-hotfix-https-updates/scripts/audit-packages.ps1 b/.paul/phases/04h-hotfix-https-updates/scripts/audit-packages.ps1 new file mode 100644 index 0000000..98d8e50 --- /dev/null +++ b/.paul/phases/04h-hotfix-https-updates/scripts/audit-packages.ps1 @@ -0,0 +1,169 @@ +<# +.SYNOPSIS + Audit wszystkich paczek aktualizacji cmsPRO pod katem buggy http:// URL. + +.DESCRIPTION + Skanuje rekursywnie kazdy ZIP w updates/ (cmsPro.zip oraz updates/**/ver_*.zip). + Dla kazdego ZIP-a sprawdza czy zawiera pliki kandydujace + (autoload/class.S.php, autoload/Shared/Helpers/Helpers.php, + autoload/admin/factory/class.Update.php) i czy te pliki zawieraja + ciag 'http://www.cmspro.project-dc.pl'. + + Output: audit-report.md (tabela markdown sortowana po wersji). + Skrypt NIE modyfikuje paczek. +#> + +[CmdletBinding()] +param( + [string]$UpdatesDir = "C:\visual studio code\projekty\cmsPRO\updates", + [string]$ReportPath = "C:\visual studio code\projekty\cmsPRO\.paul\phases\04h-hotfix-https-updates\audit-report.md" +) + +$ErrorActionPreference = "Stop" +Add-Type -AssemblyName System.IO.Compression.FileSystem + +$BuggyPattern = 'http://www.cmspro.project-dc.pl' +$SuspectFiles = @( + 'autoload/class.S.php', + 'autoload/Shared/Helpers/Helpers.php', + 'autoload/admin/factory/class.Update.php' +) + +function Test-ZipForBug { + param([string]$ZipPath) + + $result = [PSCustomObject]@{ + Package = (Resolve-Path $ZipPath).Path.Substring($UpdatesDir.Length).TrimStart('\','/') + FilesPresent = @() + BuggyFiles = @() + HasBuggyUrl = $false + Action = 'N/A' + Error = $null + } + + try { + $zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath) + foreach ($entry in $zip.Entries) { + $name = $entry.FullName.Replace('\','/') + if ($SuspectFiles -contains $name) { + $result.FilesPresent += $name + $reader = New-Object System.IO.StreamReader($entry.Open()) + $content = $reader.ReadToEnd() + $reader.Close() + if ($content -match [regex]::Escape($BuggyPattern)) { + $result.BuggyFiles += $name + $result.HasBuggyUrl = $true + } + } + } + $zip.Dispose() + } catch { + $result.Error = $_.Exception.Message + } + + if ($result.HasBuggyUrl) { $result.Action = 'PATCH' } + elseif ($result.FilesPresent) { $result.Action = 'OK (already https)' } + else { $result.Action = 'N/A (no suspect files)' } + + return $result +} + +Write-Host "Skanuje $UpdatesDir ..." -ForegroundColor Cyan + +$zips = @() +$baseInstall = Join-Path $UpdatesDir 'cmsPro.zip' +if (Test-Path $baseInstall) { $zips += $baseInstall } +$zips += Get-ChildItem -Path $UpdatesDir -Filter 'ver_*.zip' -Recurse | Sort-Object FullName | ForEach-Object { $_.FullName } + +Write-Host "Znaleziono $($zips.Count) paczek." -ForegroundColor Cyan + +$results = @() +$i = 0 +foreach ($zip in $zips) { + $i++ + Write-Progress -Activity "Audit paczek" -Status "$i / $($zips.Count): $(Split-Path $zip -Leaf)" -PercentComplete (($i / $zips.Count) * 100) + $results += Test-ZipForBug -ZipPath $zip +} +Write-Progress -Activity "Audit paczek" -Completed + +# --- Raport --- +$buggy = $results | Where-Object { $_.HasBuggyUrl } +$ok = $results | Where-Object { $_.FilesPresent -and -not $_.HasBuggyUrl } +$none = $results | Where-Object { -not $_.FilesPresent } +$errored = $results | Where-Object { $_.Error } + +$lines = @() +$lines += '# Audit Report: paczki aktualizacji cmsPRO (HTTP -> HTTPS bug)' +$lines += '' +$lines += "**Data:** $(Get-Date -Format 'yyyy-MM-dd HH:mm')" +$lines += "**Katalog:** ``$UpdatesDir``" +$lines += "**Wzorzec buggy:** ``$BuggyPattern``" +$lines += '' +$lines += '## Podsumowanie' +$lines += '' +$lines += "| Kategoria | Liczba |" +$lines += "|-----------|--------|" +$lines += "| Paczek przeskanowanych | $($results.Count) |" +$lines += "| **PATCH (buggy http://)** | **$($buggy.Count)** |" +$lines += "| OK (juz https albo brak URL) | $($ok.Count) |" +$lines += "| N/A (brak plikow podejrzanych) | $($none.Count) |" +$lines += "| Bledy | $($errored.Count) |" +$lines += '' +$lines += '## Paczki wymagajace patcha (HasBuggyUrl=true)' +$lines += '' +if ($buggy) { + $lines += '| # | Paczka | Buggy pliki |' + $lines += '|---|--------|-------------|' + $idx = 0 + foreach ($r in $buggy) { + $idx++ + $lines += "| $idx | ``$($r.Package)`` | $($r.BuggyFiles -join ', ') |" + } +} else { + $lines += '_Brak paczek do patcha._' +} +$lines += '' +$lines += '## Paczki zawierajace pliki ale juz na https (OK)' +$lines += '' +if ($ok) { + $lines += '| # | Paczka | Pliki obecne |' + $lines += '|---|--------|--------------|' + $idx = 0 + foreach ($r in $ok) { + $idx++ + $lines += "| $idx | ``$($r.Package)`` | $($r.FilesPresent -join ', ') |" + } +} else { + $lines += '_Brak._' +} +$lines += '' +$lines += '## Bledy odczytu' +$lines += '' +if ($errored) { + foreach ($r in $errored) { + $lines += "- ``$($r.Package)`` -- $($r.Error)" + } +} else { + $lines += '_Brak._' +} +$lines += '' +$lines += '## Pelna lista (raw)' +$lines += '' +$lines += '| Paczka | FilesPresent | HasBuggyUrl | Action |' +$lines += '|--------|--------------|-------------|--------|' +foreach ($r in $results) { + $files = if ($r.FilesPresent) { ($r.FilesPresent -join '; ') } else { '-' } + $lines += "| ``$($r.Package)`` | $files | $($r.HasBuggyUrl) | $($r.Action) |" +} + +$utf8 = New-Object System.Text.UTF8Encoding $false +[System.IO.File]::WriteAllText($ReportPath, ($lines -join "`r`n"), $utf8) + +Write-Host "" +Write-Host "Audit zakonczony." -ForegroundColor Green +Write-Host " Paczek: $($results.Count)" +Write-Host " Do patcha: $($buggy.Count)" -ForegroundColor Yellow +Write-Host " OK: $($ok.Count)" +Write-Host " N/A: $($none.Count)" +Write-Host " Bledy: $($errored.Count)" +Write-Host "Raport: $ReportPath" -ForegroundColor Cyan diff --git a/.paul/phases/04h-hotfix-https-updates/scripts/cleanup-baks.ps1 b/.paul/phases/04h-hotfix-https-updates/scripts/cleanup-baks.ps1 new file mode 100644 index 0000000..6239e12 --- /dev/null +++ b/.paul/phases/04h-hotfix-https-updates/scripts/cleanup-baks.ps1 @@ -0,0 +1,88 @@ +<# +.SYNOPSIS + Usuniecie wszystkich .bak / .preurlencode.bak / .preanchor.bak z FTP serwera i lokalnie. + Uzywa .NET FtpWebRequest (szybsze + lepsze error handling niz curl). +#> + +[CmdletBinding()] +param( + [string]$LocalDir = "C:\visual studio code\projekty\cmsPRO\updates", + [string]$RemoteRoot = "/public_html/updates", + [string]$FtpHost = "host117523.hostido.net.pl", + [string]$FtpUser = "www@cmspro.project-dc.pl", + [string]$FtpPass = "aNDCvhA6cnHSQfM24vUE", + [switch]$DryRun +) + +$ErrorActionPreference = "Continue" +$baks = Get-ChildItem $LocalDir -Recurse -File | Where-Object { $_.Name -like '*.bak' } | Sort-Object FullName + +Write-Host "Plikow do skasowania: $($baks.Count)" +if ($DryRun) { Write-Host "DRY-RUN" -ForegroundColor Yellow } + +$cred = New-Object System.Net.NetworkCredential($FtpUser, $FtpPass) +$deleted = 0 +$notFound = 0 +$failed = 0 +$failedList = @() +$i = 0 + +function Delete-Ftp { + param([string]$RemotePath) + $url = "ftp://${FtpHost}${RemotePath}" + $req = [System.Net.FtpWebRequest]::Create($url) + $req.Method = [System.Net.WebRequestMethods+Ftp]::DeleteFile + $req.Credentials = $cred + $req.UsePassive = $true + $req.UseBinary = $true + $req.KeepAlive = $false + $req.Timeout = 30000 + try { + $resp = $req.GetResponse() + $resp.Close() + return @{ ok = $true; status = 'deleted' } + } catch [System.Net.WebException] { + $msg = $_.Exception.Message + if ($msg -match '550' -or $msg -match 'No such file') { + return @{ ok = $true; status = 'not-found' } + } + return @{ ok = $false; status = 'error'; msg = $msg } + } +} + +foreach ($f in $baks) { + $i++ + $rel = $f.FullName.Substring($LocalDir.Length).TrimStart('\','/').Replace('\','/') + $remoteFull = "$RemoteRoot/$rel" + + if (($i % 50) -eq 0) { + Write-Host " $i / $($baks.Count) ... (deleted=$deleted notFound=$notFound failed=$failed)" + } + + if ($DryRun) { + Write-Host " [DRY] DELE $remoteFull" + continue + } + + $r = Delete-Ftp -RemotePath $remoteFull + if ($r.ok) { + if ($r.status -eq 'deleted') { $deleted++ } else { $notFound++ } + Remove-Item -LiteralPath $f.FullName -Force + } else { + $failed++ + $failedList += "$rel -- $($r.msg)" + } +} + +Write-Host "" +Write-Host "Zakonczono." -ForegroundColor Green +Write-Host " Usuniete (FTP+lokal): $deleted" +Write-Host " Brak na serwerze (lokal usuniete): $notFound" +Write-Host " Bledy: $failed" +if ($failedList) { + Write-Host "Pierwsze 10 bledow:" + $failedList | Select-Object -First 10 | ForEach-Object { Write-Host " $_" } + $logPath = "C:\visual studio code\projekty\cmsPRO\.paul\phases\04h-hotfix-https-updates\cleanup-errors.log" + $failedList | Out-File -FilePath $logPath -Encoding utf8 + Write-Host "Pelny log bledow: $logPath" +} diff --git a/.paul/phases/04h-hotfix-https-updates/scripts/inject-anchor-1519.ps1 b/.paul/phases/04h-hotfix-https-updates/scripts/inject-anchor-1519.ps1 new file mode 100644 index 0000000..ebf6fe8 --- /dev/null +++ b/.paul/phases/04h-hotfix-https-updates/scripts/inject-anchor-1519.ps1 @@ -0,0 +1,132 @@ +<# +.SYNOPSIS + Wstrzykuje "kotwice fixa" do ver_1.519.zip. + +.DESCRIPTION + ver_1.519.zip oryginalnie zawiera tylko class.Articles.php. + Dodaje do niego: + - autoload/class.S.php z ver_1.518.zip (juz patched, https://) + - autoload/admin/factory/class.Update.php z ver_1.517.zip (juz patched, https://) + + Cel: kazda nowa instalacja cmsPRO przechodzaca update do 1.519 dostaje + klient HTTPS dla mechanizmu wykrywania nowych wersji. +#> + +[CmdletBinding()] +param( + [string]$UpdatesDir = "C:\visual studio code\projekty\cmsPRO\updates" +) + +$ErrorActionPreference = "Stop" +Add-Type -AssemblyName System.IO.Compression.FileSystem + +$Target = Join-Path $UpdatesDir '1.50\ver_1.519.zip' +$SrcS = Join-Path $UpdatesDir '1.50\ver_1.518.zip' +$SrcUpd = Join-Path $UpdatesDir '1.50\ver_1.517.zip' + +# Backup target (oddzielny od standardowego .bak po patch-packages.ps1) +$bak = "$Target.preanchor.bak" +if (-not (Test-Path $bak)) { + Copy-Item -LiteralPath $Target -Destination $bak -Force + Write-Host "Backup utworzony: $bak" -ForegroundColor Cyan +} + +function Read-EntryBytes { + param([string]$ZipPath, [string]$EntryName) + $zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath) + try { + $entry = $zip.Entries | Where-Object { $_.FullName.Replace('\','/') -eq $EntryName } | Select-Object -First 1 + if (-not $entry) { throw "Entry not found: $EntryName in $ZipPath" } + $stream = $entry.Open() + $ms = New-Object System.IO.MemoryStream + $stream.CopyTo($ms) + $stream.Close() + return $ms.ToArray() + } finally { + $zip.Dispose() + } +} + +function Add-EntryFromBytes { + param([string]$ZipPath, [string]$EntryName, [byte[]]$Content) + $zip = [System.IO.Compression.ZipFile]::Open($ZipPath, [System.IO.Compression.ZipArchiveMode]::Update) + try { + # remove existing if present + $existing = $zip.Entries | Where-Object { $_.FullName.Replace('\','/') -eq $EntryName } | Select-Object -First 1 + if ($existing) { $existing.Delete() } + $newEntry = $zip.CreateEntry($EntryName, [System.IO.Compression.CompressionLevel]::Optimal) + $stream = $newEntry.Open() + $stream.Write($Content, 0, $Content.Length) + $stream.Close() + } finally { + $zip.Dispose() + } +} + +# 1. Read source files +Write-Host "Czytam autoload/class.S.php z ver_1.518.zip..." -ForegroundColor Cyan +$bytesS = Read-EntryBytes -ZipPath $SrcS -EntryName 'autoload/class.S.php' +Write-Host " -> $($bytesS.Length) bytes" + +Write-Host "Czytam autoload/admin/factory/class.Update.php z ver_1.517.zip..." -ForegroundColor Cyan +$bytesUpd = Read-EntryBytes -ZipPath $SrcUpd -EntryName 'autoload/admin/factory/class.Update.php' +Write-Host " -> $($bytesUpd.Length) bytes" + +# 2. Verify they contain https:// (sanity check) +$strS = [System.Text.Encoding]::UTF8.GetString($bytesS) +$strUpd = [System.Text.Encoding]::UTF8.GetString($bytesUpd) +if ($strS -match 'http://www\.cmspro\.project-dc\.pl' -or $strS -notmatch 'https://www\.cmspro\.project-dc\.pl') { + throw "class.S.php z ver_1.518.zip nie jest patched (nadal ma http:// lub brak URL)" +} +if ($strUpd -match 'http://www\.cmspro\.project-dc\.pl' -or $strUpd -notmatch 'https://www\.cmspro\.project-dc\.pl') { + throw "class.Update.php z ver_1.517.zip nie jest patched" +} +Write-Host "Sanity check OK: oba pliki maja https://" -ForegroundColor Green + +# 3. Inject into ver_1.519.zip +Write-Host "Wstrzykuje do ver_1.519.zip..." -ForegroundColor Cyan +Add-EntryFromBytes -ZipPath $Target -EntryName 'autoload/class.S.php' -Content $bytesS +Add-EntryFromBytes -ZipPath $Target -EntryName 'autoload/admin/factory/class.Update.php' -Content $bytesUpd + +# 4. Verify +Write-Host "Weryfikacja..." -ForegroundColor Cyan +$zip = [System.IO.Compression.ZipFile]::OpenRead($Target) +$entries = $zip.Entries | ForEach-Object { $_.FullName.Replace('\','/') } +$zip.Dispose() + +$ok = $true +foreach ($req in @('autoload/class.S.php', 'autoload/admin/factory/class.Update.php', 'autoload/admin/controls/class.Articles.php')) { + if ($entries -contains $req) { + Write-Host " [OK] $req" + } else { + Write-Host " [MISSING] $req" -ForegroundColor Red + $ok = $false + } +} + +# Re-check no http:// +$rezip = [System.IO.Compression.ZipFile]::OpenRead($Target) +foreach ($e in $rezip.Entries) { + $n = $e.FullName.Replace('\','/') + if ($n -in @('autoload/class.S.php', 'autoload/admin/factory/class.Update.php')) { + $r = New-Object System.IO.StreamReader($e.Open()) + $c = $r.ReadToEnd(); $r.Close() + if ($c -match 'http://www\.cmspro\.project-dc\.pl') { + Write-Host " [BUGGY] $n nadal ma http://" -ForegroundColor Red + $ok = $false + } else { + Write-Host " [HTTPS] $n czyste" -ForegroundColor Green + } + } +} +$rezip.Dispose() + +if ($ok) { + $sha = (Get-FileHash -Algorithm SHA256 -Path $Target).Hash.ToLower() + Write-Host "" + Write-Host "ver_1.519.zip jest teraz kotwica fixa." -ForegroundColor Green + Write-Host " SHA256: $sha" +} else { + Write-Host "Wystapily problemy - sprawdz reczny." -ForegroundColor Red + exit 1 +} diff --git a/.paul/phases/04h-hotfix-https-updates/scripts/patch-packages.ps1 b/.paul/phases/04h-hotfix-https-updates/scripts/patch-packages.ps1 new file mode 100644 index 0000000..916ab48 --- /dev/null +++ b/.paul/phases/04h-hotfix-https-updates/scripts/patch-packages.ps1 @@ -0,0 +1,237 @@ +<# +.SYNOPSIS + Patch wszystkich paczek aktualizacji cmsPRO: zamiana http:// -> https:// w buggy plikach. + +.DESCRIPTION + Skanuje rekursywnie kazdy ZIP w updates/. Dla kazdego ZIP-a zawierajacego + pliki kandydujace z buggy URL: + 1. Robi backup .bak (raz, nie nadpisuje istniejacego .bak) + 2. Otwiera ZIP w trybie Update + 3. Dla kazdego buggy pliku: czyta zawartosc, zamienia http -> https, zapisuje + 4. Jesli istnieje sasiadujacy manifest *_manifest.json: przelicza SHA256 i aktualizuje checksum_zip + 5. Loguje akcje + + Output: patch-log.md (lista zmienionych paczek z SHA256 przed/po). +#> + +[CmdletBinding()] +param( + [string]$UpdatesDir = "C:\visual studio code\projekty\cmsPRO\updates", + [string]$LogPath = "C:\visual studio code\projekty\cmsPRO\.paul\phases\04h-hotfix-https-updates\patch-log.md", + [switch]$DryRun +) + +$ErrorActionPreference = "Stop" +Add-Type -AssemblyName System.IO.Compression.FileSystem + +$BuggyPattern = 'http://www.cmspro.project-dc.pl' +$FixedPattern = 'https://www.cmspro.project-dc.pl' +$SuspectFiles = @( + 'autoload/class.S.php', + 'autoload/Shared/Helpers/Helpers.php', + 'autoload/admin/factory/class.Update.php' +) + +function Get-Sha256 { + param([string]$Path) + return (Get-FileHash -Algorithm SHA256 -Path $Path).Hash.ToLower() +} + +function Patch-Zip { + param([string]$ZipPath) + + $log = [PSCustomObject]@{ + Package = (Resolve-Path $ZipPath).Path.Substring($UpdatesDir.Length).TrimStart('\','/') + Sha256Before = $null + Sha256After = $null + PatchedFiles = @() + ManifestUpd = $false + Skipped = $false + Error = $null + } + + # backup + $bak = "$ZipPath.bak" + if (-not (Test-Path $bak)) { + Copy-Item -LiteralPath $ZipPath -Destination $bak -Force + } + $log.Sha256Before = Get-Sha256 -Path $ZipPath + + # quick check: does any suspect file have buggy URL? + $needsPatch = $false + $entriesToPatch = @() + try { + $zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath) + foreach ($entry in $zip.Entries) { + $name = $entry.FullName.Replace('\','/') + if ($SuspectFiles -contains $name) { + $reader = New-Object System.IO.StreamReader($entry.Open()) + $content = $reader.ReadToEnd() + $reader.Close() + if ($content.Contains($BuggyPattern)) { + $needsPatch = $true + $entriesToPatch += $name + } + } + } + $zip.Dispose() + } catch { + $log.Error = "OpenRead: $($_.Exception.Message)" + return $log + } + + if (-not $needsPatch) { + $log.Skipped = $true + $log.Sha256After = $log.Sha256Before + return $log + } + + if ($DryRun) { + $log.PatchedFiles = $entriesToPatch + $log.Sha256After = '(dry-run)' + return $log + } + + # Patch in-place + try { + $zipUpd = [System.IO.Compression.ZipFile]::Open($ZipPath, [System.IO.Compression.ZipArchiveMode]::Update) + foreach ($name in $entriesToPatch) { + $entry = $zipUpd.Entries | Where-Object { $_.FullName.Replace('\','/') -eq $name } | Select-Object -First 1 + if (-not $entry) { continue } + + # Read + $stream = $entry.Open() + $reader = New-Object System.IO.StreamReader($stream) + $content = $reader.ReadToEnd() + $reader.Close() + $stream.Close() + + # Replace + $newContent = $content.Replace($BuggyPattern, $FixedPattern) + if ($newContent -eq $content) { continue } + + # Write back: open writable stream and truncate + $writeStream = $entry.Open() + $writeStream.SetLength(0) + $writer = New-Object System.IO.StreamWriter($writeStream, (New-Object System.Text.UTF8Encoding $false)) + $writer.Write($newContent) + $writer.Flush() + $writer.Close() + $writeStream.Close() + + $log.PatchedFiles += $name + } + $zipUpd.Dispose() + } catch { + $log.Error = "Patch: $($_.Exception.Message)" + return $log + } + + $log.Sha256After = Get-Sha256 -Path $ZipPath + + # Update manifest if exists + $verBase = [System.IO.Path]::GetFileNameWithoutExtension($ZipPath) # e.g. ver_1.519 + $manifestPath = Join-Path (Split-Path $ZipPath -Parent) "${verBase}_manifest.json" + if (Test-Path $manifestPath) { + try { + $jsonRaw = [System.IO.File]::ReadAllText($manifestPath) + # Strip BOM + if ($jsonRaw.Length -gt 0 -and $jsonRaw[0] -eq [char]0xFEFF) { + $jsonRaw = $jsonRaw.Substring(1) + } + $manifest = $jsonRaw | ConvertFrom-Json + if ($manifest.PSObject.Properties.Name -contains 'checksum_zip') { + $manifest.checksum_zip = "sha256:$($log.Sha256After)" + $newJson = $manifest | ConvertTo-Json -Depth 20 + $utf8 = New-Object System.Text.UTF8Encoding $false + [System.IO.File]::WriteAllText($manifestPath, $newJson, $utf8) + $log.ManifestUpd = $true + } + } catch { + $log.Error = "Manifest: $($_.Exception.Message)" + } + } + + return $log +} + +# --- Main --- +Write-Host "Skanuje $UpdatesDir ..." -ForegroundColor Cyan + +$zips = @() +$baseInstall = Join-Path $UpdatesDir 'cmsPro.zip' +if (Test-Path $baseInstall) { $zips += $baseInstall } +$zips += Get-ChildItem -Path $UpdatesDir -Filter 'ver_*.zip' -Recurse | Sort-Object FullName | ForEach-Object { $_.FullName } + +Write-Host "Paczek do sprawdzenia: $($zips.Count)" -ForegroundColor Cyan +if ($DryRun) { Write-Host "DRY-RUN: nic nie bedzie zmienione" -ForegroundColor Yellow } + +$results = @() +$i = 0 +foreach ($zip in $zips) { + $i++ + Write-Progress -Activity "Patch paczek" -Status "$i / $($zips.Count): $(Split-Path $zip -Leaf)" -PercentComplete (($i / $zips.Count) * 100) + $results += Patch-Zip -ZipPath $zip +} +Write-Progress -Activity "Patch paczek" -Completed + +$patched = $results | Where-Object { $_.PatchedFiles.Count -gt 0 -and -not $_.Error } +$skipped = $results | Where-Object { $_.Skipped } +$errored = $results | Where-Object { $_.Error } +$manifUpd = $results | Where-Object { $_.ManifestUpd } + +# Log report +$lines = @() +$lines += '# Patch Log: paczki aktualizacji cmsPRO (HTTP -> HTTPS)' +$lines += '' +$lines += "**Data:** $(Get-Date -Format 'yyyy-MM-dd HH:mm')" +$lines += "**DryRun:** $DryRun" +$lines += '' +$lines += '## Podsumowanie' +$lines += '' +$lines += "| Kategoria | Liczba |" +$lines += "|-----------|--------|" +$lines += "| Paczek przeskanowanych | $($results.Count) |" +$lines += "| **Spatchowanych** | **$($patched.Count)** |" +$lines += "| Pominietych (juz OK / brak buggy) | $($skipped.Count) |" +$lines += "| Manifestow zaktualizowanych | $($manifUpd.Count) |" +$lines += "| Bledow | $($errored.Count) |" +$lines += '' +$lines += '## Spatchowane paczki' +$lines += '' +if ($patched) { + $lines += '| # | Paczka | Pliki | SHA256 (przed) | SHA256 (po) | Manifest |' + $lines += '|---|--------|-------|----------------|-------------|----------|' + $idx = 0 + foreach ($r in $patched) { + $idx++ + $files = ($r.PatchedFiles -join '
') + $man = if ($r.ManifestUpd) { 'YES' } else { '-' } + $shaBefore = if ($r.Sha256Before.Length -ge 12) { $r.Sha256Before.Substring(0,12) } else { $r.Sha256Before } + $shaAfter = if ($r.Sha256After.Length -ge 12) { $r.Sha256After.Substring(0,12) } else { $r.Sha256After } + $lines += "| $idx | ``$($r.Package)`` | $files | ``$shaBefore`` | ``$shaAfter`` | $man |" + } +} else { + $lines += '_Brak._' +} +$lines += '' +$lines += '## Bledy' +$lines += '' +if ($errored) { + foreach ($r in $errored) { + $lines += "- ``$($r.Package)`` -- $($r.Error)" + } +} else { + $lines += '_Brak._' +} + +$utf8 = New-Object System.Text.UTF8Encoding $false +[System.IO.File]::WriteAllText($LogPath, ($lines -join "`r`n"), $utf8) + +Write-Host "" +Write-Host "Patch zakonczony." -ForegroundColor Green +Write-Host " Spatchowanych: $($patched.Count)" -ForegroundColor Yellow +Write-Host " Manifestow updated: $($manifUpd.Count)" +Write-Host " Pominietych: $($skipped.Count)" +Write-Host " Bledow: $($errored.Count)" +Write-Host "Log: $LogPath" -ForegroundColor Cyan diff --git a/.paul/phases/04h-hotfix-https-updates/scripts/patch-urlencode.ps1 b/.paul/phases/04h-hotfix-https-updates/scripts/patch-urlencode.ps1 new file mode 100644 index 0000000..1ad597c --- /dev/null +++ b/.paul/phases/04h-hotfix-https-updates/scripts/patch-urlencode.ps1 @@ -0,0 +1,227 @@ +<# +.SYNOPSIS + Patch wszystkich paczek aktualizacji: dodanie urlencode() na update_key w URL. + +.DESCRIPTION + Po wczesniejszym patchu http->https, klucz licencji nadal wysylany jako raw string. + Klucze zawierajace # @ : $ etc. lamia URL. Fix: urlencode($settings['update_key']). + + Wzorce zamiany (oba warianty pliku class.S.php legacy oraz Helpers.php nowy): + 1. ?key=' . $settings['update_key']) -> ?key=' . urlencode($settings['update_key'])) + 2. ?key=' . $settings['update_key'] ) -> ?key=' . urlencode( $settings['update_key'] ) ) + + Idempotentny: pomija pliki ktore juz maja urlencode(). +#> + +[CmdletBinding()] +param( + [string]$UpdatesDir = "C:\visual studio code\projekty\cmsPRO\updates", + [string]$LogPath = "C:\visual studio code\projekty\cmsPRO\.paul\phases\04h-hotfix-https-updates\patch-urlencode-log.md" +) + +$ErrorActionPreference = "Stop" +Add-Type -AssemblyName System.IO.Compression.FileSystem + +$SuspectFiles = @( + 'autoload/class.S.php', + 'autoload/Shared/Helpers/Helpers.php', + 'autoload/admin/factory/class.Update.php' +) + +# Zwraca $true jesli content zawiera buggy pattern (raw $settings['update_key'] w URL) +function Test-NeedsUrlencode { + param([string]$Content) + # already has urlencode wrapping update_key? + if ($Content -match "urlencode\s*\(\s*\`$settings\[\s*'update_key'\s*\]\s*\)") { + # check if there's still any RAW occurrence + # Strategy: count raw vs encoded occurrences + $raw = ([regex]::Matches($Content, "\`$settings\[\s*'update_key'\s*\]")).Count + $enc = ([regex]::Matches($Content, "urlencode\s*\(\s*\`$settings\[\s*'update_key'\s*\]\s*\)")).Count + return ($raw -gt $enc) # any raw not yet wrapped + } + return ($Content -match "key=['""]?\s*\.\s*\`$settings\[\s*'update_key'\s*\]") +} + +function Apply-UrlencodePatch { + param([string]$Content) + # Two flavors of whitespace: with and without spaces inside brackets + # Replacement strategy: find $settings['update_key'] preceded by something containing ?key= and . and replace with urlencode wrap + # Safest: match the full "?key=' . $settings['update_key']" with optional spaces/quotes/closing ). + + # Variant A: ?key=' . $settings['update_key'] (no trailing space, may have ) or ; after) + $newContent = [regex]::Replace($Content, + "(\?key=['""]?\s*\.\s*)(\`$settings\[\s*'update_key'\s*\])", + '$1urlencode($2)' + ) + return $newContent +} + +function Patch-Zip { + param([string]$ZipPath) + + $log = [PSCustomObject]@{ + Package = (Resolve-Path $ZipPath).Path.Substring($UpdatesDir.Length).TrimStart('\','/') + Sha256Before = $null + Sha256After = $null + PatchedFiles = @() + ManifestUpd = $false + Skipped = $false + Error = $null + } + + # backup (separate from previous .bak) + $bak = "$ZipPath.preurlencode.bak" + if (-not (Test-Path $bak)) { + Copy-Item -LiteralPath $ZipPath -Destination $bak -Force + } + $log.Sha256Before = (Get-FileHash -Algorithm SHA256 -Path $ZipPath).Hash.ToLower() + + # Find entries needing patch + $entriesToPatch = @() + try { + $zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath) + foreach ($entry in $zip.Entries) { + $name = $entry.FullName.Replace('\','/') + if ($SuspectFiles -contains $name) { + $reader = New-Object System.IO.StreamReader($entry.Open()) + $content = $reader.ReadToEnd() + $reader.Close() + if (Test-NeedsUrlencode -Content $content) { + $entriesToPatch += $name + } + } + } + $zip.Dispose() + } catch { + $log.Error = "OpenRead: $($_.Exception.Message)" + return $log + } + + if (-not $entriesToPatch) { + $log.Skipped = $true + $log.Sha256After = $log.Sha256Before + return $log + } + + # Patch in-place + try { + $zipUpd = [System.IO.Compression.ZipFile]::Open($ZipPath, [System.IO.Compression.ZipArchiveMode]::Update) + foreach ($name in $entriesToPatch) { + $entry = $zipUpd.Entries | Where-Object { $_.FullName.Replace('\','/') -eq $name } | Select-Object -First 1 + if (-not $entry) { continue } + + $stream = $entry.Open() + $reader = New-Object System.IO.StreamReader($stream) + $content = $reader.ReadToEnd() + $reader.Close() + $stream.Close() + + $newContent = Apply-UrlencodePatch -Content $content + if ($newContent -eq $content) { continue } + + $writeStream = $entry.Open() + $writeStream.SetLength(0) + $writer = New-Object System.IO.StreamWriter($writeStream, (New-Object System.Text.UTF8Encoding $false)) + $writer.Write($newContent) + $writer.Flush() + $writer.Close() + $writeStream.Close() + + $log.PatchedFiles += $name + } + $zipUpd.Dispose() + } catch { + $log.Error = "Patch: $($_.Exception.Message)" + return $log + } + + $log.Sha256After = (Get-FileHash -Algorithm SHA256 -Path $ZipPath).Hash.ToLower() + + # Update manifest + $verBase = [System.IO.Path]::GetFileNameWithoutExtension($ZipPath) + $manifestPath = Join-Path (Split-Path $ZipPath -Parent) "${verBase}_manifest.json" + if (Test-Path $manifestPath) { + try { + $jsonRaw = [System.IO.File]::ReadAllText($manifestPath) + if ($jsonRaw.Length -gt 0 -and $jsonRaw[0] -eq [char]0xFEFF) { + $jsonRaw = $jsonRaw.Substring(1) + } + $manifest = $jsonRaw | ConvertFrom-Json + if ($manifest.PSObject.Properties.Name -contains 'checksum_zip') { + $manifest.checksum_zip = "sha256:$($log.Sha256After)" + $newJson = $manifest | ConvertTo-Json -Depth 20 + $utf8 = New-Object System.Text.UTF8Encoding $false + [System.IO.File]::WriteAllText($manifestPath, $newJson, $utf8) + $log.ManifestUpd = $true + } + } catch { + $log.Error = "Manifest: $($_.Exception.Message)" + } + } + + return $log +} + +# --- Main --- +Write-Host "Skanuje $UpdatesDir ..." -ForegroundColor Cyan + +$zips = @() +$baseInstall = Join-Path $UpdatesDir 'cmsPro.zip' +if (Test-Path $baseInstall) { $zips += $baseInstall } +$zips += Get-ChildItem -Path $UpdatesDir -Filter 'ver_*.zip' -Recurse | Sort-Object FullName | ForEach-Object { $_.FullName } + +Write-Host "Paczek do sprawdzenia: $($zips.Count)" -ForegroundColor Cyan + +$results = @() +$i = 0 +foreach ($zip in $zips) { + $i++ + Write-Progress -Activity "Patch urlencode" -Status "$i / $($zips.Count)" -PercentComplete (($i / $zips.Count) * 100) + $results += Patch-Zip -ZipPath $zip +} +Write-Progress -Activity "Patch urlencode" -Completed + +$patched = $results | Where-Object { $_.PatchedFiles.Count -gt 0 -and -not $_.Error } +$skipped = $results | Where-Object { $_.Skipped } +$errored = $results | Where-Object { $_.Error } +$manifUpd = $results | Where-Object { $_.ManifestUpd } + +# Log +$lines = @() +$lines += '# Patch Log: urlencode($settings[update_key])' +$lines += '' +$lines += "**Data:** $(Get-Date -Format 'yyyy-MM-dd HH:mm')" +$lines += '' +$lines += "Spatchowanych: $($patched.Count)" +$lines += "Pominietych: $($skipped.Count)" +$lines += "Manifestow zaktualizowanych: $($manifUpd.Count)" +$lines += "Bledow: $($errored.Count)" +$lines += '' +$lines += '## Spatchowane' +if ($patched) { + $lines += '| # | Paczka | Pliki | SHA256 (po) |' + $lines += '|---|--------|-------|-------------|' + $idx = 0 + foreach ($r in $patched) { + $idx++ + $files = ($r.PatchedFiles -join '
') + $sha = if ($r.Sha256After.Length -ge 16) { $r.Sha256After.Substring(0,16) } else { $r.Sha256After } + $lines += "| $idx | ``$($r.Package)`` | $files | ``$sha`` |" + } +} +$lines += '' +if ($errored) { + $lines += '## Bledy' + foreach ($r in $errored) { $lines += "- ``$($r.Package)`` -- $($r.Error)" } +} + +$utf8 = New-Object System.Text.UTF8Encoding $false +[System.IO.File]::WriteAllText($LogPath, ($lines -join "`r`n"), $utf8) + +Write-Host "" +Write-Host "Patch urlencode zakonczony." -ForegroundColor Green +Write-Host " Spatchowanych: $($patched.Count)" -ForegroundColor Yellow +Write-Host " Manifestow updated: $($manifUpd.Count)" +Write-Host " Pominietych: $($skipped.Count)" +Write-Host " Bledow: $($errored.Count)" +Write-Host "Log: $LogPath" -ForegroundColor Cyan diff --git a/.paul/phases/04h-hotfix-https-updates/upload-checklist.md b/.paul/phases/04h-hotfix-https-updates/upload-checklist.md new file mode 100644 index 0000000..2d30882 --- /dev/null +++ b/.paul/phases/04h-hotfix-https-updates/upload-checklist.md @@ -0,0 +1,158 @@ +# Upload Checklist v2: paczki cmsPRO po hotfixie HTTPS + urlencode + +**Data:** 2026-04-26 00:24 +**Liczba plikow:** 124 + +## Co zostalo zmienione w stosunku do checklist v1 + +- Dodatkowy patch: `urlencode($settings[update_key])` we wszystkich plikach uzywajacych klucza w URL +- Powod: klucze licencji moga zawierac znaki specjalne (#, @, :, $, &), ktore lamia URL bez encodingu +- 64 paczki dotalismy ponownie w tym etapie (oprocz 121 z etapu http->https) +- Niektore paczki maja podwojny patch -> nowy SHA256 -> upload ponowny +- ver_1.519.zip (kotwica) tez zostal zaktualizowany (urlencode w wstrzyknietych plikach) + +## Pliki do uploadu na cmspro.project-dc.pl + +| # | Plik | Sciezka docelowa | SHA256 | Powod | +|---|------|------------------|--------|-------| +| 1 | `cmsPro.zip` | `/updates/cmsPro.zip` | `34f3efaee3333e04...` | http->https | +| 2 | `ver_1.279.zip` | `/updates/1.20/ver_1.279.zip` | `4b2fb3dfc4452621...` | urlencode | +| 3 | `ver_1.280.zip` | `/updates/1.20/ver_1.280.zip` | `4b2fb3dfc4452621...` | urlencode | +| 4 | `ver_1.284.zip` | `/updates/1.20/ver_1.284.zip` | `bec02c70641fd188...` | urlencode | +| 5 | `ver_1.285.zip` | `/updates/1.20/ver_1.285.zip` | `bd3d14f0db85f06a...` | urlencode | +| 6 | `ver_1.288.zip` | `/updates/1.20/ver_1.288.zip` | `b1e5485ce02b074c...` | urlencode | +| 7 | `ver_1.293.zip` | `/updates/1.20/ver_1.293.zip` | `a90a58d4eac0e466...` | urlencode | +| 8 | `ver_1.294.zip` | `/updates/1.20/ver_1.294.zip` | `dcbfc2f893151138...` | urlencode | +| 9 | `ver_1.295.zip` | `/updates/1.20/ver_1.295.zip` | `dcbfc2f893151138...` | urlencode | +| 10 | `ver_1.297.zip` | `/updates/1.20/ver_1.297.zip` | `9adf6ec503b6051f...` | urlencode | +| 11 | `ver_1.298.zip` | `/updates/1.20/ver_1.298.zip` | `dafec72f64cc9eed...` | urlencode | +| 12 | `ver_1.300.zip` | `/updates/1.30/ver_1.300.zip` | `59bafbe0d3891a7d...` | urlencode | +| 13 | `ver_1.306.zip` | `/updates/1.30/ver_1.306.zip` | `ff5978122aaee370...` | urlencode | +| 14 | `ver_1.308.zip` | `/updates/1.30/ver_1.308.zip` | `20c441d164fcd036...` | urlencode | +| 15 | `ver_1.318.zip` | `/updates/1.30/ver_1.318.zip` | `9497bf555b14003a...` | urlencode | +| 16 | `ver_1.323.zip` | `/updates/1.30/ver_1.323.zip` | `068f67dae09b458a...` | urlencode | +| 17 | `ver_1.326.zip` | `/updates/1.30/ver_1.326.zip` | `24e06f56613dd17d...` | urlencode | +| 18 | `ver_1.334.zip` | `/updates/1.30/ver_1.334.zip` | `a7beadc4e1f5d390...` | urlencode | +| 19 | `ver_1.335.zip` | `/updates/1.30/ver_1.335.zip` | `d7fdcd6ac69768b0...` | urlencode | +| 20 | `ver_1.339.zip` | `/updates/1.30/ver_1.339.zip` | `afb31fa769a6da47...` | urlencode | +| 21 | `ver_1.346.zip` | `/updates/1.30/ver_1.346.zip` | `9cb19d96f645d88d...` | urlencode | +| 22 | `ver_1.350.zip` | `/updates/1.30/ver_1.350.zip` | `4c10a14b2765c807...` | urlencode | +| 23 | `ver_1.352.zip` | `/updates/1.30/ver_1.352.zip` | `a6a675bb9df92408...` | urlencode | +| 24 | `ver_1.354.zip` | `/updates/1.30/ver_1.354.zip` | `4871da20d1a44ef8...` | urlencode | +| 25 | `ver_1.355.zip` | `/updates/1.30/ver_1.355.zip` | `778996580d1869a0...` | urlencode | +| 26 | `ver_1.356.zip` | `/updates/1.30/ver_1.356.zip` | `2b18edb393c32869...` | urlencode | +| 27 | `ver_1.357.zip` | `/updates/1.30/ver_1.357.zip` | `8119cc274771a7bd...` | urlencode | +| 28 | `ver_1.359.zip` | `/updates/1.30/ver_1.359.zip` | `a279ab6d1d016c58...` | urlencode | +| 29 | `ver_1.360.zip` | `/updates/1.30/ver_1.360.zip` | `a279ab6d1d016c58...` | urlencode | +| 30 | `ver_1.370.zip` | `/updates/1.30/ver_1.370.zip` | `f0495f6a5bb2ab4d...` | urlencode | +| 31 | `ver_1.371.zip` | `/updates/1.30/ver_1.371.zip` | `40acbb4d8daa54b6...` | urlencode | +| 32 | `ver_1.372.zip` | `/updates/1.30/ver_1.372.zip` | `f67eb93cd71e49a4...` | urlencode | +| 33 | `ver_1.375.zip` | `/updates/1.30/ver_1.375.zip` | `47664cb7b525a885...` | urlencode | +| 34 | `ver_1.387.zip` | `/updates/1.30/ver_1.387.zip` | `bd7e98161c4ca652...` | urlencode | +| 35 | `ver_1.396.zip` | `/updates/1.30/ver_1.396.zip` | `5fd970139fcfb13a...` | urlencode | +| 36 | `ver_1.397.zip` | `/updates/1.30/ver_1.397.zip` | `ceb27382c39935c9...` | urlencode | +| 37 | `ver_1.402.zip` | `/updates/1.40/ver_1.402.zip` | `52b24d0bb654b130...` | urlencode | +| 38 | `ver_1.406.zip` | `/updates/1.40/ver_1.406.zip` | `a56ab8fd41ca825b...` | urlencode | +| 39 | `ver_1.408.zip` | `/updates/1.40/ver_1.408.zip` | `16f159ead1ec925b...` | urlencode | +| 40 | `ver_1.409.zip` | `/updates/1.40/ver_1.409.zip` | `3e067a83eaa30f12...` | urlencode | +| 41 | `ver_1.410.zip` | `/updates/1.40/ver_1.410.zip` | `f5b8263df2e067ff...` | urlencode | +| 42 | `ver_1.411.zip` | `/updates/1.40/ver_1.411.zip` | `6f7b3e39529430b1...` | urlencode | +| 43 | `ver_1.412.zip` | `/updates/1.40/ver_1.412.zip` | `f3afa5ff7b13cc18...` | urlencode | +| 44 | `ver_1.426.zip` | `/updates/1.40/ver_1.426.zip` | `e37dfc765c9b107e...` | urlencode | +| 45 | `ver_1.432.zip` | `/updates/1.40/ver_1.432.zip` | `9b92326416e1f2cd...` | urlencode | +| 46 | `ver_1.449.zip` | `/updates/1.40/ver_1.449.zip` | `c90420d409df98e3...` | urlencode | +| 47 | `ver_1.456.zip` | `/updates/1.40/ver_1.456.zip` | `6b571e185effd8c6...` | urlencode | +| 48 | `ver_1.462.zip` | `/updates/1.40/ver_1.462.zip` | `2a2aa3da9ca66359...` | urlencode | +| 49 | `ver_1.463.zip` | `/updates/1.40/ver_1.463.zip` | `ce73866bc9ec8168...` | urlencode | +| 50 | `ver_1.464.zip` | `/updates/1.40/ver_1.464.zip` | `a63b24622550f942...` | urlencode | +| 51 | `ver_1.482.zip` | `/updates/1.40/ver_1.482.zip` | `14d264b0b98d1369...` | urlencode | +| 52 | `ver_1.485.zip` | `/updates/1.40/ver_1.485.zip` | `e9deb7665bfeec3f...` | urlencode | +| 53 | `ver_1.490.zip` | `/updates/1.40/ver_1.490.zip` | `93b467cf6aba1301...` | urlencode | +| 54 | `ver_1.496.zip` | `/updates/1.40/ver_1.496.zip` | `61d06089ad5a67ae...` | urlencode | +| 55 | `ver_1.498.zip` | `/updates/1.40/ver_1.498.zip` | `cbe13607769ed2fa...` | urlencode | +| 56 | `ver_1.504.zip` | `/updates/1.50/ver_1.504.zip` | `73d34dd29ec72245...` | urlencode | +| 57 | `ver_1.507.zip` | `/updates/1.50/ver_1.507.zip` | `859b77852121bec8...` | urlencode | +| 58 | `ver_1.511.zip` | `/updates/1.50/ver_1.511.zip` | `9b7efaa0fc8acede...` | urlencode | +| 59 | `ver_1.513.zip` | `/updates/1.50/ver_1.513.zip` | `18ec985d1b29a945...` | urlencode | +| 60 | `ver_1.515.zip` | `/updates/1.50/ver_1.515.zip` | `7ff25bed81fe7767...` | urlencode | +| 61 | `ver_1.517.zip` | `/updates/1.50/ver_1.517.zip` | `6b448734200893a5...` | urlencode | +| 62 | `ver_1.518.zip` | `/updates/1.50/ver_1.518.zip` | `d50e62f31c56384b...` | urlencode | +| 63 | `ver_1.519.zip` | `/updates/1.50/ver_1.519.zip` | `14e5754c75884fcc...` | urlencode+anchor-injection | +| 64 | `ver_1.529.zip` | `/updates/1.50/ver_1.529.zip` | `a5846aca666e0d5d...` | urlencode | +| 65 | `ver_1.532.zip` | `/updates/1.50/ver_1.532.zip` | `e8dd85b2449f84c0...` | urlencode | +| 66 | `ver_1.533.zip` | `/updates/1.50/ver_1.533.zip` | `f8a25cf6ba08f2be...` | urlencode | +| 67 | `ver_1.534.zip` | `/updates/1.50/ver_1.534.zip` | `4dca134b68ee82a2...` | urlencode | +| 68 | `ver_1.535.zip` | `/updates/1.50/ver_1.535.zip` | `b5365d4c100e37ab...` | urlencode | +| 69 | `ver_1.536.zip` | `/updates/1.50/ver_1.536.zip` | `b70902dfb4060d7a...` | urlencode | +| 70 | `ver_1.539.zip` | `/updates/1.50/ver_1.539.zip` | `6d29304b96132ebd...` | urlencode | +| 71 | `ver_1.541.zip` | `/updates/1.50/ver_1.541.zip` | `cff7f6080a57ed66...` | urlencode | +| 72 | `ver_1.546.zip` | `/updates/1.50/ver_1.546.zip` | `9b60fae7f31e5df2...` | urlencode | +| 73 | `ver_1.551.zip` | `/updates/1.50/ver_1.551.zip` | `f8ee40fa330d68da...` | urlencode | +| 74 | `ver_1.552.zip` | `/updates/1.50/ver_1.552.zip` | `ad203f8df17e2d10...` | urlencode | +| 75 | `ver_1.554.zip` | `/updates/1.50/ver_1.554.zip` | `18ebfa82dce8a823...` | urlencode | +| 76 | `ver_1.555.zip` | `/updates/1.50/ver_1.555.zip` | `f61a10c36b50b36b...` | urlencode | +| 77 | `ver_1.556.zip` | `/updates/1.50/ver_1.556.zip` | `e4b0d3cd835a3657...` | urlencode | +| 78 | `ver_1.557.zip` | `/updates/1.50/ver_1.557.zip` | `8002b8508c1b9b14...` | urlencode | +| 79 | `ver_1.561.zip` | `/updates/1.50/ver_1.561.zip` | `9be69833265da2c8...` | urlencode | +| 80 | `ver_1.568.zip` | `/updates/1.50/ver_1.568.zip` | `dd90fc869058e5a7...` | urlencode | +| 81 | `ver_1.572.zip` | `/updates/1.50/ver_1.572.zip` | `eb0071b94e6342b6...` | urlencode | +| 82 | `ver_1.583.zip` | `/updates/1.50/ver_1.583.zip` | `faf7037812cb1345...` | urlencode | +| 83 | `ver_1.587.zip` | `/updates/1.50/ver_1.587.zip` | `a000fc230209cad4...` | urlencode | +| 84 | `ver_1.589.zip` | `/updates/1.50/ver_1.589.zip` | `23ec9d2ac905f868...` | urlencode | +| 85 | `ver_1.591.zip` | `/updates/1.50/ver_1.591.zip` | `1a69cbc0d87d1f02...` | urlencode | +| 86 | `ver_1.602.zip` | `/updates/1.60/ver_1.602.zip` | `b6bf83583aea4c1c...` | urlencode | +| 87 | `ver_1.610.zip` | `/updates/1.60/ver_1.610.zip` | `a2eb640e5660e51e...` | urlencode | +| 88 | `ver_1.613.zip` | `/updates/1.60/ver_1.613.zip` | `d580047296a40951...` | urlencode | +| 89 | `ver_1.617.zip` | `/updates/1.60/ver_1.617.zip` | `e4b9d2ecd6b62101...` | urlencode | +| 90 | `ver_1.618.zip` | `/updates/1.60/ver_1.618.zip` | `da0dccd5d8129f36...` | urlencode | +| 91 | `ver_1.620.zip` | `/updates/1.60/ver_1.620.zip` | `87388a9b597048e0...` | urlencode | +| 92 | `ver_1.625.zip` | `/updates/1.60/ver_1.625.zip` | `af0005fea825b432...` | urlencode | +| 93 | `ver_1.626.zip` | `/updates/1.60/ver_1.626.zip` | `cf084b0f8da8fb34...` | urlencode | +| 94 | `ver_1.627.zip` | `/updates/1.60/ver_1.627.zip` | `2602fedd545a2b84...` | urlencode | +| 95 | `ver_1.628.zip` | `/updates/1.60/ver_1.628.zip` | `33d618d0d5979394...` | urlencode | +| 96 | `ver_1.633.zip` | `/updates/1.60/ver_1.633.zip` | `6199f98c0153f2cb...` | urlencode | +| 97 | `ver_1.634.zip` | `/updates/1.60/ver_1.634.zip` | `3356e9fdff7ee6fd...` | urlencode | +| 98 | `ver_1.638.zip` | `/updates/1.60/ver_1.638.zip` | `e436f5498d9eac82...` | urlencode | +| 99 | `ver_1.642.zip` | `/updates/1.60/ver_1.642.zip` | `73db0af058c4dd8e...` | urlencode | +| 100 | `ver_1.643.zip` | `/updates/1.60/ver_1.643.zip` | `5dd7505e5e9b69f9...` | urlencode | +| 101 | `ver_1.644.zip` | `/updates/1.60/ver_1.644.zip` | `3bbf16d10e6101a6...` | urlencode | +| 102 | `ver_1.645.zip` | `/updates/1.60/ver_1.645.zip` | `dc7554805828db03...` | urlencode | +| 103 | `ver_1.649.zip` | `/updates/1.60/ver_1.649.zip` | `a34f456bb22bb49a...` | urlencode | +| 104 | `ver_1.650.zip` | `/updates/1.60/ver_1.650.zip` | `1fded4e332087edd...` | urlencode | +| 105 | `ver_1.651.zip` | `/updates/1.60/ver_1.651.zip` | `974d9c1ed41db26c...` | urlencode | +| 106 | `ver_1.654.zip` | `/updates/1.60/ver_1.654.zip` | `23c1a14906b34e2c...` | urlencode | +| 107 | `ver_1.656.zip` | `/updates/1.60/ver_1.656.zip` | `e249d78fedc6d3b2...` | urlencode | +| 108 | `ver_1.660.zip` | `/updates/1.60/ver_1.660.zip` | `7068186d0fde2b1e...` | urlencode | +| 109 | `ver_1.665.zip` | `/updates/1.60/ver_1.665.zip` | `aa1fb3977f5f941c...` | urlencode | +| 110 | `ver_1.666.zip` | `/updates/1.60/ver_1.666.zip` | `437e09dfda4f3341...` | urlencode | +| 111 | `ver_1.669.zip` | `/updates/1.60/ver_1.669.zip` | `1885535d8ab2ce8c...` | urlencode | +| 112 | `ver_1.674.zip` | `/updates/1.60/ver_1.674.zip` | `9fca9ce185a525b8...` | urlencode | +| 113 | `ver_1.675.zip` | `/updates/1.60/ver_1.675.zip` | `4aad98f5cfb2aa45...` | urlencode | +| 114 | `ver_1.678.zip` | `/updates/1.60/ver_1.678.zip` | `3541cf1cde4deeae...` | urlencode | +| 115 | `ver_1.680.zip` | `/updates/1.60/ver_1.680.zip` | `9a26b92b885b6e9d...` | urlencode | +| 116 | `ver_1.681.zip` | `/updates/1.60/ver_1.681.zip` | `8fb40bb9e3169797...` | urlencode | +| 117 | `ver_1.684.zip` | `/updates/1.60/ver_1.684.zip` | `0ee052905077606a...` | urlencode | +| 118 | `ver_1.687.zip` | `/updates/1.60/ver_1.687.zip` | `106e9ac25acf7ed1...` | urlencode | +| 119 | `ver_1.688.zip` | `/updates/1.60/ver_1.688.zip` | `e77a529410dc519a...` | urlencode | +| 120 | `ver_1.690.zip` | `/updates/1.60/ver_1.690.zip` | `045d16e46da68af4...` | urlencode | +| 121 | `ver_1.691.zip` | `/updates/1.60/ver_1.691.zip` | `5e53b1fbf6c5c923...` | urlencode | +| 122 | `ver_1.691_manifest.json` | `/updates/1.60/ver_1.691_manifest.json` | `f56b36e719dff5ca...` | manifest checksum updated | +| 123 | `ver_1.694.zip` | `/updates/1.60/ver_1.694.zip` | `cbd51178b1caf4d8...` | urlencode | +| 124 | `ver_1.694_manifest.json` | `/updates/1.60/ver_1.694_manifest.json` | `54914a2960f020ac...` | manifest checksum updated | + +## Smoke-test po uploadzie + +```bash +curl -sSI "https://www.cmspro.project-dc.pl/updates/versions.php" | head -3 +# oczekiwane: HTTP/1.1 200 OK + +curl -sS -o /tmp/t.zip "https://www.cmspro.project-dc.pl/updates/1.50/ver_1.519.zip" +sha256sum /tmp/t.zip +# oczekiwane: 14e5754c75884fcc9d59ba3ef3670d85461a80f5d37a3cc88fa09672b73786a7 +``` + +## Po smoke-test + +1. **Wyloguj i zaloguj sie ponownie** w panelu instancji testowej (czyszczenie sesji new-version) +2. Aktualizacja -> powinna pokazac wersje > 1.519 (klucz licencji teraz dotrze do serwera) +3. Aktualizuj kolejno do najnowszej dostepnej wersji \ No newline at end of file diff --git a/.phpunit.result.cache b/.phpunit.result.cache index b2204c1..1205e0e 100644 --- a/.phpunit.result.cache +++ b/.phpunit.result.cache @@ -1 +1 @@ -{"version":2,"defects":{"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testAllSettingsReturnsEmptyArrayWhenDbReturnsNull":8,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testAllSettingsUsesCache":8},"times":{"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testLanguagesListReturnsArray":0.027,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testLanguagesListReturnsEmptyWhenNull":0.001,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testLanguageDetailsReturnsRowWhenFound":0,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testLanguageDetailsReturnsNullWhenNotFound":0.001,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testActiveLanguagesQueriesDbAndCaches":0.001,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testActiveLanguagesReturnsEmptyWhenNull":0,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testMaxOrderReturnsInteger":0,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testTranslationDeleteReturnsTrueOnSuccess":0.001,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testTranslationDeleteReturnsFalseOnFailure":0.001,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testTranslationDetailsReturnsRowOrNull":0,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testAllSettingsReturnsMappedArray":0.001,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testAllSettingsReturnsEmptyArrayWhenDbReturnsNull":0,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testAllSettingsUsesCache":0,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testUpdateCallsDbUpdateWhenParamExists":0.001,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testUpdateCallsDbInsertWhenParamMissing":0,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testVisitCounterReturnsValue":0,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testVisitCounterReturnsNullWhenEmpty":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testFindReturnsUserArray":0.001,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testFindReturnsNullWhenNotFound":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testFindByLoginReturnsUser":0.002,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testAllReturnsArray":0.001,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testAllReturnsEmptyArrayWhenNull":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testHasPrivilegeReturnsTrueForAdminUser":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testHasPrivilegeReturnsTrueWhenPrivilegeExists":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testHasPrivilegeReturnsFalseWhenPrivilegeMissing":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testLogonReturnsZeroWhenUserNotFound":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testLogonReturnsMinusOneWhenAccountBlocked":0.001,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testLogonReturnsOneOnSuccess":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testIsLoginTakenReturnsTrueWhenExists":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testIsLoginTakenReturnsFalseWhenFree":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testVerifyTwofaCodeReturnsFalseWhenUserNotFound":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testVerifyTwofaCodeReturnsFalseWhenTooManyFailedAttempts":0.079,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testVerifyTwofaCodeReturnsFalseWhenExpired":0.08,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testVerifyTwofaCodeReturnsTrueOnValidCode":0.159,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testDeleteReturnsTrueOnSuccess":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testSaveReturnsErrorWhenPasswordTooShort":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testSaveReturnsErrorWhenPasswordsMismatch":0}} \ No newline at end of file +{"version":2,"defects":{"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testAllSettingsReturnsEmptyArrayWhenDbReturnsNull":8,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testAllSettingsUsesCache":8},"times":{"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testLanguagesListReturnsArray":1.077,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testLanguagesListReturnsEmptyWhenNull":0.002,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testLanguageDetailsReturnsRowWhenFound":0,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testLanguageDetailsReturnsNullWhenNotFound":0.025,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testActiveLanguagesQueriesDbAndCaches":0.002,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testActiveLanguagesReturnsEmptyWhenNull":0,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testMaxOrderReturnsInteger":0,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testTranslationDeleteReturnsTrueOnSuccess":0.002,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testTranslationDeleteReturnsFalseOnFailure":0.025,"Tests\\Unit\\Domain\\Languages\\LanguagesRepositoryTest::testTranslationDetailsReturnsRowOrNull":0,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testAllSettingsReturnsMappedArray":0.001,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testAllSettingsReturnsEmptyArrayWhenDbReturnsNull":0,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testAllSettingsUsesCache":0,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testUpdateCallsDbUpdateWhenParamExists":0.002,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testUpdateCallsDbInsertWhenParamMissing":0,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testVisitCounterReturnsValue":0,"Tests\\Unit\\Domain\\Settings\\SettingsRepositoryTest::testVisitCounterReturnsNullWhenEmpty":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testFindReturnsUserArray":0.001,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testFindReturnsNullWhenNotFound":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testFindByLoginReturnsUser":0.081,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testAllReturnsArray":0.027,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testAllReturnsEmptyArrayWhenNull":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testHasPrivilegeReturnsTrueForAdminUser":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testHasPrivilegeReturnsTrueWhenPrivilegeExists":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testHasPrivilegeReturnsFalseWhenPrivilegeMissing":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testLogonReturnsZeroWhenUserNotFound":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testLogonReturnsMinusOneWhenAccountBlocked":0.025,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testLogonReturnsOneOnSuccess":0.001,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testIsLoginTakenReturnsTrueWhenExists":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testIsLoginTakenReturnsFalseWhenFree":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testVerifyTwofaCodeReturnsFalseWhenUserNotFound":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testVerifyTwofaCodeReturnsFalseWhenTooManyFailedAttempts":0.078,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testVerifyTwofaCodeReturnsFalseWhenExpired":0.079,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testVerifyTwofaCodeReturnsTrueOnValidCode":0.156,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testDeleteReturnsTrueOnSuccess":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testSaveReturnsErrorWhenPasswordTooShort":0,"Tests\\Unit\\Domain\\User\\UserRepositoryTest::testSaveReturnsErrorWhenPasswordsMismatch":0}} \ No newline at end of file diff --git a/.playwright-mcp/console-2026-04-25T23-34-21-170Z.log b/.playwright-mcp/console-2026-04-25T23-34-21-170Z.log new file mode 100644 index 0000000..33706fc --- /dev/null +++ b/.playwright-mcp/console-2026-04-25T23-34-21-170Z.log @@ -0,0 +1 @@ +[ 141ms] [ERROR] Failed to load resource: the server responded with a status of 404 () @ https://cmstest.pagedev.pl/favicon.ico:0 diff --git a/.playwright-mcp/page-2026-04-25T23-34-21-330Z.yml b/.playwright-mcp/page-2026-04-25T23-34-21-330Z.yml new file mode 100644 index 0000000..ea7fec0 --- /dev/null +++ b/.playwright-mcp/page-2026-04-25T23-34-21-330Z.yml @@ -0,0 +1 @@ +- generic [active] [ref=e1]: "Usunięto (24): - admin\\ajax.php - admin\\index.php - autoload\\admin\\class.Site.php - autoload\\admin\\factory\\class.Articles.php - autoload\\admin\\factory\\class.Authors.php - autoload\\admin\\factory\\class.Banners.php - autoload\\admin\\factory\\class.Languages.php - autoload\\admin\\factory\\class.Layouts.php - autoload\\admin\\factory\\class.Newsletter.php - autoload\\admin\\factory\\class.Pages.php - autoload\\admin\\factory\\class.Scontainers.php - autoload\\admin\\factory\\class.Settings.php - autoload\\admin\\factory\\class.Users.php - autoload\\class.Cache.php - autoload\\class.Html.php - autoload\\class.Image.php - autoload\\class.S.php - autoload\\class.Tpl.php - autoload\\front\\factory\\class.Authors.php - autoload\\front\\factory\\class.Banners.php - autoload\\front\\factory\\class.Languages.php - autoload\\front\\factory\\class.Newsletter.php - autoload\\front\\factory\\class.Scontainers.php - autoload\\front\\factory\\class.Settings.php Nieudane (0): Skrypt usunięty." \ No newline at end of file diff --git a/.playwright-mcp/page-2026-04-25T23-41-31-384Z.yml b/.playwright-mcp/page-2026-04-25T23-41-31-384Z.yml new file mode 100644 index 0000000..c4653d1 --- /dev/null +++ b/.playwright-mcp/page-2026-04-25T23-41-31-384Z.yml @@ -0,0 +1 @@ +- generic [active] [ref=e1]: "Usunięto (46): - admin\\ajax.php - admin\\index.php - autoload\\Domain\\ - autoload\\Domain\\Articles\\ArticlesRepository.php - autoload\\Domain\\Authors\\AuthorsRepository.php - autoload\\Domain\\Banners\\BannersRepository.php - autoload\\Domain\\Languages\\LanguagesRepository.php - autoload\\Domain\\Layouts\\LayoutsRepository.php - autoload\\Domain\\Newsletter\\NewsletterRepository.php - autoload\\Domain\\Pages\\PagesRepository.php - autoload\\Domain\\Scontainers\\ScontainersRepository.php - autoload\\Domain\\Settings\\SettingsRepository.php - autoload\\Domain\\User\\UserRepository.php - autoload\\Shared\\ - autoload\\Shared\\Cache\\CacheHandler.php - autoload\\Shared\\Email\\Email.php - autoload\\Shared\\Helpers\\Helpers.php - autoload\\Shared\\Html\\Html.php - autoload\\Shared\\Image\\ImageManipulator.php - autoload\\Shared\\Security\\CsrfToken.php - autoload\\Shared\\Tpl\\Tpl.php - autoload\\admin\\ - autoload\\admin\\class.Site.php - autoload\\admin\\factory\\class.Articles.php - autoload\\admin\\factory\\class.Authors.php - autoload\\admin\\factory\\class.Banners.php - autoload\\admin\\factory\\class.Languages.php - autoload\\admin\\factory\\class.Layouts.php - autoload\\admin\\factory\\class.Newsletter.php - autoload\\admin\\factory\\class.Pages.php - autoload\\admin\\factory\\class.Scontainers.php - autoload\\admin\\factory\\class.Settings.php - autoload\\admin\\factory\\class.Users.php - autoload\\autoloader.php - autoload\\class.Cache.php - autoload\\class.Html.php - autoload\\class.Image.php - autoload\\class.S.php - autoload\\class.Tpl.php - autoload\\front\\ - autoload\\front\\factory\\class.Authors.php - autoload\\front\\factory\\class.Banners.php - autoload\\front\\factory\\class.Languages.php - autoload\\front\\factory\\class.Newsletter.php - autoload\\front\\factory\\class.Scontainers.php - autoload\\front\\factory\\class.Settings.php Nieudane (0): Skrypt usunięty." \ No newline at end of file diff --git a/.serena/project.yml b/.serena/project.yml index 80b7417..4a1c0f9 100644 --- a/.serena/project.yml +++ b/.serena/project.yml @@ -6,7 +6,8 @@ project_name: "cmsPRO" # al bash clojure cpp csharp # csharp_omnisharp dart elixir elm erlang # fortran fsharp go groovy haskell -# java julia kotlin lua markdown +# haxe java julia kotlin lua +# markdown # matlab nix pascal perl php # php_phpactor powershell python python_jedi r # rego ruby ruby_solargraph rust scala @@ -27,6 +28,7 @@ project_name: "cmsPRO" # Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored. languages: - typescript +- php # the encoding used by text files in the project # For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings @@ -52,40 +54,41 @@ read_only: false # To make sure you have the latest list of tools, and to view their descriptions, # execute `uv run scripts/print_tool_overview.py`. # -# * `activate_project`: Activates a project by name. +# * `activate_project`: Activates a project based on the project name or path. # * `check_onboarding_performed`: Checks whether project onboarding was already performed. # * `create_text_file`: Creates/overwrites a file in the project directory. -# * `delete_lines`: Deletes a range of lines within a file. -# * `delete_memory`: Deletes a memory from Serena's project-specific memory store. +# * `delete_memory`: Delete a memory file. Should only happen if a user asks for it explicitly, +# for example by saying that the information retrieved from a memory file is no longer correct +# or no longer relevant for the project. +# * `edit_memory`: Replaces content matching a regular expression in a memory. # * `execute_shell_command`: Executes a shell command. -# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced. -# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type). -# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type). +# * `find_file`: Finds files in the given relative paths +# * `find_referencing_symbols`: Finds symbols that reference the given symbol using the language server backend +# * `find_symbol`: Performs a global (or local) search using the language server backend. # * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes. # * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file. -# * `initial_instructions`: Gets the initial instructions for the current project. -# Should only be used in settings where the system prompt cannot be set, -# e.g. in clients you have no control over, like Claude Desktop. +# * `initial_instructions`: Provides instructions Serena usage (i.e. the 'Serena Instructions Manual') +# for clients that do not read the initial instructions when the MCP server is connected. # * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol. -# * `insert_at_line`: Inserts content at a given line in a file. # * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol. # * `list_dir`: Lists files and directories in the given directory (optionally with recursion). -# * `list_memories`: Lists memories in Serena's project-specific memory store. +# * `list_memories`: List available memories. Any memory can be read using the `read_memory` tool. # * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building). -# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context). # * `read_file`: Reads a file within the project directory. -# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store. -# * `remove_project`: Removes a project from the Serena configuration. -# * `replace_lines`: Replaces a range of lines within a file with new content. -# * `replace_symbol_body`: Replaces the full definition of a symbol. -# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen. +# * `read_memory`: Read the content of a memory file. This tool should only be used if the information +# is relevant to the current task. You can infer whether the information +# is relevant from the memory file name. +# You should not read the same memory file multiple times in the same conversation. +# * `rename_memory`: Renames or moves a memory. Moving between project and global scope is supported +# (e.g., renaming "global/foo" to "bar" moves it from global to project scope). +# * `rename_symbol`: Renames a symbol throughout the codebase using language server refactoring capabilities. +# For JB, we use a separate tool. +# * `replace_content`: Replaces content in a file (optionally using regular expressions). +# * `replace_symbol_body`: Replaces the full definition of a symbol using the language server backend. +# * `safe_delete_symbol`: # * `search_for_pattern`: Performs a search for a pattern in the project. -# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase. -# * `switch_modes`: Activates modes by providing a list of their names -# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information. -# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task. -# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed. -# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store. +# * `write_memory`: Write some information (utf-8-encoded) about this project that can be useful for future tasks to a memory in md format. +# The memory name should be meaningful. excluded_tools: [] # list of tools to include that would otherwise be disabled (particularly optional tools that are disabled by default). diff --git a/autoload/Domain/Releases/UpdateRepository.php b/autoload/Domain/Releases/UpdateRepository.php index beb386e..f0a209a 100644 --- a/autoload/Domain/Releases/UpdateRepository.php +++ b/autoload/Domain/Releases/UpdateRepository.php @@ -142,12 +142,27 @@ class UpdateRepository $file_name = 'update.zip'; $path = pathinfo( realpath( $file_name ), PATHINFO_DIRNAME ); - $path = substr( $path, 0, strlen( $path ) - 5 ); + $path = rtrim( substr( $path, 0, strlen( $path ) - 5 ), '/\\' ) . '/'; $zip = new \ZipArchive; $res = $zip -> open( $file_name ); if ( $res === TRUE ) { - $zip -> extractTo( $path ); + for ( $i = 0; $i < $zip->numFiles; $i++ ) + { + $entry = str_replace( '\\', '/', $zip->getNameIndex( $i ) ); + if ( substr( $entry, -1 ) === '/' ) + { + $dir = $path . $entry; + if ( !is_dir( $dir ) ) + mkdir( $dir, 0755, true ); + continue; + } + $targetPath = $path . $entry; + $targetDir = dirname( $targetPath ); + if ( !is_dir( $targetDir ) ) + mkdir( $targetDir, 0755, true ); + file_put_contents( $targetPath, $zip->getFromIndex( $i ) ); + } $zip -> close(); unlink( $file_name ); } diff --git a/autoload/Shared/Helpers/Helpers.php b/autoload/Shared/Helpers/Helpers.php index 25e8646..e3851e5 100644 --- a/autoload/Shared/Helpers/Helpers.php +++ b/autoload/Shared/Helpers/Helpers.php @@ -453,7 +453,7 @@ class Helpers if ($version = self::get_session('new-version')) return $version; - $versions = file_get_contents('http://www.cmspro.project-dc.pl/updates/versions.php?key=' . $settings['update_key']); + $versions = file_get_contents('https://www.cmspro.project-dc.pl/updates/versions.php?key=' . urlencode($settings['update_key'])); $versions = explode(PHP_EOL, $versions); $version = str_replace(',', '.', max($versions)); diff --git a/build-update.ps1 b/build-update.ps1 index 8d1bdb0..f14c19d 100644 --- a/build-update.ps1 +++ b/build-update.ps1 @@ -283,11 +283,28 @@ if (Test-Path $zipPath) { Remove-Item $zipPath -Force } -# Pakuj zawartosc temp dir (bez folderu temp/) -$originalLocation = Get-Location -Set-Location $tempDir -Compress-Archive -Path '*' -DestinationPath "../../$zipPath" -Force -Set-Location $originalLocation +# Pakuj z forward-slashami (Compress-Archive uzywa backslashy na Windowsie) +Add-Type -AssemblyName System.IO.Compression +Add-Type -AssemblyName System.IO.Compression.FileSystem + +$absZipPath = (Resolve-Path $updatesDir).Path + "\ver_$versionNumber.zip" +$absTempDir = (Resolve-Path $tempDir).Path + +$zipStream = [System.IO.File]::Create($absZipPath) +$zip = New-Object System.IO.Compression.ZipArchive($zipStream, [System.IO.Compression.ZipArchiveMode]::Create) + +Get-ChildItem $absTempDir -Recurse -File | ForEach-Object { + $entryName = $_.FullName.Substring($absTempDir.Length + 1) -replace '\\', '/' + $entry = $zip.CreateEntry($entryName) + $entryStream = $entry.Open() + $fileStream = [System.IO.File]::OpenRead($_.FullName) + $fileStream.CopyTo($entryStream) + $fileStream.Close() + $entryStream.Close() +} + +$zip.Dispose() +$zipStream.Close() Write-Ok "Utworzono ZIP: $zipPath" diff --git a/updates/1.20/ver_1.279.zip b/updates/1.20/ver_1.279.zip index d0278da..13a005b 100644 Binary files a/updates/1.20/ver_1.279.zip and b/updates/1.20/ver_1.279.zip differ diff --git a/updates/1.20/ver_1.280.zip b/updates/1.20/ver_1.280.zip index d0278da..13a005b 100644 Binary files a/updates/1.20/ver_1.280.zip and b/updates/1.20/ver_1.280.zip differ diff --git a/updates/1.20/ver_1.284.zip b/updates/1.20/ver_1.284.zip index 728bd9c..164fd36 100644 Binary files a/updates/1.20/ver_1.284.zip and b/updates/1.20/ver_1.284.zip differ diff --git a/updates/1.20/ver_1.285.zip b/updates/1.20/ver_1.285.zip index 197407a..c059f8d 100644 Binary files a/updates/1.20/ver_1.285.zip and b/updates/1.20/ver_1.285.zip differ diff --git a/updates/1.20/ver_1.288.zip b/updates/1.20/ver_1.288.zip index b776a2c..597d1cb 100644 Binary files a/updates/1.20/ver_1.288.zip and b/updates/1.20/ver_1.288.zip differ diff --git a/updates/1.20/ver_1.293.zip b/updates/1.20/ver_1.293.zip index 898da4c..ba3d1b2 100644 Binary files a/updates/1.20/ver_1.293.zip and b/updates/1.20/ver_1.293.zip differ diff --git a/updates/1.20/ver_1.294.zip b/updates/1.20/ver_1.294.zip index 56152a6..1ba518b 100644 Binary files a/updates/1.20/ver_1.294.zip and b/updates/1.20/ver_1.294.zip differ diff --git a/updates/1.20/ver_1.295.zip b/updates/1.20/ver_1.295.zip index 56152a6..1ba518b 100644 Binary files a/updates/1.20/ver_1.295.zip and b/updates/1.20/ver_1.295.zip differ diff --git a/updates/1.20/ver_1.297.zip b/updates/1.20/ver_1.297.zip index 6f2c035..671bfd2 100644 Binary files a/updates/1.20/ver_1.297.zip and b/updates/1.20/ver_1.297.zip differ diff --git a/updates/1.20/ver_1.298.zip b/updates/1.20/ver_1.298.zip index 6aceece..4d31b92 100644 Binary files a/updates/1.20/ver_1.298.zip and b/updates/1.20/ver_1.298.zip differ diff --git a/updates/1.30/ver_1.300.zip b/updates/1.30/ver_1.300.zip index d5da252..64f2e02 100644 Binary files a/updates/1.30/ver_1.300.zip and b/updates/1.30/ver_1.300.zip differ diff --git a/updates/1.30/ver_1.306.zip b/updates/1.30/ver_1.306.zip index 142f313..65c777e 100644 Binary files a/updates/1.30/ver_1.306.zip and b/updates/1.30/ver_1.306.zip differ diff --git a/updates/1.30/ver_1.308.zip b/updates/1.30/ver_1.308.zip index 5b6b7da..6ba9766 100644 Binary files a/updates/1.30/ver_1.308.zip and b/updates/1.30/ver_1.308.zip differ diff --git a/updates/1.30/ver_1.318.zip b/updates/1.30/ver_1.318.zip index 65d342a..6a68f68 100644 Binary files a/updates/1.30/ver_1.318.zip and b/updates/1.30/ver_1.318.zip differ diff --git a/updates/1.30/ver_1.323.zip b/updates/1.30/ver_1.323.zip index 09cc32a..206bc08 100644 Binary files a/updates/1.30/ver_1.323.zip and b/updates/1.30/ver_1.323.zip differ diff --git a/updates/1.30/ver_1.326.zip b/updates/1.30/ver_1.326.zip index de48bbb..a3a050d 100644 Binary files a/updates/1.30/ver_1.326.zip and b/updates/1.30/ver_1.326.zip differ diff --git a/updates/1.30/ver_1.334.zip b/updates/1.30/ver_1.334.zip index 231fcc9..35d8744 100644 Binary files a/updates/1.30/ver_1.334.zip and b/updates/1.30/ver_1.334.zip differ diff --git a/updates/1.30/ver_1.335.zip b/updates/1.30/ver_1.335.zip index c09e51a..07ba4fc 100644 Binary files a/updates/1.30/ver_1.335.zip and b/updates/1.30/ver_1.335.zip differ diff --git a/updates/1.30/ver_1.339.zip b/updates/1.30/ver_1.339.zip index 5e32fcb..119a2b1 100644 Binary files a/updates/1.30/ver_1.339.zip and b/updates/1.30/ver_1.339.zip differ diff --git a/updates/1.30/ver_1.346.zip b/updates/1.30/ver_1.346.zip index cfeab3e..0d09988 100644 Binary files a/updates/1.30/ver_1.346.zip and b/updates/1.30/ver_1.346.zip differ diff --git a/updates/1.30/ver_1.350.zip b/updates/1.30/ver_1.350.zip index 5076e36..6f0759c 100644 Binary files a/updates/1.30/ver_1.350.zip and b/updates/1.30/ver_1.350.zip differ diff --git a/updates/1.30/ver_1.352.zip b/updates/1.30/ver_1.352.zip index 323d9b4..35af941 100644 Binary files a/updates/1.30/ver_1.352.zip and b/updates/1.30/ver_1.352.zip differ diff --git a/updates/1.30/ver_1.354.zip b/updates/1.30/ver_1.354.zip index 7d8f21e..38de019 100644 Binary files a/updates/1.30/ver_1.354.zip and b/updates/1.30/ver_1.354.zip differ diff --git a/updates/1.30/ver_1.355.zip b/updates/1.30/ver_1.355.zip index 1afbc06..22c6dd0 100644 Binary files a/updates/1.30/ver_1.355.zip and b/updates/1.30/ver_1.355.zip differ diff --git a/updates/1.30/ver_1.356.zip b/updates/1.30/ver_1.356.zip index 8a2fe40..6483250 100644 Binary files a/updates/1.30/ver_1.356.zip and b/updates/1.30/ver_1.356.zip differ diff --git a/updates/1.30/ver_1.357.zip b/updates/1.30/ver_1.357.zip index 6da5249..0a908a6 100644 Binary files a/updates/1.30/ver_1.357.zip and b/updates/1.30/ver_1.357.zip differ diff --git a/updates/1.30/ver_1.359.zip b/updates/1.30/ver_1.359.zip index 1b73949..316a1bd 100644 Binary files a/updates/1.30/ver_1.359.zip and b/updates/1.30/ver_1.359.zip differ diff --git a/updates/1.30/ver_1.360.zip b/updates/1.30/ver_1.360.zip index 1b73949..316a1bd 100644 Binary files a/updates/1.30/ver_1.360.zip and b/updates/1.30/ver_1.360.zip differ diff --git a/updates/1.30/ver_1.370.zip b/updates/1.30/ver_1.370.zip index 616e756..3ef2b88 100644 Binary files a/updates/1.30/ver_1.370.zip and b/updates/1.30/ver_1.370.zip differ diff --git a/updates/1.30/ver_1.371.zip b/updates/1.30/ver_1.371.zip index 3867eba..1a8b9d9 100644 Binary files a/updates/1.30/ver_1.371.zip and b/updates/1.30/ver_1.371.zip differ diff --git a/updates/1.30/ver_1.372.zip b/updates/1.30/ver_1.372.zip index 43088df..0925b40 100644 Binary files a/updates/1.30/ver_1.372.zip and b/updates/1.30/ver_1.372.zip differ diff --git a/updates/1.30/ver_1.375.zip b/updates/1.30/ver_1.375.zip index 7773e95..0c7d359 100644 Binary files a/updates/1.30/ver_1.375.zip and b/updates/1.30/ver_1.375.zip differ diff --git a/updates/1.30/ver_1.387.zip b/updates/1.30/ver_1.387.zip index 911c9ab..965ef2a 100644 Binary files a/updates/1.30/ver_1.387.zip and b/updates/1.30/ver_1.387.zip differ diff --git a/updates/1.30/ver_1.396.zip b/updates/1.30/ver_1.396.zip index ec5e092..fee0c40 100644 Binary files a/updates/1.30/ver_1.396.zip and b/updates/1.30/ver_1.396.zip differ diff --git a/updates/1.30/ver_1.397.zip b/updates/1.30/ver_1.397.zip index 21199e6..ca4cf6f 100644 Binary files a/updates/1.30/ver_1.397.zip and b/updates/1.30/ver_1.397.zip differ diff --git a/updates/1.40/ver_1.402.zip b/updates/1.40/ver_1.402.zip index 048a08a..69f3130 100644 Binary files a/updates/1.40/ver_1.402.zip and b/updates/1.40/ver_1.402.zip differ diff --git a/updates/1.40/ver_1.406.zip b/updates/1.40/ver_1.406.zip index 2c16736..2cb2b66 100644 Binary files a/updates/1.40/ver_1.406.zip and b/updates/1.40/ver_1.406.zip differ diff --git a/updates/1.40/ver_1.408.zip b/updates/1.40/ver_1.408.zip index 4f2c1ea..1811b07 100644 Binary files a/updates/1.40/ver_1.408.zip and b/updates/1.40/ver_1.408.zip differ diff --git a/updates/1.40/ver_1.409.zip b/updates/1.40/ver_1.409.zip index 0198eac..5198564 100644 Binary files a/updates/1.40/ver_1.409.zip and b/updates/1.40/ver_1.409.zip differ diff --git a/updates/1.40/ver_1.410.zip b/updates/1.40/ver_1.410.zip index 6654f07..4613247 100644 Binary files a/updates/1.40/ver_1.410.zip and b/updates/1.40/ver_1.410.zip differ diff --git a/updates/1.40/ver_1.411.zip b/updates/1.40/ver_1.411.zip index 1e636e4..5618ca6 100644 Binary files a/updates/1.40/ver_1.411.zip and b/updates/1.40/ver_1.411.zip differ diff --git a/updates/1.40/ver_1.412.zip b/updates/1.40/ver_1.412.zip index 266b9b2..7c3c2d2 100644 Binary files a/updates/1.40/ver_1.412.zip and b/updates/1.40/ver_1.412.zip differ diff --git a/updates/1.40/ver_1.426.zip b/updates/1.40/ver_1.426.zip index 59c6dc3..916009a 100644 Binary files a/updates/1.40/ver_1.426.zip and b/updates/1.40/ver_1.426.zip differ diff --git a/updates/1.40/ver_1.432.zip b/updates/1.40/ver_1.432.zip index b535661..ad7789a 100644 Binary files a/updates/1.40/ver_1.432.zip and b/updates/1.40/ver_1.432.zip differ diff --git a/updates/1.40/ver_1.449.zip b/updates/1.40/ver_1.449.zip index 0290015..b87d388 100644 Binary files a/updates/1.40/ver_1.449.zip and b/updates/1.40/ver_1.449.zip differ diff --git a/updates/1.40/ver_1.456.zip b/updates/1.40/ver_1.456.zip index 435a04a..c024eaa 100644 Binary files a/updates/1.40/ver_1.456.zip and b/updates/1.40/ver_1.456.zip differ diff --git a/updates/1.40/ver_1.462.zip b/updates/1.40/ver_1.462.zip index bf14048..3bfb00f 100644 Binary files a/updates/1.40/ver_1.462.zip and b/updates/1.40/ver_1.462.zip differ diff --git a/updates/1.40/ver_1.463.zip b/updates/1.40/ver_1.463.zip index e1ebf7a..9f5065a 100644 Binary files a/updates/1.40/ver_1.463.zip and b/updates/1.40/ver_1.463.zip differ diff --git a/updates/1.40/ver_1.464.zip b/updates/1.40/ver_1.464.zip index 528c49f..0a3d4cb 100644 Binary files a/updates/1.40/ver_1.464.zip and b/updates/1.40/ver_1.464.zip differ diff --git a/updates/1.40/ver_1.482.zip b/updates/1.40/ver_1.482.zip index e99b787..b751e28 100644 Binary files a/updates/1.40/ver_1.482.zip and b/updates/1.40/ver_1.482.zip differ diff --git a/updates/1.40/ver_1.485.zip b/updates/1.40/ver_1.485.zip index 1f51256..c964597 100644 Binary files a/updates/1.40/ver_1.485.zip and b/updates/1.40/ver_1.485.zip differ diff --git a/updates/1.40/ver_1.490.zip b/updates/1.40/ver_1.490.zip index b5ab304..b4e3b99 100644 Binary files a/updates/1.40/ver_1.490.zip and b/updates/1.40/ver_1.490.zip differ diff --git a/updates/1.40/ver_1.496.zip b/updates/1.40/ver_1.496.zip index 5629e29..fbb1cf0 100644 Binary files a/updates/1.40/ver_1.496.zip and b/updates/1.40/ver_1.496.zip differ diff --git a/updates/1.40/ver_1.498.zip b/updates/1.40/ver_1.498.zip index 004b4fd..65ad8f3 100644 Binary files a/updates/1.40/ver_1.498.zip and b/updates/1.40/ver_1.498.zip differ diff --git a/updates/1.50/ver_1.504.zip b/updates/1.50/ver_1.504.zip index bc3760c..4594450 100644 Binary files a/updates/1.50/ver_1.504.zip and b/updates/1.50/ver_1.504.zip differ diff --git a/updates/1.50/ver_1.507.zip b/updates/1.50/ver_1.507.zip index 8f3acbc..3a4ddfe 100644 Binary files a/updates/1.50/ver_1.507.zip and b/updates/1.50/ver_1.507.zip differ diff --git a/updates/1.50/ver_1.511.zip b/updates/1.50/ver_1.511.zip index 134c83c..55af13a 100644 Binary files a/updates/1.50/ver_1.511.zip and b/updates/1.50/ver_1.511.zip differ diff --git a/updates/1.50/ver_1.513.zip b/updates/1.50/ver_1.513.zip index e0cad19..79adb6a 100644 Binary files a/updates/1.50/ver_1.513.zip and b/updates/1.50/ver_1.513.zip differ diff --git a/updates/1.50/ver_1.515.zip b/updates/1.50/ver_1.515.zip index 6e580db..7b74a2b 100644 Binary files a/updates/1.50/ver_1.515.zip and b/updates/1.50/ver_1.515.zip differ diff --git a/updates/1.50/ver_1.517.zip b/updates/1.50/ver_1.517.zip index 63fda44..433dada 100644 Binary files a/updates/1.50/ver_1.517.zip and b/updates/1.50/ver_1.517.zip differ diff --git a/updates/1.50/ver_1.518.zip b/updates/1.50/ver_1.518.zip index d828ceb..c300799 100644 Binary files a/updates/1.50/ver_1.518.zip and b/updates/1.50/ver_1.518.zip differ diff --git a/updates/1.50/ver_1.519.zip b/updates/1.50/ver_1.519.zip index 4643f2a..c87a691 100644 Binary files a/updates/1.50/ver_1.519.zip and b/updates/1.50/ver_1.519.zip differ diff --git a/updates/1.50/ver_1.529.zip b/updates/1.50/ver_1.529.zip index d04d913..6581509 100644 Binary files a/updates/1.50/ver_1.529.zip and b/updates/1.50/ver_1.529.zip differ diff --git a/updates/1.50/ver_1.532.zip b/updates/1.50/ver_1.532.zip index 8c1f816..4a1295c 100644 Binary files a/updates/1.50/ver_1.532.zip and b/updates/1.50/ver_1.532.zip differ diff --git a/updates/1.50/ver_1.533.zip b/updates/1.50/ver_1.533.zip index 55c03a8..7731236 100644 Binary files a/updates/1.50/ver_1.533.zip and b/updates/1.50/ver_1.533.zip differ diff --git a/updates/1.50/ver_1.534.zip b/updates/1.50/ver_1.534.zip index 081f39a..37fd763 100644 Binary files a/updates/1.50/ver_1.534.zip and b/updates/1.50/ver_1.534.zip differ diff --git a/updates/1.50/ver_1.535.zip b/updates/1.50/ver_1.535.zip index 2cd7d39..dd43132 100644 Binary files a/updates/1.50/ver_1.535.zip and b/updates/1.50/ver_1.535.zip differ diff --git a/updates/1.50/ver_1.536.zip b/updates/1.50/ver_1.536.zip index aefb6d5..9605443 100644 Binary files a/updates/1.50/ver_1.536.zip and b/updates/1.50/ver_1.536.zip differ diff --git a/updates/1.50/ver_1.539.zip b/updates/1.50/ver_1.539.zip index 6ef6812..05aa94a 100644 Binary files a/updates/1.50/ver_1.539.zip and b/updates/1.50/ver_1.539.zip differ diff --git a/updates/1.50/ver_1.541.zip b/updates/1.50/ver_1.541.zip index 8f53557..60ba672 100644 Binary files a/updates/1.50/ver_1.541.zip and b/updates/1.50/ver_1.541.zip differ diff --git a/updates/1.50/ver_1.546.zip b/updates/1.50/ver_1.546.zip index 6a47365..763d6ed 100644 Binary files a/updates/1.50/ver_1.546.zip and b/updates/1.50/ver_1.546.zip differ diff --git a/updates/1.50/ver_1.551.zip b/updates/1.50/ver_1.551.zip index 2c3f349..8f0098f 100644 Binary files a/updates/1.50/ver_1.551.zip and b/updates/1.50/ver_1.551.zip differ diff --git a/updates/1.50/ver_1.552.zip b/updates/1.50/ver_1.552.zip index 8e99dd5..dc3a11d 100644 Binary files a/updates/1.50/ver_1.552.zip and b/updates/1.50/ver_1.552.zip differ diff --git a/updates/1.50/ver_1.554.zip b/updates/1.50/ver_1.554.zip index 54edf90..5afd86f 100644 Binary files a/updates/1.50/ver_1.554.zip and b/updates/1.50/ver_1.554.zip differ diff --git a/updates/1.50/ver_1.555.zip b/updates/1.50/ver_1.555.zip index bff9510..7d74281 100644 Binary files a/updates/1.50/ver_1.555.zip and b/updates/1.50/ver_1.555.zip differ diff --git a/updates/1.50/ver_1.556.zip b/updates/1.50/ver_1.556.zip index dd4debf..db0549d 100644 Binary files a/updates/1.50/ver_1.556.zip and b/updates/1.50/ver_1.556.zip differ diff --git a/updates/1.50/ver_1.557.zip b/updates/1.50/ver_1.557.zip index ee7ef53..59ca3ae 100644 Binary files a/updates/1.50/ver_1.557.zip and b/updates/1.50/ver_1.557.zip differ diff --git a/updates/1.50/ver_1.561.zip b/updates/1.50/ver_1.561.zip index ed4a3a4..d751037 100644 Binary files a/updates/1.50/ver_1.561.zip and b/updates/1.50/ver_1.561.zip differ diff --git a/updates/1.50/ver_1.568.zip b/updates/1.50/ver_1.568.zip index 6ad0a21..1b07ef4 100644 Binary files a/updates/1.50/ver_1.568.zip and b/updates/1.50/ver_1.568.zip differ diff --git a/updates/1.50/ver_1.572.zip b/updates/1.50/ver_1.572.zip index cc1ae4a..9f02648 100644 Binary files a/updates/1.50/ver_1.572.zip and b/updates/1.50/ver_1.572.zip differ diff --git a/updates/1.50/ver_1.583.zip b/updates/1.50/ver_1.583.zip index c1f5755..a5cdf79 100644 Binary files a/updates/1.50/ver_1.583.zip and b/updates/1.50/ver_1.583.zip differ diff --git a/updates/1.50/ver_1.587.zip b/updates/1.50/ver_1.587.zip index 03e505a..7cf2c0e 100644 Binary files a/updates/1.50/ver_1.587.zip and b/updates/1.50/ver_1.587.zip differ diff --git a/updates/1.50/ver_1.589.zip b/updates/1.50/ver_1.589.zip index c729f87..59a3bff 100644 Binary files a/updates/1.50/ver_1.589.zip and b/updates/1.50/ver_1.589.zip differ diff --git a/updates/1.50/ver_1.591.zip b/updates/1.50/ver_1.591.zip index 49e1d22..cc416b5 100644 Binary files a/updates/1.50/ver_1.591.zip and b/updates/1.50/ver_1.591.zip differ diff --git a/updates/1.60/ver_1.602.zip b/updates/1.60/ver_1.602.zip index 9511329..7f3e3fd 100644 Binary files a/updates/1.60/ver_1.602.zip and b/updates/1.60/ver_1.602.zip differ diff --git a/updates/1.60/ver_1.610.zip b/updates/1.60/ver_1.610.zip index 31fe137..84ea97b 100644 Binary files a/updates/1.60/ver_1.610.zip and b/updates/1.60/ver_1.610.zip differ diff --git a/updates/1.60/ver_1.613.zip b/updates/1.60/ver_1.613.zip index b11d445..b25c22c 100644 Binary files a/updates/1.60/ver_1.613.zip and b/updates/1.60/ver_1.613.zip differ diff --git a/updates/1.60/ver_1.617.zip b/updates/1.60/ver_1.617.zip index 8bc11b1..184bde8 100644 Binary files a/updates/1.60/ver_1.617.zip and b/updates/1.60/ver_1.617.zip differ diff --git a/updates/1.60/ver_1.618.zip b/updates/1.60/ver_1.618.zip index e101dff..2b6cca6 100644 Binary files a/updates/1.60/ver_1.618.zip and b/updates/1.60/ver_1.618.zip differ diff --git a/updates/1.60/ver_1.620.zip b/updates/1.60/ver_1.620.zip index 9828a3c..491125f 100644 Binary files a/updates/1.60/ver_1.620.zip and b/updates/1.60/ver_1.620.zip differ diff --git a/updates/1.60/ver_1.625.zip b/updates/1.60/ver_1.625.zip index 35b869a..63ab2ad 100644 Binary files a/updates/1.60/ver_1.625.zip and b/updates/1.60/ver_1.625.zip differ diff --git a/updates/1.60/ver_1.626.zip b/updates/1.60/ver_1.626.zip index 62f1d21..a3d33b7 100644 Binary files a/updates/1.60/ver_1.626.zip and b/updates/1.60/ver_1.626.zip differ diff --git a/updates/1.60/ver_1.627.zip b/updates/1.60/ver_1.627.zip index fd248ec..ec673ca 100644 Binary files a/updates/1.60/ver_1.627.zip and b/updates/1.60/ver_1.627.zip differ diff --git a/updates/1.60/ver_1.628.zip b/updates/1.60/ver_1.628.zip index c818e19..d537369 100644 Binary files a/updates/1.60/ver_1.628.zip and b/updates/1.60/ver_1.628.zip differ diff --git a/updates/1.60/ver_1.633.zip b/updates/1.60/ver_1.633.zip index 5e0d5cf..5f72798 100644 Binary files a/updates/1.60/ver_1.633.zip and b/updates/1.60/ver_1.633.zip differ diff --git a/updates/1.60/ver_1.634.zip b/updates/1.60/ver_1.634.zip index 8420550..c5a3db2 100644 Binary files a/updates/1.60/ver_1.634.zip and b/updates/1.60/ver_1.634.zip differ diff --git a/updates/1.60/ver_1.638.zip b/updates/1.60/ver_1.638.zip index 652beae..8dc8e07 100644 Binary files a/updates/1.60/ver_1.638.zip and b/updates/1.60/ver_1.638.zip differ diff --git a/updates/1.60/ver_1.642.zip b/updates/1.60/ver_1.642.zip index 4315fef..cdeaa12 100644 Binary files a/updates/1.60/ver_1.642.zip and b/updates/1.60/ver_1.642.zip differ diff --git a/updates/1.60/ver_1.643.zip b/updates/1.60/ver_1.643.zip index 5b03c5e..cc6f30f 100644 Binary files a/updates/1.60/ver_1.643.zip and b/updates/1.60/ver_1.643.zip differ diff --git a/updates/1.60/ver_1.644.zip b/updates/1.60/ver_1.644.zip index c955f4b..a938d74 100644 Binary files a/updates/1.60/ver_1.644.zip and b/updates/1.60/ver_1.644.zip differ diff --git a/updates/1.60/ver_1.645.zip b/updates/1.60/ver_1.645.zip index 6f4f4f9..2e3d3f3 100644 Binary files a/updates/1.60/ver_1.645.zip and b/updates/1.60/ver_1.645.zip differ diff --git a/updates/1.60/ver_1.649.zip b/updates/1.60/ver_1.649.zip index 53c6c0e..5168206 100644 Binary files a/updates/1.60/ver_1.649.zip and b/updates/1.60/ver_1.649.zip differ diff --git a/updates/1.60/ver_1.650.zip b/updates/1.60/ver_1.650.zip index ee6a687..ae18fb2 100644 Binary files a/updates/1.60/ver_1.650.zip and b/updates/1.60/ver_1.650.zip differ diff --git a/updates/1.60/ver_1.651.zip b/updates/1.60/ver_1.651.zip index 57e816a..c07e0b0 100644 Binary files a/updates/1.60/ver_1.651.zip and b/updates/1.60/ver_1.651.zip differ diff --git a/updates/1.60/ver_1.654.zip b/updates/1.60/ver_1.654.zip index d18019f..f60e728 100644 Binary files a/updates/1.60/ver_1.654.zip and b/updates/1.60/ver_1.654.zip differ diff --git a/updates/1.60/ver_1.656.zip b/updates/1.60/ver_1.656.zip index 1a6c9f3..6a06550 100644 Binary files a/updates/1.60/ver_1.656.zip and b/updates/1.60/ver_1.656.zip differ diff --git a/updates/1.60/ver_1.660.zip b/updates/1.60/ver_1.660.zip index 738e033..2dbe9fb 100644 Binary files a/updates/1.60/ver_1.660.zip and b/updates/1.60/ver_1.660.zip differ diff --git a/updates/1.60/ver_1.665.zip b/updates/1.60/ver_1.665.zip index 7bc726e..294603c 100644 Binary files a/updates/1.60/ver_1.665.zip and b/updates/1.60/ver_1.665.zip differ diff --git a/updates/1.60/ver_1.666.zip b/updates/1.60/ver_1.666.zip index 248455a..ebdf6f5 100644 Binary files a/updates/1.60/ver_1.666.zip and b/updates/1.60/ver_1.666.zip differ diff --git a/updates/1.60/ver_1.669.zip b/updates/1.60/ver_1.669.zip index 034990d..fed7ba2 100644 Binary files a/updates/1.60/ver_1.669.zip and b/updates/1.60/ver_1.669.zip differ diff --git a/updates/1.60/ver_1.674.zip b/updates/1.60/ver_1.674.zip index 3df4d96..79ddca7 100644 Binary files a/updates/1.60/ver_1.674.zip and b/updates/1.60/ver_1.674.zip differ diff --git a/updates/1.60/ver_1.675.zip b/updates/1.60/ver_1.675.zip index b7789c8..a029af3 100644 Binary files a/updates/1.60/ver_1.675.zip and b/updates/1.60/ver_1.675.zip differ diff --git a/updates/1.60/ver_1.678.zip b/updates/1.60/ver_1.678.zip index 5f472b8..389bad0 100644 Binary files a/updates/1.60/ver_1.678.zip and b/updates/1.60/ver_1.678.zip differ diff --git a/updates/1.60/ver_1.680.zip b/updates/1.60/ver_1.680.zip index 8fc7751..bcd421d 100644 Binary files a/updates/1.60/ver_1.680.zip and b/updates/1.60/ver_1.680.zip differ diff --git a/updates/1.60/ver_1.681.zip b/updates/1.60/ver_1.681.zip index 9dc55da..70bc9af 100644 Binary files a/updates/1.60/ver_1.681.zip and b/updates/1.60/ver_1.681.zip differ diff --git a/updates/1.60/ver_1.684.zip b/updates/1.60/ver_1.684.zip index c27b99c..a8d967f 100644 Binary files a/updates/1.60/ver_1.684.zip and b/updates/1.60/ver_1.684.zip differ diff --git a/updates/1.60/ver_1.687.zip b/updates/1.60/ver_1.687.zip index 27b5d8d..ee5081b 100644 Binary files a/updates/1.60/ver_1.687.zip and b/updates/1.60/ver_1.687.zip differ diff --git a/updates/1.60/ver_1.688.zip b/updates/1.60/ver_1.688.zip index e04960d..af8fc09 100644 Binary files a/updates/1.60/ver_1.688.zip and b/updates/1.60/ver_1.688.zip differ diff --git a/updates/1.60/ver_1.690.zip b/updates/1.60/ver_1.690.zip index fa0527a..86332a0 100644 Binary files a/updates/1.60/ver_1.690.zip and b/updates/1.60/ver_1.690.zip differ diff --git a/updates/1.60/ver_1.691.zip b/updates/1.60/ver_1.691.zip index 196a4dd..0209f80 100644 Binary files a/updates/1.60/ver_1.691.zip and b/updates/1.60/ver_1.691.zip differ diff --git a/updates/1.60/ver_1.691_manifest.json b/updates/1.60/ver_1.691_manifest.json index 8a72fe4..ce23106 100644 --- a/updates/1.60/ver_1.691_manifest.json +++ b/updates/1.60/ver_1.691_manifest.json @@ -1,4 +1,4 @@ -{ +{ "changelog": "Refaktoryzacja DDD Faza 0+1: PSR-4 autoloader, Shared (CacheHandler, Helpers, Html, ImageManipulator, Tpl), Domain (LanguagesRepository, SettingsRepository, UserRepository), testy jednostkowe Domain\\, docs/", "version": "1.691", "files": { @@ -38,7 +38,7 @@ "index.php" ] }, - "checksum_zip": "sha256:f53230f36d391828f4e368f3fc3420d8f9430ca507a1d4f57a0988823ac22192", + "checksum_zip": "sha256:554ac8a4436b67eb267578edfdfd43c40888861e68368746cdbaae30d4d48f5c", "sql": [ ], diff --git a/updates/1.60/ver_1.692.zip b/updates/1.60/ver_1.692.zip index af2089f..428782a 100644 Binary files a/updates/1.60/ver_1.692.zip and b/updates/1.60/ver_1.692.zip differ diff --git a/updates/1.60/ver_1.692_manifest.json b/updates/1.60/ver_1.692_manifest.json index 368aa85..b675e0b 100644 --- a/updates/1.60/ver_1.692_manifest.json +++ b/updates/1.60/ver_1.692_manifest.json @@ -1,4 +1,4 @@ -{ +{ "changelog": "FIX - Tpl::__isset() dla poprawnej obslugi isset() na wlasciwosciach szablonu", "version": "1.692", "files": { @@ -13,7 +13,7 @@ "autoload/Shared/Tpl/Tpl.php" ] }, - "checksum_zip": "sha256:bbd1c61b39b5bb4a37b618efea770bed3438d7324ab389d415d24b2d87b08bd6", + "checksum_zip": "sha256:d56f7f2bdf3e88dc1454df21355c86b0d4b0349693f36a991c7cf5f85eca0e64", "sql": [ ], diff --git a/updates/1.60/ver_1.693.zip b/updates/1.60/ver_1.693.zip index 6b1ca2a..f65daa7 100644 Binary files a/updates/1.60/ver_1.693.zip and b/updates/1.60/ver_1.693.zip differ diff --git a/updates/1.60/ver_1.693_manifest.json b/updates/1.60/ver_1.693_manifest.json index 91b4318..564b620 100644 --- a/updates/1.60/ver_1.693_manifest.json +++ b/updates/1.60/ver_1.693_manifest.json @@ -1,4 +1,4 @@ -{ +{ "changelog": "REF - migracja admin Pages/Layouts/Articles do Domain repositories", "version": "1.693", "files": { @@ -17,7 +17,7 @@ "autoload/admin/factory/class.Pages.php" ] }, - "checksum_zip": "sha256:3994561d9f3df8ed887f53c903b2a26ae6d17e6b10d98c7cb5cdc59132cef7b5", + "checksum_zip": "sha256:4c2100eb00fb1fb2c74c62216dffb7586c02640ea1a1a45d3daec07a29bc928a", "sql": [ ], diff --git a/updates/1.60/ver_1.694.zip b/updates/1.60/ver_1.694.zip index 4296f4d..d1f509d 100644 Binary files a/updates/1.60/ver_1.694.zip and b/updates/1.60/ver_1.694.zip differ diff --git a/updates/1.60/ver_1.694_manifest.json b/updates/1.60/ver_1.694_manifest.json index f57d783..0890d52 100644 --- a/updates/1.60/ver_1.694_manifest.json +++ b/updates/1.60/ver_1.694_manifest.json @@ -1,4 +1,4 @@ -{ +{ "changelog": "NEW - centralny autoloader, Shared\\Email, Shared\\Security\\CsrfToken", "version": "1.694", "files": { @@ -22,7 +22,7 @@ "index.php" ] }, - "checksum_zip": "sha256:a21dc4a768bc7c9e71b8a319ff0e6a16bdd894330a5145d0278b220a3ccc4027", + "checksum_zip": "sha256:7c8436d124e5d5028b59865e39562e8ca4b512afc1c8514eaad5b55e635a6cc4", "sql": [ ], diff --git a/updates/1.60/ver_1.695.zip b/updates/1.60/ver_1.695.zip index 7230ecb..214185b 100644 Binary files a/updates/1.60/ver_1.695.zip and b/updates/1.60/ver_1.695.zip differ diff --git a/updates/1.60/ver_1.695_manifest.json b/updates/1.60/ver_1.695_manifest.json index 538881f..7108d07 100644 --- a/updates/1.60/ver_1.695_manifest.json +++ b/updates/1.60/ver_1.695_manifest.json @@ -1,4 +1,4 @@ -{ +{ "changelog": "NEW - aktualizacja konfiguracji Claude, Serena i CLAUDE.md", "version": "1.695", "files": { @@ -22,7 +22,7 @@ "autoload/front/factory/class.Scontainers.php" ] }, - "checksum_zip": "sha256:f8b50187c72ced5d00937c74939a4e4300bc6e40c074639d7a9ff8662e4cddd0", + "checksum_zip": "sha256:4c66443c59dbff85d2360f7f8024b2a2813ee7c27db28af9b636c1f5a6dcae84", "sql": [ ], diff --git a/updates/1.60/ver_1.696.zip b/updates/1.60/ver_1.696.zip index 7b00592..26cd569 100644 Binary files a/updates/1.60/ver_1.696.zip and b/updates/1.60/ver_1.696.zip differ diff --git a/updates/1.60/ver_1.696_manifest.json b/updates/1.60/ver_1.696_manifest.json index ed76c08..4c6112e 100644 --- a/updates/1.60/ver_1.696_manifest.json +++ b/updates/1.60/ver_1.696_manifest.json @@ -17,7 +17,7 @@ "autoload/class.Cron.php" ] }, - "checksum_zip": "sha256:9480c32af77c687863be5c690d2a65a241b95358bc77fb9b51b2c392e6040bc0", + "checksum_zip": "sha256:ce594e54e0eff7f0163da5bdc04f82e0e8a447b605aa50adecb067b6475de864", "sql": [ ], diff --git a/updates/cmsPro.zip b/updates/cmsPro.zip index 130856d..344ff0f 100644 Binary files a/updates/cmsPro.zip and b/updates/cmsPro.zip differ diff --git a/updates/versions.php b/updates/versions.php index 3186669..d45c616 100644 --- a/updates/versions.php +++ b/updates/versions.php @@ -13,7 +13,7 @@ $mdb = new medoo( [ $current_ver = 1696; // aktualizowane automatycznie przez build-update.ps1 -// 1. Skan filesystem — lista istniejÄ…cych ZIPĂłw +// 1. Skan filesystem — lista istniejÄ…cych ZIPĂłw $versions = []; for ( $i = 1; $i <= $current_ver; $i++ ) { @@ -34,7 +34,7 @@ $license = $mdb->get( 'pp_update_licenses', '*', [ 'key' => ( $_GET['key'] ?? '' if ( !$license ) die(); -// 3. SprawdĹş waĹĽność daty +// 3. SprawdĹş waĹĽność daty if ( $license['valid_to_date'] && $license['valid_to_date'] < date( 'Y-m-d' ) ) die(); @@ -53,11 +53,11 @@ foreach ( $versions as $ver ) } } -// 5. Filtruj wersje wg kanaĹ‚u (beta widzi beta+stable, reszta tylko stable) +// 5. Filtruj wersje wg kanaĹ‚u (beta widzi beta+stable, reszta tylko stable) $channels = $license['beta'] ? [ 'beta', 'stable' ] : [ 'stable' ]; $allowed = array_flip( $mdb->select( 'pp_update_versions', 'version', [ 'channel' => $channels ] ) ?: [] ); -// 6. Wypisz dostÄ™pne wersje +// 6. Wypisz dostÄ™pne wersje $valid_to_version = $license['valid_to_version']; foreach ( $versions as $ver ) {