source: spip-zone/_outils_/spip-cli/trunk/spip-cli/PluginsLister.php @ 87956

Last change on this file since 87956 was 87956, checked in by rastapopoulos@…, 6 years ago

coquille

File size: 2.9 KB
Line 
1<?php
2
3use Symfony\Component\Console\Command\Command;
4use Symfony\Component\Console\Input\InputArgument;
5use Symfony\Component\Console\Input\InputInterface;
6use Symfony\Component\Console\Input\InputOption;
7use Symfony\Component\Console\Output\OutputInterface;
8use Symfony\Component\Console\Helper\Table;
9
10class PluginsLister extends Command {
11    protected function configure() {
12        $this
13            ->setName('plugins:lister')
14            ->setDescription('Lister les plugins activés.')
15            ->addOption(
16                'disponibles',
17                'd',
18                InputOption::VALUE_NONE,
19                'Montrer les plugins disponibles'
20            )
21            ->addOption(
22                'inactifs',
23                'i',
24                InputOption::VALUE_NONE,
25                'Montrer les plugins inactifs'
26            )
27        ;
28    }
29
30    protected function execute(InputInterface $input, OutputInterface $output) {
31        global $spip_loaded;
32        global $spip_racine;
33        global $cwd;
34
35        if ($spip_loaded) {
36            chdir($spip_racine);
37
38            if ($input->getOption('disponibles')) {
39
40                $plugins = lister_plugins(
41                    'paquets.constante="_DIR_PLUGINS"'
42                );
43
44            } else if ($input->getOption('inactifs')) {
45
46                $plugins = lister_plugins(array(
47                    'paquets.constante="_DIR_PLUGINS"',
48                    'paquets.actif!="oui"',
49                ));
50
51            } else {
52
53                $plugins = unserialize($GLOBALS['meta']['plugin']);
54
55            }
56
57            include_spip('inc/filtres');
58            $data = array_map(function ($plugin) {
59                return array(
60                    html_entity_decode(
61                        extraire_multi($plugin['nom'], 'fr')),
62                    $plugin['etat'],
63                    joli_no_version($plugin['version']),
64                );
65            }, $plugins);
66
67            $table = new Table($output);
68            $table->setHeaders(array('Nom', 'État', 'Version'));
69            $table->setRows($data);
70            $table->render();
71
72            chdir($cwd);
73
74        } else {
75
76            $output->writeln("<comment>Vous n'êtes pas dans une installation de SPIP, il n'y a pas de plugins disponibles.</comment>");
77
78        }
79    }
80}
81
82function lister_plugins ($where) {
83
84    include_spip('base/abstract_sql');
85    $plugins = sql_allfetsel('plugins.nom, paquets.etat, paquets.version',
86                             'spip_plugins as plugins' .
87                             ' INNER JOIN spip_paquets as paquets' .
88                             ' ON plugins.prefixe=paquets.prefixe',
89                             $where);
90
91    return $plugins;
92}
93
94function joli_no_version ($moche) {
95
96    $tab_moche = explode('.', $moche);
97
98    $tab_joli = array_map(function ($n) {
99        return ltrim($n,'0') ?: '0';
100    }, $tab_moche);
101
102    return implode('.', $tab_joli);
103}
Note: See TracBrowser for help on using the repository browser.