Changeset 111638 in spip-zone for _plugins_/convertisseur


Ignore:
Timestamp:
Sep 20, 2018, 2:16:41 PM (4 weeks ago)
Author:
booz@…
Message:

Déporter le code de l'exportation dans un fichier appellable par spip-cli ou par une autre fonction

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/convertisseur/trunk/spip-cli/ConvertisseurExporter.php

    r110997 r111638  
    9292                $parent = sql_getfetsel("id_parent", "spip_rubriques", "id_rubrique=$branche");
    9393               
     94                include_spip("inc/rubriques");
    9495                if($parent == 0)
    9596                        $critere_export = "where id_secteur=" . intval($branche) ;
    9697                else{
    9798                        // y'a t'il des sous rubriques ?
    98                         $sous_rubriques = sql_allfetsel("id_rubrique", "spip_rubriques", "id_parent=$branche");
    99                         if($sous_rubriques AND sizeof($sous_rubriques) > 0){
    100                                 foreach($sous_rubriques as $k => $v)
    101                                         $ex[] = _q($v['id_rubrique']) ;
    102                                 $critere_export = "where id_rubrique in (" . implode(",", $ex) . ")" ;
     99                        $sous_rubriques = calcul_branche_in($branche);
     100                        if($sous_rubriques){
     101                                $critere_export = "where id_rubrique in ($sous_rubriques)" ;
    103102                        }
    104103                        else
     
    126125                        else{
    127126                                // chopper les articles en sql.
    128                                 $query = sql_query("select * from spip_articles $critere_export $critere_date_modif $critere_statut order by date_redac asc");
     127                                $req = "select * from spip_articles $critere_export $critere_date_modif $critere_statut order by date_redac asc" ;
     128                                // var_dump($req);
     129                                $query = sql_query($req);
    129130                               
    130131                                if(sql_count($query) > 0){
     
    136137                                        $progress->start();
    137138                                       
     139                                        include_spip("inc/exporter");
    138140                                        while($f = sql_fetch($query)){
    139141                                               
    140                                                 $id_article = $f['id_article'] ;
    141                                                 $id_rubrique = $f['id_rubrique'] ;
    142                                                
    143                                                 // Exporter les champs spip_articles
    144                                                 $fichier = "" ;
    145                                                 $ins_auteurs = array();
    146                                                 $ins_mc = array();
    147                                                 $ins_doc = array();
    148142                                                $progress->setMessage('', 'motscles');
    149143                                                $progress->setMessage('', 'docs');
    150144                                                $progress->setMessage('', 'auteurs');
    151145                                               
    152                                                 // mettre les champs dans un fichier texte balisé avec des <ins class="champ">.
    153                                                 foreach($f as $k => $v){
    154                                                         if($k == "texte" or $v == "" or $v == "0" or $v == "non" or $v == "0000-00-00 00:00:00")
    155                                                                 continue ;
    156                                                         $fichier .= "<ins class='$k'>" . trim($v) ."</ins>\n" ;
    157                                                 }
    158                                                 $fichier .= "\n\n" . $f['texte'] . "\n\n" ;
    159                                                
    160                                                 // Ajouter des métadonnées (hierarchie, auteurs, mots-clés...)
    161                                                
    162                                                 // hierarchie
    163                                                 $hierarchie = array();
    164                                                 include_spip("inc/rubriques");
    165                                                 $ariane = preg_replace("/^0,/","", calcul_hierarchie_in($id_rubrique));
    166                                                
    167                                                 $ariane = sql_allfetsel("titre","spip_rubriques","id_rubrique in($ariane)");
    168                                                 foreach($ariane as $a)
    169                                                         $hierarchie[] = str_replace("/","",$a['titre']) ; // on ne veut pas de / car creer_rubrique_nommee pourrait se tromper à l'import.
    170                                                
    171                                                 $hierarchie = implode("@@", $hierarchie);
    172                                                
    173                                                 $rubrique = sql_fetsel("texte,descriptif", "spip_rubriques", "id_rubrique=$id_rubrique");
    174                                                
    175                                                 if($texte_rubrique = $rubrique['texte'])
    176                                                         $texte_rubrique = "<ins class='texte_rubrique'>$texte_rubrique</ins>\n" ;
    177                                                
    178                                                 if($descriptif_rubrique = $rubrique['descriptif'])
    179                                                         $descriptif_rubrique = "<ins class='descriptif_rubrique'>$descriptif_rubrique</ins>\n" ;
    180                                                
    181                                                 // auteurs spip 3
    182                                                 if($spip_version_branche > "3")
    183                                                         $auteurs = sql_allfetsel("a.nom, a.bio", "spip_auteurs_liens al, spip_auteurs a", "al.id_objet=$id_article and al.objet='article' and al.id_auteur=a.id_auteur");
    184                                                 else // spip 2
    185                                                         $auteurs = sql_allfetsel("a.nom, a.bio", "spip_auteurs_articles aa, spip_auteurs a", "aa.id_article=$id_article and aa.id_auteur=a.id_auteur");
    186                                                
    187                                                 foreach($auteurs as $a)
    188                                                         if($a['nom'])
    189                                                                 $ins_auteurs[] = $a ;
    190                                                
    191                                                 $auteurs = "" ;
    192                                                 foreach($ins_auteurs as $k => $a){
    193                                                         if($k == 0)
    194                                                                 $sep = "" ;
    195                                                         else
    196                                                                 $sep = "@@" ;
    197                                                         $bio = ($a['bio'] != "") ? "::" . $a['bio'] : "" ;
    198                                                         $auteurs .= $sep . $a['nom'] . $bio ;
    199                                                 }
    200                                                
    201                                                 $auteurs_m = substr($auteurs, 0, 100) ;
    202                                                 $progress->setMessage($auteurs_m, 'auteurs');
    203                                                
    204                                                 // mots-clés
    205                                                 if($spip_version_branche > "3")
    206                                                         $motscles = sql_allfetsel("*", "spip_mots_liens ml, spip_mots m", "ml.id_objet=$id_article and ml.objet='article' and ml.id_mot=m.id_mot");
    207                                                 else // spip 2
    208                                                         $motscles = sql_allfetsel("*", "spip_mots_articles ma, spip_mots m", "ma.id_article=$id_article and ma.id_mot=m.id_mot");
    209                                                
    210                                                 foreach($motscles as $mc){
    211                                                         if($mc['titre'])
    212                                                                 $ins_mc[] = $mc['type'] . "::" . $mc['titre'] ;
    213                                                 }
    214                                                 if(is_array($ins_mc)){
    215                                                         $motscles = join("@@", $ins_mc) ;
    216                                                         $motscles_m = substr($motscles, 0, 100) ;
    217                                                         $progress->setMessage($motscles_m, 'motscles');
    218                                                 }
    219                                                
    220                                                 // documents joints
    221                                                 $documents = sql_allfetsel("*", "spip_documents d, spip_documents_liens dl", "dl.id_objet=$id_article and dl.objet='article' and dl.id_document=d.id_document");
    222                                                 foreach($documents as $doc)
    223                                                                 $ins_doc[] = json_encode($doc) ;
    224                                                 if(is_array($ins_doc)){
    225                                                         $documents = join("@@", $ins_doc) ;
    226                                                         $docs_m = substr($documents, 0, 100) ;
    227                                                         $progress->setMessage($docs_m, 'docs');
    228                                                 }
    229                                                
    230                                                 // Ajouter les métadonnées
    231                                                 if($auteurs)
    232                                                         $fichier = "<ins class='auteurs'>$auteurs</ins>\n" . $fichier ;
    233                                                 if($motscles)
    234                                                         $fichier = "<ins class='mots_cles'>$motscles</ins>\n" . $fichier ;
    235                                                 if($documents)
    236                                                         $fichier = "<ins class='documents'>$documents</ins>\n" . $fichier ;
    237                                                 if($hierarchie){
    238                                                         $fichier = "<ins class='hierarchie'>$hierarchie</ins>\n" .
    239                                                         $descriptif_rubrique .
    240                                                         $texte_rubrique .
    241                                                         $fichier ;
    242                                                 }
    243                                                
    244                                                 // Créer un fichier txt
    245                                                 $date = ($f['date_redac'] != "0000-00-00 00:00:00")? $f['date_redac'] : $f['date'] ;
    246                                                 preg_match("/^(\d\d\d\d)-(\d\d)/", $date, $m);
    247                                                 $annee = $m[1] ;
    248                                                 $mois = $m[2] ;
    249                                                
    250                                                 include_spip("inc/charsets");
    251                                                 $nom_fichier = translitteration($f['titre']) ;
    252                                                 $nom_fichier = preg_replace("/[^a-zA-Z0-9]/i", "-", $nom_fichier);
    253                                                 $nom_fichier = preg_replace("/-{2,}/i", "-", $nom_fichier);
    254                                                 $nom_fichier = preg_replace("/^-/i", "", $nom_fichier);
    255                                                 $nom_fichier = preg_replace("/-$/i", "", $nom_fichier);
    256                                                
    257                                                 $nom_fichier = "$dest/$annee/$annee-$mois/$annee-$mois"."_$nom_fichier.txt" ;
    258                                                
    259                                                 // Créer les répertoires
    260                                                 if(!is_dir("$dest/$annee"))
    261                                                         mkdir("$dest/$annee");
    262                                                 if(!is_dir("$dest/$annee/$annee-$mois"))
    263                                                         mkdir("$dest/$annee/$annee-$mois");     
    264                                                
    265                                                 if(ecrire_fichier("$nom_fichier", $fichier)){
     146                                                if($e=exporter_article($f,$dest)){
    266147                                                        // Si tout s'est bien passé, on avance la barre
    267                                                         $nom_fichier_m = substr($nom_fichier, 0, 100) ;
     148                                                        $progress->setMessage($e['docs_m'], 'docs');
     149                                                        $progress->setMessage($e['motscles_m'], 'motscles');
     150                                                        $progress->setMessage($e['auteurs_m'], 'auteurs');
     151                                                        $nom_fichier_m = substr($e['nom_fichier'], 0, 100) ;
    268152                                                        $progress->setMessage($nom_fichier_m, 'filename');
    269153                                                        $progress->setFormat("<fg=white;bg=blue>%message%</>\n" . '%current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%' . "\n %auteurs% %motscles% \n %filename% \n\n");
    270154                                                        $progress->advance();
    271                                                
    272                                                 }
    273                                                 else{
     155                                                }else{
    274156                                                        $output->writeln("<error>échec de l'export de $nom_fichier</error>");
    275157                                                        exit ;
Note: See TracChangeset for help on using the changeset viewer.