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

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

export mots-clés événements

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