"; ecrire_fichier($nom, $texte); } /** * Retourne le code source d'un fichier de connexion à une base de données * * Le code est un appel à la fonction spip_connect_db() * * @see spip_connect_db() * * @internal * Attention etape_ldap4 suppose qu'il n'y aura qu'un seul appel de fonction * dans le fichier produit. * * @param string $adr Adresse de la base de données {@example 'localhost'} * @param string $port Numéro de port * @param string $login Login de connexion * @param string $pass Mot de passe de connexion * @param string $base Nom de la base de données * @param string $type Moteur SQL {@example 'sqlite3', 'mysql'} * @param string $pref Préfixe des tables {@example 'spip'} * @param string $ldap ? * @return string * Texte du fichier de connexion * **/ function install_connexion($adr, $port, $login, $pass, $base, $type, $pref, $ldap='') { $adr = addcslashes($adr,"'\\"); $port = addcslashes($port,"'\\"); $login = addcslashes($login,"'\\"); $pass = addcslashes($pass,"'\\"); $base = addcslashes($base,"'\\"); $type = addcslashes($type,"'\\"); $pref = addcslashes($pref,"'\\"); $ldap = addcslashes($ldap,"'\\"); return "\$GLOBALS['spip_connect_version'] = 0.7;\n" . "spip_connect_db(" . "'$adr','$port','$login','$pass','$base'" . ",'$type', '$pref','$ldap');\n"; } /** * Analyse un fichier de connexion à une base de données * * Le fichier contient normalement le resultat de la fonction install_connexion(). * L'analyse tient également compte des syntaxes des versions precedentes. * * @param $string $file * Chemin du fichier de connexion à analyser * @return array * Tableau des informations sur la connexion **/ function analyse_fichier_connection($file) { $s = @join('', file($file)); if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) { array_shift($regs); return $regs; } else { $ar = '\s*\'([^\']*)\''; $r = '\s*,' . $ar; $r = "#spip_connect_db[(]$ar$r$r$r$r(?:$r(?:$r(?:$r)?)?)?#"; if (preg_match($r, $s, $regs)) { $regs[2] = $regs[1] . (!$regs[2] ? '' : ":$port_db;"); array_shift($regs); array_shift($regs); return $regs; } } spip_log("$file n'est pas un fichier de connexion"); return array(); } /** * Liste les connecteurs aux bases SQL disponibles * * Dans le code SPIP ces connecteurs sont souvent appelés $connect ou $serveur * * @example * $bases = bases_referencees(_FILE_CONNECT_TMP); * * @param $string $exclu * Exclure un connecteur particulier (nom du fichier) * @return array * Liste des noms de connecteurs **/ 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; } function install_mode_appel($server_db, $tout=true) { return ($server_db != 'mysql') ? '' : (($tout ? test_rappel_nom_base_mysql($server_db) : '') . test_sql_mode_mysql($server_db) ); } // // 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 = '5.1.0'; $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)); } // Si on n'a pas la bonne version de PHP, c'est la fin if ($err) die("
" . "

"._T('avis_attention').'

'._T('install_echec_annonce')."

"); // Il faut une base de donnees tout de meme ... $serveurs = install_select_serveur(); if (!$serveurs) $err[] = _T('install_extension_php_obligatoire') . " MYSQL" . "| PostgreSQL" . "| SQLite"; // et il faut preg if (!function_exists('preg_match_all')) $err[] = _T('install_extension_php_obligatoire') . " PCRE"; // et surtout pas ce mbstring.overload if ($a = @ini_get('mbstring.func_overload')) $err[] = _T('install_extension_mbstring') . "mbstring.func_overload=$a - mb_string.
"; if ($err) { echo "
" ."

"._T('avis_attention').'

'._T('install_echec_annonce')."

\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 "

".$titre."

\n" . ($complement ? "".$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

>\" />

