update
This commit is contained in:
188
.paul/phases/02-admin-panel-upgrade/02-03-PLAN.md
Normal file
188
.paul/phases/02-admin-panel-upgrade/02-03-PLAN.md
Normal file
@@ -0,0 +1,188 @@
|
||||
---
|
||||
phase: 02-admin-panel-upgrade
|
||||
plan: 03
|
||||
type: execute
|
||||
wave: 3
|
||||
depends_on: ["02-02"]
|
||||
files_modified:
|
||||
- src/Services/WordPressService.php
|
||||
- src/Controllers/SiteController.php
|
||||
- templates/sites/comments.php
|
||||
- config/routes.php
|
||||
autonomous: true
|
||||
delegation: off
|
||||
---
|
||||
|
||||
<objective>
|
||||
## 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.
|
||||
</objective>
|
||||
|
||||
<context>
|
||||
## 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
|
||||
</context>
|
||||
|
||||
<acceptance_criteria>
|
||||
|
||||
## AC-1: Masowe zamkniecie istniejacych wpisow
|
||||
```gherkin
|
||||
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
|
||||
```gherkin
|
||||
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
|
||||
```gherkin
|
||||
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>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Dodac operacje close_existing_comments do WordPressService i remote service</name>
|
||||
<files>src/Services/WordPressService.php</files>
|
||||
<action>
|
||||
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.
|
||||
</action>
|
||||
<verify>php -l src/Services/WordPressService.php</verify>
|
||||
<done>AC-1, AC-2 i AC-3 maja warstwe zdalnej operacji WordPress.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: Dodac akcje kontrolera i trase masowego zamkniecia</name>
|
||||
<files>src/Controllers/SiteController.php, config/routes.php</files>
|
||||
<action>
|
||||
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.
|
||||
</action>
|
||||
<verify>php -l src/Controllers/SiteController.php oraz php -l config/routes.php</verify>
|
||||
<done>AC-1, AC-2 i AC-3 sa dostepne z panelu przez POST route.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 3: Dodac UI hard-close w panelu komentarzy</name>
|
||||
<files>templates/sites/comments.php</files>
|
||||
<action>
|
||||
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.
|
||||
</action>
|
||||
<verify>php -l templates/sites/comments.php</verify>
|
||||
<done>AC-1 i AC-2 maja widoczny, potwierdzany interfejs uzytkownika.</done>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<boundaries>
|
||||
|
||||
## 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.
|
||||
|
||||
</boundaries>
|
||||
|
||||
<verification>
|
||||
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
|
||||
</verification>
|
||||
|
||||
<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>
|
||||
|
||||
<output>
|
||||
After completion, create `.paul/phases/02-admin-panel-upgrade/02-03-SUMMARY.md`
|
||||
</output>
|
||||
38
.paul/phases/02-admin-panel-upgrade/02-03-SUMMARY.md
Normal file
38
.paul/phases/02-admin-panel-upgrade/02-03-SUMMARY.md
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
phase: 02-admin-panel-upgrade
|
||||
plan: 03
|
||||
completed: 2026-04-24T09:15:37.793Z
|
||||
---
|
||||
|
||||
# Phase 02-03 Summary
|
||||
|
||||
****
|
||||
|
||||
## Acceptance Criteria Results
|
||||
|
||||
| Criterion | Status |
|
||||
|-----------|--------|
|
||||
| Task 1: Dodac operacje close_existing_comments do WordPressService i remote service | Pass — Dodano WordPressService::closeExistingComments(), akcje remote service close_existing_comments oraz podniesiono BACKPRO_REMOTE_SERVICE_VERSION do 1.6.0. Po live bledzie poprawiono generowany SQL string w remote service i zweryfikowano php -l dla wygenerowanego pliku. |
|
||||
| Task 2: Dodac akcje kontrolera i trase masowego zamkniecia | Pass — Dodano SiteController::closeExistingComments() oraz POST /sites/{id}/comments/close-existing. Zweryfikowano php -l src/Controllers/SiteController.php i php -l config/routes.php. |
|
||||
| Task 3: Dodac UI hard-close w panelu komentarzy | Pass — Dodano sekcje Istniejace wpisy w templates/sites/comments.php z checkboxem usuwania oczekujacych komentarzy i confirmem. Zweryfikowano php -l templates/sites/comments.php. |
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- Task 1: Dodac operacje close_existing_comments do WordPressService i remote service: Dodano WordPressService::closeExistingComments(), akcje remote service close_existing_comments oraz podniesiono BACKPRO_REMOTE_SERVICE_VERSION do 1.6.0. Po live bledzie poprawiono generowany SQL string w remote service i zweryfikowano php -l dla wygenerowanego pliku.
|
||||
- Task 2: Dodac akcje kontrolera i trase masowego zamkniecia: Dodano SiteController::closeExistingComments() oraz POST /sites/{id}/comments/close-existing. Zweryfikowano php -l src/Controllers/SiteController.php i php -l config/routes.php.
|
||||
- Task 3: Dodac UI hard-close w panelu komentarzy: Dodano sekcje Istniejace wpisy w templates/sites/comments.php z checkboxem usuwania oczekujacych komentarzy i confirmem. Zweryfikowano php -l templates/sites/comments.php.
|
||||
|
||||
## Files Modified
|
||||
|
||||
- `src/Services/WordPressService.php`
|
||||
- `src/Controllers/SiteController.php`
|
||||
- `config/routes.php`
|
||||
- `templates/sites/comments.php`
|
||||
|
||||
## Deviations
|
||||
|
||||
During live testing the remote service returned non-JSON because the generated PHP contained escaped SQL string quotes (\"UPDATE ...\"). Fixed the generator in WordPressService.php, generated a temporary backpro-remote-service.php, and verified it with php -l. User confirmed the feature works after the fix.
|
||||
|
||||
---
|
||||
*Phase: 02-admin-panel-upgrade, Plan: 03*
|
||||
*Completed: 2026-04-24*
|
||||
Reference in New Issue
Block a user