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