From 519300f6e8703023e36e68a33bb0f30712559b4f Mon Sep 17 00:00:00 2001
From: Matthieu Marcillaud <marcimat@rezo.net>
Date: Sun, 13 Feb 2022 22:10:48 +0100
Subject: [PATCH] Remplacement des call_user_func et call_user_func_array par
 des `$func($param)` ou `$func(...$params)`

---
 ecrire/balise/formulaire_.php          | 4 ++--
 ecrire/base/upgrade.php                | 2 +-
 ecrire/inc/auth.php                    | 2 +-
 ecrire/inc/autoriser.php               | 4 +---
 ecrire/inc/cvt_configurer.php          | 2 +-
 ecrire/inc/cvt_multietapes.php         | 4 ++--
 ecrire/inc/exporter_csv.php            | 4 ++--
 ecrire/inc/filtres.php                 | 8 ++++----
 ecrire/inc/filtres_images_lib_mini.php | 2 +-
 ecrire/inc/queue.php                   | 2 +-
 ecrire/inc/utils.php                   | 4 ++--
 ecrire/public/aiguiller.php            | 7 +++----
 ecrire/public/fonctions.php            | 2 +-
 ecrire/xml/sax.php                     | 2 +-
 14 files changed, 23 insertions(+), 26 deletions(-)

