Completed
Push — master ( 8b5a3c...b0cbd6 )
by cam
01:56
created
ecrire/auth/ldap.php 2 patches
Indentation   +174 added lines, -174 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 // Authentifie via LDAP et retourne la ligne SQL decrivant l'utilisateur si ok
@@ -24,12 +24,12 @@  discard block
 block discarded – undo
24 24
 // Attributs LDAP correspondants a ceux de SPIP, notamment pour le login
25 25
 // ne pas ecraser une definition perso dans mes_options
26 26
 if (!isset($GLOBALS['ldap_attributes']) || !is_array($GLOBALS['ldap_attributes'])) {
27
-	$GLOBALS['ldap_attributes'] = [
28
-		'login' => ['sAMAccountName', 'uid', 'login', 'userid', 'cn', 'sn'],
29
-		'nom' => 'cn',
30
-		'email' => 'mail',
31
-		'bio' => 'description'
32
-	];
27
+    $GLOBALS['ldap_attributes'] = [
28
+        'login' => ['sAMAccountName', 'uid', 'login', 'userid', 'cn', 'sn'],
29
+        'nom' => 'cn',
30
+        'email' => 'mail',
31
+        'bio' => 'description'
32
+    ];
33 33
 }
34 34
 
35 35
 /**
@@ -55,49 +55,49 @@  discard block
 block discarded – undo
55 55
  */
56 56
 function auth_ldap_dist($login, #[\SensitiveParameter] $pass, $serveur = '', $phpauth = false) {
57 57
 
58
-	#spip_log("ldap $login " . ($pass ? "mdp fourni" : "mdp absent"));
59
-
60
-	// Utilisateur connu ?
61
-	// si http auth, inutile de reauthentifier: cela
62
-	// ne marchera pas avec auth http autre que basic.
63
-	$checkpass = !isset($_SERVER['REMOTE_USER']);
64
-	if (!($dn = auth_ldap_search($login, $pass, $checkpass, $serveur))) {
65
-		return [];
66
-	}
67
-	$credentials_ldap = ['ldap_dn' => $dn, 'ldap_password' => $pass];
68
-
69
-	// Si l'utilisateur figure deja dans la base, y recuperer les infos
70
-	$r = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login) . " AND source='ldap'", '', '', '', '', $serveur);
71
-
72
-	if ($r) {
73
-		return array_merge($r, $credentials_ldap);
74
-	}
75
-
76
-	// sinon importer les infos depuis LDAP,
77
-
78
-	if (
79
-		$GLOBALS['meta']['ldap_statut_import'] && ($desc = auth_ldap_retrouver($dn, [], $serveur))
80
-	) {
81
-		// rajouter le statut indique  a l'install
82
-		$desc['statut'] = $GLOBALS['meta']['ldap_statut_import'];
83
-		$desc['login'] = $login;
84
-		$desc['source'] = 'ldap';
85
-		$desc['pass'] = '';
86
-
87
-		$r = sql_insertq('spip_auteurs', $desc, [], $serveur);
88
-	}
89
-
90
-	if ($r) {
91
-		return array_merge(
92
-			$credentials_ldap,
93
-			sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . (int) $r, '', '', '', '', $serveur)
94
-		);
95
-	}
96
-
97
-	// sinon echec
98
-	spip_log("Creation de l'auteur '$login' impossible");
99
-
100
-	return [];
58
+    #spip_log("ldap $login " . ($pass ? "mdp fourni" : "mdp absent"));
59
+
60
+    // Utilisateur connu ?
61
+    // si http auth, inutile de reauthentifier: cela
62
+    // ne marchera pas avec auth http autre que basic.
63
+    $checkpass = !isset($_SERVER['REMOTE_USER']);
64
+    if (!($dn = auth_ldap_search($login, $pass, $checkpass, $serveur))) {
65
+        return [];
66
+    }
67
+    $credentials_ldap = ['ldap_dn' => $dn, 'ldap_password' => $pass];
68
+
69
+    // Si l'utilisateur figure deja dans la base, y recuperer les infos
70
+    $r = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login) . " AND source='ldap'", '', '', '', '', $serveur);
71
+
72
+    if ($r) {
73
+        return array_merge($r, $credentials_ldap);
74
+    }
75
+
76
+    // sinon importer les infos depuis LDAP,
77
+
78
+    if (
79
+        $GLOBALS['meta']['ldap_statut_import'] && ($desc = auth_ldap_retrouver($dn, [], $serveur))
80
+    ) {
81
+        // rajouter le statut indique  a l'install
82
+        $desc['statut'] = $GLOBALS['meta']['ldap_statut_import'];
83
+        $desc['login'] = $login;
84
+        $desc['source'] = 'ldap';
85
+        $desc['pass'] = '';
86
+
87
+        $r = sql_insertq('spip_auteurs', $desc, [], $serveur);
88
+    }
89
+
90
+    if ($r) {
91
+        return array_merge(
92
+            $credentials_ldap,
93
+            sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . (int) $r, '', '', '', '', $serveur)
94
+        );
95
+    }
96
+
97
+    // sinon echec
98
+    spip_log("Creation de l'auteur '$login' impossible");
99
+
100
+    return [];
101 101
 }
102 102
 
103 103
 /**
@@ -111,36 +111,36 @@  discard block
 block discarded – undo
111 111
  * @return array
112 112
  */
113 113
 function auth_ldap_connect($serveur = '') {
114
-	include_spip('base/connect_sql');
115
-	static $connexions_ldap = [];
116
-	if (isset($connexions_ldap[$serveur])) {
117
-		return $connexions_ldap[$serveur];
118
-	}
119
-	$connexion = spip_connect($serveur);
120
-	if (!is_array($connexion['ldap'])) {
121
-		if ($connexion['authentification']['ldap']) {
122
-			$f = _DIR_CONNECT . $connexion['authentification']['ldap'];
123
-			unset($GLOBALS['ldap_link']);
124
-			if (is_readable($f)) {
125
-				include_once($f);
126
-			};
127
-			if (isset($GLOBALS['ldap_link'])) {
128
-				$connexion['ldap'] = [
129
-					'link' => $GLOBALS['ldap_link'],
130
-					'base' => $GLOBALS['ldap_base']
131
-				];
132
-			} else {
133
-				spip_log("connection LDAP $serveur mal definie dans $f");
134
-			}
135
-			if (isset($GLOBALS['ldap_champs'])) {
136
-				$connexion['ldap']['attributes'] = $GLOBALS['ldap_champs'];
137
-			}
138
-		} else {
139
-			spip_log("connection LDAP $serveur inconnue");
140
-		}
141
-	}
142
-
143
-	return $connexions_ldap[$serveur] = $connexion['ldap'];
114
+    include_spip('base/connect_sql');
115
+    static $connexions_ldap = [];
116
+    if (isset($connexions_ldap[$serveur])) {
117
+        return $connexions_ldap[$serveur];
118
+    }
119
+    $connexion = spip_connect($serveur);
120
+    if (!is_array($connexion['ldap'])) {
121
+        if ($connexion['authentification']['ldap']) {
122
+            $f = _DIR_CONNECT . $connexion['authentification']['ldap'];
123
+            unset($GLOBALS['ldap_link']);
124
+            if (is_readable($f)) {
125
+                include_once($f);
126
+            };
127
+            if (isset($GLOBALS['ldap_link'])) {
128
+                $connexion['ldap'] = [
129
+                    'link' => $GLOBALS['ldap_link'],
130
+                    'base' => $GLOBALS['ldap_base']
131
+                ];
132
+            } else {
133
+                spip_log("connection LDAP $serveur mal definie dans $f");
134
+            }
135
+            if (isset($GLOBALS['ldap_champs'])) {
136
+                $connexion['ldap']['attributes'] = $GLOBALS['ldap_champs'];
137
+            }
138
+        } else {
139
+            spip_log("connection LDAP $serveur inconnue");
140
+        }
141
+    }
142
+
143
+    return $connexions_ldap[$serveur] = $connexion['ldap'];
144 144
 }
145 145
 
146 146
 /**
@@ -154,52 +154,52 @@  discard block
 block discarded – undo
154 154
  *    Le login trouvé ou chaine vide si non trouvé
155 155
  */
156 156
 function auth_ldap_search($login, #[\SensitiveParameter] $pass, $checkpass = true, $serveur = '') {
157
-	// Securite anti-injection et contre un serveur LDAP laxiste
158
-	$login_search = preg_replace('/[^-@._\s\d\w]/', '', $login);
159
-	if (!strlen($login_search) || $checkpass && !strlen($pass)) {
160
-		return '';
161
-	}
162
-
163
-	// verifier la connexion
164
-	if (!$ldap = auth_ldap_connect($serveur)) {
165
-		return '';
166
-	}
167
-
168
-	$ldap_link = $ldap['link'] ?? null;
169
-	$ldap_base = $ldap['base'] ?? null;
170
-	$desc = empty($ldap['attributes']) ? $GLOBALS['ldap_attributes'] : $ldap['attributes'];
171
-
172
-	$logins = is_array($desc['login']) ? $desc['login'] : [$desc['login']];
173
-
174
-	// Tenter une recherche pour essayer de retrouver le DN
175
-	foreach ($logins as $att) {
176
-		$result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", ['dn']);
177
-		$info = @ldap_get_entries($ldap_link, $result);
178
-		// Ne pas accepter les resultats si plus d'une entree
179
-		// (on veut un attribut unique)
180
-
181
-		if (is_array($info) && $info['count'] == 1) {
182
-			$dn = $info[0]['dn'];
183
-			if (!$checkpass) {
184
-				return $dn;
185
-			}
186
-			if (@ldap_bind($ldap_link, $dn, $pass)) {
187
-				return $dn;
188
-			}
189
-		}
190
-	}
191
-
192
-	if ($checkpass && !isset($dn)) {
193
-		// Si echec, essayer de deviner le DN
194
-		foreach ($logins as $att) {
195
-			$dn = "$att=$login_search, $ldap_base";
196
-			if (@ldap_bind($ldap_link, $dn, $pass)) {
197
-				return "$att=$login_search, $ldap_base";
198
-			}
199
-		}
200
-	}
201
-
202
-	return '';
157
+    // Securite anti-injection et contre un serveur LDAP laxiste
158
+    $login_search = preg_replace('/[^-@._\s\d\w]/', '', $login);
159
+    if (!strlen($login_search) || $checkpass && !strlen($pass)) {
160
+        return '';
161
+    }
162
+
163
+    // verifier la connexion
164
+    if (!$ldap = auth_ldap_connect($serveur)) {
165
+        return '';
166
+    }
167
+
168
+    $ldap_link = $ldap['link'] ?? null;
169
+    $ldap_base = $ldap['base'] ?? null;
170
+    $desc = empty($ldap['attributes']) ? $GLOBALS['ldap_attributes'] : $ldap['attributes'];
171
+
172
+    $logins = is_array($desc['login']) ? $desc['login'] : [$desc['login']];
173
+
174
+    // Tenter une recherche pour essayer de retrouver le DN
175
+    foreach ($logins as $att) {
176
+        $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", ['dn']);
177
+        $info = @ldap_get_entries($ldap_link, $result);
178
+        // Ne pas accepter les resultats si plus d'une entree
179
+        // (on veut un attribut unique)
180
+
181
+        if (is_array($info) && $info['count'] == 1) {
182
+            $dn = $info[0]['dn'];
183
+            if (!$checkpass) {
184
+                return $dn;
185
+            }
186
+            if (@ldap_bind($ldap_link, $dn, $pass)) {
187
+                return $dn;
188
+            }
189
+        }
190
+    }
191
+
192
+    if ($checkpass && !isset($dn)) {
193
+        // Si echec, essayer de deviner le DN
194
+        foreach ($logins as $att) {
195
+            $dn = "$att=$login_search, $ldap_base";
196
+            if (@ldap_bind($ldap_link, $dn, $pass)) {
197
+                return "$att=$login_search, $ldap_base";
198
+            }
199
+        }
200
+    }
201
+
202
+    return '';
203 203
 }
204 204
 
205 205
 /**
@@ -211,40 +211,40 @@  discard block
 block discarded – undo
211 211
  * @return array
212 212
  */
213 213
 function auth_ldap_retrouver($dn, $desc = [], $serveur = '') {
214
-	// Lire les infos sur l'utilisateur a partir de son DN depuis LDAP
214
+    // Lire les infos sur l'utilisateur a partir de son DN depuis LDAP
215 215
 
216
-	if (!$ldap = auth_ldap_connect($serveur)) {
217
-		spip_log("ldap $serveur injoignable");
216
+    if (!$ldap = auth_ldap_connect($serveur)) {
217
+        spip_log("ldap $serveur injoignable");
218 218
 
219
-		return [];
220
-	}
219
+        return [];
220
+    }
221 221
 
222
-	$ldap_link = $ldap['link'];
223
-	if (!$desc) {
224
-		$desc = $ldap['attributes'] ?: $GLOBALS['ldap_attributes'];
225
-		unset($desc['login']);
226
-	}
227
-	$result = @ldap_read($ldap_link, $dn, 'objectClass=*', array_values($desc));
222
+    $ldap_link = $ldap['link'];
223
+    if (!$desc) {
224
+        $desc = $ldap['attributes'] ?: $GLOBALS['ldap_attributes'];
225
+        unset($desc['login']);
226
+    }
227
+    $result = @ldap_read($ldap_link, $dn, 'objectClass=*', array_values($desc));
228 228
 
229
-	if (!$result) {
230
-		return [];
231
-	}
229
+    if (!$result) {
230
+        return [];
231
+    }
232 232
 
233
-	// Recuperer les donnees du premier (unique?) compte de l'auteur
234
-	$val = @ldap_get_entries($ldap_link, $result);
235
-	if (!is_array($val) || !is_array($val[0])) {
236
-		return [];
237
-	}
238
-	$val = $val[0];
233
+    // Recuperer les donnees du premier (unique?) compte de l'auteur
234
+    $val = @ldap_get_entries($ldap_link, $result);
235
+    if (!is_array($val) || !is_array($val[0])) {
236
+        return [];
237
+    }
238
+    $val = $val[0];
239 239
 
240
-	// Convertir depuis UTF-8 (jeu de caracteres par defaut)
241
-	include_spip('inc/charsets');
240
+    // Convertir depuis UTF-8 (jeu de caracteres par defaut)
241
+    include_spip('inc/charsets');
242 242
 
243
-	foreach ($desc as $k => $v) {
244
-		$desc[$k] = importer_charset($val[strtolower((string) $v)][0], 'utf-8');
245
-	}
243
+    foreach ($desc as $k => $v) {
244
+        $desc[$k] = importer_charset($val[strtolower((string) $v)][0], 'utf-8');
245
+    }
246 246
 
247
-	return $desc;
247
+    return $desc;
248 248
 }
249 249
 
250 250
 
@@ -256,7 +256,7 @@  discard block
 block discarded – undo
256 256
  * @return string
257 257
  */
258 258
 function auth_ldap_retrouver_login($login, $serveur = '') {
259
-	return auth_ldap_search($login, '', false, $serveur) ? $login : '';
259
+    return auth_ldap_search($login, '', false, $serveur) ? $login : '';
260 260
 }
261 261
 
262 262
 /**
@@ -276,9 +276,9 @@  discard block
 block discarded – undo
276 276
  *   Message d'erreur si login non valide, chaîne vide sinon
277 277
  */
278 278
 function auth_ldap_verifier_pass($login, #[\SensitiveParameter] $new_pass, $id_auteur = 0, $serveur = '') {
279
-	include_spip('auth/spip');
279
+    include_spip('auth/spip');
280 280
 
281
-	return auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur);
281
+    return auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur);
282 282
 }
283 283
 
284 284
 /**
@@ -299,7 +299,7 @@  discard block
 block discarded – undo
299 299
  *   ```
300 300
  */
301 301
 function auth_ldap_autoriser_modifier_pass($serveur = '') {
302
-	return true;
302
+    return true;
303 303
 }
304 304
 
305 305
 /**
@@ -317,22 +317,22 @@  discard block
 block discarded – undo
317 317
  *    Informe du succès ou de l'echec du changement du mot de passe
318 318
  */
319 319
 function auth_ldap_modifier_pass($login, #[\SensitiveParameter] $new_pass, $id_auteur, $serveur = '') {
320
-	if (is_null($new_pass) || auth_ldap_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
321
-		return false;
322
-	}
323
-	if (!$ldap = auth_ldap_connect($serveur)) {
324
-		return false;
325
-	}
326
-	$link = $ldap['link'];
327
-	include_spip('inc/session');
328
-	$dn = session_get('ldap_dn');
329
-	if ('' == $dn) {
330
-		return false;
331
-	}
332
-	if (!ldap_bind($link, $dn, session_get('ldap_password'))) {
333
-		return false;
334
-	}
335
-	$encoded_pass = '{MD5}' . base64_encode(pack('H*', md5((string) $new_pass)));
336
-
337
-	return ldap_mod_replace($link, $dn, ['userPassword' => $encoded_pass]);
320
+    if (is_null($new_pass) || auth_ldap_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
321
+        return false;
322
+    }
323
+    if (!$ldap = auth_ldap_connect($serveur)) {
324
+        return false;
325
+    }
326
+    $link = $ldap['link'];
327
+    include_spip('inc/session');
328
+    $dn = session_get('ldap_dn');
329
+    if ('' == $dn) {
330
+        return false;
331
+    }
332
+    if (!ldap_bind($link, $dn, session_get('ldap_password'))) {
333
+        return false;
334
+    }
335
+    $encoded_pass = '{MD5}' . base64_encode(pack('H*', md5((string) $new_pass)));
336
+
337
+    return ldap_mod_replace($link, $dn, ['userPassword' => $encoded_pass]);
338 338
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -67,7 +67,7 @@  discard block
 block discarded – undo
67 67
 	$credentials_ldap = ['ldap_dn' => $dn, 'ldap_password' => $pass];
68 68
 
69 69
 	// Si l'utilisateur figure deja dans la base, y recuperer les infos
70
-	$r = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login) . " AND source='ldap'", '', '', '', '', $serveur);
70
+	$r = sql_fetsel('*', 'spip_auteurs', 'login='.sql_quote($login)." AND source='ldap'", '', '', '', '', $serveur);
71 71
 
72 72
 	if ($r) {
73 73
 		return array_merge($r, $credentials_ldap);
@@ -90,7 +90,7 @@  discard block
 block discarded – undo
90 90
 	if ($r) {
91 91
 		return array_merge(
92 92
 			$credentials_ldap,
93
-			sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . (int) $r, '', '', '', '', $serveur)
93
+			sql_fetsel('*', 'spip_auteurs', 'id_auteur='.(int) $r, '', '', '', '', $serveur)
94 94
 		);
95 95
 	}
96 96
 
@@ -119,7 +119,7 @@  discard block
 block discarded – undo
119 119
 	$connexion = spip_connect($serveur);
120 120
 	if (!is_array($connexion['ldap'])) {
121 121
 		if ($connexion['authentification']['ldap']) {
122
-			$f = _DIR_CONNECT . $connexion['authentification']['ldap'];
122
+			$f = _DIR_CONNECT.$connexion['authentification']['ldap'];
123 123
 			unset($GLOBALS['ldap_link']);
124 124
 			if (is_readable($f)) {
125 125
 				include_once($f);
@@ -332,7 +332,7 @@  discard block
 block discarded – undo
332 332
 	if (!ldap_bind($link, $dn, session_get('ldap_password'))) {
333 333
 		return false;
334 334
 	}
335
-	$encoded_pass = '{MD5}' . base64_encode(pack('H*', md5((string) $new_pass)));
335
+	$encoded_pass = '{MD5}'.base64_encode(pack('H*', md5((string) $new_pass)));
336 336
 
337 337
 	return ldap_mod_replace($link, $dn, ['userPassword' => $encoded_pass]);
338 338
 }
Please login to merge, or discard this patch.
ecrire/auth/spip.php 3 patches
Braces   +5 added lines, -10 removed lines patch added patch discarded remove patch
@@ -110,14 +110,12 @@  discard block
 block discarded – undo
110 110
 					spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE);
111 111
 					if ($cles->save()) {
112 112
 						$secret = $cles->getSecretAuth();
113
-					}
114
-					else {
113
+					} else {
115 114
 						spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
116 115
 						// et on echoue car on ne veut pas que la situation reste telle quelle
117 116
 						raler_fichier(_DIR_ETC . 'cles.php');
118 117
 					}
119
-				}
120
-				else {
118
+				} else {
121 119
 					spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR);
122 120
 					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . (int) $row['id_auteur']);
123 121
 				}
@@ -125,8 +123,7 @@  discard block
 block discarded – undo
125 123
 
126 124
 			if (!$secret || !Password::verifier($pass, $row['pass'], $secret)) {
127 125
 				unset($row);
128
-			}
129
-			else {
126
+			} else {
130 127
 				spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via Password::verifier", 'auth' . _LOG_DEBUG);
131 128
 			}
132 129
 			break;
@@ -234,8 +231,7 @@  discard block
 block discarded – undo
234 231
 		spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
235 232
 		// et on echoue car on ne veut pas que la situation reste telle quelle
236 233
 		raler_fichier(_DIR_ETC . 'cles.php');
237
-	}
238
-	else {
234
+	} else {
239 235
 		spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR);
240 236
 	}
241 237
 	return false;
@@ -468,8 +464,7 @@  discard block
 block discarded – undo
468 464
 	if (!$secret) {
469 465
 		if (auth_spip_initialiser_secret()) {
470 466
 			$secret = $cles->getSecretAuth();
471
-		}
472
-		else {
467
+		} else {
473 468
 			return false;
474 469
 		}
475 470
 	}
Please login to merge, or discard this patch.
Indentation   +397 added lines, -397 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
 use Spip\Chiffrer\SpipCles;
19 19
 
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 /**
@@ -33,167 +33,167 @@  discard block
 block discarded – undo
33 33
  */
