NGZ Ads / Automatisation & Crons

Automatisation & Tâches planifiées (Crons)

NGZ Ads inclut deux scripts de tâches planifiées (crons) situés dans le dossier cron/. Ces scripts peuvent être déclenchés automatiquement chaque jour par le système d'exploitation, ou manuellement via le navigateur pour des tests.


Les deux scripts disponibles

1. cron/expire-ads.php — Expiration des annonces

Ce script parcourt les annonces dont la date d'expiration est dépassée et les bascule en statut expired. Si les notifications d'expiration sont activées, un e-mail est envoyé au déposant.

Il gère également les alertes préventives : un e-mail d'avertissement est envoyé N jours avant la date d'expiration (configurable dans les paramètres).

Fréquence recommandée : une fois par jour, de préférence la nuit (ex : 02h00).


2. cron/daily-report.php — Rapport quotidien d'activité

Ce script génère et envoie par e-mail un rapport d'activité journalier à l'administrateur du site. Il contient :

DonnéeDescription
Annonces activesNombre total d'annonces en ligne
Nouvelles annoncesAnnonces publiées dans la journée (▲/▼ vs la veille)
Annonces expiréesPassées en statut expired dans la journée
Annonces suppriméesPassées en statut deleted dans la journée, avec la liste détaillée (titre + ID)
Variation netteNouvelles − (supprimées + expirées) = évolution réelle des actives
UtilisateursTotal inscrits + nouvelles inscriptions du jour (▲/▼ vs la veille)

Le rapport est disponible en HTML (mise en page soignée) ou en texte brut selon le paramètre Format des e-mails dans l'administration.

Fréquence recommandée : une fois par jour, le matin (ex : 08h00).


Configuration dans l'administration

Rendez-vous dans Administration → Paramètres → onglet Email.

Token secret Cron

Tous les scripts cron sont protégés par un token secret. Sans ce token, une requête HTTP vers le script retourne une erreur 403 Forbidden.

Générez un token aléatoire via le bouton dans la section Expiration & Notifications, puis copiez-le.

Ne communiquez jamais ce token publiquement. Traitez-le comme un mot de passe.

Paramètres du rapport quotidien

ParamètreValeur
Activer le rapportActive/désactive l'envoi quotidien
Langue du rapportFrançais 🇫🇷 ou Anglais 🇬🇧
DestinataireL'e-mail de contact du site (onglet Site)

Format des e-mails

Le menu déroulant Format des e-mails sortants (section Email Format) contrôle le format de tous les e-mails sortants :

  • HTML — mise en forme enrichie avec couleurs et tableaux (par défaut)
  • Texte brut — e-mail simple, meilleure compatibilité avec certains clients

Paramètres d'expiration (script expire-ads.php)

ParamètreDescription
Envoyer des notifications d'expirationActive les e-mails lors des expirations
Jours d'alerte avant expirationEnvoie un avertissement N jours avant la date limite
Expiration des annonces (jours)Durée de vie par défaut d'une nouvelle annonce

Préférence de langue e-mail par utilisateur

