[SPIP] +version 3.0.7
[ptitvelo/web/www.git] / www / prive / formulaires / declarer_bases.php
diff --git a/www/prive/formulaires/declarer_bases.php b/www/prive/formulaires/declarer_bases.php
new file mode 100644 (file)
index 0000000..047838f
--- /dev/null
@@ -0,0 +1,207 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2012                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+include_spip('inc/install');
+
+function formulaires_declarer_bases_charger_dist(){
+       list($adresse_db, $login_db, $pass_db, $sel, $server_db) = analyse_fichier_connection(_FILE_CONNECT);
+
+       $deja = bases_referencees(_FILE_CONNECT);
+       // proposer un nom de connect si pas encore saisi
+       $nom_connect = "";
+       if (defined('_DECLARER_choix_db')){
+               $nom_connect = _DECLARER_choix_db;
+               $n="";
+               while (in_array($nom_connect.$n,$deja)){
+                       $n = ($n?$n+1:1);
+               }
+               $nom_connect = $nom_connect.$n;
+       }
+
+       $valeurs = array(
+               '_etapes' => 3,
+               '_bases_deja' => $deja,
+               '_bases_prop' => defined('_DECLARER_serveur_db')?liste_bases(_DECLARER_serveur_db):'',
+               '_tables' => (defined('_DECLARER_serveur_db') AND defined('_DECLARER_choix_db'))?
+                               $tables = sql_alltable('%', _DECLARER_serveur_db)
+                               :
+                               array(),
+               'main_db' => '',
+               '_serveurs' => liste_serveurs(),
+               'sql_serveur_db' => 'sqlite3', // valeur par defaut
+               'adresse_db' => $adresse_db,
+               'login_db' => '',
+               'pass_db' => '',
+               'choix_db' => '',
+               'table_new' => '',
+               'nom_connect' => $nom_connect,
+       );
+       return $valeurs;
+}
+
+function liste_serveurs() {
+       $options = array();
+       $dir = _DIR_RESTREINT . 'req/';
+       $d = @opendir($dir);
+       if (!$d) return array();
+       while ($f = readdir($d)) {
+               if ((preg_match('/^(.*)[.]php$/', $f, $s))
+               AND is_readable($f = $dir . $f)) {
+                       require_once($f);
+                       $s = $s[1];
+                       $v = 'spip_versions_' . $s;
+                       if (function_exists($v) AND $v()) {
+                         $options[$s] = "install_select_type_$s";
+                       }
+                       else spip_log("$s: portage indisponible");
+               }
+       }
+       ksort($options);
+       return $options;
+}
+
+function liste_bases($server_db){
+       if (is_null($server_db)
+         OR !$result = sql_listdbs($server_db))
+               return '';
+
+       $noms = array();
+
+       // si sqlite : result est deja un tableau
+       if (is_array($result)){
+               $noms = $result;
+       } else {
+               while ($row = sql_fetch($result, $server_db)) {
+                       $noms[] = reset($row);
+               }
+       }
+       return $noms;
+}
+
+function formulaires_declarer_bases_verifier_1_dist(){
+       $erreurs = array();
+       list($def_adresse_db, $def_login_db, $def_pass_db, $sel_db, $def_serveur_db) = analyse_fichier_connection(_FILE_CONNECT);
+
+
+       if (!$adresse_db = _request('adresse_db')){
+               if (defined('_INSTALL_HOST_DB'))
+                       $adresse_db =_INSTALL_HOST_DB;
+               else
+                       $adresse_db = $def_adresse_db;
+       }
+       if (!$serveur_db =_request('sql_serveur_db')){
+               if (defined('_INSTALL_SERVER_DB'))
+                       $serveur_db = _INSTALL_SERVER_DB;
+               else
+                       $serveur_db = $def_serveur_db;
+       }
+
+       $login_db = $pass_db = "";
+       if (!preg_match(',^sqlite,i',$serveur_db)){
+               if (!$login_db = _request('login_db')){
+                       if (defined('_INSTALL_USER_DB'))
+                               $login_db = _INSTALL_USER_DB;
+                       else
+                               $login_db = $def_login_db;
+               }
+               if (!$pass_db = _request('pass_db')){
+                       if (defined('_INSTALL_PASS_DB'))
+                               $pass_db  = _INSTALL_PASS_DB;
+                       else
+                               $pass_db = $def_pass_db;
+               }
+       }
+
+       $link = spip_connect_db($adresse_db, '', $login_db, $pass_db, '@test@', $serveur_db);
+       if ($link) {
+               $GLOBALS['connexions'][$serveur_db][$GLOBALS['spip_sql_version']] = $GLOBALS['spip_' . $serveur_db .'_functions_' . $GLOBALS['spip_sql_version']];
+               $GLOBALS['connexions'][$serveur_db] = $link;
+               define('_DECLARER_serveur_db',$serveur_db);
+               define('_DECLARER_adresse_db',$adresse_db);
+               define('_DECLARER_login_db',$login_db);
+               define('_DECLARER_pass_db',$pass_db);
+               // si on est sur le meme serveur que connect.php
+               // indiquer quelle est la db utilisee pour l'exclure des choix possibles
+               if ($serveur_db==$def_serveur_db AND $adresse_db==$def_adresse_db)
+                       set_request('main_db',$sel_db);
+               else
+                       set_request('main_db','');
+       }
+       else  {
+               $erreurs['message_erreur'] = _T('avis_connexion_echec_1');
+       }
+       return $erreurs;
+}
+
+function formulaires_declarer_bases_verifier_2_dist(){
+       $erreurs = array();
+       $choix_db = _request('choix_db');
+       if ($choix_db=='-1')
+               $choix_db = _request('table_new');
+       if (!$choix_db)
+               $erreurs['choix_db']=_T('info_obligatoire');
+       else {
+               define('_ECRIRE_INSTALL',1); // hackons sqlite
+               if (!sql_selectdb($choix_db, _DECLARER_serveur_db))
+                       $erreurs['choix_db']=_T('avis_base_inaccessible',array('base'=>$choix_db));
+               else
+                       define('_DECLARER_choix_db',$choix_db);
+       }
+
+       return $erreurs;
+}
+
+function formulaires_declarer_bases_verifier_3_dist(){
+       $erreurs = array();
+       $nom_connect = _request('nom_connect');
+       if (!$nom_connect)
+               $erreurs['nom_connect']=_T('info_obligatoire');
+       else {
+               // securite : le nom doit etre un mot sans caracteres speciaux
+               $f = preg_replace(',[^\w],','',$nom_connect);
+               if ($f!==$nom_connect)
+                       $erreurs['nom_connect']=_T('erreur_nom_connect_incorrect');
+               elseif(file_exists(_DIR_CONNECT . $nom_connect. '.php'))
+                       $erreurs['nom_connect']=_T('erreur_connect_deja_existant');
+               else
+                       define('_DECLARER_nom_connect',$nom_connect);
+       }
+
+       return $erreurs;
+}
+
+function formulaires_declarer_bases_traiter_dist(){
+
+       $adresse_db = _DECLARER_adresse_db;
+       if (preg_match(',(.*):(.*),', $adresse_db, $r))
+               list(,$adresse_db, $port) = $r;
+       else
+               $port = '';
+
+       $adresse_db = addcslashes($adresse_db,"'\\");
+       $port = addcslashes($port,"'\\");
+       $login_db = addcslashes(_DECLARER_login_db,"'\\");
+       $pass_db = addcslashes(_DECLARER_pass_db,"'\\");
+       $sup_db = addcslashes(_DECLARER_choix_db,"'\\");
+       $server_db = addcslashes(_DECLARER_serveur_db,"'\\");
+
+       $conn = install_mode_appel($server_db)
+       . "spip_connect_db("
+       . "'$adresse_db','$port','$login_db',"
+       . "'$pass_db','$sup_db'"
+       . ",'$server_db', '');\n";
+
+       install_fichier_connexion(_DIR_CONNECT . _DECLARER_nom_connect . '.php', $conn);
+       return array('message_ok'=>_T('install_connect_ok',array('connect' => "<strong>"._DECLARER_nom_connect."</strong>")));
+}
\ No newline at end of file