function box_lister_skins() { $skins = array('none' => array('nom' => _T('mediabox:label_aucun_style'))); $maxfiles = 1000; $liste_fichiers = array(); $recurs = array(); foreach (creer_chemin() as $d) { $f = $d . "colorbox/"; if (@is_dir($f)) { $liste = preg_files($f, "colorbox[.]css\$", $maxfiles - count($liste_fichiers), $recurs); foreach ($liste as $chemin) { $nom = substr(dirname($chemin), strlen($f)); // 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; } } } } foreach ($liste_fichiers as $short => $fullpath) { $skins[$short] = array('nom' => basename($short)); if (file_exists($f = dirname($fullpath) . "/vignette.jpg")) { $skins[$short]['img'] = $f; } } return $skins; }
function liste_cfg($dir = '') { // Faire la liste des éléments qui ont un cfg ; ca peut etre des plugins // mais aussi des squelettes ou n'importe quoi $liste = array(); // tous les repertoires if (!$dir) { foreach (creer_chemin() as $dir) { if (basename($dir) != 'cfg') { $liste = array_merge($liste, preg_files($dir . 'fonds/', '/cfg_.*html$')); } } // ou seulement celui demande } else { $dir = rtrim(rtrim($dir), '/') . '/'; $liste = preg_files($dir . 'fonds/', '/cfg_.*html$'); } if ($liste) { $l = array(); foreach ($liste as $cfg) { $fonds = substr(basename($cfg, '.html'), 4); $l[$fonds] = $cfg; } ksort($l); return $l; } }
/** * Rechercher tous les lang/file dans le path * qui seront ensuite chargés dans l'ordre du path * * Version dédiée et optimisée pour cet usage de find_in_path * * @see find_in_path() * * @staticvar array $dirs * * @param string $file * Nom du fichier cherché, tel que `mots_fr.php` * @param string $dirname * Nom du répertoire de recherche * @return array * Liste des fichiers de langue trouvés, dans l'ordre des chemins */ function find_langs_in_path($file, $dirname = 'lang') { static $dirs = array(); $liste = array(); foreach (creer_chemin() as $dir) { if (!isset($dirs[$a = $dir . $dirname])) { $dirs[$a] = is_dir($a) || !$a; } if ($dirs[$a]) { if (is_readable($a .= $file)) { $liste[] = $a; } } } return array_reverse($liste); }
function autoriser_squelette_voir_dist($faire, $type, $file, $qui, $opt) { if (!preg_match(",[.]("._SE_EXTENSIONS.")$,ims",$file) OR strpos(substr($file,strlen(_DIR_RACINE)),'../')!==FALSE OR substr($file,0,1)=='/') return false; if (!autoriser('skeleditor','','',$qui)) return false; $dirs = creer_chemin(); foreach($dirs as $d){ if (strncmp($d,$file,strlen($d))==0) return true; } return false; }
/** * Lister les install de presta * @return array */ function bank_lister_instal_prestas() { $liste_prestas = array(); $recurs = array(); $maxfiles = 10000; $dir = 'presta/'; // Parcourir le chemin foreach (creer_chemin() as $d) { $f = $d . $dir; if (@is_dir($f)) { $liste = preg_files($f, "/install[.]php\$", $maxfiles - count($liste_prestas), $recurs); foreach ($liste as $chemin) { $liste_prestas[] = dirname(substr($chemin, strlen($f))); } } } return $liste_prestas; }
/** * Retourner la liste des prestataires connus */ function bank_lister_prestas() { static $prestas = null; if (is_array($prestas)) { return $prestas; } $prestas = array(); $regexp = "(abonnement|acte)\\.php\$"; foreach (creer_chemin() as $d) { $f = $d . "presta/"; if (@is_dir($f)) { $all = preg_files($f, $regexp); foreach ($all as $a) { $a = explode("/presta/", $a); $a = end($a); $a = explode("/", $a); if (count($a) == 3 and $a[1] = "payer") { $prestas[reset($a)] = true; } } } } ksort($prestas); // a la fin foreach (array("cheque", "virement", "simu") as $m) { if (isset($prestas[$m])) { unset($prestas[$m]); $prestas[$m] = true; } } if (isset($prestas['gratuit'])) { unset($prestas['gratuit']); } $prestas = array_keys($prestas); return $prestas; }
/** * Trouve tous les fichiers du path correspondants à un pattern * * Pour un nom de fichier donné, ne retourne que le premier qui sera trouvé * par un `find_in_path()` * * @api * @uses creer_chemin() * @uses preg_files() * * @param string $dir * @param string $pattern * @param bool $recurs * @return array */ function find_all_in_path($dir, $pattern, $recurs = false) { $liste_fichiers = array(); $maxfiles = 10000; // Parcourir le chemin foreach (creer_chemin() as $d) { $f = $d . $dir; if (@is_dir($f)) { $liste = preg_files($f, $pattern, $maxfiles - count($liste_fichiers), $recurs === true ? array() : $recurs); 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; }
/** * Faire la liste des librairies disponibles * * @return array * Tableau (nom de la lib => repertoire , ...) */ function liste_librairies() { $libs = array(); foreach (array_reverse(creer_chemin()) as $d) { if (is_dir($dir = $d . 'lib/') and $t = @opendir($dir)) { while (($f = readdir($t)) !== false) { if ($f[0] != '.' and is_dir("{$dir}/{$f}")) { $libs[$f] = $dir; } } } } return $libs; }
/** * retrouver le chemin dont il vient pour extraire la racine * permet aussi de s'assurer que le fichier qu'on copie provient uniquement * du path, et pas d'autre part sur le serveur * * @param string $source * @return string */ function skeleditor_nom_copie($source){ $file = ""; // cas particulier des squelettes obtenus par scaffolding if (strncmp($source,_DIR_CACHE."scaffold/",$l=strlen(_DIR_CACHE."scaffold/"))==0) return substr($source,$l); $spip_path = creer_chemin(); $spip_path = array_diff($spip_path, array(_DIR_RACINE)); $spip_path[] = _DIR_RACINE; foreach($spip_path as $dir) { if (strncmp($source,$dir,strlen($dir))==0){ $file = substr($source,strlen($dir)); break; } } return $file; }
/** * Faire un find_in_path en cherchant un fichier .less ou .css * et en prenant le plus prioritaire des deux * ce qui permet de surcharger un .css avec un .less ou le contraire * Si ils sont dans le meme repertoire, c'est le .css qui est prioritaire, * par soucis de rapidite * * @param string $less_file * @param string $css_file * @return string */ function lesscss_find_less_or_css_in_path($less_file, $css_file) { $l = find_in_path($less_file); $c = $f = trouver_fond($css_file); if (!$c) { $c = find_in_path($css_file); } if (!$l) { // passer le host en contexte pour differencier les CSS en fonction du HOST car il est inscrit en url absolue // dans les chemins d'urls return $f ? produire_fond_statique($css_file, array('format' => 'css', 'host' => $_SERVER['HTTP_HOST'])) : $c; } elseif (!$c) { return $l; } // on a un less et un css en concurence // prioriser en fonction de leur position dans le path $path = creer_chemin(); foreach ($path as $dir) { // css prioritaire if (strncmp($c, $dir . $css_file, strlen($dir . $css_file)) == 0) { // passer le host en contexte pour differencier les CSS en fonction du HOST car il est inscrit en url absolue // dans les chemins d'urls return $f ? produire_fond_statique($css_file, array('format' => 'css', 'host' => $_SERVER['HTTP_HOST'])) : $c; } if ($l == $dir . $less_file) { return $l; } } // on ne doit jamais arriver la ! spip_log('Resolution chemin less/css impossible', _LOG_CRITIQUE); debug_print_backtrace(); die('Erreur fatale, je suis perdu'); }
function plugins_liste_librairies() { $libs = array(); foreach (array_reverse(creer_chemin()) as $d) { if (is_dir($dir = $d.'lib/') AND $t = @opendir($dir)) { while (($f = readdir($t)) !== false) { if ($f[0] != '.' AND is_dir("$dir/$f")) $libs[$f] = $dir; } } } return $libs; }