From c2c05505c83463af39e3f983f828eccf383ad1fd Mon Sep 17 00:00:00 2001 From: Serreau Jovann Date: Sat, 4 Apr 2026 12:05:25 +0200 Subject: [PATCH] feat: modal confirmation glassmorphism + crontabs nettoyage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modal confirmation custom (assets/app.js) : - Remplace le confirm() natif du navigateur par une modal glassmorphism - Header glass-dark avec icône warning rouge + "Confirmation" - Message dynamique depuis data-confirm du formulaire - Boutons Annuler (glass) et Confirmer (rouge) - Fermeture via overlay, bouton Annuler ou Escape - Au clic Confirmer : supprime data-confirm et submit le formulaire Crontab Docker (docker/cron/crontab) : - 0 2 * * * app:clean:pending-delete (nettoyage clients pending_delete) - 0 5 * * * app:email-tracking:purge (purge tracking > 90j) - 0 6 * * * app:dns:check (vérification DNS) - 0 4 * * 0 app:meilisearch:setup (reindex complet dimanche 4h) - 0 7 * * * app:cloudflare:clean (nettoyage _acme-challenge) Ansible deploy.yml.disabled : - Ajout cron clean pending delete (daily 2h) - Ajout cron meilisearch full reindex (weekly dimanche 4h) Co-Authored-By: Claude Opus 4.6 (1M context) --- ansible/deploy.yml.disabled | 17 +++++++++++++ assets/app.js | 49 +++++++++++++++++++++++++++++++++++-- docker/cron/crontab | 5 ++++ 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/ansible/deploy.yml.disabled b/ansible/deploy.yml.disabled index f6a8dd0..61af1eb 100644 --- a/ansible/deploy.yml.disabled +++ b/ansible/deploy.yml.disabled @@ -288,6 +288,23 @@ job: "docker compose -f /var/www/crm-siteconseil/docker-compose-prod.yml exec -T php php bin/console app:cloudflare:clean --env=prod >> /var/log/crm-siteconseil-cloudflare-clean.log 2>&1" user: bot + - name: Configure pending delete cleanup cron (daily at 2am) + cron: + name: "crm-siteconseil clean pending delete" + minute: "0" + hour: "2" + job: "docker compose -f /var/www/crm-siteconseil/docker-compose-prod.yml exec -T php php bin/console app:clean:pending-delete --env=prod >> /var/log/crm-siteconseil-clean-pending.log 2>&1" + user: bot + + - name: Configure Meilisearch full reindex cron (weekly Sunday at 4am) + cron: + name: "crm-siteconseil meilisearch reindex" + minute: "0" + hour: "4" + weekday: "0" + job: "docker compose -f /var/www/crm-siteconseil/docker-compose-prod.yml exec -T php php bin/console app:meilisearch:setup --env=prod >> /var/log/crm-siteconseil-meilisearch-reindex.log 2>&1" + user: bot + post_tasks: - name: Disable maintenance mode command: make maintenance_off diff --git a/assets/app.js b/assets/app.js index e26d819..ee21e54 100644 --- a/assets/app.js +++ b/assets/app.js @@ -29,11 +29,56 @@ document.addEventListener('DOMContentLoaded', () => { }); } - // data-confirm + // data-confirm — modal glassmorphism custom + const confirmModal = document.createElement('div'); + confirmModal.id = 'confirm-modal'; + confirmModal.className = 'hidden fixed inset-0 z-[100] flex items-center justify-center'; + confirmModal.innerHTML = ` +
+
+
+ + + + Confirmation +
+
+

+
+ + +
+
+
`; + document.body.appendChild(confirmModal); + + let pendingForm = null; + const confirmMessage = document.getElementById('confirm-message'); + const confirmCancel = document.getElementById('confirm-cancel'); + const confirmOk = document.getElementById('confirm-ok'); + const confirmOverlay = document.getElementById('confirm-overlay'); + + const closeConfirm = () => { confirmModal.classList.add('hidden'); pendingForm = null; }; + + confirmCancel.addEventListener('click', closeConfirm); + confirmOverlay.addEventListener('click', closeConfirm); + document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && pendingForm) closeConfirm(); }); + + confirmOk.addEventListener('click', () => { + if (pendingForm) { + confirmModal.classList.add('hidden'); + pendingForm.removeAttribute('data-confirm'); + pendingForm.requestSubmit(); + } + }); + document.querySelectorAll('form[data-confirm]').forEach(form => { form.addEventListener('submit', (e) => { - if (!confirm(form.dataset.confirm)) { + if (form.dataset.confirm) { e.preventDefault(); + pendingForm = form; + confirmMessage.textContent = form.dataset.confirm; + confirmModal.classList.remove('hidden'); } }); }); diff --git a/docker/cron/crontab b/docker/cron/crontab index fca8a24..2c175af 100644 --- a/docker/cron/crontab +++ b/docker/cron/crontab @@ -5,3 +5,8 @@ */5 * * * * php /app/bin/console app:infra:snapshot --env=dev >> /proc/1/fd/1 2>&1 0 4 * * * echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] START app:attestations:clean" >> /proc/1/fd/1 && php /app/bin/console app:attestations:clean --env=dev >> /proc/1/fd/1 2>&1 && echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] END app:attestations:clean" >> /proc/1/fd/1 */15 * * * * echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] START app:services:check" >> /proc/1/fd/1 && php /app/bin/console app:services:check --env=dev >> /proc/1/fd/1 2>&1 && echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] END app:services:check" >> /proc/1/fd/1 +0 2 * * * echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] START app:clean:pending-delete" >> /proc/1/fd/1 && php /app/bin/console app:clean:pending-delete --env=dev >> /proc/1/fd/1 2>&1 && echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] END app:clean:pending-delete" >> /proc/1/fd/1 +0 5 * * * echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] START app:email-tracking:purge" >> /proc/1/fd/1 && php /app/bin/console app:email-tracking:purge --env=dev >> /proc/1/fd/1 2>&1 && echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] END app:email-tracking:purge" >> /proc/1/fd/1 +0 6 * * * echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] START app:dns:check" >> /proc/1/fd/1 && php /app/bin/console app:dns:check --env=dev >> /proc/1/fd/1 2>&1 && echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] END app:dns:check" >> /proc/1/fd/1 +0 4 * * 0 echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] START app:meilisearch:setup" >> /proc/1/fd/1 && php /app/bin/console app:meilisearch:setup --env=dev >> /proc/1/fd/1 2>&1 && echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] END app:meilisearch:setup" >> /proc/1/fd/1 +0 7 * * * echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] START app:cloudflare:clean" >> /proc/1/fd/1 && php /app/bin/console app:cloudflare:clean --env=dev >> /proc/1/fd/1 2>&1 && echo "[$(date '+\%Y-\%m-\%d \%H:\%M:\%S')] END app:cloudflare:clean" >> /proc/1/fd/1