Bonjour,
J’ai un patch à proposer. Comment le partager sur spip-contrib-outils / spip-cli · GitLab ? Ici, ça suffit ?
diff --git a/src/Command/PluginsSvpTelecharger.php b/src/Command/PluginsSvpTelecharger.php
index 8e74cee..ecedb2b 100644
--- a/src/Command/PluginsSvpTelecharger.php
+++ b/src/Command/PluginsSvpTelecharger.php
@@ -20,7 +20,7 @@ class PluginsSvpTelecharger extends PluginsActiver
foreach ($prefixes as $prefix) {
$this->io->comment("Plugin en cours d'installation : " . $prefix);
- $infos = $decideur->infos_courtes('UPPER(pl.prefixe) = LOWER("' . strtoupper($prefix) . '")');
+ $infos = $decideur->infos_courtes('UPPER(pl.prefixe) = UPPER("' . $prefix . '")');
if (empty($infos['i'])) {
$this->io->error('Le plugin ' . $prefix . " n'est pas référencé");
continue;
@@ -52,9 +52,25 @@ class PluginsSvpTelecharger extends PluginsActiver
$actionneur->verrouiller();
$actionneur->sauver_actions();
+ // SPIP normalizes authorization types twice in this path (_plugins -> plugins -> plugin).
+ // Register both forms so teleporter authorization is effectively granted.
autoriser_exception('ajouter', '_plugins', '*');
+ autoriser_exception('ajouter', '_plugin', '*');
+ $errorCount = count($actionneur->err);
while ($res = $actionneur->one_action()) {
- $this->io->comment($res['n'] . ' action réalisée : ' . $res['todo']);
+ $lastDone = end($actionneur->done) ?: [];
+ reset($actionneur->done);
+
+ if (!empty($lastDone['done'])) {
+ $this->io->comment($res['n'] . ' action réalisée : ' . $res['todo']);
+ continue;
+ }
+
+ $this->io->error($res['n'] . ' action en échec : ' . $res['todo']);
+ foreach (array_slice($actionneur->err, $errorCount) as $error) {
+ $this->io->error($error);
+ }
+ $errorCount = count($actionneur->err);
}
$actionneur->deverrouiller();