34 34
 function auth_spip_dist($login, #[\SensitiveParameter] $pass, $serveur = '', $phpauth = false) {
35 35
 
36
-	$methode = null;
37
-	// retrouver le login
38
-	$login = auth_spip_retrouver_login($login);
39
-	// login inconnu, n'allons pas plus loin
40
-	if (!$login) {
41
-		return [];
42
-	}
43
-
44
-	$md5pass = '';
45
-	$shapass = $shanext = '';
46
-	$auteur_peut_sauver_cles = false;
47
-
48
-	if ($pass) {
49
-		$row = sql_fetsel(
50
-			'*',
51
-			'spip_auteurs',
52
-			'login=' . sql_quote($login, $serveur, 'text') . " AND statut<>'5poubelle'",
53
-			'',
54
-			'',
55
-			'',
56
-			'',
57
-			$serveur
58
-		);
59
-
60
-		// lever un flag si cet auteur peut sauver les cles
61
-		if ($row['statut'] === '0minirezo' && $row['webmestre'] === 'oui' && isset($row['backup_cles'])) {
62
-			$auteur_peut_sauver_cles = true;
63
-		}
64
-	}
65
-
66
-	// login inexistant ou mot de passe vide
67
-	if (!$pass || !$row) {
68
-		return [];
69
-	}
70
-
71
-	$cles = SpipCles::instance();
72
-	$secret = $cles->getSecretAuth();
73
-
74
-	$hash = null;
75
-	switch (strlen((string) $row['pass'])) {
76
-		// legacy = md5 ou sha256
77
-		case 32:
78
-			// tres anciens mots de passe encodes en md5(alea.pass)
79
-			$hash = md5($row['alea_actuel'] . $pass);
80
-			$methode = 'md5';
81
-		case 64:
82
-			if (empty($hash)) {
83
-				// anciens mots de passe encodes en sha256(alea.pass)
84
-				$hash =  hash('sha256', $row['alea_actuel'] . $pass);
85
-				$methode = 'sha256';
86
-			}
87
-			if ($row['pass'] === $hash) {
88
-				spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via $methode", 'auth' . _LOG_DEBUG);
89
-				// ce n'est pas cense arriver, mais si jamais c'est un backup inutilisable, il faut le nettoyer pour ne pas bloquer la creation d'une nouvelle cle d'auth
90
-				if (!empty($row['backup_cles'])) {
91
-					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . (int) $row['id_auteur']);
92
-				}
93
-				break;
94
-			}
95
-
96
-		// on teste la methode par defaut, au cas ou ce serait un pass moderne qui a la malchance d'etre en 64char de long
97
-
98
-		case 60:
99
-		case 98:
100
-		default:
101
-			// doit-on restaurer un backup des cles ?
102
-			// si on a le bon pass on peut decoder le backup, retrouver la cle, et du coup valider le pass
103
-			if (
104
-				!$secret
105
-				&& $auteur_peut_sauver_cles
106
-				&& !empty($row['backup_cles'])
107
-			) {
108
-				if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) {
109
-					spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE);
110
-					if ($cles->save()) {
111
-						$secret = $cles->getSecretAuth();
112
-					}
113
-					else {
114
-						spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
115
-						// et on echoue car on ne veut pas que la situation reste telle quelle
116
-						raler_fichier(_DIR_ETC . 'cles.php');
117
-					}
118
-				}
119
-				else {
120
-					spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR);
121
-					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . (int) $row['id_auteur']);
122
-				}
123
-			}
124
-
125
-			if (!$secret || !Password::verifier($pass, $row['pass'], $secret)) {
126
-				unset($row);
127
-			}
128
-			else {
129
-				spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via Password::verifier", 'auth' . _LOG_DEBUG);
130
-			}
131
-			break;
132
-	}
133
-
134
-	// Migration depuis ancienne version : si on a pas encore de cle
135
-	// ET si c'est le login d'un auteur qui peut sauver la cle
136
-	// créer la clé (en s'assurant bien que personne n'a de backup d'un precedent fichier cle.php)
137
-	// si c'est un auteur normal, on ne fait rien, il garde son ancien pass hashé en sha256 en attendant le login d'un webmestre
138
-	if (!$secret && $auteur_peut_sauver_cles && auth_spip_initialiser_secret()) {
139
-		$secret = $cles->getSecretAuth();
140
-	}
141
-
142
-	// login/mot de passe incorrect
143
-	if (empty($row)) {
144
-		return [];
145
-	}
146
-
147
-	// fait tourner le codage du pass dans la base
148
-	// sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action()
149
-	if (!$phpauth && $secret) {
150
-		include_spip('inc/acces'); // pour creer_uniqid et verifier_htaccess
151
-		$pass_hash_next = Password::hacher($pass, $secret);
152
-		if ($pass_hash_next) {
153
-			$set = [
154
-				'alea_actuel' => 'alea_futur', // @deprecated 4.1
155
-				'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text'), // @deprecated 4.1
156
-				'pass' => sql_quote($pass_hash_next, $serveur, 'text'),
157
-			];
158
-
159
-			// regenerer un htpass si on a active/desactive le plugin htpasswd
160
-			// et/ou que l'algo a change - pour etre certain de toujours utiliser le bon algo
161
-			$htpass = generer_htpass($pass);
162
-			if (strlen((string) $htpass) !== strlen((string) $row['htpass'])) {
163
-				$set['htpass'] = sql_quote($htpass, $serveur, 'text');
164
-			}
165
-
166
-			// a chaque login de webmestre : sauvegarde chiffree des clés du site (avec les pass du webmestre)
167
-			if ($auteur_peut_sauver_cles) {
168
-				$set['backup_cles'] = sql_quote($cles->backup($pass), $serveur, 'text');
169
-			}
170
-
171
-			@sql_update(
172
-				'spip_auteurs',
173
-				$set,
174
-				'id_auteur=' . (int) $row['id_auteur'] . ' AND pass=' . sql_quote(
175
-					$row['pass'],
176
-					$serveur,
177
-					'text'
178
-				),
179
-				[],
180
-				$serveur
181
-			);
182
-
183
-			// si on a change le htpass car changement d'algo, regenerer les fichiers htpasswd
184
-			if (isset($set['htpass'])) {
185
-				ecrire_acces();
186
-			}
187
-		}
188
-
189
-		// En profiter pour verifier la securite de tmp/
190
-		// Si elle ne fonctionne pas a l'installation, prevenir
191
-		if (!verifier_htaccess(_DIR_TMP) && defined('_ECRIRE_INSTALL')) {
192
-			return false;
193
-		}
194
-	}
195
-
196
-	return $row;
36
+    $methode = null;
37
+    // retrouver le login
38
+    $login = auth_spip_retrouver_login($login);
39
+    // login inconnu, n'allons pas plus loin
40
+    if (!$login) {
41
+        return [];
42
+    }
43
+
44
+    $md5pass = '';
45
+    $shapass = $shanext = '';
46
+    $auteur_peut_sauver_cles = false;
47
+
48
+    if ($pass) {
49
+        $row = sql_fetsel(
50
+            '*',
51
+            'spip_auteurs',
52
+            'login=' . sql_quote($login, $serveur, 'text') . " AND statut<>'5poubelle'",
53
+            '',
54
+            '',
55
+            '',
56
+            '',
57
+            $serveur
58
+        );
59
+
60
+        // lever un flag si cet auteur peut sauver les cles
61
+        if ($row['statut'] === '0minirezo' && $row['webmestre'] === 'oui' && isset($row['backup_cles'])) {
62
+            $auteur_peut_sauver_cles = true;
63
+        }
64
+    }
65
+
66
+    // login inexistant ou mot de passe vide
67
+    if (!$pass || !$row) {
68
+        return [];
69
+    }
70
+
71
+    $cles = SpipCles::instance();
72
+    $secret = $cles->getSecretAuth();
73
+
74
+    $hash = null;
75
+    switch (strlen((string) $row['pass'])) {
76
+        // legacy = md5 ou sha256
77
+        case 32:
78
+            // tres anciens mots de passe encodes en md5(alea.pass)
79
+            $hash = md5($row['alea_actuel'] . $pass);
80
+            $methode = 'md5';
81
+        case 64:
82
+            if (empty($hash)) {
83
+                // anciens mots de passe encodes en sha256(alea.pass)
84
+                $hash =  hash('sha256', $row['alea_actuel'] . $pass);
85
+                $methode = 'sha256';
86
+            }
87
+            if ($row['pass'] === $hash) {
88
+                spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via $methode", 'auth' . _LOG_DEBUG);
89
+                // ce n'est pas cense arriver, mais si jamais c'est un backup inutilisable, il faut le nettoyer pour ne pas bloquer la creation d'une nouvelle cle d'auth
90
+                if (!empty($row['backup_cles'])) {
91
+                    sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . (int) $row['id_auteur']);
92
+                }
93
+                break;
94
+            }
95
+
96
+        // on teste la methode par defaut, au cas ou ce serait un pass moderne qui a la malchance d'etre en 64char de long
97
+
98
+        case 60:
99
+        case 98:
100
+        default:
101
+            // doit-on restaurer un backup des cles ?
102
+            // si on a le bon pass on peut decoder le backup, retrouver la cle, et du coup valider le pass
103
+            if (
104
+                !$secret
105
+                && $auteur_peut_sauver_cles
106
+                && !empty($row['backup_cles'])
107
+            ) {
108
+                if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) {
109
+                    spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE);
110
+                    if ($cles->save()) {
111
+                        $secret = $cles->getSecretAuth();
112
+                    }
113
+                    else {
114
+                        spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
115
+                        // et on echoue car on ne veut pas que la situation reste telle quelle
116
+                        raler_fichier(_DIR_ETC . 'cles.php');
117
+                    }
118
+                }
119
+                else {
120
+                    spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR);
121
+                    sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . (int) $row['id_auteur']);
122
+                }
123
+            }
124
+
125
+            if (!$secret || !Password::verifier($pass, $row['pass'], $secret)) {
126
+                unset($row);
127
+            }
128
+            else {
129
+                spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via Password::verifier", 'auth' . _LOG_DEBUG);
130
+            }
131
+            break;
132
+    }
133
+
134
+    // Migration depuis ancienne version : si on a pas encore de cle
135
+    // ET si c'est le login d'un auteur qui peut sauver la cle
136
+    // créer la clé (en s'assurant bien que personne n'a de backup d'un precedent fichier cle.php)
137
+    // si c'est un auteur normal, on ne fait rien, il garde son ancien pass hashé en sha256 en attendant le login d'un webmestre
138
+    if (!$secret && $auteur_peut_sauver_cles && auth_spip_initialiser_secret()) {
139
+        $secret = $cles->getSecretAuth();
140
+    }
141
+
142
+    // login/mot de passe incorrect
143
+    if (empty($row)) {
144
+        return [];
145
+    }
146
+
147
+    // fait tourner le codage du pass dans la base
148
+    // sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action()
149
+    if (!$phpauth && $secret) {
150
+        include_spip('inc/acces'); // pour creer_uniqid et verifier_htaccess
151
+        $pass_hash_next = Password::hacher($pass, $secret);
152
+        if ($pass_hash_next) {
153
+            $set = [
154
+                'alea_actuel' => 'alea_futur', // @deprecated 4.1
155
+                'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text'), // @deprecated 4.1
156
+                'pass' => sql_quote($pass_hash_next, $serveur, 'text'),
157
+            ];
158
+
159
+            // regenerer un htpass si on a active/desactive le plugin htpasswd
160
+            // et/ou que l'algo a change - pour etre certain de toujours utiliser le bon algo
161
+            $htpass = generer_htpass($pass);
162
+            if (strlen((string) $htpass) !== strlen((string) $row['htpass'])) {
163
+                $set['htpass'] = sql_quote($htpass, $serveur, 'text');
164
+            }
165
+
166
+            // a chaque login de webmestre : sauvegarde chiffree des clés du site (avec les pass du webmestre)
167
+            if ($auteur_peut_sauver_cles) {
168
+                $set['backup_cles'] = sql_quote($cles->backup($pass), $serveur, 'text');
169
+            }
170
+
171
+            @sql_update(
172
+                'spip_auteurs',
173
+                $set,
174
+                'id_auteur=' . (int) $row['id_auteur'] . ' AND pass=' . sql_quote(
175
+                    $row['pass'],
176
+                    $serveur,
177
+                    'text'
178
+                ),
179
+                [],
180
+                $serveur
181
+            );
182
+
183
+            // si on a change le htpass car changement d'algo, regenerer les fichiers htpasswd
184
+            if (isset($set['htpass'])) {
185
+                ecrire_acces();
186
+            }
187
+        }
188
+
189
+        // En profiter pour verifier la securite de tmp/
190
+        // Si elle ne fonctionne pas a l'installation, prevenir
191
+        if (!verifier_htaccess(_DIR_TMP) && defined('_ECRIRE_INSTALL')) {
192
+            return false;
193
+        }
194
+    }
195
+
196
+    return $row;
197 197
 }
198 198
 
199 199
 /**
@@ -208,36 +208,36 @@  discard block
 block discarded – undo
208 208
  * @return bool
209 209
  */
210 210
 function auth_spip_initialiser_secret(bool $force = false): bool {
211
-	$cles = SpipCles::instance();
212
-	$secret = $cles->getSecretAuth();
213
-
214
-	// on ne fait rien si on a un secret dispo
215
-	if ($secret) {
216
-		return false;
217
-	}
218
-
219
-	// si force, on ne verifie pas la presence d'un backup chez un webmestre
220
-	if ($force) {
221
-		spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth' . _LOG_INFO_IMPORTANTE);
222
-		$secret = $cles->getSecretAuth(true);
223
-		return true;
224
-	}
225
-
226
-	$has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut=' . sql_quote('0minirezo') . ' AND webmestre=' . sql_quote('oui') . " AND backup_cles!=''");
227
-	$has_backup = array_column($has_backup, 'id_auteur');
228
-	if ($has_backup === []) {
229
-		spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth' . _LOG_INFO_IMPORTANTE);
230
-		if ($secret = $cles->getSecretAuth(true)) {
231
-			return true;
232
-		}
233
-		spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
234
-		// et on echoue car on ne veut pas que la situation reste telle quelle
235
-		raler_fichier(_DIR_ETC . 'cles.php');
236
-	}
237
-	else {
238
-		spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR);
239
-	}
240
-	return false;
211
+    $cles = SpipCles::instance();
212
+    $secret = $cles->getSecretAuth();
213
+
214
+    // on ne fait rien si on a un secret dispo
215
+    if ($secret) {
216
+        return false;
217
+    }
218
+
219
+    // si force, on ne verifie pas la presence d'un backup chez un webmestre
220
+    if ($force) {
221
+        spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth' . _LOG_INFO_IMPORTANTE);
222
+        $secret = $cles->getSecretAuth(true);
223
+        return true;
224
+    }
225
+
226
+    $has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut=' . sql_quote('0minirezo') . ' AND webmestre=' . sql_quote('oui') . " AND backup_cles!=''");
227
+    $has_backup = array_column($has_backup, 'id_auteur');
228
+    if ($has_backup === []) {
229
+        spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth' . _LOG_INFO_IMPORTANTE);
230
+        if ($secret = $cles->getSecretAuth(true)) {
231
+            return true;
232
+        }
233
+        spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
234
+        // et on echoue car on ne veut pas que la situation reste telle quelle
235
+        raler_fichier(_DIR_ETC . 'cles.php');
236
+    }
237
+    else {
238
+        spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR);
239
+    }
240
+    return false;
241 241
 }
242 242
 
243 243
 /**
@@ -247,19 +247,19 @@  discard block
 block discarded – undo
247 247
  * @return array
248 248
  */
249 249
 function auth_spip_formulaire_login($flux) {
250
-	// javascript qui gere la securite du login en evitant de faire circuler le pass en clair
251
-	$js = file_get_contents(find_in_path('prive/javascript/login.js'));
252
-	$flux['data'] .=
253
-		  '<script type="text/javascript">/*<![CDATA[*/'
254
-		. "$js\n"
255
-		. "var login_info={'login':'" . $flux['args']['contexte']['var_login'] . "',"
256
-		. "'page_auteur': '" . generer_url_public('informer_auteur') . "',"
257
-		. "'informe_auteur_en_cours':false,"
258
-		. "'attente_informe':0};"
259
-		. "jQuery(function(){jQuery('#var_login').change(actualise_auteur);});"
260
-		. '/*]]>*/</script>';
261
-
262
-	return $flux;
250
+    // javascript qui gere la securite du login en evitant de faire circuler le pass en clair
251
+    $js = file_get_contents(find_in_path('prive/javascript/login.js'));
252
+    $flux['data'] .=
253
+            '<script type="text/javascript">/*<![CDATA[*/'
254
+        . "$js\n"
255
+        . "var login_info={'login':'" . $flux['args']['contexte']['var_login'] . "',"
256
+        . "'page_auteur': '" . generer_url_public('informer_auteur') . "',"
257
+        . "'informe_auteur_en_cours':false,"
258
+        . "'attente_informe':0};"
259
+        . "jQuery(function(){jQuery('#var_login').change(actualise_auteur);});"
260
+        . '/*]]>*/</script>';
261
+
262
+    return $flux;
263 263
 }
264 264
 
265 265
 
@@ -271,8 +271,8 @@  discard block
 block discarded – undo
271 271
  *   toujours true pour un auteur cree dans SPIP
272 272
  */
273 273
 function auth_spip_autoriser_modifier_login(string $serveur = ''): bool {
274
-	// les fonctions d'ecriture sur base distante sont encore incompletes
275
-	return !strlen($serveur);
274
+    // les fonctions d'ecriture sur base distante sont encore incompletes
275
+    return !strlen($serveur);
276 276
 }
277 277
 
278 278
 /**
@@ -286,25 +286,25 @@  discard block
 block discarded – undo
286 286
  *  message d'erreur si login non valide, chaine vide sinon
287 287
  */
288 288
 function auth_spip_verifier_login($new_login, $id_auteur = 0, $serveur = '') {
289
-	// login et mot de passe
290
-	if (strlen($new_login)) {
291
-		if (strlen($new_login) < _LOGIN_TROP_COURT) {
292
-			return _T('info_login_trop_court_car_pluriel', ['nb' => _LOGIN_TROP_COURT]);
293
-		} else {
294
-			$n = sql_countsel(
295
-				'spip_auteurs',
296
-				'login=' . sql_quote($new_login) . ' AND id_auteur!=' . (int) $id_auteur . " AND statut!='5poubelle'",
297
-				'',
298
-				'',
299
-				$serveur
300
-			);
301
-			if ($n) {
302
-				return _T('info_login_existant');
303
-			}
304
-		}
305
-	}
306
-
307
-	return '';
289
+    // login et mot de passe
290
+    if (strlen($new_login)) {
291
+        if (strlen($new_login) < _LOGIN_TROP_COURT) {
292
+            return _T('info_login_trop_court_car_pluriel', ['nb' => _LOGIN_TROP_COURT]);
293
+        } else {
294
+            $n = sql_countsel(
295
+                'spip_auteurs',
296
+                'login=' . sql_quote($new_login) . ' AND id_auteur!=' . (int) $id_auteur . " AND statut!='5poubelle'",
297
+                '',
298
+                '',
299
+                $serveur
300
+            );
301
+            if ($n) {
302
+                return _T('info_login_existant');
303
+            }
304
+        }
305
+    }
306
+
307
+    return '';
308 308
 }
309 309
 
310 310
 /**
@@ -316,41 +316,41 @@  discard block
 block discarded – undo
316 316
  * @return bool
317 317
  */
318 318
 function auth_spip_modifier_login($new_login, $id_auteur, $serveur = '') {
319
-	if (is_null($new_login) || auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') {
320
-		return false;
321
-	}
322
-	if (
323
-		!($id_auteur = (int) $id_auteur)
324
-		|| !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . (int) $id_auteur, '', '', '', '', $serveur)
325
-	) {
326
-		return false;
327
-	}
328
-	if ($new_login == $auteur['login']) {
329
-		return true;
330
-	} // on a rien fait mais c'est bon !
331
-
332
-	include_spip('action/editer_auteur');
333
-
334
-	// vider le login des auteurs a la poubelle qui avaient ce meme login
335
-	if (strlen($new_login)) {
336
-		$anciens = sql_allfetsel(
337
-			'id_auteur',
338
-			'spip_auteurs',
339
-			'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'",
340
-			'',
341
-			'',
342
-			'',
343
-			'',
344
-			$serveur
345
-		);
346
-		while ($row = array_pop($anciens)) {
347
-			auteur_modifier($row['id_auteur'], ['login' => ''], true); // manque la gestion de $serveur
348
-		}
349
-	}
350
-
351
-	auteur_modifier($id_auteur, ['login' => $new_login], true); // manque la gestion de $serveur
352
-
353
-	return true;
319
+    if (is_null($new_login) || auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') {
320
+        return false;
321
+    }
322
+    if (
323
+        !($id_auteur = (int) $id_auteur)
324
+        || !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . (int) $id_auteur, '', '', '', '', $serveur)
325
+    ) {
326
+        return false;
327
+    }
328
+    if ($new_login == $auteur['login']) {
329
+        return true;
330
+    } // on a rien fait mais c'est bon !
331
+
332
+    include_spip('action/editer_auteur');
333
+
334
+    // vider le login des auteurs a la poubelle qui avaient ce meme login
335
+    if (strlen($new_login)) {
336
+        $anciens = sql_allfetsel(
337
+            'id_auteur',
338
+            'spip_auteurs',
339
+            'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'",
340
+            '',
341
+            '',
342
+            '',
343
+            '',
344
+            $serveur
345
+        );
346
+        while ($row = array_pop($anciens)) {
347
+            auteur_modifier($row['id_auteur'], ['login' => ''], true); // manque la gestion de $serveur
348
+        }
349
+    }
350
+
351
+    auteur_modifier($id_auteur, ['login' => $new_login], true); // manque la gestion de $serveur
352
+
353
+    return true;
354 354
 }
355 355
 
356 356
 /**
@@ -362,44 +362,44 @@  discard block
 block discarded – undo
362 362
  * @return string
363 363
  */
364 364
 function auth_spip_retrouver_login($login, $serveur = '') {
365
-	if (!strlen($login)) {
366
-		return null;
367
-	} // pas la peine de requeter
368
-	$l = sql_quote($login, $serveur, 'text');
369
-	if (
370
-		$r = sql_getfetsel(
371
-			'login',
372
-			'spip_auteurs',
373
-			"statut<>'5poubelle'" .
374
-			' AND (length(pass)>0)' .
375
-			" AND (login=$l)",
376
-			'',
377
-			'',
378
-			'',
379
-			'',
380
-			$serveur
381
-		)
382
-	) {
383
-		return $r;
384
-	}
385
-	// Si pas d'auteur avec ce login
386
-	// regarder s'il a saisi son nom ou son mail.
387
-	// Ne pas fusionner avec la requete precedente
388
-	// car un nom peut etre homonyme d'un autre login
389
-	else {
390
-		return sql_getfetsel(
391
-			'login',
392
-			'spip_auteurs',
393
-			"statut<>'5poubelle'" .
394
-			' AND (length(pass)>0)' .
395
-			" AND (login<>'' AND (nom=$l OR email=$l))",
396
-			'',
397
-			'',
398
-			'',
399
-			'',
400
-			$serveur
401
-		);
402
-	}
365
+    if (!strlen($login)) {
366
+        return null;
367
+    } // pas la peine de requeter
368
+    $l = sql_quote($login, $serveur, 'text');
369
+    if (
370
+        $r = sql_getfetsel(
371
+            'login',
372
+            'spip_auteurs',
373
+            "statut<>'5poubelle'" .
374
+            ' AND (length(pass)>0)' .
375
+            " AND (login=$l)",
376
+            '',
377
+            '',
378
+            '',
379
+            '',
380
+            $serveur
381
+        )
382
+    ) {
383
+        return $r;
384
+    }
385
+    // Si pas d'auteur avec ce login
386
+    // regarder s'il a saisi son nom ou son mail.
387
+    // Ne pas fusionner avec la requete precedente
388
+    // car un nom peut etre homonyme d'un autre login
389
+    else {
390
+        return sql_getfetsel(
391
+            'login',
392
+            'spip_auteurs',
393
+            "statut<>'5poubelle'" .
394
+            ' AND (length(pass)>0)' .
395
+            " AND (login<>'' AND (nom=$l OR email=$l))",
396
+            '',
397
+            '',
398
+            '',
399
+            '',
400
+            $serveur
401
+        );
402
+    }
403 403
 }
404 404
 
405 405
 /**
@@ -410,8 +410,8 @@  discard block
 block discarded – undo
410 410
  *  toujours true pour un auteur cree dans SPIP
411 411
  */
412 412
 function auth_spip_autoriser_modifier_pass(string $serveur = ''): bool {
413
-	// les fonctions d'ecriture sur base distante sont encore incompletes
414
-	return !strlen($serveur);
413
+    // les fonctions d'ecriture sur base distante sont encore incompletes
414
+    return !strlen($serveur);
415 415
 }
416 416
 
417 417
 
@@ -432,12 +432,12 @@  discard block
 block discarded – undo
432 432
  *  message d'erreur si login non valide, chaine vide sinon
433 433
  */
434 434
 function auth_spip_verifier_pass($login, #[\SensitiveParameter] $new_pass, $id_auteur = 0, $serveur = '') {
435
-	// login et mot de passe
436
-	if (strlen($new_pass) < _PASS_LONGUEUR_MINI) {
437
-		return _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]);
438
-	}
435
+    // login et mot de passe
436
+    if (strlen($new_pass) < _PASS_LONGUEUR_MINI) {
437
+        return _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]);
438
+    }
439 439
 
440
-	return '';
440
+    return '';
441 441
 }
442 442
 
443 443
 /**
@@ -451,47 +451,47 @@  discard block
 block discarded – undo
451 451
  * @return bool
452 452
  */
