Changeset 74427 in spip-zone


Ignore:
Timestamp:
Jul 21, 2013, 10:36:39 PM (7 years ago)
Author:
teddy.spip@…
Message:

On va changer la méthode pour trouver plugin.xml et paquet.xml. On passe par la class php RecursiveDirectoryIterator? et RecursiveIteratorIterator?. Cela devrait prendre en compte 'toutes' les profondeurs où peuvent se trouver les plugins mutualisés. Ne prend pas en compte pour le moment _DIR_PLUGINS_SUPP.
Cette astuce vient de ma discussion sur http://forum.alsacreations.com/topic.php?tid=68023&fid=20
Merci à eux.

File:
1 edited

Legend:

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

    r74203 r74427  
    131131                tableau_sites.push(["../../'.$GLOBALS['mutualisation_dir'].'/'.$v.'"]);
    132132                //]]>
    133                 </script>';
     133                </script>
     134                ';
    134135
    135136                $page .= "<tr class='tr". $nsite % 2 ."'"
    136                         . " style='background-image: url(${url}ecrire/index.php?exec=mutualisation&amp;renouvelle_alea=yo)' id='$alias[$v]'>
    137                         <td style='text-align:right;'><img src='${url}favicon.ico' style='float:left;' />$v$erreur$version_installee</td>
    138                         <td><a href='${url}'>".typo($nom_site)."</a></td>
    139                         <td><a href='${url}ecrire/'>ecrire</a></td>
    140                         <td><div id='IMG$nsite' class='taille loading'></div></td>
    141                         <td><div id='local$nsite' class='taille loading'></div></td>
    142                         <td><div id='cache$nsite' class='taille loading'></div></td>
    143                         <td style='text-align:right;'><a href='${url}$url_stats'>${stats}</a></td>
    144                         <td>$adminplugin<a href='${url}$url_admin_plugin'>${cntplugins}</a> <small>${plugins}</small></td>
    145                         <td><a href='${url}$url_compresseur'>$compression</a></td>
    146                         <td style='text-align:right;'>".date_creation_repertoire_site($v)."</td>
     137                        . " style='background-image: url(${url}ecrire/index.php?exec=mutualisation&amp;renouvelle_alea=yo)' id='$alias[$v]'>\n
     138                        <td style='text-align:right;'><img src='${url}favicon.ico' style='float:left;' />$v$erreur$version_installee</td>\n
     139                        <td><a href='${url}'>".typo($nom_site)."</a></td>\n
     140                        <td><a href='${url}ecrire/'>ecrire</a></td>\n
     141                        <td><div id='IMG$nsite' class='taille loading'></div></td>\n
     142                        <td><div id='local$nsite' class='taille loading'></div></td>\n
     143                        <td><div id='cache$nsite' class='taille loading'></div></td>\n
     144                        <td style='text-align:right;'><a href='${url}$url_stats'>${stats}</a></td>\n
     145                        <td>$adminplugin<a href='${url}$url_admin_plugin'>${cntplugins}</a> <small>${plugins}</small></td>\n
     146                        <td><a href='${url}$url_compresseur'>$compression</a></td>\n
     147                        <td style='text-align:right;'>".date_creation_repertoire_site($v)."</td>\n
    147148                        </tr>\n";
    148149                $nsite++;
     
    166167                $nombre_plugins = count($lsplugs) ;
    167168                $page .= "<br /><br /><table style='clear:both;'>
    168         <thead>
     169        <thead>\n
    169170                <tr>
    170171                        <td>#</td>
     
    173174                        <td>Version</td>
    174175                        <td>Sites</td>
    175                 </tr>
     176                </tr>\n
    176177        </thead>
    177178        <tbody>";
    178179                foreach ($lsplugs as $plugin => $c){
    179                         $plnum[count($c)] .= "<tr><td>".count($c)."</td><td>$plugin</td>"
    180                                 ."<td>" . pluginDist($list_dist,$plugin) ."</td><td>".$versionplug[$plugin]."</td><td>".join(', ', ancre_site($c)).'</td></tr>';
     180                        $plnum[count($c)] .= "<tr>\n<td>".count($c)."</td>\n<td>$plugin</td>\n"
     181                                ."<td>" . pluginDist($list_dist,$plugin) ."</td>\n<td>".$versionplug[$plugin]."</td>\n<td>".join(', ', ancre_site($c)).'</td>' . "\n" .'</tr>'. "\n";
    181182                }
    182183                krsort($plnum);
    183184                $page .= join('', $plnum);
    184                 $page .= "</tbody></table>\n";
     185                $page .= "</tbody>\n</table>\n";
    185186
    186187
     
    188189                $extract = array();
    189190                $list = array();
     191                // On crée une variable ici qui regardera les particularités des fichiers xml d'un plugin.
     192                // Si à l'avenir on change de terminologie de fichier xml, il suffira de l'ajouter dans un nouvel array()
     193                $cfg = array(
     194                        array(
     195                        'fn' => 'paquet.xml',
     196                        'pre' => '/prefix="([^"]*)"/i',
     197                        'ver' => '/version="([^"]*)"/i',
     198                        ),
     199                        array(
     200                        'fn' => 'plugin.xml',
     201                        'pre' => ',<prefix>([^<]+),ims',
     202                        'ver' => ',<version>([^<]+),ims',
     203                        ),
     204                );
     205
    190206               
    191207                $ustart_glob = memory_get_peak_usage(true);
     
    195211                // On garde l'ancien principe d'un sous-répertoire pour ne pas casser la compat.
    196212
    197                 // correspond à plugins/nom_plugin/fichier.xml
    198                 if (glob(_DIR_PLUGINS . '*/{paquet,plugin}.xml',GLOB_BRACE)) {
    199                         foreach (glob(_DIR_PLUGINS . '*/{paquet,plugin}.xml',GLOB_BRACE) as $value) {
    200                                 $list[] = $value;
    201                         }
    202                 }
    203                 // correspond à plugins/auto/nom_plugin/fichier.xml
    204                 if (glob(_DIR_PLUGINS . '*/*/{paquet,plugin}.xml',GLOB_BRACE)) {
    205                         foreach (glob(_DIR_PLUGINS . '*/*/{paquet,plugin}.xml',GLOB_BRACE) as $value) {
    206                                 $list[] = $value;
    207                         }
    208                 }
    209                 // correspond à plugins/auto/nom_plugin/x.y.z/fichier.xml
    210                 if (glob(_DIR_PLUGINS . '*/*/*/{paquet,plugin}.xml',GLOB_BRACE)) {
    211                         foreach (glob(_DIR_PLUGINS . '*/*/*/{paquet,plugin}.xml',GLOB_BRACE) as $value) {
    212                                 $list[] = $value;
    213                         }
    214                 }
    215 
    216 
    217                 // Ici on va prendre les chemins d'extrusion uniquement, sans distinction du fichier xml
    218                 foreach ($list as $value) {
    219                         $extract[] = str_replace(array('plugin.xml','paquet.xml'), '', $value);
    220                 }
    221                 // On dédoublonne
    222                 $extract = array_unique($extract);
    223                 foreach ($extract as $url) {
    224                         // Et on refait une recherche pour paquet.xml d'abord
    225                         if(glob($url . 'paquet.xml', GLOB_NOSORT)) {
    226                                 $result = glob($url . 'paquet.xml', GLOB_NOSORT);               
    227                                 $result = $result[0] ;
    228                                 // dans paquet.xml on cherche la valeur de l'attribut prefix
    229                                 if (preg_match('/prefix="([^"]*)"/i', file_get_contents($result), $r)
    230                                         AND !$lsplugs[strtolower(trim($r[1]))]){
    231                                                 preg_match('/version="([^"]*)"/i', file_get_contents($result), $n);
    232                                                 $inutile[] = trim($r[1]) . ' (' . $n[1] . ')';
    233                                 }
    234 
    235                         } else { // Si pas de paquet.xml, on cherche plugin.xml
    236                                 $result = glob($url . 'plugin.xml', GLOB_NOSORT);               
    237                                 $result = $result[0] ;
    238                                 // là, on reprend l'ancien code. On cherche la valeur de la balise prefix
    239                                 if (preg_match(',<prefix>([^<]+),ims', file_get_contents($result), $r)
    240                                         AND !$lsplugs[strtolower(trim($r[1]))]){
    241                                                 preg_match(',<version>([^<]+),ims', file_get_contents($result), $n);
    242                                                 $inutile[] = trim($r[1]) . ' (' . $n[1] . ')';
    243                                 }
    244                         }
     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                  }
    245234                }
    246235                $uend_glob = memory_get_peak_usage(true);
     
    253242                if ($inutile) {
    254243                        $nombre_plugins_inutiles =count($inutile) ;
    255                         $page .= "<p><strong>"._L('Plugins inutilis&#233;s :')."</strong> ".join(', ', $inutile).".<br />";
    256                         $page .= "<em>Soit " . $nombre_plugins_inutiles . _L(' plugins inutilis&#233;s') . ".</em></p>";
     244                        $page .= "<div class='inutilises'>\n<p><strong>"._L('Plugins inutilis&#233;s :')."</strong> ".join(', ', $inutile).".<br />";
     245                        $page .= "<em>Soit " . $nombre_plugins_inutiles . _L(' plugins inutilis&#233;s') . ".</em></p>\n</div>";
    257246                }
    258247        }
     
    435424}
    436425
     426/* Petite fonction qui va automatiser la recherche de paquet.xml ou plugin.xml
     427 * quelque soit la profondeur dans l'arborescence
     428 */
     429function processConfig(&$cfg, &$lsplugs, $path) {
     430
     431        // echo "<!-- Process: " . $path . $cfg['fn'] . "--> \n";
     432
     433        $data = file_get_contents($path . $cfg['fn']);
     434
     435        if ( 1 === preg_match($cfg['pre'], $data, $r) AND !$lsplugs[strtolower(trim($r[1]))] ) {
     436                preg_match($cfg['ver'], $data, $n);
     437                return trim($r[1]) . ' (' . $n[1] . ')';
     438        }
     439
     440        return false;
     441}
     442
    437443?>
Note: See TracChangeset for help on using the changeset viewer.