From 133431874e0da5ffbef277e96c653d52a1d49394 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Wed, 13 Sep 2006 16:03:07 +0000
Subject: [PATCH] preg_files devient optionellement non recursif avec false en
 4 eme argument une fonction find_all_in_path qui retrouve l'occurence
 utilisee par find_in_path d'un type de fichier (defini par un $pattern) dans
 un sous repertoire eventuel du chemin

---
 ecrire/inc/flock.php |  3 ++-
 ecrire/inc/utils.php | 22 ++++++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/ecrire/inc/flock.php b/ecrire/inc/flock.php
index 2c3f05e490..992b58d7a8 100644
--- a/ecrire/inc/flock.php
+++ b/ecrire/inc/flock.php
@@ -205,6 +205,7 @@ function creer_repertoire($base, $subdir) {
 // Attention, afin de conserver la compatibilite avec les repertoires '.plat'
 // si $dir = 'rep/sous_rep_' au lieu de 'rep/sous_rep/' on scanne 'rep/' et on
 // applique un pattern '^rep/sous_rep_'
+// si $recurs vaut false, la fonction ne descend pas dans les sus repertoires
 //
 // http://doc.spip.org/@preg_files
 function preg_files($dir, $pattern=-1 /* AUTO */, $maxfiles = 10000, $recurs=array()) {
@@ -230,7 +231,7 @@ function preg_files($dir, $pattern=-1 /* AUTO */, $maxfiles = 10000, $recurs=arr
 						$nbfiles++;
 					}
 				} 
-				else if (is_dir($f)){
+				else if (is_dir($f) AND is_array($recurs)){
 					$rp = @realpath($f);
 					if (!is_string($rp) OR !strlen($rp)) $rp=$f; # realpath n'est peut etre pas autorise
 					if (!isset($recurs[$rp])) {
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index ad0940d08e..64458f1d5b 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -671,6 +671,28 @@ function find_in_path ($filename) {
 	return false;
 }
 
+
+function find_all_in_path($dir,$pattern){
+	$liste_fichiers=array();
+	$maxfiles = 10000;
+	
+	// Parcourir le chemin
+	foreach (creer_chemin() as $d)
+		if (@is_dir($f = $d.$dir)){
+			$liste = preg_files($d.$dir,$pattern,$maxfiles-count($liste_fichiers),false);
+			foreach($liste as $chemin){
+				$nom = basename($chemin);
+				// ne prendre que les fichiers pas deja trouves
+				// car find_in_path prend le premier qu'il trouve,
+				// les autres sont donc masques
+				if (!isset($liste_fichiers[$nom]))
+					$liste_fichiers[$nom] = $chemin;
+			}
+		}
+			
+	return $liste_fichiers;
+}
+
 // predicat sur les scripts de ecrire qui n'authentifient pas par cookie
 
 // http://doc.spip.org/@autoriser_sans_cookie
-- 
GitLab