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

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

convertir des images .jpg ou .tif

File size: 5.6 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                                        $fn = str_replace("$source/","", $f);
123                               
124                                        // Répertoires publication et numero ?
125                                        $classement = explode("/", $fn);
126                                       
127                                        if(sizeof($classement) >= 3){
128                                                $collection = $classement[0] ;
129                                                $numero = $classement[1] ;
130                                        }elseif(sizeof($classement) == 2){
131                                                $collection = "";
132                                                $numero=$classement[0] ;
133                                        }else{
134                                                $collection = "";
135                                                $numero="" ;
136                                        }
137                                       
138                                        if($collection != "")
139                                                $collection = "/" . $collection ;
140
141                                        if($numero != "")
142                                                $numero = "/" . $numero ;
143
144                                                               
145                                        if(!is_dir("$dest" .  $collection)){
146                                                mkdir("$dest"  . $collection) ;
147                                        }
148                                        if(!is_dir("$dest"  . $collection  . $numero)){
149                                                mkdir("$dest"  . $collection  . $numero) ;
150                                        }
151                                       
152                                        $article = basename($f);
153
154                                        // pour le chemin des documents.
155                                        set_request('fichier', "$collection/$numero/fichier.xml");
156                               
157                                        $contenu = $fonction_extraction($f,$charset);
158                                                                               
159                                        include_spip("inc/convertisseur");
160                                        $contenu = nettoyer_format($contenu);
161                                       
162                                        // nettoyer les noms de fichiers
163                                        include_spip("inc/charsets");
164                                        $article = translitteration($article);
165                                        $article = preg_replace(',[^\w-]+,', '_', $article);
166                                        $article = preg_replace(',_xml$,', '.xml', $article);
167                                       
168                                        include_spip("inc/flock");
169                                        ecrire_fichier($dest . $collection  . $numero . "/" . $article, $contenu);
170                                                               
171                                        $output->writeln("Nouvelle conversion : $dest" . $collection  . $numero . "/" . $article);
172                                }
173                               
174                        }
175
176                }
177                else{
178                        $output->writeln('<error>Vous n’êtes pas dans une installation de SPIP. Impossible de convertir le texte.</error>');
179                }
180        }
181}
Note: See TracBrowser for help on using the repository browser.