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

Last change on this file since 32594 was 32594, checked in by fil@…, 11 years ago

plugins en minuscules, et alias pour les noms de sites

File size: 5.7 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        foreach ($sites as $v) {
54                $nom_site=$stats=$plugins=$erreur=$version_installee="";
55
56                if (lire_fichier_securise(_DIR_RACINE.$GLOBALS['mutualisation_dir'].'/'.$v.'/tmp/meta_cache.php', $meta)
57                AND is_array($meta = @unserialize($meta))
58                AND $url = $meta['adresse_site']) {
59                        $url .= '/';
60                        $nom_site = sinon($meta['nom_site'], $v);
61                        $stats = intval($meta['popularite_total']);
62                        if ($plugins = @unserialize($meta['plugin'])) {
63                                $plugins = array_map('strtolower', array_keys($plugins));
64                                ksort($plugins);
65                                foreach ($plugins as $plugin)
66                                        $lsplugs[$plugin][] = $alias[$v];
67                                $cntplugins = count($plugins);
68                                $plugins = join(', ', $plugins);
69                        } else
70                                $plugins = '-';
71
72                        // S'il faut upgrader, creer un bouton qui permettra
73                        // de faire la mise a jour directement depuis le site maitre
74                        // Pour cela, on cree un bouton avec un secret, que mutualiser.php
75                        // va intercepter (pas terrible ?)
76                        $erreur = test_upgrade_site($meta);
77                        $version_installee = ' <em><small>'.$meta['version_installee'].'</small></em>';
78                }
79                else {
80                        $url = 'http://'.$v.'/';
81                        $erreur = ' <em><small><span class="erreur">Erreur&nbsp;!</span></small></em>';
82                        $plugins = '-';
83                }
84                $page .= "<tr class='tr". $nsite % 2 ."'"
85                        . " style='background-image: url(${url}spip.php?action=cron&amp;renouvelle_alea=yo);'>
86                        <td style='text-align:right;'>$v$erreur$version_installee</td>
87                        <td><a href='${url}'>".typo($nom_site)."</a></td>
88                        <td><a href='${url}ecrire/'>ecrire</a></td>
89                        <td style='text-align:right;'><a href='${url}ecrire/index.php?exec=statistiques_visites'>${stats}</a></td>
90                        <td><a href='${url}ecrire/index.php?exec=admin_plugin'>${cntplugins}</a> <small>${plugins}</small></td>
91                        <td style='text-align:right;'>".date_creation_repertoire_site($v)."</td>
92                        </tr>\n";
93                $nsite++;
94        }
95        $page .= "</tbody></table>";
96
97        if ($lsplugs) {
98                $page .= "<br /><br /><table style='clear:both;'>
99        <thead>
100                <tr>
101                        <td>#</td>
102                        <td>Plugins utilis&#233;s</td>
103                        <td>Sites</td>
104                </tr>
105        </thead>
106        <tbody>";
107                foreach ($lsplugs as $plugin => $c)
108                        $plnum[count($c)] .= "<tr><td>".count($c)."</td><td>$plugin</td><td>".join(', ', $c).'</td></tr>';
109                krsort($plnum);
110                $page .= join('', $plnum);
111                $page .= "</tbody></table>\n";
112        }
113
114        $page .= '<div style="text-align:center;"><img src="'
115                . _DIR_IMG.'mutualiser.png'
116                . '" alt="" /></div>';
117
118        $page = minipres($titre, $page);
119       
120        $page = str_replace('</head>', '
121                <style type="text/css">
122                a {color:#5a3463;}
123                table {border-collapse: collapse; border: 1px solid #999;}
124                tr {vertical-align:top;border: 1px solid #999;}
125                .tr0 {background-color:#ddded5}
126                thead tr {font-weight:bold;background-color:#333;color:#fff;}
127                td {text-align:left;border-left: 1px solid #ccc;}
128                td em {color:#aaa;}
129                #minipres{width:auto;}
130                .upgrade {text-align: center; padding:0 .5em; display:inline;}
131                .upgrade div {display:inline;}
132                .upgrade input { border: 2px solid red;color:red; background-color:#fff; font-weight:bold;}
133                .erreur {color:red;font-weight:bold;}
134                </style>
135                </head>
136                ', $page);
137               
138
139
140        echo $page;
141}
142
143
144function test_upgrade_site($meta) {
145        if ($GLOBALS['spip_version_base']
146        != str_replace(',','.',$meta['version_installee'])) {
147                $secret = $meta['version_installee'].'-'.$meta['alea_ephemere'];
148                $secret = md5($secret);
149                return <<<EOF
150<form action='$meta[adresse_site]/ecrire/index.php?exec=mutualisation' method='post' class='upgrade' target='_blank'>
151<div>
152<input type='hidden' name='secret' value='$secret' />
153<input type='hidden' name='exec' value='mutualisation' />
154<input type='hidden' name='upgrade' value='oui' />
155<input type='submit' value='Upgrade site' />
156</div>
157</form>
158EOF;
159        }
160}
161
162function date_creation_repertoire_site ($v) {
163        return (date("d/M/y", @filectime('../'.$GLOBALS['mutualisation_dir'].'/'.$v."/config/connect.php"))) ; 
164}
165
166// lister les sites qui ont des sites/xx/config/connect.php
167// avec 'connect.php' ne changeant pas de nom
168function mutualisation_lister_sites_dist() {
169        $sites = array();
170        foreach(glob('../'.$GLOBALS['mutualisation_dir'].'/*/config/connect.php') as $s) {
171                $sites[] = preg_replace(',^\.\./'.$GLOBALS['mutualisation_dir'].'/(.*)/config/connect.php,', '\1', $s);
172        }
173        sort($sites);
174        return $sites;
175}
176
177/* autre exemple pour ceux qui mettent tous leurs fichiers de connexion
178 * dans /config/connect/xx.php
179 * fonction a mettre dans mes_options.php ou dans mutualisations/lister_sites.php
180 */
181/*
182function mutualisation_lister_sites() {
183        $sites = array();
184        if (is_dir(_DIR_CONNECT)) {
185                if ($dh = @opendir(_DIR_CONNECT)) {
186                        while (($file = readdir($dh)) !== false) {
187                                if (substr($file,-4)=='.php') {
188                                        $sites[] = substr($file,0,-4);
189                                }
190                        }
191                }
192        }
193        sort($sites);
194        return $sites;
195}
196*/
197?>
Note: See TracBrowser for help on using the repository browser.