3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
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 \***************************************************************************/
13 if (!defined('_ECRIRE_INC_VERSION')) return;
15 include_spip('inc/install');
17 function formulaires_declarer_bases_charger_dist(){
18 list($adresse_db, $login_db, $pass_db, $sel, $server_db) = analyse_fichier_connection(_FILE_CONNECT
);
20 $deja = bases_referencees(_FILE_CONNECT
);
21 // proposer un nom de connect si pas encore saisi
23 if (defined('_DECLARER_choix_db')){
24 $nom_connect = _DECLARER_choix_db
;
26 while (in_array($nom_connect.$n,$deja)){
29 $nom_connect = $nom_connect.$n;
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
)
41 '_serveurs' => liste_serveurs(),
42 'sql_serveur_db' => 'sqlite3', // valeur par defaut
43 'adresse_db' => $adresse_db,
48 'nom_connect' => $nom_connect,
53 function liste_serveurs() {
55 $dir = _DIR_RESTREINT
. 'req/';
57 if (!$d) return array();
58 while ($f = readdir($d)) {
59 if ((preg_match('/^(.*)[.]php$/', $f, $s))
60 AND is_readable($f = $dir . $f)) {
63 $v = 'spip_versions_' . $s;
64 if (function_exists($v) AND $v()) {
65 $options[$s] = "install_select_type_$s";
67 else spip_log("$s: portage indisponible");
74 function liste_bases($server_db){
75 if (is_null($server_db)
76 OR !$result = sql_listdbs($server_db))
81 // si sqlite : result est deja un tableau
82 if (is_array($result)){
85 while ($row = sql_fetch($result, $server_db)) {
86 $noms[] = reset($row);
92 function formulaires_declarer_bases_verifier_1_dist(){
94 list($def_adresse_db, $def_login_db, $def_pass_db, $sel_db, $def_serveur_db) = analyse_fichier_connection(_FILE_CONNECT
);
97 if (!$adresse_db = _request('adresse_db')){
98 if (defined('_INSTALL_HOST_DB'))
99 $adresse_db =_INSTALL_HOST_DB
;
101 $adresse_db = $def_adresse_db;
103 if (!$serveur_db =_request('sql_serveur_db')){
104 if (defined('_INSTALL_SERVER_DB'))
105 $serveur_db = _INSTALL_SERVER_DB
;
107 $serveur_db = $def_serveur_db;
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
;
116 $login_db = $def_login_db;
118 if (!$pass_db = _request('pass_db')){
119 if (defined('_INSTALL_PASS_DB'))
120 $pass_db = _INSTALL_PASS_DB
;
122 $pass_db = $def_pass_db;
126 $link = spip_connect_db($adresse_db, '', $login_db, $pass_db, '@test@', $serveur_db);
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);
139 set_request('main_db','');
142 $erreurs['message_erreur'] = _T('avis_connexion_echec_1');
147 function formulaires_declarer_bases_verifier_2_dist(){
149 $choix_db = _request('choix_db');
151 $choix_db = _request('table_new');
153 $erreurs['choix_db']=_T('info_obligatoire');
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));
159 define('_DECLARER_choix_db',$choix_db);
165 function formulaires_declarer_bases_verifier_3_dist(){
167 $nom_connect = _request('nom_connect');
169 $erreurs['nom_connect']=_T('info_obligatoire');
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');
178 define('_DECLARER_nom_connect',$nom_connect);
184 function formulaires_declarer_bases_traiter_dist(){
186 $adresse_db = _DECLARER_adresse_db
;
187 if (preg_match(',(.*):(.*),', $adresse_db, $r))
188 list(,$adresse_db, $port) = $r;
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
,"'\\");
199 $conn = install_mode_appel($server_db)
201 . "'$adresse_db','$port','$login_db',"
202 . "'$pass_db','$sup_db'"
203 . ",'$server_db', '');\n";
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>")));