'English', 'es' => 'Español', 'pt_br' => 'Português do Brasil', ); // // Traduction des textes de SPIP // function _TT($code, $args=array()) { global $lang; $code = str_replace('tradloader:', '', $code); $text = $GLOBALS['i18n_tradloader_'.$lang][$code]; while (list($name, $value) = @each($args)) $text = str_replace ("@$name@", $value, $text); return $text; } // // Ecrire un fichier de maniere un peu sure // function ecrire_fichierT ($fichier, $contenu) { $fp = @fopen($fichier, 'wb'); $s = @fputs($fp, $contenu, $a = strlen($contenu)); $ok = ($s == $a); @fclose($fp); if (!$ok) { @unlink($fichier); } return $ok; } function regler_langue_navigateurT() { $accept_langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); if (is_array($accept_langs)) { foreach($accept_langs as $s) { if (eregi('^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$', trim($s), $r)) { $lang = strtolower($r[1]); if (isset($GLOBALS['langues'][$lang])) return $lang; } } } return false; } function menu_languesT($lang) { global $dir_base; $r = '
'; $r .= '
'; if(preg_match(',action=([a-z_]+),', _SPIP_LOADER_SCRIPT, $m)) { $r .= ""; $sep = '&'; } else $sep = '?'; $r .= '
'; $r .= '
'; return $r; } // // Gestion des droits d'acces // function tester_repertoire() { global $chmod; $ok = false; $self = basename($_SERVER['PHP_SELF']); $uid = @fileowner('.'); $uid2 = @fileowner($self); $gid = @filegroup('.'); $gid2 = @filegroup($self); $perms = @fileperms($self); // Comparer l'appartenance d'un fichier cree par PHP // avec celle du script et du repertoire courant @rmdir('test'); @unlink('test'); // effacer au cas ou @touch('test'); if ($uid > 0 && $uid == $uid2 && @fileowner('test') == $uid) $chmod = 0700; else if ($gid > 0 && $gid == $gid2 && @filegroup('test') == $gid) $chmod = 0770; else $chmod = 0777; // Appliquer de plus les droits d'acces du script if ($perms > 0) { $perms = ($perms & 0777) | (($perms & 0444) >> 2); $chmod |= $perms; } @unlink('test'); // Verifier que les valeurs sont correctes @mkdir('test', $chmod); @chmod('test', $chmod); $f = @fopen('test/test.php', 'w'); if ($f) { @fputs($f, '<'.'?php $ok = true; ?'.'>'); @fclose($f); @chmod('test/test.php', $chmod); include('test/test.php'); } @unlink('test/test.php'); @rmdir('test'); return $ok; } // // Demarre une transaction HTTP (s'arrete a la fin des entetes) // retourne un descripteur de fichier // function init_http($get, $url, $refuse_gz=false) { //global $http_proxy; $fopen = false; if (!eregi("^http://", _URL_LOADER_PROXY)) $http_proxy = ''; else $http_proxy = _URL_LOADER_PROXY; $t = @parse_url($url); $host = $t['host']; if ($t['scheme'] == 'http') { $scheme = 'http'; $scheme_fsock=''; } else { $scheme = $t['scheme']; $scheme_fsock=$scheme.'://'; } if (!isset($t['port']) OR !($port = $t['port'])) $port = 80; $query = isset($t['query'])?$t['query']:""; if (!isset($t['path']) OR !($path = $t['path'])) $path = "/"; if ($http_proxy) { $t2 = @parse_url($http_proxy); $proxy_host = $t2['host']; $proxy_user = $t2['user']; $proxy_pass = $t2['pass']; if (!($proxy_port = $t2['port'])) $proxy_port = 80; $f = @fsockopen($proxy_host, $proxy_port); } else $f = @fsockopen($scheme_fsock.$host, $port); if ($f) { if ($http_proxy) fputs($f, "$get $scheme://$host" . (($port != 80) ? ":$port" : "") . $path . ($query ? "?$query" : "") . " HTTP/1.0\r\n"); else fputs($f, "$get $path" . ($query ? "?$query" : "") . " HTTP/1.0\r\n"); $version_affichee = isset($GLOBALS['spip_version_affichee'])?$GLOBALS['spip_version_affichee']:"xx"; fputs($f, "Host: $host\r\n"); fputs($f, "User-Agent: SPIP-$version_affichee (http://www.spip.net/)\r\n"); // Proxy authentifiant if (isset($proxy_user) AND $proxy_user) { fputs($f, "Proxy-Authorization: Basic " . base64_encode($proxy_user . ":" . $proxy_pass) . "\r\n"); } } // fallback : fopen else if (!$http_proxy) { $f = @fopen($url, "rb"); $fopen = true; } // echec total else { $f = false; } return array($f, $fopen); } // // Recupere une page sur le net // et au besoin l'encode dans le charset local // // options : get_headers si on veut recuperer les entetes function recuperer_page($url) { // Accepter les URLs au format feed:// ou qui ont oublie le http:// $url = preg_replace(',^feed://,i', 'http://', $url); if (!preg_match(',^[a-z]+://,i', $url)) $url = 'http://'.$url; for ($i=0;$i<10;$i++) { // dix tentatives maximum en cas d'entetes 301... list($f, $fopen) = init_http('GET', $url); // si on a utilise fopen() - passer a la suite if ($fopen) { break; } else { // Fin des entetes envoyees par SPIP fputs($f,"\r\n"); // Reponse du serveur distant $s = trim(fgets($f, 16384)); if (ereg('^HTTP/[0-9]+\.[0-9]+ ([0-9]+)', $s, $r)) { $status = $r[1]; } else return; // Entetes HTTP de la page $headers = ''; while ($s = trim(fgets($f, 16384))) { $headers .= $s."\n"; if (eregi('^Location: (.*)', $s, $r)) { $location = $r[1]; } if (preg_match(",^Content-Encoding: .*gzip,i", $s)) $gz = true; } if ($status >= 300 AND $status < 400 AND $location) $url = $location; else if ($status != 200) return; else break; # ici on est content fclose($f); $f = false; } } // Contenu de la page if (!$f) { return false; } $result = ''; while (!feof($f)) $result .= fread($f, 16384); fclose($f); // Decompresser le flux if ($gz = $_GET['gz']) $result = gzinflate(substr($result,10)); return $result; } function telecharger_langue($lang, $droits) { global $dir_base; $fichier = 'tradloader_'.$lang; $GLOBALS['idx_lang'] = 'i18n_tradloader_'.$lang; if(!file_exists($dir_base.$fichier)) { $contenu = recuperer_page(_URL_LOADER_DL.$fichier.".txt"); if ($contenu AND $droits) { ecrire_fichierT($dir_base.$fichier, $contenu); include($dir_base.$fichier); return true; } elseif($contenu AND !$droits) { eval('?'.'>'.$contenu); return true; } else { return false; } } else { include($dir_base.$fichier); return true; } } function selectionner_langue($droits) { global $langues; # langues dispo if (isset($_COOKIE['spip_lang_ecrire'])) { $lang = $_COOKIE['spip_lang_ecrire']; } if (isset($_GET['lang'])) $lang = $_GET['lang']; # reglage par defaut selon les preferences du brouteur if (!$lang OR !isset($langues[$lang])) $lang = regler_langue_navigateurT(); # valeur par defaut if (!isset($langues[$lang])) $lang = 'es'; # memoriser dans un cookie pour l'etape d'apres *et* pour l'install setcookie('spip_lang_ecrire', $lang); # RTL if ($lang == 'ar' OR $lang == 'he' OR $lang == 'fa') { $GLOBALS['spip_lang_right']='left'; $GLOBALS['spip_lang_dir']='rtl'; } else { $GLOBALS['spip_lang_right']='right'; $GLOBALS['spip_lang_dir']='ltr'; } # code de retour = capacite a telecharger le fichier de langue $GLOBALS['idx_lang'] = 'i18n_tradloader_'.$lang; return telecharger_langue($lang,$droits) ? $lang : false; } function debut_html() { ?> > <?php echo _TT('tradloader:titre', array('paquet'=>_NOM_PAQUET_ZIP)); ?>


