Cart Cleaner / v2.1.0
Disponibile · PS 8.x
0x01 · Hook layer

Disattivazione reattiva

Il modulo registra l'hook actionObjectCartRuleUpdateAfter in fase di installazione. Quando una cart rule viene aggiornata e lo stato active passa a 0, Cart Cleaner reagisce nello stesso ciclo di richiesta.

  • Ricerca tutti i carrelli con quella regola applicata via ps_cart_cart_rule
  • Processa in batch configurabile (default 500)
  • Logga l'operazione con sorgente hook
  • Non blocca il back office: l'amministratore vede la modifica confermata subito
hook trace · CartRuleUpdateAfter
01admin → POST /admin/cartrule/edit/147
02CartRule #147 updated · active: 1→0
03fire actionObjectCartRuleUpdateAfter
04 ↳ cartcleaner::onCartRuleUpdate()
05found 218 carts · cleaning…
06done · 218 cleaned · log #4821
0x02 · Hook layer

Save-time guard

L'hook actionCartSave si attiva ogni volta che un carrello viene salvato: modifica quantità, aggiunta prodotto, applicazione coupon, risposta a mail di recupero, checkout step.

Cart Cleaner ne approfitta per verificare che tutte le cart rule nel carrello siano ancora attive. Se nel frattempo ne è stata disattivata una (e per qualche motivo la pulizia del layer 01 non l'ha raggiunta), viene rimossa qui.

  • Cattura i carrelli "dormienti" che si risvegliano dopo giorni
  • Blocca i carrelli recuperati via email marketing con sconti ormai scaduti
  • Overhead minimo: una sola query sulle regole del carrello corrente
hook trace · CartSave
01customer → resume cart #88.412 (age: 18d)
02fire actionCartSave
03 ↳ scan rules: [#147]
04 #147 active=0 · stale
05remove cart_rule from cart #88.412
06customer sees updated total before next step
0x03 · Hook layer

Ultima linea di difesa

L'hook actionValidateOrder è l'ultima rete prima che un ordine venga finalizzato. Cart Cleaner lo usa per un controllo finale: se una regola inattiva è sopravvissuta ai primi due layer (raro ma possibile, es. race condition), viene rimossa qui.

L'evento viene loggato sia nella tabella del modulo (source=checkout) sia su PrestaShopLogger come warning di severità 2, così il team tecnico può indagare se succede spesso.

Toggle: attivabile/disattivabile dal backoffice via CARTCLEANER_ORDER_PROTECTION. Se hai altre logiche in questa fase preferisci lasciare disattivato il layer 03 e affidarti ai primi due.
hook trace · ValidateOrder
01checkout → place order #20250418-0042
02fire actionValidateOrder
03 ↳ audit rules · [#147, #201]
04 #147 stale · stripping
05PrestaShopLogger::addLog (severity 2)
06order placed · total recomputed · log #4829
0x04 · Scale

Batch processing

Lo sweep di grandi volumi di carrelli può mandare in timeout o saturare la memoria PHP. Cart Cleaner suddivide il lavoro in blocchi configurabili da 10 a 5.000 carrelli per ciclo (default 500).

  • Ogni batch apre e chiude la sua transazione
  • Un errore su un singolo carrello non ferma il batch: lo logga come errore e prosegue
  • Puoi alzare il batch size se l'hosting regge, abbassarlo su hosting shared stretti
# Pseudo-logica di batching
foreach ($rule in $stale_rules) {
  $carts = findCartsWithRule($rule);
  foreach ($batch in chunk($carts, $size)) {
    try { removeRuleFromCarts($batch); }
    catch (Exception $e) { logError(); }
    flushAndSleep(50ms);
  }
}
0x05 · Automation

Cron di manutenzione

Endpoint HTTP protetto da token (32 caratteri generati in installazione, rigenerabile). Il cron fa due cose: sweep delle regole inattive residue e purga dei log oltre la retention.

Il comando crontab è già pronto nel back office — copiaincolla e attiva.

# ogni notte alle 3:00
$0 3 * * * curl -s "https://tuoshop.com/module/cartcleaner/cron?token=XXXXXXXX" > /dev/null
cron · 03:00:01
01curl /module/cartcleaner/cron?token=***
02auth OK · starting sweep
03scan stale rules → 0 residual
04purge logs older than 90d → 32 rows
05done · 0.42s · http 200
0x06 · Control

Pulizia manuale

Nel back office due strumenti di intervento diretto, per i casi in cui vuoi agire adesso senza aspettare il cron.

  • Pulizia singola regola: select con solo le regole effettivamente presenti in almeno un carrello (niente liste chilometriche di coupon mai usati)
  • Sweep globale: un pulsante che ripulisce tutte le regole inattive residue nei carrelli, con conferma
  • Entrambe le azioni vengono loggate con sorgente manual e id_employee
Audit trail: sai sempre chi ha premuto cosa e quando. Le azioni manuali vengono distinte da hook/cron nella tabella storico.
pulizia manuale CartCleaner::admin
Regole da pulire
#147 — NATALE2025 · 218 carrelli ▼
0x07 · Audit

Log tracciato

Ogni operazione scrive una riga in ps_cartcleaner_log: data, id cart rule, codice, nome, carrelli trovati, puliti, errori, sorgente, id_employee (se manuale), dettagli.

La tabella ha indici ottimizzati per i filtri più comuni (data, regola, sorgente). La paginazione mostra 20 righe per pagina con naviga­zione centrata sulla corrente (max 10 pagine visibili).

  • Quattro sorgenti distinte: hook, manual, cron, checkout — ognuna con badge colorato
  • Campo details per note contestuali (es. "intercettata durante validazione ordine, carrello #88.412")
  • Export CSV nativo per analisi offline (UTF-8 con BOM, aperto da Excel)
ps_cartcleaner_log1.284 rows
DataRegolaPulitiSorgente
14:32:16#147218hook
12:18:02#14147manuale
11:47:33#13831checkout
03:00:01(sweep)12cron
0x08 · Hygiene

Retention auto-purga

La tabella log cresce. Se non la gestisci, in un anno puoi accumulare decine di migliaia di righe che rallentano le query. Cart Cleaner gestisce la cosa per te.

  • Periodo di retention configurabile (default 90 giorni)
  • Il cron notturno elimina le righe più vecchie della soglia
  • Pulsante "Purga log vecchi" nel back office per forzare l'operazione
  • Le statistiche aggregate (totali) vengono calcolate dalle righe ancora presenti — quindi per avere numeri storici attendibili scegli una retention coerente con il tuo uso
Attenzione: una volta purgata, la riga di log non è recuperabile. Prima di alzare/abbassare la retention di molto, esporta manualmente un backup della tabella.
# configurazione retention
CARTCLEANER_LOG_RETENTION = 90 # giorni

# query di purga (semplificata)
DELETE FROM ps_cartcleaner_log
WHERE date_add < DATE_SUB(NOW(), INTERVAL 90 DAY);
0x09 · Observability

Tab dedicata nel menu Ordini

Dalla v2.1 il modulo registra una voce Cart Cleaner direttamente nel menu Ordini del back office PrestaShop. Un click per arrivare alla dashboard — niente "Moduli → cerca modulo → configura".

Vedi quattro KPI live (operazioni e carrelli puliti, totali e giornalieri), un grafico 30 giorni con tooltip SVG nativi, lo storico operazioni paginato con badge per sorgente (hook, manuale, cron, checkout) e il nome dell'employee quando l'azione è manuale. Bottone Esporta CSV integrato. Le azioni di scrittura sono nella pagina Configura (un link diretto te le apre).

KPI livelast 24h
Oggi · ops
12
Oggi · puliti
327
Totali · ops
1.284
Totali · puliti
9.618

Nove capacità operative, un audit trail, zero carrelli contaminati.
99,99 € una tantum.