Changeset 78973 in spip-zone


Ignore:
Timestamp:
Nov 30, 2013, 9:11:24 AM (6 years ago)
Author:
suske@…
Message:

rétablir le zoli panneau sous PHP < 5.3 - le maintenir sinon / corrige http://zone.spip.org/trac/spip-zone/changeset/74427/_plugins_/mutualisation/trunk/exec/mutualisation.php

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/mutualisation/trunk/exec/mutualisation.php

    r74427 r78973  
    206206               
    207207                $ustart_glob = memory_get_peak_usage(true);
     208
    208209                // Ici on est en SPIP 3.
    209210                // En spip 3, avec SVP, on liste les plugins dans des sous-répertoires.
     
    211212                // On garde l'ancien principe d'un sous-répertoire pour ne pas casser la compat.
    212213
    213                 $dir = _DIR_PLUGINS;
    214                 $dir_it = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
    215                 $it = new RecursiveIteratorIterator($dir_it, RecursiveIteratorIterator::SELF_FIRST);
    216 
    217                 foreach($it as $path => $fo) {
    218 
    219                   if ( !$fo->isDir() ) {
    220                     continue;
    221                   }
    222 
    223                   $path .= '/';
    224 
    225                   foreach ($cfg as $k => $v) {
    226                     if ( file_exists($path . $v['fn']) ) {
    227                       $res = processConfig($cfg[$k], $lsplugs, $path);
    228                       if (false !== $res) {
    229                         $inutile[] = $res;
    230                       }
    231                       break;
    232                     }
    233                   }
    234                 }
     214                // Utiliser la classe si elle existe (PHP 5.3+)                 
     215                if (class_exists('FilesystemIterator')) {
     216                        $dir = _DIR_PLUGINS;
     217                        $dir_it = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
     218                        $it = new RecursiveIteratorIterator($dir_it, RecursiveIteratorIterator::SELF_FIRST);
     219       
     220                        foreach($it as $path => $fo) {
     221       
     222                          if ( !$fo->isDir() ) {
     223                            continue;
     224                          }
     225       
     226                          $path .= '/';
     227       
     228                          foreach ($cfg as $k => $v) {
     229                            if ( file_exists($path . $v['fn']) ) {
     230                              $res = processConfig($cfg[$k], $lsplugs, $path);
     231                              if (false !== $res) {
     232                                $inutile[] = $res;
     233                              }
     234                              break;
     235                            }
     236                          }
     237                        }
     238                }
     239                else {
     240                        // Pour php < 5.3
     241                        // correspond à plugins/nom_plugin/fichier.xml
     242                        if (glob(_DIR_PLUGINS . '*/{paquet,plugin}.xml',GLOB_BRACE)) {
     243                                foreach (glob(_DIR_PLUGINS . '*/{paquet,plugin}.xml',GLOB_BRACE) as $value) {
     244                                        $list[] = $value;
     245                                }
     246                        }
     247                        // correspond à plugins/auto/nom_plugin/fichier.xml
     248                        if (glob(_DIR_PLUGINS . '*/*/{paquet,plugin}.xml',GLOB_BRACE)) {
     249                                foreach (glob(_DIR_PLUGINS . '*/*/{paquet,plugin}.xml',GLOB_BRACE) as $value) {
     250                                        $list[] = $value;
     251                                }
     252                        }
     253                        // correspond à plugins/auto/nom_plugin/x.y.z/fichier.xml
     254                        if (glob(_DIR_PLUGINS . '*/*/*/{paquet,plugin}.xml',GLOB_BRACE)) {
     255                                foreach (glob(_DIR_PLUGINS . '*/*/*/{paquet,plugin}.xml',GLOB_BRACE) as $value) {
     256                                        $list[] = $value;
     257                                }
     258                        }
     259       
     260       
     261                        // Ici on va prendre les chemins d'extrusion uniquement, sans distinction du fichier xml
     262                        foreach ($list as $value) {
     263                                $extract[] = str_replace(array('plugin.xml','paquet.xml'), '', $value);
     264                        }
     265                        // On dédoublonne
     266                        $extract = array_unique($extract);
     267                        foreach ($extract as $url) {
     268                                // Et on refait une recherche pour paquet.xml d'abord
     269                                if(glob($url . 'paquet.xml', GLOB_NOSORT)) {
     270                                        $result = glob($url . 'paquet.xml', GLOB_NOSORT);               
     271                                        $result = $result[0] ;
     272                                        // dans paquet.xml on cherche la valeur de l'attribut prefix
     273                                        if (preg_match('/prefix="([^"]*)"/i', file_get_contents($result), $r)
     274                                                AND !$lsplugs[strtolower(trim($r[1]))]){
     275                                                        preg_match('/version="([^"]*)"/i', file_get_contents($result), $n);
     276                                                        $inutile[] = trim($r[1]) . ' (' . $n[1] . ')';
     277                                        }
     278       
     279                                } else { // Si pas de paquet.xml, on cherche plugin.xml
     280                                        $result = glob($url . 'plugin.xml', GLOB_NOSORT);               
     281                                        $result = $result[0] ;
     282                                        // là, on reprend l'ancien code. On cherche la valeur de la balise prefix
     283                                        if (preg_match(',<prefix>([^<]+),ims', file_get_contents($result), $r)
     284                                                AND !$lsplugs[strtolower(trim($r[1]))]){
     285                                                        preg_match(',<version>([^<]+),ims', file_get_contents($result), $n);
     286                                                        $inutile[] = trim($r[1]) . ' (' . $n[1] . ')';
     287                                        }
     288                                }
     289                        }
     290                }
     291
    235292                $uend_glob = memory_get_peak_usage(true);
    236293                       
Note: See TracChangeset for help on using the changeset viewer.