This commit is contained in:
2026-04-26 01:44:36 +02:00
parent cbc2462ea4
commit 72cb5b8d1d
166 changed files with 2712 additions and 135 deletions

View File

@@ -0,0 +1 @@
{"sessionId":"67436f78-3aa8-4e1d-b1bd-475562c4b01e","pid":21052,"acquiredAt":1777156013131}

View File

@@ -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

View File

@@ -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.

View File

@@ -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

4
.paul/codebase/todo.md Normal file
View File

@@ -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.

3
.paul/docs/API.md Normal file
View File

@@ -0,0 +1,3 @@
# API
> Endpointy, kontrakty request/response, autentykacja.

View File

@@ -0,0 +1,3 @@
# ARCHITECTURE
> Struktura klas, modulow, przeplywow i zaleznosci w projekcie.

3
.paul/docs/DB_SCHEMA.md Normal file
View File

@@ -0,0 +1,3 @@
# DB_SCHEMA
> Schemat bazy danych — tabele, kolumny, FK, indeksy.

3
.paul/docs/DECISIONS.md Normal file
View File

@@ -0,0 +1,3 @@
# DECISIONS
> Kluczowe decyzje techniczne i ich uzasadnienia.

3
.paul/docs/STACK.md Normal file
View File

@@ -0,0 +1,3 @@
# STACK
> Stack technologiczny, wersje, zaleznosci, srodowisko.

View File

@@ -0,0 +1,3 @@
# TECH_CHANGELOG
> Chronologiczny log zmian technicznych — co i dlaczego.

3
.paul/docs/TODO.md Normal file
View File

@@ -0,0 +1,3 @@
# TODO
> Luzny parking pomyslow, rzeczy do sprawdzenia.

View File

@@ -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"}

View File

@@ -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"}

View File