diff --git a/ecrire/balise/formulaire_.php b/ecrire/balise/formulaire_.php
index f454302bc5..5ca3262681 100644
--- a/ecrire/balise/formulaire_.php
+++ b/ecrire/balise/formulaire_.php
@@ -344,7 +344,7 @@ function balise_FORMULAIRE__contexte($form, $args) {
  */
 function formulaire__charger($form, $args, $poste) {
 	if ($charger_valeurs = charger_fonction('charger', "formulaires/$form", true)) {
-		$valeurs = call_user_func_array($charger_valeurs, $args);
+		$valeurs = $charger_valeurs(...$args);
 	} else {
 		$valeurs = [];
 	}
@@ -407,7 +407,7 @@ function formulaire__charger($form, $args, $poste) {
  */
 function formulaire__identifier($form, $args, $p) {
 	if ($identifier_args = charger_fonction('identifier', "formulaires/$form", true)) {
-		return call_user_func_array($identifier_args, $args) === call_user_func_array($identifier_args, $p);
+		return $identifier_args(...$args) === $identifier_args(...$p);
 	}
 
 	return $args === $p;
diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php
index c1f8927371..28fccc251c 100644
--- a/ecrire/base/upgrade.php
+++ b/ecrire/base/upgrade.php
@@ -455,7 +455,7 @@ function serie_alter($serie, $q = [], $meta = '', $table = 'meta', $redirect = '
 					ecrire_meta($meta2, $i + 1, 'non', $table);
 				}
 				echo (_IS_CLI ? '.' : " <span title='$i'>.</span>");
-				call_user_func_array($f, $r);
+				$f(...$r);
 				// si temps imparti depasse, on relance sans ecrire en meta
 				// car on est peut etre sorti sur timeout si c'est une fonction longue
 				if (time() >= _TIME_OUT) {
diff --git a/ecrire/inc/auth.php b/ecrire/inc/auth.php
index 53c26762d6..155e898334 100644
--- a/ecrire/inc/auth.php
+++ b/ecrire/inc/auth.php
@@ -367,7 +367,7 @@ function auth_administrer($fonction, $args, $defaut = false) {
 		$auth = charger_fonction($auth_methode, 'auth', true)
 		and function_exists($f = "auth_{$auth_methode}_$fonction")
 	) {
-		$res = call_user_func_array($f, $args);
+		$res = $f(...$args);
 	} else {
 		$res = $defaut;
 	}
diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index f811dfeb08..751152e0c4 100644
--- a/ecrire/inc/autoriser.php
+++ b/ecrire/inc/autoriser.php
@@ -111,9 +111,7 @@ if (!function_exists('autoriser')) {
 			pipeline('autoriser');
 		}
 
-		$args = func_get_args();
-
-		return call_user_func_array('autoriser_dist', $args);
+		return autoriser_dist($faire, $type, $id, $qui, $opt);
 	}
 }
 
diff --git a/ecrire/inc/cvt_configurer.php b/ecrire/inc/cvt_configurer.php
index 191cc9ef4b..a93be649a6 100644
--- a/ecrire/inc/cvt_configurer.php
+++ b/ecrire/inc/cvt_configurer.php
@@ -96,7 +96,7 @@ function cvtconf_formulaires_configurer_enregistre($form, $args) {
 	// ce qui permet de prendre en charge une fonction charger() existante
 	// qui prend alors la main sur l'auto detection
 	if ($charger_valeurs = charger_fonction('charger', "formulaires/$form/", true)) {
-		$valeurs = call_user_func_array($charger_valeurs, $args);
+		$valeurs = $charger_valeurs(...$args);
 	}
 	$valeurs = pipeline(
 		'formulaire_charger',
diff --git a/ecrire/inc/cvt_multietapes.php b/ecrire/inc/cvt_multietapes.php
index f7c0b6dc4c..681bb97ca7 100644
--- a/ecrire/inc/cvt_multietapes.php
+++ b/ecrire/inc/cvt_multietapes.php
@@ -238,11 +238,11 @@ function cvtmulti_formulaire_verifier_etapes($args, $erreurs) {
 			$e++;
 			$erreurs_etapes[$e] = [];
 			if ($verifier = charger_fonction("verifier_$e", "formulaires/$form/", true)) {
-				$erreurs_etapes[$e] = call_user_func_array($verifier, $args['args']);
+				$erreurs_etapes[$e] = $verifier(...$args['args']);
 			} elseif ($verifier = charger_fonction('verifier_etape', "formulaires/$form/", true)) {
 				$a = $args['args'];
 				array_unshift($a, $e);
-				$erreurs_etapes[$e] = call_user_func_array($verifier, $a);
+				$erreurs_etapes[$e] = $verifier(...$a);
 			}
 			// et on appelle un pipeline dedie aux etapes, plus easy
 			$args['etape'] = $e;
diff --git a/ecrire/inc/exporter_csv.php b/ecrire/inc/exporter_csv.php
index 00a08c738f..164c06a41f 100644
--- a/ecrire/inc/exporter_csv.php
+++ b/ecrire/inc/exporter_csv.php
@@ -54,9 +54,9 @@ function exporter_csv_champ($champ) {
  * @param callable $callback
  * @return string
  */
-function exporter_csv_ligne_numerotee($nb, $ligne, $delim = ',', $importer_charset = null, $callback = null) {
+function exporter_csv_ligne_numerotee($nb, $ligne, $delim = ',', $importer_charset = null, ?callable $callback = null) {
 	if ($callback) {
-		$ligne = call_user_func($callback, $nb, $ligne, $delim, $importer_charset);
+		$ligne = $callback($nb, $ligne, $delim, $importer_charset);
 	}
 	$output = join($delim, array_map('exporter_csv_champ', $ligne)) . "\r\n";
 	if ($importer_charset) {
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index d467853d0f..9de75a20f0 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -353,7 +353,7 @@ function filtrer($filtre) {
 		return image_filtrer($tous);
 	} elseif ($f = chercher_filtre($filtre)) {
 		array_shift($tous);
-		return call_user_func_array($f, $tous);
+		return $f(...$tous);
 	} else {
 		// le filtre n'existe pas, on provoque une erreur
 		$msg = ['zbug_erreur_filtre', ['filtre' => texte_script($filtre)]];
@@ -535,7 +535,7 @@ function image_filtrer($args) {
 		};
 		if ($is_local_file($is_file) or tester_url_absolue($is_file)) {
 			array_unshift($args, "<img src='$is_file' />");
-			$res = call_user_func_array($filtre, $args);
+			$res = $filtre(...$args);
 			statut_effacer_images_temporaires(false); // desactiver pour les appels hors compilo
 			return $res;
 		}
@@ -559,7 +559,7 @@ function image_filtrer($args) {
 					and strpos($class, 'no_image_filtrer') === false)
 			) {
 				array_unshift($args, $tag[3]);
-				if ($reduit = call_user_func_array($filtre, $args)) {
+				if ($reduit = $filtre(...$args)) {
 					// En cas de span spip_documents, modifier le style=...width:
 					if ($tag[1]) {
 						$w = extraire_attribut($reduit, 'width');
@@ -578,7 +578,7 @@ function image_filtrer($args) {
 							$srcover = $match[1];
 							array_shift($args);
 							array_unshift($args, "<img src='" . $match[1] . "' />");
-							$srcover_filter = call_user_func_array($filtre, $args);
+							$srcover_filter = $filtre(...$args);
 							$srcover_filter = extraire_attribut($srcover_filter, 'src');
 							$reduit = str_replace($srcover, $srcover_filter, $reduit);
 						}
diff --git a/ecrire/inc/filtres_images_lib_mini.php b/ecrire/inc/filtres_images_lib_mini.php
index 6fb72003ca..2b353d857b 100644
--- a/ecrire/inc/filtres_images_lib_mini.php
+++ b/ecrire/inc/filtres_images_lib_mini.php
@@ -1081,7 +1081,7 @@ function reconstruire_image_intermediaire($fichier_manquant) {
 		$r = array_pop($reconstruire);
 		$fonction = $r[0];
 		$args = $r[1];
-		call_user_func_array($fonction, $args);
+		$fonction(...$args);
 	}
 	// cette image intermediaire est commune a plusieurs series de filtre, il faut la conserver
 	// mais l'on peut nettoyer les miettes de sa creation
diff --git a/ecrire/inc/queue.php b/ecrire/inc/queue.php
index 243639995b..8d03d43aa6 100644
--- a/ecrire/inc/queue.php
+++ b/ecrire/inc/queue.php
@@ -310,7 +310,7 @@ function queue_start_job($row) {
 			break;
 		default:
 			# plus lent mais completement generique
-			$res = call_user_func_array($fonction, $args);
+			$res = $fonction(...$args);
 	}
 	spip_log('queue [' . $row['id_job'] . "]: $fonction() end", 'queue');
 
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 577a79ce33..28e6bf3228 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -233,7 +233,7 @@ function include_fichiers_fonctions() {
 function minipipe($fonc, &$val) {
 	// fonction
 	if (function_exists($fonc)) {
-		$val = call_user_func($fonc, $val);
+		$val = $fonc($val);
 	} // Class::Methode
 	else {
 		if (
@@ -241,7 +241,7 @@ function minipipe($fonc, &$val) {
 			and $methode = [$regs[1], $regs[2]]
 			and is_callable($methode)
 		) {
-			$val = call_user_func($methode, $val);
+			$val = $methode($val);
 		} else {
 			spip_log("Erreur - '$fonc' non definie !");
 		}
diff --git a/ecrire/public/aiguiller.php b/ecrire/public/aiguiller.php
index c13cf32785..e63a729eaa 100644
--- a/ecrire/public/aiguiller.php
+++ b/ecrire/public/aiguiller.php
@@ -253,7 +253,7 @@ function traiter_formulaires_dynamiques($get = false) {
 			'formulaire_verifier',
 			[
 				'args' => ['form' => $form, 'args' => $args],
-				'data' => $verifier ? call_user_func_array($verifier, $args) : []
+				'data' => $verifier ? $verifier(...$args) : []
 			]
 		);
 		// prise en charge CVT multi etape si besoin
@@ -286,7 +286,7 @@ function traiter_formulaires_dynamiques($get = false) {
 		if (isset($post["erreurs_$form"]) and ((is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) == 0)) {
 			$rev = '';
 			if ($traiter = charger_fonction('traiter', "formulaires/$form/", true)) {
-				$rev = call_user_func_array($traiter, $args);
+				$rev = $traiter(...$args);
 			}
 
 			$rev = pipeline(
@@ -331,8 +331,7 @@ function traiter_formulaires_dynamiques($get = false) {
 			if (find_in_path('formulaire_.php', 'balise/', true)) {
 				include_spip('inc/actions');
 				include_spip('public/assembler');
-				array_unshift($args, $form);
-				$retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn', $args), false);
+				$retour .= inclure_balise_dynamique(balise_formulaire__dyn($form, ...$args), false);
 				// on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
 				// sans cela le formulaire n'est pas actif apres le hit ajax
 				// la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
diff --git a/ecrire/public/fonctions.php b/ecrire/public/fonctions.php
index 9b444600c1..57f5cac708 100644
--- a/ecrire/public/fonctions.php
+++ b/ecrire/public/fonctions.php
@@ -551,5 +551,5 @@ function appliquer_filtre_sinon($arg, $filtre, $args, $defaut = '') {
 	array_shift($args); // enlever $arg
 	array_shift($args); // enlever $filtre
 	array_unshift($args, $arg); // remettre $arg
-	return call_user_func_array($f, $args);
+	return $f(...$args);
 }
diff --git a/ecrire/xml/sax.php b/ecrire/xml/sax.php
index d875e15ff8..8537bbfd01 100644
--- a/ecrire/xml/sax.php
+++ b/ecrire/xml/sax.php
@@ -162,7 +162,7 @@ function xml_sax_dist($page, $apply = false, $phraseur = null, $doctype = '', $c
 	if ($apply) {
 		ob_start();
 		if (is_array($apply)) {
-			$r = call_user_func_array($page, $apply);
+			$r = $page(...$apply);
 		} else {
 			$r = $page();
 		}
-- 
GitLab