Completed
Push — master ( 0528ed...3f7b24 )
by cam
01:54
created
ecrire/inc/editer.php 1 patch
Indentation   +414 added lines, -414 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
 include_spip('base/abstract_sql');
22 22
 
@@ -58,56 +58,56 @@  discard block
 block discarded – undo
58 58
  *     Retour des traitements.
59 59
  **/
60 60
 function formulaires_editer_objet_traiter(
61
-	$type,
62
-	$id = 'new',
63
-	$id_parent = 0,
64
-	$lier_trad = 0,
65
-	$retour = '',
66
-	$config_fonc = 'articles_edit_config',
67
-	$row = [],
68
-	$hidden = ''
61
+    $type,
62
+    $id = 'new',
63
+    $id_parent = 0,
64
+    $lier_trad = 0,
65
+    $retour = '',
66
+    $config_fonc = 'articles_edit_config',
67
+    $row = [],
68
+    $hidden = ''
69 69
 ) {
70 70
 
71
-	$res = [];
72
-	// eviter la redirection forcee par l'action...
73
-	set_request('redirect');
74
-	if ($action_editer = charger_fonction("editer_$type", 'action', true)) {
75
-		[$id, $err] = $action_editer($id);
76
-	} else {
77
-		$action_editer = charger_fonction('editer_objet', 'action');
78
-		[$id, $err] = $action_editer($id, $type);
79
-	}
80
-	$id_table_objet = id_table_objet($type);
81
-	$res[$id_table_objet] = $id;
82
-	if ($err || !$id) {
83
-		$res['message_erreur'] = ($err ?: _T('erreur'));
84
-	} else {
85
-		// Un lien de trad a prendre en compte
86
-		if ($lier_trad) {
87
-			// referencer la traduction
88
-			$referencer_traduction = charger_fonction('referencer_traduction', 'action');
89
-			$referencer_traduction($type, $id, $lier_trad);
90
-			// actions de recopie de champs / liens sur le nouvel objet créé
91
-			$completer_traduction = charger_fonction('completer_traduction', 'inc');
92
-			$err = $completer_traduction($type, $id, $lier_trad);
93
-			if ($err) {
94
-				$res['message_erreur'] = $err;
95
-				return $res;
96
-			}
97
-		}
98
-
99
-		$res['message_ok'] = _T('info_modification_enregistree');
100
-		if ($retour) {
101
-			if (str_starts_with($retour, 'javascript:')) {
102
-				$res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
103
-				$res['editable'] = true;
104
-			} else {
105
-				$res['redirect'] = parametre_url($retour, $id_table_objet, $id);
106
-			}
107
-		}
108
-	}
109
-
110
-	return $res;
71
+    $res = [];
72
+    // eviter la redirection forcee par l'action...
73
+    set_request('redirect');
74
+    if ($action_editer = charger_fonction("editer_$type", 'action', true)) {
75
+        [$id, $err] = $action_editer($id);
76
+    } else {
77
+        $action_editer = charger_fonction('editer_objet', 'action');
78
+        [$id, $err] = $action_editer($id, $type);
79
+    }
80
+    $id_table_objet = id_table_objet($type);
81
+    $res[$id_table_objet] = $id;
82
+    if ($err || !$id) {
83
+        $res['message_erreur'] = ($err ?: _T('erreur'));
84
+    } else {
85
+        // Un lien de trad a prendre en compte
86
+        if ($lier_trad) {
87
+            // referencer la traduction
88
+            $referencer_traduction = charger_fonction('referencer_traduction', 'action');
89
+            $referencer_traduction($type, $id, $lier_trad);
90
+            // actions de recopie de champs / liens sur le nouvel objet créé
91
+            $completer_traduction = charger_fonction('completer_traduction', 'inc');
92
+            $err = $completer_traduction($type, $id, $lier_trad);
93
+            if ($err) {
94
+                $res['message_erreur'] = $err;
95
+                return $res;
96
+            }
97
+        }
98
+
99
+        $res['message_ok'] = _T('info_modification_enregistree');
100
+        if ($retour) {
101
+            if (str_starts_with($retour, 'javascript:')) {
102
+                $res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
103
+                $res['editable'] = true;
104
+            } else {
105
+                $res['redirect'] = parametre_url($retour, $id_table_objet, $id);
106
+            }
107
+        }
108
+    }
109
+
110
+    return $res;
111 111
 }
112 112
 
113 113
 /**
@@ -131,29 +131,29 @@  discard block
 block discarded – undo
131 131
  *     Tableau des erreurs
132 132
  **/
133 133
 function formulaires_editer_objet_verifier($type, $id = 'new', $oblis = []) {
134
-	$erreurs = [];
135
-	if ((int) $id) {
136
-		$conflits = controler_contenu($type, $id);
137
-		if ($conflits && (is_countable($conflits) ? count($conflits) : 0)) {
138
-			foreach ($conflits as $champ => $conflit) {
139
-				if (!isset($erreurs[$champ])) {
140
-					$erreurs[$champ] = '';
141
-				}
142
-				$erreurs[$champ] .= _T('alerte_modif_info_concourante') . "<br /><textarea readonly='readonly' class='forml'>" . entites_html($conflit['base']) . '</textarea>';
143
-			}
144
-		}
145
-	}
146
-	foreach ($oblis as $obli) {
147
-		$value = _request($obli);
148
-		if (is_null($value) || !(is_array($value) ? count($value) : strlen((string) $value))) {
149
-			if (!isset($erreurs[$obli])) {
150
-				$erreurs[$obli] = '';
151
-			}
152
-			$erreurs[$obli] .= _T('info_obligatoire');
153
-		}
154
-	}
155
-
156
-	return $erreurs;
134
+    $erreurs = [];
135
+    if ((int) $id) {
136
+        $conflits = controler_contenu($type, $id);
137
+        if ($conflits && (is_countable($conflits) ? count($conflits) : 0)) {
138
+            foreach ($conflits as $champ => $conflit) {
139
+                if (!isset($erreurs[$champ])) {
140
+                    $erreurs[$champ] = '';
141
+                }
142
+                $erreurs[$champ] .= _T('alerte_modif_info_concourante') . "<br /><textarea readonly='readonly' class='forml'>" . entites_html($conflit['base']) . '</textarea>';
143
+            }
144
+        }
145
+    }
146
+    foreach ($oblis as $obli) {
147
+        $value = _request($obli);
148
+        if (is_null($value) || !(is_array($value) ? count($value) : strlen((string) $value))) {
149
+            if (!isset($erreurs[$obli])) {
150
+                $erreurs[$obli] = '';
151
+            }
152
+            $erreurs[$obli] .= _T('info_obligatoire');
153
+        }
154
+    }
155
+
156
+    return $erreurs;
157 157
 }
158 158
 
159 159
 /**
@@ -198,151 +198,151 @@  discard block
 block discarded – undo
198 198
  *     Environnement du formulaire.
199 199
  **/
200 200
 function formulaires_editer_objet_charger(
201
-	$type,
202
-	$id = 'new',
203
-	$id_parent = 0,
204
-	$lier_trad = 0,
205
-	$retour = '',
206
-	$config_fonc = 'articles_edit_config',
207
-	$row = [],
208
-	$hidden = ''
201
+    $type,
202
+    $id = 'new',
203
+    $id_parent = 0,
204
+    $lier_trad = 0,
205
+    $retour = '',
206
+    $config_fonc = 'articles_edit_config',
207
+    $row = [],
208
+    $hidden = ''
209 209
 ) {
210 210
 
211
-	$table_objet = table_objet($type);
212
-	$table_objet_sql = table_objet_sql($type);
213
-	$id_table_objet = id_table_objet($type);
214
-	if (!is_array($row)) {
215
-		$row = [];
216
-	}
217
-
218
-	// on accepte pas une fonction de config inconnue si elle vient d'un modele
219
-	if (
220
-		$config_fonc
221
-		&& !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config'])
222
-		&& $config_fonc !== $table_objet . '_edit_config'
223
-		&& ($args = test_formulaire_inclus_par_modele())
224
-		&& in_array($config_fonc, $args)
225
-	) {
226
-		$config_fonc = '';
227
-	}
228
-
229
-	$new = !is_numeric($id);
230
-	$lang_default = '';
231
-	// Appel direct dans un squelette
232
-	if (!$row) {
233
-		if (!$new || $lier_trad) {
234
-			if ($select = charger_fonction('precharger_' . $type, 'inc', true)) {
235
-				$row = $select($id, $id_parent, $lier_trad);
236
-				// si on a une fonction precharger, elle pu faire un reglage de langue
237
-				$lang_default = (empty($row['lang']) ? null : $row['lang']);
238
-			} else {
239
-				$row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . (int) $id);
240
-			}
241
-			if (!$new) {
242
-				$md5 = controles_md5($row ?: []);
243
-			}
244
-		}
245
-		if (!$row) {
246
-			$row = [];
247
-			$trouver_table = charger_fonction('trouver_table', 'base');
248
-			if ($desc = $trouver_table($table_objet)) {
249
-				foreach ($desc['field'] as $k => $v) {
250
-					$row[$k] = '';
251
-				}
252
-			}
253
-		}
254
-	}
255
-
256
-	// Gaffe: sans ceci, on ecrase systematiquement l'article d'origine
257
-	// (et donc: pas de lien de traduction)
258
-	$id = ($new || $lier_trad)
259
-		? 'oui'
260
-		: $row[$id_table_objet];
261
-	$row[$id_table_objet] = $id;
262
-
263
-	$contexte = $row;
264
-	if (is_numeric($id_parent) && strlen($id_parent) && (!isset($contexte['id_parent']) || $new)) {
265
-		if (!isset($contexte['id_parent'])) {
266
-			unset($contexte['id_rubrique']);
267
-		}
268
-		$contexte['id_parent'] = $id_parent;
269
-	} elseif (!isset($contexte['id_parent'])) {
270
-		// id_rubrique dans id_parent si possible
271
-		if (isset($contexte['id_rubrique'])) {
272
-			$contexte['id_parent'] = $contexte['id_rubrique'];
273
-			unset($contexte['id_rubrique']);
274
-		} else {
275
-			$contexte['id_parent'] = '';
276
-		}
277
-		if (
278
-			!$contexte['id_parent']
279
-			&& ($preselectionner_parent_nouvel_objet = charger_fonction('preselectionner_parent_nouvel_objet', 'inc', true))
280
-		) {
281
-			$contexte['id_parent'] = $preselectionner_parent_nouvel_objet($type, $row);
282
-		}
283
-	}
284
-
285
-	$config = [];
286
-	if ($config_fonc) {
287
-		$contexte['config'] = $config = $config_fonc($contexte);
288
-		if (!$lang_default) {
289
-			include_spip('inc/session');
290
-			$lang_default = $config['langue'] ?? session_get('lang') ;
291
-		}
292
-	}
293
-	$config += [
294
-		'lignes' => 0,
295
-		'langue' => '',
296
-	];
297
-
298
-	$att_text = " class='textarea' "
299
-		. " rows='"
300
-		. ($config['lignes'] + 15)
301
-		. "' cols='40'";
302
-
303
-
304
-	// on veut conserver la langue de l'interface ;
305
-	// on passe cette donnee sous un autre nom, au cas ou le squelette
306
-	// voudrait l'exploiter
307
-	if (isset($contexte['lang'])) {
308
-		$contexte['langue'] = $contexte['lang'];
309
-		unset($contexte['lang']);
310
-	}
311
-
312
-	$contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" .
313
-		($lier_trad
314
-			 ? "\n<input type='hidden' name='lier_trad' value='" .
315
-				$lier_trad .
316
-				"' />" .
317
-				"\n<input type='hidden' name='changer_lang' value='" .
318
-				$lang_default .
319
-				"' />"
320
-			: '')
321
-		. $hidden
322
-		. ($md5 ?? '');
323
-
324
-	// preciser que le formulaire doit passer dans un pipeline
325
-	$contexte['_pipeline'] = ['editer_contenu_objet', ['type' => $type, 'id' => $id]];
326
-
327
-	// preciser que le formulaire doit etre securise auteur/action
328
-	// n'est plus utile lorsque l'action accepte l'id en argument direct
329
-	// on le garde pour compat
330
-	$contexte['_action'] = ["editer_$type", $id];
331
-
332
-	// et in fine placer l'autorisation
333
-	include_spip('inc/autoriser');
334
-	if ((int) $id) {
335
-		if (!autoriser('modifier', $type, (int) $id)) {
336
-			$contexte['editable'] = '';
337
-		}
338
-	}
339
-	else {
340
-		if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) {
341
-			$contexte['editable'] = '';
342
-		}
343
-	}
344
-
345
-	return $contexte;
211
+    $table_objet = table_objet($type);
212
+    $table_objet_sql = table_objet_sql($type);
213
+    $id_table_objet = id_table_objet($type);
214
+    if (!is_array($row)) {
215
+        $row = [];
216
+    }
217
+
218
+    // on accepte pas une fonction de config inconnue si elle vient d'un modele
219
+    if (
220
+        $config_fonc
221
+        && !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config'])
222
+        && $config_fonc !== $table_objet . '_edit_config'
223
+        && ($args = test_formulaire_inclus_par_modele())
224
+        && in_array($config_fonc, $args)
225
+    ) {
226
+        $config_fonc = '';
227
+    }
228
+
229
+    $new = !is_numeric($id);
230
+    $lang_default = '';
231
+    // Appel direct dans un squelette
232
+    if (!$row) {
233
+        if (!$new || $lier_trad) {
234
+            if ($select = charger_fonction('precharger_' . $type, 'inc', true)) {
235
+                $row = $select($id, $id_parent, $lier_trad);
236
+                // si on a une fonction precharger, elle pu faire un reglage de langue
237
+                $lang_default = (empty($row['lang']) ? null : $row['lang']);
238
+            } else {
239
+                $row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . (int) $id);
240
+            }
241
+            if (!$new) {
242
+                $md5 = controles_md5($row ?: []);
243
+            }
244
+        }
245
+        if (!$row) {
246
+            $row = [];
247
+            $trouver_table = charger_fonction('trouver_table', 'base');
248
+            if ($desc = $trouver_table($table_objet)) {
249
+                foreach ($desc['field'] as $k => $v) {
250
+                    $row[$k] = '';
251
+                }
252
+            }
253
+        }
254
+    }
255
+
256
+    // Gaffe: sans ceci, on ecrase systematiquement l'article d'origine
257
+    // (et donc: pas de lien de traduction)
258
+    $id = ($new || $lier_trad)
259
+        ? 'oui'
260
+        : $row[$id_table_objet];
261
+    $row[$id_table_objet] = $id;
262
+
263
+    $contexte = $row;
264
+    if (is_numeric($id_parent) && strlen($id_parent) && (!isset($contexte['id_parent']) || $new)) {
265
+        if (!isset($contexte['id_parent'])) {
266
+            unset($contexte['id_rubrique']);
267
+        }
268
+        $contexte['id_parent'] = $id_parent;
269
+    } elseif (!isset($contexte['id_parent'])) {
270
+        // id_rubrique dans id_parent si possible
271
+        if (isset($contexte['id_rubrique'])) {
272
+            $contexte['id_parent'] = $contexte['id_rubrique'];
273
+            unset($contexte['id_rubrique']);
274
+        } else {
275
+            $contexte['id_parent'] = '';
276
+        }
277
+        if (
278
+            !$contexte['id_parent']
279
+            && ($preselectionner_parent_nouvel_objet = charger_fonction('preselectionner_parent_nouvel_objet', 'inc', true))
280
+        ) {
281
+            $contexte['id_parent'] = $preselectionner_parent_nouvel_objet($type, $row);
282
+        }
283
+    }
284
+
285
+    $config = [];
286
+    if ($config_fonc) {
287
+        $contexte['config'] = $config = $config_fonc($contexte);
288
+        if (!$lang_default) {
289
+            include_spip('inc/session');
290
+            $lang_default = $config['langue'] ?? session_get('lang') ;
291
+        }
292
+    }
293
+    $config += [
294
+        'lignes' => 0,
295
+        'langue' => '',
296
+    ];
297
+
298
+    $att_text = " class='textarea' "
299
+        . " rows='"
300
+        . ($config['lignes'] + 15)
301
+        . "' cols='40'";
302
+
303
+
304
+    // on veut conserver la langue de l'interface ;
305
+    // on passe cette donnee sous un autre nom, au cas ou le squelette
306
+    // voudrait l'exploiter
307
+    if (isset($contexte['lang'])) {
308
+        $contexte['langue'] = $contexte['lang'];
309
+        unset($contexte['lang']);
310
+    }
311
+
312
+    $contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" .
313
+        ($lier_trad
314
+             ? "\n<input type='hidden' name='lier_trad' value='" .
315
+                $lier_trad .
316
+                "' />" .
317
+                "\n<input type='hidden' name='changer_lang' value='" .
318
+                $lang_default .
319
+                "' />"
320
+            : '')
321
+        . $hidden
322
+        . ($md5 ?? '');
323
+
324
+    // preciser que le formulaire doit passer dans un pipeline
325
+    $contexte['_pipeline'] = ['editer_contenu_objet', ['type' => $type, 'id' => $id]];
326
+
327
+    // preciser que le formulaire doit etre securise auteur/action
328
+    // n'est plus utile lorsque l'action accepte l'id en argument direct
329
+    // on le garde pour compat
330
+    $contexte['_action'] = ["editer_$type", $id];
331
+
332
+    // et in fine placer l'autorisation
333
+    include_spip('inc/autoriser');
334
+    if ((int) $id) {
335
+        if (!autoriser('modifier', $type, (int) $id)) {
336
+            $contexte['editable'] = '';
337
+        }
338
+    }
339
+    else {
340
+        if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) {
341
+            $contexte['editable'] = '';
342
+        }
343
+    }
344
+
345
+    return $contexte;
346 346
 }
347 347
 
348 348
 /**
@@ -353,29 +353,29 @@  discard block
 block discarded – undo
353 353
  * @return array
354 354
  */
355 355
 function coupe_trop_long($texte) {
356
-	$aider = charger_fonction('aider', 'inc');
357
-	if (strlen($texte) > 28 * 1024) {
358
-		$texte = str_replace("\r\n", "\n", $texte);
359
-		$pos = strpos($texte, "\n\n", 28 * 1024);  // coupe para > 28 ko
360
-		if ($pos > 0 && $pos < 32 * 1024) {
361
-			$debut = substr($texte, 0, $pos) . "\n\n<!--SPIP-->\n";
362
-			$suite = substr($texte, $pos + 2);
363
-		} else {
364
-			$pos = strpos($texte, ' ', 28 * 1024);  // sinon coupe espace
365
-			if (!($pos > 0 && $pos < 32 * 1024)) {
366
-				$pos = 28 * 1024;  // au pire (pas d'espace trouv'e)
367
-				$decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere
368
-			} else {
369
-				$decalage = 1;
370
-			}
371
-			$debut = substr($texte, 0, $pos + $decalage); // Il faut conserver l'espace s'il y en a un
372
-			$suite = substr($texte, $pos + $decalage);
373
-		}
374
-
375
-		return ([$debut, $suite]);
376
-	} else {
377
-		return ([$texte, '']);
378
-	}
356
+    $aider = charger_fonction('aider', 'inc');
357
+    if (strlen($texte) > 28 * 1024) {
358
+        $texte = str_replace("\r\n", "\n", $texte);
359
+        $pos = strpos($texte, "\n\n", 28 * 1024);  // coupe para > 28 ko
360
+        if ($pos > 0 && $pos < 32 * 1024) {
361
+            $debut = substr($texte, 0, $pos) . "\n\n<!--SPIP-->\n";
362
+            $suite = substr($texte, $pos + 2);
363
+        } else {
364
+            $pos = strpos($texte, ' ', 28 * 1024);  // sinon coupe espace
365
+            if (!($pos > 0 && $pos < 32 * 1024)) {
366
+                $pos = 28 * 1024;  // au pire (pas d'espace trouv'e)
367
+                $decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere
368
+            } else {
369
+                $decalage = 1;
370
+            }
371
+            $debut = substr($texte, 0, $pos + $decalage); // Il faut conserver l'espace s'il y en a un
372
+            $suite = substr($texte, $pos + $decalage);
373
+        }
374
+
375
+        return ([$debut, $suite]);
376
+    } else {
377
+        return ([$texte, '']);
378
+    }
379 379
 }
380 380
 
381 381
 /**
@@ -386,13 +386,13 @@  discard block
 block discarded – undo
386 386
  * @param int $longueur
387 387
  */
388 388
 function titre_automatique($champ_titre, $champs_contenu, $longueur = null) {
389
-	if (!_request($champ_titre)) {
390
-		$titrer_contenu = charger_fonction('titrer_contenu', 'inc');
391
-		$t = is_null($longueur) ? $titrer_contenu($champs_contenu) : $titrer_contenu($champs_contenu, null, $longueur);
392
-		if ($t) {
393
-			set_request($champ_titre, $t);
394
-		}
395
-	}
389
+    if (!_request($champ_titre)) {
390
+        $titrer_contenu = charger_fonction('titrer_contenu', 'inc');
391
+        $t = is_null($longueur) ? $titrer_contenu($champs_contenu) : $titrer_contenu($champs_contenu, null, $longueur);
392
+        if ($t) {
393
+            set_request($champ_titre, $t);
394
+        }
395
+    }
396 396
 }
397 397
 
398 398
 /**
@@ -412,20 +412,20 @@  discard block
 block discarded – undo
412 412
  * @return string
413 413
  */
414 414
 function inc_titrer_contenu_dist($champs_contenu, $c = null, $longueur = 50) {
415
-	// trouver un champ texte non vide
416
-	$t = '';
417
-	foreach ($champs_contenu as $champ) {
418
-		if ($t = _request($champ, $c)) {
419
-			break;
420
-		}
421
-	}
422
-
423
-	if ($t) {
424
-		include_spip('inc/texte_mini');
425
-		$t = couper($t, $longueur, '...');
426
-	}
427
-
428
-	return $t;
415
+    // trouver un champ texte non vide
416
+    $t = '';
417
+    foreach ($champs_contenu as $champ) {
418
+        if ($t = _request($champ, $c)) {
419
+            break;
420
+        }
421
+    }
422
+
423
+    if ($t) {
424
+        include_spip('inc/texte_mini');
425
+        $t = couper($t, $longueur, '...');
426
+    }
427
+
428
+    return $t;
429 429
 }
430 430
 
431 431
 /**
@@ -447,22 +447,22 @@  discard block
 block discarded – undo
447 447
  *      - array sinon couples ('$prefixe$colonne => md5)
448 448
  **/
449 449
 function controles_md5(array $data, string $prefixe = 'ctr_', string $format = 'html') {
450
-	$ctr = [];
451
-	foreach ($data as $key => $val) {
452
-		$m = md5($val ?? '');
453
-		$k = $prefixe . $key;
454
-
455
-		$ctr[$k] = match ($format) {
456
-			'html' => "<input type='hidden' value='$m' name='$k' />",
457
-			default => $m,
458
-		};
459
-	}
460
-
461
-	if ($format === 'html') {
462
-		return "\n\n<!-- controles md5 -->\n" . implode("\n", $ctr) . "\n\n";
463
-	} else {
464
-		return $ctr;
465
-	}
450
+    $ctr = [];
451
+    foreach ($data as $key => $val) {
452
+        $m = md5($val ?? '');
453
+        $k = $prefixe . $key;
454
+
455
+        $ctr[$k] = match ($format) {
456
+            'html' => "<input type='hidden' value='$m' name='$k' />",
457
+            default => $m,
458
+        };
459
+    }
460
+
461
+    if ($format === 'html') {
462
+        return "\n\n<!-- controles md5 -->\n" . implode("\n", $ctr) . "\n\n";
463
+    } else {
464
+        return $ctr;
465
+    }
466 466
 }
467 467
 
468 468
 /**
@@ -501,80 +501,80 @@  discard block
 block discarded – undo
501 501
  *     - post : le contenu posté
502 502
  **/
