source: spip-zone/_plugins_/mutualisation/trunk/exec/mutualisation.php @ 106740

Last change on this file since 106740 was 106740, checked in by real3t@…, 3 years ago

Cf r106739 : ouvelle possibilité du plugin de mutualisation facile (voir commit suivant) : afficher la valeur d'une meta. Soit :

  • nommeta
  • nomcasier/nommeta (beaucoup utilisé avec les CFG)

Déclaration dans le mes_options.php

Exemple :
GLOBALSmutualisation_afficher_config? = (isset($GLOBALSmutualisation_afficher_config?)?$GLOBALSmutualisation_afficher_config?.',':).'soyezcreateurs/mode_affichage,slogan_site';

File size: 21.8 KB
Line 
1<?php
2
3header('charset:UTF-8');
4
5if (!defined('_ECRIRE_INC_VERSION')) {
6        return;
7}
8
9function exec_mutualisation_dist() {
10        $ustart = memory_get_peak_usage(true);
11        $timestart = microtime(true);
12        $memory_limit = strtolower(ini_get('memory_limit'));
13
14        $plnum = $lsplugs = $versionplug = array();
15        $adminplugin = $compression = '';
16        $cntplugins = 0;
17
18        include_spip('inc/minipres');
19        include_spip('inc/filtres');
20
21        // pas admin ? passe ton chemin
22        if (($GLOBALS['visiteur_session']['statut'] != '0minirezo') and ($_SERVER['REMOTE_ADDR'] != '127.0.0.1')) {
23                die('pas admin !');
24        }
25
26        $lister_sites = charger_fonction('lister_sites', 'mutualisation');
27        $sites = $lister_sites();
28
29        $branche_nom = 'spip-' . $GLOBALS['spip_version_branche'];
30        $version_spip = intval($GLOBALS['spip_version_branche']);
31
32        $url_stats = 'ecrire/?exec=stats_visites';
33        $url_compresseur = 'ecrire/?exec=configurer_avancees#formulaire_configurer_compresseur';
34        $url_admin_plugin = 'ecrire/?exec=admin_plugin';
35        $url_admin_vider = 'ecrire/?exec=admin_vider';
36
37        if (!file_exists(_DIR_IMG . 'mutualiser.png')) {
38                @copy(find_in_path('mutualiser.png'), _DIR_IMG . 'mutualiser.png');
39        }
40
41        $titre = _L(count($sites) . ' ' . 'sites mutualis&#233;s <em>(' . _T('version') . ' ' . $GLOBALS['spip_version_base'] . ')</em>');
42
43        //$page .= "<div id='trace'></div>" ;
44        $page = "<table class='sites'>
45    <thead>
46        <tr>
47            <td>Site</td>
48            <td>Nom</td>
49            <td>Admin</td>
50            <td id='IMG'>IMG<span class='unite'>&nbsp;(Mo)</span><br />
51                <input type='button' name='IMGcalculer' id='IMGcalculer' value='Calculer' onclick='rechercher_tailles(\"IMG\");' /></td>
52            <td id='local'>local<span class='unite'>&nbsp;(Mo)</span><br />
53                <input type='button' name='localcalculer' id='localcalculer' value='Calculer' onclick='rechercher_tailles(\"local\");' /></td>
54            <td id='cache'>cache<span class='unite'>&nbsp;(Mo)</span><br />
55                <input type='button' name='cachecalculer' id='cachecalculer' value='Calculer' onclick='rechercher_tailles(\"cache\");' /></td>
56            <td title='Popularit&eacute; totale du site'>Stats</td>
57            <td>Plugins<br />
58                <input type='button' name='pluginsupgrade' id='pluginsupgrade' value='Upgrader tout' onclick='plugins_upgrade();' /></td>
59            <td>Compression</td>
60            <td title=\"Configurations particulières\">Config</td>
61            <td>Date</td>
62        </tr>
63    </thead>
64    <tbody>";
65        $page .= '<script type="text/javascript">
66        //<![CDATA[
67        tableau_sites = new Array();
68        tableau_upgrade = new Array();
69        //]]>
70        </script>
71        ';
72
73        $nsite = 1;
74
75        # aliases pour l'affichage court
76        $alias = array();
77        foreach ($sites as $v) {
78                $redux = preg_replace(',^www\.|\..*$,', '', $v);
79                if (!in_array($redux, $alias)) {
80                        $alias[$v] = $redux;
81                } else {
82                        $alias[$v] = $v;
83                }
84        }
85
86        // Recuperer la liste des plugins connus de l'instance SPIP en cours (celle qui est appelee par ecrire/?exec=mutualisation)
87        include_spip('inc/plugin');
88        $liste_plug = liste_plugin_files();
89        $liste_plug_compat = liste_plugin_valides($liste_plug);
90        $liste_plug_compat_base = $liste_plug_compat[1];
91        // echo '<pre>';
92        // var_dump($liste_plug_compat_base);
93        // echo '</pre>';
94        $liste_plug_compat = $liste_plug_compat[0];
95
96        foreach ($sites as $v) {
97                $nom_site = $stats = $plugins = $erreur = $version_installee = '';
98
99                if (lire_fichier_securise(_DIR_RACINE . $GLOBALS['mutualisation_dir'] . '/' . $v . '/tmp/meta_cache.php',
100                                $meta) and is_array($meta = @unserialize($meta)) and $url = $meta['adresse_site']
101                ) {
102                        $url .= '/';
103                        $nom_site = sinon(importer_charset($meta['nom_site'], $meta['charset']), $v);
104                        $popularite_total = (isset($meta['popularite_total']) ? $meta['popularite_total'] : 0);
105                        $stats = intval($popularite_total);
106                        if ($cfg = @unserialize($meta['plugin'])) {
107                                $plugins = array_keys($cfg);
108                                ksort($plugins);
109                                foreach ($plugins as $plugin) {
110                                        $lsplugs[strtolower($plugin)][] = $alias[$v];
111                                        $versionplug[strtolower($plugin)] = $cfg[$plugin]['version'];
112                                        // Spip n'est pas un plugin… Mais en fait oui.
113                                        // unset($lsplugs['spip']);
114                                        // unset($versionplug['spip']);
115                                }
116                                $cntplugins = count($plugins);
117                                $plugins = strtolower(implode(', ', $plugins));
118                        } else {
119                                $plugins = '-';
120                        }
121
122                        // S'il faut upgrader, creer un bouton qui permettra
123                        // de faire la mise a jour directement depuis le site maitre
124                        // Pour cela, on cree un bouton avec un secret, que mutualiser.php
125                        // va intercepter (pas terrible ?)
126                        $erreur = test_upgrade_site($meta);
127                        $adminplugin = adminplugin_site($meta, $liste_plug_compat, $liste_plug_compat_base);
128                        $version_installee = ' <em><small>' . $meta['version_installee'] . '</small></em>';
129                } else {
130                        $url = 'http://' . $v . '/';
131                        $erreur = ' <em><small><span class="erreur">Erreur&nbsp;!</span></small></em>';
132                        $plugins = '-';
133                }
134
135                if (is_array($meta)) {
136                        $compression = '';
137                        if ($meta['auto_compress_css'] == 'oui') {
138                                $compression .= 'CSS';
139                        }
140                        if ($meta['auto_compress_js'] == 'oui') {
141                                $compression .= ($compression != '') ? '+JS' : 'JS';
142                        }
143                        if ($meta['auto_compress_http'] == 'oui') {
144                                $compression .= ($compression != '') ? '+HTTP' : 'HTTP';
145                        }
146                        if ($compression == '') {
147                                $compression = _L('Activer');
148                        }
149                        if (isset($GLOBALS['mutualisation_afficher_config'])) {
150                                $configs = explode(",", $GLOBALS['mutualisation_afficher_config']);
151                                $configsparticulieres = '';
152                                foreach($configs as $config) {
153                                       
154                                        $configsparticulieres .= '<em><small>' . $config . ':</small></em> ' . lire_config_distante($config, $meta) . "<br />\n";
155                                }
156                        }
157                }
158                $page .= '<script type="text/javascript">
159        //<![CDATA[
160        tableau_sites.push(["../' . $GLOBALS['mutualisation_dir'] . '/' . $v . '"]);
161        //]]>
162        </script>
163        ';
164
165                $page .= "<tr class='tr" . $nsite%2 . "' style='background-image: url(" . $url . "ecrire/index.php?exec=mutualisation&amp;renouvelle_alea=yo)' id='$alias[$v]'>\n
166            <td class='text-right'><img src='" . $url . "favicon.ico' class='favicon' />$v$erreur$version_installee</td>\n
167            <td><a href='" . $url . "'>" . typo($nom_site) . "</a></td>\n
168            <td><a href='" . $url . "ecrire/'>ecrire</a><br />
169                <a href='" . $url . "$url_admin_plugin'>plugins</a><br />
170                <a href='" . $url . "$url_admin_vider'>cache</a></td>
171            <td><div id='IMG$nsite' class='taille loading'></div></td>\n
172            <td><div id='local$nsite' class='taille loading'></div></td>\n
173            <td><div id='cache$nsite' class='taille loading'></div></td>\n
174            <td class='text-right'><a href='" . $url . "$url_stats'>${stats}</a></td>\n
175            <td>$adminplugin<div class='liste-plugins'><a href='" . $url . "$url_admin_plugin'>${cntplugins}</a> <small>${plugins}</small></div></td>\n
176            <td><a href='" . $url . "$url_compresseur'>$compression</a></td>\n
177            <td>$configsparticulieres</td>\n
178            <td class='text-right'>" . date_creation_repertoire_site($v) . "</td>\n
179            </tr>\n";
180                ++$nsite;
181        }
182        $page .= '</tbody></table>';
183
184        // On liste ici tous les plugins-dist de la mutu.
185        // Ça sera calculé une seule fois pour toute et réutilisé dans la fonction plus loin.
186        $list_dist = array();
187        // correspond à plugins-dist/nom_plugin/paquet.xml
188        if ($les_paquets = glob(_DIR_PLUGINS_DIST . '*/paquet.xml', GLOB_NOSORT)) {
189                foreach ($les_paquets as $value) {
190                        if (preg_match('/prefix="([^"]*)"/i', file_get_contents($value), $r)) {
191                                $list_dist[] = strtolower(trim($r[1]));
192                        }
193                }
194        }
195
196        if ($lsplugs) {
197                $nombre_plugins = count($lsplugs);
198                $page .= "<br /><br /><table class='plugins'>
199    <thead>\n
200        <tr>
201            <td class='nombre'>#</td>
202            <td class='prefixe'>Plugins utilis&#233;s ($nombre_plugins) </td>
203            <td class='dist'>Plugins-dist</td>
204            <td class='version'>Version</td>
205            <td class='liste'>Sites</td>
206        </tr>\n
207    </thead>
208    <tbody>";
209                foreach ($lsplugs as $plugin => $c) {
210                        $ligne = "<tr class='plugin $plugin'>\n<td class='nombre'>"
211                                . count($c)
212                                . "</td>\n<td class='prefixe'>$plugin</td>\n"
213                                . '<td class=\'dist\'>'
214                                . pluginDist($list_dist, $plugin)
215                                . "</td>\n<td class='version'>"
216                                . $versionplug[$plugin]
217                                . "</td>\n<td class='liste'>"
218                                . implode(' ', ancre_site($c))
219                                . '</td>'
220                                . "\n"
221                                . '</tr>'
222                                . "\n";
223                        if (isset($plnum[intval(count($c))])) {
224                                $plnum[intval(count($c))] .= $ligne;
225                        } else {
226                                $plnum[intval(count($c))] = $ligne;
227                        }
228                }
229                krsort($plnum);
230                $page .= implode('', $plnum);
231                $page .= "</tbody>\n</table>\n";
232
233                $inutile = $extract = $list = array();
234                // On crée une variable ici qui regardera les particularités des fichiers xml d'un plugin.
235                // Si à l'avenir on change de terminologie de fichier xml, il suffira de l'ajouter dans un nouvel array()
236                $cfg = array(
237                        array('fn' => 'paquet.xml', 'pre' => '/prefix="([^"]*)"/i', 'ver' => '/version="([^"]*)"/i'),
238                        array('fn' => 'plugin.xml', 'pre' => ',<prefix>([^<]+),ims', 'ver' => ',<version>([^<]+),ims')
239                );
240
241                $ustart_glob = memory_get_peak_usage(true);
242
243                // Ici on est en SPIP 3.
244                // En spip 3, avec SVP, on liste les plugins dans des sous-répertoires.
245                // Ca peut aller jusqu'a 3 sous-répertoires.
246                // On garde l'ancien principe d'un sous-répertoire pour ne pas casser la compat.
247
248                // Utiliser la classe si elle existe (PHP 5.3+)
249                $dir = _DIR_PLUGINS;
250                if (class_exists('FilesystemIterator') and is_dir(_DIR_PLUGINS)) {
251                        $dir_it = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
252                        $it = new RecursiveIteratorIterator($dir_it, RecursiveIteratorIterator::SELF_FIRST);
253
254                        foreach ($it as $path => $fo) {
255                                if (!$fo->isDir()) {
256                                        continue;
257                                }
258
259                                $path .= '/';
260
261                                foreach ($cfg as $k => $v) {
262                                        if (file_exists($path . $v['fn'])) {
263                                                $res = processConfig($cfg[$k], $lsplugs, $path);
264                                                if (false !== $res) {
265                                                        $inutile[] = $res;
266                                                }
267                                                break;
268                                        }
269                                }
270                        }
271                } else {
272                        // Pour php < 5.3
273                        // correspond à plugins/nom_plugin/fichier.xml
274                        if ($les_paquets = glob(_DIR_PLUGINS . '*/{paquet,plugin}.xml', GLOB_BRACE)) {
275                                foreach ($les_paquets as $value) {
276                                        $list[] = $value;
277                                }
278                        }
279                        // correspond à plugins/auto/nom_plugin/fichier.xml
280                        if ($les_paquets = glob(_DIR_PLUGINS . '*/*/{paquet,plugin}.xml', GLOB_BRACE)) {
281                                foreach ($les_paquets as $value) {
282                                        $list[] = $value;
283                                }
284                        }
285                        // correspond à plugins/auto/nom_plugin/x.y.z/fichier.xml
286                        if ($les_paquets = glob(_DIR_PLUGINS . '*/*/*/{paquet,plugin}.xml', GLOB_BRACE)) {
287                                foreach ($les_paquets as $value) {
288                                        $list[] = $value;
289                                }
290                        }
291
292                        // Ici on va prendre les chemins d'extrusion uniquement, sans distinction du fichier xml
293                        foreach ($list as $value) {
294                                $extract[] = str_replace(array('plugin.xml', 'paquet.xml'), '', $value);
295                        }
296                        // On dédoublonne
297                        $extract = array_unique($extract);
298                        foreach ($extract as $url) {
299                                // Et on refait une recherche pour paquet.xml d'abord
300                                if ($result = glob($url . 'paquet.xml', GLOB_NOSORT)) {
301                                        $result = $result[0];
302                                        // dans paquet.xml on cherche la valeur de l'attribut prefix
303                                        if (preg_match('/prefix="([^"]*)"/i', file_get_contents($result),
304                                                        $r) and !$lsplugs[strtolower(trim($r[1]))]
305                                        ) {
306                                                preg_match('/version="([^"]*)"/i', file_get_contents($result), $n);
307                                                $inutile[] = trim($r[1]) . ' (' . $n[1] . ')';
308                                        }
309                                } else {
310                                        // Si pas de paquet.xml, on cherche plugin.xml
311                                        $result = glob($url . 'plugin.xml', GLOB_NOSORT);
312                                        $result = $result[0];
313                                        // là, on reprend l'ancien code. On cherche la valeur de la balise prefix
314                                        if (preg_match(',<prefix>([^<]+),ims', file_get_contents($result),
315                                                        $r) and !$lsplugs[strtolower(trim($r[1]))]
316                                        ) {
317                                                preg_match(',<version>([^<]+),ims', file_get_contents($result), $n);
318                                                $inutile[] = trim($r[1]) . ' (' . $n[1] . ')';
319                                        }
320                                }
321                        }
322                }
323
324                $uend_glob = memory_get_peak_usage(true);
325                $inutile = array_map('mb_strtolower', $inutile);
326                sort($inutile);
327
328                if ($inutile) {
329                        $nombre_plugins_inutiles = count($inutile);
330                        $page .= "<div class='inutilises'>\n<p><strong>" . _L('Plugins inutilis&#233;s :') . '</strong> ' . implode(', ',
331                                        $inutile) . '.<br />';
332                        $page .= '<em>Soit ' . $nombre_plugins_inutiles . _L(' plugins inutilis&#233;s') . ".</em></p>\n</div>";
333                }
334        }
335
336        $page .= '<div class="logo_mutualisation"><img src="' . find_in_path('mutualisation/mutualiser.png') . '" alt="" /></div>';
337
338        $page = minipres($titre, $page);
339
340        $page = str_replace('</head>', '
341        <link rel="stylesheet" type="text/css" href="../mutualisation/mutualisation.css" />
342        <script src="../prive/javascript/jquery.js" type="text/javascript"></script>
343        <script src="../mutualisation/mutualisation_tailles.js" type="text/javascript"></script>
344        <script src="../mutualisation/mutualisation_upgrade.js" type="text/javascript"></script>
345        <script src="../mutualisation/mutualisation_toolbar.js" type="text/javascript"></script>
346        </head>
347        ', $page);
348
349        $uend = memory_get_peak_usage(true);
350        $udiff = $uend-$ustart;
351        $udiff_glob = $uend_glob-$ustart_glob;
352        $timeend = microtime(true);
353        $time = $timeend-$timestart;
354        $page_load_time = number_format($time, 3);
355
356        // On génère le contenu de notre toolbar.
357        $debug_toolbar = "<div class='toolbar'>\n";
358
359        $debug_toolbar .= "<div class='toolbar-block'>\n";
360        $debug_toolbar .= "<div class='toolbar-icon'><i class='icon-php_info'></i></div>\n";
361        $debug_toolbar .= "<div class='toolbar-info'>\n";
362        $debug_toolbar .= "<div class='toolbar-info-element'><b>SPIP</b> <span>" . $GLOBALS['spip_version_branche'] . "</span></div>\n";
363        $debug_toolbar .= "<div class='toolbar-info-element'><b>PHP</b> <span>" . phpversion() . "</span></div>\n";
364        $debug_toolbar .= "<div class='toolbar-info-element'><b>Mémoire allouée</b> <span>" . $memory_limit . "</span></div>\n";
365        $debug_toolbar .= "<div class='toolbar-info-element'><b>Serveur</b> <span>" . $_SERVER['SERVER_SOFTWARE'] . "</span></div>\n";
366        $debug_toolbar .= "</div></div>\n";
367
368        $debug_toolbar .= "<div class='toolbar-block'>\n";
369        $debug_toolbar .= "<div class='toolbar-icon'><i class='icon-plugins'></i><span>" . ($nombre_plugins_inutiles+$nombre_plugins) . " plugins</span></div>\n";
370        $debug_toolbar .= "<div class='toolbar-info'>\n";
371        $debug_toolbar .= "<div class='toolbar-info-element'><b>Utilisés</b> <span>" . $nombre_plugins . "</span></div>\n";
372        $debug_toolbar .= "<div class='toolbar-info-element'><b>Inutilisés</b> <span>" . $nombre_plugins_inutiles . "</span></div>\n";
373        $debug_toolbar .= "<div class='toolbar-info-element'><b>Total</b> <span>" . ($nombre_plugins_inutiles+$nombre_plugins) . "</span></div>\n";
374        $debug_toolbar .= "</div></div>\n";
375
376        $debug_toolbar .= "<div class='toolbar-block'>\n";
377        $debug_toolbar .= "<div class='toolbar-icon'><i class='icon-memory'></i> <span>" . memoryUsage($udiff) . "</span></div>\n";
378        $debug_toolbar .= "<div class='toolbar-info'>\n";
379        $debug_toolbar .= "<div class='toolbar-info-element'><b>Mémoire :</b></div>\n";
380        $debug_toolbar .= "<div class='toolbar-info-element'><b>Au début</b> <span>" . memoryUsage($ustart) . "</span></div>\n";
381        $debug_toolbar .= "<div class='toolbar-info-element'><b>À la fin</b> <span>" . memoryUsage($uend) . "</span></div>\n";
382        $debug_toolbar .= "<div class='toolbar-info-element'><b>Différence</b> <span>" . memoryUsage($udiff) . "</span></div>\n";
383        $debug_toolbar .= "</div></div>\n";
384
385        $debug_toolbar .= "<div class='toolbar-block'>\n";
386        $debug_toolbar .= "<div class='toolbar-icon'><i class='icon-time'></i> <span>" . $page_load_time . " s</span></div>\n";
387        $debug_toolbar .= "<div class='toolbar-info'>";
388        $debug_toolbar .= "<div class='toolbar-info-element'><b>Début du script</b> <span>" . date('H:i:s',
389                        $timestart) . "</span></div>\n";
390        $debug_toolbar .= "<div class='toolbar-info-element'><b>Fin du script</b> <span>" . date('H:i:s',
391                        $timeend) . "</span></div>\n";
392        $debug_toolbar .= "<div class='toolbar-info-element'><b>Temps d'exécution</b> <span>" . $page_load_time . " s</span></div>\n";
393        $debug_toolbar .= "</div></div>\n";
394
395        $debug_toolbar .= "</div>\n";
396
397        $page = str_replace('</body>', $debug_toolbar . "\n </body>", $page);
398
399        echo $page;
400}
401
402function test_upgrade_site($meta) {
403        if ($GLOBALS['spip_version_base'] != str_replace(',', '.', $meta['version_installee'])) {
404                $secret = $meta['version_installee'] . '-' . (isset($meta['popularite_total']) ? $meta['popularite_total'] : '0');
405                $secret = md5($secret);
406                $adresse_site = isset($meta['adresse_site']) ? $meta["adresse_site"] : '';
407
408                return <<<EOF
409<form action='$adresse_site/ecrire/index.php?exec=mutualisation' method='post' class='upgrade' target='_blank'>
410<div>
411<input type='hidden' name='secret' value='$secret' />
412<input type='hidden' name='exec' value='mutualisation' />
413<input type='hidden' name='upgrade' value='oui' />
414<input type='submit' value='Upgrade site' />
415</div>
416</form>
417EOF;
418        }
419}
420
421function adminplugin_site($meta, $liste_plug_compat, $liste_plug_compat_base) {
422        if ($cfg = @unserialize($meta['plugin'])) {
423                $plugins = array_keys($cfg);
424                ksort($plugins);
425                $repertoires_plugins = array('_DIR_PLUGINS', '_DIR_PLUGINS_DIST', '_DIR_RESTREINT');
426                foreach ($plugins as $plugin) {
427                        $vplugin_base = $nouvelle_version_plugin_base = $info_plugin = '';
428                        $vplugin_base = (isset($meta[strtolower($plugin) . '_base_version'])) ? trim($meta[strtolower($plugin) . '_base_version']) : '0.0.0';
429                        foreach ($repertoires_plugins as $repertoire) {
430                                if (isset($liste_plug_compat[$repertoire][strtolower($plugin)])) {
431                                        $info_plugin = $liste_plug_compat[$repertoire][strtolower($plugin)];
432                                }
433                        }
434                        $nouvelle_version_plugin_base = (isset($info_plugin['schema'])) ? trim($info_plugin['schema']) : '0.0.0';
435
436                        if ((isset($cfg[$plugin]['version']) and isset($info_plugin['version'])) and
437                                (
438                                        ($cfg[$plugin]['version'] != $info_plugin['version'])
439                                        or
440                                        (spip_version_compare($vplugin_base, $nouvelle_version_plugin_base, '<'))
441                                )
442                        ) {
443                                $vplugin = $vplugin_base . ' / ' . $cfg[$plugin]['version'] . ' &rarr; ' . $nouvelle_version_plugin_base . ' / ' . $info_plugin['version'];
444
445                                return upgrade_placeholder($meta, "$plugin $vplugin");
446                        }
447                }
448                if (defined('_MUTUALISATION_UPGRADE_FORCE')) {
449                        return upgrade_placeholder($meta);
450                }
451        }
452
453        return '';
454}
455
456function upgrade_placeholder($meta, $buttontxt = 'Upgrade plugins (forcé)') {
457        static $id = 0;
458        $id++;
459        $secret = $meta['version_installee'] . '-' . $meta['secret_du_site'];
460        $secret = md5($secret);
461        $adresse_site = isset($meta['adresse_site']) ? $meta["adresse_site"] : '';
462        $upgrade = '<script type="text/javascript">
463        //<![CDATA[
464        tableau_upgrade.push(["' . $adresse_site . '/ecrire/?exec=mutualisation&secret=' . $secret . '&upgradeplugins=oui&ajax=oui"]);
465        //]]>
466        </script>
467        ';
468
469        return <<<EOF
470$upgrade
471<form action='$adresse_site/ecrire/?exec=mutualisation' method='get' class='upgrade' target='_blank'>
472<div id='upgrade$id' class='taille'>
473<input type='hidden' name='secret' value='$secret' />
474<input type='hidden' name='exec' value='mutualisation' />
475<input type='hidden' name='upgradeplugins' value='oui' />
476<button type='submit' value='Upgrade plugins'>$buttontxt</button>
477</div>
478</form>
479EOF;
480}
481
482function date_creation_repertoire_site($v) {
483        return (date('d/M/y', @filectime('../' . $GLOBALS['mutualisation_dir'] . '/' . $v . '/config/connect.php')));
484}
485
486/**
487 * lister les sites qui ont des sites/xx/config/connect.php
488 * avec 'connect.php' ne changeant pas de nom.
489 */
490function mutualisation_lister_sites_dist() {
491        $sites = array();
492        foreach (glob('../' . $GLOBALS['mutualisation_dir'] . '/*/config/connect.php') as $s) {
493                $sites[] = preg_replace(',^\.\./' . $GLOBALS['mutualisation_dir'] . '/(.*)/config/connect.php,', '\1', $s);
494        }
495        sort($sites);
496
497        return $sites;
498}
499
500/**
501 * autre exemple pour ceux qui mettent tous leurs fichiers de connexion
502 * dans /config/connect/xx.php
503 * fonction a mettre dans mes_options.php ou dans mutualisations/lister_sites.php.
504 */
505
506/*
507 function mutualisation_lister_sites() {
508 $sites = array();
509 if (is_dir(_DIR_CONNECT)) {
510 if ($dh = @opendir(_DIR_CONNECT)) {
511 while (($file = readdir($dh)) !== false) {
512 if (substr($file,-4)=='.php') {
513 $sites[] = substr($file,0,-4);
514 }
515 }
516 }
517 }
518 sort($sites);
519 return $sites;
520 }
521 */
522
523// faire une ancre vers le tableau des sites en haut de page
524function ancre_site($c) {
525        foreach ($c as $key => $value) {
526                $c[$key] = "<a href='#$value' class='$value'>" . $value . ',</a> ';
527        }
528
529        return $c;
530}
531
532function memoryUsage($bytes) {
533        $bytes = (int)$bytes;
534
535        if ($bytes > 1024*1024) {
536                return round($bytes/1024/1024, 2) . ' MB';
537        } elseif ($bytes > 1024) {
538                return round($bytes/1024, 2) . ' KB';
539        }
540
541        return $bytes . ' B';
542}
543
544function pluginDist($array, $plugin) {
545        $p = '-';
546        if (in_array($plugin, $array)) {
547                $p = 'Oui';
548        }
549
550        return $p;
551}
552
553/**
554 * Petite fonction qui va automatiser la recherche de paquet.xml ou plugin.xml
555 * quelque soit la profondeur dans l'arborescence.
556 */
557function processConfig(&$cfg, &$lsplugs, $path) {
558        // echo "<!-- Process: " . $path . $cfg['fn'] . "--> \n";
559        $data = file_get_contents($path . $cfg['fn']);
560
561        if (1 === preg_match($cfg['pre'], $data, $r) and !isset($lsplugs[strtolower(trim($r[1]))])) {
562                preg_match($cfg['ver'], $data, $n);
563
564                return trim($r[1]) . ' (' . $n[1] . ')';
565        }
566
567        return false;
568}
569
570function lire_config_distante($cfg = '', $meta) {
571        $def = null;
572        $unserialize = true;
573        // lire le stockage sous la forme valeur
574        // ou casier/valeur
575
576        // traiter en priorite le cas simple et frequent
577        // de lecture direct $meta['truc'], si $cfg ne contient pas "/"
578        if ($cfg and strpbrk($cfg, '/') === false) {
579                $r = isset($meta[$cfg]) ?
580                        ((!$unserialize
581                                // ne pas essayer de deserialiser autre chose qu'une chaine
582                                or !is_string($meta[$cfg])
583                                // ne pas essayer de deserialiser si ce n'est visiblement pas une chaine serializee
584                                or strpos($meta[$cfg], ':') === false
585                                or ($t = @unserialize($meta[$cfg])) === false) ? $meta[$cfg] : $t)
586                        : $def;
587
588                return $r;
589        } else {
590                $cfg = explode('/', $cfg);
591                $r = @unserialize($meta[$cfg[0]]);
592                $r = $r[$cfg[1]];
593
594                return $r;
595        }
596}
Note: See TracBrowser for help on using the repository browser.