FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Vous n'êtes pas identifié(e).

#1 06-02-2016 18:35:48

crustyourmind
Membre
Inscription : 06-01-2016
Messages : 17

[Astuce] Mod Email Digest [MAJ] Proposition de script

Hello,
je cherche une mod qui correspond à ces critères
http://fluxbb.org/resources/mods/email-digests/

Marrant il me semble que c'est pour punBB mais ils disent que cela fonctionne pour fluxBB 1.5.7 , je me dis que je vais tenter pour la 1.5.9.
Je copie tous les fichiers, modifie le install_mod.php en virant la clause qui vérifie la version du forum.

Bon ça commence alors, 1ere erreur, mysql n'utilise plus TYPE mais ENGINE, je modifie le fichier de création de tables.

ça passe les tables sont créées.

Je suis les indications, commence à modifier le include/function.php mais impossible de trouver

 return $_SERVER['REMOTE_ADDR'];

Bon là j'en conclus que ce n'est vraiment pas pour la version 1.5.9 ....

Avez vous des retours sur son éventuelle compatibilité / adaptation ?
Si non compatible, connaîtriez vous une mod qui remplisse la même attente

D'avance merci !

Dernière modification par crustyourmind (10-02-2016 14:57:21)

Hors ligne

#2 10-02-2016 14:59:38

crustyourmind
Membre
Inscription : 06-01-2016
Messages : 17

Re : [Astuce] Mod Email Digest [MAJ] Proposition de script

Donc voila, ai fait un petit script pour effectuer cette demande.
Si ça vous intéresse d'y jeter un oeil.
Enregistrer le script à la base de l'installation du forum (/)
et appeler le via un cron pour automatiser la tâche.

Ce serait cool si quelqu'un pouvait jeter un oeil au code et dire ce qu'il en pense (je suis un peu rouillé avec le PHP ! )


<?php
#
# cyrille <cyrille@cbiot.fr>
# http://cbiot.fr/pedagogies-alternatives
# 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']). ' --Deniè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 = 'Dernières nouveautés ('. $nbMsg . ') du forum ' . $globalData[0] . ' 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 '<h1>GESTION DES MAILS</h1>';
	
	$messageToScreen = preg_replace('%(http[s]?://)(\S+)%', '<a href="\1\2" target="_blank">\1\2</a>', $message);

	# Fin du script
	$time_end = microtime(true);
	$time = $time_end - $time_start;

	echo 'Temps d\'execution du script : ' .  $time . ' secondes <br><br>';	
	echo '<b>Liste des destinataires ('.$nbUsers.') : </b>' . htmlentities($listMailTo) .  '  <br><br>';
	echo '<b>Sujet : </b>' . $subject .  '  <br><br>' ;
	echo '<b>voici le mail envoyé : </b><br><br>' ;
	echo nl2br($messageToScreen).'' ;
	

# Gestion ERREUR PDO
  } catch (PDOException $e) {
  print "Erreur De Connexion : " . $e->getMessage() . "<br/>";
  die();
  } # Fin du try
?>

Hors ligne

#3 10-02-2016 15:01:18

crustyourmind
Membre
Inscription : 06-01-2016
Messages : 17

Re : [Astuce] Mod Email Digest [MAJ] Proposition de script

Si développeurs intéressés
TODO :

- une page d'administration (créer une table pour laisser le choix ou non au DIGEST)
- LANG -> faire un fichier de lang (include/lang) pour la portbilité
- Je ne connaissais pas le variables globales de fluxBB au départ, j'ai donc sorti les miennes (4) qui sont stockées dans un tableau. Je pense qu'on pourrait utiliser les variables PUN
- Retour écran du script. Très light. Mais n'oublions pas qu'il doit être positionné sur un CRON donc pas sûr que ça intéresse beaucoup de gens
- Gestion des erreurs de la fonction mail
- 1 mail par utilisateur. On doit pouvoir optimiser cela via le header:Bcc.. Vu mon nombre d'user, ça ne me gène pas, mais bon sur un gros forum

Hors ligne

#4 10-02-2016 18:56:17

crustyourmind
Membre
Inscription : 06-01-2016
Messages : 17

Re : [Astuce] Mod Email Digest [MAJ] Proposition de script

Le source avec les couleurs, c'est quand même plus lisible
http://cbiot.fr/pedagogies-alternatives … _color.php

Hors ligne

Pied de page des forums