Completed
Push — master ( dd789a...0df2ac )
by cam
02:19 queued 01:12
created
ecrire/inc/filtres_selecteur_generique.php 2 patches
Indentation   +144 added lines, -144 removed lines patch added patch discarded remove patch
@@ -7,7 +7,7 @@  discard block
 block discarded – undo
7 7
  **/
8 8
 
9 9
 if (!defined('_ECRIRE_INC_VERSION')) {
10
-	return;
10
+    return;
11 11
 }
12 12
 
13 13
 /**
@@ -28,51 +28,51 @@  discard block
 block discarded – undo
28 28
  *     - afficher : tableau des objets à afficher (mais pas forcément sélectionnables)
29 29
  */
30 30
 function selecteur_lister_objets($whitelist = [], $blacklist = []) {
31
-	static $liste_selecteurs, $liste_parents;
32
-
33
-	if (!$liste_selecteurs) {
34
-		$liste_selecteurs = find_all_in_path('formulaires/selecteur/', 'hierarchie-[\w]+[.]html$');
35
-	}
36
-	$objets_selectionner = [];
37
-	foreach ($liste_selecteurs as $fichier => $chemin) {
38
-		$objets_selectionner[] = preg_replace('/^hierarchie-([\w]+)[.]html$/', '$1', $fichier);
39
-	}
40
-
41
-	// S'il y a une whitelist on ne garde que ce qui est dedans
42
-	if (!empty($whitelist)) {
43
-		$whitelist = array_map('table_objet', $whitelist);
44
-		$objets_selectionner = array_intersect($objets_selectionner, $whitelist);
45
-	}
46
-	// On supprime ce qui est dans la blacklist
47
-	$blacklist = array_map('table_objet', $blacklist);
48
-	// On enlève toujours la racine
49
-	$blacklist[] = 'racine';
50
-	$objets_selectionner = array_diff($objets_selectionner, $blacklist);
51
-
52
-	// Ensuite on cherche ce qu'on doit afficher : au moins ceux qu'on peut sélectionner
53
-	$objets_afficher = $objets_selectionner;
54
-
55
-	// Il faut alors chercher d'éventuels parents obligatoires en plus :
56
-	// lister-trucs-bidules.html => on doit afficher des "trucs" pour trouver des "bidules"
57
-	if (!$liste_parents) {
58
-		$liste_parents = find_all_in_path('formulaires/selecteur/', 'lister-[\w]+-[\w]+[.]html$');
59
-	}
60
-	foreach ($liste_parents as $fichier => $chemin) {
61
-		preg_match('/^lister-([\w]+)-([\w]+)[.]html$/', $fichier, $captures);
62
-		$parent = $captures[1];
63
-		$type = $captures[2];
64
-		// Si le type fait partie de ce qu'on doit afficher alors on ajoute aussi le parent à l'affichage
65
-		if (in_array($type, $objets_afficher)) {
66
-			$objets_afficher[] = $parent;
67
-		}
68
-	}
69
-
70
-	$objets = [
71
-		'selectionner' => array_unique($objets_selectionner),
72
-		'afficher' => array_unique($objets_afficher),
73
-	];
74
-
75
-	return $objets;
31
+    static $liste_selecteurs, $liste_parents;
32
+
33
+    if (!$liste_selecteurs) {
34
+        $liste_selecteurs = find_all_in_path('formulaires/selecteur/', 'hierarchie-[\w]+[.]html$');
35
+    }
36
+    $objets_selectionner = [];
37
+    foreach ($liste_selecteurs as $fichier => $chemin) {
38
+        $objets_selectionner[] = preg_replace('/^hierarchie-([\w]+)[.]html$/', '$1', $fichier);
39
+    }
40
+
41
+    // S'il y a une whitelist on ne garde que ce qui est dedans
42
+    if (!empty($whitelist)) {
43
+        $whitelist = array_map('table_objet', $whitelist);
44
+        $objets_selectionner = array_intersect($objets_selectionner, $whitelist);
45
+    }
46
+    // On supprime ce qui est dans la blacklist
47
+    $blacklist = array_map('table_objet', $blacklist);
48
+    // On enlève toujours la racine
49
+    $blacklist[] = 'racine';
50
+    $objets_selectionner = array_diff($objets_selectionner, $blacklist);
51
+
52
+    // Ensuite on cherche ce qu'on doit afficher : au moins ceux qu'on peut sélectionner
53
+    $objets_afficher = $objets_selectionner;
54
+
55
+    // Il faut alors chercher d'éventuels parents obligatoires en plus :
56
+    // lister-trucs-bidules.html => on doit afficher des "trucs" pour trouver des "bidules"
57
+    if (!$liste_parents) {
58
+        $liste_parents = find_all_in_path('formulaires/selecteur/', 'lister-[\w]+-[\w]+[.]html$');
59
+    }
60
+    foreach ($liste_parents as $fichier => $chemin) {
61
+        preg_match('/^lister-([\w]+)-([\w]+)[.]html$/', $fichier, $captures);
62
+        $parent = $captures[1];
63
+        $type = $captures[2];
64
+        // Si le type fait partie de ce qu'on doit afficher alors on ajoute aussi le parent à l'affichage
65
+        if (in_array($type, $objets_afficher)) {
66
+            $objets_afficher[] = $parent;
67
+        }
68
+    }
69
+
70
+    $objets = [
71
+        'selectionner' => array_unique($objets_selectionner),
72
+        'afficher' => array_unique($objets_afficher),
73
+    ];
74
+
75
+    return $objets;
76 76
 }
77 77
 
78 78
 /**
@@ -99,31 +99,31 @@  discard block
 block discarded – undo
99 99
  *     liste des couples (objets => id_objet) ou liste des identifiants d'un type d'objet.
100 100
  **/
101 101
 function picker_selected($selected, $type = '') {
102
-	$select = [];
103
-	$type = preg_replace(',\W,', '', $type);
104
-
105
-	if ($selected and !is_array($selected)) {
106
-		$selected = explode(',', $selected);
107
-	}
108
-
109
-	if (is_array($selected)) {
110
-		foreach ($selected as $value) {
111
-			// Si c'est le bon format déjà
112
-			if (preg_match('/^([\w]+)[|]([0-9]+)$/', $value, $captures)) {
113
-				$objet = $captures[1];
114
-				$id_objet = intval($captures[2]);
115
-
116
-				// Si on cherche un type et que c'est le bon, on renvoit un tableau que d'identifiants
117
-				if (is_string($type) and $type == $objet and ($id_objet or in_array($objet, ['racine', 'rubrique']))) {
118
-					$select[] = $id_objet;
119
-				} elseif (!$type and ($id_objet or in_array($objet, ['racine', 'rubrique']))) {
120
-					$select[] = ['objet' => $objet, 'id_objet' => $id_objet];
121
-				}
122
-			}
123
-		}
124
-	}
125
-
126
-	return $select;
102
+    $select = [];
103
+    $type = preg_replace(',\W,', '', $type);
104
+
105
+    if ($selected and !is_array($selected)) {
106
+        $selected = explode(',', $selected);
107
+    }
108
+
109
+    if (is_array($selected)) {
110
+        foreach ($selected as $value) {
111
+            // Si c'est le bon format déjà
112
+            if (preg_match('/^([\w]+)[|]([0-9]+)$/', $value, $captures)) {
113
+                $objet = $captures[1];
114
+                $id_objet = intval($captures[2]);
115
+
116
+                // Si on cherche un type et que c'est le bon, on renvoit un tableau que d'identifiants
117
+                if (is_string($type) and $type == $objet and ($id_objet or in_array($objet, ['racine', 'rubrique']))) {
118
+                    $select[] = $id_objet;
119
+                } elseif (!$type and ($id_objet or in_array($objet, ['racine', 'rubrique']))) {
120
+                    $select[] = ['objet' => $objet, 'id_objet' => $id_objet];
121
+                }
122
+            }
123
+        }
124
+    }
125
+
126
+    return $select;
127 127
 }
128 128
 
129 129
 /**
@@ -140,49 +140,49 @@  discard block
 block discarded – undo
140 140
  *     Booléen indiquant si les articles sont sélectionnables
141 141
  */
142 142
 function picker_identifie_id_rapide($ref, $rubriques_ou_objets = false, $articles = false) {
143
-	include_spip('inc/json');
144
-	include_spip('inc/lien');
145
-
146
-	// On construit un tableau des objets sélectionnables suivant les paramètres
147
-	$objets = [];
148
-	if ($rubriques_ou_objets and is_array($rubriques_ou_objets)) {
149
-		$objets = $rubriques_ou_objets;
150
-	} else {
151
-		if ($rubriques_ou_objets) {
152
-			$objets[] = 'rubriques';
153
-		}
154
-		if ($articles) {
155
-			$objets[] = 'articles';
156
-		}
157
-	}
158
-
159
-	// si id numerique et un seul objet possible, pas d'ambiguite
160
-	if (is_numeric($ref) and count($objets) === 1) {
161
-		$ref = reset($objets) . $ref;
162
-	}
163
-
164
-	// Si la référence ne correspond à rien, c'est fini
165
-	if (!($match = typer_raccourci($ref))) {
166
-		return json_export(false);
167
-	}
168
-	// Sinon on récupère les infos utiles
169
-	@list($type, , $id, , , , ) = $match;
170
-
171
-	// On regarde si le type trouvé fait partie des objets sélectionnables
172
-	if (!in_array(table_objet($type), $objets)) {
173
-		return json_export(false);
174
-	}
175
-
176
-	// Maintenant que tout est bon, on cherche les informations sur cet objet
177
-	include_spip('inc/filtres');
178
-	if (!$titre = generer_info_entite($id, $type, 'titre')) {
179
-		return json_export(false);
180
-	}
181
-
182
-	// On simplifie le texte
183
-	$titre = attribut_html($titre);
184
-
185
-	return json_export(['type' => $type, 'id' => "$type|$id", 'titre' => $titre]);
143
+    include_spip('inc/json');
144
+    include_spip('inc/lien');
145
+
146
+    // On construit un tableau des objets sélectionnables suivant les paramètres
147
+    $objets = [];
148
+    if ($rubriques_ou_objets and is_array($rubriques_ou_objets)) {
149
+        $objets = $rubriques_ou_objets;
150
+    } else {
151
+        if ($rubriques_ou_objets) {
152
+            $objets[] = 'rubriques';
153
+        }
154
+        if ($articles) {
155
+            $objets[] = 'articles';
156
+        }
157
+    }
158
+
159
+    // si id numerique et un seul objet possible, pas d'ambiguite
160
+    if (is_numeric($ref) and count($objets) === 1) {
161
+        $ref = reset($objets) . $ref;
162
+    }
163
+
164
+    // Si la référence ne correspond à rien, c'est fini
165
+    if (!($match = typer_raccourci($ref))) {
166
+        return json_export(false);
167
+    }
168
+    // Sinon on récupère les infos utiles
169
+    @list($type, , $id, , , , ) = $match;
170
+
171
+    // On regarde si le type trouvé fait partie des objets sélectionnables
172
+    if (!in_array(table_objet($type), $objets)) {
173
+        return json_export(false);
174
+    }
175
+
176
+    // Maintenant que tout est bon, on cherche les informations sur cet objet
177
+    include_spip('inc/filtres');
178
+    if (!$titre = generer_info_entite($id, $type, 'titre')) {
179
+        return json_export(false);
180
+    }
181
+
182
+    // On simplifie le texte
183
+    $titre = attribut_html($titre);
184
+
185
+    return json_export(['type' => $type, 'id' => "$type|$id", 'titre' => $titre]);
186 186
 }
187 187
 
188 188
 /**
@@ -205,34 +205,34 @@  discard block
 block discarded – undo
205 205
  *     Comme le filtre `oui` : espace (` `) si rubrique à afficher, chaîne vide sinon.
206 206
  */
207 207
 function test_enfants_rubrique($id_rubrique, $types = []) {
208
-	static $has_child = [];
209
-
210
-	if (!isset($has_child[$id_rubrique])) {
211
-		$types = (is_array($types) ? array_filter($types) : []);
212
-
213
-		// recuperer tous les freres et soeurs de la rubrique visee
214
-		$id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
215
-		$fratrie = sql_allfetsel('id_rubrique', 'spip_rubriques', 'id_parent=' . intval($id_parent));
216
-		$fratrie = array_column($fratrie, 'id_rubrique');
217
-		$has = sql_allfetsel('DISTINCT id_parent', 'spip_rubriques', sql_in('id_parent', $fratrie));
218
-		$has = array_column($has, 'id_parent');
219
-		$fratrie = array_diff($fratrie, $has);
220
-
221
-		while (count($fratrie) and is_array($types) and count($types)) {
222
-			$type = array_shift($types);
223
-			$h = sql_allfetsel('DISTINCT id_rubrique', table_objet_sql($type), sql_in('id_rubrique', $fratrie));
224
-			$h = array_column($h, 'id_rubrique');
225
-			$has = array_merge($has, $h);
226
-			$fratrie = array_diff($fratrie, $h);
227
-		}
228
-
229
-		if (count($has)) {
230
-			$has_child = $has_child + array_combine($has, array_pad([], count($has), true));
231
-		}
232
-		if (count($fratrie)) {
233
-			$has_child = $has_child + array_combine($fratrie, array_pad([], count($fratrie), false));
234
-		}
235
-	}
236
-
237
-	return $has_child[$id_rubrique] ? ' ' : '';
208
+    static $has_child = [];
209
+
210
+    if (!isset($has_child[$id_rubrique])) {
211
+        $types = (is_array($types) ? array_filter($types) : []);
212
+
213
+        // recuperer tous les freres et soeurs de la rubrique visee
214
+        $id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
215
+        $fratrie = sql_allfetsel('id_rubrique', 'spip_rubriques', 'id_parent=' . intval($id_parent));
216
+        $fratrie = array_column($fratrie, 'id_rubrique');
217
+        $has = sql_allfetsel('DISTINCT id_parent', 'spip_rubriques', sql_in('id_parent', $fratrie));
218
+        $has = array_column($has, 'id_parent');
219
+        $fratrie = array_diff($fratrie, $has);
220
+
221
+        while (count($fratrie) and is_array($types) and count($types)) {
222
+            $type = array_shift($types);
223
+            $h = sql_allfetsel('DISTINCT id_rubrique', table_objet_sql($type), sql_in('id_rubrique', $fratrie));
224
+            $h = array_column($h, 'id_rubrique');
225
+            $has = array_merge($has, $h);
226
+            $fratrie = array_diff($fratrie, $h);
227
+        }
228
+
229
+        if (count($has)) {
230
+            $has_child = $has_child + array_combine($has, array_pad([], count($has), true));
231
+        }
232
+        if (count($fratrie)) {
233
+            $has_child = $has_child + array_combine($fratrie, array_pad([], count($fratrie), false));
234
+        }
235
+    }
236
+
237
+    return $has_child[$id_rubrique] ? ' ' : '';
238 238
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -158,7 +158,7 @@  discard block
 block discarded – undo
158 158
 
159 159
 	// si id numerique et un seul objet possible, pas d'ambiguite
160 160
 	if (is_numeric($ref) and count($objets) === 1) {
161
-		$ref = reset($objets) . $ref;
161
+		$ref = reset($objets).$ref;
162 162
 	}
163 163
 
164 164
 	// Si la référence ne correspond à rien, c'est fini
@@ -166,7 +166,7 @@  discard block
 block discarded – undo
166 166
 		return json_export(false);
167 167
 	}
168 168
 	// Sinon on récupère les infos utiles
169
-	@list($type, , $id, , , , ) = $match;
169
+	@list($type,, $id,,,,) = $match;
170 170
 
171 171
 	// On regarde si le type trouvé fait partie des objets sélectionnables
172 172
 	if (!in_array(table_objet($type), $objets)) {
@@ -211,8 +211,8 @@  discard block
 block discarded – undo
211 211
 		$types = (is_array($types) ? array_filter($types) : []);
212 212
 
213 213
 		// recuperer tous les freres et soeurs de la rubrique visee
214
-		$id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
215
-		$fratrie = sql_allfetsel('id_rubrique', 'spip_rubriques', 'id_parent=' . intval($id_parent));
214
+		$id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique));
215
+		$fratrie = sql_allfetsel('id_rubrique', 'spip_rubriques', 'id_parent='.intval($id_parent));
216 216
 		$fratrie = array_column($fratrie, 'id_rubrique');
217 217
 		$has = sql_allfetsel('DISTINCT id_parent', 'spip_rubriques', sql_in('id_parent', $fratrie));
218 218
 		$has = array_column($has, 'id_parent');
Please login to merge, or discard this patch.
ecrire/inc/session.php 2 patches
Indentation   +462 added lines, -462 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
  */
20 20
 
21 21
 if (!defined('_ECRIRE_INC_VERSION')) {
22
-	return;
22
+    return;
23 23
 }
24 24
 
25 25
 
@@ -40,15 +40,15 @@  discard block
 block discarded – undo
40 40
  * @return bool|null|void
41 41
  */
42 42
 function inc_session_dist($auteur = false) {
43
-	if (is_numeric($auteur)) {
44
-		return supprimer_sessions($auteur, $auteur > 0);
45
-	} else {
46
-		if (is_array($auteur)) {
47
-			return ajouter_session($auteur);
48
-		} else {
49
-			return verifier_session($auteur);
50
-		}
51
-	}
43
+    if (is_numeric($auteur)) {
44
+        return supprimer_sessions($auteur, $auteur > 0);
45
+    } else {
46
+        if (is_array($auteur)) {
47
+            return ajouter_session($auteur);
48
+        } else {
49
+            return verifier_session($auteur);
50
+        }
51
+    }
52 52
 }
53 53
 
54 54
 
@@ -77,36 +77,36 @@  discard block
 block discarded – undo
77 77
  */
78 78
 function supprimer_sessions($id_auteur, $toutes = true, $actives = true) {
79 79
 
80
-	$nb_files = 0;
81
-	$nb_max_files = (defined('_MAX_NB_SESSIONS_OUVERTES') ? _MAX_NB_SESSIONS_OUVERTES : 1000);
82
-	spip_log("supprimer sessions auteur $id_auteur", 'session');
83
-	if ($toutes or $id_auteur !== $GLOBALS['visiteur_session']['id_auteur']) {
84
-		if ($dir = opendir(_DIR_SESSIONS)) {
85
-			$t = $_SERVER['REQUEST_TIME']  - (4 * _RENOUVELLE_ALEA); // 48h par defaut
86
-			$t_short = $_SERVER['REQUEST_TIME']  - max(_RENOUVELLE_ALEA / 4, 3 * 3600); // 3h par defaut
87
-			$t = time() - (4 * _RENOUVELLE_ALEA);
88
-			while (($f = readdir($dir)) !== false) {
89
-				$nb_files++;
90
-				if (preg_match(',^[^\d-]*(-?\d+)_\w{32}\.php[3]?$,', $f, $regs)) {
91
-					$f = _DIR_SESSIONS . $f;
92
-					if (($actives and $regs[1] == $id_auteur) or ($t > filemtime($f))) {
93
-						spip_unlink($f);
94
-					}
95
-					// si il y a trop de sessions ouvertes, on purge les sessions anonymes de plus de 3H
96
-					// cf http://core.spip.org/issues/3276
97
-					elseif ($nb_files > $nb_max_files and !intval($regs[1]) and ($t_short > filemtime($f))) {
98
-						spip_unlink($f);
99
-					}
100
-				}
101
-			}
102
-		}
103
-	} else {
104
-		verifier_session();
105
-		spip_unlink(fichier_session('alea_ephemere', true));
106
-	}
107
-
108
-	// forcer le recalcul de la session courante
109
-	spip_session(true);
80
+    $nb_files = 0;
81
+    $nb_max_files = (defined('_MAX_NB_SESSIONS_OUVERTES') ? _MAX_NB_SESSIONS_OUVERTES : 1000);
82
+    spip_log("supprimer sessions auteur $id_auteur", 'session');
83
+    if ($toutes or $id_auteur !== $GLOBALS['visiteur_session']['id_auteur']) {
84
+        if ($dir = opendir(_DIR_SESSIONS)) {
85
+            $t = $_SERVER['REQUEST_TIME']  - (4 * _RENOUVELLE_ALEA); // 48h par defaut
86
+            $t_short = $_SERVER['REQUEST_TIME']  - max(_RENOUVELLE_ALEA / 4, 3 * 3600); // 3h par defaut
87
+            $t = time() - (4 * _RENOUVELLE_ALEA);
88
+            while (($f = readdir($dir)) !== false) {
89
+                $nb_files++;
90
+                if (preg_match(',^[^\d-]*(-?\d+)_\w{32}\.php[3]?$,', $f, $regs)) {
91
+                    $f = _DIR_SESSIONS . $f;
92
+                    if (($actives and $regs[1] == $id_auteur) or ($t > filemtime($f))) {
93
+                        spip_unlink($f);
94
+                    }
95
+                    // si il y a trop de sessions ouvertes, on purge les sessions anonymes de plus de 3H
96
+                    // cf http://core.spip.org/issues/3276
97
+                    elseif ($nb_files > $nb_max_files and !intval($regs[1]) and ($t_short > filemtime($f))) {
98
+                        spip_unlink($f);
99
+                    }
100
+                }
101
+            }
102
+        }
103
+    } else {
104
+        verifier_session();
105
+        spip_unlink(fichier_session('alea_ephemere', true));
106
+    }
107
+
108
+    // forcer le recalcul de la session courante
109
+    spip_session(true);
110 110
 }
111 111
 
112 112
 /**
@@ -124,125 +124,125 @@  discard block
 block discarded – undo
124 124
  * @return bool|string
125 125
  */
126 126
 function ajouter_session($auteur) {
127
-	// Si le client a deja une session valide pour son id_auteur
128
-	// on conserve le meme fichier
129
-
130
-	// Attention un visiteur peut avoir une session et un id=0,
131
-	// => ne pas melanger les sessions des differents visiteurs
132
-	$id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0;
133
-
134
-	// Si ce n'est pas un inscrit (les inscrits ont toujours des choses en session)
135
-	// on va vérifier s'il y a vraiment des choses à écrire
136
-	if (!$id_auteur) {
137
-		// On supprime les données de base pour voir le contenu réel de la session
138
-		$auteur_verif = $auteur;
139
-		if (isset($auteur_verif['id_auteur'])) {
140
-			unset($auteur_verif['id_auteur']);
141
-		}
142
-		if (isset($auteur_verif['hash_env'])) {
143
-			unset($auteur_verif['hash_env']);
144
-		}
145
-		if (isset($auteur_verif['ip_change'])) {
146
-			unset($auteur_verif['ip_change']);
147
-		}
148
-		if (isset($auteur_verif['date_session'])) {
149
-			unset($auteur_verif['date_session']);
150
-		}
151
-
152
-		// Les variables vraiment nulle ne sont pas à prendre en compte non plus
153
-		foreach ($auteur_verif as $variable => $valeur) {
154
-			if ($valeur === null) {
155
-				unset($auteur_verif[$variable]);
156
-			}
157
-		}
158
-
159
-		// Si après ça la session est vide alors on supprime l'éventuel fichier et on arrête là
160
-		if (!$auteur_verif) {
161
-			if (isset($_COOKIE['spip_session']) and isset($_SESSION[$_COOKIE['spip_session']])) {
162
-				unset($_SESSION[$_COOKIE['spip_session']]);
163
-			}
164
-			if (isset($_COOKIE['spip_session'])) {
165
-				unset($_COOKIE['spip_session']);
166
-			}
167
-
168
-			return false;
169
-		}
170
-	}
171
-
172
-	if (
173
-		!isset($_COOKIE['spip_session'])
174
-		or !preg_match(',^' . $id_auteur . '_,', $_COOKIE['spip_session'])
175
-	) {
176
-		$_COOKIE['spip_session'] = $id_auteur . '_' . md5(uniqid(rand(), true));
177
-	}
178
-
179
-	// Maintenant on sait qu'on a des choses à écrire
180
-	// On s'assure d'avoir au moins ces valeurs
181
-	$auteur['id_auteur'] = $id_auteur;
182
-	if (!isset($auteur['hash_env'])) {
183
-		$auteur['hash_env'] = hash_env();
184
-	}
185
-	if (!isset($auteur['ip_change'])) {
186
-		$auteur['ip_change'] = false;
187
-	}
188
-
189
-	if (!isset($auteur['date_session'])) {
190
-		$auteur['date_session'] = time();
191
-	}
192
-	if (
193
-		isset($auteur['prefs'])
194
-		and is_string($auteur['prefs'])
195
-		and $prefs = @unserialize($auteur['prefs'])
196
-	) {
197
-		$auteur['prefs'] = $prefs;
198
-	}
199
-
200
-	$fichier_session = '';
201
-
202
-	// les sessions anonymes sont stockees dans $_SESSION
203
-	if (!$id_auteur) {
204
-		spip_php_session_start();
205
-		$_SESSION[$_COOKIE['spip_session']] = preparer_ecriture_session($auteur);
206
-	} else {
207
-		$fichier_session = fichier_session('alea_ephemere');
208
-		if (!ecrire_fichier_session($fichier_session, $auteur)) {
209
-			spip_log('Echec ecriture fichier session ' . $fichier_session, 'session' . _LOG_HS);
210
-			include_spip('inc/minipres');
211
-			echo minipres();
212
-			exit;
213
-		}
214
-		// verifier et limiter le nombre maxi de sessions
215
-		// https://core.spip.net/issues/3807
216
-		lister_sessions_auteur($id_auteur);
217
-	}
218
-
219
-	// poser le cookie de session SPIP
220
-	include_spip('inc/cookie');
221
-	$duree = definir_duree_cookie_session($auteur);
222
-	spip_setcookie('spip_session', $_COOKIE['spip_session'], [
223
-		'expires' => time() + $duree
224
-	]);
225
-	spip_log("ajoute session $fichier_session cookie $duree", 'session');
226
-
227
-	// Si on est admin, poser le cookie de correspondance
228
-	if (!function_exists('autoriser')) {
229
-		include_spip('inc/autoriser');
230
-	}
231
-	if (autoriser('ecrire', '', '', $auteur) and _DUREE_COOKIE_ADMIN) {
232
-		spip_setcookie('spip_admin', '@' . ($auteur['email'] ?: $auteur['login']), [
233
-			'expires' => time() + max(_DUREE_COOKIE_ADMIN, $duree)
234
-		]);
235
-	} // sinon le supprimer ...
236
-	else {
237
-		spip_setcookie('spip_admin', '', [
238
-			'expires' => 1
239
-		]);
240
-	}
241
-
242
-	# on en profite pour purger les vieilles sessions anonymes abandonnees
243
-	# supprimer_sessions(0, true, false);
244
-
245
-	return $_COOKIE['spip_session'];
127
+    // Si le client a deja une session valide pour son id_auteur
128
+    // on conserve le meme fichier
129
+
130
+    // Attention un visiteur peut avoir une session et un id=0,
131
+    // => ne pas melanger les sessions des differents visiteurs
132
+    $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0;
133
+
134
+    // Si ce n'est pas un inscrit (les inscrits ont toujours des choses en session)
135
+    // on va vérifier s'il y a vraiment des choses à écrire
136
+    if (!$id_auteur) {
137
+        // On supprime les données de base pour voir le contenu réel de la session
138
+        $auteur_verif = $auteur;
139
+        if (isset($auteur_verif['id_auteur'])) {
140
+            unset($auteur_verif['id_auteur']);
141
+        }
142
+        if (isset($auteur_verif['hash_env'])) {
143
+            unset($auteur_verif['hash_env']);
144
+        }
145
+        if (isset($auteur_verif['ip_change'])) {
146
+            unset($auteur_verif['ip_change']);
147
+        }
148
+        if (isset($auteur_verif['date_session'])) {
149
+            unset($auteur_verif['date_session']);
150
+        }
151
+
152
+        // Les variables vraiment nulle ne sont pas à prendre en compte non plus
153
+        foreach ($auteur_verif as $variable => $valeur) {
154
+            if ($valeur === null) {
155
+                unset($auteur_verif[$variable]);
156
+            }
157
+        }
158
+
159
+        // Si après ça la session est vide alors on supprime l'éventuel fichier et on arrête là
160
+        if (!$auteur_verif) {
161
+            if (isset($_COOKIE['spip_session']) and isset($_SESSION[$_COOKIE['spip_session']])) {
162
+                unset($_SESSION[$_COOKIE['spip_session']]);
163
+            }
164
+            if (isset($_COOKIE['spip_session'])) {
165
+                unset($_COOKIE['spip_session']);
166
+            }
167
+
168
+            return false;
169
+        }
170
+    }
171
+
172
+    if (
173
+        !isset($_COOKIE['spip_session'])
174
+        or !preg_match(',^' . $id_auteur . '_,', $_COOKIE['spip_session'])
175
+    ) {
176
+        $_COOKIE['spip_session'] = $id_auteur . '_' . md5(uniqid(rand(), true));
177
+    }
178
+
179
+    // Maintenant on sait qu'on a des choses à écrire
180
+    // On s'assure d'avoir au moins ces valeurs
181
+    $auteur['id_auteur'] = $id_auteur;
182
+    if (!isset($auteur['hash_env'])) {
183
+        $auteur['hash_env'] = hash_env();
184
+    }
185
+    if (!isset($auteur['ip_change'])) {
186
+        $auteur['ip_change'] = false;
187
+    }
188
+
189
+    if (!isset($auteur['date_session'])) {
190
+        $auteur['date_session'] = time();
191
+    }
192
+    if (
193
+        isset($auteur['prefs'])
194
+        and is_string($auteur['prefs'])
195
+        and $prefs = @unserialize($auteur['prefs'])
196
+    ) {
197
+        $auteur['prefs'] = $prefs;
198
+    }
199
+
200
+    $fichier_session = '';
201
+
202
+    // les sessions anonymes sont stockees dans $_SESSION
203
+    if (!$id_auteur) {
204
+        spip_php_session_start();
205
+        $_SESSION[$_COOKIE['spip_session']] = preparer_ecriture_session($auteur);
206
+    } else {
207
+        $fichier_session = fichier_session('alea_ephemere');
208
+        if (!ecrire_fichier_session($fichier_session, $auteur)) {
209
+            spip_log('Echec ecriture fichier session ' . $fichier_session, 'session' . _LOG_HS);
210
+            include_spip('inc/minipres');
211
+            echo minipres();
212
+            exit;
213
+        }
214
+        // verifier et limiter le nombre maxi de sessions
215
+        // https://core.spip.net/issues/3807
216
+        lister_sessions_auteur($id_auteur);
217
+    }
218
+
219
+    // poser le cookie de session SPIP
220
+    include_spip('inc/cookie');
221
+    $duree = definir_duree_cookie_session($auteur);
222
+    spip_setcookie('spip_session', $_COOKIE['spip_session'], [
223
+        'expires' => time() + $duree
224
+    ]);
225
+    spip_log("ajoute session $fichier_session cookie $duree", 'session');
226
+
227
+    // Si on est admin, poser le cookie de correspondance
228
+    if (!function_exists('autoriser')) {
229
+        include_spip('inc/autoriser');
230
+    }
231
+    if (autoriser('ecrire', '', '', $auteur) and _DUREE_COOKIE_ADMIN) {
232
+        spip_setcookie('spip_admin', '@' . ($auteur['email'] ?: $auteur['login']), [
233
+            'expires' => time() + max(_DUREE_COOKIE_ADMIN, $duree)
234
+        ]);
235
+    } // sinon le supprimer ...
236
+    else {
237
+        spip_setcookie('spip_admin', '', [
238
+            'expires' => 1
239
+        ]);
240
+    }
241
+
242
+    # on en profite pour purger les vieilles sessions anonymes abandonnees
243
+    # supprimer_sessions(0, true, false);
244
+
245
+    return $_COOKIE['spip_session'];
246 246
 }
247 247
 
248 248
 /**
@@ -262,15 +262,15 @@  discard block
 block discarded – undo
262 262
  *     Durée en secondes
263 263
 **/
264 264
 function definir_duree_cookie_session($auteur) {
265
-	$coef = 2;
266
-	if (isset($auteur['cookie'])) {
267
-		if (is_numeric($auteur['cookie'])) {
268
-			$coef = $auteur['cookie'];
269
-		} else {
270
-			$coef = 20;
271
-		}
272
-	}
273
-	return (int)(_RENOUVELLE_ALEA * $coef);
265
+    $coef = 2;
266
+    if (isset($auteur['cookie'])) {
267
+        if (is_numeric($auteur['cookie'])) {
268
+            $coef = $auteur['cookie'];
269
+        } else {
270
+            $coef = 20;
271
+        }
272
+    }
273
+    return (int)(_RENOUVELLE_ALEA * $coef);
274 274
 }
275 275
 
276 276
 /**
@@ -290,91 +290,91 @@  discard block
 block discarded – undo
290 290
  * @return bool|int|null
291 291
  */
292 292
 function verifier_session($change = false) {
293
-	// si pas de cookie, c'est fichu
294
-	if (!isset($_COOKIE['spip_session'])) {
295
-		return false;
296
-	}
297
-
298
-	$fichier_session = '';
299
-
300
-	// est-ce une session anonyme ?
301
-	if (!intval($_COOKIE['spip_session'])) {
302
-		spip_php_session_start();
303
-		if (!isset($_SESSION[$_COOKIE['spip_session']]) or !is_array($_SESSION[$_COOKIE['spip_session']])) {
304
-			return false;
305
-		}
306
-		$GLOBALS['visiteur_session'] = $_SESSION[$_COOKIE['spip_session']];
307
-	} else {
308
-		// Tester avec alea courant
309
-		$fichier_session = fichier_session('alea_ephemere', true);
310
-		if ($fichier_session and @file_exists($fichier_session)) {
311
-			include($fichier_session);
312
-		} else {
313
-			// Sinon, tester avec alea precedent
314
-			$fichier_session = fichier_session('alea_ephemere_ancien', true);
315
-			if (!$fichier_session or !@file_exists($fichier_session)) {
316
-				return false;
317
-			}
318
-
319
-			// Renouveler la session avec l'alea courant
320
-			include($fichier_session);
321
-			spip_log('renouvelle session ' . $GLOBALS['visiteur_session']['id_auteur'], 'session');
322
-			spip_unlink($fichier_session);
323
-			ajouter_session($GLOBALS['visiteur_session']);
324
-		}
325
-	}
326
-
327
-	// Compatibilite ascendante : auteur_session est visiteur_session si
328
-	// c'est un auteur SPIP authentifie (tandis qu'un visiteur_session peut
329
-	// n'etre qu'identifie, sans aucune authentification).
330
-
331
-	if (isset($GLOBALS['visiteur_session']['id_auteur']) and $GLOBALS['visiteur_session']['id_auteur']) {
332
-		$GLOBALS['auteur_session'] = &$GLOBALS['visiteur_session'];
333
-	}
334
-
335
-
336
-	// Si l'adresse IP change, inc/presentation mettra une balise image
337
-	// avec un URL de rappel demandant a changer le nom de la session.
338
-	// Seul celui qui a l'IP d'origine est rejoue
339
-	// ainsi un eventuel voleur de cookie ne pourrait pas deconnecter
340
-	// sa victime, mais se ferait deconnecter par elle.
341
-	if (hash_env() != $GLOBALS['visiteur_session']['hash_env']) {
342
-		if (!$GLOBALS['visiteur_session']['ip_change']) {
343
-			define('_SESSION_REJOUER', true);
344
-			$GLOBALS['visiteur_session']['ip_change'] = true;
345
-			ajouter_session($GLOBALS['visiteur_session']);
346
-		} else {
347
-			if ($change) {
348
-				spip_log('session non rejouee, vol de cookie ?', 'session');
349
-			}
350
-		}
351
-	} else {
352
-		if ($change) {
353
-			spip_log("rejoue session $fichier_session " . $_COOKIE['spip_session'], 'session');
354
-			if ($fichier_session) {
355
-				spip_unlink($fichier_session);
356
-			}
357
-			$GLOBALS['visiteur_session']['ip_change'] = false;
358
-			unset($_COOKIE['spip_session']);
359
-			ajouter_session($GLOBALS['visiteur_session']);
360
-		}
361
-	}
362
-
363
-	// Si la session a ete initiee il y a trop longtemps, elle est annulee
364
-	if (
365
-		isset($GLOBALS['visiteur_session'])
366
-		and defined('_AGE_SESSION_MAX')
367
-		and _AGE_SESSION_MAX > 0
368
-		and time() - @$GLOBALS['visiteur_session']['date_session'] > _AGE_SESSION_MAX
369
-	) {
370
-		unset($GLOBALS['visiteur_session']);
371
-
372
-		return false;
373
-	}
374
-
375
-	return is_numeric($GLOBALS['visiteur_session']['id_auteur'])
376
-		? $GLOBALS['visiteur_session']['id_auteur']
377
-		: null;
293
+    // si pas de cookie, c'est fichu
294
+    if (!isset($_COOKIE['spip_session'])) {
295
+        return false;
296
+    }
297
+
298
+    $fichier_session = '';
299
+
300
+    // est-ce une session anonyme ?
301
+    if (!intval($_COOKIE['spip_session'])) {
302
+        spip_php_session_start();
303
+        if (!isset($_SESSION[$_COOKIE['spip_session']]) or !is_array($_SESSION[$_COOKIE['spip_session']])) {
304
+            return false;
305
+        }
306
+        $GLOBALS['visiteur_session'] = $_SESSION[$_COOKIE['spip_session']];
307
+    } else {
308
+        // Tester avec alea courant
309
+        $fichier_session = fichier_session('alea_ephemere', true);
310
+        if ($fichier_session and @file_exists($fichier_session)) {
311
+            include($fichier_session);
312
+        } else {
313
+            // Sinon, tester avec alea precedent
314
+            $fichier_session = fichier_session('alea_ephemere_ancien', true);
315
+            if (!$fichier_session or !@file_exists($fichier_session)) {
316
+                return false;
317
+            }
318
+
319
+            // Renouveler la session avec l'alea courant
320
+            include($fichier_session);
321
+            spip_log('renouvelle session ' . $GLOBALS['visiteur_session']['id_auteur'], 'session');
322
+            spip_unlink($fichier_session);
323
+            ajouter_session($GLOBALS['visiteur_session']);
324
+        }
325
+    }
326
+
327
+    // Compatibilite ascendante : auteur_session est visiteur_session si
328
+    // c'est un auteur SPIP authentifie (tandis qu'un visiteur_session peut
329
+    // n'etre qu'identifie, sans aucune authentification).
330
+
331
+    if (isset($GLOBALS['visiteur_session']['id_auteur']) and $GLOBALS['visiteur_session']['id_auteur']) {
332
+        $GLOBALS['auteur_session'] = &$GLOBALS['visiteur_session'];
333
+    }
334
+
335
+
336
+    // Si l'adresse IP change, inc/presentation mettra une balise image
337
+    // avec un URL de rappel demandant a changer le nom de la session.
338
+    // Seul celui qui a l'IP d'origine est rejoue
339
+    // ainsi un eventuel voleur de cookie ne pourrait pas deconnecter
340
+    // sa victime, mais se ferait deconnecter par elle.
341
+    if (hash_env() != $GLOBALS['visiteur_session']['hash_env']) {
342
+        if (!$GLOBALS['visiteur_session']['ip_change']) {
343
+            define('_SESSION_REJOUER', true);
344
+            $GLOBALS['visiteur_session']['ip_change'] = true;
345
+            ajouter_session($GLOBALS['visiteur_session']);
346
+        } else {
347
+            if ($change) {
348
+                spip_log('session non rejouee, vol de cookie ?', 'session');
349
+            }
350
+        }
351
+    } else {
352
+        if ($change) {
353
+            spip_log("rejoue session $fichier_session " . $_COOKIE['spip_session'], 'session');
354
+            if ($fichier_session) {
355
+                spip_unlink($fichier_session);
356
+            }
357
+            $GLOBALS['visiteur_session']['ip_change'] = false;
358
+            unset($_COOKIE['spip_session']);
359
+            ajouter_session($GLOBALS['visiteur_session']);
360
+        }
361
+    }
362
+
363
+    // Si la session a ete initiee il y a trop longtemps, elle est annulee
364
+    if (
365
+        isset($GLOBALS['visiteur_session'])
366
+        and defined('_AGE_SESSION_MAX')
367
+        and _AGE_SESSION_MAX > 0
368
+        and time() - @$GLOBALS['visiteur_session']['date_session'] > _AGE_SESSION_MAX
369
+    ) {
370
+        unset($GLOBALS['visiteur_session']);
371
+
372
+        return false;
373
+    }
374
+
375
+    return is_numeric($GLOBALS['visiteur_session']['id_auteur'])
376
+        ? $GLOBALS['visiteur_session']['id_auteur']
377
+        : null;
378 378
 }
379 379
 
380 380
 /**
@@ -389,7 +389,7 @@  discard block
 block discarded – undo
389 389
  *     Valeur, si trouvée, `null` sinon.
390 390
  */
391 391
 function session_get($nom) {
392
-	return isset($GLOBALS['visiteur_session'][$nom]) ? $GLOBALS['visiteur_session'][$nom] : null;
392
+    return isset($GLOBALS['visiteur_session'][$nom]) ? $GLOBALS['visiteur_session'][$nom] : null;
393 393
 }
394 394
 
395 395
 
@@ -405,32 +405,32 @@  discard block
 block discarded – undo
405 405
  * @return void|array
406 406
  */
407 407
 function session_set($nom, $val = null) {
408
-	static $remove = [];
409
-	static $actualiser_sessions = false;
410
-	if ($nom === false) {
411
-		return $remove;
412
-	}
413
-	if (is_null($val)) {
414
-		// rien a faire
415
-		if (!isset($GLOBALS['visiteur_session'][$nom])) {
416
-			return;
417
-		}
418
-		unset($GLOBALS['visiteur_session'][$nom]);
419
-		$remove[] = $nom;
420
-	} else {
421
-		// On ajoute la valeur dans la globale
422
-		$GLOBALS['visiteur_session'][$nom] = $val;
423
-		if ($remove) {
424
-			$remove = array_diff($remove, [$nom]);
425
-		}
426
-	}
427
-	if (!$actualiser_sessions) {
428
-		// il faut creer la session si on en a pas, la premiere fois
429
-		ajouter_session($GLOBALS['visiteur_session']);
430
-		// in register la fonction qui mettra a jour toutes les sessions en fin de hit
431
-		register_shutdown_function('terminer_actualiser_sessions');
432
-		$actualiser_sessions = true;
433
-	}
408
+    static $remove = [];
409
+    static $actualiser_sessions = false;
410
+    if ($nom === false) {
411
+        return $remove;
412
+    }
413
+    if (is_null($val)) {
414
+        // rien a faire
415
+        if (!isset($GLOBALS['visiteur_session'][$nom])) {
416
+            return;
417
+        }
418
+        unset($GLOBALS['visiteur_session'][$nom]);
419
+        $remove[] = $nom;
420
+    } else {
421
+        // On ajoute la valeur dans la globale
422
+        $GLOBALS['visiteur_session'][$nom] = $val;
423
+        if ($remove) {
424
+            $remove = array_diff($remove, [$nom]);
425
+        }
426
+    }
427
+    if (!$actualiser_sessions) {
428
+        // il faut creer la session si on en a pas, la premiere fois
429
+        ajouter_session($GLOBALS['visiteur_session']);
430
+        // in register la fonction qui mettra a jour toutes les sessions en fin de hit
431
+        register_shutdown_function('terminer_actualiser_sessions');
432
+        $actualiser_sessions = true;
433
+    }
434 434
 }
435 435
 
436 436
 /**
@@ -439,12 +439,12 @@  discard block
 block discarded – undo
439 439
  * @uses actualiser_sessions()
440 440
  */
441 441
 function terminer_actualiser_sessions() {
442
-	// se remettre dans le dossier de travail au cas ou Apache a change
443
-	chdir(_ROOT_CWD);
444
-	// recuperer les variables a effacer
445
-	$remove = session_set(false);
446
-	// mettre a jour toutes les sessions
447
-	actualiser_sessions($GLOBALS['visiteur_session'], $remove);
442
+    // se remettre dans le dossier de travail au cas ou Apache a change
443
+    chdir(_ROOT_CWD);
444
+    // recuperer les variables a effacer
445
+    $remove = session_set(false);
446
+    // mettre a jour toutes les sessions
447
+    actualiser_sessions($GLOBALS['visiteur_session'], $remove);
448 448
 }
449 449
 
450 450
 
@@ -469,83 +469,83 @@  discard block
 block discarded – undo
469 469
  */
470 470
 function actualiser_sessions($auteur, $supprimer_cles = []) {
471 471
 
472
-	$id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0;
473
-	$id_auteur_courant = isset($GLOBALS['visiteur_session']['id_auteur']) ? intval($GLOBALS['visiteur_session']['id_auteur']) : 0;
474
-
475
-	// si l'auteur est celui de la session courante, verifier/creer la session si besoin
476
-	$fichier_session_courante = '';
477
-	if ($id_auteur == $id_auteur_courant) {
478
-		$auteur = array_merge($GLOBALS['visiteur_session'], $auteur);
479
-		ajouter_session($auteur);
480
-		if ($id_auteur) {
481
-			$fichier_session_courante = fichier_session('alea_ephemere');
482
-		}
483
-	}
484
-
485
-	// si session anonyme on ne fait rien d'autre ici : les sessions anonymes sont non partagees
486
-	if (!$id_auteur) {
487
-		return;
488
-	}
489
-
490
-	// les préférences sont désérialisées, toujours.
491
-	// [fixme] Le champ 'prefs' sert aussi à l’inscription
492
-	if (isset($auteur['prefs']) and is_string($auteur['prefs'])) {
493
-		$auteur['prefs'] = @unserialize($auteur['prefs']);
494
-		if (!is_array($auteur['prefs'])) {
495
-			$auteur['prefs'] = [];
496
-		}
497
-	}
498
-
499
-	// memoriser l'auteur courant (celui qui modifie la fiche)
500
-	$sauve = $GLOBALS['visiteur_session'];
501
-
502
-	// .. mettre a jour les sessions de l'auteur cible
503
-	// attention au $ final pour ne pas risquer d'embarquer un .php.jeton temporaire
504
-	// cree par une ecriture concurente d'une session (fichier atomique temporaire)
505
-	$sessions = lister_sessions_auteur($id_auteur);
506
-
507
-	// 1ere passe : lire et fusionner les sessions
508
-	foreach ($sessions as $session) {
509
-		$GLOBALS['visiteur_session'] = [];
510
-		// a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence)
511
-		if (
512
-			$session !== $fichier_session_courante
513
-			and @file_exists($session)
514
-		) {
515
-			include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible
516
-
517
-			$auteur = array_merge($GLOBALS['visiteur_session'], $auteur);
518
-		}
519
-	}
520
-
521
-	// supprimer les eventuelles cles dont on ne veut plus
522
-	foreach ($supprimer_cles as $cle) {
523
-		unset($auteur[$cle]);
524
-	}
525
-
526
-	$auteur_session = preparer_ecriture_session($auteur);
527
-
528
-	// seconde passe : ecrire les sessions qui ne sont pas a jour
529
-	foreach ($sessions as $session) {
530
-		$GLOBALS['visiteur_session'] = [];
531
-		// a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence)
532
-		if (@file_exists($session)) {
533
-			include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible
534
-
535
-			// est-ce que cette session est a mettre a jour ?
536
-			if ($auteur_session != $GLOBALS['visiteur_session']) {
537
-				ecrire_fichier_session($session, $auteur);
538
-			}
539
-		}
540
-	}
541
-
542
-	if ($id_auteur == $id_auteur_courant) {
543
-		$GLOBALS['visiteur_session'] = $auteur;
544
-		$GLOBALS['auteur_session'] = &$GLOBALS['visiteur_session'];
545
-	} else {
546
-		// restaurer l'auteur courant
547
-		$GLOBALS['visiteur_session'] = $sauve;
548
-	}
472
+    $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0;
473
+    $id_auteur_courant = isset($GLOBALS['visiteur_session']['id_auteur']) ? intval($GLOBALS['visiteur_session']['id_auteur']) : 0;
474
+
475
+    // si l'auteur est celui de la session courante, verifier/creer la session si besoin
476
+    $fichier_session_courante = '';
477
+    if ($id_auteur == $id_auteur_courant) {
478
+        $auteur = array_merge($GLOBALS['visiteur_session'], $auteur);
479
+        ajouter_session($auteur);
480
+        if ($id_auteur) {
481
+            $fichier_session_courante = fichier_session('alea_ephemere');
482
+        }
483
+    }
484
+
485
+    // si session anonyme on ne fait rien d'autre ici : les sessions anonymes sont non partagees
486
+    if (!$id_auteur) {
487
+        return;
488
+    }
489
+
490
+    // les préférences sont désérialisées, toujours.
491
+    // [fixme] Le champ 'prefs' sert aussi à l’inscription
492
+    if (isset($auteur['prefs']) and is_string($auteur['prefs'])) {
493
+        $auteur['prefs'] = @unserialize($auteur['prefs']);
494
+        if (!is_array($auteur['prefs'])) {
495
+            $auteur['prefs'] = [];
496
+        }
497
+    }
498
+
499
+    // memoriser l'auteur courant (celui qui modifie la fiche)
500
+    $sauve = $GLOBALS['visiteur_session'];
501
+
502
+    // .. mettre a jour les sessions de l'auteur cible
503
+    // attention au $ final pour ne pas risquer d'embarquer un .php.jeton temporaire
504
+    // cree par une ecriture concurente d'une session (fichier atomique temporaire)
505
+    $sessions = lister_sessions_auteur($id_auteur);
506
+
507
+    // 1ere passe : lire et fusionner les sessions
508
+    foreach ($sessions as $session) {
509
+        $GLOBALS['visiteur_session'] = [];
510
+        // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence)
511
+        if (
512
+            $session !== $fichier_session_courante
513
+            and @file_exists($session)
514
+        ) {
515
+            include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible
516
+
517
+            $auteur = array_merge($GLOBALS['visiteur_session'], $auteur);
518
+        }
519
+    }
520
+
521
+    // supprimer les eventuelles cles dont on ne veut plus
522
+    foreach ($supprimer_cles as $cle) {
523
+        unset($auteur[$cle]);
524
+    }
525
+
526
+    $auteur_session = preparer_ecriture_session($auteur);
527
+
528
+    // seconde passe : ecrire les sessions qui ne sont pas a jour
529
+    foreach ($sessions as $session) {
530
+        $GLOBALS['visiteur_session'] = [];
531
+        // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence)
532
+        if (@file_exists($session)) {
533
+            include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible
534
+
535
+            // est-ce que cette session est a mettre a jour ?
536
+            if ($auteur_session != $GLOBALS['visiteur_session']) {
537
+                ecrire_fichier_session($session, $auteur);
538
+            }
539
+        }
540
+    }
541
+
542
+    if ($id_auteur == $id_auteur_courant) {
543
+        $GLOBALS['visiteur_session'] = $auteur;
544
+        $GLOBALS['auteur_session'] = &$GLOBALS['visiteur_session'];
545
+    } else {
546
+        // restaurer l'auteur courant
547
+        $GLOBALS['visiteur_session'] = $sauve;
548
+    }
549 549
 }
550 550
 
551 551
 /**
@@ -559,48 +559,48 @@  discard block
 block discarded – undo
559 559
  */
560 560
 function lister_sessions_auteur($id_auteur, $nb_max = null) {
561 561
 
562
-	if (is_null($nb_max)) {
563
-		if (!defined('_NB_SESSIONS_MAX')) {
564
-			define('_NB_SESSIONS_MAX', 100);
565
-		}
566
-		$nb_max = _NB_SESSIONS_MAX;
567
-	}
568
-
569
-	// liste des sessions
570
-	$sessions = preg_files(_DIR_SESSIONS, '/' . $id_auteur . '_.*\.php$');
571
-
572
-	// si on en a plus que la limite, supprimer les plus vieilles
573
-	// si ce ne sont pas des sessions anonymes car elles sont alors chacune differentes
574
-	if (
575
-		$id_auteur
576
-		and count($sessions) > $nb_max
577
-	) {
578
-		// limiter le nombre de sessions ouvertes par un auteur
579
-		// filemtime sur les sessions
580
-		$sessions = array_flip($sessions);
581
-
582
-		// 1ere passe : lire les filemtime
583
-		foreach ($sessions as $session => $z) {
584
-			if (
585
-				$d = @filemtime($session)
586
-			) {
587
-				$sessions[$session] = $d;
588
-			} else {
589
-				$sessions[$session] = 0;
590
-			}
591
-		}
592
-
593
-		// les plus anciennes en premier
594
-		asort($sessions);
595
-
596
-		$sessions = array_keys($sessions);
597
-		while (count($sessions) > $nb_max) {
598
-			$session = array_shift($sessions);
599
-			@unlink($session);
600
-		}
601
-	}
602
-
603
-	return $sessions;
562
+    if (is_null($nb_max)) {
563
+        if (!defined('_NB_SESSIONS_MAX')) {
564
+            define('_NB_SESSIONS_MAX', 100);
565
+        }
566
+        $nb_max = _NB_SESSIONS_MAX;
567
+    }
568
+
569
+    // liste des sessions
570
+    $sessions = preg_files(_DIR_SESSIONS, '/' . $id_auteur . '_.*\.php$');
571
+
572
+    // si on en a plus que la limite, supprimer les plus vieilles
573
+    // si ce ne sont pas des sessions anonymes car elles sont alors chacune differentes
574
+    if (
575
+        $id_auteur
576
+        and count($sessions) > $nb_max
577
+    ) {
578
+        // limiter le nombre de sessions ouvertes par un auteur
579
+        // filemtime sur les sessions
580
+        $sessions = array_flip($sessions);
581
+
582
+        // 1ere passe : lire les filemtime
583
+        foreach ($sessions as $session => $z) {
584
+            if (
585
+                $d = @filemtime($session)
586
+            ) {
587
+                $sessions[$session] = $d;
588
+            } else {
589
+                $sessions[$session] = 0;
590
+            }
591
+        }
592
+
593
+        // les plus anciennes en premier
594
+        asort($sessions);
595
+
596
+        $sessions = array_keys($sessions);
597
+        while (count($sessions) > $nb_max) {
598
+            $session = array_shift($sessions);
599
+            @unlink($session);
600
+        }
601
+    }
602
+
603
+    return $sessions;
604 604
 }
605 605
 
606 606
 
@@ -614,26 +614,26 @@  discard block
 block discarded – undo
614 614
  * @return array
615 615
  */
616 616
 function preparer_ecriture_session($auteur) {
617
-	$row = $auteur;
618
-
619
-	// ne pas enregistrer ces elements de securite
620
-	// dans le fichier de session
621
-	unset($auteur['pass']);
622
-	unset($auteur['htpass']);
623
-	unset($auteur['low_sec']);
624
-	unset($auteur['alea_actuel']);
625
-	unset($auteur['alea_futur']);
626
-
627
-	$auteur = pipeline('preparer_fichier_session', ['args' => ['row' => $row], 'data' => $auteur]);
628
-
629
-	// ne pas enregistrer les valeurs vraiment nulle dans le fichier
630
-	foreach ($auteur as $variable => $valeur) {
631
-		if ($valeur === null) {
632
-			unset($auteur[$variable]);
633
-		}
634
-	}
635
-
636
-	return $auteur;
617
+    $row = $auteur;
618
+
619
+    // ne pas enregistrer ces elements de securite
620
+    // dans le fichier de session
621
+    unset($auteur['pass']);
622
+    unset($auteur['htpass']);
623
+    unset($auteur['low_sec']);
624
+    unset($auteur['alea_actuel']);
625
+    unset($auteur['alea_futur']);
626
+
627
+    $auteur = pipeline('preparer_fichier_session', ['args' => ['row' => $row], 'data' => $auteur]);
628
+
629
+    // ne pas enregistrer les valeurs vraiment nulle dans le fichier
630
+    foreach ($auteur as $variable => $valeur) {
631
+        if ($valeur === null) {
632
+            unset($auteur[$variable]);
633
+        }
634
+    }
635
+
636
+    return $auteur;
637 637
 }
638 638
 
639 639
 /**
@@ -645,17 +645,17 @@  discard block
 block discarded – undo
645 645
  */
646 646
 function ecrire_fichier_session($fichier, $auteur) {
647 647
 
648
-	$auteur = preparer_ecriture_session($auteur);
648
+    $auteur = preparer_ecriture_session($auteur);
649 649
 
650
-	// enregistrer les autres donnees du visiteur
651
-	$texte = '<' . "?php\n";
652
-	foreach ($auteur as $var => $val) {
653
-		$texte .= '$GLOBALS[\'visiteur_session\'][' . var_export($var, true) . '] = '
654
-			. var_export($val, true) . ";\n";
655
-	}
656
-	$texte .= '?' . ">\n";
650
+    // enregistrer les autres donnees du visiteur
651
+    $texte = '<' . "?php\n";
652
+    foreach ($auteur as $var => $val) {
653
+        $texte .= '$GLOBALS[\'visiteur_session\'][' . var_export($var, true) . '] = '
654
+            . var_export($val, true) . ";\n";
655
+    }
656
+    $texte .= '?' . ">\n";
657 657
 
658
-	return ecrire_fichier($fichier, $texte);
658
+    return ecrire_fichier($fichier, $texte);
659 659
 }
660 660
 
661 661
 
@@ -668,23 +668,23 @@  discard block
 block discarded – undo
668 668
  */
669 669
 function fichier_session($alea, $tantpis = false) {
670 670
 
671
-	include_spip('inc/acces');
672
-	charger_aleas();
671
+    include_spip('inc/acces');
672
+    charger_aleas();
673 673
 
674
-	if (empty($GLOBALS['meta'][$alea])) {
675
-		if (!$tantpis) {
676
-			spip_log("fichier session ($tantpis): $alea indisponible", 'session');
677
-			include_spip('inc/minipres');
678
-			echo minipres();
679
-		}
674
+    if (empty($GLOBALS['meta'][$alea])) {
675
+        if (!$tantpis) {
676
+            spip_log("fichier session ($tantpis): $alea indisponible", 'session');
677
+            include_spip('inc/minipres');
678
+            echo minipres();
679
+        }
680 680
 
681
-		return ''; // echec mais $tanpis
682
-	} else {
683
-		$repertoire = sous_repertoire(_DIR_SESSIONS, '', false, $tantpis);
684
-		$c = $_COOKIE['spip_session'];
681
+        return ''; // echec mais $tanpis
682
+    } else {
683
+        $repertoire = sous_repertoire(_DIR_SESSIONS, '', false, $tantpis);
684
+        $c = $_COOKIE['spip_session'];
685 685
 
686
-		return $repertoire . intval($c) . '_' . md5($c . ' ' . $GLOBALS['meta'][$alea]) . '.php';
687
-	}
686
+        return $repertoire . intval($c) . '_' . md5($c . ' ' . $GLOBALS['meta'][$alea]) . '.php';
687
+    }
688 688
 }
689 689
 
690 690
 
@@ -701,7 +701,7 @@  discard block
 block discarded – undo
701 701
  * @return string
702 702
  */
703 703
 function rejouer_session() {
704
-	return '<img src="' . generer_url_action('cookie', 'change_session=oui', true) . '" width="0" height="0" alt="" />';
704
+    return '<img src="' . generer_url_action('cookie', 'change_session=oui', true) . '" width="0" height="0" alt="" />';
705 705
 }
706 706
 
707 707
 
@@ -711,12 +711,12 @@  discard block
 block discarded – undo
711 711
  * @return string
712 712
  */
713 713
 function hash_env() {
714
-	static $res = '';
715
-	if ($res) {
716
-		return $res;
717
-	}
714
+    static $res = '';
715
+    if ($res) {
716
+        return $res;
717
+    }
718 718
 
719
-	return $res = md5($GLOBALS['ip'] . (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''));
719
+    return $res = md5($GLOBALS['ip'] . (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''));
720 720
 }
721 721
 
722 722
 
@@ -728,11 +728,11 @@  discard block
 block discarded – undo
728 728
  * @return bool True si une session PHP est ouverte.
729 729
  **/
730 730
 function spip_php_session_start() {
731
-	if (!is_php_session_started()) {
732
-		return session_start();
733
-	}
731
+    if (!is_php_session_started()) {
732
+        return session_start();
733
+    }
734 734
 
735
-	return true;
735
+    return true;
736 736
 }
737 737
 
738 738
 /**
@@ -742,9 +742,9 @@  discard block
 block discarded – undo
742 742
  * @return bool true si une session PHP est active
743 743
  **/
744 744
 function is_php_session_started() {
745
-	if (php_sapi_name() !== 'cli') {
746
-		return session_status() === PHP_SESSION_ACTIVE ? true : false;
747
-	}
745
+    if (php_sapi_name() !== 'cli') {
746
+        return session_status() === PHP_SESSION_ACTIVE ? true : false;
747
+    }
748 748
 
749
-	return false;
749
+    return false;
750 750
 }
Please login to merge, or discard this patch.
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -82,13 +82,13 @@  discard block
 block discarded – undo
82 82
 	spip_log("supprimer sessions auteur $id_auteur", 'session');
83 83
 	if ($toutes or $id_auteur !== $GLOBALS['visiteur_session']['id_auteur']) {
84 84
 		if ($dir = opendir(_DIR_SESSIONS)) {
85
-			$t = $_SERVER['REQUEST_TIME']  - (4 * _RENOUVELLE_ALEA); // 48h par defaut
86
-			$t_short = $_SERVER['REQUEST_TIME']  - max(_RENOUVELLE_ALEA / 4, 3 * 3600); // 3h par defaut
85
+			$t = $_SERVER['REQUEST_TIME'] - (4 * _RENOUVELLE_ALEA); // 48h par defaut
86
+			$t_short = $_SERVER['REQUEST_TIME'] - max(_RENOUVELLE_ALEA / 4, 3 * 3600); // 3h par defaut
87 87
 			$t = time() - (4 * _RENOUVELLE_ALEA);
88 88
 			while (($f = readdir($dir)) !== false) {
89 89
 				$nb_files++;
90 90
 				if (preg_match(',^[^\d-]*(-?\d+)_\w{32}\.php[3]?$,', $f, $regs)) {
91
-					$f = _DIR_SESSIONS . $f;
91
+					$f = _DIR_SESSIONS.$f;
92 92
 					if (($actives and $regs[1] == $id_auteur) or ($t > filemtime($f))) {
93 93
 						spip_unlink($f);
94 94
 					}
@@ -171,9 +171,9 @@  discard block
 block discarded – undo
171 171
 
172 172
 	if (
173 173
 		!isset($_COOKIE['spip_session'])
174
-		or !preg_match(',^' . $id_auteur . '_,', $_COOKIE['spip_session'])
174
+		or !preg_match(',^'.$id_auteur.'_,', $_COOKIE['spip_session'])
175 175
 	) {
176
-		$_COOKIE['spip_session'] = $id_auteur . '_' . md5(uniqid(rand(), true));
176
+		$_COOKIE['spip_session'] = $id_auteur.'_'.md5(uniqid(rand(), true));
177 177
 	}
178 178
 
179 179
 	// Maintenant on sait qu'on a des choses à écrire
@@ -206,7 +206,7 @@  discard block
 block discarded – undo
206 206
 	} else {
207 207
 		$fichier_session = fichier_session('alea_ephemere');
208 208
 		if (!ecrire_fichier_session($fichier_session, $auteur)) {
209
-			spip_log('Echec ecriture fichier session ' . $fichier_session, 'session' . _LOG_HS);
209
+			spip_log('Echec ecriture fichier session '.$fichier_session, 'session'._LOG_HS);
210 210
 			include_spip('inc/minipres');
211 211
 			echo minipres();
212 212
 			exit;
@@ -229,7 +229,7 @@  discard block
 block discarded – undo
229 229
 		include_spip('inc/autoriser');
230 230
 	}
231 231
 	if (autoriser('ecrire', '', '', $auteur) and _DUREE_COOKIE_ADMIN) {
232
-		spip_setcookie('spip_admin', '@' . ($auteur['email'] ?: $auteur['login']), [
232
+		spip_setcookie('spip_admin', '@'.($auteur['email'] ?: $auteur['login']), [
233 233
 			'expires' => time() + max(_DUREE_COOKIE_ADMIN, $duree)
234 234
 		]);
235 235
 	} // sinon le supprimer ...
@@ -270,7 +270,7 @@  discard block
 block discarded – undo
270 270
 			$coef = 20;
271 271
 		}
272 272
 	}
273
-	return (int)(_RENOUVELLE_ALEA * $coef);
273
+	return (int) (_RENOUVELLE_ALEA * $coef);
274 274
 }
275 275
 
276 276
 /**
@@ -318,7 +318,7 @@  discard block
 block discarded – undo
318 318
 
319 319
 			// Renouveler la session avec l'alea courant
320 320
 			include($fichier_session);
321
-			spip_log('renouvelle session ' . $GLOBALS['visiteur_session']['id_auteur'], 'session');
321
+			spip_log('renouvelle session '.$GLOBALS['visiteur_session']['id_auteur'], 'session');
322 322
 			spip_unlink($fichier_session);
323 323
 			ajouter_session($GLOBALS['visiteur_session']);
324 324
 		}
@@ -350,7 +350,7 @@  discard block
 block discarded – undo
350 350
 		}
351 351
 	} else {
352 352
 		if ($change) {
353
-			spip_log("rejoue session $fichier_session " . $_COOKIE['spip_session'], 'session');
353
+			spip_log("rejoue session $fichier_session ".$_COOKIE['spip_session'], 'session');
354 354
 			if ($fichier_session) {
355 355
 				spip_unlink($fichier_session);
356 356
 			}
@@ -567,7 +567,7 @@  discard block
 block discarded – undo
567 567
 	}
568 568
 
569 569
 	// liste des sessions
570
-	$sessions = preg_files(_DIR_SESSIONS, '/' . $id_auteur . '_.*\.php$');
570
+	$sessions = preg_files(_DIR_SESSIONS, '/'.$id_auteur.'_.*\.php$');
571 571
 
572 572
 	// si on en a plus que la limite, supprimer les plus vieilles
573 573
 	// si ce ne sont pas des sessions anonymes car elles sont alors chacune differentes
@@ -648,12 +648,12 @@  discard block
 block discarded – undo
648 648
 	$auteur = preparer_ecriture_session($auteur);
649 649
 
650 650
 	// enregistrer les autres donnees du visiteur
651
-	$texte = '<' . "?php\n";
651
+	$texte = '<'."?php\n";
652 652
 	foreach ($auteur as $var => $val) {
653
-		$texte .= '$GLOBALS[\'visiteur_session\'][' . var_export($var, true) . '] = '
654
-			. var_export($val, true) . ";\n";
653
+		$texte .= '$GLOBALS[\'visiteur_session\']['.var_export($var, true).'] = '
654
+			. var_export($val, true).";\n";
655 655
 	}
656
-	$texte .= '?' . ">\n";
656
+	$texte .= '?'.">\n";
657 657
 
658 658
 	return ecrire_fichier($fichier, $texte);
659 659
 }
@@ -683,7 +683,7 @@  discard block
 block discarded – undo
683 683
 		$repertoire = sous_repertoire(_DIR_SESSIONS, '', false, $tantpis);
684 684
 		$c = $_COOKIE['spip_session'];
685 685
 
686
-		return $repertoire . intval($c) . '_' . md5($c . ' ' . $GLOBALS['meta'][$alea]) . '.php';
686
+		return $repertoire.intval($c).'_'.md5($c.' '.$GLOBALS['meta'][$alea]).'.php';
687 687
 	}
688 688
 }
689 689
 
@@ -701,7 +701,7 @@  discard block
 block discarded – undo
701 701
  * @return string
702 702
  */
703 703
 function rejouer_session() {
704
-	return '<img src="' . generer_url_action('cookie', 'change_session=oui', true) . '" width="0" height="0" alt="" />';
704
+	return '<img src="'.generer_url_action('cookie', 'change_session=oui', true).'" width="0" height="0" alt="" />';
705 705
 }
706 706
 
707 707
 
@@ -716,7 +716,7 @@  discard block
 block discarded – undo
716 716
 		return $res;
717 717
 	}
718 718
 
719
-	return $res = md5($GLOBALS['ip'] . (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''));
719
+	return $res = md5($GLOBALS['ip'].(isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''));
720 720
 }
721 721
 
722 722
 
Please login to merge, or discard this patch.
ecrire/inc/envoyer_mail.php 3 patches
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -134,7 +134,7 @@  discard block
 block discarded – undo
134 134
 
135 135
 	// ceci est la RegExp NO_REAL_NAME faisant hurler SpamAssassin
136 136
 	if (preg_match('/^["\s]*\<?\S+\@\S+\>?\s*$/', $from)) {
137
-		$from .= ' (' . str_replace(')', '', translitteration(str_replace('@', ' at ', $from))) . ')';
137
+		$from .= ' ('.str_replace(')', '', translitteration(str_replace('@', ' at ', $from))).')';
138 138
 	}
139 139
 
140 140
 	// nettoyer les &eacute; &#8217, &emdash; etc...
@@ -171,7 +171,7 @@  discard block
 block discarded – undo
171 171
 		if (!_TEST_EMAIL_DEST) {
172 172
 			return false;
173 173
 		} else {
174
-			$texte = "Dest : $destinataire\r\n" . $texte;
174
+			$texte = "Dest : $destinataire\r\n".$texte;
175 175
 			$destinataire = _TEST_EMAIL_DEST;
176 176
 		}
177 177
 	}
@@ -195,7 +195,7 @@  discard block
 block discarded – undo
195 195
 	// Ajouter le Content-Type et consort s'il n'y est pas deja
196 196
 	if (strpos($headers, 'Content-Type: ') === false) {
197 197
 		$type =
198
-			"Content-Type: text/plain;charset=\"$charset\";\n" .
198
+			"Content-Type: text/plain;charset=\"$charset\";\n".
199 199
 			"Content-Transfer-Encoding: 8bit\n";
200 200
 	} else {
201 201
 		$type = '';
@@ -207,17 +207,17 @@  discard block
 block discarded – undo
207 207
 		$domain = $domain[0];
208 208
 	}
209 209
 	else {
210
-		$domain = '@unknown-' . md5($from) . '.org';
210
+		$domain = '@unknown-'.md5($from).'.org';
211 211
 	}
212
-	$uniq = rand() . '_' . md5($to . $texte) . $domain;
212
+	$uniq = rand().'_'.md5($to.$texte).$domain;
213 213
 
214 214
 	// Si multi-part, s'en servir comme borne ...
215 215
 	if ($parts) {
216
-		$texte = "--$uniq\n$type\n" . $texte . "\n";
216
+		$texte = "--$uniq\n$type\n".$texte."\n";
217 217
 		foreach ($parts as $part) {
218
-			$n = strlen($part[1]) . ($part[0] ? "\n" : '');
218
+			$n = strlen($part[1]).($part[0] ? "\n" : '');
219 219
 			$e = join("\n", $part[0]);
220
-			$texte .= "\n--$uniq\nContent-Length: $n$e\n\n" . $part[1];
220
+			$texte .= "\n--$uniq\nContent-Length: $n$e\n\n".$part[1];
221 221
 		}
222 222
 		$texte .= "\n\n--$uniq--\n";
223 223
 		// Si boundary n'est pas entre guillemets,
@@ -227,7 +227,7 @@  discard block
 block discarded – undo
227 227
 
228 228
 	// .. et s'en servir pour plaire a SpamAssassin
229 229
 
230
-	$mid = 'Message-Id: <' . $uniq . '>';
230
+	$mid = 'Message-Id: <'.$uniq.'>';
231 231
 
232 232
 	// indispensable pour les sites qui collent d'office From: serveur-http
233 233
 	// sauf si deja mis par l'envoyeur
Please login to merge, or discard this patch.
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -205,8 +205,7 @@
 block discarded – undo
205 205
 	// Marie Toto <[email protected]> => @toto.com
206 206
 	if (preg_match('/@[^\s>]+/', $from, $domain)) {
207 207
 		$domain = $domain[0];
208
-	}
209
-	else {
208
+	} else {
210 209
 		$domain = '@unknown-' . md5($from) . '.org';
211 210
 	}
212 211
 	$uniq = rand() . '_' . md5($to . $texte) . $domain;
Please login to merge, or discard this patch.
Indentation   +150 added lines, -150 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Mail
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 include_spip('inc/charsets');
@@ -32,7 +32,7 @@  discard block
 block discarded – undo
32 32
  * @return string
33 33
  */
34 34
 function nettoyer_titre_email($titre) {
35
-	return str_replace("\n", ' ', nettoyer_caracteres_mail(textebrut(corriger_typo($titre))));
35
+    return str_replace("\n", ' ', nettoyer_caracteres_mail(textebrut(corriger_typo($titre))));
36 36
 }
37 37
 
38 38
 /**
@@ -48,23 +48,23 @@  discard block
 block discarded – undo
48 48
  */
49 49
 function nettoyer_caracteres_mail($t) {
50 50
 
51
-	$t = filtrer_entites($t);
51
+    $t = filtrer_entites($t);
52 52
 
53
-	if ($GLOBALS['meta']['charset'] <> 'utf-8') {
54
-		$t = str_replace(
55
-			['&#8217;', '&#8220;', '&#8221;'],
56
-			["'", '"', '"'],
57
-			$t
58
-		);
59
-	}
53
+    if ($GLOBALS['meta']['charset'] <> 'utf-8') {
54
+        $t = str_replace(
55
+            ['&#8217;', '&#8220;', '&#8221;'],
56
+            ["'", '"', '"'],
57
+            $t
58
+        );
59
+    }
60 60
 
61
-	$t = str_replace(
62
-		['&mdash;', '&endash;'],
63
-		['--', '-'],
64
-		$t
65
-	);
61
+    $t = str_replace(
62
+        ['&mdash;', '&endash;'],
63
+        ['--', '-'],
64
+        $t
65
+    );
66 66
 
67
-	return $t;
67
+    return $t;
68 68
 }
69 69
 
70 70
 /**
@@ -97,86 +97,86 @@  discard block
 block discarded – undo
97 97
  */
98 98
 function inc_envoyer_mail_dist($destinataire, $sujet, $corps, $from = '', $headers = '') {
99 99
 
100
-	if (!email_valide($destinataire)) {
101
-		return false;
102
-	}
103
-	if ($destinataire == _T('info_mail_fournisseur')) {
104
-		return false;
105
-	} // tres fort
106
-
107
-	// Fournir si possible un Message-Id: conforme au RFC1036,
108
-	// sinon SpamAssassin denoncera un MSGID_FROM_MTA_HEADER
109
-
110
-	$email_envoi = $GLOBALS['meta']['email_envoi'];
111
-	if (!email_valide($email_envoi)) {
112
-		spip_log('Meta email_envoi invalide. Le mail sera probablement vu comme spam.');
113
-		$email_envoi = $destinataire;
114
-	}
115
-
116
-	$parts = '';
117
-	if (is_array($corps)) {
118
-		$texte = $corps['texte'];
119
-		$from = (isset($corps['from']) ? $corps['from'] : $from);
120
-		$headers = (isset($corps['headers']) ? $corps['headers'] : $headers);
121
-		if (is_array($headers)) {
122
-			$headers = implode("\n", $headers);
123
-		}
124
-		if (isset($corps['pieces_jointes']) and function_exists('mail_embarquer_pieces_jointes')) {
125
-			$parts = mail_embarquer_pieces_jointes($corps['pieces_jointes']);
126
-		}
127
-	} else {
128
-		$texte = $corps;
129
-	}
130
-
131
-	if (!$from) {
132
-		$from = $email_envoi;
133
-	}
134
-
135
-	// ceci est la RegExp NO_REAL_NAME faisant hurler SpamAssassin
136
-	if (preg_match('/^["\s]*\<?\S+\@\S+\>?\s*$/', $from)) {
137
-		$from .= ' (' . str_replace(')', '', translitteration(str_replace('@', ' at ', $from))) . ')';
138
-	}
139
-
140
-	// nettoyer les &eacute; &#8217, &emdash; etc...
141
-	// les 'cliquer ici' etc sont a eviter;  voir:
142
-	// http://mta.org.ua/spamassassin-2.55/stuff/wiki.CustomRulesets/20050914/rules/french_rules.cf
143
-	$texte = nettoyer_caracteres_mail($texte);
144
-	$sujet = nettoyer_caracteres_mail($sujet);
145
-
146
-	// encoder le sujet si possible selon la RFC
147
-	if (init_mb_string()) {
148
-		# un bug de mb_string casse mb_encode_mimeheader si l'encoding interne
149
-		# est UTF-8 et le charset iso-8859-1 (constate php5-mac ; php4.3-debian)
150
-		$charset = $GLOBALS['meta']['charset'];
151
-		mb_internal_encoding($charset);
152
-		$sujet = mb_encode_mimeheader($sujet, $charset, 'Q', "\n");
153
-		mb_internal_encoding('utf-8');
154
-	}
155
-
156
-	if (function_exists('wordwrap') && (preg_match(',multipart/mixed,', $headers) == 0)) {
157
-		$texte = wordwrap($texte);
158
-	}
159
-
160
-	list($headers, $texte) = mail_normaliser_headers($headers, $from, $destinataire, $texte, $parts);
161
-
162
-	if (_OS_SERVEUR == 'windows') {
163
-		$texte = preg_replace("@\r*\n@", "\r\n", $texte);
164
-		$headers = preg_replace("@\r*\n@", "\r\n", $headers);
165
-		$sujet = preg_replace("@\r*\n@", "\r\n", $sujet);
166
-	}
167
-
168
-	spip_log("mail $destinataire\n$sujet\n$headers", 'mails');
169
-	// mode TEST : forcer l'email
170
-	if (defined('_TEST_EMAIL_DEST')) {
171
-		if (!_TEST_EMAIL_DEST) {
172
-			return false;
173
-		} else {
174
-			$texte = "Dest : $destinataire\r\n" . $texte;
175
-			$destinataire = _TEST_EMAIL_DEST;
176
-		}
177
-	}
178
-
179
-	return @mail($destinataire, $sujet, $texte, $headers);
100
+    if (!email_valide($destinataire)) {
101
+        return false;
102
+    }
103
+    if ($destinataire == _T('info_mail_fournisseur')) {
104
+        return false;
105
+    } // tres fort
106
+
107
+    // Fournir si possible un Message-Id: conforme au RFC1036,
108
+    // sinon SpamAssassin denoncera un MSGID_FROM_MTA_HEADER
109
+
110
+    $email_envoi = $GLOBALS['meta']['email_envoi'];
111
+    if (!email_valide($email_envoi)) {
112
+        spip_log('Meta email_envoi invalide. Le mail sera probablement vu comme spam.');
113
+        $email_envoi = $destinataire;
114
+    }
115
+
116
+    $parts = '';
117
+    if (is_array($corps)) {
118
+        $texte = $corps['texte'];
119
+        $from = (isset($corps['from']) ? $corps['from'] : $from);
120
+        $headers = (isset($corps['headers']) ? $corps['headers'] : $headers);
121
+        if (is_array($headers)) {
122
+            $headers = implode("\n", $headers);
123
+        }
124
+        if (isset($corps['pieces_jointes']) and function_exists('mail_embarquer_pieces_jointes')) {
125
+            $parts = mail_embarquer_pieces_jointes($corps['pieces_jointes']);
126
+        }
127
+    } else {
128
+        $texte = $corps;
129
+    }
130
+
131
+    if (!$from) {
132
+        $from = $email_envoi;
133
+    }
134
+
135
+    // ceci est la RegExp NO_REAL_NAME faisant hurler SpamAssassin
136
+    if (preg_match('/^["\s]*\<?\S+\@\S+\>?\s*$/', $from)) {
137
+        $from .= ' (' . str_replace(')', '', translitteration(str_replace('@', ' at ', $from))) . ')';
138
+    }
139
+
140
+    // nettoyer les &eacute; &#8217, &emdash; etc...
141
+    // les 'cliquer ici' etc sont a eviter;  voir:
142
+    // http://mta.org.ua/spamassassin-2.55/stuff/wiki.CustomRulesets/20050914/rules/french_rules.cf
143
+    $texte = nettoyer_caracteres_mail($texte);
144
+    $sujet = nettoyer_caracteres_mail($sujet);
145
+
146
+    // encoder le sujet si possible selon la RFC
147
+    if (init_mb_string()) {
148
+        # un bug de mb_string casse mb_encode_mimeheader si l'encoding interne
149
+        # est UTF-8 et le charset iso-8859-1 (constate php5-mac ; php4.3-debian)
150
+        $charset = $GLOBALS['meta']['charset'];
151
+        mb_internal_encoding($charset);
152
+        $sujet = mb_encode_mimeheader($sujet, $charset, 'Q', "\n");
153
+        mb_internal_encoding('utf-8');
154
+    }
155
+
156
+    if (function_exists('wordwrap') && (preg_match(',multipart/mixed,', $headers) == 0)) {
157
+        $texte = wordwrap($texte);
158
+    }
159
+
160
+    list($headers, $texte) = mail_normaliser_headers($headers, $from, $destinataire, $texte, $parts);
161
+
162
+    if (_OS_SERVEUR == 'windows') {
163
+        $texte = preg_replace("@\r*\n@", "\r\n", $texte);
164
+        $headers = preg_replace("@\r*\n@", "\r\n", $headers);
165
+        $sujet = preg_replace("@\r*\n@", "\r\n", $sujet);
166
+    }
167
+
168
+    spip_log("mail $destinataire\n$sujet\n$headers", 'mails');
169
+    // mode TEST : forcer l'email
170
+    if (defined('_TEST_EMAIL_DEST')) {
171
+        if (!_TEST_EMAIL_DEST) {
172
+            return false;
173
+        } else {
174
+            $texte = "Dest : $destinataire\r\n" . $texte;
175
+            $destinataire = _TEST_EMAIL_DEST;
176
+        }
177
+    }
178
+
179
+    return @mail($destinataire, $sujet, $texte, $headers);
180 180
 }
181 181
 
182 182
 /**
@@ -190,58 +190,58 @@  discard block
 block discarded – undo
190 190
  * @return array
191 191
  */
192 192
 function mail_normaliser_headers($headers, $from, $to, $texte, $parts = '') {
193
-	$charset = $GLOBALS['meta']['charset'];
194
-
195
-	// Ajouter le Content-Type et consort s'il n'y est pas deja
196
-	if (strpos($headers, 'Content-Type: ') === false) {
197
-		$type =
198
-			"Content-Type: text/plain;charset=\"$charset\";\n" .
199
-			"Content-Transfer-Encoding: 8bit\n";
200
-	} else {
201
-		$type = '';
202
-	}
203
-
204
-	// calculer un identifiant unique
205
-	// Marie Toto <[email protected]> => @toto.com
206
-	if (preg_match('/@[^\s>]+/', $from, $domain)) {
207
-		$domain = $domain[0];
208
-	}
209
-	else {
210
-		$domain = '@unknown-' . md5($from) . '.org';
211
-	}
212
-	$uniq = rand() . '_' . md5($to . $texte) . $domain;
213
-
214
-	// Si multi-part, s'en servir comme borne ...
215
-	if ($parts) {
216
-		$texte = "--$uniq\n$type\n" . $texte . "\n";
217
-		foreach ($parts as $part) {
218
-			$n = strlen($part[1]) . ($part[0] ? "\n" : '');
219
-			$e = join("\n", $part[0]);
220
-			$texte .= "\n--$uniq\nContent-Length: $n$e\n\n" . $part[1];
221
-		}
222
-		$texte .= "\n\n--$uniq--\n";
223
-		// Si boundary n'est pas entre guillemets,
224
-		// elle est comprise mais le charset est ignoree !
225
-		$type = "Content-Type: multipart/mixed; boundary=\"$uniq\"\n";
226
-	}
227
-
228
-	// .. et s'en servir pour plaire a SpamAssassin
229
-
230
-	$mid = 'Message-Id: <' . $uniq . '>';
231
-
232
-	// indispensable pour les sites qui collent d'office From: serveur-http
233
-	// sauf si deja mis par l'envoyeur
234
-	$rep = (strpos($headers, 'Reply-To:') !== false) ? '' : "Reply-To: $from\n";
235
-
236
-	// Nettoyer les en-tetes envoyees
237
-	// Ajouter le \n final
238
-	if (strlen($headers = trim($headers))) {
239
-		$headers .= "\n";
240
-	}
241
-
242
-	// Et mentionner l'indeboulonable nomenclature ratee
243
-
244
-	$headers .= "From: $from\n$type$rep$mid\nMIME-Version: 1.0\n";
245
-
246
-	return [$headers, $texte];
193
+    $charset = $GLOBALS['meta']['charset'];
194
+
195
+    // Ajouter le Content-Type et consort s'il n'y est pas deja
196
+    if (strpos($headers, 'Content-Type: ') === false) {
197
+        $type =
198
+            "Content-Type: text/plain;charset=\"$charset\";\n" .
199
+            "Content-Transfer-Encoding: 8bit\n";
200
+    } else {
201
+        $type = '';
202
+    }
203
+
204
+    // calculer un identifiant unique
205
+    // Marie Toto <[email protected]> => @toto.com
206
+    if (preg_match('/@[^\s>]+/', $from, $domain)) {
207
+        $domain = $domain[0];
208
+    }
209
+    else {
210
+        $domain = '@unknown-' . md5($from) . '.org';
211
+    }
212
+    $uniq = rand() . '_' . md5($to . $texte) . $domain;
213
+
214
+    // Si multi-part, s'en servir comme borne ...
215
+    if ($parts) {
216
+        $texte = "--$uniq\n$type\n" . $texte . "\n";
217
+        foreach ($parts as $part) {
218
+            $n = strlen($part[1]) . ($part[0] ? "\n" : '');
219
+            $e = join("\n", $part[0]);
220
+            $texte .= "\n--$uniq\nContent-Length: $n$e\n\n" . $part[1];
221
+        }
222
+        $texte .= "\n\n--$uniq--\n";
223
+        // Si boundary n'est pas entre guillemets,
224
+        // elle est comprise mais le charset est ignoree !
225
+        $type = "Content-Type: multipart/mixed; boundary=\"$uniq\"\n";
226
+    }
227
+
228
+    // .. et s'en servir pour plaire a SpamAssassin
229
+
230
+    $mid = 'Message-Id: <' . $uniq . '>';
231
+
232
+    // indispensable pour les sites qui collent d'office From: serveur-http
233
+    // sauf si deja mis par l'envoyeur
234
+    $rep = (strpos($headers, 'Reply-To:') !== false) ? '' : "Reply-To: $from\n";
235
+
236
+    // Nettoyer les en-tetes envoyees
237
+    // Ajouter le \n final
238
+    if (strlen($headers = trim($headers))) {
239
+        $headers .= "\n";
240
+    }
241
+
242
+    // Et mentionner l'indeboulonable nomenclature ratee
243
+
244
+    $headers .= "From: $from\n$type$rep$mid\nMIME-Version: 1.0\n";
245
+
246
+    return [$headers, $texte];
247 247
 }
Please login to merge, or discard this patch.
ecrire/inc/queue.php 2 patches
Spacing   +37 added lines, -38 removed lines patch added patch discarded remove patch
@@ -70,7 +70,7 @@  discard block
 block discarded – undo
70 70
 	$md5args = md5($arguments);
71 71
 
72 72
 	// si pas de date programee, des que possible
73
-	$duplicate_where = 'status=' . intval(_JQ_SCHEDULED) . ' AND ';
73
+	$duplicate_where = 'status='.intval(_JQ_SCHEDULED).' AND ';
74 74
 	if (!$time) {
75 75
 		$time = time();
76 76
 		$duplicate_where = ''; // ne pas dupliquer si deja le meme job en cours d'execution
@@ -96,9 +96,8 @@  discard block
 block discarded – undo
96 96
 			'id_job',
97 97
 			'spip_jobs',
98 98
 			$duplicate_where =
99
-				$duplicate_where . 'fonction=' . sql_quote($function)
100
-				. (($no_duplicate === 'function_only') ? '' :
101
-			' AND md5args=' . sql_quote($md5args) . ' AND inclure=' . sql_quote($file))
99
+				$duplicate_where.'fonction='.sql_quote($function)
100
+				. (($no_duplicate === 'function_only') ? '' : ' AND md5args='.sql_quote($md5args).' AND inclure='.sql_quote($file))
102 101
 		)
103 102
 	) {
104 103
 		return $id_job;
@@ -111,9 +110,9 @@  discard block
 block discarded – undo
111 110
 	if (
112 111
 		$no_duplicate
113 112
 		and
114
-		$id_prev = sql_getfetsel('id_job', 'spip_jobs', 'id_job<' . intval($id_job) . " AND $duplicate_where")
113
+		$id_prev = sql_getfetsel('id_job', 'spip_jobs', 'id_job<'.intval($id_job)." AND $duplicate_where")
115 114
 	) {
116
-		sql_delete('spip_jobs', 'id_job=' . intval($id_job));
115
+		sql_delete('spip_jobs', 'id_job='.intval($id_job));
117 116
 
118 117
 		return $id_prev;
119 118
 	}
@@ -125,9 +124,9 @@  discard block
 block discarded – undo
125 124
 	// ie cas d'un char non acceptables sur certains type de champs
126 125
 	// qui coupe la valeur
127 126
 	if (defined('_JQ_INSERT_CHECK_ARGS') and $id_job) {
128
-		$args = sql_getfetsel('args', 'spip_jobs', 'id_job=' . intval($id_job));
127
+		$args = sql_getfetsel('args', 'spip_jobs', 'id_job='.intval($id_job));
129 128
 		if ($args !== $arguments) {
130
-			spip_log('arguments job errones / longueur ' . strlen($args) . ' vs ' . strlen($arguments) . ' / valeur : ' . var_export(
129
+			spip_log('arguments job errones / longueur '.strlen($args).' vs '.strlen($arguments).' / valeur : '.var_export(
131 130
 				$arguments,
132 131
 				true
133 132
 			), 'queue');
@@ -157,7 +156,7 @@  discard block
 block discarded – undo
157 156
 function queue_purger() {
158 157
 	include_spip('base/abstract_sql');
159 158
 	sql_delete('spip_jobs');
160
-	sql_delete('spip_jobs_liens', 'id_job NOT IN (' . sql_get_select('id_job', 'spip_jobs') . ')');
159
+	sql_delete('spip_jobs_liens', 'id_job NOT IN ('.sql_get_select('id_job', 'spip_jobs').')');
161 160
 	include_spip('inc/genie');
162 161
 	genie_queue_watch_dist();
163 162
 }
@@ -173,8 +172,8 @@  discard block
 block discarded – undo
173 172
 	include_spip('base/abstract_sql');
174 173
 
175 174
 	if (
176
-		$row = sql_fetsel('fonction,inclure,date', 'spip_jobs', 'id_job=' . intval($id_job))
177
-		and $res = sql_delete('spip_jobs', 'id_job=' . intval($id_job))
175
+		$row = sql_fetsel('fonction,inclure,date', 'spip_jobs', 'id_job='.intval($id_job))
176
+		and $res = sql_delete('spip_jobs', 'id_job='.intval($id_job))
178 177
 	) {
179 178
 		queue_unlink_job($id_job);
180 179
 		// est-ce une tache cron qu'il faut relancer ?
@@ -223,7 +222,7 @@  discard block
 block discarded – undo
223 222
  *  resultat du sql_delete
224 223
  */
225 224
 function queue_unlink_job($id_job) {
226
-	return sql_delete('spip_jobs_liens', 'id_job=' . intval($id_job));
225
+	return sql_delete('spip_jobs_liens', 'id_job='.intval($id_job));
227 226
 }
228 227
 
229 228
 /**
@@ -239,7 +238,7 @@  discard block
 block discarded – undo
239 238
 	// deserialiser les arguments
240 239
 	$args = unserialize($row['args']);
241 240
 	if ($args === false) {
242
-		spip_log('arguments job errones ' . var_export($row, true), 'queue');
241
+		spip_log('arguments job errones '.var_export($row, true), 'queue');
243 242
 		$args = [];
244 243
 	}
245 244
 
@@ -256,12 +255,12 @@  discard block
 block discarded – undo
256 255
 	}
257 256
 
258 257
 	if (!function_exists($fonction)) {
259
-		spip_log("fonction $fonction ($inclure) inexistante " . var_export($row, true), 'queue');
258
+		spip_log("fonction $fonction ($inclure) inexistante ".var_export($row, true), 'queue');
260 259
 
261 260
 		return false;
262 261
 	}
263 262
 
264
-	spip_log('queue [' . $row['id_job'] . "]: $fonction() start", 'queue');
263
+	spip_log('queue ['.$row['id_job']."]: $fonction() start", 'queue');
265 264
 	switch (count($args)) {
266 265
 		case 0:
267 266
 			$res = $fonction();
@@ -311,7 +310,7 @@  discard block
 block discarded – undo
311 310
 			# plus lent mais completement generique
312 311
 			$res = call_user_func_array($fonction, $args);
313 312
 	}
314
-	spip_log('queue [' . $row['id_job'] . "]: $fonction() end", 'queue');
313
+	spip_log('queue ['.$row['id_job']."]: $fonction() end", 'queue');
315 314
 
316 315
 	return $res;
317 316
 }
@@ -342,14 +341,14 @@  discard block
 block discarded – undo
342 341
 function queue_schedule($force_jobs = null) {
343 342
 	$time = time();
344 343
 	if (defined('_DEBUG_BLOCK_QUEUE')) {
345
-		spip_log('_DEBUG_BLOCK_QUEUE : schedule stop', 'jq' . _LOG_DEBUG);
344
+		spip_log('_DEBUG_BLOCK_QUEUE : schedule stop', 'jq'._LOG_DEBUG);
346 345
 
347 346
 		return;
348 347
 	}
349 348
 
350 349
 	// rien a faire si le prochain job est encore dans le futur
351 350
 	if (queue_sleep_time_to_next_job() > 0 and (!$force_jobs or !count($force_jobs))) {
352
-		spip_log('queue_sleep_time_to_next_job', 'jq' . _LOG_DEBUG);
351
+		spip_log('queue_sleep_time_to_next_job', 'jq'._LOG_DEBUG);
353 352
 
354 353
 		return;
355 354
 	}
@@ -370,7 +369,7 @@  discard block
 block discarded – undo
370 369
 	}
371 370
 	$end_time = $time + _JQ_MAX_JOBS_TIME_TO_EXECUTE;
372 371
 
373
-	spip_log("JQ schedule $time / $end_time", 'jq' . _LOG_DEBUG);
372
+	spip_log("JQ schedule $time / $end_time", 'jq'._LOG_DEBUG);
374 373
 
375 374
 	if (!defined('_JQ_MAX_JOBS_EXECUTE')) {
376 375
 		define('_JQ_MAX_JOBS_EXECUTE', 200);
@@ -384,19 +383,19 @@  discard block
 block discarded – undo
384 383
 	// lorsqu'un job cron n'a pas fini, sa priorite est descendue
385 384
 	// pour qu'il ne bloque pas les autres jobs en attente
386 385
 	if (is_array($force_jobs) and count($force_jobs)) {
387
-		$cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND ' . sql_in('id_job', $force_jobs);
386
+		$cond = 'status='.intval(_JQ_SCHEDULED).' AND '.sql_in('id_job', $force_jobs);
388 387
 	} else {
389 388
 		$now = date('Y-m-d H:i:s', $time);
390
-		$cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND date<=' . sql_quote($now);
389
+		$cond = 'status='.intval(_JQ_SCHEDULED).' AND date<='.sql_quote($now);
391 390
 	}
392 391
 
393 392
 	register_shutdown_function('queue_error_handler'); // recuperer les erreurs auant que possible
394
-	$res = sql_allfetsel('*', 'spip_jobs', $cond, '', 'priorite DESC,date', '0,' . (_JQ_MAX_JOBS_EXECUTE + 1));
393
+	$res = sql_allfetsel('*', 'spip_jobs', $cond, '', 'priorite DESC,date', '0,'.(_JQ_MAX_JOBS_EXECUTE + 1));
395 394
 	do {
396 395
 		if ($row = array_shift($res)) {
397 396
 			$nbj++;
398 397
 			// il faut un verrou, a base de sql_delete
399
-			if (sql_delete('spip_jobs', 'id_job=' . intval($row['id_job']) . ' AND status=' . intval(_JQ_SCHEDULED))) {
398
+			if (sql_delete('spip_jobs', 'id_job='.intval($row['id_job']).' AND status='.intval(_JQ_SCHEDULED))) {
400 399
 				#spip_log("JQ schedule job ".$nbj." OK",'jq');
401 400
 				// on reinsert dans la base aussitot avec un status=_JQ_PENDING
402 401
 				$row['status'] = _JQ_PENDING;
@@ -411,13 +410,13 @@  discard block
 block discarded – undo
411 410
 				queue_close_job($row, $time, $result);
412 411
 			}
413 412
 		}
414
-		spip_log('JQ schedule job end time ' . $time, 'jq' . _LOG_DEBUG);
413
+		spip_log('JQ schedule job end time '.$time, 'jq'._LOG_DEBUG);
415 414
 	} while ($nbj < _JQ_MAX_JOBS_EXECUTE and $row and $time < $end_time);
416
-	spip_log('JQ schedule end time ' . time(), 'jq' . _LOG_DEBUG);
415
+	spip_log('JQ schedule end time '.time(), 'jq'._LOG_DEBUG);
417 416
 
418 417
 	if ($row = array_shift($res)) {
419 418
 		queue_update_next_job_time(0); // on sait qu'il y a encore des jobs a lancer ASAP
420
-		spip_log('JQ encore !', 'jq' . _LOG_DEBUG);
419
+		spip_log('JQ encore !', 'jq'._LOG_DEBUG);
421 420
 	} else {
422 421
 		queue_update_next_job_time();
423 422
 	}
@@ -452,9 +451,9 @@  discard block
 block discarded – undo
452 451
 		}
453 452
 	}
454 453
 	// purger ses liens eventuels avec des objets
455
-	sql_delete('spip_jobs_liens', 'id_job=' . intval($row['id_job']));
454
+	sql_delete('spip_jobs_liens', 'id_job='.intval($row['id_job']));
456 455
 	// supprimer le job fini
457
-	sql_delete('spip_jobs', 'id_job=' . intval($row['id_job']));
456
+	sql_delete('spip_jobs', 'id_job='.intval($row['id_job']));
458 457
 }
459 458
 
460 459
 /**
@@ -527,18 +526,18 @@  discard block
 block discarded – undo
527 526
 	$res = sql_allfetsel(
528 527
 		'*',
529 528
 		'spip_jobs',
530
-		'status=' . intval(_JQ_PENDING) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time - 180))
529
+		'status='.intval(_JQ_PENDING).' AND date<'.sql_quote(date('Y-m-d H:i:s', $time - 180))
531 530
 	);
532 531
 	if (is_array($res)) {
533 532
 		foreach ($res as $row) {
534 533
 			queue_close_job($row, $time);
535
-			spip_log('queue_close_job car _JQ_PENDING depuis +180s : ' . print_r($row, 1), 'job_mort' . _LOG_ERREUR);
534
+			spip_log('queue_close_job car _JQ_PENDING depuis +180s : '.print_r($row, 1), 'job_mort'._LOG_ERREUR);
536 535
 		}
537 536
 	}
538 537
 
539 538
 	// chercher la date du prochain job si pas connu
540 539
 	if (is_null($next) or is_null(queue_sleep_time_to_next_job())) {
541
-		$date = sql_getfetsel('date', 'spip_jobs', 'status=' . intval(_JQ_SCHEDULED), '', 'date', '0,1');
540
+		$date = sql_getfetsel('date', 'spip_jobs', 'status='.intval(_JQ_SCHEDULED), '', 'date', '0,1');
542 541
 		$next = strtotime($date);
543 542
 	}
544 543
 	if (!is_null($next_time)) {
@@ -551,7 +550,7 @@  discard block
 block discarded – undo
551 550
 		if (is_null($nb_jobs_scheduled)) {
552 551
 			$nb_jobs_scheduled = sql_countsel(
553 552
 				'spip_jobs',
554
-				'status=' . intval(_JQ_SCHEDULED) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time))
553
+				'status='.intval(_JQ_SCHEDULED).' AND date<'.sql_quote(date('Y-m-d H:i:s', $time))
555 554
 			);
556 555
 		} elseif ($next <= $time) {
557 556
 			$nb_jobs_scheduled++;
@@ -620,7 +619,7 @@  discard block
 block discarded – undo
620 619
 	}
621 620
 
622 621
 	// ne pas relancer si on vient de lancer dans la meme seconde par un hit concurent
623
-	if (file_exists($lock = _DIR_TMP . 'cron.lock') and !(@filemtime($lock) < $_SERVER['REQUEST_TIME'])) {
622
+	if (file_exists($lock = _DIR_TMP.'cron.lock') and !(@filemtime($lock) < $_SERVER['REQUEST_TIME'])) {
624 623
 		return $texte;
625 624
 	}
626 625
 
@@ -692,7 +691,7 @@  discard block
 block discarded – undo
692 691
 				$port = 80;
693 692
 		}
694 693
 		$fp = @fsockopen(
695
-			$scheme . $parts['host'],
694
+			$scheme.$parts['host'],
696 695
 			isset($parts['port']) ? $parts['port'] : $port,
697 696
 			$errno,
698 697
 			$errstr,
@@ -702,13 +701,13 @@  discard block
 block discarded – undo
702 701
 		if ($fp) {
703 702
 			$host_sent = $parts['host'];
704 703
 			if (isset($parts['port']) and $parts['port'] !== $port) {
705
-				$host_sent .= ':' . $parts['port'];
704
+				$host_sent .= ':'.$parts['port'];
706 705
 			}
707 706
 			$timeout = 200; // ms
708 707
 			stream_set_timeout($fp, 0, $timeout * 1000);
709
-			$query = $parts['path'] . ($parts['query'] ? '?' . $parts['query'] : '');
710
-			$out = 'GET ' . $query . " HTTP/1.1\r\n";
711
-			$out .= 'Host: ' . $host_sent . "\r\n";
708
+			$query = $parts['path'].($parts['query'] ? '?'.$parts['query'] : '');
709
+			$out = 'GET '.$query." HTTP/1.1\r\n";
710
+			$out .= 'Host: '.$host_sent."\r\n";
712 711
 			$out .= "Connection: Close\r\n\r\n";
713 712
 			fwrite($fp, $out);
714 713
 			spip_timer('read');
Please login to merge, or discard this patch.
Indentation   +524 added lines, -524 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Queue
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 define('_JQ_SCHEDULED', 1);
@@ -50,103 +50,103 @@  discard block
 block discarded – undo
50 50
  *  id of job
51 51
  */
52 52
 function queue_add_job(
53
-	$function,
54
-	$description,
55
-	$arguments = [],
56
-	$file = '',
57
-	$no_duplicate = false,
58
-	$time = 0,
59
-	$priority = 0
53
+    $function,
54
+    $description,
55
+    $arguments = [],
56
+    $file = '',
57
+    $no_duplicate = false,
58
+    $time = 0,
59
+    $priority = 0
60 60
 ) {
61
-	include_spip('base/abstract_sql');
62
-
63
-	// cas pourri de ecrire/action/editer_site avec l'option reload=oui
64
-	if (defined('_GENIE_SYNDIC_NOW')) {
65
-		$arguments['id_syndic'] = _GENIE_SYNDIC_NOW;
66
-	}
67
-
68
-	// serialiser les arguments
69
-	$arguments = serialize($arguments);
70
-	$md5args = md5($arguments);
71
-
72
-	// si pas de date programee, des que possible
73
-	$duplicate_where = 'status=' . intval(_JQ_SCHEDULED) . ' AND ';
74
-	if (!$time) {
75
-		$time = time();
76
-		$duplicate_where = ''; // ne pas dupliquer si deja le meme job en cours d'execution
77
-	}
78
-	$date = date('Y-m-d H:i:s', $time);
79
-
80
-	$set_job = [
81
-		'fonction' => $function,
82
-		'descriptif' => $description,
83
-		'args' => $arguments,
84
-		'md5args' => $md5args,
85
-		'inclure' => $file,
86
-		'priorite' => max(-10, min(10, intval($priority))),
87
-		'date' => $date,
88
-		'status' => _JQ_SCHEDULED,
89
-	];
90
-	// si option ne pas dupliquer, regarder si la fonction existe deja
91
-	// avec les memes args et file
92
-	if (
93
-		$no_duplicate
94
-		and
95
-		$id_job = sql_getfetsel(
96
-			'id_job',
97
-			'spip_jobs',
98
-			$duplicate_where =
99
-				$duplicate_where . 'fonction=' . sql_quote($function)
100
-				. (($no_duplicate === 'function_only') ? '' :
101
-			' AND md5args=' . sql_quote($md5args) . ' AND inclure=' . sql_quote($file))
102
-		)
103
-	) {
104
-		return $id_job;
105
-	}
106
-
107
-	$id_job = sql_insertq('spip_jobs', $set_job);
108
-	// en cas de concurrence, deux process peuvent arriver jusqu'ici en parallele
109
-	// avec le meme job unique a inserer. Dans ce cas, celui qui a eu l'id le plus grand
110
-	// doit s'effacer
111
-	if (
112
-		$no_duplicate
113
-		and
114
-		$id_prev = sql_getfetsel('id_job', 'spip_jobs', 'id_job<' . intval($id_job) . " AND $duplicate_where")
115
-	) {
116
-		sql_delete('spip_jobs', 'id_job=' . intval($id_job));
117
-
118
-		return $id_prev;
119
-	}
120
-
121
-	// verifier la non duplication qui peut etre problematique en cas de concurence
122
-	// il faut dans ce cas que seul le dernier ajoute se supprime !
123
-
124
-	// une option de debug pour verifier que les arguments en base sont bons
125
-	// ie cas d'un char non acceptables sur certains type de champs
126
-	// qui coupe la valeur
127
-	if (defined('_JQ_INSERT_CHECK_ARGS') and $id_job) {
128
-		$args = sql_getfetsel('args', 'spip_jobs', 'id_job=' . intval($id_job));
129
-		if ($args !== $arguments) {
130
-			spip_log('arguments job errones / longueur ' . strlen($args) . ' vs ' . strlen($arguments) . ' / valeur : ' . var_export(
131
-				$arguments,
132
-				true
133
-			), 'queue');
134
-		}
135
-	}
136
-
137
-	if ($id_job) {
138
-		queue_update_next_job_time($time);
139
-	}
140
-	// si la mise en file d'attente du job echoue,
141
-	// il ne faut pas perdre l'execution de la fonction
142
-	// on la lance immediatement, c'est un fallback
143
-	// sauf en cas d'upgrade necessaire (table spip_jobs inexistante)
144
-	elseif ($GLOBALS['meta']['version_installee'] == $GLOBALS['spip_version_base']) {
145
-		$set_job['id_job'] = 0;
146
-		queue_start_job($set_job);
147
-	}
148
-
149
-	return $id_job;
61
+    include_spip('base/abstract_sql');
62
+
63
+    // cas pourri de ecrire/action/editer_site avec l'option reload=oui
64
+    if (defined('_GENIE_SYNDIC_NOW')) {
65
+        $arguments['id_syndic'] = _GENIE_SYNDIC_NOW;
66
+    }
67
+
68
+    // serialiser les arguments
69
+    $arguments = serialize($arguments);
70
+    $md5args = md5($arguments);
71
+
72
+    // si pas de date programee, des que possible
73
+    $duplicate_where = 'status=' . intval(_JQ_SCHEDULED) . ' AND ';
74
+    if (!$time) {
75
+        $time = time();
76
+        $duplicate_where = ''; // ne pas dupliquer si deja le meme job en cours d'execution
77
+    }
78
+    $date = date('Y-m-d H:i:s', $time);
79
+
80
+    $set_job = [
81
+        'fonction' => $function,
82
+        'descriptif' => $description,
83
+        'args' => $arguments,
84
+        'md5args' => $md5args,
85
+        'inclure' => $file,
86
+        'priorite' => max(-10, min(10, intval($priority))),
87
+        'date' => $date,
88
+        'status' => _JQ_SCHEDULED,
89
+    ];
90
+    // si option ne pas dupliquer, regarder si la fonction existe deja
91
+    // avec les memes args et file
92
+    if (
93
+        $no_duplicate
94
+        and
95
+        $id_job = sql_getfetsel(
96
+            'id_job',
97
+            'spip_jobs',
98
+            $duplicate_where =
99
+                $duplicate_where . 'fonction=' . sql_quote($function)
100
+                . (($no_duplicate === 'function_only') ? '' :
101
+            ' AND md5args=' . sql_quote($md5args) . ' AND inclure=' . sql_quote($file))
102
+        )
103
+    ) {
104
+        return $id_job;
105
+    }
106
+
107
+    $id_job = sql_insertq('spip_jobs', $set_job);
108
+    // en cas de concurrence, deux process peuvent arriver jusqu'ici en parallele
109
+    // avec le meme job unique a inserer. Dans ce cas, celui qui a eu l'id le plus grand
110
+    // doit s'effacer
111
+    if (
112
+        $no_duplicate
113
+        and
114
+        $id_prev = sql_getfetsel('id_job', 'spip_jobs', 'id_job<' . intval($id_job) . " AND $duplicate_where")
115
+    ) {
116
+        sql_delete('spip_jobs', 'id_job=' . intval($id_job));
117
+
118
+        return $id_prev;
119
+    }
120
+
121
+    // verifier la non duplication qui peut etre problematique en cas de concurence
122
+    // il faut dans ce cas que seul le dernier ajoute se supprime !
123
+
124
+    // une option de debug pour verifier que les arguments en base sont bons
125
+    // ie cas d'un char non acceptables sur certains type de champs
126
+    // qui coupe la valeur
127
+    if (defined('_JQ_INSERT_CHECK_ARGS') and $id_job) {
128
+        $args = sql_getfetsel('args', 'spip_jobs', 'id_job=' . intval($id_job));
129
+        if ($args !== $arguments) {
130
+            spip_log('arguments job errones / longueur ' . strlen($args) . ' vs ' . strlen($arguments) . ' / valeur : ' . var_export(
131
+                $arguments,
132
+                true
133
+            ), 'queue');
134
+        }
135
+    }
136
+
137
+    if ($id_job) {
138
+        queue_update_next_job_time($time);
139
+    }
140
+    // si la mise en file d'attente du job echoue,
141
+    // il ne faut pas perdre l'execution de la fonction
142
+    // on la lance immediatement, c'est un fallback
143
+    // sauf en cas d'upgrade necessaire (table spip_jobs inexistante)
144
+    elseif ($GLOBALS['meta']['version_installee'] == $GLOBALS['spip_version_base']) {
145
+        $set_job['id_job'] = 0;
146
+        queue_start_job($set_job);
147
+    }
148
+
149
+    return $id_job;
150 150
 }
151 151
 
152 152
 /**
@@ -155,11 +155,11 @@  discard block
 block discarded – undo
155 155
  * @return void
156 156
  */
157 157
 function queue_purger() {
158
-	include_spip('base/abstract_sql');
159
-	sql_delete('spip_jobs');
160
-	sql_delete('spip_jobs_liens', 'id_job NOT IN (' . sql_get_select('id_job', 'spip_jobs') . ')');
161
-	include_spip('inc/genie');
162
-	genie_queue_watch_dist();
158
+    include_spip('base/abstract_sql');
159
+    sql_delete('spip_jobs');
160
+    sql_delete('spip_jobs_liens', 'id_job NOT IN (' . sql_get_select('id_job', 'spip_jobs') . ')');
161
+    include_spip('inc/genie');
162
+    genie_queue_watch_dist();
163 163
 }
164 164
 
165 165
 /**
@@ -170,25 +170,25 @@  discard block
 block discarded – undo
170 170
  * @return int|bool
171 171
  */
172 172
 function queue_remove_job($id_job) {
173
-	include_spip('base/abstract_sql');
174
-
175
-	if (
176
-		$row = sql_fetsel('fonction,inclure,date', 'spip_jobs', 'id_job=' . intval($id_job))
177
-		and $res = sql_delete('spip_jobs', 'id_job=' . intval($id_job))
178
-	) {
179
-		queue_unlink_job($id_job);
180
-		// est-ce une tache cron qu'il faut relancer ?
181
-		if ($periode = queue_is_cron_job($row['fonction'], $row['inclure'])) {
182
-			// relancer avec les nouveaux arguments de temps
183
-			include_spip('inc/genie');
184
-			// relancer avec la periode prevue
185
-			queue_genie_replan_job($row['fonction'], $periode, strtotime($row['date']));
186
-		}
187
-		queue_update_next_job_time();
188
-		return $res;
189
-	}
190
-
191
-	return false;
173
+    include_spip('base/abstract_sql');
174
+
175
+    if (
176
+        $row = sql_fetsel('fonction,inclure,date', 'spip_jobs', 'id_job=' . intval($id_job))
177
+        and $res = sql_delete('spip_jobs', 'id_job=' . intval($id_job))
178
+    ) {
179
+        queue_unlink_job($id_job);
180
+        // est-ce une tache cron qu'il faut relancer ?
181
+        if ($periode = queue_is_cron_job($row['fonction'], $row['inclure'])) {
182
+            // relancer avec les nouveaux arguments de temps
183
+            include_spip('inc/genie');
184
+            // relancer avec la periode prevue
185
+            queue_genie_replan_job($row['fonction'], $periode, strtotime($row['date']));
186
+        }
187
+        queue_update_next_job_time();
188
+        return $res;
189
+    }
190
+
191
+    return false;
192 192
 }
193 193
 
194 194
 /**
@@ -201,18 +201,18 @@  discard block
 block discarded – undo
201 201
  *  ou un tableau composé de tableaux simples pour lieur plusieurs objets en une fois
202 202
  */
203 203
 function queue_link_job($id_job, $objets) {
204
-	include_spip('base/abstract_sql');
205
-
206
-	if (is_array($objets) and count($objets)) {
207
-		if (is_array(reset($objets))) {
208
-			foreach ($objets as $k => $o) {
209
-				$objets[$k]['id_job'] = $id_job;
210
-			}
211
-			sql_insertq_multi('spip_jobs_liens', $objets);
212
-		} else {
213
-			sql_insertq('spip_jobs_liens', array_merge(['id_job' => $id_job], $objets));
214
-		}
215
-	}
204
+    include_spip('base/abstract_sql');
205
+
206
+    if (is_array($objets) and count($objets)) {
207
+        if (is_array(reset($objets))) {
208
+            foreach ($objets as $k => $o) {
209
+                $objets[$k]['id_job'] = $id_job;
210
+            }
211
+            sql_insertq_multi('spip_jobs_liens', $objets);
212
+        } else {
213
+            sql_insertq('spip_jobs_liens', array_merge(['id_job' => $id_job], $objets));
214
+        }
215
+    }
216 216
 }
217 217
 
218 218
 /**
@@ -224,7 +224,7 @@  discard block
 block discarded – undo
224 224
  *  resultat du sql_delete
225 225
  */
226 226
 function queue_unlink_job($id_job) {
227
-	return sql_delete('spip_jobs_liens', 'id_job=' . intval($id_job));
227
+    return sql_delete('spip_jobs_liens', 'id_job=' . intval($id_job));
228 228
 }
229 229
 
230 230
 /**
@@ -237,84 +237,84 @@  discard block
 block discarded – undo
237 237
  */
238 238
 function queue_start_job($row) {
239 239
 
240
-	// deserialiser les arguments
241
-	$args = unserialize($row['args']);
242
-	if ($args === false) {
243
-		spip_log('arguments job errones ' . var_export($row, true), 'queue');
244
-		$args = [];
245
-	}
246
-
247
-	$fonction = $row['fonction'];
248
-	if (strlen($inclure = trim($row['inclure']))) {
249
-		if (substr($inclure, -1) == '/') { // c'est un chemin pour charger_fonction
250
-			$f = charger_fonction($fonction, rtrim($inclure, '/'), false);
251
-			if ($f) {
252
-				$fonction = $f;
253
-			}
254
-		} else {
255
-			include_spip($inclure);
256
-		}
257
-	}
258
-
259
-	if (!function_exists($fonction)) {
260
-		spip_log("fonction $fonction ($inclure) inexistante " . var_export($row, true), 'queue');
261
-
262
-		return false;
263
-	}
264
-
265
-	spip_log('queue [' . $row['id_job'] . "]: $fonction() start", 'queue');
266
-	switch (count($args)) {
267
-		case 0:
268
-			$res = $fonction();
269
-			break;
270
-		case 1:
271
-			$res = $fonction($args[0]);
272
-			break;
273
-		case 2:
274
-			$res = $fonction($args[0], $args[1]);
275
-			break;
276
-		case 3:
277
-			$res = $fonction($args[0], $args[1], $args[2]);
278
-			break;
279
-		case 4:
280
-			$res = $fonction($args[0], $args[1], $args[2], $args[3]);
281
-			break;
282
-		case 5:
283
-			$res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4]);
284
-			break;
285
-		case 6:
286
-			$res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
287
-			break;
288
-		case 7:
289
-			$res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6]);
290
-			break;
291
-		case 8:
292
-			$res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]);
293
-			break;
294
-		case 9:
295
-			$res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7], $args[8]);
296
-			break;
297
-		case 10:
298
-			$res = $fonction(
299
-				$args[0],
300
-				$args[1],
301
-				$args[2],
302
-				$args[3],
303
-				$args[4],
304
-				$args[5],
305
-				$args[6],
306
-				$args[7],
307
-				$args[8],
308
-				$args[9]
309
-			);
310
-			break;
311
-		default:
312
-			# plus lent mais completement generique
313
-			$res = call_user_func_array($fonction, $args);
314
-	}
315
-	spip_log('queue [' . $row['id_job'] . "]: $fonction() end", 'queue');
316
-
317
-	return $res;
240
+    // deserialiser les arguments
241
+    $args = unserialize($row['args']);
242
+    if ($args === false) {
243
+        spip_log('arguments job errones ' . var_export($row, true), 'queue');
244
+        $args = [];
245
+    }
246
+
247
+    $fonction = $row['fonction'];
248
+    if (strlen($inclure = trim($row['inclure']))) {
249
+        if (substr($inclure, -1) == '/') { // c'est un chemin pour charger_fonction
250
+            $f = charger_fonction($fonction, rtrim($inclure, '/'), false);
251
+            if ($f) {
252
+                $fonction = $f;
253
+            }
254
+        } else {
255
+            include_spip($inclure);
256
+        }
257
+    }
258
+
259
+    if (!function_exists($fonction)) {
260
+        spip_log("fonction $fonction ($inclure) inexistante " . var_export($row, true), 'queue');
261
+
262
+        return false;
263
+    }
264
+
265
+    spip_log('queue [' . $row['id_job'] . "]: $fonction() start", 'queue');
266
+    switch (count($args)) {
267
+        case 0:
268
+            $res = $fonction();
269
+            break;
270
+        case 1:
271
+            $res = $fonction($args[0]);
272
+            break;
273
+        case 2:
274
+            $res = $fonction($args[0], $args[1]);
275
+            break;
276
+        case 3:
277
+            $res = $fonction($args[0], $args[1], $args[2]);
278
+            break;
279
+        case 4:
280
+            $res = $fonction($args[0], $args[1], $args[2], $args[3]);
281
+            break;
282
+        case 5:
283
+            $res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4]);
284
+            break;
285
+        case 6:
286
+            $res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
287
+            break;
288
+        case 7:
289
+            $res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6]);
290
+            break;
291
+        case 8:
292
+            $res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]);
293
+            break;
294
+        case 9:
295
+            $res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7], $args[8]);
296
+            break;
297
+        case 10:
298
+            $res = $fonction(
299
+                $args[0],
300
+                $args[1],
301
+                $args[2],
302
+                $args[3],
303
+                $args[4],
304
+                $args[5],
305
+                $args[6],
306
+                $args[7],
307
+                $args[8],
308
+                $args[9]
309
+            );
310
+            break;
311
+        default:
312
+            # plus lent mais completement generique
313
+            $res = call_user_func_array($fonction, $args);
314
+    }
315
+    spip_log('queue [' . $row['id_job'] . "]: $fonction() end", 'queue');
316
+
317
+    return $res;
318 318
 }
319 319
 
320 320
 /**
@@ -341,89 +341,89 @@  discard block
 block discarded – undo
341 341
  *     - true : une planification a été faite.
342 342
  */
343 343
 function queue_schedule($force_jobs = null) {
344
-	$time = time();
345
-	if (defined('_DEBUG_BLOCK_QUEUE')) {
346
-		spip_log('_DEBUG_BLOCK_QUEUE : schedule stop', 'jq' . _LOG_DEBUG);
347
-
348
-		return;
349
-	}
350
-
351
-	// rien a faire si le prochain job est encore dans le futur
352
-	if (queue_sleep_time_to_next_job() > 0 and (!$force_jobs or !count($force_jobs))) {
353
-		spip_log('queue_sleep_time_to_next_job', 'jq' . _LOG_DEBUG);
354
-
355
-		return;
356
-	}
357
-
358
-	include_spip('base/abstract_sql');
359
-	// on ne peut rien faire si pas de connexion SQL
360
-	if (!spip_connect()) {
361
-		return false;
362
-	}
363
-
364
-	if (!defined('_JQ_MAX_JOBS_TIME_TO_EXECUTE')) {
365
-		$max_time = ini_get('max_execution_time') / 2;
366
-		// valeur conservatrice si on a pas reussi a lire le max_execution_time
367
-		if (!$max_time) {
368
-			$max_time = 5;
369
-		}
370
-		define('_JQ_MAX_JOBS_TIME_TO_EXECUTE', min($max_time, 15)); // une valeur maxi en temps.
371
-	}
372
-	$end_time = $time + _JQ_MAX_JOBS_TIME_TO_EXECUTE;
373
-
374
-	spip_log("JQ schedule $time / $end_time", 'jq' . _LOG_DEBUG);
375
-
376
-	if (!defined('_JQ_MAX_JOBS_EXECUTE')) {
377
-		define('_JQ_MAX_JOBS_EXECUTE', 200);
378
-	}
379
-	$nbj = 0;
380
-	// attraper les jobs
381
-	// dont la date est passee (echus en attente),
382
-	// par ordre :
383
-	//	- de priorite
384
-	//	- de date
385
-	// lorsqu'un job cron n'a pas fini, sa priorite est descendue
386
-	// pour qu'il ne bloque pas les autres jobs en attente
387
-	if (is_array($force_jobs) and count($force_jobs)) {
388
-		$cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND ' . sql_in('id_job', $force_jobs);
389
-	} else {
390
-		$now = date('Y-m-d H:i:s', $time);
391
-		$cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND date<=' . sql_quote($now);
392
-	}
393
-
394
-	register_shutdown_function('queue_error_handler'); // recuperer les erreurs auant que possible
395
-	$res = sql_allfetsel('*', 'spip_jobs', $cond, '', 'priorite DESC,date', '0,' . (_JQ_MAX_JOBS_EXECUTE + 1));
396
-	do {
397
-		if ($row = array_shift($res)) {
398
-			$nbj++;
399
-			// il faut un verrou, a base de sql_delete
400
-			if (sql_delete('spip_jobs', 'id_job=' . intval($row['id_job']) . ' AND status=' . intval(_JQ_SCHEDULED))) {
401
-				#spip_log("JQ schedule job ".$nbj." OK",'jq');
402
-				// on reinsert dans la base aussitot avec un status=_JQ_PENDING
403
-				$row['status'] = _JQ_PENDING;
404
-				$row['date'] = date('Y-m-d H:i:s', $time);
405
-				sql_insertq('spip_jobs', $row);
406
-
407
-				// on a la main sur le job :
408
-				// l'executer
409
-				$result = queue_start_job($row);
410
-
411
-				$time = time();
412
-				queue_close_job($row, $time, $result);
413
-			}
414
-		}
415
-		spip_log('JQ schedule job end time ' . $time, 'jq' . _LOG_DEBUG);
416
-	} while ($nbj < _JQ_MAX_JOBS_EXECUTE and $row and $time < $end_time);
417
-	spip_log('JQ schedule end time ' . time(), 'jq' . _LOG_DEBUG);
418
-
419
-	if ($row = array_shift($res)) {
420
-		queue_update_next_job_time(0); // on sait qu'il y a encore des jobs a lancer ASAP
421
-		spip_log('JQ encore !', 'jq' . _LOG_DEBUG);
422
-	} else {
423
-		queue_update_next_job_time();
424
-	}
425
-
426
-	return true;
344
+    $time = time();
345
+    if (defined('_DEBUG_BLOCK_QUEUE')) {
346
+        spip_log('_DEBUG_BLOCK_QUEUE : schedule stop', 'jq' . _LOG_DEBUG);
347
+
348
+        return;
349
+    }
350
+
351
+    // rien a faire si le prochain job est encore dans le futur
352
+    if (queue_sleep_time_to_next_job() > 0 and (!$force_jobs or !count($force_jobs))) {
353
+        spip_log('queue_sleep_time_to_next_job', 'jq' . _LOG_DEBUG);
354
+
355
+        return;
356
+    }
357
+
358
+    include_spip('base/abstract_sql');
359
+    // on ne peut rien faire si pas de connexion SQL
360
+    if (!spip_connect()) {
361
+        return false;
362
+    }
363
+
364
+    if (!defined('_JQ_MAX_JOBS_TIME_TO_EXECUTE')) {
365
+        $max_time = ini_get('max_execution_time') / 2;
366
+        // valeur conservatrice si on a pas reussi a lire le max_execution_time
367
+        if (!$max_time) {
368
+            $max_time = 5;
369
+        }
370
+        define('_JQ_MAX_JOBS_TIME_TO_EXECUTE', min($max_time, 15)); // une valeur maxi en temps.
371
+    }
372
+    $end_time = $time + _JQ_MAX_JOBS_TIME_TO_EXECUTE;
373
+
374
+    spip_log("JQ schedule $time / $end_time", 'jq' . _LOG_DEBUG);
375
+
376
+    if (!defined('_JQ_MAX_JOBS_EXECUTE')) {
377
+        define('_JQ_MAX_JOBS_EXECUTE', 200);
378
+    }
379
+    $nbj = 0;
380
+    // attraper les jobs
381
+    // dont la date est passee (echus en attente),
382
+    // par ordre :
383
+    //	- de priorite
384
+    //	- de date
385
+    // lorsqu'un job cron n'a pas fini, sa priorite est descendue
386
+    // pour qu'il ne bloque pas les autres jobs en attente
387
+    if (is_array($force_jobs) and count($force_jobs)) {
388
+        $cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND ' . sql_in('id_job', $force_jobs);
389
+    } else {
390
+        $now = date('Y-m-d H:i:s', $time);
391
+        $cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND date<=' . sql_quote($now);
392
+    }
393
+
394
+    register_shutdown_function('queue_error_handler'); // recuperer les erreurs auant que possible
395
+    $res = sql_allfetsel('*', 'spip_jobs', $cond, '', 'priorite DESC,date', '0,' . (_JQ_MAX_JOBS_EXECUTE + 1));
396
+    do {
397
+        if ($row = array_shift($res)) {
398
+            $nbj++;
399
+            // il faut un verrou, a base de sql_delete
400
+            if (sql_delete('spip_jobs', 'id_job=' . intval($row['id_job']) . ' AND status=' . intval(_JQ_SCHEDULED))) {
401
+                #spip_log("JQ schedule job ".$nbj." OK",'jq');
402
+                // on reinsert dans la base aussitot avec un status=_JQ_PENDING
403
+                $row['status'] = _JQ_PENDING;
404
+                $row['date'] = date('Y-m-d H:i:s', $time);
405
+                sql_insertq('spip_jobs', $row);
406
+
407
+                // on a la main sur le job :
408
+                // l'executer
409
+                $result = queue_start_job($row);
410
+
411
+                $time = time();
412
+                queue_close_job($row, $time, $result);
413
+            }
414
+        }
415
+        spip_log('JQ schedule job end time ' . $time, 'jq' . _LOG_DEBUG);
416
+    } while ($nbj < _JQ_MAX_JOBS_EXECUTE and $row and $time < $end_time);
417
+    spip_log('JQ schedule end time ' . time(), 'jq' . _LOG_DEBUG);
418
+
419
+    if ($row = array_shift($res)) {
420
+        queue_update_next_job_time(0); // on sait qu'il y a encore des jobs a lancer ASAP
421
+        spip_log('JQ encore !', 'jq' . _LOG_DEBUG);
422
+    } else {
423
+        queue_update_next_job_time();
424
+    }
425
+
426
+    return true;
427 427
 }
428 428
 
429 429
 /**
@@ -441,21 +441,21 @@  discard block
 block discarded – undo
441 441
  * @param int $result
442 442
  */
443 443
 function queue_close_job(&$row, $time, $result = 0) {
444
-	// est-ce une tache cron qu'il faut relancer ?
445
-	if ($periode = queue_is_cron_job($row['fonction'], $row['inclure'])) {
446
-		// relancer avec les nouveaux arguments de temps
447
-		include_spip('inc/genie');
448
-		if ($result < 0) { // relancer tout de suite, mais en baissant la priorite
449
-		queue_genie_replan_job($row['fonction'], $periode, 0 - $result, null, $row['priorite'] - 1);
450
-		} else // relancer avec la periode prevue
451
-		{
452
-			queue_genie_replan_job($row['fonction'], $periode, $time);
453
-		}
454
-	}
455
-	// purger ses liens eventuels avec des objets
456
-	sql_delete('spip_jobs_liens', 'id_job=' . intval($row['id_job']));
457
-	// supprimer le job fini
458
-	sql_delete('spip_jobs', 'id_job=' . intval($row['id_job']));
444
+    // est-ce une tache cron qu'il faut relancer ?
445
+    if ($periode = queue_is_cron_job($row['fonction'], $row['inclure'])) {
446
+        // relancer avec les nouveaux arguments de temps
447
+        include_spip('inc/genie');
448
+        if ($result < 0) { // relancer tout de suite, mais en baissant la priorite
449
+        queue_genie_replan_job($row['fonction'], $periode, 0 - $result, null, $row['priorite'] - 1);
450
+        } else // relancer avec la periode prevue
451
+        {
452
+            queue_genie_replan_job($row['fonction'], $periode, $time);
453
+        }
454
+    }
455
+    // purger ses liens eventuels avec des objets
456
+    sql_delete('spip_jobs_liens', 'id_job=' . intval($row['id_job']));
457
+    // supprimer le job fini
458
+    sql_delete('spip_jobs', 'id_job=' . intval($row['id_job']));
459 459
 }
460 460
 
461 461
 /**
@@ -465,10 +465,10 @@  discard block
 block discarded – undo
465 465
  * @uses queue_update_next_job_time()
466 466
  */
467 467
 function queue_error_handler() {
468
-	// se remettre dans le bon dossier, car Apache le change parfois (toujours?)
469
-	chdir(_ROOT_CWD);
468
+    // se remettre dans le bon dossier, car Apache le change parfois (toujours?)
469
+    chdir(_ROOT_CWD);
470 470
 
471
-	queue_update_next_job_time();
471
+    queue_update_next_job_time();
472 472
 }
473 473
 
474 474
 
@@ -485,18 +485,18 @@  discard block
 block discarded – undo
485 485
  *     Périodicité de la tâche en secondes, si tâche périodique, sinon false.
486 486
  */
487 487
 function queue_is_cron_job($function, $inclure) {
488
-	static $taches = null;
489
-	if (strncmp($inclure, 'genie/', 6) == 0) {
490
-		if (is_null($taches)) {
491
-			include_spip('inc/genie');
492
-			$taches = taches_generales();
493
-		}
494
-		if (isset($taches[$function])) {
495
-			return $taches[$function];
496
-		}
497
-	}
498
-
499
-	return false;
488
+    static $taches = null;
489
+    if (strncmp($inclure, 'genie/', 6) == 0) {
490
+        if (is_null($taches)) {
491
+            include_spip('inc/genie');
492
+            $taches = taches_generales();
493
+        }
494
+        if (isset($taches[$function])) {
495
+            return $taches[$function];
496
+        }
497
+    }
498
+
499
+    return false;
500 500
 }
501 501
 
502 502
 /**
@@ -510,62 +510,62 @@  discard block
 block discarded – undo
510 510
  *  temps de la tache ajoutee ou 0 pour ASAP
511 511
  */
512 512
 function queue_update_next_job_time($next_time = null) {
513
-	static $nb_jobs_scheduled = null;
514
-	static $deja_la = false;
515
-	// prendre le min des $next_time que l'on voit passer ici, en cas de reentrance
516
-	static $next = null;
517
-	// queue_close_job peut etre reentrant ici
518
-	if ($deja_la) {
519
-		return;
520
-	}
521
-	$deja_la = true;
522
-
523
-	include_spip('base/abstract_sql');
524
-	$time = time();
525
-
526
-	// traiter les jobs morts au combat (_JQ_PENDING depuis plus de 180s)
527
-	// pour cause de timeout ou autre erreur fatale
528
-	$res = sql_allfetsel(
529
-		'*',
530
-		'spip_jobs',
531
-		'status=' . intval(_JQ_PENDING) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time - 180))
532
-	);
533
-	if (is_array($res)) {
534
-		foreach ($res as $row) {
535
-			queue_close_job($row, $time);
536
-			spip_log('queue_close_job car _JQ_PENDING depuis +180s : ' . print_r($row, 1), 'job_mort' . _LOG_ERREUR);
537
-		}
538
-	}
539
-
540
-	// chercher la date du prochain job si pas connu
541
-	if (is_null($next) or is_null(queue_sleep_time_to_next_job())) {
542
-		$date = sql_getfetsel('date', 'spip_jobs', 'status=' . intval(_JQ_SCHEDULED), '', 'date', '0,1');
543
-		$next = strtotime($date);
544
-	}
545
-	if (!is_null($next_time)) {
546
-		if (is_null($next) or $next > $next_time) {
547
-			$next = $next_time;
548
-		}
549
-	}
550
-
551
-	if ($next) {
552
-		if (is_null($nb_jobs_scheduled)) {
553
-			$nb_jobs_scheduled = sql_countsel(
554
-				'spip_jobs',
555
-				'status=' . intval(_JQ_SCHEDULED) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time))
556
-			);
557
-		} elseif ($next <= $time) {
558
-			$nb_jobs_scheduled++;
559
-		}
560
-		// si trop de jobs en attente, on force la purge en fin de hit
561
-		// pour assurer le coup
562
-		if ($nb_jobs_scheduled > (defined('_JQ_NB_JOBS_OVERFLOW') ? _JQ_NB_JOBS_OVERFLOW : 10000)) {
563
-			define('_DIRECT_CRON_FORCE', true);
564
-		}
565
-	}
566
-
567
-	queue_set_next_job_time($next);
568
-	$deja_la = false;
513
+    static $nb_jobs_scheduled = null;
514
+    static $deja_la = false;
515
+    // prendre le min des $next_time que l'on voit passer ici, en cas de reentrance
516
+    static $next = null;
517
+    // queue_close_job peut etre reentrant ici
518
+    if ($deja_la) {
519
+        return;
520
+    }
521
+    $deja_la = true;
522
+
523
+    include_spip('base/abstract_sql');
524
+    $time = time();
525
+
526
+    // traiter les jobs morts au combat (_JQ_PENDING depuis plus de 180s)
527
+    // pour cause de timeout ou autre erreur fatale
528
+    $res = sql_allfetsel(
529
+        '*',
530
+        'spip_jobs',
531
+        'status=' . intval(_JQ_PENDING) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time - 180))
532
+    );
533
+    if (is_array($res)) {
534
+        foreach ($res as $row) {
535
+            queue_close_job($row, $time);
536
+            spip_log('queue_close_job car _JQ_PENDING depuis +180s : ' . print_r($row, 1), 'job_mort' . _LOG_ERREUR);
537
+        }
538
+    }
539
+
540
+    // chercher la date du prochain job si pas connu
541
+    if (is_null($next) or is_null(queue_sleep_time_to_next_job())) {
542
+        $date = sql_getfetsel('date', 'spip_jobs', 'status=' . intval(_JQ_SCHEDULED), '', 'date', '0,1');
543
+        $next = strtotime($date);
544
+    }
545
+    if (!is_null($next_time)) {
546
+        if (is_null($next) or $next > $next_time) {
547
+            $next = $next_time;
548
+        }
549
+    }
550
+
551
+    if ($next) {
552
+        if (is_null($nb_jobs_scheduled)) {
553
+            $nb_jobs_scheduled = sql_countsel(
554
+                'spip_jobs',
555
+                'status=' . intval(_JQ_SCHEDULED) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time))
556
+            );
557
+        } elseif ($next <= $time) {
558
+            $nb_jobs_scheduled++;
559
+        }
560
+        // si trop de jobs en attente, on force la purge en fin de hit
561
+        // pour assurer le coup
562
+        if ($nb_jobs_scheduled > (defined('_JQ_NB_JOBS_OVERFLOW') ? _JQ_NB_JOBS_OVERFLOW : 10000)) {
563
+            define('_DIRECT_CRON_FORCE', true);
564
+        }
565
+    }
566
+
567
+    queue_set_next_job_time($next);
568
+    $deja_la = false;
569 569
 }
570 570
 
571 571
 
@@ -576,26 +576,26 @@  discard block
 block discarded – undo
576 576
  */
577 577
 function queue_set_next_job_time($next) {
578 578
 
579
-	// utiliser le temps courant reel plutot que temps de la requete ici
580
-	$time = time();
581
-
582
-	// toujours relire la valeur pour comparer, pour tenir compte des maj concourrantes
583
-	// et ne mettre a jour que si il y a un interet a le faire
584
-	// permet ausis d'initialiser le nom de fichier a coup sur
585
-	$curr_next = $_SERVER['REQUEST_TIME'] + max(0, queue_sleep_time_to_next_job(true));
586
-	if (
587
-		($curr_next <= $time and $next > $time) // le prochain job est dans le futur mais pas la date planifiee actuelle
588
-		or $curr_next > $next // le prochain job est plus tot que la date planifiee actuelle
589
-	) {
590
-		if (function_exists('cache_set') and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) {
591
-			cache_set(_JQ_NEXT_JOB_TIME_FILENAME, intval($next));
592
-		} else {
593
-			ecrire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, intval($next));
594
-		}
595
-		queue_sleep_time_to_next_job($next);
596
-	}
597
-
598
-	return queue_sleep_time_to_next_job();
579
+    // utiliser le temps courant reel plutot que temps de la requete ici
580
+    $time = time();
581
+
582
+    // toujours relire la valeur pour comparer, pour tenir compte des maj concourrantes
583
+    // et ne mettre a jour que si il y a un interet a le faire
584
+    // permet ausis d'initialiser le nom de fichier a coup sur
585
+    $curr_next = $_SERVER['REQUEST_TIME'] + max(0, queue_sleep_time_to_next_job(true));
586
+    if (
587
+        ($curr_next <= $time and $next > $time) // le prochain job est dans le futur mais pas la date planifiee actuelle
588
+        or $curr_next > $next // le prochain job est plus tot que la date planifiee actuelle
589
+    ) {
590
+        if (function_exists('cache_set') and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) {
591
+            cache_set(_JQ_NEXT_JOB_TIME_FILENAME, intval($next));
592
+        } else {
593
+            ecrire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, intval($next));
594
+        }
595
+        queue_sleep_time_to_next_job($next);
596
+    }
597
+
598
+    return queue_sleep_time_to_next_job();
599 599
 }
600 600
 
601 601
 /**
@@ -612,60 +612,60 @@  discard block
 block discarded – undo
612 612
  * @return string
613 613
  */
614 614
 function queue_affichage_cron() {
615
-	$texte = '';
616
-
617
-	$time_to_next = queue_sleep_time_to_next_job();
618
-	// rien a faire si le prochain job est encore dans le futur
619
-	if ($time_to_next > 0 or defined('_DEBUG_BLOCK_QUEUE')) {
620
-		return $texte;
621
-	}
622
-
623
-	// ne pas relancer si on vient de lancer dans la meme seconde par un hit concurent
624
-	if (file_exists($lock = _DIR_TMP . 'cron.lock') and !(@filemtime($lock) < $_SERVER['REQUEST_TIME'])) {
625
-		return $texte;
626
-	}
627
-
628
-	@touch($lock);
629
-
630
-	// il y a des taches en attentes
631
-	// si depuis plus de 5min, on essaye de lancer le cron par tous les moyens pour rattraper le coup
632
-	// on est sans doute sur un site qui n'autorise pas http sortant ou avec peu de trafic
633
-	$urgent = false;
634
-	if ($time_to_next < -300) {
635
-		$urgent = true;
636
-	}
637
-
638
-	$url_cron = generer_url_action('cron', '', false, true);
639
-
640
-	if (!defined('_HTML_BG_CRON_FORCE') or !_HTML_BG_CRON_FORCE) {
641
-		if (queue_lancer_url_http_async($url_cron) and !$urgent) {
642
-			return $texte;
643
-		}
644
-	}
645
-
646
-	// si deja force, on retourne sans rien
647
-	if (defined('_DIRECT_CRON_FORCE')) {
648
-		return $texte;
649
-	}
650
-
651
-	// si c'est un bot
652
-	// inutile de faire un appel par image background,
653
-	// on force un appel direct en fin de hit
654
-	if ((defined('_IS_BOT') and _IS_BOT)) {
655
-		define('_DIRECT_CRON_FORCE', true);
656
-
657
-		return $texte;
658
-	}
659
-
660
-	if (!defined('_HTML_BG_CRON_INHIB') or !_HTML_BG_CRON_INHIB) {
661
-		// en derniere solution, on insere un appel xhr non bloquant ou une image background dans la page si pas de JS
662
-		$url_cron = generer_url_action('cron');
663
-		$texte = '<!-- SPIP-CRON -->'
664
-		  . "<script>setTimeout(function(){var xo = new XMLHttpRequest();xo.open('GET', '$url_cron', true);xo.send('');},100);</script>"
665
-		  . "<noscript><div style=\"background-image: url('$url_cron');\"></div></noscript>";
666
-	}
667
-
668
-	return $texte;
615
+    $texte = '';
616
+
617
+    $time_to_next = queue_sleep_time_to_next_job();
618
+    // rien a faire si le prochain job est encore dans le futur
619
+    if ($time_to_next > 0 or defined('_DEBUG_BLOCK_QUEUE')) {
620
+        return $texte;
621
+    }
622
+
623
+    // ne pas relancer si on vient de lancer dans la meme seconde par un hit concurent
624
+    if (file_exists($lock = _DIR_TMP . 'cron.lock') and !(@filemtime($lock) < $_SERVER['REQUEST_TIME'])) {
625
+        return $texte;
626
+    }
627
+
628
+    @touch($lock);
629
+
630
+    // il y a des taches en attentes
631
+    // si depuis plus de 5min, on essaye de lancer le cron par tous les moyens pour rattraper le coup
632
+    // on est sans doute sur un site qui n'autorise pas http sortant ou avec peu de trafic
633
+    $urgent = false;
634
+    if ($time_to_next < -300) {
635
+        $urgent = true;
636
+    }
637
+
638
+    $url_cron = generer_url_action('cron', '', false, true);
639
+
640
+    if (!defined('_HTML_BG_CRON_FORCE') or !_HTML_BG_CRON_FORCE) {
641
+        if (queue_lancer_url_http_async($url_cron) and !$urgent) {
642
+            return $texte;
643
+        }
644
+    }
645
+
646
+    // si deja force, on retourne sans rien
647
+    if (defined('_DIRECT_CRON_FORCE')) {
648
+        return $texte;
649
+    }
650
+
651
+    // si c'est un bot
652
+    // inutile de faire un appel par image background,
653
+    // on force un appel direct en fin de hit
654
+    if ((defined('_IS_BOT') and _IS_BOT)) {
655
+        define('_DIRECT_CRON_FORCE', true);
656
+
657
+        return $texte;
658
+    }
659
+
660
+    if (!defined('_HTML_BG_CRON_INHIB') or !_HTML_BG_CRON_INHIB) {
661
+        // en derniere solution, on insere un appel xhr non bloquant ou une image background dans la page si pas de JS
662
+        $url_cron = generer_url_action('cron');
663
+        $texte = '<!-- SPIP-CRON -->'
664
+            . "<script>setTimeout(function(){var xo = new XMLHttpRequest();xo.open('GET', '$url_cron', true);xo.send('');},100);</script>"
665
+            . "<noscript><div style=\"background-image: url('$url_cron');\"></div></noscript>";
666
+    }
667
+
668
+    return $texte;
669 669
 }
670 670
 
671 671
 /**
@@ -674,73 +674,73 @@  discard block
 block discarded – undo
674 674
  * @return bool : true si l'url a pu être appelée en asynchrone, false sinon
675 675
  */
676 676
 function queue_lancer_url_http_async($url_cron) {
677
-	// methode la plus rapide :
678
-	// Si fsockopen est possible, on lance le cron via un socket en asynchrone
679
-	// si fsockopen echoue (disponibilite serveur, firewall) on essaye pas cURL
680
-	// car on a toutes les chances d'echouer pareil mais sans moyen de le savoir
681
-	// mais on renvoie false direct
682
-	if (function_exists('fsockopen')) {
683
-		$parts = parse_url($url_cron);
684
-
685
-		switch ($parts['scheme']) {
686
-			case 'https':
687
-				$scheme = 'ssl://';
688
-				$port = 443;
689
-				break;
690
-			case 'http':
691
-			default:
692
-				$scheme = '';
693
-				$port = 80;
694
-		}
695
-		$fp = @fsockopen(
696
-			$scheme . $parts['host'],
697
-			isset($parts['port']) ? $parts['port'] : $port,
698
-			$errno,
699
-			$errstr,
700
-			1
701
-		);
702
-
703
-		if ($fp) {
704
-			$host_sent = $parts['host'];
705
-			if (isset($parts['port']) and $parts['port'] !== $port) {
706
-				$host_sent .= ':' . $parts['port'];
707
-			}
708
-			$timeout = 200; // ms
709
-			stream_set_timeout($fp, 0, $timeout * 1000);
710
-			$query = $parts['path'] . ($parts['query'] ? '?' . $parts['query'] : '');
711
-			$out = 'GET ' . $query . " HTTP/1.1\r\n";
712
-			$out .= 'Host: ' . $host_sent . "\r\n";
713
-			$out .= "Connection: Close\r\n\r\n";
714
-			fwrite($fp, $out);
715
-			spip_timer('read');
716
-			$t = 0;
717
-			// on lit la reponse si possible pour fermer proprement la connexion
718
-			// avec un timeout total de 200ms pour ne pas se bloquer
719
-			while (!feof($fp) and $t < $timeout) {
720
-				@fgets($fp, 1024);
721
-				$t += spip_timer('read', true);
722
-				spip_timer('read');
723
-			}
724
-			fclose($fp);
725
-			return true;
726
-		}
727
-	}
728
-	// si fsockopen n'est pas dispo on essaye cURL :
729
-	// lancer le cron par un cURL asynchrone si cURL est present
730
-	elseif (function_exists('curl_init')) {
731
-		//setting the curl parameters.
732
-		$ch = curl_init($url_cron);
733
-		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
734
-		// cf bug : http://www.php.net/manual/en/function.curl-setopt.php#104597
735
-		curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
736
-		// valeur mini pour que la requete soit lancee
737
-		curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);
738
-		// lancer
739
-		curl_exec($ch);
740
-		// fermer
741
-		curl_close($ch);
742
-		return true;
743
-	}
744
-
745
-	return false;
677
+    // methode la plus rapide :
678
+    // Si fsockopen est possible, on lance le cron via un socket en asynchrone
679
+    // si fsockopen echoue (disponibilite serveur, firewall) on essaye pas cURL
680
+    // car on a toutes les chances d'echouer pareil mais sans moyen de le savoir
681
+    // mais on renvoie false direct
682
+    if (function_exists('fsockopen')) {
683
+        $parts = parse_url($url_cron);
684
+
685
+        switch ($parts['scheme']) {
686
+            case 'https':
687
+                $scheme = 'ssl://';
688
+                $port = 443;
689
+                break;
690
+            case 'http':
691
+            default:
692
+                $scheme = '';
693
+                $port = 80;
694
+        }
695
+        $fp = @fsockopen(
696
+            $scheme . $parts['host'],
697
+            isset($parts['port']) ? $parts['port'] : $port,
698
+            $errno,
699
+            $errstr,
700
+            1
701
+        );
702
+
703
+        if ($fp) {
704
+            $host_sent = $parts['host'];
705
+            if (isset($parts['port']) and $parts['port'] !== $port) {
706
+                $host_sent .= ':' . $parts['port'];
707
+            }
708
+            $timeout = 200; // ms
709
+            stream_set_timeout($fp, 0, $timeout * 1000);
710
+            $query = $parts['path'] . ($parts['query'] ? '?' . $parts['query'] : '');
711
+            $out = 'GET ' . $query . " HTTP/1.1\r\n";
712
+            $out .= 'Host: ' . $host_sent . "\r\n";
713
+            $out .= "Connection: Close\r\n\r\n";
714
+            fwrite($fp, $out);
715
+            spip_timer('read');
716
+            $t = 0;
717
+            // on lit la reponse si possible pour fermer proprement la connexion
718
+            // avec un timeout total de 200ms pour ne pas se bloquer
719
+            while (!feof($fp) and $t < $timeout) {
720
+                @fgets($fp, 1024);
721
+                $t += spip_timer('read', true);
722
+                spip_timer('read');
723
+            }
724
+            fclose($fp);
725
+            return true;
726
+        }
727
+    }
728
+    // si fsockopen n'est pas dispo on essaye cURL :
729
+    // lancer le cron par un cURL asynchrone si cURL est present
730
+    elseif (function_exists('curl_init')) {
731
+        //setting the curl parameters.
732
+        $ch = curl_init($url_cron);
733
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
734
+        // cf bug : http://www.php.net/manual/en/function.curl-setopt.php#104597
735
+        curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
736
+        // valeur mini pour que la requete soit lancee
737
+        curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);
738
+        // lancer
739
+        curl_exec($ch);
740
+        // fermer
741
+        curl_close($ch);
742
+        return true;
743
+    }
744
+
745
+    return false;
746 746
 }
Please login to merge, or discard this patch.
ecrire/inc/texte.php 2 patches
Indentation   +227 added lines, -227 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('inc/texte_mini');
@@ -34,7 +34,7 @@  discard block
 block discarded – undo
34 34
  * @return array Tablea ('','')
35 35
  */
36 36
 function definir_raccourcis_alineas() {
37
-	return ['', ''];
37
+    return ['', ''];
38 38
 }
39 39
 
40 40
 
@@ -47,7 +47,7 @@  discard block
 block discarded – undo
47 47
  * @return string
48 48
  */
49 49
 function traiter_tableau($bloc) {
50
-	return $bloc;
50
+    return $bloc;
51 51
 }
52 52
 
53 53
 
@@ -61,7 +61,7 @@  discard block
 block discarded – undo
61 61
  * @return string
62 62
  */
63 63
 function traiter_listes($texte) {
64
-	return $texte;
64
+    return $texte;
65 65
 }
66 66
 
67 67
 /**
@@ -77,16 +77,16 @@  discard block
 block discarded – undo
77 77
  */
78 78
 function traiter_raccourcis($letexte) {
79 79
 
80
-	// Appeler les fonctions de pre_traitement
81
-	$letexte = pipeline('pre_propre', $letexte);
80
+    // Appeler les fonctions de pre_traitement
81
+    $letexte = pipeline('pre_propre', $letexte);
82 82
 
83
-	// APPELER ICI UN PIPELINE traiter_raccourcis ?
84
-	// $letexte = pipeline('traiter_raccourcis', $letexte);
83
+    // APPELER ICI UN PIPELINE traiter_raccourcis ?
84
+    // $letexte = pipeline('traiter_raccourcis', $letexte);
85 85
 
86
-	// Appeler les fonctions de post-traitement
87
-	$letexte = pipeline('post_propre', $letexte);
86
+    // Appeler les fonctions de post-traitement
87
+    $letexte = pipeline('post_propre', $letexte);
88 88
 
89
-	return $letexte;
89
+    return $letexte;
90 90
 }
91 91
 
92 92
 /*************************************************************************************************************************
@@ -102,22 +102,22 @@  discard block
 block discarded – undo
102 102
  * @return string
103 103
  */
104 104
 function echappe_js($t, $class = ' class = "echappe-js"') {
105
-	foreach (['script', 'iframe'] as $tag) {
106
-		if (
107
-			stripos($t, "<$tag") !== false
108
-			and preg_match_all(',<' . $tag . '.*?($|</' . $tag . '.),isS', $t, $r, PREG_SET_ORDER)
109
-		) {
110
-			foreach ($r as $regs) {
111
-				$t = str_replace(
112
-					$regs[0],
113
-					"<code$class>" . nl2br(spip_htmlspecialchars($regs[0])) . '</code>',
114
-					$t
115
-				);
116
-			}
117
-		}
118
-	}
119
-
120
-	return $t;
105
+    foreach (['script', 'iframe'] as $tag) {
106
+        if (
107
+            stripos($t, "<$tag") !== false
108
+            and preg_match_all(',<' . $tag . '.*?($|</' . $tag . '.),isS', $t, $r, PREG_SET_ORDER)
109
+        ) {
110
+            foreach ($r as $regs) {
111
+                $t = str_replace(
112
+                    $regs[0],
113
+                    "<code$class>" . nl2br(spip_htmlspecialchars($regs[0])) . '</code>',
114
+                    $t
115
+                );
116
+            }
117
+        }
118
+    }
119
+
120
+    return $t;
121 121
 }
122 122
 
123 123
 
@@ -146,55 +146,55 @@  discard block
 block discarded – undo
146 146
  *     Code protégé
147 147
  **/
148 148
 function interdire_scripts($arg, $mode_filtre = null) {
149
-	// on memorise le resultat sur les arguments non triviaux
150
-	static $dejavu = [];
151
-
152
-	// Attention, si ce n'est pas une chaine, laisser intact
153
-	if (!$arg or !is_string($arg) or !strstr($arg, '<')) {
154
-		return $arg;
155
-	}
156
-
157
-	if (is_null($mode_filtre) or !in_array($mode_filtre, [-1, 0, 1])) {
158
-		$mode_filtre = $GLOBALS['filtrer_javascript'];
159
-	}
160
-
161
-	if (isset($dejavu[$mode_filtre][$arg])) {
162
-		return $dejavu[$mode_filtre][$arg];
163
-	}
164
-
165
-	// echapper les tags asp/php
166
-	$t = str_replace('<' . '%', '&lt;%', $arg);
167
-
168
-	// echapper le php
169
-	$t = str_replace('<' . '?', '&lt;?', $t);
170
-
171
-	// echapper le < script language=php >
172
-	$t = preg_replace(',<(script\b[^>]+\blanguage\b[^\w>]+php\b),UimsS', '&lt;\1', $t);
173
-
174
-	// Pour le js, trois modes : parano (-1), prive (0), ok (1)
175
-	switch ($mode_filtre) {
176
-		case 0:
177
-			if (!_DIR_RESTREINT) {
178
-				$t = echappe_js($t);
179
-			}
180
-			break;
181
-		case -1:
182
-			$t = echappe_js($t);
183
-			break;
184
-	}
185
-
186
-	// pas de <base href /> svp !
187
-	$t = preg_replace(',<(base\b),iS', '&lt;\1', $t);
188
-
189
-	// Reinserer les echappements des modeles
190
-	if (defined('_PROTEGE_JS_MODELES')) {
191
-		$t = echappe_retour($t, 'javascript' . _PROTEGE_JS_MODELES);
192
-	}
193
-	if (defined('_PROTEGE_PHP_MODELES')) {
194
-		$t = echappe_retour($t, 'php' . _PROTEGE_PHP_MODELES);
195
-	}
196
-
197
-	return $dejavu[$mode_filtre][$arg] = $t;
149
+    // on memorise le resultat sur les arguments non triviaux
150
+    static $dejavu = [];
151
+
152
+    // Attention, si ce n'est pas une chaine, laisser intact
153
+    if (!$arg or !is_string($arg) or !strstr($arg, '<')) {
154
+        return $arg;
155
+    }
156
+
157
+    if (is_null($mode_filtre) or !in_array($mode_filtre, [-1, 0, 1])) {
158
+        $mode_filtre = $GLOBALS['filtrer_javascript'];
159
+    }
160
+
161
+    if (isset($dejavu[$mode_filtre][$arg])) {
162
+        return $dejavu[$mode_filtre][$arg];
163
+    }
164
+
165
+    // echapper les tags asp/php
166
+    $t = str_replace('<' . '%', '&lt;%', $arg);
167
+
168
+    // echapper le php
169
+    $t = str_replace('<' . '?', '&lt;?', $t);
170
+
171
+    // echapper le < script language=php >
172
+    $t = preg_replace(',<(script\b[^>]+\blanguage\b[^\w>]+php\b),UimsS', '&lt;\1', $t);
173
+
174
+    // Pour le js, trois modes : parano (-1), prive (0), ok (1)
175
+    switch ($mode_filtre) {
176
+        case 0:
177
+            if (!_DIR_RESTREINT) {
178
+                $t = echappe_js($t);
179
+            }
180
+            break;
181
+        case -1:
182
+            $t = echappe_js($t);
183
+            break;
184
+    }
185
+
186
+    // pas de <base href /> svp !
187
+    $t = preg_replace(',<(base\b),iS', '&lt;\1', $t);
188
+
189
+    // Reinserer les echappements des modeles
190
+    if (defined('_PROTEGE_JS_MODELES')) {
191
+        $t = echappe_retour($t, 'javascript' . _PROTEGE_JS_MODELES);
192
+    }
193
+    if (defined('_PROTEGE_PHP_MODELES')) {
194
+        $t = echappe_retour($t, 'php' . _PROTEGE_PHP_MODELES);
195
+    }
196
+
197
+    return $dejavu[$mode_filtre][$arg] = $t;
198 198
 }
199 199
 
200 200
 
@@ -223,66 +223,66 @@  discard block
 block discarded – undo
223 223
  *     Texte transformé
224 224
  **/
225 225
 function typo($letexte, $echapper = true, $connect = null, $env = []) {
226
-	// Plus vite !
227
-	if (!$letexte) {
228
-		return $letexte;
229
-	}
230
-
231
-	// les appels directs a cette fonction depuis le php de l'espace
232
-	// prive etant historiquement ecrit sans argment $connect
233
-	// on utilise la presence de celui-ci pour distinguer les cas
234
-	// ou il faut passer interdire_script explicitement
235
-	// les appels dans les squelettes (de l'espace prive) fournissant un $connect
236
-	// ne seront pas perturbes
237
-	$interdire_script = false;
238
-	if (is_null($connect)) {
239
-		$connect = '';
240
-		$interdire_script = true;
241
-		$env['espace_prive'] = test_espace_prive();
242
-	}
243
-
244
-	// Echapper les codes <html> etc
245
-	if ($echapper) {
246
-		$letexte = echappe_html($letexte, 'TYPO');
247
-	}
248
-
249
-	//
250
-	// Installer les modeles, notamment images et documents ;
251
-	//
252
-	// NOTE : propre() ne passe pas par ici mais directement par corriger_typo
253
-	// cf. inc/lien
254
-
255
-	$letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect, null, $env);
256
-	if ($letexte != $mem) {
257
-		$echapper = true;
258
-	}
259
-	unset($mem);
260
-
261
-	$letexte = corriger_typo($letexte);
262
-	$letexte = echapper_faux_tags($letexte);
263
-
264
-	// reintegrer les echappements
265
-	if ($echapper) {
266
-		$letexte = echappe_retour($letexte, 'TYPO');
267
-	}
268
-
269
-	// Dans les appels directs hors squelette, securiser ici aussi
270
-	if ($interdire_script) {
271
-		$letexte = interdire_scripts($letexte);
272
-	}
273
-
274
-	// Dans l'espace prive on se mefie de tout contenu dangereux
275
-	// https://core.spip.net/issues/3371
276
-	// et aussi dans l'espace public si la globale filtrer_javascript = -1
277
-	// https://core.spip.net/issues/4166
278
-	if (
279
-		$GLOBALS['filtrer_javascript'] == -1
280
-		or (isset($env['espace_prive']) and $env['espace_prive'] and $GLOBALS['filtrer_javascript'] <= 0)
281
-	) {
282
-		$letexte = echapper_html_suspect($letexte);
283
-	}
284
-
285
-	return $letexte;
226
+    // Plus vite !
227
+    if (!$letexte) {
228
+        return $letexte;
229
+    }
230
+
231
+    // les appels directs a cette fonction depuis le php de l'espace
232
+    // prive etant historiquement ecrit sans argment $connect
233
+    // on utilise la presence de celui-ci pour distinguer les cas
234
+    // ou il faut passer interdire_script explicitement
235
+    // les appels dans les squelettes (de l'espace prive) fournissant un $connect
236
+    // ne seront pas perturbes
237
+    $interdire_script = false;
238
+    if (is_null($connect)) {
239
+        $connect = '';
240
+        $interdire_script = true;
241
+        $env['espace_prive'] = test_espace_prive();
242
+    }
243
+
244
+    // Echapper les codes <html> etc
245
+    if ($echapper) {
246
+        $letexte = echappe_html($letexte, 'TYPO');
247
+    }
248
+
249
+    //
250
+    // Installer les modeles, notamment images et documents ;
251
+    //
252
+    // NOTE : propre() ne passe pas par ici mais directement par corriger_typo
253
+    // cf. inc/lien
254
+
255
+    $letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect, null, $env);
256
+    if ($letexte != $mem) {
257
+        $echapper = true;
258
+    }
259
+    unset($mem);
260
+
261
+    $letexte = corriger_typo($letexte);
262
+    $letexte = echapper_faux_tags($letexte);
263
+
264
+    // reintegrer les echappements
265
+    if ($echapper) {
266
+        $letexte = echappe_retour($letexte, 'TYPO');
267
+    }
268
+
269
+    // Dans les appels directs hors squelette, securiser ici aussi
270
+    if ($interdire_script) {
271
+        $letexte = interdire_scripts($letexte);
272
+    }
273
+
274
+    // Dans l'espace prive on se mefie de tout contenu dangereux
275
+    // https://core.spip.net/issues/3371
276
+    // et aussi dans l'espace public si la globale filtrer_javascript = -1
277
+    // https://core.spip.net/issues/4166
278
+    if (
279
+        $GLOBALS['filtrer_javascript'] == -1
280
+        or (isset($env['espace_prive']) and $env['espace_prive'] and $GLOBALS['filtrer_javascript'] <= 0)
281
+    ) {
282
+        $letexte = echapper_html_suspect($letexte);
283
+    }
284
+
285
+    return $letexte;
286 286
 }
287 287
 
288 288
 // Correcteur typographique
@@ -307,57 +307,57 @@  discard block
 block discarded – undo
307 307
  */
308 308
 function corriger_typo($letexte, $lang = '') {
309 309
 
310
-	// Plus vite !
311
-	if (!$letexte) {
312
-		return $letexte;
313
-	}
314
-
315
-	$letexte = pipeline('pre_typo', $letexte);
316
-
317
-	// Caracteres de controle "illegaux"
318
-	$letexte = corriger_caracteres($letexte);
319
-
320
-	// Proteger les caracteres typographiques a l'interieur des tags html
321
-	if (preg_match_all(_TYPO_BALISE, $letexte, $regs, PREG_SET_ORDER)) {
322
-		foreach ($regs as $reg) {
323
-			$insert = $reg[0];
324
-			// hack: on transforme les caracteres a proteger en les remplacant
325
-			// par des caracteres "illegaux". (cf corriger_caracteres())
326
-			$insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
327
-			$letexte = str_replace($reg[0], $insert, $letexte);
328
-		}
329
-	}
330
-
331
-	// trouver les blocs idiomes et les traiter à part
332
-	$letexte = extraire_idiome($ei = $letexte, $lang, true);
333
-	$ei = ($ei !== $letexte);
334
-
335
-	// trouver les blocs multi et les traiter a part
336
-	$letexte = extraire_multi($em = $letexte, $lang, true);
337
-	$em = ($em !== $letexte);
338
-
339
-	// Charger & appliquer les fonctions de typographie
340
-	$typographie = charger_fonction(lang_typo($lang), 'typographie');
341
-	$letexte = $typographie($letexte);
342
-
343
-	// Les citations en une autre langue, s'il y a lieu
344
-	if ($em) {
345
-		$letexte = echappe_retour($letexte, 'multi');
346
-	}
347
-	if ($ei) {
348
-		$letexte = echappe_retour($letexte, 'idiome');
349
-	}
350
-
351
-	// Retablir les caracteres proteges
352
-	$letexte = strtr($letexte, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
353
-
354
-	// pipeline
355
-	$letexte = pipeline('post_typo', $letexte);
356
-
357
-	# un message pour abs_url - on est passe en mode texte
358
-	$GLOBALS['mode_abs_url'] = 'texte';
359
-
360
-	return $letexte;
310
+    // Plus vite !
311
+    if (!$letexte) {
312
+        return $letexte;
313
+    }
314
+
315
+    $letexte = pipeline('pre_typo', $letexte);
316
+
317
+    // Caracteres de controle "illegaux"
318
+    $letexte = corriger_caracteres($letexte);
319
+
320
+    // Proteger les caracteres typographiques a l'interieur des tags html
321
+    if (preg_match_all(_TYPO_BALISE, $letexte, $regs, PREG_SET_ORDER)) {
322
+        foreach ($regs as $reg) {
323
+            $insert = $reg[0];
324
+            // hack: on transforme les caracteres a proteger en les remplacant
325
+            // par des caracteres "illegaux". (cf corriger_caracteres())
326
+            $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
327
+            $letexte = str_replace($reg[0], $insert, $letexte);
328
+        }
329
+    }
330
+
331
+    // trouver les blocs idiomes et les traiter à part
332
+    $letexte = extraire_idiome($ei = $letexte, $lang, true);
333
+    $ei = ($ei !== $letexte);
334
+
335
+    // trouver les blocs multi et les traiter a part
336
+    $letexte = extraire_multi($em = $letexte, $lang, true);
337
+    $em = ($em !== $letexte);
338
+
339
+    // Charger & appliquer les fonctions de typographie
340
+    $typographie = charger_fonction(lang_typo($lang), 'typographie');
341
+    $letexte = $typographie($letexte);
342
+
343
+    // Les citations en une autre langue, s'il y a lieu
344
+    if ($em) {
345
+        $letexte = echappe_retour($letexte, 'multi');
346
+    }
347
+    if ($ei) {
348
+        $letexte = echappe_retour($letexte, 'idiome');
349
+    }
350
+
351
+    // Retablir les caracteres proteges
352
+    $letexte = strtr($letexte, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
353
+
354
+    // pipeline
355
+    $letexte = pipeline('post_typo', $letexte);
356
+
357
+    # un message pour abs_url - on est passe en mode texte
358
+    $GLOBALS['mode_abs_url'] = 'texte';
359
+
360
+    return $letexte;
361 361
 }
362 362
 
363 363
 
@@ -373,7 +373,7 @@  discard block
 block discarded – undo
373 373
  * @return string
374 374
  */
375 375
 function paragrapher($letexte, $forcer = true) {
376
-	return $letexte;
376
+    return $letexte;
377 377
 }
378 378
 
379 379
 /**
@@ -385,11 +385,11 @@  discard block
 block discarded – undo
385 385
  * @return string Texte
386 386
  **/
387 387
 function traiter_retours_chariots($letexte) {
388
-	$letexte = preg_replace(",\r\n?,S", "\n", $letexte);
389
-	$letexte = preg_replace(',<p[>[:space:]],iS', "\n\n\\0", $letexte);
390
-	$letexte = preg_replace(',</p[>[:space:]],iS', "\\0\n\n", $letexte);
388
+    $letexte = preg_replace(",\r\n?,S", "\n", $letexte);
389
+    $letexte = preg_replace(',<p[>[:space:]],iS', "\n\n\\0", $letexte);
390
+    $letexte = preg_replace(',</p[>[:space:]],iS', "\\0\n\n", $letexte);
391 391
 
392
-	return $letexte;
392
+    return $letexte;
393 393
 }
394 394
 
395 395
 
@@ -415,39 +415,39 @@  discard block
 block discarded – undo
415 415
  *     Texte transformé
416 416
  **/
417 417
 function propre($t, $connect = null, $env = []) {
418
-	// les appels directs a cette fonction depuis le php de l'espace
419
-	// prive etant historiquement ecrits sans argment $connect
420
-	// on utilise la presence de celui-ci pour distinguer les cas
421
-	// ou il faut passer interdire_script explicitement
422
-	// les appels dans les squelettes (de l'espace prive) fournissant un $connect
423
-	// ne seront pas perturbes
424
-	$interdire_script = false;
425
-	if (is_null($connect)) {
426
-		$connect = '';
427
-		$interdire_script = true;
428
-	}
429
-
430
-	if (!$t) {
431
-		return strval($t);
432
-	}
433
-
434
-	// Dans l'espace prive on se mefie de tout contenu dangereux
435
-	// avant echappement des balises <html>
436
-	// https://core.spip.net/issues/3371
437
-	// et aussi dans l'espace public si la globale filtrer_javascript = -1
438
-	// https://core.spip.net/issues/4166
439
-	if (
440
-		$interdire_script
441
-		or $GLOBALS['filtrer_javascript'] == -1
442
-		or (isset($env['espace_prive']) and $env['espace_prive'] and $GLOBALS['filtrer_javascript'] <= 0)
443
-		or (isset($env['wysiwyg']) and $env['wysiwyg'] and $GLOBALS['filtrer_javascript'] <= 0)
444
-	) {
445
-		$t = echapper_html_suspect($t, false);
446
-	}
447
-	$t = echappe_html($t);
448
-	$t = expanser_liens($t, $connect, $env);
449
-	$t = traiter_raccourcis($t);
450
-	$t = echappe_retour_modeles($t, $interdire_script);
451
-
452
-	return $t;
418
+    // les appels directs a cette fonction depuis le php de l'espace
419
+    // prive etant historiquement ecrits sans argment $connect
420
+    // on utilise la presence de celui-ci pour distinguer les cas
421
+    // ou il faut passer interdire_script explicitement
422
+    // les appels dans les squelettes (de l'espace prive) fournissant un $connect
423
+    // ne seront pas perturbes
424
+    $interdire_script = false;
425
+    if (is_null($connect)) {
426
+        $connect = '';
427
+        $interdire_script = true;
428
+    }
429
+
430
+    if (!$t) {
431
+        return strval($t);
432
+    }
433
+
434
+    // Dans l'espace prive on se mefie de tout contenu dangereux
435
+    // avant echappement des balises <html>
436
+    // https://core.spip.net/issues/3371
437
+    // et aussi dans l'espace public si la globale filtrer_javascript = -1
438
+    // https://core.spip.net/issues/4166
439
+    if (
440
+        $interdire_script
441
+        or $GLOBALS['filtrer_javascript'] == -1
442
+        or (isset($env['espace_prive']) and $env['espace_prive'] and $GLOBALS['filtrer_javascript'] <= 0)
443
+        or (isset($env['wysiwyg']) and $env['wysiwyg'] and $GLOBALS['filtrer_javascript'] <= 0)
444
+    ) {
445
+        $t = echapper_html_suspect($t, false);
446
+    }
447
+    $t = echappe_html($t);
448
+    $t = expanser_liens($t, $connect, $env);
449
+    $t = traiter_raccourcis($t);
450
+    $t = echappe_retour_modeles($t, $interdire_script);
451
+
452
+    return $t;
453 453
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -105,12 +105,12 @@  discard block
 block discarded – undo
105 105
 	foreach (['script', 'iframe'] as $tag) {
106 106
 		if (
107 107
 			stripos($t, "<$tag") !== false
108
-			and preg_match_all(',<' . $tag . '.*?($|</' . $tag . '.),isS', $t, $r, PREG_SET_ORDER)
108
+			and preg_match_all(',<'.$tag.'.*?($|</'.$tag.'.),isS', $t, $r, PREG_SET_ORDER)
109 109
 		) {
110 110
 			foreach ($r as $regs) {
111 111
 				$t = str_replace(
112 112
 					$regs[0],
113
-					"<code$class>" . nl2br(spip_htmlspecialchars($regs[0])) . '</code>',
113
+					"<code$class>".nl2br(spip_htmlspecialchars($regs[0])).'</code>',
114 114
 					$t
115 115
 				);
116 116
 			}
@@ -163,10 +163,10 @@  discard block
 block discarded – undo
163 163
 	}
164 164
 
165 165
 	// echapper les tags asp/php
166
-	$t = str_replace('<' . '%', '&lt;%', $arg);
166
+	$t = str_replace('<'.'%', '&lt;%', $arg);
167 167
 
168 168
 	// echapper le php
169
-	$t = str_replace('<' . '?', '&lt;?', $t);
169
+	$t = str_replace('<'.'?', '&lt;?', $t);
170 170
 
171 171
 	// echapper le < script language=php >
172 172
 	$t = preg_replace(',<(script\b[^>]+\blanguage\b[^\w>]+php\b),UimsS', '&lt;\1', $t);
@@ -188,10 +188,10 @@  discard block
 block discarded – undo
188 188
 
189 189
 	// Reinserer les echappements des modeles
190 190
 	if (defined('_PROTEGE_JS_MODELES')) {
191
-		$t = echappe_retour($t, 'javascript' . _PROTEGE_JS_MODELES);
191
+		$t = echappe_retour($t, 'javascript'._PROTEGE_JS_MODELES);
192 192
 	}
193 193
 	if (defined('_PROTEGE_PHP_MODELES')) {
194
-		$t = echappe_retour($t, 'php' . _PROTEGE_PHP_MODELES);
194
+		$t = echappe_retour($t, 'php'._PROTEGE_PHP_MODELES);
195 195
 	}
196 196
 
197 197
 	return $dejavu[$mode_filtre][$arg] = $t;
@@ -289,7 +289,7 @@  discard block
 block discarded – undo
289 289
 define('_TYPO_PROTEGER', "!':;?~%-");
290 290
 define('_TYPO_PROTECTEUR', "\x1\x2\x3\x4\x5\x6\x7\x8");
291 291
 
292
-define('_TYPO_BALISE', ',</?[a-z!][^<>]*[' . preg_quote(_TYPO_PROTEGER) . '][^<>]*>,imsS');
292
+define('_TYPO_BALISE', ',</?[a-z!][^<>]*['.preg_quote(_TYPO_PROTEGER).'][^<>]*>,imsS');
293 293
 
294 294
 /**
295 295
  * Corrige la typographie
Please login to merge, or discard this patch.
ecrire/inc/xml.php 2 patches
Indentation   +157 added lines, -157 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -47,24 +47,24 @@  discard block
 block discarded – undo
47 47
  *     - false si l'arbre xml ne peut être créé ou est vide
48 48
  **/
49 49
 function spip_xml_load($fichier, $strict = true, $clean = true, $taille_max = 1048576, $datas = '', $profondeur = -1) {
50
-	$contenu = '';
51
-	if (tester_url_absolue($fichier)) {
52
-		include_spip('inc/distant');
53
-		$contenu = recuperer_url($fichier, ['taille_max' => $taille_max, 'datas' => $datas]);
54
-		$contenu = $contenu['page'] ?? '';
55
-	} else {
56
-		lire_fichier($fichier, $contenu);
57
-	}
58
-	$arbre = [];
59
-	if ($contenu) {
60
-		$arbre = spip_xml_parse($contenu, $strict, $clean, $profondeur);
61
-	}
50
+    $contenu = '';
51
+    if (tester_url_absolue($fichier)) {
52
+        include_spip('inc/distant');
53
+        $contenu = recuperer_url($fichier, ['taille_max' => $taille_max, 'datas' => $datas]);
54
+        $contenu = $contenu['page'] ?? '';
55
+    } else {
56
+        lire_fichier($fichier, $contenu);
57
+    }
58
+    $arbre = [];
59
+    if ($contenu) {
60
+        $arbre = spip_xml_parse($contenu, $strict, $clean, $profondeur);
61
+    }
62 62
 
63
-	return count($arbre) ? $arbre : false;
63
+    return count($arbre) ? $arbre : false;
64 64
 }
65 65
 
66 66
 if (!defined('_SPIP_XML_TAG_SPLIT')) {
67
-	define('_SPIP_XML_TAG_SPLIT', '{<([^:>][^>]*?)>}sS');
67
+    define('_SPIP_XML_TAG_SPLIT', '{<([^:>][^>]*?)>}sS');
68 68
 }
69 69
 
70 70
 /**
@@ -83,153 +83,153 @@  discard block
 block discarded – undo
83 83
  *     - false si l'arbre xml ne peut être créé ou est vide
84 84
  **/
85 85
 function spip_xml_parse(&$texte, $strict = true, $clean = true, $profondeur = -1) {
86
-	$out = [];
87
-	// enlever les commentaires
88
-	$charset = 'AUTO';
89
-	if ($clean === true) {
90
-		if (preg_match(",<\?xml\s(.*?)encoding=['\"]?(.*?)['\"]?(\s(.*))?\?>,im", $texte, $regs)) {
91
-			$charset = $regs[2];
92
-		}
93
-		$texte = preg_replace(',<!--(.*?)-->,is', '', $texte);
94
-		$texte = preg_replace(',<\?(.*?)\?>,is', '', $texte);
95
-		include_spip('inc/charsets');
96
-		$clean = $charset;
97
-		//$texte = importer_charset($texte,$charset);
98
-	}
99
-	if (is_string($clean)) {
100
-		$charset = $clean;
101
-	}
102
-	$txt = $texte;
86
+    $out = [];
87
+    // enlever les commentaires
88
+    $charset = 'AUTO';
89
+    if ($clean === true) {
90
+        if (preg_match(",<\?xml\s(.*?)encoding=['\"]?(.*?)['\"]?(\s(.*))?\?>,im", $texte, $regs)) {
91
+            $charset = $regs[2];
92
+        }
93
+        $texte = preg_replace(',<!--(.*?)-->,is', '', $texte);
94
+        $texte = preg_replace(',<\?(.*?)\?>,is', '', $texte);
95
+        include_spip('inc/charsets');
96
+        $clean = $charset;
97
+        //$texte = importer_charset($texte,$charset);
98
+    }
99
+    if (is_string($clean)) {
100
+        $charset = $clean;
101
+    }
102
+    $txt = $texte;
103 103
 
104
-	// tant qu'il y a des tags
105
-	$chars = preg_split(_SPIP_XML_TAG_SPLIT, $txt, 2, PREG_SPLIT_DELIM_CAPTURE);
106
-	while (count($chars) >= 2) {
107
-		// tag ouvrant
108
-		//$chars = preg_split("{<([^>]*?)>}s",$txt,2,PREG_SPLIT_DELIM_CAPTURE);
104
+    // tant qu'il y a des tags
105
+    $chars = preg_split(_SPIP_XML_TAG_SPLIT, $txt, 2, PREG_SPLIT_DELIM_CAPTURE);
106
+    while (count($chars) >= 2) {
107
+        // tag ouvrant
108
+        //$chars = preg_split("{<([^>]*?)>}s",$txt,2,PREG_SPLIT_DELIM_CAPTURE);
109 109
 
110
-		// $before doit etre vide ou des espaces uniquements!
111
-		$before = trim($chars[0]);
110
+        // $before doit etre vide ou des espaces uniquements!
111
+        $before = trim($chars[0]);
112 112
 
113
-		if (strlen($before) > 0) {
114
-			return importer_charset($texte, $charset);
115
-		}//$texte; // before non vide, donc on est dans du texte
113
+        if (strlen($before) > 0) {
114
+            return importer_charset($texte, $charset);
115
+        }//$texte; // before non vide, donc on est dans du texte
116 116
 
117
-		$tag = rtrim($chars[1]);
118
-		$txt = $chars[2];
117
+        $tag = rtrim($chars[1]);
118
+        $txt = $chars[2];
119 119
 
120
-		if (strncmp($tag, '![CDATA[', 8) == 0) {
121
-			return importer_charset($texte, $charset);
122
-		}//$texte;
123
-		if (substr($tag, -1) == '/') { // self closing tag
124
-			$tag = rtrim(substr($tag, 0, strlen($tag) - 1));
125
-			$out[$tag][] = '';
126
-		} else {
127
-			$closing_tag = preg_split(",\s|\t|\n|\r,", trim($tag));
128
-			$closing_tag = reset($closing_tag);
129
-			// tag fermant
130
-			$ncclos = strlen("</$closing_tag>");
131
-			$p = strpos($txt, "</$closing_tag>");
132
-			if ($p !== false and (strpos($txt, '<') < $p)) {
133
-				$nclose = 0;
134
-				$nopen = 0;
135
-				$d = 0;
136
-				while (
137
-					$p !== false
138
-					and ($morceau = substr($txt, $d, $p - $d))
139
-					and (($nopen += preg_match_all(
140
-						'{<' . preg_quote($closing_tag) . '(\s*>|\s[^>]*[^/>]>)}is',
141
-						$morceau,
142
-						$matches,
143
-						PREG_SET_ORDER
144
-					)) > $nclose)
145
-				) {
146
-					$nclose++;
147
-					$d = $p + $ncclos;
148
-					$p = strpos($txt, "</$closing_tag>", $d);
149
-				}
150
-			}
151
-			if ($p === false) {
152
-				if ($strict) {
153
-					$out[$tag][] = "erreur : tag fermant $tag manquant::$txt";
120
+        if (strncmp($tag, '![CDATA[', 8) == 0) {
121
+            return importer_charset($texte, $charset);
122
+        }//$texte;
123
+        if (substr($tag, -1) == '/') { // self closing tag
124
+            $tag = rtrim(substr($tag, 0, strlen($tag) - 1));
125
+            $out[$tag][] = '';
126
+        } else {
127
+            $closing_tag = preg_split(",\s|\t|\n|\r,", trim($tag));
128
+            $closing_tag = reset($closing_tag);
129
+            // tag fermant
130
+            $ncclos = strlen("</$closing_tag>");
131
+            $p = strpos($txt, "</$closing_tag>");
132
+            if ($p !== false and (strpos($txt, '<') < $p)) {
133
+                $nclose = 0;
134
+                $nopen = 0;
135
+                $d = 0;
136
+                while (
137
+                    $p !== false
138
+                    and ($morceau = substr($txt, $d, $p - $d))
139
+                    and (($nopen += preg_match_all(
140
+                        '{<' . preg_quote($closing_tag) . '(\s*>|\s[^>]*[^/>]>)}is',
141
+                        $morceau,
142
+                        $matches,
143
+                        PREG_SET_ORDER
144
+                    )) > $nclose)
145
+                ) {
146
+                    $nclose++;
147
+                    $d = $p + $ncclos;
148
+                    $p = strpos($txt, "</$closing_tag>", $d);
149
+                }
150
+            }
151
+            if ($p === false) {
152
+                if ($strict) {
153
+                    $out[$tag][] = "erreur : tag fermant $tag manquant::$txt";
154 154
 
155
-					return $out;
156
-				} else {
157
-					return importer_charset($texte, $charset);
158
-				}//$texte // un tag qui constitue du texte a reporter dans $before
159
-			}
160
-			$content = substr($txt, 0, $p);
161
-			$txt = substr($txt, $p + $ncclos);
162
-			if ($profondeur == 0 or strpos($content, '<') === false) { // eviter une recursion si pas utile
163
-			$out[$tag][] = importer_charset($content, $charset);
164
-			}//$content;
165
-			else {
166
-				$out[$tag][] = spip_xml_parse($content, $strict, $clean, $profondeur - 1);
167
-			}
168
-		}
169
-		$chars = preg_split(_SPIP_XML_TAG_SPLIT, $txt, 2, PREG_SPLIT_DELIM_CAPTURE);
170
-	}
171
-	if (count($out) && (strlen(trim($txt)) == 0)) {
172
-		return $out;
173
-	} else {
174
-		return importer_charset($texte, $charset);
175
-	}//$texte;
155
+                    return $out;
156
+                } else {
157
+                    return importer_charset($texte, $charset);
158
+                }//$texte // un tag qui constitue du texte a reporter dans $before
159
+            }
160
+            $content = substr($txt, 0, $p);
161
+            $txt = substr($txt, $p + $ncclos);
162
+            if ($profondeur == 0 or strpos($content, '<') === false) { // eviter une recursion si pas utile
163
+            $out[$tag][] = importer_charset($content, $charset);
164
+            }//$content;
165
+            else {
166
+                $out[$tag][] = spip_xml_parse($content, $strict, $clean, $profondeur - 1);
167
+            }
168
+        }
169
+        $chars = preg_split(_SPIP_XML_TAG_SPLIT, $txt, 2, PREG_SPLIT_DELIM_CAPTURE);
170
+    }
171
+    if (count($out) && (strlen(trim($txt)) == 0)) {
172
+        return $out;
173
+    } else {
174
+        return importer_charset($texte, $charset);
175
+    }//$texte;
176 176
 }
177 177
 
178 178
 // https://code.spip.net/@spip_xml_aplatit
179 179
 function spip_xml_aplatit($arbre, $separateur = ' ') {
180
-	$s = '';
181
-	if (is_array($arbre)) {
182
-		foreach ($arbre as $tag => $feuille) {
183
-			if (is_array($feuille)) {
184
-				if ($tag !== intval($tag)) {
185
-					$f = spip_xml_aplatit($feuille, $separateur);
186
-					if (strlen($f)) {
187
-						$tagf = explode(' ', $tag);
188
-						$tagf = $tagf[0];
189
-						$s .= "<$tag>$f</$tagf>";
190
-					} else {
191
-						$s .= "<$tag />";
192
-					}
193
-				} else {
194
-					$s .= spip_xml_aplatit($feuille);
195
-				}
196
-				$s .= $separateur;
197
-			} else {
198
-				$s .= "$feuille$separateur";
199
-			}
200
-		}
201
-	}
180
+    $s = '';
181
+    if (is_array($arbre)) {
182
+        foreach ($arbre as $tag => $feuille) {
183
+            if (is_array($feuille)) {
184
+                if ($tag !== intval($tag)) {
185
+                    $f = spip_xml_aplatit($feuille, $separateur);
186
+                    if (strlen($f)) {
187
+                        $tagf = explode(' ', $tag);
188
+                        $tagf = $tagf[0];
189
+                        $s .= "<$tag>$f</$tagf>";
190
+                    } else {
191
+                        $s .= "<$tag />";
192
+                    }
193
+                } else {
194
+                    $s .= spip_xml_aplatit($feuille);
195
+                }
196
+                $s .= $separateur;
197
+            } else {
198
+                $s .= "$feuille$separateur";
199
+            }
200
+        }
201
+    }
202 202
 
203
-	return strlen($separateur) ? substr($s, 0, -strlen($separateur)) : $s;
203
+    return strlen($separateur) ? substr($s, 0, -strlen($separateur)) : $s;
204 204
 }
205 205
 
206 206
 // https://code.spip.net/@spip_xml_tagname
207 207
 function spip_xml_tagname($tag) {
208
-	if (preg_match(',^([a-z][\w:]*),i', $tag, $reg)) {
209
-		return $reg[1];
210
-	}
208
+    if (preg_match(',^([a-z][\w:]*),i', $tag, $reg)) {
209
+        return $reg[1];
210
+    }
211 211
 
212
-	return '';
212
+    return '';
213 213
 }
214 214
 
215 215
 // https://code.spip.net/@spip_xml_decompose_tag
216 216
 function spip_xml_decompose_tag($tag) {
217
-	$tagname = spip_xml_tagname($tag);
218
-	$liste = [];
219
-	$tag = ltrim(strpbrk($tag, " \n\t"));
220
-	$p = strpos($tag, '=');
221
-	while ($p !== false) {
222
-		$attr = trim(substr($tag, 0, $p));
223
-		$tag = ltrim(substr($tag, $p + 1));
224
-		$quote = $tag[0];
225
-		$p = strpos($tag, $quote, 1);
226
-		$cont = substr($tag, 1, $p - 1);
227
-		$liste[$attr] = $cont;
228
-		$tag = substr($tag, $p + 1);
229
-		$p = strpos($tag, '=');
230
-	}
217
+    $tagname = spip_xml_tagname($tag);
218
+    $liste = [];
219
+    $tag = ltrim(strpbrk($tag, " \n\t"));
220
+    $p = strpos($tag, '=');
221
+    while ($p !== false) {
222
+        $attr = trim(substr($tag, 0, $p));
223
+        $tag = ltrim(substr($tag, $p + 1));
224
+        $quote = $tag[0];
225
+        $p = strpos($tag, $quote, 1);
226
+        $cont = substr($tag, 1, $p - 1);
227
+        $liste[$attr] = $cont;
228
+        $tag = substr($tag, $p + 1);
229
+        $p = strpos($tag, '=');
230
+    }
231 231
 
232
-	return [$tagname, $liste];
232
+    return [$tagname, $liste];
233 233
 }
234 234
 
235 235
 /**
@@ -252,21 +252,21 @@  discard block
 block discarded – undo
252 252
  *     false si aucun élément ne valide l'expression régulière, true sinon.
253 253
  **/
254 254
 function spip_xml_match_nodes($regexp, &$arbre, &$matches, $init = true) {
255
-	if ($init) {
256
-		$matches = [];
257
-	}
258
-	if (is_array($arbre) && count($arbre)) {
259
-		foreach (array_keys($arbre) as $tag) {
260
-			if (preg_match($regexp, $tag)) {
261
-				$matches[$tag] = &$arbre[$tag];
262
-			}
263
-			if (is_array($arbre[$tag])) {
264
-				foreach (array_keys($arbre[$tag]) as $occurences) {
265
-					spip_xml_match_nodes($regexp, $arbre[$tag][$occurences], $matches, false);
266
-				}
267
-			}
268
-		}
269
-	}
255
+    if ($init) {
256
+        $matches = [];
257
+    }
258
+    if (is_array($arbre) && count($arbre)) {
259
+        foreach (array_keys($arbre) as $tag) {
260
+            if (preg_match($regexp, $tag)) {
261
+                $matches[$tag] = &$arbre[$tag];
262
+            }
263
+            if (is_array($arbre[$tag])) {
264
+                foreach (array_keys($arbre[$tag]) as $occurences) {
265
+                    spip_xml_match_nodes($regexp, $arbre[$tag][$occurences], $matches, false);
266
+                }
267
+            }
268
+        }
269
+    }
270 270
 
271
-	return (count($matches));
271
+    return (count($matches));
272 272
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -137,7 +137,7 @@
 block discarded – undo
137 137
 					$p !== false
138 138
 					and ($morceau = substr($txt, $d, $p - $d))
139 139
 					and (($nopen += preg_match_all(
140
-						'{<' . preg_quote($closing_tag) . '(\s*>|\s[^>]*[^/>]>)}is',
140
+						'{<'.preg_quote($closing_tag).'(\s*>|\s[^>]*[^/>]>)}is',
141 141
 						$morceau,
142 142
 						$matches,
143 143
 						PREG_SET_ORDER
Please login to merge, or discard this patch.
ecrire/inc/editer.php 3 patches
Indentation   +494 added lines, -494 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('base/abstract_sql');
23 23
 
@@ -59,56 +59,56 @@  discard block
 block discarded – undo
59 59
  *     Retour des traitements.
60 60
  **/
61 61
 function formulaires_editer_objet_traiter(
62
-	$type,
63
-	$id = 'new',
64
-	$id_parent = 0,
65
-	$lier_trad = 0,
66
-	$retour = '',
67
-	$config_fonc = 'articles_edit_config',
68
-	$row = [],
69
-	$hidden = ''
62
+    $type,
63
+    $id = 'new',
64
+    $id_parent = 0,
65
+    $lier_trad = 0,
66
+    $retour = '',
67
+    $config_fonc = 'articles_edit_config',
68
+    $row = [],
69
+    $hidden = ''
70 70
 ) {
71 71
 
72
-	$res = [];
73
-	// eviter la redirection forcee par l'action...
74
-	set_request('redirect');
75
-	if ($action_editer = charger_fonction("editer_$type", 'action', true)) {
76
-		list($id, $err) = $action_editer($id);
77
-	} else {
78
-		$action_editer = charger_fonction('editer_objet', 'action');
79
-		list($id, $err) = $action_editer($id, $type);
80
-	}
81
-	$id_table_objet = id_table_objet($type);
82
-	$res[$id_table_objet] = $id;
83
-	if ($err or !$id) {
84
-		$res['message_erreur'] = ($err ? $err : _T('erreur'));
85
-	} else {
86
-		// Un lien de trad a prendre en compte
87
-		if ($lier_trad) {
88
-			// referencer la traduction
89
-			$referencer_traduction = charger_fonction('referencer_traduction', 'action');
90
-			$referencer_traduction($type, $id, $lier_trad);
91
-			// actions de recopie de champs / liens sur le nouvel objet créé
92
-			$completer_traduction = charger_fonction('completer_traduction', 'inc');
93
-			$err = $completer_traduction($type, $id, $lier_trad);
94
-			if ($err) {
95
-				$res['message_erreur'] = $err;
96
-				return $res;
97
-			}
98
-		}
99
-
100
-		$res['message_ok'] = _T('info_modification_enregistree');
101
-		if ($retour) {
102
-			if (strncmp($retour, 'javascript:', 11) == 0) {
103
-				$res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
104
-				$res['editable'] = true;
105
-			} else {
106
-				$res['redirect'] = parametre_url($retour, $id_table_objet, $id);
107
-			}
108
-		}
109
-	}
110
-
111
-	return $res;
72
+    $res = [];
73
+    // eviter la redirection forcee par l'action...
74
+    set_request('redirect');
75
+    if ($action_editer = charger_fonction("editer_$type", 'action', true)) {
76
+        list($id, $err) = $action_editer($id);
77
+    } else {
78
+        $action_editer = charger_fonction('editer_objet', 'action');
79
+        list($id, $err) = $action_editer($id, $type);
80
+    }
81
+    $id_table_objet = id_table_objet($type);
82
+    $res[$id_table_objet] = $id;
83
+    if ($err or !$id) {
84
+        $res['message_erreur'] = ($err ? $err : _T('erreur'));
85
+    } else {
86
+        // Un lien de trad a prendre en compte
87
+        if ($lier_trad) {
88
+            // referencer la traduction
89
+            $referencer_traduction = charger_fonction('referencer_traduction', 'action');
90
+            $referencer_traduction($type, $id, $lier_trad);
91
+            // actions de recopie de champs / liens sur le nouvel objet créé
92
+            $completer_traduction = charger_fonction('completer_traduction', 'inc');
93
+            $err = $completer_traduction($type, $id, $lier_trad);
94
+            if ($err) {
95
+                $res['message_erreur'] = $err;
96
+                return $res;
97
+            }
98
+        }
99
+
100
+        $res['message_ok'] = _T('info_modification_enregistree');
101
+        if ($retour) {
102
+            if (strncmp($retour, 'javascript:', 11) == 0) {
103
+                $res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
104
+                $res['editable'] = true;
105
+            } else {
106
+                $res['redirect'] = parametre_url($retour, $id_table_objet, $id);
107
+            }
108
+        }
109
+    }
110
+
111
+    return $res;
112 112
 }
113 113
 
114 114
 /**
@@ -132,29 +132,29 @@  discard block
 block discarded – undo
132 132
  *     Tableau des erreurs
133 133
  **/
134 134
 function formulaires_editer_objet_verifier($type, $id = 'new', $oblis = []) {
135
-	$erreurs = [];
136
-	if (intval($id)) {
137
-		$conflits = controler_contenu($type, $id);
138
-		if ($conflits and count($conflits)) {
139
-			foreach ($conflits as $champ => $conflit) {
140
-				if (!isset($erreurs[$champ])) {
141
-					$erreurs[$champ] = '';
142
-				}
143
-				$erreurs[$champ] .= _T('alerte_modif_info_concourante') . "<br /><textarea readonly='readonly' class='forml'>" . entites_html($conflit['base']) . '</textarea>';
144
-			}
145
-		}
146
-	}
147
-	foreach ($oblis as $obli) {
148
-		$value = _request($obli);
149
-		if (is_null($value) or !(is_array($value) ? count($value) : strlen($value))) {
150
-			if (!isset($erreurs[$obli])) {
151
-				$erreurs[$obli] = '';
152
-			}
153
-			$erreurs[$obli] .= _T('info_obligatoire');
154
-		}
155
-	}
156
-
157
-	return $erreurs;
135
+    $erreurs = [];
136
+    if (intval($id)) {
137
+        $conflits = controler_contenu($type, $id);
138
+        if ($conflits and count($conflits)) {
139
+            foreach ($conflits as $champ => $conflit) {
140
+                if (!isset($erreurs[$champ])) {
141
+                    $erreurs[$champ] = '';
142
+                }
143
+                $erreurs[$champ] .= _T('alerte_modif_info_concourante') . "<br /><textarea readonly='readonly' class='forml'>" . entites_html($conflit['base']) . '</textarea>';
144
+            }
145
+        }
146
+    }
147
+    foreach ($oblis as $obli) {
148
+        $value = _request($obli);
149
+        if (is_null($value) or !(is_array($value) ? count($value) : strlen($value))) {
150
+            if (!isset($erreurs[$obli])) {
151
+                $erreurs[$obli] = '';
152
+            }
153
+            $erreurs[$obli] .= _T('info_obligatoire');
154
+        }
155
+    }
156
+
157
+    return $erreurs;
158 158
 }
159 159
 
160 160
 /**
@@ -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
-
215
-	// on accepte pas une fonction de config inconnue si elle vient d'un modele
216
-	if (
217
-		$config_fonc
218
-		and !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config'])
219
-		and $config_fonc !== $table_objet . '_edit_config'
220
-	) {
221
-		if (
222
-			$args = test_formulaire_inclus_par_modele()
223
-			and in_array($config_fonc, $args)
224
-		) {
225
-			$config_fonc = '';
226
-		}
227
-	}
228
-
229
-	$new = !is_numeric($id);
230
-	$lang_default = '';
231
-	// Appel direct dans un squelette
232
-	if (!$row) {
233
-		if (!$new or $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']) ? $row['lang'] : null);
238
-			} else {
239
-				$row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . intval($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 or $lier_trad)
259
-		? 'oui'
260
-		: $row[$id_table_objet];
261
-	$row[$id_table_objet] = $id;
262
-
263
-	$contexte = $row;
264
-	if (strlen($id_parent) && is_numeric($id_parent) && (!isset($contexte['id_parent']) or $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
-			and $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
-			$lang_default = $config['langue'] ?? session_get('lang') ;
290
-		}
291
-	}
292
-	$config = $config + [
293
-		'lignes' => 0,
294
-		'langue' => '',
295
-	];
296
-
297
-	$att_text = " class='textarea' "
298
-		. " rows='"
299
-		. ($config['lignes'] + 15)
300
-		. "' cols='40'";
301
-	if (isset($contexte['texte'])) {
302
-		list($contexte['texte'], $contexte['_texte_trop_long']) = editer_texte_recolle($contexte['texte'], $att_text);
303
-	}
304
-
305
-	// on veut conserver la langue de l'interface ;
306
-	// on passe cette donnee sous un autre nom, au cas ou le squelette
307
-	// voudrait l'exploiter
308
-	if (isset($contexte['lang'])) {
309
-		$contexte['langue'] = $contexte['lang'];
310
-		unset($contexte['lang']);
311
-	}
312
-
313
-	$contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" .
314
-		(!$lier_trad ? '' :
315
-			("\n<input type='hidden' name='lier_trad' value='" .
316
-				$lier_trad .
317
-				"' />" .
318
-				"\n<input type='hidden' name='changer_lang' value='" .
319
-				$lang_default .
320
-				"' />"))
321
-		. $hidden
322
-		. (isset($md5) ? $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 (intval($id)) {
335
-		if (!autoriser('modifier', $type, intval($id))) {
336
-			$valeurs['editable'] = '';
337
-		}
338
-	}
339
-	else {
340
-		if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) {
341
-			$valeurs['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
+
215
+    // on accepte pas une fonction de config inconnue si elle vient d'un modele
216
+    if (
217
+        $config_fonc
218
+        and !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config'])
219
+        and $config_fonc !== $table_objet . '_edit_config'
220
+    ) {
221
+        if (
222
+            $args = test_formulaire_inclus_par_modele()
223
+            and in_array($config_fonc, $args)
224
+        ) {
225
+            $config_fonc = '';
226
+        }
227
+    }
228
+
229
+    $new = !is_numeric($id);
230
+    $lang_default = '';
231
+    // Appel direct dans un squelette
232
+    if (!$row) {
233
+        if (!$new or $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']) ? $row['lang'] : null);
238
+            } else {
239
+                $row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . intval($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 or $lier_trad)
259
+        ? 'oui'
260
+        : $row[$id_table_objet];
261
+    $row[$id_table_objet] = $id;
262
+
263
+    $contexte = $row;
264
+    if (strlen($id_parent) && is_numeric($id_parent) && (!isset($contexte['id_parent']) or $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
+            and $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
+            $lang_default = $config['langue'] ?? session_get('lang') ;
290
+        }
291
+    }
292
+    $config = $config + [
293
+        'lignes' => 0,
294
+        'langue' => '',
295
+    ];
296
+
297
+    $att_text = " class='textarea' "
298
+        . " rows='"
299
+        . ($config['lignes'] + 15)
300
+        . "' cols='40'";
301
+    if (isset($contexte['texte'])) {
302
+        list($contexte['texte'], $contexte['_texte_trop_long']) = editer_texte_recolle($contexte['texte'], $att_text);
303
+    }
304
+
305
+    // on veut conserver la langue de l'interface ;
306
+    // on passe cette donnee sous un autre nom, au cas ou le squelette
307
+    // voudrait l'exploiter
308
+    if (isset($contexte['lang'])) {
309
+        $contexte['langue'] = $contexte['lang'];
310
+        unset($contexte['lang']);
311
+    }
312
+
313
+    $contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" .
314
+        (!$lier_trad ? '' :
315
+            ("\n<input type='hidden' name='lier_trad' value='" .
316
+                $lier_trad .
317
+                "' />" .
318
+                "\n<input type='hidden' name='changer_lang' value='" .
319
+                $lang_default .
320
+                "' />"))
321
+        . $hidden
322
+        . (isset($md5) ? $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 (intval($id)) {
335
+        if (!autoriser('modifier', $type, intval($id))) {
336
+            $valeurs['editable'] = '';
337
+        }
338
+    }
339
+    else {
340
+        if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) {
341
+            $valeurs['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 and $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 and $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 and $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 and $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,25 +386,25 @@  discard block
 block discarded – undo
386 386
  * @return array
387 387
  */
388 388
 function editer_texte_recolle($texte, $att_text) {
389
-	if (
390
-		(strlen($texte) < 29 * 1024)
391
-		or (include_spip('inc/layer') and ($GLOBALS['browser_name'] != 'MSIE'))
392
-	) {
393
-		return [$texte, ''];
394
-	}
395
-
396
-	include_spip('inc/barre');
397
-	$textes_supplement = "<br /><span style='color: red'>" . _T('info_texte_long') . "</span>\n";
398
-	$nombre = 0;
399
-
400
-	while (strlen($texte) > 29 * 1024) {
401
-		$nombre++;
402
-		list($texte1, $texte) = coupe_trop_long($texte);
403
-		$textes_supplement .= '<br />' .
404
-			"<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n";
405
-	}
406
-
407
-	return [$texte, $textes_supplement];
389
+    if (
390
+        (strlen($texte) < 29 * 1024)
391
+        or (include_spip('inc/layer') and ($GLOBALS['browser_name'] != 'MSIE'))
392
+    ) {
393
+        return [$texte, ''];
394
+    }
395
+
396
+    include_spip('inc/barre');
397
+    $textes_supplement = "<br /><span style='color: red'>" . _T('info_texte_long') . "</span>\n";
398
+    $nombre = 0;
399
+
400
+    while (strlen($texte) > 29 * 1024) {
401
+        $nombre++;
402
+        list($texte1, $texte) = coupe_trop_long($texte);
403
+        $textes_supplement .= '<br />' .
404
+            "<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n";
405
+    }
406
+
407
+    return [$texte, $textes_supplement];
408 408
 }
409 409
 
410 410
 /**
@@ -415,17 +415,17 @@  discard block
 block discarded – undo
415 415
  * @param int $longueur
416 416
  */
417 417
 function titre_automatique($champ_titre, $champs_contenu, $longueur = null) {
418
-	if (!_request($champ_titre)) {
419
-		$titrer_contenu = charger_fonction('titrer_contenu', 'inc');
420
-		if (!is_null($longueur)) {
421
-			$t = $titrer_contenu($champs_contenu, null, $longueur);
422
-		} else {
423
-			$t = $titrer_contenu($champs_contenu);
424
-		}
425
-		if ($t) {
426
-			set_request($champ_titre, $t);
427
-		}
428
-	}
418
+    if (!_request($champ_titre)) {
419
+        $titrer_contenu = charger_fonction('titrer_contenu', 'inc');
420
+        if (!is_null($longueur)) {
421
+            $t = $titrer_contenu($champs_contenu, null, $longueur);
422
+        } else {
423
+            $t = $titrer_contenu($champs_contenu);
424
+        }
425
+        if ($t) {
426
+            set_request($champ_titre, $t);
427
+        }
428
+    }
429 429
 }
430 430
 
431 431
 /**
@@ -445,20 +445,20 @@  discard block
 block discarded – undo
445 445
  * @return string
446 446
  */
447 447
 function inc_titrer_contenu_dist($champs_contenu, $c = null, $longueur = 50) {
448
-	// trouver un champ texte non vide
449
-	$t = '';
450
-	foreach ($champs_contenu as $champ) {
451
-		if ($t = _request($champ, $c)) {
452
-			break;
453
-		}
454
-	}
455
-
456
-	if ($t) {
457
-		include_spip('inc/texte_mini');
458
-		$t = couper($t, $longueur, '...');
459
-	}
460
-
461
-	return $t;
448
+    // trouver un champ texte non vide
449
+    $t = '';
450
+    foreach ($champs_contenu as $champ) {
451
+        if ($t = _request($champ, $c)) {
452
+            break;
453
+        }
454
+    }
455
+
456
+    if ($t) {
457
+        include_spip('inc/texte_mini');
458
+        $t = couper($t, $longueur, '...');
459
+    }
460
+
461
+    return $t;
462 462
 }
463 463
 
464 464
 /**
@@ -481,30 +481,30 @@  discard block
 block discarded – undo
481 481
  *      - array sinon couples ('$prefixe$colonne => md5)
482 482
  **/
483 483
 function controles_md5($data, $prefixe = 'ctr_', $format = 'html') {
484
-	if (!is_array($data)) {
485
-		return false;
486
-	}
487
-
488
-	$ctr = [];
489
-	foreach ($data as $key => $val) {
490
-		$m = md5($val);
491
-		$k = $prefixe . $key;
492
-
493
-		switch ($format) {
494
-			case 'html':
495
-				$ctr[$k] = "<input type='hidden' value='$m' name='$k' />";
496
-				break;
497
-			default:
498
-				$ctr[$k] = $m;
499
-				break;
500
-		}
501
-	}
502
-
503
-	if ($format == 'html') {
504
-		return "\n\n<!-- controles md5 -->\n" . join("\n", $ctr) . "\n\n";
505
-	} else {
506
-		return $ctr;
507
-	}
484
+    if (!is_array($data)) {
485
+        return false;
486
+    }
487
+
488
+    $ctr = [];
489
+    foreach ($data as $key => $val) {
490
+        $m = md5($val);
491
+        $k = $prefixe . $key;
492
+
493
+        switch ($format) {
494
+            case 'html':
495
+                $ctr[$k] = "<input type='hidden' value='$m' name='$k' />";
496
+                break;
497
+            default:
498
+                $ctr[$k] = $m;
499
+                break;
500
+        }
501
+    }
502
+
503
+    if ($format == 'html') {
504
+        return "\n\n<!-- controles md5 -->\n" . join("\n", $ctr) . "\n\n";
505
+    } else {
506
+        return $ctr;
507
+    }
508 508
 }
509 509
 
510 510
 /**
@@ -543,79 +543,79 @@  discard block
 block discarded – undo
543 543
  *     - post : le contenu posté
544 544
  **/
545 545
 function controler_contenu($type, $id, $options = [], $c = false, $serveur = '') {
546
-	include_spip('inc/filtres');
547
-
548
-	$table_objet = table_objet($type);
549
-	$spip_table_objet = table_objet_sql($type);
550
-	$trouver_table = charger_fonction('trouver_table', 'base');
551
-	$desc = $trouver_table($table_objet, $serveur);
552
-
553
-	// Appels incomplets (sans $c)
554
-	if (!is_array($c)) {
555
-		foreach ($desc['field'] as $champ => $ignore) {
556
-			if (_request($champ)) {
557
-				$c[$champ] = _request($champ);
558
-			}
559
-		}
560
-	}
561
-
562
-	// Securite : certaines variables ne sont jamais acceptees ici
563
-	// car elles ne relevent pas de autoriser(article, modifier) ;
564
-	// il faut passer par instituer_XX()
565
-	// TODO: faut-il passer ces variables interdites
566
-	// dans un fichier de description separe ?
567
-	unset($c['statut']);
568
-	unset($c['id_parent']);
569
-	unset($c['id_rubrique']);
570
-	unset($c['id_secteur']);
571
-
572
-	// Gerer les champs non vides
573
-	if (isset($options['nonvide']) and is_array($options['nonvide'])) {
574
-		foreach ($options['nonvide'] as $champ => $sinon) {
575
-			if ($c[$champ] === '') {
576
-				$c[$champ] = $sinon;
577
-			}
578
-		}
579
-	}
580
-
581
-	// N'accepter que les champs qui existent
582
-	// [TODO] ici aussi on peut valider les contenus en fonction du type
583
-	$champs = [];
584
-	foreach ($desc['field'] as $champ => $ignore) {
585
-		if (isset($c[$champ])) {
586
-			$champs[$champ] = $c[$champ];
587
-		}
588
-	}
589
-
590
-	// Nettoyer les valeurs
591
-	$champs = array_map('corriger_caracteres', $champs);
592
-
593
-	// Envoyer aux plugins
594
-	$champs = pipeline(
595
-		'pre_edition',
596
-		[
597
-			'args' => [
598
-				'table' => $spip_table_objet, // compatibilite
599
-				'table_objet' => $table_objet,
600
-				'spip_table_objet' => $spip_table_objet,
601
-				'type' => $type,
602
-				'id_objet' => $id,
603
-				'champs' => isset($options['champs']) ? $options['champs'] : [], // [doc] c'est quoi ?
604
-				'action' => 'controler',
605
-				'serveur' => $serveur,
606
-			],
607
-			'data' => $champs
608
-		]
609
-	);
610
-
611
-	if (!$champs) {
612
-		return false;
613
-	}
614
-
615
-	// Verifier si les mises a jour sont pertinentes, datees, en conflit etc
616
-	$conflits = controler_md5($champs, $_POST, $type, $id, $serveur, isset($options['prefix']) ? $options['prefix'] : 'ctr_');
617
-
618
-	return $conflits;
546
+    include_spip('inc/filtres');
547
+
548
+    $table_objet = table_objet($type);
549
+    $spip_table_objet = table_objet_sql($type);
550
+    $trouver_table = charger_fonction('trouver_table', 'base');
551
+    $desc = $trouver_table($table_objet, $serveur);
552
+
553
+    // Appels incomplets (sans $c)
554
+    if (!is_array($c)) {
555
+        foreach ($desc['field'] as $champ => $ignore) {
556
+            if (_request($champ)) {
557
+                $c[$champ] = _request($champ);
558
+            }
559
+        }
560
+    }
561
+
562
+    // Securite : certaines variables ne sont jamais acceptees ici
563
+    // car elles ne relevent pas de autoriser(article, modifier) ;
564
+    // il faut passer par instituer_XX()
565
+    // TODO: faut-il passer ces variables interdites
566
+    // dans un fichier de description separe ?
567
+    unset($c['statut']);
568
+    unset($c['id_parent']);
569
+    unset($c['id_rubrique']);
570
+    unset($c['id_secteur']);
571
+
572
+    // Gerer les champs non vides
573
+    if (isset($options['nonvide']) and is_array($options['nonvide'])) {
574
+        foreach ($options['nonvide'] as $champ => $sinon) {
575
+            if ($c[$champ] === '') {
576
+                $c[$champ] = $sinon;
577
+            }
578
+        }
579
+    }
580
+
581
+    // N'accepter que les champs qui existent
582
+    // [TODO] ici aussi on peut valider les contenus en fonction du type
583
+    $champs = [];
584
+    foreach ($desc['field'] as $champ => $ignore) {
585
+        if (isset($c[$champ])) {
586
+            $champs[$champ] = $c[$champ];
587
+        }
588
+    }
589
+
590
+    // Nettoyer les valeurs
591
+    $champs = array_map('corriger_caracteres', $champs);
592
+
593
+    // Envoyer aux plugins
594
+    $champs = pipeline(
595
+        'pre_edition',
596
+        [
597
+            'args' => [
598
+                'table' => $spip_table_objet, // compatibilite
599
+                'table_objet' => $table_objet,
600
+                'spip_table_objet' => $spip_table_objet,
601
+                'type' => $type,
602
+                'id_objet' => $id,
603
+                'champs' => isset($options['champs']) ? $options['champs'] : [], // [doc] c'est quoi ?
604
+                'action' => 'controler',
605
+                'serveur' => $serveur,
606
+            ],
607
+            'data' => $champs
608
+        ]
609
+    );
610
+
611
+    if (!$champs) {
612
+        return false;
613
+    }
614
+
615
+    // Verifier si les mises a jour sont pertinentes, datees, en conflit etc
616
+    $conflits = controler_md5($champs, $_POST, $type, $id, $serveur, isset($options['prefix']) ? $options['prefix'] : 'ctr_');
617
+
618
+    return $conflits;
619 619
 }
620 620
 
621 621
 
@@ -645,64 +645,64 @@  discard block
 block discarded – undo
645 645
  *     - post : le contenu posté
646 646
  **/
647 647
 function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctr_') {
648
-	$spip_table_objet = table_objet_sql($type);
649
-	$id_table_objet = id_table_objet($type);
650
-
651
-	// Controle des MD5 envoyes
652
-	// On elimine les donnees non modifiees par le formulaire (mais
653
-	// potentiellement modifiees entre temps par un autre utilisateur)
654
-	foreach ($champs as $key => $val) {
655
-		if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
656
-			if (is_scalar($val) and $m == md5($val)) {
657
-				unset($champs[$key]);
658
-			}
659
-		}
660
-	}
661
-	if (!$champs) {
662
-		return;
663
-	}
664
-
665
-	// On veut savoir si notre modif va avoir un impact
666
-	// par rapport aux donnees contenues dans la base
667
-	// (qui peuvent etre differentes de celles ayant servi a calculer le ctr)
668
-	$s = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=$id", $serveur);
669
-	$intact = true;
670
-	foreach ($champs as $ch => $val) {
671
-		$intact &= ($s[$ch] == $val);
672
-	}
673
-	if ($intact) {
674
-		return;
675
-	}
676
-
677
-	// Detection de conflits :
678
-	// On verifie si notre modif ne provient pas d'un formulaire
679
-	// genere a partir de donnees modifiees dans l'intervalle ; ici
680
-	// on compare a ce qui est dans la base, et on bloque en cas
681
-	// de conflit.
682
-	$ctrh = $ctrq = $conflits = [];
683
-	foreach (array_keys($champs) as $key) {
684
-		if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
685
-			$ctrh[$key] = $m;
686
-			$ctrq[] = $key;
687
-		}
688
-	}
689
-	if ($ctrq) {
690
-		$ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur);
691
-		foreach ($ctrh as $key => $m) {
692
-			if (
693
-				$m != md5($ctrq[$key])
694
-				and $champs[$key] !== $ctrq[$key]
695
-			) {
696
-				$conflits[$key] = [
697
-					'base' => $ctrq[$key],
698
-					'post' => $champs[$key]
699
-				];
700
-				unset($champs[$key]); # stocker quand meme les modifs ?
701
-			}
702
-		}
703
-	}
704
-
705
-	return $conflits;
648
+    $spip_table_objet = table_objet_sql($type);
649
+    $id_table_objet = id_table_objet($type);
650
+
651
+    // Controle des MD5 envoyes
652
+    // On elimine les donnees non modifiees par le formulaire (mais
653
+    // potentiellement modifiees entre temps par un autre utilisateur)
654
+    foreach ($champs as $key => $val) {
655
+        if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
656
+            if (is_scalar($val) and $m == md5($val)) {
657
+                unset($champs[$key]);
658
+            }
659
+        }
660
+    }
661
+    if (!$champs) {
662
+        return;
663
+    }
664
+
665
+    // On veut savoir si notre modif va avoir un impact
666
+    // par rapport aux donnees contenues dans la base
667
+    // (qui peuvent etre differentes de celles ayant servi a calculer le ctr)
668
+    $s = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=$id", $serveur);
669
+    $intact = true;
670
+    foreach ($champs as $ch => $val) {
671
+        $intact &= ($s[$ch] == $val);
672
+    }
673
+    if ($intact) {
674
+        return;
675
+    }
676
+
677
+    // Detection de conflits :
678
+    // On verifie si notre modif ne provient pas d'un formulaire
679
+    // genere a partir de donnees modifiees dans l'intervalle ; ici
680
+    // on compare a ce qui est dans la base, et on bloque en cas
681
+    // de conflit.
682
+    $ctrh = $ctrq = $conflits = [];
683
+    foreach (array_keys($champs) as $key) {
684
+        if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
685
+            $ctrh[$key] = $m;
686
+            $ctrq[] = $key;
687
+        }
688
+    }
689
+    if ($ctrq) {
690
+        $ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur);
691
+        foreach ($ctrh as $key => $m) {
692
+            if (
693
+                $m != md5($ctrq[$key])
694
+                and $champs[$key] !== $ctrq[$key]
695
+            ) {
696
+                $conflits[$key] = [
697
+                    'base' => $ctrq[$key],
698
+                    'post' => $champs[$key]
699
+                ];
700
+                unset($champs[$key]); # stocker quand meme les modifs ?
701
+            }
702
+        }
703
+    }
704
+
705
+    return $conflits;
706 706
 }
707 707
 
708 708
 /**
@@ -714,11 +714,11 @@  discard block
 block discarded – undo
714 714
  * @return string
715 715
  */
716 716
 function display_conflit_champ($x) {
717
-	if (strstr($x, "\n") or strlen($x) > 80) {
718
-		return "<textarea style='width:99%; height:10em;'>" . entites_html($x) . "</textarea>\n";
719
-	} else {
720
-		return "<input type='text' size='40' style='width:99%' value=\"" . entites_html($x) . "\" />\n";
721
-	}
717
+    if (strstr($x, "\n") or strlen($x) > 80) {
718
+        return "<textarea style='width:99%; height:10em;'>" . entites_html($x) . "</textarea>\n";
719
+    } else {
720
+        return "<input type='text' size='40' style='width:99%' value=\"" . entites_html($x) . "\" />\n";
721
+    }
722 722
 }
723 723
 
724 724
 /**
@@ -736,57 +736,57 @@  discard block
 block discarded – undo
736 736
  * @return string
737 737
  */
738 738
 function signaler_conflits_edition($conflits, $redirect = '') {
739
-	include_spip('inc/minipres');
740
-	include_spip('inc/revisions');
741
-	include_spip('afficher_diff/champ');
742
-	include_spip('inc/suivi_versions');
743
-	include_spip('inc/diff');
744
-	$diffs = [];
745
-	foreach ($conflits as $champ => $a) {
746
-		// probleme de stockage ou conflit d'edition ?
747
-		$base = isset($a['save']) ? $a['save'] : $a['base'];
748
-
749
-		$diff = new Diff(new DiffTexte());
750
-		$n = preparer_diff($a['post']);
751
-		$o = preparer_diff($base);
752
-		$d = propre_diff(afficher_para_modifies(afficher_diff($diff->comparer($n, $o))));
753
-
754
-		$titre = isset($a['save']) ? _L(
755
-			'Echec lors de l\'enregistrement du champ @champ@',
756
-			['champ' => $champ]
757
-		) : $champ;
758
-
759
-		$diffs[] = "<h2>$titre</h2>\n"
760
-			. '<h3>' . _T('info_conflit_edition_differences') . "</h3>\n"
761
-			. "<div style='max-height:8em; overflow: auto; width:99%;'>" . $d . "</div>\n"
762
-			. '<h4>' . _T('info_conflit_edition_votre_version') . '</h4>'
763
-			. display_conflit_champ($a['post'])
764
-			. '<h4>' . _T('info_conflit_edition_version_enregistree') . '</h4>'
765
-			. display_conflit_champ($base);
766
-	}
767
-
768
-	if ($redirect) {
769
-		$id = uniqid(rand());
770
-		$redirect = "<form action='$redirect' method='get'
739
+    include_spip('inc/minipres');
740
+    include_spip('inc/revisions');
741
+    include_spip('afficher_diff/champ');
742
+    include_spip('inc/suivi_versions');
743
+    include_spip('inc/diff');
744
+    $diffs = [];
745
+    foreach ($conflits as $champ => $a) {
746
+        // probleme de stockage ou conflit d'edition ?
747
+        $base = isset($a['save']) ? $a['save'] : $a['base'];
748
+
749
+        $diff = new Diff(new DiffTexte());
750
+        $n = preparer_diff($a['post']);
751
+        $o = preparer_diff($base);
752
+        $d = propre_diff(afficher_para_modifies(afficher_diff($diff->comparer($n, $o))));
753
+
754
+        $titre = isset($a['save']) ? _L(
755
+            'Echec lors de l\'enregistrement du champ @champ@',
756
+            ['champ' => $champ]
757
+        ) : $champ;
758
+
759
+        $diffs[] = "<h2>$titre</h2>\n"
760
+            . '<h3>' . _T('info_conflit_edition_differences') . "</h3>\n"
761
+            . "<div style='max-height:8em; overflow: auto; width:99%;'>" . $d . "</div>\n"
762
+            . '<h4>' . _T('info_conflit_edition_votre_version') . '</h4>'
763
+            . display_conflit_champ($a['post'])
764
+            . '<h4>' . _T('info_conflit_edition_version_enregistree') . '</h4>'
765
+            . display_conflit_champ($base);
766
+    }
767
+
768
+    if ($redirect) {
769
+        $id = uniqid(rand());
770
+        $redirect = "<form action='$redirect' method='get'
771 771
 			id='$id'
772 772
 			style='float:" . $GLOBALS['spip_lang_right'] . "; margin-top:2em;'>\n"
773
-			. form_hidden($redirect)
774
-			. "<input type='submit' value='" . _T('icone_retour') . "' />
773
+            . form_hidden($redirect)
774
+            . "<input type='submit' value='" . _T('icone_retour') . "' />
775 775
 		</form>\n";
776 776
 
777
-		// pour les documents, on est probablement en ajax : il faut ajaxer
778
-		if (_AJAX) {
779
-			$redirect .= '<script type="text/javascript">'
780
-				. 'setTimeout(function(){$("#' . $id . '")
777
+        // pour les documents, on est probablement en ajax : il faut ajaxer
778
+        if (_AJAX) {
779
+            $redirect .= '<script type="text/javascript">'
780
+                . 'setTimeout(function(){$("#' . $id . '")
781 781
 			.ajaxForm({target:$("#' . $id . '").parent()});
782 782
 			}, 200);'
783
-				. "</script>\n";
784
-		}
785
-	}
783
+                . "</script>\n";
784
+        }
785
+    }
786 786
 
787
-	echo minipres(
788
-		_T('titre_conflit_edition'),
789
-		'<style>
787
+    echo minipres(
788
+        _T('titre_conflit_edition'),
789
+        '<style>
790 790
 .diff-para-deplace { background: #e8e8ff; }
791 791
 .diff-para-ajoute { background: #d0ffc0; color: #000; }
792 792
 .diff-para-supprime { background: #ffd0c0; color: #904040; text-decoration: line-through; }
@@ -797,12 +797,12 @@  discard block
 block discarded – undo
797 797
 .diff-para-deplace .diff-supprime { background: #ffb8b8; border: 1px solid #808080; }
798 798
 .diff-para-deplace .diff-deplace { background: #b8b8ff; border: 1px solid #808080; }
799 799
 </style>'
800
-		. '<p>' . _T('info_conflit_edition_avis_non_sauvegarde') . '</p>'
801
-		. '<p>' . _T('texte_conflit_edition_correction') . '</p>'
802
-		. "<div style='text-align:" . $GLOBALS['spip_lang_left'] . ";'>"
803
-		. join("\n", $diffs)
804
-		. "</div>\n"
805
-
806
-		. $redirect
807
-	);
800
+        . '<p>' . _T('info_conflit_edition_avis_non_sauvegarde') . '</p>'
801
+        . '<p>' . _T('texte_conflit_edition_correction') . '</p>'
802
+        . "<div style='text-align:" . $GLOBALS['spip_lang_left'] . ";'>"
803
+        . join("\n", $diffs)
804
+        . "</div>\n"
805
+
806
+        . $redirect
807
+    );
808 808
 }
Please login to merge, or discard this patch.
Spacing   +35 added lines, -36 removed lines patch added patch discarded remove patch
@@ -100,7 +100,7 @@  discard block
 block discarded – undo
100 100
 		$res['message_ok'] = _T('info_modification_enregistree');
101 101
 		if ($retour) {
102 102
 			if (strncmp($retour, 'javascript:', 11) == 0) {
103
-				$res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
103
+				$res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/'.substr($retour, 11).'/*]]>*/</script>';
104 104
 				$res['editable'] = true;
105 105
 			} else {
106 106
 				$res['redirect'] = parametre_url($retour, $id_table_objet, $id);
@@ -140,7 +140,7 @@  discard block
 block discarded – undo
140 140
 				if (!isset($erreurs[$champ])) {
141 141
 					$erreurs[$champ] = '';
142 142
 				}
143
-				$erreurs[$champ] .= _T('alerte_modif_info_concourante') . "<br /><textarea readonly='readonly' class='forml'>" . entites_html($conflit['base']) . '</textarea>';
143
+				$erreurs[$champ] .= _T('alerte_modif_info_concourante')."<br /><textarea readonly='readonly' class='forml'>".entites_html($conflit['base']).'</textarea>';
144 144
 			}
145 145
 		}
146 146
 	}
@@ -216,7 +216,7 @@  discard block
 block discarded – undo
216 216
 	if (
217 217
 		$config_fonc
218 218
 		and !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config'])
219
-		and $config_fonc !== $table_objet . '_edit_config'
219
+		and $config_fonc !== $table_objet.'_edit_config'
220 220
 	) {
221 221
 		if (
222 222
 			$args = test_formulaire_inclus_par_modele()
@@ -231,12 +231,12 @@  discard block
 block discarded – undo
231 231
 	// Appel direct dans un squelette
232 232
 	if (!$row) {
233 233
 		if (!$new or $lier_trad) {
234
-			if ($select = charger_fonction('precharger_' . $type, 'inc', true)) {
234
+			if ($select = charger_fonction('precharger_'.$type, 'inc', true)) {
235 235
 				$row = $select($id, $id_parent, $lier_trad);
236 236
 				// si on a une fonction precharger, elle pu faire un reglage de langue
237 237
 				$lang_default = (!empty($row['lang']) ? $row['lang'] : null);
238 238
 			} else {
239
-				$row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . intval($id));
239
+				$row = sql_fetsel('*', $table_objet_sql, $id_table_objet.'='.intval($id));
240 240
 			}
241 241
 			if (!$new) {
242 242
 				$md5 = controles_md5($row);
@@ -286,7 +286,7 @@  discard block
 block discarded – undo
286 286
 	if ($config_fonc) {
287 287
 		$contexte['config'] = $config = $config_fonc($contexte);
288 288
 		if (!$lang_default) {
289
-			$lang_default = $config['langue'] ?? session_get('lang') ;
289
+			$lang_default = $config['langue'] ?? session_get('lang');
290 290
 		}
291 291
 	}
292 292
 	$config = $config + [
@@ -310,13 +310,12 @@  discard block
 block discarded – undo
310 310
 		unset($contexte['lang']);
311 311
 	}
312 312
 
313
-	$contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" .
314
-		(!$lier_trad ? '' :
315
-			("\n<input type='hidden' name='lier_trad' value='" .
316
-				$lier_trad .
317
-				"' />" .
318
-				"\n<input type='hidden' name='changer_lang' value='" .
319
-				$lang_default .
313
+	$contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n".
314
+		(!$lier_trad ? '' : ("\n<input type='hidden' name='lier_trad' value='".
315
+				$lier_trad.
316
+				"' />".
317
+				"\n<input type='hidden' name='changer_lang' value='".
318
+				$lang_default.
320 319
 				"' />"))
321 320
 		. $hidden
322 321
 		. (isset($md5) ? $md5 : '');
@@ -356,14 +355,14 @@  discard block
 block discarded – undo
356 355
 	$aider = charger_fonction('aider', 'inc');
357 356
 	if (strlen($texte) > 28 * 1024) {
358 357
 		$texte = str_replace("\r\n", "\n", $texte);
359
-		$pos = strpos($texte, "\n\n", 28 * 1024);  // coupe para > 28 ko
358
+		$pos = strpos($texte, "\n\n", 28 * 1024); // coupe para > 28 ko
360 359
 		if ($pos > 0 and $pos < 32 * 1024) {
361
-			$debut = substr($texte, 0, $pos) . "\n\n<!--SPIP-->\n";
360
+			$debut = substr($texte, 0, $pos)."\n\n<!--SPIP-->\n";
362 361
 			$suite = substr($texte, $pos + 2);
363 362
 		} else {
364
-			$pos = strpos($texte, ' ', 28 * 1024);  // sinon coupe espace
363
+			$pos = strpos($texte, ' ', 28 * 1024); // sinon coupe espace
365 364
 			if (!($pos > 0 and $pos < 32 * 1024)) {
366
-				$pos = 28 * 1024;  // au pire (pas d'espace trouv'e)
365
+				$pos = 28 * 1024; // au pire (pas d'espace trouv'e)
367 366
 				$decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere
368 367
 			} else {
369 368
 				$decalage = 1;
@@ -394,13 +393,13 @@  discard block
 block discarded – undo
394 393
 	}
395 394
 
396 395
 	include_spip('inc/barre');
397
-	$textes_supplement = "<br /><span style='color: red'>" . _T('info_texte_long') . "</span>\n";
396
+	$textes_supplement = "<br /><span style='color: red'>"._T('info_texte_long')."</span>\n";
398 397
 	$nombre = 0;
399 398
 
400 399
 	while (strlen($texte) > 29 * 1024) {
401 400
 		$nombre++;
402 401
 		list($texte1, $texte) = coupe_trop_long($texte);
403
-		$textes_supplement .= '<br />' .
402
+		$textes_supplement .= '<br />'.
404 403
 			"<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n";
405 404
 	}
406 405
 
@@ -488,7 +487,7 @@  discard block
 block discarded – undo
488 487
 	$ctr = [];
489 488
 	foreach ($data as $key => $val) {
490 489
 		$m = md5($val);
491
-		$k = $prefixe . $key;
490
+		$k = $prefixe.$key;
492 491
 
493 492
 		switch ($format) {
494 493
 			case 'html':
@@ -501,7 +500,7 @@  discard block
 block discarded – undo
501 500
 	}
502 501
 
503 502
 	if ($format == 'html') {
504
-		return "\n\n<!-- controles md5 -->\n" . join("\n", $ctr) . "\n\n";
503
+		return "\n\n<!-- controles md5 -->\n".join("\n", $ctr)."\n\n";
505 504
 	} else {
506 505
 		return $ctr;
507 506
 	}
@@ -652,7 +651,7 @@  discard block
 block discarded – undo
652 651
 	// On elimine les donnees non modifiees par le formulaire (mais
653 652
 	// potentiellement modifiees entre temps par un autre utilisateur)
654 653
 	foreach ($champs as $key => $val) {
655
-		if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
654
+		if (isset($ctr[$prefix.$key]) and $m = $ctr[$prefix.$key]) {
656 655
 			if (is_scalar($val) and $m == md5($val)) {
657 656
 				unset($champs[$key]);
658 657
 			}
@@ -681,7 +680,7 @@  discard block
 block discarded – undo
681 680
 	// de conflit.
682 681
 	$ctrh = $ctrq = $conflits = [];
683 682
 	foreach (array_keys($champs) as $key) {
684
-		if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
683
+		if (isset($ctr[$prefix.$key]) and $m = $ctr[$prefix.$key]) {
685 684
 			$ctrh[$key] = $m;
686 685
 			$ctrq[] = $key;
687 686
 		}
@@ -715,9 +714,9 @@  discard block
 block discarded – undo
715 714
  */
716 715
 function display_conflit_champ($x) {
717 716
 	if (strstr($x, "\n") or strlen($x) > 80) {
718
-		return "<textarea style='width:99%; height:10em;'>" . entites_html($x) . "</textarea>\n";
717
+		return "<textarea style='width:99%; height:10em;'>".entites_html($x)."</textarea>\n";
719 718
 	} else {
720
-		return "<input type='text' size='40' style='width:99%' value=\"" . entites_html($x) . "\" />\n";
719
+		return "<input type='text' size='40' style='width:99%' value=\"".entites_html($x)."\" />\n";
721 720
 	}
722 721
 }
723 722
 
@@ -757,11 +756,11 @@  discard block
 block discarded – undo
757 756
 		) : $champ;
758 757
 
759 758
 		$diffs[] = "<h2>$titre</h2>\n"
760
-			. '<h3>' . _T('info_conflit_edition_differences') . "</h3>\n"
761
-			. "<div style='max-height:8em; overflow: auto; width:99%;'>" . $d . "</div>\n"
762
-			. '<h4>' . _T('info_conflit_edition_votre_version') . '</h4>'
759
+			. '<h3>'._T('info_conflit_edition_differences')."</h3>\n"
760
+			. "<div style='max-height:8em; overflow: auto; width:99%;'>".$d."</div>\n"
761
+			. '<h4>'._T('info_conflit_edition_votre_version').'</h4>'
763 762
 			. display_conflit_champ($a['post'])
764
-			. '<h4>' . _T('info_conflit_edition_version_enregistree') . '</h4>'
763
+			. '<h4>'._T('info_conflit_edition_version_enregistree').'</h4>'
765 764
 			. display_conflit_champ($base);
766 765
 	}
767 766
 
@@ -769,16 +768,16 @@  discard block
 block discarded – undo
769 768
 		$id = uniqid(rand());
770 769
 		$redirect = "<form action='$redirect' method='get'
771 770
 			id='$id'
772
-			style='float:" . $GLOBALS['spip_lang_right'] . "; margin-top:2em;'>\n"
771
+			style='float:".$GLOBALS['spip_lang_right']."; margin-top:2em;'>\n"
773 772
 			. form_hidden($redirect)
774
-			. "<input type='submit' value='" . _T('icone_retour') . "' />
773
+			. "<input type='submit' value='"._T('icone_retour')."' />
775 774
 		</form>\n";
776 775
 
777 776
 		// pour les documents, on est probablement en ajax : il faut ajaxer
778 777
 		if (_AJAX) {
779 778
 			$redirect .= '<script type="text/javascript">'
780
-				. 'setTimeout(function(){$("#' . $id . '")
781
-			.ajaxForm({target:$("#' . $id . '").parent()});
779
+				. 'setTimeout(function(){$("#'.$id.'")
780
+			.ajaxForm({target:$("#' . $id.'").parent()});
782 781
 			}, 200);'
783 782
 				. "</script>\n";
784 783
 		}
@@ -797,9 +796,9 @@  discard block
 block discarded – undo
797 796
 .diff-para-deplace .diff-supprime { background: #ffb8b8; border: 1px solid #808080; }
798 797
 .diff-para-deplace .diff-deplace { background: #b8b8ff; border: 1px solid #808080; }
799 798
 </style>'
800
-		. '<p>' . _T('info_conflit_edition_avis_non_sauvegarde') . '</p>'
801
-		. '<p>' . _T('texte_conflit_edition_correction') . '</p>'
802
-		. "<div style='text-align:" . $GLOBALS['spip_lang_left'] . ";'>"
799
+		. '<p>'._T('info_conflit_edition_avis_non_sauvegarde').'</p>'
800
+		. '<p>'._T('texte_conflit_edition_correction').'</p>'
801
+		. "<div style='text-align:".$GLOBALS['spip_lang_left'].";'>"
803 802
 		. join("\n", $diffs)
804 803
 		. "</div>\n"
805 804
 
Please login to merge, or discard this patch.
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -335,8 +335,7 @@
 block discarded – undo
335 335
 		if (!autoriser('modifier', $type, intval($id))) {
336 336
 			$valeurs['editable'] = '';
337 337
 		}
338
-	}
339
-	else {
338
+	} else {
340 339
 		if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) {
341 340
 			$valeurs['editable'] = '';
342 341
 		}
Please login to merge, or discard this patch.
ecrire/inc/texte_mini.php 2 patches
Indentation   +401 added lines, -401 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');
23 23
 include_spip('inc/lang');
@@ -39,21 +39,21 @@  discard block
 block discarded – undo
39 39
  **/
40 40
 function definir_puce() {
41 41
 
42
-	// Attention au sens, qui n'est pas defini de la meme facon dans
43
-	// l'espace prive (spip_lang est la langue de l'interface, lang_dir
44
-	// celle du texte) et public (spip_lang est la langue du texte)
45
-	$dir = _DIR_RESTREINT ? lang_dir() : lang_dir($GLOBALS['spip_lang']);
42
+    // Attention au sens, qui n'est pas defini de la meme facon dans
43
+    // l'espace prive (spip_lang est la langue de l'interface, lang_dir
44
+    // celle du texte) et public (spip_lang est la langue du texte)
45
+    $dir = _DIR_RESTREINT ? lang_dir() : lang_dir($GLOBALS['spip_lang']);
46 46
 
47
-	$p = 'puce' . (test_espace_prive() ? '_prive' : '');
48
-	if ($dir == 'rtl') {
49
-		$p .= '_rtl';
50
-	}
47
+    $p = 'puce' . (test_espace_prive() ? '_prive' : '');
48
+    if ($dir == 'rtl') {
49
+        $p .= '_rtl';
50
+    }
51 51
 
52
-	if (!isset($GLOBALS[$p])) {
53
-		$GLOBALS[$p] = '<span class="spip-puce ' . $dir . '"><b>–</b></span>';
54
-	}
52
+    if (!isset($GLOBALS[$p])) {
53
+        $GLOBALS[$p] = '<span class="spip-puce ' . $dir . '"><b>–</b></span>';
54
+    }
55 55
 
56
-	return $GLOBALS[$p];
56
+    return $GLOBALS[$p];
57 57
 }
58 58
 
59 59
 
@@ -61,14 +61,14 @@  discard block
 block discarded – undo
61 61
 // dont on souhaite qu'ils provoquent un saut de paragraphe
62 62
 
63 63
 if (!defined('_BALISES_BLOCS')) {
64
-	define(
65
-		'_BALISES_BLOCS',
66
-		'address|applet|article|aside|blockquote|button|center|d[ltd]|div|fieldset|fig(ure|caption)|footer|form|h[1-6r]|hgroup|head|header|iframe|li|map|marquee|nav|noscript|object|ol|pre|section|t(able|[rdh]|body|foot|extarea)|ul|script|style'
67
-	);
64
+    define(
65
+        '_BALISES_BLOCS',
66
+        'address|applet|article|aside|blockquote|button|center|d[ltd]|div|fieldset|fig(ure|caption)|footer|form|h[1-6r]|hgroup|head|header|iframe|li|map|marquee|nav|noscript|object|ol|pre|section|t(able|[rdh]|body|foot|extarea)|ul|script|style'
67
+    );
68 68
 }
69 69
 
70 70
 if (!defined('_BALISES_BLOCS_REGEXP')) {
71
-	define('_BALISES_BLOCS_REGEXP', ',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS');
71
+    define('_BALISES_BLOCS_REGEXP', ',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS');
72 72
 }
73 73
 
74 74
 //
@@ -80,111 +80,111 @@  discard block
 block discarded – undo
80 80
 // echappe est un div ou un span
81 81
 // https://code.spip.net/@code_echappement
82 82
 function code_echappement($rempl, $source = '', $no_transform = false, $mode = null) {
83
-	if (!strlen($rempl)) {
84
-		return '';
85
-	}
86
-
87
-	// Tester si on echappe en span ou en div
88
-	if (is_null($mode) or !in_array($mode, ['div', 'span'])) {
89
-		$mode = preg_match(',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS', $rempl) ? 'div' : 'span';
90
-	}
91
-
92
-	// Decouper en morceaux, base64 a des probleme selon la taille de la pile
93
-	$taille = 30000;
94
-	$return = '';
95
-	for ($i = 0; $i < strlen($rempl); $i += $taille) {
96
-		// Convertir en base64 et cacher dans un attribut
97
-		// utiliser les " pour eviter le re-encodage de ' et &#8217
98
-		$base64 = base64_encode(substr($rempl, $i, $taille));
99
-		$return .= "<$mode class=\"base64$source\" title=\"$base64\"></$mode>";
100
-	}
101
-
102
-	return $return;
83
+    if (!strlen($rempl)) {
84
+        return '';
85
+    }
86
+
87
+    // Tester si on echappe en span ou en div
88
+    if (is_null($mode) or !in_array($mode, ['div', 'span'])) {
89
+        $mode = preg_match(',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS', $rempl) ? 'div' : 'span';
90
+    }
91
+
92
+    // Decouper en morceaux, base64 a des probleme selon la taille de la pile
93
+    $taille = 30000;
94
+    $return = '';
95
+    for ($i = 0; $i < strlen($rempl); $i += $taille) {
96
+        // Convertir en base64 et cacher dans un attribut
97
+        // utiliser les " pour eviter le re-encodage de ' et &#8217
98
+        $base64 = base64_encode(substr($rempl, $i, $taille));
99
+        $return .= "<$mode class=\"base64$source\" title=\"$base64\"></$mode>";
100
+    }
101
+
102
+    return $return;
103 103
 }
104 104
 
105 105
 
106 106
 // Echapper les <html>...</ html>
107 107
 // https://code.spip.net/@traiter_echap_html_dist
108 108
 function traiter_echap_html_dist($regs) {
109
-	return $regs[3];
109
+    return $regs[3];
110 110
 }
111 111
 
112 112
 // Echapper les <pre>...</ pre>
113 113
 function traiter_echap_pre_dist($regs) {
114
-	// echapper les <code> dans <pre>
115
-	$pre = $regs[3];
116
-
117
-	// echapper les < dans <code>
118
-	// on utilise _PROTEGE_BLOCS pour simplifier le code et la maintenance, mais on est interesse que par <code>
119
-	if (
120
-		strpos($pre, '<') !== false
121
-		and preg_match_all(_PROTEGE_BLOCS, $pre, $matches, PREG_SET_ORDER)
122
-	) {
123
-		foreach ($matches as $m) {
124
-			if ($m[1] === 'code') {
125
-				$code = '<code' . $m[2] . '>' . spip_htmlspecialchars($m[3]) . '</code>';
126
-				$pre = str_replace($m[0], $code, $pre);
127
-			}
128
-		}
129
-	}
130
-	return "<pre>$pre</pre>";
114
+    // echapper les <code> dans <pre>
115
+    $pre = $regs[3];
116
+
117
+    // echapper les < dans <code>
118
+    // on utilise _PROTEGE_BLOCS pour simplifier le code et la maintenance, mais on est interesse que par <code>
119
+    if (
120
+        strpos($pre, '<') !== false
121
+        and preg_match_all(_PROTEGE_BLOCS, $pre, $matches, PREG_SET_ORDER)
122
+    ) {
123
+        foreach ($matches as $m) {
124
+            if ($m[1] === 'code') {
125
+                $code = '<code' . $m[2] . '>' . spip_htmlspecialchars($m[3]) . '</code>';
126
+                $pre = str_replace($m[0], $code, $pre);
127
+            }
128
+        }
129
+    }
130
+    return "<pre>$pre</pre>";
131 131
 }
132 132
 
133 133
 // Echapper les <code>...</ code>
134 134
 // https://code.spip.net/@traiter_echap_code_dist
135 135
 function traiter_echap_code_dist($regs) {
136
-	list(, , $att, $corps) = $regs;
137
-	$echap = spip_htmlspecialchars($corps); // il ne faut pas passer dans entites_html, ne pas transformer les &#xxx; du code !
138
-
139
-	// ne pas mettre le <div...> s'il n'y a qu'une ligne
140
-	if (is_int(strpos($echap, "\n"))) {
141
-		// supprimer les sauts de ligne debut/fin
142
-		// (mais pas les espaces => ascii art).
143
-		$echap = preg_replace("/^[\n\r]+|[\n\r]+$/s", '', $echap);
144
-		$echap = nl2br($echap);
145
-		$echap = "<div style='text-align: left;' "
146
-			. "class='spip_code' dir='ltr'><code$att>"
147
-			. $echap . '</code></div>';
148
-	} else {
149
-		$echap = "<code$att class='spip_code' dir='ltr'>" . $echap . '</code>';
150
-	}
151
-
152
-	$echap = str_replace("\t", '&nbsp; &nbsp; &nbsp; &nbsp; ', $echap);
153
-	$echap = str_replace('  ', ' &nbsp;', $echap);
154
-
155
-	return $echap;
136
+    list(, , $att, $corps) = $regs;
137
+    $echap = spip_htmlspecialchars($corps); // il ne faut pas passer dans entites_html, ne pas transformer les &#xxx; du code !
138
+
139
+    // ne pas mettre le <div...> s'il n'y a qu'une ligne
140
+    if (is_int(strpos($echap, "\n"))) {
141
+        // supprimer les sauts de ligne debut/fin
142
+        // (mais pas les espaces => ascii art).
143
+        $echap = preg_replace("/^[\n\r]+|[\n\r]+$/s", '', $echap);
144
+        $echap = nl2br($echap);
145
+        $echap = "<div style='text-align: left;' "
146
+            . "class='spip_code' dir='ltr'><code$att>"
147
+            . $echap . '</code></div>';
148
+    } else {
149
+        $echap = "<code$att class='spip_code' dir='ltr'>" . $echap . '</code>';
150
+    }
151
+
152
+    $echap = str_replace("\t", '&nbsp; &nbsp; &nbsp; &nbsp; ', $echap);
153
+    $echap = str_replace('  ', ' &nbsp;', $echap);
154
+
155
+    return $echap;
156 156
 }
157 157
 
158 158
 // Echapper les <cadre>...</ cadre> aka <frame>...</ frame>
159 159
 // https://code.spip.net/@traiter_echap_cadre_dist
160 160
 function traiter_echap_cadre_dist($regs) {
161
-	$echap = trim(entites_html($regs[3]));
162
-	// compter les lignes un peu plus finement qu'avec les \n
163
-	$lignes = explode("\n", trim($echap));
164
-	$n = 0;
165
-	foreach ($lignes as $l) {
166
-		$n += floor(strlen($l) / 60) + 1;
167
-	}
168
-	$n = max($n, 2);
169
-	$echap = "\n<textarea readonly='readonly' cols='40' rows='$n' class='spip_cadre' dir='ltr'>$echap</textarea>";
170
-
171
-	return $echap;
161
+    $echap = trim(entites_html($regs[3]));
162
+    // compter les lignes un peu plus finement qu'avec les \n
163
+    $lignes = explode("\n", trim($echap));
164
+    $n = 0;
165
+    foreach ($lignes as $l) {
166
+        $n += floor(strlen($l) / 60) + 1;
167
+    }
168
+    $n = max($n, 2);
169
+    $echap = "\n<textarea readonly='readonly' cols='40' rows='$n' class='spip_cadre' dir='ltr'>$echap</textarea>";
170
+
171
+    return $echap;
172 172
 }
173 173
 
174 174
 // https://code.spip.net/@traiter_echap_frame_dist
175 175
 function traiter_echap_frame_dist($regs) {
176
-	return traiter_echap_cadre_dist($regs);
176
+    return traiter_echap_cadre_dist($regs);
177 177
 }
178 178
 
179 179
 // https://code.spip.net/@traiter_echap_script_dist
180 180
 function traiter_echap_script_dist($regs) {
181
-	// rendre joli (et inactif) si c'est un script language=php
182
-	if (preg_match(',<script\b[^>]+php,ims', $regs[0])) {
183
-		return highlight_string($regs[0], true);
184
-	}
181
+    // rendre joli (et inactif) si c'est un script language=php
182
+    if (preg_match(',<script\b[^>]+php,ims', $regs[0])) {
183
+        return highlight_string($regs[0], true);
184
+    }
185 185
 
186
-	// Cas normal : le script passe tel quel
187
-	return $regs[0];
186
+    // Cas normal : le script passe tel quel
187
+    return $regs[0];
188 188
 }
189 189
 
190 190
 define('_PROTEGE_BLOCS', ',<(html|pre|code|cadre|frame|script|style)(\s[^>]*)?>(.*)</\1>,UimsS');
@@ -204,79 +204,79 @@  discard block
 block discarded – undo
204 204
  * @return string|string[]
205 205
  */
206 206
 function echappe_html(
207
-	$letexte,
208
-	$source = '',
209
-	$no_transform = false,
210
-	$preg = '',
211
-	$callback_prefix = ''
207
+    $letexte,
208
+    $source = '',
209
+    $no_transform = false,
210
+    $preg = '',
211
+    $callback_prefix = ''
212 212
 ) {
213
-	if (!is_string($letexte) or !strlen($letexte)) {
214
-		return $letexte;
215
-	}
216
-
217
-	// si le texte recu est long PCRE risque d'exploser, on
218
-	// fait donc un mic-mac pour augmenter pcre.backtrack_limit
219
-	if (($len = strlen($letexte)) > 100000) {
220
-		if (!$old = @ini_get('pcre.backtrack_limit')) {
221
-			$old = 100000;
222
-		}
223
-		if ($len > $old) {
224
-			$a = @ini_set('pcre.backtrack_limit', $len);
225
-			spip_log("ini_set pcre.backtrack_limit=$len ($old)");
226
-		}
227
-	}
228
-
229
-	if (
230
-		($preg or strpos($letexte, '<') !== false)
231
-		and preg_match_all($preg ? $preg : _PROTEGE_BLOCS, $letexte, $matches, PREG_SET_ORDER)
232
-	) {
233
-		foreach ($matches as $regs) {
234
-			// echappements tels quels ?
235
-			if ($no_transform) {
236
-				$echap = $regs[0];
237
-			} // sinon les traiter selon le cas
238
-			else {
239
-				if (
240
-					function_exists($f = $callback_prefix . 'traiter_echap_' . strtolower($regs[1]))
241
-					or function_exists($f = $f . '_dist')
242
-				) {
243
-					$echap = $f($regs);
244
-				}
245
-			}
246
-
247
-			$p = strpos($letexte, $regs[0]);
248
-			$letexte = substr_replace($letexte, code_echappement($echap, $source, $no_transform), $p, strlen($regs[0]));
249
-		}
250
-	}
251
-
252
-	if ($no_transform) {
253
-		return $letexte;
254
-	}
255
-
256
-	// Echapper le php pour faire joli (ici, c'est pas pour la securite)
257
-	// seulement si on a echappe les <script>
258
-	// (derogatoire car on ne peut pas faire passer < ? ... ? >
259
-	// dans une callback autonommee
260
-	if (strpos($preg ? $preg : _PROTEGE_BLOCS, 'script') !== false) {
261
-		if (
262
-			strpos($letexte, '<' . '?') !== false and preg_match_all(
263
-				',<[?].*($|[?]>),UisS',
264
-				$letexte,
265
-				$matches,
266
-				PREG_SET_ORDER
267
-			)
268
-		) {
269
-			foreach ($matches as $regs) {
270
-				$letexte = str_replace(
271
-					$regs[0],
272
-					code_echappement(highlight_string($regs[0], true), $source),
273
-					$letexte
274
-				);
275
-			}
276
-		}
277
-	}
278
-
279
-	return $letexte;
213
+    if (!is_string($letexte) or !strlen($letexte)) {
214
+        return $letexte;
215
+    }
216
+
217
+    // si le texte recu est long PCRE risque d'exploser, on
218
+    // fait donc un mic-mac pour augmenter pcre.backtrack_limit
219
+    if (($len = strlen($letexte)) > 100000) {
220
+        if (!$old = @ini_get('pcre.backtrack_limit')) {
221
+            $old = 100000;
222
+        }
223
+        if ($len > $old) {
224
+            $a = @ini_set('pcre.backtrack_limit', $len);
225
+            spip_log("ini_set pcre.backtrack_limit=$len ($old)");
226
+        }
227
+    }
228
+
229
+    if (
230
+        ($preg or strpos($letexte, '<') !== false)
231
+        and preg_match_all($preg ? $preg : _PROTEGE_BLOCS, $letexte, $matches, PREG_SET_ORDER)
232
+    ) {
233
+        foreach ($matches as $regs) {
234
+            // echappements tels quels ?
235
+            if ($no_transform) {
236
+                $echap = $regs[0];
237
+            } // sinon les traiter selon le cas
238
+            else {
239
+                if (
240
+                    function_exists($f = $callback_prefix . 'traiter_echap_' . strtolower($regs[1]))
241
+                    or function_exists($f = $f . '_dist')
242
+                ) {
243
+                    $echap = $f($regs);
244
+                }
245
+            }
246
+
247
+            $p = strpos($letexte, $regs[0]);
248
+            $letexte = substr_replace($letexte, code_echappement($echap, $source, $no_transform), $p, strlen($regs[0]));
249
+        }
250
+    }
251
+
252
+    if ($no_transform) {
253
+        return $letexte;
254
+    }
255
+
256
+    // Echapper le php pour faire joli (ici, c'est pas pour la securite)
257
+    // seulement si on a echappe les <script>
258
+    // (derogatoire car on ne peut pas faire passer < ? ... ? >
259
+    // dans une callback autonommee
260
+    if (strpos($preg ? $preg : _PROTEGE_BLOCS, 'script') !== false) {
261
+        if (
262
+            strpos($letexte, '<' . '?') !== false and preg_match_all(
263
+                ',<[?].*($|[?]>),UisS',
264
+                $letexte,
265
+                $matches,
266
+                PREG_SET_ORDER
267
+            )
268
+        ) {
269
+            foreach ($matches as $regs) {
270
+                $letexte = str_replace(
271
+                    $regs[0],
272
+                    code_echappement(highlight_string($regs[0], true), $source),
273
+                    $letexte
274
+                );
275
+            }
276
+        }
277
+    }
278
+
279
+    return $letexte;
280 280
 }
281 281
 
282 282
 //
@@ -285,58 +285,58 @@  discard block
 block discarded – undo
285 285
 // par propre() : exemple dans multi et dans typo()
286 286
 // https://code.spip.net/@echappe_retour
287 287
 function echappe_retour($letexte, $source = '', $filtre = '') {
288
-	if (strpos($letexte, "base64$source")) {
289
-		# spip_log(spip_htmlspecialchars($letexte));  ## pour les curieux
290
-		$max_prof = 5;
291
-		while (
292
-			strpos($letexte, '<') !== false
293
-			and
294
-			preg_match_all(
295
-				',<(span|div)\sclass=[\'"]base64' . $source . '[\'"]\s(.*)>\s*</\1>,UmsS',
296
-				$letexte,
297
-				$regs,
298
-				PREG_SET_ORDER
299
-			)
300
-			and $max_prof--
301
-		) {
302
-			foreach ($regs as $reg) {
303
-				$rempl = base64_decode(extraire_attribut($reg[0], 'title'));
304
-				// recherche d'attributs supplementaires
305
-				$at = [];
306
-				foreach (['lang', 'dir'] as $attr) {
307
-					if ($a = extraire_attribut($reg[0], $attr)) {
308
-						$at[$attr] = $a;
309
-					}
310
-				}
311
-				if ($at) {
312
-					$rempl = '<' . $reg[1] . '>' . $rempl . '</' . $reg[1] . '>';
313
-					foreach ($at as $attr => $a) {
314
-						$rempl = inserer_attribut($rempl, $attr, $a);
315
-					}
316
-				}
317
-				if ($filtre) {
318
-					$rempl = $filtre($rempl);
319
-				}
320
-				$letexte = str_replace($reg[0], $rempl, $letexte);
321
-			}
322
-		}
323
-	}
324
-
325
-	return $letexte;
288
+    if (strpos($letexte, "base64$source")) {
289
+        # spip_log(spip_htmlspecialchars($letexte));  ## pour les curieux
290
+        $max_prof = 5;
291
+        while (
292
+            strpos($letexte, '<') !== false
293
+            and
294
+            preg_match_all(
295
+                ',<(span|div)\sclass=[\'"]base64' . $source . '[\'"]\s(.*)>\s*</\1>,UmsS',
296
+                $letexte,
297
+                $regs,
298
+                PREG_SET_ORDER
299
+            )
300
+            and $max_prof--
301
+        ) {
302
+            foreach ($regs as $reg) {
303
+                $rempl = base64_decode(extraire_attribut($reg[0], 'title'));
304
+                // recherche d'attributs supplementaires
305
+                $at = [];
306
+                foreach (['lang', 'dir'] as $attr) {
307
+                    if ($a = extraire_attribut($reg[0], $attr)) {
308
+                        $at[$attr] = $a;
309
+                    }
310
+                }
311
+                if ($at) {
312
+                    $rempl = '<' . $reg[1] . '>' . $rempl . '</' . $reg[1] . '>';
313
+                    foreach ($at as $attr => $a) {
314
+                        $rempl = inserer_attribut($rempl, $attr, $a);
315
+                    }
316
+                }
317
+                if ($filtre) {
318
+                    $rempl = $filtre($rempl);
319
+                }
320
+                $letexte = str_replace($reg[0], $rempl, $letexte);
321
+            }
322
+        }
323
+    }
324
+
325
+    return $letexte;
326 326
 }
327 327
 
328 328
 // Reinserer le javascript de confiance (venant des modeles)
329 329
 
330 330
 // https://code.spip.net/@echappe_retour_modeles
331 331
 function echappe_retour_modeles($letexte, $interdire_scripts = false) {
332
-	$letexte = echappe_retour($letexte);
332
+    $letexte = echappe_retour($letexte);
333 333
 
334
-	// Dans les appels directs hors squelette, securiser aussi ici
335
-	if ($interdire_scripts) {
336
-		$letexte = interdire_scripts($letexte);
337
-	}
334
+    // Dans les appels directs hors squelette, securiser aussi ici
335
+    if ($interdire_scripts) {
336
+        $letexte = interdire_scripts($letexte);
337
+    }
338 338
 
339
-	return trim($letexte);
339
+    return trim($letexte);
340 340
 }
341 341
 
342 342
 
@@ -364,132 +364,132 @@  discard block
 block discarded – undo
364 364
  *     Texte coupé
365 365
  **/
366 366
 function couper($texte, $taille = 50, $suite = null) {
367
-	if (!($length = strlen($texte)) or $taille <= 0) {
368
-		return '';
369
-	}
370
-	$offset = 400 + 2 * $taille;
371
-	while (
372
-		$offset < $length
373
-		and strlen(preg_replace(',<(!--|\w|/)[^>]+>,Uims', '', substr($texte, 0, $offset))) < $taille
374
-	) {
375
-		$offset = 2 * $offset;
376
-	}
377
-	if (
378
-		$offset < $length
379
-		&& ($p_tag_ouvrant = strpos($texte, '<', $offset)) !== null
380
-	) {
381
-		$p_tag_fermant = strpos($texte, '>', $offset);
382
-		if ($p_tag_fermant && ($p_tag_fermant < $p_tag_ouvrant)) {
383
-			$offset = $p_tag_fermant + 1;
384
-		} // prolonger la coupe jusqu'au tag fermant suivant eventuel
385
-	}
386
-	$texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
387
-
388
-	if (!function_exists('nettoyer_raccourcis_typo')) {
389
-		include_spip('inc/lien');
390
-	}
391
-	$texte = nettoyer_raccourcis_typo($texte);
392
-
393
-	// balises de sauts de ligne et paragraphe
394
-	$texte = preg_replace('/<p( [^>]*)?' . '>/', "\r", $texte);
395
-	$texte = preg_replace('/<br( [^>]*)?' . '>/', "\n", $texte);
396
-
397
-	// on repasse les doubles \n en \r que nettoyer_raccourcis_typo() a pu modifier
398
-	$texte = str_replace("\n\n", "\r", $texte);
399
-
400
-	// supprimer les tags
401
-	$texte = supprimer_tags($texte);
402
-	$texte = trim(str_replace("\n", ' ', $texte));
403
-	$texte .= "\n";  // marquer la fin
404
-
405
-	// corriger la longueur de coupe
406
-	// en fonction de la presence de caracteres utf
407
-	if ($GLOBALS['meta']['charset'] == 'utf-8') {
408
-		$long = charset2unicode($texte);
409
-		$long = spip_substr($long, 0, max($taille, 1));
410
-		$nbcharutf = preg_match_all('/(&#[0-9]{3,6};)/S', $long, $matches);
411
-		$taille += $nbcharutf;
412
-	}
413
-
414
-
415
-	// couper au mot precedent
416
-	$long = spip_substr($texte, 0, max($taille - 4, 1));
417
-	$u = $GLOBALS['meta']['pcre_u'];
418
-	$court = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
419
-	if (is_null($suite)) {
420
-		$suite = (defined('_COUPER_SUITE') ? _COUPER_SUITE : '&nbsp;(...)');
421
-	}
422
-	$points = $suite;
423
-
424
-	// trop court ? ne pas faire de (...)
425
-	if (spip_strlen($court) < max(0.75 * $taille, 2)) {
426
-		$points = '';
427
-		$long = spip_substr($texte, 0, $taille);
428
-		$texte = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
429
-		// encore trop court ? couper au caractere
430
-		if (spip_strlen($texte) < 0.75 * $taille) {
431
-			$texte = $long;
432
-		}
433
-	} else {
434
-		$texte = $court;
435
-	}
436
-
437
-	if (strpos($texte, "\n")) {  // la fin est encore la : c'est qu'on n'a pas de texte de suite
438
-	$points = '';
439
-	}
440
-
441
-	// remettre les paragraphes
442
-	$texte = preg_replace("/\r+/", "\n\n", $texte);
443
-
444
-	// supprimer l'eventuelle entite finale mal coupee
445
-	$texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte);
446
-
447
-	return quote_amp(trim($texte)) . $points;
367
+    if (!($length = strlen($texte)) or $taille <= 0) {
368
+        return '';
369
+    }
370
+    $offset = 400 + 2 * $taille;
371
+    while (
372
+        $offset < $length
373
+        and strlen(preg_replace(',<(!--|\w|/)[^>]+>,Uims', '', substr($texte, 0, $offset))) < $taille
374
+    ) {
375
+        $offset = 2 * $offset;
376
+    }
377
+    if (
378
+        $offset < $length
379
+        && ($p_tag_ouvrant = strpos($texte, '<', $offset)) !== null
380
+    ) {
381
+        $p_tag_fermant = strpos($texte, '>', $offset);
382
+        if ($p_tag_fermant && ($p_tag_fermant < $p_tag_ouvrant)) {
383
+            $offset = $p_tag_fermant + 1;
384
+        } // prolonger la coupe jusqu'au tag fermant suivant eventuel
385
+    }
386
+    $texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
387
+
388
+    if (!function_exists('nettoyer_raccourcis_typo')) {
389
+        include_spip('inc/lien');
390
+    }
391
+    $texte = nettoyer_raccourcis_typo($texte);
392
+
393
+    // balises de sauts de ligne et paragraphe
394
+    $texte = preg_replace('/<p( [^>]*)?' . '>/', "\r", $texte);
395
+    $texte = preg_replace('/<br( [^>]*)?' . '>/', "\n", $texte);
396
+
397
+    // on repasse les doubles \n en \r que nettoyer_raccourcis_typo() a pu modifier
398
+    $texte = str_replace("\n\n", "\r", $texte);
399
+
400
+    // supprimer les tags
401
+    $texte = supprimer_tags($texte);
402
+    $texte = trim(str_replace("\n", ' ', $texte));
403
+    $texte .= "\n";  // marquer la fin
404
+
405
+    // corriger la longueur de coupe
406
+    // en fonction de la presence de caracteres utf
407
+    if ($GLOBALS['meta']['charset'] == 'utf-8') {
408
+        $long = charset2unicode($texte);
409
+        $long = spip_substr($long, 0, max($taille, 1));
410
+        $nbcharutf = preg_match_all('/(&#[0-9]{3,6};)/S', $long, $matches);
411
+        $taille += $nbcharutf;
412
+    }
413
+
414
+
415
+    // couper au mot precedent
416
+    $long = spip_substr($texte, 0, max($taille - 4, 1));
417
+    $u = $GLOBALS['meta']['pcre_u'];
418
+    $court = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
419
+    if (is_null($suite)) {
420
+        $suite = (defined('_COUPER_SUITE') ? _COUPER_SUITE : '&nbsp;(...)');
421
+    }
422
+    $points = $suite;
423
+
424
+    // trop court ? ne pas faire de (...)
425
+    if (spip_strlen($court) < max(0.75 * $taille, 2)) {
426
+        $points = '';
427
+        $long = spip_substr($texte, 0, $taille);
428
+        $texte = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
429
+        // encore trop court ? couper au caractere
430
+        if (spip_strlen($texte) < 0.75 * $taille) {
431
+            $texte = $long;
432
+        }
433
+    } else {
434
+        $texte = $court;
435
+    }
436
+
437
+    if (strpos($texte, "\n")) {  // la fin est encore la : c'est qu'on n'a pas de texte de suite
438
+    $points = '';
439
+    }
440
+
441
+    // remettre les paragraphes
442
+    $texte = preg_replace("/\r+/", "\n\n", $texte);
443
+
444
+    // supprimer l'eventuelle entite finale mal coupee
445
+    $texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte);
446
+
447
+    return quote_amp(trim($texte)) . $points;
448 448
 }
449 449
 
450 450
 
451 451
 // https://code.spip.net/@protege_js_modeles
452 452
 function protege_js_modeles($t) {
453
-	if (isset($GLOBALS['visiteur_session'])) {
454
-		if (preg_match_all(',<script.*?($|</script.),isS', $t, $r, PREG_SET_ORDER)) {
455
-			if (!defined('_PROTEGE_JS_MODELES')) {
456
-				include_spip('inc/acces');
457
-				define('_PROTEGE_JS_MODELES', creer_uniqid());
458
-			}
459
-			foreach ($r as $regs) {
460
-				$t = str_replace($regs[0], code_echappement($regs[0], 'javascript' . _PROTEGE_JS_MODELES), $t);
461
-			}
462
-		}
463
-		if (preg_match_all(',<\?php.*?($|\?' . '>),isS', $t, $r, PREG_SET_ORDER)) {
464
-			if (!defined('_PROTEGE_PHP_MODELES')) {
465
-				include_spip('inc/acces');
466
-				define('_PROTEGE_PHP_MODELES', creer_uniqid());
467
-			}
468
-			foreach ($r as $regs) {
469
-				$t = str_replace($regs[0], code_echappement($regs[0], 'php' . _PROTEGE_PHP_MODELES), $t);
470
-			}
471
-		}
472
-	}
473
-
474
-	return $t;
453
+    if (isset($GLOBALS['visiteur_session'])) {
454
+        if (preg_match_all(',<script.*?($|</script.),isS', $t, $r, PREG_SET_ORDER)) {
455
+            if (!defined('_PROTEGE_JS_MODELES')) {
456
+                include_spip('inc/acces');
457
+                define('_PROTEGE_JS_MODELES', creer_uniqid());
458
+            }
459
+            foreach ($r as $regs) {
460
+                $t = str_replace($regs[0], code_echappement($regs[0], 'javascript' . _PROTEGE_JS_MODELES), $t);
461
+            }
462
+        }
463
+        if (preg_match_all(',<\?php.*?($|\?' . '>),isS', $t, $r, PREG_SET_ORDER)) {
464
+            if (!defined('_PROTEGE_PHP_MODELES')) {
465
+                include_spip('inc/acces');
466
+                define('_PROTEGE_PHP_MODELES', creer_uniqid());
467
+            }
468
+            foreach ($r as $regs) {
469
+                $t = str_replace($regs[0], code_echappement($regs[0], 'php' . _PROTEGE_PHP_MODELES), $t);
470
+            }
471
+        }
472
+    }
473
+
474
+    return $t;
475 475
 }
476 476
 
477 477
 
478 478
 function echapper_faux_tags($letexte) {
479
-	if (strpos($letexte, '<') === false) {
480
-		return $letexte;
481
-	}
482
-	$textMatches = preg_split(',(</?[a-z!][^<>]*>),', $letexte, null, PREG_SPLIT_DELIM_CAPTURE);
483
-
484
-	$letexte = '';
485
-	while (count($textMatches)) {
486
-		// un texte a echapper
487
-		$letexte .= str_replace('<', '&lt;', array_shift($textMatches));
488
-		// un tag html qui a servit a faite le split
489
-		$letexte .= array_shift($textMatches);
490
-	}
491
-
492
-	return $letexte;
479
+    if (strpos($letexte, '<') === false) {
480
+        return $letexte;
481
+    }
482
+    $textMatches = preg_split(',(</?[a-z!][^<>]*>),', $letexte, null, PREG_SPLIT_DELIM_CAPTURE);
483
+
484
+    $letexte = '';
485
+    while (count($textMatches)) {
486
+        // un texte a echapper
487
+        $letexte .= str_replace('<', '&lt;', array_shift($textMatches));
488
+        // un tag html qui a servit a faite le split
489
+        $letexte .= array_shift($textMatches);
490
+    }
491
+
492
+    return $letexte;
493 493
 }
494 494
 
495 495
 /**
@@ -502,47 +502,47 @@  discard block
 block discarded – undo
502 502
  * @return string
503 503
  */
504 504
 function echapper_html_suspect($texte, $strict = true) {
505
-	static $echapper_html_suspect;
506
-	if (!$texte or !is_string($texte)) {
507
-		return $texte;
508
-	}
509
-
510
-	if (!isset($echapper_html_suspect)) {
511
-		$echapper_html_suspect = charger_fonction('echapper_html_suspect', 'inc', true);
512
-	}
513
-	// si fonction personalisee, on delegue
514
-	if ($echapper_html_suspect) {
515
-		return $echapper_html_suspect($texte, $strict);
516
-	}
517
-
518
-	if (
519
-		strpos($texte, '<') === false
520
-		or strpos($texte, '=') === false
521
-	) {
522
-		return $texte;
523
-	}
524
-
525
-	// quand c'est du texte qui passe par propre on est plus coulant tant qu'il y a pas d'attribut du type onxxx=
526
-	// car sinon on declenche sur les modeles ou ressources
527
-	if (
528
-		!$strict and
529
-		(strpos($texte, 'on') === false or !preg_match(",<\w+.*\bon\w+\s*=,UimsS", $texte))
530
-	) {
531
-		return $texte;
532
-	}
533
-
534
-	// on teste sur strlen car safehtml supprime le contenu dangereux
535
-	// mais il peut aussi changer des ' en " sur les attributs html,
536
-	// donc un test d'egalite est trop strict
537
-	if (strlen(safehtml($texte)) !== strlen($texte)) {
538
-		$texte = str_replace('<', '&lt;', $texte);
539
-		if (!function_exists('attribut_html')) {
540
-			include_spip('inc/filtres');
541
-		}
542
-		$texte = "<mark class='danger-js' title='" . attribut_html(_T('erreur_contenu_suspect')) . "'>⚠️</mark> " . $texte;
543
-	}
544
-
545
-	return $texte;
505
+    static $echapper_html_suspect;
506
+    if (!$texte or !is_string($texte)) {
507
+        return $texte;
508
+    }
509
+
510
+    if (!isset($echapper_html_suspect)) {
511
+        $echapper_html_suspect = charger_fonction('echapper_html_suspect', 'inc', true);
512
+    }
513
+    // si fonction personalisee, on delegue
514
+    if ($echapper_html_suspect) {
515
+        return $echapper_html_suspect($texte, $strict);
516
+    }
517
+
518
+    if (
519
+        strpos($texte, '<') === false
520
+        or strpos($texte, '=') === false
521
+    ) {
522
+        return $texte;
523
+    }
524
+
525
+    // quand c'est du texte qui passe par propre on est plus coulant tant qu'il y a pas d'attribut du type onxxx=
526
+    // car sinon on declenche sur les modeles ou ressources
527
+    if (
528
+        !$strict and
529
+        (strpos($texte, 'on') === false or !preg_match(",<\w+.*\bon\w+\s*=,UimsS", $texte))
530
+    ) {
531
+        return $texte;
532
+    }
533
+
534
+    // on teste sur strlen car safehtml supprime le contenu dangereux
535
+    // mais il peut aussi changer des ' en " sur les attributs html,
536
+    // donc un test d'egalite est trop strict
537
+    if (strlen(safehtml($texte)) !== strlen($texte)) {
538
+        $texte = str_replace('<', '&lt;', $texte);
539
+        if (!function_exists('attribut_html')) {
540
+            include_spip('inc/filtres');
541
+        }
542
+        $texte = "<mark class='danger-js' title='" . attribut_html(_T('erreur_contenu_suspect')) . "'>⚠️</mark> " . $texte;
543
+    }
544
+
545
+    return $texte;
546 546
 }
547 547
 
548 548
 
@@ -563,30 +563,30 @@  discard block
 block discarded – undo
563 563
  *      Texte sécurisé
564 564
  **/
565 565
 function safehtml($t) {
566
-	static $safehtml;
567
-
568
-	if (!$t or !is_string($t)) {
569
-		return $t;
570
-	}
571
-	# attention safehtml nettoie deux ou trois caracteres de plus. A voir
572
-	if (strpos($t, '<') === false) {
573
-		return str_replace("\x00", '', $t);
574
-	}
575
-
576
-	if (!function_exists('interdire_scripts')) {
577
-		include_spip('inc/texte');
578
-	}
579
-	$t = interdire_scripts($t); // jolifier le php
580
-	$t = echappe_js($t);
581
-
582
-	if (!isset($safehtml)) {
583
-		$safehtml = charger_fonction('safehtml', 'inc', true);
584
-	}
585
-	if ($safehtml) {
586
-		$t = $safehtml($t);
587
-	}
588
-
589
-	return interdire_scripts($t); // interdire le php (2 precautions)
566
+    static $safehtml;
567
+
568
+    if (!$t or !is_string($t)) {
569
+        return $t;
570
+    }
571
+    # attention safehtml nettoie deux ou trois caracteres de plus. A voir
572
+    if (strpos($t, '<') === false) {
573
+        return str_replace("\x00", '', $t);
574
+    }
575
+
576
+    if (!function_exists('interdire_scripts')) {
577
+        include_spip('inc/texte');
578
+    }
579
+    $t = interdire_scripts($t); // jolifier le php
580
+    $t = echappe_js($t);
581
+
582
+    if (!isset($safehtml)) {
583
+        $safehtml = charger_fonction('safehtml', 'inc', true);
584
+    }
585
+    if ($safehtml) {
586
+        $t = $safehtml($t);
587
+    }
588
+
589
+    return interdire_scripts($t); // interdire le php (2 precautions)
590 590
 }
591 591
 
592 592
 
@@ -608,13 +608,13 @@  discard block
 block discarded – undo
608 608
  *     Texte sans les modèles d'image
609 609
  **/
610 610
 function supprime_img($letexte, $message = null) {
611
-	if ($message === null) {
612
-		$message = '(' . _T('img_indisponible') . ')';
613
-	}
614
-
615
-	return preg_replace(
616
-		',<(img|doc|emb)([0-9]+)(\|([^>]*))?' . '\s*/?' . '>,i',
617
-		$message,
618
-		$letexte
619
-	);
611
+    if ($message === null) {
612
+        $message = '(' . _T('img_indisponible') . ')';
613
+    }
614
+
615
+    return preg_replace(
616
+        ',<(img|doc|emb)([0-9]+)(\|([^>]*))?' . '\s*/?' . '>,i',
617
+        $message,
618
+        $letexte
619
+    );
620 620
 }
Please login to merge, or discard this patch.
Spacing   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -44,13 +44,13 @@  discard block
 block discarded – undo
44 44
 	// celle du texte) et public (spip_lang est la langue du texte)
45 45
 	$dir = _DIR_RESTREINT ? lang_dir() : lang_dir($GLOBALS['spip_lang']);
46 46
 
47
-	$p = 'puce' . (test_espace_prive() ? '_prive' : '');
47
+	$p = 'puce'.(test_espace_prive() ? '_prive' : '');
48 48
 	if ($dir == 'rtl') {
49 49
 		$p .= '_rtl';
50 50
 	}
51 51
 
52 52
 	if (!isset($GLOBALS[$p])) {
53
-		$GLOBALS[$p] = '<span class="spip-puce ' . $dir . '"><b>–</b></span>';
53
+		$GLOBALS[$p] = '<span class="spip-puce '.$dir.'"><b>–</b></span>';
54 54
 	}
55 55
 
56 56
 	return $GLOBALS[$p];
@@ -68,7 +68,7 @@  discard block
 block discarded – undo
68 68
 }
69 69
 
70 70
 if (!defined('_BALISES_BLOCS_REGEXP')) {
71
-	define('_BALISES_BLOCS_REGEXP', ',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS');
71
+	define('_BALISES_BLOCS_REGEXP', ',</?('._BALISES_BLOCS.')[>[:space:]],iS');
72 72
 }
73 73
 
74 74
 //
@@ -86,7 +86,7 @@  discard block
 block discarded – undo
86 86
 
87 87
 	// Tester si on echappe en span ou en div
88 88
 	if (is_null($mode) or !in_array($mode, ['div', 'span'])) {
89
-		$mode = preg_match(',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS', $rempl) ? 'div' : 'span';
89
+		$mode = preg_match(',</?('._BALISES_BLOCS.')[>[:space:]],iS', $rempl) ? 'div' : 'span';
90 90
 	}
91 91
 
92 92
 	// Decouper en morceaux, base64 a des probleme selon la taille de la pile
@@ -122,7 +122,7 @@  discard block
 block discarded – undo
122 122
 	) {
123 123
 		foreach ($matches as $m) {
124 124
 			if ($m[1] === 'code') {
125
-				$code = '<code' . $m[2] . '>' . spip_htmlspecialchars($m[3]) . '</code>';
125
+				$code = '<code'.$m[2].'>'.spip_htmlspecialchars($m[3]).'</code>';
126 126
 				$pre = str_replace($m[0], $code, $pre);
127 127
 			}
128 128
 		}
@@ -133,7 +133,7 @@  discard block
 block discarded – undo
133 133
 // Echapper les <code>...</ code>
134 134
 // https://code.spip.net/@traiter_echap_code_dist
135 135
 function traiter_echap_code_dist($regs) {
136
-	list(, , $att, $corps) = $regs;
136
+	list(,, $att, $corps) = $regs;
137 137
 	$echap = spip_htmlspecialchars($corps); // il ne faut pas passer dans entites_html, ne pas transformer les &#xxx; du code !
138 138
 
139 139
 	// ne pas mettre le <div...> s'il n'y a qu'une ligne
@@ -144,9 +144,9 @@  discard block
 block discarded – undo
144 144
 		$echap = nl2br($echap);
145 145
 		$echap = "<div style='text-align: left;' "
146 146
 			. "class='spip_code' dir='ltr'><code$att>"
147
-			. $echap . '</code></div>';
147
+			. $echap.'</code></div>';
148 148
 	} else {
149
-		$echap = "<code$att class='spip_code' dir='ltr'>" . $echap . '</code>';
149
+		$echap = "<code$att class='spip_code' dir='ltr'>".$echap.'</code>';
150 150
 	}
151 151
 
152 152
 	$echap = str_replace("\t", '&nbsp; &nbsp; &nbsp; &nbsp; ', $echap);
@@ -237,8 +237,8 @@  discard block
 block discarded – undo
237 237
 			} // sinon les traiter selon le cas
238 238
 			else {
239 239
 				if (
240
-					function_exists($f = $callback_prefix . 'traiter_echap_' . strtolower($regs[1]))
241
-					or function_exists($f = $f . '_dist')
240
+					function_exists($f = $callback_prefix.'traiter_echap_'.strtolower($regs[1]))
241
+					or function_exists($f = $f.'_dist')
242 242
 				) {
243 243
 					$echap = $f($regs);
244 244
 				}
@@ -259,7 +259,7 @@  discard block
 block discarded – undo
259 259
 	// dans une callback autonommee
260 260
 	if (strpos($preg ? $preg : _PROTEGE_BLOCS, 'script') !== false) {
261 261
 		if (
262
-			strpos($letexte, '<' . '?') !== false and preg_match_all(
262
+			strpos($letexte, '<'.'?') !== false and preg_match_all(
263 263
 				',<[?].*($|[?]>),UisS',
264 264
 				$letexte,
265 265
 				$matches,
@@ -292,7 +292,7 @@  discard block
 block discarded – undo
292 292
 			strpos($letexte, '<') !== false
293 293
 			and
294 294
 			preg_match_all(
295
-				',<(span|div)\sclass=[\'"]base64' . $source . '[\'"]\s(.*)>\s*</\1>,UmsS',
295
+				',<(span|div)\sclass=[\'"]base64'.$source.'[\'"]\s(.*)>\s*</\1>,UmsS',
296 296
 				$letexte,
297 297
 				$regs,
298 298
 				PREG_SET_ORDER
@@ -309,7 +309,7 @@  discard block
 block discarded – undo
309 309
 					}
310 310
 				}
311 311
 				if ($at) {
312
-					$rempl = '<' . $reg[1] . '>' . $rempl . '</' . $reg[1] . '>';
312
+					$rempl = '<'.$reg[1].'>'.$rempl.'</'.$reg[1].'>';
313 313
 					foreach ($at as $attr => $a) {
314 314
 						$rempl = inserer_attribut($rempl, $attr, $a);
315 315
 					}
@@ -391,8 +391,8 @@  discard block
 block discarded – undo
391 391
 	$texte = nettoyer_raccourcis_typo($texte);
392 392
 
393 393
 	// balises de sauts de ligne et paragraphe
394
-	$texte = preg_replace('/<p( [^>]*)?' . '>/', "\r", $texte);
395
-	$texte = preg_replace('/<br( [^>]*)?' . '>/', "\n", $texte);
394
+	$texte = preg_replace('/<p( [^>]*)?'.'>/', "\r", $texte);
395
+	$texte = preg_replace('/<br( [^>]*)?'.'>/', "\n", $texte);
396 396
 
397 397
 	// on repasse les doubles \n en \r que nettoyer_raccourcis_typo() a pu modifier
398 398
 	$texte = str_replace("\n\n", "\r", $texte);
@@ -400,7 +400,7 @@  discard block
 block discarded – undo
400 400
 	// supprimer les tags
401 401
 	$texte = supprimer_tags($texte);
402 402
 	$texte = trim(str_replace("\n", ' ', $texte));
403
-	$texte .= "\n";  // marquer la fin
403
+	$texte .= "\n"; // marquer la fin
404 404
 
405 405
 	// corriger la longueur de coupe
406 406
 	// en fonction de la presence de caracteres utf
@@ -415,7 +415,7 @@  discard block
 block discarded – undo
415 415
 	// couper au mot precedent
416 416
 	$long = spip_substr($texte, 0, max($taille - 4, 1));
417 417
 	$u = $GLOBALS['meta']['pcre_u'];
418
-	$court = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
418
+	$court = preg_replace("/([^\s][\s]+)[^\s]*\n?$/".$u, "\\1", $long);
419 419
 	if (is_null($suite)) {
420 420
 		$suite = (defined('_COUPER_SUITE') ? _COUPER_SUITE : '&nbsp;(...)');
421 421
 	}
@@ -425,7 +425,7 @@  discard block
 block discarded – undo
425 425
 	if (spip_strlen($court) < max(0.75 * $taille, 2)) {
426 426
 		$points = '';
427 427
 		$long = spip_substr($texte, 0, $taille);
428
-		$texte = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
428
+		$texte = preg_replace("/([^\s][\s]+)[^\s]*\n?$/".$u, "\\1", $long);
429 429
 		// encore trop court ? couper au caractere
430 430
 		if (spip_strlen($texte) < 0.75 * $taille) {
431 431
 			$texte = $long;
@@ -444,7 +444,7 @@  discard block
 block discarded – undo
444 444
 	// supprimer l'eventuelle entite finale mal coupee
445 445
 	$texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte);
446 446
 
447
-	return quote_amp(trim($texte)) . $points;
447
+	return quote_amp(trim($texte)).$points;
448 448
 }
449 449
 
450 450
 
@@ -457,16 +457,16 @@  discard block
 block discarded – undo
457 457
 				define('_PROTEGE_JS_MODELES', creer_uniqid());
458 458
 			}
459 459
 			foreach ($r as $regs) {
460
-				$t = str_replace($regs[0], code_echappement($regs[0], 'javascript' . _PROTEGE_JS_MODELES), $t);
460
+				$t = str_replace($regs[0], code_echappement($regs[0], 'javascript'._PROTEGE_JS_MODELES), $t);
461 461
 			}
462 462
 		}
463
-		if (preg_match_all(',<\?php.*?($|\?' . '>),isS', $t, $r, PREG_SET_ORDER)) {
463
+		if (preg_match_all(',<\?php.*?($|\?'.'>),isS', $t, $r, PREG_SET_ORDER)) {
464 464
 			if (!defined('_PROTEGE_PHP_MODELES')) {
465 465
 				include_spip('inc/acces');
466 466
 				define('_PROTEGE_PHP_MODELES', creer_uniqid());
467 467
 			}
468 468
 			foreach ($r as $regs) {
469
-				$t = str_replace($regs[0], code_echappement($regs[0], 'php' . _PROTEGE_PHP_MODELES), $t);
469
+				$t = str_replace($regs[0], code_echappement($regs[0], 'php'._PROTEGE_PHP_MODELES), $t);
470 470
 			}
471 471
 		}
472 472
 	}
@@ -539,7 +539,7 @@  discard block
 block discarded – undo
539 539
 		if (!function_exists('attribut_html')) {
540 540
 			include_spip('inc/filtres');
541 541
 		}
542
-		$texte = "<mark class='danger-js' title='" . attribut_html(_T('erreur_contenu_suspect')) . "'>⚠️</mark> " . $texte;
542
+		$texte = "<mark class='danger-js' title='".attribut_html(_T('erreur_contenu_suspect'))."'>⚠️</mark> ".$texte;
543 543
 	}
544 544
 
545 545
 	return $texte;
@@ -609,11 +609,11 @@  discard block
 block discarded – undo
609 609
  **/
610 610
 function supprime_img($letexte, $message = null) {
611 611
 	if ($message === null) {
612
-		$message = '(' . _T('img_indisponible') . ')';
612
+		$message = '('._T('img_indisponible').')';
613 613
 	}
614 614
 
615 615
 	return preg_replace(
616
-		',<(img|doc|emb)([0-9]+)(\|([^>]*))?' . '\s*/?' . '>,i',
616
+		',<(img|doc|emb)([0-9]+)(\|([^>]*))?'.'\s*/?'.'>,i',
617 617
 		$message,
618 618
 		$letexte
619 619
 	);
Please login to merge, or discard this patch.
ecrire/inc/auth.php 2 patches
Indentation   +449 added lines, -449 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('base/abstract_sql');
@@ -35,33 +35,33 @@  discard block
 block discarded – undo
35 35
  *  - une chaîne vide si autorisation à pénétrer dans l'espace privé.
36 36
  */
37 37
 function inc_auth_dist() {
38
-	$row = auth_mode();
38
+    $row = auth_mode();
39 39
 
40
-	if ($row) {
41
-		return auth_init_droits($row);
42
-	}
40
+    if ($row) {
41
+        return auth_init_droits($row);
42
+    }
43 43
 
44
-	if (!$GLOBALS['connect_login']) {
45
-		return auth_a_loger();
46
-	}
44
+    if (!$GLOBALS['connect_login']) {
45
+        return auth_a_loger();
46
+    }
47 47
 
48
-	// Cas ou l'auteur a ete identifie mais on n'a pas d'info sur lui
49
-	// C'est soit parce que la base est inutilisable,
50
-	// soit parce que la table des auteurs a changee (restauration etc)
51
-	// Pas la peine d'insister.
52
-	// Renvoyer le nom fautif et une URL de remise a zero
48
+    // Cas ou l'auteur a ete identifie mais on n'a pas d'info sur lui
49
+    // C'est soit parce que la base est inutilisable,
50
+    // soit parce que la table des auteurs a changee (restauration etc)
51
+    // Pas la peine d'insister.
52
+    // Renvoyer le nom fautif et une URL de remise a zero
53 53
 
54
-	if (spip_connect()) {
55
-		return [
56
-			'login' => $GLOBALS['connect_login'],
57
-			'site' => generer_url_public('', 'action=logout&amp;logout=prive')
58
-		];
59
-	}
54
+    if (spip_connect()) {
55
+        return [
56
+            'login' => $GLOBALS['connect_login'],
57
+            'site' => generer_url_public('', 'action=logout&amp;logout=prive')
58
+        ];
59
+    }
60 60
 
61
-	$n = intval(sql_errno());
62
-	spip_log("Erreur base de donnees $n " . sql_error());
61
+    $n = intval(sql_errno());
62
+    spip_log("Erreur base de donnees $n " . sql_error());
63 63
 
64
-	return $n ? $n : 1;
64
+    return $n ? $n : 1;
65 65
 }
66 66
 
67 67
 /**
@@ -73,39 +73,39 @@  discard block
 block discarded – undo
73 73
  * @return array|string
74 74
  */
75 75
 function auth_echec($raison) {
76
-	include_spip('inc/minipres');
77
-	include_spip('inc/headers');
78
-	// pas authentifie. Pourquoi ?
79
-	if (is_string($raison)) {
80
-		// redirection vers une page d'authentification
81
-		// on ne revient pas de cette fonction
82
-		// sauf si pb de header
83
-		$raison = redirige_formulaire($raison);
84
-	} elseif (is_int($raison)) {
85
-		// erreur SQL a afficher
86
-		$raison = minipres(
87
-			_T('info_travaux_titre'),
88
-			_T('titre_probleme_technique') . '<p><tt>' . sql_errno() . ' ' . sql_error() . '</tt></p>'
89
-		);
90
-	} elseif (@$raison['statut']) {
91
-		// un simple visiteur n'a pas acces a l'espace prive
92
-		spip_log('connexion refusee a ' . @$raison['id_auteur']);
93
-		$raison = minipres(_T('avis_erreur_connexion'), _T('avis_erreur_visiteur'));
94
-	} else {
95
-		// auteur en fin de droits ...
96
-		$h = $raison['site'];
97
-		$raison = minipres(
98
-			_T('avis_erreur_connexion'),
99
-			'<br /><br /><p>'
100
-			. _T('texte_inc_auth_1', ['auth_login' => $raison['login']])
101
-			. " <a href='$h'>"
102
-			. _T('texte_inc_auth_2')
103
-			. '</a>'
104
-			. _T('texte_inc_auth_3')
105
-		);
106
-	}
107
-
108
-	return $raison;
76
+    include_spip('inc/minipres');
77
+    include_spip('inc/headers');
78
+    // pas authentifie. Pourquoi ?
79
+    if (is_string($raison)) {
80
+        // redirection vers une page d'authentification
81
+        // on ne revient pas de cette fonction
82
+        // sauf si pb de header
83
+        $raison = redirige_formulaire($raison);
84
+    } elseif (is_int($raison)) {
85
+        // erreur SQL a afficher
86
+        $raison = minipres(
87
+            _T('info_travaux_titre'),
88
+            _T('titre_probleme_technique') . '<p><tt>' . sql_errno() . ' ' . sql_error() . '</tt></p>'
89
+        );
90
+    } elseif (@$raison['statut']) {
91
+        // un simple visiteur n'a pas acces a l'espace prive
92
+        spip_log('connexion refusee a ' . @$raison['id_auteur']);
93
+        $raison = minipres(_T('avis_erreur_connexion'), _T('avis_erreur_visiteur'));
94
+    } else {
95
+        // auteur en fin de droits ...
96
+        $h = $raison['site'];
97
+        $raison = minipres(
98
+            _T('avis_erreur_connexion'),
99
+            '<br /><br /><p>'
100
+            . _T('texte_inc_auth_1', ['auth_login' => $raison['login']])
101
+            . " <a href='$h'>"
102
+            . _T('texte_inc_auth_2')
103
+            . '</a>'
104
+            . _T('texte_inc_auth_3')
105
+        );
106
+    }
107
+
108
+    return $raison;
109 109
 }
110 110
 
111 111
 /**
@@ -115,81 +115,81 @@  discard block
 block discarded – undo
115 115
  * @return array|bool|string
116 116
  */
117 117
 function auth_mode() {
118
-	//
119
-	// Initialiser variables (eviter hacks par URL)
120
-	//
121
-	$GLOBALS['connect_login'] = '';
122
-	$id_auteur = null;
123
-	$GLOBALS['auth_can_disconnect'] = false;
124
-
125
-	//
126
-	// Recuperer les donnees d'identification
127
-	//
128
-	include_spip('inc/session');
129
-	// Session valide en cours ?
130
-	if (isset($_COOKIE['spip_session'])) {
131
-		$session = charger_fonction('session', 'inc');
132
-		if (
133
-			$id_auteur = $session()
134
-			or $id_auteur === 0 // reprise sur restauration
135
-		) {
136
-			$GLOBALS['auth_can_disconnect'] = true;
137
-			$GLOBALS['connect_login'] = session_get('login');
138
-		} else {
139
-			unset($_COOKIE['spip_session']);
140
-		}
141
-	}
142
-
143
-	// Essayer auth http si significatif
144
-	// (ignorer les login d'intranet independants de spip)
145
-	if (!$GLOBALS['ignore_auth_http']) {
146
-		if (
147
-			(isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])
148
-				and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))
149
-			or
150
-			// Si auth http differtente de basic, PHP_AUTH_PW
151
-			// est indisponible mais tentons quand meme pour
152
-			// autocreation via LDAP
153
-			(isset($_SERVER['REMOTE_USER'])
154
-				and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], ''))
155
-		) {
156
-			if (!$id_auteur) {
157
-				$_SERVER['PHP_AUTH_PW'] = '';
158
-				$GLOBALS['auth_can_disconnect'] = true;
159
-				$GLOBALS['visiteur_session'] = $r;
160
-				$GLOBALS['connect_login'] = session_get('login');
161
-				$id_auteur = $r['id_auteur'];
162
-			} else {
163
-				// cas de la session en plus de PHP_AUTH
164
-				/*				  if ($id_auteur != $r['id_auteur']){
118
+    //
119
+    // Initialiser variables (eviter hacks par URL)
120
+    //
121
+    $GLOBALS['connect_login'] = '';
122
+    $id_auteur = null;
123
+    $GLOBALS['auth_can_disconnect'] = false;
124
+
125
+    //
126
+    // Recuperer les donnees d'identification
127
+    //
128
+    include_spip('inc/session');
129
+    // Session valide en cours ?
130
+    if (isset($_COOKIE['spip_session'])) {
131
+        $session = charger_fonction('session', 'inc');
132
+        if (
133
+            $id_auteur = $session()
134
+            or $id_auteur === 0 // reprise sur restauration
135
+        ) {
136
+            $GLOBALS['auth_can_disconnect'] = true;
137
+            $GLOBALS['connect_login'] = session_get('login');
138
+        } else {
139
+            unset($_COOKIE['spip_session']);
140
+        }
141
+    }
142
+
143
+    // Essayer auth http si significatif
144
+    // (ignorer les login d'intranet independants de spip)
145
+    if (!$GLOBALS['ignore_auth_http']) {
146
+        if (
147
+            (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])
148
+                and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))
149
+            or
150
+            // Si auth http differtente de basic, PHP_AUTH_PW
151
+            // est indisponible mais tentons quand meme pour
152
+            // autocreation via LDAP
153
+            (isset($_SERVER['REMOTE_USER'])
154
+                and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], ''))
155
+        ) {
156
+            if (!$id_auteur) {
157
+                $_SERVER['PHP_AUTH_PW'] = '';
158
+                $GLOBALS['auth_can_disconnect'] = true;
159
+                $GLOBALS['visiteur_session'] = $r;
160
+                $GLOBALS['connect_login'] = session_get('login');
161
+                $id_auteur = $r['id_auteur'];
162
+            } else {
163
+                // cas de la session en plus de PHP_AUTH
164
+                /*				  if ($id_auteur != $r['id_auteur']){
165 165
 					spip_log("vol de session $id_auteur" . join(', ', $r));
166 166
 				unset($_COOKIE['spip_session']);
167 167
 				$id_auteur = '';
168 168
 				} */
169
-			}
170
-		} else {
171
-			// Authentification .htaccess old style, car .htaccess semble
172
-			// souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW
173
-			if (isset($_SERVER['REMOTE_USER'])) {
174
-				$GLOBALS['connect_login'] = $_SERVER['REMOTE_USER'];
175
-			}
176
-		}
177
-	}
178
-
179
-	$where = (is_numeric($id_auteur)
180
-		/*AND $id_auteur>0*/ // reprise lors des restaurations
181
-	) ?
182
-		"id_auteur=$id_auteur" :
183
-		(!strlen($GLOBALS['connect_login']) ? '' : 'login=' . sql_quote($GLOBALS['connect_login'], '', 'text'));
184
-
185
-	if (!$where) {
186
-		return '';
187
-	}
188
-
189
-	// Trouver les autres infos dans la table auteurs.
190
-	// le champ 'quand' est utilise par l'agenda
191
-
192
-	return sql_fetsel('*, en_ligne AS quand', 'spip_auteurs', "$where AND statut!='5poubelle'");
169
+            }
170
+        } else {
171
+            // Authentification .htaccess old style, car .htaccess semble
172
+            // souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW
173
+            if (isset($_SERVER['REMOTE_USER'])) {
174
+                $GLOBALS['connect_login'] = $_SERVER['REMOTE_USER'];
175
+            }
176
+        }
177
+    }
178
+
179
+    $where = (is_numeric($id_auteur)
180
+        /*AND $id_auteur>0*/ // reprise lors des restaurations
181
+    ) ?
182
+        "id_auteur=$id_auteur" :
183
+        (!strlen($GLOBALS['connect_login']) ? '' : 'login=' . sql_quote($GLOBALS['connect_login'], '', 'text'));
184
+
185
+    if (!$where) {
186
+        return '';
187
+    }
188
+
189
+    // Trouver les autres infos dans la table auteurs.
190
+    // le champ 'quand' est utilise par l'agenda
191
+
192
+    return sql_fetsel('*, en_ligne AS quand', 'spip_auteurs', "$where AND statut!='5poubelle'");
193 193
 }
194 194
 
195 195
 /**
@@ -207,86 +207,86 @@  discard block
 block discarded – undo
207 207
  */
208 208
 function auth_init_droits($row) {
209 209
 
210
-	include_spip('inc/autoriser');
211
-	if (!autoriser('loger', '', 0, $row)) {
212
-		return false;
213
-	}
214
-
215
-
216
-	if ($row['statut'] == 'nouveau') {
217
-		include_spip('action/inscrire_auteur');
218
-		$row = confirmer_statut_inscription($row);
219
-	}
220
-
221
-	$GLOBALS['connect_id_auteur'] = $row['id_auteur'];
222
-	$GLOBALS['connect_login'] = $row['login'];
223
-	$GLOBALS['connect_statut'] = $row['statut'];
224
-
225
-	$GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row);
226
-
227
-	// au cas ou : ne pas memoriser les champs sensibles
228
-	unset($GLOBALS['visiteur_session']['pass']);
229
-	unset($GLOBALS['visiteur_session']['htpass']);
230
-	unset($GLOBALS['visiteur_session']['alea_actuel']);
231
-	unset($GLOBALS['visiteur_session']['alea_futur']);
232
-	unset($GLOBALS['visiteur_session']['ldap_password']);
233
-
234
-	// creer la session au besoin
235
-	if (!isset($_COOKIE['spip_session'])) {
236
-		$session = charger_fonction('session', 'inc');
237
-		$spip_session = $session($row);
238
-	}
239
-
240
-	// reinjecter les preferences_auteur apres le reset de spip_session
241
-	// car utilisees au retour par auth_loger()
242
-	$r = @unserialize($row['prefs']);
243
-	$GLOBALS['visiteur_session']['prefs'] = ($r ? $r : []);
244
-	// si prefs pas definies, les definir par defaut
245
-	if (!isset($GLOBALS['visiteur_session']['prefs']['couleur'])) {
246
-		$GLOBALS['visiteur_session']['prefs']['couleur'] = 2;
247
-		$GLOBALS['visiteur_session']['prefs']['display'] = 2;
248
-		$GLOBALS['visiteur_session']['prefs']['display_navigation'] = 'navigation_avec_icones';
249
-		$GLOBALS['visiteur_session']['prefs']['display_outils'] = 'oui';
250
-	}
251
-
252
-	$GLOBALS['visiteur_session'] = pipeline(
253
-		'preparer_visiteur_session',
254
-		['args' => ['row' => $row],
255
-		'data' => $GLOBALS['visiteur_session']]
256
-	);
257
-
258
-	// Etablir les droits selon le codage attendu
259
-	// dans ecrire/index.php ecrire/prive.php
260
-
261
-	// Pas autorise a acceder a ecrire ? renvoyer le tableau
262
-	// A noter : le premier appel a autoriser() a le bon gout
263
-	// d'initialiser $GLOBALS['visiteur_session']['restreint'],
264
-	// qui ne figure pas dans le fichier de session
265
-
266
-	if (!autoriser('ecrire')) {
267
-		return $row;
268
-	}
269
-
270
-	// autoriser('ecrire') ne laisse passer que les Admin et les Redac
271
-
272
-	auth_trace($row);
273
-
274
-	// Administrateurs
275
-	if (in_array($GLOBALS['connect_statut'], explode(',', _STATUT_AUTEUR_RUBRIQUE))) {
276
-		if (
277
-			isset($GLOBALS['visiteur_session']['restreint'])
278
-			and is_array($GLOBALS['visiteur_session']['restreint'])
279
-		) {
280
-			$GLOBALS['connect_id_rubrique'] = $GLOBALS['visiteur_session']['restreint'];
281
-		}
282
-		if ($GLOBALS['connect_statut'] == '0minirezo') {
283
-			$GLOBALS['connect_toutes_rubriques'] = !$GLOBALS['connect_id_rubrique'];
284
-		}
285
-	}
286
-
287
-	// Pour les redacteurs, inc_version a fait l'initialisation minimale
288
-
289
-	return ''; // i.e. pas de pb.
210
+    include_spip('inc/autoriser');
211
+    if (!autoriser('loger', '', 0, $row)) {
212
+        return false;
213
+    }
214
+
215
+
216
+    if ($row['statut'] == 'nouveau') {
217
+        include_spip('action/inscrire_auteur');
218
+        $row = confirmer_statut_inscription($row);
219
+    }
220
+
221
+    $GLOBALS['connect_id_auteur'] = $row['id_auteur'];
222
+    $GLOBALS['connect_login'] = $row['login'];
223
+    $GLOBALS['connect_statut'] = $row['statut'];
224
+
225
+    $GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row);
226
+
227
+    // au cas ou : ne pas memoriser les champs sensibles
228
+    unset($GLOBALS['visiteur_session']['pass']);
229
+    unset($GLOBALS['visiteur_session']['htpass']);
230
+    unset($GLOBALS['visiteur_session']['alea_actuel']);
231
+    unset($GLOBALS['visiteur_session']['alea_futur']);
232
+    unset($GLOBALS['visiteur_session']['ldap_password']);
233
+
234
+    // creer la session au besoin
235
+    if (!isset($_COOKIE['spip_session'])) {
236
+        $session = charger_fonction('session', 'inc');
237
+        $spip_session = $session($row);
238
+    }
239
+
240
+    // reinjecter les preferences_auteur apres le reset de spip_session
241
+    // car utilisees au retour par auth_loger()
242
+    $r = @unserialize($row['prefs']);
243
+    $GLOBALS['visiteur_session']['prefs'] = ($r ? $r : []);
244
+    // si prefs pas definies, les definir par defaut
245
+    if (!isset($GLOBALS['visiteur_session']['prefs']['couleur'])) {
246
+        $GLOBALS['visiteur_session']['prefs']['couleur'] = 2;
247
+        $GLOBALS['visiteur_session']['prefs']['display'] = 2;
248
+        $GLOBALS['visiteur_session']['prefs']['display_navigation'] = 'navigation_avec_icones';
249
+        $GLOBALS['visiteur_session']['prefs']['display_outils'] = 'oui';
250
+    }
251
+
252
+    $GLOBALS['visiteur_session'] = pipeline(
253
+        'preparer_visiteur_session',
254
+        ['args' => ['row' => $row],
255
+        'data' => $GLOBALS['visiteur_session']]
256
+    );
257
+
258
+    // Etablir les droits selon le codage attendu
259
+    // dans ecrire/index.php ecrire/prive.php
260
+
261
+    // Pas autorise a acceder a ecrire ? renvoyer le tableau
262
+    // A noter : le premier appel a autoriser() a le bon gout
263
+    // d'initialiser $GLOBALS['visiteur_session']['restreint'],
264
+    // qui ne figure pas dans le fichier de session
265
+
266
+    if (!autoriser('ecrire')) {
267
+        return $row;
268
+    }
269
+
270
+    // autoriser('ecrire') ne laisse passer que les Admin et les Redac
271
+
272
+    auth_trace($row);
273
+
274
+    // Administrateurs
275
+    if (in_array($GLOBALS['connect_statut'], explode(',', _STATUT_AUTEUR_RUBRIQUE))) {
276
+        if (
277
+            isset($GLOBALS['visiteur_session']['restreint'])
278
+            and is_array($GLOBALS['visiteur_session']['restreint'])
279
+        ) {
280
+            $GLOBALS['connect_id_rubrique'] = $GLOBALS['visiteur_session']['restreint'];
281
+        }
282
+        if ($GLOBALS['connect_statut'] == '0minirezo') {
283
+            $GLOBALS['connect_toutes_rubriques'] = !$GLOBALS['connect_id_rubrique'];
284
+        }
285
+    }
286
+
287
+    // Pour les redacteurs, inc_version a fait l'initialisation minimale
288
+
289
+    return ''; // i.e. pas de pb.
290 290
 }
291 291
 
292 292
 /**
@@ -295,23 +295,23 @@  discard block
 block discarded – undo
295 295
  * @return string
296 296
  */
297 297
 function auth_a_loger() {
298
-	$redirect = generer_url_public('login', 'url=' . rawurlencode(self('&', true)), '&');
299
-
300
-	// un echec au "bonjour" (login initial) quand le statut est
301
-	// inconnu signale sans doute un probleme de cookies
302
-	if (isset($_GET['bonjour'])) {
303
-		$redirect = parametre_url(
304
-			$redirect,
305
-			'var_erreur',
306
-			(!isset($GLOBALS['visiteur_session']['statut'])
307
-				? 'cookie'
308
-				: 'statut'
309
-			),
310
-			'&'
311
-		);
312
-	}
313
-
314
-	return $redirect;
298
+    $redirect = generer_url_public('login', 'url=' . rawurlencode(self('&', true)), '&');
299
+
300
+    // un echec au "bonjour" (login initial) quand le statut est
301
+    // inconnu signale sans doute un probleme de cookies
302
+    if (isset($_GET['bonjour'])) {
303
+        $redirect = parametre_url(
304
+            $redirect,
305
+            'var_erreur',
306
+            (!isset($GLOBALS['visiteur_session']['statut'])
307
+                ? 'cookie'
308
+                : 'statut'
309
+            ),
310
+            '&'
311
+        );
312
+    }
313
+
314
+    return $redirect;
315 315
 }
316 316
 
317 317
 /**
@@ -323,21 +323,21 @@  discard block
 block discarded – undo
323 323
  * @param null|string $date
324 324
  */
325 325
 function auth_trace($row, $date = null) {
326
-	// Indiquer la connexion. A la minute pres ca suffit.
327
-	if (!is_numeric($connect_quand = isset($row['quand']) ? $row['quand'] : '')) {
328
-		$connect_quand = strtotime($connect_quand);
329
-	}
326
+    // Indiquer la connexion. A la minute pres ca suffit.
327
+    if (!is_numeric($connect_quand = isset($row['quand']) ? $row['quand'] : '')) {
328
+        $connect_quand = strtotime($connect_quand);
329
+    }
330 330
 
331
-	if (is_null($date)) {
332
-		$date = date('Y-m-d H:i:s');
333
-	}
331
+    if (is_null($date)) {
332
+        $date = date('Y-m-d H:i:s');
333
+    }
334 334
 
335
-	if (abs(strtotime($date) - $connect_quand) >= 60) {
336
-		sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur=' . intval($row['id_auteur']));
337
-		$row['en_ligne'] = $date;
338
-	}
335
+    if (abs(strtotime($date) - $connect_quand) >= 60) {
336
+        sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur=' . intval($row['id_auteur']));
337
+        $row['en_ligne'] = $date;
338
+    }
339 339
 
340
-	pipeline('trig_auth_trace', ['args' => ['row' => $row, 'date' => $date]]);
340
+    pipeline('trig_auth_trace', ['args' => ['row' => $row, 'date' => $date]]);
341 341
 }
342 342
 
343 343
 
@@ -363,28 +363,28 @@  discard block
 block discarded – undo
363 363
  * @return mixed
364 364
  */
365 365
 function auth_administrer($fonction, $args, $defaut = false) {
366
-	$auth_methode = array_shift($args);
367
-	$auth_methode = $auth_methode ? $auth_methode : 'spip'; // valeur par defaut au cas ou
368
-	if (
369
-		$auth = charger_fonction($auth_methode, 'auth', true)
370
-		and function_exists($f = "auth_{$auth_methode}_$fonction")
371
-	) {
372
-		$res = call_user_func_array($f, $args);
373
-	} else {
374
-		$res = $defaut;
375
-	}
376
-	$res = pipeline(
377
-		'auth_administrer',
378
-		[
379
-			'args' => [
380
-				'fonction' => $fonction,
381
-				'methode' => $auth_methode,
382
-				'args' => $args
383
-			],
384
-			'data' => $res
385
-		]
386
-	);
387
-	return $res;
366
+    $auth_methode = array_shift($args);
367
+    $auth_methode = $auth_methode ? $auth_methode : 'spip'; // valeur par defaut au cas ou
368
+    if (
369
+        $auth = charger_fonction($auth_methode, 'auth', true)
370
+        and function_exists($f = "auth_{$auth_methode}_$fonction")
371
+    ) {
372
+        $res = call_user_func_array($f, $args);
373
+    } else {
374
+        $res = $defaut;
375
+    }
376
+    $res = pipeline(
377
+        'auth_administrer',
378
+        [
379
+            'args' => [
380
+                'fonction' => $fonction,
381
+                'methode' => $auth_methode,
382
+                'args' => $args
383
+            ],
384
+            'data' => $res
385
+        ]
386
+    );
387
+    return $res;
388 388
 }
389 389
 
390 390
 /**
@@ -394,11 +394,11 @@  discard block
 block discarded – undo
394 394
  * @return array
395 395
  */
396 396
 function auth_formulaire_login($flux) {
397
-	foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
398
-		$flux = auth_administrer('formulaire_login', [$methode, $flux], $flux);
399
-	}
397
+    foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
398
+        $flux = auth_administrer('formulaire_login', [$methode, $flux], $flux);
399
+    }
400 400
 
401
-	return $flux;
401
+    return $flux;
402 402
 }
403 403
 
404 404
 
@@ -412,19 +412,19 @@  discard block
 block discarded – undo
412 412
  * @return string/bool
413 413
  */
414 414
 function auth_retrouver_login($login, $serveur = '') {
415
-	if (!spip_connect($serveur)) {
416
-		include_spip('inc/minipres');
417
-		echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'));
418
-		exit;
419
-	}
420
-
421
-	foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
422
-		if ($auteur = auth_administrer('retrouver_login', [$methode, $login, $serveur])) {
423
-			return $auteur;
424
-		}
425
-	}
426
-
427
-	return false;
415
+    if (!spip_connect($serveur)) {
416
+        include_spip('inc/minipres');
417
+        echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'));
418
+        exit;
419
+    }
420
+
421
+    foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
422
+        if ($auteur = auth_administrer('retrouver_login', [$methode, $login, $serveur])) {
423
+            return $auteur;
424
+        }
425
+    }
426
+
427
+    return false;
428 428
 }
429 429
 
430 430
 /**
@@ -439,52 +439,52 @@  discard block
 block discarded – undo
439 439
  * @return array
440 440
  */
441 441
 function auth_informer_login($login, $serveur = '') {
442
-	if (
443
-		!$login
444
-		or !$login_base = auth_retrouver_login($login, $serveur)
445
-		or !$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur)
446
-	) {
447
-		// generer de fausses infos, mais credibles, pour eviter une attaque
448
-		// https://core.spip.net/issues/1758 + https://core.spip.net/issues/3691
449
-		include_spip('inc/securiser_action');
450
-		$fauxalea1 = md5('fauxalea' . secret_du_site() . $login . floor(date('U') / 86400));
451
-		$fauxalea2 = md5('fauxalea' . secret_du_site() . $login . ceil(date('U') / 86400));
452
-
453
-		$row = [
454
-			'login' => $login,
455
-			'cnx' => '0',
456
-			'logo' => '',
457
-			'alea_actuel' => substr_replace($fauxalea1, '.', 24, 0),
458
-			'alea_futur' => substr_replace($fauxalea2, '.', 24, 0)
459
-		];
460
-
461
-		// permettre d'autoriser l'envoi de password non crypte lorsque
462
-		// l'auteur n'est pas (encore) declare dans SPIP, par exemple pour les cas
463
-		// de premiere authentification via SPIP a une autre application.
464
-		if (defined('_AUTORISER_AUTH_FAIBLE') and _AUTORISER_AUTH_FAIBLE) {
465
-			$row['alea_actuel'] = '';
466
-			$row['alea_futur'] = '';
467
-		}
468
-
469
-		return $row;
470
-	}
471
-
472
-	$prefs = @unserialize($row['prefs']);
473
-	$infos = [
474
-		'id_auteur' => $row['id_auteur'],
475
-		'login' => $row['login'],
476
-		'cnx' => (isset($prefs['cnx']) and $prefs['cnx'] === 'perma') ? '1' : '0',
477
-		'logo' => recuperer_fond('formulaires/inc-logo_auteur', $row),
478
-	];
479
-
480
-	// desactiver le hash md5 si pas auteur spip ?
481
-	if ($row['source'] !== 'spip') {
482
-		$row['alea_actuel'] = '';
483
-		$row['alea_futur'] = '';
484
-	}
485
-	verifier_visiteur();
486
-
487
-	return auth_administrer('informer_login', [$row['source'], $infos, $row, $serveur], $infos);
442
+    if (
443
+        !$login
444
+        or !$login_base = auth_retrouver_login($login, $serveur)
445
+        or !$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur)
446
+    ) {
447
+        // generer de fausses infos, mais credibles, pour eviter une attaque
448
+        // https://core.spip.net/issues/1758 + https://core.spip.net/issues/3691
449
+        include_spip('inc/securiser_action');
450
+        $fauxalea1 = md5('fauxalea' . secret_du_site() . $login . floor(date('U') / 86400));
451
+        $fauxalea2 = md5('fauxalea' . secret_du_site() . $login . ceil(date('U') / 86400));
452
+
453
+        $row = [
454
+            'login' => $login,
455
+            'cnx' => '0',
456
+            'logo' => '',
457
+            'alea_actuel' => substr_replace($fauxalea1, '.', 24, 0),
458
+            'alea_futur' => substr_replace($fauxalea2, '.', 24, 0)
459
+        ];
460
+
461
+        // permettre d'autoriser l'envoi de password non crypte lorsque
462
+        // l'auteur n'est pas (encore) declare dans SPIP, par exemple pour les cas
463
+        // de premiere authentification via SPIP a une autre application.
464
+        if (defined('_AUTORISER_AUTH_FAIBLE') and _AUTORISER_AUTH_FAIBLE) {
465
+            $row['alea_actuel'] = '';
466
+            $row['alea_futur'] = '';
467
+        }
468
+
469
+        return $row;
470
+    }
471
+
472
+    $prefs = @unserialize($row['prefs']);
473
+    $infos = [
474
+        'id_auteur' => $row['id_auteur'],
475
+        'login' => $row['login'],
476
+        'cnx' => (isset($prefs['cnx']) and $prefs['cnx'] === 'perma') ? '1' : '0',
477
+        'logo' => recuperer_fond('formulaires/inc-logo_auteur', $row),
478
+    ];
479
+
480
+    // desactiver le hash md5 si pas auteur spip ?
481
+    if ($row['source'] !== 'spip') {
482
+        $row['alea_actuel'] = '';
483
+        $row['alea_futur'] = '';
484
+    }
485
+    verifier_visiteur();
486
+
487
+    return auth_administrer('informer_login', [$row['source'], $infos, $row, $serveur], $infos);
488 488
 }
489 489
 
490 490
 
@@ -498,21 +498,21 @@  discard block
 block discarded – undo
498 498
  * @return mixed
499 499
  */
500 500
 function auth_identifier_login($login, $password, $serveur = '') {
501
-	$erreur = '';
502
-	foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
503
-		if ($auth = charger_fonction($methode, 'auth', true)) {
504
-			$auteur = $auth($login, $password, $serveur);
505
-			if (is_array($auteur) and count($auteur)) {
506
-				spip_log("connexion de $login par methode $methode");
507
-				$auteur['auth'] = $methode;
508
-				return $auteur;
509
-			} elseif (is_string($auteur)) {
510
-				$erreur .= "$auteur ";
511
-			}
512
-		}
513
-	}
514
-
515
-	return $erreur;
501
+    $erreur = '';
502
+    foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
503
+        if ($auth = charger_fonction($methode, 'auth', true)) {
504
+            $auteur = $auth($login, $password, $serveur);
505
+            if (is_array($auteur) and count($auteur)) {
506
+                spip_log("connexion de $login par methode $methode");
507
+                $auteur['auth'] = $methode;
508
+                return $auteur;
509
+            } elseif (is_string($auteur)) {
510
+                $erreur .= "$auteur ";
511
+            }
512
+        }
513
+    }
514
+
515
+    return $erreur;
516 516
 }
517 517
 
518 518
 /**
@@ -526,8 +526,8 @@  discard block
 block discarded – undo
526 526
  * @return string
527 527
  */
528 528
 function auth_url_retour_login($auth_methode, $login, $redirect = '', $serveur = '') {
529
-	$securiser_action = charger_fonction('securiser_action', 'inc');
530
-	return $securiser_action('auth', "$auth_methode/$login", $redirect, true);
529
+    $securiser_action = charger_fonction('securiser_action', 'inc');
530
+    return $securiser_action('auth', "$auth_methode/$login", $redirect, true);
531 531
 }
532 532
 
533 533
 /**
@@ -541,9 +541,9 @@  discard block
 block discarded – undo
541 541
  * @return mixed
542 542
  */
543 543
 function auth_terminer_identifier_login($auth_methode, $login, $serveur = '') {
544
-	$args = func_get_args();
545
-	$auteur = auth_administrer('terminer_identifier_login', $args);
546
-	return $auteur;
544
+    $args = func_get_args();
545
+    $auteur = auth_administrer('terminer_identifier_login', $args);
546
+    return $auteur;
547 547
 }
548 548
 
549 549
 /**
@@ -553,29 +553,29 @@  discard block
 block discarded – undo
553 553
  * @return bool
554 554
  */
555 555
 function auth_loger($auteur) {
556
-	if (!is_array($auteur) or !count($auteur)) {
557
-		return false;
558
-	}
559
-
560
-	// initialiser et poser le cookie de session
561
-	unset($_COOKIE['spip_session']);
562
-	if (auth_init_droits($auteur) === false) {
563
-		return false;
564
-	}
565
-
566
-	// initialiser les prefs
567
-	$p = $GLOBALS['visiteur_session']['prefs'];
568
-	$p['cnx'] = (isset($auteur['cookie']) and $auteur['cookie'] == 'oui') ? 'perma' : '';
569
-
570
-	sql_updateq(
571
-		'spip_auteurs',
572
-		['prefs' => serialize($p)],
573
-		'id_auteur=' . intval($auteur['id_auteur'])
574
-	);
575
-
576
-	//  bloquer ici le visiteur qui tente d'abuser de ses droits
577
-	verifier_visiteur();
578
-	return true;
556
+    if (!is_array($auteur) or !count($auteur)) {
557
+        return false;
558
+    }
559
+
560
+    // initialiser et poser le cookie de session
561
+    unset($_COOKIE['spip_session']);
562
+    if (auth_init_droits($auteur) === false) {
563
+        return false;
564
+    }
565
+
566
+    // initialiser les prefs
567
+    $p = $GLOBALS['visiteur_session']['prefs'];
568
+    $p['cnx'] = (isset($auteur['cookie']) and $auteur['cookie'] == 'oui') ? 'perma' : '';
569
+
570
+    sql_updateq(
571
+        'spip_auteurs',
572
+        ['prefs' => serialize($p)],
573
+        'id_auteur=' . intval($auteur['id_auteur'])
574
+    );
575
+
576
+    //  bloquer ici le visiteur qui tente d'abuser de ses droits
577
+    verifier_visiteur();
578
+    return true;
579 579
 }
580 580
 
581 581
 /**
@@ -585,8 +585,8 @@  discard block
 block discarded – undo
585 585
  * return void
586 586
  **/
587 587
 function auth_deloger() {
588
-	$logout = charger_fonction('logout', 'action');
589
-	$logout();
588
+    $logout = charger_fonction('logout', 'action');
589
+    $logout();
590 590
 }
591 591
 
592 592
 /**
@@ -600,8 +600,8 @@  discard block
 block discarded – undo
600 600
  * @return bool
601 601
  */
602 602
 function auth_autoriser_modifier_login($auth_methode, $serveur = '') {
603
-	$args = func_get_args();
604
-	return auth_administrer('autoriser_modifier_login', $args);
603
+    $args = func_get_args();
604
+    return auth_administrer('autoriser_modifier_login', $args);
605 605
 }
606 606
 
607 607
 /**
@@ -616,8 +616,8 @@  discard block
 block discarded – undo
616 616
  *  message d'erreur ou chaine vide si pas d'erreur
617 617
  */
618 618
 function auth_verifier_login($auth_methode, $new_login, $id_auteur = 0, $serveur = '') {
619
-	$args = func_get_args();
620
-	return auth_administrer('verifier_login', $args, '');
619
+    $args = func_get_args();
620
+    return auth_administrer('verifier_login', $args, '');
621 621
 }
622 622
 
623 623
 /**
@@ -630,8 +630,8 @@  discard block
 block discarded – undo
630 630
  * @return bool
631 631
  */
632 632
 function auth_modifier_login($auth_methode, $new_login, $id_auteur, $serveur = '') {
633
-	$args = func_get_args();
634
-	return auth_administrer('modifier_login', $args);
633
+    $args = func_get_args();
634
+    return auth_administrer('modifier_login', $args);
635 635
 }
636 636
 
637 637
 /**
@@ -646,8 +646,8 @@  discard block
 block discarded – undo
646 646
  *  succès ou échec
647 647
  */
648 648
 function auth_autoriser_modifier_pass($auth_methode, $serveur = '') {
649
-	$args = func_get_args();
650
-	return auth_administrer('autoriser_modifier_pass', $args);
649
+    $args = func_get_args();
650
+    return auth_administrer('autoriser_modifier_pass', $args);
651 651
 }
652 652
 
653 653
 /**
@@ -663,8 +663,8 @@  discard block
 block discarded – undo
663 663
  *  message d'erreur ou chaine vide si pas d'erreur
664 664
  */
665 665
 function auth_verifier_pass($auth_methode, $login, $new_pass, $id_auteur = 0, $serveur = '') {
666
-	$args = func_get_args();
667
-	return auth_administrer('verifier_pass', $args, '');
666
+    $args = func_get_args();
667
+    return auth_administrer('verifier_pass', $args, '');
668 668
 }
669 669
 
670 670
 /**
@@ -680,8 +680,8 @@  discard block
 block discarded – undo
680 680
  *  succes ou echec
681 681
  */
682 682
 function auth_modifier_pass($auth_methode, $login, $new_pass, $id_auteur, $serveur = '') {
683
-	$args = func_get_args();
684
-	return auth_administrer('modifier_pass', $args);
683
+    $args = func_get_args();
684
+    return auth_administrer('modifier_pass', $args);
685 685
 }
686 686
 
687 687
 /**
@@ -697,24 +697,24 @@  discard block
 block discarded – undo
697 697
  * @return void
698 698
  */
699 699
 function auth_synchroniser_distant(
700
-	$auth_methode = true,
701
-	$id_auteur = 0,
702
-	$champs = [],
703
-	$options = [],
704
-	$serveur = ''
700
+    $auth_methode = true,
701
+    $id_auteur = 0,
702
+    $champs = [],
703
+    $options = [],
704
+    $serveur = ''
705 705
 ) {
706
-	$args = func_get_args();
707
-	if ($auth_methode === true or (isset($options['all']) and $options['all'] == true)) {
708
-		$options['all'] = true; // ajouter une option all=>true pour chaque auth
709
-		$args = [true, $id_auteur, $champs, $options, $serveur];
710
-		foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
711
-			array_shift($args);
712
-			array_unshift($args, $methode);
713
-			auth_administrer('synchroniser_distant', $args);
714
-		}
715
-	} else {
716
-		auth_administrer('synchroniser_distant', $args);
717
-	}
706
+    $args = func_get_args();
707
+    if ($auth_methode === true or (isset($options['all']) and $options['all'] == true)) {
708
+        $options['all'] = true; // ajouter une option all=>true pour chaque auth
709
+        $args = [true, $id_auteur, $champs, $options, $serveur];
710
+        foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
711
+            array_shift($args);
712
+            array_unshift($args, $methode);
713
+            auth_administrer('synchroniser_distant', $args);
714
+        }
715
+    } else {
716
+        auth_administrer('synchroniser_distant', $args);
717
+    }
718 718
 }
719 719
 
720 720
 
@@ -727,44 +727,44 @@  discard block
 block discarded – undo
727 727
  * @return array|bool
728 728
  */
729 729
 function lire_php_auth($login, $pw, $serveur = '') {
730
-	if (
731
-		!$login
732
-		or !$login = auth_retrouver_login($login, $serveur)
733
-	) {
734
-		return false;
735
-	}
736
-
737
-	$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login, $serveur, 'text'), '', '', '', '', $serveur);
738
-
739
-	if (!$row) {
740
-		if (
741
-			spip_connect_ldap($serveur)
742
-			and $auth_ldap = charger_fonction('ldap', 'auth', true)
743
-		) {
744
-			return $auth_ldap($login, $pw, $serveur, true);
745
-		}
746
-
747
-		return false;
748
-	}
749
-	// su pas de source definie
750
-	// ou auth/xxx introuvable, utiliser 'spip'
751
-	if (
752
-		!$auth_methode = $row['source']
753
-		or !$auth = charger_fonction($auth_methode, 'auth', true)
754
-	) {
755
-		$auth = charger_fonction('spip', 'auth', true);
756
-	}
757
-
758
-	$auteur = '';
759
-	if ($auth) {
760
-		$auteur = $auth($login, $pw, $serveur, true);
761
-	}
762
-	// verifier que ce n'est pas un message d'erreur
763
-	if (is_array($auteur) and count($auteur)) {
764
-		return $auteur;
765
-	}
766
-
767
-	return false;
730
+    if (
731
+        !$login
732
+        or !$login = auth_retrouver_login($login, $serveur)
733
+    ) {
734
+        return false;
735
+    }
736
+
737
+    $row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login, $serveur, 'text'), '', '', '', '', $serveur);
738
+
739
+    if (!$row) {
740
+        if (
741
+            spip_connect_ldap($serveur)
742
+            and $auth_ldap = charger_fonction('ldap', 'auth', true)
743
+        ) {
744
+            return $auth_ldap($login, $pw, $serveur, true);
745
+        }
746
+
747
+        return false;
748
+    }
749
+    // su pas de source definie
750
+    // ou auth/xxx introuvable, utiliser 'spip'
751
+    if (
752
+        !$auth_methode = $row['source']
753
+        or !$auth = charger_fonction($auth_methode, 'auth', true)
754
+    ) {
755
+        $auth = charger_fonction('spip', 'auth', true);
756
+    }
757
+
758
+    $auteur = '';
759
+    if ($auth) {
760
+        $auteur = $auth($login, $pw, $serveur, true);
761
+    }
762
+    // verifier que ce n'est pas un message d'erreur
763
+    if (is_array($auteur) and count($auteur)) {
764
+        return $auteur;
765
+    }
766
+
767
+    return false;
768 768
 }
769 769
 
770 770
 /**
@@ -780,21 +780,21 @@  discard block
 block discarded – undo
780 780
  * @param string $lien
781 781
  */
782 782
 function ask_php_auth($pb, $raison, $retour = '', $url = '', $re = '', $lien = '') {
783
-	@Header('WWW-Authenticate: Basic realm="espace prive"');
784
-	@Header('HTTP/1.0 401 Unauthorized');
785
-	$corps = '';
786
-	$public = generer_url_public();
787
-	$ecrire = generer_url_ecrire();
788
-	$retour = $retour ? $retour : _T('icone_retour');
789
-	$corps .= "<p>$raison</p>[<a href='$public'>$retour</a>] ";
790
-	if ($url) {
791
-		$corps .= "[<a href='" . generer_url_action('cookie', "essai_auth_http=oui&$url") . "'>$re</a>]";
792
-	}
793
-
794
-	if ($lien) {
795
-		$corps .= " [<a href='$ecrire'>" . _T('login_espace_prive') . '</a>]';
796
-	}
797
-	include_spip('inc/minipres');
798
-	echo minipres($pb, $corps);
799
-	exit;
783
+    @Header('WWW-Authenticate: Basic realm="espace prive"');
784
+    @Header('HTTP/1.0 401 Unauthorized');
785
+    $corps = '';
786
+    $public = generer_url_public();
787
+    $ecrire = generer_url_ecrire();
788
+    $retour = $retour ? $retour : _T('icone_retour');
789
+    $corps .= "<p>$raison</p>[<a href='$public'>$retour</a>] ";
790
+    if ($url) {
791
+        $corps .= "[<a href='" . generer_url_action('cookie', "essai_auth_http=oui&$url") . "'>$re</a>]";
792
+    }
793
+
794
+    if ($lien) {
795
+        $corps .= " [<a href='$ecrire'>" . _T('login_espace_prive') . '</a>]';
796
+    }
797
+    include_spip('inc/minipres');
798
+    echo minipres($pb, $corps);
799
+    exit;
800 800
 }
Please login to merge, or discard this patch.
Spacing   +14 added lines, -15 removed lines patch added patch discarded remove patch
@@ -59,7 +59,7 @@  discard block
 block discarded – undo
59 59
 	}
60 60
 
61 61
 	$n = intval(sql_errno());
62
-	spip_log("Erreur base de donnees $n " . sql_error());
62
+	spip_log("Erreur base de donnees $n ".sql_error());
63 63
 
64 64
 	return $n ? $n : 1;
65 65
 }
@@ -85,11 +85,11 @@  discard block
 block discarded – undo
85 85
 		// erreur SQL a afficher
86 86
 		$raison = minipres(
87 87
 			_T('info_travaux_titre'),
88
-			_T('titre_probleme_technique') . '<p><tt>' . sql_errno() . ' ' . sql_error() . '</tt></p>'
88
+			_T('titre_probleme_technique').'<p><tt>'.sql_errno().' '.sql_error().'</tt></p>'
89 89
 		);
90 90
 	} elseif (@$raison['statut']) {
91 91
 		// un simple visiteur n'a pas acces a l'espace prive
92
-		spip_log('connexion refusee a ' . @$raison['id_auteur']);
92
+		spip_log('connexion refusee a '.@$raison['id_auteur']);
93 93
 		$raison = minipres(_T('avis_erreur_connexion'), _T('avis_erreur_visiteur'));
94 94
 	} else {
95 95
 		// auteur en fin de droits ...
@@ -179,8 +179,7 @@  discard block
 block discarded – undo
179 179
 	$where = (is_numeric($id_auteur)
180 180
 		/*AND $id_auteur>0*/ // reprise lors des restaurations
181 181
 	) ?
182
-		"id_auteur=$id_auteur" :
183
-		(!strlen($GLOBALS['connect_login']) ? '' : 'login=' . sql_quote($GLOBALS['connect_login'], '', 'text'));
182
+		"id_auteur=$id_auteur" : (!strlen($GLOBALS['connect_login']) ? '' : 'login='.sql_quote($GLOBALS['connect_login'], '', 'text'));
184 183
 
185 184
 	if (!$where) {
186 185
 		return '';
@@ -222,7 +221,7 @@  discard block
 block discarded – undo
222 221
 	$GLOBALS['connect_login'] = $row['login'];
223 222
 	$GLOBALS['connect_statut'] = $row['statut'];
224 223
 
225
-	$GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row);
224
+	$GLOBALS['visiteur_session'] = array_merge((array) $GLOBALS['visiteur_session'], $row);
226 225
 
227 226
 	// au cas ou : ne pas memoriser les champs sensibles
228 227
 	unset($GLOBALS['visiteur_session']['pass']);
@@ -295,7 +294,7 @@  discard block
 block discarded – undo
295 294
  * @return string
296 295
  */
297 296
 function auth_a_loger() {
298
-	$redirect = generer_url_public('login', 'url=' . rawurlencode(self('&', true)), '&');
297
+	$redirect = generer_url_public('login', 'url='.rawurlencode(self('&', true)), '&');
299 298
 
300 299
 	// un echec au "bonjour" (login initial) quand le statut est
301 300
 	// inconnu signale sans doute un probleme de cookies
@@ -333,7 +332,7 @@  discard block
 block discarded – undo
333 332
 	}
334 333
 
335 334
 	if (abs(strtotime($date) - $connect_quand) >= 60) {
336
-		sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur=' . intval($row['id_auteur']));
335
+		sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur='.intval($row['id_auteur']));
337 336
 		$row['en_ligne'] = $date;
338 337
 	}
339 338
 
@@ -442,13 +441,13 @@  discard block
 block discarded – undo
442 441
 	if (
443 442
 		!$login
444 443
 		or !$login_base = auth_retrouver_login($login, $serveur)
445
-		or !$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur)
444
+		or !$row = sql_fetsel('*', 'spip_auteurs', 'login='.sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur)
446 445
 	) {
447 446
 		// generer de fausses infos, mais credibles, pour eviter une attaque
448 447
 		// https://core.spip.net/issues/1758 + https://core.spip.net/issues/3691
449 448
 		include_spip('inc/securiser_action');
450
-		$fauxalea1 = md5('fauxalea' . secret_du_site() . $login . floor(date('U') / 86400));
451
-		$fauxalea2 = md5('fauxalea' . secret_du_site() . $login . ceil(date('U') / 86400));
449
+		$fauxalea1 = md5('fauxalea'.secret_du_site().$login.floor(date('U') / 86400));
450
+		$fauxalea2 = md5('fauxalea'.secret_du_site().$login.ceil(date('U') / 86400));
452 451
 
453 452
 		$row = [
454 453
 			'login' => $login,
@@ -570,7 +569,7 @@  discard block
 block discarded – undo
570 569
 	sql_updateq(
571 570
 		'spip_auteurs',
572 571
 		['prefs' => serialize($p)],
573
-		'id_auteur=' . intval($auteur['id_auteur'])
572
+		'id_auteur='.intval($auteur['id_auteur'])
574 573
 	);
575 574
 
576 575
 	//  bloquer ici le visiteur qui tente d'abuser de ses droits
@@ -734,7 +733,7 @@  discard block
 block discarded – undo
734 733
 		return false;
735 734
 	}
736 735
 
737
-	$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login, $serveur, 'text'), '', '', '', '', $serveur);
736
+	$row = sql_fetsel('*', 'spip_auteurs', 'login='.sql_quote($login, $serveur, 'text'), '', '', '', '', $serveur);
738 737
 
739 738
 	if (!$row) {
740 739
 		if (
@@ -788,11 +787,11 @@  discard block
 block discarded – undo
788 787
 	$retour = $retour ? $retour : _T('icone_retour');
789 788
 	$corps .= "<p>$raison</p>[<a href='$public'>$retour</a>] ";
790 789
 	if ($url) {
791
-		$corps .= "[<a href='" . generer_url_action('cookie', "essai_auth_http=oui&$url") . "'>$re</a>]";
790
+		$corps .= "[<a href='".generer_url_action('cookie', "essai_auth_http=oui&$url")."'>$re</a>]";
792 791
 	}
793 792
 
794 793
 	if ($lien) {
795
-		$corps .= " [<a href='$ecrire'>" . _T('login_espace_prive') . '</a>]';
794
+		$corps .= " [<a href='$ecrire'>"._T('login_espace_prive').'</a>]';
796 795
 	}
797 796
 	include_spip('inc/minipres');
798 797
 	echo minipres($pb, $corps);
Please login to merge, or discard this patch.