453 453
 function auth_spip_modifier_pass($login, #[\SensitiveParameter] $new_pass, $id_auteur, $serveur = '') {
454
-	if (is_null($new_pass) || auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
455
-		return false;
456
-	}
457
-
458
-	if (
459
-		!($id_auteur = (int) $id_auteur)
460
-		|| !($auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . (int) $id_auteur, '', '', '', '', $serveur))
461
-	) {
462
-		return false;
463
-	}
464
-
465
-	$cles = SpipCles::instance();
466
-	$secret = $cles->getSecretAuth();
467
-	if (!$secret) {
468
-		if (auth_spip_initialiser_secret()) {
469
-			$secret = $cles->getSecretAuth();
470
-		}
471
-		else {
472
-			return false;
473
-		}
474
-	}
475
-
476
-
477
-	include_spip('inc/acces');
478
-	$set = [
479
-		'pass' => Password::hacher($new_pass, $secret),
480
-		'htpass' => generer_htpass($new_pass),
481
-		'alea_actuel' => creer_uniqid(), // @deprecated 4.1
482
-		'alea_futur' => creer_uniqid(), // @deprecated 4.1
483
-		'low_sec' => '',
484
-	];
485
-
486
-	// si c'est un webmestre, on met a jour son backup des cles
487
-	if ($auteur['statut'] === '0minirezo' && $auteur['webmestre'] === 'oui') {
488
-		$set['backup_cles'] = $cles->backup($new_pass);
489
-	}
490
-
491
-	include_spip('action/editer_auteur');
492
-	auteur_modifier($id_auteur, $set, true); // manque la gestion de $serveur
493
-
494
-	return true; // on a bien modifie le pass
454
+    if (is_null($new_pass) || auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
455
+        return false;
456
+    }
457
+
458
+    if (
459
+        !($id_auteur = (int) $id_auteur)
460
+        || !($auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . (int) $id_auteur, '', '', '', '', $serveur))
461
+    ) {
462
+        return false;
463
+    }
464
+
465
+    $cles = SpipCles::instance();
466
+    $secret = $cles->getSecretAuth();
467
+    if (!$secret) {
468
+        if (auth_spip_initialiser_secret()) {
469
+            $secret = $cles->getSecretAuth();
470
+        }
471
+        else {
472
+            return false;
473
+        }
474
+    }
475
+
476
+
477
+    include_spip('inc/acces');
478
+    $set = [
479
+        'pass' => Password::hacher($new_pass, $secret),
480
+        'htpass' => generer_htpass($new_pass),
481
+        'alea_actuel' => creer_uniqid(), // @deprecated 4.1
482
+        'alea_futur' => creer_uniqid(), // @deprecated 4.1
483
+        'low_sec' => '',
484
+    ];
485
+
486
+    // si c'est un webmestre, on met a jour son backup des cles
487
+    if ($auteur['statut'] === '0minirezo' && $auteur['webmestre'] === 'oui') {
488
+        $set['backup_cles'] = $cles->backup($new_pass);
489
+    }
490
+
491
+    include_spip('action/editer_auteur');
492
+    auteur_modifier($id_auteur, $set, true); // manque la gestion de $serveur
493
+
494
+    return true; // on a bien modifie le pass
495 495
 }
496 496
 
497 497
 /**
@@ -505,54 +505,54 @@  discard block
 block discarded – undo
505 505
  * @return void
506 506
  */
507 507
 function auth_spip_synchroniser_distant($id_auteur, $champs, $options = [], string $serveur = ''): void {
508
-	// ne rien faire pour une base distante : on ne sait pas regenerer les htaccess
509
-	if (strlen($serveur)) {
510
-		return;
511
-	}
512
-	// si un login, pass ou statut a ete modifie
513
-	// regenerer les fichier htpass
514
-	if (
515
-		isset($champs['login']) || isset($champs['pass']) || isset($champs['statut']) || isset($options['all']) && $options['all']
516
-	) {
517
-		$htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
518
-		$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
519
-
520
-		// Cette variable de configuration peut etre posee par un plugin
521
-		// par exemple acces_restreint ;
522
-		// si .htaccess existe, outrepasser spip_meta
523
-		if (
524
-			(!isset($GLOBALS['meta']['creer_htpasswd']) || $GLOBALS['meta']['creer_htpasswd'] != 'oui') && !@file_exists($htaccess)
525
-		) {
526
-			spip_unlink($htpasswd);
527
-			spip_unlink($htpasswd . '-admin');
528
-
529
-			return;
530
-		}
531
-
532
-		# remarque : ici on laisse passer les "nouveau" de maniere a leur permettre
533
-		# de devenir redacteur le cas echeant (auth http)... a nettoyer
534
-		// attention, il faut au prealable se connecter a la base (necessaire car utilise par install)
535
-
536
-		$p1 = ''; // login:htpass pour tous
537
-		$p2 = ''; // login:htpass pour les admins
538
-		$s = sql_select(
539
-			'login, htpass, statut',
540
-			'spip_auteurs',
541
-			sql_in('statut', ['1comite', '0minirezo', 'nouveau'])
542
-		);
543
-		while ($t = sql_fetch($s)) {
544
-			if (strlen((string) $t['login']) && strlen((string) $t['htpass'])) {
545
-				$p1 .= $t['login'] . ':' . $t['htpass'] . "\n";
546
-				if ($t['statut'] == '0minirezo') {
547
-					$p2 .= $t['login'] . ':' . $t['htpass'] . "\n";
548
-				}
549
-			}
550
-		}
551
-		sql_free($s);
552
-		if ($p1) {
553
-			ecrire_fichier($htpasswd, $p1);
554
-			ecrire_fichier($htpasswd . '-admin', $p2);
555
-			spip_log("Ecriture de $htpasswd et $htpasswd-admin");
556
-		}
557
-	}
508
+    // ne rien faire pour une base distante : on ne sait pas regenerer les htaccess
509
+    if (strlen($serveur)) {
510
+        return;
511
+    }
512
+    // si un login, pass ou statut a ete modifie
513
+    // regenerer les fichier htpass
514
+    if (
515
+        isset($champs['login']) || isset($champs['pass']) || isset($champs['statut']) || isset($options['all']) && $options['all']
516
+    ) {
517
+        $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
518
+        $htpasswd = _DIR_TMP . _AUTH_USER_FILE;
519
+
520
+        // Cette variable de configuration peut etre posee par un plugin
521
+        // par exemple acces_restreint ;
522
+        // si .htaccess existe, outrepasser spip_meta
523
+        if (
524
+            (!isset($GLOBALS['meta']['creer_htpasswd']) || $GLOBALS['meta']['creer_htpasswd'] != 'oui') && !@file_exists($htaccess)
525
+        ) {
526
+            spip_unlink($htpasswd);
527
+            spip_unlink($htpasswd . '-admin');
528
+
529
+            return;
530
+        }
531
+
532
+        # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre
533
+        # de devenir redacteur le cas echeant (auth http)... a nettoyer
534
+        // attention, il faut au prealable se connecter a la base (necessaire car utilise par install)
535
+
536
+        $p1 = ''; // login:htpass pour tous
537
+        $p2 = ''; // login:htpass pour les admins
538
+        $s = sql_select(
539
+            'login, htpass, statut',
540
+            'spip_auteurs',
541
+            sql_in('statut', ['1comite', '0minirezo', 'nouveau'])
542
+        );
543
+        while ($t = sql_fetch($s)) {
544
+            if (strlen((string) $t['login']) && strlen((string) $t['htpass'])) {
545
+                $p1 .= $t['login'] . ':' . $t['htpass'] . "\n";
546
+                if ($t['statut'] == '0minirezo') {
547
+                    $p2 .= $t['login'] . ':' . $t['htpass'] . "\n";
548
+                }
549
+            }
550
+        }
551
+        sql_free($s);
552
+        if ($p1) {
553
+            ecrire_fichier($htpasswd, $p1);
554
+            ecrire_fichier($htpasswd . '-admin', $p2);
555
+            spip_log("Ecriture de $htpasswd et $htpasswd-admin");
556
+        }
557
+    }
558 558
 }
Please login to merge, or discard this patch.
Spacing   +34 added lines, -34 removed lines patch added patch discarded remove patch
@@ -49,7 +49,7 @@  discard block
 block discarded – undo
49 49
 		$row = sql_fetsel(
50 50
 			'*',
51 51
 			'spip_auteurs',
52
-			'login=' . sql_quote($login, $serveur, 'text') . " AND statut<>'5poubelle'",
52
+			'login='.sql_quote($login, $serveur, 'text')." AND statut<>'5poubelle'",
53 53
 			'',
54 54
 			'',
55 55
 			'',
@@ -76,19 +76,19 @@  discard block
 block discarded – undo
76 76
 		// legacy = md5 ou sha256
77 77
 		case 32:
78 78
 			// tres anciens mots de passe encodes en md5(alea.pass)
79
-			$hash = md5($row['alea_actuel'] . $pass);
79
+			$hash = md5($row['alea_actuel'].$pass);
80 80
 			$methode = 'md5';
81 81
 		case 64:
82 82
 			if (empty($hash)) {
83 83
 				// anciens mots de passe encodes en sha256(alea.pass)
84
-				$hash =  hash('sha256', $row['alea_actuel'] . $pass);
84
+				$hash = hash('sha256', $row['alea_actuel'].$pass);
85 85
 				$methode = 'sha256';
86 86
 			}
87 87
 			if ($row['pass'] === $hash) {
88
-				spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via $methode", 'auth' . _LOG_DEBUG);
88
+				spip_log("validation du mot de passe pour l'auteur #".$row['id_auteur']." $login via $methode", 'auth'._LOG_DEBUG);
89 89
 				// ce n'est pas cense arriver, mais si jamais c'est un backup inutilisable, il faut le nettoyer pour ne pas bloquer la creation d'une nouvelle cle d'auth
90 90
 				if (!empty($row['backup_cles'])) {
91
-					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . (int) $row['id_auteur']);
91
+					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur='.(int) $row['id_auteur']);
92 92
 				}
93 93
 				break;
94 94
 			}
@@ -106,19 +106,19 @@  discard block
 block discarded – undo
106 106
 				&& !empty($row['backup_cles'])
107 107
 			) {
108 108
 				if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) {
109
-					spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE);
109
+					spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #'.$row['id_auteur'], 'auth'._LOG_INFO_IMPORTANTE);
110 110
 					if ($cles->save()) {
111 111
 						$secret = $cles->getSecretAuth();
112 112
 					}
113 113
 					else {
114
-						spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
114
+						spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth'._LOG_ERREUR);
115 115
 						// et on echoue car on ne veut pas que la situation reste telle quelle
116
-						raler_fichier(_DIR_ETC . 'cles.php');
116
+						raler_fichier(_DIR_ETC.'cles.php');
117 117
 					}
118 118
 				}
119 119
 				else {
120
-					spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR);
121
-					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . (int) $row['id_auteur']);
120
+					spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #'.$row['id_auteur']." n'est pas valide", 'auth'._LOG_ERREUR);
121
+					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur='.(int) $row['id_auteur']);
122 122
 				}
123 123
 			}
124 124
 
@@ -126,7 +126,7 @@  discard block
 block discarded – undo
126 126
 				unset($row);
127 127
 			}
128 128
 			else {
129
-				spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via Password::verifier", 'auth' . _LOG_DEBUG);
129
+				spip_log("validation du mot de passe pour l'auteur #".$row['id_auteur']." $login via Password::verifier", 'auth'._LOG_DEBUG);
130 130
 			}
131 131
 			break;
132 132
 	}
@@ -171,7 +171,7 @@  discard block
 block discarded – undo
171 171
 			@sql_update(
172 172
 				'spip_auteurs',
173 173
 				$set,
174
-				'id_auteur=' . (int) $row['id_auteur'] . ' AND pass=' . sql_quote(
174
+				'id_auteur='.(int) $row['id_auteur'].' AND pass='.sql_quote(
175 175
 					$row['pass'],
176 176
 					$serveur,
177 177
 					'text'
@@ -218,24 +218,24 @@  discard block
 block discarded – undo
218 218
 
219 219
 	// si force, on ne verifie pas la presence d'un backup chez un webmestre
220 220
 	if ($force) {
221
-		spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth' . _LOG_INFO_IMPORTANTE);
221
+		spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth'._LOG_INFO_IMPORTANTE);
222 222
 		$secret = $cles->getSecretAuth(true);
223 223
 		return true;
224 224
 	}
225 225
 
226
-	$has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut=' . sql_quote('0minirezo') . ' AND webmestre=' . sql_quote('oui') . " AND backup_cles!=''");
226
+	$has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut='.sql_quote('0minirezo').' AND webmestre='.sql_quote('oui')." AND backup_cles!=''");
227 227
 	$has_backup = array_column($has_backup, 'id_auteur');
228 228
 	if ($has_backup === []) {
229
-		spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth' . _LOG_INFO_IMPORTANTE);
229
+		spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth'._LOG_INFO_IMPORTANTE);
230 230
 		if ($secret = $cles->getSecretAuth(true)) {
231 231
 			return true;
232 232
 		}
233
-		spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
233
+		spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth'._LOG_ERREUR);
234 234
 		// et on echoue car on ne veut pas que la situation reste telle quelle
235
-		raler_fichier(_DIR_ETC . 'cles.php');
235
+		raler_fichier(_DIR_ETC.'cles.php');
236 236
 	}
237 237
 	else {
238
-		spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR);
238
+		spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #'.implode(', #', $has_backup).' doit se connecter pour restaurer son backup des cles', 'auth'._LOG_ERREUR);
239 239
 	}
240 240
 	return false;
241 241
 }
@@ -252,8 +252,8 @@  discard block
 block discarded – undo
252 252
 	$flux['data'] .=
253 253
 		  '<script type="text/javascript">/*<![CDATA[*/'
254 254
 		. "$js\n"
255
-		. "var login_info={'login':'" . $flux['args']['contexte']['var_login'] . "',"
256
-		. "'page_auteur': '" . generer_url_public('informer_auteur') . "',"
255
+		. "var login_info={'login':'".$flux['args']['contexte']['var_login']."',"
256
+		. "'page_auteur': '".generer_url_public('informer_auteur')."',"
257 257
 		. "'informe_auteur_en_cours':false,"
258 258
 		. "'attente_informe':0};"
259 259
 		. "jQuery(function(){jQuery('#var_login').change(actualise_auteur);});"
@@ -293,7 +293,7 @@  discard block
 block discarded – undo
293 293
 		} else {
294 294
 			$n = sql_countsel(
295 295
 				'spip_auteurs',
296
-				'login=' . sql_quote($new_login) . ' AND id_auteur!=' . (int) $id_auteur . " AND statut!='5poubelle'",
296
+				'login='.sql_quote($new_login).' AND id_auteur!='.(int) $id_auteur." AND statut!='5poubelle'",
297 297
 				'',
298 298
 				'',
299 299
 				$serveur
@@ -321,7 +321,7 @@  discard block
 block discarded – undo
321 321
 	}
322 322
 	if (
323 323
 		!($id_auteur = (int) $id_auteur)
324
-		|| !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . (int) $id_auteur, '', '', '', '', $serveur)
324
+		|| !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur='.(int) $id_auteur, '', '', '', '', $serveur)
325 325
 	) {
326 326
 		return false;
327 327
 	}
@@ -336,7 +336,7 @@  discard block
 block discarded – undo
