29ac1130cb2961f3588dbd8e9ef920db0d4cc17b
[lhc/web/www.git] / www / ecrire / inc / minipres.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2017 *
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 * Présentation des pages d'installation et d'erreurs
15 *
16 * @package SPIP\Core\Minipres
17 **/
18 if (!defined('_ECRIRE_INC_VERSION')) {
19 return;
20 }
21
22 include_spip('inc/headers');
23 include_spip('inc/texte'); //inclue inc/lang et inc/filtres
24
25
26 /**
27 * Retourne le début d'une page HTML minimale (de type installation ou erreur)
28 *
29 * Le contenu de CSS minimales (reset.css, clear.css, minipres.css) est inséré
30 * dans une balise script inline (compactée si possible)
31 *
32 * @uses utiliser_langue_visiteur()
33 * @uses http_no_cache()
34 * @uses html_lang_attributes()
35 * @uses compacte() si le plugin compresseur est présent
36 * @uses url_absolue_css()
37 *
38 * @param string $titre
39 * Titre. `AUTO`, indique que l'on est dans le processus d'installation de SPIP
40 * @param string $onLoad
41 * Attributs pour la balise `<body>`
42 * @param bool $all_inline
43 * Inliner les css et js dans la page (limiter le nombre de hits)
44 * @return string
45 * Code HTML
46 */
47 function install_debut_html($titre = 'AUTO', $onLoad = '', $all_inline = false) {
48
49 utiliser_langue_visiteur();
50
51 http_no_cache();
52
53 if ($titre == 'AUTO') {
54 $titre = _T('info_installation_systeme_publication');
55 }
56
57 # le charset est en utf-8, pour recuperer le nom comme il faut
58 # lors de l'installation
59 if (!headers_sent()) {
60 header('Content-Type: text/html; charset=utf-8');
61 }
62
63 $css = "";
64 $files = array('reset.css', 'clear.css', 'minipres.css');
65 if ($all_inline) {
66 // inliner les CSS (optimisation de la page minipres qui passe en un seul hit a la demande)
67 foreach ($files as $name) {
68 $file = direction_css(find_in_theme($name));
69 if (function_exists("compacte")) {
70 $file = compacte($file);
71 } else {
72 $file = url_absolue_css($file); // precaution
73 }
74 lire_fichier($file, $c);
75 $css .= $c;
76 }
77 $css = "<style type='text/css'>" . $css . "</style>";
78 } else {
79 foreach ($files as $name) {
80 $file = direction_css(find_in_theme($name));
81 $css .= "<link rel='stylesheet' href='$file' type='text/css' />\n";
82 }
83 }
84
85 // au cas ou minipres() est appele avant spip_initialisation_suite()
86 if (!defined('_DOCTYPE_ECRIRE')) {
87 define('_DOCTYPE_ECRIRE', '');
88 }
89
90 return _DOCTYPE_ECRIRE .
91 html_lang_attributes() .
92 "<head>\n" .
93 "<title>" .
94 textebrut($titre) .
95 "</title>\n" .
96 "<meta name='viewport' content='width=device-width' />\n" .
97 $css .
98 "</head>
99 <body" . $onLoad . " class='minipres'>
100 <div id='minipres'>
101 <h1>" .
102 $titre .
103 "</h1>
104 <div>\n";
105 }
106
107 /**
108 * Retourne la fin d'une page HTML minimale (de type installation ou erreur)
109 *
110 * @return string Code HTML
111 */
112 function install_fin_html() {
113 return "\n\t</div>\n\t</div>\n</body>\n</html>";
114 }
115
116
117 /**
118 * Retourne une page HTML contenant, dans une présentation minimale,
119 * le contenu transmis dans `$titre` et `$corps`.
120 *
121 * Appelée pour afficher un message d’erreur (l’utilisateur n’a pas
122 * accès à cette page par exemple).
123 *
124 * Lorsqu’aucun argument n’est transmis, un header 403 est renvoyé,
125 * ainsi qu’un message indiquant une interdiction d’accès.
126 *
127 * @example
128 * ```
129 * include_spip('inc/minipres');
130 * if (!autoriser('configurer')) {
131 * echo minipres();
132 * exit;
133 * }
134 * ```
135 * @uses install_debut_html()
136 * @uses install_fin_html()
137 *
138 * @param string $titre
139 * Titre de la page
140 * @param string $corps
141 * Corps de la page
142 * @param array $options
143 * string onload : Attribut onload de `<body>`
144 * bool all_inline : Inliner les css et js dans la page (limiter le nombre de hits)
145 * int status : status de la page
146 * @return string
147 * HTML de la page
148 */
149 function minipres($titre = '', $corps = "", $options = array()) {
150
151 // compat signature old
152 // minipres($titre='', $corps="", $onload='', $all_inline = false)
153 $args = func_get_args();
154 if (isset($args[2]) and is_string($args[2])) {
155 $options = array('onload' => $args[2]);
156 }
157 if (isset($args[3])) {
158 $options['all_inline'] = $args[3];
159 }
160
161 $options = array_merge(array(
162 'onload' => '',
163 'all_inline' => false,
164 ), $options);
165
166 if (!defined('_AJAX')) {
167 define('_AJAX', false);
168 } // par securite
169 if (!$titre) {
170 if (!isset($options['status'])) {
171 $options['status'] = 403;
172 }
173 if (!$titre = _request('action')
174 and !$titre = _request('exec')
175 and !$titre = _request('page')
176 ) {
177 $titre = '?';
178 }
179
180 $titre = spip_htmlspecialchars($titre);
181
182 $titre = ($titre == 'install')
183 ? _T('avis_espace_interdit')
184 : $titre . '&nbsp;: ' . _T('info_acces_interdit');
185
186 $statut = isset($GLOBALS['visiteur_session']['statut']) ? $GLOBALS['visiteur_session']['statut'] : '';
187 $nom = isset($GLOBALS['visiteur_session']['nom']) ? $GLOBALS['visiteur_session']['nom'] : '';
188
189 if ($statut != '0minirezo') {
190 $titre = _T('info_acces_interdit');
191 }
192
193 $corps = generer_form_ecrire('accueil', '', '',
194 $statut ? _T('public:accueil_site') : _T('public:lien_connecter')
195 );
196 spip_log($nom . " $titre " . $_SERVER['REQUEST_URI']);
197 }
198
199 if (!_AJAX) {
200 if (isset($options['status'])) {
201 http_status($options['status']);
202 }
203
204 return install_debut_html($titre, $options['onload'], $options['all_inline'])
205 . $corps
206 . install_fin_html();
207 } else {
208 include_spip('inc/headers');
209 include_spip('inc/actions');
210 $url = self('&', true);
211 foreach ($_POST as $v => $c) {
212 $url = parametre_url($url, $v, $c, '&');
213 }
214 ajax_retour("<div>" . $titre . redirige_formulaire($url) . "</div>", false);
215 }
216 }