Changeset 110796 in spip-zone
- Timestamp:
- Jun 21, 2018, 6:31:35 PM (3 years ago)
- Location:
- _outils_/spip-cli/trunk/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
_outils_/spip-cli/trunk/src/Application.php
r110790 r110796 7 7 use Symfony\Component\Console\Application as ConsoleApplication; 8 8 use Symfony\Component\Console\Input\ArgvInput; 9 use Symfony\Component\Console\Input\ArrayInput; 9 10 use Symfony\Component\Finder\Finder; 10 11 use Symfony\Component\Console\Input\InputInterface; … … 209 210 return $this->container['console.io']($input, $output); 210 211 } 212 213 214 /** 215 * Affiche l’aide d’une commande donnée 216 * @param string $commandName 217 * @param OutputInterface|null $output 218 */ 219 public function showHelp($commandName, OutputInterface $output = null) { 220 if (null === $output) { 221 $output = new ConsoleOutput(); 222 } 223 $command = $this->find('help'); 224 $arguments = array( 225 'command' => 'help', 226 'command_name' => $commandName, 227 ); 228 $input = new ArrayInput($arguments); 229 $command->run($input, $output); 230 } 211 231 } -
_outils_/spip-cli/trunk/src/Command/PluginsActiver.php
r110795 r110796 4 4 5 5 use Spip\Cli\Loader\Spip; 6 use Symfony\Component\Console\Command\Command;7 6 use Symfony\Component\Console\Input\InputArgument; 8 7 use Symfony\Component\Console\Input\InputInterface; 9 8 use Symfony\Component\Console\Input\InputOption; 10 use Symfony\Component\Console\Input\ArrayInput;11 9 use Symfony\Component\Console\Output\OutputInterface; 12 10 use Symfony\Component\Console\Question\Question; 13 use Symfony\Component\Console\Question\ConfirmationQuestion;14 11 15 12 class PluginsActiver extends PluginsLister … … 60 57 $plugins = $this->getPrefixesFromQuestion(); 61 58 if (!$plugins) { 62 $this-> showHelp($input, $output);59 $this->getApplication()->showHelp('plugins:activer', $output); 63 60 return; 64 61 } … … 88 85 public function getPrefixesFromQuestion() { 89 86 $io = $this->io; 90 $inactifs = array_ map('strtolower', array_column($this->getPluginsInactifs(), 'nom'));87 $inactifs = array_column($this->getPluginsInactifs(), 'prefixe'); 91 88 $question = new Question("Quel plugin faut-il activer ?\n", 'help'); 92 89 $question->setAutoCompleterValues($inactifs); … … 96 93 } 97 94 return explode(' ', $reponse); 98 }99 100 public function showHelp(InputInterface $input, OutputInterface $output) {101 $command = $this->getApplication()->find('help');102 $arguments = array(103 'command' => 'help',104 'command_name' => 'plugins:activer',105 );106 $input = new ArrayInput($arguments);107 $command->run($input, $output);108 95 } 109 96 … … 164 151 return true; 165 152 } 166 $actifs = array_keys($this->getPluginsActifs()); 167 $actifs = array_map('strtolower', $actifs); 153 $actifs = array_column($this->getPluginsActifs(), 'prefixe'); 168 154 169 155 if ($deja = array_intersect($actifs, $prefixes)) { … … 181 167 $activer = []; 182 168 foreach ($inactifs as $plugin) { 183 $prefixe = strtolower($plugin['nom']);169 $prefixe = $plugin['prefixe']; 184 170 if (in_array($prefixe, $prefixes)) { 185 171 $activer[] = $plugin['dir']; … … 202 188 } 203 189 204 public function actualiserSVP() {205 /* actualiser la liste des paquets locaux */206 include_spip('inc/svp_depoter_local');207 /* sans forcer tout le recalcul en base, mais en208 récupérant les erreurs XML */209 $err = array();210 svp_actualiser_paquets_locaux(false, $err);211 if ($err) {212 $this->io->care("Erreurs XML présentes :");213 $this->io->care($err);214 }215 }216 190 } -
_outils_/spip-cli/trunk/src/Command/PluginsDesactiver.php
r110765 r110796 3 3 namespace Spip\Cli\Command; 4 4 5 use S ymfony\Component\Console\Command\Command;5 use Spip\Cli\Loader\Spip; 6 6 use Symfony\Component\Console\Input\InputArgument; 7 7 use Symfony\Component\Console\Input\InputInterface; 8 8 use Symfony\Component\Console\Input\InputOption; 9 use Symfony\Component\Console\Input\ArrayInput;10 9 use Symfony\Component\Console\Output\OutputInterface; 11 10 use Symfony\Component\Console\Question\Question; 12 use Symfony\Component\Console\Question\ConfirmationQuestion;13 11 14 class PluginsDesactiver extends Command { 15 protected function configure() { 16 $this 17 ->setName('plugins:desactiver') 18 ->setDescription('Désactive des plugins.') 19 ->addArgument( 20 'plugins', 21 InputArgument::IS_ARRAY, 22 'La liste de plugins à désactiver.' 23 ) 24 ->addOption( 25 'all', 26 'a', 27 InputOption::VALUE_NONE, 28 "Désactiver tous les plugins." 29 ) 30 ; 31 } 12 class PluginsDesactiver extends PluginsLister { 32 13 33 protected function execute(InputInterface $input, OutputInterface $output) { 34 global $spip_loaded; 35 global $spip_racine; 36 global $cwd; 14 protected function configure() { 15 $this->setName("plugins:desactiver") 16 ->setDescription("Désactive un ou plusieurs plugins") 17 ->addArgument('prefixes', InputArgument::OPTIONAL|InputArgument::IS_ARRAY, 'Liste des préfixes à désactiver') 18 ->addOption('all', 'a', InputOption::VALUE_NONE, 'Désactive tous les plugins actifs') 19 ->addOption('yes', 'y', InputOption::VALUE_NONE, 'Désctiver les plugins sans poser de question') 20 ; 21 } 37 22 38 if ($spip_loaded) {39 chdir($spip_racine);40 23 41 $actifs = unserialize($GLOBALS['meta']['plugin']); 24 protected function execute(InputInterface $input, OutputInterface $output) { 25 $this->io = $this->getApplication()->getIo($input, $output); 26 $this->io->title("Désactiver des plugins"); 42 27 43 /* Si on a choisi l'options --all, on prends tous les 44 plugins qui ne sont pas dans plugins-dist */ 45 if ($input->getOption('all')) { 46 $plugins = array_map('strtolower',array_keys($actifs)); 28 /** @var Spip $spip */ 29 $spip = $this->getApplication()->getService('spip.loader'); 30 $spip->load(); 31 $spip->chdir(); 32 $this->actualiserPlugins(); 47 33 48 include_spip('base/abstract_sql'); 49 $plugins = array_filter($plugins, function ($prefixe) { 50 return sql_countsel('spip_plugins as pl'. 51 ' INNER JOIN spip_paquets as pa'. 52 ' ON pa.prefixe=pl.prefixe', 53 array( 54 'pl.prefixe='.sql_quote(strtoupper($prefixe)), 55 'pa.constante="_DIR_PLUGINS"', 56 )); 34 $prefixes = $input->getArgument('prefixes'); 57 35 58 }); 36 if ($input->getOption('all')) { 37 $prefixes = array_column($this->getPluginsActifs(['procure' => false, 'php' => false, 'dist' => false]), 'prefixe'); 38 } 59 39 60 } else { 61 $plugins = $input->getArgument('plugins'); 62 } 40 if (!$prefixes) { 41 $prefixes = $this->getPrefixesFromQuestion(); 42 if (!$prefixes) { 43 $this->getApplication()->showHelp('plugins:desactiver', $output); 44 return; 45 } 46 } 63 47 64 if ( ! $plugins) { 48 $this->io->text("Liste des plugins à désactiver :"); 49 $this->presenterListe($prefixes); 65 50 66 /* Si pas de plugin(s) spécifiés, on demande */ 67 $helper = $this->getHelper('question'); 68 $question = new Question("Quel plugin faut-il désactiver ?\n", 'help'); 69 $question->setAutoCompleterValues(array_map('strtolower', array_keys($actifs))); 51 if ( 52 !$input->getOption('yes') 53 and !$this->io->confirm("Les plugins listés au-dessus seront désactivés. Confirmez-vous ?", false) 54 ) { 55 $this->io->care("Action annulée"); 56 return; 57 } 70 58 71 $reponse = trim($helper->ask($input, $output, $question)); 72 /* Si même après avoir demandé, l'utilisateur n'a pas 73 donné de plugin à désactiver, on affiche l'aide. */ 74 if ($reponse == 'help') { 75 $command = $this->getApplication()->find('help'); 76 $arguments = array( 77 'command' => 'help', 78 'command_name' => 'plugins:desactiver', 79 ); 80 $input = new ArrayInput($arguments); 81 $command->run($input, $output); 82 return; 83 } 59 $this->desactiverPlugins($prefixes); 60 } 84 61 85 $plugins = explode(' ', $reponse); 86 } 62 /* Si pas de plugin(s) spécifiés, on demande */ 63 public function getPrefixesFromQuestion() { 64 $io = $this->io; 65 $inactifs = array_column($this->getPluginsActifs(['dist' => false]), 'prefixe'); 66 $question = new Question("Quel plugin faut-il désactiver ?\n", 'help'); 67 $question->setAutoCompleterValues($inactifs); 68 $reponse = trim($io->askQuestion($question)); 69 if ($reponse === 'help') { 70 return false; 71 } 72 return explode(' ', $reponse); 73 } 87 74 88 /* On liste le(s) plugin(s) qui seront désactivés et on89 demande confirmation. */90 $helper = $this->getHelper('question');91 $confirmer = new ConfirmationQuestion("Vous allez désactiver les plugins suivants : " . implode(', ', $plugins) . ".\nÊtes-vous certain-e de vouloir continuer ? ", false);92 75 93 if ( ! $helper->ask($input, $output, $confirmer)) return; 76 public function desactiverPlugins($prefixes) { 77 if (!count($prefixes)) { 78 $this->io->care("Aucun prefixe à désactiver"); 79 return true; 80 } 94 81 95 /* Et enfin, on désactive le(s) plugin(s) */ 96 $dir_un = array(); 97 foreach ($plugins as $prefixe) { 98 if ( ! isset($actifs[strtoupper($prefixe)])){ 99 $output->writeln("<error>Le plugin $prefixe est introuvable dans les plugins actifs.</error>"); 100 } else { 101 $plugin = $actifs[strtoupper($prefixe)]; 102 $dir = constant($plugin['dir_type']).$plugin['dir']; 103 $output->writeln("<info>Desactive le plugin $prefixe (repertoire $dir)</info>"); 104 $dirs_un[] = $plugin['dir']; 105 } 106 } 82 $actifs = array_column($this->getPluginsActifs(), 'prefixe'); 107 83 108 if (count($dirs_un)){ 109 include_spip('inc/plugin'); 110 ecrire_plugin_actifs($dirs_un,false,'enleve'); 111 /* actualiser la liste des paquets locaux */ 112 include_spip('inc/svp_depoter_local'); 113 /*sans forcer tout le recalcul en base, mais en 114 récupérant les erreurs XML */ 115 $err = array(); 116 svp_actualiser_paquets_locaux(false, $err); 117 if ($err) { 118 $output->writeln("<error>Erreur XML $err</error>"); 119 } 120 } 84 if ($deja = array_diff($prefixes, $actifs)) { 85 $prefixes = array_diff($prefixes, $deja); 86 if ($prefixes) { 87 $this->io->text("Certains préfixes demandés sont déjà inactifs :"); 88 $this->presenterListe($deja); 89 } else { 90 $this->io->check("Tous les préfixes demandés sont déjà inactifs"); 91 return true; 92 } 93 } 121 94 122 chdir($cwd); 95 $desactiver = []; 96 foreach ($this->getPluginsActifs() as $plugin) { 97 $prefixe = $plugin['prefixe']; 98 if (in_array($prefixe, $prefixes)) { 99 $desactiver[] = $plugin['dir']; 100 $prefixes = array_diff($prefixes, [$prefixe]); 101 } 102 } 123 103 124 } else { 125 126 $output->writeln("<comment>Vous n'êtes pas dans un installation de SPIP, il n'y a pas de plugins disponibles.</comment>");127 128 } 129 104 ecrire_plugin_actifs($desactiver, false, 'enleve'); 105 $actifs = $this->getPluginsActifs(['procure' => false, 'php' => false]); 106 $this->io->text("Plugins actifs après action :"); 107 $this->showPlugins($actifs); 108 $this->actualiserSVP(); 109 } 130 110 } -
_outils_/spip-cli/trunk/src/Command/PluginsLister.php
r110794 r110796 145 145 $plugins = unserialize($GLOBALS['meta']['plugin']); 146 146 if ($options['spip']) { 147 return ['SPIP' => $plugins['SPIP']];147 return ['SPIP' => array_merge(['prefixe' => 'spip'], $plugins['SPIP'])]; 148 148 } else { 149 149 unset($plugins['SPIP']); … … 151 151 152 152 foreach ($plugins as $k => $v) { 153 $plugins[$k] = array_merge(['prefixe' => strtolower($k)], $v); 153 154 $is = [ 154 155 'php' => ($k === 'PHP' or strpos($k, 'PHP:') === 0), … … 161 162 } 162 163 } 163 164 164 } 165 165 … … 182 182 foreach($plugins as $dir){ 183 183 $infos = $get_infos($dir, false, $dp); 184 $prefix = strtoupper($infos['prefix']);185 184 $list[] = [ 186 ' nom' => $prefix,185 'prefixe' => strtolower($infos['prefix']), 187 186 'etat' => $infos['etat'], 188 187 'version' => $infos['version'], … … 215 214 } 216 215 } 216 217 public function actualiserSVP() { 218 /* actualiser la liste des paquets locaux */ 219 include_spip('inc/svp_depoter_local'); 220 /* sans forcer tout le recalcul en base, mais en 221 récupérant les erreurs XML */ 222 $err = array(); 223 svp_actualiser_paquets_locaux(false, $err); 224 if ($err) { 225 $this->io->care("Erreurs XML présentes :"); 226 $this->io->care($err); 227 } 228 } 217 229 }
Note: See TracChangeset
for help on using the changeset viewer.