From c1ef2bf02014abe0f616ba5ad354bbfe88c38a06 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Sun, 1 Jul 2007 22:14:42 +0000 Subject: [PATCH] la definition de var_mode concentree a un seul endroit, avec les autorisations qui vont bien ; maintenant SPIP a l'air de fonctionner sans plus necessiter de 'feed_globals' (a tester intensivement, bien sur... mais je desactive ce mode, pour qu'on teste, justement) --- ecrire/base/db_mysql.php | 2 +- ecrire/inc/autoriser.php | 7 +++- ecrire/inc/utils.php | 3 +- ecrire/inc_version.php | 2 +- ecrire/public/assembler.php | 81 ++++++++++++++++++++++--------------- 5 files changed, 58 insertions(+), 37 deletions(-) diff --git a/ecrire/base/db_mysql.php b/ecrire/base/db_mysql.php index d000df65dd..636ec3d345 100644 --- a/ecrire/base/db_mysql.php +++ b/ecrire/base/db_mysql.php @@ -65,7 +65,7 @@ function spip_query_db($query) { include_spip('inc/autoriser'); // gare au bouclage sur calcul de droits au premier appel $trace = true; - $trace = autoriser('voirstats'); + $trace = autoriser('debug'); } if ($trace) $start = microtime(); } diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php index 3fae4a7ac7..3b6bdca02b 100644 --- a/ecrire/inc/autoriser.php +++ b/ecrire/inc/autoriser.php @@ -113,7 +113,6 @@ function autoriser_ecrire_dist($faire, $type, $id, $qui, $opt) { // http://doc.spip.org/@autoriser_previsualiser_dist function autoriser_previsualiser_dist($faire, $type, $id, $qui, $opt) { - return ($GLOBALS['meta']['preview'] == '1comite' OR ($GLOBALS['meta']['preview']== 'oui' AND $qui['statut']=='0minirezo')); @@ -475,6 +474,12 @@ function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) { ; } +// Qui peut activer le debugueur ? +// A noter : pour le moment ne fonctionne que pour ?var_profile (timer SQL) +function autoriser_debug_dist($faire, $type, $id, $qui, $opt) { + return $qui['statut'] == '0minirezo'; +} + // Renvoie la liste des rubriques liees a cet auteur, independamment de son // statut (pour les admins restreints, il faut donc aussi verifier statut) // Memorise le resultat dans un tableau statique indexe par les id_auteur. diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index 1ab62ae9d5..32b8a15507 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -966,12 +966,11 @@ function generer_url_action($script, $args="", $no_entities=false) { // Dirty hack contre le register_globals a 'Off' (PHP 4.1.x) // A remplacer (bientot ?) par une gestion propre des variables admissibles ;-) -// Attention pour compatibilite max $_GET n'est pas superglobale // NB: c'est une fonction de maniere a ne pas pourrir $GLOBALS // http://doc.spip.org/@spip_register_globals function spip_register_globals() { - define('_FEED_GLOBALS', true); + define('_FEED_GLOBALS', false); // si ca marche on simplifiera tout ca // Liste des variables dont on refuse qu'elles puissent provenir du client $refuse_gpc = array ( diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php index d23b71855d..191becac4d 100644 --- a/ecrire/inc_version.php +++ b/ecrire/inc_version.php @@ -450,7 +450,7 @@ AND !headers_sent()) { // si la compression est deja commencee, stop && !@ini_get("zlib.output_compression") && !@ini_get("output_handler") - && !isset($GLOBALS['var_mode']) # bug avec le debugueur qui appelle ob_end_clean() + && !isset($_GET['var_mode']) # bug avec le debugueur qui appelle ob_end_clean() ) ob_start('ob_gzhandler'); } diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php index 5a516c72f5..1d83aa3bfb 100644 --- a/ecrire/public/assembler.php +++ b/ecrire/public/assembler.php @@ -17,7 +17,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // elle-meme ne fait que traiter les cas particuliers, puis passe la main. // http://doc.spip.org/@public_assembler_dist function public_assembler_dist($fond) { - global $auteur_session, $forcer_lang, $ignore_auth_http, $var_mode; + global $forcer_lang, $ignore_auth_http; // multilinguisme if ($forcer_lang AND ($forcer_lang!=='non')) { @@ -43,17 +43,50 @@ function public_assembler_dist($fond) { reponse_confirmation($_GET['var_confirm']); } - // forcer la connexion si on veut le debusqueur - if ($var_mode=='debug') { - include_spip('inc/autoriser'); - if (autoriser('configurer')) - spip_log($auteur_session['nom'] . " ausculte $fond"); - else { - include_spip('inc/headers'); - redirige_par_entete(generer_url_public('login', - 'url='.rawurlencode( - parametre_url(self(), 'var_mode', 'debug', '&') - ), true)); + // On fixe $GLOBALS['var_mode'] + $GLOBALS['var_mode'] = false; + $GLOBALS['var_preview'] = false; + if (isset($_GET['var_mode'])) { + // tout le monde peut calcul/recalcul + if ($_GET['var_mode'] == 'calcul' + OR $_GET['var_mode'] == 'recalcul') + $GLOBALS['var_mode'] = $_GET['var_mode']; + + // preview et debug necessitent une autorisation + else if ($_GET['var_mode'] == 'preview' + OR $_GET['var_mode'] == 'debug') { + include_spip('inc/autoriser'); + if (autoriser( + ($_GET['var_mode'] == 'preview') + ? 'previsualiser' + : 'debug' + )) { + // preview ? + if ($_GET['var_mode'] == 'preview') { + // forcer le compilo et ignorer les caches existants + $GLOBALS['var_mode'] = 'recalcul'; + // truquer les boucles et ne pas enregistrer de cache + $GLOBALS['var_preview'] = true; + } + // seul cas ici: 'debug' + else { + $GLOBALS['var_mode'] = $_GET['var_mode']; + } + spip_log($GLOBALS['auteur_session']['nom'] + . " ".$GLOBALS['var_mode']); + } + // pas autorise ? + else { + // si on n'est pas connecte on se redirige + if (!$GLOBALS['auteur_session']) { + include_spip('inc/headers'); + redirige_par_entete(generer_url_public('login', + 'url='.rawurlencode( + parametre_url(self(), 'var_mode', $_GET['var_mode'], '&') + ), true)); + } + // sinon tant pis + } } } @@ -62,21 +95,13 @@ function public_assembler_dist($fond) { } -// http://doc.spip.org/@is_preview -function is_preview() -{ - if ($GLOBALS['var_mode'] !== 'preview') return false; - include_spip('inc/autoriser'); - return autoriser('previsualiser'); -} - // // calcule la page et les entetes // // http://doc.spip.org/@assembler_page function assembler_page ($fond) { global $flag_preserver,$lastmodified, - $use_cache, $var_mode, $var_preview; + $use_cache; // Cette fonction est utilisee deux fois $cacher = charger_fonction('cacher', 'public'); @@ -85,21 +110,13 @@ function assembler_page ($fond) { if (!$chemin_cache || !$lastmodified) $lastmodified = time(); - // demande de previsualisation ? - // -> inc-calcul n'enregistrera pas les fichiers caches - // -> inc-boucles acceptera les objets non 'publie' - if ($var_preview = is_preview()) { - $var_mode = 'recalcul'; - spip_log('preview !'); - } - $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD'); // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client}) // une perennite valide a meme reponse qu'une requete HEAD (par defaut les // pages sont dynamiques) if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) - AND !$var_mode + AND !$GLOBALS['var_mode'] AND $chemin_cache AND isset($page['entetes']) AND isset($page['entetes']['Cache-Control']) @@ -150,11 +167,11 @@ function assembler_page ($fond) { if ($GLOBALS['flag_ob']) { // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions if (trim($page['texte']) === '' - AND $var_mode != 'debug') { + AND $GLOBALS['var_mode'] != 'debug') { $page = message_erreur_404(); } // pas de cache client en mode 'observation' - if ($var_mode) { + if ($GLOBALS['var_mode']) { $page['entetes']["Cache-Control"]= "no-cache,must-revalidate"; $page['entetes']["Pragma"] = "no-cache"; } -- GitLab