source: trunk/spip/esqueleto-redcta/plugins/spip-listes_1_9_2/inc/spiplistes_meleuse.php @ 90

Last change on this file since 90 was 90, checked in by guille, 15 years ago

importacion de spip-listes-1_9_2

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