336 336
 		$anciens = sql_allfetsel(
337 337
 			'id_auteur',
338 338
 			'spip_auteurs',
339
-			'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'",
339
+			'login='.sql_quote($new_login, $serveur, 'text')." AND statut='5poubelle'",
340 340
 			'',
341 341
 			'',
342 342
 			'',
@@ -370,8 +370,8 @@  discard block
 block discarded – undo
370 370
 		$r = sql_getfetsel(
371 371
 			'login',
372 372
 			'spip_auteurs',
373
-			"statut<>'5poubelle'" .
374
-			' AND (length(pass)>0)' .
373
+			"statut<>'5poubelle'".
374
+			' AND (length(pass)>0)'.
375 375
 			" AND (login=$l)",
376 376
 			'',
377 377
 			'',
@@ -390,8 +390,8 @@  discard block
 block discarded – undo
390 390
 		return sql_getfetsel(
391 391
 			'login',
392 392
 			'spip_auteurs',
393
-			"statut<>'5poubelle'" .
394
-			' AND (length(pass)>0)' .
393
+			"statut<>'5poubelle'".
394
+			' AND (length(pass)>0)'.
395 395
 			" AND (login<>'' AND (nom=$l OR email=$l))",
396 396
 			'',
397 397
 			'',
@@ -457,7 +457,7 @@  discard block
 block discarded – undo
457 457
 
458 458
 	if (
459 459
 		!($id_auteur = (int) $id_auteur)
460
-		|| !($auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . (int) $id_auteur, '', '', '', '', $serveur))
460
+		|| !($auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur='.(int) $id_auteur, '', '', '', '', $serveur))
461 461
 	) {
462 462
 		return false;
463 463
 	}
@@ -514,8 +514,8 @@  discard block
 block discarded – undo
514 514
 	if (
515 515
 		isset($champs['login']) || isset($champs['pass']) || isset($champs['statut']) || isset($options['all']) && $options['all']
516 516
 	) {
517
-		$htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
518
-		$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
517
+		$htaccess = _DIR_RESTREINT._ACCESS_FILE_NAME;
518
+		$htpasswd = _DIR_TMP._AUTH_USER_FILE;
519 519
 
520 520
 		// Cette variable de configuration peut etre posee par un plugin
521 521
 		// par exemple acces_restreint ;
@@ -524,7 +524,7 @@  discard block
 block discarded – undo
524 524
 			(!isset($GLOBALS['meta']['creer_htpasswd']) || $GLOBALS['meta']['creer_htpasswd'] != 'oui') && !@file_exists($htaccess)
525 525
 		) {
526 526
 			spip_unlink($htpasswd);
527
-			spip_unlink($htpasswd . '-admin');
527
+			spip_unlink($htpasswd.'-admin');
528 528
 
529 529
 			return;
530 530
 		}
@@ -542,16 +542,16 @@  discard block
 block discarded – undo
542 542
 		);
543 543
 		while ($t = sql_fetch($s)) {
544 544
 			if (strlen((string) $t['login']) && strlen((string) $t['htpass'])) {
545
-				$p1 .= $t['login'] . ':' . $t['htpass'] . "\n";
545
+				$p1 .= $t['login'].':'.$t['htpass']."\n";
546 546
 				if ($t['statut'] == '0minirezo') {
547
-					$p2 .= $t['login'] . ':' . $t['htpass'] . "\n";
547
+					$p2 .= $t['login'].':'.$t['htpass']."\n";
548 548
 				}
549 549
 			}
550 550
 		}
551 551
 		sql_free($s);
552 552
 		if ($p1) {
553 553
 			ecrire_fichier($htpasswd, $p1);
554
-			ecrire_fichier($htpasswd . '-admin', $p2);
554
+			ecrire_fichier($htpasswd.'-admin', $p2);
555 555
 			spip_log("Ecriture de $htpasswd et $htpasswd-admin");
556 556
 		}
557 557
 	}
Please login to merge, or discard this patch.
ecrire/iterateur/data.php 2 patches
Indentation   +124 added lines, -124 removed lines patch added patch discarded remove patch
@@ -18,11 +18,11 @@  discard block
 block discarded – undo
18 18
  **/
19 19
 
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 if (!defined('_DATA_SOURCE_MAX_SIZE')) {
25
-	define('_DATA_SOURCE_MAX_SIZE', 2 * 1_048_576);
25
+    define('_DATA_SOURCE_MAX_SIZE', 2 * 1_048_576);
26 26
 }
27 27
 
28 28
 
@@ -43,17 +43,17 @@  discard block
 block discarded – undo
43 43
  *     Description de la boucle complétée des champs
44 44
  */
45 45
 function iterateur_DATA_dist($b) {
46
-	$b->iterateur = 'DATA'; # designe la classe d'iterateur
47
-	$b->show = [
48
-		'field' => [
49
-			'cle' => 'STRING',
50
-			'valeur' => 'STRING',
51
-			'*' => 'ALL' // Champ joker *
52
-		]
53
-	];
54
-	$b->select[] = '.valeur';
55
-
56
-	return $b;
46
+    $b->iterateur = 'DATA'; # designe la classe d'iterateur
47
+    $b->show = [
48
+        'field' => [
49
+            'cle' => 'STRING',
50
+            'valeur' => 'STRING',
51
+            '*' => 'ALL' // Champ joker *
52
+        ]
53
+    ];
54
+    $b->select[] = '.valeur';
55
+
56
+    return $b;
57 57
 }
58 58
 
59 59
 
@@ -68,7 +68,7 @@  discard block
 block discarded – undo
68 68
  * @return array
69 69
  */
70 70
 function inc_file_to_array_dist($data) {
71
-	return preg_split('/\r?\n/', $data);
71
+    return preg_split('/\r?\n/', $data);
72 72
 }
73 73
 
74 74
 /**
@@ -77,9 +77,9 @@  discard block
 block discarded – undo
77 77
  * @return array
78 78
  */
79 79
 function inc_plugins_to_array_dist() {
80
-	include_spip('inc/plugin');
80
+    include_spip('inc/plugin');
81 81
 
82
-	return liste_chemin_plugin_actifs();
82
+    return liste_chemin_plugin_actifs();
83 83
 }
84 84
 
85 85
 /**
@@ -89,7 +89,7 @@  discard block
 block discarded – undo
89 89
  * @return array
90 90
  */
91 91
 function inc_xml_to_array_dist($data) {
92
-	return @XMLObjectToArray(new SimpleXmlIterator($data));
92
+    return @XMLObjectToArray(new SimpleXmlIterator($data));
93 93
 }
94 94
 
95 95
 /**
@@ -101,14 +101,14 @@  discard block
 block discarded – undo
101 101
  *
102 102
  */
103 103
 function inc_object_to_array($object) {
104
-	if (!is_object($object) && !is_array($object)) {
105
-		return $object;
106
-	}
107
-	if (is_object($object)) {
108
-		$object = get_object_vars($object);
109
-	}
110
-
111
-	return array_map('inc_object_to_array', $object);
104
+    if (!is_object($object) && !is_array($object)) {
105
+        return $object;
106
+    }
107
+    if (is_object($object)) {
108
+        $object = get_object_vars($object);
109
+    }
110
+
111
+    return array_map('inc_object_to_array', $object);
112 112
 }
113 113
 
114 114
 /**
@@ -118,20 +118,20 @@  discard block
 block discarded – undo
118 118
  * @return array|bool
119 119
  */
120 120
 function inc_sql_to_array_dist($data) {
121
-	# sortir le connecteur de $data
122
-	preg_match(',^(?:(\w+):)?(.*)$,Sm', $data, $v);
123
-	$serveur = (string)$v[1];
124
-	$req = trim($v[2]);
125
-	if ($s = sql_query($req, $serveur)) {
126
-		$r = [];
127
-		while ($t = sql_fetch($s)) {
128
-			$r[] = $t;
129
-		}
130
-
131
-		return $r;
132
-	}
133
-
134
-	return false;
121
+    # sortir le connecteur de $data
122
+    preg_match(',^(?:(\w+):)?(.*)$,Sm', $data, $v);
123
+    $serveur = (string)$v[1];
124
+    $req = trim($v[2]);
125
+    if ($s = sql_query($req, $serveur)) {
126
+        $r = [];
127
+        while ($t = sql_fetch($s)) {
128
+            $r[] = $t;
129
+        }
130
+
131
+        return $r;
132
+    }
133
+
134
+    return false;
135 135
 }
136 136
 
137 137
 /**
@@ -141,13 +141,13 @@  discard block
 block discarded – undo
141 141
  * @return array|bool
142 142
  */
143 143
 function inc_json_to_array_dist($data) {
144
-	try {
145
-		$json = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
146
-	} catch (JsonException $e) {
147
-		$json = null;
148
-		spip_log('Failed to parse Json data : ' . $e->getMessage(), _LOG_INFO);
149
-	}
150
-	return is_array($json) ? (array) $json : [];
144
+    try {
145
+        $json = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
146
+    } catch (JsonException $e) {
147
+        $json = null;
148
+        spip_log('Failed to parse Json data : ' . $e->getMessage(), _LOG_INFO);
149
+    }
150
+    return is_array($json) ? (array) $json : [];
151 151
 }
152 152
 
153 153
 /**
@@ -157,30 +157,30 @@  discard block
 block discarded – undo
157 157
  * @return array|bool
158 158
  */
159 159
 function inc_csv_to_array_dist($data) {
160
-	include_spip('inc/csv');
161
-	[$entete, $csv] = analyse_csv($data);
162
-	array_unshift($csv, $entete);
163
-
164
-	include_spip('inc/charsets');
165
-	$i = 1;
166
-	foreach ($entete as $k => $v) {
167
-		if (trim((string) $v) == '') {
168
-			$v = 'col' . $i;
169
-		} // reperer des eventuelles cases vides
170
-		if (is_numeric($v) && $v < 0) {
171
-			$v = '__' . $v;
172
-		} // ne pas risquer d'ecraser une cle numerique
173
-		if (is_numeric($v)) {
174
-			$v = '_' . $v;
175
-		} // ne pas risquer d'ecraser une cle numerique
176
-		$v = strtolower(preg_replace(',\W+,', '_', (string) translitteration($v)));
177
-		foreach ($csv as &$item) {
178
-			$item[$v] = &$item[$k];
179
-		}
180
-		$i++;
181
-	}
182
-
183
-	return $csv;
160
+    include_spip('inc/csv');
161
+    [$entete, $csv] = analyse_csv($data);
162
+    array_unshift($csv, $entete);
163
+
164
+    include_spip('inc/charsets');
165
+    $i = 1;
166
+    foreach ($entete as $k => $v) {
167
+        if (trim((string) $v) == '') {
168
+            $v = 'col' . $i;
169
+        } // reperer des eventuelles cases vides
170
+        if (is_numeric($v) && $v < 0) {
171
+            $v = '__' . $v;
172
+        } // ne pas risquer d'ecraser une cle numerique
173
+        if (is_numeric($v)) {
174
+            $v = '_' . $v;
175
+        } // ne pas risquer d'ecraser une cle numerique
176
+        $v = strtolower(preg_replace(',\W+,', '_', (string) translitteration($v)));
177
+        foreach ($csv as &$item) {
178
+            $item[$v] = &$item[$k];
179
+        }
180
+        $i++;
181
+    }
182
+
183
+    return $csv;
184 184
 }
185 185
 
186 186
 /**
@@ -190,13 +190,13 @@  discard block
 block discarded – undo
190 190
  * @return array|bool
191 191
  */
192 192
 function inc_rss_to_array_dist($data) {
193
-	$tableau = null;
194
-	include_spip('inc/syndic');
195
-	if (is_array($rss = analyser_backend($data))) {
196
-		$tableau = $rss;
197
-	}
193
+    $tableau = null;
194
+    include_spip('inc/syndic');
195
+    if (is_array($rss = analyser_backend($data))) {
196
+        $tableau = $rss;
197
+    }
198 198
 
199
-	return $tableau;
199
+    return $tableau;
200 200
 }
201 201
 
202 202
 /**
@@ -206,9 +206,9 @@  discard block
 block discarded – undo
206 206
  * @return array|bool
207 207
  */
208 208
 function inc_atom_to_array_dist($data) {
209
-	$rss_to_array = charger_fonction('rss_to_array', 'inc');
209
+    $rss_to_array = charger_fonction('rss_to_array', 'inc');
210 210
 
211
-	return $rss_to_array($data);
211
+    return $rss_to_array($data);
212 212
 }
213 213
 
214 214
 /**
@@ -219,12 +219,12 @@  discard block
 block discarded – undo
219 219
  * @return array|bool
220 220
  */
221 221
 function inc_glob_to_array_dist($data) {
222
-	$a = glob(
223
-		$data,
224
-		GLOB_MARK | GLOB_NOSORT | GLOB_BRACE
225
-	);
222
+    $a = glob(
223
+        $data,
224
+        GLOB_MARK | GLOB_NOSORT | GLOB_BRACE
225
+    );
226 226
 
227
-	return $a ?: [];
227
+    return $a ?: [];
228 228
 }
229 229
 
230 230
 /**
@@ -235,14 +235,14 @@  discard block
 block discarded – undo
235 235
  * @throws Exception
236 236
  */
237 237
 function inc_yaml_to_array_dist($data) {
238
-	include_spip('inc/yaml-mini');
239
-	if (!function_exists('yaml_decode')) {
240
-		throw new Exception('YAML: impossible de trouver la fonction yaml_decode');
238
+    include_spip('inc/yaml-mini');
239
+    if (!function_exists('yaml_decode')) {
240
+        throw new Exception('YAML: impossible de trouver la fonction yaml_decode');
241 241
 
242
-		return false;
243
-	}
242
+        return false;
243
+    }
244 244
 
245
-	return yaml_decode($data);
245
+    return yaml_decode($data);
246 246
 }
247 247
 
248 248
 
@@ -257,7 +257,7 @@  discard block
 block discarded – undo
257 257
  * @return array|bool
258 258
  */
259 259
 function inc_pregfiles_to_array_dist($dir, $regexp = -1, $limit = 10000) {
260
-	return (array)preg_files($dir, $regexp, $limit);
260
+    return (array)preg_files($dir, $regexp, $limit);
261 261
 }
262 262
 
263 263
 /**
@@ -269,23 +269,23 @@  discard block
 block discarded – undo
269 269
  * @return array|bool
270 270
  */
271 271
 function inc_ls_to_array_dist($data) {
272
-	$glob_to_array = charger_fonction('glob_to_array', 'inc');
273
-	$a = $glob_to_array($data);
274
-	foreach ($a as &$v) {
275
-		$b = (array)@stat($v);
276
-		foreach (array_keys($b) as $k) {
277
-			if (is_numeric($k)) {
278
-				unset($b[$k]);
279
-			}
280
-		}
281
-		$b['file'] = preg_replace('`/$`', '', (string) $v) ;
282
-		$v = array_merge(
283
-			pathinfo((string) $v),
284
-			$b
285
-		);
286
-	}
287
-
288
-	return $a;
272
+    $glob_to_array = charger_fonction('glob_to_array', 'inc');
273
+    $a = $glob_to_array($data);
274
+    foreach ($a as &$v) {
275
+        $b = (array)@stat($v);
276
+        foreach (array_keys($b) as $k) {
277
+            if (is_numeric($k)) {
278
+                unset($b[$k]);
279
+            }
280
+        }
281
+        $b['file'] = preg_replace('`/$`', '', (string) $v) ;
282
+        $v = array_merge(
283
+            pathinfo((string) $v),
284
+            $b
285
+        );
286
+    }
287
+
288
+    return $a;
289 289
 }
290 290
 
291 291
 /**
@@ -295,21 +295,21 @@  discard block
 block discarded – undo
295 295
  * @return array|bool
296 296
  */
297 297
 function XMLObjectToArray($object) {
298
-	$xml_array = [];
299
-	for ($object->rewind(); $object->valid(); $object->next()) {
300
-		if (array_key_exists($key = $object->key(), $xml_array)) {
301
-			$key .= '-' . uniqid();
302
-		}
303
-		$vars = get_object_vars($object->current());
304
-		if (isset($vars['@attributes'])) {
305
-			foreach ($vars['@attributes'] as $k => $v) {
306
-				$xml_array[$key][$k] = $v;
307
-			}
308
-		}
309
-		$xml_array[$key][] = $object->hasChildren()
310
-			? XMLObjectToArray($object->current())
311
-			: (string) $object->current();
312
-	}
313
-
314
-	return $xml_array;
298
+    $xml_array = [];
299
+    for ($object->rewind(); $object->valid(); $object->next()) {
300
+        if (array_key_exists($key = $object->key(), $xml_array)) {
301
+            $key .= '-' . uniqid();
302
+        }
303
+        $vars = get_object_vars($object->current());
304
+        if (isset($vars['@attributes'])) {
305
+            foreach ($vars['@attributes'] as $k => $v) {
306
+                $xml_array[$key][$k] = $v;
307
+            }
308
+        }
309
+        $xml_array[$key][] = $object->hasChildren()
310
+            ? XMLObjectToArray($object->current())
311
+            : (string) $object->current();
312
+    }
313
+
314
+    return $xml_array;
315 315
 }
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -120,7 +120,7 @@  discard block
 block discarded – undo
120 120
 function inc_sql_to_array_dist($data) {
121 121
 	# sortir le connecteur de $data
122 122
 	preg_match(',^(?:(\w+):)?(.*)$,Sm', $data, $v);
123
-	$serveur = (string)$v[1];
123
+	$serveur = (string) $v[1];
124 124
 	$req = trim($v[2]);
125 125
 	if ($s = sql_query($req, $serveur)) {
126 126
 		$r = [];
@@ -145,7 +145,7 @@  discard block
 block discarded – undo
145 145
 		$json = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
146 146
 	} catch (JsonException $e) {
147 147
 		$json = null;
148
-		spip_log('Failed to parse Json data : ' . $e->getMessage(), _LOG_INFO);
148
+		spip_log('Failed to parse Json data : '.$e->getMessage(), _LOG_INFO);
149 149
 	}
150 150
 	return is_array($json) ? (array) $json : [];
151 151
 }
@@ -165,13 +165,13 @@  discard block
 block discarded – undo
165 165
 	$i = 1;
166 166
 	foreach ($entete as $k => $v) {
167 167
 		if (trim((string) $v) == '') {
168
-			$v = 'col' . $i;
168
+			$v = 'col'.$i;
169 169
 		} // reperer des eventuelles cases vides
170 170
 		if (is_numeric($v) && $v < 0) {
171
-			$v = '__' . $v;
171
+			$v = '__'.$v;
172 172
 		} // ne pas risquer d'ecraser une cle numerique
173 173
 		if (is_numeric($v)) {
174
-			$v = '_' . $v;
174
+			$v = '_'.$v;
175 175
 		} // ne pas risquer d'ecraser une cle numerique
176 176
 		$v = strtolower(preg_replace(',\W+,', '_', (string) translitteration($v)));
177 177
 		foreach ($csv as &$item) {
@@ -257,7 +257,7 @@  discard block
 block discarded – undo
257 257
  * @return array|bool
258 258
  */
259 259
 function inc_pregfiles_to_array_dist($dir, $regexp = -1, $limit = 10000) {
260
-	return (array)preg_files($dir, $regexp, $limit);
260
+	return (array) preg_files($dir, $regexp, $limit);
261 261
 }
262 262
 
263 263
 /**
@@ -272,13 +272,13 @@  discard block
 block discarded – undo
272 272
 	$glob_to_array = charger_fonction('glob_to_array', 'inc');
273 273
 	$a = $glob_to_array($data);
274 274
 	foreach ($a as &$v) {
275
-		$b = (array)@stat($v);
275
+		$b = (array) @stat($v);
276 276
 		foreach (array_keys($b) as $k) {
277 277
 			if (is_numeric($k)) {
278 278
 				unset($b[$k]);
279 279
 			}
280 280
 		}
281
-		$b['file'] = preg_replace('`/$`', '', (string) $v) ;
281
+		$b['file'] = preg_replace('`/$`', '', (string) $v);
282 282
 		$v = array_merge(
283 283
 			pathinfo((string) $v),
284 284
 			$b
@@ -298,7 +298,7 @@  discard block
 block discarded – undo
298 298
 	$xml_array = [];
299 299
 	for ($object->rewind(); $object->valid(); $object->next()) {
300 300
 		if (array_key_exists($key = $object->key(), $xml_array)) {
301
-			$key .= '-' . uniqid();
301
+			$key .= '-'.uniqid();
302 302
 		}
303 303
 		$vars = get_object_vars($object->current());
304 304
 		if (isset($vars['@attributes'])) {
Please login to merge, or discard this patch.
ecrire/inc/exporter_csv.php 3 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -37,7 +37,7 @@  discard block
 block discarded – undo
37 37
 	$champ = preg_replace(',[\s]+,ms', ' ', $champ);
38 38
 	$champ = str_replace('"', '""', $champ);
39 39
 
40
-	return '"' . $champ . '"';
40
+	return '"'.$champ.'"';
41 41
 }
42 42
 
43 43
 /**
@@ -57,7 +57,7 @@  discard block
 block discarded – undo
57 57
 	if ($callback) {
58 58
 		$ligne = $callback($nb, $ligne, $delim, $importer_charset);
59 59
 	}
60
-	$output = implode($delim, array_map('exporter_csv_champ', $ligne)) . "\r\n";
60
+	$output = implode($delim, array_map('exporter_csv_champ', $ligne))."\r\n";
61 61
 	if ($importer_charset) {
62 62
 		$output = str_replace('’', '\'', $output);
63 63
 		$output = unicode2charset(html2unicode(charset2unicode($output)), $importer_charset);
@@ -184,7 +184,7 @@  discard block
 block discarded – undo
184 184
 		$fichier = 'php://output';
185 185
 	}
186 186
 	else {
187
-		$fichier = sous_repertoire(_DIR_CACHE, 'export') . $basename;
187
+		$fichier = sous_repertoire(_DIR_CACHE, 'export').$basename;
188 188
 	}
189 189
 
190 190
 	$fp = fopen($fichier, 'w');
Please login to merge, or discard this patch.
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -182,8 +182,7 @@
 block discarded – undo
182 182
 	// sinon on ecrit directement sur stdout
183 183
 	if ($options['envoyer'] && $options['envoyer'] !== 'attachment') {
184 184
 		$fichier = 'php://output';
185
-	}
186
-	else {
185
+	} else {
187 186
 		$fichier = sous_repertoire(_DIR_CACHE, 'export') . $basename;
188 187
 	}
189 188
 
Please login to merge, or discard this patch.
Indentation   +119 added lines, -119 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 include_spip('inc/charsets');
@@ -31,13 +31,13 @@  discard block
 block discarded – undo
31 31
  * @return string
32 32
  */
33 33
 function exporter_csv_champ($champ) {
34
-	#$champ = str_replace("\r", "\n", $champ);
35
-	#$champ = preg_replace(",[\n]+,ms", "\n", $champ);
36
-	#$champ = str_replace("\n", ", ", $champ);
37
-	$champ = preg_replace(',[\s]+,ms', ' ', $champ);
38
-	$champ = str_replace('"', '""', $champ);
34
+    #$champ = str_replace("\r", "\n", $champ);
35
+    #$champ = preg_replace(",[\n]+,ms", "\n", $champ);
36
+    #$champ = str_replace("\n", ", ", $champ);
37
+    $champ = preg_replace(',[\s]+,ms', ' ', $champ);
38
+    $champ = str_replace('"', '""', $champ);
39 39
 
40
-	return '"' . $champ . '"';
40
+    return '"' . $champ . '"';
41 41
 }
42 42
 
43 43
 /**
@@ -54,15 +54,15 @@  discard block
 block discarded – undo
54 54
  * @return string
55 55
  */
56 56
 function exporter_csv_ligne_numerotee($nb, $ligne, $delim = ',', $importer_charset = null, ?callable $callback = null) {
57
-	if ($callback) {
58
-		$ligne = $callback($nb, $ligne, $delim, $importer_charset);
59
-	}
60
-	$output = implode($delim, array_map('exporter_csv_champ', $ligne)) . "\r\n";
61
-	if ($importer_charset) {
62
-		$output = str_replace('’', '\'', $output);
63
-		$output = unicode2charset(html2unicode(charset2unicode($output)), $importer_charset);
64
-	}
65
-	return $output;
57
+    if ($callback) {
58
+        $ligne = $callback($nb, $ligne, $delim, $importer_charset);
59
+    }
60
+    $output = implode($delim, array_map('exporter_csv_champ', $ligne)) . "\r\n";
61
+    if ($importer_charset) {
62
+        $output = str_replace('’', '\'', $output);
63
+        $output = unicode2charset(html2unicode(charset2unicode($output)), $importer_charset);
64
+    }
65
+    return $output;
66 66
 }
67 67
 
68 68
 /**
@@ -90,107 +90,107 @@  discard block
 block discarded – undo
90 90
  */
91 91
 function inc_exporter_csv_dist($titre, $resource, $options = []) {
92 92
 
93
-	// support ancienne syntaxe
94
-	// inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null, $envoyer = true)
95
-	if (is_string($options)) {
96
-		$args = func_get_args();
97
-		$options = [];
98
-		foreach ([2 => 'delim', 3 => 'entetes', 4 => 'envoyer'] as $k => $option) {
99
-			if (!empty($args[$k])) {
100
-				$options[$option] = $args[$k];
101
-			}
102
-		}
103
-	}
104
-
105
-	$default_options = [
106
-		'fichier' => null, // par défaut = $titre
107
-		'extension' => null, // par défaut = choix auto
108
-		'delim' => ',',
109
-		'entetes' => null,
110
-		'envoyer' => true,
111
-		'charset' => null,
112
-		'callback' => null,
113
-	];
114
-	$options = array_merge($default_options, $options);
115
-
116
-	// Délimiteur
117
-	if ($options['delim'] == 'TAB') {
118
-		$options['delim'] = "\t";
119
-	}
120
-	if (!in_array($options['delim'], [',', ';', "\t"])) {
121
-		$options['delim'] = ',';
122
-	}
123
-
124
-	// Nom du fichier : celui indiqué dans les options, sinon le titre
125
-	// Normalisation : uniquement les caractères non spéciaux, tirets, underscore et point + remplacer espaces par underscores
126
-	$filename = $options['fichier'] ?? translitteration(textebrut(typo($titre)));
127
-	$filename = preg_replace([',[^\w\-_\.\s]+,', ',\s+,'], ['', '_'], trim((string) $filename));
128
-	$filename = rtrim($filename, '.');
129
-
130
-	// Extension : celle indiquée en option, sinon choisie selon le délimiteur
131
-	// Normalisation : uniquement les charactères non spéciaux
132
-	if (!empty($options['extension'])) {
133
-		$options['extension'] = preg_replace(',[^\w]+,', '', trim((string) $options['extension']));
134
-	}
135
-	$extension = $options['extension'] ?? ($options['delim'] === ',' ? 'csv' : 'xls');
136
-
137
-	// Fichier
138
-	$basename = "$filename.$extension";
139
-
140
-	// Charset : celui indiqué en option, sinon celui compatible excel si nécessaire, sinon celui du site
141
-	// Excel n'accepte pas l'utf-8 ni les entites html... on transcode tout ce qu'on peut
142
-	$charset_site = $GLOBALS['meta']['charset'];
143
-	$charset_excel = ($extension === 'xls' ? 'iso-8859-1' : null);
144
-	$charset = $options['charset'] ?? $charset_excel ?? $charset_site;
145
-	$importer_charset = (($charset === $charset_site) ? null : $charset);
146
-
147
-	$output = '';
148
-	$nb = 0;
149
-	if (!empty($options['entetes']) && is_array($options['entetes'])) {
150
-		$output = exporter_csv_ligne_numerotee($nb, $options['entetes'], $options['delim'], $importer_charset, $options['callback']);
151
-	}
152
-	// les donnees commencent toujours a la ligne 1, qu'il y ait ou non des entetes
153
-	$nb++;
154
-
155
-	if ($options['envoyer']) {
156
-		$disposition = ($options['envoyer'] === 'attachment' ? 'attachment' : 'inline');
157
-		header("Content-Type: text/comma-separated-values; charset=$charset");
158
-		header("Content-Disposition: $disposition; filename=$basename");
159
-
160
-		// Vider tous les tampons
161
-		$level = @ob_get_level();
162
-		while ($level--) {
163
-			@ob_end_flush();
164
-		}
165
-	}
166
-
167
-	// si envoyer=='attachment' on passe par un fichier temporaire
168
-	// sinon on ecrit directement sur stdout
169
-	if ($options['envoyer'] && $options['envoyer'] !== 'attachment') {
170
-		$fichier = 'php://output';
171
-	}
172
-	else {
173
-		$fichier = sous_repertoire(_DIR_CACHE, 'export') . $basename;
174
-	}
175
-
176
-	$fp = fopen($fichier, 'w');
177
-	$length = fwrite($fp, $output);
178
-
179
-	while ($row = is_array($resource) ? array_shift($resource) : sql_fetch($resource)) {
180
-		$output = exporter_csv_ligne_numerotee($nb, $row, $options['delim'], $importer_charset, $options['callback']);
181
-		$length += fwrite($fp, $output);
182
-		$nb++;
183
-	}
184
-	fclose($fp);
185
-
186
-	if ($options['envoyer']) {
187
-		if ($options['envoyer'] === 'attachment') {
188
-			header("Content-Length: $length");
189
-			readfile($fichier);
190
-		}
191
-		// si on a envoye inline, c'est deja tout bon
192
-		exit;
193
-	}
194
-
195
-	return $fichier;
93
+    // support ancienne syntaxe
94
+    // inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null, $envoyer = true)
95
+    if (is_string($options)) {
96
+        $args = func_get_args();
97
+        $options = [];
98
+        foreach ([2 => 'delim', 3 => 'entetes', 4 => 'envoyer'] as $k => $option) {
99
+            if (!empty($args[$k])) {
100
+                $options[$option] = $args[$k];
101
+            }
102
+        }
103
+    }
104
+
105
+    $default_options = [
106
+        'fichier' => null, // par défaut = $titre
107
+        'extension' => null, // par défaut = choix auto
108
+        'delim' => ',',
109
+        'entetes' => null,
110
+        'envoyer' => true,
111
+        'charset' => null,
112
+        'callback' => null,
113
+    ];
114
+    $options = array_merge($default_options, $options);
115
+
116
+    // Délimiteur
117
+    if ($options['delim'] == 'TAB') {
118
+        $options['delim'] = "\t";
119
+    }
120
+    if (!in_array($options['delim'], [',', ';', "\t"])) {
121
+        $options['delim'] = ',';
122
+    }
123
+
124
+    // Nom du fichier : celui indiqué dans les options, sinon le titre
125
+    // Normalisation : uniquement les caractères non spéciaux, tirets, underscore et point + remplacer espaces par underscores
126
+    $filename = $options['fichier'] ?? translitteration(textebrut(typo($titre)));
127
+    $filename = preg_replace([',[^\w\-_\.\s]+,', ',\s+,'], ['', '_'], trim((string) $filename));
128
+    $filename = rtrim($filename, '.');
129
+
130
+    // Extension : celle indiquée en option, sinon choisie selon le délimiteur
131
+    // Normalisation : uniquement les charactères non spéciaux
132
+    if (!empty($options['extension'])) {
133
+        $options['extension'] = preg_replace(',[^\w]+,', '', trim((string) $options['extension']));
134
+    }
135
+    $extension = $options['extension'] ?? ($options['delim'] === ',' ? 'csv' : 'xls');
136
+
137
+    // Fichier
138
+    $basename = "$filename.$extension";
139
+
140
+    // Charset : celui indiqué en option, sinon celui compatible excel si nécessaire, sinon celui du site
141
+    // Excel n'accepte pas l'utf-8 ni les entites html... on transcode tout ce qu'on peut
142
+    $charset_site = $GLOBALS['meta']['charset'];
143
+    $charset_excel = ($extension === 'xls' ? 'iso-8859-1' : null);
144
+    $charset = $options['charset'] ?? $charset_excel ?? $charset_site;
145
+    $importer_charset = (($charset === $charset_site) ? null : $charset);
146
+
147
+    $output = '';
148
+    $nb = 0;
149
+    if (!empty($options['entetes']) && is_array($options['entetes'])) {
150
+        $output = exporter_csv_ligne_numerotee($nb, $options['entetes'], $options['delim'], $importer_charset, $options['callback']);
151
+    }
152
+    // les donnees commencent toujours a la ligne 1, qu'il y ait ou non des entetes
153
+    $nb++;
154
+
155
+    if ($options['envoyer']) {
156
+        $disposition = ($options['envoyer'] === 'attachment' ? 'attachment' : 'inline');
157
+        header("Content-Type: text/comma-separated-values; charset=$charset");
158
+        header("Content-Disposition: $disposition; filename=$basename");
159
+
160
+        // Vider tous les tampons
161
+        $level = @ob_get_level();
162
+        while ($level--) {
163
+            @ob_end_flush();
164
+        }
165
+    }
166
+
167
+    // si envoyer=='attachment' on passe par un fichier temporaire
168
+    // sinon on ecrit directement sur stdout
169
+    if ($options['envoyer'] && $options['envoyer'] !== 'attachment') {
170
+        $fichier = 'php://output';
171
+    }
172
+    else {
173
+        $fichier = sous_repertoire(_DIR_CACHE, 'export') . $basename;
174
+    }
175
+
176
+    $fp = fopen($fichier, 'w');
177
+    $length = fwrite($fp, $output);
178
+
179
+    while ($row = is_array($resource) ? array_shift($resource) : sql_fetch($resource)) {
180
+        $output = exporter_csv_ligne_numerotee($nb, $row, $options['delim'], $importer_charset, $options['callback']);
181
+        $length += fwrite($fp, $output);
182
+        $nb++;
183
+    }
184
+    fclose($fp);
185
+
186
+    if ($options['envoyer']) {
187
+        if ($options['envoyer'] === 'attachment') {
188
+            header("Content-Length: $length");
189
+            readfile($fichier);
190
+        }
191
+        // si on a envoye inline, c'est deja tout bon
192
+        exit;
193
+    }
194
+
195
+    return $fichier;
196 196
 }
Please login to merge, or discard this patch.
ecrire/inc/headers.php 2 patches
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -78,20 +78,20 @@  discard block
 block discarded – undo
78 78
 		|| (
79 79
 			!empty($_SERVER['SERVER_SOFTWARE'])
80 80
 				&& _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE
81
-				&& preg_match('/' . _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', (string) $_SERVER['SERVER_SOFTWARE'])
81
+				&& preg_match('/'._SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE.'/i', (string) $_SERVER['SERVER_SOFTWARE'])
82 82
 			|| !empty($_SERVER['SERVER_SIGNATURE'])
83 83
 				&& _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE
84
-				&& preg_match('/' . _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', (string) $_SERVER['SERVER_SIGNATURE'])
84
+				&& preg_match('/'._SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE.'/i', (string) $_SERVER['SERVER_SIGNATURE'])
85 85
 			|| function_exists('apache_getenv')
86 86
 			|| defined('_SERVER_APACHE')
87 87
 		)
88 88
 	) {
89
-		@header('Location: ' . $url);
89
+		@header('Location: '.$url);
90 90
 		$equiv = '';
91 91
 	} else {
92
-		@header('Refresh: 0; url=' . $url);
92
+		@header('Refresh: 0; url='.$url);
93 93
 		if (isset($GLOBALS['meta']['charset'])) {
94
-			@header('Content-Type: text/html; charset=' . $GLOBALS['meta']['charset']);
94
+			@header('Content-Type: text/html; charset='.$GLOBALS['meta']['charset']);
95 95
 		}
96 96
 		$equiv = "<meta http-equiv='Refresh' content='0; url=$url'>";
97 97
 	}
@@ -103,11 +103,11 @@  discard block
 block discarded – undo
103 103
 	html_lang_attributes(), '
104 104
 <head>',
105 105
 	$equiv, '
106
-<title>HTTP ' . $status . '</title>
107
-' . ((isset($GLOBALS['meta']['charset'])) ? '<meta http-equiv="Content-Type" content="text/html;charset=' . $GLOBALS['meta']['charset'] . '">' : '') . '
106
+<title>HTTP ' . $status.'</title>
107
+' . ((isset($GLOBALS['meta']['charset'])) ? '<meta http-equiv="Content-Type" content="text/html;charset='.$GLOBALS['meta']['charset'].'">' : '').'
108 108
 </head>
109 109
 <body>
110
-<h1>HTTP ' . $status . '</h1>
110
+<h1>HTTP ' . $status.'</h1>
111 111
 <a href="',
112 112
 	quote_amp($url),
113 113
 	'">',
@@ -142,7 +142,7 @@  discard block
 block discarded – undo
142 142
 		# en theorie on devrait faire ca tout le temps, mais quand la chaine
143 143
 		# commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne
144 144
 		if ($url[0] == '?') {
145
-			$url = url_de_base() . $url;
145
+			$url = url_de_base().$url;
146 146
 		}
147 147
 		$url = str_replace('&amp;', '&', (string) $url);
148 148
 		spip_log("redirige formulaire ajax: $url");
@@ -150,9 +150,9 @@  discard block
 block discarded – undo
150 150
 		if ($format == 'ajaxform') {
151 151
 			return [
152 152
 				// on renvoie un lien masque qui sera traite par ajaxCallback.js
153
-				'<a href="' . quote_amp($url) . '" name="ajax_redirect"  style="display:none;">' . _T('navigateur_pas_redirige') . '</a>',
153
+				'<a href="'.quote_amp($url).'" name="ajax_redirect"  style="display:none;">'._T('navigateur_pas_redirige').'</a>',
154 154
 				// et un message au cas ou
155
-				'<br /><a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>'
155
+				'<br /><a href="'.quote_amp($url).'">'._T('navigateur_pas_redirige').'</a>'
156 156
 			];
157 157
 		} else // format message texte, tout en js inline
158 158
 		{
@@ -161,7 +161,7 @@  discard block
 block discarded – undo
161 161
 				"<script type='text/javascript'>if (parent.window){parent.window.document.location.replace(\"$url\");} else {document.location.replace(\"$url\");}</script>"
162 162
 				. http_img_pack('loader.svg', '', " class='loader'")
163 163
 				. '<br />'
164
-				. '<a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>';
164
+				. '<a href="'.quote_amp($url).'">'._T('navigateur_pas_redirige').'</a>';
165 165
 		}
166 166
 	}
167 167
 }
@@ -219,7 +219,7 @@  discard block
 block discarded – undo
219 219
 
220 220
 	header("Content-Type: text/html; charset=$charset");
221 221
 	header('Expires: 0');
222
-	header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
222
+	header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
223 223
 	header('Cache-Control: no-cache, must-revalidate');
224 224
 	header('Pragma: no-cache');
225 225
 }
Please login to merge, or discard this patch.
Indentation   +135 added lines, -135 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 
@@ -37,133 +37,133 @@  discard block
 block discarded – undo
37 37
  * @param int $status Code de redirection (301 ou 302)
38 38
  **/
39 39
 function redirige_par_entete($url, $equiv = '', $status = 302) {
40
-	if (!in_array($status, [301, 302])) {
41
-		$status = 302;
42
-	}
43
-
44
-	$url = trim(strtr($url, "\n\r", '  '));
45
-	# si l'url de redirection est relative, on la passe en absolue
46
-	if (!preg_match(',^(\w+:)?//,', $url)) {
47
-		include_spip('inc/filtres_mini');
48
-		$url = url_absolue($url);
49
-	}
50
-
51
-	if (defined('_AJAX') && _AJAX) {
52
-		$url = parametre_url($url, 'var_ajax_redir', 1, '&');
53
-	}
54
-
55
-	// ne pas laisser passer n'importe quoi dans l'url
56
-	$url = str_replace(['<', '"'], ['&lt;', '&quot;'], (string) $url);
57
-	$url = str_replace(["\r", "\n", ' '], ['%0D', '%0A', '%20'], $url);
58
-	while (str_contains($url, '%0A')) {
59
-		$url = str_replace('%0A', '', $url);
60
-	}
61
-	// interdire les url inline avec des pseudo-protocoles :
62
-	if (
63
-		preg_match(',data:,i', $url) && preg_match('/base64\s*,/i', $url) || preg_match(',(javascript|mailto):,i', $url)
64
-	) {
65
-		$url = './';
66
-	}
67
-
68
-	// Il n'y a que sous Apache que setcookie puis redirection fonctionne
69
-	include_spip('inc/cookie');
70
-	if (!defined('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE')) {
71
-		define('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE', '^(Apache|Cherokee|nginx)');
72
-	}
73
-	if (!defined('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE')) {
74
-		define('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE', 'Apache|Cherokee|nginx');
75
-	}
76
-	if (
77
-		!$equiv && !spip_cookie_envoye()
78
-		|| (
79
-			!empty($_SERVER['SERVER_SOFTWARE'])
80
-				&& _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE
81
-				&& preg_match('/' . _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', (string) $_SERVER['SERVER_SOFTWARE'])
82
-			|| !empty($_SERVER['SERVER_SIGNATURE'])
83
-				&& _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE
84
-				&& preg_match('/' . _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', (string) $_SERVER['SERVER_SIGNATURE'])
85
-			|| function_exists('apache_getenv')
86
-			|| defined('_SERVER_APACHE')
87
-		)
88
-	) {
89
-		@header('Location: ' . $url);
90
-		$equiv = '';
91
-	} else {
92
-		@header('Refresh: 0; url=' . $url);
93
-		if (isset($GLOBALS['meta']['charset'])) {
94
-			@header('Content-Type: text/html; charset=' . $GLOBALS['meta']['charset']);
95
-		}
96
-		$equiv = "<meta http-equiv='Refresh' content='0; url=$url'>";
97
-	}
98
-	include_spip('inc/lang');
99
-	if ($status != 302) {
100
-		http_response_code($status);
101
-	}
102
-	echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">', "\n",
103
-	html_lang_attributes(), '
40
+    if (!in_array($status, [301, 302])) {
41
+        $status = 302;
42
+    }
43
+
44
+    $url = trim(strtr($url, "\n\r", '  '));
45
+    # si l'url de redirection est relative, on la passe en absolue
46
+    if (!preg_match(',^(\w+:)?//,', $url)) {
47
+        include_spip('inc/filtres_mini');
48
+        $url = url_absolue($url);
49
+    }
50
+
51
+    if (defined('_AJAX') && _AJAX) {
52
+        $url = parametre_url($url, 'var_ajax_redir', 1, '&');
53
+    }
54
+
55
+    // ne pas laisser passer n'importe quoi dans l'url
56
+    $url = str_replace(['<', '"'], ['&lt;', '&quot;'], (string) $url);
57
+    $url = str_replace(["\r", "\n", ' '], ['%0D', '%0A', '%20'], $url);
58
+    while (str_contains($url, '%0A')) {
59
+        $url = str_replace('%0A', '', $url);
60
+    }
61
+    // interdire les url inline avec des pseudo-protocoles :
62
+    if (
63
+        preg_match(',data:,i', $url) && preg_match('/base64\s*,/i', $url) || preg_match(',(javascript|mailto):,i', $url)
64
+    ) {
65
+        $url = './';
66
+    }
67
+
68
+    // Il n'y a que sous Apache que setcookie puis redirection fonctionne
69
+    include_spip('inc/cookie');
70
+    if (!defined('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE')) {
71
+        define('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE', '^(Apache|Cherokee|nginx)');
72
+    }
73
+    if (!defined('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE')) {
74
+        define('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE', 'Apache|Cherokee|nginx');
75
+    }
76
+    if (
77
+        !$equiv && !spip_cookie_envoye()
78
+        || (
79
+            !empty($_SERVER['SERVER_SOFTWARE'])
80
+                && _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE
81
+                && preg_match('/' . _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', (string) $_SERVER['SERVER_SOFTWARE'])
82
+            || !empty($_SERVER['SERVER_SIGNATURE'])
83
+                && _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE
84
+                && preg_match('/' . _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', (string) $_SERVER['SERVER_SIGNATURE'])
85
+            || function_exists('apache_getenv')
86
+            || defined('_SERVER_APACHE')
87
+        )
88
+    ) {
89
+        @header('Location: ' . $url);
90
+        $equiv = '';
91
+    } else {
92
+        @header('Refresh: 0; url=' . $url);
93
+        if (isset($GLOBALS['meta']['charset'])) {
94
+            @header('Content-Type: text/html; charset=' . $GLOBALS['meta']['charset']);
95
+        }
96
+        $equiv = "<meta http-equiv='Refresh' content='0; url=$url'>";
97
+    }
98
+    include_spip('inc/lang');
99
+    if ($status != 302) {
100
+        http_response_code($status);
101
+    }
102
+    echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">', "\n",
103
+    html_lang_attributes(), '
104 104
 <head>',
105
-	$equiv, '
105
+    $equiv, '
106 106
 <title>HTTP ' . $status . '</title>
107 107
 ' . ((isset($GLOBALS['meta']['charset'])) ? '<meta http-equiv="Content-Type" content="text/html;charset=' . $GLOBALS['meta']['charset'] . '">' : '') . '
108 108
 </head>
109 109
 <body>
110 110
 <h1>HTTP ' . $status . '</h1>
111 111
 <a href="',
112
-	quote_amp($url),
113
-	'">',
114
-	_T('navigateur_pas_redirige'),
115
-	'</a></body></html>';
112
+    quote_amp($url),
113
+    '">',
114
+    _T('navigateur_pas_redirige'),
115
+    '</a></body></html>';
116 116
 
117
-	spip_log("redirige $status: $url");
117
+    spip_log("redirige $status: $url");
118 118
 
119
-	exit;
119
+    exit;
120 120
 }
121 121
 
122 122
 function redirige_formulaire($url, $equiv = '', $format = 'message') {
123
-	if (
124
-		!_AJAX
125
-		&& !headers_sent()
126
-		&& !_request('var_ajax')
127
-	) {
128
-		redirige_par_entete(str_replace('&amp;', '&', (string) $url), $equiv);
129
-	} // si c'est une ancre, fixer simplement le window.location.hash
130
-	elseif ($format == 'ajaxform' && preg_match(',^#[0-9a-z\-_]+$,i', (string) $url)) {
131
-		return [
132
-			// on renvoie un lien masque qui sera traite par ajaxCallback.js
133
-			"<a href='$url' name='ajax_ancre' style='display:none;'>anchor</a>",
134
-			// et rien dans le message ok
135
-			''
136
-		];
137
-	} else {
138
-		// ne pas laisser passer n'importe quoi dans l'url
139
-		$url = str_replace(['<', '"'], ['&lt;', '&quot;'], (string) $url);
140
-
141
-		$url = strtr($url, "\n\r", '  ');
142
-		# en theorie on devrait faire ca tout le temps, mais quand la chaine
143
-		# commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne
144
-		if ($url[0] == '?') {
145
-			$url = url_de_base() . $url;
146
-		}
147
-		$url = str_replace('&amp;', '&', (string) $url);
148
-		spip_log("redirige formulaire ajax: $url");
149
-		include_spip('inc/filtres');
150
-		if ($format == 'ajaxform') {
151
-			return [
152
-				// on renvoie un lien masque qui sera traite par ajaxCallback.js
153
-				'<a href="' . quote_amp($url) . '" name="ajax_redirect"  style="display:none;">' . _T('navigateur_pas_redirige') . '</a>',
154
-				// et un message au cas ou
155
-				'<br /><a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>'
156
-			];
157
-		} else // format message texte, tout en js inline
158
-		{
159
-			return
160
-				// ie poste les formulaires dans une iframe, il faut donc rediriger son parent
161
-				"<script type='text/javascript'>if (parent.window){parent.window.document.location.replace(\"$url\");} else {document.location.replace(\"$url\");}</script>"
162
-				. http_img_pack('loader.svg', '', " class='loader'")
163
-				. '<br />'
164
-				. '<a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>';
165
-		}
166
-	}
123
+    if (
124
+        !_AJAX
125
+        && !headers_sent()
126
+        && !_request('var_ajax')
127
+    ) {
128
+        redirige_par_entete(str_replace('&amp;', '&', (string) $url), $equiv);
129
+    } // si c'est une ancre, fixer simplement le window.location.hash
130
+    elseif ($format == 'ajaxform' && preg_match(',^#[0-9a-z\-_]+$,i', (string) $url)) {
131
+        return [
132
+            // on renvoie un lien masque qui sera traite par ajaxCallback.js
133
+            "<a href='$url' name='ajax_ancre' style='display:none;'>anchor</a>",
134
+            // et rien dans le message ok
135
+            ''
136
+        ];
137
+    } else {
138
+        // ne pas laisser passer n'importe quoi dans l'url
139
+        $url = str_replace(['<', '"'], ['&lt;', '&quot;'], (string) $url);
140
+
141
+        $url = strtr($url, "\n\r", '  ');
142
+        # en theorie on devrait faire ca tout le temps, mais quand la chaine
143
+        # commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne
144
+        if ($url[0] == '?') {
145
+            $url = url_de_base() . $url;
146
+        }
147
+        $url = str_replace('&amp;', '&', (string) $url);
148
+        spip_log("redirige formulaire ajax: $url");
149
+        include_spip('inc/filtres');
150
+        if ($format == 'ajaxform') {
151
+            return [
152
+                // on renvoie un lien masque qui sera traite par ajaxCallback.js
153
+                '<a href="' . quote_amp($url) . '" name="ajax_redirect"  style="display:none;">' . _T('navigateur_pas_redirige') . '</a>',
154
+                // et un message au cas ou
155
+                '<br /><a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>'
156
+            ];
157
+        } else // format message texte, tout en js inline
158
+        {
159
+            return
160
+                // ie poste les formulaires dans une iframe, il faut donc rediriger son parent
161
+                "<script type='text/javascript'>if (parent.window){parent.window.document.location.replace(\"$url\");} else {document.location.replace(\"$url\");}</script>"
162
+                . http_img_pack('loader.svg', '', " class='loader'")
163
+                . '<br />'
164
+                . '<a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>';
165
+        }
166
+    }
167 167
 }
168 168
 
169 169
 /**
@@ -184,27 +184,27 @@  discard block
 block discarded – undo
184 184
  * @return void
185 185
  **/
186 186
 function redirige_url_ecrire($script = '', $args = '', $equiv = '') {
187
-	return redirige_par_entete(generer_url_ecrire($script, $args, true), $equiv);
187
+    return redirige_par_entete(generer_url_ecrire($script, $args, true), $equiv);
188 188
 }
189 189
 
190 190
 // Retourne ce qui va bien pour que le navigateur ne mette pas la page en cache
191 191
 function http_no_cache() {
192
-	if (headers_sent()) {
193
-		spip_log('http_no_cache arrive trop tard');
194
-
195
-		return;
196
-	}
197
-	$charset = empty($GLOBALS['meta']['charset']) ? 'utf-8' : $GLOBALS['meta']['charset'];
198
-
199
-	// selon http://developer.apple.com/internet/safari/faq.html#anchor5
200
-	// il faudrait aussi pour Safari
201
-	// header("Cache-Control: post-check=0, pre-check=0", false)
202
-	// mais ca ne respecte pas
203
-	// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
204
-
205
-	header("Content-Type: text/html; charset=$charset");
206
-	header('Expires: 0');
207
-	header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
208
-	header('Cache-Control: no-cache, must-revalidate');
209
-	header('Pragma: no-cache');
192
+    if (headers_sent()) {
193
+        spip_log('http_no_cache arrive trop tard');
194
+
195
+        return;
196
+    }
197
+    $charset = empty($GLOBALS['meta']['charset']) ? 'utf-8' : $GLOBALS['meta']['charset'];
198
+
199
+    // selon http://developer.apple.com/internet/safari/faq.html#anchor5
200
+    // il faudrait aussi pour Safari
201
+    // header("Cache-Control: post-check=0, pre-check=0", false)
202
+    // mais ca ne respecte pas
203
+    // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
204
+
205
+    header("Content-Type: text/html; charset=$charset");
206
+    header('Expires: 0');
207
+    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
208
+    header('Cache-Control: no-cache, must-revalidate');
209
+    header('Pragma: no-cache');
210 210
 }
Please login to merge, or discard this patch.
ecrire/inc/modifier.php 2 patches
Indentation   +278 added lines, -278 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -38,28 +38,28 @@  discard block
 block discarded – undo
38 38
  *     Tableau des champs et valeurs collectées
39 39
  */
40 40
 function collecter_requests($include_list, $exclude_list = [], $set = null, $tous = false) {
41
-	$c = $set;
42
-	if (!$c) {
43
-		$c = [];
44
-		foreach ($include_list as $champ) {
45
-			// on ne collecte que les champs reellement envoyes par defaut.
46
-			// le cas d'un envoi de valeur NULL peut du coup poser probleme.
47
-			$val = _request($champ);
48
-			if ($tous || $val !== null) {
49
-				$c[$champ] = $val;
50
-			}
51
-		}
52
-		// on ajoute toujours la lang en saisie possible
53
-		// meme si pas prevu au depart pour l'objet concerne
54
-		if ($l = _request('changer_lang')) {
55
-			$c['lang'] = $l;
56
-		}
57
-	}
58
-	foreach ($exclude_list as $champ) {
59
-		unset($c[$champ]);
60
-	}
61
-
62
-	return $c;
41
+    $c = $set;
42
+    if (!$c) {
43
+        $c = [];
44
+        foreach ($include_list as $champ) {
45
+            // on ne collecte que les champs reellement envoyes par defaut.
46
+            // le cas d'un envoi de valeur NULL peut du coup poser probleme.
47
+            $val = _request($champ);
48
+            if ($tous || $val !== null) {
49
+                $c[$champ] = $val;
50
+            }
51
+        }
52
+        // on ajoute toujours la lang en saisie possible
53
+        // meme si pas prevu au depart pour l'objet concerne
54
+        if ($l = _request('changer_lang')) {
55
+            $c['lang'] = $l;
56
+        }
57
+    }
58
+    foreach ($exclude_list as $champ) {
59
+        unset($c[$champ]);
60
+    }
61
+
62
+    return $c;
63 63
 }
64 64
 
65 65
 /**
@@ -96,259 +96,259 @@  discard block
 block discarded – undo
96 96
  *     - chaîne : texte d'un message d'erreur
97 97
  */
98 98
 function objet_modifier_champs($objet, $id_objet, $options, $c = null, $serveur = '') {
99
-	if (!$id_objet = (int) $id_objet) {
100
-		spip_log('Erreur $id_objet non defini', 'warn');
101
-
102
-		return _T('erreur_technique_enregistrement_impossible');
103
-	}
104
-
105
-	include_spip('inc/filtres');
106
-
107
-	$table_objet = table_objet($objet, $serveur);
108
-	$spip_table_objet = table_objet_sql($objet, $serveur);
109
-	$id_table_objet = id_table_objet($objet, $serveur);
110
-	$trouver_table = charger_fonction('trouver_table', 'base');
111
-	$desc = $trouver_table($spip_table_objet, $serveur);
112
-
113
-	// Appels incomplets (sans $c)
114
-	if (!is_array($c)) {
115
-		spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c');
116
-
117
-		return _T('erreur_technique_enregistrement_impossible');
118
-	}
119
-
120
-	// Securite : certaines variables ne sont jamais acceptees ici
121
-	// car elles ne relevent pas de autoriser(xxx, modifier) ;
122
-	// il faut passer par instituer_XX()
123
-	// TODO: faut-il passer ces variables interdites
124
-	// dans un fichier de description separe ?
125
-	unset($c['statut']);
126
-	unset($c['id_parent']);
127
-	unset($c['id_rubrique']);
128
-	unset($c['id_secteur']);
129
-
130
-	// Gerer les champs non vides
131
-	if (isset($options['nonvide']) && is_array($options['nonvide'])) {
132
-		foreach ($options['nonvide'] as $champ => $sinon) {
133
-			if (isset($c[$champ]) && $c[$champ] === '') {
134
-				$c[$champ] = $sinon;
135
-			}
136
-		}
137
-	}
138
-
139
-	// N'accepter que les champs qui existent dans la table
140
-	$champs = array_intersect_key($c, $desc['field']);
141
-	// et dont la valeur n'est pas null
142
-	$champs = array_filter($champs, static fn($var) => $var !== null);
143
-	// TODO: ici aussi on peut valider les contenus
144
-	// en fonction du type
145
-
146
-	// Nettoyer les valeurs
147
-	$champs = array_map('corriger_caracteres', $champs);
148
-
149
-	// On récupère l'état avant toute modification
150
-	$row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet);
151
-
152
-	// Envoyer aux plugins
153
-	$champs = pipeline(
154
-		'pre_edition',
155
-		[
156
-			'args' => [
157
-				'table' => $spip_table_objet, // compatibilite
158
-				'table_objet' => $table_objet,
159
-				'spip_table_objet' => $spip_table_objet,
160
-				'desc' => $desc,
161
-				'type' => $objet,
162
-				'id_objet' => $id_objet,
163
-				'data' => $options['data'] ?? null,
164
-				'champs' => $options['champs'] ?? [], // [doc] c'est quoi ?
165
-				'champs_anciens' => $row, // état du contenu avant modif
166
-				'serveur' => $serveur,
167
-				'action' => $options['action'] ?? 'modifier'
168
-			],
169
-			'data' => $champs
170
-		]
171
-	);
172
-
173
-	if (!$champs) {
174
-		return false;
175
-	}
176
-
177
-
178
-	// marquer le fait que l'objet est travaille par toto a telle date
179
-	include_spip('inc/config');
180
-	if (lire_config('articles_modif', 'non') !== 'non') {
181
-		include_spip('inc/drapeau_edition');
182
-		signale_edition($id_objet, $GLOBALS['visiteur_session'], $objet);
183
-	}
184
-
185
-	// Verifier si les mises a jour sont pertinentes, datees, en conflit etc
186
-	include_spip('inc/editer');
187
-	if (!isset($options['data']) || is_null($options['data'])) {
188
-		$options['data'] = &$_POST;
189
-	}
190
-	$conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur);
191
-	// cas hypothetique : normalement inc/editer verifie en amont le conflit edition
192
-	// et gere l'interface
193
-	// ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme
194
-	if ($conflits) {
195
-		return _T('titre_conflit_edition');
196
-	}
197
-
198
-	if ($champs) {
199
-		// cas particulier de la langue : passer par instituer_langue_objet
200
-		if (isset($champs['lang'])) {
201
-			if ($changer_lang = $champs['lang']) {
202
-				$id_rubrique = 0;
203
-				if (isset($desc['field']['id_rubrique'])) {
204
-					$parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique';
205
-					$id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . (int) $id_objet);
206
-				}
207
-				$instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action');
208
-				$champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur);
209
-			}
210
-			// on laisse 'lang' dans $champs,
211
-			// ca permet de passer dans le pipeline post_edition et de journaliser
212
-			// et ca ne gene pas qu'on refasse un sql_updateq dessus apres l'avoir
213
-			// deja pris en compte
214
-		}
215
-
216
-		// la modif peut avoir lieu
217
-
218
-		// faut-il ajouter date_modif ?
219
-		if (
220
-			!empty($options['date_modif']) && !isset($champs[$options['date_modif']])
221
-		) {
222
-			$champs[$options['date_modif']] = date('Y-m-d H:i:s');
223
-		}
224
-
225
-		// allez on commit la modif
226
-		sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . (int) $id_objet, [], $serveur);
227
-
228
-		// on verifie si elle est bien passee
229
-		$moof = sql_fetsel(
230
-			array_keys($champs),
231
-			$spip_table_objet,
232
-			"$id_table_objet=" . (int) $id_objet,
233
-			[],
234
-			[],
235
-			'',
236
-			[],
237
-			$serveur
238
-		);
239
-		// si difference entre les champs, reperer les champs mal enregistres
240
-		if ($moof != $champs) {
241
-			$liste = [];
242
-			foreach ($moof as $k => $v) {
243
-				if (
244
-					$v !== $champs[$k]
245
-					// ne pas alerter si le champ est numerique est que les valeurs sont equivalentes
246
-					&& (!is_numeric($v) || (int) $v !== (int) $champs[$k])
247
-					// ne pas alerter si le champ est date, qu'on a envoye une valeur vide et qu'on recupere une date nulle
248
-					&& (strlen((string) $champs[$k]) || !in_array($v, ['0000-00-00 00:00:00', '0000-00-00']))
249
-				) {
250
-					$liste[] = $k;
251
-					$conflits[$k]['post'] = $champs[$k];
252
-					$conflits[$k]['save'] = $v;
253
-
254
-					// cas specifique MySQL+emoji : si l'un est la
255
-					// conversion utf8_noplanes de l'autre alors c'est OK
256
-					if (defined('_MYSQL_NOPLANES') && _MYSQL_NOPLANES) {
257
-						include_spip('inc/charsets');
258
-						if ($v == utf8_noplanes($champs[$k])) {
259
-							array_pop($liste);
260
-						}
261
-					}
262
-				}
263
-			}
264
-			// si un champ n'a pas ete correctement enregistre, loger et retourner une erreur
265
-			// c'est un cas exceptionnel
266
-			if ($liste !== []) {
267
-				spip_log(
268
-					"Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true),
269
-					'modifier.' . _LOG_CRITIQUE
270
-				);
271
-
272
-				return _T(
273
-					'erreur_technique_enregistrement_champs',
274
-					['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"]
275
-				);
276
-			}
277
-		}
278
-
279
-		// Invalider les caches
280
-		if (isset($options['invalideur']) && $options['invalideur']) {
281
-			include_spip('inc/invalideur');
282
-			if (is_array($options['invalideur'])) {
283
-				array_map('suivre_invalideur', $options['invalideur']);
284
-			} else {
285
-				suivre_invalideur($options['invalideur']);
286
-			}
287
-		}
288
-
289
-		// Notifications, gestion des revisions...
290
-		// en standard, appelle |nouvelle_revision ci-dessous
291
-		pipeline(
292
-			'post_edition',
293
-			[
294
-				'args' => [
295
-					'table' => $spip_table_objet,
296
-					'table_objet' => $table_objet,
297
-					'spip_table_objet' => $spip_table_objet,
298
-					'desc' => $desc,
299
-					'type' => $objet,
300
-					'id_objet' => $id_objet,
301
-					'champs' => $options['champs'] ?? [], // [doc] kesako ?
302
-					'champs_anciens' => $row, // état du contenu avant modif
303
-					'serveur' => $serveur,
304
-					'action' => $options['action'] ?? 'modifier'
305
-				],
306
-				'data' => $champs
307
-			]
308
-		);
309
-	}
310
-
311
-	// Appeler une notification
312
-	if ($notifications = charger_fonction('notifications', 'inc')) {
313
-		$notifications(
314
-			"{$objet}_modifier",
315
-			$id_objet,
316
-			[
317
-				'champs' => $champs,
318
-			]
319
-		);
320
-		$notifications(
321
-			'objet_modifier',
322
-			$id_objet,
323
-			[
324
-				'objet' => $objet,
325
-				'id_objet' => $id_objet,
326
-				'champs' => $champs,
327
-			]
328
-		);
329
-	}
330
-
331
-	// journaliser l'affaire
332
-	// message a affiner :-)
333
-	include_spip('inc/filtres_mini');
334
-	$qui = '';
335
-	if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
336
-		$qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#';
337
-	}
338
-	if (!empty($GLOBALS['visiteur_session']['nom'])) {
339
-		$qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#';
340
-	}
341
-	if ($qui == '') {
342
-		$qui = '#ip:' . $GLOBALS['ip'] . '#';
343
-	}
344
-	journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . implode(
345
-		'+',
346
-		array_diff(array_keys($champs), ['date_modif'])
347
-	) . ')'), [
348
-		'faire' => 'modifier',
349
-		'quoi' => $objet,
350
-		'id' => $id_objet
351
-	]);
352
-
353
-	return '';
99
+    if (!$id_objet = (int) $id_objet) {
100
+        spip_log('Erreur $id_objet non defini', 'warn');
101
+
102
+        return _T('erreur_technique_enregistrement_impossible');
103
+    }
104
+
105
+    include_spip('inc/filtres');
106
+
107
+    $table_objet = table_objet($objet, $serveur);
108
+    $spip_table_objet = table_objet_sql($objet, $serveur);
109
+    $id_table_objet = id_table_objet($objet, $serveur);
110
+    $trouver_table = charger_fonction('trouver_table', 'base');
111
+    $desc = $trouver_table($spip_table_objet, $serveur);
112
+
113
+    // Appels incomplets (sans $c)
114
+    if (!is_array($c)) {
115
+        spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c');
116
+
117
+        return _T('erreur_technique_enregistrement_impossible');
118
+    }
119
+
120
+    // Securite : certaines variables ne sont jamais acceptees ici
121
+    // car elles ne relevent pas de autoriser(xxx, modifier) ;
122
+    // il faut passer par instituer_XX()
123
+    // TODO: faut-il passer ces variables interdites
124
+    // dans un fichier de description separe ?
125
+    unset($c['statut']);
126
+    unset($c['id_parent']);
127
+    unset($c['id_rubrique']);
128
+    unset($c['id_secteur']);
129
+
130
+    // Gerer les champs non vides
131
+    if (isset($options['nonvide']) && is_array($options['nonvide'])) {
132
+        foreach ($options['nonvide'] as $champ => $sinon) {
133
+            if (isset($c[$champ]) && $c[$champ] === '') {
134
+                $c[$champ] = $sinon;
135
+            }
136
+        }
137
+    }
138
+
139
+    // N'accepter que les champs qui existent dans la table
140
+    $champs = array_intersect_key($c, $desc['field']);
141
+    // et dont la valeur n'est pas null
142
+    $champs = array_filter($champs, static fn($var) => $var !== null);
143
+    // TODO: ici aussi on peut valider les contenus
144
+    // en fonction du type
145
+
146
+    // Nettoyer les valeurs
147
+    $champs = array_map('corriger_caracteres', $champs);
148
+
149
+    // On récupère l'état avant toute modification
150
+    $row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet);
151
+
152
+    // Envoyer aux plugins
153
+    $champs = pipeline(
154
+        'pre_edition',
155
+        [
156
+            'args' => [
157
+                'table' => $spip_table_objet, // compatibilite
158
+                'table_objet' => $table_objet,
159
+                'spip_table_objet' => $spip_table_objet,
160
+                'desc' => $desc,
161
+                'type' => $objet,
162
+                'id_objet' => $id_objet,
163
+                'data' => $options['data'] ?? null,
164
+                'champs' => $options['champs'] ?? [], // [doc] c'est quoi ?
165
+                'champs_anciens' => $row, // état du contenu avant modif
166
+                'serveur' => $serveur,
167
+                'action' => $options['action'] ?? 'modifier'
168
+            ],
169
+            'data' => $champs
170
+        ]
171
+    );
172
+
173
+    if (!$champs) {
174
+        return false;
175
+    }
176
+
177
+
178
+    // marquer le fait que l'objet est travaille par toto a telle date
179
+    include_spip('inc/config');
180
+    if (lire_config('articles_modif', 'non') !== 'non') {
181
+        include_spip('inc/drapeau_edition');
182
+        signale_edition($id_objet, $GLOBALS['visiteur_session'], $objet);
183
+    }
184
+
185
+    // Verifier si les mises a jour sont pertinentes, datees, en conflit etc
186
+    include_spip('inc/editer');
187
+    if (!isset($options['data']) || is_null($options['data'])) {
188
+        $options['data'] = &$_POST;
189
+    }
190
+    $conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur);
191
+    // cas hypothetique : normalement inc/editer verifie en amont le conflit edition
192
+    // et gere l'interface
193
+    // ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme
194
+    if ($conflits) {
195
+        return _T('titre_conflit_edition');
196
+    }
197
+
198
+    if ($champs) {
199
+        // cas particulier de la langue : passer par instituer_langue_objet
200
+        if (isset($champs['lang'])) {
201
+            if ($changer_lang = $champs['lang']) {
202
+                $id_rubrique = 0;
203
+                if (isset($desc['field']['id_rubrique'])) {
204
+                    $parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique';
205
+                    $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . (int) $id_objet);
206
+                }
207
+                $instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action');
208
+                $champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur);
209
+            }
210
+            // on laisse 'lang' dans $champs,
211
+            // ca permet de passer dans le pipeline post_edition et de journaliser
212
+            // et ca ne gene pas qu'on refasse un sql_updateq dessus apres l'avoir
213
+            // deja pris en compte
214
+        }
215
+
216
+        // la modif peut avoir lieu
217
+
218
+        // faut-il ajouter date_modif ?
219
+        if (
220
+            !empty($options['date_modif']) && !isset($champs[$options['date_modif']])
221
+        ) {
222
+            $champs[$options['date_modif']] = date('Y-m-d H:i:s');
223
+        }
224
+
225
+        // allez on commit la modif
226
+        sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . (int) $id_objet, [], $serveur);
227
+
228
+        // on verifie si elle est bien passee
229
+        $moof = sql_fetsel(
230
+            array_keys($champs),
231
+            $spip_table_objet,
232
+            "$id_table_objet=" . (int) $id_objet,
233
+            [],
234
+            [],
235
+            '',
236
+            [],
237
+            $serveur
238
+        );
239
+        // si difference entre les champs, reperer les champs mal enregistres
240
+        if ($moof != $champs) {
241
+            $liste = [];
242
+            foreach ($moof as $k => $v) {
243
+                if (
244
+                    $v !== $champs[$k]
245
+                    // ne pas alerter si le champ est numerique est que les valeurs sont equivalentes
246
+                    && (!is_numeric($v) || (int) $v !== (int) $champs[$k])
247
+                    // ne pas alerter si le champ est date, qu'on a envoye une valeur vide et qu'on recupere une date nulle
248
+                    && (strlen((string) $champs[$k]) || !in_array($v, ['0000-00-00 00:00:00', '0000-00-00']))
249
+                ) {
250
+                    $liste[] = $k;
251
+                    $conflits[$k]['post'] = $champs[$k];
252
+                    $conflits[$k]['save'] = $v;
253
+
254
+                    // cas specifique MySQL+emoji : si l'un est la
255
+                    // conversion utf8_noplanes de l'autre alors c'est OK
256
+                    if (defined('_MYSQL_NOPLANES') && _MYSQL_NOPLANES) {
257
+                        include_spip('inc/charsets');
258
+                        if ($v == utf8_noplanes($champs[$k])) {
259
+                            array_pop($liste);
260
+                        }
261
+                    }
262
+                }
263
+            }
264
+            // si un champ n'a pas ete correctement enregistre, loger et retourner une erreur
265
+            // c'est un cas exceptionnel
266
+            if ($liste !== []) {
267
+                spip_log(
268
+                    "Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true),
269
+                    'modifier.' . _LOG_CRITIQUE
270
+                );
271
+
272
+                return _T(
273
+                    'erreur_technique_enregistrement_champs',
274
+                    ['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"]
275
+                );
276
+            }
277
+        }
278
+
279
+        // Invalider les caches
280
+        if (isset($options['invalideur']) && $options['invalideur']) {
281
+            include_spip('inc/invalideur');
282
+            if (is_array($options['invalideur'])) {
283
+                array_map('suivre_invalideur', $options['invalideur']);
284
+            } else {
285
+                suivre_invalideur($options['invalideur']);
286
+            }
287
+        }
288
+
289
+        // Notifications, gestion des revisions...
290
+        // en standard, appelle |nouvelle_revision ci-dessous
291
+        pipeline(
292
+            'post_edition',
293
+            [
294
+                'args' => [
295
+                    'table' => $spip_table_objet,
296
+                    'table_objet' => $table_objet,
297
+                    'spip_table_objet' => $spip_table_objet,
298
+                    'desc' => $desc,
299
+                    'type' => $objet,
300
+                    'id_objet' => $id_objet,
301
+                    'champs' => $options['champs'] ?? [], // [doc] kesako ?
302
+                    'champs_anciens' => $row, // état du contenu avant modif
303
+                    'serveur' => $serveur,
304
+                    'action' => $options['action'] ?? 'modifier'
305
+                ],
306
+                'data' => $champs
307
+            ]
308
+        );
309
+    }
310
+
311
+    // Appeler une notification
312
+    if ($notifications = charger_fonction('notifications', 'inc')) {
313
+        $notifications(
314
+            "{$objet}_modifier",
315
+            $id_objet,
316
+            [
317
+                'champs' => $champs,
318
+            ]
319
+        );
320
+        $notifications(
321
+            'objet_modifier',
322
+            $id_objet,
323
+            [
324
+                'objet' => $objet,
325
+                'id_objet' => $id_objet,
326
+                'champs' => $champs,
327
+            ]
328
+        );
329
+    }
330
+
331
+    // journaliser l'affaire
332
+    // message a affiner :-)
333
+    include_spip('inc/filtres_mini');
334
+    $qui = '';
335
+    if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
336
+        $qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#';
337
+    }
338
+    if (!empty($GLOBALS['visiteur_session']['nom'])) {
339
+        $qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#';
340
+    }
341
+    if ($qui == '') {
342
+        $qui = '#ip:' . $GLOBALS['ip'] . '#';
343
+    }
344
+    journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . implode(
345
+        '+',
346
+        array_diff(array_keys($champs), ['date_modif'])
347
+    ) . ')'), [
348
+        'faire' => 'modifier',
349
+        'quoi' => $objet,
350
+        'id' => $id_objet
351
+    ]);
352
+
353
+    return '';
354 354
 }
