source: spip-zone/_plugins_/lister_fonctions/trunk/lister_fonctions_fonctions.php @ 93229

Last change on this file since 93229 was 93229, checked in by teddy.spip@…, 3 years ago
  • Plugin maintenant indépendant de lister_config. Toutefois lorsque ce dernier est désactivé, le plugin lister_fonctions ajoute une entrée dans le menu configuration. Le cas contraire, il s'affichera sur le menu de gauche de ?exec=lister_config
  • Ajout d'autorisation pour le besoin précédent. Merci à Eric et Marcimat sur IRC pour cette autorisation de menu et chercher_filtre('info_plugin');
  • Éviter un warning ;
  • Up de y.

Je sais que ce plugin irait 'mieux' dans le menu developpement mais malheureusement, à ma connaissance, il n'existe pas en SPIP 3.0

File size: 5.7 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7/**
8 * Lister toutes les fonctions définies dans l'instance de SPIP.
9 * Les fonctions fournies par les différents plugins actifs seront aussi prise en compte.
10 *
11 * @param null|string $prefixe
12 *                             Préfixe de la fonction. Exemple : `autoriser`, `auth`, etc.
13 *
14 * @return array
15 *               Si aucun préfixe, on listera toutes les fonctions.
16 *               Si un préfixe est identifié, on listera toutes les fonctions avec ce préfixe.
17 */
18function lister_fonctions($prefixe = null)
19{
20        $fonctions = get_defined_functions();
21
22        $fonctions_user = $fonctions['user'];
23        sort($fonctions_user);
24
25        foreach ($fonctions_user as $value) {
26                if ($fonction = preg_split('/_/', $value, -1, PREG_SPLIT_NO_EMPTY)) {
27                        $fonctions_user[$fonction[0]][] = $value;
28                        if (($key = array_search($value, $fonctions_user)) !== false) {
29                                unset($fonctions_user[$key]);
30                        }
31                }
32        }
33        ksort($fonctions_user);
34
35        $resultat = $fonctions_user;
36
37        if ($prefixe) {
38                // On pourrait faire aussi un contrôle avec array_key_exists()
39                // Mais ça risque de fausser le résultat attendu.
40                $resultat = array($prefixe => $fonctions_user[$prefixe]);
41        }
42
43        return $resultat;
44}
45
46/**
47 * Lister toutes les constantes définies dans l'instance de SPIP.
48 * Les constantes fournies par les différents plugins actifs seront aussi prise en compte.
49 *
50 * @param null|string $prefixe
51 *                             Préfixe de la constantes.
52 *
53 * @return array
54 *               Si aucun préfixe, on listera toutes les constantes.
55 *               Si un préfixe est identifié, on listera toutes les constantes avec ce préfixe.
56 */
57function lister_constantes($prefixe = null)
58{
59        $constantes = get_defined_constants(true);
60
61        $constantes_user = $constantes['user'];
62
63        foreach ($constantes_user as $key => $value) {
64                if ($constante = preg_split('/_/', $key, -1, PREG_SPLIT_NO_EMPTY)) {
65                        if ($constante[0] == '_') {
66                                $constantes_user[$constante[1]][$key] = $value;
67                        } else {
68                                $constantes_user[$constante[0]][$key] = $value;
69                        }
70                        unset($constantes_user[$key]);
71                }
72        }
73
74        ksort($constantes_user);
75
76        $resultat = $constantes_user;
77
78        if ($prefixe) {
79                // On pourrait faire aussi un contrôle avec array_key_exists()
80                // Mais ça risque de fausser le résultat attendu.
81                $resultat = array($prefixe => $constantes_user[$prefixe]);
82        }
83
84        return $resultat;
85}
86
87/**
88 * Afficher le nom et le chemin du fichier dans lequel
89 * est défini la fonction passée en paramètre.
90 *
91 * @param null|string $fonction
92 *
93 * @return void|string
94 */
95function fonction_fichier($fonction = null)
96{
97        if ($fonction == null) {
98                return;
99        }
100        // On prépare le pattern pour ne pas avoir le chemin depuis les méandres du serveur d'hébergement.
101        $pattern_root = '/^'.preg_replace('/\//', '\/', $_SERVER['DOCUMENT_ROOT']).'/';
102
103        // API offerte par PHP 5.
104        $refFonction = new ReflectionFunction($fonction);
105
106        // On enlève le chemin 'root' pour ne garder que le chemin à la "racine" de notre site.
107        $filename = preg_replace($pattern_root, '', $refFonction->getFileName()).':'.$refFonction->getStartLine();
108
109        return $filename;
110}
111
112/**
113 * Lister les fichiers php dans un répertoire donné
114 * ou, par défaut, dans tout le site.
115 *
116 * @param string $dir
117 *                    Par défaut, le répertoire racine du site.
118 *
119 * @return array
120 *               Tableau contenant le chemin vers chaque fichier php.
121 */
122function lister_fichiers_php($dir = _DIR_RACINE)
123{
124        global $list;
125
126        // Si $dir est vide, on va chercher le répertoire
127        // dans lequel se trouve le script pour référence.
128        if (empty($dir)) {
129                # on recherche le script sur lequel on est
130                $script = end(explode('/', $_SERVER['PHP_SELF']));
131                # Et on l'enlève de l'url pour donner une bonne valeur à $dir
132                $dir = preg_replace('/'.$script.'/', '', $_SERVER['SCRIPT_FILENAME']);
133        }
134
135        if (!empty($dir) and is_dir($dir)) {
136                $ffs = scandir($dir);
137                $exclu = preg_match('/(tmp|local)/', $dir);
138                if (substr($dir, -1) !== '/') {
139                        $dir = $dir.'/';
140                }
141                foreach ($ffs as $ff) {
142                        if ($ff[0] != '.' and $exclu == false) {
143                                if (strlen($ff) >= 5) {
144                                        if (substr($ff, -4) == '.php') {
145                                                $list[] = $dir.$ff;
146                                        }
147                                }
148                                if (is_dir($dir.$ff)) {
149                                        lister_fichiers_php($dir.$ff);
150                                }
151                        }
152                }
153        }
154
155        return $list;
156}
157
158/**
159 * Rechercher le nom de toutes les fonctions
160 * dans le fichier php passé en paramètre.
161 *
162 * @param string $fichier
163 *
164 * @return array
165 */
166function lister_noms_fonctions($fichier)
167{
168        $liste_fonctions = array();
169
170        if (is_file($fichier)) {
171                $content = file_get_contents($fichier);
172                preg_match_all("/(function)([\s|\t]+)(\w+)/", $content, $fonctions);
173                foreach ($fonctions[3] as $fonction) {
174                        $liste_fonctions[] = array('fichier' => $fichier, 'fonction' => $fonction);
175                }
176        }
177
178        return $liste_fonctions;
179}
180
181function lister_toutes_fonctions($prefixe = null)
182{
183        $fichiers_php = lister_fichiers_php();
184        $fonctions_user = array();
185
186        if (count($fichiers_php) > 0) {
187                foreach ($fichiers_php as $fichier) {
188                        foreach (lister_noms_fonctions($fichier) as $value) {
189                                $fonctions_user[] = $value;
190                        }
191                }
192                @natcasesort($fonctions_user);
193        }
194
195        if (count($fonctions_user) > 0) {
196                foreach ($fonctions_user as $value) {
197                        if ($fonction = preg_split('/_/', $value['fonction'], -1, PREG_SPLIT_NO_EMPTY)) {
198                                $fonctions_user[$fonction[0]][] = $value;
199                                if (($key = array_search($value, $fonctions_user)) !== false) {
200                                        unset($fonctions_user[$key]);
201                                }
202                        }
203                }
204                ksort($fonctions_user);
205        }
206
207        $resultat = $fonctions_user;
208
209        if ($prefixe and count($fonctions_user) > 0) {
210                // On pourrait faire aussi un contrôle avec array_key_exists()
211                // Mais ça risque de fausser le résultat attendu.
212                $resultat = array($prefixe => $fonctions_user[$prefixe]);
213        }
214
215        return $resultat;
216}
Note: See TracBrowser for help on using the repository browser.