503 503
 function controler_contenu($type, $id, $options = [], $c = false, $serveur = '') {
504
-	include_spip('inc/filtres');
505
-
506
-	$table_objet = table_objet($type);
507
-	$spip_table_objet = table_objet_sql($type);
508
-	$trouver_table = charger_fonction('trouver_table', 'base');
509
-	$desc = $trouver_table($table_objet, $serveur);
510
-
511
-	// Appels incomplets (sans $c)
512
-	if (!is_array($c)) {
513
-		$c = [];
514
-		foreach ($desc['field'] as $champ => $ignore) {
515
-			if (_request($champ)) {
516
-				$c[$champ] = _request($champ);
517
-			}
518
-		}
519
-	}
520
-
521
-	// Securite : certaines variables ne sont jamais acceptees ici
522
-	// car elles ne relevent pas de autoriser(article, modifier) ;
523
-	// il faut passer par instituer_XX()
524
-	// TODO: faut-il passer ces variables interdites
525
-	// dans un fichier de description separe ?
526
-	unset($c['statut']);
527
-	unset($c['id_parent']);
528
-	unset($c['id_rubrique']);
529
-	unset($c['id_secteur']);
530
-
531
-	// Gerer les champs non vides
532
-	if (isset($options['nonvide']) && is_array($options['nonvide'])) {
533
-		foreach ($options['nonvide'] as $champ => $sinon) {
534
-			if ($c[$champ] === '') {
535
-				$c[$champ] = $sinon;
536
-			}
537
-		}
538
-	}
539
-
540
-	// N'accepter que les champs qui existent
541
-	// [TODO] ici aussi on peut valider les contenus en fonction du type
542
-	$champs = [];
543
-	foreach ($desc['field'] as $champ => $ignore) {
544
-		if (isset($c[$champ])) {
545
-			$champs[$champ] = $c[$champ];
546
-		}
547
-	}
548
-
549
-	// Nettoyer les valeurs
550
-	$champs = array_map('corriger_caracteres', $champs);
551
-
552
-	// Envoyer aux plugins
553
-	$champs = pipeline(
554
-		'pre_edition',
555
-		[
556
-			'args' => [
557
-				'table' => $spip_table_objet, // compatibilite
558
-				'table_objet' => $table_objet,
559
-				'spip_table_objet' => $spip_table_objet,
560
-				'type' => $type,
561
-				'id_objet' => $id,
562
-				'champs' => $options['champs'] ?? [], // [doc] c'est quoi ?
563
-				'action' => 'controler',
564
-				'serveur' => $serveur,
565
-			],
566
-			'data' => $champs
567
-		]
568
-	);
569
-
570
-	if (!$champs) {
571
-		return false;
572
-	}
573
-
574
-	// Verifier si les mises a jour sont pertinentes, datees, en conflit etc
575
-	$conflits = controler_md5($champs, $_POST, $type, $id, $serveur, $options['prefix'] ?? 'ctr_');
576
-
577
-	return $conflits;
504
+    include_spip('inc/filtres');
505
+
506
+    $table_objet = table_objet($type);
507
+    $spip_table_objet = table_objet_sql($type);
508
+    $trouver_table = charger_fonction('trouver_table', 'base');
509
+    $desc = $trouver_table($table_objet, $serveur);
510
+
511
+    // Appels incomplets (sans $c)
512
+    if (!is_array($c)) {
513
+        $c = [];
514
+        foreach ($desc['field'] as $champ => $ignore) {
515
+            if (_request($champ)) {
516
+                $c[$champ] = _request($champ);
517
+            }
518
+        }
519
+    }
520
+
521
+    // Securite : certaines variables ne sont jamais acceptees ici
522
+    // car elles ne relevent pas de autoriser(article, modifier) ;
523
+    // il faut passer par instituer_XX()
524
+    // TODO: faut-il passer ces variables interdites
525
+    // dans un fichier de description separe ?
526
+    unset($c['statut']);
527
+    unset($c['id_parent']);
528
+    unset($c['id_rubrique']);
529
+    unset($c['id_secteur']);
530
+
531
+    // Gerer les champs non vides
532
+    if (isset($options['nonvide']) && is_array($options['nonvide'])) {
533
+        foreach ($options['nonvide'] as $champ => $sinon) {
534
+            if ($c[$champ] === '') {
535
+                $c[$champ] = $sinon;
536
+            }
537
+        }
538
+    }
539
+
540
+    // N'accepter que les champs qui existent
541
+    // [TODO] ici aussi on peut valider les contenus en fonction du type
542
+    $champs = [];
543
+    foreach ($desc['field'] as $champ => $ignore) {
544
+        if (isset($c[$champ])) {
545
+            $champs[$champ] = $c[$champ];
546
+        }
547
+    }
548
+
549
+    // Nettoyer les valeurs
550
+    $champs = array_map('corriger_caracteres', $champs);
551
+
552
+    // Envoyer aux plugins
553
+    $champs = pipeline(
554
+        'pre_edition',
555
+        [
556
+            'args' => [
557
+                'table' => $spip_table_objet, // compatibilite
558
+                'table_objet' => $table_objet,
559
+                'spip_table_objet' => $spip_table_objet,
560
+                'type' => $type,
561
+                'id_objet' => $id,
562
+                'champs' => $options['champs'] ?? [], // [doc] c'est quoi ?
563
+                'action' => 'controler',
564
+                'serveur' => $serveur,
565
+            ],
566
+            'data' => $champs
567
+        ]
568
+    );
569
+
570
+    if (!$champs) {
571
+        return false;
572
+    }
573
+
574
+    // Verifier si les mises a jour sont pertinentes, datees, en conflit etc
575
+    $conflits = controler_md5($champs, $_POST, $type, $id, $serveur, $options['prefix'] ?? 'ctr_');
576
+
577
+    return $conflits;
578 578
 }
579 579
 
580 580
 
@@ -604,66 +604,66 @@  discard block
 block discarded – undo
604 604
  *     - post : le contenu posté
605 605
  **/
606 606
 function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctr_') {
607
-	$spip_table_objet = table_objet_sql($type);
608
-	$id_table_objet = id_table_objet($type);
609
-
610
-	// Controle des MD5 envoyes
611
-	// On elimine les donnees non modifiees par le formulaire (mais
612
-	// potentiellement modifiees entre temps par un autre utilisateur)
613
-	foreach ($champs as $key => $val) {
614
-		if (
615
-			isset($ctr[$prefix . $key])
616
-			&& ($m = $ctr[$prefix . $key])
617
-			&& (is_scalar($val) && $m == md5($val))
618
-		) {
619
-			unset($champs[$key]);
620
-		}
621
-	}
622
-	if (!$champs) {
623
-		return;
624
-	}
625
-
626
-	// On veut savoir si notre modif va avoir un impact
627
-	// par rapport aux donnees contenues dans la base
628
-	// (qui peuvent etre differentes de celles ayant servi a calculer le ctr)
629
-	$s = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=$id", $serveur);
630
-	$intact = true;
631
-	foreach ($champs as $ch => $val) {
632
-		$intact &= ($s[$ch] == $val);
633
-	}
634
-	if ($intact) {
635
-		return;
636
-	}
637
-
638
-	// Detection de conflits :
639
-	// On verifie si notre modif ne provient pas d'un formulaire
640
-	// genere a partir de donnees modifiees dans l'intervalle ; ici
641
-	// on compare a ce qui est dans la base, et on bloque en cas
642
-	// de conflit.
643
-	$ctrh = $ctrq = $conflits = [];
644
-	foreach (array_keys($champs) as $key) {
645
-		if (isset($ctr[$prefix . $key]) && ($m = $ctr[$prefix . $key])) {
646
-			$ctrh[$key] = $m;
647
-			$ctrq[] = $key;
648
-		}
649
-	}
650
-	if ($ctrq) {
651
-		$ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur);
652
-		foreach ($ctrh as $key => $m) {
653
-			if (
654
-				$m != md5((string) $ctrq[$key])
655
-				&& $champs[$key] !== $ctrq[$key]
656
-			) {
657
-				$conflits[$key] = [
658
-					'base' => $ctrq[$key],
659
-					'post' => $champs[$key]
660
-				];
661
-				unset($champs[$key]); # stocker quand meme les modifs ?
662
-			}
663
-		}
664
-	}
665
-
666
-	return $conflits;
607
+    $spip_table_objet = table_objet_sql($type);
608
+    $id_table_objet = id_table_objet($type);
609
+
610
+    // Controle des MD5 envoyes
611
+    // On elimine les donnees non modifiees par le formulaire (mais
612
+    // potentiellement modifiees entre temps par un autre utilisateur)
613
+    foreach ($champs as $key => $val) {
614
+        if (
615
+            isset($ctr[$prefix . $key])
616
+            && ($m = $ctr[$prefix . $key])
617
+            && (is_scalar($val) && $m == md5($val))
618
+        ) {
619
+            unset($champs[$key]);
620
+        }
621
+    }
622
+    if (!$champs) {
623
+        return;
624
+    }
625
+
626
+    // On veut savoir si notre modif va avoir un impact
627
+    // par rapport aux donnees contenues dans la base
628
+    // (qui peuvent etre differentes de celles ayant servi a calculer le ctr)
629
+    $s = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=$id", $serveur);
630
+    $intact = true;
631
+    foreach ($champs as $ch => $val) {
632
+        $intact &= ($s[$ch] == $val);
633
+    }
634
+    if ($intact) {
635
+        return;
636
+    }
637
+
638
+    // Detection de conflits :
639
+    // On verifie si notre modif ne provient pas d'un formulaire
640
+    // genere a partir de donnees modifiees dans l'intervalle ; ici
641
+    // on compare a ce qui est dans la base, et on bloque en cas
642
+    // de conflit.
643
+    $ctrh = $ctrq = $conflits = [];
644
+    foreach (array_keys($champs) as $key) {
645
+        if (isset($ctr[$prefix . $key]) && ($m = $ctr[$prefix . $key])) {
646
+            $ctrh[$key] = $m;
647
+            $ctrq[] = $key;
648
+        }
649
+    }
650
+    if ($ctrq) {
651
+        $ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur);
652
+        foreach ($ctrh as $key => $m) {
653
+            if (
654
+                $m != md5((string) $ctrq[$key])
655
+                && $champs[$key] !== $ctrq[$key]
656
+            ) {
657
+                $conflits[$key] = [
658
+                    'base' => $ctrq[$key],
659
+                    'post' => $champs[$key]
660
+                ];
661
+                unset($champs[$key]); # stocker quand meme les modifs ?
662
+            }
663
+        }
664
+    }
665
+
666
+    return $conflits;
667 667
 }
668 668
 
669 669
 /**
@@ -675,9 +675,9 @@  discard block
 block discarded – undo
675 675
  * @return string
676 676
  */
677 677
 function display_conflit_champ($x) {
678
-	if (strstr($x, "\n") || strlen($x) > 80) {
679
-		return "<textarea style='width:99%; height:10em;'>" . entites_html($x) . "</textarea>\n";
680
-	} else {
681
-		return "<input type='text' size='40' style='width:99%' value=\"" . entites_html($x) . "\" />\n";
682
-	}
678
+    if (strstr($x, "\n") || strlen($x) > 80) {
679
+        return "<textarea style='width:99%; height:10em;'>" . entites_html($x) . "</textarea>\n";
680
+    } else {
681
+        return "<input type='text' size='40' style='width:99%' value=\"" . entites_html($x) . "\" />\n";
682
+    }
683 683
 }
Please login to merge, or discard this patch.
ecrire/inc/minipres.php 1 patch
Indentation   +30 added lines, -30 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  * @package SPIP\Core\Minipres
18 18
  **/
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 /**
@@ -37,19 +37,19 @@  discard block
 block discarded – undo
37 37
  */
38 38
 function install_debut_html($titre = 'AUTO', $onLoad = '', $all_inline = false) {
39 39
 
40
-	if ($onLoad) {
41
-		include_spip('inc/filtres');
42
-		$onLoad = extraire_attribut("<body $onLoad>", 'onload');
43
-	}
40
+    if ($onLoad) {
41
+        include_spip('inc/filtres');
42
+        $onLoad = extraire_attribut("<body $onLoad>", 'onload');
43
+    }
44 44
 
45
-	$options = [
46
-		'all_inline' => $all_inline,
47
-		'onload' => $onLoad,
48
-		'titre' => $titre,
49
-	];
45
+    $options = [
46
+        'all_inline' => $all_inline,
47
+        'onload' => $onLoad,
48
+        'titre' => $titre,
49
+    ];
50 50
 
51
-	$minipage = new Admin();
52
-	return $minipage->installDebutPage($options);
51
+    $minipage = new Admin();
52
+    return $minipage->installDebutPage($options);
53 53
 }
54 54
 
55 55
 /**
@@ -61,8 +61,8 @@  discard block
 block discarded – undo
61 61
  * @return string Code HTML
62 62
  */
63 63
 function install_fin_html() {
64
-	$minipage = new Admin();
65
-	return $minipage->installFinPage();
64
+    $minipage = new Admin();
65
+    return $minipage->installFinPage();
66 66
 }
67 67
 
68 68
 
@@ -101,23 +101,23 @@  discard block
 block discarded – undo
101 101
  */
102 102
 function minipres($titre = '', $corps = '', $options = []) {
103 103
 
104
-	// compat signature old
105
-	// minipres($titre='', $corps="", $onload='', $all_inline = false)
106
-	$args = func_get_args();
107
-	if (isset($args[2]) && is_string($args[2])) {
108
-		$options = ['onload' => $args[2]];
109
-	}
110
-	if (isset($args[3])) {
111
-		$options['all_inline'] = $args[3];
112
-	}
104
+    // compat signature old
105
+    // minipres($titre='', $corps="", $onload='', $all_inline = false)
106
+    $args = func_get_args();
107
+    if (isset($args[2]) && is_string($args[2])) {
108
+        $options = ['onload' => $args[2]];
109
+    }
110
+    if (isset($args[3])) {
111
+        $options['all_inline'] = $args[3];
112
+    }
113 113
 
114
-	$options = array_merge([
115
-		'onload' => '',
116
-		'all_inline' => false,
117
-	], $options);
114
+    $options = array_merge([
115
+        'onload' => '',
116
+        'all_inline' => false,
117
+    ], $options);
118 118
 
119
-	$options['titre'] = $titre;
119
+    $options['titre'] = $titre;
120 120
 
121
-	$minipage = new Admin();
122
-	return $minipage->page($corps, $options);
121
+    $minipage = new Admin();
122
+    return $minipage->page($corps, $options);
123 123
 }
Please login to merge, or discard this patch.
ecrire/inc/texte.php 1 patch
Indentation   +229 added lines, -229 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  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
 include_spip('inc/texte_mini');
@@ -35,7 +35,7 @@  discard block
 block discarded – undo
35 35
  * @return array Tablea ('','')
36 36
  */
37 37
 function definir_raccourcis_alineas() {
38
-	return ['', ''];
38
+    return ['', ''];
39 39
 }
40 40
 
41 41
 
@@ -48,7 +48,7 @@  discard block
 block discarded – undo
48 48
  * @return string
49 49
  */
50 50
 function traiter_tableau($bloc) {
51
-	return $bloc;
51
+    return $bloc;
52 52
 }
53 53
 
54 54
 
@@ -62,7 +62,7 @@  discard block
 block discarded – undo
62 62
  * @return string
63 63
  */
64 64
 function traiter_listes($texte) {
65
-	return $texte;
65
+    return $texte;
66 66
 }
67 67
 
68 68
 /**
@@ -78,16 +78,16 @@  discard block
 block discarded – undo
78 78
  */
79 79
 function traiter_raccourcis($letexte) {
80 80
 
81
-	// Appeler les fonctions de pre_traitement
82
-	$letexte = pipeline('pre_propre', $letexte);
81
+    // Appeler les fonctions de pre_traitement
82
+    $letexte = pipeline('pre_propre', $letexte);
83 83
 
84
-	// APPELER ICI UN PIPELINE traiter_raccourcis ?
85
-	// $letexte = pipeline('traiter_raccourcis', $letexte);
84
+    // APPELER ICI UN PIPELINE traiter_raccourcis ?
85
+    // $letexte = pipeline('traiter_raccourcis', $letexte);
86 86
 
87
-	// Appeler les fonctions de post-traitement
88
-	$letexte = pipeline('post_propre', $letexte);
87
+    // Appeler les fonctions de post-traitement
88
+    $letexte = pipeline('post_propre', $letexte);
89 89
 
90
-	return $letexte;
90
+    return $letexte;
91 91
 }
92 92
 
93 93
 /*************************************************************************************************************************
@@ -103,22 +103,22 @@  discard block
 block discarded – undo
103 103
  * @return string
104 104
  */
105 105
 function echappe_js($t, $class = ' class = "echappe-js"') {
106
-	foreach (['script', 'iframe'] as $tag) {
107
-		if (
108
-			stripos($t, (string) "<$tag") !== false
109
-			&& preg_match_all(',<' . $tag . '.*?($|</' . $tag . '.),isS', $t, $r, PREG_SET_ORDER)
110
-		) {
111
-			foreach ($r as $regs) {
112
-				$t = str_replace(
113
-					$regs[0],
114
-					"<code$class>" . nl2br(spip_htmlspecialchars($regs[0])) . '</code>',
115
-					$t
116
-				);
117
-			}
118
-		}
119
-	}
120
-
121
-	return $t;
106
+    foreach (['script', 'iframe'] as $tag) {
107
+        if (
108
+            stripos($t, (string) "<$tag") !== false
109
+            && preg_match_all(',<' . $tag . '.*?($|</' . $tag . '.),isS', $t, $r, PREG_SET_ORDER)
110
+        ) {
111
+            foreach ($r as $regs) {
112
+                $t = str_replace(
113
+                    $regs[0],
114
+                    "<code$class>" . nl2br(spip_htmlspecialchars($regs[0])) . '</code>',
115
+                    $t
116
+                );
117
+            }
118
+        }
119
+    }
120
+
121
+    return $t;
122 122
 }
123 123
 
124 124
 
@@ -147,55 +147,55 @@  discard block
 block discarded – undo
147 147
  *     Code protégé
148 148
  **/
149 149
 function interdire_scripts($arg, $mode_filtre = null) {
150
-	// on memorise le resultat sur les arguments non triviaux
151
-	static $dejavu = [];
152
-
153
-	// Attention, si ce n'est pas une chaine, laisser intact
154
-	if (!$arg || !is_string($arg) || !strstr($arg, '<')) {
155
-		return $arg;
156
-	}
157
-
158
-	if (is_null($mode_filtre) || !in_array($mode_filtre, [-1, 0, 1])) {
159
-		$mode_filtre = $GLOBALS['filtrer_javascript'];
160
-	}
161
-
162
-	if (isset($dejavu[$mode_filtre][$arg])) {
163
-		return $dejavu[$mode_filtre][$arg];
164
-	}
165
-
166
-	// echapper les tags asp/php
167
-	$t = str_replace('<' . '%', '&lt;%', $arg);
168
-
169
-	// echapper le php
170
-	$t = str_replace('<' . '?', '&lt;?', $t);
171
-
172
-	// echapper le < script language=php >
173
-	$t = preg_replace(',<(script\b[^>]+\blanguage\b[^\w>]+php\b),UimsS', '&lt;\1', $t);
174
-
175
-	// Pour le js, trois modes : parano (-1), prive (0), ok (1)
176
-	switch ($mode_filtre) {
177
-		case 0:
178
-			if (!_DIR_RESTREINT) {
179
-				$t = echappe_js($t);
180
-			}
181
-			break;
182
-		case -1:
183
-			$t = echappe_js($t);
184
-			break;
185
-	}
186
-
187
-	// pas de <base href /> svp !
188
-	$t = preg_replace(',<(base\b),iS', '&lt;\1', $t);
189
-
190
-	// Reinserer les echappements des modeles
191
-	if (defined('_PROTEGE_JS_MODELES')) {
192
-		$t = echappe_retour($t, 'javascript' . _PROTEGE_JS_MODELES);
193
-	}
194
-	if (defined('_PROTEGE_PHP_MODELES')) {
195
-		$t = echappe_retour($t, 'php' . _PROTEGE_PHP_MODELES);
196
-	}
197
-
198
-	return $dejavu[$mode_filtre][$arg] = $t;
150
+    // on memorise le resultat sur les arguments non triviaux
151
+    static $dejavu = [];
152
+
153
+    // Attention, si ce n'est pas une chaine, laisser intact
154
+    if (!$arg || !is_string($arg) || !strstr($arg, '<')) {
155
+        return $arg;
156
+    }
157
+
158
+    if (is_null($mode_filtre) || !in_array($mode_filtre, [-1, 0, 1])) {
159
+        $mode_filtre = $GLOBALS['filtrer_javascript'];
160
+    }
161
+
162
+    if (isset($dejavu[$mode_filtre][$arg])) {
163
+        return $dejavu[$mode_filtre][$arg];
164
+    }
165
+
166
+    // echapper les tags asp/php
167
+    $t = str_replace('<' . '%', '&lt;%', $arg);
168
+
169
+    // echapper le php
170
+    $t = str_replace('<' . '?', '&lt;?', $t);
171
+
172
+    // echapper le < script language=php >
173
+    $t = preg_replace(',<(script\b[^>]+\blanguage\b[^\w>]+php\b),UimsS', '&lt;\1', $t);
174
+
175
+    // Pour le js, trois modes : parano (-1), prive (0), ok (1)
176
+    switch ($mode_filtre) {
177
+        case 0:
178
+            if (!_DIR_RESTREINT) {
179
+                $t = echappe_js($t);
180
+            }
181
+            break;
182
+        case -1:
183
+            $t = echappe_js($t);
184
+            break;
185
+    }
186
+
187
+    // pas de <base href /> svp !
188
+    $t = preg_replace(',<(base\b),iS', '&lt;\1', $t);
189
+
190
+    // Reinserer les echappements des modeles
191
+    if (defined('_PROTEGE_JS_MODELES')) {
192
+        $t = echappe_retour($t, 'javascript' . _PROTEGE_JS_MODELES);
193
+    }
194
+    if (defined('_PROTEGE_PHP_MODELES')) {
195
+        $t = echappe_retour($t, 'php' . _PROTEGE_PHP_MODELES);
196
+    }
197
+
198
+    return $dejavu[$mode_filtre][$arg] = $t;
199 199
 }
200 200
 
201 201
 
@@ -224,66 +224,66 @@  discard block
 block discarded – undo
224 224
  *     texte transformé
225 225
  **/
