d4f679626543b1e4ca67c9a2f3c0102d9ea5f1e6
[lhc/web/www.git] / www / prive / formulaires / declarer_bases.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2017 *
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/install');
18
19 function formulaires_declarer_bases_charger_dist() {
20 list($adresse_db, $login_db, $pass_db, $sel, $server_db) = analyse_fichier_connection(_FILE_CONNECT);
21
22 $deja = bases_referencees(_FILE_CONNECT);
23 // proposer un nom de connect si pas encore saisi
24 $nom_connect = '';
25 if (defined('_DECLARER_CHOIX_DB')) {
26 $nom_connect = _DECLARER_CHOIX_DB;
27 $n = '';
28 while (in_array($nom_connect . $n, $deja)) {
29 $n = ($n ? $n + 1 : 1);
30 }
31 $nom_connect = $nom_connect . $n;
32 }
33
34 $valeurs = array(
35 '_etapes' => 3,
36 '_bases_deja' => $deja,
37 '_bases_prop' => defined('_DECLARER_SERVEUR_DB') ? liste_bases(_DECLARER_SERVEUR_DB) : '',
38 '_tables' => (defined('_DECLARER_SERVEUR_DB') and defined('_DECLARER_CHOIX_DB')) ?
39 $tables = sql_alltable('%', _DECLARER_SERVEUR_DB)
40 :
41 array(),
42 'main_db' => '',
43 '_serveurs' => liste_serveurs(),
44 'sql_serveur_db' => 'sqlite3', // valeur par defaut
45 'adresse_db' => $adresse_db,
46 'login_db' => '',
47 'pass_db' => '',
48 'choix_db' => '',
49 'table_new' => '',
50 'nom_connect' => $nom_connect,
51 );
52
53 return $valeurs;
54 }
55
56 function liste_serveurs() {
57 $options = array();
58 $dir = _DIR_RESTREINT . 'req/';
59 $d = opendir($dir);
60 if (!$d) {
61 return array();
62 }
63 while ($f = readdir($d)) {
64 if ((preg_match('/^(.*)[.]php$/', $f, $s))
65 and is_readable($f = $dir . $f)
66 ) {
67 require_once($f);
68 $s = $s[1];
69 $v = 'spip_versions_' . $s;
70 if (function_exists($v) and $v()) {
71 $options[$s] = "install_select_type_$s";
72 } else {
73 spip_log("$s: portage indisponible");
74 }
75 }
76 }
77 ksort($options);
78
79 return $options;
80 }
81
82 function liste_bases($server_db) {
83 if (is_null($server_db)
84 or !$result = sql_listdbs($server_db)
85 ) {
86 return '';
87 }
88
89 $noms = array();
90
91 // si sqlite : result est deja un tableau
92 if (is_array($result)) {
93 $noms = $result;
94 } else {
95 while ($row = sql_fetch($result, $server_db)) {
96 $noms[] = reset($row);
97 }
98 }
99
100 return $noms;
101 }
102
103 function formulaires_declarer_bases_verifier_1_dist() {
104 $erreurs = array();
105 list($def_adresse_db, $def_login_db, $def_pass_db, $sel_db, $def_serveur_db) = analyse_fichier_connection(_FILE_CONNECT);
106
107 if (!$adresse_db = _request('adresse_db')) {
108 if (defined('_INSTALL_HOST_DB')) {
109 $adresse_db = _INSTALL_HOST_DB;
110 } else {
111 $adresse_db = $def_adresse_db;
112 }
113 }
114 if (!$serveur_db = _request('sql_serveur_db')) {
115 if (defined('_INSTALL_SERVER_DB')) {
116 $serveur_db = _INSTALL_SERVER_DB;
117 } else {
118 $serveur_db = $def_serveur_db;
119 }
120 }
121
122 $login_db = $pass_db = '';
123 if (!preg_match(',^sqlite,i', $serveur_db)) {
124 if (!$login_db = _request('login_db')) {
125 if (defined('_INSTALL_USER_DB')) {
126 $login_db = _INSTALL_USER_DB;
127 } else {
128 $login_db = $def_login_db;
129 }
130 }
131 if (!$pass_db = _request('pass_db')) {
132 if (defined('_INSTALL_PASS_DB')) {
133 $pass_db = _INSTALL_PASS_DB;
134 } else {
135 $pass_db = $def_pass_db;
136 }
137 }
138 }
139
140 $link = spip_connect_db($adresse_db, '', $login_db, $pass_db, '@test@', $serveur_db);
141 if ($link) {
142 $GLOBALS['connexions'][$serveur_db][$GLOBALS['spip_sql_version']] = $GLOBALS['spip_' . $serveur_db . '_functions_' . $GLOBALS['spip_sql_version']];
143 $GLOBALS['connexions'][$serveur_db] = $link;
144 define('_DECLARER_SERVEUR_DB', $serveur_db);
145 define('_DECLARER_ADRESSE_DB', $adresse_db);
146 define('_DECLARER_LOGIN_DB', $login_db);
147 define('_DECLARER_PASS_DB', $pass_db);
148 // si on est sur le meme serveur que connect.php
149 // indiquer quelle est la db utilisee pour l'exclure des choix possibles
150 if ($serveur_db == $def_serveur_db and $adresse_db == $def_adresse_db) {
151 set_request('main_db', $sel_db);
152 } else {
153 set_request('main_db', '');
154 }
155 } else {
156 $erreurs['message_erreur'] = _T('avis_connexion_echec_1');
157 }
158
159 return $erreurs;
160 }
161
162 function formulaires_declarer_bases_verifier_2_dist() {
163 $erreurs = array();
164 $choix_db = _request('choix_db');
165 if ($choix_db == '-1') {
166 $choix_db = _request('table_new');
167 }
168 if (!$choix_db) {
169 $erreurs['choix_db'] = _T('info_obligatoire');
170 } else {
171 define('_ECRIRE_INSTALL', 1); // hackons sqlite
172 if (!sql_selectdb($choix_db, _DECLARER_SERVEUR_DB)) {
173 $erreurs['choix_db'] = _T('avis_base_inaccessible', array('base' => $choix_db));
174 } else {
175 define('_DECLARER_CHOIX_DB', $choix_db);
176 }
177 }
178
179 return $erreurs;
180 }
181
182 function formulaires_declarer_bases_verifier_3_dist() {
183 $erreurs = array();
184 $nom_connect = _request('nom_connect');
185 if (!$nom_connect) {
186 $erreurs['nom_connect'] = _T('info_obligatoire');
187 } else {
188 // securite : le nom doit etre un mot sans caracteres speciaux
189 $f = preg_replace(',[^\w],', '', $nom_connect);
190 if ($f !== $nom_connect) {
191 $erreurs['nom_connect'] = _T('erreur_nom_connect_incorrect');
192 } elseif (file_exists(_DIR_CONNECT . $nom_connect . '.php')) {
193 $erreurs['nom_connect'] = _T('erreur_connect_deja_existant');
194 } else {
195 define('_DECLARER_NOM_CONNECT', $nom_connect);
196 }
197 }
198
199 return $erreurs;
200 }
201
202 function formulaires_declarer_bases_traiter_dist() {
203
204 $adresse_db = _DECLARER_ADRESSE_DB;
205 if (preg_match(',(.*):(.*),', $adresse_db, $r)) {
206 list(, $adresse_db, $port) = $r;
207 } else {
208 $port = '';
209 }
210
211 $server_db = addcslashes(_DECLARER_SERVEUR_DB, "'\\");
212
213 $conn = install_mode_appel($server_db)
214 . install_connexion(
215 $adresse_db,
216 $port,
217 _DECLARER_LOGIN_DB,
218 _DECLARER_PASS_DB,
219 _DECLARER_CHOIX_DB,
220 _DECLARER_SERVEUR_DB,
221 '',
222 '',
223 ''
224 );
225
226 install_fichier_connexion(_DIR_CONNECT . _DECLARER_NOM_CONNECT . '.php', $conn);
227
228 return array(
229 'message_ok' => _T('install_connect_ok', array('connect' => '<strong>' . _DECLARER_NOM_CONNECT . '</strong>'))
230 );
231 }