"; 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='') { $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 si un fichier contient le resultat de la fonction install_connexion // y compris ce qu'elle produisait dans les versions precedentes // 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 { $arg = '\s*\'([^\']*)\'\s*,'; if (preg_match("#spip_connect_db\($arg$arg$arg$arg\s*'([^']*)'\s*(?:,\s*'([^']*))?#", $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 ''; } // 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; } 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 = '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)); } // Il faut une base de donnees tout de meme ... if (!function_exists('mysql_query') AND !function_exists('pg_connect') AND !function_exists('sqlite_open')) $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"); $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) { $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')."

") :"") . 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").hide(); $("#install_login_base_hebergeur").hide(); $("#install_pass_base_hebergeur").hide(); } }); $("#sql_serveur_db").change(function(){ if ($(this).find("option:selected").attr("value").match("sqlite*")){ $("#install_adresse_base_hebergeur").hide(); $("#install_login_base_hebergeur").hide(); $("#install_pass_base_hebergeur").hide(); } else { $("#install_adresse_base_hebergeur").show(); $("#install_login_base_hebergeur").show(); $("#install_pass_base_hebergeur").show(); } }); });') . ($server_db ? '' . (($predef[0]) ?('

'._T('install_serveur_hebergeur').'

') :'') : ('
' ._T('install_select_type_db') . "" .'' . "\n
") ) . '
' . ($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()) { $result = sql_listdbs($server_db); if (!$result) return ''; $bases = $checked = $noms = array(); // si sqlite : result est deja un tableau if (is_array($result)){ $noms = $result; } else { while ($row = sql_fetch($result, $server_db)) { $noms[] = array_shift($row); } } foreach ($noms as $nom){ $id = 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 = htmlentities(_request($k)); $res .= ""; } return $res; } ?>