source: spip-zone/_plugins_/spip2spip/spiptospip_fonctions.php @ 39487

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

resoudre le conflit de nom ds le xml

File size: 32.2 KB
Line 
1<?php
2
3//---------------------------------------
4// Fonctions
5//---------------------------------------
6
7// ajout bouton
8function spip2spip_ajouterBoutons($boutons_admin) {
9                // si on est admin
10                if ($GLOBALS['connect_statut'] == "0minirezo" && $GLOBALS["connect_toutes_rubriques"]) {
11                  // on voit le bouton dans la barre "naviguer"
12                  $boutons_admin['naviguer']->sousmenu['spip2spip']= 
13      new Bouton(_DIR_PLUGIN_SPIP2SPIP."/img_pack/icon.png", _T("spiptospip:titre"));
14                }
15                return $boutons_admin;
16}
17// FIXME migrer ds la nlle ecriture:
18//http://programmer.spip.org/ajouter_boutons
19
20
21//
22// verifie s'il s'agit du bon format de backend
23// a terme peut etre utile pour recuperer le numero de version
24function is_spip2spip_backend($str) { 
25        // Chercher un numero de version
26        if (preg_match('/(spip2spip)[[:space:]](([^>]*[[:space:]])*)version[[:space:]]*=[[:space:]]*[\'"]([-_a-zA-Z0-9\.]+)[\'"]/', $str, $regs)) 
27             return true;
28         return false;
29}
30
31// -----------------------
32// Fonctions Parsing
33// -----------------------
34
35//
36// parse le backend xml spip2spip
37// basée sur la fonction originale: ecrire/inc/syndic.php -> analyser_backend()
38function analyser_backend_spip2spip($rss){ 
39  include_spip("inc_texte.php"); # pour couper()
40        include_spip("inc_filtres.php"); # pour filtrer_entites()
41               
42        $xml_tags = array('surtitre','titre','soustitre','descriptif','chapo','texte','ps','auteur','link','evenements', 'lang','logo','keyword','mots','licence','documents'); 
43       
44        $syndic_regexp = array(
45                                'item'           => ',<item[>[:space:]],i',
46                                'itemfin'        => '</item>',
47                               
48                                'surtitre'       => ',<surtitre[^>]*>(.*?)</surtitre[^>]*>,ims',
49                                'titre'          => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
50                                'soustitre'      => ',<soustitre[^>]*>(.*?)</soustitre[^>]*>,ims',
51                                'descriptif'     => ',<descriptif[^>]*>(.*?)</descriptif[^>]*>,ims',                           
52                                'chapo'          => ',<chapo[^>]*>(.*?)</chapo[^>]*>,ims',                             
53                                'texte'          => ',<texte[^>]*>(.*?)</texte[^>]*>,ims',                             
54                                'ps'             => ',<ps[^>]*>(.*?)</ps[^>]*>,ims',
55                                'auteur'         => ',<auteur[^>]*>(.*?)</auteur[^>]*>,ims',
56                                'link'           => ',<link[^>]*>(.*?)</link[^>]*>,ims',
57                                'evenements'     => ',<evenements[^>]*>(.*?)</evenements[^>]*>,ims',
58        'lang'           => ',<lang[^>]*>(.*?)</lang[^>]*>,ims',
59        'logo'           => ',<logo[^>]*>(.*?)</logo[^>]*>,ims',
60        'keyword'        => ',<keyword[^>]*>(.*?)</keyword[^>]*>,ims',
61        'mots'           => ',<mots[^>]*>(.*?)</mots[^>]*>,ims',
62        'licence'        => ',<licence[^>]*>(.*?)</licence[^>]*>,ims',
63        'documents'      => ',<documents[^>]*>(.*?)</documents[^>]*>,ims',
64               
65        );
66       
67        // documents
68        $xml_doc_tags = array('id','url','titre','desc');       
69        $document_regexp = array(               
70                        'document'       => ',<document[>[:space:]],i',
71                                'documentfin'    => '</document>',
72               
73                                'id'             => ',<id[^>]*>(.*?)</id[^>]*>,ims',
74        'url'            => ',<url[^>]*>(.*?)</url[^>]*>,ims',
75                                'titre'          => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
76                                'desc'           => ',<desc[^>]*>(.*?)</desc[^>]*>,ims',
77        );
78       
79        // mots
80        $xml_mot_tags = array('groupe','titre');       
81        $mot_regexp = array(           
82                        'mot'       => ',<mot[>[:space:]],i',
83                                'motfin'    => '</mot>',
84               
85                                'groupe'    => ',<groupe[^>]*>(.*?)</groupe[^>]*>,ims',
86                                'titre'     => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
87        );
88       
89        // evenements
90        $xml_event_tags = array('datedeb','datefin','titre','desc','lieu','adresse','horaire','motevts');
91        // on ne gere pas pour l'instant idevent/idsource qui permet de conserver la liaison des repetitions
92       
93        $evenement_regexp = array(             
94                        'evenement'        => ',<evenement[>[:space:]],i',
95                                'evenementfin'     => '</evenement>',                           
96        'datedeb'          => ',<datedeb[^>]*>(.*?)</datedeb[^>]*>,ims',
97                                'datefin'          => ',<datefin[^>]*>(.*?)</datefin[^>]*>,ims',
98                                'titre'            => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
99                                'desc'             => ',<desc[^>]*>(.*?)</desc[^>]*>,ims',
100                                'lieu'             => ',<lieu[^>]*>(.*?)</lieu[^>]*>,ims',
101                                'adresse'          => ',<adresse[^>]*>(.*?)</adresse[^>]*>,ims',
102                                'horaire'          => ',<horaire[^>]*>(.*?)</horaire[^>]*>,ims',
103        'motevts'          => ',<motevts[^>]*>(.*?)</motevts[^>]*>,ims',                               
104        );
105       
106        // fichier backend correct ?
107        if (!is_spip2spip_backend($rss)) return _T('spiptospip:avis_echec_syndication_01');
108       
109        // Echapper les CDATA
110        $echappe_cdata = array();
111        if (preg_match_all(',<!\[CDATA\[(.*)]]>,Uims', $rss,
112        $regs, PREG_SET_ORDER)) {
113                foreach ($regs as $n => $reg) {
114                        $echappe_cdata[$n] = $reg[1];
115                        $rss = str_replace($reg[0], "@@@SPIP_CDATA$n@@@", $rss);
116                }
117        }
118       
119  // supprimer les commentaires
120        $rss = preg_replace(',<!--\s+.*\s-->,Ums', '', $rss);
121       
122        // version du flux
123        $version_flux = 0;
124        if (preg_match_all(',<spip2spip version="(.*?)">,Uims',$rss,$r, PREG_SET_ORDER)) 
125        foreach ($r as $regs) {
126           $version_flux  = (float) $regs[1];
127  }
128  spip_log("spip2spip - version flux: $version_flux");
129       
130        // analyse de chaque item
131        $items = array();
132        if (preg_match_all($syndic_regexp['item'],$rss,$r, PREG_SET_ORDER))
133        foreach ($r as $regs) {
134                $debut_item = strpos($rss,$regs[0]);
135                $fin_item = strpos($rss,
136                $syndic_regexp['itemfin'])+strlen($syndic_regexp['itemfin']);
137                $items[] = substr($rss,$debut_item,$fin_item-$debut_item);
138                $debut_texte = substr($rss, "0", $debut_item);
139                $fin_texte = substr($rss, $fin_item, strlen($rss));
140                $rss = $debut_texte.$fin_texte;
141        }
142
143        // Analyser chaque <item>...</item> du backend et le transformer en tableau
144        if (!count($items)) return _T('spiptospip:avis_echec_syndication_01');
145       
146        foreach ($items as $item) {
147         
148                $data = array();
149   
150                // Date
151                $la_date = "";
152                if (preg_match(",<date>([^<]*)</date>,Uims",$item,$match))              $la_date = $match[1];
153                if ($la_date)           $la_date = my_strtotime($la_date);
154                if ($la_date < time() - 365 * 24 * 3600 OR $la_date > time() + 48 * 3600)               $la_date = time();
155                $data['date'] = $la_date;
156               
157                // version du flux
158                $data['version_flux'] = $version_flux;
159                       
160                // Recuperer les autres tags du xml
161                foreach ($xml_tags as $xml_tag) {                 
162                  if (preg_match($syndic_regexp[$xml_tag],$item,$match)) $data[$xml_tag] = $match[1];
163                                                                              else $data[$xml_tag] = "";
164    }   
165   
166    // On parse le noeud documents
167    if ($data['documents'] != "") {       
168          $documents = array();
169          if (preg_match_all($document_regexp['document'],$data['documents'],$r2, PREG_SET_ORDER))
170                foreach ($r2 as $regs) {
171                        $debut_item = strpos($data['documents'],$regs[0]);
172                        $fin_item = strpos($data['documents'],
173                        $document_regexp['documentfin'])+strlen($document_regexp['documentfin']);
174                        $documents[] = substr($data['documents'],$debut_item,$fin_item-$debut_item);
175                        $debut_texte = substr($data['documents'], "0", $debut_item);
176                        $fin_texte = substr($data['documents'], $fin_item, strlen($data['documents']));
177                        $data['documents'] = $debut_texte.$fin_texte;
178          }
179         
180          $portfolio = array();
181          if (count($documents)) {         
182              foreach ($documents as $document) {                 
183                 $data_node = array();
184                 foreach ($xml_doc_tags as $xml_doc_tag) {
185                    if (preg_match($document_regexp[$xml_doc_tag],$document,$match)) $data_node[$xml_doc_tag] = $match[1]; 
186                                                                                                      else $data_node[$xml_doc_tag] = "";
187                                       } 
188                $portfolio[] = $data_node;                                                     
189              }             
190              $data['documents'] =  serialize($portfolio);
191          }       
192    } # noeud documents
193       
194
195          // On parse le noeud evenement
196    if ($data['evenements'] != "") {
197          $evenements = array();
198          if (preg_match_all($evenement_regexp['evenement'],$data['evenements'],$r3, PREG_SET_ORDER))
199                foreach ($r3 as $regs) {
200                        $debut_item = strpos($data['evenements'],$regs[0]);
201                        $fin_item = strpos($data['evenements'],$evenement_regexp['evenementfin'])+strlen($evenement_regexp['evenementfin']);
202                        $evenements[] = substr($data['evenements'],$debut_item,$fin_item-$debut_item);
203                        $debut_texte = substr($data['evenements'], "0", $debut_item);
204                        $fin_texte = substr($data['evenements'], $fin_item, strlen($data['evenements']));
205                        $data['evenements'] = $debut_texte.$fin_texte;
206                               
207          }
208         
209          $agenda = array();
210          if (count($evenements)) {         
211              foreach ($evenements as $evenement) {                 
212                 $data_node = array();
213                 foreach ($xml_event_tags as $xml_event_tag) {
214                    if (preg_match($evenement_regexp[$xml_event_tag],$evenement,$match)) $data_node[$xml_event_tag] = $match[1]; 
215                                                                                                      else $data_node[$xml_event_tag] = "";
216                                       } 
217                                       
218                                       // FIXME ici traiter le mot evt
219                                       
220                $agenda[] = $data_node;                                                     
221              } 
222     
223              $data['evenements'] =  serialize($agenda); 
224          }       
225    } #noeud evenements
226   
227    // On parse le noeud mots   
228    if ($data['mots'] != "") {       
229          $mots = array();         
230          if (preg_match_all($mot_regexp['mot'],$data['mots'],$r2, PREG_SET_ORDER))
231                foreach ($r2 as $regs) {
232                        $debut_item = strpos($data['mots'],$regs[0]);
233                        $fin_item = strpos($data['mots'],
234                        $mot_regexp['motfin'])+strlen($mot_regexp['motfin']);
235                        $mots[] = substr($data['mots'],$debut_item,$fin_item-$debut_item);
236                        $debut_texte = substr($data['mots'], "0", $debut_item);
237                        $fin_texte = substr($data['mots'], $fin_item, strlen($data['mots']));
238                        $data['mots'] = $debut_texte.$fin_texte;
239          }
240         
241          $motcle = array();
242          if (count($mots)) {         
243              foreach ($mots as $mot) {                 
244                 $data_node = array();
245                 foreach ($xml_mot_tags as $xml_mot_tag) {
246                    if (preg_match($mot_regexp[$xml_mot_tag],$mot,$match)) $data_node[$xml_mot_tag] = $match[1]; 
247                                                                                            else $data_node[$xml_mot_tag] = "";
248                                       } 
249                $motcle[] = $data_node;                                                     
250              }             
251              $data['mots'] =  serialize($motcle);
252          }       
253    }   #noeud mots
254         
255         
256                // Nettoyer les donnees et remettre les CDATA en place
257                foreach ($data as $var => $val) {
258                        $data[$var] = filtrer_entites($data[$var]);
259                        foreach ($echappe_cdata as $n => $e)
260                                $data[$var] = str_replace("@@@SPIP_CDATA$n@@@",$e, $data[$var]);
261                        $data[$var] = trim(textebrut($data[$var]));
262                }
263
264                //$data['item'] = $item;  //utile pour spip2spip ?             
265                $articles[] = $data;   
266        }
267 
268  return $articles;
269}
270
271// -----------------------
272// Fonctions SQL
273// -----------------------
274
275//
276// recuperer rubrique (normalement uniquement) lié à un mot
277function spip2spip_get_id_rubrique($mot) {   
278    $id_group_spip2spip = spip2spip_get_id_groupemot("- spip2spip -");
279    $result = sql_select("id_mot","spip_mots", array( 
280                                              "titre = ".sql_quote($mot),
281                                              "id_groupe = '$id_group_spip2spip'"));
282    while ($row = sql_fetch($result)) { 
283        $id_mot = (int) $row['id_mot'];
284        if ($row2 = sql_fetsel("id_rubrique","spip_mots_rubriques","id_mot='$id_mot'")) 
285               return $row2['id_rubrique'];
286               
287    }
288    return false;
289}
290
291//
292// recupère id d'un groupe de mots-clés
293function spip2spip_get_id_groupemot($titre) { 
294   if ($row = sql_fetsel("id_groupe","spip_groupes_mots","titre=".sql_quote($titre))) 
295               return $row['id_groupe'];
296   return false; 
297}
298
299//
300// recupère id d'un mot
301function spip2spip_get_id_mot($titre) { 
302   if ($row = sql_fetsel("id_mot","spip_mots","titre=".sql_quote($titre))) 
303               return $row['id_mot']; 
304   return false; 
305}
306
307//
308// recupère id du secteur
309function spip2spip_get_id_secteur($id_rubrique) { 
310   if ($row = sql_fetsel("id_parent","spip_rubriques","id_rubrique=$id_rubrique")) 
311               return $row['id_parent']; 
312   return 0; 
313}
314
315//
316// recupere id d'un auteur selon son nom sinon le creer
317function spip2spip_get_id_auteur($name) { 
318   if (trim($name)=="") 
319              return false;
320   if ($row = sql_fetsel("id_auteur","spip_auteurs","nom=".sql_quote($name))) 
321              return $row['id_auteur']; 
322
323    // auteur inconnu, on le cree ...
324    return sql_insertq('spip_auteurs',array('nom'=>$name,'statut'=>'1comite'));
325}
326
327//
328// insert un mot-cle
329function spip2spip_insert_mode_article($id_article, $mot_titre, $groupe_titre, $mode_creer_groupe, $id_groupe=-1) {
330
331   if ($mode_creer_groupe) {
332        // groupe existe ?
333        if ($row = sql_fetsel("id_groupe","spip_groupes_mots","titre=".sql_quote($groupe_titre))) { 
334              $id_groupe = $row['id_groupe'];
335        } else {
336            $id_groupe = sql_insertq('spip_groupes_mots',array(
337                                      'titre'=> $groupe_titre, 
338                                      'tables_liees'=> 'articles', 
339                                      'minirezo' => 'oui',
340                                      'comite' => 'oui',
341                                      'forum' => 'non'));
342        }
343       
344   }           
345     
346   if ($id_groupe>0){                   
347        // mot existe ?
348        if ($row = sql_fetsel("id_mot","spip_mots","titre=".sql_quote($mot_titre)." AND id_groupe=".intval($id_groupe))) { 
349              $id_mot = $row['id_mot'];
350        } else {
351              if ($row = sql_fetsel("titre","spip_groupes_mots","id_groupe=".intval($id_groupe))) 
352                          $type = $row['titre'];
353              $id_mot = sql_insertq('spip_mots',array(
354                                      'titre'=> $mot_titre, 
355                                      'id_groupe'=> intval($id_groupe), 
356                                      'type' => $type));                                     
357        }
358           
359        sql_insertq('spip_mots_articles', array(
360                                      'id_mot'=> intval($id_mot), 
361                                      'id_article'=> intval($id_article)));
362                   
363   } else {
364      spip_log("spip2spip pas de groupe-clé import specifie");
365   }
366
367}
368
369
370// -----------------------
371// Fonctions de formatage
372// -----------------------
373
374
375//
376// restaure le formatage des extra
377function spip2spip_convert_extra($texte,$documents,$version_flux=1.6) {
378        $texte = spip2spip_convert_ln($texte,$version_flux); 
379        $texte = spip2spip_convert_img($texte,$documents);
380        return $texte;
381}
382
383//
384// restaure le formatage des img et doc avec le tableau fourni
385function spip2spip_convert_img($texte,$documents) {
386  $texte_avt_regex = $texte;
387  krsort($documents);
388        foreach($documents as $k=>$val) {       
389           $texte = preg_replace("/__IMG$k(.*?)__/i", "<img$val$1>",$texte);
390           // si le doc est employe en tant image, changer son mode pour qu'il sorte du portfolio (mode=document) et passe en image (mode=image)
391           if ($texte_avt_regex != $texte) spip2spip_update_mode_document($val,'image'); 
392           
393           // autre mise a jour non image
394           $texte = preg_replace("/__DOC$k(.*?)__/i", "<doc$val$1>",$texte);
395           
396     $texte_avt_regex = $texte;   
397  }     
398 
399  //$texte = preg_replace("/__(IMG|DOC)(.*?)__/i", "",$texte); // nettoyage des codes qui resteraient eventuellement
400  $texte = preg_replace("/__(.*?)__/i", "",$texte); // expression plus large (pour prevoir la compatabilite future si ajout d'autres extras)
401        return $texte;
402}
403
404//
405// restaure le formatage des ln
406function spip2spip_convert_ln($texte,$version_flux=1.6) {
407  if ($version_flux<1.7)        $texte = str_replace("__LN__","\n\n",$texte);
408                  else    $texte = str_replace("__LN__","\n",$texte); 
409        return $texte;
410}
411
412//
413// change le mode (vignette/document/) du document
414function spip2spip_update_mode_document($id_document,$mode="vignette") { 
415   sql_updateq('spip_documents', array("mode"=>$mode), "id_document=$id_document");
416}
417
418//---------------------------------------
419// fonction principale: spip2spip_syndique
420//
421// effectue la syndication d'un site donnee
422// - id_site
423// - mode: cron (silencieux avec spip_log)
424//         html (log bavard)
425//---------------------------------------
426function spip2spip_syndiquer($id_site, $mode='cron') {
427    include_spip("inc/distant"); 
428    include_spip("inc/syndic"); 
429    include_spip("inc/mail"); 
430    include_spip("inc/getdocument"); 
431    include_spip("inc/ajouter_documents");
432
433
434    $log_html = "";
435    $log_email = "";
436   
437    //------------------------------- 
438    // Recupere la config
439    //-------------------------------
440    // groupe mot cle "licence" installe ? (contrib: http://www.spip-contrib.net/Filtre-Licence )
441    if (spip2spip_get_id_groupemot("licence"))  $isLicenceInstalled = true; 
442                                          else  $isLicenceInstalled = false;
443                               
444    // on charge les valeurs de CFG
445    if (lire_config('spip2spip/import_statut')=="publie") $import_statut = "publie";  else $import_statut = "prop";
446    if (lire_config('spip2spip/citer_source')=="on") $citer_source=true; else  $citer_source=false;
447    if (lire_config('spip2spip/email_alerte')=="on") $email_alerte=true; else  $email_alerte=false;
448    if (lire_config('spip2spip/email_suivi')!="")
449                   $email_suivi = lire_config('spip2spip/email_suivi');
450              else $email_suivi = $GLOBALS['meta']['adresse_suivi']; // adresse de suivi editorial
451    if (lire_config('spip2spip/import_mot_article')=="on")  $import_mot_article=true; else  $import_mot_article=false;
452    if (lire_config('spip2spip/import_mot_groupe_creer')=="oui")  $import_mot_groupe_creer=true; else  $import_mot_groupe_creer=false;
453    if (lire_config('spip2spip/import_mot_groupe'))  $id_import_mot_groupe = (int) lire_config('spip2spip/import_mot_groupe');
454                                                else $id_import_mot_groupe = -1;
455   
456    //-------------------------------
457    // selection du site
458    //-------------------------------   
459    if ($row_site = sql_fetsel("*","spip_spip2spip","id=$id_site")) {   
460      $id_site   = $row_site["id"];
461      $site_titre = $row_site["site_titre"];
462      $url_syndic   = $row_site["site_rss"];
463      $date_syndic  = $row_site["last_syndic"];
464     
465      $log_html .= "<h4>$site_titre (<a href='$url_syndic'>flux</a>)</h4>";
466      spip_log("spip2spip: syndication: ".$url_syndic);
467      //$date =  date('Y-m-d H:i:s',time()); // utileser date OU NOW() ???
468      sql_update("spip_spip2spip", array('last_syndic' => 'NOW()'), "id=$id_site");
469     
470      // Aller chercher les donnees du flux RSS et les analyser
471      $rss = recuperer_page($url_syndic, true);
472      if (!$rss) {
473        $log_html .= "<div style='color:red'>"._T('spiptospip:avis_echec_syndication_02')."</div>";
474      } else {
475        $articles = analyser_backend_spip2spip($rss);             
476        //----*************       
477        // Des articles dispo pour ce site ?
478        if (is_array($articles)) { 
479            foreach ($articles as $article) {
480              $log_html .= "<ul>\n";             
481             
482              if (isset($article['titre'])) {                               
483                $documents_current_article = array();
484                $current_titre = $article['titre'];
485                $version_flux = $article['version_flux'];
486                             
487                // Est que l'article n'a pas été déjà importé ?
488                $nb_reponses = sql_countsel("spip_articles","titre=".sql_quote($current_titre));                               
489                if ($nb_reponses>0) {                                   
490                   // article deja connu et present ds la base
491                   $log_html .= "<li>[<span style='color:#999'>"._T('spiptospip:imported_already')."</span>] $current_titre</li>\n";
492                   spip_log("spip2spip: deja importe: ".$current_titre);                   
493                } else {
494                   // nouvel article à importer
495                   $log_html .= "<li>[<span style='color:#090'>"._T('spiptospip:imported_new')."</span>] $current_titre<br />\n";
496                   
497                   // on cherche la rubrique destination
498                   $target = spip2spip_get_id_rubrique($article['keyword']);
499                   if (!$target) {  // pas de destination
500                      $log_html .= "<span style='color:#009'>"._T('spiptospip:no_target')." <strong>".$article['keyword']."</strong></span></li>\n";                   
501                   } else {   
502                      // tout est bon, on insert les donnnees !
503                     
504                      // etape 1 -  traitement des documents
505                      $_documents = $article['documents'];                   
506                      $documents_current_article = array();
507                      if ($_documents!="") {
508                        $_documents = unserialize($_documents);                 
509                        foreach($_documents as $_document) {                   
510                            $id_distant = $_document['id'];
511                            $source = $_document['url'];
512                            $titre = $_document['titre'];                       
513                            $desc = $_document['desc'];
514                                             
515                            // inspire de @ajouter_un_document() - inc/ajout_documents.php
516                            if ($a = recuperer_infos_distantes($source)) { 
517                           
518                                $type_image = $a['type_image'];
519
520                                                unset($a['type_image']);
521                                                unset($a['body']);
522                                                unset($a['mode']); //
523                         
524                                                $a['date'] = 'NOW()';
525                                                $a['distant'] = 'oui';
526                                                //$a['mode'] = 'document';
527                                                $a['fichier'] = set_spip_doc($source);
528                                                                                               
529                                                $a['titre'] = $titre;     // infos spip2spip, recuperer via le flux
530                                                $a['descriptif'] = $desc;
531                                               
532                                                $documents_current_article[$id_distant] = sql_insertq("spip_documents", $a);
533                                 
534                                        }                           
535                        }                       
536                      } 
537                     
538                     
539                      // etape 2 -  traitement de l'article                             
540                      $_surtitre = $article['surtitre'];
541                                $_titre = $article['titre'];
542                                $_soustitre = $article['soustitre'];
543                                $_descriptif = spip2spip_convert_extra($article['descriptif'],$documents_current_article,$version_flux);
544                                $_chapo = spip2spip_convert_extra($article['chapo'],$documents_current_article,$version_flux);
545                                $_texte = spip2spip_convert_extra($article['texte'],$documents_current_article,$version_flux);
546                                $_ps = spip2spip_convert_extra($article['ps'],$documents_current_article,$version_flux);
547                                $_date =  date('Y-m-d H:i:s',time()); // $article['date'];  // date de la syndication ou date de l'article ?
548                                $_lang = $article['lang'];
549                                $_logo = $article['logo'];
550                                $_id_rubrique = $target; 
551                      $_id_secteur = spip2spip_get_id_secteur($target);                                                 
552                                $_statut = $import_statut;
553                                $_id_auteur = $article['auteur'];
554                                $_link = $article['link'];
555                                $_licence = $article['licence'];                                       
556                               
557                                // on cite la source originale ds le champs ps et la licence
558                                if ($citer_source)
559                                      $_ps .= _T('spiptospip:origin_url')." [->".$_link."]";
560                               
561                      // licence ?               
562                      if ($_licence !="" && !isLicenceInstalled)                                       
563                            $_ps .= _T('spiptospip:article_license')." ".$_licence;
564                     
565                                                                               
566                                // ....dans la table articles                   
567                                $id_nouvel_article = sql_insertq("spip_articles",array(
568                                              'lang' => $_lang,
569                                              'surtitre' => $_surtitre,
570                                              'titre' => $_titre,
571                                              'soustitre' => $_soustitre,
572                                              'id_rubrique' => $_id_rubrique,
573                                              'id_secteur' => $_id_secteur,
574                                              'descriptif' => $_descriptif,
575                                              'chapo' => $_chapo,
576                                              'texte' => $_texte,
577                                              'ps' => $_ps,
578                                              'statut' => $_statut,
579                                              'accepter_forum' => 'non',
580                                              'date' => $_date));                                       
581                                        $log_html  .= "<a href='?exec=articles&amp;id_article=$id_nouvel_article' style='padding:5px;border:1px solid;background:#ddd;display: block;'>"._T('spiptospip:imported_view')."</a>";
582                      $log_email .= $article['titre'] ."\n"._T('spiptospip:imported_view').": ".$GLOBALS['meta']['adresse_site']."/ecrire/?exec=articles&id_article=$id_nouvel_article \n\n";
583                                                                               
584                      // ... dans la table auteurs
585                      if ($_id_auteur) {
586                                            $auteurs = explode(", ",$_id_auteur);
587                                            foreach($auteurs as $auteur) {
588                                                $id_auteur = spip2spip_get_id_auteur($auteur);
589                                                if ($id_auteur)         
590                                @sql_insertq("spip_auteurs_articles",array('id_auteur'=>$id_auteur,'id_article'=>$id_nouvel_article));
591                          }
592                      }
593                     
594                      // ....dans la table documents_article
595                      foreach($documents_current_article as $document_current_article) { 
596                          @sql_insertq('spip_documents_liens',array(
597                                      'id_document'=>$document_current_article, 'id_objet'=>$id_nouvel_article,
598                                      'objet' => 'article'));
599                      } 
600                     
601                      // ... si logo, tente de l'importer                     
602                      if ($_logo) {                                                     
603                            $logo_local = copie_locale($_logo);                         
604                            if ($logo_local) {                                 
605                                $logo_local_dest = "IMG/arton$id_nouvel_article.".substr($logo_local,-3);                                                       
606                                @rename( _DIR_RACINE.$logo_local, _DIR_RACINE.$logo_local_dest);
607                            }
608                      }
609                     
610                      // etape 3 - traitement des mots de l'article
611                      $_mots = $article['mots']; 
612                      if ($_mots!="" && $import_mot_article) {                       
613                        $_mots = unserialize($_mots);                 
614                        foreach($_mots as $_mot) {                   
615                            $groupe = $_mot['groupe'];                           
616                            $titre  = $_mot['titre'];                                                     
617                            spip2spip_insert_mode_article($id_nouvel_article, $titre, $groupe, $import_mot_groupe_creer, $id_import_mot_groupe);                                             
618                        }
619                      }
620                           
621                     
622                      // etape 4 - traitement des evenements (a finir de porter) FIXME
623                      $_evenements = $article['evenements'];
624                                          $_evenements = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $_evenements );
625                      if ($_evenements!="") {
626                       
627                        $_evenements=unserialize($_evenements);           
628                        foreach($_evenements as $_evenement) {                 
629                            $datedeb = $_evenement['datedeb'];
630                            $datefin = $_evenement['datefin'];
631                            $lieu = $_evenement['lieu'];
632                            $adresse = spip2spip_convert_extra($_evenement['adresse'],$documents_current_article,$version_flux);
633                            $horaire = $_evenement['horaire'];
634                            $titre = $_evenement['titre'];                       
635                            $desc = spip2spip_convert_extra($_evenement['desc'],$documents_current_article,$version_flux); 
636                                                                             
637                            @sql_insertq('spip_evenements',array(
638                                                                            'id_article'=> $id_nouvel_article,
639                                                                            'date_debut'=> $datedeb,
640                                                                            'date_fin'=> $datefin,
641                                                                            'titre'=>$titre,
642                                                                            'descriptif'=>$desc,
643                                                                            'lieu'=>$lieu,
644                                                                            'adresse'=>$adresse,
645                                                                            'horaire'=>$horaire));
646                            $log_html .= "<div style='padding:2px 5px;border-bottom:1px solid #5DA7C5;background:#eee;display: block;'>"._T('spiptospip:event_ok')." : $datedeb  $lieu</div>";
647                                                                                               
648                                                                                               
649                        } 
650                      }
651                     
652                      // .... dans le groupe mot "licence" ?
653                      if ($_licence !="" && isLicenceInstalled) {                                       
654                          $id_mot = spip2spip_get_id_mot($_licence);
655                          if ($id_mot) 
656                                  @sql_insertq('spip_mots_articles',array('id_mot'=>$id_mot,'id_article'=>$id_nouvel_article));                     
657                     } 
658
659                   }
660                   
661                   $log_html .= "</li>\n";
662                }
663
664              } 
665              $log_html .= "</ul>";
666             
667
668            }
669        } else {
670          $log_html .= "<div style='color:purple'>"._T('spiptospip:aucun_article')."</div>";
671        }
672        // #analyse article
673        //----*************
674      }         
675   
676     
677    } // #selection du site
678   
679    // alerte email ?   
680    if ($email_alerte && $log_email !="") 
681                  envoyer_mail($email_suivi,"Syndication automatique SPIP2SPIP", $log_email);       
682             
683   
684    if ($mode=='html') return $log_html;   
685    return false;
686}
687
688//
689// ajout au cron
690function spip2spip_taches_generales_cron($taches) {
691  $taches['spip2spip_syndic'] = 60*5; 
692        return $taches;
693}
694
695
696?>
Note: See TracBrowser for help on using the repository browser.