Chaque utilisateur peut choisir la langue dans laquelle il reçoit ses e-mails (notifications d'expiration, alertes, etc.) depuis son profil → section Préférences.

OptionDescription
🇫🇷 FrançaisE-mails reçus en français (défaut)
🇬🇧 EnglishE-mails reçus en anglais

Cette préférence est indépendante de la langue d'affichage de l'interface.


Mise en place sur un serveur Linux (production)

Méthode CLI (recommandée)

Éditez la crontab de l'utilisateur serveur (www-data, apache, ou votre utilisateur dédié) :

crontab -e

Ajoutez les deux lignes suivantes en adaptant les chemins :

# Expiration des annonces — tous les jours à 02h00
0 2 * * * /usr/bin/php /var/www/html/cron/expire-ads.php >> /var/log/ngzads-expiry.log 2>&1

# Rapport quotidien — tous les jours à 08h00
0 8 * * * /usr/bin/php /var/www/html/cron/daily-report.php >> /var/log/ngzads-report.log 2>&1

Vérifiez le chemin de PHP avec which php ou php -v.

Méthode HTTP (hébergements mutualisés)

Si vous n'avez pas accès à la crontab système, la plupart des hébergements proposent un planificateur de tâches dans leur panneau de contrôle (cPanel, Plesk, etc.). Configurez-y une requête HTTP périodique vers les URLs suivantes :

https://votre-site.com/cron/expire-ads.php?token=VOTRE_TOKEN_SECRET
https://votre-site.com/cron/daily-report.php?token=VOTRE_TOKEN_SECRET

Remplacez VOTRE_TOKEN_SECRET par la valeur affichée dans Administration → Paramètres → Expiration & Notifications → URL Cron.

Sur certains hébergements, utilisez curl ou wget dans la crontab :

> curl -s "https://votre-site.com/cron/expire-ads.php?token=TOKEN" > /dev/null
>

Mise en place sur MAMP (développement local)

MAMP ne fournit pas de planificateur intégré. Deux options :

Option 1 — Crontab macOS

crontab -e
# Expiration — chaque jour à 02h00
0 2 * * * /Applications/MAMP/bin/php/php8.3.9/bin/php /Applications/MAMP/htdocs/claude/ngzads/NGZADS/cron/expire-ads.php >> /tmp/ngzads-expiry.log 2>&1

# Rapport — chaque jour à 08h00
0 8 * * * /Applications/MAMP/bin/php/php8.3.9/bin/php /Applications/MAMP/htdocs/claude/ngzads/NGZADS/cron/daily-report.php >> /tmp/ngzads-report.log 2>&1

Vérifiez que macOS a bien autorisé le terminal à accéder aux fichiers (Préférences Système → Sécurité → Accès complet au disque).

Option 2 — Déclenchement manuel via navigateur (test)

Collez l'URL Cron affichée dans l'administration dans votre navigateur. La réponse JSON confirme l'exécution :

{
  "success": true,
  "sent": true,
  "to": "admin@monsite.com",
  "lang": "fr",
  "format": "html",
  "stats": {
    "totalActive": 142,
    "newAdsToday": 5,
    "deletedToday": 1,
    "expiredToday": 2
  }
}

Tester les crons en ligne de commande

Vous pouvez aussi exécuter les scripts directement dans un terminal sans nécessiter le token (le mode CLI bypasse la vérification HTTP) :

# Sur un serveur Linux
php /var/www/html/cron/expire-ads.php
php /var/www/html/cron/daily-report.php

# Sur MAMP
/Applications/MAMP/bin/php/php8.3.9/bin/php /Applications/MAMP/htdocs/claude/ngzads/NGZADS/cron/expire-ads.php
/Applications/MAMP/bin/php/php8.3.9/bin/php /Applications/MAMP/htdocs/claude/ngzads/NGZADS/cron/daily-report.php

La sortie console résume le résultat :

[2026-04-06 08:00:01] Daily report sent → admin@monsite.com (lang:fr, format:html, active_ads:142, new_ads:5, users:87)
[2026-04-06 02:00:03] Expiry check complete — expired: 2, warned: 1

Sécurité

Bonne pratiqueDétail
Token aléatoire longUtilisez le générateur intégré (32 caractères aléatoires)
Fichier .htaccessLe dossier cron/ contient un .htaccess qui refuse l'accès direct sans paramètre
Régénérez le tokenSi vous suspectez une compromission, changez le token dans les paramètres
LogsTous les envois d'e-mails sont tracés dans logs/mails.log (accessible depuis Administration → Paramètres → Journaux)

Récapitulatif

ScriptQuand l'exécuterDéclencheur
expire-ads.phpTous les jours à 02h00CLI ou HTTP + token
daily-report.phpTous les jours à 08h00CLI ou HTTP + token

Conseil : commencez par tester chaque script manuellement (navigateur ou CLI) avant de configurer la crontab, afin de vous assurer que l'e-mail arrive bien et que les paramètres SMTP sont corrects.