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