source: spip-zone/_plugins_/convertisseur/trunk/spip-cli/fichiersExporter.php @ 95763

Last change on this file since 95763 was 95763, checked in by booz@…, 5 years ago

exporter aussi les métadonnées (auteurs, hierarchies, mots-clés etc)

File size: 6.7 KB
Line 
1<?php
2
3/***
4
5Exporter la table spip_articles en format txt
6
7Lancer la commande spip-cli : spip export -d `repertoire destination`
8
9Les fichiers txts sont placés dans le repertoire `repertoire destination` sur le disque dur.
10
11Si un repertoire git est trouvé dans /dest alors on prend le repertoire. todo
12
13Voir aussi fichiersImporter.
14
15*/
16
17use Symfony\Component\Console\Command\Command;
18use Symfony\Component\Console\Input\InputArgument;
19use Symfony\Component\Console\Input\InputInterface;
20use Symfony\Component\Console\Input\InputOption;
21use Symfony\Component\Console\Output\OutputInterface;
22use Symfony\Component\Console\Helper\ProgressBar;
23
24class fichiersExporter extends Command {
25        protected function configure() {
26                $this
27                        ->setName('fichiers:exporter')
28                        ->setDescription('Exporter spip_articles (ou autre) au format txt.')
29                        ->setAliases(array(
30                                'export'
31                        ))
32                        ->addOption(
33                                'source',
34                                's',
35                                InputOption::VALUE_OPTIONAL,
36                                'Table à exporter',
37                                'spip_articles'
38                        )
39                        ->addOption(
40                                'dest',
41                                'd',
42                                InputOption::VALUE_OPTIONAL,
43                                'Répertoire où exporter au format texte',
44                                'spip_articles'
45                        )
46                        ->addOption(
47                                'branche',
48                                'b',
49                                InputOption::VALUE_OPTIONAL,
50                                'branche à exporter (id_secteur)',
51                                '0'
52                        )
53                ;
54        }
55
56        protected function execute(InputInterface $input, OutputInterface $output) {
57                global $spip_racine;
58                global $spip_loaded;
59                global $spip_version_branche ;         
60       
61                include_spip("iterateur/data");
62               
63                $source = $input->getOption('source') ;
64                $dest = $input->getOption('dest') ;     
65                $id_secteur = $input->getOption('branche') ;
66               
67                if(intval($id_secteur) > 0)
68                        $secteur = "where id_secteur=" . intval($id_secteur) ;         
69                               
70                // Répertoire dest, ou arrivent les fichiers txt.
71                if(!is_dir($dest)){
72                        $output->writeln("<error>Préciser le répertoire où exporter les fichiers de $source au format txt. spip export -d `repertoire` </error>");
73                        exit();
74                }       
75
76               
77                if ($spip_loaded) {
78                        chdir($spip_racine);
79
80                        if (!function_exists('passthru')){
81                                $output->writeln("<error>Votre installation de PHP doit pouvoir exécuter des commandes externes avec la fonction passthru().</error>");
82                        }
83                        // Si c'est bon on continue
84                        else{
85
86                                // chopper les articles en sql.
87                                $query = sql_query("select * from spip_articles $secteur order by date_redac asc"); 
88
89                                // start and displays the progress bar
90                                $progress = new ProgressBar($output, sql_count($query));
91                                $progress->setBarWidth(100);
92                                $progress->setRedrawFrequency(1);
93                                $progress->setMessage(" Export de `spip_articles` en cours dans $dest ... ", 'message');
94                                $progress->start();
95
96                                while($f = sql_fetch($query)){
97                                       
98                                        $id_article = $f['id_article'] ;
99                                        $id_rubrique = $f['id_rubrique'] ;
100                               
101                                        // Exporter les champs spip_articles
102                                        $fichier = "" ;
103                                        $ins_auteurs = array();
104                                        $ins_mc = array();
105
106                                        foreach($f as $k => $v){
107                                                if($k == "texte" or $v == "" or $v == "0")
108                                                        continue ;
109                                                $fichier .= "<ins class='$k'>$v</ins>\n" ;
110                                        }
111                                        $fichier .= "\n\n" . $f['texte'] . "\n\n" ;
112
113                                        // métadonnées (hierarchie, auteurs, mots-clés...)
114
115                                        // hierarchie
116                                        $titre_rubrique = sql_getfetsel("titre", "spip_rubriques", "id_rubrique=$id_rubrique");
117                                        $id_parent = sql_getfetsel("id_parent", "spip_rubriques", "id_rubrique=$id_rubrique");
118                                        $titre_parent = sql_getfetsel("titre", "spip_rubriques", "id_rubrique=$id_parent");
119                                       
120                                        // auteurs spip 3
121                                        if($spip_version_branche > "3")
122                                               
123                                                $auteurs = sql_allfetsel("a.nom", "spip_auteurs_liens al, spip_auteurs a", "al.id_objet=$id_article and al.objet='article' and al.id_auteur=a.id_auteur");
124                                        // spip 2
125                                        else
126                                                $auteurs = sql_allfetsel("a.nom", "spip_auteurs_articles al, spip_auteurs a", " where al.id_article=$id_article and al.id_auteur=a.id_auteur");
127                                       
128                                        foreach($auteurs as $a){
129                                                if($a['nom'])
130                                                        $ins_auteurs[] = $a['nom'] ;
131                                        }       
132                                               
133                                        $auteurs = join("@@", $ins_auteurs) ;
134                                        $progress->setMessage($auteurs, 'auteurs');
135                                       
136                                        // mots-clés
137
138                                        // mots-clés spip 3
139                                        if($spip_version_branche > "3")
140                                                $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");
141                                        // spip 2
142                                        else
143                                                $motscles = sql_allfetsel("*", "spip_mots_articles ml, spip_mots a", " where ml.id_article=$id_article and ml.id_mot=m.id_mot");
144                                       
145                                        foreach($motscles as $mc){
146                                                if($mc['titre'])
147                                                        $ins_mc[] = $mc['titre'] ;
148                                        }       
149                                               
150                                        $motscles = join("@@", $ins_mc) ;
151                                        $motscles_m = substr($motscles, 0, 230) ;
152                                        $progress->setMessage($motscles_m, 'motscles');
153
154                                       
155                                        // Ajouter les métadonnées                                     
156                                        if($bio)
157                                                $fichier = "<ins class='bio'>$bio</ins>\n" . $fichier ;
158                                        if($auteurs)
159                                                $fichier = "<ins class='auteurs'>$auteurs</ins>\n" . $fichier ;                         
160                                        if($motscles)
161                                                $fichier = "<ins class='motscles'>$motscles</ins>\n" . $fichier ;
162                                        if($titre_parent && $titre_rubrique)
163                                                $fichier = "<ins class='hierarchie'>$titre_parent@@$titre_rubrique</ins>\n" . $fichier ;
164                               
165                                        // Créer un fichier txt
166                                        $date = ($f['date_redac'] != "0000-00-00 00:00:00")? $f['date_redac'] : $f['date'] ;
167                                        preg_match("/^(\d\d\d\d)-(\d\d)/", $date, $m);
168                                        $annee = $m[1] ;
169                                        $mois = $m[2] ;
170
171                                        include_spip("inc/charset");
172                                        $nom_fichier = translitteration($f['titre']) ;
173                                        $nom_fichier = preg_replace("/[^a-zA-Z0-9]/i", "-", $nom_fichier);
174                                        $nom_fichier = preg_replace("/-{2,}/i", "-", $nom_fichier);
175                                        $nom_fichier = preg_replace("/^-/i", "", $nom_fichier);
176                                        $nom_fichier = preg_replace("/-$/i", "", $nom_fichier);
177                                       
178                                        $nom_fichier = "$dest/$annee/$annee-$mois/$annee-$mois"."_$nom_fichier.txt" ;
179
180                                        // Créer les répertoires
181                                        if(!is_dir("$dest/$annee"))
182                                                mkdir("$dest/$annee");
183                                        if(!is_dir("$dest/$annee/$annee-$mois"))
184                                                mkdir("$dest/$annee/$annee-$mois");     
185                                       
186                                        if(ecrire_fichier("$nom_fichier", $fichier)){                           
187                                               
188                                                // Si tout s'est bien passé, on avance la barre
189                                                $nom_fichier_m = substr($nom_fichier, 0, 230) ;
190                                                $progress->setMessage($nom_fichier_m, 'filename');
191                                                $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");
192                                                $progress->advance();
193                                       
194                                        }       
195                                        else{
196                                                $output->writeln("<error>échec de l'export de $nom_fichier</error>");
197                                                exit ;
198                                        }
199                                                                               
200                                }
201                               
202                                // ensure that the progress bar is at 100%
203                                $progress->finish();
204
205                        }
206                        $output->writeln("\n");
207                }
208                else{
209                        $output->writeln('<error>Vous n’êtes pas dans une installation de SPIP. Impossible de convertir le texte.</error>');
210                }
211        }
212}
213
214       
Note: See TracBrowser for help on using the repository browser.