# Proxy cache calendrier public — `alpinux.org/public-calendars/` ## Rôle Ce composant expose le calendrier Nextcloud d'Alpinux en iCal public, avec mise en cache locale pour éviter de solliciter le serveur Nextcloud à chaque requête. ## Localisation | Élément | Chemin | |---|---| | Script PHP | `/var/www/clients/client1/web11/web/public-calendars/index.php` | | Cache ICS | `/var/www/clients/client1/web11/web/public-calendars/{token}.ics` | | Lien symlink | `/var/www/alpinux.org/web/` → même racine | ## Flux de données ``` Visiteur / JS page d'accueil │ ▼ GET https://alpinux.org/public-calendars/{token} │ ▼ index.php ├── Cache valide (< 1 h) ? ──▶ sert le fichier .ics local └── Cache expiré ou absent ──▶ fetch Nextcloud DAV │ ▼ https://alpinux.yourownnet.fr/remote.php/dav/public-calendars/{token}?export │ ▼ Écrit {token}.ics ──▶ sert le fichier ``` ## TTL du cache **3 600 secondes (1 heure).** Passé ce délai, la prochaine requête déclenche un nouveau fetch Nextcloud et écrase le fichier. ## Modes d'accès | URL | Comportement | |---|---| | `/public-calendars/{token}` | Flux iCal brut (usage principal) | | `/public-calendars/{token}?p=webcal` | Redirige vers `webcal://…` pour abonnement depuis une appli calendrier | | `/public-calendars/{token}?p=html` | Aperçu HTML des 8 prochains événements (dans les 4 mois) | ## Invalidation manuelle du cache Lorsqu'un événement est ajouté ou modifié dans Nextcloud et doit apparaître immédiatement (sans attendre 1 heure) : ```bash sudo rm /var/www/clients/client1/web11/web/public-calendars/n5BWPYsxw7FCYozM.ics ``` La prochaine requête HTTP sur `/public-calendars/n5BWPYsxw7FCYozM` régénère le cache automatiquement. ## Token du calendrier Alpinux | Calendrier | Token | |---|---| | Alpinux évènements (`president@alpinux.org`) | `n5BWPYsxw7FCYozM` | ## Source Nextcloud Le calendrier est géré dans l'interface Nextcloud de l'association. L'événement doit impérativement être placé dans le calendrier **« Alpinux évènements »** pour apparaître dans le flux public. Un événement dans un autre agenda (personnel, secondaire) ne sera pas exporté. ## Relation avec la page d'accueil `alpinux.org/index.html` charge le flux via `fetch('/public-calendars/n5BWPYsxw7FCYozM')` côté client (JS) pour alimenter la grille planning et les cartes « Prochains rendez-vous ». Voir `home/index.html` pour le code de parsing iCal.