source: spip-zone/_plugins_/convertisseur/trunk/spip-cli/fichiersConvertir.php @ 95086

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

regler la compression ou le rognage des images converties pouvoir surcharger une conversion dans mes_fonctions

File size: 6.0 KB
Line 
1<?php
2
3/***
4
5Convertir des fichiers par lots.
6
7Mettre les fichiers dans le repertoire /conversion_source/%COLLECTION%/%NUMERO%/[fichiers] du SPIP par défaut, ou dans un autre répertoire.
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
13Si un repertoire git est trouvé dans /dest alors on prend le repertoire */ // /*.git/*/collections comme répertoire dest (ce qui permet de faire un suivi de révision du contenu).
14
15
16use Symfony\Component\Console\Command\Command;
17use Symfony\Component\Console\Input\InputArgument;
18use Symfony\Component\Console\Input\InputInterface;
19use Symfony\Component\Console\Input\InputOption;
20use Symfony\Component\Console\Output\OutputInterface;
21
22class Convert extends Command {
23        protected function configure() {
24                $this
25                        ->setName('fichiers:convertir')
26                        ->setDescription('Conversion des fichiers divers en fichiers d\'import SPIP.')
27                        ->setAliases(array(
28                                'convert' // abbréviation commune pour "conversion"
29                        ))
30                        ->addOption(
31                                'extracteur',
32                                'e',
33                                InputOption::VALUE_OPTIONAL,
34                                'Type d\'extracteur pour la conversion',
35                                ''
36                        )
37                        ->addOption(
38                                'source',
39                                's',
40                                InputOption::VALUE_OPTIONAL,
41                                'Répertoire source de la collection à convertir, structuré en collection/numero/[fichiers]',
42                                'conversion_source'
43                        )
44                        ->addOption(
45                                'dest',
46                                'd',
47                                InputOption::VALUE_OPTIONAL,
48                                'Répertoire de destination',
49                                'conversion_spip'
50                        )
51                ;
52        }
53
54        protected function execute(InputInterface $input, OutputInterface $output) {
55                global $spip_racine;
56                global $spip_loaded;
57               
58                $source = $input->getOption('source') ;
59                $dest = $input->getOption('dest') ;
60                $extracteur = $input->getOption('extracteur') ;
61               
62                include_spip("iterateur/data");
63                include_spip("inc/utils");
64               
65                include_spip("inc/convertisseur");
66                global $conv_formats ;
67                foreach($conv_formats as $v)
68                        if(!is_array($v))
69                                $extracteurs_disponibles[] = $v ;
70                $extracteurs_dispos = join(", ",$extracteurs_disponibles);             
71                                               
72                if($extracteur == "" || !in_array($extracteur, $extracteurs_disponibles)){
73                        $output->writeln("<error>Définir un extracteur `spip convert -e %extracteur%`. Extracteurs disponibles : $extracteurs_dispos</error>");
74                        exit ;
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                       
84                        // Répertoire de destination ou l'on enregistre les fichiers spip (/convertion_spip par défaut).
85                        if(!is_dir($source)){
86                                $output->writeln("<error>Préciser où sont les fichiers à convertir `spip convert -s %repertoire%` ou créer un repertoire conversion_source/</error>");
87                                exit ;
88                        }
89       
90                        // Repertoire source
91                        if($dest != "" AND !is_dir($dest))
92                                mkdir($dest);
93                       
94                        if(!is_dir($dest)){
95                                $output->writeln("<error>Préciser où placer les fichiers convertis `spip convert -d %repertoire%` ou créer un repertoire conversion_spip/</error>");
96                                exit ;
97                        }
98                       
99                        // Si c'est bon on continue
100                        else{
101                                $output->writeln("<info>C'est parti pour la convertion `$extracteur` des fichiers de $source/ dans $dest/ !</info>");
102
103                                // trouve t'on un repertoire trunk/collections dans $dest ?
104                                if($ls_depot = inc_ls_to_array_dist($dest ."/trunk/collections")){
105                                        $dest = $ls_depot[0]['dirname'] . "/" .  $ls_depot[0]['basename'] ;
106                                        $output->writeln("<info>GIT : dest = $dest</info>");
107                                }
108                                                               
109                                // plugin convertisseur
110                                include_spip("extract/$extracteur");                           
111                                $fonction_extraction = $GLOBALS['extracteur'][$extracteur] ;
112                                                                                                       
113                                // chopper des fichiers xml mais pas xxx_metatada.xml
114                                $fichiers = preg_files($source ."/", "(?:(?<!_metadata\.)xml$)");
115                                                                       
116                                // ou a défaut n'importe quel fichier trouvé
117                                if(sizeof($fichiers) == 0)
118                                        $fichiers = preg_files($source, ".*");
119                                                                                                                                       
120                                foreach($fichiers as $f){
121                                       
122                                        //var_dump($f);
123                                       
124                                        $fn = str_replace("$source/","", $f);
125                               
126                                        // Répertoires publication et numero ?
127                                        $classement = explode("/", $fn);
128                                       
129                                        if(sizeof($classement) >= 3){
130                                                $collection = $classement[0] ;
131                                                $numero = $classement[1] ;
132                                        }elseif(sizeof($classement) == 2){
133                                                $collection = "";
134                                                $numero=$classement[0] ;
135                                        }else{
136                                                $collection = "";
137                                                $numero="" ;
138                                        }
139                                       
140                                        $article = basename($f);
141
142                                        // pour le chemin des documents.
143                                        set_request('fichier', "$collection/$numero/fichier.xml");
144                               
145                                        $contenu = $fonction_extraction($f,$charset);
146                                                                               
147                                        include_spip("inc/convertisseur");
148                                        $contenu = nettoyer_format($contenu);                                   
149
150                                        // Générer des noms de fichiers valides
151                                        include_spip("inc/charsets");
152                                        $article = translitteration($article);                                 
153                                        $article = preg_replace(',[^\w-]+,', '_', $article);
154                                        $article = preg_replace(',_xml$,', '.xml', $article);
155                                                                               
156                                        $c = array(
157                                                "fichier_source" => $f,                                 
158                                                "dest" => $dest,
159                                                "collection" => $collection,
160                                                "numero" => $numero,
161                                                "contenu" => $contenu,
162                                                "basename" => $article ,
163                                                "fichier_dest" => $dest . "/" . $collection  . "/" . $numero . "/" . $article
164                                        );
165                                       
166                                        // surcharge nettoyage perso ?
167                                        include_once("mes_fonctions.php");
168
169                                        if (function_exists('nettoyer_conversion')){
170                                                $c = nettoyer_conversion($c);
171                                                var_dump($c);
172                                                exit ;
173                                        }else
174                                                exit ;
175                                       
176                                                                                                       
177                                        if(!is_dir($c["dest"] . "/" .  $c["collection"])){
178                                                mkdir($c["dest"]  . "/" . $c["collection"]) ;
179                                        }
180                                        if(!is_dir($c["dest"]  . "/" . $c["collection"]  . "/" . $c["numero"])){
181                                                mkdir($c["dest"]  . "/" . $c["collection"]  . "/" . $c["numero"]) ;
182                                        }
183                                       
184                                        include_spip("inc/flock");
185                                        ecrire_fichier($c["fichier_dest"], $c["contenu"]);
186                                                               
187                                        $output->writeln("Nouvelle conversion : " . $c["fichier_dest"]);
188                                                                                                                               
189                                }
190                               
191                        }
192
193                }
194                else{
195                        $output->writeln('<error>Vous n’êtes pas dans une installation de SPIP. Impossible de convertir le texte.</error>');
196                }
197        }
198}
199
Note: See TracBrowser for help on using the repository browser.