source: spip-zone/_plugins_/convertisseur/trunk/spip-cli/convert.php @ 94700

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

zip d'import

File size: 6.0 KB
Line 
1<?php
2
3/***
4
5Convertir des fichiers par lots.
6
7au format Quark XML en fichiers en format SPIP conversion.
8
9Mettre les fichiers XML dans le repertoire /exports_quark/%COLLECTION%/%NUMERO% du SPIP
10
11Lancer la commande spip-cli : spip convert
12
13Les fichiers convertis sont placés dans le repertoire /conversion_spip/%COLLECTION%/%NUMERO% du SPIP
14
15Si un repertoire git est trouvé dans /dest alors on prend le repertoire */ // /*.git/*/collections comme répertoire dest.
16
17
18use Symfony\Component\Console\Command\Command;
19use Symfony\Component\Console\Input\InputArgument;
20use Symfony\Component\Console\Input\InputInterface;
21use Symfony\Component\Console\Input\InputOption;
22use Symfony\Component\Console\Output\OutputInterface;
23
24class Convert extends Command {
25        protected function configure() {
26                $this
27                        ->setName('conversion:convertir')
28                        ->setDescription('Convertion des fichiers Quarks XML en fichiers d\'import SPIP.')
29                        ->setAliases(array(
30                                'convert' // abbréviation commune pour "synchro"
31                        ))
32                        ->addOption(
33                                'extracteur',
34                                'e',
35                                InputOption::VALUE_OPTIONAL,
36                                'Type d\'extracteur pour la conversion',
37                                ''
38                        )
39                        ->addOption(
40                                'source',
41                                's',
42                                InputOption::VALUE_OPTIONAL,
43                                'Répertoire source de la collection à convertir, structuré en collection/numero/[fichiers]',
44                                'conversion_source'
45                        )
46                        ->addOption(
47                                'dest',
48                                'd',
49                                InputOption::VALUE_OPTIONAL,
50                                'Répertoire de destination',
51                                'conversion_spip'
52                        )
53                ;
54        }
55
56        protected function execute(InputInterface $input, OutputInterface $output) {
57                global $spip_racine;
58                global $spip_loaded;
59               
60                $source = $input->getOption('source') ;
61               
62                $dest = $input->getOption('dest') ;
63                if($dest == "drive")
64                        $dest = '/Users/vincent/Google Drive/Fichiers_Diplodubas/exports_automatiques' ;
65
66                $extracteur = $input->getOption('extracteur') ;
67               
68                include_spip("iterateur/data");
69                include_spip("inc/utils");
70               
71                include_spip("inc/convertisseur");
72                global $conv_formats ;
73                foreach($conv_formats as $v)
74                        if(!is_array($v))
75                                $extracteurs_disponibles[] = $v ;
76                $extracteurs_dispos = join(", ",$extracteurs_disponibles);             
77                                               
78                if($extracteur == "" || !in_array($extracteur, $extracteurs_disponibles)){
79                        $output->writeln("<error>Définir un extracteur `spip convert -e %extracteur%`. Extracteurs disponibles : $extracteurs_dispos</error>");
80                        exit ;
81                }
82               
83                if ($spip_loaded) {
84                        chdir($spip_racine);
85
86                        if (!function_exists('passthru')){
87                                $output->writeln("<error>Votre installation de PHP doit pouvoir exécuter des commandes externes avec la fonction passthru().</error>");
88                        }
89                       
90                        // Répertoire de destination ou l'on enregistre les fichiers spip (/convertion_spip par défaut).
91                        if(!is_dir($source)){
92                                $output->writeln("<error>Préciser où sont les fichiers à convertir `spip convert -s %repertoire%` ou créer un repertoire conversion_source/</error>");
93                                exit ;
94                        }
95       
96                        // Repertoire source
97                        if($dest != "" AND !is_dir($dest))
98                                mkdir($dest);
99                       
100                        if(!is_dir($dest)){
101                                $output->writeln("<error>Préciser où placer les fichiers convertis `spip convert -d %repertoire%` ou créer un repertoire conversion_spip/</error>");
102                                exit ;
103                        }
104                       
105                        // Si c'est bon on continue
106                        else{
107                                $output->writeln("<info>C'est parti pour la convertion `$extracteur` des fichiers de $source/ dans $dest/ !</info>");
108
109                                // trouve t'on un repertoire trunk/collections dans $dest ?
110                                if($ls_depot = inc_ls_to_array_dist($dest ."/trunk/collections")){
111                                        $dest = $ls_depot[0]['dirname'] . "/" .  $ls_depot[0]['basename'] ;
112                                        $output->writeln("<info>GIT : dest = $dest</info>");
113                                }
114                                                               
115                                // plugin convertisseur
116                                include_spip("extract/$extracteur");                           
117                                $fonction_extraction = $GLOBALS['extracteur'][$extracteur] ;
118                                                                                                       
119                                // chopper des fichiers xml mais pas xxx.metatada.xml
120                                $fichiers = preg_files($source, "(?:(?<!\.metadata\.)xml$)");
121                                                                       
122                                // ou a défaut n'importe quel fichier trouvé
123                                if(sizeof($fichiers) == 0)
124                                        $fichiers = preg_files($source, ".*");
125                                                                                                                                       
126                                foreach($fichiers as $f){
127                                       
128                                        $fn = str_replace("$source/","", $f);
129                               
130                                        // Répertoires Collection et numero ?
131                                        $classement = explode("/", $fn); 
132                                       
133                                        if(sizeof($classement) > 1){
134                                                $collection = $classement[0] ;
135                                                $numero = $classement[1] ;
136                                        }
137                                       
138                                        // enregistrer les collections
139                                        $numeros["$collection-$numero"] = 1 ;
140                                                                       
141                                        if(!is_dir("$dest" . "/"  . $collection)){
142                                                mkdir("$dest" . "/" . $collection) ;
143                                        }
144                                        if(!is_dir("$dest" . "/" . $collection . "/" . $numero)){
145                                                mkdir("$dest" . "/" . $collection . "/" . $numero) ;
146                                        }
147                                       
148                                        $article = basename($f);
149                                       
150                                        // pour le chemin des documents.
151                                        set_request('fichier', "$collection/$numero/fichier.xml");
152                               
153                                        $contenu = $fonction_extraction($f,$charset);
154                                                                               
155                                        include_spip("inc/convertisseur");
156                                        $contenu = nettoyer_format($contenu);
157                                       
158                                        // nettoyer les noms de fichiers
159                                        include_spip("inc/charsets");
160                                        $article = translitteration($article);
161                                        $article = preg_replace(',[^\w-]+,', '_', $article);
162                                        $article = preg_replace(',_xml$,', '.xml', $article);
163                                       
164                                        include_spip("inc/flock");
165                                        ecrire_fichier("$dest" . "/" . $collection . "/" . $numero . "/" . $article, $contenu);
166                                                               
167                                        $output->writeln("Nouvelle conversion : $dest/" . $collection . "/" . $numero . "/" . $article);
168                                }
169                               
170                                // copier un éventuel zip des fichiers sources.                 
171                                foreach(array_keys($numeros) as $n){
172                                        list($publication, $num) = explode("-", $n);
173                                       
174                                        $file = "$source/$publication/$num/articles.zip" ;
175                                        $newfile = $dest . '/' . $publication . '/' . $num . '/' . "articles_Quark_xml.zip";
176                                       
177                                        if(file_exists($file))
178                                                if (!copy($file, $newfile)) 
179                                                        $output->writeln("La copie $file du fichier a échoué...\n");
180                                                else
181                                                        $output->writeln("$file copié");
182
183                                }
184                        }
185
186                }
187                else{
188                        $output->writeln('<error>Vous n’êtes pas dans une installation de SPIP. Impossible de convertir le texte.</error>');
189                }
190        }
191}
Note: See TracBrowser for help on using the repository browser.