9.6 KiB
9.6 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 | 02 | execute | 2 |
|
|
true | off |
Purpose
BackPRO ma centralnie zarzadzac siecia stron zapleczowych. Komentarze sa ryzykiem moderacyjnym i spamowym, wiec operator powinien moc szybko wylaczyc komentowanie oraz usuwac niechciane komentarze bez logowania sie do kazdego panelu WordPress osobno.
Output
- Metody w
WordPressServicedo statusu komentarzy, zmiany ustawien, listowania i usuwania komentarzy. - Akcje w
SiteControllerdla panelu komentarzy i operacji POST. - Widok
/sites/{id}/commentsz tabela komentarzy, filtrami i akcja usuniecia. - Karta/status komentarzy na dashboardzie strony.
- Nowe trasy w
config/routes.php.
Prior Work
@.paul/phases/02-admin-panel-upgrade/02-01-PLAN.md
Source Files
@src/Services/WordPressService.php @src/Controllers/SiteController.php @templates/sites/dashboard.php @templates/sites/index.php @config/routes.php @src/Core/Controller.php
<acceptance_criteria>
AC-1: Status i przelaczanie komentowania
Given uzytkownik jest zalogowany w BackPRO i ma skonfigurowany serwis WordPress z plikiem zdalnym BackPRO
When przechodzi do dashboardu strony
Then widzi aktualny status komentowania dla nowych wpisow
And moze wlaczyc lub wylaczyc komentowanie z poziomu BackPRO
And po akcji widzi komunikat sukcesu albo konkretny blad polaczenia
AC-2: Lista komentarzy z serwisu
Given uzytkownik jest zalogowany i strona ma poprawne dane WordPress API
When przechodzi do /sites/{id}/comments
Then widzi liste komentarzy z WordPressa z autorem, trescia, data, statusem i linkiem do wpisu
And moze filtrowac komentarze po statusie all/hold/approve/spam/trash
And widok poprawnie obsluguje pusta liste i blad pobrania danych
AC-3: Usuwanie komentarzy
Given uzytkownik widzi komentarz na liscie komentarzy strony
When klika usun i potwierdza operacje
Then BackPRO usuwa komentarz przez WordPress API
And uzytkownik wraca do listy komentarzy z komunikatem wyniku
And bledy 401/403/404 sa obsluzone czytelnym komunikatem
</acceptance_criteria>
Task 1: Rozszerzyc WordPressService o operacje komentarzy src/Services/WordPressService.php Dodac publiczne metody: - getCommentSettings(array $site): array - Uzyc callRemoteService($site, 'get_comment_settings'). - Jezeli endpoint jest nieaktualny, wywolac ensureRemoteService(), odswiezyc site z bazy i ponowic probe. - Zwracac success, default_comment_status, comments_enabled, message. - setCommentsEnabled(array $site, bool $enabled): array - Uzyc callRemoteService($site, 'set_comment_settings', ['comments_enabled' => '1'/'0']). - Endpoint po stronie WordPress ma ustawiac option default_comment_status na open/closed. - Nie zmieniac masowo istniejacych postow w tym planie, zeby nie zaskoczyc uzytkownika utrata historii dyskusji. - getComments(array $site, string $status = 'all', int $page = 1, int $perPage = 20): array - Uzyc WP REST `wp/v2/comments` z auth z buildAuthOption(). - Parametry: status, page, per_page, orderby=date, order=desc, context=edit. - Zwracac success, comments, page, total_pages, total, message. - Dla 401/403 zwrocic komunikat o braku uprawnien aplikacyjnego hasla/API uzytkownika. - deleteComment(array $site, int $commentId): array - Uzyc WP REST DELETE `wp/v2/comments/{id}` z auth i query force=true. - 404 traktowac jako czytelny blad "komentarz nie istnieje" albo sukces idempotentny tylko jesli API jasno zwraca deleted=true.Zaktualizowac BACKPRO_REMOTE_SERVICE_VERSION do kolejnej wersji i tresc getBackproRemoteServiceContent():
- ping ma zwracac nowa wersje.
- action=get_comment_settings zwraca default_comment_status i comments_enabled.
- action=set_comment_settings waliduje comments_enabled i zapisuje update_option('default_comment_status', 'open'/'closed').
Zachowac istniejace fallbacki requestWp() i nie ruszac logiki publikacji, mediow, permalinkow ani indeksowania.
php -l src/Services/WordPressService.php
AC-1, AC-2 i AC-3 maja warstwe komunikacji z WordPressem.
Task 2: Dodac akcje kontrolera i trasy komentarzy
src/Controllers/SiteController.php, config/routes.php
Dodac do SiteController:
- comments(string $id): void
- Auth::requireLogin().
- Pobrac Site::find(), obsluzyc brak strony.
- Odczytac status z query `status` z whitelista: all, hold, approve, spam, trash.
- Odczytac page jako int >= 1.
- Wywolac WordPressService::getCommentSettings() oraz getComments().
- Renderowac `sites/comments` z site, commentSettings, commentsResult, selectedStatus, page.
- updateCommentsEnabled(string $id): void
- POST z polem enabled=1/0.
- Wywolac setCommentsEnabled().
- Flash success/danger i redirect do `/sites/{id}/comments`.
- deleteComment(string $id, string $commentId): void
- Walidowac commentId > 0.
- Wywolac deleteComment().
- Flash success/danger i redirect z zachowaniem statusu, jesli podany.
Dodac trasy:
- GET `/sites/{id}/comments` -> SiteController@comments
- POST `/sites/{id}/comments/settings` -> SiteController@updateCommentsEnabled
- POST `/sites/{id}/comments/{commentId}/delete` -> SiteController@deleteComment
Kontroler ma zostac cienki: mapuje request, wywoluje WordPressService, ustawia flash i przekazuje dane do widoku. Nie wkladac logiki REST API do kontrolera.
php -l src/Controllers/SiteController.php oraz php -l config/routes.php
AC-1, AC-2 i AC-3 dostepne przez routing BackPRO.
Task 3: Zbudowac UI komentarzy dla pojedynczej strony
templates/sites/dashboard.php, templates/sites/comments.php
Utworzyc `templates/sites/comments.php`:
- Naglowek: nazwa strony, link powrotu do dashboardu i listy stron.
- Karta "Komentowanie" z badge ON/OFF wedlug commentSettings.
- Dwa formularze POST do `/sites/{id}/comments/settings`: wlacz i wylacz komentarze.
- Krotka informacja, ze przelacznik dotyczy domyslnego komentowania nowych wpisow.
- Filtry statusu jako linki: Wszystkie, Oczekujace, Zatwierdzone, Spam, Kosz.
- Tabela komentarzy: autor, email/URL jesli dostepne, fragment tresci bez HTML, data, status, link do wpisu, akcja usun.
- Usuwanie jako POST z `data-confirm`.
- Paginacja na podstawie total_pages i aktualnej strony.
- Wszystkie dane z WordPressa escape przez htmlspecialchars.
Zaktualizowac `templates/sites/dashboard.php`:
- Dodac karte lub przycisk "Komentarze" w sekcji zarzadzania strona.
- Pokazac status komentowania, jesli SiteController::dashboard przekaze commentSettings.
- Link do `/sites/{id}/comments`.
Zaktualizowac SiteController::dashboard w ramach Task 2 lub tego taska:
- pobrac commentSettings przez WordPressService i przekazac do widoku dashboardu.
Nie tworzyc osobnego globalnego ekranu komentarzy dla wszystkich stron w tym planie.
php -l templates/sites/dashboard.php oraz php -l templates/sites/comments.php
AC-1, AC-2 i AC-3 maja kompletny interfejs w panelu strony.
DO NOT CHANGE
- src/Services/PublisherService.php
- src/Models/Article.php
- src/Models/Topic.php
- migrations/* (brak zmian schematu bazy w tym planie)
- templates/articles/* (komentarze dotycza zarzadzania strona, nie artykulow BackPRO)
SCOPE LIMITS
- Przelacznik komentowania dotyczy domyslnego komentowania nowych wpisow (
default_comment_status), bez masowego zamykania komentarzy w istniejacych postach. - Nie dodawac moderacji approve/spam/unspam w tym planie; tylko lista i usuwanie.
- Nie cache'owac komentarzy lokalnie w bazie BackPRO.
- Nie dodawac nowych zaleznosci Composer.
- Nie zmieniac sposobu przechowywania danych API/FTP stron.
<success_criteria>
- Operator moze wlaczyc i wylaczyc komentowanie dla wybranej strony.
- Operator widzi komentarze pobrane z danego serwisu WordPress.
- Operator moze usuwac komentarze z BackPRO.
- Bledy polaczenia i uprawnien sa czytelne w UI.
- Brak regresji w publikacji, permalinkach, StatLink i istniejacym dashboardzie strony. </success_criteria>