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

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

correction lien edition edito

File size: 19.0 KB
Line 
1<?php
2// ---------------------------------------------------------
3//  Ma lettre
4// ---------------------------------------------------------
5
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// Main: Ma Lettre
18// -------------------------------
19
20function exec_malettre(){ 
21  global $connect_statut;
22        global $connect_toutes_rubriques;
23 
24  include_spip("inc/charsets"); 
25  include_spip("inc_presentation");
26 
27  // chemin
28  $path = _DIR_RACINE; 
29  $path_archive = "IMG/lettre";
30  $path_archive_full = $path.$path_archive;
31  $path_url = lire_meta("adresse_site");
32
33
34  $p=explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(__file__))));
35  define('_DIR_PLUGIN_MALETTRE',(_DIR_PLUGINS.end($p)));
36  $path_plugin = dirname(__file__)."/../";
37 
38  // parametre par defaut (editable a la main)
39  $id_article_edito  = 1;  // edito lettre
40  $adresses = array(
41        "Pierre Durand" => "pdurand@domaine.tld",
42        "John Doe" => "jdoe@domaine.tld",
43  ); 
44   
45  $expediteurs = array(
46         "Liste A" => "liste-a@domaine.tld",
47         "Liste B" => "liste-a@domaine.tld",
48  );   
49
50  // si cfg dispo, on charge les valeurs
51  if (function_exists(lire_config))  {
52      $id_article_edito = lire_config('malettre/id_article_edito');
53      $expediteurs = array();
54      for ($i=1;$i<4;$i++) {
55        if (trim(lire_config("malettre/expediteur_email$i"))!="")
56              $expediteurs[lire_config("malettre/expediteur_nom$i")] = lire_config("malettre/expediteur_email$i");
57      }
58      $adresses = array();
59      for ($i=1;$i<8;$i++) {
60        if (trim(lire_config("malettre/adresse_email$i"))!="")
61              $adresses[lire_config("malettre/adresse_nom$i")] = lire_config("malettre/adresse_email$i");
62      }
63  } 
64   
65 
66
67  // main ------------------------------------------------------ 
68        $commencer_page = charger_fonction('commencer_page', 'inc');
69  echo $commencer_page(_T('malettre:ma_lettre'),_T('malettre:ma_lettre'),_T('malettre:ma_lettre'));       
70 
71        if ($connect_statut == "0minirezo" && $connect_toutes_rubriques) {        // admin restreint (connect_toutes_rubriques si admin)
72                $page = "malettre";     
73
74    echo debut_gauche('', true);   
75    debut_boite_info(true);
76    echo "<p>"._T('malettre:info')."</p>";
77    echo "<p><a href='?exec=malettre'>"._T('malettre:ecrire_nouvelle')."</a></p>";
78    echo "<p><a href='?exec=malettre&amp;agir=letter_compose&amp;option=load'>"._T('malettre:charger_derniere')."</a></p>";
79    echo "<p><a href='?exec=malettre_archive'>"._T('malettre:archives_gerer')."</a></p>";
80    if (function_exists(lire_config)) echo "<p><a href='?exec=cfg&cfg=malettre'>"._T('malettre:config')."</a></p>"; 
81    fin_boite_info(true);
82   
83    echo debut_droite('', true);
84 
85                $agir = _request('agir');
86                if ($agir == "letter_compose") {      // compose la lettre
87                        $errorFlag = false;             
88     
89                                                $option = _request('option');
90                                                if ($option=="load") {         // on charge la derniere lettre
91                                               
92                                                    // recup contenu HTML
93                $texte = $path_archive_full."/.malettre.html";
94                $fr=fopen($texte,"r");
95                while(!feof($fr)){
96                      $sourceHTML  = '';
97                      while(!feof($fr)) 
98                              $sourceHTML  .= fgets($fr,1024);
99                }
100                fclose($fr);
101               
102                // recup contenu TXT
103                $texte = $path_archive_full."/.malettre_txt.html";
104                $fr=fopen($texte,"r");
105                while(!feof($fr)){
106                      $sourceTXT  = '';
107                      while(!feof($fr))
108                            $sourceTXT .= fgets($fr,1024);
109                }
110                fclose($fr);
111           
112            } else {                       // on cree la lettre avec la requete web
113           
114                        include_spip('public/assembler');
115                include_spip('inc/charsets');
116           
117                $add = _request('add');
118                                                $lettre_title = trim(strip_tags(_request('lettre_title'))); 
119                $lettre_title = str_replace("\"","'", $lettre_title);
120               
121                $lang = _request('lang_select');
122                if ($lang=="") 
123                          $lang = $GLOBALS['meta']['langue_site'];
124               
125                           
126                                        // VERSION HTML & TXT
127                                        $sourceHTML = "";
128                                        $sourceTXT  = "";
129                                       
130                                                                $sourceHTML .= malettre_get_contents("malettre_header",0,$lang);                 // header
131                                                                $sourceTXT  .= malettre_get_contents("malettre_txt_header",0,$lang);             
132                                                               
133                $sourceHTML .= malettre_get_contents("malettre_edito", $id_article_edito,$lang); // edito
134                $sourceTXT  .= malettre_get_contents("malettre_txt_edito", $id_article_edito,$lang);
135               
136                                                   
137                // radio button
138                if (strlen($add)>0) {   
139                                                        foreach ($add as $value) {
140                                                                    $sourceHTML .= malettre_get_contents("malettre_item",$value,$lang);
141                                                                    $sourceTXT  .= malettre_get_contents("malettre_txt_item",$value,$lang);
142                                                        }
143                                        }                                                       
144                                                       
145                // csv                                                 
146                                        $art_csv = _request('art_csv'); 
147                                        $csv = explode(",", $art_csv);
148                                        if (strlen($csv)>0) {                                                     
149                                                        foreach ($csv as $value2) {                                                             
150                                                        $value = trim($value2);                                                         
151                                                        if ($value!="")         {
152                                                                        $sourceHTML .= malettre_get_contents("malettre_item",$value,$lang);
153                                                                        $sourceTXT  .= malettre_get_contents("malettre_txt_item",$value,$lang);
154                                        }
155                                                        }
156                                        }                                       
157                                                $sourceHTML .= malettre_get_contents("malettre_footer",0,$lang);                 // foot
158                                                $sourceTXT  .= malettre_get_contents("malettre_txt_footer",0,$lang); 
159                                                       
160                                        // ecriture fichier                                                                                             
161                                                if ($handle = fopen($path_archive_full."/.malettre.html", w)) {                                                     
162                                                        fwrite($handle, $sourceHTML);                                   
163                                                        fclose($handle); 
164                   
165                    if ($handle = fopen($path_archive_full."/.malettre_txt.html", w)) {                         
166                                                                fwrite($handle, $sourceTXT);                                   
167                                                                fclose($handle);
168                                                  } else {
169                      $errorFlag = true;
170                      echo _T('malettre:erreur_ecriture')."($path.$path_archive)";
171                    }                                                                           
172                } else {
173                    $errorFlag = true;
174                    echo _T('malettre:erreur_ecriture')."($path.$path_archive)";                   
175                                                }                                                       
176                                       
177
178                                               
179                                }  // fin examen requete               
180                               
181                                                       
182                                          // affichage ?
183                                          if (!$errorFlag) {
184                                                  echo "<form method='post' agir='?exec=malettre'><fieldset>\n"; 
185              echo "<input type='hidden' name='lang_select' value='$lang' />"; 
186                                                  echo "<input type='hidden' name='agir' value='letter_send' />\n";
187              echo "<h4>"._T('malettre:expediteur')."</h4>\n";
188              echo "<select name='expediteur'>\n";
189                                                        foreach ($expediteurs as $expediteur=>$val){
190                  echo "<option value=\"$expediteur\" />".htmlentities($expediteur)." &lt;".htmlentities($val)."&gt;</option>";
191              }
192              echo "</select>\n";   
193              echo "<br />"._T('malettre:autre')." <input type='text' name='expediteur_more' />("._T('malettre:email_seulement').")\n" ; 
194                   
195                echo "<h4>"._T('malettre:destinataires')."</h4>\n";
196                                                        foreach ($adresses as $adresse=>$val){
197                  echo "<input type='checkbox' value=\"$val\"' name='desti[]' />$adresse &lt;$val&gt;<br />";
198              }
199              echo "autre: <input type='text' name='desti_more' /> ("._T('malettre:email_seulement').")<br /><br />\n";
200
201              echo "<input type='submit' name='sub' value='Envoyer la lettre' /> \n";
202              echo "<input type='button' name='sub' value='Ecrire une nouvelle lettre' onclick=\"javascript:document.location.href='?exec=malettre'\"  /> ";
203             
204                                                        echo "<h4>"._T('malettre:apercu')."</h4>\n";
205                                                        echo "Sujet: <input type='text' size='55' name='lettre_title' value=\"".$lettre_title."\" /><br />\n";
206              echo "<iframe width=\"750\" height=\"500\" src=\"$path_archive_full/.malettre.html?nocache=".time()."\"></iframe>\n";
207                                                        echo "<h4>"._T('malettre:version_html')."</h4>\n";
208                                                        echo "<textarea cols='70' rows='20'>$sourceHTML</textarea>";
209                                                        echo "<h4>"._T('malettre:version_txt')."</h4>\n";
210                                                        echo "<textarea cols='70' rows='20'>$sourceTXT</textarea>";
211                                                        echo "</fieldset></form>\n";
212                                                }                                       
213                                               
214   } else if ($agir=='letter_send') {
215                        //
216                  // envoi de la lettre
217                  //
218                  include(dirname(__FILE__)."/../class.phpmailer.php");
219                       
220                        // titre
221                        $lettre_title = trim(strip_tags(_request('lettre_title')));
222            $lettre_title = str_replace("\"","'", $lettre_title); 
223            if ($lettre_title == "") {  // à supprimer ou integrer ou multilingue ?
224              $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');
225              $today = getdate(mktime()-(24*3600));
226              $sujet = "Les nouveautes de ".$months[$today[mon]]." ".date("Y");
227            } else {
228              $sujet = $lettre_title;
229            }
230           
231            // hash           
232            $lettre_hash = substr(md5(time()),0,5);
233            $url_lettre_archive = "$path_url/$path_archive/lettre_".date("Ymd")."_".$lettre_hash."_"._request('lang_select').".html";
234           
235            // recup contenu HTML
236            $texte = $path_archive_full."/.malettre.html";
237            $fr=fopen($texte,"r");
238            while(!feof($fr)){
239                  $recup = '';
240                  while(!feof($fr)) 
241                          $recup .= fgets($fr,1024);
242            }
243            fclose($fr);
244            $recup = str_replace("{URL_MALETTRE}",$url_lettre_archive,$recup);
245            $recup = str_replace("{TITRE_MALETTRE}",$sujet,$recup);
246           
247            // recup contenu TXT
248            $texte = $path_archive_full."/.malettre_txt.html";
249            $fr=fopen($texte,"r");
250            while(!feof($fr)){
251                  $recup_txt = '';
252                  while(!feof($fr))
253                        $recup_txt .= fgets($fr,1024);
254            }
255            fclose($fr);
256            $recup_txt = str_replace("{URL_MALETTRE}",$url_lettre_archive,$recup_txt);
257           
258            // envoi lettre
259            $exp_email = _request('expediteur_more');
260            if ($exp=="") {
261                $expediteur = _request('expediteur');               
262                if (isset($expediteurs[$expediteur])) {
263                   $exp_name = $expediteur;
264                   $exp_email = $expediteurs[$expediteur];
265                }  else  die("expediteur inconnu");
266            } else {
267              $exp_name = $exp_mail;
268            }           
269           
270            $desti = _request('desti');
271            $desti_more = _request('desti_more');
272            if ($desti_more!="") $desti[] = $desti_more;
273           
274            echo "<h3>"._T('malettre:envoi')." <i style='color:#999;'>$sujet</i></h3>\n";
275            echo "<div style='border:1px solid;background:#eee;margin:10px 0;padding:10px;font-family:arial,sans-serif;font-size:0.9em;'>";
276                       
277            if (is_array($desti)) {
278              foreach ($desti as $k=>$adresse) { // envoi a tous les destinataires
279                $mail = new PHPMailer();
280                         
281                $mail->From     = "$exp_email";
282                $mail->FromName = "$exp_name";
283                $mail->AddReplyTo("$exp_email");
284                $mail->AddAddress($adresse,$adresse);
285                               
286                $mail->WordWrap = 50;           // set word wrap
287                $mail->IsHTML(true);            // send as HTML
288                $mail->CharSet = "utf-8";
289               
290                $mail->Subject  =  "$lettre_title";
291                $mail->Body     =  $recup;
292                $mail->AltBody  =  $recup_txt;
293                             
294                if(!$mail->Send()) {
295                    $msg = "<div style='color:red'><strong>$adresse</strong> - "._T('malettre:erreur_envoi')."</div>"; 
296                    $msg .="Mailer Error: " . $mail->ErrorInfo;
297                    $success_flag = false;
298                } else { 
299                    $msg = "<div style='color:green'><strong>$adresse</strong> - <span style='color:green'>"._T('malettre:succes_envoi')."</span></div>";         
300                }
301                 
302                echo $msg;
303              }
304            } else {
305              echo "<div style='color:red'>"._T('malettre:erreur_no_dest')."</div>";
306            }
307            echo "</div>";
308           
309            // archivage de la lettre en dur
310            echo "<div style=\"margin:15px 0;\">"._T('malettre:archives_placer');
311           
312            $lettre_archive = "$path_archive_full/lettre_".date("Ymd")."_".$lettre_hash."_"._request('lang_select').".html";
313            $f_archive=fopen($lettre_archive,"w");
314            fwrite($f_archive,$recup); 
315            fclose($f_archive);
316            echo " <a href='$url_lettre_archive' target='_blank'>html</a> - ";
317           
318            $lettre_archive = "$path_archive_full/lettre_".date("Ymd")."_".$lettre_hash."_"._request('lang_select').".txt";
319            $f_archive=fopen($lettre_archive,"w");
320            fwrite($f_archive,$recup_txt); 
321            fclose($f_archive);
322            echo "<a href='$url_lettre_archive_txt' target='_blank'>txt</a></div>";
323                               
324                       
325            echo "<p><a href='?exec=malettre'>"._T('malettre:ecrire_nouvelle2')."</a></p>\n";
326           
327    } else {    //
328                    // pas d'agir: affichage des articles pour composition de la lettre
329                    //
330                   
331                    // verif si repertoire stockage dispo
332                    if (!is_dir($path_archive_full)) {                                     
333                   if (!mkdir ($path_archive_full, 0777)) // on essaie de le creer 
334                        echo "<div style='color:red;padding:5px;border:1px solid red;>"._T('malettre:erreur_ecrire_stockage')."($path_archive_full)</div>"; 
335              }
336                           
337              $lang_select = _request('lang_select');
338              if ($lang_select!="") $cond_lang_sql = "AND lang='$lang_select'";
339                              else  $cond_lang_sql = "";
340             
341              $result = sql_select(
342               "id_article,titre","spip_articles",
343               "statut = 'publie' $cond_lang_sql","", 
344               "id_article DESC", "0,50" 
345              ); 
346                                     
347                                                                               
348              echo "<form method='post' agir='?exec=malettre'>"; 
349              echo "<input type='hidden' name='agir' value='letter_compose' />";
350              echo "<input type='hidden' name='lang_select' value='$lang_select' />";
351              echo "<fieldset>\n";             
352             
353              if($GLOBALS['meta']['multi_rubriques']=="oui" || $GLOBALS['meta']['multi_articles']=="oui")
354                                      $active_langs = explode(",",$GLOBALS['meta']['langues_multilingue']);
355                          else  $active_langs = "";
356                               
357                                 if (is_array($active_langs)) {
358                                       echo _T('malettre:choix_lang');
359                     foreach($active_langs as $k=>$active_lang) {
360                        if ($lang_select==$active_lang) echo "<strong>[$active_lang]</strong> "; 
361                                         else echo "<a href='?exec=malettre&amp;lang_select=$active_lang'>[$active_lang]</a> ";
362                       
363                     }
364                     if ($lang_select=="") echo "<strong>["._T('malettre:lang_toute')."]</strong> ";             
365                                     else  echo "<a href='?exec=malettre'>["._T('malettre:lang_toute')."]</a>";
366               }
367                               
368               
369                                                               
370                                                                echo "<br /><br />"._T('malettre:compose_sujet')." :<i>("._T('malettre:compose_non_spip').")</i><br />\n";
371                                                                echo "<input type='text' size='55' name='lettre_title' /><br />\n";
372                                                                echo "<br />"._T('malettre:compose_contenu')." - <a href='?exec=articles&amp;id_article=$id_article_edito'>"._T('malettre:compose_edito')."</a><br />\n";                                                               
373                                                                echo "<iframe width='600' height='500' src='$path_url/spip.php?page=malettre_edito&amp;id_article=$id_article_edito'></iframe>\n";
374                                                                echo $stro;                                                             
375                                                       
376                                                                echo "<br />"._T('malettre:compose_cochant');
377                echo "<table class='spip' style='width:100%;border:0;'>";
378                       
379                                //affichage des 50 documents
380                                while($row = sql_fetch($result)){
381                                        $id_document=$row['id_article'];                                       
382                                        $titre=charset2unicode($row['titre']);  // BUG pb de charset  filtrer_entites ?
383                                       
384                                        if ($compteur%2) $couleur="#FFFFFF";
385                                        else $couleur="#EEEEEE";
386                                        $compteur++;
387                                       
388                                        echo "<tr width=\"100%\"><td bgcolor='$couleur'>";
389                                        echo "<a href='?exec=articles&amp;id_article=$id_document'>";
390                                        echo typo("n&deg;".$id_document." - ".$titre);
391                                        echo "</a>";               
392                                        echo "</td>";                                                                           
393                                        echo "<td align='center' bgcolor='$couleur'><input type=checkbox name=add[] value=\"$id_document\"></TD>";
394                                        echo "</tr>\n";
395                                }
396                                                               
397                                                                echo "<tr><td>"._T('malettre:compose_liste')."<br />";
398                                                                echo "<textarea rows='15' cols='50' id='art_csv' name='art_csv'></textarea></td></tr>";
399                                                               
400                               
401                echo "</table><br /><input type='submit' value='"._T('malettre:compose_submit')."' />\n";
402                                                                echo "</fieldset>\n";
403                                                                echo "</form>\n\n";
404
405                }
406                //--   
407
408               
409        }       else {
410                echo "<strong>Vous n'avez pas acc&egrave;s &agrave; cette page.</strong>";
411        }
412       
413        echo fin_page();
414}
415
416?>
Note: See TracBrowser for help on using the repository browser.