[SPIP] v3.2.1-->v3.2.2
[lhc/web/www.git] / www / ecrire / install / etape_3b.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
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
13 if (!defined('_ECRIRE_INC_VERSION')) {
14 return;
15 }
16
17 include_spip('inc/headers');
18
19 function install_etape_3b_dist() {
20 $login = _request('login');
21 $email = _request('email');
22 $nom = _request('nom');
23 $pass = _request('pass');
24 $pass_verif = _request('pass_verif');
25
26 $server_db = defined('_INSTALL_SERVER_DB')
27 ? _INSTALL_SERVER_DB
28 : _request('server_db');
29
30 if (!defined('_PASS_LONGUEUR_MINI')) {
31 define('_PASS_LONGUEUR_MINI', 6);
32 }
33 if (!defined('_LOGIN_TROP_COURT')) {
34 define('_LOGIN_TROP_COURT', 4);
35 }
36 if ($login) {
37 $echec = ($pass != $pass_verif) ?
38 _T('info_passes_identiques')
39 : ((strlen($pass) < _PASS_LONGUEUR_MINI) ?
40 _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI))
41 : ((strlen($login) < _LOGIN_TROP_COURT) ?
42 _T('info_login_trop_court')
43 : ''));
44 include_spip('inc/filtres');
45 if (!$echec and $email and !email_valide($email)) {
46 $echec = _T('form_email_non_valide');
47 }
48 if ($echec) {
49 echo minipres(
50 'AUTO',
51 info_progression_etape(3, 'etape_', 'install/', true) .
52 "<div class='error'><h3>$echec</h3>\n" .
53 '<p>' . _T('avis_connexion_echec_2') . '</p>' .
54 '</div>'
55 );
56 exit;
57 }
58 }
59
60 if (@file_exists(_FILE_CHMOD_TMP)) {
61 include(_FILE_CHMOD_TMP);
62 } else {
63 redirige_url_ecrire('install');
64 }
65
66 if (!@file_exists(_FILE_CONNECT_TMP)) {
67 redirige_url_ecrire('install');
68 }
69
70 # maintenant on connait le vrai charset du site s'il est deja configure
71 # sinon par defaut lire_meta reglera _DEFAULT_CHARSET
72 # (les donnees arrivent de toute facon postees en _DEFAULT_CHARSET)
73
74 lire_metas();
75 if ($login) {
76 include_spip('inc/charsets');
77
78 $nom = (importer_charset($nom, _DEFAULT_CHARSET));
79 $login = (importer_charset($login, _DEFAULT_CHARSET));
80 $email = (importer_charset($email, _DEFAULT_CHARSET));
81 # pour le passwd, bizarrement il faut le convertir comme s'il avait
82 # ete tape en iso-8859-1 ; car c'est en fait ce que voit md5.js
83 $pass = unicode2charset(utf_8_to_unicode($pass), 'iso-8859-1');
84 include_spip('auth/sha256.inc');
85 include_spip('inc/acces');
86 $htpass = generer_htpass($pass);
87 $alea_actuel = creer_uniqid();
88 $alea_futur = creer_uniqid();
89 $shapass = _nano_sha256($alea_actuel . $pass);
90 // prelablement, creer le champ webmestre si il n'existe pas (install neuve
91 // sur une vieille base
92 $t = sql_showtable('spip_auteurs', true);
93 if (!isset($t['field']['webmestre'])) {
94 @sql_alter("TABLE spip_auteurs ADD webmestre varchar(3) DEFAULT 'non' NOT NULL");
95 }
96
97 $id_auteur = sql_getfetsel('id_auteur', 'spip_auteurs', 'login=' . sql_quote($login));
98 if ($id_auteur !== null) {
99 sql_updateq('spip_auteurs', array(
100 'nom' => $nom,
101 'email' => $email,
102 'login' => $login,
103 'pass' => $shapass,
104 'alea_actuel' => $alea_actuel,
105 'alea_futur' => $alea_futur,
106 'htpass' => $htpass,
107 'statut' => '0minirezo'
108 ), "id_auteur=$id_auteur");
109 } else {
110 $id_auteur = sql_insertq('spip_auteurs', array(
111 'nom' => $nom,
112 'email' => $email,
113 'login' => $login,
114 'pass' => $shapass,
115 'htpass' => $htpass,
116 'alea_actuel' => $alea_actuel,
117 'alea_futur' => $alea_futur,
118 'statut' => '0minirezo'
119 ));
120 }
121 // le passer webmestre separrement du reste, au cas ou l'alter n'aurait pas fonctionne
122 @sql_updateq('spip_auteurs', array('webmestre' => 'oui'), "id_auteur=$id_auteur");
123
124 // inserer email comme email webmaster principal
125 // (sauf s'il est vide: cas de la re-installation)
126 if ($email) {
127 ecrire_meta('email_webmaster', $email);
128 }
129
130 // Connecter directement celui qui vient de (re)donner son login
131 // mais sans cookie d'admin ni connexion longue
132 include_spip('inc/auth');
133 if (!$auteur = auth_identifier_login($login, $pass)
134 or !auth_loger($auteur, true)
135 ) {
136 spip_log("login automatique impossible $auth_spip $session" . count($row));
137 }
138 }
139
140 // installer les metas
141 $config = charger_fonction('config', 'inc');
142 $config();
143
144 // activer les plugins
145 // leur installation ne peut pas se faire sur le meme hit, il faudra donc
146 // poursuivre au hit suivant
147 include_spip('inc/plugin');
148 actualise_plugins_actifs();
149
150
151 include_spip('inc/distant');
152 redirige_par_entete(parametre_url(self(), 'etape', '4', '&'));
153 }