1 | <?php |
---|
2 | |
---|
3 | use Symfony\Component\Console\Command\Command; |
---|
4 | use Symfony\Component\Console\Input\InputArgument; |
---|
5 | use Symfony\Component\Console\Input\InputInterface; |
---|
6 | use Symfony\Component\Console\Input\InputOption; |
---|
7 | use Symfony\Component\Console\Output\OutputInterface; |
---|
8 | use Symfony\Component\Console\Helper\Table; |
---|
9 | |
---|
10 | class 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 | trim(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 | |
---|
82 | function 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 | |
---|
94 | function 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 | } |
---|