7.7 KiB
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 |
|
|
true | off |
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()wWordPressService. - Nowe akcje remote service w
backpro-remote-service.phpgenerowanym przezWordPressService. - Nowa akcja POST w
SiteControlleri trasa wconfig/routes.php. - Sekcja w
templates/sites/comments.phpz przyciskiem "Zamknij komentarze w istniejacych wpisach" i opcja usuniecia oczekujacych komentarzy.
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.
<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>