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)
+
+
+
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 )
{