/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2012 *
+ * Copyright (c) 2001-2016 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (!preg_match(',^\w+$,', $f)){
if ($continue) return false; //appel interne, on passe
- die(htmlspecialchars($nom)." pas autorise");
+ die(spip_htmlspecialchars($nom)." pas autorise");
}
// passer en minuscules (cf les balises de formulaires)
include_spip('inc/minipres');
echo minipres(_T('forum_titre_erreur'),
- _T('fichier_introuvable', array('fichier'=> '<b>'.htmlentities($d).'</b>')));
+ _T('fichier_introuvable', array('fichier'=> '<b>'.spip_htmlentities($d).'</b>')));
exit;
}
// fonction
if (function_exists($fonc))
$val = call_user_func($fonc, $val);
-
// Class::Methode
else if (preg_match("/^(\w*)::(\w*)$/S", $fonc, $regs)
AND $methode = array($regs[1], $regs[2])
return $propre = (preg_replace(',[?&]$,', '', $uri1));
}
-//
-// donner l'URL de base d'un lien vers "soi-meme", modulo
-// les trucs inutiles
-//
-// http://doc.spip.org/@self
+
+/**
+ * Donner l'URL de base d'un lien vers "soi-meme", modulo les trucs inutiles
+ *
+ * @param string $amp
+ * Style des esperluettes
+ * @param bool $root
+ * @return string
+ * URL vers soi-même
+**/
function self($amp = '&', $root = false) {
$url = nettoyer_uri();
if (!$root
}
// eviter les hacks
- $url = htmlspecialchars($url);
+ include_spip('inc/filtres_mini');
+ $url = spip_htmlspecialchars($url);
// & ?
if ($amp != '&')
$text = $texte;
// pour les chaines non traduites, assurer un service minimum
- if (!$GLOBALS['test_i18n'])
+ if (!$GLOBALS['test_i18n'] AND (_request('var_mode') != 'traduction'))
$text = str_replace('_', ' ',
(($n = strpos($text,':')) === false ? $texte :
substr($texte, $n+1)));
if ($args) spip_log("$f: variables inutilisees " . join(', ', array_keys($args)),_LOG_DEBUG);
}
- if ($GLOBALS['test_i18n'] AND $class===null)
- return "<blink style='color:red;'>$text</blink>";
+ if (($GLOBALS['test_i18n'] OR (_request('var_mode') == 'traduction')) AND $class===null)
+ return "<span class=debug-traduction-erreur>$text</span>";
else
return $text;
}
* @return bool
*/
function cron ($taches=array(), $taches_old= array()) {
- // si pas en mode cron force
- // ou si base inaccessible, laisser tomber.
- if (!defined('_DIRECT_CRON_FORCE') OR !spip_connect()) return false;
- spip_log("cron !",'jq'._LOG_DEBUG);
+ // si pas en mode cron force, laisser tomber.
+ if (!defined('_DIRECT_CRON_FORCE')) return false;
if (!is_array($taches)) $taches = $taches_old; // compat anciens appels
+ // si taches a inserer en base et base inaccessible, laisser tomber
+ // sinon on ne verifie pas la connexion tout de suite, car si ca se trouve
+ // queue_sleep_time_to_next_job() dira qu'il n'y a rien a faire
+ // et on evite d'ouvrir une connexion pour rien (utilisation de _DIRECT_CRON_FORCE dans mes_options.php)
+ if ($taches AND count($taches) AND !spip_connect()) return false;
+ spip_log("cron !",'jq'._LOG_DEBUG);
if ($genie = charger_fonction('genie', 'inc', true)) {
- $genie($taches);
- return true;
+ return $genie($taches);
}
return false;
}
return null;
if (!$_SERVER['REQUEST_TIME'])
$_SERVER['REQUEST_TIME'] = time();
- return max(0,$queue_next_job_time-$_SERVER['REQUEST_TIME']);
+ return $queue_next_job_time-$_SERVER['REQUEST_TIME'];
}
include_once _ROOT_CWD . $a;
$inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
}
- if (!defined('_SAUVER_CHEMIN'))
- define('_SAUVER_CHEMIN',true);
+ if (!defined('_SAUVER_CHEMIN')){
+ // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
+ if (is_null($GLOBALS['path_files'])) return $a;
+ define('_SAUVER_CHEMIN', true);
+ }
return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a;
}
}
}
}
- if (!defined('_SAUVER_CHEMIN'))
- define('_SAUVER_CHEMIN',true);
+ if (!defined('_SAUVER_CHEMIN')){
+ // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
+ if (is_null($GLOBALS['path_files'])) return false;
+ define('_SAUVER_CHEMIN', true);
+ }
return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false;
}
// Fonctions de fabrication des URL des scripts de Spip
//
/**
- * l'URL de base du site, sans se fier a meta(adresse_site) qui
- * peut etre fausse (sites a plusieurs noms d'hotes, deplacements, erreurs)
+ * L'URL de base du site, en priorité sans se fier a meta(adresse_site) qui
+ * peut etre fausse (sites a plusieurs noms d'hotes, deplacements, erreurs).
+ * En dernier recours, lorsqu'on ne trouve rien, on utilise adresse_site comme fallback.
* Note : la globale $profondeur_url doit etre initialisee de maniere a
* indiquer le nombre de sous-repertoires de l'url courante par rapport a la
* racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et a
OR (isset($_SERVER['HTTPS']) AND
test_valeur_serveur($_SERVER['HTTPS']))
) ? 'https' : 'http';
- # note : HTTP_HOST contient le :port si necessaire
+ // note : HTTP_HOST contient le :port si necessaire
$host = $_SERVER['HTTP_HOST'];
+ // si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback
+ if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) {
+ $host = $GLOBALS['meta']['adresse_site'];
+ if ($scheme = parse_url($host, PHP_URL_SCHEME)) {
+ $http = $scheme;
+ $host = str_replace("{$scheme}://", '', $host);
+ }
+ }
if (isset($_SERVER['SERVER_PORT'])
AND $port=$_SERVER['SERVER_PORT']
AND strpos($host,":")==false){
#if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
}
+ // PHP_VERSION_ID dispo depuis PHP 5.2.7
+ if (!defined('PHP_VERSION_ID')) {
+ $version = explode('.',PHP_VERSION);
+ define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
+ }
+
//
// Module de lecture/ecriture/suppression de fichiers utilisant flock()
// (non surchargeable en l'etat ; attention si on utilise include_spip()
spip_desinfecte($_REQUEST);
// Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
- @set_magic_quotes_runtime(0);
+ if (PHP_VERSION_ID<50300) {
+ @set_magic_quotes_runtime(0);
+ }
// Si les variables sont passees en global par le serveur,
// il faut faire quelques verifications de base
// on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche
// il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche
if (test_espace_prive() AND _MEMORY_LIMIT_MIN>8){
- if ($memory = trim(ini_get('memory_limit'))){
+ if ($memory = trim(ini_get('memory_limit')) and $memory != -1) {
$unit = strtolower(substr($memory,strlen($memory/1),1));
switch($unit) {
// Le modifieur 'G' est disponible depuis PHP 5.1.0
else
if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit
}
+ // Protocoles a normaliser dans les chaines de langues
+ if (!defined('_PROTOCOLES_STD'))
+ define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal');
init_var_mode();
}
if (!defined('_VAR_MODE')) define('_VAR_MODE',$_GET['var_mode']);
}
// preview, debug, blocs, urls et images necessitent une autorisation
- else if (in_array($_GET['var_mode'],array('preview','debug','inclure','urls','images'))) {
+ else if (in_array($_GET['var_mode'],array('preview','debug','inclure','urls','images','traduction'))) {
include_spip('inc/autoriser');
if (autoriser(
($_GET['var_mode'] == 'preview')
: 'debug'
)) {
switch($_GET['var_mode']){
+ case 'traduction':
+ // forcer le calcul pour passer dans traduire
+ if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul');
+ // et ne pas enregistrer de cache pour ne pas trainer les surlignages sur d'autres pages
+ if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true);
+ break;
case 'preview':
// basculer sur les criteres de preview dans les boucles
if (!defined('_VAR_PREVIEW')) define('_VAR_PREVIEW',true);
if (!defined('_VAR_MODE')) define('_VAR_MODE',$_GET['var_mode']);
break;
}
+ if (isset($GLOBALS['visiteur_session']['nom']))
spip_log($GLOBALS['visiteur_session']['nom']
. " "._VAR_MODE);
}
}
$page = pipeline('recuperer_fond',array(
- 'args'=>array('fond'=>$fond,'contexte'=>$contexte,'options'=>$options,'connect'=>$connect),
+ 'args'=>array('fond'=>$f,'contexte'=>$contexte,'options'=>$options,'connect'=>$connect),
'data'=>$page
));
if (isset($options['ajax']) AND $options['ajax']){