Changeset 95854 in spip-zone


Ignore:
Timestamp:
Mar 8, 2016, 1:32:15 PM (5 years ago)
Author:
booz@…
Message:

quand on fusionne des sites, il faut corriger les liens [->12345] après l'import

Location:
_plugins_/convertisseur/trunk
Files:
2 edited

Legend:

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

    r95764 r95854  
    642642        }
    643643
     644        // stocker l'id_article en id_source pour permettre le ré-examen des liens [->123]
     645        $id_source = $c["id_article"] ;
     646
     647        // attention les conflits               
     648        unset($c["id_article"]);
     649        unset($c["id_secteur"]);
     650        unset($c["id_rubrique"]);
     651
    644652        // Si des <ins> qui ne correspondent pas à des champs connus sont toujours là on les ajoute dans le champs metadonnees ou a défaut ostensiblement en haut du texte.
    645653        if (preg_match_all(",<ins[^>]+class='(.*?)'>(.*?)</ins>,ims", $c['texte'], $z, PREG_SET_ORDER)){
     
    656664       
    657665        $c['texte'] = preg_replace("/\n\n+/m", "\n\n", $c['texte']);
    658 
    659         // on ne retient pas l'id_article pour éviter des collisions éventuelles
    660         unset($c["id_article"]);
    661        
    662         // on ne retient pas l'id_rubrique et secteur car ce ne sont pas les memes d'un site à l'autre 
    663         unset($c["id_secteur"]);
    664         unset($c["id_rubrique"]);
     666        $c['id_source'] = $id_source ;
    665667
    666668        $r = array();
  • _plugins_/convertisseur/trunk/spip-cli/fichiersImporter.php

    r95831 r95854  
    106106                                        sql_query("alter table spip_articles add metadonnees MEDIUMTEXT NOT NULL DEFAULT ''");
    107107
     108                                // Ajout d'un champ la premiere fois pour stocker l'id_article original (pour ensuite remapper les liens [->123]).
     109                                if(!in_array('id_source', $champs))
     110                                        sql_query("alter table spip_articles add id_source BIGINT(21) NOT NULL DEFAULT ''");
     111
    108112                                $fichiers = preg_files($source . "/", "(?:(?<!\.metadata\.)txt$)", 100000);
    109113
     
    116120                                $progress->start();
    117121
     122                                if(is_file("liens_a_corriger.txt"))
     123                                        unlink("liens_a_corriger.txt");
     124                                if(is_file("liens_non_corriges.txt"))
     125                                        unlink("liens_non_corriges.txt");
     126                                if(is_file("liens_corriges.txt"))
     127                                        unlink("liens_corriges.txt");
     128
    118129                                foreach($fichiers as $f){
    119130
     
    133144                                        $texte = preg_replace("/@@COLLECTION.*/", "", $texte);
    134145                                        $texte = preg_replace("/@@SOURCE.*/", "", $texte);
     146                                       
    135147                                       
    136148                                        // Si des <ins> qui correspondent à des champs metadonnees connus,on les ajoute.
     
    140152                                        $mots_cles = "" ;
    141153                                        $documents = "" ;                                       
    142        
    143                                         if (preg_match_all(",<ins[^>]+class='(.*?)'>(.*?)</ins>,ims", $texte, $z, PREG_SET_ORDER)){
    144                                                 foreach($z as $d){
    145                                                         if(in_array($d[1], $champs_metadonnees)){
    146                                                                 // class="truc" => $truc
    147                                                                 $$d[1] = split("@@", $d[2]);
    148                                                                 // virer du texte
    149                                                                 $texte = substr_replace($texte, '', strpos($texte, $d[0]), strlen($d[0]));
    150                                                         }
    151                                                 }
    152                                         }
    153                                        
     154                                       
     155                                        if (preg_match(",<ins class='id_article'>(.*?)</ins>,ims", $texte, $z))
     156                                                        $id_source = $z[1] ;
     157
     158                                       
     159                                        // dans quelle rubrique importer ?
    154160                                        if($hierarchie){
    155161                                                $titre_parent = $hierarchie[0] ;
     
    174180                                        include_spip("inc/convertisseur");
    175181
    176                                         // auteur par défaut
     182                                        // auteur par défaut (admin)
    177183                                        $id_admin = sql_getfetsel("id_auteur", "spip_auteurs", "id_auteur=1");
    178184                                        $id_admin = ($id_admin)? $id_admin : 12166 ;
     
    182188                                        if($id_article = inserer_conversion($texte, $id_rubrique, $f)){
    183189                                               
    184                                                 // l'auteur existe t'il ? Le créer.
     190                                                // Créer l'auteur ?
    185191                                                if($auteurs){
    186192
     
    285291                                                                        sql_update("spip_articles", array("texte" => sql_quote($texte)), "id_article=$id_article");
    286292                                                        }
    287                                                         // prevoir de recaler les liens aussi [->123456]
    288293                                                        }
    289294                                                }
     295                                               
     296                                                // recaler des liens [->123456] ?
     297                                                include_spip("inc/lien");
     298                                                if(preg_match(_RACCOURCI_LIEN, $texte))
     299                                                        passthru("echo '$id_article     $id_source' >> liens_a_corriger.txt");
    290300
    291301                                                // Si tout s'est bien passé, on avance la barre
     
    302312                                // ensure that the progress bar is at 100%
    303313                                $progress->finish();
     314                               
     315                                // remapper les liens [->12345]
     316                                lire_fichier("liens_a_corriger.txt", $articles);
     317                                $corrections_liens = inc_file_to_array_dist($articles);
     318                                foreach($corrections_liens as $k => $v){
     319                                        if($v){
     320                                                list($id_article, $id_source) = explode("\t", $v);
     321                                                $texte = sql_getfetsel("texte", "spip_articles", "id_article=$id_article") ;
     322                                                // recaler des liens [->123456] ?
     323                                                include_spip("inc/lien");
     324                                                if(preg_match_all(_RACCOURCI_LIEN, $texte, $liens, PREG_SET_ORDER)){
     325                                                        foreach($liens as $l){
     326                                                                if(preg_match("/^[0-9]+$/", $l[4])){   
     327                                                                        // trouver l'article dont l'id_source est $l[4] dans le secteur
     328                                                                        if($id_dest = sql_getfetsel("id_article", "spip_articles", "id_source=" . trim($l[4]) . " and id_secteur=$id_parent")){
     329                                                                                $lien = escapeshellarg($l[0] . " => " . str_replace($l[4], $id_dest, $l[0]));
     330                                                                                passthru("echo $lien >> liens_corriges.txt");
     331                                                                        }else{
     332                                                                                $commande = escapeshellarg("Dans $id_article " . $l[0] . " : lien vers " . $l[4] . " non trouvé") ;
     333                                                                                passthru("echo $commande >> liens_non_corriges.txt");
     334                                                                        }       
     335                                                                       
     336                                                                }
     337                                                        }       
     338                                                }               
     339                                                                                               
     340                                        }
     341                                }
     342
    304343                                $output->writeln("");
     344                                if(is_file("liens_a_corriger.txt"))
     345                                        unlink("liens_a_corriger.txt");
    305346
    306347                        }
Note: See TracChangeset for help on using the changeset viewer.