source: spip-zone/_plugins_/convertisseur/trunk/spip-cli/Quark_xmlConvert.php @ 93706

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

doc

File size: 4.6 KB
Line 
1<?php
2
3/***
4
5Convertir des fichiers au format Quark XML en fichiers en format SPIP conversion.
6
7Mettre les fichiers XML dans le repertoire /exports_quark/%COLLECTION%/%NUMERO% du SPIP
8
9Lancer la commande spip-cli : spip convert
10
11Les fichiers convertis sont placés dans le repertoire /conversion_spip/%COLLECTION%/%NUMERO% du SPIP
12
13La commande spip convert -g https://github.com/xxx/xxx.git permet de placer les fichiers convertis dans un repertoire xx/xx/collections versionné par github.
14
15
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 Quark_xmlConvert extends Command {
25        protected function configure() {
26                $this
27                        ->setName('conversion:quarkxmlconvert')
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                                'source',
34                                's',
35                                InputOption::VALUE_OPTIONAL,
36                                'Répertoire source',
37                                'exports_quark'
38                        )
39                        ->addOption(
40                                'dest',
41                                'd',
42                                InputOption::VALUE_OPTIONAL,
43                                'Répertoire de destination',
44                                'conversion_spip'
45                        )
46                        ->addOption(
47                                'depot',
48                                'g',
49                                InputOption::VALUE_OPTIONAL,
50                                'Dépot GIT ou synchroniser les conversions',
51                                ''
52                        )
53                ;
54        }
55
56        protected function execute(InputInterface $input, OutputInterface $output) {
57                global $spip_racine;
58                global $spip_loaded;
59               
60                include_spip("iterateur/data");
61               
62                $source = $input->getOption('source') ;
63                $dest = $input->getOption('dest') ;
64                               
65                // Répertoire source, ou arrivent les fichiers Quark (/exports_quark par défaut).
66                if(!is_dir($source))
67                        mkdir($source);
68
69                // Répertoire de destination ou l'on enregistre les fichiers spip (/convertion_spip par défaut).
70                if(!is_dir($dest))
71                        mkdir($dest);
72               
73                if ($spip_loaded) {
74                        chdir($spip_racine);
75
76                        if (!function_exists('passthru')){
77                                $output->writeln("<error>Votre installation de PHP doit pouvoir exécuter des commandes externes avec la fonction passthru().</error>");
78                        }
79                        // Si c'est bon on continue
80                        else{
81                                $output->writeln("<info>C'est parti pour la convertion des fichiers Quark XML dans /$dest !</info>");
82                               
83                                chdir($dest) ;
84                               
85                                // depot git ?
86                                if($depot = $input->getOption('depot')){ // dépot git ?
87                                       
88                                        $d = basename($depot);
89                                       
90                                        exec('svn info ' . $d , $r);
91                                                                               
92                                        if($r[0] == "Path: $d"){
93                                                $c = inc_ls_to_array_dist($d . "*/*/collections") ;
94                                                $collections = $c[0]['dirname'] . "/" . $c[0]['basename'] ;
95                                                $output->writeln("<info>Dépot Git OK : $dest/$collections</info>");
96                                                $dest = "$dest/$collections" ;
97                                        }else{
98                                                $output->writeln("<error>Checkout du dépot $depot</error>");
99                                                passthru("svn co $depot");
100                                                $output->writeln("<info>Relancez la commande.</info>");
101                                                exit ;
102                                        }
103                                }
104                               
105                                chdir("../");
106                                $ls_sources = inc_ls_to_array_dist($source ."/*/");
107                               
108                                foreach($ls_sources as $s)
109                                        $sources[] = $s['dirname'] . "/" . $s['basename'] ; 
110                                                               
111                                include_spip("inc/utils");
112                               
113                                // chopper des fichiers xml mais pas xxx.metatada.xml
114                                foreach($sources as $s){
115                                       
116                                        $fichiers_xml = preg_files($s, "(?:(?<!\.metadata\.)xml$)");
117                                       
118                                        // plugin convertisseur
119                                        include_spip("extract/quark_xml");
120                                       
121                                        foreach($fichiers_xml as $f){
122                                               
123                                                $c = preg_match(",.*/(.*)/.*,U", dirname($f), $m);
124                                                $collection = $m[1] ;
125                                               
126                                                $n = preg_match(",.*/.*/(.*)/.*,U", dirname($f), $m);
127                                                $numero = $m[1] ;
128                                               
129                                                if(!is_dir("$dest" . "/"  . $collection)){
130                                                        mkdir("$dest" . "/" . $collection) ;
131                                                }
132                                                if(!is_dir("$dest" . "/" . $collection . "/" . $numero)){
133                                                        mkdir("$dest" . "/" . $collection . "/" . $numero) ;
134                                                }
135                                               
136                                                $article = basename($f);
137                                                                                       
138                                                $contenu = extracteur_quark_xml($f);
139                                               
140                                                include_spip("inc/flock");
141                                               
142                                                // nettoyer les noms de fichiers
143                                                include_spip("inc/charsets");
144                                                $article = translitteration($article);
145                                               
146                                                $article = preg_replace(',[^\w-]+,', '_', $article);
147                                                $article = preg_replace(',_xml$,', '.xml', $article);
148
149                                               
150                                                ecrire_fichier("$dest" . "/" . $collection . "/" . $numero . "/" . $article, $contenu);
151                                                                       
152                                                $output->writeln("Nouvelle conversion : $dest/" . $collection . "/" . $numero . "/" . $article);
153                                        }       
154
155                                }
156                               
157                       
158                        }
159
160                }
161                else{
162                        $output->writeln('<error>Vous n’êtes pas dans une installation de SPIP. Impossible de convertir le texte.</error>');
163                }
164        }
165}
Note: See TracBrowser for help on using the repository browser.