226 226
 function typo($letexte, $echapper = true, $connect = null, $env = []) {
227
-	// Plus vite !
228
-	if (!$letexte) {
229
-		return $letexte;
230
-	}
231
-
232
-	// les appels directs a cette fonction depuis le php de l'espace
233
-	// prive etant historiquement ecrit sans argment $connect
234
-	// on utilise la presence de celui-ci pour distinguer les cas
235
-	// ou il faut passer interdire_script explicitement
236
-	// les appels dans les squelettes (de l'espace prive) fournissant un $connect
237
-	// ne seront pas perturbes
238
-	$interdire_script = false;
239
-	if (is_null($connect)) {
240
-		$connect = '';
241
-		$interdire_script = true;
242
-		$env['espace_prive'] = test_espace_prive();
243
-	}
244
-
245
-	// Echapper les codes <html> etc
246
-	if ($echapper) {
247
-		$letexte = CollecteurHtmlTag::proteger_balisesHtml($letexte, 'TYPO');
248
-	}
249
-
250
-	//
251
-	// Installer les modeles, notamment images et documents ;
252
-	//
253
-	// NOTE : propre() ne passe pas par ici mais directement par corriger_typo
254
-	// cf. inc/lien
255
-
256
-	$letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect ?? '', null, $env);
257
-	if ($letexte != $mem) {
258
-		$echapper = true;
259
-	}
260
-	unset($mem);
261
-
262
-	$letexte = corriger_typo($letexte);
263
-	$letexte = echapper_faux_tags($letexte);
264
-
265
-	// reintegrer les echappements
266
-	if ($echapper) {
267
-		$letexte = CollecteurHtmlTag::retablir_depuisHtmlBase64($letexte, 'TYPO');
268
-	}
269
-
270
-	// Dans les appels directs hors squelette, securiser ici aussi
271
-	if ($interdire_script) {
272
-		$letexte = interdire_scripts($letexte);
273
-	}
274
-
275
-	// Dans l'espace prive on se mefie de tout contenu dangereux
276
-	// https://core.spip.net/issues/3371
277
-	// et aussi dans l'espace public si la globale filtrer_javascript = -1
278
-	// https://core.spip.net/issues/4166
279
-	if (
280
-		$GLOBALS['filtrer_javascript'] == -1
281
-		|| isset($env['espace_prive']) && $env['espace_prive'] && $GLOBALS['filtrer_javascript'] <= 0
282
-	) {
283
-		$letexte = echapper_html_suspect($letexte, [], $connect, $env);
284
-	}
285
-
286
-	return $letexte;
227
+    // Plus vite !
228
+    if (!$letexte) {
229
+        return $letexte;
230
+    }
231
+
232
+    // les appels directs a cette fonction depuis le php de l'espace
233
+    // prive etant historiquement ecrit sans argment $connect
234
+    // on utilise la presence de celui-ci pour distinguer les cas
235
+    // ou il faut passer interdire_script explicitement
236
+    // les appels dans les squelettes (de l'espace prive) fournissant un $connect
237
+    // ne seront pas perturbes
238
+    $interdire_script = false;
239
+    if (is_null($connect)) {
240
+        $connect = '';
241
+        $interdire_script = true;
242
+        $env['espace_prive'] = test_espace_prive();
243
+    }
244
+
245
+    // Echapper les codes <html> etc
246
+    if ($echapper) {
247
+        $letexte = CollecteurHtmlTag::proteger_balisesHtml($letexte, 'TYPO');
248
+    }
249
+
250
+    //
251
+    // Installer les modeles, notamment images et documents ;
252
+    //
253
+    // NOTE : propre() ne passe pas par ici mais directement par corriger_typo
254
+    // cf. inc/lien
255
+
256
+    $letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect ?? '', null, $env);
257
+    if ($letexte != $mem) {
258
+        $echapper = true;
259
+    }
260
+    unset($mem);
261
+
262
+    $letexte = corriger_typo($letexte);
263
+    $letexte = echapper_faux_tags($letexte);
264
+
265
+    // reintegrer les echappements
266
+    if ($echapper) {
267
+        $letexte = CollecteurHtmlTag::retablir_depuisHtmlBase64($letexte, 'TYPO');
268
+    }
269
+
270
+    // Dans les appels directs hors squelette, securiser ici aussi
271
+    if ($interdire_script) {
272
+        $letexte = interdire_scripts($letexte);
273
+    }
274
+
275
+    // Dans l'espace prive on se mefie de tout contenu dangereux
276
+    // https://core.spip.net/issues/3371
277
+    // et aussi dans l'espace public si la globale filtrer_javascript = -1
278
+    // https://core.spip.net/issues/4166
279
+    if (
280
+        $GLOBALS['filtrer_javascript'] == -1
281
+        || isset($env['espace_prive']) && $env['espace_prive'] && $GLOBALS['filtrer_javascript'] <= 0
282
+    ) {
283
+        $letexte = echapper_html_suspect($letexte, [], $connect, $env);
284
+    }
285
+
286
+    return $letexte;
287 287
 }
288 288
 
289 289
 // Correcteur typographique
@@ -308,57 +308,57 @@  discard block
 block discarded – undo
308 308
  */
309 309
 function corriger_typo($letexte, $lang = '') {
310 310
 
311
-	// Plus vite !
312
-	if (!$letexte) {
313
-		return $letexte;
314
-	}
315
-
316
-	$letexte = pipeline('pre_typo', $letexte);
317
-
318
-	// Caracteres de controle "illegaux"
319
-	$letexte = corriger_caracteres($letexte);
320
-
321
-	// Proteger les caracteres typographiques a l'interieur des tags html
322
-	if (preg_match_all(_TYPO_BALISE, $letexte, $regs, PREG_SET_ORDER)) {
323
-		foreach ($regs as $reg) {
324
-			$insert = $reg[0];
325
-			// hack: on transforme les caracteres a proteger en les remplacant
326
-			// par des caracteres "illegaux". (cf corriger_caracteres())
327
-			$insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
328
-			$letexte = str_replace($reg[0], $insert, $letexte);
329
-		}
330
-	}
331
-
332
-	// trouver les blocs idiomes et les traiter à part
333
-	$letexte = extraire_idiome($ei = $letexte, $lang, ['echappe_span' => true]);
334
-	$ei = ($ei !== $letexte);
335
-
336
-	// trouver les blocs multi et les traiter a part
337
-	$letexte = extraire_multi($em = $letexte, $lang, ['echappe_span' => true]);
338
-	$em = ($em !== $letexte);
339
-
340
-	// Charger & appliquer les fonctions de typographie
341
-	$typographie = charger_fonction(lang_typo($lang), 'typographie');
342
-	$letexte = $typographie($letexte);
343
-
344
-	// Les citations en une autre langue, s'il y a lieu
345
-	if ($em) {
346
-		$letexte = echappe_retour($letexte, 'multi');
347
-	}
348
-	if ($ei) {
349
-		$letexte = echappe_retour($letexte, 'idiome');
350
-	}
351
-
352
-	// Retablir les caracteres proteges
353
-	$letexte = strtr($letexte, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
354
-
355
-	// pipeline
356
-	$letexte = pipeline('post_typo', $letexte);
357
-
358
-	# un message pour abs_url - on est passe en mode texte
359
-	$GLOBALS['mode_abs_url'] = 'texte';
360
-
361
-	return $letexte;
311
+    // Plus vite !
312
+    if (!$letexte) {
313
+        return $letexte;
314
+    }
315
+
316
+    $letexte = pipeline('pre_typo', $letexte);
317
+
318
+    // Caracteres de controle "illegaux"
319
+    $letexte = corriger_caracteres($letexte);
320
+
321
+    // Proteger les caracteres typographiques a l'interieur des tags html
322
+    if (preg_match_all(_TYPO_BALISE, $letexte, $regs, PREG_SET_ORDER)) {
323
+        foreach ($regs as $reg) {
324
+            $insert = $reg[0];
325
+            // hack: on transforme les caracteres a proteger en les remplacant
326
+            // par des caracteres "illegaux". (cf corriger_caracteres())
327
+            $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
328
+            $letexte = str_replace($reg[0], $insert, $letexte);
329
+        }
330
+    }
331
+
332
+    // trouver les blocs idiomes et les traiter à part
333
+    $letexte = extraire_idiome($ei = $letexte, $lang, ['echappe_span' => true]);
334
+    $ei = ($ei !== $letexte);
335
+
336
+    // trouver les blocs multi et les traiter a part
337
+    $letexte = extraire_multi($em = $letexte, $lang, ['echappe_span' => true]);
338
+    $em = ($em !== $letexte);
339
+
340
+    // Charger & appliquer les fonctions de typographie
341
+    $typographie = charger_fonction(lang_typo($lang), 'typographie');
342
+    $letexte = $typographie($letexte);
343
+
344
+    // Les citations en une autre langue, s'il y a lieu
345
+    if ($em) {
346
+        $letexte = echappe_retour($letexte, 'multi');
347
+    }
348
+    if ($ei) {
349
+        $letexte = echappe_retour($letexte, 'idiome');
350
+    }
351
+
352
+    // Retablir les caracteres proteges
353
+    $letexte = strtr($letexte, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
354
+
355
+    // pipeline
356
+    $letexte = pipeline('post_typo', $letexte);
357
+
358
+    # un message pour abs_url - on est passe en mode texte
359
+    $GLOBALS['mode_abs_url'] = 'texte';
360
+
361
+    return $letexte;
362 362
 }
363 363
 
364 364
 
@@ -374,7 +374,7 @@  discard block
 block discarded – undo
374 374
  * @return string
375 375
  */
376 376
 function paragrapher($letexte, $forcer = true) {
377
-	return $letexte;
377
+    return $letexte;
378 378
 }
379 379
 
380 380
 /**
@@ -386,11 +386,11 @@  discard block
 block discarded – undo
386 386
  * @return string texte
387 387
  **/
388 388
 function traiter_retours_chariots($letexte) {
389
-	$letexte = preg_replace(",\r\n?,S", "\n", $letexte);
390
-	$letexte = preg_replace(',<p[>[:space:]],iS', "\n\n\\0", $letexte);
391
-	$letexte = preg_replace(',</p[>[:space:]],iS', "\\0\n\n", $letexte);
389
+    $letexte = preg_replace(",\r\n?,S", "\n", $letexte);
390
+    $letexte = preg_replace(',<p[>[:space:]],iS', "\n\n\\0", $letexte);
391
+    $letexte = preg_replace(',</p[>[:space:]],iS', "\\0\n\n", $letexte);
392 392
 
393
-	return $letexte;
393
+    return $letexte;
394 394
 }
395 395
 
396 396
 
@@ -416,41 +416,41 @@  discard block
 block discarded – undo
416 416
  *     texte transformé
417 417
  **/
418 418
 function propre($t, $connect = null, $env = []) {
419
-	// les appels directs a cette fonction depuis le php de l'espace
420
-	// prive etant historiquement ecrits sans argment $connect
421
-	// on utilise la presence de celui-ci pour distinguer les cas
422
-	// ou il faut passer interdire_script explicitement
423
-	// les appels dans les squelettes (de l'espace prive) fournissant un $connect
424
-	// ne seront pas perturbes
425
-	// FIXME: Trouver une solution pour avoir un type (string) unique sur $connect.
426
-	$interdire_script = false;
427
-	if (is_null($connect)) {
428
-		$connect = '';
429
-		$interdire_script = true;
430
-		$env['espace_prive'] = true;
431
-	}
432
-
433
-	if (!$t) {
434
-		return strval($t);
435
-	}
436
-
437
-	// Dans l'espace prive on se mefie de tout contenu dangereux
438
-	// avant echappement des balises <html>
439
-	// https://core.spip.net/issues/3371
440
-	// et aussi dans l'espace public si la globale filtrer_javascript = -1
441
-	// https://core.spip.net/issues/4166
442
-	if (
443
-		$interdire_script
444
-		|| $GLOBALS['filtrer_javascript'] == -1
445
-		|| !empty($env['espace_prive']) && $GLOBALS['filtrer_javascript'] <= 0
446
-		|| !empty($env['wysiwyg']) && $env['wysiwyg'] && $GLOBALS['filtrer_javascript'] <= 0
447
-	) {
448
-		$t = echapper_html_suspect($t, ['strict' => false], $connect, $env);
449
-	}
450
-	$t = echappe_html($t);
451
-	$t = expanser_liens($t, $connect ?? '', $env);
452
-	$t = traiter_raccourcis($t);
453
-	$t = echappe_retour_modeles($t, $interdire_script);
454
-
455
-	return $t;
419
+    // les appels directs a cette fonction depuis le php de l'espace
420
+    // prive etant historiquement ecrits sans argment $connect
421
+    // on utilise la presence de celui-ci pour distinguer les cas
422
+    // ou il faut passer interdire_script explicitement
423
+    // les appels dans les squelettes (de l'espace prive) fournissant un $connect
424
+    // ne seront pas perturbes
425
+    // FIXME: Trouver une solution pour avoir un type (string) unique sur $connect.
426
+    $interdire_script = false;
427
+    if (is_null($connect)) {
428
+        $connect = '';
429
+        $interdire_script = true;
430
+        $env['espace_prive'] = true;
431
+    }
432
+
433
+    if (!$t) {
434
+        return strval($t);
435
+    }
436
+
437
+    // Dans l'espace prive on se mefie de tout contenu dangereux
438
+    // avant echappement des balises <html>
439
+    // https://core.spip.net/issues/3371
440
+    // et aussi dans l'espace public si la globale filtrer_javascript = -1
441
+    // https://core.spip.net/issues/4166
442
+    if (
443
+        $interdire_script
444
+        || $GLOBALS['filtrer_javascript'] == -1
445
+        || !empty($env['espace_prive']) && $GLOBALS['filtrer_javascript'] <= 0
446
+        || !empty($env['wysiwyg']) && $env['wysiwyg'] && $GLOBALS['filtrer_javascript'] <= 0
447
+    ) {
448
+        $t = echapper_html_suspect($t, ['strict' => false], $connect, $env);
449
+    }
450
+    $t = echappe_html($t);
451
+    $t = expanser_liens($t, $connect ?? '', $env);
452
+    $t = traiter_raccourcis($t);
453
+    $t = echappe_retour_modeles($t, $interdire_script);
454
+
455
+    return $t;
456 456
 }
Please login to merge, or discard this patch.
ecrire/inc/filtres_mini.php 1 patch
Indentation   +101 added lines, -101 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
 
@@ -34,20 +34,20 @@  discard block
 block discarded – undo
34 34
  * @return string URL nettoyée
35 35
  **/
36 36
 function resolve_path($url) {
37
-	[$url, $query] = array_pad(explode('?', $url, 2), 2, null);
38
-	while (
39
-		preg_match(',/\.?/,', (string) $url, $regs) # supprime // et /./
40
-		|| preg_match(',/[^/]*/\.\./,S', (string) $url, $regs)  # supprime /toto/../
41
-		|| preg_match(',^/\.\./,S', (string) $url, $regs) # supprime les /../ du haut
42
-	) {
43
-		$url = str_replace($regs[0], '/', (string) $url);
44
-	}
37
+    [$url, $query] = array_pad(explode('?', $url, 2), 2, null);
38
+    while (
39
+        preg_match(',/\.?/,', (string) $url, $regs) # supprime // et /./
40
+        || preg_match(',/[^/]*/\.\./,S', (string) $url, $regs)  # supprime /toto/../
41
+        || preg_match(',^/\.\./,S', (string) $url, $regs) # supprime les /../ du haut
42
+    ) {
43
+        $url = str_replace($regs[0], '/', (string) $url);
44
+    }
45 45
 
46
-	if ($query) {
47
-		$url .= '?' . $query;
48
-	}
46
+    if ($query) {
47
+        $url .= '?' . $query;
48
+    }
49 49
 
50
-	return '/' . preg_replace(',^/,S', '', (string) $url);
50
+    return '/' . preg_replace(',^/,S', '', (string) $url);
51 51
 }
52 52
 
53 53
 
@@ -68,40 +68,40 @@  discard block
 block discarded – undo
68 68
  **/
69 69
 function suivre_lien($url, $lien) {
70 70
 
71
-	$mot = null;
72
-	$get = null;
73
-	$hash = null;
74
-	if (preg_match(',^(mailto|javascript|data|tel|callto|file|ftp):,iS', $lien)) {
75
-		return $lien;
76
-	}
77
-	if (preg_match(';^((?:[a-z]{3,33}:)?//.*?)(/.*)?$;iS', $lien, $r)) {
78
-		$r = array_pad($r, 3, '');
71
+    $mot = null;
72
+    $get = null;
73
+    $hash = null;
74
+    if (preg_match(',^(mailto|javascript|data|tel|callto|file|ftp):,iS', $lien)) {
75
+        return $lien;
76
+    }
77
+    if (preg_match(';^((?:[a-z]{3,33}:)?//.*?)(/.*)?$;iS', $lien, $r)) {
78
+        $r = array_pad($r, 3, '');
79 79
 
80
-		return $r[1] . resolve_path($r[2]);
81
-	}
80
+        return $r[1] . resolve_path($r[2]);
81
+    }
82 82
 
83
-	# L'url site spip est un lien absolu aussi
84
-	if (isset($GLOBALS['meta']['adresse_site']) && $lien == $GLOBALS['meta']['adresse_site']) {
85
-		return $lien;
86
-	}
83
+    # L'url site spip est un lien absolu aussi
84
+    if (isset($GLOBALS['meta']['adresse_site']) && $lien == $GLOBALS['meta']['adresse_site']) {
85
+        return $lien;
86
+    }
87 87
 
88
-	# lien relatif, il faut verifier l'url de base
89
-	# commencer par virer la chaine de get de l'url de base
90
-	$dir = '/';
91
-	$debut = '';
92
-	if (preg_match(';^((?:[a-z]{3,7}:)?//[^/]+)(/.*?/?)?([^/#?]*)([?][^#]*)?(#.*)?$;S', $url, $regs)) {
93
-		$debut = $regs[1];
94
-		$dir = strlen($regs[2]) ? $regs[2] : '/';
95
-		$mot = $regs[3];
96
-		$get = $regs[4] ?? '';
97
-		$hash = $regs[5] ?? '';
98
-	}
99
-	return match (substr($lien, 0, 1)) {
100
-		'/' => $debut . resolve_path($lien),
101
-		'#' => $debut . resolve_path($dir . $mot . $get . $lien),
102
-		'' => $debut . resolve_path($dir . $mot . $get . $hash),
103
-		default => $debut . resolve_path($dir . $lien),
104
-	};
88
+    # lien relatif, il faut verifier l'url de base
89
+    # commencer par virer la chaine de get de l'url de base
90
+    $dir = '/';
91
+    $debut = '';
92
+    if (preg_match(';^((?:[a-z]{3,7}:)?//[^/]+)(/.*?/?)?([^/#?]*)([?][^#]*)?(#.*)?$;S', $url, $regs)) {
93
+        $debut = $regs[1];
94
+        $dir = strlen($regs[2]) ? $regs[2] : '/';
95
+        $mot = $regs[3];
96
+        $get = $regs[4] ?? '';
97
+        $hash = $regs[5] ?? '';
98
+    }
99
+    return match (substr($lien, 0, 1)) {
100
+        '/' => $debut . resolve_path($lien),
101
+        '#' => $debut . resolve_path($dir . $mot . $get . $lien),
102
+        '' => $debut . resolve_path($dir . $mot . $get . $hash),
103
+        default => $debut . resolve_path($dir . $lien),
104
+    };
105 105
 }
106 106
 
107 107
 
@@ -124,15 +124,15 @@  discard block
 block discarded – undo
124 124
  * @return string texte ou URL (en absolus)
125 125
  **/
126 126
 function url_absolue($url, $base = '') {
127
-	$url = trim((string) $url);
128
-	if (strlen($url = trim($url)) == 0) {
129
-		return '';
130
-	}
131
-	if (!$base) {
132
-		$base = url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : '');
133
-	}
127
+    $url = trim((string) $url);
128
+    if (strlen($url = trim($url)) == 0) {
129
+        return '';
130
+    }
131
+    if (!$base) {
132
+        $base = url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : '');
133
+    }
134 134
 
135
-	return suivre_lien($base, $url);
135
+    return suivre_lien($base, $url);
136 136
 }
137 137
 
138 138
 /**
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
  * @return string
144 144
  */
145 145
 function protocole_implicite($url_absolue) {
146
-	return preg_replace(';^[a-z]{3,7}://;i', '//', $url_absolue);
146
+    return preg_replace(';^[a-z]{3,7}://;i', '//', $url_absolue);
147 147
 }
148 148
 
149 149
 /**
@@ -154,16 +154,16 @@  discard block
 block discarded – undo
154 154
  */
155 155
 function protocole_verifier($url_absolue, $protocoles_autorises = ['http','https']) {
156 156
 
157
-	if (preg_match(';^([a-z]{3,7})://;i', $url_absolue, $m)) {
158
-		$protocole = $m[1];
159
-		if (
160
-			in_array($protocole, $protocoles_autorises)
161
-			|| in_array(strtolower($protocole), array_map('strtolower', $protocoles_autorises))
162
-		) {
163
-			return true;
164
-		}
165
-	}
166
-	return false;
157
+    if (preg_match(';^([a-z]{3,7})://;i', $url_absolue, $m)) {
158
+        $protocole = $m[1];
159
+        if (
160
+            in_array($protocole, $protocoles_autorises)
161
+            || in_array(strtolower($protocole), array_map('strtolower', $protocoles_autorises))
162
+        ) {
163
+            return true;
164
+        }
165
+    }
166
+    return false;
167 167
 }
168 168
 
169 169
 /**
@@ -180,31 +180,31 @@  discard block
 block discarded – undo
180 180
  * @return string texte avec des URLs absolues
181 181
  **/
182 182
 function liens_absolus($texte, $base = '') {
183
-	if ($texte === null || $texte === '') {
184
-		return '';
185
-	}
186
-	if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS', $texte, $liens, PREG_SET_ORDER)) {
187
-		if (!function_exists('extraire_attribut')) {
188
-			include_spip('inc/filtres');
189
-		}
190
-		foreach ($liens as $lien) {
191
-			foreach (['href', 'src'] as $attr) {
192
-				$href = extraire_attribut($lien[0], $attr) ?? '';
193
-				if (
194
-					strlen((string) $href) > 0
195
-					&& !preg_match(';^((?:[a-z]{3,7}:)?//);iS', (string) $href)
196
-				) {
197
-					$abs = url_absolue($href, $base);
198
-					if (rtrim((string) $href, '/') !== rtrim($abs, '/') && !preg_match('/^#/', (string) $href)) {
199
-						$texte_lien = inserer_attribut($lien[0], $attr, $abs);
200
-						$texte = str_replace($lien[0], $texte_lien, $texte);
201
-					}
202
-				}
203
-			}
204
-		}
205
-	}
183
+    if ($texte === null || $texte === '') {
184
+        return '';
185
+    }
186
+    if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS', $texte, $liens, PREG_SET_ORDER)) {
187
+        if (!function_exists('extraire_attribut')) {
188
+            include_spip('inc/filtres');
189
+        }
190
+        foreach ($liens as $lien) {
191
+            foreach (['href', 'src'] as $attr) {
192
+                $href = extraire_attribut($lien[0], $attr) ?? '';
193
+                if (
194
+                    strlen((string) $href) > 0
195
+                    && !preg_match(';^((?:[a-z]{3,7}:)?//);iS', (string) $href)
196
+                ) {
197
+                    $abs = url_absolue($href, $base);
198
+                    if (rtrim((string) $href, '/') !== rtrim($abs, '/') && !preg_match('/^#/', (string) $href)) {
199
+                        $texte_lien = inserer_attribut($lien[0], $attr, $abs);
200
+                        $texte = str_replace($lien[0], $texte_lien, $texte);
201
+                    }
202
+                }
203
+            }
204
+        }
205
+    }
206 206
 
207
-	return $texte;
207
+    return $texte;
208 208
 }
209 209
 
210 210
 
@@ -222,12 +222,12 @@  discard block
 block discarded – undo
222 222
  * @return string texte ou URL (en absolus)
223 223
  **/
224 224
 function abs_url($texte, $base = '') {
225
-	trigger_deprecation('spip', '5.0', sprintf('Using "%s" is deprecated. Use "%s" or "%s"', __FUNCTION__, 'url_absolue', 'liens_absolus'));
226
-	if ($GLOBALS['mode_abs_url'] == 'url') {
227
-		return url_absolue($texte, $base);
228
-	} else {
229
-		return liens_absolus($texte, $base);
230
-	}
225
+    trigger_deprecation('spip', '5.0', sprintf('Using "%s" is deprecated. Use "%s" or "%s"', __FUNCTION__, 'url_absolue', 'liens_absolus'));
226
+    if ($GLOBALS['mode_abs_url'] == 'url') {
227
+        return url_absolue($texte, $base);
228
+    } else {
229
+        return liens_absolus($texte, $base);
230
+    }
231 231
 }
232 232
 
233 233
 /**
@@ -240,11 +240,11 @@  discard block
 block discarded – undo
240 240
  * @return string
241 241
  */
242 242
 function spip_htmlspecialchars($string, $flags = null, $encoding = 'UTF-8', $double_encode = true) {
243
-	if (is_null($flags)) {
244
-		$flags = ENT_COMPAT | ENT_HTML401;
245
-	}
243
+    if (is_null($flags)) {
244
+        $flags = ENT_COMPAT | ENT_HTML401;
245
+    }
246 246
 
247
-	return htmlspecialchars($string, $flags, $encoding, $double_encode);
247
+    return htmlspecialchars($string, $flags, $encoding, $double_encode);
248 248
 }
249 249
 
250 250
 /**
@@ -257,9 +257,9 @@  discard block
 block discarded – undo
257 257
  * @return string
258 258
  */
259 259
 function spip_htmlentities($string, $flags = null, $encoding = 'UTF-8', $double_encode = true) {
260
-	if (is_null($flags)) {
261
-		$flags = ENT_COMPAT | ENT_HTML401;
262
-	}
260
+    if (is_null($flags)) {
261
+        $flags = ENT_COMPAT | ENT_HTML401;
262
+    }
263 263
 
264
-	return htmlentities($string, $flags, $encoding, $double_encode);
264
+    return htmlentities($string, $flags, $encoding, $double_encode);
265 265
 }
Please login to merge, or discard this patch.
ecrire/inc/filtres_ecrire.php 1 patch
Indentation   +372 added lines, -372 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
  * @package SPIP\Core\Filtres
16 16
  */
17 17
 if (!defined('_ECRIRE_INC_VERSION')) {
18
-	return;
18
+    return;
19 19
 }
20 20
 
21 21
 include_spip('inc/filtres_boites');
@@ -40,25 +40,25 @@  discard block
 block discarded – undo
40 40
  */
