[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / ecrire / public.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
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 \***************************************************************************/
12
13 // Distinguer une inclusion d'un appel initial
14 // (cette distinction est obsolete a present, on la garde provisoirement
15 // par souci de compatiilite).
16
17 if (isset($GLOBALS['_INC_PUBLIC']) AND $GLOBALS['_INC_PUBLIC']) {
18
19 echo recuperer_fond($fond, $contexte_inclus, array(), _request('connect'));
20
21 } else {
22
23 $GLOBALS['_INC_PUBLIC'] = 1;
24 define('_PIPELINE_SUFFIX', test_espace_prive()?'_prive':'');
25
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';
31 }
32 else
33 die('inc_version absent ?');
34
35
36 // $fond defini dans le fichier d'appel ?
37
38 else if (isset($fond) AND !_request('fond')) { }
39
40 // fond demande dans l'url par page=xxxx ?
41 else if (isset($_GET[_SPIP_PAGE])) {
42 $fond = (string)$_GET[_SPIP_PAGE];
43
44 // Securite
45 if (strstr($fond, '/')
46 AND !(
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');
51 echo minipres();
52 exit;
53 }
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
61 } else {
62 // sinon fond par defaut (cf. assembler.php)
63 $fond = pipeline('detecter_fond_par_defaut','');
64 }
65
66 $tableau_des_temps = array();
67
68 // Particularites de certains squelettes
69 if ($fond == 'login')
70 $forcer_lang = true;
71
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');
76 verifier_lang_url();
77 }
78
79 $lang = !isset($_GET['lang']) ? '' : lang_select($_GET['lang']);
80
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');
85 if (
86 // cas des appels actions ?action=xxx
87 traiter_appels_actions()
88 OR
89 // cas des hits ajax sur les inclusions ajax
90 traiter_appels_inclusions_ajax()
91 OR
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 !
99 }
100 }
101
102 // Il y a du texte a produire, charger le metteur en page
103 include_spip('public/assembler');
104 $page = assembler($fond, _request('connect'));
105
106 if (isset($page['status'])) {
107 include_spip('inc/headers');
108 http_status($page['status']);
109 }
110
111 // Content-Type ?
112 if (!isset($page['entetes']['Content-Type'])) {
113 $page['entetes']['Content-Type'] =
114 "text/html; charset=" . $GLOBALS['meta']['charset'];
115 $html = true;
116 } else {
117 $html = preg_match(',^\s*text/html,',$page['entetes']['Content-Type']);
118 }
119
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();
123
124 $affiche_boutons_admin = ($html AND (
125 (isset($_COOKIE['spip_admin']) AND (!isset($flag_preserver) OR !$flag_preserver))
126 OR $debug
127 OR (defined('_VAR_PREVIEW') AND _VAR_PREVIEW)
128 ));
129
130 if ($affiche_boutons_admin)
131 include_spip('balise/formulaire_admin');
132
133
134 // Execution de la page calculee
135
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']);
139
140
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);
147 }
148
149 //
150 // Envoyer le resultat apres post-traitements
151 //
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']);
155
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();
160
161 // Appel au debusqueur en cas d'erreurs ou de demande de trace
162 // at last
163 if ($debug) {
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);
169 }
170 } else {
171
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);
176 }
177
178 // Effectuer une tache de fond ?
179 // si _DIRECT_CRON_FORCE est present, on force l'appel
180 if (defined('_DIRECT_CRON_FORCE'))
181 cron();
182
183 // sauver le cache chemin si necessaire
184 save_path_cache();
185 }
186 }
187
188 ?>