Changeset 110796 in spip-zone


Ignore:
Timestamp:
Jun 21, 2018, 6:31:35 PM (14 months ago)
Author:
marcimat@…
Message:

Le pendant de plugins:activer (r110795 & r110795), voici plugins:desactiver, revu de la même manière.
À part la présentation, ça ne doit pas changer.

Location:
_outils_/spip-cli/trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _outils_/spip-cli/trunk/src/Application.php

    r110790 r110796  
    77use Symfony\Component\Console\Application as ConsoleApplication;
    88use Symfony\Component\Console\Input\ArgvInput;
     9use Symfony\Component\Console\Input\ArrayInput;
    910use Symfony\Component\Finder\Finder;
    1011use Symfony\Component\Console\Input\InputInterface;
     
    209210                return $this->container['console.io']($input, $output);
    210211        }
     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        }
    211231}
  • _outils_/spip-cli/trunk/src/Command/PluginsActiver.php

    r110795 r110796  
    44
    55use Spip\Cli\Loader\Spip;
    6 use Symfony\Component\Console\Command\Command;
    76use Symfony\Component\Console\Input\InputArgument;
    87use Symfony\Component\Console\Input\InputInterface;
    98use Symfony\Component\Console\Input\InputOption;
    10 use Symfony\Component\Console\Input\ArrayInput;
    119use Symfony\Component\Console\Output\OutputInterface;
    1210use Symfony\Component\Console\Question\Question;
    13 use Symfony\Component\Console\Question\ConfirmationQuestion;
    1411
    1512class PluginsActiver extends PluginsLister
     
    6057                        $plugins = $this->getPrefixesFromQuestion();
    6158                        if (!$plugins) {
    62                                 $this->showHelp($input, $output);
     59                                $this->getApplication()->showHelp('plugins:activer', $output);
    6360                                return;
    6461                        }
     
    8885        public function getPrefixesFromQuestion() {
    8986                $io = $this->io;
    90                 $inactifs = array_map('strtolower', array_column($this->getPluginsInactifs(), 'nom'));
     87                $inactifs = array_column($this->getPluginsInactifs(), 'prefixe');
    9188                $question = new Question("Quel plugin faut-il activer ?\n", 'help');
    9289                $question->setAutoCompleterValues($inactifs);
     
    9693                }
    9794                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);
    10895        }
    10996
     
    164151                        return true;
    165152                }
    166                 $actifs = array_keys($this->getPluginsActifs());
    167                 $actifs = array_map('strtolower', $actifs);
     153                $actifs = array_column($this->getPluginsActifs(), 'prefixe');
    168154
    169155                if ($deja = array_intersect($actifs, $prefixes)) {
     
    181167                $activer = [];
    182168                foreach ($inactifs as $plugin) {
    183                         $prefixe = strtolower($plugin['nom']);
     169                        $prefixe = $plugin['prefixe'];
    184170                        if (in_array($prefixe, $prefixes)) {
    185171                                $activer[] = $plugin['dir'];
     
    202188        }
    203189
    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 en
    208                   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         }
    216190}
  • _outils_/spip-cli/trunk/src/Command/PluginsDesactiver.php

    r110765 r110796  
    33namespace Spip\Cli\Command;
    44
    5 use Symfony\Component\Console\Command\Command;
     5use Spip\Cli\Loader\Spip;
    66use Symfony\Component\Console\Input\InputArgument;
    77use Symfony\Component\Console\Input\InputInterface;
    88use Symfony\Component\Console\Input\InputOption;
    9 use Symfony\Component\Console\Input\ArrayInput;
    109use Symfony\Component\Console\Output\OutputInterface;
    1110use Symfony\Component\Console\Question\Question;
    12 use Symfony\Component\Console\Question\ConfirmationQuestion;
    1311
    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     }
     12class PluginsDesactiver extends PluginsLister {
    3213
    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        }
    3722
    38         if ($spip_loaded) {
    39             chdir($spip_racine);
    4023
    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");
    4227
    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();
    4733
    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');
    5735
    58                 });
     36                if ($input->getOption('all')) {
     37                        $prefixes = array_column($this->getPluginsActifs(['procure' => false, 'php' => false, 'dist' => false]), 'prefixe');
     38                }
    5939
    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                }
    6347
    64             if ( ! $plugins) {
     48                $this->io->text("Liste des plugins à désactiver :");
     49                $this->presenterListe($prefixes);
    6550
    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                }
    7058
    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        }
    8461
    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        }
    8774
    88             /* On liste le(s) plugin(s) qui seront désactivés et on
    89                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);
    9275
    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                }
    9481
    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');
    10783
    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                }
    12194
    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                }
    123103
    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        }
    130110}
  • _outils_/spip-cli/trunk/src/Command/PluginsLister.php

    r110794 r110796  
    145145                $plugins = unserialize($GLOBALS['meta']['plugin']);
    146146                if ($options['spip']) {
    147                         return ['SPIP' => $plugins['SPIP']];
     147                        return ['SPIP' => array_merge(['prefixe' => 'spip'], $plugins['SPIP'])];
    148148                } else {
    149149                        unset($plugins['SPIP']);
     
    151151
    152152                foreach ($plugins as $k => $v) {
     153                        $plugins[$k] = array_merge(['prefixe' => strtolower($k)], $v);
    153154                        $is = [
    154155                                'php' => ($k === 'PHP' or strpos($k, 'PHP:') === 0),
     
    161162                                }
    162163                        }
    163 
    164164                }
    165165
     
    182182                        foreach($plugins as $dir){
    183183                                $infos = $get_infos($dir, false, $dp);
    184                                 $prefix = strtoupper($infos['prefix']);
    185184                                $list[] = [
    186                                         'nom' => $prefix,
     185                                        'prefixe' => strtolower($infos['prefix']),
    187186                                        'etat' => $infos['etat'],
    188187                                        'version' => $infos['version'],
     
    215214                }
    216215        }
     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        }
    217229}
Note: See TracChangeset for help on using the changeset viewer.