41 41
 function parametres_css_prive() {
42 42
 
43
-	$args = [];
44
-	$args['v'] = $GLOBALS['spip_version_code'];
45
-	$args['p'] = substr(md5((string) $GLOBALS['meta']['plugin']), 0, 4);
46
-	$args['themes'] = implode(',', lister_themes_prives());
47
-	$args['ltr'] = $GLOBALS['spip_lang_left'];
48
-	// un md5 des menus : si un menu change il faut maj la css
49
-	$args['md5b'] = (function_exists('md5_boutons_plugins') ? md5_boutons_plugins() : '');
43
+    $args = [];
44
+    $args['v'] = $GLOBALS['spip_version_code'];
45
+    $args['p'] = substr(md5((string) $GLOBALS['meta']['plugin']), 0, 4);
46
+    $args['themes'] = implode(',', lister_themes_prives());
47
+    $args['ltr'] = $GLOBALS['spip_lang_left'];
48
+    // un md5 des menus : si un menu change il faut maj la css
49
+    $args['md5b'] = (function_exists('md5_boutons_plugins') ? md5_boutons_plugins() : '');
50 50
 
51
-	$c = $GLOBALS['visiteur_session']['prefs']['couleur'] ?? 2;
51
+    $c = $GLOBALS['visiteur_session']['prefs']['couleur'] ?? 2;
52 52
 
53
-	$couleurs = charger_fonction('couleurs', 'inc');
54
-	parse_str((string) $couleurs($c), $c);
55
-	$args = array_merge($args, $c);
53
+    $couleurs = charger_fonction('couleurs', 'inc');
54
+    parse_str((string) $couleurs($c), $c);
55
+    $args = array_merge($args, $c);
56 56
 
57
-	if (_request('var_mode') == 'recalcul' || defined('_VAR_MODE') && _VAR_MODE == 'recalcul') {
58
-		$args['var_mode'] = 'recalcul';
59
-	}
57
+    if (_request('var_mode') == 'recalcul' || defined('_VAR_MODE') && _VAR_MODE == 'recalcul') {
58
+        $args['var_mode'] = 'recalcul';
59
+    }
60 60
 
61
-	return http_build_query($args);
61
+    return http_build_query($args);
62 62
 }
63 63
 
64 64
 
@@ -81,95 +81,95 @@  discard block
 block discarded – undo
81 81
  * @return string
82 82
  */
83 83
 function chercher_rubrique(
84
-	$titre,
85
-	$id_objet,
86
-	$id_parent,
87
-	$objet,
88
-	$id_secteur,
89
-	$restreint,
90
-	$actionable = false,
91
-	$retour_sans_cadre = false
84
+    $titre,
85
+    $id_objet,
86
+    $id_parent,
87
+    $objet,
88
+    $id_secteur,
89
+    $restreint,
90
+    $actionable = false,
91
+    $retour_sans_cadre = false
92 92
 ) {
93 93
 
94
-	include_spip('inc/autoriser');
95
-	if ((int) $id_objet && !autoriser('modifier', $objet, $id_objet)) {
96
-		return '';
97
-	}
98
-	if (!sql_countsel('spip_rubriques')) {
99
-		return '';
100
-	}
101
-	$chercher_rubrique = charger_fonction('chercher_rubrique', 'inc');
102
-	$form = $chercher_rubrique($id_parent, $objet, $restreint, ($objet == 'rubrique') ? $id_objet : 0);
103
-
104
-	if ($id_parent == 0) {
105
-		$logo = 'racine-24.png';
106
-	} elseif ($id_secteur == $id_parent) {
107
-		$logo = 'secteur-24.png';
108
-	} else {
109
-		$logo = 'rubrique-24.png';
110
-	}
111
-
112
-	$confirm = '';
113
-	if ($objet == 'rubrique') {
114
-		// FIXME: Migration plus adapté vers le plugin Brèves ?
115
-		// si c'est une rubrique-secteur contenant des breves, demander la
116
-		// confirmation du deplacement
117
-		if (
118
-			sql_table_exists('spip_breves')
119
-			&& ($contient_breves = sql_countsel('spip_breves', 'id_rubrique=' . (int) $id_objet))
120
-			&& $contient_breves > 0
121
-		) {
122
-			// FIXME: utiliser singulier_ou_pluriel, migrer dans plugin Brèves
123
-			$scb = ($contient_breves > 1 ? 's' : '');
124
-			$scb = _T(
125
-				'avis_deplacement_rubrique',
126
-				[
127
-					'contient_breves' => $contient_breves,
128
-					'scb' => $scb
129
-				]
130
-			);
131
-			$confirm .= "\n<div class='confirmer_deplacement verdana2'>"
132
-				. "<div class='choix'><input type='checkbox' name='confirme_deplace' value='oui' id='confirme-deplace' /><label for='confirme-deplace'>"
133
-				. $scb .
134
-				"</label></div></div>\n";
135
-		} else {
136
-			$confirm .= "<input type='hidden' name='confirme_deplace' value='oui' />\n";
137
-		}
138
-	}
139
-	$form .= $confirm;
140
-	if ($actionable) {
141
-		if (str_contains($form, '<select')) {
142
-			$form .= "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>"
143
-				. '<input class="fondo submit btn" type="submit" value="' . _T('bouton_choisir') . '"/>'
144
-				. '</div>';
145
-		}
146
-		$form = "<input type='hidden' name='editer_$objet' value='oui' />\n" . $form;
147
-		if ($action = charger_fonction("editer_$objet", 'action', true)) {
148
-			$form = generer_action_auteur(
149
-				"editer_$objet",
150
-				$id_objet,
151
-				self(),
152
-				$form,
153
-				" method='post' class='submit_plongeur'"
154
-			);
155
-		} else {
156
-			$form = generer_action_auteur(
157
-				'editer_objet',
158
-				"$objet/$id_objet",
159
-				self(),
160
-				$form,
161
-				" method='post' class='submit_plongeur'"
162
-			);
163
-		}
164
-	}
165
-
166
-	if ($retour_sans_cadre) {
167
-		return $form;
168
-	}
169
-
170
-	include_spip('inc/presentation');
171
-
172
-	return debut_cadre_couleur($logo, true, '', $titre) . $form . fin_cadre_couleur();
94
+    include_spip('inc/autoriser');
95
+    if ((int) $id_objet && !autoriser('modifier', $objet, $id_objet)) {
96
+        return '';
97
+    }
98
+    if (!sql_countsel('spip_rubriques')) {
99
+        return '';
100
+    }
101
+    $chercher_rubrique = charger_fonction('chercher_rubrique', 'inc');
102
+    $form = $chercher_rubrique($id_parent, $objet, $restreint, ($objet == 'rubrique') ? $id_objet : 0);
103
+
104
+    if ($id_parent == 0) {
105
+        $logo = 'racine-24.png';
106
+    } elseif ($id_secteur == $id_parent) {
107
+        $logo = 'secteur-24.png';
108
+    } else {
109
+        $logo = 'rubrique-24.png';
110
+    }
111
+
112
+    $confirm = '';
113
+    if ($objet == 'rubrique') {
114
+        // FIXME: Migration plus adapté vers le plugin Brèves ?
115
+        // si c'est une rubrique-secteur contenant des breves, demander la
116
+        // confirmation du deplacement
117
+        if (
118
+            sql_table_exists('spip_breves')
119
+            && ($contient_breves = sql_countsel('spip_breves', 'id_rubrique=' . (int) $id_objet))
120
+            && $contient_breves > 0
121
+        ) {
122
+            // FIXME: utiliser singulier_ou_pluriel, migrer dans plugin Brèves
123
+            $scb = ($contient_breves > 1 ? 's' : '');
124
+            $scb = _T(
125
+                'avis_deplacement_rubrique',
126
+                [
127
+                    'contient_breves' => $contient_breves,
128
+                    'scb' => $scb
129
+                ]
130
+            );
131
+            $confirm .= "\n<div class='confirmer_deplacement verdana2'>"
132
+                . "<div class='choix'><input type='checkbox' name='confirme_deplace' value='oui' id='confirme-deplace' /><label for='confirme-deplace'>"
133
+                . $scb .
134
+                "</label></div></div>\n";
135
+        } else {
136
+            $confirm .= "<input type='hidden' name='confirme_deplace' value='oui' />\n";
137
+        }
138
+    }
139
+    $form .= $confirm;
140
+    if ($actionable) {
141
+        if (str_contains($form, '<select')) {
142
+            $form .= "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>"
143
+                . '<input class="fondo submit btn" type="submit" value="' . _T('bouton_choisir') . '"/>'
144
+                . '</div>';
145
+        }
146
+        $form = "<input type='hidden' name='editer_$objet' value='oui' />\n" . $form;
147
+        if ($action = charger_fonction("editer_$objet", 'action', true)) {
148
+            $form = generer_action_auteur(
149
+                "editer_$objet",
150
+                $id_objet,
151
+                self(),
152
+                $form,
153
+                " method='post' class='submit_plongeur'"
154
+            );
155
+        } else {
156
+            $form = generer_action_auteur(
157
+                'editer_objet',
158
+                "$objet/$id_objet",
159
+                self(),
160
+                $form,
161
+                " method='post' class='submit_plongeur'"
162
+            );
163
+        }
164
+    }
165
+
166
+    if ($retour_sans_cadre) {
167
+        return $form;
168
+    }
169
+
170
+    include_spip('inc/presentation');
171
+
172
+    return debut_cadre_couleur($logo, true, '', $titre) . $form . fin_cadre_couleur();
173 173
 }
174 174
 
175 175
 
@@ -183,24 +183,24 @@  discard block
 block discarded – undo
183 183
  * @return bool
184 184
  */
185 185
 function avoir_visiteurs($past = false, $accepter = true) {
186
-	if ($GLOBALS['meta']['forums_publics'] == 'abo') {
187
-		return true;
188
-	}
189
-	if ($accepter && $GLOBALS['meta']['accepter_visiteurs'] != 'non') {
190
-		return true;
191
-	}
192
-	if (sql_countsel('spip_articles', "accepter_forum='abo'")) {
193
-		return true;
194
-	}
195
-	if (!$past) {
196
-		return false;
197
-	}
198
-
199
-	return sql_countsel(
200
-		'spip_auteurs',
201
-		"statut NOT IN ('0minirezo','1comite', '5poubelle')
186
+    if ($GLOBALS['meta']['forums_publics'] == 'abo') {
187
+        return true;
188
+    }
189
+    if ($accepter && $GLOBALS['meta']['accepter_visiteurs'] != 'non') {
190
+        return true;
191
+    }
192
+    if (sql_countsel('spip_articles', "accepter_forum='abo'")) {
193
+        return true;
194
+    }
195
+    if (!$past) {
196
+        return false;
197
+    }
198
+
199
+    return sql_countsel(
200
+        'spip_auteurs',
201
+        "statut NOT IN ('0minirezo','1comite', '5poubelle')
202 202
 	                    AND (statut<>'nouveau' OR prefs NOT IN ('0minirezo','1comite', '5poubelle'))"
203
-	);
203
+    );
204 204
 }
205 205
 
206 206
 /**
@@ -216,18 +216,18 @@  discard block
 block discarded – undo
216 216
  * @return array
217 217
  */
218 218
 function statuts_articles_visibles($statut_auteur) {
219
-	static $auth = [];
220
-	if (!isset($auth[$statut_auteur])) {
221
-		$auth[$statut_auteur] = [];
222
-		$statuts = array_column(sql_allfetsel('distinct statut', 'spip_articles'), 'statut');
223
-		foreach ($statuts as $s) {
224
-			if (autoriser('voir', 'article', 0, ['statut' => $statut_auteur], ['statut' => $s])) {
225
-				$auth[$statut_auteur][] = $s;
226
-			}
227
-		}
228
-	}
229
-
230
-	return $auth[$statut_auteur];
219
+    static $auth = [];
220
+    if (!isset($auth[$statut_auteur])) {
221
+        $auth[$statut_auteur] = [];
222
+        $statuts = array_column(sql_allfetsel('distinct statut', 'spip_articles'), 'statut');
223
+        foreach ($statuts as $s) {
224
+            if (autoriser('voir', 'article', 0, ['statut' => $statut_auteur], ['statut' => $s])) {
225
+                $auth[$statut_auteur][] = $s;
226
+            }
227
+        }
228
+    }
229
+
230
+    return $auth[$statut_auteur];
231 231
 }
232 232
 
233 233
 /**
@@ -241,38 +241,38 @@  discard block
 block discarded – undo
241 241
  * @return string
242 242
  */
243 243
 function traduire_statut_auteur($statut, $attente = '') {
244
-	$plus = '';
245
-	if ($statut == 'nouveau') {
246
-		if ($attente) {
247
-			$statut = $attente;
248
-			$plus = ' (' . _T('info_statut_auteur_a_confirmer') . ')';
249
-		} else {
250
-			return _T('info_statut_auteur_a_confirmer');
251
-		}
252
-	}
253
-
254
-	$recom = [
255
-		'info_administrateurs' => _T('item_administrateur_2'),
256
-		'info_redacteurs' => _T('intem_redacteur'),
257
-		'info_visiteurs' => _T('item_visiteur'),
258
-		'5poubelle' => _T('texte_statut_poubelle'), // bouh
259
-	];
260
-	if (isset($recom[$statut])) {
261
-		return $recom[$statut] . $plus;
262
-	}
263
-
264
-	// retrouver directement par le statut sinon
265
-	if ($t = array_search($statut, $GLOBALS['liste_des_statuts'])) {
266
-		if (isset($recom[$t])) {
267
-			return $recom[$t] . $plus;
268
-		}
269
-
270
-		return _T($t) . $plus;
271
-	}
272
-
273
-	// si on a pas reussi a le traduire, retournons la chaine telle quelle
274
-	// c'est toujours plus informatif que rien du tout
275
-	return $statut;
244
+    $plus = '';
245
+    if ($statut == 'nouveau') {
246
+        if ($attente) {
247
+            $statut = $attente;
248
+            $plus = ' (' . _T('info_statut_auteur_a_confirmer') . ')';
249
+        } else {
250
+            return _T('info_statut_auteur_a_confirmer');
251
+        }
252
+    }
253
+
254
+    $recom = [
255
+        'info_administrateurs' => _T('item_administrateur_2'),
256
+        'info_redacteurs' => _T('intem_redacteur'),
257
+        'info_visiteurs' => _T('item_visiteur'),
258
+        '5poubelle' => _T('texte_statut_poubelle'), // bouh
259
+    ];
260
+    if (isset($recom[$statut])) {
261
+        return $recom[$statut] . $plus;
262
+    }
263
+
264
+    // retrouver directement par le statut sinon
265
+    if ($t = array_search($statut, $GLOBALS['liste_des_statuts'])) {
266
+        if (isset($recom[$t])) {
267
+            return $recom[$t] . $plus;
268
+        }
269
+
270
+        return _T($t) . $plus;
271
+    }
272
+
273
+    // si on a pas reussi a le traduire, retournons la chaine telle quelle
274
+    // c'est toujours plus informatif que rien du tout
275
+    return $statut;
276 276
 }
277 277
 
278 278
 /**
@@ -283,29 +283,29 @@  discard block
 block discarded – undo
283 283
  * @return string
284 284
  */
285 285
 function afficher_qui_edite($id_objet, $objet): string {
286
-	static $qui = [];
287
-	if (isset($qui[$objet][$id_objet])) {
288
-		return $qui[$objet][$id_objet];
289
-	}
290
-
291
-	include_spip('inc/config');
292
-	if (lire_config('articles_modif', 'non') === 'non') {
293
-		return $qui[$objet][$id_objet] = '';
294
-	}
295
-
296
-	include_spip('inc/drapeau_edition');
297
-	$modif = mention_qui_edite($id_objet, $objet);
298
-	if (!$modif) {
299
-		return $qui[$objet][$id_objet] = '';
300
-	}
301
-
302
-	include_spip('base/objets');
303
-	$infos = lister_tables_objets_sql(table_objet_sql($objet));
304
-	if (isset($infos['texte_signale_edition'])) {
305
-		return $qui[$objet][$id_objet] = _T($infos['texte_signale_edition'], $modif);
306
-	}
307
-
308
-	return $qui[$objet][$id_objet] = _T('info_qui_edite', $modif);
286
+    static $qui = [];
287
+    if (isset($qui[$objet][$id_objet])) {
288
+        return $qui[$objet][$id_objet];
289
+    }
290
+
291
+    include_spip('inc/config');
292
+    if (lire_config('articles_modif', 'non') === 'non') {
293
+        return $qui[$objet][$id_objet] = '';
294
+    }
295
+
296
+    include_spip('inc/drapeau_edition');
297
+    $modif = mention_qui_edite($id_objet, $objet);
298
+    if (!$modif) {
299
+        return $qui[$objet][$id_objet] = '';
300
+    }
301
+
302
+    include_spip('base/objets');
303
+    $infos = lister_tables_objets_sql(table_objet_sql($objet));
304
+    if (isset($infos['texte_signale_edition'])) {
305
+        return $qui[$objet][$id_objet] = _T($infos['texte_signale_edition'], $modif);
306
+    }
307
+
308
+    return $qui[$objet][$id_objet] = _T('info_qui_edite', $modif);
309 309
 }
310 310
 
311 311
 /**
@@ -323,53 +323,53 @@  discard block
 block discarded – undo
323 323
  * @return array
324 324
  */
325 325
 function auteurs_lister_statuts($quoi = 'tous', $en_base = true): array {
326
-	if (!defined('AUTEURS_MIN_REDAC')) {
327
-		define('AUTEURS_MIN_REDAC', '0minirezo,1comite,5poubelle');
328
-	}
329
-
330
-	switch ($quoi) {
331
-		case 'redacteurs':
332
-			$statut = AUTEURS_MIN_REDAC;
333
-			$statut = explode(',', (string) $statut);
334
-			if ($en_base) {
335
-				$check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut');
336
-				$retire = array_diff($statut, $check);
337
-				$statut = array_diff($statut, $retire);
338
-			}
339
-
340
-			return array_unique($statut);
341
-
342
-		case 'visiteurs':
343
-			$statut = [];
344
-			$exclus = AUTEURS_MIN_REDAC;
345
-			$exclus = explode(',', (string) $exclus);
346
-			if (!$en_base) {
347
-				// prendre aussi les statuts de la table des status qui ne sont pas dans le define
348
-				$statut = array_diff(array_values($GLOBALS['liste_des_statuts']), $exclus);
349
-			}
350
-			$s_complement = array_column(
351
-				sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $exclus, 'NOT')),
352
-				'statut'
353
-			);
354
-
355
-			return array_unique([...$statut, ...$s_complement]);
356
-
357
-		default:
358
-		case 'tous':
359
-			$statut = array_values($GLOBALS['liste_des_statuts']);
360
-			$s_complement = array_column(
361
-				sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut, 'NOT')),
362
-				'statut'
363
-			);
364
-			$statut = [...$statut, ...$s_complement];
365
-			if ($en_base) {
366
-				$check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut');
367
-				$retire = array_diff($statut, $check);
368
-				$statut = array_diff($statut, $retire);
369
-			}
370
-
371
-			return array_unique($statut);
372
-	}
326
+    if (!defined('AUTEURS_MIN_REDAC')) {
327
+        define('AUTEURS_MIN_REDAC', '0minirezo,1comite,5poubelle');
328
+    }
329
+
330
+    switch ($quoi) {
331
+        case 'redacteurs':
332
+            $statut = AUTEURS_MIN_REDAC;
333
+            $statut = explode(',', (string) $statut);
334
+            if ($en_base) {
335
+                $check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut');
336
+                $retire = array_diff($statut, $check);
337
+                $statut = array_diff($statut, $retire);
338
+            }
339
+
340
+            return array_unique($statut);
341
+
342
+        case 'visiteurs':
343
+            $statut = [];
344
+            $exclus = AUTEURS_MIN_REDAC;
345
+            $exclus = explode(',', (string) $exclus);
346
+            if (!$en_base) {
347
+                // prendre aussi les statuts de la table des status qui ne sont pas dans le define
348
+                $statut = array_diff(array_values($GLOBALS['liste_des_statuts']), $exclus);
349
+            }
350
+            $s_complement = array_column(
351
+                sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $exclus, 'NOT')),
352
+                'statut'
353
+            );
354
+
355
+            return array_unique([...$statut, ...$s_complement]);
356
+
357
+        default:
358
+        case 'tous':
359
+            $statut = array_values($GLOBALS['liste_des_statuts']);
360
+            $s_complement = array_column(
361
+                sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut, 'NOT')),
362
+                'statut'
363
+            );
364
+            $statut = [...$statut, ...$s_complement];
365
+            if ($en_base) {
366
+                $check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut');
367
+                $retire = array_diff($statut, $check);
368
+                $statut = array_diff($statut, $retire);
369
+            }
370
+
371
+            return array_unique($statut);
372
+    }
373 373
 }
374 374
 
375 375
 /**
@@ -385,28 +385,28 @@  discard block
 block discarded – undo
385 385
  */
386 386
 function trouver_rubrique_creer_objet($id_rubrique, $objet) {
387 387
 
388
-	if (!$id_rubrique && defined('_CHOIX_RUBRIQUE_PAR_DEFAUT') && _CHOIX_RUBRIQUE_PAR_DEFAUT) {
389
-		$in = (is_countable($GLOBALS['connect_id_rubrique']) ? count($GLOBALS['connect_id_rubrique']) : 0)
390
-			? ' AND ' . sql_in('id_rubrique', $GLOBALS['connect_id_rubrique'])
391
-			: '';
392
-
393
-		// on tente d'abord l'ecriture a la racine dans le cas des rubriques uniquement
394
-		if ($objet == 'rubrique') {
395
-			$id_rubrique = 0;
396
-		} else {
397
-			$id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques', "id_parent=0$in", '', 'id_rubrique DESC', 1);
398
-		}
399
-
400
-		if (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique)) {
401
-			// manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
402
-			$res = sql_select('id_rubrique', 'spip_rubriques', 'id_parent=0');
403
-			while (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique) && $row_rub = sql_fetch($res)) {
404
-				$id_rubrique = $row_rub['id_rubrique'];
405
-			}
406
-		}
407
-	}
408
-
409
-	return $id_rubrique;
388
+    if (!$id_rubrique && defined('_CHOIX_RUBRIQUE_PAR_DEFAUT') && _CHOIX_RUBRIQUE_PAR_DEFAUT) {
389
+        $in = (is_countable($GLOBALS['connect_id_rubrique']) ? count($GLOBALS['connect_id_rubrique']) : 0)
390
+            ? ' AND ' . sql_in('id_rubrique', $GLOBALS['connect_id_rubrique'])
391
+            : '';
392
+
393
+        // on tente d'abord l'ecriture a la racine dans le cas des rubriques uniquement
394
+        if ($objet == 'rubrique') {
395
+            $id_rubrique = 0;
396
+        } else {
397
+            $id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques', "id_parent=0$in", '', 'id_rubrique DESC', 1);
398
+        }
399
+
400
+        if (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique)) {
401
+            // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
402
+            $res = sql_select('id_rubrique', 'spip_rubriques', 'id_parent=0');
403
+            while (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique) && $row_rub = sql_fetch($res)) {
404
+                $id_rubrique = $row_rub['id_rubrique'];
405
+            }
406
+        }
407
+    }
408
+
409
+    return $id_rubrique;
410 410
 }
411 411
 
412 412
 /**
@@ -417,25 +417,25 @@  discard block
 block discarded – undo
417 417
  * @return string
418 418
  */
419 419
 function lien_article_virtuel($virtuel) {
420
-	include_spip('inc/lien');
421
-	if (!$virtuel = virtuel_redirige($virtuel)) {
422
-		return '';
423
-	}
424
-
425
-	$joli = $virtuel;
426
-	$parts = parse_url($virtuel);
427
-	if (!empty($parts['query']) && str_contains($parts['query'], ']')) {
428
-		$query = str_replace(['[', ']'], [urlencode('['), urlencode(']')], $parts['query']);
429
-		$virtuel = str_replace('?' . $parts['query'], "?$query", $virtuel);
430
-	}
431
-	if ($virtuel !== $joli) {
432
-		$joli = propre('[' . $joli . ' -> ' . $virtuel . ']');
433
-	}
434
-	else {
435
-		$joli = propre('[->' . $virtuel . ']');
436
-	}
437
-
438
-	return $joli;
420
+    include_spip('inc/lien');
421
+    if (!$virtuel = virtuel_redirige($virtuel)) {
422
+        return '';
423
+    }
424
+
425
+    $joli = $virtuel;
426
+    $parts = parse_url($virtuel);
427
+    if (!empty($parts['query']) && str_contains($parts['query'], ']')) {
428
+        $query = str_replace(['[', ']'], [urlencode('['), urlencode(']')], $parts['query']);
429
+        $virtuel = str_replace('?' . $parts['query'], "?$query", $virtuel);
430
+    }
431
+    if ($virtuel !== $joli) {
432
+        $joli = propre('[' . $joli . ' -> ' . $virtuel . ']');
433
+    }
434
+    else {
435
+        $joli = propre('[->' . $virtuel . ']');
436
+    }
437
+
438
+    return $joli;
439 439
 }
