Files
2026-04-24 09:33:20 +02:00

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
02-01
src/Services/WordPressService.php
src/Controllers/SiteController.php
templates/sites/dashboard.php
templates/sites/comments.php
config/routes.php
true off
## Goal Dodac do zarzadzania pojedyncza strona WordPress zdalna kontrole komentarzy: 1. Wlaczenie i wylaczenie mozliwosci komentowania na danym serwisie. 2. Pobranie listy komentarzy z danego serwisu. 3. Usuwanie komentarzy z poziomu BackPRO.

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 WordPressService do statusu komentarzy, zmiany ustawien, listowania i usuwania komentarzy.
  • Akcje w SiteController dla panelu komentarzy i operacji POST.
  • Widok /sites/{id}/comments z tabela komentarzy, filtrami i akcja usuniecia.
  • Karta/status komentarzy na dashboardzie strony.
  • Nowe trasy w config/routes.php.
## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md

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.
Before declaring plan complete: - [ ] php -l src/Services/WordPressService.php - [ ] php -l src/Controllers/SiteController.php - [ ] php -l config/routes.php - [ ] php -l templates/sites/dashboard.php - [ ] php -l templates/sites/comments.php - [ ] /sites/{id}/dashboard pokazuje wejscie do komentarzy i status ustawienia - [ ] /sites/{id}/comments pokazuje tabele albo czytelny blad pobrania - [ ] POST ustawienia komentowania zmienia default_comment_status na WordPressie - [ ] POST usuniecia komentarza usuwa komentarz albo pokazuje czytelny blad - [ ] Aktualizacja pliku serwisowego BackPRO podnosi wersje remote service

<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>
After completion, create `.paul/phases/02-admin-panel-upgrade/02-02-SUMMARY.md`