_NOM_PAQUET_ZIP)); ?>
_NOM_PAQUET_ZIP, 'chmod'=>sprintf('%04o',$chmod))); fin_html(); exit; } else { //on telecharge, on ecrit, au fait, on peut dezipper ? // // Verifier si la ZLib est utilisable // $gz = function_exists("gzopen"); if ($gz) { if(!file_exists($dir_base."pclzip.php")) { $contenu = recuperer_page(_URL_LOADER_DL."pclzip.txt"); if ($contenu) { ecrire_fichierT($dir_base."pclzip.php", $contenu); include($dir_base."pclzip.php"); } } else { include($dir_base."pclzip.php"); } } else die ('fonctions zip non disponibles'); $fichier = basename(_URL_PAQUET_ZIP); $paquet = (isset($_GET['paquet']) AND preg_match(',[a-zA-Z0-9_]+,', $_GET['paquet'])) ? $_GET['paquet'] : ''; // // deploiement de l'archive // if ($_GET['fichier'] == 'oui' AND file_exists($dir_base.$fichier)) { $zip = new PclZip($dir_base.$fichier); $ok = $zip->extract( PCLZIP_OPT_PATH, $dir_base, PCLZIP_OPT_SET_CHMOD, $chmod, PCLZIP_OPT_REPLACE_NEWER, PCLZIP_OPT_REMOVE_PATH, "spip/"); if ($zip->error_code<0) { debut_html(); echo _TT('tradloader:donnees_incorrectes', array('erreur' => $zip->errorInfo())); fin_html(); exit; } nettoyer_racine($fichier); header("Location: ".$dir_base._SPIP_LOADER_URL_RETOUR); exit; } // // Si pas encore fait, afficher la page de presentation // if ($_GET['charger'] != 'oui') { debut_html(); echo _TT('tradloader:texte_intro', array('paquet'=>_NOM_PAQUET_ZIP)); echo "
"; echo "
"; if(preg_match(',action=([a-z_]+),', _SPIP_LOADER_SCRIPT, $m)) echo ""; if($paquet != '') echo ""; if(file_exists($dir_base.$fichier)) echo ""; else echo ""; echo ""; echo "
"; fin_html(); exit; } $contenu = recuperer_page(_URL_PAQUET_ZIP); if(!($contenu AND ecrire_fichierT($dir_base.$fichier, $contenu))) { debut_html(); echo _TT('tradloader:echec_chargement'); fin_html(); exit; } // Passer a l'etape suivante (desarchivage) $sep = strpos(_SPIP_LOADER_SCRIPT, '?') ? '&' : '?'; header("Location: ".$dir_base._SPIP_LOADER_SCRIPT.$sep."fichier=oui".($paquet?"&paquet=".$paquet:'')); exit; } } else { //on ne peut pas telecharger, c'est foutu. $lang = 'es'; //francais par defaut $GLOBALS['i18n_tradloader_es']['titre'] = 'Descarga de ALBA'; $GLOBALS['i18n_tradloader_es']['echec_chargement'] = '

No es posible descargar archivos del instalador.
Deberá realizar la instalación manualmente.

'; debut_html(); echo _TT('tradloader:echec_chargement'); fin_html(); exit; } ?>