440 440
 
441 441
 
@@ -458,11 +458,11 @@  discard block
 block discarded – undo
458 458
  * @filtre
459 459
  */
460 460
 function bouton_spip_rss($op, $args = [], $lang = '', $title = 'RSS') {
461
-	include_spip('inc/acces');
462
-	$clic = http_img_pack('rss-16.png', 'RSS', '', $title);
461
+    include_spip('inc/acces');
462
+    $clic = http_img_pack('rss-16.png', 'RSS', '', $title);
463 463
 
464
-	$url = generer_url_api_low_sec('transmettre', 'rss', $op, '', http_build_query($args), false, true);
465
-	return "<a style='float: " . $GLOBALS['spip_lang_right'] . ";' href='$url'>$clic</a>";
464
+    $url = generer_url_api_low_sec('transmettre', 'rss', $op, '', http_build_query($args), false, true);
465
+    return "<a style='float: " . $GLOBALS['spip_lang_right'] . ";' href='$url'>$clic</a>";
466 466
 }
467 467
 
468 468
 
@@ -474,72 +474,72 @@  discard block
 block discarded – undo
474 474
  */
475 475
 function alertes_auteur($id_auteur): string {
476 476
 
477
-	$alertes = [];
478
-
479
-	if (
480
-		isset($GLOBALS['meta']['message_crash_tables'])
481
-		&& autoriser('detruire', null, null, $id_auteur)
482
-	) {
483
-		include_spip('genie/maintenance');
484
-		if ($msg = message_crash_tables()) {
485
-			$alertes[] = $msg;
486
-		}
487
-	}
488
-
489
-	if (
490
-		isset($GLOBALS['meta']['message_crash_plugins'])
491
-		&& $GLOBALS['meta']['message_crash_plugins']
492
-		&& autoriser('configurer', '_plugins', null, $id_auteur)
493
-		&& is_array($msg = unserialize($GLOBALS['meta']['message_crash_plugins']))
494
-	) {
495
-		$msg = implode(', ', array_map('joli_repertoire', array_keys($msg)));
496
-		$alertes[] = _T('plugins_erreur', ['plugins' => $msg]);
497
-	}
498
-
499
-	$a = $GLOBALS['meta']['message_alertes_auteurs'] ?? '';
500
-	if ($a && is_array($a = unserialize($a)) && count($a)) {
501
-		$update = false;
502
-		if (isset($a[$GLOBALS['visiteur_session']['statut']])) {
503
-			$alertes = array_merge($alertes, $a[$GLOBALS['visiteur_session']['statut']]);
504
-			unset($a[$GLOBALS['visiteur_session']['statut']]);
505
-			$update = true;
506
-		}
507
-		if (isset($a[''])) {
508
-			$alertes = array_merge($alertes, $a['']);
509
-			unset($a['']);
510
-			$update = true;
511
-		}
512
-		if ($update) {
513
-			ecrire_meta('message_alertes_auteurs', serialize($a));
514
-		}
515
-	}
516
-
517
-	if (
518
-		isset($GLOBALS['meta']['plugin_erreur_activation'])
519
-		&& autoriser('configurer', '_plugins', null, $id_auteur)
520
-	) {
521
-		include_spip('inc/plugin');
522
-		$alertes[] = plugin_donne_erreurs();
523
-	}
524
-
525
-	$alertes = pipeline(
526
-		'alertes_auteur',
527
-		[
528
-			'args' => [
529
-				'id_auteur' => $id_auteur,
530
-				'exec' => _request('exec'),
531
-			],
532
-			'data' => $alertes
533
-		]
534
-	);
535
-
536
-	if ($alertes = array_filter($alertes)) {
537
-		return "<div class='wrap-messages-alertes'><div class='messages-alertes'>" .
538
-		implode(' | ', $alertes)
539
-		. '</div></div>';
540
-	}
541
-
542
-	return '';
477
+    $alertes = [];
478
+
479
+    if (
480
+        isset($GLOBALS['meta']['message_crash_tables'])
481
+        && autoriser('detruire', null, null, $id_auteur)
482
+    ) {
483
+        include_spip('genie/maintenance');
484
+        if ($msg = message_crash_tables()) {
485
+            $alertes[] = $msg;
486
+        }
487
+    }
488
+
489
+    if (
490
+        isset($GLOBALS['meta']['message_crash_plugins'])
491
+        && $GLOBALS['meta']['message_crash_plugins']
492
+        && autoriser('configurer', '_plugins', null, $id_auteur)
493
+        && is_array($msg = unserialize($GLOBALS['meta']['message_crash_plugins']))
494
+    ) {
495
+        $msg = implode(', ', array_map('joli_repertoire', array_keys($msg)));
496
+        $alertes[] = _T('plugins_erreur', ['plugins' => $msg]);
497
+    }
498
+
499
+    $a = $GLOBALS['meta']['message_alertes_auteurs'] ?? '';
500
+    if ($a && is_array($a = unserialize($a)) && count($a)) {
501
+        $update = false;
502
+        if (isset($a[$GLOBALS['visiteur_session']['statut']])) {
503
+            $alertes = array_merge($alertes, $a[$GLOBALS['visiteur_session']['statut']]);
504
+            unset($a[$GLOBALS['visiteur_session']['statut']]);
505
+            $update = true;
506
+        }
507
+        if (isset($a[''])) {
508
+            $alertes = array_merge($alertes, $a['']);
509
+            unset($a['']);
510
+            $update = true;
511
+        }
512
+        if ($update) {
513
+            ecrire_meta('message_alertes_auteurs', serialize($a));
514
+        }
515
+    }
516
+
517
+    if (
518
+        isset($GLOBALS['meta']['plugin_erreur_activation'])
519
+        && autoriser('configurer', '_plugins', null, $id_auteur)
520
+    ) {
521
+        include_spip('inc/plugin');
522
+        $alertes[] = plugin_donne_erreurs();
523
+    }
524
+
525
+    $alertes = pipeline(
526
+        'alertes_auteur',
527
+        [
528
+            'args' => [
529
+                'id_auteur' => $id_auteur,
530
+                'exec' => _request('exec'),
531
+            ],
532
+            'data' => $alertes
533
+        ]
534
+    );
535
+
536
+    if ($alertes = array_filter($alertes)) {
537
+        return "<div class='wrap-messages-alertes'><div class='messages-alertes'>" .
538
+        implode(' | ', $alertes)
539
+        . '</div></div>';
540
+    }
541
+
542
+    return '';
543 543
 }
544 544
 
545 545
 /**
@@ -549,9 +549,9 @@  discard block
 block discarded – undo
549 549
  * @return string
550 550
  */
551 551
 function filtre_afficher_enfant_rub_dist($id_rubrique) {
552
-	include_spip('inc/presenter_enfants');
552
+    include_spip('inc/presenter_enfants');
553 553
 
554
-	return afficher_enfant_rub((int) $id_rubrique);
554
+    return afficher_enfant_rub((int) $id_rubrique);
555 555
 }
556 556
 
557 557
 /**
@@ -569,15 +569,15 @@  discard block
 block discarded – undo
569 569
  * @return string
570 570
  */
571 571
 function afficher_plus_info($lien, $titre = '+', $titre_lien = '') {
572
-	$titre = attribut_html($titre);
573
-	$icone = "\n<a href='$lien' title='$titre' class='plus_info'>" .
574
-		http_img_pack('information-16.png', $titre) . '</a>';
575
-
576
-	if (!$titre_lien) {
577
-		return $icone;
578
-	} else {
579
-		return $icone . "\n<a href='$lien'>$titre_lien</a>";
580
-	}
572
+    $titre = attribut_html($titre);
573
+    $icone = "\n<a href='$lien' title='$titre' class='plus_info'>" .
574
+        http_img_pack('information-16.png', $titre) . '</a>';
575
+
576
+    if (!$titre_lien) {
577
+        return $icone;
578
+    } else {
579
+        return $icone . "\n<a href='$lien'>$titre_lien</a>";
580
+    }
581 581
 }
582 582
 
583 583
 
@@ -596,20 +596,20 @@  discard block
 block discarded – undo
596 596
  * @return array
597 597
  */
598 598
 function lister_objets_lies($objet_source, $objet, $id_objet, $objet_lien) {
599
-	$res = lister_objets_liens($objet_source, $objet, $id_objet, $objet_lien);
600
-	if (!(is_countable($res) ? count($res) : 0)) {
601
-		return [];
602
-	}
603
-	$r = reset($res);
604
-	$colonne_id = ($objet_source == $objet_lien ? id_table_objet($objet_source) : 'id_objet');
605
-	if (isset($r['rang_lien'])) {
606
-		$l = array_column($res, 'rang_lien', $colonne_id);
607
-		asort($l);
608
-		$l = array_keys($l);
609
-	} else {
610
-		// Si les liens qu'on cherche sont ceux de la table de lien, l'info est dans la clé de l'objet
611
-		// Sinon c'est dans "id_objet"
612
-		$l = array_column($res, $colonne_id);
613
-	}
614
-	return $l;
599
+    $res = lister_objets_liens($objet_source, $objet, $id_objet, $objet_lien);
600
+    if (!(is_countable($res) ? count($res) : 0)) {
601
+        return [];
602
+    }
603
+    $r = reset($res);
604
+    $colonne_id = ($objet_source == $objet_lien ? id_table_objet($objet_source) : 'id_objet');
605
+    if (isset($r['rang_lien'])) {
606
+        $l = array_column($res, 'rang_lien', $colonne_id);
607
+        asort($l);
608
+        $l = array_keys($l);
609
+    } else {
610
+        // Si les liens qu'on cherche sont ceux de la table de lien, l'info est dans la clé de l'objet
611
+        // Sinon c'est dans "id_objet"
612
+        $l = array_column($res, $colonne_id);
613
+    }
614
+    return $l;
615 615
 }
Please login to merge, or discard this patch.
ecrire/inc/pipelines_ecrire.php 1 patch
Indentation   +227 added lines, -227 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
  * @package SPIP\Core\Pipelines
16 16
  **/
17 17
 if (!defined('_ECRIRE_INC_VERSION')) {
18
-	return;
18
+    return;
19 19
 }
20 20
 
21 21
 
@@ -34,40 +34,40 @@  discard block
 block discarded – undo
34 34
  * @return string          Contenu complété des scripts javascripts, dont jQuery
35 35
  **/
36 36
 function f_jQuery_prive($texte) {
37
-	$x = '';
38
-	$jquery_plugins = pipeline(
39
-		'jquery_plugins',
40
-		[
41
-			'prive/javascript/jquery.js',
42
-			'prive/javascript/jquery.form.js',
43
-			'prive/javascript/jquery.autosave.js',
44
-			'prive/javascript/jquery.placeholder-label.js',
45
-			'prive/javascript/ajaxCallback.js',
46
-			'prive/javascript/js.cookie.js',
47
-			'prive/javascript/spip_barre.js',
48
-		]
49
-	);
50
-	foreach (array_unique($jquery_plugins) as $script) {
51
-		$script = supprimer_timestamp($script);
52
-		if (
53
-			str_starts_with($script, _DIR_VAR) && file_exists($script)
54
-			|| ($script = find_in_path($script))
55
-		) {
56
-			$script = timestamp($script);
57
-			$x .= "\n<script src=\"$script\" type=\"text/javascript\"></script>\n";
58
-		}
59
-	}
60
-	// inserer avant le premier script externe ou a la fin
61
-	if (
62
-		preg_match(',<script[^><]*src=,', $texte, $match)
63
-		&& ($p = strpos($texte, (string) $match[0]))
64
-	) {
65
-		$texte = substr_replace($texte, $x, $p, 0);
66
-	} else {
67
-		$texte .= $x;
68
-	}
37
+    $x = '';
38
+    $jquery_plugins = pipeline(
39
+        'jquery_plugins',
40
+        [
41
+            'prive/javascript/jquery.js',
42
+            'prive/javascript/jquery.form.js',
43
+            'prive/javascript/jquery.autosave.js',
44
+            'prive/javascript/jquery.placeholder-label.js',
45
+            'prive/javascript/ajaxCallback.js',
46
+            'prive/javascript/js.cookie.js',
47
+            'prive/javascript/spip_barre.js',
48
+        ]
49
+    );
50
+    foreach (array_unique($jquery_plugins) as $script) {
51
+        $script = supprimer_timestamp($script);
52
+        if (
53
+            str_starts_with($script, _DIR_VAR) && file_exists($script)
54
+            || ($script = find_in_path($script))
55
+        ) {
56
+            $script = timestamp($script);
57
+            $x .= "\n<script src=\"$script\" type=\"text/javascript\"></script>\n";
58
+        }
59
+    }
60
+    // inserer avant le premier script externe ou a la fin
61
+    if (
62
+        preg_match(',<script[^><]*src=,', $texte, $match)
63
+        && ($p = strpos($texte, (string) $match[0]))
64
+    ) {
65
+        $texte = substr_replace($texte, $x, $p, 0);
66
+    } else {
67
+        $texte .= $x;
68
+    }
69 69
 
70
-	return $texte;
70
+    return $texte;
71 71
 }
72 72
 
73 73
 
@@ -80,40 +80,40 @@  discard block
 block discarded – undo
80 80
  * @return string
81 81
  */
82 82
 function affichage_final_prive_title_auto($texte) {
83
-	if (
84
-		!str_contains($texte, '<title>')
85
-		&& (preg_match(',<h1[^>]*>(.+)</h1>,Uims', $texte, $match) || preg_match(',<h[23][^>]*>(.+)</h[23]>,Uims', $texte, $match))
86
-		&& ($match = textebrut(trim($match[1])))
87
-		&& ($p = strpos($texte, '<head>')) !== false
88
-	) {
89
-		if (!$nom_site_spip = textebrut(typo($GLOBALS['meta']['nom_site']))) {
90
-			$nom_site_spip = _T('info_mon_site_spip');
91
-		}
83
+    if (
84
+        !str_contains($texte, '<title>')
85
+        && (preg_match(',<h1[^>]*>(.+)</h1>,Uims', $texte, $match) || preg_match(',<h[23][^>]*>(.+)</h[23]>,Uims', $texte, $match))
86
+        && ($match = textebrut(trim($match[1])))
87
+        && ($p = strpos($texte, '<head>')) !== false
88
+    ) {
89
+        if (!$nom_site_spip = textebrut(typo($GLOBALS['meta']['nom_site']))) {
90
+            $nom_site_spip = _T('info_mon_site_spip');
91
+        }
92 92
 
93
-		$titre = '<title>['
94
-			. $nom_site_spip
95
-			. '] ' . $match
96
-			. '</title>';
93
+        $titre = '<title>['
94
+            . $nom_site_spip
95
+            . '] ' . $match
96
+            . '</title>';
97 97
 
98
-		$texte = substr_replace($texte, $titre, $p + 6, 0);
99
-	}
98
+        $texte = substr_replace($texte, $titre, $p + 6, 0);
99
+    }
100 100
 
101
-	return $texte;
101
+    return $texte;
102 102
 }
103 103
 
104 104
 
105 105
 // Fonction standard pour le pipeline 'boite_infos'
106 106
 function f_boite_infos($flux) {
107
-	$args = $flux['args'];
108
-	$type = $args['type'];
109
-	unset($args['row']);
110
-	if (!trouver_fond($type, 'prive/objets/infos/')) {
111
-		$type = 'objet';
112
-	}
113
-	$args['espace_prive'] = 1;
114
-	$flux['data'] .= recuperer_fond("prive/objets/infos/$type", $args);
107
+    $args = $flux['args'];
108
+    $type = $args['type'];
109
+    unset($args['row']);
110
+    if (!trouver_fond($type, 'prive/objets/infos/')) {
111
+        $type = 'objet';
112
+    }
113
+    $args['espace_prive'] = 1;
114
+    $flux['data'] .= recuperer_fond("prive/objets/infos/$type", $args);
115 115
 
116
-	return $flux;
116
+    return $flux;
117 117
 }
118 118
 
119 119
 
@@ -132,97 +132,97 @@  discard block
 block discarded – undo
132 132
  * @return array Données du pipeline
133 133
  */
134 134
 function f_afficher_blocs_ecrire($flux) {
135
-	static $o = [];
136
-	if (is_string($fond = $flux['args']['fond'])) {
137
-		$exec = $flux['args']['contexte']['exec'] ?? _request('exec');
138
-		if (!isset($o[$exec])) {
139
-			$o[$exec] = trouver_objet_exec($exec);
140
-		}
141
-		// cas particulier
142
-		if ($exec == 'infos_perso') {
143
-			$flux['args']['contexte']['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur'];
144
-		}
145
-		$typepage = ($flux['args']['contexte']['type-page'] ?? $exec);
146
-		if ($fond == "prive/squelettes/navigation/$typepage") {
147
-			$flux['data']['texte'] = pipeline(
148
-				'affiche_gauche',
149
-				['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
150
-			);
151
-		} elseif ($fond == "prive/squelettes/extra/$typepage") {
152
-			include_spip('inc/presentation_mini');
153
-			$flux['data']['texte'] = pipeline(
154
-				'affiche_droite',
155
-				['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
156
-			) . liste_objets_bloques(
157
-				$exec,
158
-				$flux['args']['contexte']
159
-			);
160
-		} elseif ($fond == "prive/squelettes/hierarchie/$typepage" && $o[$exec]) {
161
-			// id non defini sur les formulaire de nouveaux objets
162
-			$id = isset($flux['args']['contexte'][$o[$exec]['id_table_objet']]) ? intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]) : 0;
163
-			$flux['data']['texte'] = pipeline(
164
-				'affiche_hierarchie',
165
-				['args' => ['objet' => $o[$exec]['type'], 'id_objet' => $id], 'data' => $flux['data']['texte']]
166
-			);
167
-		} elseif ($fond == "prive/squelettes/contenu/$typepage") {
168
-			// Préparation du marqueur affiche_milieu
169
-			// Si c'est la page d'un objet pas en édition, on l'encapsule dans un div
170
-			$est_page_objet = !empty($o[$exec]['type']);
171
-			$est_en_edition = (isset($o[$exec]['edition']) && $o[$exec]['edition'] === true);
172
-			$encapsuler_milieu = ($est_page_objet && !$est_en_edition);
173
-			$flux['data']['texte'] = afficher_blocs_ecrire_preparer_marqueur(
174
-				$flux['data']['texte'],
175
-				'<!--affiche_milieu-->',
176
-				'<div id=["\']wysiwyg',
177
-				$encapsuler_milieu ? '<div class="affiche_milieu">' : '',
178
-				$encapsuler_milieu ? '</div>' : ''
179
-			);
180
-			if (
181
-				$o[$exec]
182
-				&& ($objet = $o[$exec]['type'])
183
-				&& $o[$exec]['edition'] == false
184
-				&& isset($flux['args']['contexte'][$o[$exec]['id_table_objet']])
185
-				&& ($id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]))
186
-			) {
187
-				// inserer le formulaire de traduction
188
-				$flux['data']['texte'] = str_replace('<!--affiche_milieu-->', recuperer_fond(
189
-					'prive/objets/editer/traductions',
190
-					['objet' => $objet, 'id_objet' => $id, 'espace_prive' => 1]
191
-				) . '<!--affiche_milieu-->', $flux['data']['texte']);
192
-				$flux['data']['texte'] = pipeline('afficher_fiche_objet', [
193
-					'args' => [
194
-						'contexte' => $flux['args']['contexte'],
195
-						'type' => $objet,
196
-						'id' => $id
197
-					],
198
-					'data' => $flux['data']['texte']
199
-				]);
200
-			}
201
-			$flux['data']['texte'] = pipeline(
202
-				'affiche_milieu',
203
-				['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
204
-			);
205
-		} elseif ($fond == 'prive/squelettes/inclure/pied') {
206
-			$flux['data']['texte'] = pipeline(
207
-				'affiche_pied',
208
-				['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
209
-			);
210
-		} elseif (
211
-			str_starts_with($fond, 'prive/objets/contenu/')
212
-			&& ($objet = basename($fond))
213
-			&& $objet == substr($fond, 21)
214
-			&& isset($o[$objet])
215
-			&& $o[$objet]
216
-		) {
217
-			$id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]);
218
-			$flux['data']['texte'] = pipeline('afficher_contenu_objet', [
219
-				'args' => ['type' => $objet, 'id_objet' => $id, 'contexte' => $flux['args']['contexte']],
220
-				'data' => $flux['data']['texte']
221
-			]);
222
-		}
223
-	}
135
+    static $o = [];
136
+    if (is_string($fond = $flux['args']['fond'])) {
137
+        $exec = $flux['args']['contexte']['exec'] ?? _request('exec');
138
+        if (!isset($o[$exec])) {
139
+            $o[$exec] = trouver_objet_exec($exec);
140
+        }
141
+        // cas particulier
142
+        if ($exec == 'infos_perso') {
143
+            $flux['args']['contexte']['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur'];
144
+        }
145
+        $typepage = ($flux['args']['contexte']['type-page'] ?? $exec);
146
+        if ($fond == "prive/squelettes/navigation/$typepage") {
147
+            $flux['data']['texte'] = pipeline(
148
+                'affiche_gauche',
149
+                ['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
150
+            );
151
+        } elseif ($fond == "prive/squelettes/extra/$typepage") {
152
+            include_spip('inc/presentation_mini');
153
+            $flux['data']['texte'] = pipeline(
154
+                'affiche_droite',
155
+                ['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
156
+            ) . liste_objets_bloques(
157
+                $exec,
158
+                $flux['args']['contexte']
159
+            );
160
+        } elseif ($fond == "prive/squelettes/hierarchie/$typepage" && $o[$exec]) {
161
+            // id non defini sur les formulaire de nouveaux objets
162
+            $id = isset($flux['args']['contexte'][$o[$exec]['id_table_objet']]) ? intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]) : 0;
163
+            $flux['data']['texte'] = pipeline(
164
+                'affiche_hierarchie',
165
+                ['args' => ['objet' => $o[$exec]['type'], 'id_objet' => $id], 'data' => $flux['data']['texte']]
166
+            );
167
+        } elseif ($fond == "prive/squelettes/contenu/$typepage") {
168
+            // Préparation du marqueur affiche_milieu
169
+            // Si c'est la page d'un objet pas en édition, on l'encapsule dans un div
170
+            $est_page_objet = !empty($o[$exec]['type']);
171
+            $est_en_edition = (isset($o[$exec]['edition']) && $o[$exec]['edition'] === true);
172
+            $encapsuler_milieu = ($est_page_objet && !$est_en_edition);
173
+            $flux['data']['texte'] = afficher_blocs_ecrire_preparer_marqueur(
174
+                $flux['data']['texte'],
175
+                '<!--affiche_milieu-->',
176
+                '<div id=["\']wysiwyg',
177
+                $encapsuler_milieu ? '<div class="affiche_milieu">' : '',
178
+                $encapsuler_milieu ? '</div>' : ''
179
+            );
180
+            if (
181
+                $o[$exec]
182
+                && ($objet = $o[$exec]['type'])
183
+                && $o[$exec]['edition'] == false
184
+                && isset($flux['args']['contexte'][$o[$exec]['id_table_objet']])
185
+                && ($id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]))
186
+            ) {
187
+                // inserer le formulaire de traduction
188
+                $flux['data']['texte'] = str_replace('<!--affiche_milieu-->', recuperer_fond(
189
+                    'prive/objets/editer/traductions',
190
+                    ['objet' => $objet, 'id_objet' => $id, 'espace_prive' => 1]
191
+                ) . '<!--affiche_milieu-->', $flux['data']['texte']);
192
+                $flux['data']['texte'] = pipeline('afficher_fiche_objet', [
193
+                    'args' => [
194
+                        'contexte' => $flux['args']['contexte'],
195
+                        'type' => $objet,
196
+                        'id' => $id
197
+                    ],
198
+                    'data' => $flux['data']['texte']
199
+                ]);
200
+            }
201
+            $flux['data']['texte'] = pipeline(
202
+                'affiche_milieu',
203
+                ['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
204
+            );
205
+        } elseif ($fond == 'prive/squelettes/inclure/pied') {
206
+            $flux['data']['texte'] = pipeline(
207
+                'affiche_pied',
208
+                ['args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']]
209
+            );
210
+        } elseif (
211
+            str_starts_with($fond, 'prive/objets/contenu/')
212
+            && ($objet = basename($fond))
213
+            && $objet == substr($fond, 21)
214
+            && isset($o[$objet])
215
+            && $o[$objet]
216
+        ) {
217
+            $id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]);
218
+            $flux['data']['texte'] = pipeline('afficher_contenu_objet', [
219
+                'args' => ['type' => $objet, 'id_objet' => $id, 'contexte' => $flux['args']['contexte']],
220
+                'data' => $flux['data']['texte']
221
+            ]);
222
+        }
223
+    }
224 224
 
