Completed
Push — master ( 1891d3...7fa313 )
by cam
01:19
created
ecrire/genie/optimiser.php 1 patch
Indentation   +111 added lines, -111 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,26 +35,26 @@  discard block
 block discarded – undo
35 35
  **/
36 36
 function genie_optimiser_dist($t) {
37 37
 
38
-	optimiser_base_une_table();
39
-	optimiser_base();
40
-	optimiser_caches_contextes();
38
+    optimiser_base_une_table();
39
+    optimiser_base();
40
+    optimiser_caches_contextes();
41 41
 
42
-	// la date souhaitee pour le tour suivant = apres-demain a 4h du mat ;
43
-	// sachant qu'on a un delai de 48h, on renvoie aujourd'hui a 4h du mat
44
-	// avec une periode de flou entre 2h et 6h pour ne pas saturer un hebergeur
45
-	// qui aurait beaucoup de sites SPIP
46
-	return -(mktime(2, 0, 0) + rand(0, 3600 * 4));
42
+    // la date souhaitee pour le tour suivant = apres-demain a 4h du mat ;
43
+    // sachant qu'on a un delai de 48h, on renvoie aujourd'hui a 4h du mat
44
+    // avec une periode de flou entre 2h et 6h pour ne pas saturer un hebergeur
45
+    // qui aurait beaucoup de sites SPIP
46
+    return -(mktime(2, 0, 0) + rand(0, 3600 * 4));
47 47
 }
48 48
 
49 49
 /**
50 50
  * Vider les contextes ajax de plus de 48h
51 51
  */
52 52
 function optimiser_caches_contextes() {
53
-	sous_repertoire(_DIR_CACHE, 'contextes');
54
-	if (is_dir($d = _DIR_CACHE . 'contextes')) {
55
-		include_spip('inc/invalideur');
56
-		purger_repertoire($d, ['mtime' => time() - 48 * 24 * 3600, 'limit' => 10000]);
57
-	}
53
+    sous_repertoire(_DIR_CACHE, 'contextes');
54
+    if (is_dir($d = _DIR_CACHE . 'contextes')) {
55
+        include_spip('inc/invalideur');
56
+        purger_repertoire($d, ['mtime' => time() - 48 * 24 * 3600, 'limit' => 10000]);
57
+    }
58 58
 }
59 59
 
60 60
 /**
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
  * @return void
70 70
  **/
71 71
 function optimiser_base($attente = 86400) {
72
-	optimiser_base_disparus($attente);
72
+    optimiser_base_disparus($attente);
73 73
 }
74 74
 
75 75
 
@@ -86,28 +86,28 @@  discard block
 block discarded – undo
86 86
  **/
