Changeset 93229 in spip-zone


Ignore:
Timestamp:
Nov 26, 2015, 10:16:39 PM (5 years ago)
Author:
teddy.spip@…
Message:
  • 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

Location:
_plugins_/lister_fonctions/trunk
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/lister_fonctions/trunk/lister_fonctions_fonctions.php

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

    r91268 r93229  
    22    prefix="lister_fonctions"
    33    categorie="outil"
    4     version="1.0.1"
     4    version="1.1.0"
    55    etat="stable"
    66    compatibilite="[3.0.0;3.1.*]"
     
    1515    <licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
    1616
    17     <necessite nom="lister_config" compatibilite="[1.0.0;]" />
     17    <menu nom="lister_fonctionscompletes" titre="lister_fonctions:titre_lister_fonctions_completes" parent="menu_configuration" icone="images/lister_fonctions-16.png" />
     18    <menu nom="lister_fonctionsuser" titre="lister_fonctions:titre_lister_fonctions_utilisateur" parent="menu_configuration" icone="images/lister_fonctions-16.png" />
    1819
     20    <utilise nom="lister_config" compatibilite="[1.0.0;]" />
     21
     22    <pipeline nom="autoriser" inclure="lister_fonctions_autorisations.php" />
    1923    <pipeline nom="listermenu" inclure="lister_fonctions_pipelines.php" />
    2024
  • _plugins_/lister_fonctions/trunk/prive/squelettes/navigation/lister_fonctionscompletes.html

    r87338 r93229  
    11[(#REM)
    22 On va inclure la navigation de la page lister_config
    3 ]<INCLURE{fond=prive/squelettes/navigation/lister_config, env} />
     3][(#PLUGIN{'lister_config'}|?{
     4        [(#INCLURE{fond=prive/squelettes/navigation/lister_config, env})],
     5        [(#INCLURE{fond=prive/squelettes/navigation/configurer,exec=lister_fonctionscompletes})]
     6})]
  • _plugins_/lister_fonctions/trunk/prive/squelettes/navigation/lister_fonctionsuser.html

    r87338 r93229  
    11[(#REM)
    22 On va inclure la navigation de la page lister_config
    3 ]<INCLURE{fond=prive/squelettes/navigation/lister_config, env} />
     3][(#PLUGIN{'lister_config'}|?{
     4        [(#INCLURE{fond=prive/squelettes/navigation/lister_config, env})],
     5        [(#INCLURE{fond=prive/squelettes/navigation/configurer,exec=lister_fonctionsuser})]
     6})]
Note: See TracChangeset for help on using the changeset viewer.