[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / install / etape_3.php
index 947c1bc..a115cfd 100644 (file)
@@ -3,21 +3,22 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2017                                                *
  *  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;
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 include_spip('inc/headers');
 include_spip('base/abstract_sql');
 
-// http://doc.spip.org/@install_bases
-function install_bases($adresse_db, $login_db, $pass_db,  $server_db, $choix_db, $sel_db, $chmod_db){
-       global $spip_version_base;
+// http://code.spip.net/@install_bases
+function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db) {
 
        // Prefix des tables :
        // contrairement a ce qui est dit dans le message (trop strict mais c'est
@@ -26,30 +27,43 @@ function install_bases($adresse_db, $login_db, $pass_db,  $server_db, $choix_db,
        // a partir de ce qui est envoye a l'installation
        if (!defined('_INSTALL_TABLE_PREFIX')) {
                $table_prefix = ($GLOBALS['table_prefix'] != 'spip')
-               ? $GLOBALS['table_prefix']
-               : trim(preg_replace(',[^a-z0-9],','',strtolower(_request('tprefix'))));
+                       ? $GLOBALS['table_prefix']
+                       : trim(preg_replace(',[^a-z0-9],', '', strtolower(_request('tprefix'))));
                // S'il est vide on remet spip
-               if (!$table_prefix)
+               if (!$table_prefix) {
                        $table_prefix = 'spip';
+               }
        } else {
                $table_prefix = _INSTALL_TABLE_PREFIX;
        }
 
+       if (preg_match(',(.*):(.*),', $adresse_db, $r)) {
+               list(, $adresse_db, $port) = $r;
+       } else {
+               $port = '';
+       }
+
        $GLOBALS['connexions'][$server_db]
-       = spip_connect_db($adresse_db, 0, $login_db, $pass_db, '', $server_db);
+               = spip_connect_db($adresse_db, $port, $login_db, $pass_db, '', $server_db);
 
        $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
-       = $GLOBALS['spip_' . $server_db .'_functions_' . $GLOBALS['spip_sql_version']];
+               = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
 
        $fquery = sql_serveur('query', $server_db);
-       if ($choix_db == "new_spip") {
+       if ($choix_db == 'new_spip') {
                $re = ',^[a-z_][a-z_0-9-]*$,i';
-               if (preg_match($re, $sel_db))
-                       sql_create_base($sel_db, $server_db);
-               else {
-                 $re = "Le nom de la base doit correspondre a $re";
-                 spip_log($re);
-                 return "<p>"._T("avis_connexion_erreur_nom_base")."</p><!--\n$re\n-->";
+               if (preg_match($re, $sel_db)) {
+                       $ok = sql_create_base($sel_db, $server_db);
+                       if (!$ok) {
+                               $re = "Impossible de creer la base $re";
+                               spip_log($re);
+                               return '<p>' . _T('avis_connexion_erreur_creer_base') . "</p><!--\n$re\n-->";
+                       }
+               } else {
+                       $re = "Le nom de la base doit correspondre a $re";
+                       spip_log($re);
+
+                       return '<p>' . _T('avis_connexion_erreur_nom_base') . "</p><!--\n$re\n-->";
                }
        }
 
@@ -57,35 +71,36 @@ function install_bases($adresse_db, $login_db, $pass_db,  $server_db, $choix_db,
        // un sql_mode
        install_mode_appel($server_db, false);
        $GLOBALS['connexions'][$server_db]
-       = spip_connect_db($adresse_db, $sel_db, $login_db, $pass_db, $sel_db, $server_db);
+               = spip_connect_db($adresse_db, $port, $login_db, $pass_db, $sel_db, $server_db);
 
        $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
-       = $GLOBALS['spip_' . $server_db .'_functions_' . $GLOBALS['spip_sql_version']];
+               = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
 
        // Completer le tableau decrivant la connexion
 
        $GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
        $GLOBALS['connexions'][$server_db]['db'] = $sel_db;
 
-       $old = sql_showbase($table_prefix  . "_meta", $server_db);
-       if ($old) $old = sql_fetch($old, $server_db);
+       $old = sql_showbase($table_prefix . '_meta', $server_db);
+       if ($old) {
+               $old = sql_fetch($old, $server_db);
+       }
        if (!$old) {
-
                // Si possible, demander au serveur d'envoyer les textes
                // dans le codage std de SPIP,
                $charset = sql_get_charset(_DEFAULT_CHARSET, $server_db);
 
                if ($charset) {
                        sql_set_charset($charset['charset'], $server_db);
-                       $GLOBALS['meta']['charset_sql_base'] = 
+                       $GLOBALS['meta']['charset_sql_base'] =
                                $charset['charset'];
-                       $GLOBALS['meta']['charset_collation_sql_base'] = 
+                       $GLOBALS['meta']['charset_collation_sql_base'] =
                                $charset['collation'];
-                       $GLOBALS['meta']['charset_sql_connexion'] = 
+                       $GLOBALS['meta']['charset_sql_connexion'] =
                                $charset['charset'];
                        $charsetbase = $charset['charset'];
                } else {
-                       spip_log(_DEFAULT_CHARSET . " inconnu du serveur SQL");
+                       spip_log(_DEFAULT_CHARSET . ' inconnu du serveur SQL');
                        $charsetbase = 'standard';
                }
                spip_log("Creation des tables. Codage $charsetbase");
@@ -93,9 +108,11 @@ function install_bases($adresse_db, $login_db, $pass_db,  $server_db, $choix_db,
                // memoriser avec quel charset on l'a creee
 
                if ($charset) {
-                       $t = array('nom' => 'charset_sql_base',
-                                  'valeur' => $charset['charset'],
-                                  'impt' => 'non');
+                       $t = array(
+                               'nom' => 'charset_sql_base',
+                               'valeur' => $charset['charset'],
+                               'impt' => 'non'
+                       );
                        @sql_insertq('spip_meta', $t, '', $server_db);
                        $t['nom'] = 'charset_collation_sql_base';
                        $t['valeur'] = $charset['collation'];
@@ -104,219 +121,262 @@ function install_bases($adresse_db, $login_db, $pass_db,  $server_db, $choix_db,
                        $t['valeur'] = $charset['charset'];
                        @sql_insertq('spip_meta', $t, '', $server_db);
                }
-               $t = array('nom' => 'version_installee',
-                          'valeur' => $spip_version_base,
-                          'impt' => 'non');
+               $t = array(
+                       'nom' => 'version_installee',
+                       'valeur' => $GLOBALS['spip_version_base'],
+                       'impt' => 'non'
+               );
                @sql_insertq('spip_meta', $t, '', $server_db);
                $t['nom'] = 'nouvelle_install';
                $t['valeur'] = 1;
                @sql_insertq('spip_meta', $t, '', $server_db);
                // positionner la langue par defaut du site si un cookie de lang a ete mis
-               if (isset($_COOKIE['spip_lang_ecrire'])){
-                       @sql_insertq('spip_meta', array('nom'=>'langue_site','valeur'=>$_COOKIE['spip_lang_ecrire']), '', $server_db);
+               if (isset($_COOKIE['spip_lang_ecrire'])) {
+                       @sql_insertq(
+                               'spip_meta',
+                               array('nom' => 'langue_site', 'valeur' => $_COOKIE['spip_lang_ecrire']),
+                               '',
+                               $server_db
+                       );
                }
        } else {
+               // pour recreer les tables disparues au besoin
+               spip_log('Table des Meta deja la. Verification des autres.');
+               creer_base($server_db);
+               $fupdateq = sql_serveur('updateq', $server_db);
+
+               $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db);
+
+               if ($r) {
+                       $r = sql_fetch($r, $server_db);
+               }
+               $version_installee = !$r ? 0 : (double)$r['valeur'];
+               if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) {
+                       $fupdateq(
+                               'spip_meta',
+                               array('valeur' => $GLOBALS['spip_version_base'], 'impt' => 'non'),
+                               "nom='version_installee'",
+                               '',
+                               $server_db
+                       );
+                       spip_log('nouvelle version installee: ' . $GLOBALS['spip_version_base']);
+               }
+               // eliminer la derniere operation d'admin mal terminee
+               // notamment la mise a jour
+               @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR  nom='admin'", $server_db);
+       }
 
-         // pour recreer les tables disparues au besoin
-         spip_log("Table des Meta deja la. Verification des autres.");
-         creer_base($server_db); 
-         $fupdateq = sql_serveur('updateq', $server_db);
-
-         $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db);
-
-         if ($r) $r = sql_fetch($r, $server_db);
-         $version_installee = !$r ? 0 : (double) $r['valeur'];
-         if (!$version_installee OR ($spip_version_base < $version_installee)) {
-           $fupdateq('spip_meta', array('valeur'=>$spip_version_base, 'impt'=>'non'), "nom='version_installee'",'', $server_db);
-           spip_log("nouvelle version installee: $spip_version_base");
-         }
-         // eliminer la derniere operation d'admin mal terminee
-         // notamment la mise a jour 
-         @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR  nom='admin'", $server_db);
+       // recuperer le charset de la connexion dans les meta
+       $charset = '';
+       $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='charset_sql_connexion'", $server_db);
+       if ($r) {
+               $r = sql_fetch($r, $server_db);
+       }
+       if ($r) {
+               $charset = $r['valeur'];
        }
 
        $ligne_rappel = install_mode_appel($server_db);
 
-       $result_ok = @$fquery("SELECT COUNT(*) FROM spip_meta", $server_db);
-       if (!$result_ok) return "<!--\nvielle = $old rappel= $ligne_rappel\n-->";
+       $result_ok = @$fquery('SELECT COUNT(*) FROM spip_meta', $server_db);
+       if (!$result_ok) {
+               return "<!--\nvielle = $old rappel= $ligne_rappel\n-->";
+       }
 
        if ($chmod_db) {
-               install_fichier_connexion(_FILE_CHMOD_TMP, "if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', ". sprintf('0%3o',$chmod_db).");\n");
+               install_fichier_connexion(
+                       _FILE_CHMOD_TMP,
+                       "if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', " . sprintf('0%3o', $chmod_db) . ");\n"
+               );
        }
 
-       if (preg_match(',(.*):(.*),', $adresse_db, $r))
-               list(,$adresse_db, $port) = $r;
-       else $port = '';
-
        // si ce fichier existe a cette etape c'est qu'il provient
        // d'une installation qui ne l'a pas cree correctement.
        // Le supprimer pour que _FILE_CONNECT_TMP prime.
 
-       if (_FILE_CONNECT AND file_exists(_FILE_CONNECT))
+       if (_FILE_CONNECT and file_exists(_FILE_CONNECT)) {
                spip_unlink(_FILE_CONNECT);
+       }
+
+       install_fichier_connexion(
+               _FILE_CONNECT_TMP,
+               $ligne_rappel
+               . install_connexion(
+                       $adresse_db,
+                       $port,
+                       $login_db,
+                       $pass_db,
+                       $sel_db,
+                       $server_db,
+                       $table_prefix,
+                       '',
+                       $charset
+               )
+       );
 
-       install_fichier_connexion(_FILE_CONNECT_TMP, 
-                                 $ligne_rappel
-                                 . install_connexion($adresse_db,
-                                                     $port,
-                                                     $login_db,
-                                                     $pass_db,
-                                                     $sel_db,
-                                                     $server_db,
-                                                     $table_prefix));
        return '';
 }
 
-// http://doc.spip.org/@install_propose_ldap
-function install_propose_ldap()
-{
+// http://code.spip.net/@install_propose_ldap
+function install_propose_ldap() {
        return generer_form_ecrire('install', (
-                       fieldset(_T('info_authentification_externe'),
-                               array(
-                               'etape' => array(
-                                       'label' => _T('texte_annuaire_ldap_1'),
-                                       'valeur' => 'ldap1',
-                                       'hidden' => true
-                                       )),
-                                bouton_suivant(_T('bouton_acces_ldap'))
-                                )));
+       fieldset(
+               _T('info_authentification_externe'),
+               array(
+                       'etape' => array(
+                               'label' => _T('texte_annuaire_ldap_1'),
+                               'valeur' => 'ldap1',
+                               'hidden' => true
+                       )
+               ),
+               bouton_suivant(_T('bouton_acces_ldap'))
+       )));
 }
 
 
-// http://doc.spip.org/@install_premier_auteur
-function install_premier_auteur($email, $login, $nom, $pass, $hidden, $auteur_obligatoire)
-{
-       return info_progression_etape(3,'etape_','install/') .
-               info_etape(_T('info_informations_personnelles'),
-
-                    "<b>"._T('texte_informations_personnelles_1')."</b>" .
-                            aide ("install5", true) .
-                            "<p>" .
-                            ($auteur_obligatoire?
-                                    ''
-                                    :
-                                    _T('texte_informations_personnelles_2') . " " . _T('info_laisser_champs_vides')
-                            ))
+// http://code.spip.net/@install_premier_auteur
+function install_premier_auteur($email, $login, $nom, $pass, $hidden, $auteur_obligatoire) {
+       return info_progression_etape(3, 'etape_', 'install/') .
+       info_etape(
+               _T('info_informations_personnelles'),
+               '<b>' . _T('texte_informations_personnelles_1') . '</b>' .
+               aider('install5', true) .
+               '<p>' .
+               ($auteur_obligatoire ?
+                       ''
+                       :
+                       _T('texte_informations_personnelles_2') . ' ' . _T('info_laisser_champs_vides')
+               )
+       )
        . generer_form_ecrire('install', (
-                         "\n<input type='hidden' name='etape' value='3b' />"
-                         . $hidden
-                         . fieldset(_T('info_identification_publique'),
-                                   array(
-                                         'nom' => array(
-                                                        'label' => "<b>"._T('entree_signature')."</b><br />\n"._T('entree_nom_pseudo_1')."\n",
-                                                        'valeur' => $nom,
-                                                  'required' => $auteur_obligatoire,
-                                                        ),
-                                         'email' => array(
-                                                          'label' => "<b>"._T('entree_adresse_email')."</b>\n",
-                                                          'valeur' => $email,
-                                                          )
-                                         )
-                                   )
-
-                         . fieldset(_T('entree_identifiants_connexion'),
-                                  array(
-                                        'login' => array(
-                                                         'label' => "<b>"._T('entree_login')."</b><br />\n"._T('info_login_trop_court_car_pluriel', array('nb' => _LOGIN_TROP_COURT))."\n",
-                                                         'valeur' => $login,
-                     'required' => $auteur_obligatoire,
-                                                         ),
-                                        'pass' => array(
-                                                        'label' => "<b>"._T('entree_mot_passe')."</b><br />\n"._T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI))."\n",
-                                                        'valeur' => $pass,
-                    'required' => $auteur_obligatoire,
-                                                        ),
-                                        'pass_verif' => array(
-                                                              'label' => "<b>"._T('info_confirmer_passe')."</b><br />\n",
-                                                              'valeur' => $pass,
-                          'required' => $auteur_obligatoire,
-                                                              )
-                                        )
-                                    )
-                         . bouton_suivant()));
+               "\n<input type='hidden' name='etape' value='3b' />"
+               . $hidden
+               . fieldset(
+                       _T('info_identification_publique'),
+                       array(
+                               'nom' => array(
+                                       'label' => '<b>' . _T('entree_signature') . "</b><br />\n" . _T('entree_nom_pseudo_1') . "\n",
+                                       'valeur' => $nom,
+                                       'required' => $auteur_obligatoire,
+                               ),
+                               'email' => array(
+                                       'label' => '<b>' . _T('entree_adresse_email') . "</b>\n",
+                                       'valeur' => $email,
+                               )
+                       )
+               )
+
+               . fieldset(
+                       _T('entree_identifiants_connexion'),
+                       array(
+                               'login' => array(
+                                       'label' => '<b>' . _T('entree_login') . "</b><br />\n" . _T(
+                                               'info_login_trop_court_car_pluriel',
+                                               array('nb' => _LOGIN_TROP_COURT)
+                                       ) . "\n",
+                                       'valeur' => $login,
+                                       'required' => $auteur_obligatoire,
+                               ),
+                               'pass' => array(
+                                       'label' => '<b>' . _T('entree_mot_passe') . "</b><br />\n" . _T(
+                                               'info_passe_trop_court_car_pluriel',
+                                               array('nb' => _PASS_LONGUEUR_MINI)
+                                       ) . "\n",
+                                       'valeur' => $pass,
+                                       'required' => $auteur_obligatoire,
+                               ),
+                               'pass_verif' => array(
+                                       'label' => '<b>' . _T('info_confirmer_passe') . "</b><br />\n",
+                                       'valeur' => $pass,
+                                       'required' => $auteur_obligatoire,
+                               )
+                       )
+               )
+               . bouton_suivant()));
 }
 
-// http://doc.spip.org/@install_etape_3_dist
-function install_etape_3_dist()
-{
+// http://code.spip.net/@install_etape_3_dist
+function install_etape_3_dist() {
        $ldap_present = _request('ldap_present');
 
        if (!$ldap_present) {
                $adresse_db = defined('_INSTALL_HOST_DB')
-               ? _INSTALL_HOST_DB
-               : _request('adresse_db');
+                       ? _INSTALL_HOST_DB
+                       : _request('adresse_db');
 
                $login_db = defined('_INSTALL_USER_DB')
-               ? _INSTALL_USER_DB
-               : _request('login_db');
+                       ? _INSTALL_USER_DB
+                       : _request('login_db');
 
                $pass_db = defined('_INSTALL_PASS_DB')
-               ? _INSTALL_PASS_DB
-               : _request('pass_db');
+                       ? _INSTALL_PASS_DB
+                       : _request('pass_db');
 
                $server_db = defined('_INSTALL_SERVER_DB')
-               ? _INSTALL_SERVER_DB
-               : _request('server_db');
+                       ? _INSTALL_SERVER_DB
+                       : _request('server_db');
 
                $chmod_db = defined('_SPIP_CHMOD')
-               ? _SPIP_CHMOD
-               : _request('chmod');
+                       ? _SPIP_CHMOD
+                       : _request('chmod');
 
                $choix_db = defined('_INSTALL_NAME_DB')
-               ? _INSTALL_NAME_DB
-               : _request('choix_db');
+                       ? _INSTALL_NAME_DB
+                       : _request('choix_db');
 
-               $sel_db = ($choix_db == "new_spip")
-               ? _request('table_new') : $choix_db;
+               $sel_db = ($choix_db == 'new_spip')
+                       ? _request('table_new') : $choix_db;
 
-               $res = install_bases($adresse_db, $login_db, $pass_db,  $server_db, $choix_db, $sel_db, $chmod_db);
+               $res = install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db);
 
                if ($res) {
-                       $res = info_progression_etape(2,'etape_','install/', true)
-                               . "<div class='error'><h3>"._T('avis_operation_echec')."</h3>"
-                         . $res
-                         . "<p>"._T('texte_operation_echec')."</p>"
-                         . "</div>";
+                       $res = info_progression_etape(2, 'etape_', 'install/', true)
+                               . "<div class='error'><h3>" . _T('avis_operation_echec') . '</h3>'
+                               . $res
+                               . '<p>' . _T('texte_operation_echec') . '</p>'
+                               . '</div>';
                }
-       
-       } else { 
+       } else {
                $res = '';
                list($adresse_db, $login_db, $pass_db, $sel_db, $server_db) = analyse_fichier_connection(_FILE_CONNECT_TMP);
                $GLOBALS['connexions'][$server_db] = spip_connect_db($adresse_db, $sel_db, $login_db, $pass_db, $sel_db, $server_db);
        }
 
        if (!$res) {
-               if (file_exists(_FILE_CONNECT_TMP))
+               if (file_exists(_FILE_CONNECT_TMP)) {
                        include(_FILE_CONNECT_TMP);
-               else
+               } else {
                        redirige_url_ecrire('install');
-       
-               if (file_exists(_FILE_CHMOD_TMP))
+               }
+
+               if (file_exists(_FILE_CHMOD_TMP)) {
                        include(_FILE_CHMOD_TMP);
-               else
+               } else {
                        redirige_url_ecrire('install');
+               }
 
                $hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
-                 . (defined('_INSTALL_NAME_DB') ? ''
-                    : "\n<input type='hidden' name='sel_db' value='$sel_db' />");
-
-               $auteur_obligatoire = ($ldap_present?0:!sql_countsel('spip_auteurs','','','',$server_db));
-
-               $res =  "<div class='success'><b>"
-               . _T('info_base_installee')
-               . "</b></div>"
-               . install_premier_auteur(_request('email'),
-                                       _request('login'),
-                                       _request('nom'),
-                                       _request('pass'),
-                                        $hidden, $auteur_obligatoire)
-                 . (($ldap_present  OR !function_exists('ldap_connect'))
-                    ?  '' : install_propose_ldap());
+                       . (defined('_INSTALL_NAME_DB') ? ''
+                               : "\n<input type='hidden' name='sel_db' value='$sel_db' />");
+
+               $auteur_obligatoire = ($ldap_present ? 0 : !sql_countsel('spip_auteurs', '', '', '', $server_db));
+
+               $res = "<div class='success'><b>"
+                       . _T('info_base_installee')
+                       . '</b></div>'
+                       . install_premier_auteur(
+                               _request('email'),
+                               _request('login'),
+                               _request('nom'),
+                               _request('pass'),
+                               $hidden,
+                               $auteur_obligatoire
+                       )
+                       . (($ldap_present or !function_exists('ldap_connect'))
+                               ? '' : install_propose_ldap());
        }
 
        echo install_debut_html();
        echo $res;
        echo install_fin_html();
 }
-
-?>