81281f2f65bb078e6d73975eb9be2ef7ab70dbea
[lhc/web/www.git] / www / ecrire / index.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
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 /**
14 * Fichier d'exécution de l'interface privée
15 *
16 * @package SPIP\Core\Chargement
17 **/
18
19 /** Drapeau indiquant que l'on est dans l'espace privé */
20 define('_ESPACE_PRIVE', true);
21 if (!defined('_ECRIRE_INC_VERSION')) {
22 include 'inc_version.php';
23 }
24
25 // Verification anti magic_quotes_sybase, pour qui addslashes("'") = "''"
26 // On prefere la faire ici plutot que dans inc_version, c'est moins souvent et
27 // si le reglage est modifie sur un site en prod, ca fait moins mal
28 if (addslashes("'") !== "\\'") {
29 die('SPIP incompatible magic_quotes_sybase');
30 }
31
32 include_spip('inc/cookie');
33
34 //
35 // Determiner l'action demandee
36 //
37
38 $exec = (string)_request('exec');
39 $reinstall = (!is_null(_request('reinstall'))) ? _request('reinstall') : ($exec == 'install' ? 'oui' : null);
40 //
41 // Les scripts d'insallation n'authentifient pas, forcement,
42 // alors il faut blinder les variables d'URL
43 //
44 if (autoriser_sans_cookie($exec, false)) {
45 if (!isset($reinstall)) {
46 $reinstall = 'non';
47 }
48 set_request('transformer_xml');
49 $var_auth = true;
50 } else {
51 // Authentification, redefinissable
52 $auth = charger_fonction('auth', 'inc');
53 $var_auth = $auth();
54 if ($var_auth) {
55 echo auth_echec($var_auth);
56 exit;
57 }
58 }
59
60 // initialiser a la langue par defaut
61 include_spip('inc/lang');
62 utiliser_langue_visiteur();
63 // forcer la langue de l'utilisateur pour les squelettes
64 $forcer_lang = true;
65
66
67 if (_request('action') or _request('var_ajax') or _request('formulaire_action')) {
68 if (!autoriser_sans_cookie($exec)){
69 // Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires
70 include_spip('public/aiguiller');
71 if (
72 // cas des appels actions ?action=xxx
73 traiter_appels_actions()
74 or
75 // cas des hits ajax sur les inclusions ajax
76 traiter_appels_inclusions_ajax()
77 or
78 // cas des formulaires charger/verifier/traiter
79 traiter_formulaires_dynamiques()
80 ){
81 exit;
82 } // le hit est fini !
83 }
84 }
85 // securiser les redirect du back-office
86 if (_request('redirect')) {
87 if (!function_exists('securiser_redirect_action')){
88 include_spip('public/aiguiller');
89 }
90 set_request('redirect',securiser_redirect_action(_request('redirect')));
91 }
92
93
94 //
95 // Gestion d'une page normale de l'espace prive
96 //
97
98 // Controle de la version, sauf si on est deja en train de s'en occuper
99 if (!$reinstall == 'oui'
100 and !_AJAX
101 and isset($GLOBALS['meta']['version_installee'])
102 and ($GLOBALS['spip_version_base'] != (str_replace(',', '.', $GLOBALS['meta']['version_installee'])))
103 ) {
104 $exec = 'demande_mise_a_jour';
105 }
106
107 // Quand une action d'administration est en cours (meta "admin"),
108 // refuser les connexions non-admin ou Ajax pour laisser la base intacte.
109 // Si c'est une admin, detourner le script demande vers cette action:
110 // si l'action est vraiment en cours, inc_admin refusera cette 2e demande,
111 // sinon c'est qu'elle a ete interrompue et il faut la reprendre
112
113 elseif (isset($GLOBALS['meta']["admin"])) {
114 if (preg_match('/^(.*)_(\d+)_/', $GLOBALS['meta']["admin"], $l)) {
115 list(, $var_f, $n) = $l;
116 }
117 if (_AJAX
118 or !(
119 isset($_COOKIE['spip_admin'])
120 or (isset($GLOBALS['visiteur_session']) and $GLOBALS['visiteur_session']['statut'] == '0minirezo')
121 )
122 ) {
123 spip_log("Quand la meta admin vaut " .
124 $GLOBALS['meta']["admin"] .
125 " seul un admin peut se connecter et sans AJAX." .
126 " En cas de probleme, detruire cette meta.");
127 die(_T('info_travaux_texte'));
128 }
129 if ($n) {
130 list(, $var_f, $n) = $l;
131 if (tester_url_ecrire("base_$var_f")) {
132 $var_f = "base_$var_f";
133 }
134 if ($var_f != $exec) {
135 spip_log("Le script $var_f lance par auteur$n se substitue a l'exec $exec");
136 $exec = $var_f;
137 set_request('exec', $exec);
138 }
139 }
140 }
141 // si nom pas plausible, prendre le script par defaut
142 // attention aux deux cas 404/403 qui commencent par un 4 !
143 elseif (!preg_match(',^[a-z4_][0-9a-z_-]*$,i', $exec)) {
144 $exec = "accueil";
145 set_request('exec', $exec);
146 }
147
148 // compatibilite ascendante : obsolete, ne plus utiliser
149 $GLOBALS['spip_display'] = isset($GLOBALS['visiteur_session']['prefs']['display'])
150 ? $GLOBALS['visiteur_session']['prefs']['display']
151 : 0;
152 $GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? $_COOKIE['spip_ecran'] : "etroit";
153
154 // si la langue est specifiee par cookie et ne correspond pas
155 // (elle a ete changee dans une autre session, et on retombe sur un vieux cookie)
156 // on appelle directement la fonction, car un appel d'action peut conduire a une boucle infinie
157 // si le cookie n'est pas pose correctement dans l'action
158 if (!$var_auth and isset($_COOKIE['spip_lang_ecrire'])
159 and $_COOKIE['spip_lang_ecrire'] <> $GLOBALS['visiteur_session']['lang']
160 ) {
161 include_spip('action/converser');
162 action_converser_post($GLOBALS['visiteur_session']['lang'], true);
163 }
164
165
166 // Passer la main aux outils XML a la demande (meme les redac s'ils veulent).
167 // mais seulement si on a bien ete auhentifie
168 if ($var_f = _request('transformer_xml')) {
169 set_request('var_url', $exec);
170 $exec = $var_f;
171 }
172 if ($var_f = tester_url_ecrire($exec)) {
173 $var_f = charger_fonction($var_f);
174 $var_f(); // at last
175 } else {
176 // Rien de connu: rerouter vers exec=404 au lieu d'echouer
177 // ce qui permet de laisser la main a un plugin
178 $var_f = charger_fonction('404');
179 $var_f($exec);
180 }