Please login to merge, or discard this patch.
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -112,7 +112,7 @@  discard block
 block discarded – undo
112 112
 
113 113
 	// Appels incomplets (sans $c)
114 114
 	if (!is_array($c)) {
115
-		spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c');
115
+		spip_log('erreur appel objet_modifier_champs('.$objet.'), manque $c');
116 116
 
117 117
 		return _T('erreur_technique_enregistrement_impossible');
118 118
 	}
@@ -147,7 +147,7 @@  discard block
 block discarded – undo
147 147
 	$champs = array_map('corriger_caracteres', $champs);
148 148
 
149 149
 	// On récupère l'état avant toute modification
150
-	$row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet);
150
+	$row = sql_fetsel('*', $spip_table_objet, $id_table_objet.'='.$id_objet);
151 151
 
152 152
 	// Envoyer aux plugins
153 153
 	$champs = pipeline(
@@ -202,7 +202,7 @@  discard block
 block discarded – undo
202 202
 				$id_rubrique = 0;
203 203
 				if (isset($desc['field']['id_rubrique'])) {
204 204
 					$parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique';
205
-					$id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . (int) $id_objet);
205
+					$id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=".(int) $id_objet);
206 206
 				}
207 207
 				$instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action');
208 208
 				$champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur);