@@ -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
---
<objective>
## 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)
</objective>
<context>
## 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
</context>
<acceptance_criteria>
## 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 (httphttps)
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)
```
</acceptance_criteria>
<tasks>
<task type="auto">
<name>Task 1: Patch kodu źródłowego cmsPRO (HTTP → HTTPS)</name>
<files>
autoload/Shared/Helpers/Helpers.php,
autoload/admin/factory/class.Update.php
</files>
<action>
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.
</action>
<verify>
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 &gt;=1:&gt;=4
</verify>
<done>AC-1 satisfied</done>
</task>
<task type="auto">
<name>Task 2: Hotfix instancji testowej cmstest.pagedev.pl</name>
<files>
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
</files>
<action>
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.
</action>
<verify>
grep -c "http://www.cmspro.project-dc.pl" w obu plikach → 0:0
</verify>
<done>AC-2 satisfied (część kodowa, weryfikacja UAT w Task 8)</done>
</task>
<task type="auto">
<name>Task 3: Skrypt audit paczek aktualizacji</name>
<files>
.paul/phases/04h-hotfix-https-updates/scripts/audit-packages.ps1,
.paul/phases/04h-hotfix-https-updates/audit-report.md
</files>
<action>
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.
</action>
<verify>
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
</verify>
<done>AC-5 satisfied: pełna lista dotkniętych paczek</done>
</task>
<task type="checkpoint:decision" gate="blocking">
<decision>
Czy patchować WSZYSTKIE paczki z bugiem, czy tylko baseline cmsPro.zip + ver_1.519 jako kotwica?
</decision>
<context>
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.
</context>
<options>
<option id="full-patch">
<name>Patch wszystkich dotkniętych paczek</name>
<pros>Spójność, brak buggy artefaktów na serwerze, każda ścieżka aktualizacji bezpieczna</pros>
<cons>Więcej pracy + uploadu, ryzyko zepsucia checksum jeśli manifesty istnieją</cons>
</option>
<option id="minimal-patch">
<name>Patch tylko cmsPro.zip + ver_1.519 (kotwica)</name>
<pros>Najmniejsza ingerencja, jasny "punkt zaczepienia"</pros>
<cons>Stare paczki nadal zawierają zepsuty kod — ryzyko regresji jeśli ktoś użyje pojedynczej paczki ręcznie</cons>
</option>
</options>
<resume-signal>Select: full-patch lub minimal-patch</resume-signal>
</task>
<task type="auto">
<name>Task 4: Patch dotkniętych paczek (zgodnie z decyzją z Task 3.5)</name>
<files>
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)
</files>
<action>
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.
</action>
<verify>
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.
</verify>
<done>AC-3 satisfied</done>
</task>
<task type="auto">
<name>Task 5: Wstrzyknięcie kotwicy fixa do ver_1.519.zip</name>
<files>
updates/1.50/ver_1.519.zip
</files>
<action>
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).
</action>
<verify>
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://" → &gt;=1
unzip -p updates/1.50/ver_1.519.zip autoload/class.S.php | grep -c "http://www.cmspro" → 0
</verify>
<done>AC-4 satisfied</done>
</task>
<task type="auto">
<name>Task 6: Generacja listy plików do uploadu na serwer</name>
<files>
.paul/phases/04h-hotfix-https-updates/upload-checklist.md
</files>
<action>
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ę.
</action>
<verify>
Plik istnieje i zawiera co najmniej cmsPro.zip + ver_1.519.zip + smoke-test command
</verify>
<done>Dostarczona instrukcja uploadu dla użytkownika</done>
</task>
<task type="checkpoint:human-action" gate="blocking">
<what-built>
Zestaw spatchowanych paczek + cmsPro.zip + ver_1.519.zip kotwica fixa, gotowe do uploadu.
</what-built>
<how-to-verify>
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"
</how-to-verify>
<resume-signal>Wpisz "uploaded" gdy paczki są na serwerze, lub opisz problem</resume-signal>
</task>
<task type="checkpoint:human-verify" gate="blocking">
<what-built>
Hotfix instancji testowej: pliki zaktualizowane lokalnie + paczki na serwerze.
</what-built>
<how-to-verify>
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ę.
</how-to-verify>
<resume-signal>Wpisz "approved" gdy aktualizacje działają, lub opisz problem</resume-signal>
</task>
</tasks>
<boundaries>
## 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)
</boundaries>
<verification>
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
</verification>
<success_criteria>
- 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)
</success_criteria>
<output>
Po zamknięciu utwórz `.paul/phases/04h-hotfix-https-updates/04h-01-SUMMARY.md`
zawierający:
- Co zmieniono (kod + paczki)
- Listę paczek patched z SHA256 przed/po
- Decyzję checkpoint (full-patch vs minimal-patch) i uzasadnienie
- Lessons learned (np. "zawsze używać HTTPS w endpointach update", "rozważyć stream context z follow_location jako defense-in-depth")
- Sugestię dla Phase 5/13 Releases+Update: rozważyć cURL z verify SSL i obsługą redirectów jako trwałe rozwiązanie
</output>

View File

@@ -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*

View File

@@ -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) |

View File

@@ -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<br>autoload/class.S.php | `04bae6b928e3` | `34f3efaee333` | - |
| 2 | `1.20\ver_1.279.zip` | autoload/admin/factory/class.Update.php<br>autoload/class.S.php | `383c5ffa3d54` | `4b2fb3dfc445` | - |
| 3 | `1.20\ver_1.280.zip` | autoload/admin/factory/class.Update.php<br>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<br>autoload/class.S.php | `6ca587ed550b` | `dcbfc2f89315` | - |
| 9 | `1.20\ver_1.295.zip` | autoload/admin/factory/class.Update.php<br>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<br>autoload/class.S.php | `87a17ea013b8` | `24e06f56613d` | - |
| 18 | `1.30\ver_1.334.zip` | autoload/admin/factory/class.Update.php<br>autoload/class.S.php | `739aa23ec849` | `a7beadc4e1f5` | - |
| 19 | `1.30\ver_1.335.zip` | autoload/admin/factory/class.Update.php<br>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<br>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<br>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<br>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<br>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<br>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._

View File

@@ -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<br>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<br>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<br>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<br>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<br>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<br>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` |

View File

@@ -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

View File

@@ -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"
}

View File

@@ -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
}

View File

@@ -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 '<br>')
$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

View File

@@ -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 '<br>')
$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

View File

@@ -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

View File

