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

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

Ne proposer l'upgrade des plugins que s'il y a au moins un des plugins dont le version_base est différent de celui installé.

Evite les faux positifs sur les n° de version des plugin sans changement de base.

File size: 7.9 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5function exec_mutualisation_dist() {
6        global $auteur_session;
7
8        include_spip('inc/minipres');
9        include_spip('inc/filtres');
10
11        // pas admin ? passe ton chemin
12        if ( ($auteur_session['statut'] != '0minirezo') and ( $_SERVER["REMOTE_ADDR"]!='127.0.0.1'))
13                die('pas admin !');
14
15        $lister_sites = charger_fonction('lister_sites','mutualisation');
16        $sites = $lister_sites();
17
18
19        if (!file_exists(_DIR_IMG.'mutualiser.png'))
20                @copy(find_in_path('mutualiser.png'), _DIR_IMG.'mutualiser.png');
21
22        $titre .= _L(count($sites).' '.'sites mutualis&#233;s <em>('._T('version')
23                . ' ' . $GLOBALS['spip_version_base'].')</em>');
24
25        $page = '';
26
27
28        $page .= "<table style='clear:both;'>
29        <thead>
30                <tr>
31                        <td>Site</td>
32                        <td>Nom</td>
33                        <td>Admin</td>
34                        <td title='Popularit&eacute; totale du site'>Stats</td>
35                        <td>Plugins</td>
36                        <td>Date</td>
37                </tr>
38        </thead>
39        <tbody>";
40
41        $nsite = 1;
42
43        # aliases pour l'affichage court
44        $alias = array();
45        foreach ($sites as $v) {
46                $redux = preg_replace(',^www\.|\..*$,', '', $v);
47                if (!in_array($redux, $alias))
48                        $alias[$v] = $redux;
49                else
50                        $alias[$v] = $v;
51        }
52       
53        // Recuperer la liste des plugins connus de l'instance SPIP en cours (celle qui est appelee par ecrire/?exec=mutualisation)
54        include_spip('inc/plugin');
55        $liste_plug = liste_plugin_files();
56        $liste_plug_compat = liste_plugin_valides($liste_plug);
57        $liste_plug_compat_base = $liste_plug_compat[2];
58        $liste_plug_compat = $liste_plug_compat[0];
59       
60        foreach ($sites as $v) {
61                $nom_site=$stats=$plugins=$erreur=$version_installee="";
62
63                if (lire_fichier_securise(_DIR_RACINE.$GLOBALS['mutualisation_dir'].'/'.$v.'/tmp/meta_cache.php', $meta)
64                AND is_array($meta = @unserialize($meta))
65                AND $url = $meta['adresse_site']) {
66                        $url .= '/';
67                        $nom_site = sinon(importer_charset($meta['nom_site'], $meta['charset']), $v);
68                        $stats = intval($meta['popularite_total']);
69                        if ($cfg = @unserialize($meta['plugin'])) {
70                                $plugins = array_keys($cfg);
71                                ksort($plugins);
72                                foreach ($plugins as $plugin) {
73                                        $lsplugs[strtolower($plugin)][] = $alias[$v];
74                                        $versionplug[strtolower($plugin)] = $cfg[$plugin]['version'];
75                                }
76                                $cntplugins = count($plugins);
77                                $plugins = strtolower(join(', ', $plugins));
78                        } else
79                                $plugins = '-';
80
81                        // S'il faut upgrader, creer un bouton qui permettra
82                        // de faire la mise a jour directement depuis le site maitre
83                        // Pour cela, on cree un bouton avec un secret, que mutualiser.php
84                        // va intercepter (pas terrible ?)
85                        $erreur = test_upgrade_site($meta);
86                        $adminplugin = adminplugin_site($meta, $liste_plug_compat, $liste_plug_compat_base);
87                        $version_installee = ' <em><small>'.$meta['version_installee'].'</small></em>';
88                }
89                else {
90                        $url = 'http://'.$v.'/';
91                        $erreur = ' <em><small><span class="erreur">Erreur&nbsp;!</span></small></em>';
92                        $plugins = '-';
93                }
94                $page .= "<tr class='tr". $nsite % 2 ."'"
95                        . " style='background-image: url(${url}ecrire/index.php?exec=mutualisation&amp;renouvelle_alea=yo)'>
96                        <td style='text-align:right;'>$v$erreur$version_installee</td>
97                        <td><a href='${url}'>".typo($nom_site)."</a></td>
98                        <td><a href='${url}ecrire/'>ecrire</a></td>
99                        <td style='text-align:right;'><a href='${url}ecrire/index.php?exec=statistiques_visites'>${stats}</a></td>
100                        <td>$adminplugin<a href='${url}ecrire/index.php?exec=admin_plugin'>${cntplugins}</a> <small>${plugins}</small></td>
101                        <td style='text-align:right;'>".date_creation_repertoire_site($v)."</td>
102                        </tr>\n";
103                $nsite++;
104        }
105        $page .= "</tbody></table>";
106
107        if ($lsplugs) {
108                $page .= "<br /><br /><table style='clear:both;'>
109        <thead>
110                <tr>
111                        <td>#</td>
112                        <td>Plugins utilis&#233;s</td>
113                        <td>Version</td>
114                        <td>Sites</td>
115                </tr>
116        </thead>
117        <tbody>";
118                foreach ($lsplugs as $plugin => $c)
119                        $plnum[count($c)] .= "<tr><td>".count($c)."</td><td>$plugin</td>"
120                                ."<td>".$versionplug[$plugin]."</td><td>".join(', ', $c).'</td></tr>';
121                krsort($plnum);
122                $page .= join('', $plnum);
123                $page .= "</tbody></table>\n";
124
125
126                $inutile = array();
127                foreach ( glob(_DIR_PLUGINS.'*/plugin.xml') as $pl) {
128                        if (preg_match(',<prefix>([^<]+),ims', file_get_contents($pl), $r)
129                        AND !$lsplugs[strtolower(trim($r[1]))])
130                                $inutile[] = trim($r[1]);
131                }
132                if ($inutile) {
133                        $page .= "<p>"._L('Plugins inutilis&#233;s :')." ".join(', ', $inutile)."</p>";
134                }
135        }
136
137        $page .= '<div style="text-align:center;"><img src="'
138                . find_in_path('mutualisation/mutualiser.png')
139                . '" alt="" /></div>';
140
141        $page = minipres($titre, $page);
142       
143        $page = str_replace('</head>', '
144                <style type="text/css">
145                a {color:#5a3463;}
146                table {border-collapse: collapse; border: 1px solid #999;}
147                tr {vertical-align:top;border: 1px solid #999;}
148                .tr0 {background-color:#ddded5}
149                thead tr {font-weight:bold;background-color:#333;color:#fff;}
150                td {text-align:left;border-left: 1px solid #ccc;}
151                td em {color:#aaa;}
152                #minipres{width:auto;}
153                .upgrade {text-align: center; padding:0 .5em; display:inline;}
154                .upgrade div {display:inline;}
155                .upgrade input { border: 2px solid red;color:red; background-color:#fff; font-weight:bold;}
156                .erreur {color:red;font-weight:bold;}
157                </style>
158                </head>
159                ', $page);
160               
161
162
163        echo $page;
164}
165
166
167function test_upgrade_site($meta) {
168        if ($GLOBALS['spip_version_base']
169        != str_replace(',','.',$meta['version_installee'])) {
170                $secret = $meta['version_installee'].'-'.$meta['popularite_total'];
171                $secret = md5($secret);
172                return <<<EOF
173<form action='$meta[adresse_site]/ecrire/index.php?exec=mutualisation' method='post' class='upgrade' target='_blank'>
174<div>
175<input type='hidden' name='secret' value='$secret' />
176<input type='hidden' name='exec' value='mutualisation' />
177<input type='hidden' name='upgrade' value='oui' />
178<input type='submit' value='Upgrade site' />
179</div>
180</form>
181EOF;
182        }
183}
184
185function adminplugin_site($meta, $liste_plug_compat, $liste_plug_compat_base) {
186        if ($cfg = @unserialize($meta['plugin'])) {
187                $plugins = array_keys($cfg);
188                ksort($plugins);
189                foreach ($plugins as $plugin) {
190                        $vplugin_base = $meta[strtolower($plugin).'_base_version'];
191                        $nouvelle_version_plugin_base = $liste_plug_compat_base[$liste_plug_compat[$plugin]['dir_type']][$liste_plug_compat[$plugin]['dir']]['version_base'];
192                        if ($cfg[$plugin]['version'] != $liste_plug_compat[$plugin]['version']
193                        AND !is_null($liste_plug_compat[$plugin]['version'])
194                        AND ($vplugin_base != $nouvelle_version_plugin_base) ) {
195                                $secret = $meta['version_installee'].'-'.$meta['popularite_total'];
196                                $secret = md5($secret);
197                                $vplugin = $vplugin_base . '&rarr;' . $nouvelle_version_plugin_base;
198                                return <<<EOF
199<form action='$meta[adresse_site]/ecrire/index.php?exec=mutualisation' method='post' class='upgrade' target='_blank'>
200<div>
201<input type='hidden' name='secret' value='$secret' />
202<input type='hidden' name='exec' value='mutualisation' />
203<input type='hidden' name='upgradeplugins' value='oui' />
204<input type='submit' value='Upgrade plugins ($plugin $vplugin)' />
205</div>
206</form>
207EOF;
208                        }
209                }
210        } 
211        return '';
212}
213
214
215function date_creation_repertoire_site ($v) {
216        return (date("d/M/y", @filectime('../'.$GLOBALS['mutualisation_dir'].'/'.$v."/config/connect.php"))) ; 
217}
218
219// lister les sites qui ont des sites/xx/config/connect.php
220// avec 'connect.php' ne changeant pas de nom
221function mutualisation_lister_sites_dist() {
222        $sites = array();
223        foreach(glob('../'.$GLOBALS['mutualisation_dir'].'/*/config/connect.php') as $s) {
224                $sites[] = preg_replace(',^\.\./'.$GLOBALS['mutualisation_dir'].'/(.*)/config/connect.php,', '\1', $s);
225        }
226        sort($sites);
227        return $sites;
228}
229
230/* autre exemple pour ceux qui mettent tous leurs fichiers de connexion
231 * dans /config/connect/xx.php
232 * fonction a mettre dans mes_options.php ou dans mutualisations/lister_sites.php
233 */
234/*
235function mutualisation_lister_sites() {
236        $sites = array();
237        if (is_dir(_DIR_CONNECT)) {
238                if ($dh = @opendir(_DIR_CONNECT)) {
239                        while (($file = readdir($dh)) !== false) {
240                                if (substr($file,-4)=='.php') {
241                                        $sites[] = substr($file,0,-4);
242                                }
243                        }
244                }
245        }
246        sort($sites);
247        return $sites;
248}
249*/
250?>
Note: See TracBrowser for help on using the repository browser.