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

Last change on this file since 26070 was 23017, checked in by marcimat@…, 13 years ago

Suivi du core, notamment http://trac.rezo.net/trac/spip/changeset/12893

File size: 12.4 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
17include_spip('inc/minipres');
18
19/* centrage...  */
20function mutu_minipres($titre="",$contenu=""){
21        return minipres($titre,"<div class='petit-centre'>" . $contenu . "</div>");
22}
23
24// http://doc.spip.org/@mutualiser_creer
25function mutualiser_creer($e, $options) {
26        include_spip('base/abstract_sql');
27        include_once(dirname(__FILE__).'/base/abstract_mutu.php');
28
29        $GLOBALS['meta']["charset"] = 'utf-8'; // pour que le mail fonctionne
30       
31        //$GLOBALS['spip_connect_version'] = 0.7;
32       
33        if (!defined('_INSTALL_SERVER_DB'))
34                define('_INSTALL_SERVER_DB','mysql');
35
36        mutu_etape_code_activation($e, $options);
37        mutu_etape_creer_repertoires($e, $options);
38        mutu_etape_creer_base($e, $options);
39        mutu_etape_fin($e, $options);
40}
41
42
43/*
44 * Code d'activation du site
45 *
46 * Demander le code pour autoriser cette creation de site
47 * Si le code est valide, poser un cookie
48 *
49 */
50function mutu_etape_code_activation($e, $options){
51        if ($options['code']) {
52                $secret = md5($code.$options['code']);
53
54                if ($options['code'] != $_REQUEST['code_activation']
55                AND $_COOKIE['mutu_code_activation'] != $secret) {
56                        echo mutu_minipres(
57                                _L('Installation de votre site SPIP'),
58                                "<div><img alt='SPIP' src='" . _DIR_IMG_PACK . "logo-spip.gif' /></div>\n".
59                       
60                                (isset($_REQUEST['code_activation'])
61                                        ? _L('Erreur...')
62                                        : ''
63                                ) .
64
65                                '<h3>'.
66                                _L('Veuillez entrer le code d\'activation du site :').
67                                '</h3>'.
68
69                                "<form method='post' action='".self()."'>
70                                <input type='text' name='code_activation' size='10' />
71                                <input type='submit' value='ok' />
72                                </form>
73                                "
74                        );
75                        exit;
76                } else {
77                        setcookie('mutu_code_activation', $secret);
78                }
79        }       
80}
81
82
83/*
84 * Creation de la base
85 *
86 * Cree la base de donnee
87 * Cree eventuellement un utilisateur pour cette base
88 *
89 */
90function mutu_etape_creer_base($e, $options){
91
92        if ($options['creer_base']) {
93
94                if (defined('_INSTALL_SERVER_DB')
95                AND defined('_INSTALL_NAME_DB')) {
96
97                        if (defined('_INSTALL_USER_DB_ROOT')) {
98                                $link = mutu_connect_db(_INSTALL_HOST_DB, 0,  _INSTALL_USER_DB_ROOT, _INSTALL_PASS_DB_ROOT, '', _INSTALL_SERVER_DB);
99                        } else {
100                                $link = mutu_connect_db(_INSTALL_HOST_DB, 0,  _INSTALL_USER_DB, _INSTALL_PASS_DB, '', _INSTALL_SERVER_DB);
101                        }
102
103                        // si la base n'existe pas, on va travailler
104                        if (!sql_selectdb(_INSTALL_NAME_DB, _INSTALL_SERVER_DB)) {
105                                if (_request('creerbase') == 'oui') {
106
107                                        // mode de creation par un ping sur une URL (AlternC)
108                                        // on le fait en local et en POST, donc pas de trou de secu
109                                        // curl indispensable pour le https... devrait aller dans inc/distant
110                                        if ($options['url_creer_base']
111                                        AND defined('_INSTALL_NAME_DB')) {
112                                                $url = str_replace('%x', _INSTALL_NAME_DB, $options['url_creer_base']);
113                                                $ch = curl_init($url);
114                                                curl_setopt($ch, CURLOPT_HEADER, 0);
115                                                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
116                                                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
117                                                curl_setopt($ch, CURLOPT_POST, 1);
118                                                $page = curl_exec($ch);
119                                                #var_dump($page);
120                                                curl_close($ch);
121                                                if (!sql_selectdb(_INSTALL_NAME_DB, _INSTALL_SERVER_DB)) {
122                                                        echo mutu_minipres(
123                                                                _L('La cr&#233;ation de la base de donn&#233;es <tt>'._INSTALL_NAME_DB.'</tt> a &#233;chou&#233;.'),
124                                                                "<div><img alt='SPIP' src='" . _DIR_IMG_PACK . "logo-spip.gif' /></div>\n".
125                                                                '<h3>'
126                                                                ._L('<a href="'.parametre_url(self(), 'creerbase', 'oui').'">R&#233;essayer...</a>')
127                                                                .'</h3>'
128                                                        );
129                                                        exit;
130                                                }
131                                        }
132
133                                        else if (sql_query('CREATE DATABASE '._INSTALL_NAME_DB, _INSTALL_SERVER_DB)
134                                        AND sql_selectdb(_INSTALL_NAME_DB, _INSTALL_SERVER_DB)) {
135                                                        $GLOBALS['connexions'][_INSTALL_SERVER_DB]['prefixe'] = $GLOBALS['table_prefix'];
136                                                        $GLOBALS['connexions'][_INSTALL_SERVER_DB]['db'] = _INSTALL_NAME_DB;
137                                               
138                                                /*
139                                                 * Creation d'un utilisateur pour la base nouvellement cree
140                                                 *             
141                                                 * Pour chaque base creee on cree aussi un user
142                                                 * MYSQL specifique qui aura les droits sur la base
143                                                 */
144                                                if ($options['creer_user_base']) {
145       
146                                                        // le nom de la machine MySQL peut etre different
147                                                        // du nom de la connexion via DNS
148                                                        define ('_INSTALL_HOST_DB_LOCALNAME', _INSTALL_HOST_DB); 
149                                                       
150                                                        // requete differente entre pg et mysql...
151                                                        $req = $err = array();
152                                                        switch (strtolower(_INSTALL_SERVER_DB)){
153                                                                       
154                                                                case 'pg':
155                                                                        // d'abord creer l'utilisateur
156                                                                        $req[] = "CREATE USER " . _INSTALL_USER_DB . " WITH PASSWORD '" . _INSTALL_PASS_DB . "'";
157                                                                        $err[] = "CREATE USER " . _INSTALL_USER_DB . " WITH PASSWORD 'xxx'";
158                                                                        // l'affecter a sa base de donnee
159                                                                        $req[] = $r = "GRANT ALL PRIVILEGES ON DATABASE " 
160                                                                                . _INSTALL_NAME_DB . " TO ". _INSTALL_USER_DB;
161                                                                        $err[] = $r;
162                                                                        break;
163                                                                       
164                                                                case 'mysql':
165                                                                default:
166                                                                        $req[] = "GRANT " . _PRIVILEGES_MYSQL_USER_BASE . " ON "
167                                                                                . _INSTALL_NAME_DB.".* TO '" 
168                                                                                . _INSTALL_USER_DB."'@'"._INSTALL_HOST_DB_LOCALNAME
169                                                                                . "' IDENTIFIED BY '" . _INSTALL_PASS_DB . "'";
170                                                                        $err[] = "GRANT " . _PRIVILEGES_MYSQL_USER_BASE . " ON "
171                                                                                . _INSTALL_NAME_DB.".* TO '" 
172                                                                                . _INSTALL_USER_DB."'@'"._INSTALL_HOST_DB_LOCALNAME
173                                                                                . "' IDENTIFIED BY 'xxx'";
174                                                                        break; 
175                                                               
176                                                        }
177                                                        foreach ($req as $n=>$sql){
178                                                                if (!sql_query($sql, _INSTALL_SERVER_DB)) {
179                                                                        die (__FILE__." " . __LINE__ . ": Erreur (" ._INSTALL_SERVER_DB . ") sur  :" . $err[$n]);
180                                                                }
181                                                        }
182                                                        mutu_close();
183                                                        $link = mutu_connect_db(_INSTALL_HOST_DB,'',  _INSTALL_USER_DB, _INSTALL_PASS_DB, '', _INSTALL_SERVER_DB);
184                                                }
185                                               
186                                                // creation ok
187                                                // supprimer le fichier d'installation
188                                                include_spip('inc/flock');
189                                                @supprimer_fichier($e . _NOM_TEMPORAIRES_INACCESSIBLES . _MUTU_INSTALLATION_FILE);
190                                               
191                                                echo mutu_minipres(
192                                                        _L('La base de donn&#233;es <tt>'._INSTALL_NAME_DB.'</tt> a &#233;t&#233; cr&#233;&#233;e'),
193                                                        "<div><img alt='SPIP' src='" . _DIR_IMG_PACK . "logo-spip.gif' /></div>\n".
194                                                        '<h3>'
195                                                        ._L('Vous pouvez <a href="'.generer_url_ecrire('install').'">poursuivre l\'installation de SPIP</a>.')
196                                                        .'</h3>'
197                                                );
198
199                                                if ($options['mail']) {
200                                                        $mail = charger_fonction('envoyer_mail', 'inc');
201                                                        $mail($options['mail'],
202                                                                _L('Creation de la base de donn&#233;es '._INSTALL_NAME_DB),
203                                                                _L('La base de donn&#233;es '._INSTALL_NAME_DB.'@'._INSTALL_HOST_DB.' ('._INSTALL_USER_DB.':'._INSTALL_PASS_DB.') a &#233;t&#233; cr&#233;&#233;e pour le site '.$e),
204                                                                $options['mail']
205                                                        );
206                                                }
207                                                exit;
208                                        } else {
209                                                echo mutu_minipres(
210                                                        _L('Cr&#233;ation de la base de donn&#233;es <tt>'._INSTALL_NAME_DB.'</tt>'),
211                                                        "<div><img alt='SPIP' src='" . _DIR_IMG_PACK . "logo-spip.gif' /></div>\n".
212                                                        '<h3>'
213                                                        ._L('erreur')
214                                                        .'</h3>'
215                                                );
216                                                exit;
217                                        }
218
219                                }
220                                else {
221                                        echo mutu_minipres(
222                                                _L('Cr&#233;ation de la base de donn&#233;es <tt>'._INSTALL_NAME_DB.'</tt>'),
223                                                "<div><img alt='SPIP' src='" . _DIR_IMG_PACK . "logo-spip.gif' /></div>\n".
224                                                '<h3>'
225                                                ._L('Voulez-vous <a href="'.parametre_url(self(), 'creerbase', 'oui').'">cr&#233;er cette base ?</a>')
226                                                .'</h3>'
227                                        );
228                                        exit;
229                                }
230                        }
231
232                        // ici la base existe, on passe aux repertoires
233                }
234               
235                else {
236                        echo mutu_minipres(
237                                _L('Creation de la base de donn&#233;es du site (<tt>'.joli_repertoire($e).'</tt>)'),
238
239                                "<div><img alt='SPIP' src='" . _DIR_IMG_PACK . "logo-spip.gif' /></div>\n"
240                                .'<h3>'. _L('erreur') .'</h3>'
241                                . _L('Les donn&#233;es de connexion ' . strtoupper(_INSTALL_SERVER_DB) . ' ne sont pas d&#233;finies, impossible de cr&#233;er automatiquement la base.')
242                        );
243                        exit;
244                }
245        }       
246}
247
248
249/*
250 * Cree les dossiers necessaires au site mutualise
251 */
252function mutu_etape_creer_repertoires($e, $options){
253        if ($options['creer_site']) {
254                $ok_dir =
255                is_dir(_DIR_RACINE . $options['repertoire'])
256                AND is_writable(_DIR_RACINE . $options['repertoire']);
257
258                if (!$ok_dir) {
259                        echo mutu_minipres(
260                                _L('Creation du r&eacute;pertoire du site (<tt>'.joli_repertoire($e).'</tt>)'),
261
262                                "<div><img alt='SPIP' src='" . _DIR_IMG_PACK . "logo-spip.gif' /></div>\n"
263                                .'<h3>'. _L('erreur') .'</h3>'
264                                . _L('Le r&#233;pertoire <tt>'.$options['repertoire'].'/</tt> n\'est pas accessible en &#233;criture')
265                        );
266                        exit;
267                }
268
269                if (_request('creerrepertoire') && _request('creerrepertoire')=='oui') {
270                        $ok =
271                        mkdir($e, _SPIP_CHMOD)
272                        AND chmod($e, _SPIP_CHMOD)
273                        AND mkdir($e._NOM_PERMANENTS_INACCESSIBLES, _SPIP_CHMOD)
274                        AND mkdir($e._NOM_PERMANENTS_ACCESSIBLES, _SPIP_CHMOD)
275                        AND mkdir($e._NOM_TEMPORAIRES_INACCESSIBLES, _SPIP_CHMOD)
276                        AND mkdir($e._NOM_TEMPORAIRES_ACCESSIBLES, _SPIP_CHMOD)
277                        AND chmod($e._NOM_PERMANENTS_INACCESSIBLES, _SPIP_CHMOD)
278                        AND chmod($e._NOM_PERMANENTS_ACCESSIBLES, _SPIP_CHMOD)
279                        AND chmod($e._NOM_TEMPORAIRES_INACCESSIBLES, _SPIP_CHMOD)
280                        AND chmod($e._NOM_TEMPORAIRES_ACCESSIBLES, _SPIP_CHMOD);
281                       
282                        // pour signaler qu'il reste des etapes a realises,
283                        // malgre la presence des repertoires
284                        if ($ok){
285                                include_spip('inc/flock');
286                                ecrire_fichier($e . _NOM_TEMPORAIRES_INACCESSIBLES . _MUTU_INSTALLATION_FILE, 'ok');
287                        }
288                       
289                        echo mutu_minipres(
290                                _L('Creation du r&eacute;pertoire du site (<tt>'.joli_repertoire($e).'</tt>)'),
291
292                                "<div><img alt='SPIP' src='" . _DIR_IMG_PACK . "logo-spip.gif' /></div>\n"
293                                .'<h3>'
294                                . ($ok
295                                        ? _L('Cr&#233;ation des r&#233;pertoires OK. Vous pouvez <a href="'.parametre_url(self(), 'creerrepertoire', '').'">Continuer...</a>.')
296                                        : _L('erreur')
297                                ).'</h3>'
298                        );
299
300                        if ($options['mail']) {
301                                $mail = charger_fonction('envoyer_mail', 'inc');
302                                $mail($options['mail'],
303                                        _L('Creation du site '.joli_repertoire($e)),
304                                        _L('Les r&#233;pertoires du site '.$e.' ont &#233;t&#233; cr&#233;&#233;s.'),
305                                        $options['mail']
306                                );
307                        }
308                        exit;
309
310                } elseif (
311                           !is_dir($e._NOM_PERMANENTS_INACCESSIBLES)
312                        || !is_dir($e._NOM_PERMANENTS_ACCESSIBLES)
313                        || !is_dir($e._NOM_TEMPORAIRES_INACCESSIBLES)
314                        || !is_dir($e._NOM_TEMPORAIRES_ACCESSIBLES)
315                ) {
316                        echo mutu_minipres(
317                                _L('Creation du r&eacute;pertoire du site (<tt>'.joli_repertoire($e).'</tt>)'),
318
319                                "<div><img alt='SPIP' src='" . _DIR_IMG_PACK . "logo-spip.gif' /></div>\n"
320                                .'<h3>'.
321                                        _L('Voulez-vous <a href="'.parametre_url(self(), 'creerrepertoire', 'oui').'">cr&#233;er les r&#233;pertoires de ce site ?</a>')
322                                .'</h3>'
323                                . (!$ok_dir ? _L('Le r&#233;pertoire <tt>'.$options['repertoire'].'/</tt> n\'est pas accessible en &#233;criture') : '')
324                        );
325                        exit;
326
327                }
328
329        } else {
330                echo mutu_minipres(
331                        _L('Le r&eacute;pertoire du site (<tt>'.joli_repertoire($e).'</tt>) n\'existe pas'),
332                        "<div><img alt='SPIP' src='" . _DIR_IMG_PACK . "logo-spip.gif' /></div>\n".
333                        '<h3>'
334                        ._L('Veuillez cr&#233;er le r&#233;pertoire '.joli_repertoire($e).' et ses sous r&#233;pertoires:')
335                        .'</h3>'
336                        .'<ul>'
337                        .'<li>'.joli_repertoire($e)._NOM_PERMANENTS_INACCESSIBLES.'</li>'
338                        .'<li>'.joli_repertoire($e)._NOM_PERMANENTS_ACCESSIBLES.'</li>'
339                        .'<li>'.joli_repertoire($e)._NOM_TEMPORAIRES_INACCESSIBLES.'</li>'
340                        .'<li>'.joli_repertoire($e)._NOM_TEMPORAIRES_ACCESSIBLES.'</li>'
341                        .'</ul>'
342                );
343                exit;
344
345        }       
346}
347
348
349/*
350 * Fin de la procedure, proposer l'installation de SPIP
351 */
352function mutu_etape_fin($e, $options){
353        // supprimer le fichier d'installation
354        include_spip('inc/flock');
355        @supprimer_fichier($e . _NOM_TEMPORAIRES_INACCESSIBLES . _MUTU_INSTALLATION_FILE);
356       
357        echo mutu_minipres(
358                _L('Les r&#233;pertoires et la base de donn&#233;e du site sont maintenant cr&#233;&#233;s.'),
359
360                "<div><img alt='SPIP' src='" . _DIR_IMG_PACK . "logo-spip.gif' /></div>\n"
361                .'<h3>'.
362                        _L('Vous pouvez <a href="'.generer_url_ecrire('install').'">poursuivre l\'installation de SPIP</a>.')
363                .'</h3>'
364        );
365        exit;           
366}
367?>
Note: See TracBrowser for help on using the repository browser.