Completed
Push — master ( 7f538c...c8b721 )
by cam
01:37
created
ecrire/inc/headers.php 1 patch
Indentation   +136 added lines, -136 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -38,133 +38,133 @@  discard block
 block discarded – undo
38 38
  * @param int $status Code de redirection (301 ou 302)
39 39
  **/
40 40
 function redirige_par_entete($url, $equiv = '', $status = 302) {
41
-	if (!in_array($status, [301, 302])) {
42
-		$status = 302;
43
-	}
44
-
45
-	$url = trim(strtr($url, "\n\r", '  '));
46
-	# si l'url de redirection est relative, on la passe en absolue
47
-	if (!preg_match(',^(\w+:)?//,', $url)) {
48
-		include_spip('inc/filtres_mini');
49
-		$url = url_absolue($url);
50
-	}
51
-
52
-	if (defined('_AJAX') and _AJAX) {
53
-		$url = parametre_url($url, 'var_ajax_redir', 1, '&');
54
-	}
55
-
56
-	// ne pas laisser passer n'importe quoi dans l'url
57
-	$url = str_replace(['<', '"'], ['&lt;', '&quot;'], $url);
58
-	$url = str_replace(["\r", "\n", ' '], ['%0D', '%0A', '%20'], $url);
59
-	while (strpos($url, '%0A') !== false) {
60
-		$url = str_replace('%0A', '', $url);
61
-	}
62
-	// interdire les url inline avec des pseudo-protocoles :
63
-	if (
64
-		(preg_match(',data:,i', $url) and preg_match('/base64\s*,/i', $url))
65
-		or preg_match(',(javascript|mailto):,i', $url)
66
-	) {
67
-		$url = './';
68
-	}
69
-
70
-	// Il n'y a que sous Apache que setcookie puis redirection fonctionne
71
-	include_spip('inc/cookie');
72
-	if (!defined('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE')) {
73
-		define('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE', '^(Apache|Cherokee|nginx)');
74
-	}
75
-	if (!defined('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE')) {
76
-		define('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE', 'Apache|Cherokee|nginx');
77
-	}
78
-	if (
79
-		(!$equiv and !spip_cookie_envoye()) or (
80
-			   (!empty($_SERVER['SERVER_SOFTWARE'])
81
-				   and _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE
82
-				   and preg_match('/' . _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', $_SERVER['SERVER_SOFTWARE']))
83
-			or (!empty($_SERVER['SERVER_SIGNATURE'])
84
-				   and _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE
85
-				   and preg_match('/' . _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', $_SERVER['SERVER_SIGNATURE']))
86
-			or function_exists('apache_getenv')
87
-			or defined('_SERVER_APACHE')
88
-		)
89
-	) {
90
-		@header('Location: ' . $url);
91
-		$equiv = '';
92
-	} else {
93
-		@header('Refresh: 0; url=' . $url);
94
-		if (isset($GLOBALS['meta']['charset'])) {
95
-			@header('Content-Type: text/html; charset=' . $GLOBALS['meta']['charset']);
96
-		}
97
-		$equiv = "<meta http-equiv='Refresh' content='0; url=$url'>";
98
-	}
99
-	include_spip('inc/lang');
100
-	if ($status != 302) {
101
-		http_response_code($status);
102
-	}
103
-	echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">', "\n",
104
-	html_lang_attributes(), '
41
+    if (!in_array($status, [301, 302])) {
42
+        $status = 302;
43
+    }
44
+
45
+    $url = trim(strtr($url, "\n\r", '  '));
46
+    # si l'url de redirection est relative, on la passe en absolue
47
+    if (!preg_match(',^(\w+:)?//,', $url)) {
48
+        include_spip('inc/filtres_mini');
49
+        $url = url_absolue($url);
50
+    }
51
+
52
+    if (defined('_AJAX') and _AJAX) {
53
+        $url = parametre_url($url, 'var_ajax_redir', 1, '&');
54
+    }
55
+
56
+    // ne pas laisser passer n'importe quoi dans l'url
57
+    $url = str_replace(['<', '"'], ['&lt;', '&quot;'], $url);
58
+    $url = str_replace(["\r", "\n", ' '], ['%0D', '%0A', '%20'], $url);
59
+    while (strpos($url, '%0A') !== false) {
60
+        $url = str_replace('%0A', '', $url);
61
+    }
62
+    // interdire les url inline avec des pseudo-protocoles :
63
+    if (
64
+        (preg_match(',data:,i', $url) and preg_match('/base64\s*,/i', $url))
65
+        or preg_match(',(javascript|mailto):,i', $url)
66
+    ) {
67
+        $url = './';
68
+    }
69
+
70
+    // Il n'y a que sous Apache que setcookie puis redirection fonctionne
71
+    include_spip('inc/cookie');
72
+    if (!defined('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE')) {
73
+        define('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE', '^(Apache|Cherokee|nginx)');
74
+    }
75
+    if (!defined('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE')) {
76
+        define('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE', 'Apache|Cherokee|nginx');
77
+    }
78
+    if (
79
+        (!$equiv and !spip_cookie_envoye()) or (
80
+                (!empty($_SERVER['SERVER_SOFTWARE'])
81
+                   and _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE
82
+                   and preg_match('/' . _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', $_SERVER['SERVER_SOFTWARE']))
83
+            or (!empty($_SERVER['SERVER_SIGNATURE'])
84
+                   and _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE
85
+                   and preg_match('/' . _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', $_SERVER['SERVER_SIGNATURE']))
86
+            or function_exists('apache_getenv')
87
+            or defined('_SERVER_APACHE')
88
+        )
89
+    ) {
90
+        @header('Location: ' . $url);
91
+        $equiv = '';
92
+    } else {
93
+        @header('Refresh: 0; url=' . $url);
94
+        if (isset($GLOBALS['meta']['charset'])) {
95
+            @header('Content-Type: text/html; charset=' . $GLOBALS['meta']['charset']);
96
+        }
97
+        $equiv = "<meta http-equiv='Refresh' content='0; url=$url'>";
98
+    }
99
+    include_spip('inc/lang');
100
+    if ($status != 302) {
101
+        http_response_code($status);
102
+    }
103
+    echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">', "\n",
104
+    html_lang_attributes(), '
105 105
 <head>',
106
-	$equiv, '
106
+    $equiv, '
107 107
 <title>HTTP ' . $status . '</title>
108 108
 ' . ((isset($GLOBALS['meta']['charset'])) ? '<meta http-equiv="Content-Type" content="text/html;charset=' . $GLOBALS['meta']['charset'] . '">' : '') . '
109 109
 </head>
110 110
 <body>
111 111
 <h1>HTTP ' . $status . '</h1>
112 112
 <a href="',
113
-	quote_amp($url),
114
-	'">',
115
-	_T('navigateur_pas_redirige'),
116
-	'</a></body></html>';
113
+    quote_amp($url),
114
+    '">',
115
+    _T('navigateur_pas_redirige'),
116
+    '</a></body></html>';
117 117
 
118
-	spip_log("redirige $status: $url");
118
+    spip_log("redirige $status: $url");
119 119
 
120
-	exit;
120
+    exit;
121 121
 }
122 122
 
123 123
 function redirige_formulaire($url, $equiv = '', $format = 'message') {
124
-	if (
125
-		!_AJAX
126
-		and !headers_sent()
127
-		and !_request('var_ajax')
128
-	) {
129
-		redirige_par_entete(str_replace('&amp;', '&', $url), $equiv);
130
-	} // si c'est une ancre, fixer simplement le window.location.hash
131
-	elseif ($format == 'ajaxform' and preg_match(',^#[0-9a-z\-_]+$,i', $url)) {
132
-		return [
133
-			// on renvoie un lien masque qui sera traite par ajaxCallback.js
134
-			"<a href='$url' name='ajax_ancre' style='display:none;'>anchor</a>",
135
-			// et rien dans le message ok
136
-			''
137
-		];
138
-	} else {
139
-		// ne pas laisser passer n'importe quoi dans l'url
140
-		$url = str_replace(['<', '"'], ['&lt;', '&quot;'], $url);
141
-
142
-		$url = strtr($url, "\n\r", '  ');
143
-		# en theorie on devrait faire ca tout le temps, mais quand la chaine
144
-		# commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne
145
-		if ($url[0] == '?') {
146
-			$url = url_de_base() . $url;
147
-		}
148
-		$url = str_replace('&amp;', '&', $url);
149
-		spip_log("redirige formulaire ajax: $url");
150
-		include_spip('inc/filtres');
151
-		if ($format == 'ajaxform') {
152
-			return [
153
-				// on renvoie un lien masque qui sera traite par ajaxCallback.js
154
-				'<a href="' . quote_amp($url) . '" name="ajax_redirect"  style="display:none;">' . _T('navigateur_pas_redirige') . '</a>',
155
-				// et un message au cas ou
156
-				'<br /><a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>'
157
-			];
158
-		} else // format message texte, tout en js inline
159
-		{
160
-			return
161
-				// ie poste les formulaires dans une iframe, il faut donc rediriger son parent
162
-				"<script type='text/javascript'>if (parent.window){parent.window.document.location.replace(\"$url\");} else {document.location.replace(\"$url\");}</script>"
163
-				. http_img_pack('loader.svg', '', " class='loader'")
164
-				. '<br />'
165
-				. '<a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>';
166
-		}
167
-	}
124
+    if (
125
+        !_AJAX
126
+        and !headers_sent()
127
+        and !_request('var_ajax')
128
+    ) {
129
+        redirige_par_entete(str_replace('&amp;', '&', $url), $equiv);
130
+    } // si c'est une ancre, fixer simplement le window.location.hash
131
+    elseif ($format == 'ajaxform' and preg_match(',^#[0-9a-z\-_]+$,i', $url)) {
132
+        return [
133
+            // on renvoie un lien masque qui sera traite par ajaxCallback.js
134
+            "<a href='$url' name='ajax_ancre' style='display:none;'>anchor</a>",
135
+            // et rien dans le message ok
136
+            ''
137
+        ];
138
+    } else {
139
+        // ne pas laisser passer n'importe quoi dans l'url
140
+        $url = str_replace(['<', '"'], ['&lt;', '&quot;'], $url);
141
+
142
+        $url = strtr($url, "\n\r", '  ');
143
+        # en theorie on devrait faire ca tout le temps, mais quand la chaine
144
+        # commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne
145
+        if ($url[0] == '?') {
146
+            $url = url_de_base() . $url;
147
+        }
148
+        $url = str_replace('&amp;', '&', $url);
149
+        spip_log("redirige formulaire ajax: $url");
150
+        include_spip('inc/filtres');
151
+        if ($format == 'ajaxform') {
152
+            return [
153
+                // on renvoie un lien masque qui sera traite par ajaxCallback.js
154
+                '<a href="' . quote_amp($url) . '" name="ajax_redirect"  style="display:none;">' . _T('navigateur_pas_redirige') . '</a>',
155
+                // et un message au cas ou
156
+                '<br /><a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>'
157
+            ];
158
+        } else // format message texte, tout en js inline
159
+        {
160
+            return
161
+                // ie poste les formulaires dans une iframe, il faut donc rediriger son parent
162
+                "<script type='text/javascript'>if (parent.window){parent.window.document.location.replace(\"$url\");} else {document.location.replace(\"$url\");}</script>"
163
+                . http_img_pack('loader.svg', '', " class='loader'")
164
+                . '<br />'
165
+                . '<a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>';
166
+        }
167
+    }
168 168
 }
169 169
 
170 170
 /**
@@ -185,7 +185,7 @@  discard block
 block discarded – undo
185 185
  * @return void
186 186
  **/
187 187
 function redirige_url_ecrire($script = '', $args = '', $equiv = '') {
188
-	return redirige_par_entete(generer_url_ecrire($script, $args, true), $equiv);
188
+    return redirige_par_entete(generer_url_ecrire($script, $args, true), $equiv);
189 189
 }
190 190
 /**
191 191
  * Renvoie au client le header HTTP avec le message correspondant au code indiqué.
@@ -200,27 +200,27 @@  discard block
 block discarded – undo
200 200
  *     Code d'erreur
201 201
  **/
202 202
 function http_status($status) {
203
-	http_response_code($status);
203
+    http_response_code($status);
204 204
 }
205 205
 
206 206
 // Retourne ce qui va bien pour que le navigateur ne mette pas la page en cache
207 207
 function http_no_cache() {
208
-	if (headers_sent()) {
209
-		spip_log('http_no_cache arrive trop tard');
210
-
211
-		return;
212
-	}
213
-	$charset = empty($GLOBALS['meta']['charset']) ? 'utf-8' : $GLOBALS['meta']['charset'];
214
-
215
-	// selon http://developer.apple.com/internet/safari/faq.html#anchor5
216
-	// il faudrait aussi pour Safari
217
-	// header("Cache-Control: post-check=0, pre-check=0", false)
218
-	// mais ca ne respecte pas
219
-	// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
220
-
221
-	header("Content-Type: text/html; charset=$charset");
222
-	header('Expires: 0');
223
-	header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
224
-	header('Cache-Control: no-cache, must-revalidate');
225
-	header('Pragma: no-cache');
208
+    if (headers_sent()) {
209
+        spip_log('http_no_cache arrive trop tard');
210
+
211
+        return;
212
+    }
213
+    $charset = empty($GLOBALS['meta']['charset']) ? 'utf-8' : $GLOBALS['meta']['charset'];
214
+
215
+    // selon http://developer.apple.com/internet/safari/faq.html#anchor5
216
+    // il faudrait aussi pour Safari
217
+    // header("Cache-Control: post-check=0, pre-check=0", false)
218
+    // mais ca ne respecte pas
219
+    // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
220
+
221
+    header("Content-Type: text/html; charset=$charset");
222
+    header('Expires: 0');
223
+    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
224
+    header('Cache-Control: no-cache, must-revalidate');
225
+    header('Pragma: no-cache');
226 226
 }
Please login to merge, or discard this patch.
ecrire/public/aiguiller.php 1 patch
Indentation   +289 added lines, -289 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 /**
@@ -19,158 +19,158 @@  discard block
 block discarded – undo
19 19
  * @return string
20 20
  */
21 21
 function securiser_redirect_action($redirect) {
22
-	$redirect ??= '';
23
-	// cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
24
-	if (strpos($redirect, '%') !== false) {
25
-		$r2 = urldecode($redirect);
26
-		if (($r3 = securiser_redirect_action($r2)) !== $r2) {
27
-			return $r3;
28
-		}
29
-	}
30
-	if (
31
-		(tester_url_absolue($redirect) or preg_match(',^\w+:,', trim($redirect)))
32
-		and !defined('_AUTORISER_ACTION_ABS_REDIRECT')
33
-	) {
34
-		// si l'url est une url du site, on la laisse passer sans rien faire
35
-		// c'est encore le plus simple
36
-		$base = $GLOBALS['meta']['adresse_site'] . '/';
37
-		if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
38
-			return $redirect;
39
-		}
40
-		$base = url_de_base();
41
-		if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
42
-			return $redirect;
43
-		}
22
+    $redirect ??= '';
23
+    // cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
24
+    if (strpos($redirect, '%') !== false) {
25
+        $r2 = urldecode($redirect);
26
+        if (($r3 = securiser_redirect_action($r2)) !== $r2) {
27
+            return $r3;
28
+        }
29
+    }
30
+    if (
31
+        (tester_url_absolue($redirect) or preg_match(',^\w+:,', trim($redirect)))
32
+        and !defined('_AUTORISER_ACTION_ABS_REDIRECT')
33
+    ) {
34
+        // si l'url est une url du site, on la laisse passer sans rien faire
35
+        // c'est encore le plus simple
36
+        $base = $GLOBALS['meta']['adresse_site'] . '/';
37
+        if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
38
+            return $redirect;
39
+        }
40
+        $base = url_de_base();
41
+        if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
42
+            return $redirect;
43
+        }
44 44
 
45
-		return '';
46
-	}
45
+        return '';
46
+    }
47 47
 
48
-	return $redirect;
48
+    return $redirect;
49 49
 }
50 50
 
51 51
 function traiter_appels_actions() {
52
-	// cas de l'appel qui renvoie une redirection (302) ou rien (204)
53
-	if ($action = _request('action')) {
54
-		include_spip('base/abstract_sql'); // chargement systematique pour les actions
55
-		include_spip('inc/autoriser');
56
-		include_spip('inc/headers');
57
-		include_spip('inc/actions');
58
-		// des actions peuvent appeler _T
59
-		if (!isset($GLOBALS['spip_lang'])) {
60
-			include_spip('inc/lang');
61
-			utiliser_langue_visiteur();
62
-		}
63
-		// si l'action est provoque par un hit {ajax}
64
-		// il faut transmettre l'env ajax au redirect
65
-		// on le met avant dans la query string au cas ou l'action fait elle meme sa redirection
66
-		if (
67
-			($v = _request('var_ajax'))
68
-			and ($v !== 'form')
69
-			and ($args = _request('var_ajax_env'))
70
-			and ($url = _request('redirect'))
71
-		) {
72
-			$url = parametre_url($url, 'var_ajax', $v, '&');
73
-			$url = parametre_url($url, 'var_ajax_env', $args, '&');
74
-			set_request('redirect', $url);
75
-		} else {
76
-			if (_request('redirect')) {
77
-				set_request('redirect', securiser_redirect_action(_request('redirect')));
78
-			}
79
-		}
80
-		$var_f = charger_fonction($action, 'action');
81
-		$var_f();
82
-		if (!isset($GLOBALS['redirect'])) {
83
-			$GLOBALS['redirect'] = _request('redirect') ?? '';
84
-			if ($_SERVER['REQUEST_METHOD'] === 'POST') {
85
-				$GLOBALS['redirect'] = urldecode($GLOBALS['redirect']);
86
-			}
87
-			$GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']);
88
-		}
89
-		if ($url = $GLOBALS['redirect']) {
90
-			// si l'action est provoque par un hit {ajax}
91
-			// il faut transmettre l'env ajax au redirect
92
-			// qui a pu etre defini par l'action
93
-			if (
94
-				($v = _request('var_ajax'))
95
-				and ($v !== 'form')
96
-				and ($args = _request('var_ajax_env'))
97
-			) {
98
-				$url = parametre_url($url, 'var_ajax', $v, '&');
99
-				$url = parametre_url($url, 'var_ajax_env', $args, '&');
100
-				// passer l'ancre en variable pour pouvoir la gerer cote serveur
101
-				$url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url);
102
-			}
103
-			$url = str_replace('&amp;', '&', $url); // les redirections se font en &, pas en en &amp;
104
-			redirige_par_entete($url);
105
-		}
52
+    // cas de l'appel qui renvoie une redirection (302) ou rien (204)
53
+    if ($action = _request('action')) {
54
+        include_spip('base/abstract_sql'); // chargement systematique pour les actions
55
+        include_spip('inc/autoriser');
56
+        include_spip('inc/headers');
57
+        include_spip('inc/actions');
58
+        // des actions peuvent appeler _T
59
+        if (!isset($GLOBALS['spip_lang'])) {
60
+            include_spip('inc/lang');
61
+            utiliser_langue_visiteur();
62
+        }
63
+        // si l'action est provoque par un hit {ajax}
64
+        // il faut transmettre l'env ajax au redirect
65
+        // on le met avant dans la query string au cas ou l'action fait elle meme sa redirection
66
+        if (
67
+            ($v = _request('var_ajax'))
68
+            and ($v !== 'form')
69
+            and ($args = _request('var_ajax_env'))
70
+            and ($url = _request('redirect'))
71
+        ) {
72
+            $url = parametre_url($url, 'var_ajax', $v, '&');
73
+            $url = parametre_url($url, 'var_ajax_env', $args, '&');
74
+            set_request('redirect', $url);
75
+        } else {
76
+            if (_request('redirect')) {
77
+                set_request('redirect', securiser_redirect_action(_request('redirect')));
78
+            }
79
+        }
80
+        $var_f = charger_fonction($action, 'action');
81
+        $var_f();
82
+        if (!isset($GLOBALS['redirect'])) {
83
+            $GLOBALS['redirect'] = _request('redirect') ?? '';
84
+            if ($_SERVER['REQUEST_METHOD'] === 'POST') {
85
+                $GLOBALS['redirect'] = urldecode($GLOBALS['redirect']);
86
+            }
87
+            $GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']);
88
+        }
89
+        if ($url = $GLOBALS['redirect']) {
90
+            // si l'action est provoque par un hit {ajax}
91
+            // il faut transmettre l'env ajax au redirect
92
+            // qui a pu etre defini par l'action
93
+            if (
94
+                ($v = _request('var_ajax'))
95
+                and ($v !== 'form')
96
+                and ($args = _request('var_ajax_env'))
97
+            ) {
98
+                $url = parametre_url($url, 'var_ajax', $v, '&');
99
+                $url = parametre_url($url, 'var_ajax_env', $args, '&');
100
+                // passer l'ancre en variable pour pouvoir la gerer cote serveur
101
+                $url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url);
102
+            }
103
+            $url = str_replace('&amp;', '&', $url); // les redirections se font en &, pas en en &amp;
104
+            redirige_par_entete($url);
105
+        }
106 106
 
107
-		// attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0
108
-		// et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment)
109
-		if (
110
-			!headers_sent()
111
-			and !ob_get_length()
112
-		) {
113
-			http_response_code(204);
114
-		} // No Content
115
-		return true;
116
-	}
107
+        // attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0
108
+        // et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment)
109
+        if (
110
+            !headers_sent()
111
+            and !ob_get_length()
112
+        ) {
113
+            http_response_code(204);
114
+        } // No Content
115
+        return true;
116
+    }
117 117
 
118
-	return false;
118
+    return false;
119 119
 }
120 120
 
121 121
 
122 122
 function refuser_traiter_formulaire_ajax() {
123
-	if (
124
-		$v = _request('var_ajax')
125
-		and $v == 'form'
126
-		and $form = _request('formulaire_action')
127
-		and $args = _request('formulaire_action_args')
128
-		and decoder_contexte_ajax($args, $form) !== false
129
-	) {
130
-		// on est bien dans le contexte de traitement d'un formulaire en ajax
131
-		// mais traiter ne veut pas
132
-		// on le dit a la page qui va resumbit
133
-		// sans ajax
134
-		include_spip('inc/actions');
135
-		ajax_retour('noajax', false);
136
-		exit;
137
-	}
123
+    if (
124
+        $v = _request('var_ajax')
125
+        and $v == 'form'
126
+        and $form = _request('formulaire_action')
127
+        and $args = _request('formulaire_action_args')
128
+        and decoder_contexte_ajax($args, $form) !== false
129
+    ) {
130
+        // on est bien dans le contexte de traitement d'un formulaire en ajax
131
+        // mais traiter ne veut pas
132
+        // on le dit a la page qui va resumbit
133
+        // sans ajax
134
+        include_spip('inc/actions');
135
+        ajax_retour('noajax', false);
136
+        exit;
137
+    }
138 138
 }
139 139
 
140 140
 function traiter_appels_inclusions_ajax() {
141
-	// traiter les appels de bloc ajax (ex: pagination)
142
-	if (
143
-		$v = _request('var_ajax')
144
-		and $v !== 'form'
145
-		and $args = _request('var_ajax_env')
146
-	) {
147
-		include_spip('inc/filtres');
148
-		include_spip('inc/actions');
149
-		if (
150
-			$args = decoder_contexte_ajax($args)
151
-			and $fond = $args['fond']
152
-		) {
153
-			include_spip('public/assembler');
154
-			$contexte = calculer_contexte();
155
-			$contexte = array_merge($args, $contexte);
156
-			$page = recuperer_fond($fond, $contexte, ['trim' => false]);
157
-			$texte = $page;
158
-			if ($ancre = _request('var_ajax_ancre')) {
159
-				// pas n'importe quoi quand meme dans la variable !
160
-				$ancre = str_replace(['<', '"', "'"], ['&lt;', '&quot;', ''], $ancre);
161
-				$texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
162
-			}
163
-		} else {
164
-			include_spip('inc/headers');
165
-			http_response_code(400);
166
-			$texte = _L('signature ajax bloc incorrecte');
167
-		}
168
-		ajax_retour($texte, false);
141
+    // traiter les appels de bloc ajax (ex: pagination)
142
+    if (
143
+        $v = _request('var_ajax')
144
+        and $v !== 'form'
145
+        and $args = _request('var_ajax_env')
146
+    ) {
147
+        include_spip('inc/filtres');
148
+        include_spip('inc/actions');
149
+        if (
150
+            $args = decoder_contexte_ajax($args)
151
+            and $fond = $args['fond']
152
+        ) {
153
+            include_spip('public/assembler');
154
+            $contexte = calculer_contexte();
155
+            $contexte = array_merge($args, $contexte);
156
+            $page = recuperer_fond($fond, $contexte, ['trim' => false]);
157
+            $texte = $page;
158
+            if ($ancre = _request('var_ajax_ancre')) {
159
+                // pas n'importe quoi quand meme dans la variable !
160
+                $ancre = str_replace(['<', '"', "'"], ['&lt;', '&quot;', ''], $ancre);
161
+                $texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
162
+            }
163
+        } else {
164
+            include_spip('inc/headers');
165
+            http_response_code(400);
166
+            $texte = _L('signature ajax bloc incorrecte');
167
+        }
168
+        ajax_retour($texte, false);
169 169
 
170
-		return true; // on a fini le hit
171
-	}
170
+        return true; // on a fini le hit
171
+    }
172 172
 
173
-	return false;
173
+    return false;
174 174
 }
175 175
 
176 176
 // au 1er appel, traite les formulaires dynamiques charger/verifier/traiter
@@ -178,172 +178,172 @@  discard block
 block discarded – undo
178 178
 // Le 1er renvoie True si il faut faire exit a la sortie
179 179
 
180 180
 function traiter_formulaires_dynamiques($get = false) {
181
-	static $post = [];
182
-	static $done = false;
181
+    static $post = [];
182
+    static $done = false;
183 183
 
184
-	if ($get) {
185
-		return $post;
186
-	}
187
-	if ($done) {
188
-		return false;
189
-	}
190
-	$done = true;
184
+    if ($get) {
185
+        return $post;
186
+    }
187
+    if ($done) {
188
+        return false;
189
+    }
190
+    $done = true;
191 191
 
192
-	if (
193
-		!($form = _request('formulaire_action')
194
-		and $args = _request('formulaire_action_args'))
195
-	) {
196
-		return false;
197
-	} // le hit peut continuer normalement
192
+    if (
193
+        !($form = _request('formulaire_action')
194
+        and $args = _request('formulaire_action_args'))
195
+    ) {
196
+        return false;
197
+    } // le hit peut continuer normalement
198 198
 
199
-	// verifier que le post est licite (du meme auteur ou d'une session anonyme)
200
-	$sign = _request('formulaire_action_sign');
201
-	if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
202
-		if (empty($sign)) {
203
-			spip_log("signature ajax form incorrecte : $form (formulaire non signe mais on a une session)", 'formulaires' . _LOG_ERREUR);
204
-			return false;
205
-		}
206
-		$securiser_action = charger_fonction('securiser_action', 'inc');
207
-		$secu = $securiser_action($form, $args, '', -1);
208
-		if ($sign !== $secu['hash']) {
209
-			spip_log("signature ajax form incorrecte : $form (formulaire signe mais ne correspond pas a la session)", 'formulaires' . _LOG_ERREUR);
210
-			return false;
211
-		}
212
-	}
213
-	else {
214
-		if (!empty($sign)) {
215
-			spip_log("signature ajax form incorrecte : $form (formulaire signe mais pas de session)", 'formulaires' . _LOG_ERREUR);
216
-			return false;
217
-		}
218
-	}
199
+    // verifier que le post est licite (du meme auteur ou d'une session anonyme)
200
+    $sign = _request('formulaire_action_sign');
201
+    if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
202
+        if (empty($sign)) {
203
+            spip_log("signature ajax form incorrecte : $form (formulaire non signe mais on a une session)", 'formulaires' . _LOG_ERREUR);
204
+            return false;
205
+        }
206
+        $securiser_action = charger_fonction('securiser_action', 'inc');
207
+        $secu = $securiser_action($form, $args, '', -1);
208
+        if ($sign !== $secu['hash']) {
209
+            spip_log("signature ajax form incorrecte : $form (formulaire signe mais ne correspond pas a la session)", 'formulaires' . _LOG_ERREUR);
210
+            return false;
211
+        }
212
+    }
213
+    else {
214
+        if (!empty($sign)) {
215
+            spip_log("signature ajax form incorrecte : $form (formulaire signe mais pas de session)", 'formulaires' . _LOG_ERREUR);
216
+            return false;
217
+        }
218
+    }
219 219
 
220
-	include_spip('inc/filtres');
221
-	if (($args = decoder_contexte_ajax($args, $form)) === false) {
222
-		spip_log("signature ajax form incorrecte : $form (encodage corrompu)", 'formulaires' . _LOG_ERREUR);
220
+    include_spip('inc/filtres');
221
+    if (($args = decoder_contexte_ajax($args, $form)) === false) {
222
+        spip_log("signature ajax form incorrecte : $form (encodage corrompu)", 'formulaires' . _LOG_ERREUR);
223 223
 
224
-		return false; // continuons le hit comme si de rien etait
225
-	} else {
226
-		include_spip('inc/lang');
227
-		// sauvegarder la lang en cours
228
-		$old_lang = $GLOBALS['spip_lang'];
229
-		// changer la langue avec celle qui a cours dans le formulaire
230
-		// on la depile de $args car c'est un argument implicite masque
231
-		changer_langue(array_shift($args));
224
+        return false; // continuons le hit comme si de rien etait
225
+    } else {
226
+        include_spip('inc/lang');
227
+        // sauvegarder la lang en cours
228
+        $old_lang = $GLOBALS['spip_lang'];
229
+        // changer la langue avec celle qui a cours dans le formulaire
230
+        // on la depile de $args car c'est un argument implicite masque
231
+        changer_langue(array_shift($args));
232 232
 
233 233
 
234
-		// inclure mes_fonctions et autres filtres avant verifier/traiter
235
-		include_fichiers_fonctions();
236
-		// ainsi que l'API SQL bien utile dans verifier/traiter
237
-		include_spip('base/abstract_sql');
234
+        // inclure mes_fonctions et autres filtres avant verifier/traiter
235
+        include_fichiers_fonctions();
236
+        // ainsi que l'API SQL bien utile dans verifier/traiter
237
+        include_spip('base/abstract_sql');
238 238
 
239
-		/**
240
-		 * Pipeline exécuté lors de la soumission d'un formulaire,
241
-		 * mais avant l'appel de la fonction de vérification.
242
-		 */
243
-		pipeline(
244
-			'formulaire_receptionner',
245
-			[
246
-				'args' => ['form' => $form, 'args' => $args],
247
-				'data' => null,
248
-			]
249
-		);
239
+        /**
240
+         * Pipeline exécuté lors de la soumission d'un formulaire,
241
+         * mais avant l'appel de la fonction de vérification.
242
+         */
243
+        pipeline(
244
+            'formulaire_receptionner',
245
+            [
246
+                'args' => ['form' => $form, 'args' => $args],
247
+                'data' => null,
248
+            ]
249
+        );
250 250
 
251
-		$verifier = charger_fonction('verifier', "formulaires/$form/", true);
252
-		$post["erreurs_$form"] = pipeline(
253
-			'formulaire_verifier',
254
-			[
255
-				'args' => ['form' => $form, 'args' => $args],
256
-				'data' => $verifier ? $verifier(...$args) : []
257
-			]
258
-		);
259
-		// prise en charge CVT multi etape si besoin
260
-		if (_request('cvtm_prev_post')) {
261
-			include_spip('inc/cvt_multietapes');
262
-			$post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes(
263
-				['form' => $form, 'args' => $args],
264
-				$post["erreurs_$form"]
265
-			);
266
-		}
251
+        $verifier = charger_fonction('verifier', "formulaires/$form/", true);
252
+        $post["erreurs_$form"] = pipeline(
253
+            'formulaire_verifier',
254
+            [
255
+                'args' => ['form' => $form, 'args' => $args],
256
+                'data' => $verifier ? $verifier(...$args) : []
257
+            ]
258
+        );
259
+        // prise en charge CVT multi etape si besoin
260
+        if (_request('cvtm_prev_post')) {
261
+            include_spip('inc/cvt_multietapes');
262
+            $post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes(
263
+                ['form' => $form, 'args' => $args],
264
+                $post["erreurs_$form"]
265
+            );
266
+        }
267 267
 
268
-		// accessibilite : si des erreurs mais pas de message general l'ajouter
269
-		if ((isset($post["erreurs_$form"]) and is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) and !isset($post["erreurs_$form"]['message_erreur'])) {
270
-			$post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(
271
-				is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0,
272
-				'avis_1_erreur_saisie',
273
-				'avis_nb_erreurs_saisie'
274
-			);
275
-		}
268
+        // accessibilite : si des erreurs mais pas de message general l'ajouter
269
+        if ((isset($post["erreurs_$form"]) and is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) and !isset($post["erreurs_$form"]['message_erreur'])) {
270
+            $post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(
271
+                is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0,
272
+                'avis_1_erreur_saisie',
273
+                'avis_nb_erreurs_saisie'
274
+            );
275
+        }
276 276
 
277
-		// si on ne demandait qu'une verif json
278
-		if (_request('formulaire_action_verifier_json')) {
279
-			include_spip('inc/json');
280
-			include_spip('inc/actions');
281
-			ajax_retour(json_encode($post["erreurs_$form"], JSON_THROW_ON_ERROR), 'text/plain');
277
+        // si on ne demandait qu'une verif json
278
+        if (_request('formulaire_action_verifier_json')) {
279
+            include_spip('inc/json');
280
+            include_spip('inc/actions');
281
+            ajax_retour(json_encode($post["erreurs_$form"], JSON_THROW_ON_ERROR), 'text/plain');
282 282
 
283
-			return true; // on a fini le hit
284
-		}
285
-		$retour = '';
286
-		if (isset($post["erreurs_$form"]) and ((is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) == 0)) {
287
-			$rev = '';
288
-			if ($traiter = charger_fonction('traiter', "formulaires/$form/", true)) {
289
-				$rev = $traiter(...$args);
290
-			}
283
+            return true; // on a fini le hit
284
+        }
285
+        $retour = '';
286
+        if (isset($post["erreurs_$form"]) and ((is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) == 0)) {
287
+            $rev = '';
288
+            if ($traiter = charger_fonction('traiter', "formulaires/$form/", true)) {
289
+                $rev = $traiter(...$args);
290
+            }
291 291
 
292
-			$rev = pipeline(
293
-				'formulaire_traiter',
294
-				[
295
-					'args' => ['form' => $form, 'args' => $args],
296
-					'data' => $rev
297
-				]
298
-			);
299
-			// le retour de traiter est
300
-			// un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx)
301
-			// il permet le pipelinage, en particulier
302
-			// en y passant l'id de l'objet cree/modifie
303
-			// si message_erreur est present, on considere que le traitement a echoue
304
-			$post["message_ok_$form"] = '';
305
-			// on peut avoir message_ok et message_erreur
306
-			if (isset($rev['message_ok'])) {
307
-				$post["message_ok_$form"] = $rev['message_ok'];
308
-			}
292
+            $rev = pipeline(
293
+                'formulaire_traiter',
294
+                [
295
+                    'args' => ['form' => $form, 'args' => $args],
296
+                    'data' => $rev
297
+                ]
298
+            );
299
+            // le retour de traiter est
300
+            // un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx)
301
+            // il permet le pipelinage, en particulier
302
+            // en y passant l'id de l'objet cree/modifie
303
+            // si message_erreur est present, on considere que le traitement a echoue
304
+            $post["message_ok_$form"] = '';
305
+            // on peut avoir message_ok et message_erreur
306
+            if (isset($rev['message_ok'])) {
307
+                $post["message_ok_$form"] = $rev['message_ok'];
308
+            }
309 309
 
310
-			// verifier si traiter n'a pas echoue avec une erreur :
311
-			if (isset($rev['message_erreur'])) {
312
-				$post["erreurs_$form"]['message_erreur'] = $rev['message_erreur'];
313
-				// si il y a une erreur on ne redirige pas
314
-			} else {
315
-				// sinon faire ce qu'il faut :
316
-				if (isset($rev['editable'])) {
317
-					$post["editable_$form"] = $rev['editable'];
318
-				}
319
-				// si une redirection est demandee, appeler redirigae_formulaire qui choisira
320
-				// le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue)
321
-				if (isset($rev['redirect']) and $rev['redirect']) {
322
-					include_spip('inc/headers');
323
-					[$masque, $message] = redirige_formulaire($rev['redirect'], '', 'ajaxform');
324
-					$post["message_ok_$form"] .= $message;
325
-					$retour .= $masque;
326
-				}
327
-			}
328
-		}
329
-		// si le formulaire a ete soumis en ajax, on le renvoie direct !
330
-		if (_request('var_ajax')) {
331
-			if (find_in_path('formulaire_.php', 'balise/', true)) {
332
-				include_spip('inc/actions');
333
-				include_spip('public/assembler');
334
-				$retour .= inclure_balise_dynamique(balise_formulaire__dyn($form, ...$args), false);
335
-				// on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
336
-				// sans cela le formulaire n'est pas actif apres le hit ajax
337
-				// la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
338
-				$retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
339
-				ajax_retour($retour, false);
310
+            // verifier si traiter n'a pas echoue avec une erreur :
311
+            if (isset($rev['message_erreur'])) {
312
+                $post["erreurs_$form"]['message_erreur'] = $rev['message_erreur'];
313
+                // si il y a une erreur on ne redirige pas
314
+            } else {
315
+                // sinon faire ce qu'il faut :
316
+                if (isset($rev['editable'])) {
317
+                    $post["editable_$form"] = $rev['editable'];
318
+                }
319
+                // si une redirection est demandee, appeler redirigae_formulaire qui choisira
320
+                // le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue)
321
+                if (isset($rev['redirect']) and $rev['redirect']) {
322
+                    include_spip('inc/headers');
323
+                    [$masque, $message] = redirige_formulaire($rev['redirect'], '', 'ajaxform');
324
+                    $post["message_ok_$form"] .= $message;
325
+                    $retour .= $masque;
326
+                }
327
+            }
328
+        }
329
+        // si le formulaire a ete soumis en ajax, on le renvoie direct !
330
+        if (_request('var_ajax')) {
331
+            if (find_in_path('formulaire_.php', 'balise/', true)) {
332
+                include_spip('inc/actions');
333
+                include_spip('public/assembler');
334
+                $retour .= inclure_balise_dynamique(balise_formulaire__dyn($form, ...$args), false);
335
+                // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
336
+                // sans cela le formulaire n'est pas actif apres le hit ajax
337
+                // la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
338
+                $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
339
+                ajax_retour($retour, false);
340 340
 
341
-				return true; // on a fini le hit
342
-			}
343
-		}
344
-		// restaurer la lang en cours
345
-		changer_langue($old_lang);
346
-	}
341
+                return true; // on a fini le hit
342
+            }
343
+        }
344
+        // restaurer la lang en cours
345
+        changer_langue($old_lang);
346
+    }
347 347
 
348
-	return false; // le hit peut continuer normalement
348
+    return false; // le hit peut continuer normalement
349 349
 }
Please login to merge, or discard this patch.