Files
crmPRO/.paul/phases/02-critical-bugs-fix/02-02-PLAN.md
2026-03-15 20:22:01 +01:00

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
templates/site/layout-cron.php
templates/cron/main-view.php
autoload/view/class.Site.php
true
## Goal Naprawić stronę cron (`/cron/main_view/`) — usunąć widoczne elementy nawigacji u góry i zabezpieczyć JS przed zatrzymaniem się po błędzie serwera.

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)
## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md

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
Before declaring plan complete: - [ ] Bloki .top i .main-menu usunięte z layout-cron.php - [ ] Stray "$" usunięty z tagu script w layout-cron.php - [ ] JSON.parse w try/catch w cron/main-view.php - [ ] Zmienna response zadeklarowana z var - [ ] Countdown restartuje się po błędzie parsowania - [ ] All acceptance criteria met

<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>
After completion, create `.paul/phases/02-critical-bugs-fix/02-02-SUMMARY.md`