'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 .= '';
$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() {
?>
>
_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 "";
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;
}
?>