@@ -223,13 +223,13 @@  discard block
 block discarded – undo
223 223
 		}
224 224
 
225 225
 		// allez on commit la modif
226
-		sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . (int) $id_objet, [], $serveur);
226
+		sql_updateq($spip_table_objet, $champs, "$id_table_objet=".(int) $id_objet, [], $serveur);
227 227
 
228 228
 		// on verifie si elle est bien passee
229 229
 		$moof = sql_fetsel(
230 230
 			array_keys($champs),
231 231
 			$spip_table_objet,
232
-			"$id_table_objet=" . (int) $id_objet,
232
+			"$id_table_objet=".(int) $id_objet,
233 233
 			[],
234 234
 			[],
235 235
 			'',
@@ -265,13 +265,13 @@  discard block
 block discarded – undo
265 265
 			// c'est un cas exceptionnel
266 266
 			if ($liste !== []) {
267 267
 				spip_log(
268
-					"Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true),
269
-					'modifier.' . _LOG_CRITIQUE
268
+					"Erreur enregistrement en base $objet/$id_objet champs :".var_export($conflits, true),
269
+					'modifier.'._LOG_CRITIQUE
270 270
 				);
271 271
 
272 272
 				return _T(
273 273
 					'erreur_technique_enregistrement_champs',
274
-					['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"]
274
+					['champs' => "<i>'".implode("'</i>,<i>'", $liste)."'</i>"]
275 275
 				);
276 276
 			}
277 277
 		}
@@ -333,18 +333,18 @@  discard block
 block discarded – undo
333 333
 	include_spip('inc/filtres_mini');
334 334
 	$qui = '';
335 335
 	if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
336
-		$qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#';
336
+		$qui .= ' #id_auteur:'.$GLOBALS['visiteur_session']['id_auteur'].'#';
337 337
 	}
338 338
 	if (!empty($GLOBALS['visiteur_session']['nom'])) {
339
-		$qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#';
339
+		$qui .= ' #nom:'.$GLOBALS['visiteur_session']['nom'].'#';
340 340
 	}
341 341
 	if ($qui == '') {
342
-		$qui = '#ip:' . $GLOBALS['ip'] . '#';
342
+		$qui = '#ip:'.$GLOBALS['ip'].'#';
343 343
 	}
