update
This commit is contained in:
253
.paul/phases/02-admin-panel-upgrade/02-01-PLAN.md
Normal file
253
.paul/phases/02-admin-panel-upgrade/02-01-PLAN.md
Normal file
@@ -0,0 +1,253 @@
|
||||
---
|
||||
phase: 02-admin-panel-upgrade
|
||||
plan: 01
|
||||
type: execute
|
||||
wave: 1
|
||||
depends_on: ["01-01"]
|
||||
files_modified:
|
||||
- src/Core/Database/Migrator.php
|
||||
- src/Controllers/SettingsController.php
|
||||
- src/Controllers/StatLinkController.php
|
||||
- templates/layout/sidebar.php
|
||||
- templates/layout/main.php
|
||||
- templates/settings/index.php
|
||||
- templates/settings/database.php
|
||||
- templates/statlink/index.php
|
||||
- config/routes.php
|
||||
- assets/css/app.css
|
||||
autonomous: true
|
||||
delegation: off
|
||||
---
|
||||
|
||||
<objective>
|
||||
## Goal
|
||||
Rozbudowa panelu administracyjnego backPRO o trzy funkcje:
|
||||
1. Panel migracji bazy danych (wzorowany na orderPRO Migrator)
|
||||
2. Nowoczesne lewe menu sidebar (wzorowane na orderPRO)
|
||||
3. Lista publikacji StatLink — przegląd linkowanych artykułów
|
||||
|
||||
## Purpose
|
||||
Usprawnienie zarządzania projektem — migracje bez ręcznego SSH, lepszy UX nawigacji, widoczność statusu linkowania StatLink.
|
||||
|
||||
## Output
|
||||
- `Migrator.php` — engine migracji (port z orderPRO, dostosowany do backPRO)
|
||||
- Nowy sidebar z grupowaniem, ikonami SVG, collapse/expand
|
||||
- Widok `/statlink` z listą aktywnych/wygasłych linków StatLink
|
||||
- Endpoint migracji `/settings/database/migrate`
|
||||
</objective>
|
||||
|
||||
<context>
|
||||
## Project Context
|
||||
@.paul/PROJECT.md
|
||||
@.paul/ROADMAP.md
|
||||
@.paul/STATE.md
|
||||
|
||||
## Source Files — backPRO
|
||||
@templates/layout/sidebar.php
|
||||
@templates/layout/main.php
|
||||
@assets/css/app.css
|
||||
@src/Controllers/SettingsController.php
|
||||
@config/routes.php
|
||||
|
||||
## Reference — orderPRO (wzorce do adaptacji)
|
||||
- Migrator: C:\visual studio code\projekty\orderPRO\src\Core\Database\Migrator.php
|
||||
- Sidebar: C:\visual studio code\projekty\orderPRO\resources\views\layouts\app.php (lines 18-116)
|
||||
- Database view: C:\visual studio code\projekty\orderPRO\resources\views\settings\database.php
|
||||
- CSS sidebar: C:\visual studio code\projekty\orderPRO\public\assets\css\app.css (sidebar section)
|
||||
</context>
|
||||
|
||||
<acceptance_criteria>
|
||||
|
||||
## AC-1: Panel migracji bazy danych
|
||||
```gherkin
|
||||
Given użytkownik zalogowany w panelu backPRO
|
||||
When przechodzi do /settings/database
|
||||
Then widzi statystyki migracji (total, applied, pending)
|
||||
And widzi listę oczekujących plików migracji
|
||||
And może kliknąć "Uruchom migracje" aby wykonać pending migracje
|
||||
And po wykonaniu widzi logi z wynikami (ok/error per plik)
|
||||
```
|
||||
|
||||
## AC-2: Nowy sidebar
|
||||
```gherkin
|
||||
Given użytkownik zalogowany w panelu
|
||||
When widzi lewe menu
|
||||
Then menu ma nowoczesny wygląd (ciemne tło, ikony SVG, grupy rozwijane)
|
||||
And sekcje: Główne (Dashboard, Strony, SEO Stats), Treści (Tematy, Artykuły, StatLink), Administracja (Instalator, Ustawienia z sub-menu, Logi)
|
||||
And aktywna strona jest podświetlona
|
||||
And menu można zwinąć/rozwinąć
|
||||
```
|
||||
|
||||
## AC-3: Lista publikacji StatLink
|
||||
```gherkin
|
||||
Given użytkownik przechodzi do /statlink
|
||||
Then widzi tabelę z linkami StatLink (artykuł, URL, anchor, data dodania, wygasa, status)
|
||||
And linki aktywne są zielone, wygasłe szare, failed czerwone
|
||||
And widzi podsumowanie: X aktywnych, Y wygasłych, Z błędów
|
||||
```
|
||||
|
||||
</acceptance_criteria>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Migrator engine + controller + widok migracji</name>
|
||||
<files>src/Core/Database/Migrator.php, src/Controllers/SettingsController.php, templates/settings/database.php, config/routes.php</files>
|
||||
<action>
|
||||
1. Skopiować i dostosować Migrator.php z orderPRO:
|
||||
- Namespace: App\Core\Database
|
||||
- Zmienić lock name na 'backpro_migrations_lock'
|
||||
- Używa istniejącego Database::getInstance() do PDO
|
||||
- Ścieżka migracji: basePath/migrations/
|
||||
- Bez zmian w logice (ensureMigrationsTable, runPending, status)
|
||||
|
||||
2. Dodać metody do SettingsController:
|
||||
- database(): GET /settings/database — wyświetla status migracji
|
||||
- Tworzy Migrator z Database::getInstance() i ścieżką migrations
|
||||
- Przekazuje $status = $migrator->status() do widoku
|
||||
- migrate(): POST /settings/database/migrate — uruchamia migracje
|
||||
- Wywołuje $migrator->runPending()
|
||||
- Flash success/error + redirect do /settings/database
|
||||
|
||||
3. Dodać routes:
|
||||
- $router->get('/settings/database', 'SettingsController', 'database');
|
||||
- $router->post('/settings/database/migrate', 'SettingsController', 'migrate');
|
||||
|
||||
4. Utworzyć templates/settings/database.php:
|
||||
- Statystyki: total, applied, pending (3 karty)
|
||||
- Alert warning jeśli pending > 0 + przycisk "Uruchom migracje"
|
||||
- Tabela z pending files
|
||||
- Logi po wykonaniu (jeśli dostępne)
|
||||
- Styl: użyj istniejących klas Bootstrap z backPRO
|
||||
|
||||
Avoid: nie zmieniaj istniejącego install.php — Migrator to nowy, równoległy mechanizm.
|
||||
Avoid: nie usuwaj istniejącej metody index() ani update() z SettingsController.
|
||||
</action>
|
||||
<verify>PHP lint na wszystkich zmienionych plikach</verify>
|
||||
<done>AC-1 satisfied: panel migracji z Migratorem dostępny pod /settings/database</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: Nowy sidebar wzorowany na orderPRO</name>
|
||||
<files>templates/layout/sidebar.php, templates/layout/main.php, assets/css/app.css</files>
|
||||
<action>
|
||||
1. Przepisać sidebar.php na nowy format z orderPRO:
|
||||
- Struktura: aside.sidebar > div.sidebar__brand + nav.sidebar__nav
|
||||
- Grupy rozwijane: details.sidebar__group > summary.sidebar__group-toggle + div.sidebar__group-links
|
||||
- Ikony SVG inline (nie Bootstrap Icons CDN)
|
||||
- Collapse button w brand area
|
||||
|
||||
Sekcje menu:
|
||||
a) Grupa "Główne":
|
||||
- Dashboard (/) — ikona: dashboard/home
|
||||
- Strony WP (/sites) — ikona: globe
|
||||
- Statystyki SEO (/seo/stats) — ikona: chart
|
||||
|
||||
b) Grupa "Treści":
|
||||
- Biblioteka Tematów (/global-topics) — ikona: book
|
||||
- Artykuły (/articles) — ikona: document
|
||||
- StatLink (/statlink) — ikona: link/chain
|
||||
|
||||
c) Grupa "Administracja":
|
||||
- Instalator WP (/installer) — ikona: download
|
||||
- Ustawienia (/settings) — sub-links:
|
||||
- Ustawienia API (/settings)
|
||||
- Baza danych (/settings/database)
|
||||
- Dziennik zdarzeń (/logs) — ikona: list
|
||||
|
||||
d) Footer: użytkownik + wyloguj (jak obecny)
|
||||
|
||||
2. Active state: użyj zmiennej $activeMenu przekazywanej z kontrolera
|
||||
- Grupy auto-open gdy aktywna strona jest w grupie
|
||||
|
||||
3. Dodać CSS sidebar do app.css (skopiować sekcję sidebar z orderPRO app.css):
|
||||
- .sidebar: dark bg (#0f172a), 260px width, fixed left
|
||||
- .sidebar.is-collapsed: 52px width, hide labels
|
||||
- .sidebar__brand, __nav, __link, __group, __sublink
|
||||
- Hover, active states, transitions
|
||||
- Responsive: mobile overlay z backdrop
|
||||
|
||||
4. Zaktualizować main.php:
|
||||
- Dodać .app-shell wrapper
|
||||
- Dodać sidebar-backdrop div
|
||||
- Dodać JS do collapse/expand
|
||||
|
||||
Avoid: nie usuwaj istniejących stylów z app.css — dodaj nowe sekcje sidebar na końcu.
|
||||
Avoid: zachowaj aktualną zmienną $activeMenu i Router::isCurrent().
|
||||
</action>
|
||||
<verify>PHP lint + wizualna weryfikacja (sidebar renderuje się poprawnie)</verify>
|
||||
<done>AC-2 satisfied: nowy sidebar z grupami, ikonami SVG, collapse</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 3: Widok listy StatLink + route</name>
|
||||
<files>src/Controllers/StatLinkController.php, templates/statlink/index.php, config/routes.php</files>
|
||||
<action>
|
||||
1. Dodać metodę index() do StatLinkController:
|
||||
- Auth::requireLogin()
|
||||
- Pobrać z bazy statlink_links z JOIN na articles i sites
|
||||
- Podsumowanie: count active, expired, removed, failed
|
||||
- Paginacja (20 per page)
|
||||
- Przekazać do widoku
|
||||
|
||||
2. Dodać route: $router->get('/statlink', 'StatLinkController', 'index');
|
||||
|
||||
3. Utworzyć templates/statlink/index.php:
|
||||
- Nagłówek z 4 kartami statystyk (active, expired, removed, failed) — kolorowe
|
||||
- Tabela:
|
||||
- Artykuł (tytuł + link do /articles/{id})
|
||||
- Strona (nazwa site)
|
||||
- URL linkowany
|
||||
- Anchor
|
||||
- Data dodania
|
||||
- Wygasa
|
||||
- Status (badge: zielony=active, szary=expired/removed, czerwony=failed)
|
||||
- StatLink ID
|
||||
- Sortowanie domyślne: added_at DESC
|
||||
- Paginacja na dole
|
||||
|
||||
Avoid: nie modyfikuj istniejącej metody runByToken() w StatLinkController.
|
||||
</action>
|
||||
<verify>PHP lint + endpoint /statlink zwraca stronę z tabelą</verify>
|
||||
<done>AC-3 satisfied: lista StatLink z tabelą i statystykami</done>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<boundaries>
|
||||
|
||||
## DO NOT CHANGE
|
||||
- src/Services/StatLinkService.php (dopiero co utworzony)
|
||||
- src/Services/PublisherService.php
|
||||
- src/Models/Article.php
|
||||
- migrations/* (istniejące migracje)
|
||||
- install.php (istniejący mechanizm)
|
||||
|
||||
## SCOPE LIMITS
|
||||
- Nie dodajemy CRUD dla statlink_links (tylko podgląd)
|
||||
- Nie przenosimy istniejących ustawień do nowego formatu
|
||||
- Sidebar: adaptacja orderPRO designu, nie kopia 1:1
|
||||
|
||||
</boundaries>
|
||||
|
||||
<verification>
|
||||
Before declaring plan complete:
|
||||
- [ ] php -l na wszystkich zmienionych/nowych plikach PHP
|
||||
- [ ] /settings/database pokazuje status migracji
|
||||
- [ ] POST /settings/database/migrate wykonuje pending migracje
|
||||
- [ ] Sidebar renderuje się z nowymi grupami i ikonami
|
||||
- [ ] /statlink pokazuje listę linków z tabeli statlink_links
|
||||
- [ ] Aktywne linki w menu są podświetlone
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- 3 taski wykonane
|
||||
- Panel migracji działa end-to-end
|
||||
- Sidebar wygląda jak w orderPRO (adaptacja do backPRO)
|
||||
- Lista StatLink pokazuje dane z tabeli
|
||||
- Brak regresji w istniejącej funkcjonalności
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
After completion, create `.paul/phases/02-admin-panel-upgrade/02-01-SUMMARY.md`
|
||||
</output>
|
||||
Reference in New Issue
Block a user