From ae8cf44afdf97c5848aefeecc760c00c73f8c08c Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Sat, 18 Jan 2020 20:53:24 +0100
Subject: [PATCH] on peut passer une option --module=.. pour ne traiter qu'un
 ou plusieurs modules specifiques

---
 inc/salvatore.php            | 20 ++++++++++++++++++++
 spip-cli/SalvatoreEcrire.php | 14 ++++++++++++++
 spip-cli/SalvatoreLire.php   | 14 ++++++++++++++
 spip-cli/SalvatoreTirer.php  | 14 ++++++++++++++
 4 files changed, 62 insertions(+)

diff --git a/inc/salvatore.php b/inc/salvatore.php
index e623297..9052af8 100644
--- a/inc/salvatore.php
+++ b/inc/salvatore.php
@@ -192,6 +192,26 @@ function salvatore_charger_fichier_traductions($fichier_traductions = null){
 	return $liste_trad;
 }
 
+/**
+ * Filtrer la liste complete pour ne garder que un ou plusieurs modules specifiques
+ * @param array $liste_trad
+ * @param string|array $modules
+ * @return array
+ */
+function salvatore_filtrer_liste_traductions($liste_trad, $modules) {
+	if (is_string($modules)) {
+		$modules = explode(',', $modules);
+	}
+	$modules = array_map('trim', $modules);
+	$liste_filtree = array();
+	foreach ($liste_trad as $trad) {
+		if (in_array($trad['module'], $modules)) {
+			$liste_filtree[] = $trad;
+		}
+	}
+	return $liste_filtree;
+}
+
 /**
  * Extraire la lang d'un fichier de langue d'un module donne
  * @param string $module
diff --git a/spip-cli/SalvatoreEcrire.php b/spip-cli/SalvatoreEcrire.php
index 519889b..8a04c60 100644
--- a/spip-cli/SalvatoreEcrire.php
+++ b/spip-cli/SalvatoreEcrire.php
@@ -52,6 +52,13 @@ class SalvatoreEcrire extends Command {
 				'Chemin vers le fichier traductions.txt a utiliser [salvatore/traductions/traductions.txt]',
 				null
 			)
+			->addOption(
+				'module',
+				null,
+				InputOption::VALUE_REQUIRED,
+				'Un ou plusieurs modules a traiter (par defaut tous les modules du fichier de traduction seront traites)',
+				null
+			)
 			->addOption(
 				'message',
 				null,
@@ -82,6 +89,13 @@ class SalvatoreEcrire extends Command {
 		$n = count($liste_trad);
 		$output->writeln("<info>$n modules dans le fichier traductions " . ($traductions ? $traductions : '') . "</info>");
 
+		$modules = $input->getOption('module');
+		if ($modules = trim($modules)) {
+			$liste_trad = salvatore_filtrer_liste_traductions($liste_trad, $modules);
+			$n = count($liste_trad);
+			$output->writeln("<info>$n modules à traiter : " . $modules . "</info>");
+		}
+
 		$message = $input->getOption('message');
 
 		salvatore_ecrire($liste_trad, $message ? $message : '');
diff --git a/spip-cli/SalvatoreLire.php b/spip-cli/SalvatoreLire.php
index 0c7f1fd..d363cef 100644
--- a/spip-cli/SalvatoreLire.php
+++ b/spip-cli/SalvatoreLire.php
@@ -52,6 +52,13 @@ class SalvatoreLire extends Command {
 				'Chemin vers le fichier traductions.txt a utiliser [salvatore/traductions/traductions.txt]',
 				null
 			)
+			->addOption(
+				'module',
+				null,
+				InputOption::VALUE_REQUIRED,
+				'Un ou plusieurs modules a traiter (par defaut tous les modules du fichier de traduction seront traites)',
+				null
+			)
 		;
 	}
 
@@ -75,6 +82,13 @@ class SalvatoreLire extends Command {
 		$n = count($liste_trad);
 		$output->writeln("<info>$n modules dans le fichier traductions " . ($traductions ? $traductions : '') . "</info>");
 
+		$modules = $input->getOption('module');
+		if ($modules = trim($modules)) {
+			$liste_trad = salvatore_filtrer_liste_traductions($liste_trad, $modules);
+			$n = count($liste_trad);
+			$output->writeln("<info>$n modules à traiter : " . $modules . "</info>");
+		}
+
 		salvatore_lire($liste_trad);
 	}
 }
diff --git a/spip-cli/SalvatoreTirer.php b/spip-cli/SalvatoreTirer.php
index 5b9ff57..5a8176d 100644
--- a/spip-cli/SalvatoreTirer.php
+++ b/spip-cli/SalvatoreTirer.php
@@ -51,6 +51,13 @@ class SalvatoreTirer extends Command {
 				'Chemin vers le fichier traductions.txt a utiliser [salvatore/traductions/traductions.txt]',
 				null
 			)
+			->addOption(
+				'module',
+				null,
+				InputOption::VALUE_REQUIRED,
+				'Un ou plusieurs modules a traiter (par defaut tous les modules du fichier de traduction seront traites)',
+				null
+			)
 		;
 	}
 
@@ -73,6 +80,13 @@ class SalvatoreTirer extends Command {
 		$n = count($liste_trad);
 		$output->writeln("<info>$n modules dans le fichier traductions " . ($traductions ? $traductions : '') . "</info>");
 
+		$modules = $input->getOption('module');
+		if ($modules = trim($modules)) {
+			$liste_trad = salvatore_filtrer_liste_traductions($liste_trad, $modules);
+			$n = count($liste_trad);
+			$output->writeln("<info>$n modules à traiter : " . $modules . "</info>");
+		}
+
 		salvatore_tirer($liste_trad);
 	}
 }
-- 
GitLab