Changeset 82824 in spip-zone


Ignore:
Timestamp:
Jun 2, 2014, 2:45:25 PM (5 years ago)
Author:
teddy.spip@…
Message:

On réorganise le code pour y voir un peu plus clair.

  • On passera en squelettes prive un peu plus tard.
  • Ajout dans le formulaires/configurer_spip2spip.html d'une config supplémentaire: est-ce qu'on acrée automatiquement les mots-clés des thématiques dans spip2spip à la synchronisation. Par défaut : non. Rétro compat.
  • On passe par des feuilles de style. Plus 'propre' mais surtout plus facile à maintenir que dans le code php.
Location:
_plugins_/spip2spip/trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip2spip/trunk/formulaires/configurer_spip2spip.html

    r82058 r82824  
    11<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
    22
    3         <h3 class="titrem"><:spip2spip:cfg_titre_parametrages:></h3>
     3    <h3 class="titrem"><:spip2spip:cfg_titre_parametrages:></h3>
    44
    5         [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
    6         [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
     5    [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
     6    [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
    77
    8         <form method="post" action="#ENV{action}">
    9         <div>
    10                 #ACTION_FORMULAIRE{#ENV{action}}
     8    <form method="post" action="#ENV{action}">
     9        <div>
     10            #ACTION_FORMULAIRE{#ENV{action}}
    1111
    12                 <ul>
    13      <!-- ******** -->
    14      <!--  IMPORT  -->
    15      <!-- ******** -->
    16      <li><h2><:spip2spip:cfg_import:></h2></li>
    17      <!-- import statut-->
    18       [(#SAISIE{selection, import_statut,
    19                                 label=<:spip2spip:cfg_import_statut:>,
    20         cacher_option_intro=true,
    21         datas=#ARRAY{           
    22                         prop,<:sites:info_statut_site_3:>,
    23                         publie,<:sites:info_statut_site_2:>}})] 
    24         <!-- import cron -->
    25      [(#SAISIE{input, intervalle_cron,
    26                                 label=<:spip2spip:cfg_intervalle_cron:>})]     
    27         <!-- import date -->
    28         [(#SAISIE{radio, import_date_article,
    29                         label=<:spip2spip:cfg_import_date_article:>,
    30                         datas=#ARRAY{
    31                                 oui,<:spip2spip:cfg_import_date_article_oui:>,
    32                                 non,<:spip2spip:cfg_import_date_article_non:>}})]
    33                                
    34      <!-- suivi syndic -->
    35     [(#SAISIE{checkbox, email_alerte,
    36                 label='',
    37         datas=#ARRAY{on,<:spip2spip:cfg_email_alerte:>}})]
    38      [(#SAISIE{input, email_suivi,
    39                                 label=<:spip2spip:cfg_email_suivi:>})]
    40      
    41      <!-- source -->
    42     [(#SAISIE{checkbox, citer_source,
    43                 label='',
    44         datas=#ARRAY{on,<:spip2spip:cfg_citer_source:>}})]
     12            <!-- ******** -->
     13            <!--  IMPORT  -->
     14            <!-- ******** -->
     15            <fieldset>
     16                <legend><:spip2spip:cfg_import:></legend>
     17                <ul>
     18                    <!-- import statut-->
     19                    [(#SAISIE{selection, import_statut,
     20                    label=<:spip2spip:cfg_import_statut:>,
     21                    cacher_option_intro=true,
     22                    datas=#ARRAY{
     23                    prop,<:sites:info_statut_site_3:>,
     24                    publie,<:sites:info_statut_site_2:>}})]
    4525
    46     <li><h3><:spip2spip:cfg_import_motcle:></h3></li>
    47    
    48     [(#SAISIE{checkbox, import_mot_article,
    49                 label='',
    50         datas=#ARRAY{on,<:spip2spip:cfg_import_mot_article:>}})]
    51     [(#SAISIE{checkbox, import_mot_evnt,
    52                 label='',
    53         datas=#ARRAY{on,<:spip2spip:cfg_import_mot_evnt:>}})] 
     26                    <!-- import cron -->
     27                    [(#SAISIE{input, intervalle_cron,
     28                    label=<:spip2spip:cfg_intervalle_cron:>})]
    5429
    55     [(#SAISIE{radio, import_mot_groupe_creer,
    56                 label=,
    57                 explication=<:spip2spip:cfg_import_mot_groupe_creer:>,
    58                 datas=#ARRAY{
    59                         oui,<:spip2spip:cfg_import_mot_groupe_creer_oui:>,
    60                         non,<:spip2spip:cfg_import_mot_groupe_creer_non:>}})]
    61  
    62  
    63      
    64       #SET{groupe_motcle,#ARRAY}
    65       <BOUCLE_groupes1(GROUPES_MOTS){par titre}{titre !=- spip2spip - }>
    66       [(#SET{groupe_motcle,#GET{groupe_motcle}|array_merge{#ARRAY{#TITRE,#ID_GROUPE}}})]
    67       </BOUCLE_groupes1>
    68       [(#SET{groupe_motcle, #GET{groupe_motcle}|array_flip})]
    69  
    70         [(#SAISIE{selection,import_mot_groupe,
    71                 label=,
    72                 datas=#GET{groupe_motcle}})]     
    73        
    74        
    75    
    76    <!-- ******** -->
    77    <!-- EXPORT  -->
    78    <!-- ******** -->     
    79    
    80     <li><h2><:spip2spip:cfg_export:></h2></li>
    81        
    82     [(#SAISIE{checkbox, export_mot_article,
    83                 label='',
    84         datas=#ARRAY{on,<:spip2spip:cfg_export_mot_article:>}})]
    85     [(#SAISIE{checkbox, export_mot_evnt,
    86                 label='',
    87         datas=#ARRAY{on,<:spip2spip:cfg_export_mot_evnt:>}})]   
    88        
    89      
    90       #SET{groupe_motcle,#ARRAY{Tous,-1}
    91       <BOUCLE_groupes(GROUPES_MOTS){par titre}>
    92       [(#SET{groupe_motcle,#GET{groupe_motcle}|array_merge{#ARRAY{"&rarr; "#TITRE,#ID_GROUPE}}})]
    93       </BOUCLE_groupes>
    94       [(#SET{groupe_motcle, #GET{groupe_motcle}|array_flip})]
    95        
    96       [(#SAISIE{selection_multiple,export_mot_groupe,
    97                 label=<:spip2spip:cfg_export_mot_groupe:>,
    98           cacher_option_intro=true,
    99                 datas=#GET{groupe_motcle}})]     
     30                    <!-- import date -->
     31                    [(#SAISIE{radio, import_date_article,
     32                    label=<:spip2spip:cfg_import_date_article:>,
     33                    datas=#ARRAY{
     34                    oui,<:spip2spip:cfg_import_date_article_oui:>,
     35                    non,<:spip2spip:cfg_import_date_article_non:>}})]
     36
     37                    <!-- suivi syndic -->
     38                    [(#SAISIE{checkbox, email_alerte,
     39                    label='',
     40                    datas=#ARRAY{on,<:spip2spip:cfg_email_alerte:>}})]
     41                    [(#SAISIE{input, email_suivi,
     42                    label=<:spip2spip:cfg_email_suivi:>})]
     43
     44                    <!-- source -->
     45                    [(#SAISIE{checkbox, citer_source,
     46                    label='',
     47                    datas=#ARRAY{on,<:spip2spip:cfg_citer_source:>}})]
     48
     49                    <!-- créer les thématiques -->
     50                    [(#SAISIE{radio, creer_thematique_article,
     51                    label=<:spip2spip:cfg_creer_thematique_article:>,
     52                    explication=<:spip2spip:cfg_creer_thematique_article_explication:>,
     53                    datas=#ARRAY{
     54                    oui,<:spip2spip:cfg_creer_thematique_article_oui:>,
     55                    non,<:spip2spip:cfg_creer_thematique_article_non:>},
     56                    defaut=non})]
     57                </ul>
     58            </fieldset>
     59            <fieldset>
     60                <legend><:spip2spip:cfg_import_motcle:></legend>
     61                <ul>
     62                    [(#SAISIE{checkbox, import_mot_article,
     63                    label='',
     64                    datas=#ARRAY{on,<:spip2spip:cfg_import_mot_article:>}})]
     65
     66                    [(#SAISIE{checkbox, import_mot_evnt,
     67                    label='',
     68                    datas=#ARRAY{on,<:spip2spip:cfg_import_mot_evnt:>}})]
     69
     70                    [(#SAISIE{radio, import_mot_groupe_creer,
     71                    label=,
     72                    explication=<:spip2spip:cfg_import_mot_groupe_creer:>,
     73                    datas=#ARRAY{
     74                    oui,<:spip2spip:cfg_import_mot_groupe_creer_oui:>,
     75                    non,<:spip2spip:cfg_import_mot_groupe_creer_non:>}})]
     76
     77                    #SET{groupe_motcle,#ARRAY}
     78                    <BOUCLE_groupes1 (GROUPES_MOTS){par titre}{titre !=- spip2spip - }>
     79                    [(#SET{groupe_motcle,#GET{groupe_motcle}|array_merge{#ARRAY{#TITRE,#ID_GROUPE}}})]
     80                    </BOUCLE_groupes1>
     81                    [(#SET{groupe_motcle, #GET{groupe_motcle}|array_flip})]
     82
     83                    [(#SAISIE{selection,import_mot_groupe,
     84                    label=,
     85                    datas=#GET{groupe_motcle}})]
     86                </ul>
     87            </fieldset>
     88
     89            <!-- ******** -->
     90            <!-- EXPORT  -->
     91            <!-- ******** -->
     92            <fieldset>
     93                <legend><:spip2spip:cfg_export:></legend>
     94                <ul>
     95                    [(#SAISIE{checkbox, export_mot_article,
     96                    label='',
     97                    datas=#ARRAY{on,<:spip2spip:cfg_export_mot_article:>}})]
     98                    [(#SAISIE{checkbox, export_mot_evnt,
     99                    label='',
     100                    datas=#ARRAY{on,<:spip2spip:cfg_export_mot_evnt:>}})]
    100101
    101102
    102     </ul>
    103    
    104                 <input type="hidden" name="_meta_casier" value="spip2spip" />
    105                 <p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
    106         </div>
    107         </form>
     103                    #SET{groupe_motcle,#ARRAY{Tous,-1}
     104                    <BOUCLE_groupes(GROUPES_MOTS){par titre}>
     105                    [(#SET{groupe_motcle,#GET{groupe_motcle}|array_merge{#ARRAY{"&rarr; "#TITRE,#ID_GROUPE}}})]
     106                    </BOUCLE_groupes>
     107                    [(#SET{groupe_motcle, #GET{groupe_motcle}|array_flip})]
     108
     109                    [(#SAISIE{selection_multiple,export_mot_groupe,
     110                    label=<:spip2spip:cfg_export_mot_groupe:>,
     111                    cacher_option_intro=true,
     112                    datas=#GET{groupe_motcle}})]
     113
     114
     115                </ul>
     116            </fieldset>
     117
     118            <input type="hidden" name="_meta_casier" value="spip2spip" />
     119            <p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
     120        </div>
     121    </form>
    108122</div>
    109123
  • _plugins_/spip2spip/trunk/inc/spip2spip.php

    r81808 r82824  
    66 */
    77
    8 if (!defined("_ECRIRE_INC_VERSION")) return; 
     8if (!defined("_ECRIRE_INC_VERSION")) return;
    99
    1010
     
    1414// effectue la syndication d'un site donnee
    1515// - id_site
    16 // - mode: cron (silencieux avec spip_log) 
     16// - mode: cron (silencieux avec spip_log)
    1717//         html (log bavard)
    1818//---------------------------------------
    19 function spip2spip_syndiquer($id_site, $mode='cron') {
    20     include_spip("inc/distant");
    21     include_spip("inc/syndic");     
    22     include_spip("inc/getdocument");
     19function spip2spip_syndiquer($id_site, $mode = 'cron')
     20{
     21    include_spip("inc/distant");
     22    include_spip("inc/syndic");
     23    include_spip("inc/getdocument");
    2324    include_spip("inc/ajouter_documents");
    2425    include_spip("inc/config");
     
    2627    $log_html = "";
    2728    $log_email = "";
    28    
    29     //------------------------------- 
     29
     30    //-------------------------------
    3031    // Recupere la config
    3132    //-------------------------------
    3233    // groupe mot cle "licence" installe ? (contrib: http://www.spip-contrib.net/Filtre-Licence )
    33     if (spip2spip_get_id_groupemot("licence"))  $isLicenceInstalled = true;
    34                                           else  $isLicenceInstalled = false;
    35                                
     34    if (spip2spip_get_id_groupemot("licence")) {
     35        $isLicenceInstalled = true;
     36    } else {
     37        $isLicenceInstalled = false;
     38    }
     39
    3640    // on charge les valeurs de CFG
    37     if (lire_config('spip2spip/import_statut')=="publie") $import_statut = "publie";  else $import_statut = "prop";
    38         if (lire_config('spip2spip/import_date_article')=="oui")  $import_date_article=true; else  $import_date_article=false; //Date de l'article
    39     if (lire_config('spip2spip/citer_source')) $citer_source=true; else  $citer_source=false;
    40     if (lire_config('spip2spip/email_alerte')) $email_alerte=true; else  $email_alerte=false;
    41     if (lire_config('spip2spip/email_suivi')!="")
    42                    $email_suivi = lire_config('spip2spip/email_suivi');
    43               else $email_suivi = $GLOBALS['meta']['adresse_suivi']; // adresse de suivi editorial
    44     if (lire_config('spip2spip/import_mot_article'))  $import_mot_article=true; else  $import_mot_article=false;
    45     if (lire_config('spip2spip/import_mot_evnt'))  $import_mot_evt=true; else  $import_mot_evt=false;
    46     if (lire_config('spip2spip/import_mot_groupe_creer')=="oui")  $import_mot_groupe_creer=true; else  $import_mot_groupe_creer=false;
    47     if (lire_config('spip2spip/import_mot_groupe'))  $id_import_mot_groupe = (int) lire_config('spip2spip/import_mot_groupe');
    48                                                 else $id_import_mot_groupe = -1;
    49    
     41    if (lire_config('spip2spip/import_statut') == "publie") {
     42        $import_statut = "publie";
     43    } else {
     44        $import_statut = "prop";
     45    }
     46    if (lire_config('spip2spip/import_date_article') == "oui") {
     47        $import_date_article = true;
     48    } else {
     49        $import_date_article = false; //Date de l'article
     50    }
     51    if (lire_config('spip2spip/citer_source')) {
     52        $citer_source = true;
     53    } else {
     54        $citer_source = false;
     55    }
     56    if (lire_config('spip2spip/creer_thematique_article') == "oui") {
     57        $creer_thematique_article = true;
     58    } else {
     59        $creer_thematique_article = false;
     60    }
     61    if (lire_config('spip2spip/email_alerte')) {
     62        $email_alerte = true;
     63    } else {
     64        $email_alerte = false;
     65    }
     66    if (lire_config('spip2spip/email_suivi') != "") {
     67        $email_suivi = lire_config('spip2spip/email_suivi');
     68    } else {
     69        $email_suivi = $GLOBALS['meta']['adresse_suivi']; // adresse de suivi editorial
     70    }
     71    if (lire_config('spip2spip/import_mot_article')) {
     72        $import_mot_article = true;
     73    } else {
     74        $import_mot_article = false;
     75    }
     76    if (lire_config('spip2spip/import_mot_evnt')) {
     77        $import_mot_evt = true;
     78    } else {
     79        $import_mot_evt=false;
     80    }
     81    if (lire_config('spip2spip/import_mot_groupe_creer') == "oui") {
     82        $import_mot_groupe_creer = true;
     83    } else {
     84        $import_mot_groupe_creer = false;
     85    }
     86    if (lire_config('spip2spip/import_mot_groupe')) {
     87        $id_import_mot_groupe = (int) lire_config('spip2spip/import_mot_groupe');
     88    } else {
     89        $id_import_mot_groupe = -1;
     90    }
     91
    5092    //-------------------------------
    5193    // selection du site
    52     //-------------------------------   
    53     if ($row_site = sql_fetsel("*","spip_spip2spips","id_spip2spip=".intval($id_site))) {   
    54       $id_site   = $row_site["id_spip2spip"];
    55       $site_titre = $row_site["site_titre"];
    56       $url_syndic   = $row_site["site_rss"];
    57       $date_syndic  = $row_site["maj"];
    58      
    59       spip_log("spip2spip: syndication: ".$url_syndic);
    60       //$date =  date('Y-m-d H:i:s',time()); // utileser date OU NOW() ???
    61       sql_update("spip_spip2spips", array('maj' => 'NOW()'), "id_spip2spip=$id_site");
    62      
    63       // Aller chercher les donnees du flux RSS et les analyser
    64       $rss = recuperer_page($url_syndic, true);
    65       if (!$rss) {
    66         $log_html .= "<div style='color:red'>"._T('spip2spip:avis_echec_syndication')."</div>";
    67       } else {
    68         $articles = analyser_backend_spip2spip($rss);             
    69         //----*************       
    70         // Des articles dispo pour ce site ?
    71         if (is_array($articles)) {
    72             foreach ($articles as $article) {
    73               $log_html .= "<ul>\n";             
    74              
    75               if (isset($article['link'])) {                               
    76                 $documents_current_article = array();
    77                 $version_flux = $article['version_flux'];
    78                
    79                 $current_titre = $article['titre'];
    80                 $current_link  = $article['link'];                                             
    81                 // Est que l'article n'a pas été déjà importé ?
    82                 $nb_reponses = sql_countsel("spip_articles","s2s_url=".sql_quote($current_link));                               
    83                 if ($nb_reponses>0) {                                   
    84                    // article deja connu et present ds la base
    85                    $log_html .= "<li>[<span style='color:#999'>"._T('spip2spip:imported_already')."</span>] <a href='$current_link'>$current_titre</a></li>\n";
    86                    spip_log("spip2spip: deja importe: ".$current_link);                   
    87                 } else {
    88                    // nouvel article à importer
    89                    $log_html .= "<li>[<span style='color:#090'>"._T('spip2spip:imported_new')."</span>] <a href='$current_link'>$current_titre</a>\n";
    90                    
    91                    // on cherche la rubrique destination
    92                    $target = spip2spip_get_id_rubrique($article['keyword']);
    93                    if (!$target) {  // pas de destination
    94                       $log_html .= "<div style='color:#009'>"._T('spip2spip:no_target')." <strong>".$article['keyword']."</strong></div></li>\n";                   
    95                    } else {   
    96                       // tout est bon, on insert les donnnees !
    97                      
    98                       // etape 1 -  traitement des documents
    99                       $_documents = $article['documents'];                   
    100                       $documents_current_article = array();
    101                       if ($_documents!="") {
    102                         $_documents = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $_documents );
    103                         $_documents = unserialize($_documents);                 
    104                         foreach($_documents as $_document) {                   
    105                             $id_distant = $_document['id'];
    106                             $source = $_document['url'];
    107                             $titre = stripslashes($_document['titre']);                       
    108                             $desc =  stripslashes($_document['desc']);
    109                                              
    110                             // inspire de @ajouter_un_document() - inc/ajout_documents.php
    111                             if ($a = recuperer_infos_distantes($source)) {
    112                            
    113                                 $type_image = $a['type_image'];
    114 
    115                                                 unset($a['type_image']);
    116                                                 unset($a['body']);
    117                                                 unset($a['mode']); //
    118                          
    119                                                 $a['date'] = 'NOW()';
    120                                                 $a['distant'] = 'oui';
    121                                                 //$a['mode'] = 'document';
    122                                                 $a['fichier'] = set_spip_doc($source);
    123                                                                                                
    124                                                 $a['titre'] = $titre;     // infos spip2spip, recuperer via le flux
    125                                                 $a['descriptif'] = $desc;
    126                                                
    127                                                 $documents_current_article[$id_distant] = sql_insertq("spip_documents", $a);
    128                                  
    129                                         }                           
    130                         }                       
    131                       }
    132                      
    133                      
    134                       // etape 2 -  traitement de l'article                             
    135                                                 $_surtitre = $article['surtitre'];
    136                                 $_titre = $article['titre'];
    137                                 $_soustitre = $article['soustitre'];
    138                                 $_descriptif = spip2spip_convert_extra($article['descriptif'],$documents_current_article,$version_flux);
    139                                 $_chapo = spip2spip_convert_extra($article['chapo'],$documents_current_article,$version_flux);
    140                                 $_texte = spip2spip_convert_extra($article['texte'],$documents_current_article,$version_flux);
    141                                 $_ps = spip2spip_convert_extra($article['ps'],$documents_current_article,$version_flux);
    142                                 //date de la syndication ou date de l'article ?
    143                                                 if($import_date_article == true){
    144                                                         $_date =  $article['date']; // Date de l'article
    145                                                 }else{
    146                                                         $_date =  date('Y-m-d H:i:s',time()); //Date de syndication
    147                                                 }
    148                                 $_lang = $article['lang'];
    149                                 $_logo = $article['logo'];
    150                                 $_id_rubrique = $target;
    151                                                 $_id_secteur = spip2spip_get_id_secteur($target);                                               
    152                                 $_statut = $import_statut;
    153                                 $_id_auteur = $article['auteur'];
    154                                 $_link = $article['link'];
    155                                 $_trad = $article['trad'];
    156                                 $_licence = $article['licence'];               
    157                      
    158                                         // on cite la source originale ds le champs ps et la licence
    159                                 if ($citer_source)
    160                                       $_ps .= _T('spip2spip:origin_url')." [->".$_link."]";
    161                                
    162                       // licence ?               
    163                       if ($_licence !="" && !isLicenceInstalled)                                       
    164                             $_ps .= _T('spip2spip:article_license')." ".$_licence;
    165                      
    166                                                                                
    167                                 // ....dans la table articles                                   
    168                                 $id_nouvel_article = sql_insertq("spip_articles",array(
    169                                               'lang' => $_lang,
    170                                               'surtitre' => $_surtitre,
    171                                               'titre' => $_titre,
    172                                               'soustitre' => $_soustitre,
    173                                               'id_rubrique' => $_id_rubrique,
    174                                               'id_secteur' => $_id_secteur,
    175                                               'descriptif' => $_descriptif,
    176                                               'chapo' => $_chapo,
    177                                               'texte' => $_texte,
    178                                               'ps' => $_ps,
    179                                               'statut' => $_statut,
    180                                               'accepter_forum' => 'non',
    181                                               'date' => $_date,
    182                                               's2s_url' => $_link,
    183                                               's2s_url_trad' => $_trad,
    184                                               ));                                       
    185                                         $log_html  .= "<a href='?exec=article&amp;id_article=$id_nouvel_article' style='padding:5px;border-bottom:3px solid;background:#eee;display:block;'>"._T('spip2spip:imported_view')."</a>";
    186                       $log_email .= $article['titre'] ."\n"._T('spip2spip:imported_view').": ".$GLOBALS['meta']['adresse_site']."/ecrire/?exec=article&id_article=$id_nouvel_article \n\n";
    187                                        
    188                       // gestion lien traduction
    189                      if  ($_trad) {                     
    190                           if ($_trad == $_link) { // il s'agit de l'article origine de traduc
    191                               sql_updateq('spip_articles', array("id_trad"=>$id_nouvel_article), "id_article=$id_nouvel_article");   // maj article orig trad                             
    192                               sql_updateq('spip_articles', array("id_trad"=>$id_nouvel_article), "s2s_url_trad=".sql_quote($_link)); // maj article trad (si deja importe ds une session precedente)
    193                           } else { // il s'agit d'un article traduit, on cherche si on a l'article origine de trad en local
    194                               if ($row = sql_fetsel("id_article","spip_articles","s2s_url=".sql_quote($_trad))) {
    195                                   $id_article_trad = (int) $row['id_article'];                                 
    196                                   sql_updateq('spip_articles', array("id_trad"=>$id_article_trad), "id_article=$id_nouvel_article"); // maj article trad
    197                                   sql_updateq('spip_articles', array("id_trad"=>$id_article_trad), "id_article=$id_article_trad");   // maj article orig trad (si deja importe ds une session precedente)
    198                               }
    199                           }                                   
    200                       }
    201                                                                
    202                       // ... dans la table auteurs
    203                       if ($_id_auteur) {
    204                                             $auteurs = explode(", ",$_id_auteur);
    205                                             foreach($auteurs as $auteur) {
    206                                                 $id_auteur = spip2spip_get_id_auteur($auteur);
    207                                                 if ($id_auteur)
    208                                 @sql_insertq("spip_auteurs_liens",array('id_auteur'=>$id_auteur,'objet'=>'article','vu'=>'non','id_objet'=>$id_nouvel_article));
    209                           }
    210                       }
    211                      
    212                       // ....dans la table documents_article
    213                       foreach($documents_current_article as $document_current_article) {
    214                           @sql_insertq('spip_documents_liens',array(
    215                                       'id_document'=>$document_current_article, 'id_objet'=>$id_nouvel_article,
    216                                       'objet' => 'article'));
    217                       } 
    218                      
    219                       // ... si logo, tente de l'importer                     
    220                       if ($_logo) {                                                     
    221                             $logo_local = copie_locale($_logo);                         
    222                             if ($logo_local) {                                 
    223                                 $logo_local_dest = "IMG/arton$id_nouvel_article.".substr($logo_local,-3);                                                       
    224                                 @rename( _DIR_RACINE.$logo_local, _DIR_RACINE.$logo_local_dest);
    225                             }
    226                       }
    227                      
    228                       // etape 3 - traitement des mots de l'article
    229                       $_mots = $article['mots'];                                           
    230                       if ($_mots!="" && $import_mot_article) { 
    231                         $_mots = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $_mots );                     
    232                         $_mots = unserialize($_mots);
    233                         foreach($_mots as $_mot) {                                               
    234                             $groupe = stripslashes($_mot['groupe']);                           
    235                             $titre  = stripslashes($_mot['titre']);                                                     
    236                             spip2spip_insert_mode_article($id_nouvel_article, $titre, $groupe, $import_mot_groupe_creer, $id_import_mot_groupe,"article");                                             
    237                         }
    238                       }
    239                            
    240                      
    241                       // etape 4 - traitement des evenements
    242                       $_evenements = $article['evenements'];                     
    243                       if ($_evenements!="") { 
    244                         $_evenements = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $_evenements );                     
    245                         $_evenements = unserialize(base64_decode($_evenements));                                                         
    246                         foreach($_evenements as $_evenement) {                 
    247                             $datedeb = $_evenement['datedeb'];
    248                             $datefin = $_evenement['datefin'];
    249                             $lieu = stripslashes($_evenement['lieu']);
    250                             $adresse = spip2spip_convert_extra(stripslashes($_evenement['adresse']),$documents_current_article,$version_flux);
    251                             $horaire = $_evenement['horaire'];
    252                             $titre = stripslashes($_evenement['titre']);                       
    253                             $desc = spip2spip_convert_extra(stripslashes($_evenement['desc']),$documents_current_article,$version_flux);
    254                             $motevts = $_evenement['motevts'];
    255                                                                                                                                      
    256                             $id_nouvel_evt = sql_insertq('spip_evenements',array(
    257                                                                             'id_article'=> $id_nouvel_article,
    258                                                                             'date_debut'=> $datedeb,
    259                                                                             'date_fin'=> $datefin,
    260                                                                             'titre'=>$titre,
    261                                                                             'descriptif'=>$desc,
    262                                                                             'lieu'=>$lieu,
    263                                                                             'adresse'=>$adresse,
    264                                                                             'horaire'=>$horaire,
    265                                         'statut'=>$import_statut));
    266                             $log_html .= "<div style='padding:2px 5px;border-bottom:1px solid #5DA7C5;background:#eee;display:block;'>"._T('spip2spip:event_ok')." : $datedeb  $lieu</div>";
    267                                                                
    268                             // mot cle ?                           
    269                             if ($motevts!="" && $import_mot_evt) {
    270                               foreach($motevts as $motevt) {                               
    271                                 $groupe = stripslashes($motevt['groupe']);                           
    272                                 $titre  = stripslashes($motevt['titre']);                                 
    273                                 spip2spip_insert_mode_article($id_nouvel_evt, $titre, $groupe, $import_mot_groupe_creer, $id_import_mot_groupe, "evenement");                             
    274                               }
    275                             }
    276                             // #mot cle   
    277                                                                                                
    278                         }
    279                       }
    280                      
    281                       // .... dans le groupe mot "licence" ?
    282                       if ($_licence !="" && isLicenceInstalled) {                                       
    283                           $id_mot = spip2spip_get_id_mot($_licence);
    284                           if ($id_mot)
    285                                   @sql_insertq('spip_mots_articles',array('id_mot'=>$id_mot,'id_article'=>$id_nouvel_article));                     
    286                      }
    287 
    288                    }
    289                    
    290                    $log_html .= "</li>\n";
    291                 }
    292 
    293               } 
    294               $log_html .= "</ul>";
    295              
    296 
     94    //-------------------------------
     95    if ($row_site = sql_fetsel("*", "spip_spip2spips", "id_spip2spip=".intval($id_site))) {
     96        $id_site   = $row_site["id_spip2spip"];
     97        $site_titre = $row_site["site_titre"];
     98        $url_syndic   = $row_site["site_rss"];
     99        $date_syndic  = $row_site["maj"];
     100
     101        spip_log("spip2spip: syndication: ".$url_syndic);
     102        //$date =  date('Y-m-d H:i:s',time()); // utileser date OU NOW() ???
     103        sql_update("spip_spip2spips", array('maj' => 'NOW()'), "id_spip2spip=$id_site");
     104
     105        // Aller chercher les donnees du flux RSS et les analyser
     106        $rss = recuperer_page($url_syndic, true);
     107        if (!$rss) {
     108            $log_html .= "<div class='bloc_error'>"._T('spip2spip:avis_echec_syndication')."</div>";
     109        } else {
     110            $articles = analyser_backend_spip2spip($rss);
     111            //----*************
     112            // Des articles dispo pour ce site ?
     113            if (is_array($articles)) {
     114                // on ouvre le ul avant l'énumération du ou des article(s)
     115                $log_html .= "<ul class='liste-items'>\n";
     116                foreach ($articles as $article) {
     117                    $log_html .= "<li class='item'>"; // On ouvre les festivités
     118
     119                    if (isset($article['link'])) {
     120                        $documents_current_article = array();
     121                        $version_flux = $article['version_flux'];
     122
     123                        $current_titre = $article['titre'];
     124                        $current_link  = $article['link'];
     125                        // Est que l'article n'a pas été déjà importé ?
     126                        $nb_reponses = sql_countsel("spip_articles", "s2s_url=" . sql_quote($current_link));
     127                        if ($nb_reponses>0) {
     128                            // article deja connu et present ds la base
     129                            $article_importe = sql_fetsel(
     130                                'id_article,titre',
     131                                'spip_articles',
     132                                's2s_url=' . sql_quote($current_link)
     133                            );
     134                            $log_html .= "<span class='bloc_info'>"
     135                            . _T('spip2spip:imported_already')
     136                            . "</span><a href='$current_link' rel='external' class='h3'>$current_titre</a><br/>\n"
     137                            . "<strong>"
     138                            . _T('spip2spip:label_thematique')
     139                            . ':</strong> '
     140                            . $article['keyword'] . "<br/>\n"
     141                            . "<a href="
     142                            . generer_url_ecrire('article', 'id_article=' . $article_importe['id_article'])
     143                            . ">"
     144                            . _T('spip2spip:imported_view')
     145                            . "</a>\n";
     146                            spip_log("spip2spip: deja importe: " . $current_link);
     147                        } else {
     148                            // nouvel article à importer
     149                            $log_html .= "<span class='bloc_success'>"
     150                            . _T('spip2spip:imported_new')
     151                            . "</span>\n"
     152                            . "<a href='$current_link' rel='external' class='h3'>$current_titre</a>\n";
     153                            // on cherche la rubrique destination
     154                            $target = spip2spip_get_id_rubrique($article['keyword']);
     155                            if (!$target) {
     156                                // Aucune rubrique associée au thème.
     157                                if ($creer_thematique_article) {
     158                                    $id_thematique = spip2spip_set_thematique($article['keyword']);
     159                                    $thematique_complement = " (<a href="
     160                                    . generer_url_ecrire('mot', 'id_mot=' . $id_thematique)
     161                                    . ">"
     162                                    . _T('spip2spip:voir_thematique')
     163                                    . "</a>)";
     164                                } else {
     165                                    $thematique_complement = '';
     166                                }
     167
     168                                $log_html .= "<div class='bloc_notice'>"
     169                                . _T('spip2spip:no_target')
     170                                . " <strong>"
     171                                . $article['keyword']
     172                                . "</strong>"
     173                                . $thematique_complement
     174                                . "</div>\n";
     175                            } else {
     176                                // On a une rubrique cible
     177                                // On importe les données
     178
     179                                // -----------------------------------
     180                                // etape 1 -  traitement des documents
     181                                // -----------------------------------
     182                                $_documents = $article['documents'];
     183                                $documents_current_article = array();
     184                                if ($_documents!="") {
     185                                    $_documents = preg_replace(
     186                                        '!s:(\d+):"(.*?)";!e',
     187                                        "'s:'.strlen('$2').':\"$2\";'",
     188                                        $_documents
     189                                    );
     190                                    $_documents = unserialize($_documents);
     191                                    foreach ($_documents as $_document) {
     192                                        $id_distant = $_document['id'];
     193                                        $source = $_document['url'];
     194                                        $titre = stripslashes($_document['titre']);
     195                                        $desc =  stripslashes($_document['desc']);
     196
     197                                        // inspire de @ajouter_un_document() - inc/ajout_documents.php
     198                                        if ($a = recuperer_infos_distantes($source)) {
     199
     200                                            $type_image = $a['type_image'];
     201
     202                                            unset($a['type_image']);
     203                                            unset($a['body']);
     204                                            unset($a['mode']);
     205
     206                                            $a['date'] = 'NOW()';
     207                                            $a['distant'] = 'oui';
     208                                            //$a['mode'] = 'document';
     209                                            $a['fichier'] = set_spip_doc($source);
     210
     211                                            $a['titre'] = $titre;     // infos spip2spip, recuperer via le flux
     212                                            $a['descriptif'] = $desc;
     213
     214                                            $documents_current_article[$id_distant] = sql_insertq("spip_documents", $a);
     215
     216                                        }
     217                                    }
     218                                } // Fin de l'étape 1 de traitement des documents
     219
     220                                // -----------------------------------
     221                                // etape 2 -  traitement de l'article
     222                                // -----------------------------------
     223                                $_surtitre = $article['surtitre'];
     224                                $_titre = $article['titre'];
     225                                $_soustitre = $article['soustitre'];
     226                                $_descriptif = spip2spip_convert_extra(
     227                                    $article['descriptif'],
     228                                    $documents_current_article,
     229                                    $version_flux
     230                                );
     231                                $_chapo = spip2spip_convert_extra(
     232                                    $article['chapo'],
     233                                    $documents_current_article,
     234                                    $version_flux
     235                                );
     236                                $_texte = spip2spip_convert_extra(
     237                                    $article['texte'],
     238                                    $documents_current_article,
     239                                    $version_flux
     240                                );
     241                                $_ps = spip2spip_convert_extra(
     242                                    $article['ps'],
     243                                    $documents_current_article,
     244                                    $version_flux
     245                                );
     246                                // ----------
     247                                //date de la syndication ou date de l'article ?
     248                                if ($import_date_article == true) {
     249                                    $_date =  $article['date']; // Date de l'article
     250                                } else {
     251                                    $_date =  date('Y-m-d H:i:s', time()); //Date de syndication
     252                                }
     253                                $_lang = $article['lang'];
     254                                $_logo = $article['logo'];
     255                                $_id_rubrique = $target;
     256                                $_id_secteur = spip2spip_get_id_secteur($target);
     257                                $_statut = $import_statut;
     258                                $_id_auteur = $article['auteur'];
     259                                $_link = $article['link'];
     260                                $_trad = $article['trad'];
     261                                $_licence = $article['licence'];
     262                                // ----------
     263                                // on cite la source originale ds le champs ps et la licence
     264                                if ($citer_source) {
     265                                    $_ps .= _T('spip2spip:origin_url')." [->".$_link."]";
     266                                }
     267                                // ----------
     268                                // licence ?
     269                                if ($_licence !="" && !isLicenceInstalled) {
     270                                    $_ps .= _T('spip2spip:article_license')." ".$_licence;
     271                                }
     272                                // ----------
     273                                // ....dans la table articles
     274                                // ----------
     275                                $id_nouvel_article = sql_insertq(
     276                                    "spip_articles",
     277                                    array(
     278                                        'lang' => $_lang,
     279                                        'surtitre' => $_surtitre,
     280                                        'titre' => $_titre,
     281                                        'soustitre' => $_soustitre,
     282                                        'id_rubrique' => $_id_rubrique,
     283                                        'id_secteur' => $_id_secteur,
     284                                        'descriptif' => $_descriptif,
     285                                        'chapo' => $_chapo,
     286                                        'texte' => $_texte,
     287                                        'ps' => $_ps,
     288                                        'statut' => $_statut,
     289                                        'accepter_forum' => 'non',
     290                                        'date' => $_date,
     291                                        's2s_url' => $_link,
     292                                        's2s_url_trad' => $_trad,
     293                                    )
     294                                );
     295                                $log_html  .= "<br/>\n"
     296                                . "<strong>"
     297                                . _T('spip2spip:label_thematique')
     298                                . ':</strong> '
     299                                . $article['keyword']
     300                                . "<br/>\n<a href='"
     301                                . generer_url_ecrire('article', "id_article=$id_nouvel_article")
     302                                . "'>"
     303                                . _T('spip2spip:imported_view')
     304                                . "</a>\n";
     305
     306                                $log_email .= $article['titre']
     307                                . "\n"
     308                                . _T('spip2spip:imported_view')
     309                                . ": "
     310                                . generer_url_ecrire('article', "id_article=$id_nouvel_article", true, false)
     311                                . "\n\n";
     312                                // ----------
     313                                // gestion lien traduction
     314                                // ----------
     315                                if ($_trad) {
     316                                    if ($_trad == $_link) {
     317                                    // il s'agit de l'article origine de traduc
     318                                        sql_updateq(
     319                                            'spip_articles',
     320                                            array("id_trad"=>$id_nouvel_article),
     321                                            "id_article=$id_nouvel_article"
     322                                        );   // maj article orig trad
     323                                        sql_updateq(
     324                                            'spip_articles',
     325                                            array("id_trad"=>$id_nouvel_article),
     326                                            "s2s_url_trad=".sql_quote($_link)
     327                                        ); // maj article trad (si deja importe ds une session precedente)
     328                                    } else {
     329                                        // il s'agit d'un article traduit,
     330                                        // on cherche si on a l'article origine de trad en local
     331                                        if ($row = sql_fetsel(
     332                                            "id_article",
     333                                            "spip_articles",
     334                                            "s2s_url=".sql_quote($_trad)
     335                                        )) {
     336                                            $id_article_trad = (int) $row['id_article'];
     337                                            sql_updateq(
     338                                                'spip_articles',
     339                                                array("id_trad"=>$id_article_trad),
     340                                                "id_article=$id_nouvel_article"
     341                                            ); // maj article trad
     342                                            sql_updateq(
     343                                                'spip_articles',
     344                                                array("id_trad"=>$id_article_trad),
     345                                                "id_article=$id_article_trad"
     346                                            );   // maj article orig trad (si deja importe ds une session precedente)
     347                                        }
     348                                    }
     349                                }
     350                                // ----------
     351                                // ... dans la table auteurs
     352                                // ----------
     353                                if ($_id_auteur) {
     354                                    $auteurs = explode(", ", $_id_auteur);
     355                                    foreach ($auteurs as $auteur) {
     356                                        $id_auteur = spip2spip_get_id_auteur($auteur);
     357                                        if ($id_auteur) {
     358                                            @sql_insertq(
     359                                                "spip_auteurs_liens",
     360                                                array(
     361                                                    'id_auteur'=>$id_auteur,
     362                                                    'objet'=>'article',
     363                                                    'vu'=>'non',
     364                                                    'id_objet'=>$id_nouvel_article
     365                                                )
     366                                            );
     367                                        }
     368                                    }
     369                                }
     370                                // ----------
     371                                // ... dans la table spip_documents_liens
     372                                // ----------
     373                                foreach ($documents_current_article as $document_current_article) {
     374                                    @sql_insertq(
     375                                        'spip_documents_liens',
     376                                        array(
     377                                            'id_document'=>$document_current_article,
     378                                            'id_objet'=>$id_nouvel_article,
     379                                            'objet' => 'article'
     380                                        )
     381                                    );
     382                                }
     383                                // ----------
     384                                // ... si logo, tente de l'importer
     385                                // ----------
     386                                if ($_logo) {
     387                                    $logo_local = copie_locale($_logo);
     388                                    if ($logo_local) {
     389                                        $logo_local_dest = _DIR_IMG
     390                                        . "arton$id_nouvel_article."
     391                                        . substr($logo_local, -3);
     392                                        @rename(
     393                                            _DIR_RACINE . $logo_local,
     394                                            _DIR_RACINE . $logo_local_dest
     395                                        );
     396                                    }
     397                                }
     398
     399                                // -----------------------------------
     400                                // etape 3 - traitement des mots de l'article
     401                                // -----------------------------------
     402                                $_mots = $article['mots'];
     403                                if ($_mots!="" && $import_mot_article) {
     404                                    $_mots = preg_replace(
     405                                        '!s:(\d+):"(.*?)";!e',
     406                                        "'s:'.strlen('$2').':\"$2\";'",
     407                                        $_mots
     408                                    );
     409                                    $_mots = unserialize($_mots);
     410                                    foreach ($_mots as $_mot) {
     411                                        $groupe = stripslashes($_mot['groupe']);
     412                                        $titre  = stripslashes($_mot['titre']);
     413                                        spip2spip_insert_mode_article(
     414                                            $id_nouvel_article,
     415                                            $titre,
     416                                            $groupe,
     417                                            $import_mot_groupe_creer,
     418                                            $id_import_mot_groupe,
     419                                            "article"
     420                                        );
     421                                    }
     422                                }
     423
     424                                // -----------------------------------
     425                                // etape 4 - traitement des evenements
     426                                // -----------------------------------
     427                                $_evenements = $article['evenements'];
     428                                if ($_evenements!="") {
     429                                    $_evenements = preg_replace(
     430                                        '!s:(\d+):"(.*?)";!e',
     431                                        "'s:'.strlen('$2').':\"$2\";'",
     432                                        $_evenements
     433                                    );
     434                                    $_evenements = unserialize(base64_decode($_evenements));
     435                                    foreach ($_evenements as $_evenement) {
     436                                        $datedeb = $_evenement['datedeb'];
     437                                        $datefin = $_evenement['datefin'];
     438                                        $lieu = stripslashes($_evenement['lieu']);
     439                                        $adresse = spip2spip_convert_extra(
     440                                            stripslashes($_evenement['adresse']),
     441                                            $documents_current_article,
     442                                            $version_flux
     443                                        );
     444                                        $horaire = $_evenement['horaire'];
     445                                        $titre = stripslashes($_evenement['titre']);
     446                                        $desc = spip2spip_convert_extra(
     447                                            stripslashes($_evenement['desc']),
     448                                            $documents_current_article,
     449                                            $version_flux
     450                                        );
     451                                        $motevts = $_evenement['motevts'];
     452
     453                                        $id_nouvel_evt = sql_insertq(
     454                                            'spip_evenements',
     455                                            array(
     456                                                'id_article'=> $id_nouvel_article,
     457                                                'date_debut'=> $datedeb,
     458                                                'date_fin'=> $datefin,
     459                                                'titre'=>$titre,
     460                                                'descriptif'=>$desc,
     461                                                'lieu'=>$lieu,
     462                                                'adresse'=>$adresse,
     463                                                'horaire'=>$horaire,
     464                                                'statut'=>$import_statut
     465                                            )
     466                                        );
     467                                        $log_html .= "<div class='event_ok'>"
     468                                        . _T('spip2spip:event_ok')
     469                                        . " : $datedeb  $lieu</div>";
     470
     471                                        // mot cle ?
     472                                        if ($motevts!="" && $import_mot_evt) {
     473                                            foreach ($motevts as $motevt) {
     474                                                $groupe = stripslashes($motevt['groupe']);
     475                                                $titre  = stripslashes($motevt['titre']);
     476                                                spip2spip_insert_mode_article(
     477                                                    $id_nouvel_evt,
     478                                                    $titre,
     479                                                    $groupe,
     480                                                    $import_mot_groupe_creer,
     481                                                    $id_import_mot_groupe,
     482                                                    "evenement"
     483                                                );
     484                                            }
     485                                        }
     486                                        // #mot cle
     487                                    }
     488                                } // Fin etape 4
     489
     490                                // ----------
     491                                // .... dans le groupe mot "licence" ?
     492                                // ----------
     493                                if ($_licence !="" && isLicenceInstalled) {
     494                                    $id_mot = spip2spip_get_id_mot($_licence);
     495                                    if ($id_mot) {
     496                                        @sql_insertq(
     497                                            'spip_mots_articles',
     498                                            array('id_mot'=>$id_mot, 'id_article'=>$id_nouvel_article)
     499                                        );
     500                                    }
     501                                }
     502
     503
     504                            } // Fin du traitement de l'article vers sa rubrique cible.
     505                            $log_html .= "</li>\n"; // on n'oublie pas de fermer l'item de la liste
     506                        } // On a traité l'article à importer.
     507
     508                    } else {
     509                        // pas de link dans l'article du flux.
     510                    }
     511                } // Fin du traitement de chaque article.
     512                // On ferme la liste.
     513                $log_html .= "</ul>\n";
     514            } else {
     515                // On n'a pas d'article dans le flux.
     516                $log_html .= "<div class='bloc_notice'>"._T('spip2spip:aucun_article')."</div>";
    297517            }
    298         } else {
    299           $log_html .= "<div style='color:purple'>"._T('spip2spip:aucun_article')."</div>";
    300         }
    301         // #analyse article
    302         //----*************
    303       }         
    304    
    305      
     518
     519        } // fin du traitement du flux rss (else)
     520
    306521    } // #selection du site
    307    
    308     // alerte email ?   
    309     if ($email_alerte && $log_email !="")   {               
    310               $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
    311                           $envoyer_mail($email_suivi, _T('spip2spip:titre_mail'), $log_email);
    312     }   
    313              
    314    
    315     if ($mode=='html') return $log_html;   
     522
     523    // alerte email ?
     524    if ($email_alerte && $log_email !="") {
     525        $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
     526        $envoyer_mail($email_suivi, _T('spip2spip:titre_mail'), $log_email);
     527    }
     528
     529
     530    if ($mode=='html') {
     531        return $log_html;
     532    }
    316533    return false;
    317534}
     
    325542// verifie s'il s'agit du bon format de backend
    326543// a terme peut etre utile pour recuperer le numero de version
    327 function is_spip2spip_backend($str) { 
    328         // Chercher un numero de version
    329         if (preg_match('/(spip2spip)[[:space:]](([^>]*[[:space:]])*)version[[:space:]]*=[[:space:]]*[\'"]([-_a-zA-Z0-9\.]+)[\'"]/', $str, $regs))
    330              return true;
    331         return false;
    332 }
    333 
    334 // 
    335 // parse le backend xml spip2spip 
     544function is_spip2spip_backend($str) {
     545    // Chercher un numero de version
     546    if (preg_match('/(spip2spip)[[:space:]](([^>]*[[:space:]])*)version[[:space:]]*=[[:space:]]*[\'"]([-_a-zA-Z0-9\.]+)[\'"]/', $str, $regs))
     547         return true;
     548        return false;
     549}
     550
     551//
     552// parse le backend xml spip2spip
    336553// basée sur la fonction originale: ecrire/inc/syndic.php -> analyser_backend()
    337 function analyser_backend_spip2spip($rss){ 
     554function analyser_backend_spip2spip($rss){
    338555  include_spip("inc_texte.php"); # pour couper()
    339         include_spip("inc_filtres.php"); # pour filtrer_entites()
    340                
    341         $xml_tags = array('surtitre','titre','soustitre','descriptif','chapo','texte','ps','auteur','link','trad','date','evenements', 'lang','logo','keyword','mots','licence','documents');
    342        
    343         $syndic_regexp = array(
    344                                 'item'           => ',<item[>[:space:]],i',
    345                                 'itemfin'        => '</item>',
    346                                
    347                                 'surtitre'       => ',<surtitre[^>]*>(.*?)</surtitre[^>]*>,ims',
    348                                 'titre'          => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
    349                                 'soustitre'      => ',<soustitre[^>]*>(.*?)</soustitre[^>]*>,ims',
    350                                 'descriptif'     => ',<descriptif[^>]*>(.*?)</descriptif[^>]*>,ims',                           
    351                                 'chapo'          => ',<chapo[^>]*>(.*?)</chapo[^>]*>,ims',                             
    352                                 'texte'          => ',<texte[^>]*>(.*?)</texte[^>]*>,ims',                             
    353                                 'ps'             => ',<ps[^>]*>(.*?)</ps[^>]*>,ims',
    354                                 'auteur'         => ',<auteur[^>]*>(.*?)</auteur[^>]*>,ims',
    355                                 'link'           => ',<link[^>]*>(.*?)</link[^>]*>,ims',
    356                                 'trad'           => ',<trad[^>]*>(.*?)</trad[^>]*>,ims',
    357                                 'date'           => ',<date[^>]*>(.*?)</date[^>]*>,ims',
    358                                 'evenements'     => ',<evenements[^>]*>(.*?)</evenements[^>]*>,ims',
     556    include_spip("inc_filtres.php"); # pour filtrer_entites()
     557
     558    $xml_tags = array('surtitre','titre','soustitre','descriptif','chapo','texte','ps','auteur','link','trad','date','evenements', 'lang','logo','keyword','mots','licence','documents');
     559
     560    $syndic_regexp = array(
     561                'item'           => ',<item[>[:space:]],i',
     562                'itemfin'        => '</item>',
     563
     564                'surtitre'       => ',<surtitre[^>]*>(.*?)</surtitre[^>]*>,ims',
     565                'titre'          => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
     566                'soustitre'      => ',<soustitre[^>]*>(.*?)</soustitre[^>]*>,ims',
     567                'descriptif'     => ',<descriptif[^>]*>(.*?)</descriptif[^>]*>,ims',
     568                'chapo'          => ',<chapo[^>]*>(.*?)</chapo[^>]*>,ims',
     569                'texte'          => ',<texte[^>]*>(.*?)</texte[^>]*>,ims',
     570                'ps'             => ',<ps[^>]*>(.*?)</ps[^>]*>,ims',
     571                'auteur'         => ',<auteur[^>]*>(.*?)</auteur[^>]*>,ims',
     572                'link'           => ',<link[^>]*>(.*?)</link[^>]*>,ims',
     573                'trad'           => ',<trad[^>]*>(.*?)</trad[^>]*>,ims',
     574                'date'           => ',<date[^>]*>(.*?)</date[^>]*>,ims',
     575                'evenements'     => ',<evenements[^>]*>(.*?)</evenements[^>]*>,ims',
    359576        'lang'           => ',<lang[^>]*>(.*?)</lang[^>]*>,ims',
    360577        'logo'           => ',<logo[^>]*>(.*?)</logo[^>]*>,ims',
     
    363580        'licence'        => ',<licence[^>]*>(.*?)</licence[^>]*>,ims',
    364581        'documents'      => ',<documents[^>]*>(.*?)</documents[^>]*>,ims',
    365                
    366         );
    367        
    368         // documents
    369         $xml_doc_tags = array('id','url','titre','desc');       
    370         $document_regexp = array(               
    371                         'document'       => ',<document[>[:space:]],i',
    372                                 'documentfin'    => '</document>',
    373                
    374                                 'id'             => ',<id[^>]*>(.*?)</id[^>]*>,ims',
     582
     583    );
     584
     585    // documents
     586    $xml_doc_tags = array('id','url','titre','desc');
     587    $document_regexp = array(
     588            'document'       => ',<document[>[:space:]],i',
     589                'documentfin'    => '</document>',
     590
     591                'id'             => ',<id[^>]*>(.*?)</id[^>]*>,ims',
    375592        'url'            => ',<url[^>]*>(.*?)</url[^>]*>,ims',
    376                                 'titre'          => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
    377                                 'desc'           => ',<desc[^>]*>(.*?)</desc[^>]*>,ims',
    378         );
    379        
    380         // mots
    381         $xml_mot_tags = array('groupe','titre');       
    382         $mot_regexp = array(           
    383                         'mot'       => ',<mot[>[:space:]],i',
    384                                 'motfin'    => '</mot>',
    385                
    386                                 'groupe'    => ',<groupe[^>]*>(.*?)</groupe[^>]*>,ims',
    387                                 'titre'     => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
    388         );
    389        
    390         // evenements
    391         $xml_event_tags = array('datedeb','datefin','titre','desc','lieu','adresse','horaire','motevts');
    392         // on ne gere pas pour l'instant idevent/idsource qui permet de conserver la liaison des repetitions
    393        
    394         $evenement_regexp = array(             
    395                         'evenement'        => ',<evenement[>[:space:]],i',
    396                                 'evenementfin'     => '</evenement>',                           
     593                'titre'          => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
     594                'desc'           => ',<desc[^>]*>(.*?)</desc[^>]*>,ims',
     595    );
     596
     597    // mots
     598    $xml_mot_tags = array('groupe','titre');
     599    $mot_regexp = array(
     600            'mot'       => ',<mot[>[:space:]],i',
     601                'motfin'    => '</mot>',
     602
     603                'groupe'    => ',<groupe[^>]*>(.*?)</groupe[^>]*>,ims',
     604                'titre'     => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
     605    );
     606
     607    // evenements
     608    $xml_event_tags = array('datedeb','datefin','titre','desc','lieu','adresse','horaire','motevts');
     609    // on ne gere pas pour l'instant idevent/idsource qui permet de conserver la liaison des repetitions
     610
     611    $evenement_regexp = array(
     612            'evenement'        => ',<evenement[>[:space:]],i',
     613                'evenementfin'     => '</evenement>',
    397614        'datedeb'          => ',<datedeb[^>]*>(.*?)</datedeb[^>]*>,ims',
    398                                 'datefin'          => ',<datefin[^>]*>(.*?)</datefin[^>]*>,ims',
    399                                 'titre'            => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
    400                                 'desc'             => ',<desc[^>]*>(.*?)</desc[^>]*>,ims',
    401                                 'lieu'             => ',<lieu[^>]*>(.*?)</lieu[^>]*>,ims',
    402                                 'adresse'          => ',<adresse[^>]*>(.*?)</adresse[^>]*>,ims',
    403                                 'horaire'          => ',<horaire[^>]*>(.*?)</horaire[^>]*>,ims',
    404         'motevts'          => ',<motevts[^>]*>(.*?)</motevts[^>]*>,ims',                               
    405         );
    406        
     615                'datefin'          => ',<datefin[^>]*>(.*?)</datefin[^>]*>,ims',
     616                'titre'            => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
     617                'desc'             => ',<desc[^>]*>(.*?)</desc[^>]*>,ims',
     618                'lieu'             => ',<lieu[^>]*>(.*?)</lieu[^>]*>,ims',
     619                'adresse'          => ',<adresse[^>]*>(.*?)</adresse[^>]*>,ims',
     620                'horaire'          => ',<horaire[^>]*>(.*?)</horaire[^>]*>,ims',
     621        'motevts'          => ',<motevts[^>]*>(.*?)</motevts[^>]*>,ims',
     622    );
     623
    407624  $xml_motevt_tags = array('groupe','titre');
    408         $motevt_regexp = array(         
    409                         'motevt'       => ',<motevt[>[:space:]],i',
    410                                 'motevtfin'    => '</motevt>',
    411                
    412                                 'groupe'    => ',<groupe[^>]*>(.*?)</groupe[^>]*>,ims',
    413                                 'titre'     => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
    414         );
    415        
    416         // fichier backend correct ?
    417         if (!is_spip2spip_backend($rss)) return _T('spip2spip:avis_echec_syndication_01');
    418        
    419         // Echapper les CDATA
    420         $echappe_cdata = array();
    421         if (preg_match_all(',<!\[CDATA\[(.*)]]>,Uims', $rss,
    422         $regs, PREG_SET_ORDER)) {
    423                 foreach ($regs as $n => $reg) {
    424                         $echappe_cdata[$n] = $reg[1];
    425                         $rss = str_replace($reg[0], "@@@SPIP_CDATA$n@@@", $rss);
    426                 }
    427         }
    428        
     625    $motevt_regexp = array(
     626            'motevt'       => ',<motevt[>[:space:]],i',
     627                'motevtfin'    => '</motevt>',
     628
     629                'groupe'    => ',<groupe[^>]*>(.*?)</groupe[^>]*>,ims',
     630                'titre'     => ',<titre[^>]*>(.*?)</titre[^>]*>,ims',
     631    );
     632
     633    // fichier backend correct ?
     634    if (!is_spip2spip_backend($rss)) return _T('spip2spip:avis_echec_syndication_01');
     635
     636    // Echapper les CDATA
     637    $echappe_cdata = array();
     638    if (preg_match_all(',<!\[CDATA\[(.*)]]>,Uims', $rss,
     639    $regs, PREG_SET_ORDER)) {
     640        foreach ($regs as $n => $reg) {
     641            $echappe_cdata[$n] = $reg[1];
     642            $rss = str_replace($reg[0], "@@@SPIP_CDATA$n@@@", $rss);
     643        }
     644    }
     645
    429646  // supprimer les commentaires
    430         $rss = preg_replace(',<!--\s+.*\s-->,Ums', '', $rss);
    431        
    432         // multi (pas echappe)
    433         $rss = str_replace("&lt;multi&gt;",  "@@@MULTI@@@", $rss);
    434         $rss = str_replace("&lt;/multi&gt;",  "@@@MULTJ@@@", $rss);
    435        
    436         // lien interne  <- (pas echappe)
    437         $rss = str_replace("&lt;-",  "@@@LIEN_INV@@@", $rss);
    438        
    439         // version du flux
    440         $version_flux = 0;
    441         if (preg_match_all(',<spip2spip version="(.*?)">,Uims',$rss,$r, PREG_SET_ORDER))
    442         foreach ($r as $regs) {
    443            $version_flux  = (float) $regs[1];
     647    $rss = preg_replace(',<!--\s+.*\s-->,Ums', '', $rss);
     648
     649    // multi (pas echappe)
     650    $rss = str_replace("&lt;multi&gt;",  "@@@MULTI@@@", $rss);
     651    $rss = str_replace("&lt;/multi&gt;",  "@@@MULTJ@@@", $rss);
     652
     653    // lien interne  <- (pas echappe)
     654    $rss = str_replace("&lt;-",  "@@@LIEN_INV@@@", $rss);
     655
     656    // version du flux
     657    $version_flux = 0;
     658    if (preg_match_all(',<spip2spip version="(.*?)">,Uims',$rss,$r, PREG_SET_ORDER))
     659    foreach ($r as $regs) {
     660       $version_flux  = (float) $regs[1];
    444661  }
    445662  spip_log("spip2spip - version flux: $version_flux");
    446        
    447         // analyse de chaque item
    448         $items = array();
    449         if (preg_match_all($syndic_regexp['item'],$rss,$r, PREG_SET_ORDER))
    450         foreach ($r as $regs) {
    451                 $debut_item = strpos($rss,$regs[0]);
    452                 $fin_item = strpos($rss,
    453                 $syndic_regexp['itemfin'])+strlen($syndic_regexp['itemfin']);
    454                 $items[] = substr($rss,$debut_item,$fin_item-$debut_item);
    455                 $debut_texte = substr($rss, "0", $debut_item);
    456                 $fin_texte = substr($rss, $fin_item, strlen($rss));
    457                 $rss = $debut_texte.$fin_texte;
    458         }
    459 
    460         // Analyser chaque <item>...</item> du backend et le transformer en tableau
    461         if (!count($items)) return _T('spip2spip:avis_echec_syndication_01');
    462        
    463         foreach ($items as $item) {
    464          
    465                 $data = array();
    466    
    467                 // Date
    468                 /* Pas trop compris cette partie, mais cela gènait l'import de la date de l'article (si cette methode est choisie). Je commente donc et présuppose que la date du RSS est bonne.
    469                 $la_date = "";
    470                 if (preg_match(",<date>([^<]*)</date>,Uims",$item,$match))              $la_date = $match[1];
    471                 if ($la_date)           $la_date = my_strtotime($la_date);
    472                 if ($la_date < time() - 365 * 24 * 3600 OR $la_date > time() + 48 * 3600)               $la_date = time();
    473                 $data['date'] = $la_date;
    474                 */
    475                 // version du flux
    476                 $data['version_flux'] = $version_flux;
    477                        
    478                 // Recuperer les autres tags du xml
    479                 foreach ($xml_tags as $xml_tag) {                 
    480                   if (preg_match($syndic_regexp[$xml_tag],$item,$match)) $data[$xml_tag] = $match[1];
    481                                                                               else $data[$xml_tag] = "";
    482     }   
    483    
     663
     664    // analyse de chaque item
     665    $items = array();
     666    if (preg_match_all($syndic_regexp['item'],$rss,$r, PREG_SET_ORDER))
     667    foreach ($r as $regs) {
     668        $debut_item = strpos($rss,$regs[0]);
     669        $fin_item = strpos($rss,
     670        $syndic_regexp['itemfin'])+strlen($syndic_regexp['itemfin']);
     671        $items[] = substr($rss,$debut_item,$fin_item-$debut_item);
     672        $debut_texte = substr($rss, "0", $debut_item);
     673        $fin_texte = substr($rss, $fin_item, strlen($rss));
     674        $rss = $debut_texte.$fin_texte;
     675    }
     676
     677    // Analyser chaque <item>...</item> du backend et le transformer en tableau
     678    if (!count($items)) return _T('spip2spip:avis_echec_syndication_01');
     679
     680    foreach ($items as $item) {
     681
     682        $data = array();
     683
     684        // Date
     685        /* Pas trop compris cette partie, mais cela gènait l'import de la date de l'article (si cette methode est choisie). Je commente donc et présuppose que la date du RSS est bonne.
     686        $la_date = "";
     687        if (preg_match(",<date>([^<]*)</date>,Uims",$item,$match))      $la_date = $match[1];
     688        if ($la_date)       $la_date = my_strtotime($la_date);
     689        if ($la_date < time() - 365 * 24 * 3600 OR $la_date > time() + 48 * 3600)       $la_date = time();
     690        $data['date'] = $la_date;
     691        */
     692        // version du flux
     693        $data['version_flux'] = $version_flux;
     694
     695        // Recuperer les autres tags du xml
     696        foreach ($xml_tags as $xml_tag) {
     697          if (preg_match($syndic_regexp[$xml_tag],$item,$match)) $data[$xml_tag] = $match[1];
     698                                                              else $data[$xml_tag] = "";
     699    }
     700
    484701    // On parse le noeud documents
    485     if ($data['documents'] != "") {       
     702    if ($data['documents'] != "") {
    486703          $documents = array();
    487704          if (preg_match_all($document_regexp['document'],$data['documents'],$r2, PREG_SET_ORDER))
    488                 foreach ($r2 as $regs) {
    489                         $debut_item = strpos($data['documents'],$regs[0]);
    490                         $fin_item = strpos($data['documents'],
    491                         $document_regexp['documentfin'])+strlen($document_regexp['documentfin']);
    492                         $documents[] = substr($data['documents'],$debut_item,$fin_item-$debut_item);
    493                         $debut_texte = substr($data['documents'], "0", $debut_item);
    494                         $fin_texte = substr($data['documents'], $fin_item, strlen($data['documents']));
    495                         $data['documents'] = $debut_texte.$fin_texte;
     705            foreach ($r2 as $regs) {
     706                $debut_item = strpos($data['documents'],$regs[0]);
     707                $fin_item = strpos($data['documents'],
     708                $document_regexp['documentfin'])+strlen($document_regexp['documentfin']);
     709                $documents[] = substr($data['documents'],$debut_item,$fin_item-$debut_item);
     710                $debut_texte = substr($data['documents'], "0", $debut_item);
     711                $fin_texte = substr($data['documents'], $fin_item, strlen($data['documents']));
     712                $data['documents'] = $debut_texte.$fin_texte;
    496713          }
    497          
     714
    498715          $portfolio = array();
    499           if (count($documents)) {         
    500               foreach ($documents as $document) {                 
     716          if (count($documents)) {
     717              foreach ($documents as $document) {
    501718                 $data_node = array();
    502719                 foreach ($xml_doc_tags as $xml_doc_tag) {
    503                     if (preg_match($document_regexp[$xml_doc_tag],$document,$match)) $data_node[$xml_doc_tag] = $match[1]; 
    504                                                                                                       else $data_node[$xml_doc_tag] = "";
    505                                        }
    506                 $portfolio[] = $data_node;                                                     
    507               }             
     720                    if (preg_match($document_regexp[$xml_doc_tag],$document,$match)) $data_node[$xml_doc_tag] = $match[1];
     721                                                                                      else $data_node[$xml_doc_tag] = "";
     722                       }
     723                $portfolio[] = $data_node;
     724              }
    508725              $data['documents'] =  serialize($portfolio);
    509           }       
     726          }
    510727    } # noeud documents
    511        
    512 
    513           // On parse le noeud evenement
     728
     729
     730      // On parse le noeud evenement
    514731    if ($data['evenements'] != "") {
    515732          $evenements = array();
    516733          if (preg_match_all($evenement_regexp['evenement'],$data['evenements'],$r3, PREG_SET_ORDER))
    517                 foreach ($r3 as $regs) {
    518                         $debut_item = strpos($data['evenements'],$regs[0]);
    519                         $fin_item = strpos($data['evenements'],$evenement_regexp['evenementfin'])+strlen($evenement_regexp['evenementfin']);
    520                         $evenements[] = substr($data['evenements'],$debut_item,$fin_item-$debut_item);
    521                         $debut_texte = substr($data['evenements'], "0", $debut_item);
    522                         $fin_texte = substr($data['evenements'], $fin_item, strlen($data['evenements']));
    523                         $data['evenements'] = $debut_texte.$fin_texte;                         
     734            foreach ($r3 as $regs) {
     735                $debut_item = strpos($data['evenements'],$regs[0]);
     736                $fin_item = strpos($data['evenements'],$evenement_regexp['evenementfin'])+strlen($evenement_regexp['evenementfin']);
     737                $evenements[] = substr($data['evenements'],$debut_item,$fin_item-$debut_item);
     738                $debut_texte = substr($data['evenements'], "0", $debut_item);
     739                $fin_texte = substr($data['evenements'], $fin_item, strlen($data['evenements']));
     740                $data['evenements'] = $debut_texte.$fin_texte;
    524741          }
    525          
     742
    526743          $agenda = array();
    527           if (count($evenements)) {         
    528               foreach ($evenements as $evenement) {                 
    529                  
     744          if (count($evenements)) {
     745              foreach ($evenements as $evenement) {
     746
    530747                 $data_node = array();
    531748                 foreach ($xml_event_tags as $xml_event_tag) {
    532                     if (preg_match($evenement_regexp[$xml_event_tag],$evenement,$match)) $data_node[$xml_event_tag] = $match[1]; 
    533                                                                                                       else $data_node[$xml_event_tag] = "";
    534                                        }
    535                  
     749                    if (preg_match($evenement_regexp[$xml_event_tag],$evenement,$match)) $data_node[$xml_event_tag] = $match[1];
     750                                                                                      else $data_node[$xml_event_tag] = "";
     751                       }
     752
    536753                 // bug lieu et desc  (suite au p)
    537                  $data_node['lieu'] = strip_tags(html_entity_decode($data_node['lieu'])); 
     754                 $data_node['lieu'] = strip_tags(html_entity_decode($data_node['lieu']));
    538755                 $data_node['desc'] = strip_tags(html_entity_decode($data_node['desc']));
    539                                                                                
    540                                        // On parse le noeud motevt (mot evenement) ?
    541                                        if ($data_node['motevts'] != "") {                             
    542                         $motevts = array(); 
     756
     757                       // On parse le noeud motevt (mot evenement) ?
     758                       if ($data_node['motevts'] != "") {
     759                        $motevts = array();
    543760                        if (preg_match_all($motevt_regexp['motevt'],$data_node['motevts'],$r2, PREG_SET_ORDER))
    544761                        foreach ($r2 as $regs) {
    545                                         $debut_item = strpos($data_node['motevts'],$regs[0]);
    546                                         $fin_item = strpos($data_node['motevts'],
    547                                         $motevt_regexp['motevtfin'])+strlen($motevt_regexp['motevtfin']);
    548                                         $motevts[] = substr($data_node['motevts'],$debut_item,$fin_item-$debut_item);                                   
    549                                         $debut_texte = substr($data_node['motevts'], "0", $debut_item);
    550                                         $fin_texte = substr($data_node['motevts'], $fin_item, strlen($data_node['motevts']));
    551                                         $data_node['motevts'] = $debut_texte.$fin_texte;
     762                                $debut_item = strpos($data_node['motevts'],$regs[0]);
     763                                $fin_item = strpos($data_node['motevts'],
     764                                $motevt_regexp['motevtfin'])+strlen($motevt_regexp['motevtfin']);
     765                                $motevts[] = substr($data_node['motevts'],$debut_item,$fin_item-$debut_item);
     766                                $debut_texte = substr($data_node['motevts'], "0", $debut_item);
     767                                $fin_texte = substr($data_node['motevts'], $fin_item, strlen($data_node['motevts']));
     768                                $data_node['motevts'] = $debut_texte.$fin_texte;
    552769                        }
    553                        
    554                         $motcleevt = array();                         
    555                         if (count($motevts)) {         
    556                             foreach ($motevts as $motevt) {                 
     770
     771                        $motcleevt = array();
     772                        if (count($motevts)) {
     773                            foreach ($motevts as $motevt) {
    557774                               $data_node_evt = array();
    558775                               foreach ($xml_motevt_tags as $xml_motevt_tag) {
    559                                   if (preg_match($motevt_regexp[$xml_motevt_tag],$motevt,$match)) $data_node_evt[$xml_motevt_tag] = $match[1]; 
    560                                                                                                               else $data_node_evt[$xml_motevt_tag] = "";
    561                                                        }
    562                               $motcleevt[] = $data_node_evt;                 
     776                                  if (preg_match($motevt_regexp[$xml_motevt_tag],$motevt,$match)) $data_node_evt[$xml_motevt_tag] = $match[1];
     777                                                                                              else $data_node_evt[$xml_motevt_tag] = "";
     778                                       }
     779                              $motcleevt[] = $data_node_evt;
    563780                            }
    564                             $data_node['motevts'] = $motcleevt;                           
    565                         }       
    566                  }                                     
    567                                        // #noeud motevt
    568                                        
    569                 $agenda[] = $data_node;                                                     
    570               } 
    571      
    572               $data['evenements'] =  base64_encode(serialize($agenda));  // astuce php.net 
    573           }       
     781                            $data_node['motevts'] = $motcleevt;
     782                        }
     783                 }
     784                       // #noeud motevt
     785
     786                $agenda[] = $data_node;
     787              }
     788
     789              $data['evenements'] =  base64_encode(serialize($agenda));  // astuce php.net
     790          }
    574791    } #noeud evenements
    575    
    576     // On parse le noeud mots   
    577     if ($data['mots'] != "") {       
    578           $mots = array();         
     792
     793    // On parse le noeud mots
     794    if ($data['mots'] != "") {
     795          $mots = array();
    579796          if (preg_match_all($mot_regexp['mot'],$data['mots'],$r2, PREG_SET_ORDER))
    580                 foreach ($r2 as $regs) {
    581                         $debut_item = strpos($data['mots'],$regs[0]);
    582                         $fin_item = strpos($data['mots'],
    583                         $mot_regexp['motfin'])+strlen($mot_regexp['motfin']);
    584                         $mots[] = substr($data['mots'],$debut_item,$fin_item-$debut_item);                     
    585                         $debut_texte = substr($data['mots'], "0", $debut_item);
    586                         $fin_texte = substr($data['mots'], $fin_item, strlen($data['mots']));
    587                         $data['mots'] = $debut_texte.$fin_texte;                       
     797            foreach ($r2 as $regs) {
     798                $debut_item = strpos($data['mots'],$regs[0]);
     799                $fin_item = strpos($data['mots'],
     800                $mot_regexp['motfin'])+strlen($mot_regexp['motfin']);
     801                $mots[] = substr($data['mots'],$debut_item,$fin_item-$debut_item);
     802                $debut_texte = substr($data['mots'], "0", $debut_item);
     803                $fin_texte = substr($data['mots'], $fin_item, strlen($data['mots']));
     804                $data['mots'] = $debut_texte.$fin_texte;
    588805          }
    589          
     806
    590807          $motcle = array();
    591           if (count($mots)) {         
    592               foreach ($mots as $mot) {                 
     808          if (count($mots)) {
     809              foreach ($mots as $mot) {
    593810                 $data_node = array();
    594811                 foreach ($xml_mot_tags as $xml_mot_tag) {
    595                     if (preg_match($mot_regexp[$xml_mot_tag],$mot,$match)) $data_node[$xml_mot_tag] = $match[1]; 
    596                                                                                             else $data_node[$xml_mot_tag] = "";
    597                                        }
    598                 $motcle[] = $data_node;                         
    599               }             
    600               $data['mots'] =  serialize($motcle);             
    601           }       
    602     }   #noeud mots
    603          
    604          
    605                 // Nettoyer les donnees et remettre les CDATA et multi en place
    606                 foreach ($data as $var => $val) {
    607                         $data[$var] = filtrer_entites($data[$var]);
    608                         foreach ($echappe_cdata as $n => $e)
    609                                 $data[$var] = str_replace("@@@SPIP_CDATA$n@@@",$e, $data[$var]);
    610         if (!defined("_SPIP2SPIP_IMPORT_HTML")) $data[$var] = trim(textebrut($data[$var]));  // protection import HTML                                         
    611         $data[$var] = str_replace("@@@MULTI@@@", "<multi>", $data[$var]);
    612             $data[$var] = str_replace("@@@MULTJ@@@", "</multi>", $data[$var]);
    613         $data[$var] = str_replace("@@@LIEN_INV@@@", "<-", $data[$var]); 
    614                 }
    615 
    616                 //$data['item'] = $item;  //utile pour spip2spip ?             
    617                 $articles[] = $data;   
    618         }
    619  
     812                    if (preg_match($mot_regexp[$xml_mot_tag],$mot,$match)) $data_node[$xml_mot_tag] = $match[1];
     813                                                                            else $data_node[$xml_mot_tag] = "";
     814                       }
     815                $motcle[] = $data_node;
     816              }
     817              $data['mots'] =  serialize($motcle);
     818          }
     819    }   #noeud mots
     820
     821
     822        // Nettoyer les donnees et remettre les CDATA et multi en place
     823        foreach ($data as $var => $val) {
     824            $data[$var] = filtrer_entites($data[$var]);
     825            foreach ($echappe_cdata as $n => $e)
     826                $data[$var] = str_replace("@@@SPIP_CDATA$n@@@",$e, $data[$var]);
     827        if (!defined("_SPIP2SPIP_IMPORT_HTML")) $data[$var] = trim(textebrut($data[$var]));  // protection import HTML
     828        $data[$var] = str_replace("@@@MULTI@@@", "<multi>", $data[$var]);
     829        $data[$var] = str_replace("@@@MULTJ@@@", "</multi>", $data[$var]);
     830        $data[$var] = str_replace("@@@LIEN_INV@@@", "<-", $data[$var]);
     831        }
     832
     833        //$data['item'] = $item;  //utile pour spip2spip ?
     834        $articles[] = $data;
     835    }
     836
    620837  return $articles;
    621838}
     
    627844//
    628845// recuperer id_rubrique (normalement uniquement) lié à un mot
    629 function spip2spip_get_id_rubrique($mot) {   
     846function spip2spip_get_id_rubrique($mot) {
    630847    $id_group_spip2spip = spip2spip_get_id_groupemot("- spip2spip -");
    631     $result = sql_select("id_mot","spip_mots", array( 
     848    $result = sql_select("id_mot","spip_mots", array(
    632849                                              "titre = ".sql_quote($mot),
    633850                                              "id_groupe = '$id_group_spip2spip'"));
    634     while ($row = sql_fetch($result)) { 
     851    while ($row = sql_fetch($result)) {
    635852        $id_mot = (int) $row['id_mot'];
    636         if ($row2 = sql_fetsel("id_objet","spip_mots_liens","objet='rubrique' AND id_mot='$id_mot'")) 
     853        if ($row2 = sql_fetsel("id_objet","spip_mots_liens","objet='rubrique' AND id_mot='$id_mot'"))
    637854               return $row2['id_objet'];
    638                
     855
    639856    }
    640857    return false;
     
    643860//
    644861// recupère id d'un groupe de mots-clés
    645 function spip2spip_get_id_groupemot($titre) { 
    646    if ($row = sql_fetsel("id_groupe","spip_groupes_mots","titre=".sql_quote($titre))) 
     862function spip2spip_get_id_groupemot($titre) {
     863   if ($row = sql_fetsel("id_groupe","spip_groupes_mots","titre=".sql_quote($titre)))
    647864               return $row['id_groupe'];
    648    return false; 
     865   return false;
    649866}
    650867
    651868//
    652869// recupère id d'un mot
    653 function spip2spip_get_id_mot($titre) { 
    654    if ($row = sql_fetsel("id_mot","spip_mots","titre=".sql_quote($titre))) 
    655                return $row['id_mot']; 
    656    return false; 
     870function spip2spip_get_id_mot($titre) {
     871   if ($row = sql_fetsel("id_mot","spip_mots","titre=".sql_quote($titre)))
     872               return $row['id_mot'];
     873   return false;
    657874}
    658875
    659876//
    660877// recupère id du secteur
    661 function spip2spip_get_id_secteur($id_rubrique) { 
    662    if ($row = sql_fetsel("id_secteur","spip_rubriques","id_rubrique=$id_rubrique")) 
    663                return $row['id_secteur']; 
    664    return 0; 
     878function spip2spip_get_id_secteur($id_rubrique) {
     879   if ($row = sql_fetsel("id_secteur","spip_rubriques","id_rubrique=$id_rubrique"))
     880               return $row['id_secteur'];
     881   return 0;
    665882}
    666883
    667884//
    668885// recupere id d'un auteur selon son nom sinon le creer
    669 function spip2spip_get_id_auteur($name) { 
    670    if (trim($name)=="") 
     886function spip2spip_get_id_auteur($name) {
     887   if (trim($name)=="")
    671888              return false;
    672    if ($row = sql_fetsel("id_auteur","spip_auteurs","nom=".sql_quote($name))) 
    673               return $row['id_auteur']; 
    674 
    675     // auteur inconnu, on le cree ... 
     889   if ($row = sql_fetsel("id_auteur","spip_auteurs","nom=".sql_quote($name)))
     890              return $row['id_auteur'];
     891
     892    // auteur inconnu, on le cree ...
    676893    return sql_insertq('spip_auteurs',array('nom'=>$name,'statut'=>'1comite'));
    677894}
     
    683900   if ($mode_creer_groupe) {
    684901        // groupe existe ?
    685         if ($row = sql_fetsel("id_groupe","spip_groupes_mots","titre=".sql_quote($groupe_titre))) { 
     902        if ($row = sql_fetsel("id_groupe","spip_groupes_mots","titre=".sql_quote($groupe_titre))) {
    686903              $id_groupe = $row['id_groupe'];
    687904        } else {
    688905            $id_groupe = sql_insertq('spip_groupes_mots',array(
    689                                       'titre'=> $groupe_titre, 
    690                                       'tables_liees'=> $objet_lie."s", 
     906                                      'titre'=> $groupe_titre,
     907                                      'tables_liees'=> $objet_lie."s",
    691908                                      'minirezo' => 'oui',
    692909                                      'comite' => 'oui',
    693910                                      'forum' => 'non'));
    694911        }
    695        
    696    }           
    697      
    698    if ($id_groupe>0){                   
     912
     913   }
     914
     915   if ($id_groupe>0){
    699916        // mot existe ?
    700         if ($row = sql_fetsel("id_mot","spip_mots","titre=".sql_quote($mot_titre)." AND id_groupe=".intval($id_groupe))) { 
     917        if ($row = sql_fetsel("id_mot","spip_mots","titre=".sql_quote($mot_titre)." AND id_groupe=".intval($id_groupe))) {
    701918              $id_mot = $row['id_mot'];
    702919        } else {
    703               if ($row = sql_fetsel("titre","spip_groupes_mots","id_groupe=".intval($id_groupe))) 
     920              if ($row = sql_fetsel("titre","spip_groupes_mots","id_groupe=".intval($id_groupe)))
    704921                          $type = $row['titre'];
    705922              $id_mot = sql_insertq('spip_mots',array(
    706                                       'titre'=> $mot_titre, 
    707                                       'id_groupe'=> intval($id_groupe), 
    708                                       'type' => $type));                                     
     923                                      'titre'=> $mot_titre,
     924                                      'id_groupe'=> intval($id_groupe),
     925                                      'type' => $type));
    709926        }
    710            
     927
    711928        sql_insertq("spip_mots_liens", array(
    712                                       'id_mot'   => intval($id_mot), 
     929                                      'id_mot'   => intval($id_mot),
    713930                                      'id_objet' => intval($id_objet),
    714931                                      'objet' => $objet_lie
    715932                                      ));
    716                    
     933
    717934   } else {
    718935      spip_log("spip2spip pas de groupe-clé import specifie");
     
    720937
    721938}
    722 
     939// insérer nouvelle thématique du flux
     940function spip2spip_set_thematique($titre)
     941{
     942    $id_group_spip2spip = spip2spip_get_id_groupemot("- spip2spip -");
     943    $mot = sql_fetsel(
     944        'id_mot',
     945        'spip_mots',
     946        'id_groupe='
     947        . intval($id_group_spip2spip)
     948        . " AND titre="
     949        . sql_quote($titre));
     950    if (!$mot) {
     951        $thematique_cree = sql_insertq(
     952            'spip_mots',
     953            array(
     954                'titre' => $titre,
     955                'id_groupe' => $id_group_spip2spip
     956            )
     957            );
     958        return $thematique_cree;
     959    } else {
     960        return $mot['id_mot'];
     961    }
     962}
    723963
    724964// -----------------------
    725 // Fonctions de formatage 
     965// Fonctions de formatage
    726966// -----------------------
    727967
     
    730970// restaure le formatage des extra
    731971function spip2spip_convert_extra($texte,$documents,$version_flux=1.6) {
    732         $texte = spip2spip_convert_ln($texte,$version_flux);
    733         $texte = spip2spip_convert_img($texte,$documents);
    734         return $texte;
     972    $texte = spip2spip_convert_ln($texte,$version_flux);
     973    $texte = spip2spip_convert_img($texte,$documents);
     974    return $texte;
    735975}
    736976
     
    740980  $texte_avt_regex = $texte;
    741981  krsort($documents);
    742         foreach($documents as $k=>$val) {       
    743            $texte = preg_replace("/__IMG$k(.*?)__/i", "<img$val$1>",$texte);
    744            // 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)
    745            if ($texte_avt_regex != $texte) spip2spip_update_mode_document($val,'image');
    746            
    747            // autre mise a jour non image
    748            $texte = preg_replace("/__DOC$k(.*?)__/i", "<doc$val$1>",$texte);
    749            
    750      $texte_avt_regex = $texte;   
    751   }     
    752  
     982    foreach($documents as $k=>$val) {
     983       $texte = preg_replace("/__IMG$k(.*?)__/i", "<img$val$1>",$texte);
     984       // 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)
     985       if ($texte_avt_regex != $texte) spip2spip_update_mode_document($val,'image');
     986
     987       // autre mise a jour non image
     988       $texte = preg_replace("/__DOC$k(.*?)__/i", "<doc$val$1>",$texte);
     989
     990     $texte_avt_regex = $texte;
     991  }
     992
    753993  //$texte = preg_replace("/__(IMG|DOC)(.*?)__/i", "",$texte); // nettoyage des codes qui resteraient eventuellement
    754994  $texte = preg_replace("/__(.*?)__/i", "",$texte); // expression plus large (pour prevoir la compatabilite future si ajout d'autres extras)
    755         return $texte;
     995    return $texte;
    756996}
    757997
     
    759999// restaure le formatage des ln
    7601000function spip2spip_convert_ln($texte,$version_flux=1.6) {
    761   if ($version_flux<1.7)        $texte = str_replace("__LN__","\n\n",$texte);
    762                   else    $texte = str_replace("__LN__","\n",$texte); 
    763         return $texte;
     1001  if ($version_flux<1.7)    $texte = str_replace("__LN__","\n\n",$texte);
     1002                  else    $texte = str_replace("__LN__","\n",$texte);
     1003    return $texte;
    7641004}
    7651005
    7661006//
    7671007// change le mode (vignette/document/) du document
    768 function spip2spip_update_mode_document($id_document,$mode="vignette") { 
     1008function spip2spip_update_mode_document($id_document,$mode="vignette") {
    7691009   sql_updateq('spip_documents', array("mode"=>$mode), "id_document=$id_document");
    7701010}
  • _plugins_/spip2spip/trunk/lang/spip2spip_fr.php

    r82058 r82824  
    1313  'avis_echec_syndication' => 'Erreur: Impossible de charger le flux',
    1414  'avis_echec_syndication_01' => 'Erreur: Flux mal formé',
    15    
     15
    1616  // B
    1717  'back' => 'retour',
    18  
     18
    1919  // C
    2020  'copy_spip2spip' => 'Spip2Spip: Copie SPIP &agrave; SPIP',
    2121  'config_spip2spip' => 'Configurer',
    22   'cfg_import_statut'=> 'Statut des articles import&eacute;s', 
     22  'cfg_import_statut'=> 'Statut des articles import&eacute;s',
    2323  'cfg_email_alerte'=> 'Pr&eacute;venir par email à chaque nouvelle syndication ?',
    2424  'cfg_email_suivi' => 'Si oui, sur quel email ?',
    2525  'cfg_citer_source' => 'Citer l\'URL de l\'article d\'origine dans l\'article import&eacute;',
     26  'cfg_creer_thematique_article' => 'Les thématiques du site SPIP2SPIP',
     27  'cfg_creer_thematique_article_explication' => 'Si la thématique d\'un article est inexistante, que faire ?',
     28  'cfg_creer_thematique_article_non' => 'Un des administrateurs le créera manuellement.',
     29  'cfg_creer_thematique_article_oui' => 'Créer automatiquement le mot-clé correspondant.',
    2630  'cfg_export' => 'Export des articles',
    2731  'cfg_export_motcle' => 'Export des mots-clés',
     
    4145  'cfg_intervalle_cron' => 'Intervalle de passage du CRON (en minutes)',
    4246  'cfg_titre_parametrages' => 'Options d\'import et d\'export des articles d\'un réseau Spip2spip',
    43  
     47
    4448  // E
    4549  'erreur_obligatoire' => 'Champ obligatoire',
    4650  'erreur_flux_inconnu' => 'Impossible de charger ce flux',
    47  
     51
    4852  // F
    4953  'form_s2s_1' => 'Titre du site',
    5054  'form_s2s_2' => 'URL du fil au format SPIP2SPIP',
    5155  'form_s2s_3' => 'Ajouter ce site',
    52  
     56
    5357  // H
    5458  'how_to' => 'Pensez &agrave; bien attribuer les mots-cl&eacute;s du groupe - spip2spip - [<a href=\'?exec=mots\'>Voir le groupe</a>]<br /><br />
    5559  - attribuez les mots cl&eacute;s de ce groupe aux <strong>articles</strong> dont vous voulez envoyer le contenu vers les autres spip2spip<br /><br />
    5660  - attribuez les mots cl&eacute;s de ce groupe aux <strong>rubriques</strong> dans lequelles vous voulez importer les articles spip2spip li&eacute;s &agrave; une th&eacute;matique donn&eacute;e.',
    57  
     61
    5862  // I
    5963  'icone_creer_spip2spip' => 'Ajouter un site spip2spip',
    60         'icone_modifier_spip2spip' => 'Modifier ce site spip2spip',
     64  'icone_modifier_spip2spip' => 'Modifier ce site spip2spip',
    6165  'intro_spip2spip' => 'Permet de recopier automatiquement des articles d\'un SPIP &agrave; l\'autre.',
    6266  'install_spip2spip' => 'Installation des tables de spip2spip',
     
    7781  'info_aucun_spip2spip' => 'Aucun site actuellement enregistré',
    7882  'icone_creer_spip2spipicone_creer_spip2spip' => 'Ajouter un nouveau site Spip2spip',
    79  
     83
    8084  // L
    8185  'label_site_titre' => 'Nom du site',
     
    8387  'label_maj' => 'Dernière synchronisation',
    8488  'label_log' => 'Rapport de syndication',
    85  
     89  'label_thematique' => 'Thématique',
     90
    8691  // M
    8792  'maj' => 'Derni&egrave;re syndication',
    88  
     93
    8994  // N
    9095  'no_target' => 'aucune rubrique li&eacute;e &agrave; ce mot cl&eacute;',
    9196  'not_installed' => 'spip2spip n\'est pas encore install&eacute;.<p><a href=\'?exec=spip2spip_install\'>installer spip2spip</a></p>',
    92  
     97
    9398  // O
    9499  'origin_url' => 'L\'adresse originale de cet article est',
    95  
     100
    96101  // R
    97102  'retour_spip2spip' => 'Retour',
    98  
    99  
     103
     104
    100105  // T
    101106  'titre' => 'Spip2Spip',
     
    104109  'titre_page_configurer_spip2spip' => 'Spip2Spip',
    105110  'titre_mail' => 'Syndication automatique SPIP2SPIP',
    106  
     111  'titre_logo_spip2spip' => 'Logo du site SPIP2SPIP',
     112
     113  // V
     114  'voir_thematique' => 'Voir le mot-clé',
     115
    107116);
    108117
  • _plugins_/spip2spip/trunk/paquet.xml

    r82058 r82824  
    22        prefix="spip2spip"
    33        categorie="edition"
    4         version="3.0.2"
     4        version="3.0.3"
    55        etat="stable"
    66        compatibilite="[3.0.5;3.0.*]"
    77        logo="prive/themes/spip/images/spip2spip-32.png"
    88        documentation="http://contrib.spip.net/Spip2Spip"
    9         schema="1.2.0" 
    10 >
     9        schema="1.2.0"
     10        >
    1111
    1212        <nom>Spip2Spip</nom>
    1313        <auteur lien='http://www.erational.org'>erational</auteur>
    14   <licence>GNU/GPL</licence>
     14        <licence>GNU/GPL</licence>
    1515
    16         <necessite nom="saisies" compatibilite="[1.24.0;]" /> 
     16        <necessite nom="saisies" compatibilite="[1.24.0;]" />
    1717
    18         <pipeline nom="declarer_tables_objets_sql" inclure="base/spip2spip.php" /> 
     18        <pipeline nom="declarer_tables_objets_sql" inclure="base/spip2spip.php" />
    1919        <pipeline nom="declarer_tables_interfaces" inclure="base/spip2spip.php" />
    20   <pipeline nom="taches_generales_cron" inclure="spip2spip_pipelines.php" />
     20        <pipeline nom="taches_generales_cron" inclure="spip2spip_pipelines.php" />
     21        <pipeline nom="header_prive" inclure="spip2spip_pipelines.php" />
    2122
    22         <menu nom="spip2spips" titre="spip2spip:titre_spip2spips" parent="menu_edition" icone="images/spip2spip-16.png" action="spip2spips" /> 
     23        <menu nom="spip2spips" titre="spip2spip:titre_spip2spips" parent="menu_edition" icone="images/spip2spip-16.png" action="spip2spips" />
    2324</paquet>
  • _plugins_/spip2spip/trunk/prive/objets/contenu/spip2spip.html

    r69886 r82824  
    1 <BOUCLE_spip2spip(SPIP2SPIPS){id_spip2spip}>
     1<BOUCLE_spip2spip (SPIP2SPIPS){id_spip2spip}>
    22
    33[<div class="champ contenu_site_rss[ (#SITE_RSS*|strlen|?{'',vide})]">
    4         <label style="font-weight:bold;display:block;margin-top:1em;"><:spip2spip:label_site_rss:> : </label>
     4        <span class="label visible"><:spip2spip:label_site_rss:> : </span>
    55        <span dir='#LANG_DIR' class='#EDIT{site_rss} site_rss'><a href="#SITE_RSS">(#SITE_RSS)</a></span>
    66</div>]
    77
    88[<div class="champ contenu_maj[ (#MAJ*|strlen|?{'',vide})]">
    9         <label style="font-weight:bold;display:block;margin-top:1em;"><:spip2spip:label_maj:> : </label>
     9        <span class="label visible"><:spip2spip:label_maj:> : </span>
    1010        <span dir='#LANG_DIR' class='maj'>
    1111      <a href="#SELF"><img src="[(#CHEMIN{themes/spip/images/cache-empty-16.png})]" alt="<:spip2spip:action_syndic:>"/></a>
     
    1414
    1515[<div class="champ contenu_log">
    16   <label style="font-weight:bold;display:block;margin-top:1em;"><:spip2spip:label_log:> : </label>
    17   <div  style="background:#eaeaea;padding:15px;margin:1em 0;line-height:200%;">
    18       (#ID_SPIP2SPIP|spip2spip_syndiquer_manuel) 
     16  <span class="label visible"><:spip2spip:label_log:> : </span>
     17  <div class="liste articles">
     18      (#ID_SPIP2SPIP|spip2spip_syndiquer_manuel)
    1919  </div>
    2020</div>]
  • _plugins_/spip2spip/trunk/spip2spip_pipelines.php

    r82058 r82824  
    1010
    1111// les taches crons
    12 function spip2spip_taches_generales_cron($taches_generales){   
    13         //Recuperation de la configuration
    14         $conf = @unserialize($GLOBALS['meta']['spip2spip']);
    15         if(is_array($conf) AND intval($conf['intervalle_cron']) > 1){
    16                 $taches_generales['spip2spip_syndic'] = 60 * intval($conf['intervalle_cron']);
    17         }else{
    18                 $taches_generales['spip2spip_syndic'] = 60*5;  // tous les 5 min par defaut
    19         }       
    20         return $taches_generales;
     12function spip2spip_taches_generales_cron($taches_generales)
     13{
     14    //Recuperation de la configuration
     15    $conf = @unserialize($GLOBALS['meta']['spip2spip']);
     16    if (is_array($conf) and intval($conf['intervalle_cron']) > 1) {
     17        $taches_generales['spip2spip_syndic'] = 60 * intval($conf['intervalle_cron']);
     18    } else {
     19        $taches_generales['spip2spip_syndic'] = 60*5;  // tous les 5 min par defaut
     20    }
     21    return $taches_generales;
     22}
     23
     24/**
     25 * Ajouter des éléments dans le header du privé.
     26 *
     27 * @param  string $flux
     28 * @return string
     29 */
     30function spip2spip_header_prive($flux)
     31{
     32
     33    $page_exec = array('spip2spip', 'spip2spips');
     34
     35    if (in_array(_request('exec'), $page_exec)) {
     36        $flux .= '<link rel="stylesheet" href="'
     37        . find_in_path('prive/themes/spip/style_prive_spip2spip.css')
     38        . '" type="text/css" media="all" />';
     39    }
     40
     41    return $flux;
    2142}
    2243
Note: See TracChangeset for help on using the changeset viewer.