@@ -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}} {"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}}

View File

@@ -0,0 +1 @@
[ 141ms] [ERROR] Failed to load resource: the server responded with a status of 404 () @ https://cmstest.pagedev.pl/favicon.ico:0

View File

@@ -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."

View File

@@ -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."

View File

@@ -6,7 +6,8 @@ project_name: "cmsPRO"
# al bash clojure cpp csharp # al bash clojure cpp csharp
# csharp_omnisharp dart elixir elm erlang # csharp_omnisharp dart elixir elm erlang
# fortran fsharp go groovy haskell # fortran fsharp go groovy haskell
# java julia kotlin lua markdown # haxe java julia kotlin lua
# markdown
# matlab nix pascal perl php # matlab nix pascal perl php
# php_phpactor powershell python python_jedi r # php_phpactor powershell python python_jedi r
# rego ruby ruby_solargraph rust scala # 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. # Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored.
languages: languages:
- typescript - typescript
- php
# the encoding used by text files in the project # 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 # 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, # To make sure you have the latest list of tools, and to view their descriptions,
# execute `uv run scripts/print_tool_overview.py`. # 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. # * `check_onboarding_performed`: Checks whether project onboarding was already performed.
# * `create_text_file`: Creates/overwrites a file in the project directory. # * `create_text_file`: Creates/overwrites a file in the project directory.
# * `delete_lines`: Deletes a range of lines within a file. # * `delete_memory`: Delete a memory file. Should only happen if a user asks for it explicitly,
# * `delete_memory`: Deletes a memory from Serena's project-specific memory store. # 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. # * `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_file`: Finds files in the given relative paths
# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type). # * `find_referencing_symbols`: Finds symbols that reference the given symbol using the language server backend
# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type). # * `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_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. # * `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. # * `initial_instructions`: Provides instructions Serena usage (i.e. the 'Serena Instructions Manual')
# Should only be used in settings where the system prompt cannot be set, # for clients that do not read the initial instructions when the MCP server is connected.
# e.g. in clients you have no control over, like Claude Desktop.
# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol. # * `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. # * `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_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). # * `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_file`: Reads a file within the project directory.
# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store. # * `read_memory`: Read the content of a memory file. This tool should only be used if the information
# * `remove_project`: Removes a project from the Serena configuration. # is relevant to the current task. You can infer whether the information
# * `replace_lines`: Replaces a range of lines within a file with new content. # is relevant from the memory file name.
# * `replace_symbol_body`: Replaces the full definition of a symbol. # You should not read the same memory file multiple times in the same conversation.
# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen. # * `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. # * `search_for_pattern`: Performs a search for a pattern in the project.
# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase. # * `write_memory`: Write some information (utf-8-encoded) about this project that can be useful for future tasks to a memory in md format.
# * `switch_modes`: Activates modes by providing a list of their names # The memory name should be meaningful.
# * `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.
excluded_tools: [] excluded_tools: []
# list of tools to include that would otherwise be disabled (particularly optional tools that are disabled by default). # list of tools to include that would otherwise be disabled (particularly optional tools that are disabled by default).

View File

@@ -142,12 +142,27 @@ class UpdateRepository
$file_name = 'update.zip'; $file_name = 'update.zip';
$path = pathinfo( realpath( $file_name ), PATHINFO_DIRNAME ); $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; $zip = new \ZipArchive;
$res = $zip -> open( $file_name ); $res = $zip -> open( $file_name );
if ( $res === TRUE ) 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(); $zip -> close();
unlink( $file_name ); unlink( $file_name );
} }

View File

@@ -453,7 +453,7 @@ class Helpers
if ($version = self::get_session('new-version')) if ($version = self::get_session('new-version'))
return $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); $versions = explode(PHP_EOL, $versions);
$version = str_replace(',', '.', max($versions)); $version = str_replace(',', '.', max($versions));

View File

@@ -283,11 +283,28 @@ if (Test-Path $zipPath) {
Remove-Item $zipPath -Force Remove-Item $zipPath -Force
} }
# Pakuj zawartosc temp dir (bez folderu temp/) # Pakuj z forward-slashami (Compress-Archive uzywa backslashy na Windowsie)
$originalLocation = Get-Location Add-Type -AssemblyName System.IO.Compression
Set-Location $tempDir Add-Type -AssemblyName System.IO.Compression.FileSystem
Compress-Archive -Path '*' -DestinationPath "../../$zipPath" -Force
Set-Location $originalLocation $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" Write-Ok "Utworzono ZIP: $zipPath"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More