From 7791a8c7e72636f00ab0f29d121d186ce2ac164a Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Thu, 4 Feb 2021 15:12:52 +0100
Subject: [PATCH] Une fonction shorthand include_fichiers_fonctions() pour
 inclure le mes_fonctions.php + tous les fichiers xxx_fonctions.php des
 plugins quand on a besoin d'un filtre dans le php

---
 ecrire/base/dump.php         | 12 +-----------
 ecrire/inc/filtres.php       |  2 ++
 ecrire/inc/utils.php         | 28 ++++++++++++++++++++++++++++
 ecrire/public/aiguiller.php  |  2 +-
 ecrire/public/parametrer.php | 17 +----------------
 5 files changed, 33 insertions(+), 28 deletions(-)

diff --git a/ecrire/base/dump.php b/ecrire/base/dump.php
index b0dbb00c91..89457c0d64 100644
--- a/ecrire/base/dump.php
+++ b/ecrire/base/dump.php
@@ -26,17 +26,7 @@ include_spip('base/serial');
 include_spip('base/auxiliaires');
 include_spip('public/interfaces'); // pour table_jointures
 
-// NB: Ce fichier peut ajouter des tables (old-style)
-// donc il faut l'inclure "en globals"
-if ($f = find_in_path('mes_fonctions.php')) {
-	global $dossier_squelettes;
-	@include_once(_ROOT_CWD . $f);
-}
-
-if (@is_readable(_CACHE_PLUGINS_FCT)) {
-	// chargement optimise precompile
-	include_once(_CACHE_PLUGINS_FCT);
-}
+include_fichiers_fonctions();
 
 /**
  * Retourne un nom de meta pour une rubrique et l'auteur connecté.
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 1461f9c2e8..a7f568a93f 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -92,6 +92,8 @@ function chercher_filtre($fonc, $default = null) {
 
 		return $f;
 	}
+
+	include_fichiers_fonctions();
 	foreach (array('filtre_' . $fonc, 'filtre_' . $fonc . '_dist', $fonc) as $f) {
 		trouver_filtre_matrice($f); // charge des fichiers spécifiques éventuels
 		// fonction ou name\space\fonction
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index f538bd1d37..711321a74e 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -171,6 +171,34 @@ function require_spip($f) {
 	return find_in_path($f . '.php', '', 'required');
 }
 
+
+/**
+ * Raccourci pour inclure mes_fonctions.php et tous les fichiers _fonctions.php des plugin
+ * quand on a besoin dans le PHP de filtres/fonctions qui y sont definis
+ */
+function include_fichiers_fonctions() {
+	static $done = false;
+	if (!$done) {
+		include_spip('inc/lang');
+
+		// NB: mes_fonctions peut initialiser $dossier_squelettes (old-style)
+		// donc il faut l'inclure "en globals"
+		if ($f = find_in_path('mes_fonctions.php')) {
+			global $dossier_squelettes;
+			include_once(_ROOT_CWD . $f);
+		}
+
+		if (@is_readable(_CACHE_PLUGINS_FCT)) {
+			// chargement optimise precompile
+			include_once(_CACHE_PLUGINS_FCT);
+		}
+		if (test_espace_prive()) {
+			include_spip('inc/filtres_ecrire');
+		}
+		$done = true;
+	}
+}
+
 /**
  * Exécute une fonction (appellée par un pipeline) avec la donnée transmise.
  *
diff --git a/ecrire/public/aiguiller.php b/ecrire/public/aiguiller.php
index 7e65134dcb..d42ca099c2 100644
--- a/ecrire/public/aiguiller.php
+++ b/ecrire/public/aiguiller.php
@@ -198,7 +198,7 @@ function traiter_formulaires_dynamiques($get = false) {
 
 
 		// inclure mes_fonctions et autres filtres avant verifier/traiter
-		include_spip('public/parametrer');
+		include_fichiers_fonctions();
 		// ainsi que l'API SQL bien utile dans verifier/traiter
 		include_spip('base/abstract_sql');
 
diff --git a/ecrire/public/parametrer.php b/ecrire/public/parametrer.php
index d25327d68f..76db7c5689 100644
--- a/ecrire/public/parametrer.php
+++ b/ecrire/public/parametrer.php
@@ -14,22 +14,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
 	return;
 }
 
-include_spip('inc/lang');
-
-// NB: mes_fonctions peut initialiser $dossier_squelettes (old-style)
-// donc il faut l'inclure "en globals"
-if ($f = find_in_path('mes_fonctions.php')) {
-	global $dossier_squelettes;
-	include_once(_ROOT_CWD . $f);
-}
-
-if (@is_readable(_CACHE_PLUGINS_FCT)) {
-	// chargement optimise precompile
-	include_once(_CACHE_PLUGINS_FCT);
-}
-if (test_espace_prive()) {
-	include_spip('inc/filtres_ecrire');
-}
+include_fichiers_fonctions();
 
 # Determine le squelette associe a une requete 
 # et l'applique sur le contexte, le nom du cache et le serveur
-- 
GitLab