diff --git a/.gitattributes b/.gitattributes index 47ba3aac3dfb3f608140c348c6373b86c5a3179f..dc6507ef3fa2052db04f4cde37204d9c42741577 100644 --- a/.gitattributes +++ b/.gitattributes @@ -481,6 +481,7 @@ ecrire/configuration/transcodeur.php -text ecrire/configuration/versionneur.php -text ecrire/configuration/visiteurs.php -text ecrire/exec/accueil.php -text +ecrire/exec/admin_declarer.php -text ecrire/exec/admin_effacer.php -text ecrire/exec/admin_plugin.php -text ecrire/exec/admin_repair.php -text @@ -620,6 +621,7 @@ ecrire/inc/indenter_xml.php -text ecrire/inc/index.php -text ecrire/inc/informer.php -text ecrire/inc/informer_auteur.php -text +ecrire/inc/install.php -text ecrire/inc/instituer_article.php -text ecrire/inc/instituer_auteur.php -text ecrire/inc/instituer_breve.php -text diff --git a/ecrire/exec/admin_declarer.php b/ecrire/exec/admin_declarer.php new file mode 100644 index 0000000000000000000000000000000000000000..31ca9e9a65f3d741c25bc24996c0953fa0edafc7 --- /dev/null +++ b/ecrire/exec/admin_declarer.php @@ -0,0 +1,86 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2007 * + * 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/presentation'); +include_spip('inc/install'); + +// http://doc.spip.org/@exec_admin_effacer_dist +function exec_admin_declarer_dist() +{ + if (!autoriser('detruire')) { + include_spip('inc/minipres'); + echo minipres(); + } else { + + $commencer_page = charger_fonction('commencer_page', 'inc'); + echo $commencer_page(_T('titre_page_admin_effacer'), "configuration", "base"); + + echo "\n<br /><br />"; + echo gros_titre(_T('titre_admin_effacer'),'',false); + echo barre_onglets("administration", "declarer"); + + echo debut_gauche('',true); + echo debut_boite_info(true); + + echo _T('info_gauche_admin_effacer'); + + echo fin_boite_info(true); + + echo creer_colonne_droite('',true); + echo pipeline('affiche_droite',array('args'=>array('exec'=>'admin_effacer'),'data'=>'')); + + echo debut_droite('',true); + + echo autres_bases(); + + echo pipeline('affiche_milieu',array('args'=>array('exec'=>'admin_effacer'),'data'=>'')); + + echo fin_gauche(), fin_page(); + } +} + +function autres_bases() +{ + $tables = bases_referencees(_FILE_CONNECT_TMP); + + if ($tables) + $tables = '<br /><br />' + . _L('Bases supplémentaires déjà interrogeables:') + . "<ul>\n<li>" + . join("</li>\n<li>", $tables) + . "</li>\n</ul>"; + else $tables =''; + + list($adresse, $login, $pass, $sel, $server) + = analyse_fichier_connection(_FILE_CONNECT); + + $adresse_db = defined('_INSTALL_HOST_DB') ? '' : $adresse; + + $login_db = defined('_INSTALL_USER_DB') ? '' : $login; + + $pass_db = defined('_INSTALL_PASS_DB') ? '' : $pass; + + $server_db = defined('_INSTALL_SERVER_DB') ? '' : $server; + + $hidden = defined('_INSTALL_NAME_DB') + ? '' + : ("\n<input type='hidden' name='sel_db' value='" . $sel . "' />\n"); + + return "<br ><div style='padding: 10px; border: 1px solid; text-align: left'>" + . _L("Si vous avez d'autres bases de données à interroger à travers SPIP, avec son serveur SQL ou avec un autre, le formulaire ci-dessous, vous permet de les déclarer. Si vous laissez certains champs vides, les identifiants de connexion à la base principale seront utilisés.") + . $tables + . install_connexion_form(array($adresse_db), array($login_db), array($pass_db), array($server_db), $hidden, 'sup1') + . "</div>"; +} +?> diff --git a/ecrire/exec/admin_tech.php b/ecrire/exec/admin_tech.php index 23040797dc28c1fbd55da6da0f91f058e4158881..ffe489b97f6ad209a0995e20d7b527801c917028 100644 --- a/ecrire/exec/admin_tech.php +++ b/ecrire/exec/admin_tech.php @@ -25,11 +25,15 @@ function exec_admin_tech_dist() $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('titre_admin_tech'), "configuration", "base"); + echo "<br /><br />"; + echo "<div style='text-align: center'>", + gros_titre(_T('titre_admin_tech'),'',false), + '</div>'; if ($GLOBALS['connect_toutes_rubriques']) { + echo barre_onglets("administration", "sauver") . "<br />"; echo debut_gauche('',true); - echo "<br /><br /><br /><br />"; echo debut_boite_info(true); echo _T('info_gauche_admin_tech'); echo fin_boite_info(true); @@ -41,22 +45,14 @@ function exec_admin_tech_dist() $repertoire = sous_repertoire(_DIR_TMP, $repertoire); } $dir_dump = $repertoire; - $onglet = barre_onglets("administration", "sauver") . "<br />"; + } else { echo debut_gauche(true); $dir_dump = determine_upload(); - $onglet = ''; } - $dir_dump = joli_repertoire($dir_dump); - echo debut_droite('',true); - echo "<div style='text-align: center'>", - gros_titre(_T('titre_admin_tech'),'',false), - '</div>', - $onglet; - // // Sauvegarde de la base // @@ -69,6 +65,8 @@ function exec_admin_tech_dist() else $dir_img = _DIR_IMG; + $dir_dump = joli_repertoire($dir_dump); + $res = "\n<p>" . http_img_pack('warning.gif', _T('info_avertissement'), diff --git a/ecrire/exec/install.php b/ecrire/exec/install.php index ef1fa33e531025e83af4da655ecf22405aa60d65..1592f15979b3bff92ec45b594bd6f1d7adee294b 100644 --- a/ecrire/exec/install.php +++ b/ecrire/exec/install.php @@ -13,6 +13,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/minipres'); +include_spip('inc/install'); define("_ECRIRE_INSTALL", "1"); define('_FILE_TMP', '_install'); @@ -21,7 +22,7 @@ define('_FILE_TMP', '_install'); function exec_install_dist() { $etape = _request('etape'); - if (_FILE_CONNECT AND ($etape != 'chmod')) { + if (_FILE_CONNECT AND (!in_array($etape, array('chmod', 'sup1', 'sup2')))) { // L'etape chmod peut etre reexecutee n'importe quand apres l'install, // pour verification des chmod. Sinon, install deja faite => refus. echo minipres(); @@ -32,339 +33,4 @@ function exec_install_dist() } } -// Pour ecrire les fichiers memorisant les parametres de connexion - -// http://doc.spip.org/@install_fichier_connexion -function install_fichier_connexion($nom, $texte) -{ - $texte = "<"."?php\n" - . "if (!defined(\"_ECRIRE_INC_VERSION\")) return;\n" - . $texte - . "?".">"; - - ecrire_fichier($nom, $texte); -} - -// Attention etape_ldap4 suppose qu'il n'y aura qu'un seul appel de fonction -// dans le fichier produit. - -// http://doc.spip.org/@install_connexion -function install_connexion($adr, $port, $login, $pass, $base, $type, $pref, $ldap='') -{ - return "\$GLOBALS['spip_connect_version'] = 0.7;\n" - . "spip_connect_db(" - . "'$adr','$port','$login','" - . addcslashes($pass, "'\\") . "','$base'" - . ",'$type', '$pref','$ldap');\n"; - -} - -// http://doc.spip.org/@analyse_fichier_connection -function analyse_fichier_connection($file) -{ - - $s = @join('', file($file)); - if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) { - array_shift($regs); - return $regs; - } else if (preg_match("#spip_connect_db\('([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)#", $s, $regs)) { - $regs[2] = $regs[1] . (!$regs[2] ? '' : ":$port_db;"); - array_shift($regs); - array_shift($regs); - return $regs; - } else spip_log("$file n'est pas un fichier de connexion"); - return ''; -} - -// http://doc.spip.org/@bases_referencees -function bases_referencees($exclu='') -{ - $tables = array(); - foreach(preg_files(_DIR_CONNECT, '.php$') as $f) { - if ($f != $exclu AND analyse_fichier_connection($f)) - $tables[]= basename($f, '.php'); - } - return $tables; -} - - -// -// Verifier que l'hebergement est compatible SPIP ... ou l'inverse :-) -// (sert a l'etape 1 de l'installation) -// http://doc.spip.org/@tester_compatibilite_hebergement -function tester_compatibilite_hebergement() { - $err = array(); - - $p = phpversion(); - if (preg_match(',^([0-9]+)\.([0-9]+)\.([0-9]+),', $p, $regs)) { - $php = array($regs[1], $regs[2], $regs[3]); - $m = '4.0.8'; - $min = explode('.', $m); - if ($php[0]<$min[0] - OR ($php[0]==$min[0] AND $php[1]<$min[1]) - OR ($php[0]==$min[0] AND $php[1]==$min[1] AND $php[2]<$min[2])) - $err[] = _T('install_php_version', array('version' => $p, 'minimum' => $m)); - } - - if (!function_exists('mysql_query')) - $err[] = _T('install_extension_php_obligatoire') - . " <a href='http://se.php.net/mysql'>MYSQL</a>"; - - if (!function_exists('preg_match_all')) - $err[] = _T('install_extension_php_obligatoire') - . " <a href='http://se.php.net/pcre'>PCRE</a>"; - - if ($a = @ini_get('mbstring.func_overload')) - $err[] = _T('install_extension_mbstring') - . "mbstring.func_overload=$a - <a href='http://se.php.net/mb_string'>mb_string</a>.<br /><small>"; - - if ($err) { - echo "<p class='verdana1 spip_large'><b>"._T('avis_attention').'</b></p><p>'._T('install_echec_annonce')."</p><ul>"; - while (list(,$e) = each ($err)) - echo "<li>$e</li>\n"; - - # a priori ici on pourrait die(), mais il faut laisser la possibilite - # de forcer malgre tout (pour tester, ou si bug de detection) - echo "</ul><hr />\n"; - } -} - - -// Une fonction pour faciliter la recherche du login (superflu ?) -// http://doc.spip.org/@login_hebergeur -function login_hebergeur() { - global $HTTP_X_HOST, $REQUEST_URI, $SERVER_NAME, $HTTP_HOST; - - $base_hebergeur = 'localhost'; # par defaut - - // Lycos (ex-Multimachin) - if ($HTTP_X_HOST == 'membres.lycos.fr') { - preg_match(',^/([^/]*),', $REQUEST_URI, $regs); - $login_hebergeur = $regs[1]; - } - // Altern - else if (preg_match(',altern\.com$,', $SERVER_NAME)) { - preg_match(',([^.]*\.[^.]*)$,', $HTTP_HOST, $regs); - $login_hebergeur = preg_replace('[^\w\d]', '_', $regs[1]); - } - // Free - else if (preg_match(',(.*)\.free\.fr$,', $SERVER_NAME, $regs)) { - $base_hebergeur = 'sql.free.fr'; - $login_hebergeur = $regs[1]; - } else $login_hebergeur = ''; - - return array($base_hebergeur, $login_hebergeur); -} - - -// http://doc.spip.org/@info_etape -function info_etape($titre, $complement = ''){ - return "<h2>".$titre."</h2>\n" . - ($complement ? "<br />".$complement."\n":''); -} - -// http://doc.spip.org/@bouton_suivant -function bouton_suivant($code = '') { - if($code=='') $code = _T('bouton_suivant'); - static $suivant = 0; - $id = 'suivant'.(($suivant>0)?strval($suivant):''); - $suivant +=1; - return "\n<span class='suivant'><input id='".$id."' type='submit' class='fondl'\nvalue=\"" . - $code . - " >>\" /></span>\n"; -} - -// http://doc.spip.org/@info_progression_etape -function info_progression_etape($en_cours,$phase,$dir){ - //$en_cours = _request('etape')?_request('etape'):""; - $liste = find_all_in_path($dir,$phase.'(([0-9])+|fin)[.]php$'); - $debut = 1; $etat = "ok"; - $last = count($liste); - - $aff_etapes = "<span id='etapes'>"; - foreach($liste as $etape=>$fichier){ - if ($etape=="$phase$en_cours.php"){ - $etat = "encours"; - } - $aff_etapes .= ($debut<$last) - ? "<span class='$etat'><em>$debut</em><span>,</span> </span>" - : ''; - if ($etat == "encours") - $etat = 'todo'; - $debut++; - } - $aff_etapes .= "<br class='nettoyeur' /> </span>\n"; - return $aff_etapes; -} - - -// http://doc.spip.org/@fieldset -function fieldset($legend, $champs = array(), $horchamps='') { - $fieldset = "<fieldset>\n" . - ($legend ? "<legend>".$legend."</legend>\n" : ''); - foreach ($champs as $nom => $contenu) { - $type = isset($contenu['hidden']) ? 'hidden' : (preg_match(',^pass,', $nom) ? 'password' : 'text'); - $class = isset($contenu['hidden']) ? '' : "class='formo' size='40' "; - if(isset($contenu['alternatives'])) { - $fieldset .= $contenu['label'] ."\n"; - foreach($contenu['alternatives'] as $valeur => $label) { - $fieldset .= "<input type='radio' name='".$nom . - "' id='$nom-$valeur' value='$valeur'" - .(($valeur==$contenu['valeur'])?"\nchecked='checked'":'')."/>\n"; - $fieldset .= "<label for='$nom-$valeur'>".$label."</label>\n"; - } - $fieldset .= "<br />\n"; - } - else { - $fieldset .= "<label for='".$nom."'>".$contenu['label']."</label>\n"; - $fieldset .= "<input ".$class."type='".$type."' id='" . $nom . "' name='".$nom."'\nvalue='".$contenu['valeur']."' />\n"; - } - } - $fieldset .= "$horchamps</fieldset>\n"; - return $fieldset; -} - -// http://doc.spip.org/@install_connexion_form -function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape) -{ - $pg = function_exists('pg_connect'); - $mysql = function_exists('mysql_connect'); - - if ($predef[0]) { - if (!is_string($predef[0])) - $server_db = _INSTALL_SERVER_DB; - else - $server_db = $predef[0]; - } else if (!($pg AND $mysql)) - $server_db = $mysql ? 'mysql' : 'pg'; - else { - $server_db =''; - $m = strcasecmp($predef[0], 'mysql') ? '' : " selected='selected'"; - $p = strcasecmp($predef[0], 'pg') ? '' : " selected='selected'"; - } - - return generer_form_ecrire('install', ( - "\n<input type='hidden' name='etape' value='$etape' />" - . $hidden - . (_request('echec')? - ("<p><b>"._T('avis_connexion_echec_1'). - "</b></p><p>"._T('avis_connexion_echec_2')."</p><p style='font-size: small;'>"._T('avis_connexion_echec_3')."</p>") - :"") - - . ($server_db - ? '<input type="hidden" name="server_db" value="'.$server_db.'" />' - : ('<fieldset><legend>' - ._L('Indiquer le type de base de données :') - . "\n<select name='server_db'>" - . ($mysql - ? "\n<option value='mysql'$m>"._L('MySQL')."</option>" - : '') - . ($pg - ? "\n<option value='pg'$p>"._L('PostGreSQL')."</option>" - : '') - . "\n</select></legend></fieldset>") - ) - - . ($predef[1] - ? '<h3>'._T('install_adresse_base_hebergeur').'</h3>' - : fieldset(_T('entree_base_donnee_1'), - array( - 'adresse_db' => array( - 'label' => $db[1], - 'valeur' => $db[0] - ), - ) - ) - ) - - . ($predef[2] - ? '<h3>'._T('install_login_base_hebergeur').'</h3>' - : fieldset(_T('entree_login_connexion_1'), - array( - 'login_db' => array( - 'label' => $login[1], - 'valeur' => $login[0] - ), - ) - ) - ) - - . ($predef[3] - ? '<h3>'._T('install_pass_base_hebergeur').'</h3>' - : fieldset(_T('entree_mot_passe_1'), - array( - 'pass_db' => array( - 'label' => $pass[1], - 'valeur' => $pass[0] - ), - ) - ) - ) - - . bouton_suivant())); - -} - -// 4 valeurs qu'on reconduit d'un script a l'autre -// sauf s'ils sont predefinis. - -// http://doc.spip.org/@predef_ou_cache -function predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db) -{ - return (defined('_INSTALL_HOST_DB') - ? '' - : "\n<input type='hidden' name='adresse_db' value=\"".htmlspecialchars($adresse_db)."\" />" - ) - . (defined('_INSTALL_USER_DB') - ? '' - : "\n<input type='hidden' name='login_db' value=\"".htmlspecialchars($login_db)."\" />" - ) - . (defined('_INSTALL_PASS_DB') - ? '' - : "\n<input type='hidden' name='pass_db' value=\"".htmlspecialchars($pass_db)."\" />" - ) - - . (defined('_INSTALL_SERVER_DB') - ? '' - : "\n<input type='hidden' name='server_db' value=\"".htmlspecialchars($server_db)."\" />" - ); -} - -// presentation des bases existantes - -// http://doc.spip.org/@install_etape_liste_bases -function install_etape_liste_bases($server_db, $disabled=array()) -{ - $result = sql_listdbs($server_db); - if (!$result) return ''; - $bases = $checked = array(); - - while ($row = sql_fetch($result, $server_db)) { - - $nom = array_shift($row); - $id = htmlspecialchars($nom); - $dis = in_array($nom, $disabled) ? " disabled='disabled'" : ''; - $base = " name=\"choix_db\" value=\"" - . $nom - . '"' - . $dis - . " type='radio' id='$id'"; - $label = "<label for='$id'>" - . ($dis ? "<i>$nom</i>" : $nom) - . "</label>"; - - if (!$checked AND !$dis AND - (($nom == $login_db) OR - ($GLOBALS['table_prefix'] == $nom))) { - $checked = "<input$base checked='checked' />\n$label"; - } else { - $bases[]= "<input$base />\n$label"; - } - } - if (!$bases) return false; - - if ($checked) {array_unshift($bases, $checked); $checked = true;} - - return array($checked, $bases); -} ?> diff --git a/ecrire/inc/boutons.php b/ecrire/inc/boutons.php index f05e7859aa18ae34d046157d5a59adffde2055cc..107a7dcd4190dcaa1b8d88542388e99c7bc7fd0a 100644 --- a/ecrire/inc/boutons.php +++ b/ecrire/inc/boutons.php @@ -291,19 +291,24 @@ function barre_onglets_stat_depuis() { return $onglets; } + // http://doc.spip.org/@barre_onglets_administration function barre_onglets_administration() { $onglets = array(); if (autoriser('sauvegarder')) { $onglets['sauver']= - new Bouton('base-24.gif', 'onglet_save_restaur_base', + new Bouton('spip-pack-24.png', 'onglet_save_restaur_base', generer_url_ecrire("admin_tech")); } if (autoriser('detruire')) { $onglets['effacer']= new Bouton('supprimer.gif', 'onglet_affacer_base', generer_url_ecrire("admin_effacer")); + + $onglets['declarer']= + new Bouton('base-24.gif', 'declarer_une_autre_base', + generer_url_ecrire("admin_declarer")); } return $onglets; } @@ -380,17 +385,15 @@ function definir_barre_onglets($script) { // http://doc.spip.org/@barre_onglets function barre_onglets($rubrique, $ongletCourant){ - $onglets= definir_barre_onglets($rubrique); - if(count($onglets)==0) return ''; - $res = debut_onglet(); + $res = ''; - foreach($onglets as $exec => $onglet) { + foreach(definir_barre_onglets($rubrique) as $exec => $onglet) { $url= $onglet->url ? $onglet->url : generer_url_ecrire($exec); - $res .= onglet(_T($onglet->libelle), $url, $exec, $ongletCourant, $onglet->icone); + $res .= onglet(_T($onglet->libelle), $url, $exec, $ongletCourant, $onglet->icone); } - $res .= fin_onglet(); - return $res; + + return !$res ? '' : (debut_onglet() . $res . fin_onglet()); } // http://doc.spip.org/@definir_barre_gadgets diff --git a/ecrire/inc/install.php b/ecrire/inc/install.php new file mode 100644 index 0000000000000000000000000000000000000000..f87431ca16b072bde543988468863d09674225af --- /dev/null +++ b/ecrire/inc/install.php @@ -0,0 +1,351 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2007 * + * 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; + +// Pour ecrire les fichiers memorisant les parametres de connexion + +// http://doc.spip.org/@install_fichier_connexion +function install_fichier_connexion($nom, $texte) +{ + $texte = "<"."?php\n" + . "if (!defined(\"_ECRIRE_INC_VERSION\")) return;\n" + . $texte + . "?".">"; + + ecrire_fichier($nom, $texte); +} + +// Attention etape_ldap4 suppose qu'il n'y aura qu'un seul appel de fonction +// dans le fichier produit. + +// http://doc.spip.org/@install_connexion +function install_connexion($adr, $port, $login, $pass, $base, $type, $pref, $ldap='') +{ + return "\$GLOBALS['spip_connect_version'] = 0.7;\n" + . "spip_connect_db(" + . "'$adr','$port','$login','" + . addcslashes($pass, "'\\") . "','$base'" + . ",'$type', '$pref','$ldap');\n"; + +} + +// http://doc.spip.org/@analyse_fichier_connection +function analyse_fichier_connection($file) +{ + + $s = @join('', file($file)); + if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) { + array_shift($regs); + return $regs; + } else if (preg_match("#spip_connect_db\('([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)#", $s, $regs)) { + $regs[2] = $regs[1] . (!$regs[2] ? '' : ":$port_db;"); + array_shift($regs); + array_shift($regs); + return $regs; + } else spip_log("$file n'est pas un fichier de connexion"); + return ''; +} + +// http://doc.spip.org/@bases_referencees +function bases_referencees($exclu='') +{ + $tables = array(); + foreach(preg_files(_DIR_CONNECT, '.php$') as $f) { + if ($f != $exclu AND analyse_fichier_connection($f)) + $tables[]= basename($f, '.php'); + } + return $tables; +} + + +// +// Verifier que l'hebergement est compatible SPIP ... ou l'inverse :-) +// (sert a l'etape 1 de l'installation) +// http://doc.spip.org/@tester_compatibilite_hebergement +function tester_compatibilite_hebergement() { + $err = array(); + + $p = phpversion(); + if (preg_match(',^([0-9]+)\.([0-9]+)\.([0-9]+),', $p, $regs)) { + $php = array($regs[1], $regs[2], $regs[3]); + $m = '4.0.8'; + $min = explode('.', $m); + if ($php[0]<$min[0] + OR ($php[0]==$min[0] AND $php[1]<$min[1]) + OR ($php[0]==$min[0] AND $php[1]==$min[1] AND $php[2]<$min[2])) + $err[] = _T('install_php_version', array('version' => $p, 'minimum' => $m)); + } + + if (!function_exists('mysql_query')) + $err[] = _T('install_extension_php_obligatoire') + . " <a href='http://se.php.net/mysql'>MYSQL</a>"; + + if (!function_exists('preg_match_all')) + $err[] = _T('install_extension_php_obligatoire') + . " <a href='http://se.php.net/pcre'>PCRE</a>"; + + if ($a = @ini_get('mbstring.func_overload')) + $err[] = _T('install_extension_mbstring') + . "mbstring.func_overload=$a - <a href='http://se.php.net/mb_string'>mb_string</a>.<br /><small>"; + + if ($err) { + echo "<p class='verdana1 spip_large'><b>"._T('avis_attention').'</b></p><p>'._T('install_echec_annonce')."</p><ul>"; + while (list(,$e) = each ($err)) + echo "<li>$e</li>\n"; + + # a priori ici on pourrait die(), mais il faut laisser la possibilite + # de forcer malgre tout (pour tester, ou si bug de detection) + echo "</ul><hr />\n"; + } +} + + +// Une fonction pour faciliter la recherche du login (superflu ?) +// http://doc.spip.org/@login_hebergeur +function login_hebergeur() { + global $HTTP_X_HOST, $REQUEST_URI, $SERVER_NAME, $HTTP_HOST; + + $base_hebergeur = 'localhost'; # par defaut + + // Lycos (ex-Multimachin) + if ($HTTP_X_HOST == 'membres.lycos.fr') { + preg_match(',^/([^/]*),', $REQUEST_URI, $regs); + $login_hebergeur = $regs[1]; + } + // Altern + else if (preg_match(',altern\.com$,', $SERVER_NAME)) { + preg_match(',([^.]*\.[^.]*)$,', $HTTP_HOST, $regs); + $login_hebergeur = preg_replace('[^\w\d]', '_', $regs[1]); + } + // Free + else if (preg_match(',(.*)\.free\.fr$,', $SERVER_NAME, $regs)) { + $base_hebergeur = 'sql.free.fr'; + $login_hebergeur = $regs[1]; + } else $login_hebergeur = ''; + + return array($base_hebergeur, $login_hebergeur); +} + + +// http://doc.spip.org/@info_etape +function info_etape($titre, $complement = ''){ + return "<h2>".$titre."</h2>\n" . + ($complement ? "<br />".$complement."\n":''); +} + +// http://doc.spip.org/@bouton_suivant +function bouton_suivant($code = '') { + if($code=='') $code = _T('bouton_suivant'); + static $suivant = 0; + $id = 'suivant'.(($suivant>0)?strval($suivant):''); + $suivant +=1; + return "\n<span class='suivant'><input id='".$id."' type='submit' class='fondl'\nvalue=\"" . + $code . + " >>\" /></span>\n"; +} + +// http://doc.spip.org/@info_progression_etape +function info_progression_etape($en_cours,$phase,$dir){ + //$en_cours = _request('etape')?_request('etape'):""; + $liste = find_all_in_path($dir,$phase.'(([0-9])+|fin)[.]php$'); + $debut = 1; $etat = "ok"; + $last = count($liste); + + $aff_etapes = "<span id='etapes'>"; + foreach($liste as $etape=>$fichier){ + if ($etape=="$phase$en_cours.php"){ + $etat = "encours"; + } + $aff_etapes .= ($debut<$last) + ? "<span class='$etat'><em>$debut</em><span>,</span> </span>" + : ''; + if ($etat == "encours") + $etat = 'todo'; + $debut++; + } + $aff_etapes .= "<br class='nettoyeur' /> </span>\n"; + return $aff_etapes; +} + + +// http://doc.spip.org/@fieldset +function fieldset($legend, $champs = array(), $horchamps='') { + $fieldset = "<fieldset>\n" . + ($legend ? "<legend>".$legend."</legend>\n" : ''); + foreach ($champs as $nom => $contenu) { + $type = isset($contenu['hidden']) ? 'hidden' : (preg_match(',^pass,', $nom) ? 'password' : 'text'); + $class = isset($contenu['hidden']) ? '' : "class='formo' size='40' "; + if(isset($contenu['alternatives'])) { + $fieldset .= $contenu['label'] ."\n"; + foreach($contenu['alternatives'] as $valeur => $label) { + $fieldset .= "<input type='radio' name='".$nom . + "' id='$nom-$valeur' value='$valeur'" + .(($valeur==$contenu['valeur'])?"\nchecked='checked'":'')."/>\n"; + $fieldset .= "<label for='$nom-$valeur'>".$label."</label>\n"; + } + $fieldset .= "<br />\n"; + } + else { + $fieldset .= "<label for='".$nom."'>".$contenu['label']."</label>\n"; + $fieldset .= "<input ".$class."type='".$type."' id='" . $nom . "' name='".$nom."'\nvalue='".$contenu['valeur']."' />\n"; + } + } + $fieldset .= "$horchamps</fieldset>\n"; + return $fieldset; +} + +// http://doc.spip.org/@install_connexion_form +function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape) +{ + $pg = function_exists('pg_connect'); + $mysql = function_exists('mysql_connect'); + + if (!($pg AND $mysql)) + $server_db = $mysql ? 'mysql' : 'pg'; + + else if ($predef[0]) { + if (!is_string($predef[0])) { + $server_db = _INSTALL_SERVER_DB; + $m = $p = ''; + } else { + $server_db =''; + $m = strcasecmp($predef[0], 'mysql') ? '' : " selected='selected'"; + $p = strcasecmp($predef[0], 'pg') ? '' : " selected='selected'"; + } + } + + return generer_form_ecrire('install', ( + "\n<input type='hidden' name='etape' value='$etape' />" + . $hidden + . (_request('echec')? + ("<p><b>"._T('avis_connexion_echec_1'). + "</b></p><p>"._T('avis_connexion_echec_2')."</p><p style='font-size: small;'>"._T('avis_connexion_echec_3')."</p>") + :"") + + . ($server_db + ? '<input type="hidden" name="server_db" value="'.$server_db.'" />' + : ('<fieldset><legend>' + ._L('Indiquer le type de base de données :') + . "\n<select name='server_db'>" + . ($mysql + ? "\n<option value='mysql'$m>"._L('MySQL')."</option>" + : '') + . ($pg + ? "\n<option value='pg'$p>"._L('PostGreSQL')."</option>" + : '') + . "\n</select></legend></fieldset>") + ) + + . ($predef[1] + ? '<h3>'._T('install_adresse_base_hebergeur').'</h3>' + : fieldset(_T('entree_base_donnee_1'), + array( + 'adresse_db' => array( + 'label' => $db[1], + 'valeur' => $db[0] + ), + ) + ) + ) + + . ($predef[2] + ? '<h3>'._T('install_login_base_hebergeur').'</h3>' + : fieldset(_T('entree_login_connexion_1'), + array( + 'login_db' => array( + 'label' => $login[1], + 'valeur' => $login[0] + ), + ) + ) + ) + + . ($predef[3] + ? '<h3>'._T('install_pass_base_hebergeur').'</h3>' + : fieldset(_T('entree_mot_passe_1'), + array( + 'pass_db' => array( + 'label' => $pass[1], + 'valeur' => $pass[0] + ), + ) + ) + ) + + . bouton_suivant())); + +} + +// 4 valeurs qu'on reconduit d'un script a l'autre +// sauf s'ils sont predefinis. + +// http://doc.spip.org/@predef_ou_cache +function predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db) +{ + return (defined('_INSTALL_HOST_DB') + ? '' + : "\n<input type='hidden' name='adresse_db' value=\"".htmlspecialchars($adresse_db)."\" />" + ) + . (defined('_INSTALL_USER_DB') + ? '' + : "\n<input type='hidden' name='login_db' value=\"".htmlspecialchars($login_db)."\" />" + ) + . (defined('_INSTALL_PASS_DB') + ? '' + : "\n<input type='hidden' name='pass_db' value=\"".htmlspecialchars($pass_db)."\" />" + ) + + . (defined('_INSTALL_SERVER_DB') + ? '' + : "\n<input type='hidden' name='server_db' value=\"".htmlspecialchars($server_db)."\" />" + ); +} + +// presentation des bases existantes + +// http://doc.spip.org/@install_etape_liste_bases +function install_etape_liste_bases($server_db, $disabled=array()) +{ + $result = sql_listdbs($server_db); + if (!$result) return ''; + $bases = $checked = array(); + + while ($row = sql_fetch($result, $server_db)) { + + $nom = array_shift($row); + $id = htmlspecialchars($nom); + $dis = in_array($nom, $disabled) ? " disabled='disabled'" : ''; + $base = " name=\"choix_db\" value=\"" + . $nom + . '"' + . $dis + . " type='radio' id='$id'"; + $label = "<label for='$id'>" + . ($dis ? "<i>$nom</i>" : $nom) + . "</label>"; + + if (!$checked AND !$dis AND + (($nom == $login_db) OR + ($GLOBALS['table_prefix'] == $nom))) { + $checked = "<input$base checked='checked' />\n$label"; + } else { + $bases[]= "<input$base />\n$label"; + } + } + if (!$bases) return false; + + if ($checked) {array_unshift($bases, $checked); $checked = true;} + + return array($checked, $bases); +} +?> diff --git a/ecrire/install/etape_4.php b/ecrire/install/etape_4.php index 6f3d0afad32e2938fdef8fa20fb6472dcf31d3ea..37464418dd50e5c95297208784e514f5be6f1a2e 100644 --- a/ecrire/install/etape_4.php +++ b/ecrire/install/etape_4.php @@ -100,48 +100,9 @@ function install_etape_4_dist() $suite = "\n<input type='hidden' name='etape' value='fin' />" . bouton_suivant(_T('login_espace_prive')); - $adresse_db = defined('_INSTALL_HOST_DB') - ? '' - : _request('adresse_db'); - - $login_db = defined('_INSTALL_USER_DB') - ? '' - : _request('login_db'); - - $pass_db = defined('_INSTALL_PASS_DB') - ? '' - : _request('pass_db'); - - $server_db = defined('_INSTALL_SERVER_DB') - ? '' - : _request('server_db'); - - $choix = defined('_INSTALL_NAME_DB') - ? '' - : ("\n<input type='hidden' name='sel_db' value='" . _request('sel_db') . "' />\n"); - echo generer_form_ecrire('install', $suite); echo info_progression_etape(4,'etape_','install/'); - echo autres_bases($adresse_db, $login_db, $pass_db, $server_db, $choix); echo install_fin_html(); } -function autres_bases($adresse_db, $login_db, $pass_db, $server_db, $hidden) -{ - $tables = bases_referencees(_FILE_CONNECT_TMP); - - if ($tables) - $tables = _L('Bases supplémentaires interrogeables:') - . "<ul>\n<li>" - . join("</li>\n<li>", $tables) - . "</li>\n</ul>"; - else $tables =''; - - return "<br ><div style='padding: 10px; border: 1px solid; text-align: left'>" - . $tables - . _L("Si vous avez une autre base de données à interroger à travers SPIP, avec ce serveur SQL ou avec un autre, déclarez-la dès maintenant. Si vous laissez les champs ci-dessous vides, les identifiants de connexion à la base principale seront utilisés.") - . '<div style="background-color: #eeeeee">' - . install_connexion_form(array($adresse_db), array($login_db), array($pass_db), array(), $hidden, 'sup1') - . "</div></div>"; -} ?> diff --git a/ecrire/install/etape_sup2.php b/ecrire/install/etape_sup2.php index fed776c05157a0778f740bf142455adf6a248e77..7685047980cc3f073c1fd6c70b5e91c422aa6ee7 100644 --- a/ecrire/install/etape_sup2.php +++ b/ecrire/install/etape_sup2.php @@ -104,9 +104,8 @@ function install_etape_sup2_dist() } } - $res .= generer_form_ecrire('install', - "\n<input type='hidden' name='etape' value='4' />" - . (defined('_INSTALL_NAME_DB') ? '' + $res .= generer_form_ecrire('admin_declarer', + (defined('_INSTALL_NAME_DB') ? '' : ("\n<input type='hidden' name='sel_db' value='" . $sel_db . "' />"))