225
-	return $flux;
225
+    return $flux;
226 226
 }
227 227
 
228 228
 /**
@@ -250,36 +250,36 @@  discard block
 block discarded – undo
250 250
  */
251 251
 function afficher_blocs_ecrire_preparer_marqueur(?string $texte, string $marqueur, string $inserer_avant, string $ouvrir = '', string $fermer = ''): ?string {
252 252
 
253
-	if ($texte) {
254
-		$encapsuler = $ouvrir && $fermer;
255
-		$marqueur_pos = strpos($texte, $marqueur);
256
-		$full_marqueur = "$ouvrir$marqueur$fermer";
253
+    if ($texte) {
254
+        $encapsuler = $ouvrir && $fermer;
255
+        $marqueur_pos = strpos($texte, $marqueur);
256
+        $full_marqueur = "$ouvrir$marqueur$fermer";
257 257
 
258
-		// Le marqueur est absent : on l'ajoute avant l'élément indiqué
259
-		if ($marqueur_pos  === false) {
260
-			$texte = preg_replace(
261
-				",$inserer_avant,",
262
-				"$full_marqueur\\0",
263
-				$texte
264
-			);
265
-		// Le marqueur est présent mais pas encapsulé : on ajoute les balises ouvrantes et fermantes.
266
-		// Pour vérifier, on prend le texte précédent et on regarde si ça correspond à la balise ouvrante.
267
-		// Il ne faut donc aucun espace blanc en trop.
268
-		} elseif (
269
-			$marqueur_pos !== false
270
-			&& $encapsuler
271
-			&& substr($texte, $marqueur_pos - strlen($ouvrir), strlen($ouvrir)) !== $ouvrir
272
-		) {
273
-			$texte = substr_replace(
274
-				$texte,
275
-				$full_marqueur,
276
-				$marqueur_pos,
277
-				strlen($marqueur)
278
-			);
279
-		}
280
-	}
258
+        // Le marqueur est absent : on l'ajoute avant l'élément indiqué
259
+        if ($marqueur_pos  === false) {
260
+            $texte = preg_replace(
261
+                ",$inserer_avant,",
262
+                "$full_marqueur\\0",
263
+                $texte
264
+            );
265
+        // Le marqueur est présent mais pas encapsulé : on ajoute les balises ouvrantes et fermantes.
266
+        // Pour vérifier, on prend le texte précédent et on regarde si ça correspond à la balise ouvrante.
267
+        // Il ne faut donc aucun espace blanc en trop.
268
+        } elseif (
269
+            $marqueur_pos !== false
270
+            && $encapsuler
271
+            && substr($texte, $marqueur_pos - strlen($ouvrir), strlen($ouvrir)) !== $ouvrir
272
+        ) {
273
+            $texte = substr_replace(
274
+                $texte,
275
+                $full_marqueur,
276
+                $marqueur_pos,
277
+                strlen($marqueur)
278
+            );
279
+        }
280
+    }
281 281
 
282
-	return $texte;
282
+    return $texte;
283 283
 }
284 284
 
285 285
 /**
@@ -290,23 +290,23 @@  discard block
 block discarded – undo
290 290
  * @return string
291 291
  */
292 292
 function f_queue_affiche_milieu($flux) {
293
-	$args = $flux['args'];
294
-	$res = '';
295
-	foreach ($args as $key => $arg) {
296
-		if (preg_match(',^id_,', $key) && is_numeric($arg) && ($arg = intval($arg))) {
297
-			$objet = preg_replace(',^id_,', '', $key);
298
-			$res .= recuperer_fond(
299
-				'modeles/object_jobs_list',
300
-				['id_objet' => $arg, 'objet' => $objet, 'espace_prive' => 1],
301
-				['ajax' => true]
302
-			);
303
-		}
304
-	}
305
-	if ($res) {
306
-		$flux['data'] = $res . $flux['data'];
307
-	}
293
+    $args = $flux['args'];
294
+    $res = '';
295
+    foreach ($args as $key => $arg) {
296
+        if (preg_match(',^id_,', $key) && is_numeric($arg) && ($arg = intval($arg))) {
297
+            $objet = preg_replace(',^id_,', '', $key);
298
+            $res .= recuperer_fond(
299
+                'modeles/object_jobs_list',
300
+                ['id_objet' => $arg, 'objet' => $objet, 'espace_prive' => 1],
301
+                ['ajax' => true]
302
+            );
303
+        }
304
+    }
305
+    if ($res) {
306
+        $flux['data'] = $res . $flux['data'];
307
+    }
308 308
 
309
-	return $flux;
309
+    return $flux;
310 310
 }
311 311
 
312 312
 /**
@@ -320,39 +320,39 @@  discard block
 block discarded – undo
320 320
  * @return array|bool
321 321
  */
322 322
 function trouver_objet_exec(?string $exec) {
323
-	static $objet_exec = [];
324
-	if (!$exec) {
325
-		return false;
326
-	}
327
-	// cas particulier
328
-	if ($exec === 'infos_perso') {
329
-		$exec = 'auteur';
330
-		set_request('id_auteur', $GLOBALS['visiteur_session']['id_auteur']);
331
-	}
332
-	if (!isset($objet_exec[$exec])) {
333
-		$objet_exec[$exec] = false;
334
-		$infos = lister_tables_objets_sql();
335
-		foreach ($infos as $t => $info) {
336
-			if ($exec === $info['url_edit'] && $info['editable']) {
337
-				return $objet_exec[$exec] = [
338
-					'edition' => $exec == $info['url_voir'] ? '' : true,
339
-					'table_objet_sql' => $t,
340
-					'table' => $info['table_objet'],
341
-					'type' => $info['type'],
342
-					'id_table_objet' => id_table_objet($info['type'])
343
-				];
344
-			}
345
-			if ($exec === $info['url_voir']) {
346
-				return $objet_exec[$exec] = [
347
-					'edition' => false,
348
-					'table_objet_sql' => $t,
349
-					'table' => $info['table_objet'],
350
-					'type' => $info['type'],
351
-					'id_table_objet' => id_table_objet($info['type'])
352
-				];
353
-			}
354
-		}
355
-	}
323
+    static $objet_exec = [];
324
+    if (!$exec) {
325
+        return false;
326
+    }
327
+    // cas particulier
328
+    if ($exec === 'infos_perso') {
329
+        $exec = 'auteur';
330
+        set_request('id_auteur', $GLOBALS['visiteur_session']['id_auteur']);
331
+    }
332
+    if (!isset($objet_exec[$exec])) {
333
+        $objet_exec[$exec] = false;
334
+        $infos = lister_tables_objets_sql();
335
+        foreach ($infos as $t => $info) {
336
+            if ($exec === $info['url_edit'] && $info['editable']) {
337
+                return $objet_exec[$exec] = [
338
+                    'edition' => $exec == $info['url_voir'] ? '' : true,
339
+                    'table_objet_sql' => $t,
340
+                    'table' => $info['table_objet'],
341
+                    'type' => $info['type'],
342
+                    'id_table_objet' => id_table_objet($info['type'])
343
+                ];
344
+            }
345
+            if ($exec === $info['url_voir']) {
346
+                return $objet_exec[$exec] = [
347
+                    'edition' => false,
348
+                    'table_objet_sql' => $t,
349
+                    'table' => $info['table_objet'],
350
+                    'type' => $info['type'],
351
+                    'id_table_objet' => id_table_objet($info['type'])
352
+                ];
353
+            }
354
+        }
355
+    }
356 356
 
357
-	return $objet_exec[$exec];
357
+    return $objet_exec[$exec];
358 358
 }
Please login to merge, or discard this patch.
ecrire/inc/filtres_images_mini.php 1 patch
Indentation   +312 added lines, -312 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  */
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 include_spip('inc/filtres_images_lib_mini'); // par precaution
23 23
 
@@ -30,161 +30,161 @@  discard block
 block discarded – undo
