source: spip-zone/_plugins_/mutualisation/mutualiser_creer.php @ 50694

Last change on this file since 50694 was 50694, checked in by kent1@…, 8 years ago

Une chaine non traduite ...

Un incrément de version

File size: 16.0 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2007                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15define('_PRIVILEGES_MYSQL_USER_BASE','Alter, Select, Insert, Update, Delete, Create, Drop');
16#define('_DIRMUT','mutualisation/');
17define('_DIRMUT', str_replace(str_replace('\\', '/', _ROOT_RACINE), '', str_replace('\\', '/', dirname(__FILE__))) . '/');
18_chemin(_DIR_RACINE._DIRMUT);
19
20include_spip('inc/minipres');
21include_spip('inc/lang');
22
23utiliser_langue_visiteur();
24
25#$menu_langues = menu_langues('var_lang_ecrire');
26
27/* centrage...  */
28function mutu_minipres($titre="",$contenu="",$onload=""){
29        return minipres($titre,"<div class='petit-centre'>" . $contenu . "</div>",$onload);
30}
31
32// http://doc.spip.org/@mutualiser_creer
33function mutualiser_creer($e, $options) {
34        include_spip('base/abstract_sql');
35        include_once(dirname(__FILE__).'/base/abstract_mutu.php');
36
37        $GLOBALS['meta']["charset"] = 'utf-8'; // pour que le mail fonctionne
38
39        //$GLOBALS['spip_connect_version'] = 0.7;
40
41        if (!defined('_INSTALL_SERVER_DB'))
42                define('_INSTALL_SERVER_DB','mysql');
43
44        header("Cache-Control: no-store, no-cache, must-revalidate");
45        header("Pragma: no-cache");
46
47        mutu_etape_code_activation($e, $options);
48        mutu_etape_creer_repertoires($e, $options);
49        mutu_etape_creer_base($e, $options);
50        mutu_etape_fin($e, $options);
51}
52
53
54/*
55 * Code d'activation du site
56 *
57 * Demander le code pour autoriser cette creation de site
58 * Si le code est valide, poser un cookie
59 *
60 */
61function mutu_etape_code_activation($e, $options){
62        /**
63         * Cas de la mutu par identification sur site maitre
64         * Verifie en premier lieu si le code donne par l'utilisateur est son mot de passe valide
65         * Sinon on teste si c'est le code d'activation
66         */
67        $panel_nok = true;
68        if ($options['utiliser_panel'] && !defined(_INSTALL_PANEL_HOST_DB)) {
69                if(is_dir(_DIR_RACINE.$options['repertoire'].'/'.$_SERVER['HTTP_HOST'].'_disable')){
70                        $lien = $options['url_contact_hebergeur'] ? $options['url_contact_hebergeur'] : ($options['url_hebergeur'] ? $options['url_hebergeur'] : _SITES_ADMIN_MUTUALISATION);
71                        echo mutu_minipres(
72                                _T('mutu:site_suspendu'),
73                                "<div>" .$menu_langues ."<br /></div>\n" .
74                                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')." /></div>\n" .
75                                "<h3>"._T('mutu:message_site_desactive',array('lien' => $lien))."</h3>",
76                                " id='mutu'"
77                        );
78                        exit;
79                }
80                else if(is_dir(_DIR_RACINE.$options['repertoire'].'/'.$_SERVER['HTTP_HOST'].'_deleted')){
81                        $lien = $options['url_contact_hebergeur'] ? $options['url_contact_hebergeur'] : ($options['url_hebergeur'] ? $options['url_hebergeur'] : _SITES_ADMIN_MUTUALISATION);
82                        echo mutu_minipres(
83                                _T('mutu:site_supprime'),
84                                "<div>" .$menu_langues ."<br /></div>\n" .
85                                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n" .
86                                "<h3>"._T('mutu:message_site_desactive',array('lien' => $lien))."</h3>",
87                                " id='mutu'"
88                        );
89                        exit;
90                }
91                else if (!$options['statut']){
92                        $lien = $options['url_contact_hebergeur'] ? $options['url_contact_hebergeur'] : ($options['url_hebergeur'] ? $options['url_hebergeur'] : _SITES_ADMIN_MUTUALISATION);
93                        echo mutu_minipres(
94                                _T('mutu:site_non_demande'),
95                                "<div>" .$menu_langues ."<br /></div>\n" .
96                                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n" .
97                                "<h3>"._T('mutu:message_site_desactive',array('lien' => $lien))."</h3>",
98                                " id='mutu'"
99                        );
100                        exit;
101                }
102                else if($options['statut'] != 'publie'){
103                        $lien = $options['url_contact_hebergeur'] ? $options['url_contact_hebergeur'] : ($options['url_hebergeur'] ? $options['url_hebergeur'] : _SITES_ADMIN_MUTUALISATION);
104                        echo mutu_minipres(
105                                _T('mutu:site_non_active'),
106                                "<div>" .$menu_langues ."<br /></div>\n" .
107                                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n" .
108                                "<h3>"._T('mutu:message_site_desactive',array('lien' => $lien))."</h3>",
109                                " id='mutu'"
110                        );
111                        exit;
112                }
113                include_spip('base/abstract_sql');
114                $old_connect = _FILE_CONNECT;
115                define(_FILE_CONNECT,$options['repertoire'].'/'._SITES_ADMIN_MUTUALISATION.'/config/connect.php');
116                define(_FILE_CONNECT_OLD,$options['repertoire'].'/'._SITES_ADMIN_MUTUALISATION.'/config/connect.php');
117                include_spip('auth/spip');
118                $admin = auth_spip_dist($options['login'],$_REQUEST['code_activation']);
119                if(!empty($admin)){
120                        setcookie('mutu_methode_activation', $panel);
121                        $panel_nok = false;
122                }
123                define(_FILE_CONNECT,$old_connect);
124        }
125        if ($options['code']) {
126                $secret = md5($code.$options['code']);
127
128                if ($panel_nok AND ($options['code'] != $_REQUEST['code_activation']
129                AND $_COOKIE['mutu_code_activation'] != $secret)) {
130                        echo mutu_minipres(
131                                _T('mutu:install_site'),
132                                "<div>" .$menu_langues ."<br /></div>\n" .
133                                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n".
134
135                                (isset($_REQUEST['code_activation'])
136                                        ? _T('mutu:install_err')
137                                        : ''
138                                ) .
139
140                                '<h3>'.
141                                ($options['utiliser_panel'] ? _T('mutu:install_code_panel') : _T('mutu:install_code')).
142                                '</h3>'.
143
144                                "<form method='post' action='".self()."'><div>
145                                <input type='password' name='code_activation' size='10' />
146                                <input type='submit' value='ok' />"
147                                .$options['annonce']
148                                ."</div></form>
149                                ",
150                                " id='mutu'"
151                        );
152                        exit;
153                } else {
154                        setcookie('mutu_code_activation', $secret);
155                }
156        }
157}
158
159
160/*
161 * Creation de la base
162 *
163 * Cree la base de donnee
164 * Cree eventuellement un utilisateur pour cette base
165 *
166 */
167function mutu_etape_creer_base($e, $options){
168        if ($options['creer_base']) {
169
170                if (defined('_INSTALL_SERVER_DB')
171                AND defined('_INSTALL_NAME_DB')) {
172
173                        if (defined('_INSTALL_USER_DB_ROOT')) {
174                                $link = mutu_connect_db(_INSTALL_HOST_DB, 0,  _INSTALL_USER_DB_ROOT, _INSTALL_PASS_DB_ROOT, '', _INSTALL_SERVER_DB);
175                        } else {
176                                $link = mutu_connect_db(_INSTALL_HOST_DB, 0,  _INSTALL_USER_DB, _INSTALL_PASS_DB, '', _INSTALL_SERVER_DB);
177                        }
178
179                        // si la base n'existe pas, on va travailler
180                        if (!sql_selectdb(_INSTALL_NAME_DB, _INSTALL_SERVER_DB)) {
181                                if (_request('creerbase') == 'oui') {
182
183                                        // mode de creation par un ping sur une URL (AlternC)
184                                        // on le fait en local et en POST, donc pas de trou de secu
185                                        // curl indispensable pour le https... devrait aller dans inc/distant
186                                        if ($options['url_creer_base']
187                                        AND defined('_INSTALL_NAME_DB')) {
188                                                $url = str_replace('%x', _INSTALL_NAME_DB, $options['url_creer_base']);
189                                                $ch = curl_init($url);
190                                                curl_setopt($ch, CURLOPT_HEADER, 0);
191                                                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
192                                                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
193                                                curl_setopt($ch, CURLOPT_POST, 1);
194                                                $page = curl_exec($ch);
195                                                curl_close($ch);
196                                                if (!sql_selectdb(_INSTALL_NAME_DB, _INSTALL_SERVER_DB)) {
197                                                        echo mutu_minipres(
198                                                                _T('mutu:install_bd_echec',array('nombase' => '<tt>'._INSTALL_NAME_DB.'</tt>')),
199                                                                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n".
200                                                                '<h3>'
201                                                                .'<a href="'.parametre_url(self(), 'creerbase', 'oui').'">'._T('mutu:install_bd_reessayer').'</a>'
202                                                                .'</h3>',
203                                                                "id='mutu"
204                                                        );
205                                                        exit;
206                                                }
207                                        }
208
209                                        else if (sql_query('CREATE DATABASE '._INSTALL_NAME_DB, _INSTALL_SERVER_DB)
210                                        AND sql_selectdb(_INSTALL_NAME_DB, _INSTALL_SERVER_DB)) {
211                                                        $GLOBALS['connexions'][_INSTALL_SERVER_DB]['prefixe'] = $GLOBALS['table_prefix'];
212                                                        $GLOBALS['connexions'][_INSTALL_SERVER_DB]['db'] = _INSTALL_NAME_DB;
213
214                                                /*
215                                                 * Creation d'un utilisateur pour la base nouvellement cree
216                                                 *
217                                                 * Pour chaque base creee on cree aussi un user
218                                                 * MYSQL specifique qui aura les droits sur la base
219                                                 */
220                                                if ($options['creer_user_base']) {
221
222                                                        // le nom de la machine MySQL peut etre different
223                                                        // du nom de la connexion via DNS
224                                                        define ('_INSTALL_HOST_DB_LOCALNAME', _INSTALL_HOST_DB);
225
226                                                        // requete differente entre pg et mysql...
227                                                        $req = $err = array();
228                                                        switch (strtolower(_INSTALL_SERVER_DB)){
229
230                                                                case 'pg':
231                                                                        // d'abord creer l'utilisateur
232                                                                        $req[] = "CREATE USER " . _INSTALL_USER_DB . " WITH PASSWORD '" . _INSTALL_PASS_DB . "'";
233                                                                        $err[] = "CREATE USER " . _INSTALL_USER_DB . " WITH PASSWORD 'xxx'";
234                                                                        // l'affecter a sa base de donnee
235                                                                        $req[] = $r = "GRANT ALL PRIVILEGES ON DATABASE "
236                                                                                . _INSTALL_NAME_DB . " TO ". _INSTALL_USER_DB;
237                                                                        $err[] = $r;
238                                                                        break;
239
240                                                                case 'mysql':
241                                                                default:
242                                                                        $req[] = "GRANT " . _PRIVILEGES_MYSQL_USER_BASE . " ON "
243                                                                                . _INSTALL_NAME_DB.".* TO '"
244                                                                                . _INSTALL_USER_DB."'@'"._INSTALL_HOST_DB_LOCALNAME
245                                                                                . "' IDENTIFIED BY '" . _INSTALL_PASS_DB . "'";
246                                                                        $err[] = "GRANT " . _PRIVILEGES_MYSQL_USER_BASE . " ON "
247                                                                                . _INSTALL_NAME_DB.".* TO '"
248                                                                                . _INSTALL_USER_DB."'@'"._INSTALL_HOST_DB_LOCALNAME
249                                                                                . "' IDENTIFIED BY 'xxx'";
250                                                                        break;
251
252                                                        }
253                                                        foreach ($req as $n=>$sql){
254                                                                if (!sql_query($sql, _INSTALL_SERVER_DB)) {
255                                                                        die (__FILE__." " . __LINE__ . ": Erreur (" ._INSTALL_SERVER_DB . ") sur  :" . $err[$n]);
256                                                                }
257                                                        }
258                                                        mutu_close();
259                                                        $link = mutu_connect_db(_INSTALL_HOST_DB,'',  _INSTALL_USER_DB, _INSTALL_PASS_DB, '', _INSTALL_SERVER_DB);
260                                                }
261
262                                                // creation ok
263                                                // supprimer le fichier d'installation
264                                                include_spip('inc/flock');
265                                                @supprimer_fichier($e . _NOM_TEMPORAIRES_INACCESSIBLES . _MUTU_INSTALLATION_FILE);
266
267                                                echo mutu_minipres(
268                                                        _T('mutu:install_bd_cree', array( 'nombase' => '<tt>'._INSTALL_NAME_DB.'</tt>')),
269                                                        "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n".
270                                                        '<h3>'
271                                                        ._T('mutu:install_spip_1')
272                                                        .'<a href="'.generer_url_ecrire('install').'">'
273                                                        ._T('mutu:install_spip_2')
274                                                        .'</a>.</h3>',
275                                                        " id='mutu'"
276                                                );
277
278                                                if ($options['mail']) {
279                                                        $mail = charger_fonction('envoyer_mail', 'inc');
280                                                        $mail($options['mail'],
281                                                                _T('mutu:install_creation_bd', array('nombase' => _INSTALL_NAME_DB)),
282                                                                _T('mutu:install_creation_bd_site_2', array('base' => _INSTALL_NAME_DB.'@'._INSTALL_HOST_DB.' ('._INSTALL_USER_DB.')', 'site' => $e)),
283                                                                $options['mail']
284                                                        );
285                                                }
286                                                exit;
287                                        } else {
288                                                echo mutu_minipres(
289                                                        _T('mutu:install_creation_bd', array('nombase' => '<tt>'._INSTALL_NAME_DB.'</tt>')),
290                                                        "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n".
291                                                        '<h3>'
292                                                        ._T('mutu:install_err')
293                                                        .'</h3>',
294                                                        " id='mutu'"
295                                                );
296                                                exit;
297                                        }
298
299                                }
300                                else {
301                                        echo mutu_minipres(
302                                                _T('mutu:install_creation_bd', array('nombase' => '<tt>'._INSTALL_NAME_DB.'</tt>')),
303                                                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n".
304                                                '<h3>'
305                                                ._T('mutu:install_creer_bd_1')
306                                                .'<a href="'.parametre_url(self(), 'creerbase', 'oui').'">'
307                                                ._T('mutu:install_creer_bd_2')
308                                                .'</a></h3>',
309                                                " id='mutu'"
310                                        );
311                                        exit;
312                                }
313                        }
314
315                        // ici la base existe, on passe aux repertoires
316                }
317
318                else {
319                        echo mutu_minipres(
320                                _T('mutu:install_creation_bd_site'). '(<tt>'.joli_repertoire($e).'</tt>)',
321                                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n"
322                                .'<h3>'. _T('mutu:install_err') .'</h3>'
323                                . _T('mutu:install_no_data_connexion', array( 'connexion' => strtoupper(_INSTALL_SERVER_DB))),
324                                " id='mutu'"
325                        );
326                        exit;
327                }
328        }
329}
330
331
332/*
333 * Cree les dossiers necessaires au site mutualise
334 */
335function mutu_etape_creer_repertoires($e, $options){
336        if ($options['creer_site']) {
337                $ok_dir =
338                is_dir(_DIR_RACINE . $options['repertoire'])
339                AND is_writable(_DIR_RACINE . $options['repertoire']);
340
341                if (!$ok_dir) {
342                        echo mutu_minipres(
343                                _T('mutu:install_creation_repertoire', array ('repertoire' => '<tt>'.joli_repertoire($e).'</tt>')),
344                                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n"
345                                .'<h3>'. _T('mutu:install_err') .'</h3>'
346                                . _T('mutu:install_repertoire_inaccessible', array( 'repertoire' => '<tt>'.$options['repertoire'].'/</tt>')),
347                                " id='mutu'"
348                        );
349                        exit;
350                }
351
352                if (_request('creerrepertoire') && _request('creerrepertoire')=='oui') {
353                        $ok =
354                        mkdir($e, _SPIP_CHMOD)
355                        AND chmod($e, _SPIP_CHMOD)
356                        AND mkdir($e._NOM_PERMANENTS_INACCESSIBLES, _SPIP_CHMOD)
357                        AND mkdir($e._NOM_PERMANENTS_ACCESSIBLES, _SPIP_CHMOD)
358                        AND mkdir($e._NOM_TEMPORAIRES_INACCESSIBLES, _SPIP_CHMOD)
359                        AND mkdir($e._NOM_TEMPORAIRES_ACCESSIBLES, _SPIP_CHMOD)
360                        AND chmod($e._NOM_PERMANENTS_INACCESSIBLES, _SPIP_CHMOD)
361                        AND chmod($e._NOM_PERMANENTS_ACCESSIBLES, _SPIP_CHMOD)
362                        AND chmod($e._NOM_TEMPORAIRES_INACCESSIBLES, _SPIP_CHMOD)
363                        AND chmod($e._NOM_TEMPORAIRES_ACCESSIBLES, _SPIP_CHMOD);
364
365                        // pour signaler qu'il reste des etapes a realises,
366                        // malgre la presence des repertoires
367                        if ($ok){
368                                include_spip('inc/flock');
369                                ecrire_fichier($e . _NOM_TEMPORAIRES_INACCESSIBLES . _MUTU_INSTALLATION_FILE, 'ok');
370                        }
371
372                        echo mutu_minipres(
373                                _T('mutu:install_creation_repertoire', array ('repertoire' => '<tt>'.joli_repertoire($e).'</tt>')),
374                                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n"
375                                .'<h3>'
376                                . ($ok
377                                        ? _T('mutu:install_creation_rep_ok_1').'<a href="'.parametre_url(self(), 'creerrepertoire', '').'">'._T('mutu:install_creation_rep_ok_2').'</a>.'
378                                        : _T('mutu:install_err')
379                                ).'</h3>',
380                                " id='mutu'"
381                        );
382
383                        if ($options['mail']) {
384                                $mail = charger_fonction('envoyer_mail', 'inc');
385                                $mail($options['mail'],
386                                        _T('mutu:install_creation_site', array('site' => joli_repertoire($e))),
387                                        _T('mutu:install_creation_site', array('site' => $e)),
388                                        $options['mail']
389                                );
390                        }
391                        exit;
392
393                } elseif (
394                           !is_dir($e._NOM_PERMANENTS_INACCESSIBLES)
395                        || !is_dir($e._NOM_PERMANENTS_ACCESSIBLES)
396                        || !is_dir($e._NOM_TEMPORAIRES_INACCESSIBLES)
397                        || !is_dir($e._NOM_TEMPORAIRES_ACCESSIBLES)
398                ) {
399                        echo mutu_minipres(
400                                _T('mutu:install_creation_repertoire', array('repertoire' => '<tt>'.joli_repertoire($e).'</tt>')),
401                                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n"
402                                .'<h3>'.
403                                _T('mutu:install_creer_rep_1')
404                                .'<a href="'.parametre_url(self(), 'creerrepertoire', 'oui').'">'
405                                ._T('mutu:install_creer_rep_2')
406                                .'</a></h3>'
407                                . (!$ok_dir ? _T('mutu:install_repertoire_inaccessible', array('repertoire' => '<tt>'.$options['repertoire'].'/</tt>' )) : ''),
408                                " id='mutu'"
409                        );
410                        exit;
411
412                }
413
414                } else {
415                        echo mutu_minipres(
416                        _T('mutu:install_repertoire_noexist', array('repertoire' => '<tt>'.joli_repertoire($e).'</tt>')),
417                        "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n".
418                        '<h3>'
419                        ._T('mutu:install_repertoire_noexist', array( 'repertoire' => joli_repertoire($e)))
420                        .'</h3>'
421                        .'<ul>'
422                        .'<li>'.joli_repertoire($e)._NOM_PERMANENTS_INACCESSIBLES.'</li>'
423                        .'<li>'.joli_repertoire($e)._NOM_PERMANENTS_ACCESSIBLES.'</li>'
424                        .'<li>'.joli_repertoire($e)._NOM_TEMPORAIRES_INACCESSIBLES.'</li>'
425                        .'<li>'.joli_repertoire($e)._NOM_TEMPORAIRES_ACCESSIBLES.'</li>'
426                        .'</ul>',
427                        " id='mutu'"
428                );
429                exit;
430
431        }
432}
433
434
435/*
436 * Fin de la procedure, proposer l'installation de SPIP
437 */
438function mutu_etape_fin($e, $options){
439        // supprimer le fichier d'installation
440        include_spip('inc/flock');
441        @supprimer_fichier($e . _NOM_TEMPORAIRES_INACCESSIBLES . _MUTU_INSTALLATION_FILE);
442
443        echo mutu_minipres(
444                _T('mutu:install_rep_bd_ok'),
445
446                "<div><img alt='SPIP' src='".find_in_path('images/logo-spip.gif')."' /></div>\n"
447                .'<h3>'.
448                        _T('mutu:install_spip_3',array('url' => generer_url_ecrire('install')))
449                .'</h3>',
450                " id='mutu'"
451        );
452        exit;
453}
454?>
Note: See TracBrowser for help on using the repository browser.