PageRenderTime 59ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/spip/ecrire/install/etape_3.php

https://github.com/eyeswebcrea/espace-couture-sittler.fr
PHP | 312 lines | 232 code | 48 blank | 32 comment | 30 complexity | e66a93d2481d209dc5b91f75ba661d7a MD5 | raw file
Possible License(s): LGPL-2.1, GPL-3.0
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2011 *
  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')) return;
  12. include_spip('inc/headers');
  13. include_spip('base/abstract_sql');
  14. // http://doc.spip.org/@install_bases
  15. function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db){
  16. global $spip_version_base;
  17. // Prefix des tables :
  18. // contrairement a ce qui est dit dans le message (trop strict mais c'est
  19. // pour notre bien), on va tolerer les chiffres en plus des minuscules
  20. // S'il n'est pas defini par mes_options/inc/mutualiser, on va le creer
  21. // a partir de ce qui est envoye a l'installation
  22. if (!defined('_INSTALL_TABLE_PREFIX')) {
  23. $table_prefix = ($GLOBALS['table_prefix'] != 'spip')
  24. ? $GLOBALS['table_prefix']
  25. : trim(preg_replace(',[^a-z0-9],','',strtolower(_request('tprefix'))));
  26. // S'il est vide on remet spip
  27. if (!$table_prefix)
  28. $table_prefix = 'spip';
  29. } else {
  30. $table_prefix = _INSTALL_TABLE_PREFIX;
  31. }
  32. $GLOBALS['connexions'][$server_db]
  33. = spip_connect_db($adresse_db, 0, $login_db, $pass_db, '', $server_db);
  34. $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
  35. = $GLOBALS['spip_' . $server_db .'_functions_' . $GLOBALS['spip_sql_version']];
  36. $fquery = sql_serveur('query', $server_db);
  37. if ($choix_db == "new_spip") {
  38. $re = ',^[a-z_][a-z_0-9-]*$,i';
  39. if (preg_match($re, $sel_db))
  40. sql_create_base($sel_db, $server_db);
  41. else {
  42. $re = "Le nom de la base doit correspondre a $re";
  43. spip_log($re);
  44. return "<!--\n$re\n-->";
  45. }
  46. }
  47. // on rejoue la connexion apres avoir teste si il faut lui indiquer
  48. // un sql_mode
  49. install_mode_appel($server_db, false);
  50. $GLOBALS['connexions'][$server_db]
  51. = spip_connect_db($adresse_db, $sel_db, $login_db, $pass_db, $sel_db, $server_db);
  52. $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
  53. = $GLOBALS['spip_' . $server_db .'_functions_' . $GLOBALS['spip_sql_version']];
  54. // Completer le tableau decrivant la connexion
  55. $GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
  56. $GLOBALS['connexions'][$server_db]['db'] = $sel_db;
  57. $old = sql_showbase($table_prefix . "_meta", $server_db);
  58. if ($old) $old = sql_fetch($old, $server_db);
  59. if (!$old) {
  60. // Si possible, demander au serveur d'envoyer les textes
  61. // dans le codage std de SPIP,
  62. $charset = sql_get_charset(_DEFAULT_CHARSET, $server_db);
  63. if ($charset) {
  64. sql_set_charset($charset['charset'], $server_db);
  65. $GLOBALS['meta']['charset_sql_base'] =
  66. $charset['charset'];
  67. $GLOBALS['meta']['charset_collation_sql_base'] =
  68. $charset['collation'];
  69. $GLOBALS['meta']['charset_sql_connexion'] =
  70. $charset['charset'];
  71. $charsetbase = $charset['charset'];
  72. } else {
  73. spip_log(_DEFAULT_CHARSET . " inconnu du serveur SQL");
  74. $charsetbase = 'standard';
  75. }
  76. spip_log("Creation des tables. Codage $charsetbase");
  77. creer_base($server_db); // AT LAST
  78. creer_base_types_doc($server_db);
  79. // memoriser avec quel charset on l'a creee
  80. if ($charset) {
  81. $t = array('nom' => 'charset_sql_base',
  82. 'valeur' => $charset['charset'],
  83. 'impt' => 'non');
  84. @sql_insertq('spip_meta', $t, '', $server_db);
  85. $t['nom'] = 'charset_collation_sql_base';
  86. $t['valeur'] = $charset['collation'];
  87. @sql_insertq('spip_meta', $t, '', $server_db);
  88. $t['nom'] = 'charset_sql_connexion';
  89. $t['valeur'] = $charset['charset'];
  90. @sql_insertq('spip_meta', $t, '', $server_db);
  91. }
  92. $t = array('nom' => 'version_installee',
  93. 'valeur' => $spip_version_base,
  94. 'impt' => 'non');
  95. @sql_insertq('spip_meta', $t, '', $server_db);
  96. $t['nom'] = 'nouvelle_install';
  97. $t['valeur'] = 1;
  98. @sql_insertq('spip_meta', $t, '', $server_db);
  99. // positionner la langue par defaut du site si un cookie de lang a ete mis
  100. if (isset($_COOKIE['spip_lang_ecrire'])){
  101. @sql_insertq('spip_meta', array('nom'=>'langue_site','valeur'=>$_COOKIE['spip_lang_ecrire']), '', $server_db);
  102. }
  103. } else {
  104. // pour recreer les tables disparues au besoin
  105. spip_log("Table des Meta deja la. Verification des autres.");
  106. creer_base($server_db);
  107. $fupdateq = sql_serveur('updateq', $server_db);
  108. $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db);
  109. if ($r) $r = sql_fetch($r, $server_db);
  110. $version_installee = !$r ? 0 : (double) $r['valeur'];
  111. if (!$version_installee OR ($spip_version_base < $version_installee)) {
  112. $fupdateq('spip_meta', array('valeur'=>$spip_version_base, 'impt'=>'non'), "nom='version_installee'", $server_db);
  113. spip_log("nouvelle version installee: $spip_version_base");
  114. }
  115. // eliminer la derniere operation d'admin mal terminee
  116. // notamment la mise a jour
  117. @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR nom='admin'", $server_db);
  118. }
  119. $ligne_rappel = install_mode_appel($server_db);
  120. $result_ok = @$fquery("SELECT COUNT(*) FROM spip_meta", $server_db);
  121. if (!$result_ok) return "<!--\nvielle = $old rappel= $ligne_rappel\n-->";
  122. if ($chmod_db) {
  123. install_fichier_connexion(_FILE_CHMOD_TMP, "if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', ". sprintf('0%3o',$chmod_db).");\n");
  124. }
  125. if (preg_match(',(.*):(.*),', $adresse_db, $r))
  126. list(,$adresse_db, $port) = $r;
  127. else $port = '';
  128. // si ce fichier existe a cette etape c'est qu'il provient
  129. // d'une installation qui ne l'a pas cree correctement.
  130. // Le supprimer pour que _FILE_CONNECT_TMP prime.
  131. if (_FILE_CONNECT AND file_exists(_FILE_CONNECT))
  132. spip_unlink(_FILE_CONNECT);
  133. install_fichier_connexion(_FILE_CONNECT_TMP,
  134. $ligne_rappel
  135. . install_connexion($adresse_db,
  136. $port,
  137. $login_db,
  138. $pass_db,
  139. $sel_db,
  140. $server_db,
  141. $table_prefix));
  142. return '';
  143. }
  144. // http://doc.spip.org/@install_propose_ldap
  145. function install_propose_ldap()
  146. {
  147. return generer_form_ecrire('install', (
  148. fieldset(_T('info_authentification_externe'),
  149. array(
  150. 'etape' => array(
  151. 'label' => _T('texte_annuaire_ldap_1'),
  152. 'valeur' => 'ldap1',
  153. 'hidden' => true
  154. )),
  155. bouton_suivant(_T('bouton_acces_ldap'))
  156. )));
  157. }
  158. // http://doc.spip.org/@install_premier_auteur
  159. function install_premier_auteur($email, $login, $nom, $pass, $hidden)
  160. {
  161. return info_progression_etape(3,'etape_','install/') .
  162. info_etape(_T('info_informations_personnelles'),
  163. "<b>"._T('texte_informations_personnelles_1')."</b>" .
  164. aide ("install5") .
  165. "<p>" .
  166. _T('texte_informations_personnelles_2') . " " .
  167. _T('info_laisser_champs_vides')
  168. )
  169. . generer_form_ecrire('install', (
  170. "\n<input type='hidden' name='etape' value='3b' />"
  171. . $hidden
  172. . fieldset(_T('info_identification_publique'),
  173. array(
  174. 'nom' => array(
  175. 'label' => "<b>"._T('entree_signature')."</b><br />\n"._T('entree_nom_pseudo_1')."\n",
  176. 'valeur' => $nom
  177. ),
  178. 'email' => array(
  179. 'label' => "<b>"._T('entree_adresse_email')."</b>\n",
  180. 'valeur' => $email
  181. )
  182. )
  183. )
  184. . fieldset(_T('entree_identifiants_connexion'),
  185. array(
  186. 'login' => array(
  187. 'label' => "<b>"._T('entree_login')."</b><br />\n"._T('info_plus_trois_car')."\n",
  188. 'valeur' => $login
  189. ),
  190. 'pass' => array(
  191. 'label' => "<b>"._T('entree_mot_passe')."</b><br />\n"._T('info_plus_cinq_car_2')."\n",
  192. 'valeur' => $pass
  193. ),
  194. 'pass_verif' => array(
  195. 'label' => "<b>"._T('info_confirmer_passe')."</b><br />\n",
  196. 'valeur' => $pass
  197. )
  198. )
  199. )
  200. . bouton_suivant()));
  201. }
  202. // http://doc.spip.org/@install_etape_3_dist
  203. function install_etape_3_dist()
  204. {
  205. $ldap_present = _request('ldap_present');
  206. if (!$ldap_present) {
  207. $adresse_db = defined('_INSTALL_HOST_DB')
  208. ? _INSTALL_HOST_DB
  209. : _request('adresse_db');
  210. $login_db = defined('_INSTALL_USER_DB')
  211. ? _INSTALL_USER_DB
  212. : _request('login_db');
  213. $pass_db = defined('_INSTALL_PASS_DB')
  214. ? _INSTALL_PASS_DB
  215. : _request('pass_db');
  216. $server_db = defined('_INSTALL_SERVER_DB')
  217. ? _INSTALL_SERVER_DB
  218. : _request('server_db');
  219. $chmod_db = defined('_SPIP_CHMOD')
  220. ? _SPIP_CHMOD
  221. : _request('chmod');
  222. $choix_db = defined('_INSTALL_NAME_DB')
  223. ? _INSTALL_NAME_DB
  224. : _request('choix_db');
  225. $sel_db = ($choix_db == "new_spip")
  226. ? _request('table_new') : $choix_db;
  227. $res = install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db);
  228. if ($res) {
  229. $res .= info_progression_etape(2,'etape_','install/', true);
  230. $res .= "<p class='resultat echec'><b>"._T('avis_operation_echec')."</b></p>"._T('texte_operation_echec');
  231. }
  232. } else {
  233. $res = '';
  234. list($adresse_db, $login_db, $pass_db, $sel_db, $server_db)
  235. = analyse_fichier_connection(_FILE_CONNECT_TMP);
  236. }
  237. if (!$res) {
  238. if (file_exists(_FILE_CONNECT_TMP))
  239. include(_FILE_CONNECT_TMP);
  240. else
  241. redirige_url_ecrire('install');
  242. if (file_exists(_FILE_CHMOD_TMP))
  243. include(_FILE_CHMOD_TMP);
  244. else
  245. redirige_url_ecrire('install');
  246. $hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
  247. . (defined('_INSTALL_NAME_DB') ? ''
  248. : "\n<input type='hidden' name='sel_db' value='$sel_db' />");
  249. $res = "<p class='resultat ok'><b>"
  250. . _T('info_base_installee')
  251. . "</b></p>"
  252. . install_premier_auteur(_request('email'),
  253. _request('login'),
  254. _request('nom'),
  255. _request('pass'),
  256. $hidden)
  257. . (($ldap_present OR !function_exists('ldap_connect'))
  258. ? '' : install_propose_ldap());
  259. }
  260. echo install_debut_html();
  261. echo $res;
  262. echo install_fin_html();
  263. }
  264. ?>