30 30
  *    Le code hexadécimal de la couleur (sans le #) ou le code couleur textuel si non trouvé
31 31
  */
32 32
 function couleur_html_to_hex($couleur) {
33
-	$couleurs_html = [
34
-		'aliceblue' => 'F0F8FF',
35
-		'antiquewhite' => 'FAEBD7',
36
-		'aqua' => '00FFFF',
37
-		'aquamarine' => '7FFFD4',
38
-		'azure' => 'F0FFFF',
39
-		'beige' => 'F5F5DC',
40
-		'bisque' => 'FFE4C4',
41
-		'black' => '000000',
42
-		'blanchedalmond' => 'FFEBCD',
43
-		'blue' => '0000FF',
44
-		'blueviolet' => '8A2BE2',
45
-		'brown' => 'A52A2A',
46
-		'burlywood' => 'DEB887',
47
-		'cadetblue' => '5F9EA0',
48
-		'chartreuse' => '7FFF00',
49
-		'chocolate' => 'D2691E',
50
-		'coral' => 'FF7F50',
51
-		'cornflowerblue' => '6495ED',
52
-		'cornsilk' => 'FFF8DC',
53
-		'crimson' => 'DC143C',
54
-		'cyan' => '00FFFF',
55
-		'darkblue' => '00008B',
56
-		'darkcyan' => '008B8B',
57
-		'darkgoldenrod' => 'B8860B',
58
-		'darkgray' => 'A9A9A9',
59
-		'darkgreen' => '006400',
60
-		'darkgrey' => 'A9A9A9',
61
-		'darkkhaki' => 'BDB76B',
62
-		'darkmagenta' => '8B008B',
63
-		'darkolivegreen' => '556B2F',
64
-		'darkorange' => 'FF8C00',
65
-		'darkorchid' => '9932CC',
66
-		'darkred' => '8B0000',
67
-		'darksalmon' => 'E9967A',
68
-		'darkseagreen' => '8FBC8F',
69
-		'darkslateblue' => '483D8B',
70
-		'darkslategray' => '2F4F4F',
71
-		'darkslategrey' => '2F4F4F',
72
-		'darkturquoise' => '00CED1',
73
-		'darkviolet' => '9400D3',
74
-		'deeppink' => 'FF1493',
75
-		'deepskyblue' => '00BFFF',
76
-		'dimgray' => '696969',
77
-		'dimgrey' => '696969',
78
-		'dodgerblue' => '1E90FF',
79
-		'firebrick' => 'B22222',
80
-		'floralwhite' => 'FFFAF0',
81
-		'forestgreen' => '228B22',
82
-		'fuchsia' => 'FF00FF',
83
-		'gainsboro' => 'DCDCDC',
84
-		'ghostwhite' => 'F8F8FF',
85
-		'gold' => 'FFD700',
86
-		'goldenrod' => 'DAA520',
87
-		'gray' => '808080',
88
-		'green' => '008000',
89
-		'greenyellow' => 'ADFF2F',
90
-		'grey' => '808080',
91
-		'honeydew' => 'F0FFF0',
92
-		'hotpink' => 'FF69B4',
93
-		'indianred' => 'CD5C5C',
94
-		'indigo' => '4B0082',
95
-		'ivory' => 'FFFFF0',
96
-		'khaki' => 'F0E68C',
97
-		'lavender' => 'E6E6FA',
98
-		'lavenderblush' => 'FFF0F5',
99
-		'lawngreen' => '7CFC00',
100
-		'lemonchiffon' => 'FFFACD',
101
-		'lightblue' => 'ADD8E6',
102
-		'lightcoral' => 'F08080',
103
-		'lightcyan' => 'E0FFFF',
104
-		'lightgoldenrodyellow' => 'FAFAD2',
105
-		'lightgray' => 'D3D3D3',
106
-		'lightgreen' => '90EE90',
107
-		'lightgrey' => 'D3D3D3',
108
-		'lightpink' => 'FFB6C1',
109
-		'lightsalmon' => 'FFA07A',
110
-		'lightseagreen' => '20B2AA',
111
-		'lightskyblue' => '87CEFA',
112
-		'lightslategray' => '778899',
113
-		'lightslategrey' => '778899',
114
-		'lightsteelblue' => 'B0C4DE',
115
-		'lightyellow' => 'FFFFE0',
116
-		'lime' => '00FF00',
117
-		'limegreen' => '32CD32',
118
-		'linen' => 'FAF0E6',
119
-		'magenta' => 'FF00FF',
120
-		'maroon' => '800000',
121
-		'mediumaquamarine' => '66CDAA',
122
-		'mediumblue' => '0000CD',
123
-		'mediumorchid' => 'BA55D3',
124
-		'mediumpurple' => '9370DB',
125
-		'mediumseagreen' => '3CB371',
126
-		'mediumslateblue' => '7B68EE',
127
-		'mediumspringgreen' => '00FA9A',
128
-		'mediumturquoise' => '48D1CC',
129
-		'mediumvioletred' => 'C71585',
130
-		'midnightblue' => '191970',
131
-		'mintcream' => 'F5FFFA',
132
-		'mistyrose' => 'FFE4E1',
133
-		'moccasin' => 'FFE4B5',
134
-		'navajowhite' => 'FFDEAD',
135
-		'navy' => '000080',
136
-		'oldlace' => 'FDF5E6',
137
-		'olive' => '808000',
138
-		'olivedrab' => '6B8E23',
139
-		'orange' => 'FFA500',
140
-		'orangered' => 'FF4500',
141
-		'orchid' => 'DA70D6',
142
-		'palegoldenrod' => 'EEE8AA',
143
-		'palegreen' => '98FB98',
144
-		'paleturquoise' => 'AFEEEE',
145
-		'palevioletred' => 'DB7093',
146
-		'papayawhip' => 'FFEFD5',
147
-		'peachpuff' => 'FFDAB9',
148
-		'peru' => 'CD853F',
149
-		'pink' => 'FFC0CB',
150
-		'plum' => 'DDA0DD',
151
-		'powderblue' => 'B0E0E6',
152
-		'purple' => '800080',
153
-		'rebeccapurple' => '663399',
154
-		'red' => 'FF0000',
155
-		'rosybrown' => 'BC8F8F',
156
-		'royalblue' => '4169E1',
157
-		'saddlebrown' => '8B4513',
158
-		'salmon' => 'FA8072',
159
-		'sandybrown' => 'F4A460',
160
-		'seagreen' => '2E8B57',
161
-		'seashell' => 'FFF5EE',
162
-		'sienna' => 'A0522D',
163
-		'silver' => 'C0C0C0',
164
-		'skyblue' => '87CEEB',
165
-		'slateblue' => '6A5ACD',
166
-		'slategray' => '708090',
167
-		'slategrey' => '708090',
168
-		'snow' => 'FFFAFA',
169
-		'springgreen' => '00FF7F',
170
-		'steelblue' => '4682B4',
171
-		'tan' => 'D2B48C',
172
-		'teal' => '008080',
173
-		'thistle' => 'D8BFD8',
174
-		'tomato' => 'FF6347',
175
-		'turquoise' => '40E0D0',
176
-		'violet' => 'EE82EE',
177
-		'wheat' => 'F5DEB3',
178
-		'white' => 'FFFFFF',
179
-		'whitesmoke' => 'F5F5F5',
180
-		'yellow' => 'FFFF00',
181
-		'yellowgreen' => '9ACD32',
182
-	];
183
-	if (isset($couleurs_html[$lc = strtolower($couleur ?? '')])) {
184
-		return $couleurs_html[$lc];
185
-	}
186
-
187
-	return $couleur;
33
+    $couleurs_html = [
34
+        'aliceblue' => 'F0F8FF',
35
+        'antiquewhite' => 'FAEBD7',
36
+        'aqua' => '00FFFF',
37
+        'aquamarine' => '7FFFD4',
38
+        'azure' => 'F0FFFF',
39
+        'beige' => 'F5F5DC',
40
+        'bisque' => 'FFE4C4',
41
+        'black' => '000000',
42
+        'blanchedalmond' => 'FFEBCD',
43
+        'blue' => '0000FF',
44
+        'blueviolet' => '8A2BE2',
45
+        'brown' => 'A52A2A',
46
+        'burlywood' => 'DEB887',
47
+        'cadetblue' => '5F9EA0',
48
+        'chartreuse' => '7FFF00',
49
+        'chocolate' => 'D2691E',
50
+        'coral' => 'FF7F50',
51
+        'cornflowerblue' => '6495ED',
52
+        'cornsilk' => 'FFF8DC',
53
+        'crimson' => 'DC143C',
54
+        'cyan' => '00FFFF',
55
+        'darkblue' => '00008B',
56
+        'darkcyan' => '008B8B',
57
+        'darkgoldenrod' => 'B8860B',
58
+        'darkgray' => 'A9A9A9',
59
+        'darkgreen' => '006400',
60
+        'darkgrey' => 'A9A9A9',
61
+        'darkkhaki' => 'BDB76B',
62
+        'darkmagenta' => '8B008B',
63
+        'darkolivegreen' => '556B2F',
64
+        'darkorange' => 'FF8C00',
65
+        'darkorchid' => '9932CC',
66
+        'darkred' => '8B0000',
67
+        'darksalmon' => 'E9967A',
68
+        'darkseagreen' => '8FBC8F',
69
+        'darkslateblue' => '483D8B',
70
+        'darkslategray' => '2F4F4F',
71
+        'darkslategrey' => '2F4F4F',
72
+        'darkturquoise' => '00CED1',
73
+        'darkviolet' => '9400D3',
74
+        'deeppink' => 'FF1493',
75
+        'deepskyblue' => '00BFFF',
76
+        'dimgray' => '696969',
77
+        'dimgrey' => '696969',
78
+        'dodgerblue' => '1E90FF',
79
+        'firebrick' => 'B22222',
80
+        'floralwhite' => 'FFFAF0',
81
+        'forestgreen' => '228B22',
82
+        'fuchsia' => 'FF00FF',
83
+        'gainsboro' => 'DCDCDC',
84
+        'ghostwhite' => 'F8F8FF',
85
+        'gold' => 'FFD700',
86
+        'goldenrod' => 'DAA520',
87
+        'gray' => '808080',
88
+        'green' => '008000',
89
+        'greenyellow' => 'ADFF2F',
90
+        'grey' => '808080',
91
+        'honeydew' => 'F0FFF0',
92
+        'hotpink' => 'FF69B4',
93
+        'indianred' => 'CD5C5C',
94
+        'indigo' => '4B0082',
95
+        'ivory' => 'FFFFF0',
96
+        'khaki' => 'F0E68C',
97
+        'lavender' => 'E6E6FA',
98
+        'lavenderblush' => 'FFF0F5',
99
+        'lawngreen' => '7CFC00',
100
+        'lemonchiffon' => 'FFFACD',
101
+        'lightblue' => 'ADD8E6',
102
+        'lightcoral' => 'F08080',
103
+        'lightcyan' => 'E0FFFF',
104
+        'lightgoldenrodyellow' => 'FAFAD2',
105
+        'lightgray' => 'D3D3D3',
106
+        'lightgreen' => '90EE90',
107
+        'lightgrey' => 'D3D3D3',
108
+        'lightpink' => 'FFB6C1',
109
+        'lightsalmon' => 'FFA07A',
110
+        'lightseagreen' => '20B2AA',
111
+        'lightskyblue' => '87CEFA',
112
+        'lightslategray' => '778899',
113
+        'lightslategrey' => '778899',
114
+        'lightsteelblue' => 'B0C4DE',
115
+        'lightyellow' => 'FFFFE0',
116
+        'lime' => '00FF00',
117
+        'limegreen' => '32CD32',
118
+        'linen' => 'FAF0E6',
119
+        'magenta' => 'FF00FF',
120
+        'maroon' => '800000',
121
+        'mediumaquamarine' => '66CDAA',
122
+        'mediumblue' => '0000CD',
123
+        'mediumorchid' => 'BA55D3',
124
+        'mediumpurple' => '9370DB',
125
+        'mediumseagreen' => '3CB371',
126
+        'mediumslateblue' => '7B68EE',
127
+        'mediumspringgreen' => '00FA9A',
128
+        'mediumturquoise' => '48D1CC',
129
+        'mediumvioletred' => 'C71585',
130
+        'midnightblue' => '191970',
131
+        'mintcream' => 'F5FFFA',
132
+        'mistyrose' => 'FFE4E1',
133
+        'moccasin' => 'FFE4B5',
134
+        'navajowhite' => 'FFDEAD',
135
+        'navy' => '000080',
136
+        'oldlace' => 'FDF5E6',
137
+        'olive' => '808000',
138
+        'olivedrab' => '6B8E23',
139
+        'orange' => 'FFA500',
140
+        'orangered' => 'FF4500',
141
+        'orchid' => 'DA70D6',
142
+        'palegoldenrod' => 'EEE8AA',
143
+        'palegreen' => '98FB98',
144
+        'paleturquoise' => 'AFEEEE',
145
+        'palevioletred' => 'DB7093',
146
+        'papayawhip' => 'FFEFD5',
147
+        'peachpuff' => 'FFDAB9',
148
+        'peru' => 'CD853F',
149
+        'pink' => 'FFC0CB',
150
+        'plum' => 'DDA0DD',
151
+        'powderblue' => 'B0E0E6',
152
+        'purple' => '800080',
153
+        'rebeccapurple' => '663399',
154
+        'red' => 'FF0000',
155
+        'rosybrown' => 'BC8F8F',
156
+        'royalblue' => '4169E1',
157
+        'saddlebrown' => '8B4513',
158
+        'salmon' => 'FA8072',
159
+        'sandybrown' => 'F4A460',
160
+        'seagreen' => '2E8B57',
161
+        'seashell' => 'FFF5EE',
162
+        'sienna' => 'A0522D',
163
+        'silver' => 'C0C0C0',
164
+        'skyblue' => '87CEEB',
165
+        'slateblue' => '6A5ACD',
166
+        'slategray' => '708090',
167
+        'slategrey' => '708090',
168
+        'snow' => 'FFFAFA',
169
+        'springgreen' => '00FF7F',
170
+        'steelblue' => '4682B4',
171
+        'tan' => 'D2B48C',
172
+        'teal' => '008080',
173
+        'thistle' => 'D8BFD8',
174
+        'tomato' => 'FF6347',
175
+        'turquoise' => '40E0D0',
176
+        'violet' => 'EE82EE',
177
+        'wheat' => 'F5DEB3',
178
+        'white' => 'FFFFFF',
179
+        'whitesmoke' => 'F5F5F5',
180
+        'yellow' => 'FFFF00',
181
+        'yellowgreen' => '9ACD32',
182
+    ];
183
+    if (isset($couleurs_html[$lc = strtolower($couleur ?? '')])) {
184
+        return $couleurs_html[$lc];
185
+    }
186
+
187
+    return $couleur;
188 188
 }
189 189
 
190 190
 /**
@@ -200,16 +200,16 @@  discard block
 block discarded – undo
200 200
  * @return string Couleur tel que "hsl(200, 40%, 34%)" ou valeur formattée
201 201
  */
202 202
 function couleur_hex_to_hsl($couleur, $format = null) {
203
-	$hsl = _couleur_hex_to_hsl($couleur);
204
-	$hsl = [
205
-		'h' => round($hsl['h'] * 360),
206
-		's' => round($hsl['s'] * 100) . '%',
207
-		'l' => round($hsl['l'] * 100) . '%'
208
-	];
209
-	if ($format === null) {
210
-		return "hsl({$hsl['h']}, {$hsl['s']}, {$hsl['l']})";
211
-	}
212
-	return str_replace(array_keys($hsl), $hsl, $format);
203
+    $hsl = _couleur_hex_to_hsl($couleur);
204
+    $hsl = [
205
+        'h' => round($hsl['h'] * 360),
206
+        's' => round($hsl['s'] * 100) . '%',
207
+        'l' => round($hsl['l'] * 100) . '%'
208
+    ];
209
+    if ($format === null) {
210
+        return "hsl({$hsl['h']}, {$hsl['s']}, {$hsl['l']})";
211
+    }
212
+    return str_replace(array_keys($hsl), $hsl, $format);
213 213
 }
214 214
 
215 215
 
@@ -226,16 +226,16 @@  discard block
 block discarded – undo
226 226
  * @return string Couleur tel que "rgb(200, 40, 84)" ou valeur formattée
227 227
  */
228 228
 function couleur_hex_to_rgb($couleur, $format = null) {
229
-	$rgb = _couleur_hex_to_dec($couleur);
230
-	$rgb = [
231
-		'r' => $rgb['red'],
232
-		'g' => $rgb['green'],
233
-		'b' => $rgb['blue'],
234
-	];
235
-	if ($format === null) {
236
-		return "rgb({$rgb['r']}, {$rgb['g']}, {$rgb['b']})";
237
-	}
238
-	return str_replace(array_keys($rgb), $rgb, $format);
229
+    $rgb = _couleur_hex_to_dec($couleur);
230
+    $rgb = [
231
+        'r' => $rgb['red'],
232
+        'g' => $rgb['green'],
233
+        'b' => $rgb['blue'],
234
+    ];
235
+    if ($format === null) {
236
+        return "rgb({$rgb['r']}, {$rgb['g']}, {$rgb['b']})";
237
+    }
238
+    return str_replace(array_keys($rgb), $rgb, $format);
239 239
 }
240 240
 
241 241
 /**
@@ -251,13 +251,13 @@  discard block
 block discarded – undo
251 251
  *    Code hexadécimal de la couleur plus foncée
252 252
  */
253 253
 function couleur_foncer($couleur, $coeff = 0.5) {
254
-	$couleurs = _couleur_hex_to_dec($couleur);
254
+    $couleurs = _couleur_hex_to_dec($couleur);
255 255
 
256
-	$red = $couleurs['red'] - round(($couleurs['red']) * $coeff);
257
-	$green = $couleurs['green'] - round(($couleurs['green']) * $coeff);
258
-	$blue = $couleurs['blue'] - round(($couleurs['blue']) * $coeff);
256
+    $red = $couleurs['red'] - round(($couleurs['red']) * $coeff);
257
+    $green = $couleurs['green'] - round(($couleurs['green']) * $coeff);
258
+    $blue = $couleurs['blue'] - round(($couleurs['blue']) * $coeff);
259 259
 
260
-	return _couleur_dec_to_hex($red, $green, $blue);
260
+    return _couleur_dec_to_hex($red, $green, $blue);
261 261
 }
262 262
 
263 263
 /**
@@ -273,13 +273,13 @@  discard block
 block discarded – undo
273 273
  *    Code hexadécimal de la couleur éclaircie
274 274
  */
275 275
 function couleur_eclaircir($couleur, $coeff = 0.5) {
276
-	$couleurs = _couleur_hex_to_dec($couleur);
276
+    $couleurs = _couleur_hex_to_dec($couleur);
277 277
 
278
-	$red = $couleurs['red'] + round((255 - $couleurs['red']) * $coeff);
279
-	$green = $couleurs['green'] + round((255 - $couleurs['green']) * $coeff);
280
-	$blue = $couleurs['blue'] + round((255 - $couleurs['blue']) * $coeff);
278
+    $red = $couleurs['red'] + round((255 - $couleurs['red']) * $coeff);
279
+    $green = $couleurs['green'] + round((255 - $couleurs['green']) * $coeff);
280
+    $blue = $couleurs['blue'] + round((255 - $couleurs['blue']) * $coeff);
281 281
 
282
-	return _couleur_dec_to_hex($red, $green, $blue);
282
+    return _couleur_dec_to_hex($red, $green, $blue);
283 283
 }
284 284
 
285 285
 /**
@@ -302,27 +302,27 @@  discard block
 block discarded – undo
302 302
  *    Le tag html `<img src=... />` avec une class `filtre_inactif` ou pas
303 303
  */
304 304
 function image_select($img, $width_min = 0, $height_min = 0, $width_max = 10000, $height_max = 1000) {
305
-	if (!$img) {
306
-		return $img;
307
-	}
308
-	[$h, $l] = taille_image($img);
309
-	$select = true;
310
-	if ($l < $width_min || $l > $width_max || $h < $height_min || $h > $height_max) {
311
-		$select = false;
312
-	}
313
-
314
-	$class = extraire_attribut($img, 'class');
315
-	$p = str_contains((string) $class, 'filtre_inactif');
316
-	if (!$select && !$p) {
317
-		$class .= ' filtre_inactif';
318
-		$img = inserer_attribut($img, 'class', $class);
319
-	}
320
-	if ($select && $p) {
321
-		$class = preg_replace(',\s*(filtre_inactif),', '', $class);
322
-		$img = inserer_attribut($img, 'class', $class);
323
-	}
324
-
325
-	return $img;
305
+    if (!$img) {
306
+        return $img;
307
+    }
308
+    [$h, $l] = taille_image($img);
309
+    $select = true;
310
+    if ($l < $width_min || $l > $width_max || $h < $height_min || $h > $height_max) {
311
+        $select = false;
312
+    }
313
+
314
+    $class = extraire_attribut($img, 'class');
315
+    $p = str_contains((string) $class, 'filtre_inactif');
316
+    if (!$select && !$p) {
317
+        $class .= ' filtre_inactif';
318
+        $img = inserer_attribut($img, 'class', $class);
319
+    }
320
+    if ($select && $p) {
321
+        $class = preg_replace(',\s*(filtre_inactif),', '', $class);
322
+        $img = inserer_attribut($img, 'class', $class);
323
+    }
324
+
325
+    return $img;
326 326
 }
327 327
 
328 328
 /**
@@ -370,45 +370,45 @@  discard block
 block discarded – undo
370 370
  *     Code HTML de l'image ou du texte.
371 371
  **/
372 372
 function image_passe_partout(
373
-	$img,
374
-	$taille_x = -1,
375
-	$taille_y = -1,
376
-	$force = false,
377
-	$cherche_image = false,
378
-	$process = 'AUTO'
373
+    $img,
374
+    $taille_x = -1,
375
+    $taille_y = -1,
376
+    $force = false,
377
+    $cherche_image = false,
378
+    $process = 'AUTO'
379 379
 ) {
380
-	// PHP 7+ type hint
381
-	$img = (string)$img;
382
-	$taille_x = (int)$taille_x;
383
-	$taille_y = (int)$taille_y;
384
-	$force = (bool)$force;
385
-	$process = (string)$process;
386
-
387
-	if (!$img) {
388
-		return '';
389
-	}
390
-	[$hauteur, $largeur] = taille_image($img);
391
-	if ($taille_x === -1) {
392
-		$taille_x = $GLOBALS['meta']['taille_preview'] ?? 150;
393
-	}
394
-	if ($taille_y === -1) {
395
-		$taille_y = $taille_x;
396
-	}
397
-
398
-	if ($taille_x === 0 && $taille_y > 0) {
399
-		$taille_x = 1;
400
-	} # {0,300} -> c'est 300 qui compte
401
-	elseif ($taille_x > 0 && $taille_y === 0) {
402
-		$taille_y = 1;
403
-	} # {300,0} -> c'est 300 qui compte
404
-	elseif ($taille_x == 0 && $taille_y === 0) {
405
-		return '';
406
-	}
407
-
408
-	[$destWidth, $destHeight, $ratio] = ratio_passe_partout($largeur ?? 0, $hauteur ?? 0, $taille_x, $taille_y);
409
-	$fonction = ['image_passe_partout', func_get_args()];
410
-
411
-	return process_image_reduire($fonction, $img, $destWidth, $destHeight, $force, $process);
380
+    // PHP 7+ type hint
381
+    $img = (string)$img;
382
+    $taille_x = (int)$taille_x;
383
+    $taille_y = (int)$taille_y;
384
+    $force = (bool)$force;
385
+    $process = (string)$process;
386
+
387
+    if (!$img) {
388
+        return '';
389
+    }
390
+    [$hauteur, $largeur] = taille_image($img);
391
+    if ($taille_x === -1) {
392
+        $taille_x = $GLOBALS['meta']['taille_preview'] ?? 150;
393
+    }
394
+    if ($taille_y === -1) {
395
+        $taille_y = $taille_x;
396
+    }
397
+
398
+    if ($taille_x === 0 && $taille_y > 0) {
399
+        $taille_x = 1;
400
+    } # {0,300} -> c'est 300 qui compte
401
+    elseif ($taille_x > 0 && $taille_y === 0) {
402
+        $taille_y = 1;
403
+    } # {300,0} -> c'est 300 qui compte
404
+    elseif ($taille_x == 0 && $taille_y === 0) {
405
+        return '';
406
+    }
407
+
408
+    [$destWidth, $destHeight, $ratio] = ratio_passe_partout($largeur ?? 0, $hauteur ?? 0, $taille_x, $taille_y);
409
+    $fonction = ['image_passe_partout', func_get_args()];
410
+
411
+    return process_image_reduire($fonction, $img, $destWidth, $destHeight, $force, $process);
412 412
 }
413 413
 
414 414
 /**
@@ -451,44 +451,44 @@  discard block
 block discarded – undo
451 451
  *     Code HTML de l'image ou du texte.
452 452
  **/
453 453
 function image_reduire(
454
-	$img,
455
-	$taille = -1,
456
-	$taille_y = -1,
457
-	$force = false,
458
-	$cherche_image = false,
459
-	$process = 'AUTO'
454
+    $img,
455
+    $taille = -1,
456
+    $taille_y = -1,
457
+    $force = false,
458
+    $cherche_image = false,
459
+    $process = 'AUTO'
460 460
 ) {
461
-	// PHP 7+ type hint
462
-	$img = (string)$img;
463
-	$taille = (int)$taille;
464
-	$taille_y = (int)$taille_y;
465
-	$force = (bool)$force;
466
-	$process = (string)$process;
467
-
468
-	// Determiner la taille x,y maxi
469
-	// prendre le reglage de previsu par defaut
470
-	if ($taille === -1) {
471
-		$taille = (isset($GLOBALS['meta']['taille_preview']) && (int) $GLOBALS['meta']['taille_preview'])
472
-			? (int) $GLOBALS['meta']['taille_preview']
473
-			: 150;
474
-	}
475
-	if ($taille_y === -1) {
476
-		$taille_y = $taille;
477
-	}
478
-
479
-	if ($taille === 0 && $taille_y > 0) {
480
-		$taille = 10000;
481
-	} # {0,300} -> c'est 300 qui compte
482
-	elseif ($taille > 0 && $taille_y === 0) {
483
-		$taille_y = 10000;
484
-	} # {300,0} -> c'est 300 qui compte
485
-	elseif ($taille == 0 && $taille_y === 0) {
486
-		return '';
487
-	}
488
-
489
-	$fonction = ['image_reduire', func_get_args()];
490
-
491
-	return process_image_reduire($fonction, $img, $taille, $taille_y, $force, $process);
461
+    // PHP 7+ type hint
462
+    $img = (string)$img;
463
+    $taille = (int)$taille;
464
+    $taille_y = (int)$taille_y;
465
+    $force = (bool)$force;
466
+    $process = (string)$process;
467
+
468
+    // Determiner la taille x,y maxi
469
+    // prendre le reglage de previsu par defaut
470
+    if ($taille === -1) {
471
+        $taille = (isset($GLOBALS['meta']['taille_preview']) && (int) $GLOBALS['meta']['taille_preview'])
472
+            ? (int) $GLOBALS['meta']['taille_preview']
473
+            : 150;
474
+    }
475
+    if ($taille_y === -1) {
476
+        $taille_y = $taille;
477
+    }
478
+
479
+    if ($taille === 0 && $taille_y > 0) {
480
+        $taille = 10000;
481
+    } # {0,300} -> c'est 300 qui compte
482
+    elseif ($taille > 0 && $taille_y === 0) {
483
+        $taille_y = 10000;
484
+    } # {300,0} -> c'est 300 qui compte
485
+    elseif ($taille == 0 && $taille_y === 0) {
486
+        return '';
487
+    }
488
+
489
+    $fonction = ['image_reduire', func_get_args()];
490
+
491
+    return process_image_reduire($fonction, $img, $taille, $taille_y, $force, $process);
492 492
 }
493 493
 
494 494
 /**
@@ -499,16 +499,16 @@  discard block
 block discarded – undo
499 499
  *
500 500
  **/
501 501
 function image_recadre_avec_fallback(
502
-	$im,
503
-	$width,
504
-	$height = '-',
505
-	$position = 'focus',
506
-	$background_color = 'white'
502
+    $im,
503
+    $width,
504
+    $height = '-',
505
+    $position = 'focus',
506
+    $background_color = 'white'
507 507
 ) {
508
-	if (function_exists('image_recadre') && ($GLOBALS['meta']['image_process'] ?? '') === 'gd2') {
509
-		return image_reduire(image_recadre($im, $width . ':' . $height, '-', $position, $background_color), $width, $height);
510
-	} else { return image_passe_partout($im, $width, $height);
511
-	}
508
+    if (function_exists('image_recadre') && ($GLOBALS['meta']['image_process'] ?? '') === 'gd2') {
509
+        return image_reduire(image_recadre($im, $width . ':' . $height, '-', $position, $background_color), $width, $height);
510
+    } else { return image_passe_partout($im, $width, $height);
511
+    }
512 512
 }
513 513
 
514 514
 /**
@@ -526,23 +526,23 @@  discard block
 block discarded – undo
526 526
  *     Code HTML de l'image ou du texte.
527 527
  **/
528 528
 function image_reduire_par($img, $val = 1, $force = false) {
529
-	// PHP 7+ type hint
530
-	$img = (string)$img;
531
-	$val = (int)$val;
532
-	$force = (bool)$force;
529
+    // PHP 7+ type hint
530
+    $img = (string)$img;
531
+    $val = (int)$val;
532
+    $force = (bool)$force;
533 533
 
534
-	[$hauteur, $largeur] = taille_image($img);
534
+    [$hauteur, $largeur] = taille_image($img);
535 535
 
536
-	$l = round($largeur / $val);
537
-	$h = round($hauteur / $val);
536
+    $l = round($largeur / $val);
537
+    $h = round($hauteur / $val);
538 538
 
539
-	if ($l > $h) {
540
-		$h = 0;
541
-	} else {
542
-		$l = 0;
543
-	}
539
+    if ($l > $h) {
540
+        $h = 0;
541
+    } else {
542
+        $l = 0;
543
+    }
544 544
 
545
-	return image_reduire($img, $l, $h, $force);
545
+    return image_reduire($img, $l, $h, $force);
546 546
 }
547 547
 
548 548
 /**
@@ -565,10 +565,10 @@  discard block
 block discarded – undo
565 565
  *      Couleur en écriture hexadécimale.
566 566
 **/
567 567
 function filtre_couleur_saturation_dist($couleur, $val, $strict = false) {
568
-	if (function_exists('couleur_saturation')) {
569
-		return couleur_saturation($couleur, $val, $strict);
570
-	}
571
-	return $couleur;
568
+    if (function_exists('couleur_saturation')) {
569
+        return couleur_saturation($couleur, $val, $strict);
570
+    }
571
+    return $couleur;
572 572
 }
573 573
 
574 574
 /**
@@ -589,8 +589,8 @@  discard block
 block discarded – undo
589 589
  *      Couleur en écriture hexadécimale.
590 590
 **/
591 591
 function filtre_couleur_luminance_dist($couleur, $val) {
592
-	if (function_exists('couleur_luminance')) {
593
-		return couleur_luminance($couleur, $val);
594
-	}
595
-	return $couleur;
592
+    if (function_exists('couleur_luminance')) {
593
+        return couleur_luminance($couleur, $val);
594
+    }
595
+    return $couleur;
596 596
 }
Please login to merge, or discard this patch.
ecrire/plugins/afficher_nom_plugin.php 1 patch
Indentation   +42 added lines, -42 removed lines patch added patch discarded remove patch
@@ -10,53 +10,53 @@
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 include_spip('inc/charsets');
16 16
 include_spip('inc/texte');
17 17
 include_spip('plugins/afficher_plugin');
18 18
 
19 19
 function plugins_afficher_nom_plugin_dist(
20
-	$url_page,
21
-	$plug_file,
22
-	$checked,
23
-	$actif,
24
-	$expose = false,
25
-	$class_li = 'item',
26
-	$dir_plugins = _DIR_PLUGINS
20
+    $url_page,
21
+    $plug_file,
22
+    $checked,
23
+    $actif,
24
+    $expose = false,
25
+    $class_li = 'item',
26
+    $dir_plugins = _DIR_PLUGINS
27 27
 ) {
28
-	static $versions = [];
29
-
30
-	$erreur = false;
31
-	$s = '';
32
-
33
-	$get_infos = charger_fonction('get_infos', 'plugins');
34
-	$info = $get_infos($plug_file, false, $dir_plugins);
35
-
36
-	// numerotons les occurences d'un meme prefix
37
-	$versions[$info['prefix']] ??= 0;
38
-	$versions[$info['prefix']]++;
39
-	$id = $info['prefix'] . $versions[$info['prefix']];
40
-
41
-	$class = $class_li;
42
-	$class .= $actif ? ' actif' : '';
43
-	$class .= $expose ? ' on' : '';
44
-	$erreur = isset($info['erreur']);
45
-	if ($erreur) {
46
-		$class .= ' error';
47
-	}
48
-	$s .= "<li id='$id' class='$class'>";
49
-
50
-	// Cartouche Resume
51
-	$s .= "<div class='resume'>";
52
-	$s .= "<strong class='nom'>" . typo($info['nom']) . '</strong>';
53
-	$s .= " <span class='version'>" . $info['version'] . '</span>';
54
-	$s .= " <span class='etat'> - " . plugin_etat_en_clair($info['etat']) . '</span>';
55
-	$s .= '</div>';
56
-
57
-	if ($erreur) {
58
-		$s .= "<div class='erreur'>" . implode('<br >', $info['erreur']) . '</div>';
59
-	}
60
-
61
-	return $s . '</li>';
28
+    static $versions = [];
29
+
30
+    $erreur = false;
31
+    $s = '';
32
+
33
+    $get_infos = charger_fonction('get_infos', 'plugins');
34
+    $info = $get_infos($plug_file, false, $dir_plugins);
35
+
36
+    // numerotons les occurences d'un meme prefix
37
+    $versions[$info['prefix']] ??= 0;
38
+    $versions[$info['prefix']]++;
39
+    $id = $info['prefix'] . $versions[$info['prefix']];
40
+
41
+    $class = $class_li;
42
+    $class .= $actif ? ' actif' : '';
43
+    $class .= $expose ? ' on' : '';
44
+    $erreur = isset($info['erreur']);
45
+    if ($erreur) {
46
+        $class .= ' error';
47
+    }
48
+    $s .= "<li id='$id' class='$class'>";
49
+
50
+    // Cartouche Resume
51
+    $s .= "<div class='resume'>";
52
+    $s .= "<strong class='nom'>" . typo($info['nom']) . '</strong>';
53
+    $s .= " <span class='version'>" . $info['version'] . '</span>';
54
+    $s .= " <span class='etat'> - " . plugin_etat_en_clair($info['etat']) . '</span>';
55
+    $s .= '</div>';
56
+
57
+    if ($erreur) {
58
+        $s .= "<div class='erreur'>" . implode('<br >', $info['erreur']) . '</div>';
59
+    }
60
+
61
+    return $s . '</li>';
62 62
 }
Please login to merge, or discard this patch.
ecrire/plugins/afficher_plugin.php 1 patch
Indentation   +301 added lines, -301 removed lines patch added patch discarded remove patch
@@ -16,212 +16,212 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 include_spip('inc/charsets');
22 22
 include_spip('inc/texte');
23 23
 include_spip('inc/plugin'); // pour plugin_est_installe
24 24
 
25 25
 function plugins_afficher_plugin_dist(
26
-	$url_page,
27
-	$plug_file,
28
-	$checked,
29
-	$actif,
30
-	$expose = false,
31
-	$class_li = 'item',
32
-	$dir_plugins = _DIR_PLUGINS
26
+    $url_page,
27
+    $plug_file,
28
+    $checked,
29
+    $actif,
30
+    $expose = false,
31
+    $class_li = 'item',
32
+    $dir_plugins = _DIR_PLUGINS
33 33
 ) {
34 34
 
35
-	static $id_input = 0;
36
-	static $versions = [];
37
-
38
-	$force_reload = (_request('var_mode') == 'recalcul');
39
-	$get_infos = charger_fonction('get_infos', 'plugins');
40
-	$info = $get_infos($plug_file, $force_reload, $dir_plugins);
41
-	$prefix = $info['prefix'];
42
-	$cfg = '';
43
-	$checkable = ($dir_plugins !== _DIR_PLUGINS_DIST);
44
-	$nom = plugin_nom($info, $dir_plugins, $plug_file);
45
-	$erreur = '';
46
-
47
-	if (!plugin_version_compatible($info['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) {
48
-		$info['slogan'] = _T('plugin_info_non_compatible_spip');
49
-		$erreur = http_img_pack(
50
-			'plugin-dis-32.png',
51
-			_T('plugin_info_non_compatible_spip'),
52
-			" class='picto_err'",
53
-			_T('plugin_info_non_compatible_spip')
54
-		);
55
-		$class_li .= ' disabled';
56
-		$checkable = false;
57
-	} elseif (isset($info['erreur'])) {
58
-		$class_li .= ' error';
59
-		$erreur = http_img_pack(
60
-			'plugin-err-32.png',
61
-			_T('plugin_info_erreur_xml'),
62
-			" class='picto_err'",
63
-			_T('plugin_info_erreur_xml')
64
-		)
65
-			. "<div class='erreur'>" . join('<br >', $info['erreur']) . '</div>';
66
-		$checkable = false;
67
-	} elseif (isset($GLOBALS['erreurs_activation_raw'][$dir_plugins . $plug_file])) {
68
-		$class_li .= ' error';
69
-		$erreur = http_img_pack(
70
-			'plugin-err-32.png',
71
-			_T('plugin_impossible_activer', ['plugin' => $nom]),
72
-			" class='picto_err'",
73
-			_T('plugin_impossible_activer', ['plugin' => $nom])
74
-		)
75
-			. "<div class='erreur'>" . implode(
76
-				'<br />',
77
-				$GLOBALS['erreurs_activation_raw'][$dir_plugins . $plug_file]
78
-			) . '</div>';
79
-	} else {
80
-		$cfg = $actif ? plugin_bouton_config($plug_file, $info, $dir_plugins) : '';
81
-		if (defined('_DEV_VERSION_SPIP_COMPAT') && !plugin_version_compatible($info['compatibilite'], $GLOBALS['spip_version_branche'])) {
82
-			//$info['slogan'] = _T('plugin_info_non_compatible_spip');
83
-			$erreur = http_img_pack(
84
-				'plugin-dis-32.png',
85
-				_T('plugin_info_non_compatible_spip'),
86
-				" class='picto_err picto_compat_forcee'",
87
-				_L('Version incompatible : compatibilité forcée')
88
-			);
89
-		}
90
-	}
91
-
92
-	// numerotons les occurrences d'un meme prefix
93
-	$versions[$prefix] = $id = isset($versions[$prefix]) ? intval($versions[$prefix]) + 1 : '';
94
-
95
-	$class_li .= ($actif ? ' actif' : '') . ($expose ? ' on' : '');
96
-
97
-	return "<li id='$prefix$id' class='$class_li'>"
98
-	. ((!$checkable && !$checked)
99
-		? '' : plugin_checkbox(++$id_input, $dir_plugins . $plug_file, $checked))
100
-	. plugin_resume($info, $dir_plugins, $plug_file, $url_page)
101
-	. $cfg
102
-	. $erreur
103
-	. (($dir_plugins !== _DIR_PLUGINS_DIST && plugin_est_installe($plug_file))
104
-		? plugin_desintalle($plug_file, $nom, $dir_plugins) : '')
105
-	. "<div class='details'>" // pour l'ajax de exec/info_plugin
106
-	. (!$expose ? '' : affiche_bloc_plugin($plug_file, $info, $dir_plugins))
107
-	. '</div>'
108
-	. '</li>';
35
+    static $id_input = 0;
36
+    static $versions = [];
37
+
38
+    $force_reload = (_request('var_mode') == 'recalcul');
39
+    $get_infos = charger_fonction('get_infos', 'plugins');
40
+    $info = $get_infos($plug_file, $force_reload, $dir_plugins);
41
+    $prefix = $info['prefix'];
42
+    $cfg = '';
43
+    $checkable = ($dir_plugins !== _DIR_PLUGINS_DIST);
44
+    $nom = plugin_nom($info, $dir_plugins, $plug_file);
45
+    $erreur = '';
46
+
47
+    if (!plugin_version_compatible($info['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) {
48
+        $info['slogan'] = _T('plugin_info_non_compatible_spip');
49
+        $erreur = http_img_pack(
50
+            'plugin-dis-32.png',
51
+            _T('plugin_info_non_compatible_spip'),
52
+            " class='picto_err'",
53
+            _T('plugin_info_non_compatible_spip')
54
+        );
55
+        $class_li .= ' disabled';
56
+        $checkable = false;
57
+    } elseif (isset($info['erreur'])) {
58
+        $class_li .= ' error';
59
+        $erreur = http_img_pack(
60
+            'plugin-err-32.png',
61
+            _T('plugin_info_erreur_xml'),
62
+            " class='picto_err'",
63
+            _T('plugin_info_erreur_xml')
64
+        )
65
+            . "<div class='erreur'>" . join('<br >', $info['erreur']) . '</div>';
66
+        $checkable = false;
67
+    } elseif (isset($GLOBALS['erreurs_activation_raw'][$dir_plugins . $plug_file])) {
68
+        $class_li .= ' error';
69
+        $erreur = http_img_pack(
70
+            'plugin-err-32.png',
71
+            _T('plugin_impossible_activer', ['plugin' => $nom]),
72
+            " class='picto_err'",
73
+            _T('plugin_impossible_activer', ['plugin' => $nom])
74
+        )
75
+            . "<div class='erreur'>" . implode(
76
+                '<br />',
77
+                $GLOBALS['erreurs_activation_raw'][$dir_plugins . $plug_file]
78
+            ) . '</div>';
79
+    } else {
80
+        $cfg = $actif ? plugin_bouton_config($plug_file, $info, $dir_plugins) : '';
81
+        if (defined('_DEV_VERSION_SPIP_COMPAT') && !plugin_version_compatible($info['compatibilite'], $GLOBALS['spip_version_branche'])) {
82
+            //$info['slogan'] = _T('plugin_info_non_compatible_spip');
83
+            $erreur = http_img_pack(
84
+                'plugin-dis-32.png',
85
+                _T('plugin_info_non_compatible_spip'),
86
+                " class='picto_err picto_compat_forcee'",
87
+                _L('Version incompatible : compatibilité forcée')
88
+            );
89
+        }
90
+    }
91
+
92
+    // numerotons les occurrences d'un meme prefix
93
+    $versions[$prefix] = $id = isset($versions[$prefix]) ? intval($versions[$prefix]) + 1 : '';
94
+
95
+    $class_li .= ($actif ? ' actif' : '') . ($expose ? ' on' : '');
96
+
97
+    return "<li id='$prefix$id' class='$class_li'>"
98
+    . ((!$checkable && !$checked)
99
+        ? '' : plugin_checkbox(++$id_input, $dir_plugins . $plug_file, $checked))
100
+    . plugin_resume($info, $dir_plugins, $plug_file, $url_page)
101
+    . $cfg
102
+    . $erreur
103
+    . (($dir_plugins !== _DIR_PLUGINS_DIST && plugin_est_installe($plug_file))
104
+        ? plugin_desintalle($plug_file, $nom, $dir_plugins) : '')
105
+    . "<div class='details'>" // pour l'ajax de exec/info_plugin
106
+    . (!$expose ? '' : affiche_bloc_plugin($plug_file, $info, $dir_plugins))
107
+    . '</div>'
108
+    . '</li>';
109 109
 }
110 110
 
111 111
 function plugin_bouton_config($nom, $infos, $dir) {
112
-	// la verification se base sur le filesystem
113
-	// il faut donc n'utiliser que des minuscules, par convention
114
-	$prefix = strtolower($infos['prefix']);
115
-	// si paquet.xml fournit un squelette, le prendre
116
-	if (isset($infos['config']) && $infos['config']) {
117
-		return recuperer_fond(
118
-			"$dir$nom/" . $infos['config'],
119
-			[
120
-				'script' => 'configurer_' . $prefix,
121
-				'nom' => $nom
122
-			]
123
-		);
124
-	}
125
-
126
-	// sinon prendre le squelette std sur le nom std
127
-	return recuperer_fond(
128
-		'prive/squelettes/inclure/cfg',
129
-		[
130
-			'script' => 'configurer_' . $prefix,
131
-			'nom' => $nom
132
-		]
133
-	);
112
+    // la verification se base sur le filesystem
113
+    // il faut donc n'utiliser que des minuscules, par convention
114
+    $prefix = strtolower($infos['prefix']);
115
+    // si paquet.xml fournit un squelette, le prendre
116
+    if (isset($infos['config']) && $infos['config']) {
117
+        return recuperer_fond(
118
+            "$dir$nom/" . $infos['config'],
119
+            [
120
+                'script' => 'configurer_' . $prefix,
121
+                'nom' => $nom
122
+            ]
123
+        );
124
+    }
125
+
126
+    // sinon prendre le squelette std sur le nom std
127
+    return recuperer_fond(
128
+        'prive/squelettes/inclure/cfg',
129
+        [
130
+            'script' => 'configurer_' . $prefix,
131
+            'nom' => $nom
132
+        ]
133
+    );
134 134
 }
135 135
 
136 136
 // checkbox pour activer ou desactiver
137 137
 // si ce n'est pas une extension
138 138
 
139 139
 function plugin_checkbox($id_input, $file, $actif) {
140
-	$name = substr(md5($file), 0, 16);
141
-
142
-	return "<div class='check'>\n"
143
-	. "<input type='checkbox' name='s$name' id='label_$id_input'"
144
-	. ($actif ? " checked='checked'" : '')
145
-	. " class='checkbox'  value='O' />"
146
-	. "\n<label for='label_$id_input'>" . _T('activer_plugin') . '</label>'
147
-	. '</div>';
140
+    $name = substr(md5($file), 0, 16);
141
+
142
+    return "<div class='check'>\n"
143
+    . "<input type='checkbox' name='s$name' id='label_$id_input'"
144
+    . ($actif ? " checked='checked'" : '')
145
+    . " class='checkbox'  value='O' />"
146
+    . "\n<label for='label_$id_input'>" . _T('activer_plugin') . '</label>'
147
+    . '</div>';
148 148
 }
149 149
 
150 150
 function plugin_nom($info, $dir_plugins, $plug_file) {
151
-	$prefix = $info['prefix'];
152
-	$dir = "$dir_plugins$plug_file";
153
-	// Si dtd paquet, on traite le nom soit par son item de langue soit par sa valeur immediate a l'index "nom"
154
-	if ($info['dtd'] == 'paquet') {
155
-		$nom = plugin_typo("{$prefix}_nom", "$dir/lang/paquet-$prefix");
156
-		if (!$nom) {
157
-			$nom = typo($info['nom']);
158
-		}
159
-	} else {
160
-		$nom = typo(attribut_html($info['nom']));
161
-	}
162
-
163
-	return trim($nom);
151
+    $prefix = $info['prefix'];
152
+    $dir = "$dir_plugins$plug_file";
153
+    // Si dtd paquet, on traite le nom soit par son item de langue soit par sa valeur immediate a l'index "nom"
154
+    if ($info['dtd'] == 'paquet') {
155
+        $nom = plugin_typo("{$prefix}_nom", "$dir/lang/paquet-$prefix");
156
+        if (!$nom) {
157
+            $nom = typo($info['nom']);
158
+        }
159
+    } else {
160
+        $nom = typo(attribut_html($info['nom']));
161
+    }
162
+
163
+    return trim($nom);
164 164
 }
165 165
 
166 166
 // Cartouche Resume
167 167
 function plugin_resume($info, $dir_plugins, $plug_file, $url_page) {
168
-	$prefix = $info['prefix'];
169
-	$dir = "$dir_plugins$plug_file";
170
-	$slogan = PtoBR(plugin_propre($info['slogan'], "$dir/lang/paquet-$prefix"));
171
-	// une seule ligne dans le slogan : couper si besoin
172
-	if (($p = strpos($slogan, '<br />')) !== false) {
173
-		$slogan = substr($slogan, 0, $p);
174
-	}
175
-	// couper par securite
176
-	$slogan = couper($slogan, 80);
177
-
178
-	$nom = plugin_nom($info, $dir_plugins, $plug_file);
179
-
180
-	$url = parametre_url($url_page, 'plugin', substr($dir, strlen(_DIR_RACINE)));
181
-
182
-	$icon_class = 'icon';
183
-	$img = '';
184
-	if (isset($info['logo']) && ($i = trim($info['logo']))) {
185
-		$img = http_img_pack("$dir/$i", '', " width='32' height='32'", '', ['variante_svg_si_possible' => true, 'chemin_image' => false]);
186
-		if (!extraire_attribut($img, 'src')) {
187
-			$img = '';
188
-		}
189
-	}
190
-	if (!$img) {
191
-		$img = http_img_pack('plugin-xx.svg', '', " width='32' height='32'");
192
-		$icon_class .= ' no-logo';
193
-	}
194
-
195
-	$i = "<div class='$icon_class'><a href='$url' rel='info'>$img</a></div>";
196
-
197
-	return "<div class='resume'>"
198
-	. "<h3><a href='$url' rel='info'>"
199
-	. $nom
200
-	. '</a></h3>'
201
-	. " <span class='version'>" . $info['version'] . '</span>'
202
-	. " <span class='etat'> - "
203
-	. plugin_etat_en_clair($info['etat'])
204
-	. '</span>'
205
-	. "<div class='short'>" . $slogan . '</div>'
206
-	. $i
207
-	. '</div>';
168
+    $prefix = $info['prefix'];
169
+    $dir = "$dir_plugins$plug_file";
170
+    $slogan = PtoBR(plugin_propre($info['slogan'], "$dir/lang/paquet-$prefix"));
171
+    // une seule ligne dans le slogan : couper si besoin
172
+    if (($p = strpos($slogan, '<br />')) !== false) {
173
+        $slogan = substr($slogan, 0, $p);
174
+    }
175
+    // couper par securite
176
+    $slogan = couper($slogan, 80);
177
+
178
+    $nom = plugin_nom($info, $dir_plugins, $plug_file);
179
+
180
+    $url = parametre_url($url_page, 'plugin', substr($dir, strlen(_DIR_RACINE)));
181
+
182
+    $icon_class = 'icon';
183
+    $img = '';
184
+    if (isset($info['logo']) && ($i = trim($info['logo']))) {
185
+        $img = http_img_pack("$dir/$i", '', " width='32' height='32'", '', ['variante_svg_si_possible' => true, 'chemin_image' => false]);
186
+        if (!extraire_attribut($img, 'src')) {
187
+            $img = '';
188
+        }
189
+    }
190
+    if (!$img) {
191
+        $img = http_img_pack('plugin-xx.svg', '', " width='32' height='32'");
192
+        $icon_class .= ' no-logo';
193
+    }
194
+
195
+    $i = "<div class='$icon_class'><a href='$url' rel='info'>$img</a></div>";
196
+
197
+    return "<div class='resume'>"
198
+    . "<h3><a href='$url' rel='info'>"
199
+    . $nom
200
+    . '</a></h3>'
201
+    . " <span class='version'>" . $info['version'] . '</span>'
202
+    . " <span class='etat'> - "
203
+    . plugin_etat_en_clair($info['etat'])
204
+    . '</span>'
205
+    . "<div class='short'>" . $slogan . '</div>'
206
+    . $i
207
+    . '</div>';
208 208
 }
209 209
 
210 210
 function plugin_desintalle($plug_file, $nom, $dir_plugins = null) {
211
-	if (!$dir_plugins) {
212
-		$dir_plugins = _DIR_PLUGINS;
213
-	}
211
+    if (!$dir_plugins) {
212
+        $dir_plugins = _DIR_PLUGINS;
213
+    }
214 214
 
215
-	$action = redirige_action_auteur('desinstaller_plugin', "$dir_plugins::$plug_file", 'admin_plugin');
216
-	$text = _T('bouton_desinstaller');
217
-	$text2 = _T('info_desinstaller_plugin');
218
-	$file = basename($plug_file);
215
+    $action = redirige_action_auteur('desinstaller_plugin', "$dir_plugins::$plug_file", 'admin_plugin');
216
+    $text = _T('bouton_desinstaller');
217
+    $text2 = _T('info_desinstaller_plugin');
218
+    $file = basename($plug_file);
219 219
 
220
-	return "<div class='actions'>[" .
221
-	"<a href='$action'
220
+    return "<div class='actions'>[" .
221
+    "<a href='$action'
222 222
 		onclick='return confirm(\"$text $nom ?\\n$text2\")'>"
223
-	. $text
224
-	. '</a>]</div>';
223
+    . $text
224
+    . '</a>]</div>';
225 225
 }
226 226
 
227 227
 /**
@@ -235,143 +235,143 @@  discard block
 block discarded – undo
235 235
  *     Traduction de l'état dans la langue en cours
236 236
  **/
237 237
 function plugin_etat_en_clair($etat) {
238
-	if (!in_array($etat, ['stable', 'test', 'experimental'])) {
239
-		$etat = 'developpement';
240
-	}
238
+    if (!in_array($etat, ['stable', 'test', 'experimental'])) {
239
+        $etat = 'developpement';
240
+    }
241 241
 
242
-	return _T('plugin_etat_' . $etat);
242
+    return _T('plugin_etat_' . $etat);
243 243
 }
244 244
 
245 245
 function plugin_propre($texte, $module = '', $propre = 'propre') {
246
-	// retirer le retour a la racine du module, car le find_in_path se fait depuis la racine
247
-	if (_DIR_RACINE && str_starts_with($module, _DIR_RACINE)) {
248
-		$module = substr($module, strlen(_DIR_RACINE));
249
-	}
250
-	if (preg_match('|^\w+_[\w_]+$|', $texte)) {
251
-		$texte = _T(($module ? "$module:" : '') . $texte, [], ['force' => false]);
252
-	}
253
-
254
-	return $propre($texte);
246
+    // retirer le retour a la racine du module, car le find_in_path se fait depuis la racine
247
+    if (_DIR_RACINE && str_starts_with($module, _DIR_RACINE)) {
248
+        $module = substr($module, strlen(_DIR_RACINE));
249
+    }
250
+    if (preg_match('|^\w+_[\w_]+$|', $texte)) {
251
+        $texte = _T(($module ? "$module:" : '') . $texte, [], ['force' => false]);
252
+    }
253
+
254
+    return $propre($texte);
255 255
 }
256 256
 
257 257
 function plugin_typo($texte, $module = '') {
258
-	return plugin_propre($texte, $module, 'typo');
258
+    return plugin_propre($texte, $module, 'typo');
259 259
 }
260 260
 
261 261
 
262 262
 function affiche_bloc_plugin($plug_file, $info, $dir_plugins = null) {
263
-	$log = null;
264
-	if (!$dir_plugins) {
265
-		$dir_plugins = _DIR_PLUGINS;
266
-	}
267
-
268
-	$prefix = $info['prefix'];
269
-	$dir = "$dir_plugins$plug_file/lang/paquet-$prefix";
270
-
271
-	$s = '';
272
-	// TODO: le traiter_multi ici n'est pas beau
273
-	// cf. description du plugin/_stable_/ortho/plugin.xml
274
-	// concerne les anciens plugin.xml donc on devrait plus en avoir besoin
275
-	$description = '';
276
-	if (isset($info['description'])) {
277
-		$description = plugin_propre($info['description'], $dir);
278
-	}
279
-
280
-	if (
281
-		isset($info['documentation']) && ($lien = $info['documentation'])
282
-	) {
283
-		$description .= "<p><em class='site'><a href='$lien' class='spip_out'>" . _T('en_savoir_plus') . '</a></em></p>';
284
-	}
285
-	$s .= "<dd class='desc'>" . $description . "</dd>\n";
286
-
287
-	if (isset($info['auteur'])) {
288
-		if (is_array($info['auteur'])) {
289
-			$a = formater_credits($info['auteur'], ', ');
290
-		} // pour compat mais ne doit plus arriver
291
-		else {
292
-			$a = trim($info['auteur']);
293
-		}
294
-		if ($a) {
295
-			$s .= "<dt class='auteurs'>" . _T('public:par_auteur') . "</dt><dd class='auteurs'>" . PtoBR(propre(
296
-				$a,
297
-				$dir
298
-			)) . "</dd>\n";
299
-		}
300
-	}
301
-
302
-	if (isset($info['credit'])) {
303
-		if ($a = formater_credits($info['credit'], ', ')) {
304
-			$s .= "<dt class='credits'>" . _T('plugin_info_credit') . "</dt><dd class='credits'>" . PtoBR(propre(
305
-				$a,
306
-				$dir
307
-			)) . "</dd>\n";
308
-		}
309
-	}
310
-
311
-	if (isset($info['licence'])) {
312
-		if (is_array($info['licence'])) {
313
-			$a = formater_credits($info['licence'], ', ');
314
-		} // pour compat mais ne doit plus arriver
315
-		else {
316
-			$a = trim($info['licence']);
317
-		}
318
-		if ($a) {
319
-			$s .= "<dt class='licence'>" . _T('intitule_licence') . "</dt><dd class='licence'>" . PtoBR(propre(
320
-				$a,
321
-				$dir
322
-			)) . "</dd>\n";
323
-		}
324
-	}
325
-
326
-	$s = "<dl class='description'>$s</dl>";
327
-
328
-	//
329
-	// Ajouter les infos techniques
330
-	//
331
-	$infotech = [];
332
-
333
-	$version = '<dt>' . _T('version') . '</dt><dd>' . $info['version'];
334
-	// Version VCS
335
-	if ($vcs = version_vcs_courante($dir_plugins . $plug_file)) {
336
-		$version .= ' ' . $vcs;
337
-	}
338
-	$version .= '</dd>';
339
-	$infotech[] = $version;
340
-	$infotech[] = '<dt>' . _T('repertoire_plugins') . '</dt><dd>' . joli_repertoire("$dir_plugins$plug_file") . '</dd>';
341
-	// source zip le cas echeant
342
-	$infotech[] = (lire_fichier($dir_plugins . $plug_file . '/install.log', $log) && preg_match(',^source:(.*)$,m', $log, $r))
343
-		? '<dt>' . _T('plugin_source') . '</dt><dd>' . trim($r[1]) . '</dd>'
344
-		: '';
345
-
346
-	$infotech[] = !$info['necessite'] ? '' :
347
-		('<dt>' . _T('plugin_info_necessite') . '</dt><dd>' . join(
348
-			' ',
349
-			array_map('array_shift', $info['necessite'])
350
-		) . '</dd>');
351
-
352
-	$s .= "<dl class='tech'>"
353
-		. join('', $infotech)
354
-		. '</dl>';
355
-
356
-
357
-	return $s;
263
+    $log = null;
264
+    if (!$dir_plugins) {
265
+        $dir_plugins = _DIR_PLUGINS;
266
+    }
267
+
268
+    $prefix = $info['prefix'];
269
+    $dir = "$dir_plugins$plug_file/lang/paquet-$prefix";
270
+
271
+    $s = '';
272
+    // TODO: le traiter_multi ici n'est pas beau
273
+    // cf. description du plugin/_stable_/ortho/plugin.xml
274
+    // concerne les anciens plugin.xml donc on devrait plus en avoir besoin
275
+    $description = '';
276
+    if (isset($info['description'])) {
277
+        $description = plugin_propre($info['description'], $dir);
278
+    }
279
+
280
+    if (
281
+        isset($info['documentation']) && ($lien = $info['documentation'])
282
+    ) {
283
+        $description .= "<p><em class='site'><a href='$lien' class='spip_out'>" . _T('en_savoir_plus') . '</a></em></p>';
284
+    }
285
+    $s .= "<dd class='desc'>" . $description . "</dd>\n";
286
+
287
+    if (isset($info['auteur'])) {
288
+        if (is_array($info['auteur'])) {
289
+            $a = formater_credits($info['auteur'], ', ');
290
+        } // pour compat mais ne doit plus arriver
291
+        else {
292
+            $a = trim($info['auteur']);
293
+        }
294
+        if ($a) {
295
+            $s .= "<dt class='auteurs'>" . _T('public:par_auteur') . "</dt><dd class='auteurs'>" . PtoBR(propre(
296
+                $a,
297
+                $dir
298
+            )) . "</dd>\n";
299
+        }
300
+    }
301
+
302
+    if (isset($info['credit'])) {
303
+        if ($a = formater_credits($info['credit'], ', ')) {
304
+            $s .= "<dt class='credits'>" . _T('plugin_info_credit') . "</dt><dd class='credits'>" . PtoBR(propre(
305
+                $a,
306
+                $dir
307
+            )) . "</dd>\n";
308
+        }
309
+    }
310
+
311
+    if (isset($info['licence'])) {
312
+        if (is_array($info['licence'])) {
313
+            $a = formater_credits($info['licence'], ', ');
314
+        } // pour compat mais ne doit plus arriver
315
+        else {
316
+            $a = trim($info['licence']);
317
+        }
318
+        if ($a) {
319
+            $s .= "<dt class='licence'>" . _T('intitule_licence') . "</dt><dd class='licence'>" . PtoBR(propre(
320
+                $a,
321
+                $dir
322
+            )) . "</dd>\n";
323
+        }
324
+    }
325
+
326
+    $s = "<dl class='description'>$s</dl>";
327
+
328
+    //
329
+    // Ajouter les infos techniques
330
+    //
331
+    $infotech = [];
332
+
333
+    $version = '<dt>' . _T('version') . '</dt><dd>' . $info['version'];
334
+    // Version VCS
335
+    if ($vcs = version_vcs_courante($dir_plugins . $plug_file)) {
336
+        $version .= ' ' . $vcs;
337
+    }
338
+    $version .= '</dd>';
339
+    $infotech[] = $version;
340
+    $infotech[] = '<dt>' . _T('repertoire_plugins') . '</dt><dd>' . joli_repertoire("$dir_plugins$plug_file") . '</dd>';
341
+    // source zip le cas echeant
342
+    $infotech[] = (lire_fichier($dir_plugins . $plug_file . '/install.log', $log) && preg_match(',^source:(.*)$,m', $log, $r))
343
+        ? '<dt>' . _T('plugin_source') . '</dt><dd>' . trim($r[1]) . '</dd>'
344
+        : '';
345
+
346
+    $infotech[] = !$info['necessite'] ? '' :
347
+        ('<dt>' . _T('plugin_info_necessite') . '</dt><dd>' . join(
348
+            ' ',
349
+            array_map('array_shift', $info['necessite'])
350
+        ) . '</dd>');
351
+
352
+    $s .= "<dl class='tech'>"
353
+        . join('', $infotech)
354
+        . '</dl>';
355
+
356
+
357
+    return $s;
358 358
 }
359 359
 
360 360
 function formater_credits($infos, $sep = ', ') {
361
-	$texte = '';
362
-
363
-	foreach ($infos as $_credit) {
364
-		if ($texte) {
365
-			$texte .= $sep;
366
-		}
367
-		// Si le credit en cours n'est pas un array c'est donc un copyright
368
-		$texte .=
369
-			(!is_array($_credit))
370
-				? PtoBR(propre($_credit))
371
-				: ($_credit['url'] ? '<a href="' . $_credit['url'] . '">' : '') .
372
-				$_credit['nom'] .
373
-				($_credit['url'] ? '</a>' : '');
374
-	}
375
-
376
-	return $texte;
361
+    $texte = '';
362
+
363
+    foreach ($infos as $_credit) {
364
+        if ($texte) {
365
+            $texte .= $sep;
366
+        }
367
+        // Si le credit en cours n'est pas un array c'est donc un copyright
368
+        $texte .=
369
+            (!is_array($_credit))
370
+                ? PtoBR(propre($_credit))
371
+                : ($_credit['url'] ? '<a href="' . $_credit['url'] . '">' : '') .
372
+                $_credit['nom'] .
373
+                ($_credit['url'] ? '</a>' : '');
374
+    }
375
+
376
+    return $texte;
377 377
 }
Please login to merge, or discard this patch.