source: spip-zone/_plugins_/push/push_la_version_contrib___en_attendant_le_plugin_operationnel.php3 @ 117558

Last change on this file since 117558 was 5548, checked in by fil@…, 14 years ago

rangement des plugins celbataires : comarquage/1_9_0/ console/1_9_0/ csv_import/1_9_0/ desactiver_cache/1_9_0/ desactiver_flash/1_9_0/ dewplayer/1_9_0/ ecard/1_9_1/ marqueur_stats/1_9_0/ modeles_liste/1_9_1/ orientation/1_9_0/ phpmyvisites/1_9_0/ pim_agenda/1_9_0/ profil_etendu/1_9_1/ push/1_9_0/ recherche_etendue/1_9_0/ sitemap/1_9_0/ smallcaps/1_9_0/ spip-lettres/1_9_0/ squelette_profil/1_9_0/ squelettes_par_mots_cle/1_9_0/ squelettes_update/1_9_0/ switcher/1_9_0/ timeline/1_9_0/ toutmulti/1_9_0/ tri_auteurs/1_9_0/ tri_mots/1_9_0/ version_texte/1_9_0/ widget_calendar/1_9_0/

File size: 8.7 KB
Line 
1<?php
2
3include ("inc.php3");
4include_ecrire("inc_mail.php3");
5
6// Parametrage Email
7$serverPop="";
8$user="";
9$password="";
10$port=110;
11
12//positionner à "oui" pour supprimer l'email une fois sauvegardé
13define ("SUPPRIMER_MESSAGE_POP3","non");
14
15//Un compte rendu sera envoye a cette adresse
16define ("EMAIL_CONFIRMATION","ben.spip@free.fr");
17
18// La rubrique se situe dans le sujet du mail. mais si elle n'est pas trouvee, on utilisera celle ci
19define ("ID_RUBRIQUE_PAR_DEFAUT","1");
20define ("UTILISER_RUBRIQUE_PAR_DEFAUT","0"); // 0 ou 1
21
22// on peux mettre au choix prop(proposé),publie(publié)
23define ("STATUT_PAR_DEFAUT","prop"); 
24
25// L'auteur est normalement l'expediteur du mail.
26// Mais si ce n'est pas un utilisateur du site, on utilisera ce numero d'auteur
27define ("ID_AUTEUR_PAR_DEFAUT","1");
28
29// Expression utilisee pour reconnaitre un mail qui doit etre publie
30$expressionReguliere="SPIPOUNET";
31
32
33$mailLog="";
34
35$mbox = get_mailBox($serverPop , $user , $password,$port);
36
37// Lecture des mails
38for ($i = 1; $i <= imap_num_msg($mbox); $i++) {
39  //recuperation du header
40  $header = imap_headerinfo($mbox, $i,80,80) or die ('probleme de lecture du mail ');
41  //Le sujet du mail
42  $subject=$header->fetchsubject;
43  benDebug("<HR>Message N°$i $subject ");
44 
45  //Doit respecter l'expression reguliere
46  if(strpos($subject,$expressionReguliere)!==false) {
47    benDebug("Message à traiter ");
48   
49    $_surtitre="";
50    $_titre="";
51    $_soustitre="";
52    $_descriptif="";
53    $_chapo="";
54    $_texte="";
55    $_ps="";
56    $_id_rubrique=ID_RUBRIQUE_PAR_DEFAUT;
57    $_statut=STATUT_PAR_DEFAUT;
58   
59    $_id_auteur=getAuteur($header,ID_AUTEUR_PAR_DEFAUT) ;
60   
61    //Recuperation du contenu
62    $messageBody = quoted_printable_decode(imap_body($mbox, $i));
63    $_titre=getTitre($messageBody);
64    $_id_rubrique=getRubrique($messageBody);
65    $_texte=getTexte($messageBody);
66    $_lang=getLang($messageBody,$_id_rubrique);
67    $idMotsCles=getIdMotCle($messageBody);
68   
69    $passerSql=0;   
70    // Quelques vérifs
71        if ($_titre=="") // ajout JLuc
72          $_titre=trim(str_replace($expressionReguliere, "", $subject));
73    if ($_titre=="") {
74      benLog("Erreur Titre non Trouvé "); 
75      $passerSql+=1;
76    }
77   
78    if ($passerSql==0) {
79      benDebug("<h2>Sauvegarde en base</h2>"); 
80   
81      //Sauvegarde en base dans la table spip_article
82      $_date=date('Y-m-d H:i:s',time());
83      $sql="insert into spip_articles (lang,surtitre,titre,soustitre,id_rubrique,descriptif,chapo,texte,ps,statut,accepter_forum,date) ";
84      $sql.="VALUES( '".addslashes($_lang)."','".addslashes($_surtitre)."','".addslashes($_titre)."','".addslashes($_soustitre)."',$_id_rubrique,'".addslashes($_descriptif)."','".addslashes($_chapo)."','".addslashes($_texte)."','".addslashes($_ps)."','$_statut','pos','$_date')";
85      benDebug($sql);
86      spip_query($sql) or die ("erreur SQL :$sql") ;
87     
88      //sauvegarde en base de la table spip_auteurs_articles
89      $id_nouvel_article = spip_insert_id();
90      $sql="INSERT INTO spip_auteurs_articles (id_auteur, id_article) VALUES ($_id_auteur, $id_nouvel_article)";
91      benDebug($sql);
92      spip_query($sql)  or die ("erreur SQL :$sql");           
93     
94      //sauvegarde en base de la table spip_mots_articles
95      if ($idMotsCles) {
96        reset ($idMotsCles);
97        while (list(, $idMot) = each($idMotsCles)) {
98          $sql = "INSERT INTO spip_mots_articles (id_mot, id_article) VALUES ($idMot, $id_nouvel_article)";
99          benDebug($sql);
100          spip_query($sql)  or die ("erreur SQL :$sql");               
101        }
102      }
103      benLog("Article N° $id_nouvel_article sauvegardé");
104                        if (SUPPRIMER_MESSAGE_POP3=="oui" ) {
105                                benDebug("<h1>Email N°$i supprimé</h1> ");
106                imap_delete($mbox, $i);
107                                imap_expunge ($mbox); 
108                        }
109    } // passerSql
110  } // pregmatch
111}
112benLog("nombre d'emails lus : ".($i-1)."");
113//envoyer_mail(EMAIL_CONFIRMATION,"Publication automatique par Email", $mailLog);
114echo "<HR><H2>Dans Spip.log:</h2>$mailLog";
115
116
117
118
119//Recuperation de l'email de l'auteur
120function getAuteur ($header,$auteurParDefaut){
121    benDebug("<H1>getAuteur</H1>");
122    $auteurTrouve=false;
123    $from = $header->from;
124    foreach($from as $addr)
125      $fromadress = $addr->mailbox.'@'.$addr->host;
126   
127    benDebug("adresse de l'expéditeur : $fromadress ");
128   
129    //Recherche de l'auteur dans la base spip à partir de l'email
130    $sql="SELECT id_auteur,login,nom FROM spip_auteurs WHERE email='$fromadress' ";
131    $result_nombres_auteurs = spip_query($sql);
132    benDebug($sql);
133   
134    while ($row = spip_fetch_array($result_nombres_auteurs)) {
135      benDebug("Auteur trouvé : ". $row['id_auteur'] ."-" . $row['login'] ."-" . $row['nom'] );
136      //s'il y en a plusieurs (possible ? ) on ne prend que le dernier
137      $_id_auteur=$row['id_auteur'];
138      benLog ("Auteur Email : $fromadress id_auteur:".$row['id_auteur'] ." Login:" . $row['login'] ." Nom:" . $row['nom']); 
139      $auteurTrouve=true;
140    }
141    if ($auteurTrouve==false) {
142      benLog("Auteur non trouvé, on utilise l'auteur par défaut : id_auteur=$auteurParDefaut"); 
143      $_id_auteur=ID_AUTEUR_PAR_DEFAUT;     
144    }
145  return  $_id_auteur;
146}
147
148
149function getIdMotCle ($messageBody) {
150    benDebug("<H1>getIdMotCle</H1>");
151        // les id des mots clés sont dans le sujet -mot:1,3,5-
152       
153 if (preg_match("/(#mot-cle:)([^#]*)/", $messageBody,$res)) 
154        {
155                benDebug("id_mots cles tr  ouvés : ".$res[2]);
156                benLog("Mot clé N°".$res[2]);
157                $id_mots_return=split(',',trim($res[2]));
158        }
159        else {
160                        benDebug("#mot-cle non trouvé ");
161        }
162        return $id_mots_return ;
163}
164
165function getTexte ($messageBody) 
166{
167    benDebug("<H1>getTexte</H1>");
168 
169  if (preg_match("/(#texte:)([^#]*)/", $messageBody,$res)) 
170  {
171    $_texte= $res[2];
172    benDebug("#texte $_texte");
173  }
174  else {
175    benDebug ("#texte non trouvé");
176  }
177  return $_texte ;
178}
179
180
181function getLang ($messageBody,$idRubrique) {
182  benDebug("<h1>getLang</h1> ");
183  $lang="";
184  if (preg_match("/(#lang:)([^#]*)/", $messageBody,$res)){ 
185    $lang= trim($res[2]);
186    benDebug("#lang -$lang- ");
187    benLog("Lang : -$lang- ");
188  }
189  else {
190    benDebug( "lang non trouvée ... Tant pis on laisse tomber, mais on peux aussi chercher la langue de la rubruique ou du secteur " ) ;
191  }
192  return $lang ;
193}
194
195
196function getTitre ($messageBody) {
197    benDebug("<h1>getTitre</h1> ");
198  $titre="";
199  if (preg_match("/(#titre:)([^#]*)/", $messageBody,$res)){ 
200    $titre= trim($res[2]);
201    benDebug("Titre OK : $titre ");
202    benLog("Titre : $titre ");
203  }
204  else {
205    benDebug( " #titre non trouvé $messageBody " ) ;
206  }
207  return $titre ;
208}
209
210function getRubrique ($messageBody) {
211    benDebug("<h1>getRubrique</h1> ");
212  // un mot de la rubrique est dans le sujet -rub:bla bla-
213  if (preg_match("/(#rubrique:)([^#]*)/", $messageBody,$res)) {
214    $titreRubriqueSujet=trim($res[2]);
215    benDebug("Trouvé dans le mail : $titreRubriqueSujet");
216   
217    //le titre de toutes les rubriques
218    $query="SELECT id_rubrique,titre FROM spip_rubriques ";
219    $result=spip_query($query);
220    $rubrique_trouvee=false;
221    while($row=spip_fetch_array($result)){
222      $id_rubrique=$row['id_rubrique'];
223      $titre_rubrique=typo($row['titre']);
224      $pos=strpos( $titre_rubrique,$titreRubriqueSujet);
225        if($pos!==false) {
226        benDebug("ON UTILISERA cette rubrique : $titre_rubrique $id_rubrique ");
227        benLog("Rubrique N°: $id_rubrique - $titre_rubrique");
228        // si plusieurs rubriques correspondent, on prends la derniere
229        $id_rubrique_return=$id_rubrique;
230        $rubrique_trouvee=true;
231      }
232    }
233    if ($rubrique_trouvee==false) {
234      benDebug("[RUBRIQUE] cette partie ($titreRubriqueSujet) n'a pas été trouvée dans un des titres de rubrique . La rubrique par defaut est utilisée ");
235      $id_rubrique_return=ID_RUBRIQUE_PAR_DEFAUT;
236    }
237  }
238  else {
239    benDebug ("#rubrique non trouvé on utilise la rubrique par defaut ");
240    benLog ("rubrique non trouvé on utilise la rubrique par defaut : N° ".ID_RUBRIQUE_PAR_DEFAUT);
241    $id_rubrique_return=ID_RUBRIQUE_PAR_DEFAUT;
242  }
243  return $id_rubrique_return ;         
244 }
245
246function get_mailBox($server , $user , $passwd , $port=110){
247  $mbox= imap_open("{".$server."/pop3:$port"."}", $user, $passwd) or die("Probleme : ". imap_last_error());
248  return $mbox;
249}
250
251function benDebug ($texte){
252  print "$texte <BR>";
253  spip_log("[PUSH] $texte");
254}
255
256function benLog ($texte) {
257  global $mailLog;
258  spip_log("[PUSH] $texte");
259  $mailLog.="$texte<BR>\n";
260}
261
262/*
263        RealET  idée : dans les header du mail
264        RealET  oui : Content-Transfer-Encoding: quoted-printable
265        RealET  Et aussi : Content-Type: text/plain; charset=ISO-8859-1; format=flowed
266*/
267
268?>
Note: See TracBrowser for help on using the repository browser.