87 87
 function optimiser_base_une_table() {
88 88
 
89
-	$tables = [];
90
-	$result = sql_showbase();
91
-
92
-	// on n'optimise qu'une seule table a chaque fois,
93
-	// pour ne pas vautrer le systeme
94
-	// lire http://dev.mysql.com/doc/refman/5.0/fr/optimize-table.html
95
-	while ($row = sql_fetch($result)) {
96
-		$tables[] = array_shift($row);
97
-	}
98
-
99
-	spip_log('optimiser_base_une_table ' . json_encode($tables), 'genie' . _LOG_DEBUG);
100
-	if ($tables) {
101
-		$table_op = intval(lire_config('optimiser_table', 0) + 1) % sizeof($tables);
102
-		ecrire_config('optimiser_table', $table_op);
103
-		$q = $tables[$table_op];
104
-		spip_log("optimiser_base_une_table : debut d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
105
-		if (sql_optimize($q)) {
106
-			spip_log("optimiser_base_une_table : fin d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
107
-		} else {
108
-			spip_log("optimiser_base_une_table : Pas d'optimiseur necessaire", 'genie' . _LOG_DEBUG);
109
-		}
110
-	}
89
+    $tables = [];
90
+    $result = sql_showbase();
91
+
92
+    // on n'optimise qu'une seule table a chaque fois,
93
+    // pour ne pas vautrer le systeme
94
+    // lire http://dev.mysql.com/doc/refman/5.0/fr/optimize-table.html
95
+    while ($row = sql_fetch($result)) {
96
+        $tables[] = array_shift($row);
97
+    }
98
+
99
+    spip_log('optimiser_base_une_table ' . json_encode($tables), 'genie' . _LOG_DEBUG);
100
+    if ($tables) {
101
+        $table_op = intval(lire_config('optimiser_table', 0) + 1) % sizeof($tables);
102
+        ecrire_config('optimiser_table', $table_op);
103
+        $q = $tables[$table_op];
104
+        spip_log("optimiser_base_une_table : debut d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
105
+        if (sql_optimize($q)) {
106
+            spip_log("optimiser_base_une_table : fin d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
107
+        } else {
108
+            spip_log("optimiser_base_une_table : Pas d'optimiseur necessaire", 'genie' . _LOG_DEBUG);
109
+        }
110
+    }
111 111
 }
112 112
 
113 113
 
@@ -133,18 +133,18 @@  discard block
 block discarded – undo
133 133
  *     Nombre de suppressions
134 134
  **/
135 135
 function optimiser_sansref($table, $id, $sel, $and = '') {
136
-	$in = [];
137
-	while ($row = sql_fetch($sel)) {
138
-		$in[$row['id']] = true;
139
-	}
140
-	sql_free($sel);
141
-
142
-	if ($in) {
143
-		sql_delete($table, sql_in($id, array_keys($in)) . ($and ? " AND $and" : ''));
144
-		spip_log("optimiser_sansref: Numeros des entrees $id supprimees dans la table $table: " . implode(', ', array_keys($in)), 'genie' . _LOG_DEBUG);
145
-	}
146
-
147
-	return count($in);
136
+    $in = [];
137
+    while ($row = sql_fetch($sel)) {
138
+        $in[$row['id']] = true;
139
+    }
140
+    sql_free($sel);
141
+
142
+    if ($in) {
143
+        sql_delete($table, sql_in($id, array_keys($in)) . ($and ? " AND $and" : ''));
144
+        spip_log("optimiser_sansref: Numeros des entrees $id supprimees dans la table $table: " . implode(', ', array_keys($in)), 'genie' . _LOG_DEBUG);
145
+    }
146
+
147
+    return count($in);
148 148
 }
149 149
 
150 150
 
@@ -166,81 +166,81 @@  discard block
 block discarded – undo
166 166
  **/
167 167
 function optimiser_base_disparus($attente = 86400) {
168 168
 
169
-	# format = 20060610110141, si on veut forcer une optimisation tout de suite
170
-	$mydate = date('Y-m-d H:i:s', time() - $attente);
171
-	$mydate_quote = sql_quote($mydate);
169
+    # format = 20060610110141, si on veut forcer une optimisation tout de suite
170
+    $mydate = date('Y-m-d H:i:s', time() - $attente);
171
+    $mydate_quote = sql_quote($mydate);
172 172
 
173
-	$n = 0;
173
+    $n = 0;
174 174
 
175
-	//
176
-	// Rubriques
177
-	//
175
+    //
176
+    // Rubriques
177
+    //
178 178
 
179
-	# les articles qui sont dans une id_rubrique inexistante
180
-	# attention on controle id_rubrique>0 pour ne pas tuer les articles
181
-	# specialement affectes a une rubrique non-existante (plugin,
182
-	# cf. https://core.spip.net/issues/1549 )
183
-	$res = sql_select(
184
-		'A.id_article AS id',
185
-		'spip_articles AS A
179
+    # les articles qui sont dans une id_rubrique inexistante
180
+    # attention on controle id_rubrique>0 pour ne pas tuer les articles
181
+    # specialement affectes a une rubrique non-existante (plugin,
182
+    # cf. https://core.spip.net/issues/1549 )
183
+    $res = sql_select(
184
+        'A.id_article AS id',
185
+        'spip_articles AS A
186 186
 		        LEFT JOIN spip_rubriques AS R
187 187
 		          ON A.id_rubrique=R.id_rubrique',
188
-		"A.id_rubrique > 0
188
+        "A.id_rubrique > 0
189 189
 			 AND R.id_rubrique IS NULL
190 190
 		         AND A.maj < $mydate_quote"
191
-	);
191
+    );
192 192
 
193
-	$n += optimiser_sansref('spip_articles', 'id_article', $res);
193
+    $n += optimiser_sansref('spip_articles', 'id_article', $res);
194 194
 
195
-	// les articles a la poubelle
196
-	sql_delete('spip_articles', "statut='poubelle' AND maj < $mydate_quote");
195
+    // les articles a la poubelle
196
+    sql_delete('spip_articles', "statut='poubelle' AND maj < $mydate_quote");
197 197
 
198
-	//
199
-	// Auteurs
200
-	//
198
+    //
199
+    // Auteurs
200
+    //
201 201
 
202
-	include_spip('action/editer_liens');
203
-	// optimiser les liens de tous les auteurs vers des objets effaces
204
-	// et depuis des auteurs effaces
205
-	$n += objet_optimiser_liens(['auteur' => '*'], '*');
202
+    include_spip('action/editer_liens');
203
+    // optimiser les liens de tous les auteurs vers des objets effaces
204
+    // et depuis des auteurs effaces
205
+    $n += objet_optimiser_liens(['auteur' => '*'], '*');
206 206
 
207
-	# effacer les auteurs poubelle qui ne sont lies a rien
208
-	$res = sql_select(
209
-		'A.id_auteur AS id',
210
-		'spip_auteurs AS A
207
+    # effacer les auteurs poubelle qui ne sont lies a rien
208
+    $res = sql_select(
209
+        'A.id_auteur AS id',
210
+        'spip_auteurs AS A
211 211
 		      	LEFT JOIN spip_auteurs_liens AS L
212 212
 		          ON L.id_auteur=A.id_auteur',
213
-		"L.id_auteur IS NULL
213
+        "L.id_auteur IS NULL
214 214
 		       	AND A.statut='5poubelle' AND A.maj < $mydate_quote"
215
-	);
216
-
217
-	$n += optimiser_sansref('spip_auteurs', 'id_auteur', $res);
218
-
219
-	# supprimer les auteurs 'nouveau' qui n'ont jamais donne suite
220
-	# au mail de confirmation (45 jours pour repondre, ca devrait suffire)
221
-	if (!defined('_AUTEURS_DELAI_REJET_NOUVEAU')) {
222
-		define('_AUTEURS_DELAI_REJET_NOUVEAU', 45 * 24 * 3600);
223
-	}
224
-	sql_delete('spip_auteurs', "statut='nouveau' AND maj < " . sql_quote(date('Y-m-d', time() - intval(_AUTEURS_DELAI_REJET_NOUVEAU))));
225
-
226
-	/**
227
-	 * Permet aux plugins de compléter l'optimisation suite aux éléments disparus
228
-	 *
229
-	 * L'index 'data' est un entier indiquant le nombre d'optimisations
230
-	 * qui ont été réalisées (par exemple le nombre de suppressions faites)
231
-	 * et qui doit être incrémenté par les fonctions
232
-	 * utilisant ce pipeline si elles suppriment des éléments.
233
-	 *
234
-	 * @pipeline_appel optimiser_base_disparus
235
-	 */
236
-	$n = pipeline('optimiser_base_disparus', [
237
-		'args' => [
238
-			'attente' => $attente,
239
-			'date' => $mydate
240
-		],
241
-		'data' => $n
242
-	]);
243
-
244
-
245
-	spip_log("optimiser_base_disparus : {$n} lien(s) mort(s)", 'genie' . _LOG_DEBUG);
215
+    );
216
+
217
+    $n += optimiser_sansref('spip_auteurs', 'id_auteur', $res);
218
+
219
+    # supprimer les auteurs 'nouveau' qui n'ont jamais donne suite
220
+    # au mail de confirmation (45 jours pour repondre, ca devrait suffire)
221
+    if (!defined('_AUTEURS_DELAI_REJET_NOUVEAU')) {
222
+        define('_AUTEURS_DELAI_REJET_NOUVEAU', 45 * 24 * 3600);
223
+    }
224
+    sql_delete('spip_auteurs', "statut='nouveau' AND maj < " . sql_quote(date('Y-m-d', time() - intval(_AUTEURS_DELAI_REJET_NOUVEAU))));
225
+
226
+    /**
227
+     * Permet aux plugins de compléter l'optimisation suite aux éléments disparus
228
+     *
229
+     * L'index 'data' est un entier indiquant le nombre d'optimisations
230
+     * qui ont été réalisées (par exemple le nombre de suppressions faites)
231
+     * et qui doit être incrémenté par les fonctions
232
+     * utilisant ce pipeline si elles suppriment des éléments.
233
+     *
234
+     * @pipeline_appel optimiser_base_disparus
235
+     */
236
+    $n = pipeline('optimiser_base_disparus', [
237
+        'args' => [
238
+            'attente' => $attente,
239
+            'date' => $mydate
240
+        ],
241
+        'data' => $n
242
+    ]);
243
+
244
+
245
+    spip_log("optimiser_base_disparus : {$n} lien(s) mort(s)", 'genie' . _LOG_DEBUG);
246 246
 }
Please login to merge, or discard this patch.
ecrire/inc/drapeau_edition.php 1 patch
Indentation   +111 added lines, -111 removed lines patch added patch discarded remove patch
@@ -30,7 +30,7 @@  discard block
 block discarded – undo
30 30
  * @package SPIP\Core\Drapeaux\Edition
31 31
  **/
32 32
 if (!defined('_ECRIRE_INC_VERSION')) {
33
-	return;
33
+    return;
34 34
 }
35 35
 
36 36
 
@@ -45,46 +45,46 @@  discard block
 block discarded – undo
45 45
  *     `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()`
46 46
  **/
47 47
 function lire_tableau_edition() {
48
-	$edition = @unserialize($GLOBALS['meta']['drapeau_edition']);
49
-	if (!$edition) {
50
-		return [];
51
-	}
52
-	$changed = false;
48
+    $edition = @unserialize($GLOBALS['meta']['drapeau_edition']);
49
+    if (!$edition) {
50
+        return [];
51
+    }
52
+    $changed = false;
53 53
 
54
-	$bon_pour_le_service = time() - 3600;
55
-	// parcourir le tableau et virer les vieux
56
-	foreach ($edition as $objet => $data) {
57
-		if (!is_array($data)) {
58
-			unset($edition[$objet]);
59
-		} // vieille version
60
-		else {
61
-			foreach ($data as $id => $tab) {
62
-				if (!is_array($tab)) {
63
-					unset($edition[$objet][$tab]);
64
-				} // vieille version
65
-				else {
66
-					foreach ($tab as $n => $duo) {
67
-						if (current($duo) < $bon_pour_le_service) {
68
-							unset($edition[$objet][$id][$n]);
69
-							$changed = true;
70
-						}
71
-					}
72
-				}
73
-				if (!$edition[$objet][$id]) {
74
-					unset($edition[$objet][$id]);
75
-				}
76
-			}
77
-		}
78
-		if (!$edition[$objet]) {
79
-			unset($edition[$objet]);
80
-		}
81
-	}
54
+    $bon_pour_le_service = time() - 3600;
55
+    // parcourir le tableau et virer les vieux
56
+    foreach ($edition as $objet => $data) {
57
+        if (!is_array($data)) {
58
+            unset($edition[$objet]);
59
+        } // vieille version
60
+        else {
61
+            foreach ($data as $id => $tab) {
62
+                if (!is_array($tab)) {
63
+                    unset($edition[$objet][$tab]);
64
+                } // vieille version
65
+                else {
66
+                    foreach ($tab as $n => $duo) {
67
+                        if (current($duo) < $bon_pour_le_service) {
68
+                            unset($edition[$objet][$id][$n]);
69
+                            $changed = true;
70
+                        }
71
+                    }
72
+                }
73
+                if (!$edition[$objet][$id]) {
74
+                    unset($edition[$objet][$id]);
75
+                }
76
+            }
77
+        }
78
+        if (!$edition[$objet]) {
79
+            unset($edition[$objet]);
80
+        }
81
+    }
82 82
 
83
-	if ($changed) {
84
-		ecrire_tableau_edition($edition);
85
-	}
83
+    if ($changed) {
84
+        ecrire_tableau_edition($edition);
85
+    }
86 86
 
87
-	return $edition;
87
+    return $edition;
88 88
 }
89 89
 
90 90
 /**
@@ -97,7 +97,7 @@  discard block
 block discarded – undo
97 97
  *     `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()`
98 98
  **/
99 99
 function ecrire_tableau_edition($edition) {
100
-	ecrire_meta('drapeau_edition', serialize($edition));
100
+    ecrire_meta('drapeau_edition', serialize($edition));
101 101
 }
102 102
 
103 103
 /**
@@ -117,24 +117,24 @@  discard block
 block discarded – undo
117 117
  *     Type d'objet édité
118 118
  */
119 119
 function signale_edition($id, $auteur, $type = 'article') {
120
-	include_spip('base/objets');
121
-	include_spip('inc/filtres');
122
-	if (objet_info($type, 'editable') !== 'oui') {
123
-		return;
124
-	}
120
+    include_spip('base/objets');
121
+    include_spip('inc/filtres');
122
+    if (objet_info($type, 'editable') !== 'oui') {
123
+        return;
124
+    }
125 125
 
126
-	$edition = lire_tableau_edition();
127
-	if (isset($auteur['id_auteur']) and $id_a = $auteur['id_auteur']) {
128
-		$nom = $auteur['nom'];
129
-	} else {
130
-		$nom = $id_a = $GLOBALS['ip'];
131
-	}
126
+    $edition = lire_tableau_edition();
127
+    if (isset($auteur['id_auteur']) and $id_a = $auteur['id_auteur']) {
128
+        $nom = $auteur['nom'];
129
+    } else {
130
+        $nom = $id_a = $GLOBALS['ip'];
131
+    }
132 132
 
133
-	if (!isset($edition[$type][$id]) or !is_array($edition[$type][$id])) {
134
-		$edition[$type][$id] = [];
135
-	}
136
-	$edition[$type][$id][$id_a][$nom] = time();
137
-	ecrire_tableau_edition($edition);
133
+    if (!isset($edition[$type][$id]) or !is_array($edition[$type][$id])) {
134
+        $edition[$type][$id] = [];
135
+    }
136
+    $edition[$type][$id][$id_a][$nom] = time();
137
+    ecrire_tableau_edition($edition);
138 138
 }
139 139
 
140 140
 /**
@@ -151,9 +151,9 @@  discard block
 block discarded – undo
151 151
  */
152 152
 function qui_edite($id, $type = 'article') {
153 153
 
154
-	$edition = lire_tableau_edition();
154
+    $edition = lire_tableau_edition();
155 155
 
156
-	return empty($edition[$type][$id]) ? [] : $edition[$type][$id];
156
+    return empty($edition[$type][$id]) ? [] : $edition[$type][$id];
157 157
 }
158 158
 
159 159
 /**
@@ -167,22 +167,22 @@  discard block
 block discarded – undo
167 167
  *     Liste de tableaux `['nom_auteur_modif' => x|y|z, 'date_diff' => n]`
168 168
  */
169 169
 function mention_qui_edite($id, $type = 'article') {
170
-	$modif = qui_edite($id, $type);
171
-	unset($modif[$GLOBALS['visiteur_session']['id_auteur']]);
170
+    $modif = qui_edite($id, $type);
171
+    unset($modif[$GLOBALS['visiteur_session']['id_auteur']]);
172 172
 
173
-	if ($modif) {
174
-		$quand = 0;
175
-		foreach ($modif as $duo) {
176
-			$auteurs[] = typo(key($duo));
177
-			$quand = max($quand, current($duo));
178
-		}
173
+    if ($modif) {
174
+        $quand = 0;
175
+        foreach ($modif as $duo) {
176
+            $auteurs[] = typo(key($duo));
177
+            $quand = max($quand, current($duo));
178
+        }
179 179
 
180
-		// format lie a la chaine de langue 'avis_article_modifie'
181
-		return [
182
-			'nom_auteur_modif' => join(' | ', $auteurs),
183
-			'date_diff' => ceil((time() - $quand) / 60)
184
-		];
185
-	}
180
+        // format lie a la chaine de langue 'avis_article_modifie'
181
+        return [
182
+            'nom_auteur_modif' => join(' | ', $auteurs),
183
+            'date_diff' => ceil((time() - $quand) / 60)
184
+        ];
185
+    }
186 186
 }
187 187
 
188 188
 /**
@@ -196,25 +196,25 @@  discard block
 block discarded – undo
196 196
  *     Liste de tableaux `['objet' => x, 'id_objet' => n]`
197 197
  */
198 198
 function liste_drapeau_edition($id_auteur) {
199
-	$edition = lire_tableau_edition();
200
-	$objets_ouverts = [];
199
+    $edition = lire_tableau_edition();
200
+    $objets_ouverts = [];
201 201
 
202
-	foreach ($edition as $objet => $data) {
203
-		foreach ($data as $id => $auteurs) {
204
-			if (
205
-				isset($auteurs[$id_auteur])
206
-				and is_array($auteurs[$id_auteur]) // precaution
207
-				and (array_pop($auteurs[$id_auteur]) > time() - 3600)
208
-			) {
209
-				$objets_ouverts[] = [
210
-					'objet' => $objet,
211
-					'id_objet' => $id,
212
-				];
213
-			}
214
-		}
215
-	}
202
+    foreach ($edition as $objet => $data) {
203
+        foreach ($data as $id => $auteurs) {
204
+            if (
205
+                isset($auteurs[$id_auteur])
206
+                and is_array($auteurs[$id_auteur]) // precaution
207
+                and (array_pop($auteurs[$id_auteur]) > time() - 3600)
208
+            ) {
209
+                $objets_ouverts[] = [
210
+                    'objet' => $objet,
211
+                    'id_objet' => $id,
212
+                ];
213
+            }
214
+        }
215
+    }
216 216
 
217
-	return $objets_ouverts;
217
+    return $objets_ouverts;
218 218
 }
219 219
 
220 220
 /**
@@ -227,15 +227,15 @@  discard block
 block discarded – undo
227 227
  * @return void
228 228
  */
229 229
 function debloquer_tous($id_auteur) {
230
-	$edition = lire_tableau_edition();
231
-	foreach ($edition as $objet => $data) {
232
-		foreach ($data as $id => $auteurs) {
233
-			if (isset($auteurs[$id_auteur])) {
234
-				unset($edition[$objet][$id][$id_auteur]);
235
-				ecrire_tableau_edition($edition);
236
-			}
237
-		}
238
-	}
230
+    $edition = lire_tableau_edition();
231
+    foreach ($edition as $objet => $data) {
232
+        foreach ($data as $id => $auteurs) {
233
+            if (isset($auteurs[$id_auteur])) {
234
+                unset($edition[$objet][$id][$id_auteur]);
235
+                ecrire_tableau_edition($edition);
236
+            }
237
+        }
238
+    }
239 239
 }
240 240
 
241 241
 /**
@@ -253,19 +253,19 @@  discard block
 block discarded – undo
253 253
  * @return void
254 254
  */
255 255
 function debloquer_edition($id_auteur, $id_objet, $type = 'article') {
256
-	$edition = lire_tableau_edition();
256
+    $edition = lire_tableau_edition();
257 257
 
258
-	foreach ($edition as $objet => $data) {
259
-		if ($objet == $type) {
260
-			foreach ($data as $id => $auteurs) {
261
-				if (
262
-					$id == $id_objet
263
-					and isset($auteurs[$id_auteur])
264
-				) {
265
-					unset($edition[$objet][$id][$id_auteur]);
266
-					ecrire_tableau_edition($edition);
267
-				}
268
-			}
269
-		}
270
-	}
258
+    foreach ($edition as $objet => $data) {
259
+        if ($objet == $type) {
260
+            foreach ($data as $id => $auteurs) {
261
+                if (
262
+                    $id == $id_objet
263
+                    and isset($auteurs[$id_auteur])
264
+                ) {
265
+                    unset($edition[$objet][$id][$id_auteur]);
266
+                    ecrire_tableau_edition($edition);
267
+                }
268
+            }
269
+        }
270
+    }
271 271
 }
Please login to merge, or discard this patch.
ecrire/inc/plugin.php 1 patch
Indentation   +976 added lines, -976 removed lines patch added patch discarded remove patch
@@ -17,12 +17,12 @@  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
 /** l'adresse du repertoire de telechargement et de decompactage des plugins */
24 24
 if (!defined('_DIR_PLUGINS_AUTO')) {
25
-	define('_DIR_PLUGINS_AUTO', _DIR_PLUGINS . 'auto/');
25
+    define('_DIR_PLUGINS_AUTO', _DIR_PLUGINS . 'auto/');
26 26
 }
27 27
 
28 28
 #include_spip('inc/texte'); // ????? Appelle public/parametrer trop tot avant la reconstruction du chemin des plugins.
@@ -47,27 +47,27 @@  discard block
 block discarded – undo
47 47
  * @return array
48 48
 **/
49 49
 function liste_plugin_files($dir_plugins = null) {
50
-	static $plugin_files = [];
51
-	if (is_null($dir_plugins)) {
52
-		$dir_plugins = _DIR_PLUGINS;
53
-	}
54
-	if (
55
-		!isset($plugin_files[$dir_plugins])
56
-		or count($plugin_files[$dir_plugins]) == 0
57
-	) {
58
-		$plugin_files[$dir_plugins] = [];
59
-		foreach (fast_find_plugin_dirs($dir_plugins) as $plugin) {
60
-			$plugin_files[$dir_plugins][] = substr($plugin, strlen($dir_plugins));
61
-		}
62
-
63
-		sort($plugin_files[$dir_plugins]);
64
-		// et on lit le XML de tous les plugins pour le mettre en cache
65
-		// et en profiter pour nettoyer ceux qui n'existent plus du cache
66
-		$get_infos = charger_fonction('get_infos', 'plugins');
67
-		$get_infos($plugin_files[$dir_plugins], false, $dir_plugins, true);
68
-	}
69
-
70
-	return $plugin_files[$dir_plugins];
50
+    static $plugin_files = [];
51
+    if (is_null($dir_plugins)) {
52
+        $dir_plugins = _DIR_PLUGINS;
53
+    }
54
+    if (
55
+        !isset($plugin_files[$dir_plugins])
56
+        or count($plugin_files[$dir_plugins]) == 0
57
+    ) {
58
+        $plugin_files[$dir_plugins] = [];
59
+        foreach (fast_find_plugin_dirs($dir_plugins) as $plugin) {
60
+            $plugin_files[$dir_plugins][] = substr($plugin, strlen($dir_plugins));
61
+        }
62
+
63
+        sort($plugin_files[$dir_plugins]);
64
+        // et on lit le XML de tous les plugins pour le mettre en cache
65
+        // et en profiter pour nettoyer ceux qui n'existent plus du cache
66
+        $get_infos = charger_fonction('get_infos', 'plugins');
67
+        $get_infos($plugin_files[$dir_plugins], false, $dir_plugins, true);
68
+    }
69
+
70
+    return $plugin_files[$dir_plugins];
71 71
 }
72 72
 
73 73
 /**
@@ -83,45 +83,45 @@  discard block
 block discarded – undo
83 83
  *     Liste complète des répeertoires
84 84
 **/
85 85
 function fast_find_plugin_dirs($dir, $max_prof = 100) {
86
-	$fichiers = [];
87
-	// revenir au repertoire racine si on a recu dossier/truc
88
-	// pour regarder dossier/truc/ ne pas oublier le / final
89
-	$dir = preg_replace(',/[^/]*$,', '', $dir);
90
-	if ($dir == '') {
91
-		$dir = '.';
92
-	}
93
-
94
-	if (!is_dir($dir)) {
95
-		return $fichiers;
96
-	}
97
-	if (is_plugin_dir($dir, '')) {
98
-		$fichiers[] = $dir;
99
-
100
-		return $fichiers;
101
-	}
102
-	if ($max_prof <= 0) {
103
-		return $fichiers;
104
-	}
105
-
106
-	$subdirs = [];
107
-	if (@is_dir($dir) and is_readable($dir) and $d = opendir($dir)) {
108
-		while (($f = readdir($d)) !== false) {
109
-			if (
110
-				$f[0] != '.' # ignorer . .. .svn etc
111
-				and $f != 'CVS'
112
-				and is_dir($f = "$dir/$f")
113
-			) {
114
-				$subdirs[] = $f;
115
-			}
116
-		}
117
-		closedir($d);
118
-	}
119
-
120
-	foreach ($subdirs as $d) {
121
-		$fichiers = array_merge($fichiers, fast_find_plugin_dirs("$d/", $max_prof - 1));
122
-	}
123
-
124
-	return $fichiers;
86
+    $fichiers = [];
87
+    // revenir au repertoire racine si on a recu dossier/truc
88
+    // pour regarder dossier/truc/ ne pas oublier le / final
89
+    $dir = preg_replace(',/[^/]*$,', '', $dir);
90
+    if ($dir == '') {
91
+        $dir = '.';
92
+    }
93
+
94
+    if (!is_dir($dir)) {
95
+        return $fichiers;
96
+    }
97
+    if (is_plugin_dir($dir, '')) {
98
+        $fichiers[] = $dir;
99
+
100
+        return $fichiers;
101
+    }
102
+    if ($max_prof <= 0) {
103
+        return $fichiers;
104
+    }
105
+
106
+    $subdirs = [];
107
+    if (@is_dir($dir) and is_readable($dir) and $d = opendir($dir)) {
108
+        while (($f = readdir($d)) !== false) {
109
+            if (
110
+                $f[0] != '.' # ignorer . .. .svn etc
111
+                and $f != 'CVS'
112
+                and is_dir($f = "$dir/$f")
113
+            ) {
114
+                $subdirs[] = $f;
115
+            }
116
+        }
117
+        closedir($d);
118
+    }
119
+
120
+    foreach ($subdirs as $d) {
121
+        $fichiers = array_merge($fichiers, fast_find_plugin_dirs("$d/", $max_prof - 1));
122
+    }
123
+
124
+    return $fichiers;
125 125
 }
126 126
 
127 127
 /**
@@ -142,27 +142,27 @@  discard block
 block discarded – undo
142 142
 **/
143 143
 function is_plugin_dir($dir, $dir_plugins = null) {
144 144
 
145
-	if (is_array($dir)) {
146
-		foreach ($dir as $k => $d) {
147
-			if (!is_plugin_dir($d, $dir_plugins)) {
148
-				unset($dir[$k]);
149
-			}
150
-		}
151
-
152
-		return $dir;
153
-	}
154
-	if (is_null($dir_plugins)) {
155
-		$dir_plugins = _DIR_PLUGINS;
156
-	}
157
-	$search = ["$dir_plugins$dir/paquet.xml"];
158
-
159
-	foreach ($search as $s) {
160
-		if (file_exists($s)) {
161
-			return $dir;
162
-		}
163
-	}
164
-
165
-	return '';
145
+    if (is_array($dir)) {
146
+        foreach ($dir as $k => $d) {
147
+            if (!is_plugin_dir($d, $dir_plugins)) {
148
+                unset($dir[$k]);
149
+            }
150
+        }
151
+
152
+        return $dir;
153
+    }
154
+    if (is_null($dir_plugins)) {
155
+        $dir_plugins = _DIR_PLUGINS;
156
+    }
157
+    $search = ["$dir_plugins$dir/paquet.xml"];
158
+
159
+    foreach ($search as $s) {
160
+        if (file_exists($s)) {
161
+            return $dir;
162
+        }
163
+    }
164
+
165
+    return '';
166 166
 }
167 167
 
168 168
 /** Regexp d'extraction des informations d'un intervalle de compatibilité */
@@ -189,51 +189,51 @@  discard block
 block discarded – undo
189 189
  **/
190 190
 function plugin_version_compatible($intervalle, $version, $avec_quoi = '') {
191 191
 
192
-	if (!strlen($intervalle)) {
193
-		return true;
194
-	}
195
-	if (!preg_match(_EXTRAIRE_INTERVALLE, $intervalle, $regs)) {
196
-		return false;
197
-	}
198
-	// Extraction des bornes et traitement de * pour la borne sup :
199
-	// -- on autorise uniquement les ecritures 3.0.*, 3.*
200
-	$minimum = $regs[1];
201
-	$maximum = $regs[2];
202
-
203
-	//  si une version SPIP de compatibilité a été définie (dans
204
-	//  mes_options.php, sous la forme : define('_DEV_VERSION_SPIP_COMPAT', '3.1.0');
205
-	//  on l'utilise (phase de dev, de test...) mais *que* en cas de comparaison
206
-	//  avec la version de SPIP (ne nuit donc pas aux tests de necessite
207
-	//  entre plugins)
208
-	if (defined('_DEV_VERSION_SPIP_COMPAT') and $avec_quoi == 'spip' and $version !== _DEV_VERSION_SPIP_COMPAT) {
209
-		if (plugin_version_compatible($intervalle, _DEV_VERSION_SPIP_COMPAT, $avec_quoi)) {
210
-			return true;
211
-		}
212
-		// si pas de compatibilite avec _DEV_VERSION_SPIP_COMPAT, on essaye quand meme avec la vrai version
213
-		// cas du plugin qui n'est compatible qu'avec cette nouvelle version
214
-	}
215
-
216
-	$minimum_inc = $intervalle[0] == '[';
217
-	$maximum_inc = substr($intervalle, -1) == ']';
218
-
219
-	if (strlen($minimum)) {
220
-		if ($minimum_inc and spip_version_compare($version, $minimum, '<')) {
221
-			return false;
222
-		}
223
-		if (!$minimum_inc and spip_version_compare($version, $minimum, '<=')) {
224
-			return false;
225
-		}
226
-	}
227
-	if (strlen($maximum)) {
228
-		if ($maximum_inc and spip_version_compare($version, $maximum, '>')) {
229
-			return false;
230
-		}
231
-		if (!$maximum_inc and spip_version_compare($version, $maximum, '>=')) {
232
-			return false;
233
-		}
234
-	}
235
-
236
-	return true;
192
+    if (!strlen($intervalle)) {
193
+        return true;
194
+    }
195
+    if (!preg_match(_EXTRAIRE_INTERVALLE, $intervalle, $regs)) {
196
+        return false;
197
+    }
198
+    // Extraction des bornes et traitement de * pour la borne sup :
199
+    // -- on autorise uniquement les ecritures 3.0.*, 3.*
200
+    $minimum = $regs[1];
201
+    $maximum = $regs[2];
202
+
203
+    //  si une version SPIP de compatibilité a été définie (dans
204
+    //  mes_options.php, sous la forme : define('_DEV_VERSION_SPIP_COMPAT', '3.1.0');
205
+    //  on l'utilise (phase de dev, de test...) mais *que* en cas de comparaison
206
+    //  avec la version de SPIP (ne nuit donc pas aux tests de necessite
207
+    //  entre plugins)
208
+    if (defined('_DEV_VERSION_SPIP_COMPAT') and $avec_quoi == 'spip' and $version !== _DEV_VERSION_SPIP_COMPAT) {
209
+        if (plugin_version_compatible($intervalle, _DEV_VERSION_SPIP_COMPAT, $avec_quoi)) {
210
+            return true;
211
+        }
212
+        // si pas de compatibilite avec _DEV_VERSION_SPIP_COMPAT, on essaye quand meme avec la vrai version
213
+        // cas du plugin qui n'est compatible qu'avec cette nouvelle version
214
+    }
215
+
216
+    $minimum_inc = $intervalle[0] == '[';
217
+    $maximum_inc = substr($intervalle, -1) == ']';
218
+
219
+    if (strlen($minimum)) {
220
+        if ($minimum_inc and spip_version_compare($version, $minimum, '<')) {
221
+            return false;
222
+        }
223
+        if (!$minimum_inc and spip_version_compare($version, $minimum, '<=')) {
224
+            return false;
225
+        }
226
+    }
227
+    if (strlen($maximum)) {
228
+        if ($maximum_inc and spip_version_compare($version, $maximum, '>')) {
229
+            return false;
230
+        }
231
+        if (!$maximum_inc and spip_version_compare($version, $maximum, '>=')) {
232
+            return false;
233
+        }
234
+    }
235
+
236
+    return true;
237 237
 }
238 238
 
239 239
 /**
@@ -250,62 +250,62 @@  discard block
 block discarded – undo
250 250
  * @return array
251 251
  */
252 252
 function liste_plugin_valides($liste_plug, $force = false) {
253
-	$liste_ext = liste_plugin_files(_DIR_PLUGINS_DIST);
254
-	$get_infos = charger_fonction('get_infos', 'plugins');
255
-	$infos = [
256
-		// lister les extensions qui sont automatiquement actives
257
-		'_DIR_PLUGINS_DIST' => $get_infos($liste_ext, $force, _DIR_PLUGINS_DIST),
258
-		'_DIR_PLUGINS' => $get_infos($liste_plug, $force, _DIR_PLUGINS)
259
-	];
260
-
261
-	// creer une premiere liste non ordonnee mais qui ne retient
262
-	// que les plugins valides, et dans leur derniere version en cas de doublon
263
-	$infos['_DIR_RESTREINT'][''] = $get_infos('./', $force, _DIR_RESTREINT);
264
-	$infos['_DIR_RESTREINT']['SPIP']['version'] = $GLOBALS['spip_version_branche'];
265
-	$infos['_DIR_RESTREINT']['SPIP']['chemin'] = [];
266
-	$liste_non_classee = [
267
-		'SPIP' => [
268
-			'nom' => 'SPIP',
269
-			'etat' => 'stable',
270
-			'version' => $GLOBALS['spip_version_branche'],
271
-			'dir_type' => '_DIR_RESTREINT',
272
-			'dir' => '',
273
-		]
274
-	];
275
-
276
-	$invalides = [];
277
-	foreach ($liste_ext as $plug) {
278
-		if (isset($infos['_DIR_PLUGINS_DIST'][$plug])) {
279
-			plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_DIST');
280
-		}
281
-	}
282
-	foreach ($liste_plug as $plug) {
283
-		if (isset($infos['_DIR_PLUGINS'][$plug])) {
284
-			$r = plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS');
285
-			if (is_array($r)) {
286
-				$invalides = array_merge($invalides, $r);
287
-			}
288
-		}
289
-	}
290
-
291
-	if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL) {
292
-		$infos['_DIR_PLUGINS_SUPPL'] = $get_infos($liste_plug, false, _DIR_PLUGINS_SUPPL);
293
-		foreach ($liste_plug as $plug) {
294
-			if (isset($infos['_DIR_PLUGINS_SUPPL'][$plug])) {
295
-				$r = plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_SUPPL');
296
-				if (is_array($r)) {
297
-					$invalides = array_merge($invalides, $r);
298
-				}
299
-			}
300
-		}
301
-	}
302
-
303
-	plugin_fixer_procure($liste_non_classee, $infos);
304
-
305
-	// les plugins qui sont dans $liste_non_classee ne sont pas invalides (on a trouve un autre version valide)
306
-	$invalides = array_diff_key($invalides, $liste_non_classee);
307
-
308
-	return [$infos, $liste_non_classee, $invalides];
253
+    $liste_ext = liste_plugin_files(_DIR_PLUGINS_DIST);
254
+    $get_infos = charger_fonction('get_infos', 'plugins');
255
+    $infos = [
256
+        // lister les extensions qui sont automatiquement actives
257
+        '_DIR_PLUGINS_DIST' => $get_infos($liste_ext, $force, _DIR_PLUGINS_DIST),
258
+        '_DIR_PLUGINS' => $get_infos($liste_plug, $force, _DIR_PLUGINS)
259
+    ];
260
+
261
+    // creer une premiere liste non ordonnee mais qui ne retient
262
+    // que les plugins valides, et dans leur derniere version en cas de doublon
263
+    $infos['_DIR_RESTREINT'][''] = $get_infos('./', $force, _DIR_RESTREINT);
264
+    $infos['_DIR_RESTREINT']['SPIP']['version'] = $GLOBALS['spip_version_branche'];
265
+    $infos['_DIR_RESTREINT']['SPIP']['chemin'] = [];
266
+    $liste_non_classee = [
267
+        'SPIP' => [
268
+            'nom' => 'SPIP',
269
+            'etat' => 'stable',
270
+            'version' => $GLOBALS['spip_version_branche'],
271
+            'dir_type' => '_DIR_RESTREINT',
272
+            'dir' => '',
273
+        ]
274
+    ];
275
+
276
+    $invalides = [];
277
+    foreach ($liste_ext as $plug) {
278
+        if (isset($infos['_DIR_PLUGINS_DIST'][$plug])) {
279
+            plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_DIST');
280
+        }
281
+    }
282
+    foreach ($liste_plug as $plug) {
283
+        if (isset($infos['_DIR_PLUGINS'][$plug])) {
284
+            $r = plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS');
285
+            if (is_array($r)) {
286
+                $invalides = array_merge($invalides, $r);
287
+            }
288
+        }
289
+    }
290
+
291
+    if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL) {
292
+        $infos['_DIR_PLUGINS_SUPPL'] = $get_infos($liste_plug, false, _DIR_PLUGINS_SUPPL);
293
+        foreach ($liste_plug as $plug) {
294
+            if (isset($infos['_DIR_PLUGINS_SUPPL'][$plug])) {
295
+                $r = plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_SUPPL');
296
+                if (is_array($r)) {
297
+                    $invalides = array_merge($invalides, $r);
298
+                }
299
+            }
300
+        }
301
+    }
302
+
303
+    plugin_fixer_procure($liste_non_classee, $infos);
304
+
305
+    // les plugins qui sont dans $liste_non_classee ne sont pas invalides (on a trouve un autre version valide)
306
+    $invalides = array_diff_key($invalides, $liste_non_classee);
307
+
308
+    return [$infos, $liste_non_classee, $invalides];
309 309
 }
310 310
 
311 311
 /**
@@ -325,30 +325,30 @@  discard block
 block discarded – undo
325 325
  *   array description short si on ne le retient pas (pour memorisation dans une table des erreurs)
326 326
  */
327 327
 function plugin_valide_resume(&$liste, $plug, $infos, $dir_type) {
328
-	$i = $infos[$dir_type][$plug];
329
-	$p = strtoupper($i['prefix']);
330
-	$short_desc = [
331
-		'nom' => $i['nom'],
332
-		'etat' => $i['etat'],
333
-		'version' => $i['version'],
334
-		'dir' => $plug,
335
-		'dir_type' => $dir_type
336
-	];
337
-	if (isset($i['erreur']) and $i['erreur']) {
338
-		$short_desc['erreur'] = $i['erreur'];
339
-		return [$p => $short_desc];
340
-	}
341
-	if (!plugin_version_compatible($i['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) {
342
-		return [$p => $short_desc];
343
-	}
344
-	if (
345
-		!isset($liste[$p])
346
-		or spip_version_compare($i['version'], $liste[$p]['version'], '>')
347
-	) {
348
-		$liste[$p] = $short_desc;
349
-	}
350
-	// ok le plugin etait deja dans la liste ou on a choisi une version plus recente
351
-	return $p;
328
+    $i = $infos[$dir_type][$plug];
329
+    $p = strtoupper($i['prefix']);
330
+    $short_desc = [
331
+        'nom' => $i['nom'],
332
+        'etat' => $i['etat'],
333
+        'version' => $i['version'],
334
+        'dir' => $plug,
335
+        'dir_type' => $dir_type
336
+    ];
337
+    if (isset($i['erreur']) and $i['erreur']) {
338
+        $short_desc['erreur'] = $i['erreur'];
339
+        return [$p => $short_desc];
340
+    }
341
+    if (!plugin_version_compatible($i['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) {
342
+        return [$p => $short_desc];
343
+    }
344
+    if (
345
+        !isset($liste[$p])
346
+        or spip_version_compare($i['version'], $liste[$p]['version'], '>')
347
+    ) {
348
+        $liste[$p] = $short_desc;
349
+    }
350
+    // ok le plugin etait deja dans la liste ou on a choisi une version plus recente
351
+    return $p;
352 352
 }
353 353
 
354 354
 /**
@@ -364,47 +364,47 @@  discard block
 block discarded – undo
364 364
  * @param array $infos
365 365
  */
366 366
 function plugin_fixer_procure(&$liste, &$infos) {
367
-	foreach ($liste as $p => $resume) {
368
-		$i = $infos[$resume['dir_type']][$resume['dir']];
369
-		if (isset($i['procure']) and $i['procure']) {
370
-			foreach ($i['procure'] as $procure) {
371
-				$p = strtoupper($procure['nom']);
372
-				$dir = $resume['dir'];
373
-				if ($dir) {
374
-					$dir .= '/';
375
-				}
376
-				$dir .= 'procure:' . $procure['nom'];
377
-
378
-				$procure['etat'] = '?';
379
-				$procure['dir_type'] = $resume['dir_type'];
380
-				$procure['dir'] = $dir;
381
-
382
-				// si ce plugin n'est pas deja procure, ou dans une version plus ancienne
383
-				// on ajoute cette version a la liste
384
-				if (
385
-					!isset($liste[$p])
386
-					or spip_version_compare($procure['version'], $liste[$p]['version'], '>')
387
-				) {
388
-					$liste[$p] = $procure;
389
-
390
-					// on fournit une information minimale pour ne pas perturber la compilation
391
-					$infos[$resume['dir_type']][$dir] = [
392
-						'prefix' => $procure['nom'],
393
-						'nom' => $procure['nom'],
394
-						'etat' => $procure['etat'],
395
-						'version' => $procure['version'],
396
-						'chemin' => [],
397
-						'necessite' => [],
398
-						'utilise' => [],
399
-						'lib' => [],
400
-						'menu' => [],
401
-						'onglet' => [],
402
-						'procure' => [],
403
-					];
404
-				}
405
-			}
406
-		}
407
-	}
367
+    foreach ($liste as $p => $resume) {
368
+        $i = $infos[$resume['dir_type']][$resume['dir']];
369
+        if (isset($i['procure']) and $i['procure']) {
370
+            foreach ($i['procure'] as $procure) {
371
+                $p = strtoupper($procure['nom']);
372
+                $dir = $resume['dir'];
373
+                if ($dir) {
374
+                    $dir .= '/';
375
+                }
376
+                $dir .= 'procure:' . $procure['nom'];
377
+
378
+                $procure['etat'] = '?';
379
+                $procure['dir_type'] = $resume['dir_type'];
380
+                $procure['dir'] = $dir;
381
+
382
+                // si ce plugin n'est pas deja procure, ou dans une version plus ancienne
383
+                // on ajoute cette version a la liste
384
+                if (
385
+                    !isset($liste[$p])
386
+                    or spip_version_compare($procure['version'], $liste[$p]['version'], '>')
387
+                ) {
388
+                    $liste[$p] = $procure;
389
+
390
+                    // on fournit une information minimale pour ne pas perturber la compilation
391
+                    $infos[$resume['dir_type']][$dir] = [
392
+                        'prefix' => $procure['nom'],
393
+                        'nom' => $procure['nom'],
394
+                        'etat' => $procure['etat'],
395
+                        'version' => $procure['version'],
396
+                        'chemin' => [],
397
+                        'necessite' => [],
398
+                        'utilise' => [],
399
+                        'lib' => [],
400
+                        'menu' => [],
401
+                        'onglet' => [],
402
+                        'procure' => [],
403
+                    ];
404
+                }
405
+            }
406
+        }
407
+    }
408 408
 }
409 409
 
410 410
 /**
@@ -418,20 +418,20 @@  discard block
 block discarded – undo
418 418
  * @return array
419 419
  */
420 420
 function liste_chemin_plugin($liste, $dir_plugins = _DIR_PLUGINS) {
421
-	foreach ($liste as $prefix => $infos) {
422
-		if (
423
-			!$dir_plugins
424
-			or (
425
-				defined($infos['dir_type'])
426
-				and constant($infos['dir_type']) == $dir_plugins)
427
-		) {
428
-			$liste[$prefix] = $infos['dir'];
429
-		} else {
430
-			unset($liste[$prefix]);
431
-		}
432
-	}
433
-
434
-	return $liste;
421
+    foreach ($liste as $prefix => $infos) {
422
+        if (
423
+            !$dir_plugins
424
+            or (
425
+                defined($infos['dir_type'])
426
+                and constant($infos['dir_type']) == $dir_plugins)
427
+        ) {
428
+            $liste[$prefix] = $infos['dir'];
429
+        } else {
430
+            unset($liste[$prefix]);
431
+        }
432
+    }
433
+
434
+    return $liste;
435 435
 }
436 436
 
437 437
 /**
@@ -446,9 +446,9 @@  discard block
 block discarded – undo
446 446
  * @return array
447 447
  */
448 448
 function liste_chemin_plugin_actifs($dir_plugins = _DIR_PLUGINS) {
449
-	include_spip('plugins/installer');
449
+    include_spip('plugins/installer');
450 450
 
451
-	return liste_chemin_plugin(liste_plugin_actifs(), $dir_plugins);
451
+    return liste_chemin_plugin(liste_plugin_actifs(), $dir_plugins);
452 452
 }
453 453
 
454 454
 /**
@@ -479,54 +479,54 @@  discard block
 block discarded – undo
479 479
  *                qui n'ont pas satisfait leurs dépendances
480 480
 **/
481 481
 function plugin_trier($infos, $liste_non_classee) {
482
-	$toute_la_liste = $liste_non_classee;
483
-	$liste = $ordre = [];
484
-	$count = 0;
485
-
486
-	while ($c = count($liste_non_classee) and $c != $count) { // tant qu'il reste des plugins a classer, et qu'on ne stagne pas
487
-		#echo "tour::";var_dump($liste_non_classee);
488
-		$count = $c;
489
-		foreach ($liste_non_classee as $p => $resume) {
490
-			$plug = $resume['dir'];
491
-			$dir_type = $resume['dir_type'];
492
-			$info1 = $infos[$dir_type][$plug];
493
-			// si des plugins sont necessaires,
494
-			// on ne peut inserer qu'apres eux
495
-			foreach ($info1['necessite'] as $need) {
496
-				$nom = strtoupper($need['nom']);
497
-				$compat = isset($need['compatibilite']) ? $need['compatibilite'] : '';
498
-				if (!isset($liste[$nom]) or !plugin_version_compatible($compat, $liste[$nom]['version'])) {
499
-					$info1 = false;
500
-					break;
501
-				}
502
-			}
503
-			if (!$info1) {
504
-				continue;
505
-			}
506
-			// idem si des plugins sont utiles,
507
-			// sauf si ils sont de toute facon absents de la liste
508
-			foreach ($info1['utilise'] as $need) {
509
-				$nom = strtoupper($need['nom']);
510
-				$compat = isset($need['compatibilite']) ? $need['compatibilite'] : '';
511
-				if (isset($toute_la_liste[$nom])) {
512
-					if (
513
-						!isset($liste[$nom]) or
514
-						!plugin_version_compatible($compat, $liste[$nom]['version'])
515
-					) {
516
-						$info1 = false;
517
-						break;
518
-					}
519
-				}
520
-			}
521
-			if ($info1) {
522
-				$ordre[$p] = $info1;
523
-				$liste[$p] = $liste_non_classee[$p];
524
-				unset($liste_non_classee[$p]);
525
-			}
526
-		}
527
-	}
528
-
529
-	return [$liste, $ordre, $liste_non_classee];
482
+    $toute_la_liste = $liste_non_classee;
483
+    $liste = $ordre = [];
484
+    $count = 0;
485
+
486
+    while ($c = count($liste_non_classee) and $c != $count) { // tant qu'il reste des plugins a classer, et qu'on ne stagne pas
487
+        #echo "tour::";var_dump($liste_non_classee);
488
+        $count = $c;
489
+        foreach ($liste_non_classee as $p => $resume) {
490
+            $plug = $resume['dir'];
491
+            $dir_type = $resume['dir_type'];
492
+            $info1 = $infos[$dir_type][$plug];
493
+            // si des plugins sont necessaires,
494
+            // on ne peut inserer qu'apres eux
495
+            foreach ($info1['necessite'] as $need) {
496
+                $nom = strtoupper($need['nom']);
497
+                $compat = isset($need['compatibilite']) ? $need['compatibilite'] : '';
498
+                if (!isset($liste[$nom]) or !plugin_version_compatible($compat, $liste[$nom]['version'])) {
499
+                    $info1 = false;
500
+                    break;
501
+                }
502
+            }
503
+            if (!$info1) {
504
+                continue;
505
+            }
506
+            // idem si des plugins sont utiles,
507
+            // sauf si ils sont de toute facon absents de la liste
508
+            foreach ($info1['utilise'] as $need) {
509
+                $nom = strtoupper($need['nom']);
510
+                $compat = isset($need['compatibilite']) ? $need['compatibilite'] : '';
511
+                if (isset($toute_la_liste[$nom])) {
512
+                    if (
513
+                        !isset($liste[$nom]) or
514
+                        !plugin_version_compatible($compat, $liste[$nom]['version'])
515
+                    ) {
516
+                        $info1 = false;
517
+                        break;
518
+                    }
519
+                }
520
+            }
521
+            if ($info1) {
522
+                $ordre[$p] = $info1;
523
+                $liste[$p] = $liste_non_classee[$p];
524
+                unset($liste_non_classee[$p]);
525
+            }
526
+        }
527
+    }
528
+
529
+    return [$liste, $ordre, $liste_non_classee];
530 530
 }
531 531
 
532 532
 /**
@@ -543,40 +543,40 @@  discard block
 block discarded – undo
543 543
  *     Répertoire (plugins, plugins-dist, ...) => Couples (prefixes => infos completes) des plugins qu'ils contiennent
544 544
 **/
545 545
 function plugins_erreurs($liste_non_classee, $liste, $infos, $msg = []) {
546
-	static $erreurs = [];
547
-
548
-	if (!is_array($liste)) {
549
-		$liste = [];
550
-	}
551
-
552
-	// les plugins en erreur ne sont pas actifs ; ils ne doivent pas être dans la liste
553
-	$liste = array_diff_key($liste, $liste_non_classee);
554
-
555
-	foreach ($liste_non_classee as $p => $resume) {
556
-		$dir_type = $resume['dir_type'];
557
-		$plug = $resume['dir'];
558
-		$k = $infos[$dir_type][$plug];
559
-
560
-		$plug = constant($dir_type) . $plug;
561
-		if (!isset($msg[$p])) {
562
-			if (isset($resume['erreur']) and $resume['erreur']) {
563
-				$msg[$p] = [$resume['erreur']];
564
-			}
565
-			elseif (!plugin_version_compatible($k['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) {
566
-				$msg[$p] = [plugin_message_incompatibilite($k['compatibilite'], $GLOBALS['spip_version_branche'], 'SPIP', 'necessite')];
567
-			}
568
-			elseif (!$msg[$p] = plugin_necessite($k['necessite'], $liste, 'necessite')) {
569
-				$msg[$p] = plugin_necessite($k['utilise'], $liste, 'utilise');
570
-			}
571
-		} else {
572
-			foreach ($msg[$p] as $c => $l) {
573
-				$msg[$p][$c] = plugin_controler_lib($l['nom'], $l['lien']);
574
-			}
575
-		}
576
-		$erreurs[$plug] = $msg[$p];
577
-	}
578
-
579
-	ecrire_meta('plugin_erreur_activation', serialize($erreurs));
546
+    static $erreurs = [];
547
+
548
+    if (!is_array($liste)) {
549
+        $liste = [];
550
+    }
551
+
552
+    // les plugins en erreur ne sont pas actifs ; ils ne doivent pas être dans la liste
553
+    $liste = array_diff_key($liste, $liste_non_classee);
554
+
555
+    foreach ($liste_non_classee as $p => $resume) {
556
+        $dir_type = $resume['dir_type'];
557
+        $plug = $resume['dir'];
558
+        $k = $infos[$dir_type][$plug];
559
+
560
+        $plug = constant($dir_type) . $plug;
561
+        if (!isset($msg[$p])) {
562
+            if (isset($resume['erreur']) and $resume['erreur']) {
563
+                $msg[$p] = [$resume['erreur']];
564
+            }
565
+            elseif (!plugin_version_compatible($k['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) {
566
+                $msg[$p] = [plugin_message_incompatibilite($k['compatibilite'], $GLOBALS['spip_version_branche'], 'SPIP', 'necessite')];
567
+            }
568
+            elseif (!$msg[$p] = plugin_necessite($k['necessite'], $liste, 'necessite')) {
569
+                $msg[$p] = plugin_necessite($k['utilise'], $liste, 'utilise');
570
+            }
571
+        } else {
572
+            foreach ($msg[$p] as $c => $l) {
573
+                $msg[$p][$c] = plugin_controler_lib($l['nom'], $l['lien']);
574
+            }
575
+        }
576
+        $erreurs[$plug] = $msg[$p];
577
+    }
578
+
579
+    ecrire_meta('plugin_erreur_activation', serialize($erreurs));
580 580
 }
581 581
 
582 582
 /**
@@ -591,25 +591,25 @@  discard block
 block discarded – undo
591 591
  *     - Liste des erreurs ou code HTML des erreurs
592 592
 **/
593 593
 function plugin_donne_erreurs($raw = false, $raz = true) {
594
-	if (!isset($GLOBALS['meta']['plugin_erreur_activation'])) {
595
-		return $raw ? [] : '';
596
-	}
597
-	$list = @unserialize($GLOBALS['meta']['plugin_erreur_activation']);
598
-	// Compat ancienne version
599
-	if (!$list) {
600
-		$list = $raw ? [] : $GLOBALS['meta']['plugin_erreur_activation'];
601
-	} elseif (!$raw) {
602
-		foreach ($list as $plug => $msg) {
603
-			$list[$plug] = '<li>' . _T('plugin_impossible_activer', ['plugin' => $plug])
604
-				. '<ul><li>' . implode('</li><li>', $msg) . '</li></ul></li>';
605
-		}
606
-		$list = '<ul>' . join("\n", $list) . '</ul>';
607
-	}
608
-	if ($raz) {
609
-		effacer_meta('plugin_erreur_activation');
610
-	}
611
-
612
-	return $list;
594
+    if (!isset($GLOBALS['meta']['plugin_erreur_activation'])) {
595
+        return $raw ? [] : '';
596
+    }
597
+    $list = @unserialize($GLOBALS['meta']['plugin_erreur_activation']);
598
+    // Compat ancienne version
599
+    if (!$list) {
600
+        $list = $raw ? [] : $GLOBALS['meta']['plugin_erreur_activation'];
601
+    } elseif (!$raw) {
602
+        foreach ($list as $plug => $msg) {
603
+            $list[$plug] = '<li>' . _T('plugin_impossible_activer', ['plugin' => $plug])
604
+                . '<ul><li>' . implode('</li><li>', $msg) . '</li></ul></li>';
605
+        }
606
+        $list = '<ul>' . join("\n", $list) . '</ul>';
607
+    }
608
+    if ($raz) {
609
+        effacer_meta('plugin_erreur_activation');
610
+    }
611
+
612
+    return $list;
613 613
 }
614 614
 
615 615
 /**
@@ -629,21 +629,21 @@  discard block
 block discarded – undo
629 629
  *
630 630
  **/
631 631
 function plugin_necessite($n, $liste, $balise = 'necessite') {
632
-	$msg = [];
633
-	foreach ($n as $need) {
634
-		$id = strtoupper($need['nom']);
635
-		$r = plugin_controler_necessite(
636
-			$liste,
637
-			$id,
638
-			isset($need['compatibilite']) ? $need['compatibilite'] : '',
639
-			$balise
640
-		);
641
-		if ($r) {
642
-			$msg[] = $r;
643
-		}
644
-	}
645
-
646
-	return $msg;
632
+    $msg = [];
633
+    foreach ($n as $need) {
634
+        $id = strtoupper($need['nom']);
635
+        $r = plugin_controler_necessite(
636
+            $liste,
637
+            $id,
638
+            isset($need['compatibilite']) ? $need['compatibilite'] : '',
639
+            $balise
640
+        );
641
+        if ($r) {
642
+            $msg[] = $r;
643
+        }
644
+    }
645
+
646
+    return $msg;
647 647
 }
648 648
 
649 649
 /**
@@ -665,19 +665,19 @@  discard block
 block discarded – undo
665 665
  *    Message d'erreur lorsque la dépendance est absente.
666 666
  **/
667 667
 function plugin_controler_necessite($liste, $nom, $intervalle, $balise) {
668
-	if (isset($liste[$nom]) and plugin_version_compatible($intervalle, $liste[$nom]['version'])) {
669
-		return '';
670
-	}
671
-	// Si l'on a un <utilise="plugin non actif" />, ne pas renvoyer d'erreur
672
-	if ($balise === 'utilise' and !isset($liste[$nom])) {
673
-		return '';
674
-	}
675
-	return plugin_message_incompatibilite(
676
-		$intervalle,
677
-		(isset($liste[$nom]) ? $liste[$nom]['version'] : ''),
678
-		$nom,
679
-		$balise
680
-	);
668
+    if (isset($liste[$nom]) and plugin_version_compatible($intervalle, $liste[$nom]['version'])) {
669
+        return '';
670
+    }
671
+    // Si l'on a un <utilise="plugin non actif" />, ne pas renvoyer d'erreur
672
+    if ($balise === 'utilise' and !isset($liste[$nom])) {
673
+        return '';
674
+    }
675
+    return plugin_message_incompatibilite(
676
+        $intervalle,
677
+        (isset($liste[$nom]) ? $liste[$nom]['version'] : ''),
678
+        $nom,
679
+        $balise
680
+    );
681 681
 }
682 682
 
683 683
 /**
@@ -694,70 +694,70 @@  discard block
 block discarded – undo
694 694
  */
695 695
 function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) {
696 696
 
697
-	// prendre en compte les erreurs de dépendances à PHP
698
-	// ou à une extension PHP avec des messages d'erreurs dédiés.
699
-	$type = 'plugin';
700
-	if ($nom === 'SPIP') {
701
-		$type = 'spip';
702
-	} elseif ($nom === 'PHP') {
703
-		$type = 'php';
704
-	} elseif (strncmp($nom, 'PHP:', 4) === 0) {
705
-		$type = 'extension_php';
706
-		list(,$nom) = explode(':', $nom, 2);
707
-	}
708
-
709
-	if (preg_match(_EXTRAIRE_INTERVALLE, $intervalle, $regs)) {
710
-		$minimum = $regs[1];
711
-		$maximum = $regs[2];
712
-
713
-		$minimum_inclus = $intervalle[0] == '[';
714
-		$maximum_inclus = substr($intervalle, -1) == ']';
715
-
716
-		if (strlen($minimum)) {
717
-			if ($minimum_inclus and spip_version_compare($version, $minimum, '<')) {
718
-				return _T("plugin_${balise}_${type}", [
719
-					'plugin' => $nom,
720
-					'version' => ' &ge; ' . $minimum
721
-				]);
722
-			}
723
-			if (!$minimum_inclus and spip_version_compare($version, $minimum, '<=')) {
724
-				return _T("plugin_${balise}_${type}", [
725
-					'plugin' => $nom,
726
-					'version' => ' &gt; ' . $minimum
727
-				]);
728
-			}
729
-		}
730
-
731
-		if (strlen($maximum)) {
732
-			if ($maximum_inclus and spip_version_compare($version, $maximum, '>')) {
733
-				return _T("plugin_${balise}_${type}", [
734
-					'plugin' => $nom,
735
-					'version' => ' &le; ' . $maximum
736
-				]);
737
-			}
738
-			if (!$maximum_inclus and spip_version_compare($version, $maximum, '>=')) {
739
-				return _T("plugin_${balise}_plugin", [
740
-					'plugin' => $nom,
741
-					'version' => ' &lt; ' . $maximum
742
-				]);
743
-			}
744
-		}
745
-	}
746
-
747
-	// note : il ne peut pas y avoir d'erreur sur
748
-	// - un 'utilise' sans version.
749
-	// - un 'php' sans version.
750
-	return _T("plugin_necessite_${type}_sans_version", ['plugin' => $nom]);
697
+    // prendre en compte les erreurs de dépendances à PHP
698
+    // ou à une extension PHP avec des messages d'erreurs dédiés.
699
+    $type = 'plugin';
700
+    if ($nom === 'SPIP') {
701
+        $type = 'spip';
702
+    } elseif ($nom === 'PHP') {
703
+        $type = 'php';
704
+    } elseif (strncmp($nom, 'PHP:', 4) === 0) {
705
+        $type = 'extension_php';
706
+        list(,$nom) = explode(':', $nom, 2);
707
+    }
708
+
709
+    if (preg_match(_EXTRAIRE_INTERVALLE, $intervalle, $regs)) {
710
+        $minimum = $regs[1];
711
+        $maximum = $regs[2];
712
+
713
+        $minimum_inclus = $intervalle[0] == '[';
714
+        $maximum_inclus = substr($intervalle, -1) == ']';
715
+
716
+        if (strlen($minimum)) {
717
+            if ($minimum_inclus and spip_version_compare($version, $minimum, '<')) {
718
+                return _T("plugin_${balise}_${type}", [
719
+                    'plugin' => $nom,
720
+                    'version' => ' &ge; ' . $minimum
721
+                ]);
722
+            }
723
+            if (!$minimum_inclus and spip_version_compare($version, $minimum, '<=')) {
724
+                return _T("plugin_${balise}_${type}", [
725
+                    'plugin' => $nom,
726
+                    'version' => ' &gt; ' . $minimum
727
+                ]);
728
+            }
729
+        }
730
+
731
+        if (strlen($maximum)) {
732
+            if ($maximum_inclus and spip_version_compare($version, $maximum, '>')) {
733
+                return _T("plugin_${balise}_${type}", [
734
+                    'plugin' => $nom,
735
+                    'version' => ' &le; ' . $maximum
736
+                ]);
737
+            }
738
+            if (!$maximum_inclus and spip_version_compare($version, $maximum, '>=')) {
739
+                return _T("plugin_${balise}_plugin", [
740
+                    'plugin' => $nom,
741
+                    'version' => ' &lt; ' . $maximum
742
+                ]);
743
+            }
744
+        }
745
+    }
746
+
747
+    // note : il ne peut pas y avoir d'erreur sur
748
+    // - un 'utilise' sans version.
749
+    // - un 'php' sans version.
750
+    return _T("plugin_necessite_${type}_sans_version", ['plugin' => $nom]);
751 751
 }
752 752
 
753 753
 
754 754
 function plugin_controler_lib($lib, $url) {
755
-	/* Feature sortie du core, voir STP
755
+    /* Feature sortie du core, voir STP
756 756
 	 * if ($url) {
757 757
 		include_spip('inc/charger_plugin');
758 758
 		$url = '<br />'	. bouton_telechargement_plugin($url, 'lib');
759 759
 	}*/
760
-	return _T('plugin_necessite_lib', ['lib' => $lib]) . " <a href='$url'>$url</a>";
760
+    return _T('plugin_necessite_lib', ['lib' => $lib]) . " <a href='$url'>$url</a>";
761 761
 }
762 762
 
763 763
 
@@ -772,7 +772,7 @@  discard block
 block discarded – undo
772 772
  *     true si il y a eu des modifications sur la liste des plugins actifs, false sinon
773 773
  **/
774 774
 function actualise_plugins_actifs($pipe_recherche = false) {
775
-	return ecrire_plugin_actifs('', $pipe_recherche, 'force');
775
+    return ecrire_plugin_actifs('', $pipe_recherche, 'force');
776 776
 }
777 777
 
778 778
 
@@ -799,116 +799,116 @@  discard block
 block discarded – undo
799 799
  **/
800 800
 function ecrire_plugin_actifs($plugin, $pipe_recherche = false, $operation = 'raz') {
801 801
 
802
-	// creer le repertoire cache/ si necessaire ! (installation notamment)
803
-	$cache = sous_repertoire(_DIR_CACHE, '', false, true);
804
-
805
-	// Si on n'a ni cache accessible, ni connexion SQL, on ne peut pas faire grand chose encore.
806
-	if (!$cache and !spip_connect()) {
807
-		return false;
808
-	}
809
-
810
-	if ($operation != 'raz') {
811
-		$plugin_valides = liste_chemin_plugin_actifs();
812
-		$plugin_valides = is_plugin_dir($plugin_valides);
813
-		if (defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) {
814
-			$plugin_valides_supp = liste_chemin_plugin_actifs(_DIR_PLUGINS_SUPPL);
815
-			$plugin_valides_supp = is_plugin_dir($plugin_valides_supp, _DIR_PLUGINS_SUPPL);
816
-			$plugin_valides = array_merge($plugin_valides, $plugin_valides_supp);
817
-		}
818
-		// si des plugins sont en attentes (coches mais impossible a activer)
819
-		// on les reinjecte ici
820
-		if (
821
-			isset($GLOBALS['meta']['plugin_attente'])
822
-			and $a = unserialize($GLOBALS['meta']['plugin_attente'])
823
-		) {
824
-			$plugin_valides = $plugin_valides + liste_chemin_plugin($a);
825
-		}
826
-
827
-		if ($operation == 'ajoute') {
828
-			$plugin = array_merge($plugin_valides, $plugin);
829
-		} elseif ($operation == 'enleve') {
830
-			$plugin = array_diff($plugin_valides, $plugin);
831
-		} else {
832
-			$plugin = $plugin_valides;
833
-		}
834
-	}
835
-	$actifs_avant = isset($GLOBALS['meta']['plugin']) ? $GLOBALS['meta']['plugin'] : '';
836
-
837
-	// si une fonction de gestion de dependances existe, l'appeler ici
838
-	if ($ajouter_dependances = charger_fonction('ajouter_dependances', 'plugins', true)) {
839
-		$plugin = $ajouter_dependances($plugin);
840
-	}
841
-
842
-	// recharger le xml des plugins a activer
843
-	// on force le reload ici, meme si le fichier xml n'a pas change
844
-	// pour ne pas rater l'ajout ou la suppression d'un fichier fonctions/options/administrations
845
-	// pourra etre evite quand on ne supportera plus les plugin.xml
846
-	// en deplacant la detection de ces fichiers dans la compilation ci dessous
847
-	list($infos, $liste, $invalides) = liste_plugin_valides($plugin, true);
848
-	// trouver l'ordre d'activation
849
-	list($plugin_valides, $ordre, $reste) = plugin_trier($infos, $liste);
850
-	if ($invalides or $reste) {
851
-		plugins_erreurs(array_merge($invalides, $reste), $liste, $infos);
852
-	}
853
-
854
-	// Ignorer les plugins necessitant une lib absente
855
-	// et preparer la meta d'entete Http
856
-	$err = $msg = $header = [];
857
-	foreach ($plugin_valides as $p => $resume) {
858
-		// Les headers ne doivent pas indiquer les versions des extensions PHP, ni la version PHP
859
-		if (0 !== strpos($p, 'PHP:') and $p !== 'PHP') {
860
-			$header[] = $p . ($resume['version'] ? '(' . $resume['version'] . ')' : '');
861
-		}
862
-		if ($resume['dir']) {
863
-			foreach ($infos[$resume['dir_type']][$resume['dir']]['lib'] as $l) {
864
-				if (!find_in_path($l['nom'], 'lib/')) {
865
-					$err[$p] = $resume;
866
-					$msg[$p][] = $l;
867
-					unset($plugin_valides[$p]);
868
-				}
869
-			}
870
-		}
871
-	}
872
-	if ($err) {
873
-		plugins_erreurs($err, '', $infos, $msg);
874
-	}
875
-
876
-	if (isset($GLOBALS['meta']['message_crash_plugins'])) {
877
-		effacer_meta('message_crash_plugins');
878
-	}
879
-	ecrire_meta('plugin', serialize($plugin_valides));
880
-	$liste = array_diff_key($liste, $plugin_valides);
881
-	ecrire_meta('plugin_attente', serialize($liste));
882
-	$header = strtolower(implode(',', $header));
883
-	if (!isset($GLOBALS['spip_header_silencieux']) or !$GLOBALS['spip_header_silencieux']) {
884
-		ecrire_fichier(
885
-			_DIR_VAR . 'config.txt',
886
-			(defined('_HEADER_COMPOSED_BY') ? _HEADER_COMPOSED_BY : 'Composed-By: SPIP') . ' ' . $GLOBALS['spip_version_affichee'] . ' @ www.spip.net + ' . $header
887
-		);
888
-	} else {
889
-		@unlink(_DIR_VAR . 'config.txt');
890
-	}
891
-	// generer charger_plugins_chemin.php
892
-	plugins_precompile_chemin($plugin_valides, $ordre);
893
-	// generer les fichiers
894
-	// - charger_plugins_options.php
895
-	// - charger_plugins_fonctions.php
896
-	plugins_precompile_xxxtions($plugin_valides, $ordre);
897
-	// charger les chemins des plugins et les fichiers d'options
898
-	// (qui peuvent déclarer / utiliser des pipelines, ajouter d'autres chemins)
899
-	plugins_amorcer_plugins_actifs();
900
-	// mise a jour de la matrice des pipelines
901
-	$prepend_code = pipeline_matrice_precompile($plugin_valides, $ordre, $pipe_recherche);
902
-	// generer le fichier _CACHE_PIPELINE
903
-	pipeline_precompile($prepend_code);
904
-
905
-	if (spip_connect()) {
906
-		// lancer et initialiser les nouveaux crons !
907
-		include_spip('inc/genie');
908
-		genie_queue_watch_dist();
909
-	}
910
-
911
-	return ($GLOBALS['meta']['plugin'] != $actifs_avant);
802
+    // creer le repertoire cache/ si necessaire ! (installation notamment)
803
+    $cache = sous_repertoire(_DIR_CACHE, '', false, true);
804
+
805
+    // Si on n'a ni cache accessible, ni connexion SQL, on ne peut pas faire grand chose encore.
806
+    if (!$cache and !spip_connect()) {
807
+        return false;
808
+    }
809
+
810
+    if ($operation != 'raz') {
811
+        $plugin_valides = liste_chemin_plugin_actifs();
812
+        $plugin_valides = is_plugin_dir($plugin_valides);
813
+        if (defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) {
814
+            $plugin_valides_supp = liste_chemin_plugin_actifs(_DIR_PLUGINS_SUPPL);
815
+            $plugin_valides_supp = is_plugin_dir($plugin_valides_supp, _DIR_PLUGINS_SUPPL);
816
+            $plugin_valides = array_merge($plugin_valides, $plugin_valides_supp);
817
+        }
818
+        // si des plugins sont en attentes (coches mais impossible a activer)
819
+        // on les reinjecte ici
820
+        if (
821
+            isset($GLOBALS['meta']['plugin_attente'])
822
+            and $a = unserialize($GLOBALS['meta']['plugin_attente'])
823
+        ) {
824
+            $plugin_valides = $plugin_valides + liste_chemin_plugin($a);
825
+        }
826
+
827
+        if ($operation == 'ajoute') {
828
+            $plugin = array_merge($plugin_valides, $plugin);
829
+        } elseif ($operation == 'enleve') {
830
+            $plugin = array_diff($plugin_valides, $plugin);
831
+        } else {
832
+            $plugin = $plugin_valides;
833
+        }
834
+    }
835
+    $actifs_avant = isset($GLOBALS['meta']['plugin']) ? $GLOBALS['meta']['plugin'] : '';
836
+
837
+    // si une fonction de gestion de dependances existe, l'appeler ici
838
+    if ($ajouter_dependances = charger_fonction('ajouter_dependances', 'plugins', true)) {
839
+        $plugin = $ajouter_dependances($plugin);
840
+    }
841
+
842
+    // recharger le xml des plugins a activer
843
+    // on force le reload ici, meme si le fichier xml n'a pas change
844
+    // pour ne pas rater l'ajout ou la suppression d'un fichier fonctions/options/administrations
845
+    // pourra etre evite quand on ne supportera plus les plugin.xml
846
+    // en deplacant la detection de ces fichiers dans la compilation ci dessous
847
+    list($infos, $liste, $invalides) = liste_plugin_valides($plugin, true);
848
+    // trouver l'ordre d'activation
849
+    list($plugin_valides, $ordre, $reste) = plugin_trier($infos, $liste);
850
+    if ($invalides or $reste) {
851
+        plugins_erreurs(array_merge($invalides, $reste), $liste, $infos);
852
+    }
853
+
854
+    // Ignorer les plugins necessitant une lib absente
855
+    // et preparer la meta d'entete Http
856
+    $err = $msg = $header = [];
857
+    foreach ($plugin_valides as $p => $resume) {
858
+        // Les headers ne doivent pas indiquer les versions des extensions PHP, ni la version PHP
859
+        if (0 !== strpos($p, 'PHP:') and $p !== 'PHP') {
860
+            $header[] = $p . ($resume['version'] ? '(' . $resume['version'] . ')' : '');
861
+        }
862
+        if ($resume['dir']) {
863
+            foreach ($infos[$resume['dir_type']][$resume['dir']]['lib'] as $l) {
864
+                if (!find_in_path($l['nom'], 'lib/')) {
865
+                    $err[$p] = $resume;
866
+                    $msg[$p][] = $l;
867
+                    unset($plugin_valides[$p]);
868
+                }
869
+            }
870
+        }
871
+    }
872
+    if ($err) {
873
+        plugins_erreurs($err, '', $infos, $msg);
874
+    }
875
+
876
+    if (isset($GLOBALS['meta']['message_crash_plugins'])) {
877
+        effacer_meta('message_crash_plugins');
878
+    }
879
+    ecrire_meta('plugin', serialize($plugin_valides));
880
+    $liste = array_diff_key($liste, $plugin_valides);
881
+    ecrire_meta('plugin_attente', serialize($liste));
882
+    $header = strtolower(implode(',', $header));
883
+    if (!isset($GLOBALS['spip_header_silencieux']) or !$GLOBALS['spip_header_silencieux']) {
884
+        ecrire_fichier(
885
+            _DIR_VAR . 'config.txt',
886
+            (defined('_HEADER_COMPOSED_BY') ? _HEADER_COMPOSED_BY : 'Composed-By: SPIP') . ' ' . $GLOBALS['spip_version_affichee'] . ' @ www.spip.net + ' . $header
887
+        );
888
+    } else {
889
+        @unlink(_DIR_VAR . 'config.txt');
890
+    }
891
+    // generer charger_plugins_chemin.php
892
+    plugins_precompile_chemin($plugin_valides, $ordre);
893
+    // generer les fichiers
894
+    // - charger_plugins_options.php
895
+    // - charger_plugins_fonctions.php
896
+    plugins_precompile_xxxtions($plugin_valides, $ordre);
897
+    // charger les chemins des plugins et les fichiers d'options
898
+    // (qui peuvent déclarer / utiliser des pipelines, ajouter d'autres chemins)
899
+    plugins_amorcer_plugins_actifs();
900
+    // mise a jour de la matrice des pipelines
901
+    $prepend_code = pipeline_matrice_precompile($plugin_valides, $ordre, $pipe_recherche);
902
+    // generer le fichier _CACHE_PIPELINE
903
+    pipeline_precompile($prepend_code);
904
+
905
+    if (spip_connect()) {
906
+        // lancer et initialiser les nouveaux crons !
907
+        include_spip('inc/genie');
908
+        genie_queue_watch_dist();
909
+    }
910
+
911
+    return ($GLOBALS['meta']['plugin'] != $actifs_avant);
912 912
 }
913 913
 
914 914
 /**
@@ -927,74 +927,74 @@  discard block
 block discarded – undo
927 927
  *     Couples (prefixe => infos complètes) des plugins qui seront actifs, dans l'ordre de leurs dépendances
928 928
 **/
929 929
 function plugins_precompile_chemin($plugin_valides, $ordre) {
930
-	$chemins = [
931
-		'public' => [],
932
-		'prive' => []
933
-	];
934
-	$contenu = '';
935
-	foreach ($ordre as $p => $info) {
936
-		// $ordre peur contenir des plugins en attente et non valides pour ce hit
937
-		if (isset($plugin_valides[$p])) {
938
-			$dir_type = $plugin_valides[$p]['dir_type'];
939
-			$plug = $plugin_valides[$p]['dir'];
940
-			// definir le plugin, donc le path avant l'include du fichier options
941
-			// permet de faire des include_spip pour attraper un inc_ du plugin
942
-
943
-			$dir = $dir_type . ".'" . $plug . "/'";
944
-
945
-			$prefix = strtoupper(preg_replace(',\W,', '_', $info['prefix']));
946
-			if (
947
-				$prefix !== 'SPIP'
948
-				and strpos($dir, ':') === false // exclure le cas des procure:
949
-			) {
950
-				$contenu .= "define('_DIR_PLUGIN_$prefix',$dir);\n";
951
-				if (!$info['chemin']) {
952
-					$chemins['public'][] = "_DIR_PLUGIN_$prefix";
953
-					$chemins['prive'][] = "_DIR_PLUGIN_$prefix";
954
-					if (is_dir(constant($dir_type) . $plug . '/squelettes/')) {
955
-						$chemins['public'][] = "_DIR_PLUGIN_{$prefix}.'squelettes/'";
956
-					}
957
-				}
958
-				else {
959
-					foreach ($info['chemin'] as $chemin) {
960
-						if (
961
-							!isset($chemin['version']) or plugin_version_compatible(
962
-								$chemin['version'],
963
-								$GLOBALS['spip_version_branche'],
964
-								'spip'
965
-							)
966
-						) {
967
-							$dir = $chemin['path'];
968
-							if (strlen($dir) and $dir[0] == '/') {
969
-								$dir = substr($dir, 1);
970
-							}
971
-							if (strlen($dir) and $dir == './') {
972
-								$dir = '';
973
-							}
974
-							if (strlen($dir)) {
975
-								$dir = rtrim($dir, '/') . '/';
976
-							}
977
-							if (!isset($chemin['type']) or $chemin['type'] == 'public') {
978
-								$chemins['public'][] = "_DIR_PLUGIN_$prefix" . (strlen($dir) ? ".'$dir'" : '');
979
-							}
980
-							if (!isset($chemin['type']) or $chemin['type'] == 'prive') {
981
-								$chemins['prive'][] = "_DIR_PLUGIN_$prefix" . (strlen($dir) ? ".'$dir'" : '');
982
-							}
983
-						}
984
-					}
985
-				}
986
-			}
987
-		}
988
-	}
989
-	if (count($chemins['public']) or count($chemins['prive'])) {
990
-		$contenu .= 'if (_DIR_RESTREINT) _chemin([' . implode(
991
-			',',
992
-			array_reverse($chemins['public'])
993
-		) . "]);\n"
994
-			. 'else _chemin([' . implode(',', array_reverse($chemins['prive'])) . "]);\n";
995
-	}
996
-
997
-	ecrire_fichier_php(_CACHE_PLUGINS_PATH, $contenu);
930
+    $chemins = [
931
+        'public' => [],
932
+        'prive' => []
933
+    ];
934
+    $contenu = '';
935
+    foreach ($ordre as $p => $info) {
936
+        // $ordre peur contenir des plugins en attente et non valides pour ce hit
937
+        if (isset($plugin_valides[$p])) {
938
+            $dir_type = $plugin_valides[$p]['dir_type'];
939
+            $plug = $plugin_valides[$p]['dir'];
940
+            // definir le plugin, donc le path avant l'include du fichier options
941
+            // permet de faire des include_spip pour attraper un inc_ du plugin
942
+
943
+            $dir = $dir_type . ".'" . $plug . "/'";
944
+
945
+            $prefix = strtoupper(preg_replace(',\W,', '_', $info['prefix']));
946
+            if (
947
+                $prefix !== 'SPIP'
948
+                and strpos($dir, ':') === false // exclure le cas des procure:
949
+            ) {
950
+                $contenu .= "define('_DIR_PLUGIN_$prefix',$dir);\n";
951
+                if (!$info['chemin']) {
952
+                    $chemins['public'][] = "_DIR_PLUGIN_$prefix";
953
+                    $chemins['prive'][] = "_DIR_PLUGIN_$prefix";
954
+                    if (is_dir(constant($dir_type) . $plug . '/squelettes/')) {
955
+                        $chemins['public'][] = "_DIR_PLUGIN_{$prefix}.'squelettes/'";
956
+                    }
957
+                }
958
+                else {
959
+                    foreach ($info['chemin'] as $chemin) {
960
+                        if (
961
+                            !isset($chemin['version']) or plugin_version_compatible(
962
+                                $chemin['version'],
963
+                                $GLOBALS['spip_version_branche'],
964
+                                'spip'
965
+                            )
966
+                        ) {
967
+                            $dir = $chemin['path'];
968
+                            if (strlen($dir) and $dir[0] == '/') {
969
+                                $dir = substr($dir, 1);
970
+                            }
971
+                            if (strlen($dir) and $dir == './') {
972
+                                $dir = '';
973
+                            }
974
+                            if (strlen($dir)) {
975
+                                $dir = rtrim($dir, '/') . '/';
976
+                            }
977
+                            if (!isset($chemin['type']) or $chemin['type'] == 'public') {
978
+                                $chemins['public'][] = "_DIR_PLUGIN_$prefix" . (strlen($dir) ? ".'$dir'" : '');
979
+                            }
980
+                            if (!isset($chemin['type']) or $chemin['type'] == 'prive') {
981
+                                $chemins['prive'][] = "_DIR_PLUGIN_$prefix" . (strlen($dir) ? ".'$dir'" : '');
982
+                            }
983
+                        }
984
+                    }
985
+                }
986
+            }
987
+        }
988
+    }
989
+    if (count($chemins['public']) or count($chemins['prive'])) {
990
+        $contenu .= 'if (_DIR_RESTREINT) _chemin([' . implode(
991
+            ',',
992
+            array_reverse($chemins['public'])
993
+        ) . "]);\n"
994
+            . 'else _chemin([' . implode(',', array_reverse($chemins['prive'])) . "]);\n";
995
+    }
996
+
997
+    ecrire_fichier_php(_CACHE_PLUGINS_PATH, $contenu);
998 998
 }
999 999
 
1000 1000
 /**
@@ -1012,67 +1012,67 @@  discard block
 block discarded – undo
1012 1012
  *     Couples (prefixe => infos complètes) des plugins qui seront actifs, dans l'ordre de leurs dépendances
1013 1013
 **/
1014 1014
 function plugins_precompile_xxxtions($plugin_valides, $ordre) {
1015
-	$contenu = ['options' => '', 'fonctions' => ''];
1016
-	$boutons = [];
1017
-	$onglets = [];
1018
-	$sign = '';
1019
-
1020
-	foreach ($ordre as $p => $info) {
1021
-		// $ordre peur contenir des plugins en attente et non valides pour ce hit
1022
-		if (isset($plugin_valides[$p])) {
1023
-			$dir_type = $plugin_valides[$p]['dir_type'];
1024
-			$plug = $plugin_valides[$p]['dir'];
1025
-			$dir = constant($dir_type);
1026
-			$root_dir_type = str_replace('_DIR_', '_ROOT_', $dir_type);
1027
-			if ($info['menu']) {
1028
-				$boutons = array_merge($boutons, $info['menu']);
1029
-			}
1030
-			if ($info['onglet']) {
1031
-				$onglets = array_merge($onglets, $info['onglet']);
1032
-			}
1033
-			foreach ($contenu as $charge => $v) {
1034
-				// si pas declare/detecte a la lecture du paquet.xml,
1035
-				// detecer a nouveau ici puisque son ajout ne provoque pas une modif du paquet.xml
1036
-				// donc ni sa relecture, ni sa detection
1037
-				if (
1038
-					!isset($info[$charge])
1039
-					and $dir // exclure le cas du plugin "SPIP"
1040
-					and strpos($dir, ':') === false // exclure le cas des procure:
1041
-					and file_exists("$dir$plug/paquet.xml") // uniquement pour les paquet.xml
1042
-				) {
1043
-					if (is_readable("$dir$plug/" . ($file = $info['prefix'] . '_' . $charge . '.php'))) {
1044
-						$info[$charge] = [$file];
1045
-					}
1046
-				}
1047
-				if (isset($info[$charge])) {
1048
-					$files = $info[$charge];
1049
-					foreach ($files as $k => $file) {
1050
-						// on genere un if file_exists devant chaque include
1051
-						// pour pouvoir garder le meme niveau d'erreur general
1052
-						$file = trim($file);
1053
-						if (
1054
-							!is_readable("$dir$plug/$file")
1055
-							// uniquement pour les paquet.xml
1056
-							and file_exists("$dir$plug/paquet.xml")
1057
-						) {
1058
-							unset($info[$charge][$k]);
1059
-						} else {
1060
-							$_file = $root_dir_type . ".'$plug/$file'";
1061
-							$contenu[$charge] .= "include_once_check($_file);\n";
1062
-						}
1063
-					}
1064
-				}
1065
-			}
1066
-			$sign .= md5(serialize($info));
1067
-		}
1068
-	}
1069
-
1070
-	$contenu['options'] = "define('_PLUGINS_HASH','" . md5($sign) . "');\n" . $contenu['options'];
1071
-	$contenu['fonctions'] .= plugin_ongletbouton('boutons_plugins', $boutons)
1072
-		. plugin_ongletbouton('onglets_plugins', $onglets);
1073
-
1074
-	ecrire_fichier_php(_CACHE_PLUGINS_OPT, $contenu['options']);
1075
-	ecrire_fichier_php(_CACHE_PLUGINS_FCT, $contenu['fonctions']);
1015
+    $contenu = ['options' => '', 'fonctions' => ''];
1016
+    $boutons = [];
1017
+    $onglets = [];
1018
+    $sign = '';
1019
+
1020
+    foreach ($ordre as $p => $info) {
1021
+        // $ordre peur contenir des plugins en attente et non valides pour ce hit
1022
+        if (isset($plugin_valides[$p])) {
1023
+            $dir_type = $plugin_valides[$p]['dir_type'];
1024
+            $plug = $plugin_valides[$p]['dir'];
1025
+            $dir = constant($dir_type);
1026
+            $root_dir_type = str_replace('_DIR_', '_ROOT_', $dir_type);
1027
+            if ($info['menu']) {
1028
+                $boutons = array_merge($boutons, $info['menu']);
1029
+            }
1030
+            if ($info['onglet']) {
1031
+                $onglets = array_merge($onglets, $info['onglet']);
1032
+            }
1033
+            foreach ($contenu as $charge => $v) {
1034
+                // si pas declare/detecte a la lecture du paquet.xml,
1035
+                // detecer a nouveau ici puisque son ajout ne provoque pas une modif du paquet.xml
1036
+                // donc ni sa relecture, ni sa detection
1037
+                if (
1038
+                    !isset($info[$charge])
1039
+                    and $dir // exclure le cas du plugin "SPIP"
1040
+                    and strpos($dir, ':') === false // exclure le cas des procure:
1041
+                    and file_exists("$dir$plug/paquet.xml") // uniquement pour les paquet.xml
1042
+                ) {
1043
+                    if (is_readable("$dir$plug/" . ($file = $info['prefix'] . '_' . $charge . '.php'))) {
1044
+                        $info[$charge] = [$file];
1045
+                    }
1046
+                }
1047
+                if (isset($info[$charge])) {
1048
+                    $files = $info[$charge];
1049
+                    foreach ($files as $k => $file) {
1050
+                        // on genere un if file_exists devant chaque include
1051
+                        // pour pouvoir garder le meme niveau d'erreur general
1052
+                        $file = trim($file);
1053
+                        if (
1054
+                            !is_readable("$dir$plug/$file")
1055
+                            // uniquement pour les paquet.xml
1056
+                            and file_exists("$dir$plug/paquet.xml")
1057
+                        ) {
1058
+                            unset($info[$charge][$k]);
1059
+                        } else {
1060
+                            $_file = $root_dir_type . ".'$plug/$file'";
1061
+                            $contenu[$charge] .= "include_once_check($_file);\n";
1062
+                        }
1063
+                    }
1064
+                }
1065
+            }
1066
+            $sign .= md5(serialize($info));
1067
+        }
1068
+    }
1069
+
1070
+    $contenu['options'] = "define('_PLUGINS_HASH','" . md5($sign) . "');\n" . $contenu['options'];
1071
+    $contenu['fonctions'] .= plugin_ongletbouton('boutons_plugins', $boutons)
1072
+        . plugin_ongletbouton('onglets_plugins', $onglets);
1073
+
1074
+    ecrire_fichier_php(_CACHE_PLUGINS_OPT, $contenu['options']);
1075
+    ecrire_fichier_php(_CACHE_PLUGINS_FCT, $contenu['fonctions']);
1076 1076
 }
1077 1077
 
1078 1078
 /**
@@ -1091,24 +1091,24 @@  discard block
 block discarded – undo
1091 1091
  * @return string Code php
1092 1092
  */
1093 1093
 function plugin_ongletbouton($nom, $val) {
1094
-	if (!$val) {
1095
-		$val = [];
1096
-	}
1097
-
1098
-	$val = serialize($val);
1099
-	$md5 = md5($val);
1100
-
1101
-	if (!defined("_UPDATED_$nom")) {
1102
-		define("_UPDATED_$nom", $val);
1103
-		define("_UPDATED_md5_$nom", $md5);
1104
-	}
1105
-	$val = "unserialize('" . str_replace("'", "\'", $val) . "')";
1106
-
1107
-	return
1108
-		"if (!function_exists('$nom')) {\n"
1109
-		. "function $nom(){return defined('_UPDATED_$nom')?unserialize(_UPDATED_$nom):$val;}\n"
1110
-		. "function md5_$nom(){return defined('_UPDATED_md5_$nom')?_UPDATED_md5_$nom:'" . $md5 . "';}\n"
1111
-		. "}\n";
1094
+    if (!$val) {
1095
+        $val = [];
1096
+    }
1097
+
1098
+    $val = serialize($val);
1099
+    $md5 = md5($val);
1100
+
1101
+    if (!defined("_UPDATED_$nom")) {
1102
+        define("_UPDATED_$nom", $val);
1103
+        define("_UPDATED_md5_$nom", $md5);
1104
+    }
1105
+    $val = "unserialize('" . str_replace("'", "\'", $val) . "')";
1106
+
1107
+    return
1108
+        "if (!function_exists('$nom')) {\n"
1109
+        . "function $nom(){return defined('_UPDATED_$nom')?unserialize(_UPDATED_$nom):$val;}\n"
1110
+        . "function md5_$nom(){return defined('_UPDATED_md5_$nom')?_UPDATED_md5_$nom:'" . $md5 . "';}\n"
1111
+        . "}\n";
1112 1112
 }
1113 1113
 
1114 1114
 /**
@@ -1123,15 +1123,15 @@  discard block
 block discarded – undo
1123 1123
 **/
1124 1124
 function plugins_amorcer_plugins_actifs() {
1125 1125
 
1126
-	if (@is_readable(_CACHE_PLUGINS_PATH)) {
1127
-		include_once(_CACHE_PLUGINS_PATH);
1128
-	}
1126
+    if (@is_readable(_CACHE_PLUGINS_PATH)) {
1127
+        include_once(_CACHE_PLUGINS_PATH);
1128
+    }
1129 1129
 
1130
-	if (@is_readable(_CACHE_PLUGINS_OPT)) {
1131
-		include_once(_CACHE_PLUGINS_OPT);
1132
-	} else {
1133
-		spip_log('pipelines desactives: impossible de produire ' . _CACHE_PLUGINS_OPT);
1134
-	}
1130
+    if (@is_readable(_CACHE_PLUGINS_OPT)) {
1131
+        include_once(_CACHE_PLUGINS_OPT);
1132
+    } else {
1133
+        spip_log('pipelines desactives: impossible de produire ' . _CACHE_PLUGINS_OPT);
1134
+    }
1135 1135
 }
1136 1136
 
1137 1137
 /**
@@ -1154,140 +1154,140 @@  discard block
 block discarded – undo
1154 1154
  *     Couples (nom du pipeline => Code PHP à insérer au début du pipeline)
1155 1155
 **/
1156 1156
 function pipeline_matrice_precompile($plugin_valides, $ordre, $pipe_recherche) {
1157
-	static $liste_pipe_manquants = [];
1158
-	if (($pipe_recherche) && (!in_array($pipe_recherche, $liste_pipe_manquants))) {
1159
-		$liste_pipe_manquants[] = $pipe_recherche;
1160
-	}
1161
-
1162
-	$prepend_code = [];
1163
-
1164
-	foreach ($ordre as $p => $info) {
1165
-		// $ordre peur contenir des plugins en attente et non valides pour ce hit
1166
-		if (isset($plugin_valides[$p])) {
1167
-			$dir_type = $plugin_valides[$p]['dir_type'];
1168
-			$root_dir_type = str_replace('_DIR_', '_ROOT_', $dir_type);
1169
-			$plug = $plugin_valides[$p]['dir'];
1170
-			$prefix = (($info['prefix'] == 'spip') ? '' : $info['prefix'] . '_');
1171
-			if (isset($info['pipeline']) and is_array($info['pipeline'])) {
1172
-				foreach ($info['pipeline'] as $pipe) {
1173
-					$nom = $pipe['nom'];
1174
-					if (isset($pipe['action'])) {
1175
-						$action = $pipe['action'];
1176
-					} else {
1177
-						$action = $nom;
1178
-					}
1179
-					$nomlower = strtolower($nom);
1180
-					if (
1181
-						$nomlower != $nom
1182
-						and isset($GLOBALS['spip_pipeline'][$nom])
1183
-						and !isset($GLOBALS['spip_pipeline'][$nomlower])
1184
-					) {
1185
-						$GLOBALS['spip_pipeline'][$nomlower] = $GLOBALS['spip_pipeline'][$nom];
1186
-						unset($GLOBALS['spip_pipeline'][$nom]);
1187
-					}
1188
-					$nom = $nomlower;
1189
-					// une action vide est une declaration qui ne doit pas etre compilee !
1190
-					if (!isset($GLOBALS['spip_pipeline'][$nom])) { // creer le pipeline eventuel
1191
-					$GLOBALS['spip_pipeline'][$nom] = '';
1192
-					}
1193
-					if ($action) {
1194
-						if (strpos($GLOBALS['spip_pipeline'][$nom], "|$prefix$action") === false) {
1195
-							$GLOBALS['spip_pipeline'][$nom] = preg_replace(
1196
-								',(\|\||$),',
1197
-								"|$prefix$action\\1",
1198
-								$GLOBALS['spip_pipeline'][$nom],
1199
-								1
1200
-							);
1201
-						}
1202
-						if (isset($pipe['inclure'])) {
1203
-							$GLOBALS['spip_matrice']["$prefix$action"] =
1204
-								"$root_dir_type:$plug/" . $pipe['inclure'];
1205
-						}
1206
-					}
1207
-				}
1208
-			}
1209
-			if (isset($info['genie']) and count($info['genie'])) {
1210
-				if (!isset($prepend_code['taches_generales_cron'])) {
1211
-					$prepend_code['taches_generales_cron'] = '';
1212
-				}
1213
-				foreach ($info['genie'] as $genie) {
1214
-					$nom = $prefix . $genie['nom'];
1215
-					$periode = max(60, intval($genie['periode']));
1216
-					if (charger_fonction($nom, 'genie', true)) {
1217
-						$prepend_code['taches_generales_cron'] .= "\$val['$nom'] = $periode;\n";
1218
-					} else {
1219
-						spip_log("Fonction genie_$nom introuvable", _LOG_ERREUR);
1220
-					}
1221
-				}
1222
-			}
1223
-			if (isset($info['style']) and count($info['style'])) {
1224
-				if (!isset($prepend_code['insert_head_css'])) {
1225
-					$prepend_code['insert_head_css'] = '';
1226
-				}
1227
-				if (!isset($prepend_code['header_prive_css'])) {
1228
-					$prepend_code['header_prive_css'] = '';
1229
-				}
1230
-				foreach ($info['style'] as $style) {
1231
-					if (isset($style['path']) and $style['path']) {
1232
-						$code = "if (\$f=timestamp(direction_css(find_in_path('" . addslashes($style['path']) . "')))) ";
1233
-					} else {
1234
-						$code = "if (\$f='" . addslashes($style['url']) . "') ";
1235
-					}
1236
-					$code .= "\$val .= '<link rel=\"stylesheet\" href=\"'.\$f.'\" type=\"text/css\"";
1237
-					if (isset($style['media']) and strlen($style['media'])) {
1238
-						$code .= ' media="' . addslashes($style['media']) . '"';
1239
-					}
1240
-					$code .= "/>';\n";
1241
-					if ($style['type'] != 'prive') {
1242
-						$prepend_code['insert_head_css'] .= $code;
1243
-					}
1244
-					if ($style['type'] != 'public') {
1245
-						$prepend_code['header_prive_css'] .= $code;
1246
-					}
1247
-				}
1248
-			}
1249
-			if (!isset($prepend_code['insert_head'])) {
1250
-				$prepend_code['insert_head'] = '';
1251
-			}
1252
-			if (!isset($prepend_code['header_prive'])) {
1253
-				$prepend_code['header_prive'] = '';
1254
-			}
1255
-			if (isset($info['script']) and count($info['script'])) {
1256
-				foreach ($info['script'] as $script) {
1257
-					if (isset($script['path']) and $script['path']) {
1258
-						$code = "if (\$f=timestamp(find_in_path('" . addslashes($script['path']) . "'))) ";
1259
-					} else {
1260
-						$code = "if (\$f='" . addslashes($script['url']) . "') ";
1261
-					}
1262
-					$code .= "\$val .= '<script src=\"'.\$f.'\" type=\"text/javascript\"></script>';\n";
1263
-					if ($script['type'] != 'prive') {
1264
-						$prepend_code['insert_head'] .= $code;
1265
-					}
1266
-					if ($script['type'] != 'public') {
1267
-						$prepend_code['header_prive'] .= $code;
1268
-					}
1269
-				}
1270
-			}
1271
-		}
1272
-	}
1273
-
1274
-	$prepend_code['insert_head'] =
1275
-		"include_once_check(_DIR_RESTREINT . 'inc/pipelines.php');\n"
1276
-		. "\$val = minipipe('f_jQuery', \$val);\n"
1277
-		. $prepend_code['insert_head'];
1278
-	$prepend_code['header_prive'] =
1279
-		"include_once_check(_DIR_RESTREINT . 'inc/pipelines_ecrire.php');\n"
1280
-		. "\$val = minipipe('f_jQuery_prive', \$val);\n"
1281
-		. $prepend_code['header_prive'];
1282
-
1283
-	// on ajoute les pipe qui ont ete recenses manquants
1284
-	foreach ($liste_pipe_manquants as $add_pipe) {
1285
-		if (!isset($GLOBALS['spip_pipeline'][$add_pipe])) {
1286
-			$GLOBALS['spip_pipeline'][$add_pipe] = '';
1287
-		}
1288
-	}
1289
-
1290
-	return $prepend_code;
1157
+    static $liste_pipe_manquants = [];
1158
+    if (($pipe_recherche) && (!in_array($pipe_recherche, $liste_pipe_manquants))) {
1159
+        $liste_pipe_manquants[] = $pipe_recherche;
1160
+    }
1161
+
1162
+    $prepend_code = [];
1163
+
1164
+    foreach ($ordre as $p => $info) {
1165
+        // $ordre peur contenir des plugins en attente et non valides pour ce hit
1166
+        if (isset($plugin_valides[$p])) {
1167
+            $dir_type = $plugin_valides[$p]['dir_type'];
1168
+            $root_dir_type = str_replace('_DIR_', '_ROOT_', $dir_type);
1169
+            $plug = $plugin_valides[$p]['dir'];
1170
+            $prefix = (($info['prefix'] == 'spip') ? '' : $info['prefix'] . '_');
1171
+            if (isset($info['pipeline']) and is_array($info['pipeline'])) {
1172
+                foreach ($info['pipeline'] as $pipe) {
1173
+                    $nom = $pipe['nom'];
1174
+                    if (isset($pipe['action'])) {
1175
+                        $action = $pipe['action'];
1176
+                    } else {
1177
+                        $action = $nom;
1178
+                    }
1179
+                    $nomlower = strtolower($nom);
1180
+                    if (
1181
+                        $nomlower != $nom
1182
+                        and isset($GLOBALS['spip_pipeline'][$nom])
1183
+                        and !isset($GLOBALS['spip_pipeline'][$nomlower])
1184
+                    ) {
1185
+                        $GLOBALS['spip_pipeline'][$nomlower] = $GLOBALS['spip_pipeline'][$nom];
1186
+                        unset($GLOBALS['spip_pipeline'][$nom]);
1187
+                    }
1188
+                    $nom = $nomlower;
1189
+                    // une action vide est une declaration qui ne doit pas etre compilee !
1190
+                    if (!isset($GLOBALS['spip_pipeline'][$nom])) { // creer le pipeline eventuel
1191
+                    $GLOBALS['spip_pipeline'][$nom] = '';
1192
+                    }
1193
+                    if ($action) {
1194
+                        if (strpos($GLOBALS['spip_pipeline'][$nom], "|$prefix$action") === false) {
1195
+                            $GLOBALS['spip_pipeline'][$nom] = preg_replace(
1196
+                                ',(\|\||$),',
1197
+                                "|$prefix$action\\1",
1198
+                                $GLOBALS['spip_pipeline'][$nom],
1199
+                                1
1200
+                            );
1201
+                        }
1202
+                        if (isset($pipe['inclure'])) {
1203
+                            $GLOBALS['spip_matrice']["$prefix$action"] =
1204
+                                "$root_dir_type:$plug/" . $pipe['inclure'];
1205
+                        }
1206
+                    }
1207
+                }
1208
+            }
1209
+            if (isset($info['genie']) and count($info['genie'])) {
1210
+                if (!isset($prepend_code['taches_generales_cron'])) {
1211
+                    $prepend_code['taches_generales_cron'] = '';
1212
+                }
1213
+                foreach ($info['genie'] as $genie) {
1214
+                    $nom = $prefix . $genie['nom'];
1215
+                    $periode = max(60, intval($genie['periode']));
1216
+                    if (charger_fonction($nom, 'genie', true)) {
1217
+                        $prepend_code['taches_generales_cron'] .= "\$val['$nom'] = $periode;\n";
1218
+                    } else {
1219
+                        spip_log("Fonction genie_$nom introuvable", _LOG_ERREUR);
1220
+                    }
1221
+                }
1222
+            }
1223
+            if (isset($info['style']) and count($info['style'])) {
1224
+                if (!isset($prepend_code['insert_head_css'])) {
1225
+                    $prepend_code['insert_head_css'] = '';
1226
+                }
1227
+                if (!isset($prepend_code['header_prive_css'])) {
1228
+                    $prepend_code['header_prive_css'] = '';
1229
+                }
1230
+                foreach ($info['style'] as $style) {
1231
+                    if (isset($style['path']) and $style['path']) {
1232
+                        $code = "if (\$f=timestamp(direction_css(find_in_path('" . addslashes($style['path']) . "')))) ";
1233
+                    } else {
1234
+                        $code = "if (\$f='" . addslashes($style['url']) . "') ";
1235
+                    }
1236
+                    $code .= "\$val .= '<link rel=\"stylesheet\" href=\"'.\$f.'\" type=\"text/css\"";
1237
+                    if (isset($style['media']) and strlen($style['media'])) {
1238
+                        $code .= ' media="' . addslashes($style['media']) . '"';
1239
+                    }
1240
+                    $code .= "/>';\n";
1241
+                    if ($style['type'] != 'prive') {
1242
+                        $prepend_code['insert_head_css'] .= $code;
1243
+                    }
1244
+                    if ($style['type'] != 'public') {
1245
+                        $prepend_code['header_prive_css'] .= $code;
1246
+                    }
1247
+                }
1248
+            }
1249
+            if (!isset($prepend_code['insert_head'])) {
1250
+                $prepend_code['insert_head'] = '';
1251
+            }
1252
+            if (!isset($prepend_code['header_prive'])) {
1253
+                $prepend_code['header_prive'] = '';
1254
+            }
1255
+            if (isset($info['script']) and count($info['script'])) {
1256
+                foreach ($info['script'] as $script) {
1257
+                    if (isset($script['path']) and $script['path']) {
1258
+                        $code = "if (\$f=timestamp(find_in_path('" . addslashes($script['path']) . "'))) ";
1259
+                    } else {
1260
+                        $code = "if (\$f='" . addslashes($script['url']) . "') ";
1261
+                    }
1262
+                    $code .= "\$val .= '<script src=\"'.\$f.'\" type=\"text/javascript\"></script>';\n";
1263
+                    if ($script['type'] != 'prive') {
1264
+                        $prepend_code['insert_head'] .= $code;
1265
+                    }
1266
+                    if ($script['type'] != 'public') {
1267
+                        $prepend_code['header_prive'] .= $code;
1268
+                    }
1269
+                }
1270
+            }
1271
+        }
1272
+    }
1273
+
1274
+    $prepend_code['insert_head'] =
1275
+        "include_once_check(_DIR_RESTREINT . 'inc/pipelines.php');\n"
1276
+        . "\$val = minipipe('f_jQuery', \$val);\n"
1277
+        . $prepend_code['insert_head'];
1278
+    $prepend_code['header_prive'] =
1279
+        "include_once_check(_DIR_RESTREINT . 'inc/pipelines_ecrire.php');\n"
1280
+        . "\$val = minipipe('f_jQuery_prive', \$val);\n"
1281
+        . $prepend_code['header_prive'];
1282
+
1283
+    // on ajoute les pipe qui ont ete recenses manquants
1284
+    foreach ($liste_pipe_manquants as $add_pipe) {
1285
+        if (!isset($GLOBALS['spip_pipeline'][$add_pipe])) {
1286
+            $GLOBALS['spip_pipeline'][$add_pipe] = '';
1287
+        }
1288
+    }
1289
+
1290
+    return $prepend_code;
1291 1291
 }
1292 1292
 
1293 1293
 /**
@@ -1314,62 +1314,62 @@  discard block
 block discarded – undo
1314 1314
 **/
1315 1315
 function pipeline_precompile($prepend_code = []) {
1316 1316
 
1317
-	$all_pipes = $all_pipes_end = '';
1318
-	if (!empty($GLOBALS['spip_pipeline']['all'])) {
1319
-		$a = explode('||', $GLOBALS['spip_pipeline']['all'], 2);
1320
-		unset($GLOBALS['spip_pipeline']['all']);
1321
-		$all_pipes = trim(array_shift($a));
1322
-		if ($all_pipes) {
1323
-			$all_pipes = '|' . ltrim($all_pipes, '|');
1324
-		}
1325
-		if (count($a)) {
1326
-			$all_pipes_end = '||' . array_shift($a);
1327
-		}
1328
-	}
1329
-	$content = '';
1330
-	foreach ($GLOBALS['spip_pipeline'] as $action => $pipeline) {
1331
-		$s_inc = '';
1332
-		$s_call = '';
1333
-		if ($all_pipes) {
1334
-			$pipeline = preg_replace(',(\|\||$),', "$all_pipes\\1", $pipeline, 1);
1335
-		}
1336
-		if ($all_pipes_end) {
1337
-			$pipeline .= $all_pipes_end;
1338
-		}
1339
-		$pipe = array_filter(explode('|', $pipeline));
1340
-		// Eclater le pipeline en filtres et appliquer chaque filtre
1341
-		foreach ($pipe as $fonc) {
1342
-			$fonc = trim($fonc);
1343
-			$s_call .= '$val = minipipe(\'' . $fonc . '\', $val);' . "\n";
1344
-			if (isset($GLOBALS['spip_matrice'][$fonc])) {
1345
-				$file = $GLOBALS['spip_matrice'][$fonc];
1346
-				$file = "'$file'";
1347
-				// si un _DIR_XXX: est dans la chaine, on extrait la constante
1348
-				if (preg_match(',(_(DIR|ROOT)_[A-Z_]+):,Ums', $file, $regs)) {
1349
-					$dir = $regs[1];
1350
-					$root_dir = str_replace('_DIR_', '_ROOT_', $dir);
1351
-					if (defined($root_dir)) {
1352
-						$dir = $root_dir;
1353
-					}
1354
-					$file = str_replace($regs[0], "'." . $dir . ".'", $file);
1355
-					$file = str_replace("''.", '', $file);
1356
-					$file = str_replace(constant($dir), '', $file);
1357
-				}
1358
-				$s_inc .= "include_once_check($file);\n";
1359
-			}
1360
-		}
1361
-		if (strlen($s_inc)) {
1362
-			$s_inc = "static \$inc=null;\nif (!\$inc){\n$s_inc\$inc=true;\n}\n";
1363
-		}
1364
-		$content .= "// Pipeline $action \n"
1365
-			. "function execute_pipeline_$action(&\$val){\n"
1366
-			. $s_inc
1367
-			. ((isset($prepend_code[$action]) and strlen($prepend_code[$action])) ? trim($prepend_code[$action]) . "\n" : '')
1368
-			. $s_call
1369
-			. "return \$val;\n}\n";
1370
-	}
1371
-	ecrire_fichier_php(_CACHE_PIPELINES, $content);
1372
-	clear_path_cache();
1317
+    $all_pipes = $all_pipes_end = '';
1318
+    if (!empty($GLOBALS['spip_pipeline']['all'])) {
1319
+        $a = explode('||', $GLOBALS['spip_pipeline']['all'], 2);
1320
+        unset($GLOBALS['spip_pipeline']['all']);
1321
+        $all_pipes = trim(array_shift($a));
1322
+        if ($all_pipes) {
1323
+            $all_pipes = '|' . ltrim($all_pipes, '|');
1324
+        }
1325
+        if (count($a)) {
1326
+            $all_pipes_end = '||' . array_shift($a);
1327
+        }
1328
+    }
1329
+    $content = '';
1330
+    foreach ($GLOBALS['spip_pipeline'] as $action => $pipeline) {
1331
+        $s_inc = '';
1332
+        $s_call = '';
1333
+        if ($all_pipes) {
1334
+            $pipeline = preg_replace(',(\|\||$),', "$all_pipes\\1", $pipeline, 1);
1335
+        }
1336
+        if ($all_pipes_end) {
1337
+            $pipeline .= $all_pipes_end;
1338
+        }
1339
+        $pipe = array_filter(explode('|', $pipeline));
1340
+        // Eclater le pipeline en filtres et appliquer chaque filtre
1341
+        foreach ($pipe as $fonc) {
1342
+            $fonc = trim($fonc);
1343
+            $s_call .= '$val = minipipe(\'' . $fonc . '\', $val);' . "\n";
1344
+            if (isset($GLOBALS['spip_matrice'][$fonc])) {
1345
+                $file = $GLOBALS['spip_matrice'][$fonc];
1346
+                $file = "'$file'";
1347
+                // si un _DIR_XXX: est dans la chaine, on extrait la constante
1348
+                if (preg_match(',(_(DIR|ROOT)_[A-Z_]+):,Ums', $file, $regs)) {
1349
+                    $dir = $regs[1];
1350
+                    $root_dir = str_replace('_DIR_', '_ROOT_', $dir);
1351
+                    if (defined($root_dir)) {
1352
+                        $dir = $root_dir;
1353
+                    }
1354
+                    $file = str_replace($regs[0], "'." . $dir . ".'", $file);
1355
+                    $file = str_replace("''.", '', $file);
1356
+                    $file = str_replace(constant($dir), '', $file);
1357
+                }
1358
+                $s_inc .= "include_once_check($file);\n";
1359
+            }
1360
+        }
1361
+        if (strlen($s_inc)) {
1362
+            $s_inc = "static \$inc=null;\nif (!\$inc){\n$s_inc\$inc=true;\n}\n";
1363
+        }
1364
+        $content .= "// Pipeline $action \n"
1365
+            . "function execute_pipeline_$action(&\$val){\n"
1366
+            . $s_inc
1367
+            . ((isset($prepend_code[$action]) and strlen($prepend_code[$action])) ? trim($prepend_code[$action]) . "\n" : '')
1368
+            . $s_call
1369
+            . "return \$val;\n}\n";
1370
+    }
1371
+    ecrire_fichier_php(_CACHE_PIPELINES, $content);
1372
+    clear_path_cache();
1373 1373
 }
1374 1374
 
1375 1375
 
@@ -1382,12 +1382,12 @@  discard block
 block discarded – undo
1382 1382
  *     true si le plugin est actif, false sinon
1383 1383
 **/
1384 1384
 function plugin_est_installe($plug_path) {
1385
-	$plugin_installes = isset($GLOBALS['meta']['plugin_installes']) ? unserialize($GLOBALS['meta']['plugin_installes']) : [];
1386
-	if (!$plugin_installes) {
1387
-		return false;
1388
-	}
1385
+    $plugin_installes = isset($GLOBALS['meta']['plugin_installes']) ? unserialize($GLOBALS['meta']['plugin_installes']) : [];
1386
+    if (!$plugin_installes) {
1387
+        return false;
1388
+    }
1389 1389
 
1390
-	return in_array($plug_path, $plugin_installes);
1390
+    return in_array($plug_path, $plugin_installes);
1391 1391
 }
1392 1392
 
1393 1393
 
@@ -1400,46 +1400,46 @@  discard block
 block discarded – undo
1400 1400
  * @uses plugins_installer_dist()
1401 1401
  **/
1402 1402
 function plugin_installes_meta() {
1403
-	if (isset($GLOBALS['fichier_php_compile_recent'])) {
1404
-		// attendre eventuellement l'invalidation du cache opcode
1405
-		spip_attend_invalidation_opcode_cache($GLOBALS['fichier_php_compile_recent']);
1406
-	}
1407
-
1408
-	$installer_plugins = charger_fonction('installer', 'plugins');
1409
-	$meta_plug_installes = [];
1410
-	foreach (unserialize($GLOBALS['meta']['plugin']) as $prefix => $resume) {
1411
-		if ($plug = $resume['dir']) {
1412
-			$infos = $installer_plugins($plug, 'install', $resume['dir_type']);
1413
-			if ($infos) {
1414
-				if (!is_array($infos) or $infos['install_test'][0]) {
1415
-					$meta_plug_installes[] = $plug;
1416
-				}
1417
-				if (is_array($infos)) {
1418
-					list($ok, $trace) = $infos['install_test'];
1419
-					$titre = _T('plugin_titre_installation', ['plugin' => typo($infos['nom'])]);
1420
-					$result = ($ok ? ((isset($infos['upgrade']) && $infos['upgrade']) ? _T('plugin_info_upgrade_ok') : _T('plugin_info_install_ok')) : _T('avis_operation_echec'));
1421
-					if (_IS_CLI) {
1422
-						include_spip('inc/filtres');
1423
-						$trace = ltrim(textebrut($trace) . "\n" . $result);
1424
-						$trace = '    ' . str_replace("\n", "\n    ", $trace);
1425
-						echo "\n" . ($ok ? 'OK  ' : '/!\ ') . textebrut($titre) . "\n",
1426
-						  $trace,
1427
-						  "\n";
1428
-					}
1429
-					else {
1430
-						include_spip('inc/filtres_boites');
1431
-						echo "<div class='install-plugins svp_retour'>"
1432
-							. boite_ouvrir($titre, ($ok ? 'success' : 'error'))
1433
-							. $trace
1434
-							. "<div class='result'>$result</div>"
1435
-							. boite_fermer()
1436
-							. '</div>';
1437
-					}
1438
-				}
1439
-			}
1440
-		}
1441
-	}
1442
-	ecrire_meta('plugin_installes', serialize($meta_plug_installes), 'non');
1403
+    if (isset($GLOBALS['fichier_php_compile_recent'])) {
1404
+        // attendre eventuellement l'invalidation du cache opcode
1405
+        spip_attend_invalidation_opcode_cache($GLOBALS['fichier_php_compile_recent']);
1406
+    }
1407
+
1408
+    $installer_plugins = charger_fonction('installer', 'plugins');
1409
+    $meta_plug_installes = [];
1410
+    foreach (unserialize($GLOBALS['meta']['plugin']) as $prefix => $resume) {
1411
+        if ($plug = $resume['dir']) {
1412
+            $infos = $installer_plugins($plug, 'install', $resume['dir_type']);
1413
+            if ($infos) {
1414
+                if (!is_array($infos) or $infos['install_test'][0]) {
1415
+                    $meta_plug_installes[] = $plug;
1416
+                }
1417
+                if (is_array($infos)) {
1418
+                    list($ok, $trace) = $infos['install_test'];
1419
+                    $titre = _T('plugin_titre_installation', ['plugin' => typo($infos['nom'])]);
1420
+                    $result = ($ok ? ((isset($infos['upgrade']) && $infos['upgrade']) ? _T('plugin_info_upgrade_ok') : _T('plugin_info_install_ok')) : _T('avis_operation_echec'));
1421
+                    if (_IS_CLI) {
1422
+                        include_spip('inc/filtres');
1423
+                        $trace = ltrim(textebrut($trace) . "\n" . $result);
1424
+                        $trace = '    ' . str_replace("\n", "\n    ", $trace);
1425
+                        echo "\n" . ($ok ? 'OK  ' : '/!\ ') . textebrut($titre) . "\n",
1426
+                            $trace,
1427
+                            "\n";
1428
+                    }
1429
+                    else {
1430
+                        include_spip('inc/filtres_boites');
1431
+                        echo "<div class='install-plugins svp_retour'>"
1432
+                            . boite_ouvrir($titre, ($ok ? 'success' : 'error'))
1433
+                            . $trace
1434
+                            . "<div class='result'>$result</div>"
1435
+                            . boite_fermer()
1436
+                            . '</div>';
1437
+                    }
1438
+                }
1439
+            }
1440
+        }
1441
+    }
1442
+    ecrire_meta('plugin_installes', serialize($meta_plug_installes), 'non');
1443 1443
 }
1444 1444
 
1445 1445
 /**
@@ -1453,29 +1453,29 @@  discard block
 block discarded – undo
1453 1453
  *     Commentaire : code écrit en tout début de fichier, après la balise PHP ouvrante
1454 1454
 **/
1455 1455
 function ecrire_fichier_php($nom, $contenu, $comment = '') {
1456
-	if (!isset($GLOBALS['fichier_php_compile_recent'])) {
1457
-		$GLOBALS['fichier_php_compile_recent'] = 0;
1458
-	}
1459
-
1460
-	$contenu = '<' . '?php' . "\n" . $comment . "\nif (defined('_ECRIRE_INC_VERSION')) {\n" . $contenu . "}\n?" . '>';
1461
-	// si un fichier existe deja on verifie que son contenu change avant de l'ecraser
1462
-	// si pas de modif on ne touche pas au fichier initial
1463
-	if (file_exists($nom)) {
1464
-		if (substr($nom, -4) == '.php') {
1465
-			$fichier_tmp = substr($nom, 0, -4) . '.tmp.php';
1466
-		}
1467
-		else {
1468
-			$fichier_tmp = $nom . '.tmp';
1469
-		}
1470
-		file_put_contents($fichier_tmp, $contenu);
1471
-		if (md5_file($nom) == md5_file($fichier_tmp)) {
1472
-			$GLOBALS['fichier_php_compile_recent'] = max($GLOBALS['fichier_php_compile_recent'], filemtime($nom));
1473
-			@unlink($fichier_tmp);
1474
-			return;
1475
-		}
1476
-		@unlink($fichier_tmp);
1477
-	}
1478
-	ecrire_fichier($nom, $contenu);
1479
-	$GLOBALS['fichier_php_compile_recent'] = max($GLOBALS['fichier_php_compile_recent'], filemtime($nom));
1480
-	spip_clear_opcode_cache(realpath($nom));
1456
+    if (!isset($GLOBALS['fichier_php_compile_recent'])) {
1457
+        $GLOBALS['fichier_php_compile_recent'] = 0;
1458
+    }
1459
+
1460
+    $contenu = '<' . '?php' . "\n" . $comment . "\nif (defined('_ECRIRE_INC_VERSION')) {\n" . $contenu . "}\n?" . '>';
1461
+    // si un fichier existe deja on verifie que son contenu change avant de l'ecraser
1462
+    // si pas de modif on ne touche pas au fichier initial
1463
+    if (file_exists($nom)) {
1464
+        if (substr($nom, -4) == '.php') {
1465
+            $fichier_tmp = substr($nom, 0, -4) . '.tmp.php';
1466
+        }
1467
+        else {
1468
+            $fichier_tmp = $nom . '.tmp';
1469
+        }
1470
+        file_put_contents($fichier_tmp, $contenu);
1471
+        if (md5_file($nom) == md5_file($fichier_tmp)) {
1472
+            $GLOBALS['fichier_php_compile_recent'] = max($GLOBALS['fichier_php_compile_recent'], filemtime($nom));
1473
+            @unlink($fichier_tmp);
1474
+            return;
1475
+        }
1476
+        @unlink($fichier_tmp);
1477
+    }
1478
+    ecrire_fichier($nom, $contenu);
1479
+    $GLOBALS['fichier_php_compile_recent'] = max($GLOBALS['fichier_php_compile_recent'], filemtime($nom));
1480
+    spip_clear_opcode_cache(realpath($nom));
1481 1481
 }
Please login to merge, or discard this patch.
ecrire/inc/filtres_images_mini.php 1 patch
Indentation   +316 added lines, -316 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
  */
19 19
 
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 include_spip('inc/filtres_images_lib_mini'); // par precaution
24 24
 
@@ -31,161 +31,161 @@  discard block
 block discarded – undo
31 31
  *    Le code hexadécimal de la couleur (sans le #) ou le code couleur textuel si non trouvé
32 32
  */
33 33
 function couleur_html_to_hex($couleur) {
34
-	$couleurs_html = [
35
-		'aliceblue' => 'F0F8FF',
36
-		'antiquewhite' => 'FAEBD7',
37
-		'aqua' => '00FFFF',
38
-		'aquamarine' => '7FFFD4',
39
-		'azure' => 'F0FFFF',
40
-		'beige' => 'F5F5DC',
41
-		'bisque' => 'FFE4C4',
42
-		'black' => '000000',
43
-		'blanchedalmond' => 'FFEBCD',
44
-		'blue' => '0000FF',
45
-		'blueviolet' => '8A2BE2',
46
-		'brown' => 'A52A2A',
47
-		'burlywood' => 'DEB887',
48
-		'cadetblue' => '5F9EA0',
49
-		'chartreuse' => '7FFF00',
50
-		'chocolate' => 'D2691E',
51
-		'coral' => 'FF7F50',
52
-		'cornflowerblue' => '6495ED',
53
-		'cornsilk' => 'FFF8DC',
54
-		'crimson' => 'DC143C',
55
-		'cyan' => '00FFFF',
56
-		'darkblue' => '00008B',
57
-		'darkcyan' => '008B8B',
58
-		'darkgoldenrod' => 'B8860B',
59
-		'darkgray' => 'A9A9A9',
60
-		'darkgreen' => '006400',
61
-		'darkgrey' => 'A9A9A9',
62
-		'darkkhaki' => 'BDB76B',
63
-		'darkmagenta' => '8B008B',
64
-		'darkolivegreen' => '556B2F',
65
-		'darkorange' => 'FF8C00',
66
-		'darkorchid' => '9932CC',
67
-		'darkred' => '8B0000',
68
-		'darksalmon' => 'E9967A',
69
-		'darkseagreen' => '8FBC8F',
70
-		'darkslateblue' => '483D8B',
71
-		'darkslategray' => '2F4F4F',
72
-		'darkslategrey' => '2F4F4F',
73
-		'darkturquoise' => '00CED1',
74
-		'darkviolet' => '9400D3',
75
-		'deeppink' => 'FF1493',
76
-		'deepskyblue' => '00BFFF',
77
-		'dimgray' => '696969',
78
-		'dimgrey' => '696969',
79
-		'dodgerblue' => '1E90FF',
80
-		'firebrick' => 'B22222',
81
-		'floralwhite' => 'FFFAF0',
82
-		'forestgreen' => '228B22',
83
-		'fuchsia' => 'FF00FF',
84
-		'gainsboro' => 'DCDCDC',
85
-		'ghostwhite' => 'F8F8FF',
86
-		'gold' => 'FFD700',
87
-		'goldenrod' => 'DAA520',
88
-		'gray' => '808080',
89
-		'green' => '008000',
90
-		'greenyellow' => 'ADFF2F',
91
-		'grey' => '808080',
92
-		'honeydew' => 'F0FFF0',
93
-		'hotpink' => 'FF69B4',
94
-		'indianred' => 'CD5C5C',
95
-		'indigo' => '4B0082',
96
-		'ivory' => 'FFFFF0',
97
-		'khaki' => 'F0E68C',
98
-		'lavender' => 'E6E6FA',
99
-		'lavenderblush' => 'FFF0F5',
100
-		'lawngreen' => '7CFC00',
101
-		'lemonchiffon' => 'FFFACD',
102
-		'lightblue' => 'ADD8E6',
103
-		'lightcoral' => 'F08080',
104
-		'lightcyan' => 'E0FFFF',
105
-		'lightgoldenrodyellow' => 'FAFAD2',
106
-		'lightgray' => 'D3D3D3',
107
-		'lightgreen' => '90EE90',
108
-		'lightgrey' => 'D3D3D3',
109
-		'lightpink' => 'FFB6C1',
110
-		'lightsalmon' => 'FFA07A',
111
-		'lightseagreen' => '20B2AA',
112
-		'lightskyblue' => '87CEFA',
113
-		'lightslategray' => '778899',
114
-		'lightslategrey' => '778899',
115
-		'lightsteelblue' => 'B0C4DE',
116
-		'lightyellow' => 'FFFFE0',
117
-		'lime' => '00FF00',
118
-		'limegreen' => '32CD32',
119
-		'linen' => 'FAF0E6',
120
-		'magenta' => 'FF00FF',
121
-		'maroon' => '800000',
122
-		'mediumaquamarine' => '66CDAA',
123
-		'mediumblue' => '0000CD',
124
-		'mediumorchid' => 'BA55D3',
125
-		'mediumpurple' => '9370DB',
126
-		'mediumseagreen' => '3CB371',
127
-		'mediumslateblue' => '7B68EE',
128
-		'mediumspringgreen' => '00FA9A',
129
-		'mediumturquoise' => '48D1CC',
130
-		'mediumvioletred' => 'C71585',
131
-		'midnightblue' => '191970',
132
-		'mintcream' => 'F5FFFA',
133
-		'mistyrose' => 'FFE4E1',
134
-		'moccasin' => 'FFE4B5',
135
-		'navajowhite' => 'FFDEAD',
136
-		'navy' => '000080',
137
-		'oldlace' => 'FDF5E6',
138
-		'olive' => '808000',
139
-		'olivedrab' => '6B8E23',
140
-		'orange' => 'FFA500',
141
-		'orangered' => 'FF4500',
142
-		'orchid' => 'DA70D6',
143
-		'palegoldenrod' => 'EEE8AA',
144
-		'palegreen' => '98FB98',
145
-		'paleturquoise' => 'AFEEEE',
146
-		'palevioletred' => 'DB7093',
147
-		'papayawhip' => 'FFEFD5',
148
-		'peachpuff' => 'FFDAB9',
149
-		'peru' => 'CD853F',
150
-		'pink' => 'FFC0CB',
151
-		'plum' => 'DDA0DD',
152
-		'powderblue' => 'B0E0E6',
153
-		'purple' => '800080',
154
-		'rebeccapurple' => '663399',
155
-		'red' => 'FF0000',
156
-		'rosybrown' => 'BC8F8F',
157
-		'royalblue' => '4169E1',
158
-		'saddlebrown' => '8B4513',
159
-		'salmon' => 'FA8072',
160
-		'sandybrown' => 'F4A460',
161
-		'seagreen' => '2E8B57',
162
-		'seashell' => 'FFF5EE',
163
-		'sienna' => 'A0522D',
164
-		'silver' => 'C0C0C0',
165
-		'skyblue' => '87CEEB',
166
-		'slateblue' => '6A5ACD',
167
-		'slategray' => '708090',
168
-		'slategrey' => '708090',
169
-		'snow' => 'FFFAFA',
170
-		'springgreen' => '00FF7F',
171
-		'steelblue' => '4682B4',
172
-		'tan' => 'D2B48C',
173
-		'teal' => '008080',
174
-		'thistle' => 'D8BFD8',
175
-		'tomato' => 'FF6347',
176
-		'turquoise' => '40E0D0',
177
-		'violet' => 'EE82EE',
178
-		'wheat' => 'F5DEB3',
179
-		'white' => 'FFFFFF',
180
-		'whitesmoke' => 'F5F5F5',
181
-		'yellow' => 'FFFF00',
182
-		'yellowgreen' => '9ACD32',
183
-	];
184
-	if (isset($couleurs_html[$lc = strtolower($couleur)])) {
185
-		return $couleurs_html[$lc];
186
-	}
187
-
188
-	return $couleur;
34
+    $couleurs_html = [
35
+        'aliceblue' => 'F0F8FF',
36
+        'antiquewhite' => 'FAEBD7',
37
+        'aqua' => '00FFFF',
38
+        'aquamarine' => '7FFFD4',
39
+        'azure' => 'F0FFFF',
40
+        'beige' => 'F5F5DC',
41
+        'bisque' => 'FFE4C4',
42
+        'black' => '000000',
43
+        'blanchedalmond' => 'FFEBCD',
44
+        'blue' => '0000FF',
45
+        'blueviolet' => '8A2BE2',
46
+        'brown' => 'A52A2A',
47
+        'burlywood' => 'DEB887',
48
+        'cadetblue' => '5F9EA0',
49
+        'chartreuse' => '7FFF00',
50
+        'chocolate' => 'D2691E',
51
+        'coral' => 'FF7F50',
52
+        'cornflowerblue' => '6495ED',
53
+        'cornsilk' => 'FFF8DC',
54
+        'crimson' => 'DC143C',
55
+        'cyan' => '00FFFF',
56
+        'darkblue' => '00008B',
57
+        'darkcyan' => '008B8B',
58
+        'darkgoldenrod' => 'B8860B',
59
+        'darkgray' => 'A9A9A9',
60
+        'darkgreen' => '006400',
61
+        'darkgrey' => 'A9A9A9',
62
+        'darkkhaki' => 'BDB76B',
63
+        'darkmagenta' => '8B008B',
64
+        'darkolivegreen' => '556B2F',
65
+        'darkorange' => 'FF8C00',
66
+        'darkorchid' => '9932CC',
67
+        'darkred' => '8B0000',
68
+        'darksalmon' => 'E9967A',
69
+        'darkseagreen' => '8FBC8F',
70
+        'darkslateblue' => '483D8B',
71
+        'darkslategray' => '2F4F4F',
72
+        'darkslategrey' => '2F4F4F',
73
+        'darkturquoise' => '00CED1',
74
+        'darkviolet' => '9400D3',
75
+        'deeppink' => 'FF1493',
76
+        'deepskyblue' => '00BFFF',
77
+        'dimgray' => '696969',
78
+        'dimgrey' => '696969',
79
+        'dodgerblue' => '1E90FF',
80
+        'firebrick' => 'B22222',
81
+        'floralwhite' => 'FFFAF0',
82
+        'forestgreen' => '228B22',
83
+        'fuchsia' => 'FF00FF',
84
+        'gainsboro' => 'DCDCDC',
85
+        'ghostwhite' => 'F8F8FF',
86
+        'gold' => 'FFD700',
87
+        'goldenrod' => 'DAA520',
88
+        'gray' => '808080',
89
+        'green' => '008000',
90
+        'greenyellow' => 'ADFF2F',
91
+        'grey' => '808080',
92
+        'honeydew' => 'F0FFF0',
93
+        'hotpink' => 'FF69B4',
94
+        'indianred' => 'CD5C5C',
95
+        'indigo' => '4B0082',
96
+        'ivory' => 'FFFFF0',
97
+        'khaki' => 'F0E68C',
98
+        'lavender' => 'E6E6FA',
99
+        'lavenderblush' => 'FFF0F5',
100
+        'lawngreen' => '7CFC00',
101
+        'lemonchiffon' => 'FFFACD',
102
+        'lightblue' => 'ADD8E6',
103
+        'lightcoral' => 'F08080',
104
+        'lightcyan' => 'E0FFFF',
105
+        'lightgoldenrodyellow' => 'FAFAD2',
106
+        'lightgray' => 'D3D3D3',
107
+        'lightgreen' => '90EE90',
108
+        'lightgrey' => 'D3D3D3',
109
+        'lightpink' => 'FFB6C1',
110
+        'lightsalmon' => 'FFA07A',
111
+        'lightseagreen' => '20B2AA',
112
+        'lightskyblue' => '87CEFA',
113
+        'lightslategray' => '778899',
114
+        'lightslategrey' => '778899',
115
+        'lightsteelblue' => 'B0C4DE',
116
+        'lightyellow' => 'FFFFE0',
117
+        'lime' => '00FF00',
118
+        'limegreen' => '32CD32',
119
+        'linen' => 'FAF0E6',
120
+        'magenta' => 'FF00FF',
121
+        'maroon' => '800000',
122
+        'mediumaquamarine' => '66CDAA',
123
+        'mediumblue' => '0000CD',
124
+        'mediumorchid' => 'BA55D3',
125
+        'mediumpurple' => '9370DB',
126
+        'mediumseagreen' => '3CB371',
127
+        'mediumslateblue' => '7B68EE',
128
+        'mediumspringgreen' => '00FA9A',
129
+        'mediumturquoise' => '48D1CC',
130
+        'mediumvioletred' => 'C71585',
131
+        'midnightblue' => '191970',
132
+        'mintcream' => 'F5FFFA',
133
+        'mistyrose' => 'FFE4E1',
134
+        'moccasin' => 'FFE4B5',
135
+        'navajowhite' => 'FFDEAD',
136
+        'navy' => '000080',
137
+        'oldlace' => 'FDF5E6',
138
+        'olive' => '808000',
139
+        'olivedrab' => '6B8E23',
140
+        'orange' => 'FFA500',
141
+        'orangered' => 'FF4500',
142
+        'orchid' => 'DA70D6',
143
+        'palegoldenrod' => 'EEE8AA',
144
+        'palegreen' => '98FB98',
145
+        'paleturquoise' => 'AFEEEE',
146
+        'palevioletred' => 'DB7093',
147
+        'papayawhip' => 'FFEFD5',
148
+        'peachpuff' => 'FFDAB9',
149
+        'peru' => 'CD853F',
150
+        'pink' => 'FFC0CB',
151
+        'plum' => 'DDA0DD',
152
+        'powderblue' => 'B0E0E6',
153
+        'purple' => '800080',
154
+        'rebeccapurple' => '663399',
155
+        'red' => 'FF0000',
156
+        'rosybrown' => 'BC8F8F',
157
+        'royalblue' => '4169E1',
158
+        'saddlebrown' => '8B4513',
159
+        'salmon' => 'FA8072',
160
+        'sandybrown' => 'F4A460',
161
+        'seagreen' => '2E8B57',
162
+        'seashell' => 'FFF5EE',
163
+        'sienna' => 'A0522D',
164
+        'silver' => 'C0C0C0',
165
+        'skyblue' => '87CEEB',
166
+        'slateblue' => '6A5ACD',
167
+        'slategray' => '708090',
168
+        'slategrey' => '708090',
169
+        'snow' => 'FFFAFA',
170
+        'springgreen' => '00FF7F',
171
+        'steelblue' => '4682B4',
172
+        'tan' => 'D2B48C',
173
+        'teal' => '008080',
174
+        'thistle' => 'D8BFD8',
175
+        'tomato' => 'FF6347',
176
+        'turquoise' => '40E0D0',
177
+        'violet' => 'EE82EE',
178
+        'wheat' => 'F5DEB3',
179
+        'white' => 'FFFFFF',
180
+        'whitesmoke' => 'F5F5F5',
181
+        'yellow' => 'FFFF00',
182
+        'yellowgreen' => '9ACD32',
183
+    ];
184
+    if (isset($couleurs_html[$lc = strtolower($couleur)])) {
185
+        return $couleurs_html[$lc];
186
+    }
187
+
188
+    return $couleur;
189 189
 }
190 190
 
191 191
 /**
@@ -201,16 +201,16 @@  discard block
 block discarded – undo
201 201
  * @return string Couleur tel que "hsl(200, 40%, 34%)" ou valeur formattée
202 202
  */
203 203
 function couleur_hex_to_hsl($couleur, $format = null) {
204
-	$hsl = _couleur_hex_to_hsl($couleur);
205
-	$hsl = [
206
-		'h' => round($hsl['h'] * 360),
207
-		's' => round($hsl['s'] * 100) . '%',
208
-		'l' => round($hsl['l'] * 100) . '%'
209
-	];
210
-	if ($format === null) {
211
-		return "hsl({$hsl['h']}, {$hsl['s']}, {$hsl['l']})";
212
-	}
213
-	return str_replace(array_keys($hsl), $hsl, $format);
204
+    $hsl = _couleur_hex_to_hsl($couleur);
205
+    $hsl = [
206
+        'h' => round($hsl['h'] * 360),
207
+        's' => round($hsl['s'] * 100) . '%',
208
+        'l' => round($hsl['l'] * 100) . '%'
209
+    ];
210
+    if ($format === null) {
211
+        return "hsl({$hsl['h']}, {$hsl['s']}, {$hsl['l']})";
212
+    }
213
+    return str_replace(array_keys($hsl), $hsl, $format);
214 214
 }
215 215
 
216 216
 
@@ -227,16 +227,16 @@  discard block
 block discarded – undo
227 227
  * @return string Couleur tel que "rgb(200, 40, 84)" ou valeur formattée
228 228
  */
229 229
 function couleur_hex_to_rgb($couleur, $format = null) {
230
-	$rgb = _couleur_hex_to_dec($couleur);
231
-	$rgb = [
232
-		'r' => $rgb['red'],
233
-		'g' => $rgb['green'],
234
-		'b' => $rgb['blue'],
235
-	];
236
-	if ($format === null) {
237
-		return "rgb({$rgb['r']}, {$rgb['g']}, {$rgb['b']})";
238
-	}
239
-	return str_replace(array_keys($rgb), $rgb, $format);
230
+    $rgb = _couleur_hex_to_dec($couleur);
231
+    $rgb = [
232
+        'r' => $rgb['red'],
233
+        'g' => $rgb['green'],
234
+        'b' => $rgb['blue'],
235
+    ];
236
+    if ($format === null) {
237
+        return "rgb({$rgb['r']}, {$rgb['g']}, {$rgb['b']})";
238
+    }
239
+    return str_replace(array_keys($rgb), $rgb, $format);
240 240
 }
241 241
 
242 242
 /**
@@ -252,15 +252,15 @@  discard block
 block discarded – undo
252 252
  *    Code hexadécimal de la couleur plus foncée
253 253
  */
254 254
 function couleur_foncer($couleur, $coeff = 0.5) {
255
-	$couleurs = _couleur_hex_to_dec($couleur);
255
+    $couleurs = _couleur_hex_to_dec($couleur);
256 256
 
257
-	$red = $couleurs['red'] - round(($couleurs['red']) * $coeff);
258
-	$green = $couleurs['green'] - round(($couleurs['green']) * $coeff);
259
-	$blue = $couleurs['blue'] - round(($couleurs['blue']) * $coeff);
257
+    $red = $couleurs['red'] - round(($couleurs['red']) * $coeff);
258
+    $green = $couleurs['green'] - round(($couleurs['green']) * $coeff);
259
+    $blue = $couleurs['blue'] - round(($couleurs['blue']) * $coeff);
260 260
 
261
-	$couleur = _couleur_dec_to_hex($red, $green, $blue);
261
+    $couleur = _couleur_dec_to_hex($red, $green, $blue);
262 262
 
263
-	return $couleur;
263
+    return $couleur;
264 264
 }
265 265
 
266 266
 /**
@@ -276,15 +276,15 @@  discard block
 block discarded – undo
276 276
  *    Code hexadécimal de la couleur éclaircie
277 277
  */
278 278
 function couleur_eclaircir($couleur, $coeff = 0.5) {
279
-	$couleurs = _couleur_hex_to_dec($couleur);
279
+    $couleurs = _couleur_hex_to_dec($couleur);
280 280
 
281
-	$red = $couleurs['red'] + round((255 - $couleurs['red']) * $coeff);
282
-	$green = $couleurs['green'] + round((255 - $couleurs['green']) * $coeff);
283
-	$blue = $couleurs['blue'] + round((255 - $couleurs['blue']) * $coeff);
281
+    $red = $couleurs['red'] + round((255 - $couleurs['red']) * $coeff);
282
+    $green = $couleurs['green'] + round((255 - $couleurs['green']) * $coeff);
283
+    $blue = $couleurs['blue'] + round((255 - $couleurs['blue']) * $coeff);
284 284
 
285
-	$couleur = _couleur_dec_to_hex($red, $green, $blue);
285
+    $couleur = _couleur_dec_to_hex($red, $green, $blue);
286 286
 
287
-	return $couleur;
287
+    return $couleur;
288 288
 }
289 289
 
290 290
 /**
@@ -307,28 +307,28 @@  discard block
 block discarded – undo
307 307
  *    Le tag html `<img src=... />` avec une class `filtre_inactif` ou pas
308 308
  */
309 309
 function image_select($img, $width_min = 0, $height_min = 0, $width_max = 10000, $height_max = 1000) {
310
-	if (!$img) {
311
-		return $img;
312
-	}
313
-	list($h, $l) = taille_image($img);
314
-	$select = true;
315
-	if ($l < $width_min or $l > $width_max or $h < $height_min or $h > $height_max) {
316
-		$select = false;
317
-	}
318
-
319
-	$class = extraire_attribut($img, 'class');
320
-	$p = strpos($class, 'filtre_inactif');
321
-	if (($select == false) and ($p === false)) {
322
-		$class .= ' filtre_inactif';
323
-		$img = inserer_attribut($img, 'class', $class);
324
-	}
325
-	if (($select == true) and ($p !== false)) {
326
-		// no_image_filtrer : historique, a virer
327
-		$class = preg_replace(',\s*(filtre_inactif|no_image_filtrer),', '', $class);
328
-		$img = inserer_attribut($img, 'class', $class);
329
-	}
330
-
331
-	return $img;
310
+    if (!$img) {
311
+        return $img;
312
+    }
313
+    list($h, $l) = taille_image($img);
314
+    $select = true;
315
+    if ($l < $width_min or $l > $width_max or $h < $height_min or $h > $height_max) {
316
+        $select = false;
317
+    }
318
+
319
+    $class = extraire_attribut($img, 'class');
320
+    $p = strpos($class, 'filtre_inactif');
321
+    if (($select == false) and ($p === false)) {
322
+        $class .= ' filtre_inactif';
323
+        $img = inserer_attribut($img, 'class', $class);
324
+    }
325
+    if (($select == true) and ($p !== false)) {
326
+        // no_image_filtrer : historique, a virer
327
+        $class = preg_replace(',\s*(filtre_inactif|no_image_filtrer),', '', $class);
328
+        $img = inserer_attribut($img, 'class', $class);
329
+    }
330
+
331
+    return $img;
332 332
 }
333 333
 
334 334
 /**
@@ -376,45 +376,45 @@  discard block
 block discarded – undo
376 376
  *     Code HTML de l'image ou du texte.
377 377
  **/
378 378
 function image_passe_partout(
379
-	$img,
380
-	$taille_x = -1,
381
-	$taille_y = -1,
382
-	$force = false,
383
-	$cherche_image = false,
384
-	$process = 'AUTO'
379
+    $img,
380
+    $taille_x = -1,
381
+    $taille_y = -1,
382
+    $force = false,
383
+    $cherche_image = false,
384
+    $process = 'AUTO'
385 385
 ) {
386
-	// PHP 7+ type hint
387
-	$img = (string)$img;
388
-	$taille_x = (int)$taille_x;
389
-	$taille_y = (int)$taille_y;
390
-	$force = (bool)$force;
391
-	$process = (string)$process;
392
-
393
-	if (!$img) {
394
-		return '';
395
-	}
396
-	list($hauteur, $largeur) = taille_image($img);
397
-	if ($taille_x === -1) {
398
-		$taille_x = isset($GLOBALS['meta']['taille_preview']) ? $GLOBALS['meta']['taille_preview'] : 150;
399
-	}
400
-	if ($taille_y === -1) {
401
-		$taille_y = $taille_x;
402
-	}
403
-
404
-	if ($taille_x === 0 and $taille_y > 0) {
405
-		$taille_x = 1;
406
-	} # {0,300} -> c'est 300 qui compte
407
-	elseif ($taille_x > 0 and $taille_y === 0) {
408
-		$taille_y = 1;
409
-	} # {300,0} -> c'est 300 qui compte
410
-	elseif ($taille_x == 0 and $taille_y === 0) {
411
-		return '';
412
-	}
413
-
414
-	list($destWidth, $destHeight, $ratio) = ratio_passe_partout($largeur, $hauteur, $taille_x, $taille_y);
415
-	$fonction = ['image_passe_partout', func_get_args()];
416
-
417
-	return process_image_reduire($fonction, $img, $destWidth, $destHeight, $force, $process);
386
+    // PHP 7+ type hint
387
+    $img = (string)$img;
388
+    $taille_x = (int)$taille_x;
389
+    $taille_y = (int)$taille_y;
390
+    $force = (bool)$force;
391
+    $process = (string)$process;
392
+
393
+    if (!$img) {
394
+        return '';
395
+    }
396
+    list($hauteur, $largeur) = taille_image($img);
397
+    if ($taille_x === -1) {
398
+        $taille_x = isset($GLOBALS['meta']['taille_preview']) ? $GLOBALS['meta']['taille_preview'] : 150;
399
+    }
400
+    if ($taille_y === -1) {
401
+        $taille_y = $taille_x;
402
+    }
403
+
404
+    if ($taille_x === 0 and $taille_y > 0) {
405
+        $taille_x = 1;
406
+    } # {0,300} -> c'est 300 qui compte
407
+    elseif ($taille_x > 0 and $taille_y === 0) {
408
+        $taille_y = 1;
409
+    } # {300,0} -> c'est 300 qui compte
410
+    elseif ($taille_x == 0 and $taille_y === 0) {
411
+        return '';
412
+    }
413
+
414
+    list($destWidth, $destHeight, $ratio) = ratio_passe_partout($largeur, $hauteur, $taille_x, $taille_y);
415
+    $fonction = ['image_passe_partout', func_get_args()];
416
+
417
+    return process_image_reduire($fonction, $img, $destWidth, $destHeight, $force, $process);
418 418
 }
419 419
 
420 420
 /**
@@ -457,44 +457,44 @@  discard block
 block discarded – undo
457 457
  *     Code HTML de l'image ou du texte.
458 458
  **/
459 459
 function image_reduire(
460
-	$img,
461
-	$taille = -1,
462
-	$taille_y = -1,
463
-	$force = false,
464
-	$cherche_image = false,
465
-	$process = 'AUTO'
460
+    $img,
461
+    $taille = -1,
462
+    $taille_y = -1,
463
+    $force = false,
464
+    $cherche_image = false,
465
+    $process = 'AUTO'
466 466
 ) {
467
-	// PHP 7+ type hint
468
-	$img = (string)$img;
469
-	$taille = (int)$taille;
470
-	$taille_y = (int)$taille_y;
471
-	$force = (bool)$force;
472
-	$process = (string)$process;
473
-
474
-	// Determiner la taille x,y maxi
475
-	// prendre le reglage de previsu par defaut
476
-	if ($taille === -1) {
477
-		$taille = (isset($GLOBALS['meta']['taille_preview']) and intval($GLOBALS['meta']['taille_preview']))
478
-			? intval($GLOBALS['meta']['taille_preview'])
479
-			: 150;
480
-	}
481
-	if ($taille_y === -1) {
482
-		$taille_y = $taille;
483
-	}
484
-
485
-	if ($taille === 0 and $taille_y > 0) {
486
-		$taille = 10000;
487
-	} # {0,300} -> c'est 300 qui compte
488
-	elseif ($taille > 0 and $taille_y === 0) {
489
-		$taille_y = 10000;
490
-	} # {300,0} -> c'est 300 qui compte
491
-	elseif ($taille == 0 and $taille_y === 0) {
492
-		return '';
493
-	}
494
-
495
-	$fonction = ['image_reduire', func_get_args()];
496
-
497
-	return process_image_reduire($fonction, $img, $taille, $taille_y, $force, $process);
467
+    // PHP 7+ type hint
468
+    $img = (string)$img;
469
+    $taille = (int)$taille;
470
+    $taille_y = (int)$taille_y;
471
+    $force = (bool)$force;
472
+    $process = (string)$process;
473
+
474
+    // Determiner la taille x,y maxi
475
+    // prendre le reglage de previsu par defaut
476
+    if ($taille === -1) {
477
+        $taille = (isset($GLOBALS['meta']['taille_preview']) and intval($GLOBALS['meta']['taille_preview']))
478
+            ? intval($GLOBALS['meta']['taille_preview'])
479
+            : 150;
480
+    }
481
+    if ($taille_y === -1) {
482
+        $taille_y = $taille;
483
+    }
484
+
485
+    if ($taille === 0 and $taille_y > 0) {
486
+        $taille = 10000;
487
+    } # {0,300} -> c'est 300 qui compte
488
+    elseif ($taille > 0 and $taille_y === 0) {
489
+        $taille_y = 10000;
490
+    } # {300,0} -> c'est 300 qui compte
491
+    elseif ($taille == 0 and $taille_y === 0) {
492
+        return '';
493
+    }
494
+
495
+    $fonction = ['image_reduire', func_get_args()];
496
+
497
+    return process_image_reduire($fonction, $img, $taille, $taille_y, $force, $process);
498 498
 }
499 499
 
500 500
 /**
@@ -505,16 +505,16 @@  discard block
 block discarded – undo
505 505
  *
506 506
  **/
507 507
 function image_recadre_avec_fallback(
508
-	$im,
509
-	$width,
510
-	$height = '-',
511
-	$position = 'focus',
512
-	$background_color = 'white'
508
+    $im,
509
+    $width,
510
+    $height = '-',
511
+    $position = 'focus',
512
+    $background_color = 'white'
513 513
 ) {
514
-	if (function_exists('image_recadre') && ($GLOBALS['meta']['image_process'] ?? '') === 'gd2') {
515
-		return image_reduire(image_recadre($im, $width . ':' . $height, '-', $position, $background_color), $width, $height);
516
-	} else { return image_passe_partout($im, $width, $height);
517
-	}
514
+    if (function_exists('image_recadre') && ($GLOBALS['meta']['image_process'] ?? '') === 'gd2') {
515
+        return image_reduire(image_recadre($im, $width . ':' . $height, '-', $position, $background_color), $width, $height);
516
+    } else { return image_passe_partout($im, $width, $height);
517
+    }
518 518
 }
519 519
 
520 520
 /**
@@ -532,25 +532,25 @@  discard block
 block discarded – undo
532 532
  *     Code HTML de l'image ou du texte.
533 533
  **/
534 534
 function image_reduire_par($img, $val = 1, $force = false) {
535
-	// PHP 7+ type hint
536
-	$img = (string)$img;
537
-	$val = (int)$val;
538
-	$force = (bool)$force;
535
+    // PHP 7+ type hint
536
+    $img = (string)$img;
537
+    $val = (int)$val;
538
+    $force = (bool)$force;
539 539
 
540
-	list($hauteur, $largeur) = taille_image($img);
540
+    list($hauteur, $largeur) = taille_image($img);
541 541
 
542
-	$l = round($largeur / $val);
543
-	$h = round($hauteur / $val);
542
+    $l = round($largeur / $val);
543
+    $h = round($hauteur / $val);
544 544
 
545
-	if ($l > $h) {
546
-		$h = 0;
547
-	} else {
548
-		$l = 0;
549
-	}
545
+    if ($l > $h) {
546
+        $h = 0;
547
+    } else {
548
+        $l = 0;
549
+    }
550 550
 
551
-	$img = image_reduire($img, $l, $h, $force);
551
+    $img = image_reduire($img, $l, $h, $force);
552 552
 
553
-	return $img;
553
+    return $img;
554 554
 }
555 555
 
556 556
 /**
@@ -573,10 +573,10 @@  discard block
 block discarded – undo
573 573
  *      Couleur en écriture hexadécimale.
574 574
 **/
575 575
 function filtre_couleur_saturation_dist($couleur, $val, $strict = false) {
576
-	if (function_exists('couleur_saturation')) {
577
-		return couleur_saturation($couleur, $val, $strict);
578
-	}
579
-	return $couleur;
576
+    if (function_exists('couleur_saturation')) {
577
+        return couleur_saturation($couleur, $val, $strict);
578
+    }
579
+    return $couleur;
580 580
 }
581 581
 
582 582
 /**
@@ -597,8 +597,8 @@  discard block
 block discarded – undo
597 597
  *      Couleur en écriture hexadécimale.
598 598
 **/
599 599
 function filtre_couleur_luminance_dist($couleur, $val) {
600
-	if (function_exists('couleur_luminance')) {
601
-		return couleur_luminance($couleur, $val);
602
-	}
603
-	return $couleur;
600
+    if (function_exists('couleur_luminance')) {
601
+        return couleur_luminance($couleur, $val);
602
+    }
603
+    return $couleur;
604 604
 }
Please login to merge, or discard this patch.
ecrire/inc/importer_csv.php 1 patch
Indentation   +86 added lines, -86 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_spip('inc/charsets');
@@ -42,22 +42,22 @@  discard block
 block discarded – undo
42 42
  * @return array
43 43
  */
44 44
 function importer_csv_importcharset($texte, $definir_charset_source = false) {
45
-	// le plus frequent, en particulier avec les trucs de ms@@@
46
-	static $charset_source = 'iso-8859-1';
47
-	if ($definir_charset_source) {
48
-		if ($definir_charset_source === true) {
49
-			$charset_source = 'iso-8859-1';
50
-		} else {
51
-			$charset_source = $definir_charset_source;
52
-		}
53
-	}
54
-	// mais open-office sait faire mieux, donc mefiance !
55
-	if (is_utf8($texte)) {
56
-		$charset = 'utf-8';
57
-	} else {
58
-		$charset = $charset_source;
59
-	}
60
-	return importer_charset($texte, $charset);
45
+    // le plus frequent, en particulier avec les trucs de ms@@@
46
+    static $charset_source = 'iso-8859-1';
47
+    if ($definir_charset_source) {
48
+        if ($definir_charset_source === true) {
49
+            $charset_source = 'iso-8859-1';
50
+        } else {
51
+            $charset_source = $definir_charset_source;
52
+        }
53
+    }
54
+    // mais open-office sait faire mieux, donc mefiance !
55
+    if (is_utf8($texte)) {
56
+        $charset = 'utf-8';
57
+    } else {
58
+        $charset = $charset_source;
59
+    }
60
+    return importer_charset($texte, $charset);
61 61
 }
62 62
 
63 63
 /**
@@ -68,7 +68,7 @@  discard block
 block discarded – undo
68 68
  * @return string
69 69
  */
70 70
 function importer_csv_nettoie_key($key) {
71
-	return translitteration($key);
71
+    return translitteration($key);
72 72
 }
73 73
 
74 74
 /**
@@ -87,77 +87,77 @@  discard block
 block discarded – undo
87 87
  */
88 88
 function inc_importer_csv_dist($file, $options = []) {
89 89
 
90
-	// support ancienne syntaxe
91
-	// inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"', $len = 10000, $charset_source = '')
92
-	if (!is_array($options)) {
93
-		$args = func_get_args();
94
-		$options = [];
95
-		foreach ([1 => 'head', 2 => 'delim', 3 => 'enclos', 4 => 'len', 5 => 'charset_source'] as $k => $option) {
96
-			if (!empty($args[$k])) {
97
-				$options[$option] = $args[$k];
98
-			}
99
-		}
100
-	}
90
+    // support ancienne syntaxe
91
+    // inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"', $len = 10000, $charset_source = '')
92
+    if (!is_array($options)) {
93
+        $args = func_get_args();
94
+        $options = [];
95
+        foreach ([1 => 'head', 2 => 'delim', 3 => 'enclos', 4 => 'len', 5 => 'charset_source'] as $k => $option) {
96
+            if (!empty($args[$k])) {
97
+                $options[$option] = $args[$k];
98
+            }
99
+        }
100
+    }
101 101
 
102
-	$default_options = [
103
-		'head' => false,
104
-		'delim' => ',',
105
-		'enclos' => '"',
106
-		'len' => 10000,
107
-		'charset_source' => '',
108
-	];
109
-	$options = array_merge($default_options, $options);
102
+    $default_options = [
103
+        'head' => false,
104
+        'delim' => ',',
105
+        'enclos' => '"',
106
+        'len' => 10000,
107
+        'charset_source' => '',
108
+    ];
109
+    $options = array_merge($default_options, $options);
110 110
 
111 111
 
112
-	$return = false;
113
-	if (
114
-		@file_exists($file)
115
-		and $handle = fopen($file, 'r')
116
-	) {
117
-		if ($options['charset_source']) {
118
-			importer_csv_importcharset('', $options['charset_source']);
119
-		}
120
-		if ($options['head']) {
121
-			$header = fgetcsv($handle, $options['len'], $options['delim'], $options['enclos']);
122
-			if ($header) {
123
-				$header = array_map('importer_csv_importcharset', $header);
124
-				$header = array_map('importer_csv_nettoie_key', $header);
125
-				$header_type = [];
126
-				foreach ($header as $heading) {
127
-					if (!isset($header_type[$heading])) {
128
-						$header_type[$heading] = 'scalar';
129
-					} else {
130
-						$header_type[$heading] = 'array';
131
-					}
132
-				}
133
-			}
134
-		}
112
+    $return = false;
113
+    if (
114
+        @file_exists($file)
115
+        and $handle = fopen($file, 'r')
116
+    ) {
117
+        if ($options['charset_source']) {
118
+            importer_csv_importcharset('', $options['charset_source']);
119
+        }
120
+        if ($options['head']) {
121
+            $header = fgetcsv($handle, $options['len'], $options['delim'], $options['enclos']);
122
+            if ($header) {
123
+                $header = array_map('importer_csv_importcharset', $header);
124
+                $header = array_map('importer_csv_nettoie_key', $header);
125
+                $header_type = [];
126
+                foreach ($header as $heading) {
127
+                    if (!isset($header_type[$heading])) {
128
+                        $header_type[$heading] = 'scalar';
129
+                    } else {
130
+                        $header_type[$heading] = 'array';
131
+                    }
132
+                }
133
+            }
134
+        }
135 135
 
136
-		while (($data = fgetcsv($handle, $options['len'], $options['delim'], $options['enclos'])) !== false) {
137
-			$data = array_map('importer_csv_importcharset', $data);
138
-			if ($options['head'] and isset($header)) {
139
-				$row = [];
140
-				foreach ($header as $key => $heading) {
141
-					if ($header_type[$heading] == 'array') {
142
-						if (!isset($row[$heading])) {
143
-							$row[$heading] = [];
144
-						}
145
-						if (isset($data[$key]) and strlen($data[$key])) {
146
-							$row[$heading][] = $data[$key];
147
-						}
148
-					} else {
149
-						$row[$heading] = (isset($data[$key])) ? $data[$key] : '';
150
-					}
151
-				}
152
-				$return[] = $row;
153
-			} else {
154
-				$return[] = $data;
155
-			}
156
-		}
157
-		if ($options['charset_source']) {
158
-			importer_csv_importcharset('', true);
159
-		}
160
-	}
136
+        while (($data = fgetcsv($handle, $options['len'], $options['delim'], $options['enclos'])) !== false) {
137
+            $data = array_map('importer_csv_importcharset', $data);
138
+            if ($options['head'] and isset($header)) {
139
+                $row = [];
140
+                foreach ($header as $key => $heading) {
141
+                    if ($header_type[$heading] == 'array') {
142
+                        if (!isset($row[$heading])) {
143
+                            $row[$heading] = [];
144
+                        }
145
+                        if (isset($data[$key]) and strlen($data[$key])) {
146
+                            $row[$heading][] = $data[$key];
147
+                        }
148
+                    } else {
149
+                        $row[$heading] = (isset($data[$key])) ? $data[$key] : '';
150
+                    }
151
+                }
152
+                $return[] = $row;
153
+            } else {
154
+                $return[] = $data;
155
+            }
156
+        }
157
+        if ($options['charset_source']) {
158
+            importer_csv_importcharset('', true);
159
+        }
160
+    }
161 161
 
162
-	return $return;
162
+    return $return;
163 163
 }
Please login to merge, or discard this patch.
ecrire/inc/filtres_mime.php 1 patch
Indentation   +53 added lines, -53 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
  **/
23 23
 
24 24
 if (!defined('_ECRIRE_INC_VERSION')) {
25
-	return;
25
+    return;
26 26
 }
27 27
 include_spip('inc/filtres');
28 28
 
@@ -39,7 +39,7 @@  discard block
 block discarded – undo
39 39
  * @return string Rien.
40 40
  **/
41 41
 function filtre_image_dist($t) {
42
-	return '';
42
+    return '';
43 43
 }
44 44
 
45 45
 /**
@@ -52,7 +52,7 @@  discard block
 block discarded – undo
52 52
  * @return string Rien.
53 53
  **/
54 54
 function filtre_audio_dist($t) {
55
-	return '';
55
+    return '';
56 56
 }
57 57
 
58 58
 /**
@@ -65,7 +65,7 @@  discard block
 block discarded – undo
65 65
  * @return string Rien.
66 66
  **/
67 67
 function filtre_video_dist($t) {
68
-	return '';
68
+    return '';
69 69
 }
70 70
 
71 71
 /**
@@ -78,7 +78,7 @@  discard block
 block discarded – undo
78 78
  * @return string Rien.
79 79
  **/
80 80
 function filtre_application_dist($t) {
81
-	return '';
81
+    return '';
82 82
 }
83 83
 
84 84
 /**
@@ -91,7 +91,7 @@  discard block
 block discarded – undo
91 91
  * @return string Rien.
92 92
  **/
93 93
 function filtre_message_dist($t) {
94
-	return '';
94
+    return '';
95 95
 }
96 96
 
97 97
 /**
@@ -104,7 +104,7 @@  discard block
 block discarded – undo
104 104
  * @return string Rien.
105 105
  **/
106 106
 function filtre_multipart_dist($t) {
107
-	return '';
107
+    return '';
108 108
 }
109 109
 
110 110
 /**
@@ -117,10 +117,10 @@  discard block
 block discarded – undo
117 117
  * @return string Contenu échappé.
118 118
  **/
119 119
 function filtre_text_dist($t) {
120
-	static $t1 = ['&', '<', '>'];
121
-	static $t2 = ['&amp;', '&lt;', '&gt;'];
120
+    static $t1 = ['&', '<', '>'];
121
+    static $t2 = ['&amp;', '&lt;', '&gt;'];
122 122
 
123
-	return '<pre>' . str_replace($t1, $t2, $t) . '</pre>';
123
+    return '<pre>' . str_replace($t1, $t2, $t) . '</pre>';
124 124
 }
125 125
 
126 126
 /**
@@ -135,21 +135,21 @@  discard block
 block discarded – undo
135 135
  *     Tableau (formaté en SPIP)
136 136
  **/
137 137
 function filtre_text_csv_dist($t) {
138
-	include_spip('inc/csv');
139
-	list($entete, $lignes, $caption) = analyse_csv($t);
140
-	foreach ($lignes as &$l) {
141
-		$l = join('|', $l);
142
-	}
143
-	$corps = join("\n", $lignes) . "\n";
144
-	$corps = $caption .
145
-		"\n|{{" .
146
-		join('}}|{{', $entete) .
147
-		'}}|' .
148
-		"\n|" .
149
-		str_replace("\n", "|\n|", $corps);
150
-	include_spip('inc/texte');
151
-
152
-	return propre($corps);
138
+    include_spip('inc/csv');
139
+    list($entete, $lignes, $caption) = analyse_csv($t);
140
+    foreach ($lignes as &$l) {
141
+        $l = join('|', $l);
142
+    }
143
+    $corps = join("\n", $lignes) . "\n";
144
+    $corps = $caption .
145
+        "\n|{{" .
146
+        join('}}|{{', $entete) .
147
+        '}}|' .
148
+        "\n|" .
149
+        str_replace("\n", "|\n|", $corps);
150
+    include_spip('inc/texte');
151
+
152
+    return propre($corps);
153 153
 }
154 154
 
155 155
 /**
@@ -163,33 +163,33 @@  discard block
 block discarded – undo
163 163
  * @return string Code html sécurisé ou texte échappé
164 164
  **/
165 165
 function filtre_text_html_dist($t) {
166
-	if (!preg_match(',^(.*?)<body[^>]*>(.*)</body>,is', $t, $r)) {
167
-		return appliquer_filtre($t, 'text/plain');
168
-	}
169
-
170
-	list(, $h, $t) = $r;
171
-
172
-	$style = '';
173
-	// recuperer les styles internes
174
-	if (preg_match_all(',<style>(.*?)</style>,is', $h, $r, PREG_PATTERN_ORDER)) {
175
-		$style = join("\n", $r[1]);
176
-	}
177
-	// ... et externes
178
-
179
-	include_spip('inc/distant');
180
-	if (preg_match_all(',<link[^>]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER)) {
181
-		foreach ($r[0] as $l) {
182
-			preg_match("/href='([^']*)'/", str_replace('"', "'", $l), $m);
183
-			$page = recuperer_url($m[1]);
184
-			$page = $page['page'] ?? '';
185
-			$style .= "\n/* $l */\n"
186
-				. str_replace('<', '', $page);
187
-		}
188
-	}
189
-	// Pourquoi SafeHtml transforme-t-il en texte les scripts dans Body ?
190
-	$t = safehtml(preg_replace(',<script' . '.*?</script>,is', '', $t));
191
-
192
-	return (!$style ? '' : "\n<style>" . $style . '</style>') . $t;
166
+    if (!preg_match(',^(.*?)<body[^>]*>(.*)</body>,is', $t, $r)) {
167
+        return appliquer_filtre($t, 'text/plain');
168
+    }
169
+
170
+    list(, $h, $t) = $r;
171
+
172
+    $style = '';
173
+    // recuperer les styles internes
174
+    if (preg_match_all(',<style>(.*?)</style>,is', $h, $r, PREG_PATTERN_ORDER)) {
175
+        $style = join("\n", $r[1]);
176
+    }
177
+    // ... et externes
178
+
179
+    include_spip('inc/distant');
180
+    if (preg_match_all(',<link[^>]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER)) {
181
+        foreach ($r[0] as $l) {
182
+            preg_match("/href='([^']*)'/", str_replace('"', "'", $l), $m);
183
+            $page = recuperer_url($m[1]);
184
+            $page = $page['page'] ?? '';
185
+            $style .= "\n/* $l */\n"
186
+                . str_replace('<', '', $page);
187
+        }
188
+    }
189
+    // Pourquoi SafeHtml transforme-t-il en texte les scripts dans Body ?
190
+    $t = safehtml(preg_replace(',<script' . '.*?</script>,is', '', $t));
191
+
192
+    return (!$style ? '' : "\n<style>" . $style . '</style>') . $t;
193 193
 }
194 194
 
195 195
 /**
@@ -202,7 +202,7 @@  discard block
 block discarded – undo
202 202
  * @return string Code HTML des balises `<param>`
203 203
  **/
204 204
 function filtre_audio_x_pn_realaudio($id) {
205
-	return "
205
+    return "
206 206
 	<param name='controls' value='PositionSlider' />
207 207
 	<param name='controls' value='ImageWindow' />
208 208
 	<param name='controls' value='PlayButton' />
Please login to merge, or discard this patch.
ecrire/inc/definir_menus_favoris.php 1 patch
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -20,21 +20,21 @@
 block discarded – undo
20 20
  * Retourne la liste des menus favoris par défaut ainsi que leur rang
21 21
  */
22 22
 function inc_definir_menus_favoris_dist() {
23
-	$liste = [
23
+    $liste = [
24 24
 
25
-		// Menu Édition,
26
-		'auteurs' => 1,
27
-		'rubriques' => 2,
28
-		'articles' => 3,
25
+        // Menu Édition,
26
+        'auteurs' => 1,
27
+        'rubriques' => 2,
28
+        'articles' => 3,
29 29
 
30
-		// Menu Maintenance
31
-		'admin_vider' => 1,
30
+        // Menu Maintenance
31
+        'admin_vider' => 1,
32 32
 
33
-		// Menu Configurations
34
-		'configurer_identite' => 1,
35
-		'admin_plugin' => 2,
33
+        // Menu Configurations
34
+        'configurer_identite' => 1,
35
+        'admin_plugin' => 2,
36 36
 
37
-	];
37
+    ];
38 38
 
39
-	return $liste;
39
+    return $liste;
40 40
 }
Please login to merge, or discard this patch.
ecrire/inc/distant.php 1 patch
Indentation   +1020 added lines, -1020 removed lines patch added patch discarded remove patch
@@ -16,32 +16,32 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Distant
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 if (!defined('_INC_DISTANT_VERSION_HTTP')) {
23
-	define('_INC_DISTANT_VERSION_HTTP', 'HTTP/1.0');
23
+    define('_INC_DISTANT_VERSION_HTTP', 'HTTP/1.0');
24 24
 }
25 25
 if (!defined('_INC_DISTANT_CONTENT_ENCODING')) {
26
-	define('_INC_DISTANT_CONTENT_ENCODING', 'gzip');
26
+    define('_INC_DISTANT_CONTENT_ENCODING', 'gzip');
27 27
 }
28 28
 if (!defined('_INC_DISTANT_USER_AGENT')) {
29
-	define('_INC_DISTANT_USER_AGENT', 'SPIP-' . $GLOBALS['spip_version_affichee'] . ' (' . $GLOBALS['home_server'] . ')');
29
+    define('_INC_DISTANT_USER_AGENT', 'SPIP-' . $GLOBALS['spip_version_affichee'] . ' (' . $GLOBALS['home_server'] . ')');
30 30
 }
31 31
 if (!defined('_INC_DISTANT_MAX_SIZE')) {
32
-	define('_INC_DISTANT_MAX_SIZE', 2097152);
32
+    define('_INC_DISTANT_MAX_SIZE', 2097152);
33 33
 }
34 34
 if (!defined('_INC_DISTANT_CONNECT_TIMEOUT')) {
35
-	define('_INC_DISTANT_CONNECT_TIMEOUT', 10);
35
+    define('_INC_DISTANT_CONNECT_TIMEOUT', 10);
36 36
 }
37 37
 
38 38
 define('_REGEXP_COPIE_LOCALE', ',' 	.
39
-	preg_replace(
40
-		'@^https?:@',
41
-		'https?:',
42
-		(isset($GLOBALS['meta']['adresse_site']) ? $GLOBALS['meta']['adresse_site'] : '')
43
-	)
44
-	. '/?spip.php[?]action=acceder_document.*file=(.*)$,');
39
+    preg_replace(
40
+        '@^https?:@',
41
+        'https?:',
42
+        (isset($GLOBALS['meta']['adresse_site']) ? $GLOBALS['meta']['adresse_site'] : '')
43
+    )
44
+    . '/?spip.php[?]action=acceder_document.*file=(.*)$,');
45 45
 
46 46
 //@define('_COPIE_LOCALE_MAX_SIZE',2097152); // poids (inc/utils l'a fait)
47 47
 
@@ -68,77 +68,77 @@  discard block
 block discarded – undo
68 68
  */
69 69
 function copie_locale($source, $mode = 'auto', $local = null, $taille_max = null) {
70 70
 
71
-	// si c'est la protection de soi-meme, retourner le path
72
-	if ($mode !== 'force' and preg_match(_REGEXP_COPIE_LOCALE, $source, $match)) {
73
-		$source = substr(_DIR_IMG, strlen(_DIR_RACINE)) . urldecode($match[1]);
74
-
75
-		return @file_exists($source) ? $source : false;
76
-	}
77
-
78
-	if (is_null($local)) {
79
-		$local = fichier_copie_locale($source);
80
-	} else {
81
-		if (_DIR_RACINE and strncmp(_DIR_RACINE, $local, strlen(_DIR_RACINE)) == 0) {
82
-			$local = substr($local, strlen(_DIR_RACINE));
83
-		}
84
-	}
85
-
86
-	// si $local = '' c'est un fichier refuse par fichier_copie_locale(),
87
-	// par exemple un fichier qui ne figure pas dans nos documents ;
88
-	// dans ce cas on n'essaie pas de le telecharger pour ensuite echouer
89
-	if (!$local) {
90
-		return false;
91
-	}
92
-
93
-	$localrac = _DIR_RACINE . $local;
94
-	$t = ($mode == 'force') ? false : @file_exists($localrac);
95
-
96
-	// test d'existence du fichier
97
-	if ($mode == 'test') {
98
-		return $t ? $local : '';
99
-	}
100
-
101
-	// sinon voir si on doit/peut le telecharger
102
-	if ($local == $source or !tester_url_absolue($source)) {
103
-		return $local;
104
-	}
105
-
106
-	if ($mode == 'modif' or !$t) {
107
-		// passer par un fichier temporaire unique pour gerer les echecs en cours de recuperation
108
-		// et des eventuelles recuperations concurantes
109
-		include_spip('inc/acces');
110
-		if (!$taille_max) {
111
-			$taille_max = _COPIE_LOCALE_MAX_SIZE;
112
-		}
113
-		$res = recuperer_url(
114
-			$source,
115
-			['file' => $localrac, 'taille_max' => $taille_max, 'if_modified_since' => $t ? filemtime($localrac) : '']
116
-		);
117
-		if (!$res or (!$res['length'] and $res['status'] != 304)) {
118
-			spip_log("copie_locale : Echec recuperation $source sur $localrac status : " . $res['status'], 'distant' . _LOG_INFO_IMPORTANTE);
119
-		}
120
-		if (!$res['length']) {
121
-			// si $t c'est sans doute juste un not-modified-since
122
-			return $t ? $local : false;
123
-		}
124
-		spip_log("copie_locale : recuperation $source sur $localrac taille " . $res['length'] . ' OK', 'distant');
125
-
126
-		// pour une eventuelle indexation
127
-		pipeline(
128
-			'post_edition',
129
-			[
130
-				'args' => [
131
-					'operation' => 'copie_locale',
132
-					'source' => $source,
133
-					'fichier' => $local,
134
-					'http_res' => $res['length'],
135
-				],
136
-				'data' => null
137
-			]
138
-		);
139
-	}
140
-
141
-	return $local;
71
+    // si c'est la protection de soi-meme, retourner le path
72
+    if ($mode !== 'force' and preg_match(_REGEXP_COPIE_LOCALE, $source, $match)) {
73
+        $source = substr(_DIR_IMG, strlen(_DIR_RACINE)) . urldecode($match[1]);
74
+
75
+        return @file_exists($source) ? $source : false;
76
+    }
77
+
78
+    if (is_null($local)) {
79
+        $local = fichier_copie_locale($source);
80
+    } else {
81
+        if (_DIR_RACINE and strncmp(_DIR_RACINE, $local, strlen(_DIR_RACINE)) == 0) {
82
+            $local = substr($local, strlen(_DIR_RACINE));
83
+        }
84
+    }
85
+
86
+    // si $local = '' c'est un fichier refuse par fichier_copie_locale(),
87
+    // par exemple un fichier qui ne figure pas dans nos documents ;
88
+    // dans ce cas on n'essaie pas de le telecharger pour ensuite echouer
89
+    if (!$local) {
90
+        return false;
91
+    }
92
+
93
+    $localrac = _DIR_RACINE . $local;
94
+    $t = ($mode == 'force') ? false : @file_exists($localrac);
95
+
96
+    // test d'existence du fichier
97
+    if ($mode == 'test') {
98
+        return $t ? $local : '';
99
+    }
100
+
101
+    // sinon voir si on doit/peut le telecharger
102
+    if ($local == $source or !tester_url_absolue($source)) {
103
+        return $local;
104
+    }
105
+
106
+    if ($mode == 'modif' or !$t) {
107
+        // passer par un fichier temporaire unique pour gerer les echecs en cours de recuperation
108
+        // et des eventuelles recuperations concurantes
109
+        include_spip('inc/acces');
110
+        if (!$taille_max) {
111
+            $taille_max = _COPIE_LOCALE_MAX_SIZE;
112
+        }
113
+        $res = recuperer_url(
114
+            $source,
115
+            ['file' => $localrac, 'taille_max' => $taille_max, 'if_modified_since' => $t ? filemtime($localrac) : '']
116
+        );
117
+        if (!$res or (!$res['length'] and $res['status'] != 304)) {
118
+            spip_log("copie_locale : Echec recuperation $source sur $localrac status : " . $res['status'], 'distant' . _LOG_INFO_IMPORTANTE);
119
+        }
120
+        if (!$res['length']) {
121
+            // si $t c'est sans doute juste un not-modified-since
122
+            return $t ? $local : false;
123
+        }
124
+        spip_log("copie_locale : recuperation $source sur $localrac taille " . $res['length'] . ' OK', 'distant');
125
+
126
+        // pour une eventuelle indexation
127
+        pipeline(
128
+            'post_edition',
129
+            [
130
+                'args' => [
131
+                    'operation' => 'copie_locale',
132
+                    'source' => $source,
133
+                    'fichier' => $local,
134
+                    'http_res' => $res['length'],
135
+                ],
136
+                'data' => null
137
+            ]
138
+        );
139
+    }
140
+
141
+    return $local;
142 142
 }
143 143
 
144 144
 /**
@@ -153,93 +153,93 @@  discard block
 block discarded – undo
153 153
  *   url ou false en cas d'echec
154 154
  */
155 155
 function valider_url_distante($url, $known_hosts = []) {
156
-	if (!function_exists('protocole_verifier')) {
157
-		include_spip('inc/filtres_mini');
158
-	}
159
-
160
-	if (!protocole_verifier($url, ['http', 'https'])) {
161
-		return false;
162
-	}
163
-
164
-	$parsed_url = parse_url($url);
165
-	if (!$parsed_url or empty($parsed_url['host'])) {
166
-		return false;
167
-	}
168
-
169
-	if (isset($parsed_url['user']) or isset($parsed_url['pass'])) {
170
-		return false;
171
-	}
172
-
173
-	if (false !== strpbrk($parsed_url['host'], ':#?[]')) {
174
-		return false;
175
-	}
176
-
177
-	if (!is_array($known_hosts)) {
178
-		$known_hosts = [$known_hosts];
179
-	}
180
-	$known_hosts[] = $GLOBALS['meta']['adresse_site'];
181
-	$known_hosts[] = url_de_base();
182
-	$known_hosts = pipeline('declarer_hosts_distants', $known_hosts);
183
-
184
-	$is_known_host = false;
185
-	foreach ($known_hosts as $known_host) {
186
-		$parse_known = parse_url($known_host);
187
-		if (
188
-			$parse_known
189
-			and strtolower($parse_known['host']) === strtolower($parsed_url['host'])
190
-		) {
191
-			$is_known_host = true;
192
-			break;
193
-		}
194
-	}
195
-
196
-	if (!$is_known_host) {
197
-		$host = trim($parsed_url['host'], '.');
198
-		if (preg_match('#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $host)) {
199
-			$ip = $host;
200
-		} else {
201
-			$ip = gethostbyname($host);
202
-			if ($ip === $host) {
203
-				// Error condition for gethostbyname()
204
-				$ip = false;
205
-			}
206
-		}
207
-		if ($ip) {
208
-			$parts = array_map('intval', explode('.', $ip));
209
-			if (
210
-				127 === $parts[0] or 10 === $parts[0] or 0 === $parts[0]
211
-				or ( 172 === $parts[0] and 16 <= $parts[1] and 31 >= $parts[1] )
212
-				or ( 192 === $parts[0] && 168 === $parts[1] )
213
-			) {
214
-				return false;
215
-			}
216
-		}
217
-	}
218
-
219
-	if (empty($parsed_url['port'])) {
220
-		return $url;
221
-	}
222
-
223
-	$port = $parsed_url['port'];
224
-	if ($port === 80  or $port === 443  or $port === 8080) {
225
-		return $url;
226
-	}
227
-
228
-	if ($is_known_host) {
229
-		foreach ($known_hosts as $known_host) {
230
-			$parse_known = parse_url($known_host);
231
-			if (
232
-				$parse_known
233
-				and !empty($parse_known['port'])
234
-				and strtolower($parse_known['host']) === strtolower($parsed_url['host'])
235
-				and $parse_known['port'] == $port
236
-			) {
237
-				return $url;
238
-			}
239
-		}
240
-	}
241
-
242
-	return false;
156
+    if (!function_exists('protocole_verifier')) {
157
+        include_spip('inc/filtres_mini');
158
+    }
159
+
160
+    if (!protocole_verifier($url, ['http', 'https'])) {
161
+        return false;
162
+    }
163
+
164
+    $parsed_url = parse_url($url);
165
+    if (!$parsed_url or empty($parsed_url['host'])) {
166
+        return false;
167
+    }
168
+
169
+    if (isset($parsed_url['user']) or isset($parsed_url['pass'])) {
170
+        return false;
171
+    }
172
+
173
+    if (false !== strpbrk($parsed_url['host'], ':#?[]')) {
174
+        return false;
175
+    }
176
+
177
+    if (!is_array($known_hosts)) {
178
+        $known_hosts = [$known_hosts];
179
+    }
180
+    $known_hosts[] = $GLOBALS['meta']['adresse_site'];
181
+    $known_hosts[] = url_de_base();
182
+    $known_hosts = pipeline('declarer_hosts_distants', $known_hosts);
183
+
184
+    $is_known_host = false;
185
+    foreach ($known_hosts as $known_host) {
186
+        $parse_known = parse_url($known_host);
187
+        if (
188
+            $parse_known
189
+            and strtolower($parse_known['host']) === strtolower($parsed_url['host'])
190
+        ) {
191
+            $is_known_host = true;
192
+            break;
193
+        }
194
+    }
195
+
196
+    if (!$is_known_host) {
197
+        $host = trim($parsed_url['host'], '.');
198
+        if (preg_match('#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $host)) {
199
+            $ip = $host;
200
+        } else {
201
+            $ip = gethostbyname($host);
202
+            if ($ip === $host) {
203
+                // Error condition for gethostbyname()
204
+                $ip = false;
205
+            }
206
+        }
207
+        if ($ip) {
208
+            $parts = array_map('intval', explode('.', $ip));
209
+            if (
210
+                127 === $parts[0] or 10 === $parts[0] or 0 === $parts[0]
211
+                or ( 172 === $parts[0] and 16 <= $parts[1] and 31 >= $parts[1] )
212
+                or ( 192 === $parts[0] && 168 === $parts[1] )
213
+            ) {
214
+                return false;
215
+            }
216
+        }
217
+    }
218
+
219
+    if (empty($parsed_url['port'])) {
220
+        return $url;
221
+    }
222
+
223
+    $port = $parsed_url['port'];
224
+    if ($port === 80  or $port === 443  or $port === 8080) {
225
+        return $url;
226
+    }
227
+
228
+    if ($is_known_host) {
229
+        foreach ($known_hosts as $known_host) {
230
+            $parse_known = parse_url($known_host);
231
+            if (
232
+                $parse_known
233
+                and !empty($parse_known['port'])
234
+                and strtolower($parse_known['host']) === strtolower($parsed_url['host'])
235
+                and $parse_known['port'] == $port
236
+            ) {
237
+                return $url;
238
+            }
239
+        }
240
+    }
241
+
242
+    return false;
243 243
 }
244 244
 
245 245
 /**
@@ -259,86 +259,86 @@  discard block
 block discarded – undo
259 259
  */
260 260
 function prepare_donnees_post($donnees, $boundary = '') {
261 261
 
262
-	// permettre a la fonction qui a demande le post de formater elle meme ses donnees
263
-	// pour un appel soap par exemple
264
-	// l'entete est separe des donnees par un double retour a la ligne
265
-	// on s'occupe ici de passer tous les retours lignes (\r\n, \r ou \n) en \r\n
266
-	if (is_string($donnees) && strlen($donnees)) {
267
-		$entete = '';
268
-		// on repasse tous les \r\n et \r en simples \n
269
-		$donnees = str_replace("\r\n", "\n", $donnees);
270
-		$donnees = str_replace("\r", "\n", $donnees);
271
-		// un double retour a la ligne signifie la fin de l'entete et le debut des donnees
272
-		$p = strpos($donnees, "\n\n");
273
-		if ($p !== false) {
274
-			$entete = str_replace("\n", "\r\n", substr($donnees, 0, $p + 1));
275
-			$donnees = substr($donnees, $p + 2);
276
-		}
277
-		$chaine = str_replace("\n", "\r\n", $donnees);
278
-	} else {
279
-		/* boundary automatique */
280
-		// Si on a plus de 500 octects de donnees, on "boundarise"
281
-		if ($boundary === '') {
282
-			$taille = 0;
283
-			foreach ($donnees as $cle => $valeur) {
284
-				if (is_array($valeur)) {
285
-					foreach ($valeur as $val2) {
286
-						$taille += strlen($val2);
287
-					}
288
-				} else {
289
-					// faut-il utiliser spip_strlen() dans inc/charsets ?
290
-					$taille += strlen($valeur);
291
-				}
292
-			}
293
-			if ($taille > 500) {
294
-				$boundary = substr(md5(rand() . 'spip'), 0, 8);
295
-			}
296
-		}
297
-
298
-		if (is_string($boundary) and strlen($boundary)) {
299
-			// fabrique une chaine HTTP pour un POST avec boundary
300
-			$entete = "Content-Type: multipart/form-data; boundary=$boundary\r\n";
301
-			$chaine = '';
302
-			if (is_array($donnees)) {
303
-				foreach ($donnees as $cle => $valeur) {
304
-					if (is_array($valeur)) {
305
-						foreach ($valeur as $val2) {
306
-							$chaine .= "\r\n--$boundary\r\n";
307
-							$chaine .= "Content-Disposition: form-data; name=\"{$cle}[]\"\r\n";
308
-							$chaine .= "\r\n";
309
-							$chaine .= $val2;
310
-						}
311
-					} else {
312
-						$chaine .= "\r\n--$boundary\r\n";
313
-						$chaine .= "Content-Disposition: form-data; name=\"$cle\"\r\n";
314
-						$chaine .= "\r\n";
315
-						$chaine .= $valeur;
316
-					}
317
-				}
318
-				$chaine .= "\r\n--$boundary\r\n";
319
-			}
320
-		} else {
321
-			// fabrique une chaine HTTP simple pour un POST
322
-			$entete = 'Content-Type: application/x-www-form-urlencoded' . "\r\n";
323
-			$chaine = [];
324
-			if (is_array($donnees)) {
325
-				foreach ($donnees as $cle => $valeur) {
326
-					if (is_array($valeur)) {
327
-						foreach ($valeur as $val2) {
328
-							$chaine[] = rawurlencode($cle) . '[]=' . rawurlencode($val2);
329
-						}
330
-					} else {
331
-						$chaine[] = rawurlencode($cle) . '=' . rawurlencode($valeur);
332
-					}
333
-				}
334
-				$chaine = implode('&', $chaine);
335
-			} else {
336
-				$chaine = $donnees;
337
-			}
338
-		}
339
-	}
340
-
341
-	return [$entete, $chaine];
262
+    // permettre a la fonction qui a demande le post de formater elle meme ses donnees
263
+    // pour un appel soap par exemple
264
+    // l'entete est separe des donnees par un double retour a la ligne
265
+    // on s'occupe ici de passer tous les retours lignes (\r\n, \r ou \n) en \r\n
266
+    if (is_string($donnees) && strlen($donnees)) {
267
+        $entete = '';
268
+        // on repasse tous les \r\n et \r en simples \n
269
+        $donnees = str_replace("\r\n", "\n", $donnees);
270
+        $donnees = str_replace("\r", "\n", $donnees);
271
+        // un double retour a la ligne signifie la fin de l'entete et le debut des donnees
272
+        $p = strpos($donnees, "\n\n");
273
+        if ($p !== false) {
274
+            $entete = str_replace("\n", "\r\n", substr($donnees, 0, $p + 1));
275
+            $donnees = substr($donnees, $p + 2);
276
+        }
277
+        $chaine = str_replace("\n", "\r\n", $donnees);
278
+    } else {
279
+        /* boundary automatique */
280
+        // Si on a plus de 500 octects de donnees, on "boundarise"
281
+        if ($boundary === '') {
282
+            $taille = 0;
283
+            foreach ($donnees as $cle => $valeur) {
284
+                if (is_array($valeur)) {
285
+                    foreach ($valeur as $val2) {
286
+                        $taille += strlen($val2);
287
+                    }
288
+                } else {
289
+                    // faut-il utiliser spip_strlen() dans inc/charsets ?
290
+                    $taille += strlen($valeur);
291
+                }
292
+            }
293
+            if ($taille > 500) {
294
+                $boundary = substr(md5(rand() . 'spip'), 0, 8);
295
+            }
296
+        }
297
+
298
+        if (is_string($boundary) and strlen($boundary)) {
299
+            // fabrique une chaine HTTP pour un POST avec boundary
300
+            $entete = "Content-Type: multipart/form-data; boundary=$boundary\r\n";
301
+            $chaine = '';
302
+            if (is_array($donnees)) {
303
+                foreach ($donnees as $cle => $valeur) {
304
+                    if (is_array($valeur)) {
305
+                        foreach ($valeur as $val2) {
306
+                            $chaine .= "\r\n--$boundary\r\n";
307
+                            $chaine .= "Content-Disposition: form-data; name=\"{$cle}[]\"\r\n";
308
+                            $chaine .= "\r\n";
309
+                            $chaine .= $val2;
310
+                        }
311
+                    } else {
312
+                        $chaine .= "\r\n--$boundary\r\n";
313
+                        $chaine .= "Content-Disposition: form-data; name=\"$cle\"\r\n";
314
+                        $chaine .= "\r\n";
315
+                        $chaine .= $valeur;
316
+                    }
317
+                }
318
+                $chaine .= "\r\n--$boundary\r\n";
319
+            }
320
+        } else {
321
+            // fabrique une chaine HTTP simple pour un POST
322
+            $entete = 'Content-Type: application/x-www-form-urlencoded' . "\r\n";
323
+            $chaine = [];
324
+            if (is_array($donnees)) {
325
+                foreach ($donnees as $cle => $valeur) {
326
+                    if (is_array($valeur)) {
327
+                        foreach ($valeur as $val2) {
328
+                            $chaine[] = rawurlencode($cle) . '[]=' . rawurlencode($val2);
329
+                        }
330
+                    } else {
331
+                        $chaine[] = rawurlencode($cle) . '=' . rawurlencode($valeur);
332
+                    }
333
+                }
334
+                $chaine = implode('&', $chaine);
335
+            } else {
336
+                $chaine = $donnees;
337
+            }
338
+        }
339
+    }
340
+
341
+    return [$entete, $chaine];
342 342
 }
343 343
 
344 344
 /**
@@ -352,22 +352,22 @@  discard block
 block discarded – undo
352 352
  */
353 353
 function url_to_ascii($url_idn) {
354 354
 
355
-	if ($parts = parse_url($url_idn)) {
356
-		$host = $parts['host'];
357
-		if (!preg_match(',^[a-z0-9_\.\-]+$,i', $host)) {
358
-			include_spip('inc/idna_convert.class');
359
-			$IDN = new idna_convert();
360
-			$host_ascii = $IDN->encode($host);
361
-			$url_idn = explode($host, $url_idn, 2);
362
-			$url_idn = implode($host_ascii, $url_idn);
363
-		}
364
-		// et on urlencode les char utf si besoin dans le path
365
-		$url_idn = preg_replace_callback('/[^\x20-\x7f]/', function ($match) {
366
- return urlencode($match[0]);
367
-		}, $url_idn);
368
-	}
369
-
370
-	return $url_idn;
355
+    if ($parts = parse_url($url_idn)) {
356
+        $host = $parts['host'];
357
+        if (!preg_match(',^[a-z0-9_\.\-]+$,i', $host)) {
358
+            include_spip('inc/idna_convert.class');
359
+            $IDN = new idna_convert();
360
+            $host_ascii = $IDN->encode($host);
361
+            $url_idn = explode($host, $url_idn, 2);
362
+            $url_idn = implode($host_ascii, $url_idn);
363
+        }
364
+        // et on urlencode les char utf si besoin dans le path
365
+        $url_idn = preg_replace_callback('/[^\x20-\x7f]/', function ($match) {
366
+    return urlencode($match[0]);
367
+        }, $url_idn);
368
+    }
369
+
370
+    return $url_idn;
371 371
 }
372 372
 
373 373
 /**
@@ -408,197 +408,197 @@  discard block
 block discarded – undo
408 408
  *     string file : nom du fichier si enregistre dans un fichier
409 409
  */
410 410
 function recuperer_url($url, $options = []) {
411
-	// Conserve la mémoire de la méthode fournit éventuellement
412
-	$methode_demandee = $options['methode'] ?? '';
413
-	$default = [
414
-		'transcoder' => false,
415
-		'methode' => 'GET',
416
-		'taille_max' => null,
417
-		'headers' => [],
418
-		'datas' => '',
419
-		'boundary' => '',
420
-		'refuser_gz' => false,
421
-		'if_modified_since' => '',
422
-		'uri_referer' => '',
423
-		'file' => '',
424
-		'follow_location' => 10,
425
-		'version_http' => _INC_DISTANT_VERSION_HTTP,
426
-	];
427
-	$options = array_merge($default, $options);
428
-	// copier directement dans un fichier ?
429
-	$copy = $options['file'];
430
-
431
-	if ($options['methode'] == 'HEAD') {
432
-		$options['taille_max'] = 0;
433
-	}
434
-	if (is_null($options['taille_max'])) {
435
-		$options['taille_max'] = $copy ? _COPIE_LOCALE_MAX_SIZE : _INC_DISTANT_MAX_SIZE;
436
-	}
437
-
438
-
439
-	// Ajout des en-têtes spécifiques si besoin
440
-	$head_add = '';
441
-	if (!empty($options['headers'])) {
442
-		foreach ($options['headers'] as $champ => $valeur) {
443
-			$head_add .= $champ . ': ' . $valeur . "\r\n";
444
-		}
445
-		// ne pas le repasser a recuperer_url si on follow un location, car ils seront dans datas
446
-		unset($options['entetes']);
447
-	}
448
-
449
-	if (!empty($options['datas'])) {
450
-		list($head, $postdata) = prepare_donnees_post($options['datas'], $options['boundary']);
451
-		$head .= $head_add;
452
-		if (stripos($head, 'Content-Length:') === false) {
453
-			$head .= 'Content-Length: ' . strlen($postdata) . "\r\n";
454
-		}
455
-		$options['datas'] = $head . "\r\n" . $postdata;
456
-		if (
457
-			strlen($postdata)
458
-			and !$methode_demandee
459
-		) {
460
-			$options['methode'] = 'POST';
461
-		}
462
-	} elseif ($head_add) {
463
-		$options['datas'] = $head_add . "\r\n";
464
-	}
465
-
466
-	// Accepter les URLs au format feed:// ou qui ont oublie le http:// ou les urls relatives au protocole
467
-	$url = preg_replace(',^feed://,i', 'http://', $url);
468
-	if (!tester_url_absolue($url)) {
469
-		$url = 'http://' . $url;
470
-	} elseif (strncmp($url, '//', 2) == 0) {
471
-		$url = 'http:' . $url;
472
-	}
473
-
474
-	$url = url_to_ascii($url);
475
-
476
-	$result = [
477
-		'status' => 0,
478
-		'headers' => '',
479
-		'page' => '',
480
-		'length' => 0,
481
-		'last_modified' => '',
482
-		'location' => '',
483
-		'url' => $url
484
-	];
485
-
486
-	// si on ecrit directement dans un fichier, pour ne pas manipuler en memoire refuser gz
487
-	$refuser_gz = (($options['refuser_gz'] or $copy) ? true : false);
488
-
489
-	// ouvrir la connexion et envoyer la requete et ses en-tetes
490
-	list($handle, $fopen) = init_http(
491
-		$options['methode'],
492
-		$url,
493
-		$refuser_gz,
494
-		$options['uri_referer'],
495
-		$options['datas'],
496
-		$options['version_http'],
497
-		$options['if_modified_since']
498
-	);
499
-	if (!$handle) {
500
-		spip_log("ECHEC init_http $url", 'distant' . _LOG_ERREUR);
501
-
502
-		return false;
503
-	}
504
-
505
-	// Sauf en fopen, envoyer le flux d'entree
506
-	// et recuperer les en-tetes de reponses
507
-	if (!$fopen) {
508
-		$res = recuperer_entetes_complets($handle, $options['if_modified_since']);
509
-		if (!$res) {
510
-			fclose($handle);
511
-			$t = @parse_url($url);
512
-			$host = $t['host'];
513
-			// Chinoisierie inexplicable pour contrer
514
-			// les actions liberticides de l'empire du milieu
515
-			if (
516
-				!need_proxy($host)
517
-				and $res = @file_get_contents($url)
518
-			) {
519
-				$result['length'] = strlen($res);
520
-				if ($copy) {
521
-					ecrire_fichier($copy, $res);
522
-					$result['file'] = $copy;
523
-				} else {
524
-					$result['page'] = $res;
525
-				}
526
-				$res = [
527
-					'status' => 200,
528
-				];
529
-			} else {
530
-				spip_log("ECHEC chinoiserie $url", 'distant' . _LOG_ERREUR);
531
-				return false;
532
-			}
533
-		} elseif ($res['location'] and $options['follow_location']) {
534
-			$options['follow_location']--;
535
-			fclose($handle);
536
-			include_spip('inc/filtres');
537
-			$url = suivre_lien($url, $res['location']);
538
-			spip_log("recuperer_url recommence sur $url", 'distant');
539
-
540
-			return recuperer_url($url, $options);
541
-		} elseif ($res['status'] !== 200) {
542
-			spip_log('HTTP status ' . $res['status'] . " pour $url", 'distant');
543
-		}
544
-		$result['status'] = $res['status'];
545
-		if (isset($res['headers'])) {
546
-			$result['headers'] = $res['headers'];
547
-		}
548
-		if (isset($res['last_modified'])) {
549
-			$result['last_modified'] = $res['last_modified'];
550
-		}
551
-		if (isset($res['location'])) {
552
-			$result['location'] = $res['location'];
553
-		}
554
-	}
555
-
556
-	// on ne veut que les entetes
557
-	if (!$options['taille_max'] or $options['methode'] == 'HEAD' or $result['status'] == '304') {
558
-		return $result;
559
-	}
560
-
561
-
562
-	// s'il faut deballer, le faire via un fichier temporaire
563
-	// sinon la memoire explose pour les gros flux
564
-
565
-	$gz = false;
566
-	if (preg_match(",\bContent-Encoding: .*gzip,is", $result['headers'])) {
567
-		$gz = (_DIR_TMP . md5(uniqid(mt_rand())) . '.tmp.gz');
568
-	}
569
-
570
-	// si on a pas deja recuperer le contenu par une methode detournee
571
-	if (!$result['length']) {
572
-		$res = recuperer_body($handle, $options['taille_max'], $gz ? $gz : $copy);
573
-		fclose($handle);
574
-		if ($copy) {
575
-			$result['length'] = $res;
576
-			$result['file'] = $copy;
577
-		} elseif ($res) {
578
-			$result['page'] = &$res;
579
-			$result['length'] = strlen($result['page']);
580
-		}
581
-		if (!$result['status']) {
582
-			$result['status'] = 200; // on a reussi, donc !
583
-		}
584
-	}
585
-	if (!$result['page']) {
586
-		return $result;
587
-	}
588
-
589
-	// Decompresser au besoin
590
-	if ($gz) {
591
-		$result['page'] = implode('', gzfile($gz));
592
-		supprimer_fichier($gz);
593
-	}
594
-
595
-	// Faut-il l'importer dans notre charset local ?
596
-	if ($options['transcoder']) {
597
-		include_spip('inc/charsets');
598
-		$result['page'] = transcoder_page($result['page'], $result['headers']);
599
-	}
600
-
601
-	return $result;
411
+    // Conserve la mémoire de la méthode fournit éventuellement
412
+    $methode_demandee = $options['methode'] ?? '';
413
+    $default = [
414
+        'transcoder' => false,
415
+        'methode' => 'GET',
416
+        'taille_max' => null,
417
+        'headers' => [],
418
+        'datas' => '',
419
+        'boundary' => '',
420
+        'refuser_gz' => false,
421
+        'if_modified_since' => '',
422
+        'uri_referer' => '',
423
+        'file' => '',
424
+        'follow_location' => 10,
425
+        'version_http' => _INC_DISTANT_VERSION_HTTP,
426
+    ];
427
+    $options = array_merge($default, $options);
428
+    // copier directement dans un fichier ?
429
+    $copy = $options['file'];
430
+
431
+    if ($options['methode'] == 'HEAD') {
432
+        $options['taille_max'] = 0;
433
+    }
434
+    if (is_null($options['taille_max'])) {
435
+        $options['taille_max'] = $copy ? _COPIE_LOCALE_MAX_SIZE : _INC_DISTANT_MAX_SIZE;
436
+    }
437
+
438
+
439
+    // Ajout des en-têtes spécifiques si besoin
440
+    $head_add = '';
441
+    if (!empty($options['headers'])) {
442
+        foreach ($options['headers'] as $champ => $valeur) {
443
+            $head_add .= $champ . ': ' . $valeur . "\r\n";
444
+        }
445
+        // ne pas le repasser a recuperer_url si on follow un location, car ils seront dans datas
446
+        unset($options['entetes']);
447
+    }
448
+
449
+    if (!empty($options['datas'])) {
450
+        list($head, $postdata) = prepare_donnees_post($options['datas'], $options['boundary']);
451
+        $head .= $head_add;
452
+        if (stripos($head, 'Content-Length:') === false) {
453
+            $head .= 'Content-Length: ' . strlen($postdata) . "\r\n";
454
+        }
455
+        $options['datas'] = $head . "\r\n" . $postdata;
456
+        if (
457
+            strlen($postdata)
458
+            and !$methode_demandee
459
+        ) {
460
+            $options['methode'] = 'POST';
461
+        }
462
+    } elseif ($head_add) {
463
+        $options['datas'] = $head_add . "\r\n";
464
+    }
465
+
466
+    // Accepter les URLs au format feed:// ou qui ont oublie le http:// ou les urls relatives au protocole
467
+    $url = preg_replace(',^feed://,i', 'http://', $url);
468
+    if (!tester_url_absolue($url)) {
469
+        $url = 'http://' . $url;
470
+    } elseif (strncmp($url, '//', 2) == 0) {
471
+        $url = 'http:' . $url;
472
+    }
473
+
474
+    $url = url_to_ascii($url);
475
+
476
+    $result = [
477
+        'status' => 0,
478
+        'headers' => '',
479
+        'page' => '',
480
+        'length' => 0,
481
+        'last_modified' => '',
482
+        'location' => '',
483
+        'url' => $url
484
+    ];
485
+
486
+    // si on ecrit directement dans un fichier, pour ne pas manipuler en memoire refuser gz
487
+    $refuser_gz = (($options['refuser_gz'] or $copy) ? true : false);
488
+
489
+    // ouvrir la connexion et envoyer la requete et ses en-tetes
490
+    list($handle, $fopen) = init_http(
491
+        $options['methode'],
492
+        $url,
493
+        $refuser_gz,
494
+        $options['uri_referer'],
495
+        $options['datas'],
496
+        $options['version_http'],
497
+        $options['if_modified_since']
498
+    );
499
+    if (!$handle) {
500
+        spip_log("ECHEC init_http $url", 'distant' . _LOG_ERREUR);
501
+
502
+        return false;
503
+    }
504
+
505
+    // Sauf en fopen, envoyer le flux d'entree
506
+    // et recuperer les en-tetes de reponses
507
+    if (!$fopen) {
508
+        $res = recuperer_entetes_complets($handle, $options['if_modified_since']);
509
+        if (!$res) {
510
+            fclose($handle);
511
+            $t = @parse_url($url);
512
+            $host = $t['host'];
513
+            // Chinoisierie inexplicable pour contrer
514
+            // les actions liberticides de l'empire du milieu
515
+            if (
516
+                !need_proxy($host)
517
+                and $res = @file_get_contents($url)
518
+            ) {
519
+                $result['length'] = strlen($res);
520
+                if ($copy) {
521
+                    ecrire_fichier($copy, $res);
522
+                    $result['file'] = $copy;
523
+                } else {
524
+                    $result['page'] = $res;
525
+                }
526
+                $res = [
527
+                    'status' => 200,
528
+                ];
529
+            } else {
530
+                spip_log("ECHEC chinoiserie $url", 'distant' . _LOG_ERREUR);
531
+                return false;
532
+            }
533
+        } elseif ($res['location'] and $options['follow_location']) {
534
+            $options['follow_location']--;
535
+            fclose($handle);
536
+            include_spip('inc/filtres');
537
+            $url = suivre_lien($url, $res['location']);
538
+            spip_log("recuperer_url recommence sur $url", 'distant');
539
+
540
+            return recuperer_url($url, $options);
541
+        } elseif ($res['status'] !== 200) {
542
+            spip_log('HTTP status ' . $res['status'] . " pour $url", 'distant');
543
+        }
544
+        $result['status'] = $res['status'];
545
+        if (isset($res['headers'])) {
546
+            $result['headers'] = $res['headers'];
547
+        }
548
+        if (isset($res['last_modified'])) {
549
+            $result['last_modified'] = $res['last_modified'];
550
+        }
551
+        if (isset($res['location'])) {
552
+            $result['location'] = $res['location'];
553
+        }
554
+    }
555
+
556
+    // on ne veut que les entetes
557
+    if (!$options['taille_max'] or $options['methode'] == 'HEAD' or $result['status'] == '304') {
558
+        return $result;
559
+    }
560
+
561
+
562
+    // s'il faut deballer, le faire via un fichier temporaire
563
+    // sinon la memoire explose pour les gros flux
564
+
565
+    $gz = false;
566
+    if (preg_match(",\bContent-Encoding: .*gzip,is", $result['headers'])) {
567
+        $gz = (_DIR_TMP . md5(uniqid(mt_rand())) . '.tmp.gz');
568
+    }
569
+
570
+    // si on a pas deja recuperer le contenu par une methode detournee
571
+    if (!$result['length']) {
572
+        $res = recuperer_body($handle, $options['taille_max'], $gz ? $gz : $copy);
573
+        fclose($handle);
574
+        if ($copy) {
575
+            $result['length'] = $res;
576
+            $result['file'] = $copy;
577
+        } elseif ($res) {
578
+            $result['page'] = &$res;
579
+            $result['length'] = strlen($result['page']);
580
+        }
581
+        if (!$result['status']) {
582
+            $result['status'] = 200; // on a reussi, donc !
583
+        }
584
+    }
585
+    if (!$result['page']) {
586
+        return $result;
587
+    }
588
+
589
+    // Decompresser au besoin
590
+    if ($gz) {
591
+        $result['page'] = implode('', gzfile($gz));
592
+        supprimer_fichier($gz);
593
+    }
594
+
595
+    // Faut-il l'importer dans notre charset local ?
596
+    if ($options['transcoder']) {
597
+        include_spip('inc/charsets');
598
+        $result['page'] = transcoder_page($result['page'], $result['headers']);
599
+    }
600
+
601
+    return $result;
602 602
 }
603 603
 
604 604
 /**
@@ -614,73 +614,73 @@  discard block
 block discarded – undo
614 614
  * @return array|bool|mixed
615 615
  */
616 616
 function recuperer_url_cache($url, $options = []) {
617
-	if (!defined('_DELAI_RECUPERER_URL_CACHE')) {
618
-		define('_DELAI_RECUPERER_URL_CACHE', 3600);
619
-	}
620
-	$default = [
621
-		'transcoder' => false,
622
-		'methode' => 'GET',
623
-		'taille_max' => null,
624
-		'datas' => '',
625
-		'boundary' => '',
626
-		'refuser_gz' => false,
627
-		'if_modified_since' => '',
628
-		'uri_referer' => '',
629
-		'file' => '',
630
-		'follow_location' => 10,
631
-		'version_http' => _INC_DISTANT_VERSION_HTTP,
632
-		'delai_cache' => in_array(_VAR_MODE, ['preview', 'recalcul']) ? 0 : _DELAI_RECUPERER_URL_CACHE,
633
-	];
634
-	$options = array_merge($default, $options);
635
-
636
-	// cas ou il n'est pas possible de cacher
637
-	if (!empty($options['data']) or $options['methode'] == 'POST') {
638
-		return recuperer_url($url, $options);
639
-	}
640
-
641
-	// ne pas tenter plusieurs fois la meme url en erreur (non cachee donc)
642
-	static $errors = [];
643
-	if (isset($errors[$url])) {
644
-		return $errors[$url];
645
-	}
646
-
647
-	$sig = $options;
648
-	unset($sig['if_modified_since']);
649
-	unset($sig['delai_cache']);
650
-	$sig['url'] = $url;
651
-
652
-	$dir = sous_repertoire(_DIR_CACHE, 'curl');
653
-	$cache = md5(serialize($sig)) . '-' . substr(preg_replace(',\W+,', '_', $url), 0, 80);
654
-	$sub = sous_repertoire($dir, substr($cache, 0, 2));
655
-	$cache = "$sub$cache";
656
-
657
-	$res = false;
658
-	$is_cached = file_exists($cache);
659
-	if (
660
-		$is_cached
661
-		and (filemtime($cache) > $_SERVER['REQUEST_TIME'] - $options['delai_cache'])
662
-	) {
663
-		lire_fichier($cache, $res);
664
-		if ($res = unserialize($res)) {
665
-			// mettre le last_modified et le status=304 ?
666
-		}
667
-	}
668
-	if (!$res) {
669
-		$res = recuperer_url($url, $options);
670
-		// ne pas recharger cette url non cachee dans le meme hit puisque non disponible
671
-		if (!$res) {
672
-			if ($is_cached) {
673
-				// on a pas reussi a recuperer mais on avait un cache : l'utiliser
674
-				lire_fichier($cache, $res);
675
-				$res = unserialize($res);
676
-			}
677
-
678
-			return $errors[$url] = $res;
679
-		}
680
-		ecrire_fichier($cache, serialize($res));
681
-	}
682
-
683
-	return $res;
617
+    if (!defined('_DELAI_RECUPERER_URL_CACHE')) {
618
+        define('_DELAI_RECUPERER_URL_CACHE', 3600);
619
+    }
620
+    $default = [
621
+        'transcoder' => false,
622
+        'methode' => 'GET',
623
+        'taille_max' => null,
624
+        'datas' => '',
625
+        'boundary' => '',
626
+        'refuser_gz' => false,
627
+        'if_modified_since' => '',
628
+        'uri_referer' => '',
629
+        'file' => '',
630
+        'follow_location' => 10,
631
+        'version_http' => _INC_DISTANT_VERSION_HTTP,
632
+        'delai_cache' => in_array(_VAR_MODE, ['preview', 'recalcul']) ? 0 : _DELAI_RECUPERER_URL_CACHE,
633
+    ];
634
+    $options = array_merge($default, $options);
635
+
636
+    // cas ou il n'est pas possible de cacher
637
+    if (!empty($options['data']) or $options['methode'] == 'POST') {
638
+        return recuperer_url($url, $options);
639
+    }
640
+
641
+    // ne pas tenter plusieurs fois la meme url en erreur (non cachee donc)
642
+    static $errors = [];
643
+    if (isset($errors[$url])) {
644
+        return $errors[$url];
645
+    }
646
+
647
+    $sig = $options;
648
+    unset($sig['if_modified_since']);
649
+    unset($sig['delai_cache']);
650
+    $sig['url'] = $url;
651
+
652
+    $dir = sous_repertoire(_DIR_CACHE, 'curl');
653
+    $cache = md5(serialize($sig)) . '-' . substr(preg_replace(',\W+,', '_', $url), 0, 80);
654
+    $sub = sous_repertoire($dir, substr($cache, 0, 2));
655
+    $cache = "$sub$cache";
656
+
657
+    $res = false;
658
+    $is_cached = file_exists($cache);
659
+    if (
660
+        $is_cached
661
+        and (filemtime($cache) > $_SERVER['REQUEST_TIME'] - $options['delai_cache'])
662
+    ) {
663
+        lire_fichier($cache, $res);
664
+        if ($res = unserialize($res)) {
665
+            // mettre le last_modified et le status=304 ?
666
+        }
667
+    }
668
+    if (!$res) {
669
+        $res = recuperer_url($url, $options);
670
+        // ne pas recharger cette url non cachee dans le meme hit puisque non disponible
671
+        if (!$res) {
672
+            if ($is_cached) {
673
+                // on a pas reussi a recuperer mais on avait un cache : l'utiliser
674
+                lire_fichier($cache, $res);
675
+                $res = unserialize($res);
676
+            }
677
+
678
+            return $errors[$url] = $res;
679
+        }
680
+        ecrire_fichier($cache, serialize($res));
681
+    }
682
+
683
+    return $res;
684 684
 }
685 685
 
686 686
 /**
@@ -698,41 +698,41 @@  discard block
 block discarded – undo
698 698
  *   string contenu de la resource
699 699
  */
700 700
 function recuperer_body($handle, $taille_max = _INC_DISTANT_MAX_SIZE, $fichier = '') {
701
-	$taille = 0;
702
-	$result = '';
703
-	$fp = false;
704
-	if ($fichier) {
705
-		include_spip('inc/acces');
706
-		$tmpfile = "$fichier." . creer_uniqid() . '.tmp';
707
-		$fp = spip_fopen_lock($tmpfile, 'w', LOCK_EX);
708
-		if (!$fp and file_exists($fichier)) {
709
-			return filesize($fichier);
710
-		}
711
-		if (!$fp) {
712
-			return false;
713
-		}
714
-		$result = 0; // on renvoie la taille du fichier
715
-	}
716
-	while (!feof($handle) and $taille < $taille_max) {
717
-		$res = fread($handle, 16384);
718
-		$taille += strlen($res);
719
-		if ($fp) {
720
-			fwrite($fp, $res);
721
-			$result = $taille;
722
-		} else {
723
-			$result .= $res;
724
-		}
725
-	}
726
-	if ($fp) {
727
-		spip_fclose_unlock($fp);
728
-		spip_unlink($fichier);
729
-		@rename($tmpfile, $fichier);
730
-		if (!file_exists($fichier)) {
731
-			return false;
732
-		}
733
-	}
734
-
735
-	return $result;
701
+    $taille = 0;
702
+    $result = '';
703
+    $fp = false;
704
+    if ($fichier) {
705
+        include_spip('inc/acces');
706
+        $tmpfile = "$fichier." . creer_uniqid() . '.tmp';
707
+        $fp = spip_fopen_lock($tmpfile, 'w', LOCK_EX);
708
+        if (!$fp and file_exists($fichier)) {
709
+            return filesize($fichier);
710
+        }
711
+        if (!$fp) {
712
+            return false;
713
+        }
714
+        $result = 0; // on renvoie la taille du fichier
715
+    }
716
+    while (!feof($handle) and $taille < $taille_max) {
717
+        $res = fread($handle, 16384);
718
+        $taille += strlen($res);
719
+        if ($fp) {
720
+            fwrite($fp, $res);
721
+            $result = $taille;
722
+        } else {
723
+            $result .= $res;
724
+        }
725
+    }
726
+    if ($fp) {
727
+        spip_fclose_unlock($fp);
728
+        spip_unlink($fichier);
729
+        @rename($tmpfile, $fichier);
730
+        if (!file_exists($fichier)) {
731
+            return false;
732
+        }
733
+    }
734
+
735
+    return $result;
736 736
 }
737 737
 
738 738
 /**
@@ -754,35 +754,35 @@  discard block
 block discarded – undo
754 754
  *   string location
755 755
  */
756 756
 function recuperer_entetes_complets($handle, $if_modified_since = false) {
757
-	$result = ['status' => 0, 'headers' => [], 'last_modified' => 0, 'location' => ''];
758
-
759
-	$s = @trim(fgets($handle, 16384));
760
-	if (!preg_match(',^HTTP/[0-9]+\.[0-9]+ ([0-9]+),', $s, $r)) {
761
-		return false;
762
-	}
763
-	$result['status'] = intval($r[1]);
764
-	while ($s = trim(fgets($handle, 16384))) {
765
-		$result['headers'][] = $s . "\n";
766
-		preg_match(',^([^:]*): *(.*)$,i', $s, $r);
767
-		list(, $d, $v) = $r;
768
-		if (strtolower(trim($d)) == 'location' and $result['status'] >= 300 and $result['status'] < 400) {
769
-			$result['location'] = $v;
770
-		} elseif ($d == 'Last-Modified') {
771
-			$result['last_modified'] = strtotime($v);
772
-		}
773
-	}
774
-	if (
775
-		$if_modified_since
776
-		and $result['last_modified']
777
-		and $if_modified_since > $result['last_modified']
778
-		and $result['status'] == 200
779
-	) {
780
-		$result['status'] = 304;
781
-	}
782
-
783
-	$result['headers'] = implode('', $result['headers']);
784
-
785
-	return $result;
757
+    $result = ['status' => 0, 'headers' => [], 'last_modified' => 0, 'location' => ''];
758
+
759
+    $s = @trim(fgets($handle, 16384));
760
+    if (!preg_match(',^HTTP/[0-9]+\.[0-9]+ ([0-9]+),', $s, $r)) {
761
+        return false;
762
+    }
763
+    $result['status'] = intval($r[1]);
764
+    while ($s = trim(fgets($handle, 16384))) {
765
+        $result['headers'][] = $s . "\n";
766
+        preg_match(',^([^:]*): *(.*)$,i', $s, $r);
767
+        list(, $d, $v) = $r;
768
+        if (strtolower(trim($d)) == 'location' and $result['status'] >= 300 and $result['status'] < 400) {
769
+            $result['location'] = $v;
770
+        } elseif ($d == 'Last-Modified') {
771
+            $result['last_modified'] = strtotime($v);
772
+        }
773
+    }
774
+    if (
775
+        $if_modified_since
776
+        and $result['last_modified']
777
+        and $if_modified_since > $result['last_modified']
778
+        and $result['status'] == 200
779
+    ) {
780
+        $result['status'] = 304;
781
+    }
782
+
783
+    $result['headers'] = implode('', $result['headers']);
784
+
785
+    return $result;
786 786
 }
787 787
 
788 788
 /**
@@ -804,22 +804,22 @@  discard block
 block discarded – undo
804 804
  *     Nom du fichier pour copie locale
805 805
  **/
806 806
 function nom_fichier_copie_locale($source, $extension) {
807
-	include_spip('inc/documents');
807
+    include_spip('inc/documents');
808 808
 
809
-	$d = creer_repertoire_documents('distant'); # IMG/distant/
810
-	$d = sous_repertoire($d, $extension); # IMG/distant/pdf/
809
+    $d = creer_repertoire_documents('distant'); # IMG/distant/
810
+    $d = sous_repertoire($d, $extension); # IMG/distant/pdf/
811 811
 
812
-	// on se place tout le temps comme si on etait a la racine
813
-	if (_DIR_RACINE) {
814
-		$d = preg_replace(',^' . preg_quote(_DIR_RACINE) . ',', '', $d);
815
-	}
812
+    // on se place tout le temps comme si on etait a la racine
813
+    if (_DIR_RACINE) {
814
+        $d = preg_replace(',^' . preg_quote(_DIR_RACINE) . ',', '', $d);
815
+    }
816 816
 
817
-	$m = md5($source);
817
+    $m = md5($source);
818 818
 
819
-	return $d
820
-	. substr(preg_replace(',[^\w-],', '', basename($source)) . '-' . $m, 0, 12)
821
-	. substr($m, 0, 4)
822
-	. ".$extension";
819
+    return $d
820
+    . substr(preg_replace(',[^\w-],', '', basename($source)) . '-' . $m, 0, 12)
821
+    . substr($m, 0, 4)
822
+    . ".$extension";
823 823
 }
824 824
 
825 825
 /**
@@ -837,70 +837,70 @@  discard block
 block discarded – undo
837 837
  *      Nom du fichier calculé
838 838
  **/
839 839
 function fichier_copie_locale($source) {
840
-	// Si c'est deja local pas de souci
841
-	if (!tester_url_absolue($source)) {
842
-		if (_DIR_RACINE) {
843
-			$source = preg_replace(',^' . preg_quote(_DIR_RACINE) . ',', '', $source);
844
-		}
845
-
846
-		return $source;
847
-	}
848
-
849
-	// optimisation : on regarde si on peut deviner l'extension dans l'url et si le fichier
850
-	// a deja ete copie en local avec cette extension
851
-	// dans ce cas elle est fiable, pas la peine de requeter en base
852
-	$path_parts = pathinfo($source);
853
-	if (!isset($path_parts['extension'])) {
854
-		$path_parts['extension'] = '';
855
-	}
856
-	$ext = $path_parts ? $path_parts['extension'] : '';
857
-	if (
858
-		$ext
859
-		and preg_match(',^\w+$,', $ext) // pas de php?truc=1&...
860
-		and $f = nom_fichier_copie_locale($source, $ext)
861
-		and file_exists(_DIR_RACINE . $f)
862
-	) {
863
-		return $f;
864
-	}
865
-
866
-
867
-	// Si c'est deja dans la table des documents,
868
-	// ramener le nom de sa copie potentielle
869
-	$ext = sql_getfetsel('extension', 'spip_documents', 'fichier=' . sql_quote($source) . " AND distant='oui' AND extension <> ''");
870
-
871
-	if ($ext) {
872
-		return nom_fichier_copie_locale($source, $ext);
873
-	}
874
-
875
-	// voir si l'extension indiquee dans le nom du fichier est ok
876
-	// et si il n'aurait pas deja ete rapatrie
877
-
878
-	$ext = $path_parts ? $path_parts['extension'] : '';
879
-
880
-	if ($ext and sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
881
-		$f = nom_fichier_copie_locale($source, $ext);
882
-		if (file_exists(_DIR_RACINE . $f)) {
883
-			return $f;
884
-		}
885
-	}
886
-
887
-	// Ping  pour voir si son extension est connue et autorisee
888
-	// avec mise en cache du resultat du ping
889
-
890
-	$cache = sous_repertoire(_DIR_CACHE, 'rid') . md5($source);
891
-	if (
892
-		!@file_exists($cache)
893
-		or !$path_parts = @unserialize(spip_file_get_contents($cache))
894
-		or _request('var_mode') == 'recalcul'
895
-	) {
896
-		$path_parts = recuperer_infos_distantes($source, 0, false);
897
-		ecrire_fichier($cache, serialize($path_parts));
898
-	}
899
-	$ext = !empty($path_parts['extension']) ? $path_parts['extension'] : '';
900
-	if ($ext and sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
901
-		return nom_fichier_copie_locale($source, $ext);
902
-	}
903
-	spip_log("pas de copie locale pour $source", 'distant' . _LOG_ERREUR);
840
+    // Si c'est deja local pas de souci
841
+    if (!tester_url_absolue($source)) {
842
+        if (_DIR_RACINE) {
843
+            $source = preg_replace(',^' . preg_quote(_DIR_RACINE) . ',', '', $source);
844
+        }
845
+
846
+        return $source;
847
+    }
848
+
849
+    // optimisation : on regarde si on peut deviner l'extension dans l'url et si le fichier
850
+    // a deja ete copie en local avec cette extension
851
+    // dans ce cas elle est fiable, pas la peine de requeter en base
852
+    $path_parts = pathinfo($source);
853
+    if (!isset($path_parts['extension'])) {
854
+        $path_parts['extension'] = '';
855
+    }
856
+    $ext = $path_parts ? $path_parts['extension'] : '';
857
+    if (
858
+        $ext
859
+        and preg_match(',^\w+$,', $ext) // pas de php?truc=1&...
860
+        and $f = nom_fichier_copie_locale($source, $ext)
861
+        and file_exists(_DIR_RACINE . $f)
862
+    ) {
863
+        return $f;
864
+    }
865
+
866
+
867
+    // Si c'est deja dans la table des documents,
868
+    // ramener le nom de sa copie potentielle
869
+    $ext = sql_getfetsel('extension', 'spip_documents', 'fichier=' . sql_quote($source) . " AND distant='oui' AND extension <> ''");
870
+
871
+    if ($ext) {
872
+        return nom_fichier_copie_locale($source, $ext);
873
+    }
874
+
875
+    // voir si l'extension indiquee dans le nom du fichier est ok
876
+    // et si il n'aurait pas deja ete rapatrie
877
+
878
+    $ext = $path_parts ? $path_parts['extension'] : '';
879
+
880
+    if ($ext and sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
881
+        $f = nom_fichier_copie_locale($source, $ext);
882
+        if (file_exists(_DIR_RACINE . $f)) {
883
+            return $f;
884
+        }
885
+    }
886
+
887
+    // Ping  pour voir si son extension est connue et autorisee
888
+    // avec mise en cache du resultat du ping
889
+
890
+    $cache = sous_repertoire(_DIR_CACHE, 'rid') . md5($source);
891
+    if (
892
+        !@file_exists($cache)
893
+        or !$path_parts = @unserialize(spip_file_get_contents($cache))
894
+        or _request('var_mode') == 'recalcul'
895
+    ) {
896
+        $path_parts = recuperer_infos_distantes($source, 0, false);
897
+        ecrire_fichier($cache, serialize($path_parts));
898
+    }
899
+    $ext = !empty($path_parts['extension']) ? $path_parts['extension'] : '';
900
+    if ($ext and sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
901
+        return nom_fichier_copie_locale($source, $ext);
902
+    }
903
+    spip_log("pas de copie locale pour $source", 'distant' . _LOG_ERREUR);
904 904
 }
905 905
 
906 906
 
@@ -928,153 +928,153 @@  discard block
 block discarded – undo
928 928
  **/
929 929
 function recuperer_infos_distantes($source, $max = 0, $charger_si_petite_image = true) {
930 930
 
931
-	// pas la peine de perdre son temps
932
-	if (!tester_url_absolue($source)) {
933
-		return false;
934
-	}
935
-
936
-	# charger les alias des types mime
937
-	include_spip('base/typedoc');
938
-
939
-	$a = [];
940
-	$mime_type = '';
941
-	// On va directement charger le debut des images et des fichiers html,
942
-	// de maniere a attrapper le maximum d'infos (titre, taille, etc). Si
943
-	// ca echoue l'utilisateur devra les entrer...
944
-	$reponse = recuperer_url($source, ['taille_max' => $max, 'refuser_gz' => true]);
945
-	$headers = $reponse['headers'] ?? '';
946
-	$a['body'] = $reponse['page'] ?? '';
947
-	if ($headers) {
948
-		if (preg_match(",\nContent-Type: *([^[:space:];]*),i", "\n$headers", $regs)) {
949
-			$mime_type = (trim($regs[1]));
950
-		} else {
951
-			$mime_type = '';
952
-		} // inconnu
953
-
954
-		// Appliquer les alias
955
-		while (isset($GLOBALS['mime_alias'][$mime_type])) {
956
-			$mime_type = $GLOBALS['mime_alias'][$mime_type];
957
-		}
958
-
959
-		// Si on a un mime-type insignifiant
960
-		// text/plain,application/octet-stream ou vide
961
-		// c'est peut-etre que le serveur ne sait pas
962
-		// ce qu'il sert ; on va tenter de detecter via l'extension de l'url
963
-		// ou le Content-Disposition: attachment; filename=...
964
-		$t = null;
965
-		if (in_array($mime_type, ['text/plain', '', 'application/octet-stream'])) {
966
-			if (
967
-				!$t
968
-				and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $rext)
969
-			) {
970
-				$t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
971
-			}
972
-			if (
973
-				!$t
974
-				and preg_match(',^Content-Disposition:\s*attachment;\s*filename=(.*)$,Uims', $headers, $m)
975
-				and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $m[1], $rext)
976
-			) {
977
-				$t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
978
-			}
979
-		}
980
-
981
-		// Autre mime/type (ou text/plain avec fichier d'extension inconnue)
982
-		if (!$t) {
983
-			$t = sql_fetsel('extension', 'spip_types_documents', 'mime_type=' . sql_quote($mime_type));
984
-		}
985
-
986
-		// Toujours rien ? (ex: audio/x-ogg au lieu de application/ogg)
987
-		// On essaie de nouveau avec l'extension
988
-		if (
989
-			!$t
990
-			and $mime_type != 'text/plain'
991
-			and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $rext)
992
-		) {
993
-			# eviter xxx.3 => 3gp (> SPIP 3)
994
-			$t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
995
-		}
996
-
997
-		if ($t) {
998
-			spip_log("mime-type $mime_type ok, extension " . $t['extension'], 'distant');
999
-			$a['extension'] = $t['extension'];
1000
-		} else {
1001
-			# par defaut on retombe sur '.bin' si c'est autorise
1002
-			spip_log("mime-type $mime_type inconnu", 'distant');
1003
-			$t = sql_fetsel('extension', 'spip_types_documents', "extension='bin'");
1004
-			if (!$t) {
1005
-				return false;
1006
-			}
1007
-			$a['extension'] = $t['extension'];
1008
-		}
1009
-
1010
-		if (preg_match(",\nContent-Length: *([^[:space:]]*),i", "\n$headers", $regs)) {
1011
-			$a['taille'] = intval($regs[1]);
1012
-		}
1013
-	}
1014
-
1015
-	// Echec avec HEAD, on tente avec GET
1016
-	if (!$a and !$max) {
1017
-		spip_log("tenter GET $source", 'distant');
1018
-		$a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE);
1019
-	}
1020
-
1021
-	// si on a rien trouve pas la peine d'insister
1022
-	if (!$a) {
1023
-		return false;
1024
-	}
1025
-
1026
-	// S'il s'agit d'une image pas trop grosse ou d'un fichier html, on va aller
1027
-	// recharger le document en GET et recuperer des donnees supplementaires...
1028
-	include_spip('inc/filtres_images_lib_mini');
1029
-	if (
1030
-		strpos($mime_type, 'image/') === 0
1031
-		and $extension = _image_trouver_extension_depuis_mime($mime_type)
1032
-	) {
1033
-		if (
1034
-			$max == 0
1035
-			and (empty($a['taille']) or $a['taille'] < _INC_DISTANT_MAX_SIZE)
1036
-			and in_array($extension, formats_image_acceptables())
1037
-			and $charger_si_petite_image
1038
-		) {
1039
-			$a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE);
1040
-		} else {
1041
-			if ($a['body']) {
1042
-				$a['extension'] = $extension;
1043
-				$a['fichier'] = _DIR_RACINE . nom_fichier_copie_locale($source, $extension);
1044
-				ecrire_fichier($a['fichier'], $a['body']);
1045
-				$size_image = @spip_getimagesize($a['fichier']);
1046
-				$a['largeur'] = intval($size_image[0]);
1047
-				$a['hauteur'] = intval($size_image[1]);
1048
-				$a['type_image'] = true;
1049
-			}
1050
-		}
1051
-	}
1052
-
1053
-	// Fichier swf, si on n'a pas la taille, on va mettre 425x350 par defaut
1054
-	// ce sera mieux que 0x0
1055
-	// Flash is dead!
1056
-	if (
1057
-		$a and isset($a['extension']) and $a['extension'] == 'swf'
1058
-		and empty($a['largeur'])
1059
-	) {
1060
-		$a['largeur'] = 425;
1061
-		$a['hauteur'] = 350;
1062
-	}
1063
-
1064
-	if ($mime_type == 'text/html') {
1065
-		include_spip('inc/filtres');
1066
-		$page = recuperer_url($source, ['transcoder' => true, 'taille_max' => _INC_DISTANT_MAX_SIZE]);
1067
-		$page = $page['page'] ?? '';
1068
-		if (preg_match(',<title>(.*?)</title>,ims', $page, $regs)) {
1069
-			$a['titre'] = corriger_caracteres(trim($regs[1]));
1070
-		}
1071
-		if (!isset($a['taille']) or !$a['taille']) {
1072
-			$a['taille'] = strlen($page); # a peu pres
1073
-		}
1074
-	}
1075
-	$a['mime_type'] = $mime_type;
1076
-
1077
-	return $a;
931
+    // pas la peine de perdre son temps
932
+    if (!tester_url_absolue($source)) {
933
+        return false;
934
+    }
935
+
936
+    # charger les alias des types mime
937
+    include_spip('base/typedoc');
938
+
939
+    $a = [];
940
+    $mime_type = '';
941
+    // On va directement charger le debut des images et des fichiers html,
942
+    // de maniere a attrapper le maximum d'infos (titre, taille, etc). Si
943
+    // ca echoue l'utilisateur devra les entrer...
944
+    $reponse = recuperer_url($source, ['taille_max' => $max, 'refuser_gz' => true]);
945
+    $headers = $reponse['headers'] ?? '';
946
+    $a['body'] = $reponse['page'] ?? '';
947
+    if ($headers) {
948
+        if (preg_match(",\nContent-Type: *([^[:space:];]*),i", "\n$headers", $regs)) {
949
+            $mime_type = (trim($regs[1]));
950
+        } else {
951
+            $mime_type = '';
952
+        } // inconnu
953
+
954
+        // Appliquer les alias
955
+        while (isset($GLOBALS['mime_alias'][$mime_type])) {
956
+            $mime_type = $GLOBALS['mime_alias'][$mime_type];
957
+        }
958
+
959
+        // Si on a un mime-type insignifiant
960
+        // text/plain,application/octet-stream ou vide
961
+        // c'est peut-etre que le serveur ne sait pas
962
+        // ce qu'il sert ; on va tenter de detecter via l'extension de l'url
963
+        // ou le Content-Disposition: attachment; filename=...
964
+        $t = null;
965
+        if (in_array($mime_type, ['text/plain', '', 'application/octet-stream'])) {
966
+            if (
967
+                !$t
968
+                and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $rext)
969
+            ) {
970
+                $t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
971
+            }
972
+            if (
973
+                !$t
974
+                and preg_match(',^Content-Disposition:\s*attachment;\s*filename=(.*)$,Uims', $headers, $m)
975
+                and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $m[1], $rext)
976
+            ) {
977
+                $t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
978
+            }
979
+        }
980
+
981
+        // Autre mime/type (ou text/plain avec fichier d'extension inconnue)
982
+        if (!$t) {
983
+            $t = sql_fetsel('extension', 'spip_types_documents', 'mime_type=' . sql_quote($mime_type));
984
+        }
985
+
986
+        // Toujours rien ? (ex: audio/x-ogg au lieu de application/ogg)
987
+        // On essaie de nouveau avec l'extension
988
+        if (
989
+            !$t
990
+            and $mime_type != 'text/plain'
991
+            and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $rext)
992
+        ) {
993
+            # eviter xxx.3 => 3gp (> SPIP 3)
994
+            $t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
995
+        }
996
+
997
+        if ($t) {
998
+            spip_log("mime-type $mime_type ok, extension " . $t['extension'], 'distant');
999
+            $a['extension'] = $t['extension'];
1000
+        } else {
1001
+            # par defaut on retombe sur '.bin' si c'est autorise
1002
+            spip_log("mime-type $mime_type inconnu", 'distant');
1003
+            $t = sql_fetsel('extension', 'spip_types_documents', "extension='bin'");
1004
+            if (!$t) {
1005
+                return false;
1006
+            }
1007
+            $a['extension'] = $t['extension'];
1008
+        }
1009
+
1010
+        if (preg_match(",\nContent-Length: *([^[:space:]]*),i", "\n$headers", $regs)) {
1011
+            $a['taille'] = intval($regs[1]);
1012
+        }
1013
+    }
1014
+
1015
+    // Echec avec HEAD, on tente avec GET
1016
+    if (!$a and !$max) {
1017
+        spip_log("tenter GET $source", 'distant');
1018
+        $a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE);
1019
+    }
1020
+
1021
+    // si on a rien trouve pas la peine d'insister
1022
+    if (!$a) {
1023
+        return false;
1024
+    }
1025
+
1026
+    // S'il s'agit d'une image pas trop grosse ou d'un fichier html, on va aller
1027
+    // recharger le document en GET et recuperer des donnees supplementaires...
1028
+    include_spip('inc/filtres_images_lib_mini');
1029
+    if (
1030
+        strpos($mime_type, 'image/') === 0
1031
+        and $extension = _image_trouver_extension_depuis_mime($mime_type)
1032
+    ) {
1033
+        if (
1034
+            $max == 0
1035
+            and (empty($a['taille']) or $a['taille'] < _INC_DISTANT_MAX_SIZE)
1036
+            and in_array($extension, formats_image_acceptables())
1037
+            and $charger_si_petite_image
1038
+        ) {
1039
+            $a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE);
1040
+        } else {
1041
+            if ($a['body']) {
1042
+                $a['extension'] = $extension;
1043
+                $a['fichier'] = _DIR_RACINE . nom_fichier_copie_locale($source, $extension);
1044
+                ecrire_fichier($a['fichier'], $a['body']);
1045
+                $size_image = @spip_getimagesize($a['fichier']);
1046
+                $a['largeur'] = intval($size_image[0]);
1047
+                $a['hauteur'] = intval($size_image[1]);
1048
+                $a['type_image'] = true;
1049
+            }
1050
+        }
1051
+    }
1052
+
1053
+    // Fichier swf, si on n'a pas la taille, on va mettre 425x350 par defaut
1054
+    // ce sera mieux que 0x0
1055
+    // Flash is dead!
1056
+    if (
1057
+        $a and isset($a['extension']) and $a['extension'] == 'swf'
1058
+        and empty($a['largeur'])
1059
+    ) {
1060
+        $a['largeur'] = 425;
1061
+        $a['hauteur'] = 350;
1062
+    }
1063
+
1064
+    if ($mime_type == 'text/html') {
1065
+        include_spip('inc/filtres');
1066
+        $page = recuperer_url($source, ['transcoder' => true, 'taille_max' => _INC_DISTANT_MAX_SIZE]);
1067
+        $page = $page['page'] ?? '';
1068
+        if (preg_match(',<title>(.*?)</title>,ims', $page, $regs)) {
1069
+            $a['titre'] = corriger_caracteres(trim($regs[1]));
1070
+        }
1071
+        if (!isset($a['taille']) or !$a['taille']) {
1072
+            $a['taille'] = strlen($page); # a peu pres
1073
+        }
1074
+    }
1075
+    $a['mime_type'] = $mime_type;
1076
+
1077
+    return $a;
1078 1078
 }
1079 1079
 
1080 1080
 
@@ -1090,46 +1090,46 @@  discard block
 block discarded – undo
1090 1090
  * @return string
1091 1091
  */
1092 1092
 function need_proxy($host, $http_proxy = null, $http_noproxy = null) {
1093
-	if (is_null($http_proxy)) {
1094
-		$http_proxy = isset($GLOBALS['meta']['http_proxy']) ? $GLOBALS['meta']['http_proxy'] : null;
1095
-	}
1096
-	// rien a faire si pas de proxy :)
1097
-	if (is_null($http_proxy) or !$http_proxy = trim($http_proxy)) {
1098
-		return '';
1099
-	}
1100
-
1101
-	if (is_null($http_noproxy)) {
1102
-		$http_noproxy = isset($GLOBALS['meta']['http_noproxy']) ? $GLOBALS['meta']['http_noproxy'] : null;
1103
-	}
1104
-	// si pas d'exception, on retourne le proxy
1105
-	if (is_null($http_noproxy) or !$http_noproxy = trim($http_noproxy)) {
1106
-		return $http_proxy;
1107
-	}
1108
-
1109
-	// si le host ou l'un des domaines parents est dans $http_noproxy on fait exception
1110
-	// $http_noproxy peut contenir plusieurs domaines separes par des espaces ou retour ligne
1111
-	$http_noproxy = str_replace("\n", ' ', $http_noproxy);
1112
-	$http_noproxy = str_replace("\r", ' ', $http_noproxy);
1113
-	$http_noproxy = " $http_noproxy ";
1114
-	$domain = $host;
1115
-	// si le domaine exact www.example.org est dans les exceptions
1116
-	if (strpos($http_noproxy, " $domain ") !== false) {
1117
-		return '';
1118
-	}
1119
-
1120
-	while (strpos($domain, '.') !== false) {
1121
-		$domain = explode('.', $domain);
1122
-		array_shift($domain);
1123
-		$domain = implode('.', $domain);
1124
-
1125
-		// ou si un domaine parent commencant par un . est dans les exceptions (indiquant qu'il couvre tous les sous-domaines)
1126
-		if (strpos($http_noproxy, " .$domain ") !== false) {
1127
-			return '';
1128
-		}
1129
-	}
1130
-
1131
-	// ok c'est pas une exception
1132
-	return $http_proxy;
1093
+    if (is_null($http_proxy)) {
1094
+        $http_proxy = isset($GLOBALS['meta']['http_proxy']) ? $GLOBALS['meta']['http_proxy'] : null;
1095
+    }
1096
+    // rien a faire si pas de proxy :)
1097
+    if (is_null($http_proxy) or !$http_proxy = trim($http_proxy)) {
1098
+        return '';
1099
+    }
1100
+
1101
+    if (is_null($http_noproxy)) {
1102
+        $http_noproxy = isset($GLOBALS['meta']['http_noproxy']) ? $GLOBALS['meta']['http_noproxy'] : null;
1103
+    }
1104
+    // si pas d'exception, on retourne le proxy
1105
+    if (is_null($http_noproxy) or !$http_noproxy = trim($http_noproxy)) {
1106
+        return $http_proxy;
1107
+    }
1108
+
1109
+    // si le host ou l'un des domaines parents est dans $http_noproxy on fait exception
1110
+    // $http_noproxy peut contenir plusieurs domaines separes par des espaces ou retour ligne
1111
+    $http_noproxy = str_replace("\n", ' ', $http_noproxy);
1112
+    $http_noproxy = str_replace("\r", ' ', $http_noproxy);
1113
+    $http_noproxy = " $http_noproxy ";
1114
+    $domain = $host;
1115
+    // si le domaine exact www.example.org est dans les exceptions
1116
+    if (strpos($http_noproxy, " $domain ") !== false) {
1117
+        return '';
1118
+    }
1119
+
1120
+    while (strpos($domain, '.') !== false) {
1121
+        $domain = explode('.', $domain);
1122
+        array_shift($domain);
1123
+        $domain = implode('.', $domain);
1124
+
1125
+        // ou si un domaine parent commencant par un . est dans les exceptions (indiquant qu'il couvre tous les sous-domaines)
1126
+        if (strpos($http_noproxy, " .$domain ") !== false) {
1127
+            return '';
1128
+        }
1129
+    }
1130
+
1131
+    // ok c'est pas une exception
1132
+    return $http_proxy;
1133 1133
 }
1134 1134
 
1135 1135
 
@@ -1152,59 +1152,59 @@  discard block
 block discarded – undo
1152 1152
  * @return array
1153 1153
  */
1154 1154
 function init_http($method, $url, $refuse_gz = false, $referer = '', $datas = '', $vers = 'HTTP/1.0', $date = '') {
1155
-	$user = $via_proxy = $proxy_user = '';
1156
-	$fopen = false;
1157
-
1158
-	$t = @parse_url($url);
1159
-	$host = $t['host'];
1160
-	if ($t['scheme'] == 'http') {
1161
-		$scheme = 'http';
1162
-		$noproxy = '';
1163
-	} elseif ($t['scheme'] == 'https') {
1164
-		$scheme = 'ssl';
1165
-		$noproxy = 'ssl://';
1166
-		if (!isset($t['port']) || !($port = $t['port'])) {
1167
-			$t['port'] = 443;
1168
-		}
1169
-	} else {
1170
-		$scheme = $t['scheme'];
1171
-		$noproxy = $scheme . '://';
1172
-	}
1173
-	if (isset($t['user'])) {
1174
-		$user = [$t['user'], $t['pass']];
1175
-	}
1176
-
1177
-	if (!isset($t['port']) || !($port = $t['port'])) {
1178
-		$port = 80;
1179
-	}
1180
-	if (!isset($t['path']) || !($path = $t['path'])) {
1181
-		$path = '/';
1182
-	}
1183
-
1184
-	if (!empty($t['query'])) {
1185
-		$path .= '?' . $t['query'];
1186
-	}
1187
-
1188
-	$f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers, $date);
1189
-	if (!$f or !is_resource($f)) {
1190
-		// fallback : fopen si on a pas fait timeout dans lance_requete
1191
-		// ce qui correspond a $f===110
1192
-		if (
1193
-			$f !== 110
1194
-			and !need_proxy($host)
1195
-			and !_request('tester_proxy')
1196
-			and (!isset($GLOBALS['inc_distant_allow_fopen']) or $GLOBALS['inc_distant_allow_fopen'])
1197
-		) {
1198
-			$f = @fopen($url, 'rb');
1199
-			spip_log("connexion vers $url par simple fopen", 'distant');
1200
-			$fopen = true;
1201
-		} else {
1202
-			// echec total
1203
-			$f = false;
1204
-		}
1205
-	}
1206
-
1207
-	return [$f, $fopen];
1155
+    $user = $via_proxy = $proxy_user = '';
1156
+    $fopen = false;
1157
+
1158
+    $t = @parse_url($url);
1159
+    $host = $t['host'];
1160
+    if ($t['scheme'] == 'http') {
1161
+        $scheme = 'http';
1162
+        $noproxy = '';
1163
+    } elseif ($t['scheme'] == 'https') {
1164
+        $scheme = 'ssl';
1165
+        $noproxy = 'ssl://';
1166
+        if (!isset($t['port']) || !($port = $t['port'])) {
1167
+            $t['port'] = 443;
1168
+        }
1169
+    } else {
1170
+        $scheme = $t['scheme'];
1171
+        $noproxy = $scheme . '://';
1172
+    }
1173
+    if (isset($t['user'])) {
1174
+        $user = [$t['user'], $t['pass']];
1175
+    }
1176
+
1177
+    if (!isset($t['port']) || !($port = $t['port'])) {
1178
+        $port = 80;
1179
+    }
1180
+    if (!isset($t['path']) || !($path = $t['path'])) {
1181
+        $path = '/';
1182
+    }
1183
+
1184
+    if (!empty($t['query'])) {
1185
+        $path .= '?' . $t['query'];
1186
+    }
1187
+
1188
+    $f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers, $date);
1189
+    if (!$f or !is_resource($f)) {
1190
+        // fallback : fopen si on a pas fait timeout dans lance_requete
1191
+        // ce qui correspond a $f===110
1192
+        if (
1193
+            $f !== 110
1194
+            and !need_proxy($host)
1195
+            and !_request('tester_proxy')
1196
+            and (!isset($GLOBALS['inc_distant_allow_fopen']) or $GLOBALS['inc_distant_allow_fopen'])
1197
+        ) {
1198
+            $f = @fopen($url, 'rb');
1199
+            spip_log("connexion vers $url par simple fopen", 'distant');
1200
+            $fopen = true;
1201
+        } else {
1202
+            // echec total
1203
+            $f = false;
1204
+        }
1205
+    }
1206
+
1207
+    return [$f, $fopen];
1208 1208
 }
1209 1209
 
1210 1210
 /**
@@ -1239,125 +1239,125 @@  discard block
 block discarded – undo
1239 1239
  *   resource socket vers l'url demandee
1240 1240
  */
1241 1241
 function lance_requete(
1242
-	$method,
1243
-	$scheme,
1244
-	$user,
1245
-	$host,
1246
-	$path,
1247
-	$port,
1248
-	$noproxy,
1249
-	$refuse_gz = false,
1250
-	$referer = '',
1251
-	$datas = '',
1252
-	$vers = 'HTTP/1.0',
1253
-	$date = ''
1242
+    $method,
1243
+    $scheme,
1244
+    $user,
1245
+    $host,
1246
+    $path,
1247
+    $port,
1248
+    $noproxy,
1249
+    $refuse_gz = false,
1250
+    $referer = '',
1251
+    $datas = '',
1252
+    $vers = 'HTTP/1.0',
1253
+    $date = ''
1254 1254
 ) {
1255 1255
 
1256
-	$proxy_user = '';
1257
-	$http_proxy = need_proxy($host);
1258
-	if ($user) {
1259
-		$user = urlencode($user[0]) . ':' . urlencode($user[1]);
1260
-	}
1261
-
1262
-	$connect = '';
1263
-	if ($http_proxy) {
1264
-		if (!defined('_PROXY_HTTPS_NOT_VIA_CONNECT') and in_array($scheme, ['tls','ssl'])) {
1265
-			$path_host = (!$user ? '' : "$user@") . $host . (($port != 80) ? ":$port" : '');
1266
-			$connect = 'CONNECT ' . $path_host . " $vers\r\n"
1267
-				. "Host: $path_host\r\n"
1268
-				. "Proxy-Connection: Keep-Alive\r\n";
1269
-		} else {
1270
-			$path = (in_array($scheme, ['tls','ssl']) ? 'https://' : "$scheme://")
1271
-				. (!$user ? '' : "$user@")
1272
-				. "$host" . (($port != 80) ? ":$port" : '') . $path;
1273
-		}
1274
-		$t2 = @parse_url($http_proxy);
1275
-		$first_host = $t2['host'];
1276
-		if (!($port = $t2['port'])) {
1277
-			$port = 80;
1278
-		}
1279
-		if ($t2['user']) {
1280
-			$proxy_user = base64_encode($t2['user'] . ':' . $t2['pass']);
1281
-		}
1282
-	} else {
1283
-		$first_host = $noproxy . $host;
1284
-	}
1285
-
1286
-	if ($connect) {
1287
-		$streamContext = stream_context_create([
1288
-			'ssl' => [
1289
-				'verify_peer' => false,
1290
-				'allow_self_signed' => true,
1291
-				'SNI_enabled' => true,
1292
-				'peer_name' => $host,
1293
-			]
1294
-		]);
1295
-		$f = @stream_socket_client(
1296
-			"tcp://$first_host:$port",
1297
-			$errno,
1298
-			$errstr,
1299
-			_INC_DISTANT_CONNECT_TIMEOUT,
1300
-			STREAM_CLIENT_CONNECT,
1301
-			$streamContext
1302
-		);
1303
-		spip_log("Recuperer $path sur $first_host:$port par $f (via CONNECT)", 'connect');
1304
-		if (!$f) {
1305
-			spip_log("Erreur connexion $errno $errstr", 'distant' . _LOG_ERREUR);
1306
-			return $errno;
1307
-		}
1308
-		stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
1309
-
1310
-		fputs($f, $connect);
1311
-		fputs($f, "\r\n");
1312
-		$res = fread($f, 1024);
1313
-		if (
1314
-			!$res
1315
-			or !count($res = explode(' ', $res))
1316
-			or $res[1] !== '200'
1317
-		) {
1318
-			spip_log("Echec CONNECT sur $first_host:$port", 'connect' . _LOG_INFO_IMPORTANTE);
1319
-			fclose($f);
1320
-
1321
-			return false;
1322
-		}
1323
-		// important, car sinon on lit trop vite et les donnees ne sont pas encore dispo
1324
-		stream_set_blocking($f, true);
1325
-		// envoyer le handshake
1326
-		stream_socket_enable_crypto($f, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
1327
-		spip_log("OK CONNECT sur $first_host:$port", 'connect');
1328
-	} else {
1329
-		$ntry = 3;
1330
-		do {
1331
-			$f = @fsockopen($first_host, $port, $errno, $errstr, _INC_DISTANT_CONNECT_TIMEOUT);
1332
-		} while (!$f and $ntry-- and $errno !== 110 and sleep(1));
1333
-		spip_log("Recuperer $path sur $first_host:$port par $f");
1334
-		if (!$f) {
1335
-			spip_log("Erreur connexion $errno $errstr", 'distant' . _LOG_ERREUR);
1336
-
1337
-			return $errno;
1338
-		}
1339
-		stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
1340
-	}
1341
-
1342
-	$site = isset($GLOBALS['meta']['adresse_site']) ? $GLOBALS['meta']['adresse_site'] : '';
1343
-
1344
-	$host_port = $host;
1345
-	if ($port != (in_array($scheme, ['tls','ssl']) ? 443 : 80)) {
1346
-		$host_port .= ":$port";
1347
-	}
1348
-	$req = "$method $path $vers\r\n"
1349
-		. "Host: $host_port\r\n"
1350
-		. 'User-Agent: ' . _INC_DISTANT_USER_AGENT . "\r\n"
1351
-		. ($refuse_gz ? '' : ('Accept-Encoding: ' . _INC_DISTANT_CONTENT_ENCODING . "\r\n"))
1352
-		. (!$site ? '' : "Referer: $site/$referer\r\n")
1353
-		. (!$date ? '' : 'If-Modified-Since: ' . (gmdate('D, d M Y H:i:s', $date) . " GMT\r\n"))
1354
-		. (!$user ? '' : ('Authorization: Basic ' . base64_encode($user) . "\r\n"))
1355
-		. (!$proxy_user ? '' : "Proxy-Authorization: Basic $proxy_user\r\n")
1356
-		. (!strpos($vers, '1.1') ? '' : "Keep-Alive: 300\r\nConnection: keep-alive\r\n");
1256
+    $proxy_user = '';
1257
+    $http_proxy = need_proxy($host);
1258
+    if ($user) {
1259
+        $user = urlencode($user[0]) . ':' . urlencode($user[1]);
1260
+    }
1261
+
1262
+    $connect = '';
1263
+    if ($http_proxy) {
1264
+        if (!defined('_PROXY_HTTPS_NOT_VIA_CONNECT') and in_array($scheme, ['tls','ssl'])) {
1265
+            $path_host = (!$user ? '' : "$user@") . $host . (($port != 80) ? ":$port" : '');
1266
+            $connect = 'CONNECT ' . $path_host . " $vers\r\n"
1267
+                . "Host: $path_host\r\n"
1268
+                . "Proxy-Connection: Keep-Alive\r\n";
1269
+        } else {
1270
+            $path = (in_array($scheme, ['tls','ssl']) ? 'https://' : "$scheme://")
1271
+                . (!$user ? '' : "$user@")
1272
+                . "$host" . (($port != 80) ? ":$port" : '') . $path;
1273
+        }
1274
+        $t2 = @parse_url($http_proxy);
1275
+        $first_host = $t2['host'];
1276
+        if (!($port = $t2['port'])) {
1277
+            $port = 80;
1278
+        }
1279
+        if ($t2['user']) {
1280
+            $proxy_user = base64_encode($t2['user'] . ':' . $t2['pass']);
1281
+        }
1282
+    } else {
1283
+        $first_host = $noproxy . $host;
1284
+    }
1285
+
1286
+    if ($connect) {
1287
+        $streamContext = stream_context_create([
1288
+            'ssl' => [
1289
+                'verify_peer' => false,
1290
+                'allow_self_signed' => true,
1291
+                'SNI_enabled' => true,
1292
+                'peer_name' => $host,
1293
+            ]
1294
+        ]);
1295
+        $f = @stream_socket_client(
1296
+            "tcp://$first_host:$port",
1297
+            $errno,
1298
+            $errstr,
1299
+            _INC_DISTANT_CONNECT_TIMEOUT,
1300
+            STREAM_CLIENT_CONNECT,
1301
+            $streamContext
1302
+        );
1303
+        spip_log("Recuperer $path sur $first_host:$port par $f (via CONNECT)", 'connect');
1304
+        if (!$f) {
1305
+            spip_log("Erreur connexion $errno $errstr", 'distant' . _LOG_ERREUR);
1306
+            return $errno;
1307
+        }
1308
+        stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
1309
+
1310
+        fputs($f, $connect);
1311
+        fputs($f, "\r\n");
1312
+        $res = fread($f, 1024);
1313
+        if (
1314
+            !$res
1315
+            or !count($res = explode(' ', $res))
1316
+            or $res[1] !== '200'
1317
+        ) {
1318
+            spip_log("Echec CONNECT sur $first_host:$port", 'connect' . _LOG_INFO_IMPORTANTE);
1319
+            fclose($f);
1320
+
1321
+            return false;
1322
+        }
1323
+        // important, car sinon on lit trop vite et les donnees ne sont pas encore dispo
1324
+        stream_set_blocking($f, true);
1325
+        // envoyer le handshake
1326
+        stream_socket_enable_crypto($f, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
1327
+        spip_log("OK CONNECT sur $first_host:$port", 'connect');
1328
+    } else {
1329
+        $ntry = 3;
1330
+        do {
1331
+            $f = @fsockopen($first_host, $port, $errno, $errstr, _INC_DISTANT_CONNECT_TIMEOUT);
1332
+        } while (!$f and $ntry-- and $errno !== 110 and sleep(1));
1333
+        spip_log("Recuperer $path sur $first_host:$port par $f");
1334
+        if (!$f) {
1335
+            spip_log("Erreur connexion $errno $errstr", 'distant' . _LOG_ERREUR);
1336
+
1337
+            return $errno;
1338
+        }
1339
+        stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
1340
+    }
1341
+
1342
+    $site = isset($GLOBALS['meta']['adresse_site']) ? $GLOBALS['meta']['adresse_site'] : '';
1343
+
1344
+    $host_port = $host;
1345
+    if ($port != (in_array($scheme, ['tls','ssl']) ? 443 : 80)) {
1346
+        $host_port .= ":$port";
1347
+    }
1348
+    $req = "$method $path $vers\r\n"
1349
+        . "Host: $host_port\r\n"
1350
+        . 'User-Agent: ' . _INC_DISTANT_USER_AGENT . "\r\n"
1351
+        . ($refuse_gz ? '' : ('Accept-Encoding: ' . _INC_DISTANT_CONTENT_ENCODING . "\r\n"))
1352
+        . (!$site ? '' : "Referer: $site/$referer\r\n")
1353
+        . (!$date ? '' : 'If-Modified-Since: ' . (gmdate('D, d M Y H:i:s', $date) . " GMT\r\n"))
1354
+        . (!$user ? '' : ('Authorization: Basic ' . base64_encode($user) . "\r\n"))
1355
+        . (!$proxy_user ? '' : "Proxy-Authorization: Basic $proxy_user\r\n")
1356
+        . (!strpos($vers, '1.1') ? '' : "Keep-Alive: 300\r\nConnection: keep-alive\r\n");
1357 1357
 
1358 1358
 #	spip_log("Requete\n$req", 'distant');
1359
-	fputs($f, $req);
1360
-	fputs($f, $datas ? $datas : "\r\n");
1359
+    fputs($f, $req);
1360
+    fputs($f, $datas ? $datas : "\r\n");
1361 1361
 
1362
-	return $f;
1362
+    return $f;
1363 1363
 }
Please login to merge, or discard this patch.
ecrire/inc/plonger.php 1 patch
Indentation   +88 added lines, -88 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_spip('inc/texte');
@@ -19,105 +19,105 @@  discard block
 block discarded – undo
19 19
 // https://code.spip.net/@inc_plonger_dist
20 20
 function inc_plonger_dist($id_rubrique, $idom = '', $list = [], $col = 1, $exclu = 0, $do = 'aff') {
21 21
 
22
-	if ($list) {
23
-		$id_rubrique = $list[$col - 1];
24
-	}
22
+    if ($list) {
23
+        $id_rubrique = $list[$col - 1];
24
+    }
25 25
 
26
-	$ret = '';
26
+    $ret = '';
27 27
 
28
-	# recherche les filles et petites-filles de la rubrique donnee
29
-	# en excluant une eventuelle rubrique interdite (par exemple, lorsqu'on
30
-	# deplace une rubrique, on peut la deplacer partout a partir de la
31
-	# racine... sauf vers elle-meme ou sa propre branche)
32
-	$ordre = [];
33
-	$rub = [];
28
+    # recherche les filles et petites-filles de la rubrique donnee
29
+    # en excluant une eventuelle rubrique interdite (par exemple, lorsqu'on
30
+    # deplace une rubrique, on peut la deplacer partout a partir de la
31
+    # racine... sauf vers elle-meme ou sa propre branche)
32
+    $ordre = [];
33
+    $rub = [];
34 34
 
35
-	$res = sql_select(
36
-		'rub1.id_rubrique, rub1.titre, rub1.id_parent, rub1.lang, rub1.langue_choisie, rub2.id_rubrique AS id_enfant',
37
-		'spip_rubriques AS rub1 LEFT JOIN spip_rubriques AS rub2 ON (rub1.id_rubrique = rub2.id_parent)',
38
-		'rub1.id_parent = ' . sql_quote($id_rubrique) . '
35
+    $res = sql_select(
36
+        'rub1.id_rubrique, rub1.titre, rub1.id_parent, rub1.lang, rub1.langue_choisie, rub2.id_rubrique AS id_enfant',
37
+        'spip_rubriques AS rub1 LEFT JOIN spip_rubriques AS rub2 ON (rub1.id_rubrique = rub2.id_parent)',
38
+        'rub1.id_parent = ' . sql_quote($id_rubrique) . '
39 39
 			AND rub1.id_rubrique!=' . sql_quote($exclu) . '
40 40
 			AND (rub2.id_rubrique IS NULL OR rub2.id_rubrique!=' . sql_quote($exclu) . ')',
41
-		'',
42
-		'0+rub1.titre,rub1.titre'
43
-	);
41
+        '',
42
+        '0+rub1.titre,rub1.titre'
43
+    );
44 44
 
45
-	while ($row = sql_fetch($res)) {
46
-		if (autoriser('voir', 'rubrique', $row['id_rubrique'])) {
47
-			$rub[$row['id_rubrique']]['enfants'] = $row['id_enfant'];
48
-			if ($row['id_parent'] == $id_rubrique) {
49
-				$t = trim(typo(supprimer_numero($row['titre'])));
50
-				if ($row['langue_choisie'] != 'oui') {
51
-					$t .= ' <small title="'
52
-						. traduire_nom_langue($row['lang'])
53
-						. '">[' . $row['lang'] . ']</small>';
54
-				}
55
-				$ordre[$row['id_rubrique']] = $t;
56
-			}
57
-		}
58
-	}
59
-	$next = isset($list[$col]) ? $list[$col] : 0;
60
-	if ($ordre) {
61
-		$rec = generer_url_ecrire('plonger', "rac=$idom&exclus=$exclu&do=$do&col=" . ($col + 1));
62
-		$info = generer_url_ecrire('informer', "type=rubrique&rac=$idom&do=$do&id=");
63
-		$args = "'$idom',this,$col,'" . $GLOBALS['spip_lang_left'] . "','$info',event";
45
+    while ($row = sql_fetch($res)) {
46
+        if (autoriser('voir', 'rubrique', $row['id_rubrique'])) {
47
+            $rub[$row['id_rubrique']]['enfants'] = $row['id_enfant'];
48
+            if ($row['id_parent'] == $id_rubrique) {
49
+                $t = trim(typo(supprimer_numero($row['titre'])));
50
+                if ($row['langue_choisie'] != 'oui') {
51
+                    $t .= ' <small title="'
52
+                        . traduire_nom_langue($row['lang'])
53
+                        . '">[' . $row['lang'] . ']</small>';
54
+                }
55
+                $ordre[$row['id_rubrique']] = $t;
56
+            }
57
+        }
58
+    }
59
+    $next = isset($list[$col]) ? $list[$col] : 0;
60
+    if ($ordre) {
61
+        $rec = generer_url_ecrire('plonger', "rac=$idom&exclus=$exclu&do=$do&col=" . ($col + 1));
62
+        $info = generer_url_ecrire('informer', "type=rubrique&rac=$idom&do=$do&id=");
63
+        $args = "'$idom',this,$col,'" . $GLOBALS['spip_lang_left'] . "','$info',event";
64 64
 
65
-		foreach ($ordre as $id => $titrebrut) {
66
-			$titre = supprimer_numero($titrebrut);
65
+        foreach ($ordre as $id => $titrebrut) {
66
+            $titre = supprimer_numero($titrebrut);
67 67
 
68
-			$classe1 = 'petit-item ' . ($id_rubrique ? 'petite-rubrique' : 'petit-secteur');
69
-			if (isset($rub[$id]['enfants'])) {
70
-				$classe2 = " class='rub-ouverte'";
71
-				$url = "\nhref='$rec&amp;id=$id'";
72
-			} else {
73
-				$classe2 = $url = '';
74
-				$url = "\nhref='javascript:void(0)'";
75
-			}
68
+            $classe1 = 'petit-item ' . ($id_rubrique ? 'petite-rubrique' : 'petit-secteur');
69
+            if (isset($rub[$id]['enfants'])) {
70
+                $classe2 = " class='rub-ouverte'";
71
+                $url = "\nhref='$rec&amp;id=$id'";
72
+            } else {
73
+                $classe2 = $url = '';
74
+                $url = "\nhref='javascript:void(0)'";
75
+            }
76 76
 
77
-			$js_func = $do . '_selection_titre';
78
-			$click = "\nonclick=\"changerhighlight(this.parentNode.parentNode.parentNode);\nreturn "
79
-				. (!is_array($list) ? ' false'
80
-					: "aff_selection_provisoire($id,$args)")
77
+            $js_func = $do . '_selection_titre';
78
+            $click = "\nonclick=\"changerhighlight(this.parentNode.parentNode.parentNode);\nreturn "
79
+                . (!is_array($list) ? ' false'
80
+                    : "aff_selection_provisoire($id,$args)")
81 81
 # ce lien provoque la selection (directe) de la rubrique cliquee
82 82
 # et l'affichage de son titre dans le bandeau
83
-				. "\"\nondblclick=\""
84
-				. "$js_func(this."
85
-				. 'firstChild.nodeValue,'
86
-				. $id
87
-				. ",'selection_rubrique','id_parent');"
88
-				. "\nreturn aff_selection_provisoire($id,$args);"
89
-				. '"';
83
+                . "\"\nondblclick=\""
84
+                . "$js_func(this."
85
+                . 'firstChild.nodeValue,'
86
+                . $id
87
+                . ",'selection_rubrique','id_parent');"
88
+                . "\nreturn aff_selection_provisoire($id,$args);"
89
+                . '"';
90 90
 
91
-			$ret .= "<div class='"
92
-				. (($id == $next) ? 'item on' : 'item')
93
-				. "'><div class='"
94
-				. $classe1
95
-				. "'><div$classe2><a"
96
-				. $url
97
-				. $click
98
-				. '>'
99
-				. $titre
100
-				. '</a></div></div></div>';
101
-		}
102
-	}
91
+            $ret .= "<div class='"
92
+                . (($id == $next) ? 'item on' : 'item')
93
+                . "'><div class='"
94
+                . $classe1
95
+                . "'><div$classe2><a"
96
+                . $url
97
+                . $click
98
+                . '>'
99
+                . $titre
100
+                . '</a></div></div></div>';
101
+        }
102
+    }
103 103
 
104
-	$idom2 = $idom . '_col_' . ($col + 1);
105
-	$left = ($col * 250);
104
+    $idom2 = $idom . '_col_' . ($col + 1);
105
+    $left = ($col * 250);
106 106
 
107
-	return http_img_pack(
108
-		'loader.svg',
109
-		'',
110
-		"class='loader' style='visibility: hidden; position: absolute; " . $GLOBALS['spip_lang_left'] . ': '
111
-		. ($left - 30)
112
-		. "px; top: 2px; z-index: 2;' id='img_$idom2'"
113
-	)
114
-	. "<div style='width: 250px; height: 100%; overflow: auto; position: absolute; top: 0px; " . $GLOBALS['spip_lang_left'] . ': '
115
-	. ($left - 250)
116
-	. "px;'>"
117
-	. $ret
118
-	. "\n</div>\n<div id='$idom2'>"
119
-	. ($next
120
-		? inc_plonger_dist($id_rubrique, $idom, $list, $col + 1, $exclu)
121
-		: '')
122
-	. "\n</div>";
107
+    return http_img_pack(
108
+        'loader.svg',
109
+        '',
110
+        "class='loader' style='visibility: hidden; position: absolute; " . $GLOBALS['spip_lang_left'] . ': '
111
+        . ($left - 30)
112
+        . "px; top: 2px; z-index: 2;' id='img_$idom2'"
113
+    )
114
+    . "<div style='width: 250px; height: 100%; overflow: auto; position: absolute; top: 0px; " . $GLOBALS['spip_lang_left'] . ': '
115
+    . ($left - 250)
116
+    . "px;'>"
117
+    . $ret
118
+    . "\n</div>\n<div id='$idom2'>"
119
+    . ($next
120
+        ? inc_plonger_dist($id_rubrique, $idom, $list, $col + 1, $exclu)
121
+        : '')
122
+    . "\n</div>";
123 123
 }
Please login to merge, or discard this patch.