source: spip-zone/_plugins_/ma-lettre/exec/malettre.php @ 59229

Last change on this file since 59229 was 59229, checked in by erational@…, 9 years ago

empécher l'ajout de spip_admin.css + sécurité

File size: 20.4 KB
Line 
1<?php
2// ---------------------------------------------------------
3//  Ma lettre
4// ---------------------------------------------------------
5if (!defined("_ECRIRE_INC_VERSION")) return;
6
7include(dirname(__FILE__).'/../inc_malettre.php');
8
9include_spip('inc/presentation');
10include_spip('inc/distant');
11include_spip('inc/affichage');
12include_spip('inc/meta');
13include_spip('inc/filtres');
14include_spip('inc/lang');
15
16
17// -------------------------------
18// Main: Ma Lettre
19// -------------------------------
20
21function exec_malettre(){ 
22  global $connect_statut;
23        global $connect_toutes_rubriques;
24 
25  include_spip("inc/charsets"); 
26  include_spip("inc_presentation");
27 
28  // chemin
29  $path = _DIR_IMG;
30  $path_archive = "lettre";
31  $path_archive_full = $path.$path_archive;
32  $path_url = lire_meta("adresse_site");
33  $path_url_archive = $path_url."/IMG";
34
35  $p=explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(__file__))));
36  define('_DIR_PLUGIN_MALETTRE',(_DIR_PLUGINS.end($p)));
37  $path_plugin = dirname(__file__)."/../";
38 
39  // parametre par defaut (editable a la main)
40  $id_article_edito  = 1;  // edito lettre
41  $adresses = array(
42        "Pierre Durand" => "pdurand@domaine.tld",
43        "John Doe" => "jdoe@domaine.tld",
44  ); 
45   
46  $expediteurs = array(
47         "Liste A" => "liste-a@domaine.tld",
48         "Liste B" => "liste-a@domaine.tld",
49  );   
50
51  // si cfg dispo, on charge les valeurs
52  if (function_exists(lire_config))  {
53      if (lire_config('malettre')!="") {   // CFG installe et configurer sur Ma-lettre
54        $id_article_edito = lire_config('malettre/id_article_edito');
55       
56        //choix listes
57        $lister_articles=lire_config('malettre/lister_articles');
58        $lister_evenements=lire_config('malettre/lister_evenements');
59        $expediteurs = array();
60        for ($i=1;$i<4;$i++) {
61          if (trim(lire_config("malettre/expediteur_email$i"))!="")
62                $expediteurs[lire_config("malettre/expediteur_nom$i")] = lire_config("malettre/expediteur_email$i");
63        }
64        $adresses = array();
65        for ($i=1;$i<8;$i++) {
66          if (trim(lire_config("malettre/adresse_email$i"))!="")
67                $adresses[lire_config("malettre/adresse_nom$i")] = lire_config("malettre/adresse_email$i");
68        }
69      } else {    // si CFG est installe mais pas configurer sur Ma-lettre
70         $lister_articles="on";
71      }       
72  } else $lister_articles="on";
73   
74 
75
76  // main ------------------------------------------------------ 
77        $commencer_page = charger_fonction('commencer_page', 'inc');
78  echo $commencer_page(_T('malettre:ma_lettre'),_T('malettre:ma_lettre'),_T('malettre:ma_lettre'));       
79 
80        if ($connect_statut == "0minirezo" && $connect_toutes_rubriques) {        // admin restreint (connect_toutes_rubriques si admin)
81                $page = "malettre";     
82
83    echo debut_gauche('', true);   
84    debut_boite_info(true);
85    echo "<p>"._T('malettre:info')."</p>";
86    echo "<p><a href='?exec=malettre'>"._T('malettre:ecrire_nouvelle')."</a></p>";
87    echo "<p><a href='?exec=malettre&amp;agir=letter_compose&amp;option=load'>"._T('malettre:charger_derniere')."</a></p>";
88    echo "<p><a href='?exec=malettre_archive'>"._T('malettre:archives_gerer')."</a></p>";
89    if (function_exists(lire_config)) echo "<p><a href='?exec=cfg&cfg=malettre'>"._T('malettre:config')."</a></p>"; 
90    fin_boite_info(true);
91   
92    echo debut_droite('', true);
93 
94                $agir = _request('agir');
95                if ($agir == "letter_compose") {      // compose la lettre
96                        $errorFlag = false;             
97     
98                                                $option = _request('option');
99                                                if ($option=="load") {         // on charge la derniere lettre
100                                               
101                                                    // recup contenu HTML
102                $texte = $path_archive_full."/.malettre.html";
103                $fr=fopen($texte,"r");
104                while(!feof($fr)){
105                      $sourceHTML  = '';
106                      while(!feof($fr)) 
107                              $sourceHTML  .= fgets($fr,1024);
108                }
109                fclose($fr);
110               
111                // recup contenu TXT
112                $texte = $path_archive_full."/.malettre_txt.html";
113                $fr=fopen($texte,"r");
114                while(!feof($fr)){
115                      $sourceTXT  = '';
116                      while(!feof($fr))
117                            $sourceTXT .= fgets($fr,1024);
118                }
119                fclose($fr);
120           
121            } else {                       // on cree la lettre avec la requete web
122           
123                        include_spip('public/assembler');
124                include_spip('inc/charsets');
125           
126                                                $lettre_title = trim(strip_tags(_request('lettre_title'))); 
127                $lettre_title = str_replace("\"","'", $lettre_title);
128               
129                $lang = _request('lang_select');
130                if ($lang=="") 
131                          $lang = $GLOBALS['meta']['langue_site'];
132               
133                           
134                                        // VERSION HTML & TXT
135                                        $sourceHTML = "";
136                                        $sourceTXT  = "";
137                                        $selection = ""; // stocke les id des articles retenus separee par une virgule
138               
139                                                   
140                // radio button
141                $add = _request('add');
142                if (is_array($add))   
143                    $selection = implode(",", $add);
144                                                       
145                // csv articles                                         
146                                        $art_csv = _request('art_csv'); 
147                                        $csv = explode(",", $art_csv);
148                                        if (is_array($csv)) {                                                     
149                                                        foreach ($csv as $value2) {                                                             
150                                                        $selection .= ",".trim($value2);
151                                                        }
152                                        }
153                // radio button
154                $addeve = _request('addeve');
155                if (is_array($addeve))   
156                    $selection_eve = implode(",", $addeve);
157           
158                // csv evenements                                               
159                                        $eve_csv = _request('eve_csv'); 
160                                        $csv_eve = explode(",", $eve_csv);
161                                        if (is_array($csv_eve)) {                                                         
162                                                        foreach ($csv_eve as $value2) {                                                         
163                                                        $selection_eve .= ",".trim($value2);
164                                                        }
165                                        }       
166               
167                // calcul du patron     
168                $flag_preserver = true; // empecher ajout feuille spip_admin.css                       
169                                                $sourceHTML .= malettre_get_contents("malettre",$id_article_edito,$selection,$selection_eve,$lang);                 
170                                                $sourceTXT  .= malettre_get_contents("malettre_txt",$id_article_edito,$selection,$selection_eve,$lang); 
171                                                       
172                                        // ecriture fichier                                                                                             
173                                                if ($handle = fopen($path_archive_full."/.malettre.html", w)) {                                                     
174                                                        fwrite($handle, $sourceHTML);                                   
175                                                        fclose($handle); 
176                   
177                    if ($handle = fopen($path_archive_full."/.malettre_txt.html", w)) {                         
178                                                                fwrite($handle, $sourceTXT);                                   
179                                                                fclose($handle);
180                                                  } else {
181                      $errorFlag = true;
182                      echo _T('malettre:erreur_ecriture')."($path.$path_archive)";
183                    }                                                                           
184                } else {
185                    $errorFlag = true;
186                    echo _T('malettre:erreur_ecriture')."($path.$path_archive)";                   
187                                                }                                                       
188                                       
189
190                                               
191                                }  // fin examen requete               
192                               
193                                                       
194                                          // affichage ?
195                                          if (!$errorFlag) {
196                                                  $str = "<form method='post' action='?exec=malettre'><fieldset>\n"; 
197              $str .= "<input type='hidden' name='lang_select' value='$lang' />"; 
198                                                  $str .= "<input type='hidden' name='agir' value='letter_send' />\n";
199              $str .= "<h4>"._T('malettre:expediteur')."</h4>\n";
200              $str .= "<select name='expediteur'>\n";
201                                                        foreach ($expediteurs as $expediteur=>$val){
202                  $str .= "<option value=\"$expediteur\" />".htmlentities($expediteur)." &lt;".htmlentities($val)."&gt;</option>";
203              }
204              $str .= "</select>\n";   
205              $str .= "<br />"._T('malettre:autre')." <input type='text' name='expediteur_more' />("._T('malettre:email_seulement').")\n" ; 
206               
207              // destinataires               
208                $str .= "<h4>"._T('malettre:destinataires')."</h4>\n";
209                // connection plugin abonnes s'il existe
210              if (isset($GLOBALS['meta']['mesabonnes_base_version'])) {
211                  $inscrits =  sql_countsel("spip_mesabonnes");
212                  $str .= "<input type='checkbox' value='oui' name='mes_abonnes' /><strong>"._T('malettre:mes_abonnes',array('inscrits'=>"$inscrits"))."</strong><br />";
213              }
214                                                        foreach ($adresses as $adresse=>$val){
215                  $str .= "<input type='checkbox' value=\"$val\"' name='desti[]' />$adresse &lt;$val&gt;<br />";
216              }             
217              $str .= _T('malettre:autre')." <input type='text' name='desti_more' /> ("._T('malettre:email_seulement').")<br /><br />\n";
218             
219              // fin formulaire
220              $str .= "<input type='submit' name='sub' value='Envoyer la lettre' /> \n";
221              $str .= "<input type='button' name='sub' value='Ecrire une nouvelle lettre' onclick=\"javascript:document.location.href='?exec=malettre'\"  /> ";
222             
223                                                        $str .= "<h4>"._T('malettre:apercu')."</h4>\n";
224                                                        $str .= "Sujet: <input type='text' size='55' name='lettre_title' value=\"".$lettre_title."\" /><br />\n";
225              $str .= "<iframe width=\"750\" height=\"500\" src=\"$path_archive_full/.malettre.html?nocache=".time()."\"></iframe>\n";
226                                                        $str .= "<h4>"._T('malettre:version_html')."</h4>\n";
227                                                        $str .= "<textarea cols='70' rows='20'>$sourceHTML</textarea>";
228                                                        $str .= "<h4>"._T('malettre:version_txt')."</h4>\n";
229                                                        $str .= "<textarea cols='70' rows='20'>$sourceTXT</textarea>";
230                                                        $str .= "</fieldset></form>\n";
231                                                       
232                                                        echo $str;
233                                                }                                       
234                                               
235   } else if ($agir=='letter_send') {
236                        //
237                  // envoi de la lettre
238                  //
239                                                if (!defined('_DIR_PLUGIN_FACTEUR')){
240                    include(dirname(__FILE__)."/../class.phpmailer.php");
241                                                }
242                       
243                        // titre
244                        $lettre_title = trim(strip_tags(_request('lettre_title')));
245            $lettre_title = str_replace("\"","'", $lettre_title); 
246            if ($lettre_title == "") {  // à supprimer ou integrer ou multilingue ?
247              $months=array(1=>'Janvier', 2=>'Fevrier', 3=>'Mars', 4=>'Avril', 5=>'Mai', 6=>'Juin', 7=>'Juillet', 8=>'Aout', 9=>'Septembre', 10=>'Octobre', 11=>'Novembre', 12=>'Decembre');
248              $today = getdate(mktime()-(24*3600));
249              $sujet = "Les nouveautes de ".$months[$today[mon]]." ".date("Y");
250            } else {
251              $sujet = $lettre_title;
252            }
253           
254            // hash           
255            $lettre_hash = substr(md5(time()),0,5);
256            $url_lettre_archive = "$path_url_archive/$path_archive/lettre_".date("Ymd")."_".$lettre_hash."_"._request('lang_select').".html";
257            $url_lettre_archive_txt = "$path_url_archive/$path_archive/lettre_".date("Ymd")."_".$lettre_hash."_"._request('lang_select').".txt";
258           
259            // recup contenu HTML
260            $texte = $path_archive_full."/.malettre.html";
261            $fr=fopen($texte,"r");
262            while(!feof($fr)){
263                  $recup = '';
264                  while(!feof($fr)) 
265                          $recup .= fgets($fr,1024);
266            }
267            fclose($fr);
268            $recup = str_replace("{URL_MALETTRE}",$url_lettre_archive,$recup);
269            $recup = str_replace("{TITRE_MALETTRE}",$sujet,$recup);
270           
271            // recup contenu TXT
272            $texte = $path_archive_full."/.malettre_txt.html";
273            $fr=fopen($texte,"r");
274            while(!feof($fr)){
275                  $recup_txt = '';
276                  while(!feof($fr))
277                        $recup_txt .= fgets($fr,1024);
278            }
279            fclose($fr);
280            $recup_txt = str_replace("{URL_MALETTRE}",$url_lettre_archive,$recup_txt);
281           
282            // recup  expediteur
283            $exp_email = _request('expediteur_more');
284            if ($exp_email=="") {
285                $expediteur = _request('expediteur');               
286                if (isset($expediteurs[$expediteur])) {
287                   $exp_name = $expediteur;
288                   $exp_email = $expediteurs[$expediteur];
289                }  else  die("expediteur inconnu");
290            } else {
291              $exp_name = $exp_mail;
292            } 
293                 
294            // recup destinataire
295            $desti = _request('desti');
296            $desti_more = _request('desti_more');
297            if ($desti_more!="") $desti[] = $desti_more;
298           
299            if (_request('mes_abonnes')=='oui') {
300                if ($resultats = sql_select('email', 'spip_mesabonnes')) {
301                        while ($res = sql_fetch($resultats))
302                                            $desti[] = $res['email'];                   
303                }
304            }
305           
306           
307            echo "<h3>"._T('malettre:envoi')." <i style='color:#999;'>$sujet</i></h3>\n";
308            echo "<div style='border:1px solid;background:#eee;margin:10px 0;padding:10px;font-family:arial,sans-serif;font-size:0.9em;'>";
309           
310            // envoi lettre
311            // a ameliorer grandement flood
312            // utiliser une methode ajax pour temporiser l'envoi par flot
313            // ou tout simple deleger a facteur ?
314            $i = 0;
315            $j = 0;         
316            if (is_array($desti)) {
317              foreach ($desti as $k=>$adresse) { // envoi a tous les destinataires
318                      if (!defined('_DIR_PLUGIN_FACTEUR')){
319                              $mail = new PHPMailer();
320
321                        $mail->From     = "$exp_email";
322                        $mail->FromName = "$exp_name";
323                        $mail->AddReplyTo("$exp_email");
324                        $mail->AddAddress($adresse,$adresse);
325                        $i++;
326
327                        $mail->WordWrap = 50;           // set word wrap
328                        $mail->IsHTML(true);            // send as HTML
329                        $mail->CharSet = "utf-8";
330
331                        $mail->Subject  =  "$lettre_title";
332                        $mail->Body     =  $recup;
333                        $mail->AltBody  =  $recup_txt;
334                              $res = $mail->Send();
335                      }
336                      else {
337                              $envoyer_mail = charger_fonction('envoyer_mail','inc');
338                              $corps = array(
339                                      "html" => $recup,
340                                      "texte" => $recup_txt,
341                                      "nom_envoyeur" => $exp_name,
342                                      "from" => $exp_email,
343                                      "renvoyer_a" => $exp_email
344                              );
345                              $envoyer_mail($adresse,$lettre_title,$corps);
346                      }
347
348                if(!$res) {
349                    $msg = "<div style='color:red'><strong>$adresse</strong> - "._T('malettre:erreur_envoi')."</div>"; 
350                    //$msg .="Mailer Error: " . $mail->ErrorInfo;
351                    $success_flag = false;
352                    $j++;
353                } else { 
354                    $msg = "<div style='color:green'><strong>$adresse</strong> - <span style='color:green'>"._T('malettre:succes_envoi')."</span></div>";         
355                }
356                echo $msg;
357              }
358            } else {
359              echo "<div style='color:red'>"._T('malettre:erreur_no_dest')."</div>";
360            }
361            echo "</div>";
362           
363            echo "<div> $i / $j </div>";
364           
365            // archivage de la lettre en dur
366            echo "<div style=\"margin:15px 0;\">"._T('malettre:archives_placer');
367           
368            $lettre_archive = "$path_archive_full/lettre_".date("Ymd")."_".$lettre_hash."_"._request('lang_select').".html";
369            $f_archive=fopen($lettre_archive,"w");
370            fwrite($f_archive,$recup); 
371            fclose($f_archive);
372            echo " <a href='$url_lettre_archive' target='_blank'>html</a> - ";
373           
374            $lettre_archive = "$path_archive_full/lettre_".date("Ymd")."_".$lettre_hash."_"._request('lang_select').".txt";
375            $f_archive=fopen($lettre_archive,"w");
376            fwrite($f_archive,$recup_txt); 
377            fclose($f_archive);
378            echo "<a href='$url_lettre_archive_txt' target='_blank'>txt</a></div>";
379                               
380                       
381            echo "<p><a href='?exec=malettre'>"._T('malettre:ecrire_nouvelle2')."</a></p>\n";
382           
383    } else {    //
384                    // pas d'agir: affichage des articles pour composition de la lettre
385                    //
386                   
387                    // verif si repertoire stockage dispo
388                    if (!is_dir($path_archive_full)) {                                     
389                   if (!mkdir ($path_archive_full, 0777)) // on essaie de le creer 
390                        echo "<div style='color:red;padding:5px;border:1px solid red;>"._T('malettre:erreur_ecrire_stockage')."($path_archive_full)</div>"; 
391              }
392                           
393              $lang_select = _request('lang_select');
394              if ($lang_select!="") $cond_lang_sql = "AND lang='$lang_select'";
395                              else  $cond_lang_sql = "";
396             
397              if($lister_articles=="on"){
398                      #on peut affiner le contexte au besoin
399                      $contexte = array(
400                                        'lang'=> $cond_lang_sql,
401                                        );
402                $malettre_articles=recuperer_fond("prive/listes/inc-lister-articlesmalettre",$contexte, array('ajax'=>true));   
403
404              }
405             
406              if($lister_evenements=="on"){
407                 #on peut affiner le contexte au besoin
408                      $contexte = array(
409                                        'lang'=> $cond_lang_sql,
410                                        );
411                $malettre_evenements=recuperer_fond("prive/listes/inc-lister-evenementsmalettre",$contexte, array('ajax'=>true));       
412     
413              }; 
414             
415                                     
416                                                                               
417              echo "<form method='post' agir='?exec=malettre'>"; 
418              echo "<input type='hidden' name='agir' value='letter_compose' />";
419              echo "<input type='hidden' name='lang_select' value='$lang_select' />";
420              echo "<fieldset>\n";             
421             
422              if($GLOBALS['meta']['multi_rubriques']=="oui" || $GLOBALS['meta']['multi_articles']=="oui")
423                                      $active_langs = explode(",",$GLOBALS['meta']['langues_multilingue']);
424                          else  $active_langs = "";
425                               
426                                 if (is_array($active_langs)) {
427                                       echo _T('malettre:choix_lang');
428                     foreach($active_langs as $k=>$active_lang) {
429                        if ($lang_select==$active_lang) echo "<strong>[$active_lang]</strong> "; 
430                                         else echo "<a href='?exec=malettre&amp;lang_select=$active_lang'>[$active_lang]</a> ";
431                       
432                     }
433                     if ($lang_select=="") echo "<strong>["._T('malettre:lang_toute')."]</strong> ";             
434                                     else  echo "<a href='?exec=malettre'>["._T('malettre:lang_toute')."]</a>";
435               }
436                               
437               
438                                                               
439                                                                echo "<br /><br />"._T('malettre:compose_sujet')." :<i>("._T('malettre:compose_non_spip').")</i><br />\n";
440                                                                echo "<input type='text' size='55' name='lettre_title' /><br />\n";
441                                                                echo "<br />"._T('malettre:compose_contenu')." - <a href='?exec=articles&amp;id_article=$id_article_edito'>"._T('malettre:compose_edito')."</a><br />\n";                                                               
442                                                                echo "<iframe width='600' height='500' src='$path_url/spip.php?page=malettre_edito&amp;id_article=$id_article_edito'></iframe>\n";
443                                                                echo $stro;                                                             
444                                                       
445                        //afficher la liste des articles
446                        echo $malettre_articles;
447                        //afficher la liste des evenements
448                        echo $malettre_evenements;
449 
450 
451                echo"<input type='submit' value='"._T('malettre:compose_submit')."' />\n";
452                                                                echo "</fieldset>\n";
453                                                                echo "</form>\n\n";
454
455                }
456                //--   
457
458               
459        }       else { 
460                echo "<strong>Vous n'avez pas acc&egrave;s &agrave; cette page.</strong>"; 
461        }
462       
463        echo fin_page();
464}
465
466?>
Note: See TracBrowser for help on using the repository browser.