PageRenderTime 50ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/prive/formulaires/declarer_bases.php

https://bitbucket.org/re_al_/real.test.spip
PHP | 231 lines | 192 code | 25 blank | 14 comment | 43 complexity | 9af2cdb64539824f5a68271e72a8e1e8 MD5 | raw file
Possible License(s): LGPL-2.1, MIT
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2017 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) {
  12. return;
  13. }
  14. include_spip('inc/install');
  15. function formulaires_declarer_bases_charger_dist() {
  16. list($adresse_db, $login_db, $pass_db, $sel, $server_db) = analyse_fichier_connection(_FILE_CONNECT);
  17. $deja = bases_referencees(_FILE_CONNECT);
  18. // proposer un nom de connect si pas encore saisi
  19. $nom_connect = '';
  20. if (defined('_DECLARER_CHOIX_DB')) {
  21. $nom_connect = _DECLARER_CHOIX_DB;
  22. $n = '';
  23. while (in_array($nom_connect . $n, $deja)) {
  24. $n = ($n ? $n + 1 : 1);
  25. }
  26. $nom_connect = $nom_connect . $n;
  27. }
  28. $valeurs = array(
  29. '_etapes' => 3,
  30. '_bases_deja' => $deja,
  31. '_bases_prop' => defined('_DECLARER_SERVEUR_DB') ? liste_bases(_DECLARER_SERVEUR_DB) : '',
  32. '_tables' => (defined('_DECLARER_SERVEUR_DB') and defined('_DECLARER_CHOIX_DB')) ?
  33. $tables = sql_alltable('%', _DECLARER_SERVEUR_DB)
  34. :
  35. array(),
  36. 'main_db' => '',
  37. '_serveurs' => liste_serveurs(),
  38. 'sql_serveur_db' => 'sqlite3', // valeur par defaut
  39. 'adresse_db' => $adresse_db,
  40. 'login_db' => '',
  41. 'pass_db' => '',
  42. 'choix_db' => '',
  43. 'table_new' => '',
  44. 'nom_connect' => $nom_connect,
  45. );
  46. return $valeurs;
  47. }
  48. function liste_serveurs() {
  49. $options = array();
  50. $dir = _DIR_RESTREINT . 'req/';
  51. $d = opendir($dir);
  52. if (!$d) {
  53. return array();
  54. }
  55. while ($f = readdir($d)) {
  56. if ((preg_match('/^(.*)[.]php$/', $f, $s))
  57. and is_readable($f = $dir . $f)
  58. ) {
  59. require_once($f);
  60. $s = $s[1];
  61. $v = 'spip_versions_' . $s;
  62. if (function_exists($v) and $v()) {
  63. $options[$s] = "install_select_type_$s";
  64. } else {
  65. spip_log("$s: portage indisponible");
  66. }
  67. }
  68. }
  69. ksort($options);
  70. return $options;
  71. }
  72. function liste_bases($server_db) {
  73. if (is_null($server_db)
  74. or !$result = sql_listdbs($server_db)
  75. ) {
  76. return '';
  77. }
  78. $noms = array();
  79. // si sqlite : result est deja un tableau
  80. if (is_array($result)) {
  81. $noms = $result;
  82. } else {
  83. while ($row = sql_fetch($result, $server_db)) {
  84. $noms[] = reset($row);
  85. }
  86. }
  87. return $noms;
  88. }
  89. function formulaires_declarer_bases_verifier_1_dist() {
  90. $erreurs = array();
  91. list($def_adresse_db, $def_login_db, $def_pass_db, $sel_db, $def_serveur_db) = analyse_fichier_connection(_FILE_CONNECT);
  92. if (!$adresse_db = _request('adresse_db')) {
  93. if (defined('_INSTALL_HOST_DB')) {
  94. $adresse_db = _INSTALL_HOST_DB;
  95. } else {
  96. $adresse_db = $def_adresse_db;
  97. }
  98. }
  99. if (!$serveur_db = _request('sql_serveur_db')) {
  100. if (defined('_INSTALL_SERVER_DB')) {
  101. $serveur_db = _INSTALL_SERVER_DB;
  102. } else {
  103. $serveur_db = $def_serveur_db;
  104. }
  105. }
  106. $login_db = $pass_db = '';
  107. if (!preg_match(',^sqlite,i', $serveur_db)) {
  108. if (!$login_db = _request('login_db')) {
  109. if (defined('_INSTALL_USER_DB')) {
  110. $login_db = _INSTALL_USER_DB;
  111. } else {
  112. $login_db = $def_login_db;
  113. }
  114. }
  115. if (!$pass_db = _request('pass_db')) {
  116. if (defined('_INSTALL_PASS_DB')) {
  117. $pass_db = _INSTALL_PASS_DB;
  118. } else {
  119. $pass_db = $def_pass_db;
  120. }
  121. }
  122. }
  123. $link = spip_connect_db($adresse_db, '', $login_db, $pass_db, '@test@', $serveur_db);
  124. if ($link) {
  125. $GLOBALS['connexions'][$serveur_db][$GLOBALS['spip_sql_version']] = $GLOBALS['spip_' . $serveur_db . '_functions_' . $GLOBALS['spip_sql_version']];
  126. $GLOBALS['connexions'][$serveur_db] = $link;
  127. define('_DECLARER_SERVEUR_DB', $serveur_db);
  128. define('_DECLARER_ADRESSE_DB', $adresse_db);
  129. define('_DECLARER_LOGIN_DB', $login_db);
  130. define('_DECLARER_PASS_DB', $pass_db);
  131. // si on est sur le meme serveur que connect.php
  132. // indiquer quelle est la db utilisee pour l'exclure des choix possibles
  133. if ($serveur_db == $def_serveur_db and $adresse_db == $def_adresse_db) {
  134. set_request('main_db', $sel_db);
  135. } else {
  136. set_request('main_db', '');
  137. }
  138. } else {
  139. $erreurs['message_erreur'] = _T('avis_connexion_echec_1');
  140. }
  141. return $erreurs;
  142. }
  143. function formulaires_declarer_bases_verifier_2_dist() {
  144. $erreurs = array();
  145. $choix_db = _request('choix_db');
  146. if ($choix_db == '-1') {
  147. $choix_db = _request('table_new');
  148. }
  149. if (!$choix_db) {
  150. $erreurs['choix_db'] = _T('info_obligatoire');
  151. } else {
  152. define('_ECRIRE_INSTALL', 1); // hackons sqlite
  153. if (!sql_selectdb($choix_db, _DECLARER_SERVEUR_DB)) {
  154. $erreurs['choix_db'] = _T('avis_base_inaccessible', array('base' => $choix_db));
  155. } else {
  156. define('_DECLARER_CHOIX_DB', $choix_db);
  157. }
  158. }
  159. return $erreurs;
  160. }
  161. function formulaires_declarer_bases_verifier_3_dist() {
  162. $erreurs = array();
  163. $nom_connect = _request('nom_connect');
  164. if (!$nom_connect) {
  165. $erreurs['nom_connect'] = _T('info_obligatoire');
  166. } else {
  167. // securite : le nom doit etre un mot sans caracteres speciaux
  168. $f = preg_replace(',[^\w],', '', $nom_connect);
  169. if ($f !== $nom_connect) {
  170. $erreurs['nom_connect'] = _T('erreur_nom_connect_incorrect');
  171. } elseif (file_exists(_DIR_CONNECT . $nom_connect . '.php')) {
  172. $erreurs['nom_connect'] = _T('erreur_connect_deja_existant');
  173. } else {
  174. define('_DECLARER_NOM_CONNECT', $nom_connect);
  175. }
  176. }
  177. return $erreurs;
  178. }
  179. function formulaires_declarer_bases_traiter_dist() {
  180. $adresse_db = _DECLARER_ADRESSE_DB;
  181. if (preg_match(',(.*):(.*),', $adresse_db, $r)) {
  182. list(, $adresse_db, $port) = $r;
  183. } else {
  184. $port = '';
  185. }
  186. $server_db = addcslashes(_DECLARER_SERVEUR_DB, "'\\");
  187. $conn = install_mode_appel($server_db)
  188. . install_connexion(
  189. $adresse_db,
  190. $port,
  191. _DECLARER_LOGIN_DB,
  192. _DECLARER_PASS_DB,
  193. _DECLARER_CHOIX_DB,
  194. _DECLARER_SERVEUR_DB,
  195. '',
  196. '',
  197. ''
  198. );
  199. install_fichier_connexion(_DIR_CONNECT . _DECLARER_NOM_CONNECT . '.php', $conn);
  200. return array(
  201. 'message_ok' => _T('install_connect_ok', array('connect' => '<strong>' . _DECLARER_NOM_CONNECT . '</strong>'))
  202. );
  203. }