9.3 KiB
9.3 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous, delegation
| phase | plan | type | wave | depends_on | files_modified | autonomous | delegation | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 02-admin-panel-upgrade | 01 | execute | 1 |
|
|
true | off |
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
/statlinkz listą aktywnych/wygasłych linków StatLink - Endpoint migracji
/settings/database/migrate
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)
<acceptance_criteria>
AC-1: Panel migracji bazy danych
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
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
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>
Task 1: Migrator engine + controller + widok migracji src/Core/Database/Migrator.php, src/Controllers/SettingsController.php, templates/settings/database.php, config/routes.php 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.
PHP lint na wszystkich zmienionych plikach
AC-1 satisfied: panel migracji z Migratorem dostępny pod /settings/database
Task 2: Nowy sidebar wzorowany na orderPRO
templates/layout/sidebar.php, templates/layout/main.php, assets/css/app.css
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().
PHP lint + wizualna weryfikacja (sidebar renderuje się poprawnie)
AC-2 satisfied: nowy sidebar z grupami, ikonami SVG, collapse
Task 3: Widok listy StatLink + route
src/Controllers/StatLinkController.php, templates/statlink/index.php, config/routes.php
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.
PHP lint + endpoint /statlink zwraca stronę z tabelą
AC-3 satisfied: lista StatLink z tabelą i statystykami
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
<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>