\n"; } // http://doc.spip.org/@info_progression_etape function info_progression_etape($en_cours,$phase,$dir, $erreur = false){ //$en_cours = _request('etape')?_request('etape'):""; $liste = find_all_in_path($dir,$phase.'(([0-9])+|fin)[.]php$'); $debut = 1; $etat = "ok"; $last = count($liste); // $texte_etat = array('ok'=>'OK','encours'=>_T('en_cours'),'todo'=>_T('todo')); $intitule_etat["etape_"][1] = typo(_T('info_connexion_base_donnee')); $intitule_etat["etape_"][2] = typo(_T('menu_aide_installation_choix_base')); $intitule_etat["etape_"][3] = typo(_T('info_informations_personnelles')); $intitule_etat["etape_"][4] = typo(_T('info_derniere_etape')); $intitule_etat["etape_ldap"][1] = typo(_T('titre_connexion_ldap')); $intitule_etat["etape_ldap"][2] = typo(_T('titre_connexion_ldap')); $intitule_etat["etape_ldap"][3] = typo(_T('info_chemin_acces_1')); $intitule_etat["etape_ldap"][4] = typo(_T('info_reglage_ldap')); $intitule_etat["etape_ldap"][5] = typo(_T('info_ldap_ok')); // $aff_etapes = ""; $aff_etapes = ""; $aff_etapes .= "
\n"; return $aff_etapes; } // http://doc.spip.org/@fieldset function fieldset($legend, $champs = array(), $apres='', $avant='') { return "
\n" . $avant . ($legend ? "".$legend."\n" : '') . fieldset_champs($champs) . $apres . "
\n"; } function fieldset_champs($champs = array()) { $fieldset = ''; 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 .= "\n"; $fieldset .= "\n"; } $fieldset .= "
\n"; } else { $fieldset .= "\n"; $fieldset .= "\n"; } } return $fieldset; } function install_select_serveur() { $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()) { $titre = _T("install_select_type_$s"); // proposer sqlite3 par defaut si dispo $selected = ($s=='sqlite3'?" selected='selected'":""); $options[$s] = ""; } else spip_log("$s: portage indisponible"); } } sort($options); return $options; } // http://doc.spip.org/@install_connexion_form function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape, $jquery=true) { $server_db = (is_string($predef[0])) ? $predef[0] : ''; return generer_form_ecrire('install', ( "\n" . $hidden . (_request('echec')? ("

"._T('avis_connexion_echec_1'). "

"._T('avis_connexion_echec_2')."

"._T('avis_connexion_echec_3')."

") :"") . ($jquery?http_script('', 'jquery.js'):'') . http_script(' $(document).ready(function() { $("input[type=hidden][name=server_db]").each(function(){ if ($(this).attr("value").match("sqlite*")){ $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").hide(); } }); if ($("#sql_serveur_db").length) { if ($("#sql_serveur_db").attr("value").match("sqlite*")) $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").hide(); else $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").show(); $("#sql_serveur_db").change(function(){ if ($(this).find("option:selected").attr("value").match("sqlite*")) $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").hide(); else $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").show(); }); } });') . ($server_db ? '' . (($predef[0]) ?('

'._T('install_serveur_hebergeur').'

') :'') : ('
' ._T('install_select_type_db') . "" .'' . "\n
") ) . '
' . '

'. _T('texte_connexion_mysql').'

' . ($predef[1] ? '

'._T('install_adresse_base_hebergeur').'

' : fieldset(_T('entree_base_donnee_1'), array( 'adresse_db' => array( 'label' => $db[1], 'valeur' => $db[0] ), ) ) ) . '
' . '
' . ($predef[2] ? '

'._T('install_login_base_hebergeur').'

' : fieldset(_T('entree_login_connexion_1'), array( 'login_db' => array( 'label' => $login[1], 'valeur' => $login[0] ), ) ) ) . '
' . '
' . ($predef[3] ? '

'._T('install_pass_base_hebergeur').'

' : 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" ) . ((defined('_INSTALL_USER_DB')) ? '' : "\n" ) . ((defined('_INSTALL_PASS_DB')) ? '' : "\n" ) . ((defined('_INSTALL_SERVER_DB')) ? '' : "\n" ); } // presentation des bases existantes // http://doc.spip.org/@install_etape_liste_bases function install_etape_liste_bases($server_db, $login_db, $disabled=array()) { $bases = $checked = array(); $noms = sql_listdbs($server_db); if (!$noms) return ''; foreach ($noms as $nom){ $id = spip_htmlspecialchars($nom); $dis = in_array($nom, $disabled) ? " disabled='disabled'" : ''; $base = " name=\"choix_db\" value=\"" . $nom . '"' . $dis . " type='radio' id='$id'"; $label = ""; if (!$checked AND !$dis AND (($nom == $login_db) OR ($GLOBALS['table_prefix'] == $nom))) { $checked = "\n$label"; } else { $bases[]= "\n$label"; } } if (!$bases && !$checked) return false; if ($checked) {array_unshift($bases, $checked); $checked = true;} return array($checked, $bases); } function install_propager($hidden) { $res = ''; foreach($hidden as $k) { $v = spip_htmlentities(_request($k)); $res .= ""; } return $res; } ?>