3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2010 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
13 // Distinguer une inclusion d'un appel initial
14 // (cette distinction est obsolete a present, on la garde provisoirement
15 // par souci de compatiilite).
17 if (isset($GLOBALS['_INC_PUBLIC']) AND $GLOBALS['_INC_PUBLIC']) {
19 echo recuperer_fond($fond, $contexte_inclus, array(), _request('connect'));
23 $GLOBALS['_INC_PUBLIC'] = 1;
24 define('_PIPELINE_SUFFIX', test_espace_prive()?
'_prive':'');
26 // Faut-il initialiser SPIP ? (oui dans le cas general)
27 if (!defined('_DIR_RESTREINT_ABS'))
28 if (defined('_DIR_RESTREINT')
29 AND @file_exists
(_ROOT_RESTREINT
. 'inc_version.php')) {
30 include_once _ROOT_RESTREINT
. 'inc_version.php';
33 die('inc_version absent ?');
36 // $fond defini dans le fichier d'appel ?
38 else if (isset($fond) AND !_request('fond')) { }
40 // fond demande dans l'url par page=xxxx ?
41 else if (isset($_GET[_SPIP_PAGE
])) {
42 $fond = (string)$_GET[_SPIP_PAGE
];
45 if (strstr($fond, '/')
47 isset($GLOBALS['visiteur_session']) // pour eviter d'evaluer la suite pour les anonymes
48 AND include_spip('inc/autoriser')
49 AND autoriser('webmestre'))) {
50 include_spip('inc/minipres');
54 // l'argument Page a priorite sur l'argument action
55 // le cas se presente a cause des RewriteRule d'Apache
56 // qui permettent d'ajouter un argument dans la QueryString
57 // mais pas d'en retirer un en conservant les autres.
58 if (isset($_GET['action']) AND $_GET['action'] === $fond)
59 unset($_GET['action']);
60 # sinon, fond par defaut
62 // sinon fond par defaut (cf. assembler.php)
63 $fond = pipeline('detecter_fond_par_defaut','');
66 $tableau_des_temps = array();
68 // Particularites de certains squelettes
72 if (isset($forcer_lang) AND $forcer_lang AND ($forcer_lang!=='non')
73 AND !_request('action')
74 AND $_SERVER['REQUEST_METHOD'] != 'POST') {
75 include_spip('inc/lang');
79 $lang = !isset($_GET['lang']) ?
'' : lang_select($_GET['lang']);
81 // Charger l'aiguilleur des traitements derogatoires
82 // (action en base SQL, formulaires CVT, AJax)
83 if (_request('action') OR _request('var_ajax') OR _request('formulaire_action')){
84 include_spip('public/aiguiller');
86 // cas des appels actions ?action=xxx
87 traiter_appels_actions()
89 // cas des hits ajax sur les inclusions ajax
90 traiter_appels_inclusions_ajax()
92 // cas des formulaires charger/verifier/traiter
93 traiter_formulaires_dynamiques()){
94 // lancer les taches sur affichage final, comme le cron
95 // mais sans rien afficher
96 $GLOBALS['html'] = false; // ne rien afficher
97 pipeline('affichage_final'._PIPELINE_SUFFIX
, '');
98 exit; // le hit est fini !
102 // Il y a du texte a produire, charger le metteur en page
103 include_spip('public/assembler');
104 $page = assembler($fond, _request('connect'));
106 if (isset($page['status'])) {
107 include_spip('inc/headers');
108 http_status($page['status']);
112 if (!isset($page['entetes']['Content-Type'])) {
113 $page['entetes']['Content-Type'] =
114 "text/html; charset=" . $GLOBALS['meta']['charset'];
117 $html = preg_match(',^\s*text/html,',$page['entetes']['Content-Type']);
120 // Tester si on est admin et il y a des choses supplementaires a dire
121 // type tableau pour y mettre des choses au besoin.
122 $debug = ((_request('var_mode') == 'debug') OR $tableau_des_temps) ?
array(1) : array();
124 $affiche_boutons_admin = ($html AND (
125 (isset($_COOKIE['spip_admin']) AND (!isset($flag_preserver) OR !$flag_preserver))
127 OR (defined('_VAR_PREVIEW') AND _VAR_PREVIEW
)
130 if ($affiche_boutons_admin)
131 include_spip('balise/formulaire_admin');
134 // Execution de la page calculee
136 // traitements sur les entetes avant envoi
137 // peut servir pour le plugin de stats
138 $page['entetes'] = pipeline('affichage_entetes_final'._PIPELINE_SUFFIX
, $page['entetes']);
141 // eval $page et affecte $res
142 include _ROOT_RESTREINT
."public/evaluer_page.php";
143 envoyer_entetes($page['entetes']);
144 if ($res === false) {
145 $msg = array('zbug_erreur_execution_page');
146 erreur_squelette($msg);
150 // Envoyer le resultat apres post-traitements
152 // (c'est ici qu'on fait var_recherche, validation, boutons d'admin,
153 // cf. public/assembler.php)
154 echo pipeline('affichage_final'._PIPELINE_SUFFIX
, $page['texte']);
156 if ($lang) lang_select();
157 // l'affichage de la page a pu lever des erreurs (inclusion manquante)
158 // il faut tester a nouveau
159 $debug = ((_request('var_mode') == 'debug') OR $tableau_des_temps) ?
array(1) : array();
161 // Appel au debusqueur en cas d'erreurs ou de demande de trace
164 // en cas d'erreur, retester l'affichage
165 if ($html AND ($affiche_boutons_admin OR $debug)) {
166 $var_mode_affiche = _request('var_mode_affiche');
167 $GLOBALS['debug_objets'][$var_mode_affiche][$var_mode_objet . 'tout'] = ($var_mode_affiche== 'validation' ?
$page['texte'] :"");
168 echo erreur_squelette(false);
172 if (isset($GLOBALS['meta']['date_prochain_postdate'])
173 AND $GLOBALS['meta']['date_prochain_postdate'] <= time()) {
174 include_spip('inc/rubriques');
175 calculer_prochain_postdate(true);
178 // Effectuer une tache de fond ?
179 // si _DIRECT_CRON_FORCE est present, on force l'appel
180 if (defined('_DIRECT_CRON_FORCE'))
183 // sauver le cache chemin si necessaire