Files
2026-04-24 18:53:11 +02:00

7.7 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 03 execute 3
02-02
src/Services/WordPressService.php
src/Controllers/SiteController.php
templates/sites/comments.php
config/routes.php
true off
## Goal Dodac "twarde" zamykanie komentarzy dla istniejacych tresci WordPress: 1. Zamkniecie komentarzy i pingow/trackbackow we wszystkich istniejacych wpisach strony. 2. Opcjonalne usuniecie oczekujacych komentarzy spamowych po zamknieciu komentarzy. 3. Pokazanie wyniku operacji w panelu komentarzy BackPRO.

Purpose

Samo wylaczenie komentowania nowych wpisow nie chroni starych artykulow, ktore maja comment_status = open. Boty moga dalej dodawac komentarze pod istniejacymi wpisami. Operator BackPRO potrzebuje jednej akcji, ktora zdalnie domyka cala powierzchnie komentarzy dla wybranego serwisu.

Output

  • Nowa metoda closeExistingComments() w WordPressService.
  • Nowe akcje remote service w backpro-remote-service.php generowanym przez WordPressService.
  • Nowa akcja POST w SiteController i trasa w config/routes.php.
  • Sekcja w templates/sites/comments.php z przyciskiem "Zamknij komentarze w istniejacych wpisach" i opcja usuniecia oczekujacych komentarzy.
## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md

Prior Work

@.paul/phases/02-admin-panel-upgrade/02-02-SUMMARY.md

Source Files

@src/Services/WordPressService.php @src/Controllers/SiteController.php @templates/sites/comments.php @config/routes.php

<acceptance_criteria>

AC-1: Masowe zamkniecie istniejacych wpisow

Given uzytkownik jest zalogowany w BackPRO i strona ma aktywny plik serwisowy BackPRO
When klika "Zamknij komentarze w istniejacych wpisach"
Then WordPress ustawia comment_status='closed' i ping_status='closed' dla wszystkich opublikowanych wpisow
And BackPRO pokazuje liczbe zaktualizowanych wpisow

AC-2: Opcjonalne czyszczenie oczekujacych komentarzy

Given uzytkownik widzi panel komentarzy danej strony
When zaznacza opcje usuniecia oczekujacych komentarzy i uruchamia operacje
Then WordPress usuwa komentarze ze statusem hold
And BackPRO pokazuje liczbe usunietych komentarzy

AC-3: Bezpieczna obsluga bledow i odswiezenie statusu

Given remote service jest nieaktualny albo niedostepny
When uzytkownik uruchamia masowe zamkniecie komentarzy
Then BackPRO probuje zaktualizowac plik serwisowy i ponawia akcje
And przy niepowodzeniu pokazuje czytelny komunikat bledu bez psucia listy komentarzy

</acceptance_criteria>

Task 1: Dodac operacje close_existing_comments do WordPressService i remote service src/Services/WordPressService.php Dodac publiczna metode: - closeExistingComments(array $site, bool $deletePendingComments = false): array - Wywoluje callRemoteService($site, 'close_existing_comments', ['delete_pending_comments' => '1'/'0']). - Jezeli akcja nie dziala przez stary plik serwisowy, wywoluje ensureRemoteService(), odswieza site z bazy i ponawia akcje. - Zwraca success, posts_updated, pending_comments_deleted, message. - Przy bledzie zwraca success=false i czytelny message.
Zaktualizowac BACKPRO_REMOTE_SERVICE_VERSION do kolejnej wersji, np. 1.6.0.

W getBackproRemoteServiceContent() dodac action `close_existing_comments`:
- Ustawic default_comment_status='closed' i default_ping_status='closed', aby nowe tresci tez byly domyslnie zamkniete.
- Wykonac bezposredni update przez global `$wpdb`:
  - UPDATE {$wpdb->posts} SET comment_status='closed', ping_status='closed' WHERE post_type IN ('post','page') AND post_status NOT IN ('trash','auto-draft')