344
-	journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . implode(
344
+	journal(_L($qui.' a édité '.$objet.' '.$id_objet.' ('.implode(
345 345
 		'+',
346 346
 		array_diff(array_keys($champs), ['date_modif'])
347
-	) . ')'), [
347
+	).')'), [
348 348
 		'faire' => 'modifier',
349 349
 		'quoi' => $objet,
350 350
 		'id' => $id_objet
Please login to merge, or discard this patch.
ecrire/inc/drapeau_edition.php 1 patch
Indentation   +109 added lines, -109 removed lines patch added patch discarded remove patch
@@ -29,7 +29,7 @@  discard block
 block discarded – undo
29 29
  * @package SPIP\Core\Drapeaux\Edition
30 30
  **/
31 31
 if (!defined('_ECRIRE_INC_VERSION')) {
32
-	return;
32
+    return;
33 33
 }
34 34
 
35 35
 
@@ -44,46 +44,46 @@  discard block
 block discarded – undo
44 44
  *     `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()`
45 45
  **/
46 46
 function lire_tableau_edition() {
47
-	$edition = @unserialize($GLOBALS['meta']['drapeau_edition']);
48
-	if (!$edition) {
49
-		return [];
50
-	}
51
-	$changed = false;
47
+    $edition = @unserialize($GLOBALS['meta']['drapeau_edition']);
48
+    if (!$edition) {
49
+        return [];
50
+    }
51
+    $changed = false;
52 52
 
53
-	$bon_pour_le_service = time() - 3600;
54
-	// parcourir le tableau et virer les vieux
55
-	foreach ($edition as $objet => $data) {
56
-		if (!is_array($data)) {
57
-			unset($edition[$objet]);
58
-		} // vieille version
59
-		else {
60
-			foreach ($data as $id => $tab) {
61
-				if (!is_array($tab)) {
62
-					unset($edition[$objet][$tab]);
63
-				} // vieille version
64
-				else {
65
-					foreach ($tab as $n => $duo) {
66
-						if (current($duo) < $bon_pour_le_service) {
67
-							unset($edition[$objet][$id][$n]);
68
-							$changed = true;
69
-						}
70
-					}
71
-				}
72
-				if (!$edition[$objet][$id]) {
73
-					unset($edition[$objet][$id]);
74
-				}
75
-			}
76
-		}
77
-		if (!$edition[$objet]) {
78
-			unset($edition[$objet]);
79
-		}
80
-	}
53
+    $bon_pour_le_service = time() - 3600;
54
+    // parcourir le tableau et virer les vieux
55
+    foreach ($edition as $objet => $data) {
56
+        if (!is_array($data)) {
57
+            unset($edition[$objet]);
58
+        } // vieille version
59
+        else {
60
+            foreach ($data as $id => $tab) {
61
+                if (!is_array($tab)) {
62
+                    unset($edition[$objet][$tab]);
63
+                } // vieille version
64
+                else {
65
+                    foreach ($tab as $n => $duo) {
66
+                        if (current($duo) < $bon_pour_le_service) {
67
+                            unset($edition[$objet][$id][$n]);
68
+                            $changed = true;
69
+                        }
70
+                    }
71
+                }
72
+                if (!$edition[$objet][$id]) {
73
+                    unset($edition[$objet][$id]);
74
+                }
75
+            }
76
+        }
77
+        if (!$edition[$objet]) {
78
+            unset($edition[$objet]);
79
+        }
80
+    }
81 81
 
82
-	if ($changed) {
83
-		ecrire_tableau_edition($edition);
84
-	}
82
+    if ($changed) {
83
+        ecrire_tableau_edition($edition);
84
+    }
85 85
 
86
-	return $edition;
86
+    return $edition;
87 87
 }
88 88
 
89 89
 /**
@@ -96,7 +96,7 @@  discard block
 block discarded – undo
96 96
  *     `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()`
97 97
  **/
98 98
 function ecrire_tableau_edition($edition) {
99
-	ecrire_meta('drapeau_edition', serialize($edition));
99
+    ecrire_meta('drapeau_edition', serialize($edition));
100 100
 }
101 101
 
102 102
 /**
@@ -116,22 +116,22 @@  discard block
 block discarded – undo
116 116
  *     Type d'objet édité
117 117
  */
118 118
 function signale_edition($id, $auteur, $type = 'article') {
119
-	include_spip('base/objets');
120
-	include_spip('inc/filtres');
121
-	if (objet_info($type, 'editable') !== 'oui') {
122
-		return;
123
-	}
119
+    include_spip('base/objets');
120
+    include_spip('inc/filtres');
121
+    if (objet_info($type, 'editable') !== 'oui') {
122
+        return;
123
+    }
124 124
 
125
-	$edition = lire_tableau_edition();
125
+    $edition = lire_tableau_edition();
126 126
 
127
-	$nom = $auteur['nom'] ?? $GLOBALS['ip'];
128
-	$id_a = $auteur['id_auteur'] ?? $GLOBALS['ip'];
127
+    $nom = $auteur['nom'] ?? $GLOBALS['ip'];
128
+    $id_a = $auteur['id_auteur'] ?? $GLOBALS['ip'];
129 129
 
130
-	if (!isset($edition[$type][$id]) || !is_array($edition[$type][$id])) {
131
-		$edition[$type][$id] = [];
132
-	}
133
-	$edition[$type][$id][$id_a][$nom] = time();
134
-	ecrire_tableau_edition($edition);
130
+    if (!isset($edition[$type][$id]) || !is_array($edition[$type][$id])) {
131
+        $edition[$type][$id] = [];
132
+    }
133
+    $edition[$type][$id][$id_a][$nom] = time();
134
+    ecrire_tableau_edition($edition);
135 135
 }
136 136
 
137 137
 /**
@@ -148,9 +148,9 @@  discard block
 block discarded – undo
148 148
  */
149 149
 function qui_edite($id, $type = 'article') {
150 150
 
151
-	$edition = lire_tableau_edition();
151
+    $edition = lire_tableau_edition();
152 152
 
153
-	return empty($edition[$type][$id]) ? [] : $edition[$type][$id];
153
+    return empty($edition[$type][$id]) ? [] : $edition[$type][$id];
154 154
 }
155 155
 
156 156
 /**
@@ -164,23 +164,23 @@  discard block
 block discarded – undo
164 164
  *     Liste de tableaux `['nom_auteur_modif' => x|y|z, 'date_diff' => n]`
165 165
  */
166 166
 function mention_qui_edite($id, $type = 'article'): array {
167
-	$modif = qui_edite($id, $type);
168
-	unset($modif[$GLOBALS['visiteur_session']['id_auteur']]);
167
+    $modif = qui_edite($id, $type);
168
+    unset($modif[$GLOBALS['visiteur_session']['id_auteur']]);
169 169
 
170
-	if ($modif) {
171
-		$quand = 0;
172
-		foreach ($modif as $duo) {
173
-			$auteurs[] = typo(key($duo));
174
-			$quand = max($quand, current($duo));
175
-		}
170
+    if ($modif) {
171
+        $quand = 0;
172
+        foreach ($modif as $duo) {
173
+            $auteurs[] = typo(key($duo));
174
+            $quand = max($quand, current($duo));
175
+        }
176 176
 
177
-		// format lie a la chaine de langue 'avis_article_modifie'
178
-		return [
179
-			'nom_auteur_modif' => implode(' | ', $auteurs),
180
-			'date_diff' => ceil((time() - $quand) / 60)
181
-		];
182
-	}
183
-	return [];
177
+        // format lie a la chaine de langue 'avis_article_modifie'
178
+        return [
179
+            'nom_auteur_modif' => implode(' | ', $auteurs),
180
+            'date_diff' => ceil((time() - $quand) / 60)
181
+        ];
182
+    }
183
+    return [];
184 184
 }
185 185
 
186 186
 /**
@@ -194,25 +194,25 @@  discard block
 block discarded – undo
194 194
  *     Liste de tableaux `['objet' => x, 'id_objet' => n]`
195 195
  */
196 196
 function liste_drapeau_edition($id_auteur) {
197
-	$edition = lire_tableau_edition();
198
-	$objets_ouverts = [];
197
+    $edition = lire_tableau_edition();
198
+    $objets_ouverts = [];
199 199
 
200
-	foreach ($edition as $objet => $data) {
201
-		foreach ($data as $id => $auteurs) {
202
-			if (
203
-				isset($auteurs[$id_auteur])
204
-				&& is_array($auteurs[$id_auteur])
205
-				&& array_pop($auteurs[$id_auteur]) > time() - 3600
206
-			) {
207
-				$objets_ouverts[] = [
208
-					'objet' => $objet,
209
-					'id_objet' => $id,
210
-				];
211
-			}
212
-		}
213
-	}
200
+    foreach ($edition as $objet => $data) {
201
+        foreach ($data as $id => $auteurs) {
202
+            if (
203
+                isset($auteurs[$id_auteur])
204
+                && is_array($auteurs[$id_auteur])
205
+                && array_pop($auteurs[$id_auteur]) > time() - 3600
206
+            ) {
207
+                $objets_ouverts[] = [
208
+                    'objet' => $objet,
209
+                    'id_objet' => $id,
210
+                ];
211
+            }
212
+        }
213
+    }
214 214
 
215
-	return $objets_ouverts;
215
+    return $objets_ouverts;
216 216
 }
217 217
 
218 218
 /**
@@ -225,15 +225,15 @@  discard block
 block discarded – undo
225 225
  * @return void
226 226
  */
227 227
 function debloquer_tous($id_auteur) {
228
-	$edition = lire_tableau_edition();
229
-	foreach ($edition as $objet => $data) {
230
-		foreach ($data as $id => $auteurs) {
231
-			if (isset($auteurs[$id_auteur])) {
232
-				unset($edition[$objet][$id][$id_auteur]);
233
-				ecrire_tableau_edition($edition);
234
-			}
235
-		}
236
-	}
228
+    $edition = lire_tableau_edition();
229
+    foreach ($edition as $objet => $data) {
230
+        foreach ($data as $id => $auteurs) {
231
+            if (isset($auteurs[$id_auteur])) {
232
+                unset($edition[$objet][$id][$id_auteur]);
233
+                ecrire_tableau_edition($edition);
234
+            }
235
+        }
236
+    }
237 237
 }
238 238
 
239 239
 /**
@@ -251,19 +251,19 @@  discard block
 block discarded – undo
251 251
  * @return void
252 252
  */
253 253
 function debloquer_edition($id_auteur, $id_objet, $type = 'article') {
254
-	$edition = lire_tableau_edition();
254
+    $edition = lire_tableau_edition();
255 255
 
256
-	foreach ($edition as $objet => $data) {
257
-		if ($objet == $type) {
258
-			foreach ($data as $id => $auteurs) {
259
-				if (
260
-					$id == $id_objet
261
-					&& isset($auteurs[$id_auteur])
262
-				) {
263
-					unset($edition[$objet][$id][$id_auteur]);
264
-					ecrire_tableau_edition($edition);
265
-				}
266
-			}
267
-		}
268
-	}
256
+    foreach ($edition as $objet => $data) {
257
+        if ($objet == $type) {
258
+            foreach ($data as $id => $auteurs) {
259
+                if (
260
+                    $id == $id_objet
261
+                    && isset($auteurs[$id_auteur])
262
+                ) {
263
+                    unset($edition[$objet][$id][$id_auteur]);
264
+                    ecrire_tableau_edition($edition);
265
+                }
266
+            }
267
+        }
268
+    }
269 269
 }
Please login to merge, or discard this patch.
ecrire/inc/documents.php 2 patches
Indentation   +209 added lines, -209 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  */
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -29,12 +29,12 @@  discard block
 block discarded – undo
29 29
  * @return string
30 30
  */
31 31
 function set_spip_doc(?string $fichier): string {
32
-	if ($fichier && str_starts_with($fichier, (string) _DIR_IMG)) {
33
-		return substr($fichier, strlen((string) _DIR_IMG));
34
-	} else {
35
-		// ex: fichier distant
36
-		return $fichier ?? '';
37
-	}
32
+    if ($fichier && str_starts_with($fichier, (string) _DIR_IMG)) {
33
+        return substr($fichier, strlen((string) _DIR_IMG));
34
+    } else {
35
+        // ex: fichier distant
36
+        return $fichier ?? '';
37
+    }
38 38
 }
39 39
 
40 40
 /**
@@ -46,26 +46,26 @@  discard block
 block discarded – undo
46 46
  * @return bool|string
47 47
  */
48 48
 function get_spip_doc(?string $fichier) {
49
-	if ($fichier === null) {
50
-		return false;
51
-	}
52
-
53
-	// fichier distant
54
-	if (tester_url_absolue($fichier)) {
55
-		return $fichier;
56
-	}
57
-
58
-	// gestion d'erreurs, fichier=''
59
-	if (!strlen($fichier)) {
60
-		return false;
61
-	}
62
-
63
-	if (!str_starts_with($fichier, (string) _DIR_IMG)) {
64
-		$fichier = _DIR_IMG . $fichier;
65
-	}
66
-
67
-	// fichier normal
68
-	return $fichier;
49
+    if ($fichier === null) {
50
+        return false;
51
+    }
52
+
53
+    // fichier distant
54
+    if (tester_url_absolue($fichier)) {
55
+        return $fichier;
56
+    }
57
+
58
+    // gestion d'erreurs, fichier=''
59
+    if (!strlen($fichier)) {
60
+        return false;
61
+    }
62
+
63
+    if (!str_starts_with($fichier, (string) _DIR_IMG)) {
64
+        $fichier = _DIR_IMG . $fichier;
65
+    }
66
+
67
+    // fichier normal
68
+    return $fichier;
69 69
 }
70 70
 
71 71
 /**
@@ -79,26 +79,26 @@  discard block
 block discarded – undo
79 79
  * @return string
80 80
  */
81 81
 function creer_repertoire_documents($ext) {
82
-	$rep = sous_repertoire(_DIR_IMG, $ext);
83
-
84
-	if (!$ext || !$rep) {
85
-		spip_log("creer_repertoire_documents '$rep' interdit");
86
-		exit;
87
-	}
88
-
89
-	// Cette variable de configuration peut etre posee par un plugin
90
-	// par exemple acces_restreint
91
-	// sauf pour logo/ utilise pour stocker les logoon et logooff
92
-	if (
93
-		isset($GLOBALS['meta']['creer_htaccess'])
94
-		&& $GLOBALS['meta']['creer_htaccess'] == 'oui'
95
-		&& $ext !== 'logo'
96
-	) {
97
-		include_spip('inc/acces');
98
-		verifier_htaccess($rep);
99
-	}
100
-
101
-	return $rep;
82
+    $rep = sous_repertoire(_DIR_IMG, $ext);
83
+
84
+    if (!$ext || !$rep) {
85
+        spip_log("creer_repertoire_documents '$rep' interdit");
86
+        exit;
87
+    }
88
+
89
+    // Cette variable de configuration peut etre posee par un plugin
90
+    // par exemple acces_restreint
91
+    // sauf pour logo/ utilise pour stocker les logoon et logooff
92
+    if (
93
+        isset($GLOBALS['meta']['creer_htaccess'])
94
+        && $GLOBALS['meta']['creer_htaccess'] == 'oui'
95
+        && $ext !== 'logo'
96
+    ) {
97
+        include_spip('inc/acces');
98
+        verifier_htaccess($rep);
99
+    }
100
+
101
+    return $rep;
102 102
 }
103 103
 
104 104
 /**
@@ -107,19 +107,19 @@  discard block
 block discarded – undo
107 107
  * @param string $nom
108 108
  */
109 109
 function effacer_repertoire_temporaire($nom) {
110
-	if ($d = opendir($nom)) {
111
-		while (($f = readdir($d)) !== false) {
112
-			if (is_file("$nom/$f")) {
113
-				spip_unlink("$nom/$f");
114
-			} else {
115
-				if ($f != '.' && $f != '..' && is_dir("$nom/$f")) {
116
-					effacer_repertoire_temporaire("$nom/$f");
117
-				}
118
-			}
119
-		}
120
-	}
121
-	closedir($d);
122
-	@rmdir($nom);
110
+    if ($d = opendir($nom)) {
111
+        while (($f = readdir($d)) !== false) {
112
+            if (is_file("$nom/$f")) {
113
+                spip_unlink("$nom/$f");
114
+            } else {
115
+                if ($f != '.' && $f != '..' && is_dir("$nom/$f")) {
116
+                    effacer_repertoire_temporaire("$nom/$f");
117
+                }
118
+            }
119
+        }
120
+    }
121
+    closedir($d);
122
+    @rmdir($nom);
123 123
 }
124 124
 
125 125
 //
@@ -136,44 +136,44 @@  discard block
 block discarded – undo
136 136
  */
137 137
 function copier_document($ext, $orig, $source, $subdir = null) {
138 138
 
139
-	$orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc
140
-	$dir = creer_repertoire_documents($subdir ?: $ext);
141
-
142
-	$dest = preg_replace('/<[^>]*>/', '', basename($orig));
143
-	$dest = preg_replace('/\.([^.]+)$/', '', $dest);
144
-	$dest = translitteration($dest);
145
-	$dest = preg_replace('/[^.=\w-]+/', '_', (string) $dest);
146
-
147
-	// ne pas accepter de noms de la forme -r90.jpg qui sont reserves
148
-	// pour les images transformees par rotation (action/documenter)
149
-	$dest = preg_replace(',-r(90|180|270)$,', '', $dest);
150
-
151
-	while (preg_match(',\.(\w+)$,', $dest, $m)) {
152
-		if (
153
-			!function_exists('verifier_upload_autorise')
154
-			|| !($r = verifier_upload_autorise($dest))
155
-			|| !empty($r['autozip'])
156
-		) {
157
-			$dest = substr($dest, 0, -strlen($m[0])) . '_' . $m[1];
158
-			break;
159
-		} else {
160
-			$dest = substr($dest, 0, -strlen($m[0]));
161
-			$ext = $m[1] . '.' . $ext;
162
-		}
163
-	}
164
-
165
-	// Si le document "source" est deja au bon endroit, ne rien faire
166
-	if ($source == ($dir . $dest . '.' . $ext)) {
167
-		return $source;
168
-	}
169
-
170
-	// sinon tourner jusqu'a trouver un numero correct
171
-	$n = 0;
172
-	while (@file_exists($newFile = $dir . $dest . ($n++ ? ('-' . $n) : '') . '.' . $ext)) {
173
-		;
174
-	}
175
-
176
-	return deplacer_fichier_upload($source, $newFile);
139
+    $orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc
140
+    $dir = creer_repertoire_documents($subdir ?: $ext);
141
+
142
+    $dest = preg_replace('/<[^>]*>/', '', basename($orig));
143
+    $dest = preg_replace('/\.([^.]+)$/', '', $dest);
144
+    $dest = translitteration($dest);
145
+    $dest = preg_replace('/[^.=\w-]+/', '_', (string) $dest);
146
+
147
+    // ne pas accepter de noms de la forme -r90.jpg qui sont reserves
148
+    // pour les images transformees par rotation (action/documenter)
149
+    $dest = preg_replace(',-r(90|180|270)$,', '', $dest);
150
+
151
+    while (preg_match(',\.(\w+)$,', $dest, $m)) {
152
+        if (
153
+            !function_exists('verifier_upload_autorise')
154
+            || !($r = verifier_upload_autorise($dest))
155
+            || !empty($r['autozip'])
156
+        ) {
157
+            $dest = substr($dest, 0, -strlen($m[0])) . '_' . $m[1];
158
+            break;
159
+        } else {
160
+            $dest = substr($dest, 0, -strlen($m[0]));
161
+            $ext = $m[1] . '.' . $ext;
162
+        }
163
+    }
164
+
165
+    // Si le document "source" est deja au bon endroit, ne rien faire
166
+    if ($source == ($dir . $dest . '.' . $ext)) {
167
+        return $source;
168
+    }
169
+
170
+    // sinon tourner jusqu'a trouver un numero correct
171
+    $n = 0;
172
+    while (@file_exists($newFile = $dir . $dest . ($n++ ? ('-' . $n) : '') . '.' . $ext)) {
173
+        ;
174
+    }
175
+
176
+    return deplacer_fichier_upload($source, $newFile);
177 177
 }
178 178
 
179 179
 /**
@@ -188,28 +188,28 @@  discard block
 block discarded – undo
188 188
  * @return bool|string
189 189
  */
190 190
 function determine_upload($type = '') {
191
-	if (!function_exists('autoriser')) {
192
-		include_spip('inc/autoriser');
193
-	}
194
-
195
-	if (
196
-		!autoriser('chargerftp')
197
-		|| $type == 'logos'
198
-	) { # on ne le permet pas pour les logos
199
-	return false;
200
-	}
201
-
202
-	$repertoire = _DIR_TRANSFERT;
203
-	if (!@is_dir($repertoire)) {
204
-		$repertoire = str_replace(_DIR_TMP, '', (string) $repertoire);
205
-		$repertoire = sous_repertoire(_DIR_TMP, $repertoire);
206
-	}
207
-
208
-	if (!$GLOBALS['visiteur_session']['restreint']) {
209
-		return $repertoire;
210
-	} else {
211
-		return sous_repertoire($repertoire, $GLOBALS['visiteur_session']['login']);
212
-	}
191
+    if (!function_exists('autoriser')) {
192
+        include_spip('inc/autoriser');
193
+    }
194
+
195
+    if (
196
+        !autoriser('chargerftp')
197
+        || $type == 'logos'
198
+    ) { # on ne le permet pas pour les logos
199
+    return false;
200
+    }
201
+
202
+    $repertoire = _DIR_TRANSFERT;
203
+    if (!@is_dir($repertoire)) {
204
+        $repertoire = str_replace(_DIR_TMP, '', (string) $repertoire);
205
+        $repertoire = sous_repertoire(_DIR_TMP, $repertoire);
206
+    }
207
+
208
+    if (!$GLOBALS['visiteur_session']['restreint']) {
209
+        return $repertoire;
210
+    } else {
211
+        return sous_repertoire($repertoire, $GLOBALS['visiteur_session']['login']);
212
+    }
213 213
 }
214 214
 
215 215
 /**
@@ -228,31 +228,31 @@  discard block
 block discarded – undo
228 228
  * @return bool|mixed|string
229 229
  */
230 230
 function deplacer_fichier_upload($source, $dest, $move = false) {
231
-	// Securite
232
-	if (str_starts_with($dest, (string) _DIR_RACINE)) {
233
-		$dest = _DIR_RACINE . preg_replace(',\.\.+,', '.', substr($dest, strlen((string) _DIR_RACINE)));
234
-	} else {
235
-		$dest = preg_replace(',\.\.+,', '.', $dest);
236
-	}
237
-
238
-	$ok = $move ? @rename($source, $dest) : @copy($source, $dest);
239
-	if (!$ok) {
240
-		$ok = @move_uploaded_file($source, $dest);
241
-	}
242
-	if ($ok) {
243
-		@chmod($dest, _SPIP_CHMOD & ~0111);
244
-	} else {
245
-		$f = @fopen($dest, 'w');
246
-		if ($f) {
247
-			fclose($f);
248
-		} else {
249
-			include_spip('inc/flock');
250
-			raler_fichier($dest);
251
-		}
252
-		spip_unlink($dest);
253
-	}
254
-
255
-	return $ok ? $dest : false;
231
+    // Securite
232
+    if (str_starts_with($dest, (string) _DIR_RACINE)) {
233
+        $dest = _DIR_RACINE . preg_replace(',\.\.+,', '.', substr($dest, strlen((string) _DIR_RACINE)));
234
+    } else {
235
+        $dest = preg_replace(',\.\.+,', '.', $dest);
236
+    }
237
+
238
+    $ok = $move ? @rename($source, $dest) : @copy($source, $dest);
239
+    if (!$ok) {
240
+        $ok = @move_uploaded_file($source, $dest);
241
+    }
242
+    if ($ok) {
243
+        @chmod($dest, _SPIP_CHMOD & ~0111);
244
+    } else {
245
+        $f = @fopen($dest, 'w');
246
+        if ($f) {
247
+            fclose($f);
248
+        } else {
249
+            include_spip('inc/flock');
250
+            raler_fichier($dest);
251
+        }
252
+        spip_unlink($dest);
253
+    }
254
+
255
+    return $ok ? $dest : false;
256 256
 }
257 257
 
258 258
 
@@ -276,60 +276,60 @@  discard block
 block discarded – undo
276 276
  */
277 277
 function check_upload_error($error, $msg = '', $return = false) {
278 278
 
279
-	if (!$error) {
280
-		return false;
281
-	}
282
-
283
-	spip_log("Erreur upload $error -- cf. http://php.net/manual/fr/features.file-upload.errors.php");
284
-
285
-	switch ($error) {
286
-		case 4: /* UPLOAD_ERR_NO_FILE */
287
-			return true;
288
-
289
-		# on peut affiner les differents messages d'erreur
290
-		case 1: /* UPLOAD_ERR_INI_SIZE */
291
-			$msg = _T(
292
-				'upload_limit',
293
-				['max' => ini_get('upload_max_filesize')]
294
-			);
295
-			break;
296
-		case 2: /* UPLOAD_ERR_FORM_SIZE */
297
-			$msg = _T(
298
-				'upload_limit',
299
-				['max' => ini_get('upload_max_filesize')]
300
-			);
301
-			break;
302
-		case 3: /* UPLOAD_ERR_PARTIAL  */
303
-			$msg = _T(
304
-				'upload_limit',
305
-				['max' => ini_get('upload_max_filesize')]
306
-			);
307
-			break;
308
-
309
-		default: /* autre */
310
-			if (!$msg) {
311
-				$msg = _T('pass_erreur') . ' ' . $error
312
-					. '<br />' . propre('[->http://php.net/manual/fr/features.file-upload.errors.php]');
313
-			}
314
-			break;
315
-	}
316
-
317
-	spip_log("erreur upload $error");
318
-	if ($return) {
319
-		return $msg;
320
-	}
321
-
322
-	if (_request('iframe') == 'iframe') {
323
-		echo "<div class='upload_answer upload_error'>$msg</div>";
324
-		exit;
325
-	}
326
-
327
-	include_spip('inc/minipres');
328
-	echo minipres(
329
-		$msg,
330
-		"<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><a href='" . rawurldecode((string) $GLOBALS['redirect']) . "'><button type='button'>" . _T('ecrire:bouton_suivant') . '</button></a></div>'
331
-	);
332
-	exit;
279
+    if (!$error) {
280
+        return false;
281
+    }
282
+
283
+    spip_log("Erreur upload $error -- cf. http://php.net/manual/fr/features.file-upload.errors.php");
284
+
285
+    switch ($error) {
286
+        case 4: /* UPLOAD_ERR_NO_FILE */
287
+            return true;
288
+
289
+        # on peut affiner les differents messages d'erreur
290
+        case 1: /* UPLOAD_ERR_INI_SIZE */
291
+            $msg = _T(
292
+                'upload_limit',
293
+                ['max' => ini_get('upload_max_filesize')]
294
+            );
295
+            break;
296
+        case 2: /* UPLOAD_ERR_FORM_SIZE */
297
+            $msg = _T(
298
+                'upload_limit',
299
+                ['max' => ini_get('upload_max_filesize')]
300
+            );
301
+            break;
302
+        case 3: /* UPLOAD_ERR_PARTIAL  */
303
+            $msg = _T(
304
+                'upload_limit',
305
+                ['max' => ini_get('upload_max_filesize')]
306
+            );
307
+            break;
308
+
309
+        default: /* autre */
310
+            if (!$msg) {
311
+                $msg = _T('pass_erreur') . ' ' . $error
312
+                    . '<br />' . propre('[->http://php.net/manual/fr/features.file-upload.errors.php]');
313
+            }
314
+            break;
315
+    }
316
+
317
+    spip_log("erreur upload $error");
318
+    if ($return) {
319
+        return $msg;
320
+    }
321
+
322
+    if (_request('iframe') == 'iframe') {
323
+        echo "<div class='upload_answer upload_error'>$msg</div>";
324
+        exit;
325
+    }
326
+
327
+    include_spip('inc/minipres');
328
+    echo minipres(
329
+        $msg,
330
+        "<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><a href='" . rawurldecode((string) $GLOBALS['redirect']) . "'><button type='button'>" . _T('ecrire:bouton_suivant') . '</button></a></div>'
331
+    );
332
+    exit;
333 333
 }
334 334
 
335 335
 /**
@@ -346,14 +346,14 @@  discard block
 block discarded – undo
346 346
  * @return string
347 347
  */
348 348
 function corriger_extension($ext) {
349
-	$ext = preg_replace(',[^a-z0-9],i', '', $ext);
350
-
351
-	return match ($ext) {
352
-		'htm' => 'html',
353
-		'jpeg' => 'jpg',
354
-		'tiff' => 'tif',
355
-		'aif' => 'aiff',
356
-		'mpeg' => 'mpg',
357
-		default => $ext,
358
-	};
349
+    $ext = preg_replace(',[^a-z0-9],i', '', $ext);
350
+
351
+    return match ($ext) {
352
+        'htm' => 'html',
353
+        'jpeg' => 'jpg',
354
+        'tiff' => 'tif',
355
+        'aif' => 'aiff',
356
+        'mpeg' => 'mpg',
357
+        default => $ext,
358
+    };
359 359
 }
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -61,7 +61,7 @@  discard block
 block discarded – undo
61 61
 	}
62 62
 
63 63
 	if (!str_starts_with($fichier, (string) _DIR_IMG)) {
64
-		$fichier = _DIR_IMG . $fichier;
64
+		$fichier = _DIR_IMG.$fichier;
65 65
 	}
66 66
 
67 67
 	// fichier normal
@@ -154,22 +154,22 @@  discard block
 block discarded – undo
154 154
 			|| !($r = verifier_upload_autorise($dest))
155 155
 			|| !empty($r['autozip'])
156 156
 		) {
157
-			$dest = substr($dest, 0, -strlen($m[0])) . '_' . $m[1];
157
+			$dest = substr($dest, 0, -strlen($m[0])).'_'.$m[1];
158 158
 			break;
159 159
 		} else {
160 160
 			$dest = substr($dest, 0, -strlen($m[0]));
161
-			$ext = $m[1] . '.' . $ext;
161
+			$ext = $m[1].'.'.$ext;
162 162
 		}
163 163
 	}
164 164
 
165 165
 	// Si le document "source" est deja au bon endroit, ne rien faire
