====== Digest pour FluxBB ======
Attention, version mise à jour. Utiliser la dernière version du GIT (section **devel**).
https://github.com/CyrilleBiot/scripts/blob/devel/digest.php
Envoi mail hebdomadaire des nouveautés d'un forum FluxBB
A copier dans un fichier **digest.php** et positionner sur un **cron**.
#
# cyrille
# https://cbiot.fr/
# Licence GPL
#
# Debut du script
$time_start = microtime(true);
# Recuperation des donnees de connexion
require'config.php';
# Nombre de jour à garder
$nb_days = 7 ;
# Période à afficher
$today = date('d/m/Y', time()) ;
$todayDiff = date('d/m/Y',strtotime("- $nb_days days" ));
# Message de présentation du mail
$message = 'Voici les nouveautés du forum depuis les '. $nb_days . ' jours ' . "\r\n \r\n" ;
# Preparation de la connexion
$DBconnect = "mysql:dbname=".$db_name.";host=".$db_host;
# Tentative de connexion pdo
try {
$pdo = new PDO($DBconnect, $db_username, $db_password, array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
# =========================================
# RECUPERATION DES EMAIL ADMIN / WEBMASTER
# Du nom du forum et de l'url
# Sous la variable $mailToAdmin -> tableau
# [2] Admin et [3] Webmaster
# [0] Board Title et [1] Base Url
# =========================================
# La requete avec ses clauses
$sqlClause = 'FROM '.$db_prefix.'config WHERE conf_name LIKE \'o_admin_email\' OR conf_name LIKE \'o_webmaster_email\'' .
' OR conf_name LIKE \'o_board_title\' OR conf_name LIKE \'o_base_url\' ';
# Test de la requete
$sql = 'SELECT COUNT(*)' . $sqlClause ;
if ($res = $pdo->query($sql)) {
# Test du nombre de lignes qui correspond à la requête SELECT COUNT
if ($res->fetchColumn() > 0) {
# Des résultats sont retournés , effectue la requête SELECT et travaille sur les résultats
$sql = 'SELECT * ' . $sqlClause ;
foreach ($pdo->query($sql) as $row) { # Affichage des résultats
$globalData[] .= $row['conf_value'];
} # fin du foreach
} else { # Aucun résultat
echo 'Problème de configuration dans la structure du forum';
} # Fin du If Test resultat
}
# ===================================
# RECUPERATION DES NOUVEAUX SUJETS
# ===================================
# La requete avec ses clauses
$sqlClause = 'FROM '.$db_prefix.'topics WHERE CAST( FROM_UNIXTIME(last_post ) AS DATE)> DATE_SUB(now(), INTERVAL '.$nb_days.' DAY)'
. ' ORDER BY last_post DESC';
# Test de la requete
$sql = 'SELECT COUNT(*)' . $sqlClause ;
if ($res = $pdo->query($sql)) {
# Test du nombre de lignes qui correspond à la requête SELECT COUNT
if ($res->fetchColumn() > 0) {
# Des résultats sont retournés , effectue la requête SELECT et travaille sur les résultats
$sql = 'SELECT * ' . $sqlClause ;
$nbMsg = 0 ;
foreach ($pdo->query($sql) as $row) { # Affichage des résultats
$nbMsg++ ;
$message .= 'De '. $row['poster'] . "\r\n";
$message .= 'Sujet : '. $row['subject'] . "\r\n";
$message .= 'Posté : ' .date('m/d/Y', $row['posted']). ' --Dernière réponse le : '.date('m/d/Y', $row['last_post']) . "\r\n" ;
$message .= 'Accèder au message : [ ' . $globalData[1] .'/viewtopic.php?pid='.$row['last_post_id'].'#p'.$row['last_post_id'] . ' ]';
$message .= "\r\n". '----------------------------------------------------------------';
$message .= "\r\n \r\n";
} # fin du foreach
$message .= "\r\n". '----------------------------------------------------------------' . "\r\n";
$message .= $globalData[0];
} else { # Aucun résultat
$message .= 'Aucune nouveauté dans le forum à ce jour \r\n \r\n';
$nbMsg = 0 ;
} # Fin du If Test resultat
}
# ===================================
# GESTION DE L'ENVOI DES EMAILS
# ===================================
# Clause de la requete
$sqlClause = ' FROM '.$db_prefix.'users ORDER BY username';
# Test de la requete
$sql = 'SELECT COUNT(*)' . $sqlClause ;
if ($res = $pdo->query($sql)) {
# Test du nombre de lignes qui correspond à la requête SELECT COUNT
if ($res->fetchColumn() > 0) {
# Des résultats sont retournés , effectue la requête SELECT et travaille sur les résultats
$sql = 'SELECT * ' . $sqlClause ;
$nbUsers = 0;
foreach ($pdo->query($sql) as $row) { # Affichage des résultats
$nbUsers++ ;
# ENVOI DE L'EMAIL
$mailTo = $row['username'] . ' <'. $row['email'] .'>' ;
$subject = 'Sujets hebdomadaires ('. $nbMsg . ') du forum PEDAGOGIES ALTERNATIVES du '. $todayDiff . ' au ' .$today ;
$headers = 'From: ' . $globalData[2] . "\r\n" .
'Reply-To: '.$globalData[2] . "\r\n" .
'Content-type: text/plain; charset=UTF-8\r\n'. "\r\n" .
'Content-Transfer-Encoding: 8bit' .
'X-Mailer: PHP/' . phpversion();
# ENVOI DU MAIL
mail($mailTo, $subject, $message, $headers);
# POUR AFFICHAGE
$listMailTo .= $mailTo .' -- ';
} # fin du foreach
} else { # Aucun résultat
echo "Aucun utilisateur enregistré. Pas normal, l'administrateur devrait être au moins présent... Vérifier vos tables...";
} # Fin du If Test resultat
}
# Cloture
$pdo = null;
$res = null ;
# ============================================
# Sortie écran
# ============================================
echo 'GESTION DES MAILS
';
$messageToScreen = preg_replace('%(http[s]?://)(\S+)%', '\1\2', $message);
# Fin du script
$time_end = microtime(true);
$time = $time_end - $time_start;
echo 'Temps d\'execution du script : ' . $time . ' secondes
';
echo 'Liste des destinataires ('.$nbUsers.') : ' . htmlentities($listMailTo) . '
';
echo 'Sujet : ' . $subject . '
' ;
echo 'voici le mail envoyé :
' ;
echo nl2br($messageToScreen).'' ;
# Gestion ERREUR PDO
} catch (PDOException $e) {
print "Erreur De Connexion : " . $e->getMessage() . "
";
die();
} # Fin du try