- Zliczyc liczbe zaktualizowanych rekordow z wyniku query.
- Jesli `delete_pending_comments=1`, usunac komentarze ze statusem `hold` przez wp_delete_comment($commentId, true).
- Zwracac JSON z posts_updated, pending_comments_deleted i message.

Nie modyfikowac istniejacych metod listowania/usuwania pojedynczych komentarzy poza ewentualnym wspolnym helperem formatowania wyniku.
php -l src/Services/WordPressService.php AC-1, AC-2 i AC-3 maja warstwe zdalnej operacji WordPress. Task 2: Dodac akcje kontrolera i trase masowego zamkniecia src/Controllers/SiteController.php, config/routes.php Dodac do SiteController metode: - closeExistingComments(string $id): void - Auth::requireLogin(). - Pobrac Site::find(), obsluzyc brak strony. - Odczytac checkbox/field `delete_pending_comments` jako bool. - Wywolac WordPressService::closeExistingComments($site, $deletePendingComments). - Flash success z liczba posts_updated i pending_comments_deleted. - Flash danger z message przy bledzie. - Redirect do `/sites/{id}/comments`.
Dodac trase:
- POST `/sites/{id}/comments/close-existing` -> SiteController@closeExistingComments

Zachowac cienki kontroler: nie wpisywac SQL ani logiki WordPress do kontrolera.
php -l src/Controllers/SiteController.php oraz php -l config/routes.php AC-1, AC-2 i AC-3 sa dostepne z panelu przez POST route. Task 3: Dodac UI hard-close w panelu komentarzy templates/sites/comments.php W `templates/sites/comments.php` dodac karte/sekcje pod ustawieniem "Komentowanie nowych wpisow": - Tytul: "Istniejace wpisy". - Krotkie wyjasnienie: operacja zamyka komentarze i pingi/trackbacki w juz opublikowanych tresciach. - Formularz POST do `/sites/{id}/comments/close-existing`. - Checkbox `delete_pending_comments` opisany jako "Usun oczekujace komentarze przy tej operacji". - Przycisk w stylu ostrzegawczym, np. `btn-outline-danger`, z data-confirm zawierajacym ostrzezenie, ze operacja dotyczy wszystkich wpisow tej strony. - Po flashu sukcesu/bledu istniejacy layout ma normalnie pokazac komunikat.
Nie ukrywac listy komentarzy ani istniejacych filtrow statusu.
php -l templates/sites/comments.php AC-1 i AC-2 maja widoczny, potwierdzany interfejs uzytkownika.

DO NOT CHANGE

  • src/Services/PublisherService.php
  • src/Models/Article.php
  • src/Models/Topic.php
  • migrations/* (brak zmian schematu bazy)
  • templates/articles/*
  • cron/*

SCOPE LIMITS

  • Nie dodawac globalnej operacji dla wszystkich stron naraz; zakres to pojedyncza strona.
  • Nie dodawac moderacji approve/spam/unspam w tym planie.
  • Nie usuwac zatwierdzonych komentarzy, chyba ze uzytkownik usunie je osobno istniejaca funkcja.
  • Nie dodawac nowych zaleznosci Composer.
  • Nie modyfikowac bazy lokalnej BackPRO.
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/comments.php - [ ] /sites/{id}/comments pokazuje sekcje "Istniejace wpisy" - [ ] POST /sites/{id}/comments/close-existing wywoluje remote service i pokazuje wynik - [ ] Remote service version wzrosla, aby wymusic aktualizacje pliku na serwerze

<success_criteria>

  • Operator moze jednym kliknieciem zamknac komentarze i pingi w istniejacych wpisach wybranej strony.
  • Operator moze przy tej operacji usunac komentarze oczekujace na moderacje.
  • Wynik operacji pokazuje liczby zaktualizowanych wpisow i usunietych komentarzy.
  • Brak regresji w istniejacym widoku listy komentarzy i usuwaniu pojedynczego komentarza. </success_criteria>
After completion, create `.paul/phases/02-admin-panel-upgrade/02-03-SUMMARY.md`