5.6 KiB
5.6 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous
| phase | plan | type | wave | depends_on | files_modified | autonomous | |||
|---|---|---|---|---|---|---|---|---|---|
| 02-critical-bugs-fix | 02 | execute | 1 |
|
true |
Purpose
Strona cron to dashboard monitorujący zadania cykliczne. Po zmianach w CRM nawigacja (logo, user-nav, menu) wyświetla się nieprawidłowo, a błędy serwera (np. nieprawidłowy JSON) powodują zatrzymanie pętli JS cron.
Output
- Uproszczony layout-cron.php bez zbędnej nawigacji
- Odporny na błędy JS w cron/main-view.php
- Poprawiony view/class.Site.php (ustawienie $tpl->user dla cron)
Source Files
@templates/site/layout-cron.php @templates/cron/main-view.php @autoload/view/class.Site.php
<acceptance_criteria>
AC-1: Nawigacja niewidoczna na stronie cron
Given strona /cron/main_view/ jest otwarta w przeglądarce
When użytkownik widzi stronę
Then elementy .top (logo, user-nav) i .main-menu nie są widoczne
And widoczna jest tylko zawartość cron dashboard
AC-2: JS kontynuuje pracę po błędzie serwera
Given cron JS loop jest uruchomiony
When serwer zwróci nieprawidłowy JSON (np. PHP warning/error)
Then JS nie zatrzymuje się
And pętla cron kontynuuje z rosnącym delay
And użytkownik widzi komunikat o błędzie
AC-3: Brak błędu JS w layout-cron
Given strona cron jest załadowana
When JavaScript się inicjalizuje
Then nie ma błędu składni JS (usunięty stray "$" w tagu script)
</acceptance_criteria>
Task 1: Uprościć layout-cron.php — usunąć nawigację templates/site/layout-cron.php, autoload/view/class.Site.php **templates/site/layout-cron.php:** 1. Usunąć blok `.top` (linie 33-58) — logo i user-nav niepotrzebne na stronie cron 2. Usunąć blok `.main-menu` (linie 59-108) — menu niepotrzebne na stronie cron 3. Zostawić prosty layout: head + body z klasą "cron-page" + div.main z contentem + popup + script 4. Naprawić linię 124: usunąć stray `$` z `<script type="text/javascript">$` → `<script type="text/javascript">`**autoload/view/class.Site.php:**
5. W bloku cron (linie 20-26), ustawić `$tpl->user = $user;` przed renderowaniem, na wypadek gdyby szablon potrzebował — lub upewnić się, że uproszczony szablon nie odwołuje się do $this->user
WAŻNE: Zachować head z CSS/JS (potrzebne dla gridEdit i countdown). Zachować sekcję popup i script na dole.
Odczytać layout-cron.php i potwierdzić:
- Brak bloków .top i .main-menu
- Brak stray "$" w tagu script
- Head, div.main, popup i scripts zachowane
AC-1 i AC-3 satisfied: Nawigacja usunięta, błąd składni JS naprawiony
Task 2: Zabezpieczyć JS cron loop przed błędami serwera
templates/cron/main-view.php
W funkcji `cron()` w callback `success`:
1. Opakować `jQuery.parseJSON(data)` w try/catch
2. W catch: wyświetlić komunikat o błędzie, zwiększyć delay, restart countdown (analogicznie do istniejącego error handler)
3. Zamienić przestarzałe `jQuery.parseJSON(data)` na `JSON.parse(data)` (jQuery.parseJSON jest deprecated)
Wzór:
```javascript
success: function( data ) {
try {
var response = JSON.parse( data );
} catch(e) {
delay++;
if ( delay > 120 ) delay = 120;
$( '#cron-container' ).prepend( '<div class="msg error">Błąd parsowania odpowiedzi serwera.</div>' );
$( '.countdown.callback' ).removeClass('ended').data('countdown').update( +( new Date ) + delay * 1000 ).start();
return;
}
// reszta istniejącej logiki success
}
```
WAŻNE: Nie zmieniać logiki error/statusCode handlers — działają poprawnie.
Dodać `var` przed `response` (linia 51 — brak var powoduje global variable).
Odczytać cron/main-view.php i potwierdzić:
- JSON.parse opakowane w try/catch
- W catch: delay++, komunikat, restart countdown
- Zmienna response zadeklarowana z var
AC-2 satisfied: JS cron loop jest odporny na błędy parsowania JSON
DO NOT CHANGE
- cron.php (backend cron logic)
- libraries/grid/* (gridEdit framework)
- libraries/countdown/* (countdown plugin)
- autoload/controls/class.Cron.php (routing)
- autoload/view/class.Cron.php (view logic)
SCOPE LIMITS
- Naprawiamy TYLKO problemy ze stroną cron
- NIE zmieniamy logiki cron backend
- NIE dodajemy nowych zależności
- NIE refaktoryzujemy gridEdit ani countdown
<success_criteria>
- Strona /cron/main_view/ nie pokazuje nawigacji u góry
- JS cron loop kontynuuje działanie po błędzie serwera
- Brak błędów JS w konsoli przeglądarki </success_criteria>