# GoogleSyncPlus (Google Calendar Sync Plus) — Resoconto per ripresa lavoro

Documento di handoff generato su richiesta: **non si è proceduto** con la migrazione reale degli eventi tra calendari Google (`events.move`).

---

## Contesto

- Installazione VTE (fork VTiger 6.x) con modulo **GoogleSyncPlus**, refactor per compatibilità **VTE 25 / VTE 26**, PHP 8.3, bootstrap/session/ajax, alias Zend→Laminas per HTTP client, risoluzione PHP CLI per `exec`/cron.
- UX aggiunta: quando l’utente cambia il **calendario di destinazione principale** (VTE→Google), compare un dialog con opzioni **Sposta / Lascia / Annulla** e **Simulazione (dry-run)** senza scritture su DB/Google.

---

## Stato attuale dell’istanza (ultimo feedback utente)

- Simulazione (dry-run) tipica: **125 eventi** sarebbero stati spostati (master / singoli), **535 skipped** (istanze ricorrenti Google `masterId_YYYYMMDDTHHMMSSZ` — non migrabili con `events.move` sulla singola istanza).
- **Decisione utente:** non voler procedere ora con la migrazione reale.

---

## Fix recenti (migrazione target calendar)

Percorsi principali: `modules/GoogleSyncPlus/auth.php`, `injector.js`, `language/it_it.lang.php`, `language/en_us.lang.php`.

1. **Propagazione `calendar_id` sulle istanze ricorrenti dopo move del master**  
   Dopo `events.move` OK sul master, UPDATE sul mapping per righe figlie (`LIKE` con `ESCAPE '|'`) così gli update successivi da VTE non usano più il vecchio calendario (evita 404 silenziosi).

2. **Timeout PHP durante migrazione lunga**  
   Nel ramo `migrate`: `@set_time_limit(0)` e `@ignore_user_abort(true)` per ridurre rischio di interruzione a metà.

3. **Esclusione “calendari secondari” dalla migrazione — regressione e correzione**  
   Prima si escludevano tutti i calendari in `$selected` tranne il nuovo target, **incluso il vecchio target** se ancora selezionato per sync → count = 0 e dialog assente.  
   Correzione: helper `gspl_secondary_active_exclusion($selected, $newTarget, $prevTarget)` che esclude solo calendari **secondari “puri”** (`$selected` minus `$newTarget` minus **`$prevTarget`**).

Altri punti già noti dall’analisi (non necessariamente tutti risolti): rate limit Google, logging errori oltre i primi 3 nel JSON, rollback automatico assente.

---

## Dry-run / Simulazione

- Flag POST `dry_run=1` su `save_calendars_ajax`: **nessun** salvataggio preferenze, **nessuna** chiamata Google, solo conteggio coerente con la logica di migrazione (inclusa esclusione secondari con `$prevTarget` letto da DB).
- Endpoint `count_target_migration`: stesso criterio di esclusione per il numero mostrato nel dialog.

---

## Cache frontend

- Gli script sono registrati in `vte_links` con querystring `gsplv=VERSION-mtime`. Dopo modifiche a JS/i18n è stato aggiornato il suffisso in DB (es. `2.3.14-<mtime>`). Su ripresa: dopo cambi a `injector.js`, aggiornare cachebuster o fare reinstall STEP link script come da `install.php`.

---

## Da fare / verificare (non fatto ora)

- Migrazione reale **non eseguita**: dopo eventuale “Sposta”, verificare coerenza mapping (`GROUP BY calendar_id` su `vte_googlesyncplus_map` per utente).
- Task storico aperto: pulsante **Disinstalla** visibile anche con licenza non attiva (rimandato; uninstall manuale usato in passato).
- Allineare **build/ZIP** distribuibile (`/tmp/gspl_build_*` o pipeline esistente) se i fix vivono solo sull’istanza `vte23083_2711`.
- Documento bug invitees VTE: `BUGREPORT_VTE_Calendar_Invitees.md` / PDF — core da sistemare lato VTE.

---

## Note operative per nuova conversazione

1. Leggere questo file e, se serve il dettaglio codice, `modules/GoogleSyncPlus/auth.php` (rami `count_target_migration`, `save_calendars_ajax`, helper `gspl_secondary_active_exclusion`, loop `migration_action === 'migrate'`).
2. Non modificare core VTE (`include/`, `modules/Update/`, ecc.): solo modulo/SDK come da rule workspace.
3. Utente preferisce **italiano** e non vuole commit git senza richiesta esplicita.

---

## Percorsi utili (workspace)

| Elemento | Path tipico |
|----------|-------------|
| Modulo live (istanza usata in sviluppo) | `vte23083_2711/modules/GoogleSyncPlus/` |
| Questo handoff | `/var/www/html/GSPL_GOOGLECALENDARSYNCPLUS_HANDOFF.md` |

---

*Fine resoconto — ripresa consigliata copiando il contenuto rilevante o allegando questo file alla nuova chat.*
