Changeset 108456 in spip-zone


Ignore:
Timestamp:
Jan 11, 2018, 7:00:23 PM (16 months ago)
Author:
booz@…
Message:

gerer les arborescences

Location:
_plugins_/convertisseur/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/convertisseur/trunk/inc/convertisseur.php

    r107728 r108456  
    561561                        AND aut.id_auteur=".$id_auteur
    562562                        );
    563                
     563       
    564564        if ($t = spip_fetch_array($s)) {
    565565                $id_article = $t['id_article'];
  • _plugins_/convertisseur/trunk/spip-cli/convertisseurImporter.php

    r108449 r108456  
    113113                                // on prend tous les fichiers txt dans la source, sauf si metadata.txt a la fin.
    114114                                $fichiers = preg_files($source . "/", "(?:(?<!\.metadata\.)txt$)", 100000);
    115                                
    116                                 // start and displays the progress bar
    117                                 $progress = new ProgressBar($output, sizeof($fichiers));
    118                                 $progress->setBarWidth(100);
    119                                 $progress->setRedrawFrequency(1);
    120                                 $progress->setMessage(" Import de $source/*.txt en cours dans la rubrique $id_parent ... ", 'message'); /**/ 
    121                                 $progress->setMessage("", 'inforub');
    122                                 $progress->start();
    123                                
    124                                 if(is_file("liens_a_corriger.txt"))
    125                                         unlink("liens_a_corriger.txt");
    126                                 if(is_file("liens_non_corriges.txt"))
    127                                         unlink("liens_non_corriges.txt");
    128                                 if(is_file("liens_corriges.txt"))
    129                                         unlink("liens_corriges.txt");
    130                                
    131                                 foreach($fichiers as $f){
    132                                         // date d'apres le nom du fichier
    133                                         $fichier = basename($f);
    134                                         preg_match("/^(\d{4})-\d{2}/", $fichier, $m);
    135                                         $mois = $m[0];
    136                                         $annee = $m[1] ;
    137                                        
    138                                         // chopper l'id_parent dans le fichier ?
    139                                         include_spip("inc/flock");
    140                                         lire_fichier($f, $texte);
    141                                        
    142                                         // menage
    143                                         //@@COLLECTION:esRetour ligne automatique
    144                                         //@@SOURCE:article914237.html
    145                                        
    146                                         $texte = preg_replace("/@@COLLECTION.*/", "", $texte);
    147                                         $texte = preg_replace("/@@SOURCE.*/", "", $texte);
    148                                        
    149                                         // Si des <ins> correspondent à des champs metadonnees connus, on les ajoute.
    150                                         $champs_metadonnees = array("mots_cles", "auteurs", "hierarchie", "documents", "descriptif_rubrique");
    151                                         $hierarchie = "" ;
    152                                         $auteurs = "" ;
    153                                         $mots_cles = "" ;
    154                                         $documents = "" ;
    155                                         $descriptif_rubrique = "" ;
    156                                        
    157                                         if (preg_match_all(",<ins[^>]+class='(.*?)'[^>]*?>(.*?)</ins>,ims", $texte, $z, PREG_SET_ORDER)){
    158                                                 foreach($z as $d){
    159                                                         if(in_array($d[1], $champs_metadonnees)){
    160                                                                 // class="truc" => $truc
    161                                                                 $$d[1] = split("@@", $d[2]);
    162                                                                 // virer du texte
    163                                                                 $texte = substr_replace($texte, '', strpos($texte, $d[0]), strlen($d[0]));
    164                                                         }
     115                                if(sizeof($fichiers)>0){
     116                                        // start and displays the progress bar
     117                                        $progress = new ProgressBar($output, sizeof($fichiers));
     118                                        $progress->setBarWidth(100);
     119                                        $progress->setRedrawFrequency(1);
     120                                        $progress->setMessage(" Import de $source/*.txt en cours dans la rubrique $id_parent ... ", 'message'); /**/ 
     121                                        $progress->setMessage("", 'inforub');
     122                                        $progress->start();
     123                                       
     124                                        if(is_file("liens_a_corriger.txt"))
     125                                                unlink("liens_a_corriger.txt");
     126                                        if(is_file("liens_non_corriges.txt"))
     127                                                unlink("liens_non_corriges.txt");
     128                                        if(is_file("liens_corriges.txt"))
     129                                                unlink("liens_corriges.txt");
     130                                       
     131                                        foreach($fichiers as $f){
     132                                                // date d'apres le nom du fichier
     133                                                $fichier = basename($f);
     134                                                preg_match("/^(\d{4})-\d{2}/", $fichier, $m);
     135                                                $mois = $m[0];
     136                                                $annee = $m[1] ;
     137                                               
     138                                                // chopper l'id_parent dans le fichier ?
     139                                                include_spip("inc/flock");
     140                                                lire_fichier($f, $texte);
     141                                               
     142                                                // menage
     143                                                //@@COLLECTION:esRetour ligne automatique
     144                                                //@@SOURCE:article914237.html
     145                                               
     146                                                $texte = preg_replace("/@@COLLECTION.*/", "", $texte);
     147                                                $texte = preg_replace("/@@SOURCE.*/", "", $texte);
     148                                               
     149                                                // Si des <ins> correspondent à des champs metadonnees connus, on les ajoute.
     150                                                $champs_metadonnees = array("mots_cles", "auteurs", "hierarchie", "documents", "descriptif_rubrique");
     151                                                $hierarchie = "" ;
     152                                                $auteurs = "" ;
     153                                                $mots_cles = "" ;
     154                                                $documents = "" ;
     155                                                $descriptif_rubrique = "" ;
     156                                               
     157                                                if (preg_match_all(",<ins[^>]+class='(.*?)'[^>]*?>(.*?)</ins>,ims", $texte, $z, PREG_SET_ORDER)){
     158                                                        foreach($z as $d){
     159                                                                if(in_array($d[1], $champs_metadonnees)){
     160                                                                        // class="truc" => $truc
     161                                                                        $$d[1] = split("@@", $d[2]);
     162                                                                        // virer du texte
     163                                                                        $texte = substr_replace($texte, '', strpos($texte, $d[0]), strlen($d[0]));
     164                                                                }
     165                                                        }
     166                                                }
     167                                               
     168                                                $descriptif_rubrique = $descriptif_rubrique[0] ;
     169                                               
     170                                                if (preg_match(",<ins class='id_article'>(.*?)</ins>,ims", $texte, $z))
     171                                                        $id_source = $z[1];
     172                                               
     173                                                // dans quelle rubrique importer ?
     174                                                // La hierarchie est-elle précisée dans le fichier ? (en principe oui)
     175                                                if($hierarchie){
     176                                                        $hierarchie = implode("/", $hierarchie);
     177                                                }else{ // sinon on genere des rubriques annees / mois
     178                                                        $hierarchie = "$annee/$annee-$mois";
     179                                                }
     180                                               
     181                                                include_spip("inc/rubriques");
     182                                                $id_rubrique = creer_rubrique_nommee("$hierarchie", $id_parent);
     183                                               
     184                                                if($descriptif_rubrique)
     185                                                        $up = sql_updateq('spip_rubriques', array('statut' => 'publie', 'descriptif' => $descriptif_rubrique), "id_rubrique=$id_rubrique");
     186                                                else
     187                                                        $up = sql_updateq('spip_rubriques', array('statut' => 'publie'), "id_rubrique=$id_rubrique");
     188                                               
     189                                                if($up)
     190                                                        $progress->setMessage(" Rubrique $hierarchie => $id_rubrique ", 'inforub');
     191                                               
     192                                                $progress->setMessage("", 'docs');
     193                                                $progress->setMessage("", 'mot');
     194                                                $progress->setMessage("", 'auteur');
     195                                               
     196                                                // inserer l'article
     197                                                include_spip("inc/convertisseur");
     198                                               
     199                                                // auteur par défaut (admin)
     200                                                $id_admin = sql_getfetsel("id_auteur", "spip_auteurs", "id_auteur=1");
     201                                                $id_admin = ($id_admin)? $id_admin : 12166 ;
     202                                               
     203                                                $GLOBALS['auteur_session']['id_auteur'] = $id_admin ;
     204                                               
     205                                                if($id_article = inserer_conversion($texte, $id_rubrique, $f)){
     206                                                       
     207                                                        // doit-on conserver l'id_article (option) ?
     208                                                        // sql_update spip_articles id_article=$id_source
     209                                                        if($conserver_id_article == "oui" and $id_source > 0){
     210                                                                sql_update("spip_articles", array("id_article" => $id_source), "id_article=$id_article") ;
     211                                                                // maj le lien auteur admin
     212                                                                if($spip_version_branche > "3")
     213                                                                        sql_update('spip_auteurs_liens',
     214                                                                                array(
     215                                                                                'id_objet' => $id_source
     216                                                                                ),
     217                                                                                "objet='article' and id_objet=$id_article"
     218                                                                        );
     219                                                                else
     220                                                                        sql_update('spip_auteurs_articles',
     221                                                                                array(
     222                                                                                'id_article' => $id_source
     223                                                                                ),
     224                                                                                "id_article=$id_article"
     225                                                                        );
     226                                                                $id_article = $id_source ;
     227                                                        }
     228                                                        // Créer l'auteur ?
     229                                                        if($auteurs){
     230                                                                // on efface les auteurs, puis on remet les nouveaux
     231                                                                if($spip_version_branche > "3")
     232                                                                        sql_delete('spip_auteurs_liens', 'id_objet = ' . intval($id_article) . ' and objet="article" and id_auteur !=' . $id_admin);
     233                                                                else // spip2
     234                                                                        sql_delete('spip_auteurs_articles', 'id_article = ' . intval($id_article) . 'and id_auteur !=' . $id_admin);
     235                                                               
     236                                                                foreach($auteurs as $auteur){
     237                                                                       
     238                                                                        list($nom_auteur,$bio_auteur) = explode("::", $auteur);
     239                                                                        // On essaie de trouver un nom*prénom dans les auteurs
     240                                                                        $a_nom = explode(" ", $nom_auteur);
     241                                                                        $prenom_nom = array_pop($a_nom) . "*" . join(" ", $a_nom);
     242                                                                       
     243                                                                        // echo "\n$prenom_nom\n" ;
     244                                                                       
     245                                                                        if($id_auteur = sql_getfetsel("id_auteur", "spip_auteurs", "nom=" . sql_quote($prenom_nom))){
     246                                                                               
     247                                                                        }else
     248                                                                                $id_auteur = sql_getfetsel("id_auteur", "spip_auteurs", "nom=" . sql_quote($nom_auteur));
     249                                                                       
     250                                                                        if(!$id_auteur){
     251                                                                                $id_auteur = sql_insertq("spip_auteurs", array(
     252                                                                                                "nom" => $nom_auteur,
     253                                                                                                "statut" => "1comite",
     254                                                                                                "bio" => $bio_auteur
     255                                                                                ));
     256                                                                               
     257                                                                                $auteur_m = substr("Création de l'auteur " . $auteur, 0, 100) ;
     258                                                                                $progress->setMessage($auteur_m, 'auteur');
     259                                                                        }
     260                                                                       
     261                                                                        if($spip_version_branche > "3"){
     262                                                                                if(!sql_getfetsel("id_auteur", "spip_auteurs_liens", "id_auteur=$id_auteur and id_objet=$id_article and objet='article'"))
     263                                                                                        sql_insertq("spip_auteurs_liens", array(
     264                                                                                                "id_auteur" => $id_auteur,
     265                                                                                                "id_objet" => $id_article,
     266                                                                                                "objet" => "article"
     267                                                                                        ));
     268                                                                        }else // spip 2
     269                                                                                if(!sql_getfetsel("id_auteur", "spip_auteurs_articles", "id_auteur=$id_auteur and id_article=$id_article"))
     270                                                                                        sql_insertq("spip_auteurs_articles", array(
     271                                                                                                "id_auteur" => $id_auteur,
     272                                                                                                "id_article" => $id_article
     273                                                                                        ));
     274                                                                       
     275                                                                }
     276                                                        }
     277                                                       
     278                                                        // Créer des mots clés ?
     279                                                        if($mots_cles){
     280                                                                // on commence par effacer les mots déjà sur l'article, puis on remet les mots.
     281                                                                if($spip_version_branche > "3")
     282                                                                        sql_delete('spip_mots_liens', 'id_objet = ' . intval($id_article) . ' and objet="article"');
     283                                                                else // spip2
     284                                                                        sql_delete('spip_mots_articles', 'id_article = ' . intval($id_article));
     285                                                               
     286                                                                foreach($mots_cles as $mot){
     287                                                                        // groupe mot-clé
     288                                                                        list($type_mot,$titre_mot) = explode("::", $mot);
     289                                                                        $type_mot = ($type_mot)? $type_mot : "Mots importés" ;
     290                                                                       
     291                                                                        $id_groupe_mot = sql_getfetsel("id_groupe", "spip_groupes_mots", "titre=" . sql_quote($type_mot));
     292                                                                        if(!$id_groupe_mot)
     293                                                                                $id_groupe_mot = sql_insertq("spip_groupes_mots", array("titre" => $type_mot));
     294                                                                       
     295                                                                        $id_mot = sql_getfetsel("id_mot", "spip_mots", "titre=" . sql_quote($titre_mot));
     296                                                                        if(!$id_mot AND $titre_mot !=""){
     297                                                                                $id_mot = sql_insertq("spip_mots", array(
     298                                                                                        "titre" => $titre_mot,
     299                                                                                        "type" => $type_mot,
     300                                                                                        "id_groupe" => $id_groupe_mot
     301                                                                                ));
     302                                                                                $mot_m = substr("Création du mot " . $titre_mot . " (" . $type_mot .")", 0, 100) ;
     303                                                                                $progress->setMessage($mot_m, 'mot');
     304                                                                        }
     305                                                                       
     306                                                                        if($spip_version_branche > "3"){
     307                                                                                if(!sql_getfetsel("id_mot", "spip_mots_liens", "id_mot=$id_mot and id_objet=$id_article and objet='article'"))
     308                                                                                        sql_insertq("spip_mots_liens", array(
     309                                                                                                "id_mot" => $id_mot,
     310                                                                                                "id_objet" => $id_article,
     311                                                                                                "objet" => "article"
     312                                                                                        ));
     313                                                                        }else // spip 2
     314                                                                                if(!sql_getfetsel("id_mot", "spip_mots_articles", "id_mot=$id_mot and id_article=$id_article"))
     315                                                                                        sql_insertq("spip_mots_articles", array(
     316                                                                                                "id_mot" => $id_mot,
     317                                                                                                "id_article" => $id_article
     318                                                                                        ));
     319                                                                }
     320                                                        }
     321                                                       
     322                                                        // Créer des documents ?
     323                                                        if($documents){
     324                                                                // on commence par effacer les docs déjà sur l'article, puis on remet les mots.
     325                                                                sql_delete('spip_documents_liens', 'id_objet = ' . intval($id_article) . ' and objet="article"');
     326                                                               
     327                                                                foreach($documents as $doc){
     328                                                                        $d = json_decode($doc, true);
     329                                                                        $id_doc = $d['id_document'] ;
     330                                                                        unset($d['id_document']);
     331                                                                        if(strlen($racine_documents) > 0 AND !preg_match(",/$,",$racine_documents))
     332                                                                                $racine_documents = $racine_documents . "/" ;
     333                                                                        $d['fichier'] = $racine_documents . $d['fichier'] ;
     334                                                                       
     335                                                                        // champs ok dans les documents ?
     336                                                                        foreach($d as $k => $v)
     337                                                                                if(in_array($k, $champs_documents))
     338                                                                                        $document_a_inserer[$k] = $v ;
     339                                                                       
     340                                                                        // insertion du doc
     341                                                                        $id_document = sql_getfetsel("id_document", "spip_documents", "fichier=" . sql_quote($d['fichier']));
     342                                                                        if(!$id_document){
     343                                                                                $id_document = sql_insertq("spip_documents", $document_a_inserer);
     344                                                                                $progress->setMessage("Création du document " . $d['titre'] . " (" . $d['fichier'] .")", 'docs');
     345                                                                        }
     346                                                                       
     347                                                                        if($id_document AND !sql_getfetsel("id_document", "spip_documents_liens", "id_document=$id_document and id_objet=$id_article and objet='article'"))
     348                                                                                sql_insertq("spip_documents_liens", array(
     349                                                                                                "id_document" => $id_document,
     350                                                                                                "id_objet" => $id_article,
     351                                                                                                "objet" => "article"
     352                                                                        ));
     353                                                                       
     354                                                                        // modifier le texte qui appelle peut etre un <doc123>
     355                                                                        if($id_document){
     356                                                                                // ressortir le texte propre...
     357                                                                                $texte = sql_getfetsel("texte", "spip_articles", "id_article=$id_article");
     358                                                                                $texte = preg_replace("/(<(doc|img|emb))". $id_doc . "/i", "\${1}" . $id_document, $texte);
     359                                                                                sql_update("spip_articles", array("texte" => sql_quote($texte)), "id_article=$id_article");
     360                                                                        }
     361                                                                }
     362                                                        }
     363                                                       
     364                                                        // recaler des liens [->123456] ?
     365                                                        // si on ne conserve pas le meme id_article
     366                                                        include_spip("inc/lien");
     367                                                        if(preg_match(_RACCOURCI_LIEN, $texte) and $conserver_id_article == "")
     368                                                                passthru("echo '$id_article     $id_source' >> liens_a_corriger.txt");
     369                                                       
     370                                                        // Si tout s'est bien passé, on avance la barre
     371                                                        $progress->setMessage($f, 'filename');
     372                                                        $progress->setFormat("<fg=white;bg=blue>%message%</>\n" . "<fg=white;bg=red>%inforub% %auteur% %mot%</>\n" . '%current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%' . "\n  %filename%\n%docs%\n\n");
     373                                                        $progress->advance();
     374                                                       
     375                                                }else{
     376                                                        $output->writeln("<error>échec de l'import de $f</error>");
     377                                                        exit ;
    165378                                                }
    166379                                        }
    167380                                       
    168                                         $descriptif_rubrique = $descriptif_rubrique[0] ;
    169                                        
    170                                         if (preg_match(",<ins class='id_article'>(.*?)</ins>,ims", $texte, $z))
    171                                                 $id_source = $z[1];
    172                                        
    173                                         // dans quelle rubrique importer ?
    174                                         // La hierarchie est-elle précisée dans le fichier ? (en principe oui)
    175                                         if($hierarchie){
    176                                                 $titre_parent = $hierarchie[0] ;
    177                                                 $titre_rubrique = $hierarchie[1] ;
    178                                                
    179                                                 // hack perso diplo 2006/02 => 02 ou 2006-02 => 02
    180                                                 $titre_rubrique = preg_replace(",^(\d{4})(?:/|-)(\d{2}).*$,", "\\2", $titre_rubrique);
    181                                        
    182                                         }else{ // sinon on genere des rubriques annees / mois
    183                                                 $titre_parent = $annee ;
    184                                                 $titre_rubrique = "$annee-$mois" ;
    185                                         }
    186                                        
    187                                         include_spip("inc/rubriques");
    188                                         $id_rubrique = creer_rubrique_nommee("$titre_parent/$titre_rubrique", $id_parent);
    189                                        
    190                                         if($descriptif_rubrique)
    191                                                 $up = sql_updateq('spip_rubriques', array('statut' => 'publie', 'descriptif' => $descriptif_rubrique), "id_rubrique=$id_rubrique");
    192                                         else
    193                                                 $up = sql_updateq('spip_rubriques', array('statut' => 'publie'), "id_rubrique=$id_rubrique");
    194                                        
    195                                         if($up)
    196                                                 $progress->setMessage(" Rubrique $titre_parent/$titre_rubrique => $id_rubrique ", 'inforub');
    197                                        
    198                                         $progress->setMessage("", 'docs');
    199                                         $progress->setMessage("", 'mot');
    200                                         $progress->setMessage("", 'auteur');
    201                                        
    202                                         // inserer l'article
    203                                         include_spip("inc/convertisseur");
    204                                        
    205                                         // auteur par défaut (admin)
    206                                         $id_admin = sql_getfetsel("id_auteur", "spip_auteurs", "id_auteur=1");
    207                                         $id_admin = ($id_admin)? $id_admin : 12166 ;
    208                                        
    209                                         $GLOBALS['auteur_session']['id_auteur'] = $id_admin ;
    210                                        
    211                                         if($id_article = inserer_conversion($texte, $id_rubrique, $f)){
    212                                                
    213                                                 // doit-on conserver l'id_article (option) ?
    214                                                 // sql_update spip_articles id_article=$id_source
    215                                                 if($conserver_id_article == "oui" and $id_source > 0){
    216                                                         sql_update("spip_articles", array("id_article" => $id_source), "id_article=$id_article") ;
    217                                                         // maj le lien auteur admin
    218                                                         if($spip_version_branche > "3")
    219                                                                 sql_update('spip_auteurs_liens',
    220                                                                         array(
    221                                                                         'id_objet' => $id_source
    222                                                                         ),
    223                                                                         "objet='article' and id_objet=$id_article"
    224                                                                 );
    225                                                         else
    226                                                                 sql_update('spip_auteurs_articles',
    227                                                                         array(
    228                                                                         'id_article' => $id_source
    229                                                                         ),
    230                                                                         "id_article=$id_article"
    231                                                                 );
    232                                                         $id_article = $id_source ;
    233                                                 }
    234                                                 // Créer l'auteur ?
    235                                                 if($auteurs){
    236                                                         // on efface les auteurs, puis on remet les nouveaux
    237                                                         if($spip_version_branche > "3")
    238                                                                 sql_delete('spip_auteurs_liens', 'id_objet = ' . intval($id_article) . ' and objet="article" and id_auteur !=' . $id_admin);
    239                                                         else // spip2
    240                                                                 sql_delete('spip_auteurs_articles', 'id_article = ' . intval($id_article) . 'and id_auteur !=' . $id_admin);
    241                                                        
    242                                                         foreach($auteurs as $auteur){
    243                                                                
    244                                                                 list($nom_auteur,$bio_auteur) = explode("::", $auteur);
    245                                                                 // On essaie de trouver un nom*prénom dans les auteurs
    246                                                                 $a_nom = explode(" ", $nom_auteur);
    247                                                                 $prenom_nom = array_pop($a_nom) . "*" . join(" ", $a_nom);
    248                                                                
    249                                                                 // echo "\n$prenom_nom\n" ;
    250                                                                
    251                                                                 if($id_auteur = sql_getfetsel("id_auteur", "spip_auteurs", "nom=" . sql_quote($prenom_nom))){
    252                                                                        
    253                                                                 }else
    254                                                                         $id_auteur = sql_getfetsel("id_auteur", "spip_auteurs", "nom=" . sql_quote($nom_auteur));
    255                                                                
    256                                                                 if(!$id_auteur){
    257                                                                         $id_auteur = sql_insertq("spip_auteurs", array(
    258                                                                                         "nom" => $nom_auteur,
    259                                                                                         "statut" => "1comite",
    260                                                                                         "bio" => $bio_auteur
    261                                                                         ));
    262                                                                        
    263                                                                         $auteur_m = substr("Création de l'auteur " . $auteur, 0, 100) ;
    264                                                                         $progress->setMessage($auteur_m, 'auteur');
    265                                                                 }
    266                                                                
    267                                                                 if($spip_version_branche > "3"){
    268                                                                         if(!sql_getfetsel("id_auteur", "spip_auteurs_liens", "id_auteur=$id_auteur and id_objet=$id_article and objet='article'"))
    269                                                                                 sql_insertq("spip_auteurs_liens", array(
    270                                                                                         "id_auteur" => $id_auteur,
    271                                                                                         "id_objet" => $id_article,
    272                                                                                         "objet" => "article"
    273                                                                                 ));
    274                                                                 }else // spip 2
    275                                                                         if(!sql_getfetsel("id_auteur", "spip_auteurs_articles", "id_auteur=$id_auteur and id_article=$id_article"))
    276                                                                                 sql_insertq("spip_auteurs_articles", array(
    277                                                                                         "id_auteur" => $id_auteur,
    278                                                                                         "id_article" => $id_article
    279                                                                                 ));
    280                                                                
    281                                                         }
    282                                                 }
    283                                                
    284                                                 // Créer des mots clés ?
    285                                                 if($mots_cles){
    286                                                         // on commence par effacer les mots déjà sur l'article, puis on remet les mots.
    287                                                         if($spip_version_branche > "3")
    288                                                                 sql_delete('spip_mots_liens', 'id_objet = ' . intval($id_article) . ' and objet="article"');
    289                                                         else // spip2
    290                                                                 sql_delete('spip_mots_articles', 'id_article = ' . intval($id_article));
    291                                                        
    292                                                         foreach($mots_cles as $mot){
    293                                                                 // groupe mot-clé
    294                                                                 list($type_mot,$titre_mot) = explode("::", $mot);
    295                                                                 $type_mot = ($type_mot)? $type_mot : "Mots importés" ;
    296                                                                
    297                                                                 $id_groupe_mot = sql_getfetsel("id_groupe", "spip_groupes_mots", "titre=" . sql_quote($type_mot));
    298                                                                 if(!$id_groupe_mot)
    299                                                                         $id_groupe_mot = sql_insertq("spip_groupes_mots", array("titre" => $type_mot));
    300                                                                
    301                                                                 $id_mot = sql_getfetsel("id_mot", "spip_mots", "titre=" . sql_quote($titre_mot));
    302                                                                 if(!$id_mot AND $titre_mot !=""){
    303                                                                         $id_mot = sql_insertq("spip_mots", array(
    304                                                                                 "titre" => $titre_mot,
    305                                                                                 "type" => $type_mot,
    306                                                                                 "id_groupe" => $id_groupe_mot
    307                                                                         ));
    308                                                                         $mot_m = substr("Création du mot " . $titre_mot . " (" . $type_mot .")", 0, 100) ;
    309                                                                         $progress->setMessage($mot_m, 'mot');
    310                                                                 }
    311                                                                
    312                                                                 if($spip_version_branche > "3"){
    313                                                                         if(!sql_getfetsel("id_mot", "spip_mots_liens", "id_mot=$id_mot and id_objet=$id_article and objet='article'"))
    314                                                                                 sql_insertq("spip_mots_liens", array(
    315                                                                                         "id_mot" => $id_mot,
    316                                                                                         "id_objet" => $id_article,
    317                                                                                         "objet" => "article"
    318                                                                                 ));
    319                                                                 }else // spip 2
    320                                                                         if(!sql_getfetsel("id_mot", "spip_mots_articles", "id_mot=$id_mot and id_article=$id_article"))
    321                                                                                 sql_insertq("spip_mots_articles", array(
    322                                                                                         "id_mot" => $id_mot,
    323                                                                                         "id_article" => $id_article
    324                                                                                 ));
    325                                                         }
    326                                                 }
    327                                                
    328                                                 // Créer des documents ?
    329                                                 if($documents){
    330                                                         // on commence par effacer les docs déjà sur l'article, puis on remet les mots.
    331                                                         sql_delete('spip_documents_liens', 'id_objet = ' . intval($id_article) . ' and objet="article"');
    332                                                        
    333                                                         foreach($documents as $doc){
    334                                                                 $d = json_decode($doc, true);
    335                                                                 $id_doc = $d['id_document'] ;
    336                                                                 unset($d['id_document']);
    337                                                                 if(strlen($racine_documents) > 0 AND !preg_match(",/$,",$racine_documents))
    338                                                                         $racine_documents = $racine_documents . "/" ;
    339                                                                 $d['fichier'] = $racine_documents . $d['fichier'] ;
    340                                                                
    341                                                                 // champs ok dans les documents ?
    342                                                                 foreach($d as $k => $v)
    343                                                                         if(in_array($k, $champs_documents))
    344                                                                                 $document_a_inserer[$k] = $v ;
    345                                                                
    346                                                                 // insertion du doc
    347                                                                 $id_document = sql_getfetsel("id_document", "spip_documents", "fichier=" . sql_quote($d['fichier']));
    348                                                                 if(!$id_document){
    349                                                                         $id_document = sql_insertq("spip_documents", $document_a_inserer);
    350                                                                         $progress->setMessage("Création du document " . $d['titre'] . " (" . $d['fichier'] .")", 'docs');
    351                                                                 }
    352                                                                
    353                                                                 if($id_document AND !sql_getfetsel("id_document", "spip_documents_liens", "id_document=$id_document and id_objet=$id_article and objet='article'"))
    354                                                                         sql_insertq("spip_documents_liens", array(
    355                                                                                         "id_document" => $id_document,
    356                                                                                         "id_objet" => $id_article,
    357                                                                                         "objet" => "article"
    358                                                                 ));
    359                                                                
    360                                                                 // modifier le texte qui appelle peut etre un <doc123>
    361                                                                 if($id_document){
    362                                                                         // ressortir le texte propre...
    363                                                                         $texte = sql_getfetsel("texte", "spip_articles", "id_article=$id_article");
    364                                                                         $texte = preg_replace("/(<(doc|img|emb))". $id_doc . "/i", "\${1}" . $id_document, $texte);
    365                                                                         sql_update("spip_articles", array("texte" => sql_quote($texte)), "id_article=$id_article");
    366                                                                 }
    367                                                         }
    368                                                 }
    369                                                
    370                                                 // recaler des liens [->123456] ?
    371                                                 // si on ne conserve pas le meme id_article
    372                                                 include_spip("inc/lien");
    373                                                 if(preg_match(_RACCOURCI_LIEN, $texte) and $conserver_id_article == "")
    374                                                         passthru("echo '$id_article     $id_source' >> liens_a_corriger.txt");
    375                                                
    376                                                 // Si tout s'est bien passé, on avance la barre
    377                                                 $progress->setMessage($f, 'filename');
    378                                                 $progress->setFormat("<fg=white;bg=blue>%message%</>\n" . "<fg=white;bg=red>%inforub% %auteur% %mot%</>\n" . '%current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%' . "\n  %filename%\n%docs%\n\n");
    379                                                 $progress->advance();
    380                                                
    381                                         }else{
    382                                                 $output->writeln("<error>échec de l'import de $f</error>");
    383                                                 exit ;
    384                                         }
    385                                 }
    386                                
    387                                 // ensure that the progress bar is at 100%
    388                                 $progress->finish();
    389                                
    390                                 // remapper les liens [->12345]
    391                                 lire_fichier("liens_a_corriger.txt", $articles);
    392                                 $corrections_liens = inc_file_to_array_dist($articles);
    393                                
    394                                 if(is_array($corrections_liens))
    395                                         foreach($corrections_liens as $k => $v){
    396                                                 if($v){
    397                                                         list($id_article, $id_source) = explode("\t", $v);
    398                                                         $texte = sql_getfetsel("texte", "spip_articles", "id_article=$id_article") ;
    399                                                         // recaler des liens [->123456] ?
    400                                                         include_spip("inc/lien");
    401                                                         if(preg_match_all(_RACCOURCI_LIEN, $texte, $liens, PREG_SET_ORDER)){
    402                                                                 foreach($liens as $l){
    403                                                                         if(preg_match("/^[0-9]+$/", $l[4])){
    404                                                                                 // trouver l'article dont l'id_source est $l[4] dans le secteur
    405                                                                                 if($id_dest = sql_getfetsel("id_article", "spip_articles", "id_source=" . trim($l[4]) . " and id_secteur=$id_parent")){
    406                                                                                         $lien_actuel = $l[0] ;
    407                                                                                         $lien_corrige = str_replace($l[4], $id_dest, $l[0]) ;
     381                                        // ensure that the progress bar is at 100%
     382                                        $progress->finish();
     383                                       
     384                                        // remapper les liens [->12345]
     385                                        lire_fichier("liens_a_corriger.txt", $articles);
     386                                        $corrections_liens = inc_file_to_array_dist($articles);
     387                                       
     388                                        if(is_array($corrections_liens))
     389                                                foreach($corrections_liens as $k => $v){
     390                                                        if($v){
     391                                                                list($id_article, $id_source) = explode("\t", $v);
     392                                                                $texte = sql_getfetsel("texte", "spip_articles", "id_article=$id_article") ;
     393                                                                // recaler des liens [->123456] ?
     394                                                                include_spip("inc/lien");
     395                                                                if(preg_match_all(_RACCOURCI_LIEN, $texte, $liens, PREG_SET_ORDER)){
     396                                                                        foreach($liens as $l){
     397                                                                                if(preg_match("/^[0-9]+$/", $l[4])){
     398                                                                                        // trouver l'article dont l'id_source est $l[4] dans le secteur
     399                                                                                        if($id_dest = sql_getfetsel("id_article", "spip_articles", "id_source=" . trim($l[4]) . " and id_secteur=$id_parent")){
     400                                                                                                $lien_actuel = $l[0] ;
     401                                                                                                $lien_corrige = str_replace($l[4], $id_dest, $l[0]) ;
     402                                                                                               
     403                                                                                                $lien = escapeshellarg("$id_article : $lien_actuel => $lien_corrige");
     404                                                                                                passthru("echo $lien >> liens_corriges.txt");
     405                                                                                                // maj le texte
     406                                                                                                $texte_corrige = str_replace($lien_actuel, $lien_corrige, $texte);
     407                                                                                                sql_update("spip_articles", array("texte" => sql_quote($texte_corrige)), "id_article=$id_article");
     408                                                                                                // attention s'il y a plusieurs liens
     409                                                                                                $texte = $texte_corrige ;
     410                                                                                        }else{
     411                                                                                                $commande = escapeshellarg("Dans $id_article (source $id_source)" . $l[0] . " : lien vers " . $l[4] . " non trouvé") ;
     412                                                                                                passthru("echo $commande >> liens_non_corriges.txt");
     413                                                                                        }
    408414                                                                                       
    409                                                                                         $lien = escapeshellarg("$id_article : $lien_actuel => $lien_corrige");
    410                                                                                         passthru("echo $lien >> liens_corriges.txt");
    411                                                                                         // maj le texte
    412                                                                                         $texte_corrige = str_replace($lien_actuel, $lien_corrige, $texte);
    413                                                                                         sql_update("spip_articles", array("texte" => sql_quote($texte_corrige)), "id_article=$id_article");
    414                                                                                         // attention s'il y a plusieurs liens
    415                                                                                         $texte = $texte_corrige ;
    416                                                                                 }else{
    417                                                                                         $commande = escapeshellarg("Dans $id_article (source $id_source)" . $l[0] . " : lien vers " . $l[4] . " non trouvé") ;
    418                                                                                         passthru("echo $commande >> liens_non_corriges.txt");
    419415                                                                                }
    420                                                                                
    421416                                                                        }
    422417                                                                }
    423418                                                        }
    424419                                                }
    425                                         }
    426                                
    427                                 $output->writeln("");
    428                                 if(is_file("liens_a_corriger.txt"))
    429                                         unlink("liens_a_corriger.txt");
     420                                       
     421                                        $output->writeln("");
     422                                        if(is_file("liens_a_corriger.txt"))
     423                                                unlink("liens_a_corriger.txt");
     424                                }
    430425                        }
    431426                }
Note: See TracChangeset for help on using the changeset viewer.