Changeset 111097 in spip-zone


Ignore:
Timestamp:
Jul 12, 2018, 11:06:44 AM (3 years ago)
Author:
real3t@…
Message:

Une commande de plus : plugins:listerheader qui exporte dans un fichier la liste des plugins stockée dans la meta plugin_header

Location:
_outils_/spip-cli/trunk
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • _outils_/spip-cli/trunk/composer.lock

    r110954 r111097  
    186186        {
    187187            "name": "symfony/console",
    188             "version": "v2.8.41",
     188            "version": "v2.8.42",
    189189            "source": {
    190190                "type": "git",
     
    247247        {
    248248            "name": "symfony/debug",
    249             "version": "v2.8.41",
     249            "version": "v2.8.42",
    250250            "source": {
    251251                "type": "git",
    252252                "url": "https://github.com/symfony/debug.git",
    253                 "reference": "fe8838e11cf7dbaf324bd6f51d065d873ccf78a2"
    254             },
    255             "dist": {
    256                 "type": "zip",
    257                 "url": "https://api.github.com/repos/symfony/debug/zipball/fe8838e11cf7dbaf324bd6f51d065d873ccf78a2",
    258                 "reference": "fe8838e11cf7dbaf324bd6f51d065d873ccf78a2",
     253                "reference": "a26ddce7fe4e884097d72435653bc7e703411f26"
     254            },
     255            "dist": {
     256                "type": "zip",
     257                "url": "https://api.github.com/repos/symfony/debug/zipball/a26ddce7fe4e884097d72435653bc7e703411f26",
     258                "reference": "a26ddce7fe4e884097d72435653bc7e703411f26",
    259259                "shasum": ""
    260260            },
     
    300300            "description": "Symfony Debug Component",
    301301            "homepage": "https://symfony.com",
    302             "time": "2018-05-15T21:17:45+00:00"
     302            "time": "2018-06-22T15:01:26+00:00"
    303303        },
    304304        {
    305305            "name": "symfony/finder",
    306             "version": "v2.8.41",
     306            "version": "v2.8.42",
    307307            "source": {
    308308                "type": "git",
    309309                "url": "https://github.com/symfony/finder.git",
    310                 "reference": "79764d21163db295f0daf8bd9d9b91f97e65db6a"
    311             },
    312             "dist": {
    313                 "type": "zip",
    314                 "url": "https://api.github.com/repos/symfony/finder/zipball/79764d21163db295f0daf8bd9d9b91f97e65db6a",
    315                 "reference": "79764d21163db295f0daf8bd9d9b91f97e65db6a",
     310                "reference": "995cd7c28a0778cece02e2133b4d813dc509dfc3"
     311            },
     312            "dist": {
     313                "type": "zip",
     314                "url": "https://api.github.com/repos/symfony/finder/zipball/995cd7c28a0778cece02e2133b4d813dc509dfc3",
     315                "reference": "995cd7c28a0778cece02e2133b4d813dc509dfc3",
    316316                "shasum": ""
    317317            },
     
    349349            "description": "Symfony Finder Component",
    350350            "homepage": "https://symfony.com",
    351             "time": "2018-05-15T21:17:45+00:00"
     351            "time": "2018-06-19T11:07:17+00:00"
    352352        },
    353353        {
     
    412412        {
    413413            "name": "symfony/process",
    414             "version": "v2.8.41",
     414            "version": "v2.8.42",
    415415            "source": {
    416416                "type": "git",
    417417                "url": "https://github.com/symfony/process.git",
    418                 "reference": "713952f2ccbcc8342ecdbe1cb313d3e2da8aad28"
    419             },
    420             "dist": {
    421                 "type": "zip",
    422                 "url": "https://api.github.com/repos/symfony/process/zipball/713952f2ccbcc8342ecdbe1cb313d3e2da8aad28",
    423                 "reference": "713952f2ccbcc8342ecdbe1cb313d3e2da8aad28",
     418                "reference": "542d88b350c42750fdc14e73860ee96dd423e95d"
     419            },
     420            "dist": {
     421                "type": "zip",
     422                "url": "https://api.github.com/repos/symfony/process/zipball/542d88b350c42750fdc14e73860ee96dd423e95d",
     423                "reference": "542d88b350c42750fdc14e73860ee96dd423e95d",
    424424                "shasum": ""
    425425            },
     
    457457            "description": "Symfony Process Component",
    458458            "homepage": "https://symfony.com",
    459             "time": "2018-05-15T21:17:45+00:00"
     459            "time": "2018-05-27T07:40:52+00:00"
    460460        }
    461461    ],
  • _outils_/spip-cli/trunk/src/Command/PluginsListerheader.php

    r111095 r111097  
    66use Spip\Cli\Console\Style\SpipCliStyle;
    77use Spip\Cli\Loader\Spip;
     8use Spip\Cli\Loader\Sql;
     9use Spip\Cli\Sql\Query;
    810use Symfony\Component\Console\Input\InputInterface;
    911use Symfony\Component\Console\Input\InputOption;
     
    1113
    1214
    13 class PluginsLister extends Command {
     15class PluginsListerheader extends PluginsLister {
    1416
    1517        protected function configure() {
    16                 $this->setName("plugins:lister")
    17                         ->setDescription("Liste les plugins du site.")
    18                         ->addOption('dist', null, InputOption::VALUE_NONE, 'Uniquement les plugins dist')
    19                         ->addOption('no-dist', null, InputOption::VALUE_NONE, 'Exclure les plugins dist')
    20                         ->addOption('procure', null, InputOption::VALUE_NONE, 'Uniquement les plugins procurés')
    21                         ->addOption('php', null, InputOption::VALUE_NONE, 'Uniquement les extensions PHP présentes')
    22                         ->addOption('spip', null, InputOption::VALUE_NONE, 'Uniquement SPIP')
    23                         ->addOption('short', null, InputOption::VALUE_NONE, 'Affiche simplement le préfixe')
    24 
    25                         ->addOption('inactifs', null, InputOption::VALUE_NONE, 'Liste les plugins inactifs.')
    26 
    27                         ->addOption('export', 'e', InputOption::VALUE_NONE, 'Exporter la liste des plugins actifs dans un fichier')
     18                $this->setName("plugins:listerheader")
     19                        ->setDescription("Export la liste des plugins du site telle stockée en base.")
    2820                        ->addOption('name', null, InputOption::VALUE_OPTIONAL, 'Nom du fichier d’export', 'plugins')
    2921                ;
     
    3123
    3224        protected function execute(InputInterface $input, OutputInterface $output) {
    33 
    34                 $this->demarrerSpip();
    35                 $this->io->title("Liste des plugins");
    36 
    37                 $this->actualiserPlugins();
    38 
    39                 if ($input->getOption('inactifs')) {
    40                         $this->showInactifs($input);
    41                 } elseif ($input->getOption('export')) {
    42                         $this->exportActifs($input);
    43                 } else {
    44                         $this->showActifs($input);
    45                 }
     25                $this->exportPlugins($input);
    4626        }
    4727
    48         public function showActifs(InputInterface $input) {
    49                 $options = [
    50                         'dist' => null,
    51                         'procure' => false,
    52                         'php' => false,
    53                         'spip' => false,
    54                 ];
    55                 $list = [];
    56 
    57                 if ($input->getOption('php')) {
    58                         $options['php'] = true;
    59                         $options['procure'] = true;
    60                         $list[] = 'Uniquement les extensions PHP procurées';
    61                 }
    62 
    63                 if ($input->getOption('procure')) {
    64                         $options['procure'] = true;
    65                         $list[] = 'Uniquement les plugins procurés';
    66                 }
    67 
    68                 if ($input->getOption('dist')) {
    69                         $options['dist'] = true;
    70                         $list[] = 'Uniquement les plugins-dist';
    71                 } elseif ($input->getOption('no-dist')) {
    72                         $options['dist'] = false;
    73                         $list[] = 'Sans les plugins-dist';
    74                 }
    75 
    76                 if ($input->getOption('spip')) {
    77                         $options['spip'] = true;
    78                         $list[] = 'Uniquement SPIP';
    79                 }
    80 
    81                 if ($list) {
    82                         $this->io->listing($list);
    83                 }
    84 
    85                 $actifs = $this->getPluginsActifs($options);
    86                 $this->showPlugins($actifs, $input->getOption('short'));
    87         }
    88 
    89         public function showInactifs(InputInterface $input) {
    90                 $list = ["Liste des plugins inactifs"];
    91                 $this->io->listing($list);
    92                 $inactifs = $this->getPluginsInactifs();
    93                 $this->showPlugins($inactifs);
    94         }
    95 
    96         public function getExportFile(InputInterface $input) {
    97                 $name = $input->getOption('name') . '.txt';
    98                 return _DIR_TMP . $name;
    99         }
    100        
    101         public function exportActifs(InputInterface $input) {
     28        public function exportPlugins(InputInterface $input) {
    10229                $file = $this->getExportFile($input);
    10330               
    104                 $actifs = $this->getPluginsActifs([
    105                         'procure' => false,
    106                         'php' => false,
    107                 ]);
    108 
    109                 $list = implode(" ", array_map('strtolower', array_keys($actifs)));
     31                /** @var Query $sql */
     32                $sql = $this->getService('sql.query');
     33                $header = $sql->getMeta('plugin_header');
     34                               
     35                $list = preg_replace('/\([^)]*\),?/',' ', $header);
     36                if (strpos($list, '(')) {
     37                        $list = substr($list, 0, strpos($list, '('));
     38                }
     39               
    11040                if (file_put_contents($file, $list)) {
    11141                        $this->io->check("Export dans : " . $file);
     
    11444                }
    11545                $this->io->text($list);
    116                 // $this->io->columns(explode(" ", $list), 6, true);
    11746        }
    11847
    119         public function actualiserPlugins() {
    120                 include_spip('inc/plugin');
    121                 actualise_plugins_actifs();
    122         }
    123 
    124         /**
    125          * Obtenir la liste des plugins actifs
    126          *
    127          * @param array $options {
    128          *     @var bool|null $php Afficher|Exclure|Uniquement les extensions PHP
    129          *     @var bool $spip Afficher le faux plugin 'SPIP'
    130          *     @var bool|null $dist Afficher|Exclure|Uniquement les plugins dist
    131          * }
    132          * @return array
    133          */
    134         public function getPluginsActifs(array $options = []) {
    135                 $options += [
    136                         'procure' => null,
    137                         'php' => null,
    138                         'spip' => false, // only SPIP ?
    139                         'dist' => null,
    140                 ];
    141                 $plugins = unserialize($GLOBALS['meta']['plugin']);
    142                 if ($options['spip']) {
    143                         return ['SPIP' => array_merge(['prefixe' => 'spip'], $plugins['SPIP'])];
    144                 } else {
    145                         unset($plugins['SPIP']);
    146                 }
    147 
    148                 foreach ($plugins as $k => $v) {
    149                         $plugins[$k] = array_merge(['prefixe' => strtolower($k)], $v);
    150                         $is = [
    151                                 'php' => ($k === 'PHP' or strpos($k, 'PHP:') === 0),
    152                                 'dist' => ($v['dir_type'] === '_DIR_PLUGINS_DIST'),
    153                                 'procure' => (strpos($v['dir'], 'procure:') !== false),
    154                         ];
    155                         foreach ($is as $quoi => $test) {
    156                                 if (!is_null($options[$quoi]) and ($options[$quoi] xor $is[$quoi])) {
    157                                         unset($plugins[$k]);
    158                                 }
    159                         }
    160                 }
    161 
    162                 return $plugins;
    163         }
    164 
    165         public function getPluginsInactifs() {
    166                 include_spip('inc/plugin');
    167                 // chercher dans les plugins dispo
    168                 $get_infos = charger_fonction('get_infos','plugins');
    169 
    170                 $dirs = ['_DIR_PLUGINS' => _DIR_PLUGINS];
    171                 if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL) {
    172                         $dirs['_DIR_PLUGINS_SUPPL'] = _DIR_PLUGINS_SUPPL;
    173                 }
    174 
    175                 $list = [];
    176                 foreach($dirs as $const => $dp) {
    177                         $plugins = liste_plugin_files($dp);
    178                         foreach($plugins as $dir){
    179                                 $infos = $get_infos($dir, false, $dp);
    180                                 $list[] = [
    181                                         'prefixe' => strtolower($infos['prefix']),
    182                                         'etat' => $infos['etat'],
    183                                         'version' => $infos['version'],
    184                                         'dir' => $dir,
    185                                         'dir_type' => $const,
    186                                 ];
    187                         }
    188                 }
    189                 return $list;
    190         }
    191 
    192         public function showPlugins(array $list, $short = false) {
    193                 ksort($list);
    194                 if ($short) {
    195                         $list = array_keys($list);
    196                         $list = array_map('strtolower', $list);
    197                         $list = array_map('ucfirst', $list);
    198                         $this->io->columns($list, 6, true);
    199                 } else {
    200                         $this->io->atable($list);
    201                 }
    202         }
    203 
    204 
    205         public function presenterListe(array $liste) {
    206                 if (count($liste) > 4) {
    207                         $this->io->columns($liste, 6, true);
    208                 } else {
    209                         $this->io->listing($liste);
    210                 }
    211         }
    212 
    213         public function actualiserSVP() {
    214                 /* actualiser la liste des paquets locaux */
    215                 include_spip('inc/svp_depoter_local');
    216                 /* sans forcer tout le recalcul en base, mais en
    217                   récupérant les erreurs XML */
    218                 $err = array();
    219                 svp_actualiser_paquets_locaux(false, $err);
    220                 if ($err) {
    221                         $this->io->care("Erreurs XML présentes :");
    222                         $this->io->care($err);
    223                 }
    224         }
    22548}
Note: See TracChangeset for help on using the changeset viewer.