166
-	if ($source == ($dir . $dest . '.' . $ext)) {
166
+	if ($source == ($dir.$dest.'.'.$ext)) {
167 167
 		return $source;
168 168
 	}
169 169
 
170 170
 	// sinon tourner jusqu'a trouver un numero correct
171 171
 	$n = 0;
172
-	while (@file_exists($newFile = $dir . $dest . ($n++ ? ('-' . $n) : '') . '.' . $ext)) {
172
+	while (@file_exists($newFile = $dir.$dest.($n++ ? ('-'.$n) : '').'.'.$ext)) {
173 173
 		;
174 174
 	}
175 175
 
@@ -230,7 +230,7 @@  discard block
 block discarded – undo
230 230
 function deplacer_fichier_upload($source, $dest, $move = false) {
231 231
 	// Securite
232 232
 	if (str_starts_with($dest, (string) _DIR_RACINE)) {
233
-		$dest = _DIR_RACINE . preg_replace(',\.\.+,', '.', substr($dest, strlen((string) _DIR_RACINE)));
233
+		$dest = _DIR_RACINE.preg_replace(',\.\.+,', '.', substr($dest, strlen((string) _DIR_RACINE)));
234 234
 	} else {
235 235
 		$dest = preg_replace(',\.\.+,', '.', $dest);
236 236
 	}
@@ -308,8 +308,8 @@  discard block
 block discarded – undo
308 308
 
309 309
 		default: /* autre */
310 310
 			if (!$msg) {
311
-				$msg = _T('pass_erreur') . ' ' . $error
312
-					. '<br />' . propre('[->http://php.net/manual/fr/features.file-upload.errors.php]');
311
+				$msg = _T('pass_erreur').' '.$error
312
+					. '<br />'.propre('[->http://php.net/manual/fr/features.file-upload.errors.php]');
313 313
 			}
314 314
 			break;
315 315
 	}
@@ -327,7 +327,7 @@  discard block
 block discarded – undo
327 327
 	include_spip('inc/minipres');
328 328
 	echo minipres(
329 329
 		$msg,
330
-		"<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><a href='" . rawurldecode((string) $GLOBALS['redirect']) . "'><button type='button'>" . _T('ecrire:bouton_suivant') . '</button></a></div>'
330
+		"<div style='text-align: ".$GLOBALS['spip_lang_right']."'><a href='".rawurldecode((string) $GLOBALS['redirect'])."'><button type='button'>"._T('ecrire:bouton_suivant').'</button></a></div>'
331 331
 	);
332 332
 	exit;
333 333
 }
Please login to merge, or discard this patch.
ecrire/inc/meta.php 2 patches
Indentation   +195 added lines, -195 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 // Les parametres generaux du site sont dans une table SQL;
@@ -26,51 +26,51 @@  discard block
 block discarded – undo
26 26
 define('_META_CACHE_TIME', 1 << 24);
27 27
 
28 28
 function inc_meta_dist($table = 'meta') {
29
-	$new = null;
30
-	// Lire les meta, en cache si present, valide et lisible
31
-	// en cas d'install ne pas faire confiance au meta_cache eventuel
32
-	$cache = cache_meta($table);
29
+    $new = null;
30
+    // Lire les meta, en cache si present, valide et lisible
31
+    // en cas d'install ne pas faire confiance au meta_cache eventuel
32
+    $cache = cache_meta($table);
33 33
 
34
-	if (
35
-		(!($exec = _request('exec')) || !autoriser_sans_cookie($exec))
36
-		 && ($new = jeune_fichier($cache, _META_CACHE_TIME))
37
-		 && lire_fichier_securise($cache, $meta)
38
-		 && ($meta = @unserialize($meta))
39
-	) {
40
-		$GLOBALS[$table] = $meta;
41
-	}
34
+    if (
35
+        (!($exec = _request('exec')) || !autoriser_sans_cookie($exec))
36
+         && ($new = jeune_fichier($cache, _META_CACHE_TIME))
37
+         && lire_fichier_securise($cache, $meta)
38
+         && ($meta = @unserialize($meta))
39
+    ) {
40
+        $GLOBALS[$table] = $meta;
41
+    }
42 42
 
43
-	if (
44
-		isset($GLOBALS[$table]['touch'])
45
-		&& $GLOBALS[$table]['touch'] < time() - _META_CACHE_TIME
46
-	) {
47
-		$GLOBALS[$table] = [];
48
-	}
49
-	// sinon lire en base
50
-	if (!$GLOBALS[$table]) {
51
-		$new = !lire_metas($table);
52
-	}
43
+    if (
44
+        isset($GLOBALS[$table]['touch'])
45
+        && $GLOBALS[$table]['touch'] < time() - _META_CACHE_TIME
46
+    ) {
47
+        $GLOBALS[$table] = [];
48
+    }
49
+    // sinon lire en base
50
+    if (!$GLOBALS[$table]) {
51
+        $new = !lire_metas($table);
52
+    }
53 53
 
54
-	// renouveller l'alea general si trop vieux ou sur demande explicite
55
-	if (
56
-		(test_espace_prive() || isset($_GET['renouvelle_alea']))
57
-		&& $GLOBALS[$table]
58
-		&& time() > _RENOUVELLE_ALEA + ($GLOBALS['meta']['alea_ephemere_date'] ?? 0)
59
-	) {
60
-		// si on n'a pas l'acces en ecriture sur le cache,
61
-		// ne pas renouveller l'alea sinon le cache devient faux
62
-		if (supprimer_fichier($cache)) {
63
-			include_spip('inc/acces');
64
-			renouvelle_alea();
65
-			$new = false;
66
-		} else {
67
-			spip_log("impossible d'ecrire dans " . $cache);
68
-		}
69
-	}
70
-	// et refaire le cache si on a du lire en base
71
-	if (!$new) {
72
-		touch_meta(false, $table);
73
-	}
54
+    // renouveller l'alea general si trop vieux ou sur demande explicite
55
+    if (
56
+        (test_espace_prive() || isset($_GET['renouvelle_alea']))
57
+        && $GLOBALS[$table]
58
+        && time() > _RENOUVELLE_ALEA + ($GLOBALS['meta']['alea_ephemere_date'] ?? 0)
59
+    ) {
60
+        // si on n'a pas l'acces en ecriture sur le cache,
61
+        // ne pas renouveller l'alea sinon le cache devient faux
62
+        if (supprimer_fichier($cache)) {
63
+            include_spip('inc/acces');
64
+            renouvelle_alea();
65
+            $new = false;
66
+        } else {
67
+            spip_log("impossible d'ecrire dans " . $cache);
68
+        }
69
+    }
70
+    // et refaire le cache si on a du lire en base
71
+    if (!$new) {
72
+        touch_meta(false, $table);
73
+    }
74 74
 }
75 75
 
76 76
 // fonctions aussi appelees a l'install ==> spip_query en premiere requete
@@ -78,39 +78,39 @@  discard block
 block discarded – undo
78 78
 
79 79
 function lire_metas($table = 'meta') {
80 80
 
81
-	if ($result = spip_query("SELECT nom,valeur FROM spip_$table")) {
82
-		include_spip('base/abstract_sql');
83
-		$GLOBALS[$table] = [];
84
-		while ($row = sql_fetch($result)) {
85
-			$GLOBALS[$table][$row['nom']] = $row['valeur'];
86
-		}
87
-		sql_free($result);
81
+    if ($result = spip_query("SELECT nom,valeur FROM spip_$table")) {
82
+        include_spip('base/abstract_sql');
83
+        $GLOBALS[$table] = [];
84
+        while ($row = sql_fetch($result)) {
85
+            $GLOBALS[$table][$row['nom']] = $row['valeur'];
86
+        }
87
+        sql_free($result);
88 88
 
89
-		if (
90
-			!isset($GLOBALS[$table]['charset'])
91
-			|| !$GLOBALS[$table]['charset']
92
-			|| $GLOBALS[$table]['charset'] == '_DEFAULT_CHARSET' // hum, correction d'un bug ayant abime quelques install
93
-		) {
94
-			ecrire_meta('charset', _DEFAULT_CHARSET, null, $table);
95
-		}
89
+        if (
90
+            !isset($GLOBALS[$table]['charset'])
91
+            || !$GLOBALS[$table]['charset']
92
+            || $GLOBALS[$table]['charset'] == '_DEFAULT_CHARSET' // hum, correction d'un bug ayant abime quelques install
93
+        ) {
94
+            ecrire_meta('charset', _DEFAULT_CHARSET, null, $table);
95
+        }
96 96
 
97
-		// noter cette table de configuration dans les meta de SPIP
98
-		if ($table !== 'meta') {
99
-			$liste = [];
100
-			if (isset($GLOBALS['meta']['tables_config'])) {
101
-				$liste = unserialize($GLOBALS['meta']['tables_config']);
102
-			}
103
-			if (!$liste) {
104
-				$liste = [];
105
-			}
106
-			if (!in_array($table, $liste)) {
107
-				$liste[] = $table;
108
-				ecrire_meta('tables_config', serialize($liste));
109
-			}
110
-		}
111
-	}
97
+        // noter cette table de configuration dans les meta de SPIP
98
+        if ($table !== 'meta') {
99
+            $liste = [];
100
+            if (isset($GLOBALS['meta']['tables_config'])) {
101
+                $liste = unserialize($GLOBALS['meta']['tables_config']);
102
+            }
103
+            if (!$liste) {
104
+                $liste = [];
105
+            }
106
+            if (!in_array($table, $liste)) {
107
+                $liste[] = $table;
108
+                ecrire_meta('tables_config', serialize($liste));
109
+            }
110
+        }
111
+    }
112 112
 
113
-	return $GLOBALS[$table] ?? null;
113
+    return $GLOBALS[$table] ?? null;
114 114
 }
115 115
 
116 116
 
@@ -124,22 +124,22 @@  discard block
 block discarded – undo
124 124
  *      Table SQL d'enregistrement des meta.
125 125
  **/
126 126
 function touch_meta($antidate = false, $table = 'meta') {
127
-	$file = cache_meta($table);
128
-	if (!$antidate || !@touch($file, $antidate)) {
129
-		$r = $GLOBALS[$table] ?? [];
130
-		if ($table == 'meta') {
131
-			unset($r['alea_ephemere']);
132
-			unset($r['alea_ephemere_ancien']);
133
-			// le secret du site est utilise pour encoder les contextes ajax que l'on considere fiables
134
-			// mais le sortir deu cache meta implique une requete sql des qu'on a un form dynamique
135
-			// meme si son squelette est en cache
136
-			//unset($r['secret_du_site']);
137
-			if ($antidate) {
138
-				$r['touch'] = $antidate;
139
-			}
140
-		}
141
-		ecrire_fichier_securise($file, serialize($r));
142
-	}
127
+    $file = cache_meta($table);
128
+    if (!$antidate || !@touch($file, $antidate)) {
129
+        $r = $GLOBALS[$table] ?? [];
130
+        if ($table == 'meta') {
131
+            unset($r['alea_ephemere']);
132
+            unset($r['alea_ephemere_ancien']);
133
+            // le secret du site est utilise pour encoder les contextes ajax que l'on considere fiables
134
+            // mais le sortir deu cache meta implique une requete sql des qu'on a un form dynamique
135
+            // meme si son squelette est en cache
136
+            //unset($r['secret_du_site']);
137
+            if ($antidate) {
138
+                $r['touch'] = $antidate;
139
+            }
140
+        }
141
+        ecrire_fichier_securise($file, serialize($r));
142
+    }
143 143
 }
144 144
 
145 145
 /**
@@ -155,21 +155,21 @@  discard block
 block discarded – undo
155 155
  *     Table SQL d'enregistrement de la meta.
156 156
  **/
157 157
 function effacer_meta($nom, $table = 'meta') {
158
-	// section critique sur le cache:
159
-	// l'invalider avant et apres la MAJ de la BD
160
-	// c'est un peu moins bien qu'un vrai verrou mais ca suffira
161
-	// et utiliser une statique pour eviter des acces disques a repetition
162
-	static $touch = [];
163
-	$antidate = time() - (_META_CACHE_TIME << 4);
164
-	if (!isset($touch[$table])) {
165
-		touch_meta($antidate, $table);
166
-	}
167
-	sql_delete('spip_' . $table, "nom='$nom'", '', 'continue');
168
-	unset($GLOBALS[$table][$nom]);
169
-	if (!isset($touch[$table])) {
170
-		touch_meta($antidate, $table);
171
-		$touch[$table] = false;
172
-	}
158
+    // section critique sur le cache:
159
+    // l'invalider avant et apres la MAJ de la BD
160
+    // c'est un peu moins bien qu'un vrai verrou mais ca suffira
161
+    // et utiliser une statique pour eviter des acces disques a repetition
162
+    static $touch = [];
163
+    $antidate = time() - (_META_CACHE_TIME << 4);
164
+    if (!isset($touch[$table])) {
165
+        touch_meta($antidate, $table);
166
+    }
167
+    sql_delete('spip_' . $table, "nom='$nom'", '', 'continue');
168
+    unset($GLOBALS[$table][$nom]);
169
+    if (!isset($touch[$table])) {
170
+        touch_meta($antidate, $table);
171
+        $touch[$table] = false;
172
+    }
173 173
 }
174 174
 
175 175
 /**
@@ -191,54 +191,54 @@  discard block
 block discarded – undo
191 191
  **/
192 192
 function ecrire_meta($nom, $valeur, $importable = null, $table = 'meta') {
193 193
 
194
-	static $touch = [];
195
-	if (!$nom) {
196
-		return;
197
-	}
198
-	include_spip('base/abstract_sql');
199
-	$res = sql_select('*', 'spip_' . $table, 'nom=' . sql_quote($nom), '', '', '', '', '', 'continue');
200
-	// table pas encore installee, travailler en php seulement
201
-	if (!$res) {
202
-		$GLOBALS[$table][$nom] = $valeur;
194
+    static $touch = [];
195
+    if (!$nom) {
196
+        return;
197
+    }
198
+    include_spip('base/abstract_sql');
199
+    $res = sql_select('*', 'spip_' . $table, 'nom=' . sql_quote($nom), '', '', '', '', '', 'continue');
200
+    // table pas encore installee, travailler en php seulement
201
+    if (!$res) {
202
+        $GLOBALS[$table][$nom] = $valeur;
203 203
 
204
-		return;
205
-	}
206
-	$row = sql_fetch($res);
207
-	sql_free($res);
204
+        return;
205
+    }
206
+    $row = sql_fetch($res);
207
+    sql_free($res);
208 208
 
209
-	// ne pas invalider le cache si affectation a l'identique
210
-	// (tant pis si impt aurait du changer)
211
-	if (
212
-		$row
213
-		&& $valeur == $row['valeur']
214
-		&& isset($GLOBALS[$table][$nom])
215
-		&& $GLOBALS[$table][$nom] == $valeur
216
-	) {
217
-		return;
218
-	}
209
+    // ne pas invalider le cache si affectation a l'identique
210
+    // (tant pis si impt aurait du changer)
211
+    if (
212
+        $row
213
+        && $valeur == $row['valeur']
214
+        && isset($GLOBALS[$table][$nom])
215
+        && $GLOBALS[$table][$nom] == $valeur
216
+    ) {
217
+        return;
218
+    }
219 219
 
220
-	$GLOBALS[$table][$nom] = $valeur;
221
-	// cf effacer pour comprendre le double touch
222
-	$antidate = time() - (_META_CACHE_TIME << 1);
223
-	if (!isset($touch[$table])) {
224
-		touch_meta($antidate, $table);
225
-	}
226
-	$r = ['nom' => sql_quote($nom, '', 'text'), 'valeur' => sql_quote($valeur, '', 'text')];
227
-	// Gaffe aux tables sans impt (vieilles versions de SPIP notamment)
228
-	// ici on utilise pas sql_updateq et sql_insertq pour ne pas provoquer trop tot
229
-	// de lecture des descriptions des tables
230
-	if ($importable && isset($row['impt'])) {
231
-		$r['impt'] = sql_quote($importable, '', 'text');
232
-	}
233
-	if ($row) {
234
-		sql_update('spip_' . $table, $r, 'nom=' . sql_quote($nom));
235
-	} else {
236
-		sql_insert('spip_' . $table, '(' . implode(',', array_keys($r)) . ')', '(' . implode(',', array_values($r)) . ')');
237
-	}
238
-	if (!isset($touch[$table])) {
239
-		touch_meta($antidate, $table);
240
-		$touch[$table] = false;
241
-	}
220
+    $GLOBALS[$table][$nom] = $valeur;
221
+    // cf effacer pour comprendre le double touch
222
+    $antidate = time() - (_META_CACHE_TIME << 1);
223
+    if (!isset($touch[$table])) {
224
+        touch_meta($antidate, $table);
225
+    }
226
+    $r = ['nom' => sql_quote($nom, '', 'text'), 'valeur' => sql_quote($valeur, '', 'text')];
227
+    // Gaffe aux tables sans impt (vieilles versions de SPIP notamment)
228
+    // ici on utilise pas sql_updateq et sql_insertq pour ne pas provoquer trop tot
229
+    // de lecture des descriptions des tables
230
+    if ($importable && isset($row['impt'])) {
231
+        $r['impt'] = sql_quote($importable, '', 'text');
232
+    }
233
+    if ($row) {
234
+        sql_update('spip_' . $table, $r, 'nom=' . sql_quote($nom));
235
+    } else {
236
+        sql_insert('spip_' . $table, '(' . implode(',', array_keys($r)) . ')', '(' . implode(',', array_values($r)) . ')');
237
+    }
238
+    if (!isset($touch[$table])) {
239
+        touch_meta($antidate, $table);
240
+        $touch[$table] = false;
241
+    }
242 242
 }
243 243
 
244 244
 /**
@@ -250,7 +250,7 @@  discard block
 block discarded – undo
250 250
  *     Nom du fichier cache
251 251
  **/
252 252
 function cache_meta($table = 'meta') {
253
-	return ($table == 'meta') ? _FILE_META : (_DIR_CACHE . $table . '.php');
253
+    return ($table == 'meta') ? _FILE_META : (_DIR_CACHE . $table . '.php');
254 254
 }
255 255
 
256 256
 /**
@@ -259,14 +259,14 @@  discard block
 block discarded – undo
259 259
  * @param string $table
260 260
  */
261 261
 function installer_table_meta($table) {
262
-	$trouver_table = charger_fonction('trouver_table', 'base');
263
-	if (!$trouver_table("spip_$table")) {
264
-		include_spip('base/auxiliaires');
265
-		include_spip('base/create');
266
-		creer_ou_upgrader_table("spip_$table", $GLOBALS['tables_auxiliaires']['spip_meta'], false, false);
267
-		$trouver_table('');
268
-	}
269
-	lire_metas($table);
262
+    $trouver_table = charger_fonction('trouver_table', 'base');
263
+    if (!$trouver_table("spip_$table")) {
264
+        include_spip('base/auxiliaires');
265
+        include_spip('base/create');
266
+        creer_ou_upgrader_table("spip_$table", $GLOBALS['tables_auxiliaires']['spip_meta'], false, false);
267
+        $trouver_table('');
268
+    }
269
+    lire_metas($table);
270 270
 }
271 271
 
272 272
 /**
@@ -278,44 +278,44 @@  discard block
 block discarded – undo
278 278
  * @param bool $force
279 279
  */
280 280
 function supprimer_table_meta($table, $force = false) {
281
-	if ($table !== 'meta') {
282
-		// Vérifier le contenu restant de la table
283
-		$nb_variables = sql_countsel("spip_$table");
281
+    if ($table !== 'meta') {
282
+        // Vérifier le contenu restant de la table
283
+        $nb_variables = sql_countsel("spip_$table");
284 284
 
285
-		// Supprimer si :
286
-		// - la table est vide
287
-		// - ou limitée à la variable charset
288
-		// - ou qu'on force la suppression
289
-		if (
290
-			$force
291
-			|| !$nb_variables
292
-			|| $nb_variables == 1 && isset($GLOBALS[$table]['charset'])
293
-		) {
294
-			// Supprimer la table des globaleset de la base
295
-			unset($GLOBALS[$table]);
296
-			sql_drop_table("spip_$table");
297
-			// Supprimer le fichier cache
298
-			include_spip('inc/flock');
299
-			$cache = cache_meta($table);
300
-			supprimer_fichier($cache);
285
+        // Supprimer si :
286
+        // - la table est vide
287
+        // - ou limitée à la variable charset
288
+        // - ou qu'on force la suppression
289
+        if (
290
+            $force
291
+            || !$nb_variables
292
+            || $nb_variables == 1 && isset($GLOBALS[$table]['charset'])
293
+        ) {
294
+            // Supprimer la table des globaleset de la base
295
+            unset($GLOBALS[$table]);
296
+            sql_drop_table("spip_$table");
297
+            // Supprimer le fichier cache
298
+            include_spip('inc/flock');
299
+            $cache = cache_meta($table);
300
+            supprimer_fichier($cache);
301 301
 
302
-			// vider le cache des tables
303
-			$trouver_table = charger_fonction('trouver_table', 'base');
304
-			$trouver_table('');
302
+            // vider le cache des tables
303
+            $trouver_table = charger_fonction('trouver_table', 'base');
304
+            $trouver_table('');
305 305
 
306
-			// Supprimer la table de la liste des tables de configuration autres que spip_meta
307
-			if (isset($GLOBALS['meta']['tables_config'])) {
308
-				$liste = unserialize($GLOBALS['meta']['tables_config']);
309
-				$cle = array_search($table, $liste);
310
-				if ($cle !== false) {
311
-					unset($liste[$cle]);
312
-					if ($liste) {
313
-						ecrire_meta('tables_config', serialize($liste));
314
-					} else {
315
-						effacer_meta('tables_config');
316
-					}
317
-				}
318
-			}
319
-		}
320
-	}
306
+            // Supprimer la table de la liste des tables de configuration autres que spip_meta
307
+            if (isset($GLOBALS['meta']['tables_config'])) {
308
+                $liste = unserialize($GLOBALS['meta']['tables_config']);
309
+                $cle = array_search($table, $liste);
310
+                if ($cle !== false) {
311
+                    unset($liste[$cle]);
312
+                    if ($liste) {
313
+                        ecrire_meta('tables_config', serialize($liste));
314
+                    } else {
315
+                        effacer_meta('tables_config');
316
+                    }
317
+                }
318
+            }
319
+        }
320
+    }
321 321
 }
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -64,7 +64,7 @@  discard block
 block discarded – undo
64 64
 			renouvelle_alea();
65 65
 			$new = false;
66 66
 		} else {
67
-			spip_log("impossible d'ecrire dans " . $cache);
67
+			spip_log("impossible d'ecrire dans ".$cache);
68 68
 		}
69 69
 	}
70 70
 	// et refaire le cache si on a du lire en base
@@ -164,7 +164,7 @@  discard block
 block discarded – undo
164 164
 	if (!isset($touch[$table])) {
165 165
 		touch_meta($antidate, $table);
166 166
 	}
167
-	sql_delete('spip_' . $table, "nom='$nom'", '', 'continue');
167
+	sql_delete('spip_'.$table, "nom='$nom'", '', 'continue');
168 168
 	unset($GLOBALS[$table][$nom]);
169 169
 	if (!isset($touch[$table])) {
170 170
 		touch_meta($antidate, $table);
@@ -196,7 +196,7 @@  discard block
 block discarded – undo
196 196
 		return;
197 197
 	}
198 198
 	include_spip('base/abstract_sql');
199
-	$res = sql_select('*', 'spip_' . $table, 'nom=' . sql_quote($nom), '', '', '', '', '', 'continue');
199
+	$res = sql_select('*', 'spip_'.$table, 'nom='.sql_quote($nom), '', '', '', '', '', 'continue');
200 200
 	// table pas encore installee, travailler en php seulement
201 201
 	if (!$res) {
202 202
 		$GLOBALS[$table][$nom] = $valeur;
@@ -231,9 +231,9 @@  discard block
 block discarded – undo
231 231
 		$r['impt'] = sql_quote($importable, '', 'text');
232 232
 	}
233 233
 	if ($row) {
234
-		sql_update('spip_' . $table, $r, 'nom=' . sql_quote($nom));
234
+		sql_update('spip_'.$table, $r, 'nom='.sql_quote($nom));
235 235
 	} else {
236
-		sql_insert('spip_' . $table, '(' . implode(',', array_keys($r)) . ')', '(' . implode(',', array_values($r)) . ')');
236
+		sql_insert('spip_'.$table, '('.implode(',', array_keys($r)).')', '('.implode(',', array_values($r)).')');
237 237
 	}
238 238
 	if (!isset($touch[$table])) {
239 239
 		touch_meta($antidate, $table);
@@ -250,7 +250,7 @@  discard block
 block discarded – undo
250 250
  *     Nom du fichier cache
251 251
  **/
252 252
 function cache_meta($table = 'meta') {
253
-	return ($table == 'meta') ? _FILE_META : (_DIR_CACHE . $table . '.php');
253
+	return ($table == 'meta') ? _FILE_META : (_DIR_CACHE.$table.'.php');
254 254
 }
255 255
 
256 256
 /**
Please login to merge, or discard this patch.