[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / public.php
index c24466e..c1fcd9c 100644 (file)
@@ -3,75 +3,87 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2017                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
+/**
+ * Chargement (et affichage) d'une page ou d'un appel public
+ *
+ * @package SPIP\Core\Affichage
+ **/
+
 // Distinguer une inclusion d'un appel initial
 // (cette distinction est obsolete a present, on la garde provisoirement
 // par souci de compatiilite).
 
-if (isset($GLOBALS['_INC_PUBLIC']) AND $GLOBALS['_INC_PUBLIC']) {
+if (isset($GLOBALS['_INC_PUBLIC']) and $GLOBALS['_INC_PUBLIC']) {
 
        echo recuperer_fond($fond, $contexte_inclus, array(), _request('connect'));
 
 } else {
 
        $GLOBALS['_INC_PUBLIC'] = 1;
-       define('_PIPELINE_SUFFIX',  test_espace_prive()?'_prive':'');
+       define('_PIPELINE_SUFFIX', test_espace_prive() ? '_prive' : '');
 
        // Faut-il initialiser SPIP ? (oui dans le cas general)
-       if (!defined('_DIR_RESTREINT_ABS'))
+       if (!defined('_DIR_RESTREINT_ABS')) {
                if (defined('_DIR_RESTREINT')
-               AND @file_exists(_ROOT_RESTREINT . 'inc_version.php')) {
+                       and @file_exists(_ROOT_RESTREINT . 'inc_version.php')
+               ) {
                        include_once _ROOT_RESTREINT . 'inc_version.php';
-               }
-               else
+               } else {
                        die('inc_version absent ?');
-
-
-       // $fond defini dans le fichier d'appel ?
-
-       else if (isset($fond) AND !_request('fond')) { }
-
-       // fond demande dans l'url par page=xxxx ?
-       else if (isset($_GET[_SPIP_PAGE])) {
-               $fond = (string)$_GET[_SPIP_PAGE];
-
-               // Securite
-               if (strstr($fond, '/')
-                       AND !(
-                               isset($GLOBALS['visiteur_session']) // pour eviter d'evaluer la suite pour les anonymes
-                               AND include_spip('inc/autoriser')
-                               AND autoriser('webmestre'))) {
-                       include_spip('inc/minipres');
-                       echo minipres();
-                       exit;
                }
-               // l'argument Page a priorite sur l'argument action
-               // le cas se presente a cause des RewriteRule d'Apache
-               // qui permettent d'ajouter un argument dans la QueryString
-               // mais pas d'en retirer un en conservant les autres.
-               if (isset($_GET['action']) AND $_GET['action'] === $fond)
-                       unset($_GET['action']);
-       # sinon, fond par defaut
-       } else {
-               // sinon fond par defaut (cf. assembler.php)
-               $fond = pipeline('detecter_fond_par_defaut','');
+       } // $fond defini dans le fichier d'appel ?
+
+       else {
+               if (isset($fond) and !_request('fond')) {
+               } // fond demande dans l'url par page=xxxx ?
+               else {
+                       if (isset($_GET[_SPIP_PAGE])) {
+                               $fond = (string)$_GET[_SPIP_PAGE];
+
+                               // Securite
+                               if (strstr($fond, '/')
+                                       and !(
+                                               isset($GLOBALS['visiteur_session']) // pour eviter d'evaluer la suite pour les anonymes
+                                               and include_spip('inc/autoriser')
+                                               and autoriser('webmestre'))
+                               ) {
+                                       include_spip('inc/minipres');
+                                       echo minipres();
+                                       exit;
+                               }
+                               // l'argument Page a priorite sur l'argument action
+                               // le cas se presente a cause des RewriteRule d'Apache
+                               // qui permettent d'ajouter un argument dans la QueryString
+                               // mais pas d'en retirer un en conservant les autres.
+                               if (isset($_GET['action']) and $_GET['action'] === $fond) {
+                                       unset($_GET['action']);
+                               }
+                               # sinon, fond par defaut
+                       } else {
+                               // sinon fond par defaut (cf. assembler.php)
+                               $fond = pipeline('detecter_fond_par_defaut', '');
+                       }
+               }
        }
 
        $tableau_des_temps = array();
 
        // Particularites de certains squelettes
-       if ($fond == 'login')
+       if ($fond == 'login') {
                $forcer_lang = true;
+       }
 
-       if (isset($forcer_lang) AND $forcer_lang AND ($forcer_lang!=='non')
-               AND !_request('action')
-               AND $_SERVER['REQUEST_METHOD'] != 'POST') {
+       if (isset($forcer_lang) and $forcer_lang and ($forcer_lang !== 'non')
+               and !_request('action')
+               and $_SERVER['REQUEST_METHOD'] != 'POST'
+       ) {
                include_spip('inc/lang');
                verifier_lang_url();
        }
@@ -80,21 +92,22 @@ if (isset($GLOBALS['_INC_PUBLIC']) AND $GLOBALS['_INC_PUBLIC']) {
 
        // Charger l'aiguilleur des traitements derogatoires
        // (action en base SQL, formulaires CVT, AJax)
-       if (_request('action') OR _request('var_ajax') OR _request('formulaire_action')){
+       if (_request('action') or _request('var_ajax') or _request('formulaire_action')) {
                include_spip('public/aiguiller');
                if (
                        // cas des appels actions ?action=xxx
                        traiter_appels_actions()
-               OR
+                       or
                        // cas des hits ajax sur les inclusions ajax
                        traiter_appels_inclusions_ajax()
-                OR
+                       or
                        // cas des formulaires charger/verifier/traiter
-                       traiter_formulaires_dynamiques()){
+                       traiter_formulaires_dynamiques()
+               ) {
                        // lancer les taches sur affichage final, comme le cron
                        // mais sans rien afficher
                        $GLOBALS['html'] = false; // ne rien afficher
-                       pipeline('affichage_final'._PIPELINE_SUFFIX, '');
+                       pipeline('affichage_final' . _PIPELINE_SUFFIX, '');
                        exit; // le hit est fini !
                }
        }
@@ -110,39 +123,48 @@ if (isset($GLOBALS['_INC_PUBLIC']) AND $GLOBALS['_INC_PUBLIC']) {
 
        // Content-Type ?
        if (!isset($page['entetes']['Content-Type'])) {
-               $page['entetes']['Content-Type'] = 
-                       "text/html; charset=" . $GLOBALS['meta']['charset'];
+               $charset = isset($GLOBALS['meta']['charset']) ? $GLOBALS['meta']['charset'] : "utf-8";
+               $page['entetes']['Content-Type'] = 'text/html; charset=' . $charset;
                $html = true;
        } else {
-               $html = preg_match(',^\s*text/html,',$page['entetes']['Content-Type']);
+               $html = preg_match(',^\s*text/html,', $page['entetes']['Content-Type']);
        }
 
        // Tester si on est admin et il y a des choses supplementaires a dire
        // type tableau pour y mettre des choses au besoin.
-       $debug = ((_request('var_mode') == 'debug') OR $tableau_des_temps) ? array(1) : array();
+       $debug = ((_request('var_mode') == 'debug') or $tableau_des_temps) ? array(1) : array();
 
-       $affiche_boutons_admin = ($html AND (
-               (isset($_COOKIE['spip_admin']) AND (!isset($flag_preserver) OR !$flag_preserver))
-               OR $debug
-               OR (defined('_VAR_PREVIEW') AND _VAR_PREVIEW)
-       ));
+       // affiche-t-on les boutons d'administration ? voir f_admin() 
+       $affiche_boutons_admin = ($html and (
+                       (isset($_COOKIE['spip_admin']) and (!isset($flag_preserver) or !$flag_preserver))
+                       or ($debug and include_spip('inc/autoriser') and autoriser('debug'))
+                       or (defined('_VAR_PREVIEW') and _VAR_PREVIEW)
+               ));
 
-       if ($affiche_boutons_admin)
+       if ($affiche_boutons_admin) {
                include_spip('balise/formulaire_admin');
+       }
 
 
        // Execution de la page calculee
 
        // traitements sur les entetes avant envoi
        // peut servir pour le plugin de stats
-       $page['entetes'] = pipeline('affichage_entetes_final'._PIPELINE_SUFFIX, $page['entetes']);
+       $page['entetes'] = pipeline('affichage_entetes_final' . _PIPELINE_SUFFIX, $page['entetes']);
 
 
        // eval $page et affecte $res
-       include _ROOT_RESTREINT."public/evaluer_page.php";
+       include _ROOT_RESTREINT . "public/evaluer_page.php";
        envoyer_entetes($page['entetes']);
        if ($res === false) {
-               $msg = array('zbug_erreur_execution_page');
+               include_spip('inc/autoriser');
+               $err = _T('zbug_erreur_execution_page');
+               if (autoriser('webmestre')) {
+                       $err .= "\n<hr />\n"
+                               . highlight_string($page['codephp'], true)
+                               . "\n<hr />\n";
+               }
+               $msg = array($err);
                erreur_squelette($msg);
        }
 
@@ -151,38 +173,41 @@ if (isset($GLOBALS['_INC_PUBLIC']) AND $GLOBALS['_INC_PUBLIC']) {
        //
        // (c'est ici qu'on fait var_recherche, validation, boutons d'admin,
        // cf. public/assembler.php)
-       echo pipeline('affichage_final'._PIPELINE_SUFFIX, $page['texte']);
+       echo pipeline('affichage_final' . _PIPELINE_SUFFIX, $page['texte']);
 
-       if ($lang) lang_select();
+       if ($lang) {
+               lang_select();
+       }
        // l'affichage de la page a pu lever des erreurs (inclusion manquante)
        // il faut tester a nouveau
-       $debug = ((_request('var_mode') == 'debug') OR $tableau_des_temps) ? array(1) : array();
+       $debug = ((_request('var_mode') == 'debug') or $tableau_des_temps) ? array(1) : array();
 
        // Appel au debusqueur en cas d'erreurs ou de demande de trace
        // at last
        if ($debug) {
                // en cas d'erreur, retester l'affichage
-               if ($html AND ($affiche_boutons_admin OR $debug)) {
+               if ($html and ($affiche_boutons_admin or $debug)) {
                        $var_mode_affiche = _request('var_mode_affiche');
-                       $GLOBALS['debug_objets'][$var_mode_affiche][$var_mode_objet . 'tout'] = ($var_mode_affiche== 'validation' ? $page['texte'] :"");
+                       $var_mode_objet = _request('var_mode_objet');
+                       $GLOBALS['debug_objets'][$var_mode_affiche][$var_mode_objet . 'tout'] = ($var_mode_affiche == 'validation' ? $page['texte'] : "");
                        echo erreur_squelette(false);
                }
        } else {
 
                if (isset($GLOBALS['meta']['date_prochain_postdate'])
-               AND $GLOBALS['meta']['date_prochain_postdate'] <= time()) {
+                       and $GLOBALS['meta']['date_prochain_postdate'] <= time()
+               ) {
                        include_spip('inc/rubriques');
                        calculer_prochain_postdate(true);
                }
 
                // Effectuer une tache de fond ?
                // si _DIRECT_CRON_FORCE est present, on force l'appel
-               if (defined('_DIRECT_CRON_FORCE'))
+               if (defined('_DIRECT_CRON_FORCE')) {
                        cron();
+               }
 
                // sauver le cache chemin si necessaire
                save_path_cache();
        }
 }
-
-?>