PageRenderTime 55ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/spip-listes_1_9_2/inc/spiplistes_meleuse.php

https://github.com/genova/boyjump
PHP | 331 lines | 215 code | 53 blank | 63 comment | 39 complexity | ecd9d36e96aa2b4ed6e8b2554ee8c79b MD5 | raw file
  1. <?php
  2. /******************************************************************************************/
  3. /* SPIP-Listes est un systeme de gestion de listes d'abonnes et d'envoi d'information */
  4. /* par email pour SPIP. http://bloog.net/spip-listes */
  5. /* Copyright (C) 2004 Vincent CARON v.caron<at>laposte.net */
  6. /* */
  7. /* Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes */
  8. /* de la Licence Publique Generale GNU publiee par la Free Software Foundation */
  9. /* (version 2). */
  10. /* */
  11. /* Ce programme est distribue car potentiellement utile, mais SANS AUCUNE GARANTIE, */
  12. /* ni explicite ni implicite, y compris les garanties de commercialisation ou */
  13. /* d'adaptation dans un but specifique. Reportez-vous à la Licence Publique Generale GNU */
  14. /* pour plus de détails. */
  15. /* */
  16. /* Vous devez avoir reçu une copie de la Licence Publique Generale GNU */
  17. /* en meme temps que ce programme ; si ce n'est pas le cas, ecrivez a la */
  18. /* Free Software Foundation, */
  19. /* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, Etats-Unis. */
  20. /******************************************************************************************/
  21. include_spip('inc/meta');
  22. include_spip('inc/texte');
  23. include_spip('inc/filtres');
  24. include_spip('inc/acces');
  25. include_spip('spiplistes_boutons');
  26. include_once(_DIR_PLUGIN_SPIPLISTES.'inc/spiplistes_mail.inc.php');
  27. // Trouver un message a envoyer
  28. $result_pile = spip_query("SELECT * FROM spip_courriers AS messages WHERE statut='encour' ORDER BY date ASC LIMIT 0,1");
  29. $message_pile = spip_num_rows($result_pile);
  30. if ($message_pile > 0){
  31. // Message
  32. $row = spip_fetch_array($result_pile);
  33. $titre = typo($row["titre"]);
  34. $texte = $row["texte"];
  35. $texte = stripslashes($texte);
  36. $message_texte = $row["message_texte"];
  37. $type = $row["type"];
  38. $id_courrier = $row["id_courrier"];
  39. $id_liste = $row["id_liste"];
  40. $email_test = $row["email_test"];
  41. $nb_emails_envoyes = 0;
  42. $total_abonnes = $row["total_abonnes"];
  43. $nb_emails_echec = 0;
  44. $nb_emails_non_envoyes = 0;
  45. $nb_emails['texte'] = 0;
  46. $nb_emails['html'] = 0;
  47. $debut_envoi = $row["date_debut_envoi"];
  48. $pied_page = "" ;
  49. $pied_page = pied_de_page_liste($id_liste) ;
  50. // on prepare l'email
  51. $nomsite = $GLOBALS['meta']['nom_site'];
  52. $urlsite = $GLOBALS['meta']['adresse_site'];
  53. $pied_page_texte="\n\n________________________________________________________________________" ;
  54. $pied_page_texte.="\n\n"._T('spiplistes:editeur').$nomsite."\n" ;
  55. $pied_page_texte.=$urlsite."\n";
  56. $pied_page_texte.="________________________________________________________________________" ;
  57. $lang = spiplistes_langue_liste($id_liste);
  58. if($lang != '') $GLOBALS['spip_lang'] = $lang ;
  59. // Determiner le destinataire ou la liste destinataire
  60. //est-ce un mail de test ?
  61. if( email_valide($email_test) ){
  62. spiplistes_log( _T('spiplistes:email_test')." : ".$destinataires);
  63. $test = 'oui';
  64. $mail_collectif = 'non' ;
  65. }
  66. else {
  67. //est-ce un mail collectif ? // a degager : on devrait toujours avoir une liste
  68. if($id_liste == 0){
  69. $mail_collectif = 'oui' ;
  70. spiplistes_log(_T('spiplistes:envoi_tous')) ;
  71. }
  72. else {
  73. //c'est un mail pour une liste alors ?
  74. $mail_collectif = 'non' ;
  75. $result_d = spip_query("SELECT * FROM spip_listes WHERE id_liste="._q($id_liste));
  76. if($ro = spip_fetch_array($result_d)){
  77. $titre_liste = $ro["titre"];
  78. $id = $ro["id_liste"];
  79. $email_liste = $ro["email_envoi"];
  80. spiplistes_log(_T('spiplistes:envoi_listes').$titre_liste);
  81. }
  82. else{ //erreur
  83. spiplistes_log(_T('spiplistes:envoi_erreur'));
  84. }
  85. }
  86. }
  87. // email emmeteur
  88. $email_webmaster = (email_valide($GLOBALS['meta']['email_defaut'])) ? $GLOBALS['meta']['email_defaut'] : $GLOBALS['meta']['email_webmaster'];
  89. $from = email_valide($email_liste) ? $email_liste : $email_webmaster;
  90. $is_from_valide = email_valide($from);
  91. $objet= filtrer_entites($titre);
  92. if ($GLOBALS['meta']['spiplistes_charset_envoi']!=$GLOBALS['meta']['charset']){
  93. include_spip('inc/charsets');
  94. $pied_page = unicode2charset(charset2unicode($pied_page),$GLOBALS['meta']['spiplistes_charset_envoi']);
  95. $pied_page_texte = unicode2charset(charset2unicode($pied_page_texte),$GLOBALS['meta']['spiplistes_charset_envoi']);
  96. $from = unicode2charset(charset2unicode($from),$GLOBALS['meta']['spiplistes_charset_envoi']);
  97. $objet = unicode2charset(charset2unicode($objet),$GLOBALS['meta']['spiplistes_charset_envoi']);
  98. }
  99. // on prepare le debut de la version html
  100. $pageh = "<html>\n\n<body>\n\n".$texte."\n\n";
  101. // la fin de la version html sera generee pour chaque destinataire
  102. // on prepare la version texte
  103. if($message_texte !='')
  104. $page_ = $message_texte ;
  105. else
  106. $page_ = spiplistes_version_texte($texte);
  107. if ($GLOBALS['meta']['spiplistes_charset_envoi']!=$GLOBALS['meta']['charset']){
  108. include_spip('inc/charsets');
  109. $pageh = unicode2charset(charset2unicode($pageh),$GLOBALS['meta']['spiplistes_charset_envoi']);
  110. $page_ = unicode2charset(charset2unicode($page_),$GLOBALS['meta']['spiplistes_charset_envoi']);
  111. }
  112. $page_.= $pied_page_texte;
  113. $remplacements = array("&#8216;"=>"'","&#8217;"=>"'","&#8220;"=>'"',"&#8221;"=>'"');
  114. if ($GLOBALS['meta']['spiplistes_charset_envoi'] <> 'utf-8') {
  115. $objet = strtr($objet, $remplacements);
  116. $page_ = strtr($page_, $remplacements);
  117. $pied_page = strtr($pied_page, $remplacements);
  118. $pied_page_texte = strtr($pied_page_texte, $remplacements);
  119. $from = strtr($from, $remplacements);
  120. }
  121. $email_a_envoyer['texte'] = new phpMail('', $objet, '',$page_, $GLOBALS['meta']['spiplistes_charset_envoi']);
  122. $email_a_envoyer['texte']->From = $from ;
  123. $email_a_envoyer['texte']->AddCustomHeader("Errors-To: ".$from);
  124. $email_a_envoyer['texte']->AddCustomHeader("Reply-To: ".$from);
  125. $email_a_envoyer['texte']->AddCustomHeader("Return-Path: ".$from);
  126. $email_a_envoyer['texte']->SMTPKeepAlive = true;
  127. $email_a_envoyer['html'] = new phpMail('', $objet, $pageh, $page_, $GLOBALS['meta']['spiplistes_charset_envoi']);
  128. $email_a_envoyer['html']->From = $from ;
  129. $email_a_envoyer['html']->AddCustomHeader("Errors-To: ".$from);
  130. $email_a_envoyer['html']->AddCustomHeader("Reply-To: ".$from);
  131. $email_a_envoyer['html']->AddCustomHeader("Return-Path: ".$from);
  132. $email_a_envoyer['html']->SMTPKeepAlive = true;
  133. spiplistes_log(_T('spiplistes:email_reponse').$from."\n"._T('spiplistes:contacts')." : ".$total_abonnes) ;
  134. if($total_abonnes){
  135. spiplistes_log(_T('spiplistes:message'). $titre);
  136. $limit=$GLOBALS['meta']['spiplistes_lots']; // nombre de messages envoyes par boucles.
  137. //chopper un lot
  138. if($test == 'oui')
  139. $result_inscrits = spip_query("SELECT id_auteur, nom, email FROM spip_auteurs WHERE email ="._q($email_test)." ORDER BY id_auteur ASC");
  140. else{
  141. //$result_inscrits = spip_query("SELECT a.nom, a.id_auteur, a.email, a.extra FROM spip_auteurs AS a, spip_auteurs_courriers AS b WHERE a.id_auteur=b.id_auteur AND b.id_courrier = "._q($id_courrier)." ORDER BY a.id_auteur ASC LIMIT 0,".intval($limit));
  142. // un id pour ce processus
  143. $id_process = substr(creer_uniqid(),0,5);
  144. spip_query("UPDATE spip_auteurs_courriers SET etat="._q($id_process)." WHERE etat='' AND id_courrier = "._q($id_courrier)." LIMIT ".intval($limit));
  145. $result_inscrits = spip_query(
  146. "SELECT a.nom, a.id_auteur, a.email
  147. FROM spip_auteurs AS a, spip_auteurs_courriers AS b
  148. WHERE a.id_auteur=b.id_auteur AND b.id_courrier = "._q($id_courrier)." AND etat="._q($id_process)."
  149. ORDER BY a.id_auteur ASC");
  150. }
  151. $liste_abonnes = spip_num_rows($result_inscrits);
  152. if($liste_abonnes > 0){
  153. // ne sert qu'a laffichage
  154. $debut = $nb_emails_envoyes + $nb_emails_non_envoyes ; // ??
  155. spiplistes_log("envois effectues : ".$debut.", pas : ".$limit.", nb:".$liste_abonnes) ;
  156. # spip_timer();
  157. //envoyer le lot d'email selectionne
  158. while ($row2 = spip_fetch_array($result_inscrits)) {
  159. $str_temp = " ";
  160. $id_auteur = $row2['id_auteur'] ;
  161. //indiquer eventuellement le debut de l'envoi
  162. if($debut_envoi=="0000-00-00 00:00:00" AND $test !='oui') {
  163. spip_query("UPDATE spip_courriers SET date_debut_envoi=NOW() WHERE id_courrier="._q($id_courrier));
  164. $debut_envoi = true; // ne pas faire 20 update au premier lot :)
  165. }
  166. $abo = spip_fetch_array(spip_query("SELECT `spip_listes_format` FROM `spip_auteurs_elargis` WHERE `id_auteur`=$id_auteur")) ;
  167. $format_abo = $abo["spip_listes_format"];
  168. $nom_auteur = $row2["nom"];
  169. $email = $row2["email"];
  170. $str_temp .= $nom_auteur."(".$format_abo.") - $email";
  171. $total=$total+1;
  172. unset ($cookie);
  173. if ( ($format_abo == 'texte')
  174. OR ($format_abo == 'html') ) {
  175. $cookie = creer_uniqid();
  176. spip_query("UPDATE spip_auteurs SET cookie_oubli ="._q($cookie)." WHERE email ="._q($email));
  177. if ($is_from_valide){
  178. $body_html = $pageh.$pied_page."<a href=\"".generer_url_public('abonnement','d='.$cookie)."\">"._T('spiplistes:abonnement_mail')."</a>\n\n</body></html>";
  179. $body_text = $page_ ."\n\n"
  180. . filtrer_entites(_T('spiplistes:abonnement_mail'))."\n"
  181. . filtrer_entites(generer_url_public('abonnement','d='.$cookie))."\n\n" ;
  182. if ($format_abo == 'html') {// email HTML ------------------
  183. // desabo pied de page HTML
  184. $email_a_envoyer[$format_abo]->Body = $body_html;
  185. $email_a_envoyer[$format_abo]->AltBody = $body_text;
  186. } else { // email TXT -----------------------
  187. // desabo pied de page texte
  188. $email_a_envoyer[$format_abo]->Body = $body_text;
  189. }
  190. $email_a_envoyer[$format_abo]->SetAddress($email,$nom_auteur);
  191. if ($email_a_envoyer[$format_abo]->send()) {
  192. spip_query("DELETE FROM spip_auteurs_courriers WHERE id_auteur="._q($id_auteur)." AND id_courrier="._q($id_courrier));
  193. $str_temp .= " [OK]";
  194. $nb_emails_envoyes++;
  195. $nb_emails[$format_abo]++;
  196. }
  197. else {
  198. $str_temp .= _T('spiplistes:erreur_mail');
  199. $nb_emails_echec++;
  200. }
  201. }
  202. else {
  203. $str_temp .= _T('spiplistes:sans_adresse');
  204. $nb_emails_echec++;
  205. }
  206. }
  207. else { // email fin TXT /HTML -----------------------------------------
  208. $nb_emails_non_envoyes++; //desabonnes
  209. spip_query("DELETE FROM spip_auteurs_courriers WHERE id_auteur="._q($id_auteur)." AND id_courrier="._q($id_courrier));
  210. $str_temp .= _L('pas abonne en ce moment');
  211. } /* fin abo*/
  212. spiplistes_log($str_temp);
  213. }/* fin while */
  214. // si c'est un test on repasse en redac
  215. if ($test== 'oui') {
  216. spip_query("UPDATE spip_courriers SET statut='redac', email_test='', total_abonnes=0 WHERE id_courrier="._q($id_courrier));
  217. spiplistes_log('repasse en redac');
  218. }
  219. $email_a_envoyer['texte']->SmtpClose();
  220. $email_a_envoyer['html']->SmtpClose();
  221. }
  222. else { /* fin liste abonnes */
  223. // archiver
  224. spiplistes_log("UPDATE spip_courriers SET statut='publie' WHERE id_courrier="._q($id_courrier));
  225. spip_query("UPDATE spip_courriers SET statut='publie' WHERE id_courrier="._q($id_courrier));
  226. $fin_envoi="oui";
  227. }
  228. }
  229. else {
  230. //aucun destinataire connu pour ce message
  231. spiplistes_log(_T('spiplistes:erreur_sans_destinataire')."---"._T('spiplistes:envoi_annule'));
  232. spip_query("UPDATE spip_courriers SET titre="._q(_T('spiplistes:erreur_destinataire')).", statut='publie' WHERE id_courrier="._q($id_courrier));
  233. }
  234. #echo spip_timer();
  235. // faire le bilan apres l'envoi d'un lot en esperant que les differents processus simultanes se telescopent pas trop
  236. if($test != 'oui'){
  237. $stats = spip_fetch_array(spip_query("SELECT nb_emails_envoyes,nb_emails_non_envoyes,nb_emails_echec,nb_emails_texte,nb_emails_html FROM spip_courriers AS messages WHERE id_courrier = $id_courrier"));
  238. $nb_emails_envoyes = $nb_emails_envoyes + $stats['nb_emails_envoyes'] ;
  239. spip_query("UPDATE spip_courriers SET nb_emails_envoyes="._q($nb_emails_envoyes)." WHERE id_courrier="._q($id_courrier));
  240. if($nb_emails_non_envoyes > 0){
  241. $nb_emails_non_envoyes = $nb_emails_non_envoyes + $stats['nb_emails_non_envoyes'] ;
  242. spip_query("UPDATE spip_courriers SET nb_emails_non_envoyes="._q($nb_emails_non_envoyes)." WHERE id_courrier="._q($id_courrier));
  243. }
  244. if($nb_emails_echec > 0){
  245. $nb_emails_echec = $nb_emails_echec + $stats['nb_emails_echec'] ;
  246. spip_query("UPDATE spip_courriers SET nb_emails_echec="._q($nb_emails_echec)." WHERE id_courrier="._q($id_courrier));
  247. }
  248. $nb_emails['texte'] = $nb_emails['texte'] + $stats['nb_emails_texte'] ;
  249. $nb_emails['html'] = $nb_emails['html'] + $stats['nb_emails_html'] ;
  250. spip_query("UPDATE spip_courriers SET nb_emails_texte="._q($nb_emails['texte'])." WHERE id_courrier="._q($id_courrier));
  251. spip_query("UPDATE spip_courriers SET nb_emails_html="._q($nb_emails['html'])." WHERE id_courrier="._q($id_courrier));
  252. if($fin_envoi=="oui")
  253. spip_query("UPDATE spip_courriers SET date_fin_envoi=NOW() WHERE id_courrier="._q($id_courrier));
  254. }
  255. }
  256. else {
  257. spiplistes_log(_T('spiplistes:envoi_fini')) ;
  258. } /* flag pile*/
  259. /******************************************************************************************/
  260. /* SPIP-Listes est un systeme de gestion de listes d'abonnes et d'envoi d'information */
  261. /* par email pour SPIP. http://bloog.net/spip-listes */
  262. /* Copyright (C) 2004 Vincent CARON v.caron<at>laposte.net */
  263. /* */
  264. /* Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes */
  265. /* de la Licence Publique Generale GNU publiee par la Free Software Foundation */
  266. /* (version 2). */
  267. /* */
  268. /* Ce programme est distribue car potentiellement utile, mais SANS AUCUNE GARANTIE, */
  269. /* ni explicite ni implicite, y compris les garanties de commercialisation ou */
  270. /* d'adaptation dans un but specifique. Reportez-vous à la Licence Publique Generale GNU */
  271. /* pour plus de détails. */
  272. /* */
  273. /* Vous devez avoir reçu une copie de la Licence Publique Generale GNU */
  274. /* en meme temps que ce programme ; si ce n'est pas le cas, ecrivez a la */
  275. /* Free Software Foundation, */
  276. /* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, Etats-Unis. */
  277. /******************************************************************************************/
  278. ?>