feat: Release v3.1.6 - Amélioration complète des flux de passages
- Optimisation des listes de passages (user/admin) - Amélioration du flux de création avec validation temps réel - Amélioration du flux de consultation avec export multi-formats - Amélioration du flux de modification avec suivi des changements - Ajout de la génération PDF pour les reçus - Migration de la structure des uploads - Implémentation de la file d'attente d'emails - Ajout des permissions de suppression de passages - Corrections de bugs et optimisations performances 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
186
api/scripts/cron/test_email_queue.php
Executable file
186
api/scripts/cron/test_email_queue.php
Executable file
@@ -0,0 +1,186 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Script de test pour vérifier le processeur de queue d'emails
|
||||
* Affiche les emails en attente sans les envoyer
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
// Simuler l'environnement web pour AppConfig en CLI
|
||||
if (php_sapi_name() === 'cli') {
|
||||
$_SERVER['SERVER_NAME'] = $_SERVER['SERVER_NAME'] ?? 'dapp.geosector.fr'; // DVA par défaut
|
||||
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_HOST'] ?? $_SERVER['SERVER_NAME'];
|
||||
$_SERVER['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1';
|
||||
|
||||
// Définir getallheaders si elle n'existe pas (CLI)
|
||||
if (!function_exists('getallheaders')) {
|
||||
function getallheaders() {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../../src/Core/Database.php';
|
||||
require_once __DIR__ . '/../../src/Config/AppConfig.php';
|
||||
|
||||
try {
|
||||
// Initialiser la configuration
|
||||
$appConfig = AppConfig::getInstance();
|
||||
$dbConfig = $appConfig->getDatabaseConfig();
|
||||
|
||||
// Initialiser la base de données avec la configuration
|
||||
Database::init($dbConfig);
|
||||
$db = Database::getInstance();
|
||||
|
||||
echo "=== TEST DE LA QUEUE D'EMAILS ===\n\n";
|
||||
|
||||
// Statistiques générales
|
||||
$stmt = $db->query('
|
||||
SELECT
|
||||
status,
|
||||
COUNT(*) as count,
|
||||
MIN(created_at) as oldest,
|
||||
MAX(created_at) as newest
|
||||
FROM email_queue
|
||||
GROUP BY status
|
||||
');
|
||||
|
||||
$stats = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
echo "STATISTIQUES:\n";
|
||||
echo "-------------\n";
|
||||
foreach ($stats as $stat) {
|
||||
echo sprintf(
|
||||
"Status: %s - Nombre: %d (Plus ancien: %s, Plus récent: %s)\n",
|
||||
$stat['status'],
|
||||
$stat['count'],
|
||||
$stat['oldest'] ?? 'N/A',
|
||||
$stat['newest'] ?? 'N/A'
|
||||
);
|
||||
}
|
||||
|
||||
echo "\n";
|
||||
|
||||
// Emails en attente
|
||||
$stmt = $db->prepare('
|
||||
SELECT
|
||||
eq.id,
|
||||
eq.fk_pass,
|
||||
eq.to_email,
|
||||
eq.subject,
|
||||
eq.created_at,
|
||||
eq.attempts,
|
||||
eq.status,
|
||||
p.fk_type,
|
||||
p.montant,
|
||||
p.nom_recu
|
||||
FROM email_queue eq
|
||||
LEFT JOIN ope_pass p ON eq.fk_pass = p.id
|
||||
WHERE eq.status = ?
|
||||
ORDER BY eq.created_at DESC
|
||||
LIMIT 10
|
||||
');
|
||||
|
||||
$stmt->execute(['pending']);
|
||||
$pendingEmails = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
if (empty($pendingEmails)) {
|
||||
echo "Aucun email en attente.\n";
|
||||
} else {
|
||||
echo "EMAILS EN ATTENTE (10 plus récents):\n";
|
||||
echo "------------------------------------\n";
|
||||
foreach ($pendingEmails as $email) {
|
||||
echo sprintf(
|
||||
"ID: %d | Passage: %d | Destinataire: %s\n",
|
||||
$email['id'],
|
||||
$email['fk_pass'],
|
||||
$email['to_email']
|
||||
);
|
||||
echo sprintf(
|
||||
" Sujet: %s\n",
|
||||
$email['subject']
|
||||
);
|
||||
echo sprintf(
|
||||
" Créé le: %s | Tentatives: %d\n",
|
||||
$email['created_at'],
|
||||
$email['attempts']
|
||||
);
|
||||
if ($email['fk_pass'] > 0) {
|
||||
echo sprintf(
|
||||
" Passage - Type: %s | Montant: %.2f€ | Reçu: %s\n",
|
||||
$email['fk_type'] == 1 ? 'DON' : 'Autre',
|
||||
$email['montant'] ?? 0,
|
||||
$email['nom_recu'] ?? 'Non généré'
|
||||
);
|
||||
}
|
||||
echo "---\n";
|
||||
}
|
||||
}
|
||||
|
||||
// Emails échoués
|
||||
$stmt = $db->prepare('
|
||||
SELECT
|
||||
id,
|
||||
fk_pass,
|
||||
to_email,
|
||||
subject,
|
||||
created_at,
|
||||
attempts,
|
||||
error_message
|
||||
FROM email_queue
|
||||
WHERE status = ?
|
||||
ORDER BY created_at DESC
|
||||
LIMIT 5
|
||||
');
|
||||
|
||||
$stmt->execute(['failed']);
|
||||
$failedEmails = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
if (!empty($failedEmails)) {
|
||||
echo "\nEMAILS ÉCHOUÉS (5 plus récents):\n";
|
||||
echo "--------------------------------\n";
|
||||
foreach ($failedEmails as $email) {
|
||||
echo sprintf(
|
||||
"ID: %d | Passage: %d | Destinataire: %s\n",
|
||||
$email['id'],
|
||||
$email['fk_pass'],
|
||||
$email['to_email']
|
||||
);
|
||||
echo sprintf(
|
||||
" Sujet: %s\n",
|
||||
$email['subject']
|
||||
);
|
||||
echo sprintf(
|
||||
" Tentatives: %d | Erreur: %s\n",
|
||||
$email['attempts'],
|
||||
$email['error_message'] ?? 'Non spécifiée'
|
||||
);
|
||||
echo "---\n";
|
||||
}
|
||||
}
|
||||
|
||||
// Vérifier la configuration SMTP
|
||||
echo "\nCONFIGURATION SMTP:\n";
|
||||
echo "-------------------\n";
|
||||
|
||||
$smtpConfig = $appConfig->getSmtpConfig();
|
||||
$emailConfig = $appConfig->getEmailConfig();
|
||||
|
||||
echo "Host: " . ($smtpConfig['host'] ?? 'Non configuré') . "\n";
|
||||
echo "Port: " . ($smtpConfig['port'] ?? 'Non configuré') . "\n";
|
||||
echo "Username: " . ($smtpConfig['user'] ?? 'Non configuré') . "\n";
|
||||
echo "Password: " . (isset($smtpConfig['pass']) ? '***' : 'Non configuré') . "\n";
|
||||
echo "Encryption: " . ($smtpConfig['secure'] ?? 'Non configuré') . "\n";
|
||||
echo "From Email: " . ($emailConfig['from'] ?? 'Non configuré') . "\n";
|
||||
echo "Contact Email: " . ($emailConfig['contact'] ?? 'Non configuré') . "\n";
|
||||
|
||||
echo "\n=== FIN DU TEST ===\n";
|
||||
|
||||
} catch (Exception $e) {
|
||||
echo "ERREUR: " . $e->getMessage() . "\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
exit(0);
|
||||
Reference in New Issue
Block a user