Completed
Push — master ( 37aa61...be7234 )
by cam
01:24
created
ecrire/req/sqlite_fonctions.php 1 patch
Indentation   +203 added lines, -203 removed lines patch added patch discarded remove patch
@@ -21,7 +21,7 @@  discard block
 block discarded – undo
21 21
  */
22 22
 
23 23
 if (!defined('_ECRIRE_INC_VERSION')) {
24
-	return;
24
+    return;
25 25
 }
26 26
 
27 27
 /**
@@ -42,90 +42,90 @@  discard block
 block discarded – undo
42 42
  */
43 43
 function _sqlite_init_functions(&$sqlite) {
44 44
 
45
-	if (!$sqlite) {
46
-		return false;
47
-	}
45
+    if (!$sqlite) {
46
+        return false;
47
+    }
48 48
 
49 49
 
50
-	$fonctions = [
51
-		// A
52
-		'ACOS'  => ['acos', 1],
53
-		'ASIN'  => ['asin', 1],
54
-		'ATAN'  => ['atan', 1], // mysql accepte 2 params comme atan2… hum ?
55
-		'ATAN2' => ['atan2', 2],
50
+    $fonctions = [
51
+        // A
52
+        'ACOS'  => ['acos', 1],
53
+        'ASIN'  => ['asin', 1],
54
+        'ATAN'  => ['atan', 1], // mysql accepte 2 params comme atan2… hum ?
55
+        'ATAN2' => ['atan2', 2],
56 56
 
57
-		// C
58
-		'CEIL'   => ['_sqlite_func_ceil', 1],
59
-		'CONCAT' => ['_sqlite_func_concat', -1],
60
-		'COS'    => ['cos', 1],
57
+        // C
58
+        'CEIL'   => ['_sqlite_func_ceil', 1],
59
+        'CONCAT' => ['_sqlite_func_concat', -1],
60
+        'COS'    => ['cos', 1],
61 61
 
62
-		// D
63
-		'DATE_FORMAT' => ['_sqlite_func_date_format', 2], // équivalent a strftime avec args inversés
64
-		'DAYOFMONTH'  => ['_sqlite_func_dayofmonth', 1],
65
-		'DEGREES'     => ['rad2deg', 1],
62
+        // D
63
+        'DATE_FORMAT' => ['_sqlite_func_date_format', 2], // équivalent a strftime avec args inversés
64
+        'DAYOFMONTH'  => ['_sqlite_func_dayofmonth', 1],
65
+        'DEGREES'     => ['rad2deg', 1],
66 66
 
67
-		// E
68
-		'EXTRAIRE_MULTI' => ['_sqlite_func_extraire_multi', 2], // specifique a SPIP/sql_multi()
69
-		'EXP'            => ['exp', 1],
67
+        // E
68
+        'EXTRAIRE_MULTI' => ['_sqlite_func_extraire_multi', 2], // specifique a SPIP/sql_multi()
69
+        'EXP'            => ['exp', 1],
70 70
 
71
-		// F
72
-		'FIND_IN_SET' => ['_sqlite_func_find_in_set', 2],
73
-		'FLOOR'       => ['_sqlite_func_floor', 1],
71
+        // F
72
+        'FIND_IN_SET' => ['_sqlite_func_find_in_set', 2],
73
+        'FLOOR'       => ['_sqlite_func_floor', 1],
74 74
 
75
-		// G
76
-		'GREATEST' => ['_sqlite_func_greatest', -1],
75
+        // G
76
+        'GREATEST' => ['_sqlite_func_greatest', -1],
77 77
 
78
-		// I
79
-		'IF'     => ['_sqlite_func_if', 3],
80
-		'INSERT' => ['_sqlite_func_insert', 4],
81
-		'INSTR'  => ['_sqlite_func_instr', 2],
78
+        // I
79
+        'IF'     => ['_sqlite_func_if', 3],
80
+        'INSERT' => ['_sqlite_func_insert', 4],
81
+        'INSTR'  => ['_sqlite_func_instr', 2],
82 82
 
83
-		// L
84
-		'LEAST'  => ['_sqlite_func_least', -1],
85
-		'_LEFT'  => ['_sqlite_func_left', 2],
83
+        // L
84
+        'LEAST'  => ['_sqlite_func_least', -1],
85
+        '_LEFT'  => ['_sqlite_func_left', 2],
86 86
 
87
-		// N
88
-		'NOW' => ['_sqlite_func_now', 0],
87
+        // N
88
+        'NOW' => ['_sqlite_func_now', 0],
89 89
 
90
-		// M
91
-		'MD5'   => ['md5', 1],
92
-		'MONTH' => ['_sqlite_func_month', 1],
90
+        // M
91
+        'MD5'   => ['md5', 1],
92
+        'MONTH' => ['_sqlite_func_month', 1],
93 93
 
94
-		// P
95
-		'PREG_REPLACE' => ['_sqlite_func_preg_replace', 3],
94
+        // P
95
+        'PREG_REPLACE' => ['_sqlite_func_preg_replace', 3],
96 96
 
97
-		// R
98
-		'RADIANS' => ['deg2rad', 1],
99
-		'RAND'    => ['_sqlite_func_rand', 0], // sinon random() v2.4
100
-		'REGEXP'  => ['_sqlite_func_regexp_match', 2], // critere REGEXP supporte a partir de v3.3.2
101
-		'RIGHT'   => ['_sqlite_func_right', 2],
97
+        // R
98
+        'RADIANS' => ['deg2rad', 1],
99
+        'RAND'    => ['_sqlite_func_rand', 0], // sinon random() v2.4
100
+        'REGEXP'  => ['_sqlite_func_regexp_match', 2], // critere REGEXP supporte a partir de v3.3.2
101
+        'RIGHT'   => ['_sqlite_func_right', 2],
102 102
 
103
-		// S
104
-		'SETTYPE'   => ['settype', 2], // CAST present en v3.2.3
105
-		'SIN'       => ['sin', 1],
106
-		'SQRT'      => ['sqrt', 1],
107
-		'SUBSTRING' => ['_sqlite_func_substring' /*, 3*/], // peut etre appelee avec 2 ou 3 arguments, index base 1 et non 0
103
+        // S
104
+        'SETTYPE'   => ['settype', 2], // CAST present en v3.2.3
105
+        'SIN'       => ['sin', 1],
106
+        'SQRT'      => ['sqrt', 1],
107
+        'SUBSTRING' => ['_sqlite_func_substring' /*, 3*/], // peut etre appelee avec 2 ou 3 arguments, index base 1 et non 0
108 108
 
109
-		// T
110
-		'TAN'           => ['tan', 1],
111
-		'TIMESTAMPDIFF' => ['_sqlite_timestampdiff'    /*, 3*/],
112
-		'TO_DAYS'       => ['_sqlite_func_to_days', 1],
109
+        // T
110
+        'TAN'           => ['tan', 1],
111
+        'TIMESTAMPDIFF' => ['_sqlite_timestampdiff'    /*, 3*/],
112
+        'TO_DAYS'       => ['_sqlite_func_to_days', 1],
113 113
 
114
-		// U
115
-		'UNIX_TIMESTAMP' => ['_sqlite_func_unix_timestamp', 1],
114
+        // U
115
+        'UNIX_TIMESTAMP' => ['_sqlite_func_unix_timestamp', 1],
116 116
 
117
-		// V
118
-		'VIDE' => ['_sqlite_func_vide', 0], // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide()
117
+        // V
118
+        'VIDE' => ['_sqlite_func_vide', 0], // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide()
119 119
 
120
-		// Y
121
-		'YEAR' => ['_sqlite_func_year', 1]
122
-	];
120
+        // Y
121
+        'YEAR' => ['_sqlite_func_year', 1]
122
+    ];
123 123
 
124
-	foreach ($fonctions as $f => $r) {
125
-		_sqlite_add_function($sqlite, $f, $r);
126
-	}
124
+    foreach ($fonctions as $f => $r) {
125
+        _sqlite_add_function($sqlite, $f, $r);
126
+    }
127 127
 
128
-	#spip_log('functions sqlite chargees ','sqlite.'._LOG_DEBUG);
128
+    #spip_log('functions sqlite chargees ','sqlite.'._LOG_DEBUG);
129 129
 }
130 130
 
131 131
 
@@ -146,9 +146,9 @@  discard block
 block discarded – undo
146 146
  *
147 147
 **/
148 148
 function _sqlite_add_function(&$sqlite, &$f, &$r) {
149
-	isset($r[1])
150
-		? $sqlite->sqliteCreateFunction($f, $r[0], $r[1])
151
-		: $sqlite->sqliteCreateFunction($f, $r[0]);
149
+    isset($r[1])
150
+        ? $sqlite->sqliteCreateFunction($f, $r[0], $r[1])
151
+        : $sqlite->sqliteCreateFunction($f, $r[0]);
152 152
 }
153 153
 
154 154
 /**
@@ -158,7 +158,7 @@  discard block
 block discarded – undo
158 158
  * @return int
159 159
  */
160 160
 function _sqlite_func_ceil($a) {
161
-	return ceil($a);
161
+    return ceil($a);
162 162
 }
163 163
 
164 164
 /**
@@ -168,7 +168,7 @@  discard block
 block discarded – undo
168 168
  * @return string
169 169
  */
170 170
 function _sqlite_func_concat(...$args) {
171
-	return implode('', $args);
171
+    return implode('', $args);
172 172
 }
173 173
 
174 174
 
@@ -181,7 +181,7 @@  discard block
 block discarded – undo
181 181
  * @return string
182 182
  */
183 183
 function _sqlite_func_dayofmonth($d) {
184
-	return _sqlite_func_date('d', $d);
184
+    return _sqlite_func_date('d', $d);
185 185
 }
186 186
 
187 187
 
@@ -193,15 +193,15 @@  discard block
 block discarded – undo
193 193
  * @return int
194 194
  */
195 195
 function _sqlite_func_find_in_set($num, $set) {
196
-	$rank = 0;
197
-	foreach (explode(',', $set) as $v) {
198
-		if ($v == $num) {
199
-			return (++$rank);
200
-		}
201
-		$rank++;
202
-	}
203
-
204
-	return 0;
196
+    $rank = 0;
197
+    foreach (explode(',', $set) as $v) {
198
+        if ($v == $num) {
199
+            return (++$rank);
200
+        }
201
+        $rank++;
202
+    }
203
+
204
+    return 0;
205 205
 }
206 206
 
207 207
 /**
@@ -211,7 +211,7 @@  discard block
 block discarded – undo
211 211
  * @return int
212 212
  */
213 213
 function _sqlite_func_floor($a) {
214
-	return floor($a);
214
+    return floor($a);
215 215
 }
216 216
 
217 217
 
@@ -224,7 +224,7 @@  discard block
 block discarded – undo
224 224
  * @return mixed
225 225
  */
226 226
 function _sqlite_func_if($bool, $oui, $non) {
227
-	return ($bool) ? $oui : $non;
227
+    return ($bool) ? $oui : $non;
228 228
 }
229 229
 
230 230
 
@@ -241,10 +241,10 @@  discard block
 block discarded – undo
241 241
  * @return string
242 242
  */
243 243
 function _sqlite_func_insert($s, $index, $longueur, $chaine) {
244
-	return
245
-		substr($s, 0, $index)
246
-		. $chaine
247
-		. substr(substr($s, $index), $longueur);
244
+    return
245
+        substr($s, 0, $index)
246
+        . $chaine
247
+        . substr(substr($s, $index), $longueur);
248 248
 }
249 249
 
250 250
 
@@ -256,7 +256,7 @@  discard block
 block discarded – undo
256 256
  * @return int
257 257
  */
258 258
 function _sqlite_func_instr($s, $search) {
259
-	return strpos($s, $search);
259
+    return strpos($s, $search);
260 260
 }
261 261
 
262 262
 
@@ -267,7 +267,7 @@  discard block
 block discarded – undo
267 267
  * @return int
268 268
  */
269 269
 function _sqlite_func_least(...$args) {
270
-	return min($args);
270
+    return min($args);
271 271
 }
272 272
 
273 273
 
@@ -278,7 +278,7 @@  discard block
 block discarded – undo
278 278
  * @return int
279 279
  */
280 280
 function _sqlite_func_greatest(...$args) {
281
-	return max($args);
281
+    return max($args);
282 282
 }
283 283
 
284 284
 
@@ -290,7 +290,7 @@  discard block
 block discarded – undo
290 290
  * @return string
291 291
  */
292 292
 function _sqlite_func_left($s, $lenght) {
293
-	return substr($s, $lenght);
293
+    return substr($s, $lenght);
294 294
 }
295 295
 
296 296
 /**
@@ -300,13 +300,13 @@  discard block
 block discarded – undo
300 300
  * @return string
301 301
  */
302 302
 function _sqlite_func_now($force_refresh = false) {
303
-	static $now = null;
304
-	if (is_null($now) || $force_refresh) {
305
-		$now = date('Y-m-d H:i:s');
306
-	}
303
+    static $now = null;
304
+    if (is_null($now) || $force_refresh) {
305
+        $now = date('Y-m-d H:i:s');
306
+    }
307 307
 
308
-	#spip_log("Passage avec NOW : $now | ".time(),'sqlite.'._LOG_DEBUG);
309
-	return $now;
308
+    #spip_log("Passage avec NOW : $now | ".time(),'sqlite.'._LOG_DEBUG);
309
+    return $now;
310 310
 }
311 311
 
312 312
 
@@ -319,7 +319,7 @@  discard block
 block discarded – undo
319 319
  * @return string
320 320
  */
321 321
 function _sqlite_func_month($d) {
322
-	return _sqlite_func_date('m', $d);
322
+    return _sqlite_func_date('m', $d);
323 323
 }
324 324
 
325 325
 
@@ -332,8 +332,8 @@  discard block
 block discarded – undo
332 332
  * @return string
333 333
  */
334 334
 function _sqlite_func_preg_replace($quoi, $cherche, $remplace) {
335
-	#spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
336
-	return preg_replace('%' . $cherche . '%', $remplace, $quoi);
335
+    #spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
336
+    return preg_replace('%' . $cherche . '%', $remplace, $quoi);
337 337
 }
338 338
 
339 339
 /**
@@ -346,13 +346,13 @@  discard block
 block discarded – undo
346 346
  * @return string, l'extrait trouve.
347 347
  **/
348 348
 function _sqlite_func_extraire_multi($quoi, $lang) {
349
-	if (str_contains($quoi, '<')) {
350
-		include_spip('src/Texte/Collecteur/AbstractCollecteur');
351
-		include_spip('src/Texte/Collecteur/Multis');
352
-		$collecteurMultis = new Spip\Texte\Collecteur\Multis();
353
-		$quoi = $collecteurMultis->traiter($quoi, ['lang' => $lang, 'appliquer_typo' => false]);
354
-	}
355
-	return $quoi;
349
+    if (str_contains($quoi, '<')) {
350
+        include_spip('src/Texte/Collecteur/AbstractCollecteur');
351
+        include_spip('src/Texte/Collecteur/Multis');
352
+        $collecteurMultis = new Spip\Texte\Collecteur\Multis();
353
+        $quoi = $collecteurMultis->traiter($quoi, ['lang' => $lang, 'appliquer_typo' => false]);
354
+    }
355
+    return $quoi;
356 356
 }
357 357
 
358 358
 
@@ -362,7 +362,7 @@  discard block
 block discarded – undo
362 362
  * @return float
363 363
  */
364 364
 function _sqlite_func_rand() {
365
-	return random_int(0, mt_getrandmax());
365
+    return random_int(0, mt_getrandmax());
366 366
 }
367 367
 
368 368
 
@@ -374,7 +374,7 @@  discard block
 block discarded – undo
374 374
  * @return string
375 375
  */
376 376
 function _sqlite_func_right($s, $length) {
377
-	return substr($s, 0 - $length);
377
+    return substr($s, 0 - $length);
378 378
 }
379 379
 
380 380
 
@@ -386,16 +386,16 @@  discard block
 block discarded – undo
386 386
  * @return bool
387 387
  */
388 388
 function _sqlite_func_regexp_match($cherche, $quoi) {
389
-	// optimiser un cas tres courant avec les requetes en base
390
-	if (!$quoi && !strlen($quoi)) {
391
-		return false;
392
-	}
393
-	// il faut enlever un niveau d'echappement pour être homogène à mysql
394
-	$cherche = str_replace('\\\\', '\\', $cherche);
395
-	$u = $GLOBALS['meta']['pcre_u'] ?? 'u';
396
-
397
-	#spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
398
-	return preg_match('%' . $cherche . '%imsS' . $u, $quoi);
389
+    // optimiser un cas tres courant avec les requetes en base
390
+    if (!$quoi && !strlen($quoi)) {
391
+        return false;
392
+    }
393
+    // il faut enlever un niveau d'echappement pour être homogène à mysql
394
+    $cherche = str_replace('\\\\', '\\', $cherche);
395
+    $u = $GLOBALS['meta']['pcre_u'] ?? 'u';
396
+
397
+    #spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
398
+    return preg_match('%' . $cherche . '%imsS' . $u, $quoi);
399 399
 }
400 400
 
401 401
 
@@ -410,8 +410,8 @@  discard block
 block discarded – undo
410 410
  * @return string
411 411
  */
412 412
 function _sqlite_func_date_format($date, $conv) {
413
-	$conv = _sqlite_func_strftime_format_converter($conv);
414
-	return strftime($conv, is_int($date) ? $date : strtotime($date));
413
+    $conv = _sqlite_func_strftime_format_converter($conv);
414
+    return strftime($conv, is_int($date) ? $date : strtotime($date));
415 415
 }
416 416
 
417 417
 /**
@@ -427,28 +427,28 @@  discard block
 block discarded – undo
427 427
  * @return void
428 428
  */
429 429
 function _sqlite_func_strftime_format_converter(string $conv): string {
430
-	// ok : %a %b %d %e %H %I %l %j %k %m %p %r %S %T %w %y %Y
431
-	// on ne sait pas en gérer certains...
432
-	static $mysql_to_strftime_not_ok = ['%c', '%D', '%f', '%U', '%V', '%W', '%X'];
433
-	static $mysql_to_strftime = [
434
-		'%h' => '%I',
435
-		'%i' => '%M',
436
-		'%M' => '%B',
437
-		'%s' => '%S',
438
-		'%u' => '%U',
439
-		'%v' => '%V',
440
-		'%x' => '%G',
441
-	];
442
-	static $to_strftime = [];
443
-	if (!isset($to_strftime[$conv])) {
444
-		$count = 0;
445
-		str_replace($mysql_to_strftime_not_ok, '', $conv, $count);
446
-		if ($count > 0) {
447
-			spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.' . _LOG_ERREUR);
448
-		}
449
-		$to_strftime[$conv] = str_replace(array_keys($mysql_to_strftime), $mysql_to_strftime, $conv);
450
-	}
451
-	return $to_strftime[$conv];
430
+    // ok : %a %b %d %e %H %I %l %j %k %m %p %r %S %T %w %y %Y
431
+    // on ne sait pas en gérer certains...
432
+    static $mysql_to_strftime_not_ok = ['%c', '%D', '%f', '%U', '%V', '%W', '%X'];
433
+    static $mysql_to_strftime = [
434
+        '%h' => '%I',
435
+        '%i' => '%M',
436
+        '%M' => '%B',
437
+        '%s' => '%S',
438
+        '%u' => '%U',
439
+        '%v' => '%V',
440
+        '%x' => '%G',
441
+    ];
442
+    static $to_strftime = [];
443
+    if (!isset($to_strftime[$conv])) {
444
+        $count = 0;
445
+        str_replace($mysql_to_strftime_not_ok, '', $conv, $count);
446
+        if ($count > 0) {
447
+            spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.' . _LOG_ERREUR);
448
+        }
449
+        $to_strftime[$conv] = str_replace(array_keys($mysql_to_strftime), $mysql_to_strftime, $conv);
450
+    }
451
+    return $to_strftime[$conv];
452 452
 }
453 453
 
454 454
 /**
@@ -462,11 +462,11 @@  discard block
 block discarded – undo
462 462
  * @return int
463 463
  */
464 464
 function _sqlite_func_to_days($d) {
465
-	static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
466
-	$result = $offset + (int)ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
465
+    static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
466
+    $result = $offset + (int)ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
467 467
 
468
-	#spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
469
-	return $result;
468
+    #spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
469
+    return $result;
470 470
 }
471 471
 
472 472
 /**
@@ -478,13 +478,13 @@  discard block
 block discarded – undo
478 478
  * @return string
479 479
  */
480 480
 function _sqlite_func_substring($string, $start, $len = null) {
481
-	// SQL compte a partir de 1, php a partir de 0
482
-	$start = ($start > 0) ? $start - 1 : $start;
483
-	if (is_null($len)) {
484
-		return substr($string, $start);
485
-	} else {
486
-		return substr($string, $start, $len);
487
-	}
481
+    // SQL compte a partir de 1, php a partir de 0
482
+    $start = ($start > 0) ? $start - 1 : $start;
483
+    if (is_null($len)) {
484
+        return substr($string, $start);
485
+    } else {
486
+        return substr($string, $start, $len);
487
+    }
488 488
 }
489 489
 
490 490
 /**
@@ -500,22 +500,22 @@  discard block
 block discarded – undo
500 500
  * @return int
501 501
  */
502 502
 function _sqlite_timestampdiff($unit, $date1, $date2) {
503
-	$d1 = date_create($date1);
504
-	$d2 = date_create($date2);
505
-	$diff = date_diff($d1, $d2);
506
-	$inv = $diff->invert ? -1 : 1;
507
-	return match ($unit) {
508
-		'YEAR' => $inv * $diff->y,
509
-		'QUARTER' => $inv * (4 * $diff->y + (int) floor($diff->m / 3)),
510
-		'MONTH' => $inv * (12 * $diff->y + $diff->m),
511
-		'WEEK' => $inv * (int) floor($diff->days / 7),
512
-		'DAY' => $inv * $diff->days,
513
-		'HOUR' => $inv * (24 * $diff->days + $diff->h),
514
-		'MINUTE' => $inv * ((24 * $diff->days + $diff->h) * 60 + $diff->i),
515
-		'SECOND' => $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s),
516
-		'MICROSECOND' => $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s) * 1_000_000,
517
-		default => 0,
518
-	};
503
+    $d1 = date_create($date1);
504
+    $d2 = date_create($date2);
505
+    $diff = date_diff($d1, $d2);
506
+    $inv = $diff->invert ? -1 : 1;
507
+    return match ($unit) {
508
+        'YEAR' => $inv * $diff->y,
509
+        'QUARTER' => $inv * (4 * $diff->y + (int) floor($diff->m / 3)),
510
+        'MONTH' => $inv * (12 * $diff->y + $diff->m),
511
+        'WEEK' => $inv * (int) floor($diff->days / 7),
512
+        'DAY' => $inv * $diff->days,
513
+        'HOUR' => $inv * (24 * $diff->days + $diff->h),
514
+        'MINUTE' => $inv * ((24 * $diff->days + $diff->h) * 60 + $diff->i),
515
+        'SECOND' => $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s),
516
+        'MICROSECOND' => $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s) * 1_000_000,
517
+        default => 0,
518
+    };
519 519
 }
520 520
 
521 521
 /**
@@ -525,24 +525,24 @@  discard block
 block discarded – undo
525 525
  * @return int
526 526
  */
527 527
 function _sqlite_func_unix_timestamp($d) {
528
-	static $mem = [];
529
-	static $n = 0;
530
-	if (isset($mem[$d])) {
531
-		return $mem[$d];
532
-	}
533
-	if ($n++ > 100) {
534
-		$mem = [];
535
-		$n = 0;
536
-	}
537
-
538
-	//2005-12-02 20:53:53
539
-	#spip_log("Passage avec UNIX_TIMESTAMP : $d",'sqlite.'._LOG_DEBUG);
540
-	if (!$d) {
541
-		return $mem[$d] = time();
542
-	}
543
-
544
-	// une pile plus grosse n'accelere pas le calcul
545
-	return $mem[$d] = strtotime($d);
528
+    static $mem = [];
529
+    static $n = 0;
530
+    if (isset($mem[$d])) {
531
+        return $mem[$d];
532
+    }
533
+    if ($n++ > 100) {
534
+        $mem = [];
535
+        $n = 0;
536
+    }
537
+
538
+    //2005-12-02 20:53:53
539
+    #spip_log("Passage avec UNIX_TIMESTAMP : $d",'sqlite.'._LOG_DEBUG);
540
+    if (!$d) {
541
+        return $mem[$d] = time();
542
+    }
543
+
544
+    // une pile plus grosse n'accelere pas le calcul
545
+    return $mem[$d] = strtotime($d);
546 546
 }
547 547
 
548 548
 
@@ -555,7 +555,7 @@  discard block
 block discarded – undo
555 555
  * @return string
556 556
  */
557 557
 function _sqlite_func_year($d) {
558
-	return _sqlite_func_date('Y', $d);
558
+    return _sqlite_func_date('Y', $d);
559 559
 }
560 560
 
561 561
 /**
@@ -568,20 +568,20 @@  discard block
 block discarded – undo
568 568
  * @return string
569 569
  */
570 570
 function _sqlite_func_date($quoi, $d) {
571
-	static $mem = [];
572
-	static $n = 0;
573
-	if (isset($mem[$d])) {
574
-		return $mem[$d][$quoi];
575
-	}
576
-	if ($n++ > 100) {
577
-		$mem = [];
578
-		$n = 0;
579
-	}
580
-
581
-	$dec = date('Y-m-d', _sqlite_func_unix_timestamp($d));
582
-	$mem[$d] = ['Y' => substr($dec, 0, 4), 'm' => substr($dec, 5, 2), 'd' => substr($dec, 8, 2)];
583
-
584
-	return $mem[$d][$quoi];
571
+    static $mem = [];
572
+    static $n = 0;
573
+    if (isset($mem[$d])) {
574
+        return $mem[$d][$quoi];
575
+    }
576
+    if ($n++ > 100) {
577
+        $mem = [];
578
+        $n = 0;
579
+    }
580
+
581
+    $dec = date('Y-m-d', _sqlite_func_unix_timestamp($d));
582
+    $mem[$d] = ['Y' => substr($dec, 0, 4), 'm' => substr($dec, 5, 2), 'd' => substr($dec, 8, 2)];
583
+
584
+    return $mem[$d][$quoi];
585 585
 }
586 586
 
587 587
 /**
@@ -590,5 +590,5 @@  discard block
 block discarded – undo
590 590
  * @return void
591 591
  */
592 592
 function _sqlite_func_vide() {
593
-	return;
593
+    return;
594 594
 }
Please login to merge, or discard this patch.
ecrire/inc/genie.php 1 patch
Indentation   +89 added lines, -89 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 /**
@@ -74,28 +74,28 @@  discard block
 block discarded – undo
74 74
  * @return
75 75
  **/
76 76
 function inc_genie_dist($taches = []) {
77
-	include_spip('inc/queue');
78
-
79
-	if (_request('exec') == 'job_queue') {
80
-		return false;
81
-	}
82
-
83
-	$force_jobs = [];
84
-	// l'ancienne facon de lancer une tache cron immediatement
85
-	// etait de la passer en parametre a ing_genie_dist
86
-	// on reroute en ajoutant simplement le job a la queue, ASAP
87
-	foreach ($taches as $function => $period) {
88
-		$force_jobs[] = queue_add_job(
89
-			$function,
90
-			_T('tache_cron_asap', ['function' => $function]),
91
-			[time() - abs($period)],
92
-			'genie/'
93
-		);
94
-	}
95
-
96
-	// et on passe la main a la gestion de la queue !
97
-	// en forcant eventuellement les jobs ajoute a l'instant
98
-	return queue_schedule(count($force_jobs) ? $force_jobs : null);
77
+    include_spip('inc/queue');
78
+
79
+    if (_request('exec') == 'job_queue') {
80
+        return false;
81
+    }
82
+
83
+    $force_jobs = [];
84
+    // l'ancienne facon de lancer une tache cron immediatement
85
+    // etait de la passer en parametre a ing_genie_dist
86
+    // on reroute en ajoutant simplement le job a la queue, ASAP
87
+    foreach ($taches as $function => $period) {
88
+        $force_jobs[] = queue_add_job(
89
+            $function,
90
+            _T('tache_cron_asap', ['function' => $function]),
91
+            [time() - abs($period)],
92
+            'genie/'
93
+        );
94
+    }
95
+
96
+    // et on passe la main a la gestion de la queue !
97
+    // en forcant eventuellement les jobs ajoute a l'instant
98
+    return queue_schedule(count($force_jobs) ? $force_jobs : null);
99 99
 }
100 100
 
101 101
 //
@@ -108,34 +108,34 @@  discard block
 block discarded – undo
108 108
 //
109 109
 function taches_generales($taches_generales = []) {
110 110
 
111
-	// verifier que toutes les taches cron sont planifiees
112
-	// c'est une tache cron !
113
-	$taches_generales['queue_watch'] = 3600 * 24;
111
+    // verifier que toutes les taches cron sont planifiees
112
+    // c'est une tache cron !
113
+    $taches_generales['queue_watch'] = 3600 * 24;
114 114
 
115
-	// MAJ des rubriques publiques (cas de la publication post-datee)
116
-	// est fait au coup par coup a present
117
-	//	$taches_generales['rubriques'] = 3600;
115
+    // MAJ des rubriques publiques (cas de la publication post-datee)
116
+    // est fait au coup par coup a present
117
+    //	$taches_generales['rubriques'] = 3600;
118 118
 
119
-	// Optimisation de la base
120
-	$taches_generales['optimiser'] = 3600 * 48;
119
+    // Optimisation de la base
120
+    $taches_generales['optimiser'] = 3600 * 48;
121 121
 
122
-	// nouveautes
123
-	if (
124
-		isset($GLOBALS['meta']['adresse_neuf'])
125
-		&& $GLOBALS['meta']['adresse_neuf']
126
-		&& $GLOBALS['meta']['jours_neuf']
127
-		&& $GLOBALS['meta']['quoi_de_neuf'] == 'oui'
128
-	) {
129
-		$taches_generales['mail'] = 3600 * 24 * $GLOBALS['meta']['jours_neuf'];
130
-	}
122
+    // nouveautes
123
+    if (
124
+        isset($GLOBALS['meta']['adresse_neuf'])
125
+        && $GLOBALS['meta']['adresse_neuf']
126
+        && $GLOBALS['meta']['jours_neuf']
127
+        && $GLOBALS['meta']['quoi_de_neuf'] == 'oui'
128
+    ) {
129
+        $taches_generales['mail'] = 3600 * 24 * $GLOBALS['meta']['jours_neuf'];
130
+    }
131 131
 
132
-	// maintenance (ajax, verifications diverses)
133
-	$taches_generales['maintenance'] = 3600 * 2;
132
+    // maintenance (ajax, verifications diverses)
133
+    $taches_generales['maintenance'] = 3600 * 2;
134 134
 
135
-	// verifier si une mise a jour de spip est disponible (2 fois par semaine suffit largement)
136
-	$taches_generales['mise_a_jour'] = 3 * 24 * 3600;
135
+    // verifier si une mise a jour de spip est disponible (2 fois par semaine suffit largement)
136
+    $taches_generales['mise_a_jour'] = 3 * 24 * 3600;
137 137
 
138
-	return pipeline('taches_generales_cron', $taches_generales);
138
+    return pipeline('taches_generales_cron', $taches_generales);
139 139
 }
140 140
 
141 141
 /**
@@ -151,22 +151,22 @@  discard block
 block discarded – undo
151 151
  * @return int
152 152
  */
153 153
 function genie_queue_watch_dist() {
154
-	static $deja_la = false;
155
-	if ($deja_la) {
156
-		return;
157
-	} // re-entrance si l'insertion des jobs echoue (pas de table spip_jobs a l'upgrade par exemple)
158
-	$deja_la = true;
159
-	$taches = taches_generales();
160
-	$programmees = sql_allfetsel('fonction', 'spip_jobs', sql_in('fonction', array_keys($taches)));
161
-	$programmees = array_column($programmees, 'fonction');
162
-	foreach ($taches as $tache => $periode) {
163
-		if (!in_array($tache, $programmees)) {
164
-			queue_genie_replan_job($tache, $periode, time() - round(random_int(1, $periode)), 0);
165
-		}
166
-	}
167
-	$deja_la = false;
168
-
169
-	return 1;
154
+    static $deja_la = false;
155
+    if ($deja_la) {
156
+        return;
157
+    } // re-entrance si l'insertion des jobs echoue (pas de table spip_jobs a l'upgrade par exemple)
158
+    $deja_la = true;
159
+    $taches = taches_generales();
160
+    $programmees = sql_allfetsel('fonction', 'spip_jobs', sql_in('fonction', array_keys($taches)));
161
+    $programmees = array_column($programmees, 'fonction');
162
+    foreach ($taches as $tache => $periode) {
163
+        if (!in_array($tache, $programmees)) {
164
+            queue_genie_replan_job($tache, $periode, time() - round(random_int(1, $periode)), 0);
165
+        }
166
+    }
167
+    $deja_la = false;
168
+
169
+    return 1;
170 170
 }
171 171
 
172 172
 /**
@@ -187,32 +187,32 @@  discard block
 block discarded – undo
187 187
  * @return void
188 188
  */
189 189
 function queue_genie_replan_job($function, $period, $last = 0, $time = null, $priority = 0) {
190
-	static $done = [];
191
-	if (isset($done[$function])) {
192
-		return;
193
-	}
194
-	$done[$function] = true;
195
-	if (is_null($time)) {
196
-		$time = time();
197
-		if ($last) {
198
-			$time = max($last + $period, $time);
199
-		}
200
-	}
201
-	if (!$last) {
202
-		$last = $time - $period;
203
-	}
204
-	spip_log("replan_job $function $period $last $time $priority", 'queue');
205
-	include_spip('inc/queue');
206
-	// on replanifie un job cron
207
-	// uniquement si il n'y en a pas deja un avec le meme nom
208
-	// independament de l'argument
209
-	queue_add_job(
210
-		$function,
211
-		_T('tache_cron_secondes', ['function' => $function, 'nb' => $period]),
212
-		[$last],
213
-		'genie/',
214
-		'function_only',
215
-		$time,
216
-		$priority
217
-	);
190
+    static $done = [];
191
+    if (isset($done[$function])) {
192
+        return;
193
+    }
194
+    $done[$function] = true;
195
+    if (is_null($time)) {
196
+        $time = time();
197
+        if ($last) {
198
+            $time = max($last + $period, $time);
199
+        }
200
+    }
201
+    if (!$last) {
202
+        $last = $time - $period;
203
+    }
204
+    spip_log("replan_job $function $period $last $time $priority", 'queue');
205
+    include_spip('inc/queue');
206
+    // on replanifie un job cron
207
+    // uniquement si il n'y en a pas deja un avec le meme nom
208
+    // independament de l'argument
209
+    queue_add_job(
210
+        $function,
211
+        _T('tache_cron_secondes', ['function' => $function, 'nb' => $period]),
212
+        [$last],
213
+        'genie/',
214
+        'function_only',
215
+        $time,
216
+        $priority
217
+    );
218 218
 }
Please login to merge, or discard this patch.
ecrire/inc/roles.php 1 patch
Indentation   +182 added lines, -182 removed lines patch added patch discarded remove patch
@@ -27,7 +27,7 @@  discard block
 block discarded – undo
27 27
  */
28 28
 
29 29
 if (!defined('_ECRIRE_INC_VERSION')) {
30
-	return;
30
+    return;
31 31
 }
32 32
 
33 33
 
@@ -47,55 +47,55 @@  discard block
 block discarded – undo
47 47
  *     array : description des roles applicables dans 3 index : colonne, titres, roles
48 48
  **/
49 49
 function roles_presents($objet, $objet_destination = '') {
50
-	$desc = lister_tables_objets_sql(table_objet_sql($objet));
51
-
52
-	// pas de liste de roles, on sort
53
-	if (!isset($desc['roles_titres']) || !($titres = $desc['roles_titres'])) {
54
-		return false;
55
-	}
56
-
57
-	// on vérifie que la table de liaison existe
58
-	include_spip('action/editer_liens');
59
-	if (!$lien = objet_associable($objet)) {
60
-		return false;
61
-	}
62
-
63
-	// on cherche ensuite si la colonne existe bien dans la table de liaison (par défaut 'role')
64
-	$colonne = $desc['roles_colonne'] ?? 'role';
65
-	$trouver_table = charger_fonction('trouver_table', 'base');
66
-	[, $table_lien] = $lien;
67
-	$desc_lien = $trouver_table($table_lien);
68
-	if (!isset($desc_lien['field'][$colonne])) {
69
-		return false;
70
-	}
71
-
72
-	// sur quoi peuvent s'appliquer nos rôles
73
-	if (!$application = $desc['roles_objets']) {
74
-		return false;
75
-	}
76
-
77
-	// destination presente, on restreint si possible
78
-	if ($objet_destination) {
79
-		$objet_destination = table_objet($objet_destination);
80
-
81
-		// pour l'objet
82
-		if (isset($application[$objet_destination])) {
83
-			$application = $application[$objet_destination];
84
-			// sinon pour tous les objets
85
-		} elseif (isset($application['*'])) {
86
-			$application = $application['*'];
87
-		} // sinon tant pis
88
-		else {
89
-			return false;
90
-		}
91
-	}
92
-
93
-	// tout est ok
94
-	return [
95
-		'titres' => $titres,
96
-		'roles' => $application,
97
-		'colonne' => $colonne
98
-	];
50
+    $desc = lister_tables_objets_sql(table_objet_sql($objet));
51
+
52
+    // pas de liste de roles, on sort
53
+    if (!isset($desc['roles_titres']) || !($titres = $desc['roles_titres'])) {
54
+        return false;
55
+    }
56
+
57
+    // on vérifie que la table de liaison existe
58
+    include_spip('action/editer_liens');
59
+    if (!$lien = objet_associable($objet)) {
60
+        return false;
61
+    }
62
+
63
+    // on cherche ensuite si la colonne existe bien dans la table de liaison (par défaut 'role')
64
+    $colonne = $desc['roles_colonne'] ?? 'role';
65
+    $trouver_table = charger_fonction('trouver_table', 'base');
66
+    [, $table_lien] = $lien;
67
+    $desc_lien = $trouver_table($table_lien);
68
+    if (!isset($desc_lien['field'][$colonne])) {
69
+        return false;
70
+    }
71
+
72
+    // sur quoi peuvent s'appliquer nos rôles
73
+    if (!$application = $desc['roles_objets']) {
74
+        return false;
75
+    }
76
+
77
+    // destination presente, on restreint si possible
78
+    if ($objet_destination) {
79
+        $objet_destination = table_objet($objet_destination);
80
+
81
+        // pour l'objet
82
+        if (isset($application[$objet_destination])) {
83
+            $application = $application[$objet_destination];
84
+            // sinon pour tous les objets
85
+        } elseif (isset($application['*'])) {
86
+            $application = $application['*'];
87
+        } // sinon tant pis
88
+        else {
89
+            return false;
90
+        }
91
+    }
92
+
93
+    // tout est ok
94
+    return [
95
+        'titres' => $titres,
96
+        'roles' => $application,
97
+        'colonne' => $colonne
98
+    ];
99 99
 }
100 100
 
101 101
 /**
@@ -109,11 +109,11 @@  discard block
 block discarded – undo
109 109
  *     Nom de la colonne, sinon vide
110 110
  **/
111 111
 function roles_colonne($objet, $objet_destination) {
112
-	if ($roles = roles_presents($objet, $objet_destination)) {
113
-		return $roles['colonne'];
114
-	}
112
+    if ($roles = roles_presents($objet, $objet_destination)) {
113
+        return $roles['colonne'];
114
+    }
115 115
 
116
-	return '';
116
+    return '';
117 117
 }
118 118
 
119 119
 
@@ -135,21 +135,21 @@  discard block
 block discarded – undo
135 135
  *     Liste ('', '', array()) sinon.
136 136
  **/
137 137
 function roles_trouver_dans_qualif($objet, $objet_destination, $qualif = []) {
138
-	// si des rôles sont possibles, on les utilise
139
-	$role = $colonne_role = ''; # role défini
140
-	// condition du where par defaut
141
-	$cond = [];
142
-	if ($roles = roles_presents($objet, $objet_destination)) {
143
-		$colonne_role = $roles['colonne'];
144
-		// qu'il n'est pas défini
145
-		if (!isset($qualif[$colonne_role]) || !($role = $qualif[$colonne_role])) {
146
-			$role = $roles['roles']['defaut'];
147
-		}
148
-		// where
149
-		$cond = ["$colonne_role=" . sql_quote($role)];
150
-	}
151
-
152
-	return [$role, $colonne_role, $cond];
138
+    // si des rôles sont possibles, on les utilise
139
+    $role = $colonne_role = ''; # role défini
140
+    // condition du where par defaut
141
+    $cond = [];
142
+    if ($roles = roles_presents($objet, $objet_destination)) {
143
+        $colonne_role = $roles['colonne'];
144
+        // qu'il n'est pas défini
145
+        if (!isset($qualif[$colonne_role]) || !($role = $qualif[$colonne_role])) {
146
+            $role = $roles['roles']['defaut'];
147
+        }
148
+        // where
149
+        $cond = ["$colonne_role=" . sql_quote($role)];
150
+    }
151
+
152
+    return [$role, $colonne_role, $cond];
153 153
 }
154 154
 
155 155
 /**
@@ -171,18 +171,18 @@  discard block
 block discarded – undo
171 171
  *     Liste (Tableau de conditions where complété du role, Colonne du role, role utilisé)
172 172
  **/
173 173
 function roles_creer_condition_role($objet_source, $objet, $cond, $tous_si_absent = false) {
174
-	// role par défaut, colonne
175
-	[$role_defaut, $colonne_role] = roles_trouver_dans_qualif($objet_source, $objet);
176
-
177
-	// chercher d'eventuels rôles transmis
178
-	$role = ($cond['role'] ?? ($tous_si_absent ? '*' : $role_defaut));
179
-	unset($cond['role']); // cette condition est particuliere...
180
-	// on ajoute la condition du role aux autres conditions.
181
-	if ($colonne_role && $role != '*') {
182
-		$cond[] = "$colonne_role=" . sql_quote($role);
183
-	}
184
-
185
-	return [$cond, $colonne_role, $role];
174
+    // role par défaut, colonne
175
+    [$role_defaut, $colonne_role] = roles_trouver_dans_qualif($objet_source, $objet);
176
+
177
+    // chercher d'eventuels rôles transmis
178
+    $role = ($cond['role'] ?? ($tous_si_absent ? '*' : $role_defaut));
179
+    unset($cond['role']); // cette condition est particuliere...
180
+    // on ajoute la condition du role aux autres conditions.
181
+    if ($colonne_role && $role != '*') {
182
+        $cond[] = "$colonne_role=" . sql_quote($role);
183
+    }
184
+
185
+    return [$cond, $colonne_role, $role];
186 186
 }
187 187
 
188 188
 /**
@@ -204,28 +204,28 @@  discard block
 block discarded – undo
204 204
  */
205 205
 function roles_complets($objet_source, $objet, $id_objet, $objet_lien) {
206 206
 
207
-	$presents = roles_presents_liaisons($objet_source, $objet, $id_objet, $objet_lien);
208
-	// pas de roles sur ces objets => la liste par defaut, comme sans role
209
-	if ($presents === false) {
210
-		return lister_objets_lies($objet_source, $objet, $id_objet, $objet_lien);
211
-	}
212
-
213
-	// types de roles possibles
214
-	$roles_possibles = $presents['roles']['roles']['choix'];
215
-	// couples id / roles
216
-	$ids = $presents['ids'];
217
-
218
-	// pour chaque groupe, on fait le diff entre tous les roles possibles
219
-	// et les roles attribués à l'élément : s'il en reste, c'est que l'élément
220
-	// n'est pas complet
221
-	$complets = [];
222
-	foreach ($ids as $id => $roles_presents) {
223
-		if (!array_diff($roles_possibles, $roles_presents)) {
224
-			$complets[] = $id;
225
-		}
226
-	}
227
-
228
-	return $complets;
207
+    $presents = roles_presents_liaisons($objet_source, $objet, $id_objet, $objet_lien);
208
+    // pas de roles sur ces objets => la liste par defaut, comme sans role
209
+    if ($presents === false) {
210
+        return lister_objets_lies($objet_source, $objet, $id_objet, $objet_lien);
211
+    }
212
+
213
+    // types de roles possibles
214
+    $roles_possibles = $presents['roles']['roles']['choix'];
215
+    // couples id / roles
216
+    $ids = $presents['ids'];
217
+
218
+    // pour chaque groupe, on fait le diff entre tous les roles possibles
219
+    // et les roles attribués à l'élément : s'il en reste, c'est que l'élément
220
+    // n'est pas complet
221
+    $complets = [];
222
+    foreach ($ids as $id => $roles_presents) {
223
+        if (!array_diff($roles_possibles, $roles_presents)) {
224
+            $complets[] = $id;
225
+        }
226
+    }
227
+
228
+    return $complets;
229 229
 }
230 230
 
231 231
 
@@ -242,17 +242,17 @@  discard block
 block discarded – undo
242 242
  */
243 243
 function roles_presents_sur_id($id_objet_source, $objet_source, $objet, $id_objet, $objet_lien) {
244 244
 
245
-	$presents = roles_presents_liaisons($objet_source, $objet, $id_objet, $objet_lien);
246
-	// pas de roles sur ces objets => la liste par defaut, comme sans role
247
-	if ($presents === false) {
248
-		return [];
249
-	}
245
+    $presents = roles_presents_liaisons($objet_source, $objet, $id_objet, $objet_lien);
246
+    // pas de roles sur ces objets => la liste par defaut, comme sans role
247
+    if ($presents === false) {
248
+        return [];
249
+    }
250 250
 
251
-	if (!isset($presents['ids'][$id_objet_source])) {
252
-		return [];
253
-	}
251
+    if (!isset($presents['ids'][$id_objet_source])) {
252
+        return [];
253
+    }
254 254
 
255
-	return $presents['ids'][$id_objet_source];
255
+    return $presents['ids'][$id_objet_source];
256 256
 }
257 257
 
258 258
 
@@ -280,47 +280,47 @@  discard block
 block discarded – undo
280 280
  *     - False si pas de role déclarés
281 281
  */
282 282
 function roles_presents_liaisons($objet_source, $objet, $id_objet, $objet_lien) {
283
-	static $done = [];
284
-
285
-	// stocker le résultat
286
-	$hash = "$objet_source-$objet-$id_objet-$objet_lien";
287
-	if (isset($done[$hash])) {
288
-		return $done[$hash];
289
-	}
290
-
291
-	// pas de roles sur ces objets, on sort
292
-	$roles = roles_presents($objet_lien, ($objet_lien == $objet) ? $objet_source : $objet);
293
-	if (!$roles) {
294
-		return $done[$hash] = false;
295
-	}
296
-
297
-	// inspiré de lister_objets_lies()
298
-	if ($objet_lien == $objet) {
299
-		$res = objet_trouver_liens([$objet => $id_objet], [$objet_source => '*']);
300
-	} else {
301
-		$res = objet_trouver_liens([$objet_source => '*'], [$objet => $id_objet]);
302
-	}
303
-
304
-	// types de roles possibles
305
-	$roles_possibles = $roles['roles']['choix'];
306
-	// colonne du role
307
-	$colonne = $roles['colonne'];
308
-
309
-	// on recupere par id, et role existant
310
-	$ids = [];
311
-	while ($row = array_shift($res)) {
312
-		$id = $row[$objet_source];
313
-		if (!isset($ids[$id])) {
314
-			$ids[$id] = [];
315
-		}
316
-		// tableau des roles présents
317
-		$ids[$id][] = $row[$colonne];
318
-	}
319
-
320
-	return $done[$hash] = [
321
-		'roles' => $roles,
322
-		'ids' => $ids
323
-	];
283
+    static $done = [];
284
+
285
+    // stocker le résultat
286
+    $hash = "$objet_source-$objet-$id_objet-$objet_lien";
287
+    if (isset($done[$hash])) {
288
+        return $done[$hash];
289
+    }
290
+
291
+    // pas de roles sur ces objets, on sort
292
+    $roles = roles_presents($objet_lien, ($objet_lien == $objet) ? $objet_source : $objet);
293
+    if (!$roles) {
294
+        return $done[$hash] = false;
295
+    }
296
+
297
+    // inspiré de lister_objets_lies()
298
+    if ($objet_lien == $objet) {
299
+        $res = objet_trouver_liens([$objet => $id_objet], [$objet_source => '*']);
300
+    } else {
301
+        $res = objet_trouver_liens([$objet_source => '*'], [$objet => $id_objet]);
302
+    }
303
+
304
+    // types de roles possibles
305
+    $roles_possibles = $roles['roles']['choix'];
306
+    // colonne du role
307
+    $colonne = $roles['colonne'];
308
+
309
+    // on recupere par id, et role existant
310
+    $ids = [];
311
+    while ($row = array_shift($res)) {
312
+        $id = $row[$objet_source];
313
+        if (!isset($ids[$id])) {
314
+            $ids[$id] = [];
315
+        }
316
+        // tableau des roles présents
317
+        $ids[$id][] = $row[$colonne];
318
+    }
319
+
320
+    return $done[$hash] = [
321
+        'roles' => $roles,
322
+        'ids' => $ids
323
+    ];
324 324
 }
325 325
 
326 326
 
@@ -338,33 +338,33 @@  discard block
 block discarded – undo
338 338
  *     - false si pas de role déclarés
339 339
  */
340 340
 function roles_connus_en_base($objet_source, $objet, $objet_lien) {
341
-	static $done = [];
342
-
343
-	// stocker le résultat
344
-	$hash = "$objet_source-$objet-$objet_lien";
345
-	if (isset($done[$hash])) {
346
-		return $done[$hash];
347
-	}
348
-
349
-	if (!$lien = objet_associable($objet_lien)) {
350
-		return $done[$hash] = false;
351
-	}
352
-
353
-	// pas de roles sur ces objets, on sort
354
-	$roles = roles_presents($objet_lien, ($objet_lien == $objet) ? $objet_source : $objet);
355
-	if (!$roles) {
356
-		return $done[$hash] = false;
357
-	}
358
-
359
-	[$primary, $l] = $lien;
360
-	$colone_role = $roles['colonne'];
361
-
362
-	$all = sql_allfetsel(
363
-		"DISTINCT $colone_role",
364
-		$l,
365
-		'objet=' . sql_quote(($objet_source == $objet_lien) ? $objet : $objet_source)
366
-	);
367
-	$done[$hash] = array_map('reset', $all);
368
-
369
-	return $done[$hash];
341
+    static $done = [];
342
+
343
+    // stocker le résultat
344
+    $hash = "$objet_source-$objet-$objet_lien";
345
+    if (isset($done[$hash])) {
346
+        return $done[$hash];
347
+    }
348
+
349
+    if (!$lien = objet_associable($objet_lien)) {
350
+        return $done[$hash] = false;
351
+    }
352
+
353
+    // pas de roles sur ces objets, on sort
354
+    $roles = roles_presents($objet_lien, ($objet_lien == $objet) ? $objet_source : $objet);
355
+    if (!$roles) {
356
+        return $done[$hash] = false;
357
+    }
358
+
359
+    [$primary, $l] = $lien;
360
+    $colone_role = $roles['colonne'];
361
+
362
+    $all = sql_allfetsel(
363
+        "DISTINCT $colone_role",
364
+        $l,
365
+        'objet=' . sql_quote(($objet_source == $objet_lien) ? $objet : $objet_source)
366
+    );
367
+    $done[$hash] = array_map('reset', $all);
368
+
369
+    return $done[$hash];
370 370
 }
Please login to merge, or discard this patch.
ecrire/inc/texte_mini.php 1 patch
Indentation   +517 added lines, -517 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 include_spip('inc/filtres');
22 22
 include_spip('inc/lang');
@@ -38,21 +38,21 @@  discard block
 block discarded – undo
38 38
  **/
39 39
 function definir_puce() {
40 40
 
41
-	// Attention au sens, qui n'est pas defini de la meme facon dans
42
-	// l'espace prive (spip_lang est la langue de l'interface, lang_dir
43
-	// celle du texte) et public (spip_lang est la langue du texte)
44
-	$dir = _DIR_RESTREINT ? lang_dir() : lang_dir($GLOBALS['spip_lang']);
41
+    // Attention au sens, qui n'est pas defini de la meme facon dans
42
+    // l'espace prive (spip_lang est la langue de l'interface, lang_dir
43
+    // celle du texte) et public (spip_lang est la langue du texte)
44
+    $dir = _DIR_RESTREINT ? lang_dir() : lang_dir($GLOBALS['spip_lang']);
45 45
 
46
-	$p = 'puce' . (test_espace_prive() ? '_prive' : '');
47
-	if ($dir == 'rtl') {
48
-		$p .= '_rtl';
49
-	}
46
+    $p = 'puce' . (test_espace_prive() ? '_prive' : '');
47
+    if ($dir == 'rtl') {
48
+        $p .= '_rtl';
49
+    }
50 50
 
51
-	if (!isset($GLOBALS[$p])) {
52
-		$GLOBALS[$p] = '<span class="spip-puce ' . $dir . '"><b>–</b></span>';
53
-	}
51
+    if (!isset($GLOBALS[$p])) {
52
+        $GLOBALS[$p] = '<span class="spip-puce ' . $dir . '"><b>–</b></span>';
53
+    }
54 54
 
55
-	return $GLOBALS[$p];
55
+    return $GLOBALS[$p];
56 56
 }
57 57
 
58 58
 /**
@@ -66,31 +66,31 @@  discard block
 block discarded – undo
66 66
  */
67 67
 function spip_balisage_code(string $corps, bool $bloc = false, string $attributs = '', string $langage = '') {
68 68
 
69
-	$echap = spip_htmlspecialchars($corps); // il ne faut pas passer dans entites_html, ne pas transformer les &#xxx; du code !
70
-	$class = 'spip_code ' . ($bloc ? 'spip_code_block' : 'spip_code_inline');
71
-	if ($attributs) {
72
-		$attributs = ' ' . trim($attributs);
73
-	}
74
-	if ($langage) {
75
-		$class .= " language-$langage";
76
-		$attributs .= ' data-language="' . $langage . '"';
77
-	}
78
-	if ($bloc) {
79
-		$html = '<div class="precode">'
80
-		  . "<pre class=\"$class\" dir=\"ltr\" style=\"text-align: left;\"$attributs>"
81
-		  . '<code>'
82
-		  . $echap
83
-		  . '</code>'
84
-		  . '</pre>'
85
-		  . '</div>';
86
-	}
87
-	else {
88
-		$echap = str_replace("\t", '&nbsp; &nbsp; &nbsp; &nbsp; ', $echap);
89
-		$echap = str_replace('  ', ' &nbsp;', $echap);
90
-		$html = "<code class=\"$class\" dir=\"ltr\"$attributs>" . $echap . '</code>';
91
-	}
92
-
93
-	return $html;
69
+    $echap = spip_htmlspecialchars($corps); // il ne faut pas passer dans entites_html, ne pas transformer les &#xxx; du code !
70
+    $class = 'spip_code ' . ($bloc ? 'spip_code_block' : 'spip_code_inline');
71
+    if ($attributs) {
72
+        $attributs = ' ' . trim($attributs);
73
+    }
74
+    if ($langage) {
75
+        $class .= " language-$langage";
76
+        $attributs .= ' data-language="' . $langage . '"';
77
+    }
78
+    if ($bloc) {
79
+        $html = '<div class="precode">'
80
+            . "<pre class=\"$class\" dir=\"ltr\" style=\"text-align: left;\"$attributs>"
81
+            . '<code>'
82
+            . $echap
83
+            . '</code>'
84
+            . '</pre>'
85
+            . '</div>';
86
+    }
87
+    else {
88
+        $echap = str_replace("\t", '&nbsp; &nbsp; &nbsp; &nbsp; ', $echap);
89
+        $echap = str_replace('  ', ' &nbsp;', $echap);
90
+        $html = "<code class=\"$class\" dir=\"ltr\"$attributs>" . $echap . '</code>';
91
+    }
92
+
93
+    return $html;
94 94
 }
95 95
 
96 96
 
@@ -98,14 +98,14 @@  discard block
 block discarded – undo
98 98
 // dont on souhaite qu'ils provoquent un saut de paragraphe
99 99
 
100 100
 if (!defined('_BALISES_BLOCS')) {
101
-	define(
102
-		'_BALISES_BLOCS',
103
-		'address|applet|article|aside|blockquote|button|center|d[ltd]|div|fieldset|fig(ure|caption)|footer|form|h[1-6r]|hgroup|head|header|iframe|li|map|marquee|nav|noscript|object|ol|pre|section|t(able|[rdh]|body|foot|extarea)|ul|script|style'
104
-	);
101
+    define(
102
+        '_BALISES_BLOCS',
103
+        'address|applet|article|aside|blockquote|button|center|d[ltd]|div|fieldset|fig(ure|caption)|footer|form|h[1-6r]|hgroup|head|header|iframe|li|map|marquee|nav|noscript|object|ol|pre|section|t(able|[rdh]|body|foot|extarea)|ul|script|style'
104
+    );
105 105
 }
106 106
 
107 107
 if (!defined('_BALISES_BLOCS_REGEXP')) {
108
-	define('_BALISES_BLOCS_REGEXP', ',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS');
108
+    define('_BALISES_BLOCS_REGEXP', ',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS');
109 109
 }
110 110
 
111 111
 //
@@ -116,100 +116,100 @@  discard block
 block discarded – undo
116 116
 // une $source differente ; le script detecte automagiquement si ce qu'on
117 117
 // echappe est un div ou un span
118 118
 function code_echappement($rempl, $source = '', $no_transform = false, $mode = null) {
119
-	if (!strlen($rempl)) {
120
-		return '';
121
-	}
122
-
123
-	// Tester si on echappe en span ou en div
124
-	if (is_null($mode) or !in_array($mode, ['div', 'span'])) {
125
-		$mode = preg_match(',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS', $rempl) ? 'div' : 'span';
126
-	}
127
-
128
-	// Decouper en morceaux, base64 a des probleme selon la taille de la pile
129
-	$taille = 30000;
130
-	$return = '';
131
-	for ($i = 0; $i < strlen($rempl); $i += $taille) {
132
-		// Convertir en base64 et cacher dans un attribut
133
-		// utiliser les " pour eviter le re-encodage de ' et &#8217
134
-		$base64 = base64_encode(substr($rempl, $i, $taille));
135
-		$return .= "<$mode class=\"base64$source\" title=\"$base64\"></$mode>";
136
-	}
137
-
138
-	return $return;
119
+    if (!strlen($rempl)) {
120
+        return '';
121
+    }
122
+
123
+    // Tester si on echappe en span ou en div
124
+    if (is_null($mode) or !in_array($mode, ['div', 'span'])) {
125
+        $mode = preg_match(',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS', $rempl) ? 'div' : 'span';
126
+    }
127
+
128
+    // Decouper en morceaux, base64 a des probleme selon la taille de la pile
129
+    $taille = 30000;
130
+    $return = '';
131
+    for ($i = 0; $i < strlen($rempl); $i += $taille) {
132
+        // Convertir en base64 et cacher dans un attribut
133
+        // utiliser les " pour eviter le re-encodage de ' et &#8217
134
+        $base64 = base64_encode(substr($rempl, $i, $taille));
135
+        $return .= "<$mode class=\"base64$source\" title=\"$base64\"></$mode>";
136
+    }
137
+
138
+    return $return;
139 139
 }
140 140
 
141 141
 
142 142
 // Echapper les <html>...</ html>
143 143
 function traiter_echap_html_dist($regs, $options = []) {
144
-	return $regs[3];
144
+    return $regs[3];
145 145
 }
146 146
 
147 147
 // Echapper les <pre>...</ pre>
148 148
 function traiter_echap_pre_dist($regs, $options = []) {
149
-	// echapper les <code> dans <pre>
150
-	$pre = $regs[3];
151
-
152
-	// echapper les < dans <code>
153
-	// on utilise _PROTEGE_BLOCS pour simplifier le code et la maintenance, mais on est interesse que par <code>
154
-	if (
155
-		strpos($pre, '<') !== false
156
-		and preg_match_all(_PROTEGE_BLOCS, $pre, $matches, PREG_SET_ORDER)
157
-	) {
158
-		foreach ($matches as $m) {
159
-			if ($m[1] === 'code') {
160
-				$code = '<code' . $m[2] . '>' . spip_htmlspecialchars($m[3]) . '</code>';
161
-				$pre = str_replace($m[0], $code, $pre);
162
-			}
163
-		}
164
-	}
165
-	return "<pre>$pre</pre>";
149
+    // echapper les <code> dans <pre>
150
+    $pre = $regs[3];
151
+
152
+    // echapper les < dans <code>
153
+    // on utilise _PROTEGE_BLOCS pour simplifier le code et la maintenance, mais on est interesse que par <code>
154
+    if (
155
+        strpos($pre, '<') !== false
156
+        and preg_match_all(_PROTEGE_BLOCS, $pre, $matches, PREG_SET_ORDER)
157
+    ) {
158
+        foreach ($matches as $m) {
159
+            if ($m[1] === 'code') {
160
+                $code = '<code' . $m[2] . '>' . spip_htmlspecialchars($m[3]) . '</code>';
161
+                $pre = str_replace($m[0], $code, $pre);
162
+            }
163
+        }
164
+    }
165
+    return "<pre>$pre</pre>";
166 166
 }
167 167
 
168 168
 // Echapper les <code>...</ code>
169 169
 function traiter_echap_code_dist($regs, $options = []) {
170
-	[, , $att, $corps] = $regs;
170
+    [, , $att, $corps] = $regs;
171 171
 
172
-	// ne pas mettre le <div...> s'il n'y a qu'une ligne
173
-	if (strpos($corps, "\n") !== false) {
174
-		// supprimer les sauts de ligne debut/fin
175
-		// (mais pas les espaces => ascii art).
176
-		$corps = preg_replace("/^[\n\r]+|[\n\r]+$/s", '', $corps);
172
+    // ne pas mettre le <div...> s'il n'y a qu'une ligne
173
+    if (strpos($corps, "\n") !== false) {
174
+        // supprimer les sauts de ligne debut/fin
175
+        // (mais pas les espaces => ascii art).
176
+        $corps = preg_replace("/^[\n\r]+|[\n\r]+$/s", '', $corps);
177 177
 
178
-		$echap = spip_balisage_code($corps, true, $att);
179
-	} else {
180
-		$echap = spip_balisage_code($corps, false, $att);
181
-	}
178
+        $echap = spip_balisage_code($corps, true, $att);
179
+    } else {
180
+        $echap = spip_balisage_code($corps, false, $att);
181
+    }
182 182
 
183
-	return $echap;
183
+    return $echap;
184 184
 }
185 185
 
186 186
 // Echapper les <cadre>...</ cadre> aka <frame>...</ frame>
187 187
 function traiter_echap_cadre_dist($regs, $options = []) {
188
-	$echap = trim(entites_html($regs[3]));
189
-	// compter les lignes un peu plus finement qu'avec les \n
190
-	$lignes = explode("\n", trim($echap));
191
-	$n = 0;
192
-	foreach ($lignes as $l) {
193
-		$n += floor(strlen($l) / 60) + 1;
194
-	}
195
-	$n = max($n, 2);
196
-	$echap = "\n<textarea readonly='readonly' cols='40' rows='$n' class='spip_cadre spip_cadre_block' dir='ltr'>$echap</textarea>";
197
-
198
-	return $echap;
188
+    $echap = trim(entites_html($regs[3]));
189
+    // compter les lignes un peu plus finement qu'avec les \n
190
+    $lignes = explode("\n", trim($echap));
191
+    $n = 0;
192
+    foreach ($lignes as $l) {
193
+        $n += floor(strlen($l) / 60) + 1;
194
+    }
195
+    $n = max($n, 2);
196
+    $echap = "\n<textarea readonly='readonly' cols='40' rows='$n' class='spip_cadre spip_cadre_block' dir='ltr'>$echap</textarea>";
197
+
198
+    return $echap;
199 199
 }
200 200
 
201 201
 function traiter_echap_frame_dist($regs, $options = []) {
202
-	return traiter_echap_cadre_dist($regs);
202
+    return traiter_echap_cadre_dist($regs);
203 203
 }
204 204
 
205 205
 function traiter_echap_script_dist($regs, $options = []) {
206
-	// rendre joli (et inactif) si c'est un script language=php
207
-	if (preg_match(',<script\b[^>]+php,ims', $regs[0])) {
208
-		return highlight_string($regs[0], true);
209
-	}
206
+    // rendre joli (et inactif) si c'est un script language=php
207
+    if (preg_match(',<script\b[^>]+php,ims', $regs[0])) {
208
+        return highlight_string($regs[0], true);
209
+    }
210 210
 
211
-	// Cas normal : le script passe tel quel
212
-	return $regs[0];
211
+    // Cas normal : le script passe tel quel
212
+    return $regs[0];
213 213
 }
214 214
 
215 215
 define('_PROTEGE_BLOCS', ',<(html|pre|code|cadre|frame|script|style)(\b[^>]*)?>(.*)</\1>,UimsS');
@@ -228,74 +228,74 @@  discard block
 block discarded – undo
228 228
  * @return string|string[]
229 229
  */
230 230
 function echappe_html(
231
-	$letexte,
232
-	$source = '',
233
-	$no_transform = false,
234
-	$preg = '',
235
-	$callback_prefix = '',
236
-	$callback_options = []
231
+    $letexte,
232
+    $source = '',
233
+    $no_transform = false,
234
+    $preg = '',
235
+    $callback_prefix = '',
236
+    $callback_options = []
237 237
 ) {
238
-	if (!is_string($letexte) or !strlen($letexte)) {
239
-		return $letexte;
240
-	}
241
-
242
-	if (
243
-		($preg or str_contains($letexte, '<'))
244
-		and preg_match_all($preg ?: _PROTEGE_BLOCS, $letexte, $matches, PREG_SET_ORDER)
245
-	) {
246
-		foreach ($matches as $regs) {
247
-			$echap = '';
248
-			// echappements tels quels ?
249
-			if ($no_transform) {
250
-				$echap = $regs[0];
251
-			} else {
252
-				// sinon les traiter selon le cas
253
-				$callback_secure_prefix = ($callback_options['secure_prefix'] ?? '');
254
-				if (
255
-					function_exists($f = $callback_prefix . $callback_secure_prefix . 'traiter_echap_' . strtolower($regs[1]))
256
-					or function_exists($f = $f . '_dist')
257
-					or ($callback_secure_prefix and (
258
-						function_exists($f = $callback_prefix . 'traiter_echap_' . strtolower($regs[1]))
259
-						or function_exists($f = $f . '_dist')
260
-					))
261
-				) {
262
-					$echap = $f($regs, $callback_options);
263
-				}
264
-			}
265
-
266
-			$p = strpos($letexte, (string) $regs[0]);
267
-			$letexte = substr_replace($letexte, code_echappement($echap, $source, $no_transform), $p, strlen($regs[0]));
268
-		}
269
-	}
270
-
271
-	if ($no_transform) {
272
-		return $letexte;
273
-	}
274
-
275
-	// Echapper le php pour faire joli (ici, c'est pas pour la securite)
276
-	// seulement si on a echappe les <script>
277
-	// (derogatoire car on ne peut pas faire passer < ? ... ? >
278
-	// dans une callback autonommee
279
-	if (strpos($preg ?: _PROTEGE_BLOCS, 'script') !== false) {
280
-		if (
281
-			strpos($letexte, '<' . '?') !== false and preg_match_all(
282
-				',<[?].*($|[?]>),UisS',
283
-				$letexte,
284
-				$matches,
285
-				PREG_SET_ORDER
286
-			)
287
-		) {
288
-			foreach ($matches as $regs) {
289
-				$letexte = str_replace(
290
-					$regs[0],
291
-					code_echappement(highlight_string($regs[0], true), $source),
292
-					$letexte
293
-				);
294
-			}
295
-		}
296
-	}
297
-
298
-	return $letexte;
238
+    if (!is_string($letexte) or !strlen($letexte)) {
239
+        return $letexte;
240
+    }
241
+
242
+    if (
243
+        ($preg or str_contains($letexte, '<'))
244
+        and preg_match_all($preg ?: _PROTEGE_BLOCS, $letexte, $matches, PREG_SET_ORDER)
245
+    ) {
246
+        foreach ($matches as $regs) {
247
+            $echap = '';
248
+            // echappements tels quels ?
249
+            if ($no_transform) {
250
+                $echap = $regs[0];
251
+            } else {
252
+                // sinon les traiter selon le cas
253
+                $callback_secure_prefix = ($callback_options['secure_prefix'] ?? '');
254
+                if (
255
+                    function_exists($f = $callback_prefix . $callback_secure_prefix . 'traiter_echap_' . strtolower($regs[1]))
256
+                    or function_exists($f = $f . '_dist')
257
+                    or ($callback_secure_prefix and (
258
+                        function_exists($f = $callback_prefix . 'traiter_echap_' . strtolower($regs[1]))
259
+                        or function_exists($f = $f . '_dist')
260
+                    ))
261
+                ) {
262
+                    $echap = $f($regs, $callback_options);
263
+                }
264
+            }
265
+
266
+            $p = strpos($letexte, (string) $regs[0]);
267
+            $letexte = substr_replace($letexte, code_echappement($echap, $source, $no_transform), $p, strlen($regs[0]));
268
+        }
269
+    }
270
+
271
+    if ($no_transform) {
272
+        return $letexte;
273
+    }
274
+
275
+    // Echapper le php pour faire joli (ici, c'est pas pour la securite)
276
+    // seulement si on a echappe les <script>
277
+    // (derogatoire car on ne peut pas faire passer < ? ... ? >
278
+    // dans une callback autonommee
279
+    if (strpos($preg ?: _PROTEGE_BLOCS, 'script') !== false) {
280
+        if (
281
+            strpos($letexte, '<' . '?') !== false and preg_match_all(
282
+                ',<[?].*($|[?]>),UisS',
283
+                $letexte,
284
+                $matches,
285
+                PREG_SET_ORDER
286
+            )
287
+        ) {
288
+            foreach ($matches as $regs) {
289
+                $letexte = str_replace(
290
+                    $regs[0],
291
+                    code_echappement(highlight_string($regs[0], true), $source),
292
+                    $letexte
293
+                );
294
+            }
295
+        }
296
+    }
297
+
298
+    return $letexte;
299 299
 }
300 300
 
301 301
 //
@@ -303,57 +303,57 @@  discard block
 block discarded – undo
303 303
 // Rq: $source sert a faire des echappements "a soi" qui ne sont pas nettoyes
304 304
 // par propre() : exemple dans multi et dans typo()
305 305
 function echappe_retour($letexte, $source = '', $filtre = '') {
306
-	if (strpos($letexte, (string) "base64$source")) {
307
-		# spip_log(spip_htmlspecialchars($letexte));  ## pour les curieux
308
-		$max_prof = 5;
309
-		while (
310
-			strpos($letexte, '<') !== false
311
-			and
312
-			preg_match_all(
313
-				',<(span|div)\sclass=[\'"]base64' . $source . '[\'"]\s(.*)>\s*</\1>,UmsS',
314
-				$letexte,
315
-				$regs,
316
-				PREG_SET_ORDER
317
-			)
318
-			and $max_prof--
319
-		) {
320
-			foreach ($regs as $reg) {
321
-				$rempl = base64_decode(extraire_attribut($reg[0], 'title'));
322
-				// recherche d'attributs supplementaires
323
-				$at = [];
324
-				foreach (['lang', 'dir'] as $attr) {
325
-					if ($a = extraire_attribut($reg[0], $attr)) {
326
-						$at[$attr] = $a;
327
-					}
328
-				}
329
-				if ($at) {
330
-					$rempl = '<' . $reg[1] . '>' . $rempl . '</' . $reg[1] . '>';
331
-					foreach ($at as $attr => $a) {
332
-						$rempl = inserer_attribut($rempl, $attr, $a);
333
-					}
334
-				}
335
-				if ($filtre) {
336
-					$rempl = $filtre($rempl);
337
-				}
338
-				$letexte = str_replace($reg[0], $rempl, $letexte);
339
-			}
340
-		}
341
-	}
342
-
343
-	return $letexte;
306
+    if (strpos($letexte, (string) "base64$source")) {
307
+        # spip_log(spip_htmlspecialchars($letexte));  ## pour les curieux
308
+        $max_prof = 5;
309
+        while (
310
+            strpos($letexte, '<') !== false
311
+            and
312
+            preg_match_all(
313
+                ',<(span|div)\sclass=[\'"]base64' . $source . '[\'"]\s(.*)>\s*</\1>,UmsS',
314
+                $letexte,
315
+                $regs,
316
+                PREG_SET_ORDER
317
+            )
318
+            and $max_prof--
319
+        ) {
320
+            foreach ($regs as $reg) {
321
+                $rempl = base64_decode(extraire_attribut($reg[0], 'title'));
322
+                // recherche d'attributs supplementaires
323
+                $at = [];
324
+                foreach (['lang', 'dir'] as $attr) {
325
+                    if ($a = extraire_attribut($reg[0], $attr)) {
326
+                        $at[$attr] = $a;
327
+                    }
328
+                }
329
+                if ($at) {
330
+                    $rempl = '<' . $reg[1] . '>' . $rempl . '</' . $reg[1] . '>';
331
+                    foreach ($at as $attr => $a) {
332
+                        $rempl = inserer_attribut($rempl, $attr, $a);
333
+                    }
334
+                }
335
+                if ($filtre) {
336
+                    $rempl = $filtre($rempl);
337
+                }
338
+                $letexte = str_replace($reg[0], $rempl, $letexte);
339
+            }
340
+        }
341
+    }
342
+
343
+    return $letexte;
344 344
 }
345 345
 
346 346
 // Reinserer le javascript de confiance (venant des modeles)
347 347
 
348 348
 function echappe_retour_modeles($letexte, $interdire_scripts = false) {
349
-	$letexte = echappe_retour($letexte);
349
+    $letexte = echappe_retour($letexte);
350 350
 
351
-	// Dans les appels directs hors squelette, securiser aussi ici
352
-	if ($interdire_scripts) {
353
-		$letexte = interdire_scripts($letexte);
354
-	}
351
+    // Dans les appels directs hors squelette, securiser aussi ici
352
+    if ($interdire_scripts) {
353
+        $letexte = interdire_scripts($letexte);
354
+    }
355 355
 
356
-	return trim($letexte);
356
+    return trim($letexte);
357 357
 }
358 358
 
359 359
 
@@ -381,128 +381,128 @@  discard block
 block discarded – undo
381 381
  *     texte coupé
382 382
  **/
383 383
 function couper($texte, $taille = 50, $suite = null) {
384
-	if (!($length = strlen($texte)) or $taille <= 0) {
385
-		return '';
386
-	}
387
-	$offset = 400 + 2 * $taille;
388
-	while (
389
-		$offset < $length
390
-		and strlen(preg_replace(',<(!--|\w|/)[^>]+>,Uims', '', substr($texte, 0, $offset))) < $taille
391
-	) {
392
-		$offset = 2 * $offset;
393
-	}
394
-	if (
395
-		$offset < $length
396
-		&& ($p_tag_ouvrant = strpos($texte, '<', $offset)) !== null
397
-	) {
398
-		$p_tag_fermant = strpos($texte, '>', $offset);
399
-		if ($p_tag_fermant && ($p_tag_fermant < $p_tag_ouvrant)) {
400
-			$offset = $p_tag_fermant + 1;
401
-		} // prolonger la coupe jusqu'au tag fermant suivant eventuel
402
-	}
403
-	$texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
404
-
405
-	if (!function_exists('nettoyer_raccourcis_typo')) {
406
-		include_spip('inc/lien');
407
-	}
408
-	$texte = nettoyer_raccourcis_typo($texte);
409
-
410
-	// balises de sauts de ligne et paragraphe
411
-	$texte = preg_replace('/<p( [^>]*)?' . '>/', "\r\r", $texte);
412
-	$texte = preg_replace('/<br( [^>]*)?' . '>/', "\n", $texte);
413
-
414
-	// on repasse les doubles \n en \r que nettoyer_raccourcis_typo() a pu modifier
415
-	$texte = str_replace("\n\n", "\r\r", $texte);
416
-
417
-	// supprimer les tags
418
-	$texte = supprimer_tags($texte);
419
-	$texte = trim(str_replace("\n", ' ', $texte));
420
-
421
-	// tester s'il est nécessaire de couper le texte
422
-	if (spip_strlen($texte) <= $taille) {
423
-		$points = '';
424
-	} else {
425
-		// points de suite
426
-		if (is_null($suite)) {
427
-			$suite = (defined('_COUPER_SUITE') ? _COUPER_SUITE : '&nbsp;(...)');
428
-		}
429
-		$taille_suite = spip_strlen(filtrer_entites($suite));
430
-
431
-		// couper au mot precedent (ou au début de la chaîne si c'est le premier mot)
432
-		// on coupe avec un caractère de plus que la taille demandée afin de pouvoir
433
-		// détecter si le dernier mot du texte coupé est complet ou non. ce caractère
434
-		// excédentaire est ensuite supprimé par l'appel à preg_replace()
435
-		$long = spip_substr($texte, 0, max($taille + 1 - $taille_suite, 1));
436
-		$u = $GLOBALS['meta']['pcre_u'];
437
-		$court = preg_replace('/(^|([^\s ])[\s ]+)([\s ]|[^\s ]+)?$/D' . $u, "\\2", $long);
438
-		$points = $suite;
439
-
440
-		// trop court ? ne pas faire de (...)
441
-		if (spip_strlen($court) < max(0.75 * $taille, 2)) {
442
-			$points = '';
443
-			$long = spip_substr($texte, 0, $taille + 1);
444
-			preg_match('/(^|([^\s ])[\s ]+)([\s ]|[^\s ]+)?$/D' . $u, $long, $m);
445
-			$texte = preg_replace('/(^|([^\s ])[\s ]+)([\s ]|[^\s ]+)?$/D' . $u, "\\2", $long);
446
-			// encore trop court ? couper au caractere
447
-			if (spip_strlen($texte) < 0.75 * $taille) {
448
-				$texte = spip_substr($long, 0, $taille);
449
-			}
450
-		} else {
451
-			$texte = $court;
452
-		}
453
-	}
454
-
455
-	// remettre les paragraphes
456
-	$texte = preg_replace("/\r\r+/", "\n\n", $texte);
457
-
458
-	// supprimer l'eventuelle entite finale mal coupee
459
-	$texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte);
460
-
461
-	return quote_amp(trim($texte)) . $points;
384
+    if (!($length = strlen($texte)) or $taille <= 0) {
385
+        return '';
386
+    }
387
+    $offset = 400 + 2 * $taille;
388
+    while (
389
+        $offset < $length
390
+        and strlen(preg_replace(',<(!--|\w|/)[^>]+>,Uims', '', substr($texte, 0, $offset))) < $taille
391
+    ) {
392
+        $offset = 2 * $offset;
393
+    }
394
+    if (
395
+        $offset < $length
396
+        && ($p_tag_ouvrant = strpos($texte, '<', $offset)) !== null
397
+    ) {
398
+        $p_tag_fermant = strpos($texte, '>', $offset);
399
+        if ($p_tag_fermant && ($p_tag_fermant < $p_tag_ouvrant)) {
400
+            $offset = $p_tag_fermant + 1;
401
+        } // prolonger la coupe jusqu'au tag fermant suivant eventuel
402
+    }
403
+    $texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
404
+
405
+    if (!function_exists('nettoyer_raccourcis_typo')) {
406
+        include_spip('inc/lien');
407
+    }
408
+    $texte = nettoyer_raccourcis_typo($texte);
409
+
410
+    // balises de sauts de ligne et paragraphe
411
+    $texte = preg_replace('/<p( [^>]*)?' . '>/', "\r\r", $texte);
412
+    $texte = preg_replace('/<br( [^>]*)?' . '>/', "\n", $texte);
413
+
414
+    // on repasse les doubles \n en \r que nettoyer_raccourcis_typo() a pu modifier
415
+    $texte = str_replace("\n\n", "\r\r", $texte);
416
+
417
+    // supprimer les tags
418
+    $texte = supprimer_tags($texte);
419
+    $texte = trim(str_replace("\n", ' ', $texte));
420
+
421
+    // tester s'il est nécessaire de couper le texte
422
+    if (spip_strlen($texte) <= $taille) {
423
+        $points = '';
424
+    } else {
425
+        // points de suite
426
+        if (is_null($suite)) {
427
+            $suite = (defined('_COUPER_SUITE') ? _COUPER_SUITE : '&nbsp;(...)');
428
+        }
429
+        $taille_suite = spip_strlen(filtrer_entites($suite));
430
+
431
+        // couper au mot precedent (ou au début de la chaîne si c'est le premier mot)
432
+        // on coupe avec un caractère de plus que la taille demandée afin de pouvoir
433
+        // détecter si le dernier mot du texte coupé est complet ou non. ce caractère
434
+        // excédentaire est ensuite supprimé par l'appel à preg_replace()
435
+        $long = spip_substr($texte, 0, max($taille + 1 - $taille_suite, 1));
436
+        $u = $GLOBALS['meta']['pcre_u'];
437
+        $court = preg_replace('/(^|([^\s ])[\s ]+)([\s ]|[^\s ]+)?$/D' . $u, "\\2", $long);
438
+        $points = $suite;
439
+
440
+        // trop court ? ne pas faire de (...)
441
+        if (spip_strlen($court) < max(0.75 * $taille, 2)) {
442
+            $points = '';
443
+            $long = spip_substr($texte, 0, $taille + 1);
444
+            preg_match('/(^|([^\s ])[\s ]+)([\s ]|[^\s ]+)?$/D' . $u, $long, $m);
445
+            $texte = preg_replace('/(^|([^\s ])[\s ]+)([\s ]|[^\s ]+)?$/D' . $u, "\\2", $long);
446
+            // encore trop court ? couper au caractere
447
+            if (spip_strlen($texte) < 0.75 * $taille) {
448
+                $texte = spip_substr($long, 0, $taille);
449
+            }
450
+        } else {
451
+            $texte = $court;
452
+        }
453
+    }
454
+
455
+    // remettre les paragraphes
456
+    $texte = preg_replace("/\r\r+/", "\n\n", $texte);
457
+
458
+    // supprimer l'eventuelle entite finale mal coupee
459
+    $texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte);
460
+
461
+    return quote_amp(trim($texte)) . $points;
462 462
 }
463 463
 
464 464
 
465 465
 function protege_js_modeles($t) {
466
-	if (isset($GLOBALS['visiteur_session'])) {
467
-		if (preg_match_all(',<script.*?($|</script.),isS', $t, $r, PREG_SET_ORDER)) {
468
-			if (!defined('_PROTEGE_JS_MODELES')) {
469
-				include_spip('inc/acces');
470
-				define('_PROTEGE_JS_MODELES', creer_uniqid());
471
-			}
472
-			foreach ($r as $regs) {
473
-				$t = str_replace($regs[0], code_echappement($regs[0], 'javascript' . _PROTEGE_JS_MODELES), $t);
474
-			}
475
-		}
476
-		if (preg_match_all(',<\?php.*?($|\?' . '>),isS', $t, $r, PREG_SET_ORDER)) {
477
-			if (!defined('_PROTEGE_PHP_MODELES')) {
478
-				include_spip('inc/acces');
479
-				define('_PROTEGE_PHP_MODELES', creer_uniqid());
480
-			}
481
-			foreach ($r as $regs) {
482
-				$t = str_replace($regs[0], code_echappement($regs[0], 'php' . _PROTEGE_PHP_MODELES), $t);
483
-			}
484
-		}
485
-	}
486
-
487
-	return $t;
466
+    if (isset($GLOBALS['visiteur_session'])) {
467
+        if (preg_match_all(',<script.*?($|</script.),isS', $t, $r, PREG_SET_ORDER)) {
468
+            if (!defined('_PROTEGE_JS_MODELES')) {
469
+                include_spip('inc/acces');
470
+                define('_PROTEGE_JS_MODELES', creer_uniqid());
471
+            }
472
+            foreach ($r as $regs) {
473
+                $t = str_replace($regs[0], code_echappement($regs[0], 'javascript' . _PROTEGE_JS_MODELES), $t);
474
+            }
475
+        }
476
+        if (preg_match_all(',<\?php.*?($|\?' . '>),isS', $t, $r, PREG_SET_ORDER)) {
477
+            if (!defined('_PROTEGE_PHP_MODELES')) {
478
+                include_spip('inc/acces');
479
+                define('_PROTEGE_PHP_MODELES', creer_uniqid());
480
+            }
481
+            foreach ($r as $regs) {
482
+                $t = str_replace($regs[0], code_echappement($regs[0], 'php' . _PROTEGE_PHP_MODELES), $t);
483
+            }
484
+        }
485
+    }
486
+
487
+    return $t;
488 488
 }
489 489
 
490 490
 
491 491
 function echapper_faux_tags($letexte) {
492
-	if (strpos($letexte, '<') === false) {
493
-		return $letexte;
494
-	}
495
-	$textMatches = preg_split(',(</?[a-z!][^<>]*>),', $letexte, -1, PREG_SPLIT_DELIM_CAPTURE);
496
-
497
-	$letexte = '';
498
-	while (is_countable($textMatches) ? count($textMatches) : 0) {
499
-		// un texte a echapper
500
-		$letexte .= str_replace('<', '&lt;', array_shift($textMatches));
501
-		// un tag html qui a servit a faite le split
502
-		$letexte .= array_shift($textMatches);
503
-	}
504
-
505
-	return $letexte;
492
+    if (strpos($letexte, '<') === false) {
493
+        return $letexte;
494
+    }
495
+    $textMatches = preg_split(',(</?[a-z!][^<>]*>),', $letexte, -1, PREG_SPLIT_DELIM_CAPTURE);
496
+
497
+    $letexte = '';
498
+    while (is_countable($textMatches) ? count($textMatches) : 0) {
499
+        // un texte a echapper
500
+        $letexte .= str_replace('<', '&lt;', array_shift($textMatches));
501
+        // un tag html qui a servit a faite le split
502
+        $letexte .= array_shift($textMatches);
503
+    }
504
+
505
+    return $letexte;
506 506
 }
507 507
 
508 508
 /**
@@ -522,114 +522,114 @@  discard block
 block discarded – undo
522 522
  * @return string
523 523
  */
524 524
 function echapper_html_suspect($texte, $options = [], $connect = null, $env = []) {
525
-	static $echapper_html_suspect;
526
-	if (!$texte or !is_string($texte)) {
527
-		return $texte;
528
-	}
529
-
530
-	if (!isset($echapper_html_suspect)) {
531
-		$echapper_html_suspect = charger_fonction('echapper_html_suspect', 'inc', true);
532
-	}
533
-	// si fonction personalisee, on delegue
534
-	if ($echapper_html_suspect) {
535
-		// on collecte le tableau d'arg minimal pour ne pas casser un appel a une fonction inc_echapper_html_suspect() selon l'ancienne signature
536
-		$args = [$texte, $options];
537
-		if ($connect or !empty($env)) {
538
-			$args[] = $connect;
539
-		}
540
-		if (!empty($env)) {
541
-			$args[] = $env;
542
-		}
543
-		return $echapper_html_suspect(...$args);
544
-	}
545
-
546
-	if (is_bool($options)) {
547
-		$options = ['strict' => $options];
548
-	}
549
-	$strict = $options['strict'] ?? true;
550
-
551
-	// pas de balise html ou pas d'attribut sur les balises ? c'est OK
552
-	if (
553
-		strpos($texte, '<') === false
554
-		or !str_contains($texte, '=')
555
-	) {
556
-		return $texte;
557
-	}
558
-
559
-	// dans le prive, on veut afficher tout echappé pour la moderation
560
-	if (!isset($env['espace_prive'])) {
561
-		// conserver le comportement historique en cas d'appel court sans env
562
-		$env['espace_prive'] = test_espace_prive();
563
-	}
564
-	if (!empty($env['espace_prive']) or !empty($env['wysiwyg'])) {
565
-		// quand c'est du texte qui passe par propre on est plus coulant tant qu'il y a pas d'attribut du type onxxx=
566
-		// car sinon on declenche sur les modeles ou ressources
567
-		if (
568
-			!$strict and
569
-			(strpos($texte, 'on') === false or !preg_match(",<\w+.*\bon\w+\s*=,UimsS", $texte))
570
-		) {
571
-			return $texte;
572
-		}
573
-
574
-		include_spip('src/Texte/Collecteur/AbstractCollecteur');
575
-		include_spip('src/Texte/Collecteur/Modeles');
576
-		$collecteurModeles = new Spip\Texte\Collecteur\Modeles();
577
-		$texte = $collecteurModeles->echapper($texte);
578
-		$texte = echappe_js($texte);
579
-
580
-		$texte_to_check = $texte;
581
-		// si les raccourcis liens vont etre interprétés, il faut les expanser avant de vérifier que le html est safe
582
-		// car un raccourci peut etre utilisé pour faire un lien malin
583
-		// et un raccourci est potentiellement modifié par safehtml, ce qui fait un faux positif dans is_html_safe
584
-		if (!empty($options['expanser_liens'])) {
585
-			$texte_to_check = expanser_liens($texte_to_check, $env['connect'] ?? '', $env['env'] ?? []);
586
-		}
587
-		if (!is_html_safe($texte_to_check)) {
588
-			$texte = $options['texte_source_affiche'] ?? $texte;
589
-			$texte = preg_replace(",<(/?\w+\b[^>]*>),", "<tt>&lt;\\1</tt>", $texte);
590
-			$texte = str_replace('<', '&lt;', $texte);
591
-			$texte = str_replace('&lt;tt>', '<tt>', $texte);
592
-			$texte = str_replace('&lt;/tt>', '</tt>', $texte);
593
-			if (!function_exists('attribut_html')) {
594
-				include_spip('inc/filtres');
595
-			}
596
-			if (!empty($options['wrap_suspect'])) {
597
-				$texte = wrap($texte, $options['wrap_suspect']);
598
-			}
599
-			$texte = "<mark class='danger-js' title='" . attribut_html(_T('erreur_contenu_suspect')) . "'>⚠️</mark> " . $texte;
600
-		}
601
-
602
-		$texte = $collecteurModeles->retablir($texte);
603
-	}
604
-
605
-	// si on est là dans le public c'est le mode parano
606
-	// on veut donc un rendu propre et secure, et virer silencieusement ce qui est dangereux
607
-	else {
608
-		$collecteurLiens = $collecteurModeles = null;
609
-		if (!empty($options['expanser_liens'])) {
610
-			$texte = expanser_liens($texte, $env['connect'] ?? '', $env['env'] ?? []);
611
-		}
612
-		else {
613
-			include_spip('src/Texte/Collecteur/AbstractCollecteur');
614
-			include_spip('src/Texte/Collecteur/Liens');
615
-			include_spip('src/Texte/Collecteur/Modeles');
616
-
617
-			$collecteurLiens = new Spip\Texte\Collecteur\Liens();
618
-			$texte = $collecteurLiens->echapper($texte, ['sanitize_callback' => 'safehtml']);
619
-
620
-			$collecteurModeles = new Spip\Texte\Collecteur\Modeles();
621
-			$texte = $collecteurModeles->echapper($texte);
622
-		}
623
-		$texte = safehtml($texte);
624
-		if ($collecteurModeles) {
625
-			$texte = $collecteurModeles->retablir($texte);
626
-		}
627
-		if ($collecteurLiens) {
628
-			$texte = $collecteurLiens->retablir($texte);
629
-		}
630
-	}
631
-
632
-	return $texte;
525
+    static $echapper_html_suspect;
526
+    if (!$texte or !is_string($texte)) {
527
+        return $texte;
528
+    }
529
+
530
+    if (!isset($echapper_html_suspect)) {
531
+        $echapper_html_suspect = charger_fonction('echapper_html_suspect', 'inc', true);
532
+    }
533
+    // si fonction personalisee, on delegue
534
+    if ($echapper_html_suspect) {
535
+        // on collecte le tableau d'arg minimal pour ne pas casser un appel a une fonction inc_echapper_html_suspect() selon l'ancienne signature
536
+        $args = [$texte, $options];
537
+        if ($connect or !empty($env)) {
538
+            $args[] = $connect;
539
+        }
540
+        if (!empty($env)) {
541
+            $args[] = $env;
542
+        }
543
+        return $echapper_html_suspect(...$args);
544
+    }
545
+
546
+    if (is_bool($options)) {
547
+        $options = ['strict' => $options];
548
+    }
549
+    $strict = $options['strict'] ?? true;
550
+
551
+    // pas de balise html ou pas d'attribut sur les balises ? c'est OK
552
+    if (
553
+        strpos($texte, '<') === false
554
+        or !str_contains($texte, '=')
555
+    ) {
556
+        return $texte;
557
+    }
558
+
559
+    // dans le prive, on veut afficher tout echappé pour la moderation
560
+    if (!isset($env['espace_prive'])) {
561
+        // conserver le comportement historique en cas d'appel court sans env
562
+        $env['espace_prive'] = test_espace_prive();
563
+    }
564
+    if (!empty($env['espace_prive']) or !empty($env['wysiwyg'])) {
565
+        // quand c'est du texte qui passe par propre on est plus coulant tant qu'il y a pas d'attribut du type onxxx=
566
+        // car sinon on declenche sur les modeles ou ressources
567
+        if (
568
+            !$strict and
569
+            (strpos($texte, 'on') === false or !preg_match(",<\w+.*\bon\w+\s*=,UimsS", $texte))
570
+        ) {
571
+            return $texte;
572
+        }
573
+
574
+        include_spip('src/Texte/Collecteur/AbstractCollecteur');
575
+        include_spip('src/Texte/Collecteur/Modeles');
576
+        $collecteurModeles = new Spip\Texte\Collecteur\Modeles();
577
+        $texte = $collecteurModeles->echapper($texte);
578
+        $texte = echappe_js($texte);
579
+
580
+        $texte_to_check = $texte;
581
+        // si les raccourcis liens vont etre interprétés, il faut les expanser avant de vérifier que le html est safe
582
+        // car un raccourci peut etre utilisé pour faire un lien malin
583
+        // et un raccourci est potentiellement modifié par safehtml, ce qui fait un faux positif dans is_html_safe
584
+        if (!empty($options['expanser_liens'])) {
585
+            $texte_to_check = expanser_liens($texte_to_check, $env['connect'] ?? '', $env['env'] ?? []);
586
+        }
587
+        if (!is_html_safe($texte_to_check)) {
588
+            $texte = $options['texte_source_affiche'] ?? $texte;
589
+            $texte = preg_replace(",<(/?\w+\b[^>]*>),", "<tt>&lt;\\1</tt>", $texte);
590
+            $texte = str_replace('<', '&lt;', $texte);
591
+            $texte = str_replace('&lt;tt>', '<tt>', $texte);
592
+            $texte = str_replace('&lt;/tt>', '</tt>', $texte);
593
+            if (!function_exists('attribut_html')) {
594
+                include_spip('inc/filtres');
595
+            }
596
+            if (!empty($options['wrap_suspect'])) {
597
+                $texte = wrap($texte, $options['wrap_suspect']);
598
+            }
599
+            $texte = "<mark class='danger-js' title='" . attribut_html(_T('erreur_contenu_suspect')) . "'>⚠️</mark> " . $texte;
600
+        }
601
+
602
+        $texte = $collecteurModeles->retablir($texte);
603
+    }
604
+
605
+    // si on est là dans le public c'est le mode parano
606
+    // on veut donc un rendu propre et secure, et virer silencieusement ce qui est dangereux
607
+    else {
608
+        $collecteurLiens = $collecteurModeles = null;
609
+        if (!empty($options['expanser_liens'])) {
610
+            $texte = expanser_liens($texte, $env['connect'] ?? '', $env['env'] ?? []);
611
+        }
612
+        else {
613
+            include_spip('src/Texte/Collecteur/AbstractCollecteur');
614
+            include_spip('src/Texte/Collecteur/Liens');
615
+            include_spip('src/Texte/Collecteur/Modeles');
616
+
617
+            $collecteurLiens = new Spip\Texte\Collecteur\Liens();
618
+            $texte = $collecteurLiens->echapper($texte, ['sanitize_callback' => 'safehtml']);
619
+
620
+            $collecteurModeles = new Spip\Texte\Collecteur\Modeles();
621
+            $texte = $collecteurModeles->echapper($texte);
622
+        }
623
+        $texte = safehtml($texte);
624
+        if ($collecteurModeles) {
625
+            $texte = $collecteurModeles->retablir($texte);
626
+        }
627
+        if ($collecteurLiens) {
628
+            $texte = $collecteurLiens->retablir($texte);
629
+        }
630
+    }
631
+
632
+    return $texte;
633 633
 }
634 634
 
635 635
 
@@ -650,52 +650,52 @@  discard block
 block discarded – undo
650 650
  *      texte sécurisé
651 651
  **/
652 652
 function safehtml($t) {
653
-	static $safehtml;
654
-
655
-	if (!$t or !is_string($t)) {
656
-		return $t;
657
-	}
658
-	# attention safehtml nettoie deux ou trois caracteres de plus. A voir
659
-	if (strpos($t, '<') === false) {
660
-		return str_replace("\x00", '', $t);
661
-	}
662
-
663
-	$collecteurIdiomes = null;
664
-	if (stripos($t, '<:') !== false) {
665
-		include_spip('src/Texte/Collecteur/AbstractCollecteur');
666
-		include_spip('src/Texte/Collecteur/Idiomes');
667
-		$collecteurIdiomes = new Spip\Texte\Collecteur\Idiomes();
668
-		$t = $collecteurIdiomes->echapper($t);
669
-	}
670
-	$collecteurMultis = null;
671
-	if (stripos($t, '<multi') !== false) {
672
-		include_spip('src/Texte/Collecteur/AbstractCollecteur');
673
-		include_spip('src/Texte/Collecteur/Multis');
674
-		$collecteurMultis = new Spip\Texte\Collecteur\Multis();
675
-		$t = $collecteurMultis->echapper($t, ['sanitize_callback' => 'safehtml']);
676
-	}
677
-
678
-	if (!function_exists('interdire_scripts')) {
679
-		include_spip('inc/texte');
680
-	}
681
-	$t = interdire_scripts($t); // jolifier le php
682
-	$t = echappe_js($t);
683
-
684
-	if (!isset($safehtml)) {
685
-		$safehtml = charger_fonction('safehtml', 'inc', true);
686
-	}
687
-	if ($safehtml) {
688
-		$t = $safehtml($t);
689
-	}
690
-
691
-	if ($collecteurMultis) {
692
-		$t = $collecteurMultis->retablir($t);
693
-	}
694
-	if ($collecteurIdiomes) {
695
-		$t = $collecteurIdiomes->retablir($t);
696
-	}
697
-
698
-	return interdire_scripts($t); // interdire le php (2 precautions)
653
+    static $safehtml;
654
+
655
+    if (!$t or !is_string($t)) {
656
+        return $t;
657
+    }
658
+    # attention safehtml nettoie deux ou trois caracteres de plus. A voir
659
+    if (strpos($t, '<') === false) {
660
+        return str_replace("\x00", '', $t);
661
+    }
662
+
663
+    $collecteurIdiomes = null;
664
+    if (stripos($t, '<:') !== false) {
665
+        include_spip('src/Texte/Collecteur/AbstractCollecteur');
666
+        include_spip('src/Texte/Collecteur/Idiomes');
667
+        $collecteurIdiomes = new Spip\Texte\Collecteur\Idiomes();
668
+        $t = $collecteurIdiomes->echapper($t);
669
+    }
670
+    $collecteurMultis = null;
671
+    if (stripos($t, '<multi') !== false) {
672
+        include_spip('src/Texte/Collecteur/AbstractCollecteur');
673
+        include_spip('src/Texte/Collecteur/Multis');
674
+        $collecteurMultis = new Spip\Texte\Collecteur\Multis();
675
+        $t = $collecteurMultis->echapper($t, ['sanitize_callback' => 'safehtml']);
676
+    }
677
+
678
+    if (!function_exists('interdire_scripts')) {
679
+        include_spip('inc/texte');
680
+    }
681
+    $t = interdire_scripts($t); // jolifier le php
682
+    $t = echappe_js($t);
683
+
684
+    if (!isset($safehtml)) {
685
+        $safehtml = charger_fonction('safehtml', 'inc', true);
686
+    }
687
+    if ($safehtml) {
688
+        $t = $safehtml($t);
689
+    }
690
+
691
+    if ($collecteurMultis) {
692
+        $t = $collecteurMultis->retablir($t);
693
+    }
694
+    if ($collecteurIdiomes) {
695
+        $t = $collecteurIdiomes->retablir($t);
696
+    }
697
+
698
+    return interdire_scripts($t); // interdire le php (2 precautions)
699 699
 }
700 700
 
701 701
 
@@ -703,25 +703,25 @@  discard block
 block discarded – undo
703 703
  * Detecter si un texte est "safe" ie non modifie significativement par safehtml()
704 704
  */
705 705
 function is_html_safe(string $texte): bool {
706
-	if ($is_html_safe = charger_fonction('is_html_safe', 'inc', true)) {
707
-		return $is_html_safe($texte);
708
-	}
709
-
710
-	// simplifier les retour ligne pour etre certain de ce que l'on compare
711
-	$texte = str_replace("\r\n", "\n", $texte);
712
-	// safehtml reduit aussi potentiellement les &nbsp;
713
-	$texte = str_replace('&nbsp;', ' ', $texte);
714
-	// safehtml remplace les entités numériques
715
-	if (strpos($texte, '&#') !== false) {
716
-		$texte = unicode2charset($texte);
717
-	}
718
-
719
-	$texte_safe = safehtml($texte);
720
-
721
-	// on teste sur strlen car safehtml supprime le contenu dangereux
722
-	// mais il peut aussi changer des ' en " sur les attributs html,
723
-	// donc un test d'egalite est trop strict
724
-	return strlen($texte_safe) === strlen($texte);
706
+    if ($is_html_safe = charger_fonction('is_html_safe', 'inc', true)) {
707
+        return $is_html_safe($texte);
708
+    }
709
+
710
+    // simplifier les retour ligne pour etre certain de ce que l'on compare
711
+    $texte = str_replace("\r\n", "\n", $texte);
712
+    // safehtml reduit aussi potentiellement les &nbsp;
713
+    $texte = str_replace('&nbsp;', ' ', $texte);
714
+    // safehtml remplace les entités numériques
715
+    if (strpos($texte, '&#') !== false) {
716
+        $texte = unicode2charset($texte);
717
+    }
718
+
719
+    $texte_safe = safehtml($texte);
720
+
721
+    // on teste sur strlen car safehtml supprime le contenu dangereux
722
+    // mais il peut aussi changer des ' en " sur les attributs html,
723
+    // donc un test d'egalite est trop strict
724
+    return strlen($texte_safe) === strlen($texte);
725 725
 }
726 726
 
727 727
 /**
@@ -742,13 +742,13 @@  discard block
 block discarded – undo
742 742
  *     texte sans les modèles d'image
743 743
  **/
744 744
 function supprime_img($letexte, $message = null) {
745
-	if ($message === null) {
746
-		$message = '(' . _T('img_indisponible') . ')';
747
-	}
748
-
749
-	return preg_replace(
750
-		',<(img|doc|emb)([0-9]+)(\|([^>]*))?' . '\s*/?' . '>,i',
751
-		$message,
752
-		$letexte
753
-	);
745
+    if ($message === null) {
746
+        $message = '(' . _T('img_indisponible') . ')';
747
+    }
748
+
749
+    return preg_replace(
750
+        ',<(img|doc|emb)([0-9]+)(\|([^>]*))?' . '\s*/?' . '>,i',
751
+        $message,
752
+        $letexte
753
+    );
754 754
 }
Please login to merge, or discard this patch.
ecrire/inc/importer_csv.php 1 patch
Indentation   +71 added lines, -71 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 include_spip('inc/charsets');
@@ -41,14 +41,14 @@  discard block
 block discarded – undo
41 41
  * @return array
42 42
  */
43 43
 function importer_csv_importcharset($texte, $definir_charset_source = false) {
44
-	// le plus frequent, en particulier avec les trucs de ms@@@
45
-	static $charset_source = 'iso-8859-1';
46
-	if ($definir_charset_source) {
47
-		$charset_source = $definir_charset_source === true ? 'iso-8859-1' : $definir_charset_source;
48
-	}
49
-	// mais open-office sait faire mieux, donc mefiance !
50
-	$charset = is_utf8($texte) ? 'utf-8' : $charset_source;
51
-	return importer_charset($texte, $charset);
44
+    // le plus frequent, en particulier avec les trucs de ms@@@
45
+    static $charset_source = 'iso-8859-1';
46
+    if ($definir_charset_source) {
47
+        $charset_source = $definir_charset_source === true ? 'iso-8859-1' : $definir_charset_source;
48
+    }
49
+    // mais open-office sait faire mieux, donc mefiance !
50
+    $charset = is_utf8($texte) ? 'utf-8' : $charset_source;
51
+    return importer_charset($texte, $charset);
52 52
 }
53 53
 
54 54
 /**
@@ -59,7 +59,7 @@  discard block
 block discarded – undo
59 59
  * @return string
60 60
  */
61 61
 function importer_csv_nettoie_key($key) {
62
-	return translitteration($key);
62
+    return translitteration($key);
63 63
 }
64 64
 
65 65
 /**
@@ -78,70 +78,70 @@  discard block
 block discarded – undo
78 78
  */
79 79
 function inc_importer_csv_dist($file, $options = []) {
80 80
 
81
-	// support ancienne syntaxe
82
-	// inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"', $len = 10000, $charset_source = '')
83
-	if (!is_array($options)) {
84
-		$args = func_get_args();
85
-		$options = [];
86
-		foreach ([1 => 'head', 2 => 'delim', 3 => 'enclos', 4 => 'len', 5 => 'charset_source'] as $k => $option) {
87
-			if (!empty($args[$k])) {
88
-				$options[$option] = $args[$k];
89
-			}
90
-		}
91
-	}
81
+    // support ancienne syntaxe
82
+    // inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"', $len = 10000, $charset_source = '')
83
+    if (!is_array($options)) {
84
+        $args = func_get_args();
85
+        $options = [];
86
+        foreach ([1 => 'head', 2 => 'delim', 3 => 'enclos', 4 => 'len', 5 => 'charset_source'] as $k => $option) {
87
+            if (!empty($args[$k])) {
88
+                $options[$option] = $args[$k];
89
+            }
90
+        }
91
+    }
92 92
 
93
-	$default_options = [
94
-		'head' => false,
95
-		'delim' => ',',
96
-		'enclos' => '"',
97
-		'len' => 10000,
98
-		'charset_source' => '',
99
-	];
100
-	$options = array_merge($default_options, $options);
93
+    $default_options = [
94
+        'head' => false,
95
+        'delim' => ',',
96
+        'enclos' => '"',
97
+        'len' => 10000,
98
+        'charset_source' => '',
99
+    ];
100
+    $options = array_merge($default_options, $options);
101 101
 
102 102
 
103
-	$return = [];
104
-	if (@file_exists($file) && ($handle = fopen($file, 'r'))) {
105
-		if ($options['charset_source']) {
106
-			importer_csv_importcharset('', $options['charset_source']);
107
-		}
108
-		if ($options['head']) {
109
-			$header = fgetcsv($handle, $options['len'], $options['delim'], $options['enclos']);
110
-			if ($header) {
111
-				$header = array_map('importer_csv_importcharset', $header);
112
-				$header = array_map('importer_csv_nettoie_key', $header);
113
-				$header_type = [];
114
-				foreach ($header as $heading) {
115
-					$header_type[$heading] = isset($header_type[$heading]) ? 'array' : 'scalar';
116
-				}
117
-			}
118
-		}
103
+    $return = [];
104
+    if (@file_exists($file) && ($handle = fopen($file, 'r'))) {
105
+        if ($options['charset_source']) {
106
+            importer_csv_importcharset('', $options['charset_source']);
107
+        }
108
+        if ($options['head']) {
109
+            $header = fgetcsv($handle, $options['len'], $options['delim'], $options['enclos']);
110
+            if ($header) {
111
+                $header = array_map('importer_csv_importcharset', $header);
112
+                $header = array_map('importer_csv_nettoie_key', $header);
113
+                $header_type = [];
114
+                foreach ($header as $heading) {
115
+                    $header_type[$heading] = isset($header_type[$heading]) ? 'array' : 'scalar';
116
+                }
117
+            }
118
+        }
119 119
 
120
-		while (($data = fgetcsv($handle, $options['len'], $options['delim'], $options['enclos'])) !== false) {
121
-			$data = array_map('importer_csv_importcharset', $data);
122
-			if ($options['head'] && isset($header)) {
123
-				$row = [];
124
-				foreach ($header as $key => $heading) {
125
-					if ($header_type[$heading] == 'array') {
126
-						if (!isset($row[$heading])) {
127
-							$row[$heading] = [];
128
-						}
129
-						if (isset($data[$key]) && strlen($data[$key])) {
130
-							$row[$heading][] = $data[$key];
131
-						}
132
-					} else {
133
-						$row[$heading] = $data[$key] ?? '';
134
-					}
135
-				}
136
-				$return[] = $row;
137
-			} else {
138
-				$return[] = $data;
139
-			}
140
-		}
141
-		if ($options['charset_source']) {
142
-			importer_csv_importcharset('', true);
143
-		}
144
-	}
120
+        while (($data = fgetcsv($handle, $options['len'], $options['delim'], $options['enclos'])) !== false) {
121
+            $data = array_map('importer_csv_importcharset', $data);
122
+            if ($options['head'] && isset($header)) {
123
+                $row = [];
124
+                foreach ($header as $key => $heading) {
125
+                    if ($header_type[$heading] == 'array') {
126
+                        if (!isset($row[$heading])) {
127
+                            $row[$heading] = [];
128
+                        }
129
+                        if (isset($data[$key]) && strlen($data[$key])) {
130
+                            $row[$heading][] = $data[$key];
131
+                        }
132
+                    } else {
133
+                        $row[$heading] = $data[$key] ?? '';
134
+                    }
135
+                }
136
+                $return[] = $row;
137
+            } else {
138
+                $return[] = $data;
139
+            }
140
+        }
141
+        if ($options['charset_source']) {
142
+            importer_csv_importcharset('', true);
143
+        }
144
+    }
145 145
 
146
-	return $return ?: false;
146
+    return $return ?: false;
147 147
 }
Please login to merge, or discard this patch.
ecrire/inc/minipres.php 1 patch
Indentation   +30 added lines, -30 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
  * @package SPIP\Core\Minipres
16 16
  **/
17 17
 if (!defined('_ECRIRE_INC_VERSION')) {
18
-	return;
18
+    return;
19 19
 }
20 20
 
21 21
 /**
@@ -35,19 +35,19 @@  discard block
 block discarded – undo
35 35
  */
36 36
 function install_debut_html($titre = 'AUTO', $onLoad = '', $all_inline = false) {
37 37
 
38
-	if ($onLoad) {
39
-		include_spip('inc/filtres');
40
-		$onLoad = extraire_attribut("<body $onLoad>", 'onload');
41
-	}
38
+    if ($onLoad) {
39
+        include_spip('inc/filtres');
40
+        $onLoad = extraire_attribut("<body $onLoad>", 'onload');
41
+    }
42 42
 
43
-	$options = [
44
-		'all_inline' => $all_inline,
45
-		'onload' => $onLoad,
46
-		'titre' => $titre,
47
-	];
43
+    $options = [
44
+        'all_inline' => $all_inline,
45
+        'onload' => $onLoad,
46
+        'titre' => $titre,
47
+    ];
48 48
 
49
-	$minipage = new Spip\Afficher\Minipage\Admin();
50
-	return $minipage->installDebutPage($options);
49
+    $minipage = new Spip\Afficher\Minipage\Admin();
50
+    return $minipage->installDebutPage($options);
51 51
 }
52 52
 
53 53
 /**
@@ -59,8 +59,8 @@  discard block
 block discarded – undo
59 59
  * @return string Code HTML
60 60
  */
61 61
 function install_fin_html() {
62
-	$minipage = new Spip\Afficher\Minipage\Admin();
63
-	return $minipage->installFinPage();
62
+    $minipage = new Spip\Afficher\Minipage\Admin();
63
+    return $minipage->installFinPage();
64 64
 }
65 65
 
66 66
 
@@ -99,23 +99,23 @@  discard block
 block discarded – undo
99 99
  */
100 100
 function minipres($titre = '', $corps = '', $options = []) {
101 101
 
102
-	// compat signature old
103
-	// minipres($titre='', $corps="", $onload='', $all_inline = false)
104
-	$args = func_get_args();
105
-	if (isset($args[2]) && is_string($args[2])) {
106
-		$options = ['onload' => $args[2]];
107
-	}
108
-	if (isset($args[3])) {
109
-		$options['all_inline'] = $args[3];
110
-	}
102
+    // compat signature old
103
+    // minipres($titre='', $corps="", $onload='', $all_inline = false)
104
+    $args = func_get_args();
105
+    if (isset($args[2]) && is_string($args[2])) {
106
+        $options = ['onload' => $args[2]];
107
+    }
108
+    if (isset($args[3])) {
109
+        $options['all_inline'] = $args[3];
110
+    }
111 111
 
112
-	$options = array_merge([
113
-		'onload' => '',
114
-		'all_inline' => false,
115
-	], $options);
112
+    $options = array_merge([
113
+        'onload' => '',
114
+        'all_inline' => false,
115
+    ], $options);
116 116
 
117
-	$options['titre'] = $titre;
117
+    $options['titre'] = $titre;
118 118
 
119
-	$minipage = new Spip\Afficher\Minipage\Admin();
120
-	return $minipage->page($corps, $options);
119
+    $minipage = new Spip\Afficher\Minipage\Admin();
120
+    return $minipage->page($corps, $options);
121 121
 }
Please login to merge, or discard this patch.
ecrire/inc/presenter_enfants.php 1 patch
Indentation   +171 added lines, -171 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 include_spip('inc/autoriser');
@@ -29,74 +29,74 @@  discard block
 block discarded – undo
29 29
  *  Un tableau des sous rubriques
30 30
  */
31 31
 function enfant_rub($collection, $debut = 0, $limite = 500) {
32
-	$voir_logo = (isset($GLOBALS['meta']['image_process']) && $GLOBALS['meta']['image_process'] != 'non');
33
-	$logo = '';
34
-
35
-	if ($voir_logo) {
36
-		$chercher_logo = charger_fonction('chercher_logo', 'inc');
37
-		include_spip('inc/filtres_images_mini');
38
-	}
39
-
40
-	$res = [];
41
-
42
-	$result = sql_select(
43
-		'id_rubrique, id_parent, titre, descriptif, lang',
44
-		'spip_rubriques',
45
-		'id_parent=' . (int) $collection,
46
-		'',
47
-		'0+titre,titre',
48
-		$debut == -1 ? '' : "$debut,$limite"
49
-	);
50
-	while ($row = sql_fetch($result)) {
51
-		$id_rubrique = $row['id_rubrique'];
52
-		$id_parent = $row['id_parent'];
53
-		// pour etre sur de passer par tous les traitements
54
-		$titre = generer_objet_info($id_rubrique, 'rubrique', 'titre');
55
-		if ('' !== ($rang = recuperer_numero($row['titre']))) {
56
-			$rang = "<span class='rang'>$rang.</span> ";
57
-		}
58
-
59
-		if (autoriser('voir', 'rubrique', $id_rubrique)) {
60
-			$les_sous_enfants = sous_enfant_rub($id_rubrique);
61
-
62
-			changer_typo($row['lang']);
63
-			$lang_dir = lang_dir($row['lang']);
64
-			$descriptif = propre($row['descriptif']);
65
-
66
-			if ($voir_logo && ($logo = $chercher_logo($id_rubrique, 'id_rubrique', 'on'))) {
67
-				[$fid, $dir, $nom, $format] = $logo;
68
-				$logo = image_recadre_avec_fallback("<img src='$fid' alt='' />", 70, 70);
69
-				if ($logo) {
70
-					$logo = wrap(inserer_attribut($logo, 'class', 'logo'), '<span class="logo-carre">');
71
-				}
72
-			}
73
-
74
-			$lib_bouton = (acces_restreint_rubrique($id_rubrique)
75
-				? http_img_pack('auteur-0minirezo-16.png', '', " width='16' height='16'", _T('image_administrer_rubrique'))
76
-				: '') .
77
-				" <a class='titremlien' dir='$lang_dir'" .
78
-				($row['lang'] !== $GLOBALS['spip_lang'] ? " hreflang='" . $row['lang'] . "'" : '') .
79
-				" href='" .
80
-				generer_objet_url($id_rubrique, 'rubrique') .
81
-				"'><span class='titre'>" .
82
-				$rang . $titre
83
-				. '</span>'
84
-				. (is_string($logo) ? $logo : '')
85
-				. '</a>';
86
-
87
-			$titre = bouton_block_depliable($lib_bouton, $les_sous_enfants ? false : -1, "enfants$id_rubrique")
88
-				. ($descriptif ? "\n<div class='descriptif'>$descriptif</div>" : '')
89
-				;
90
-
91
-			$res[] =
92
-				debut_cadre_sous_rub(($id_parent ? 'rubrique-24.png' : 'secteur-24.png'), true, '', $titre) .
93
-				$les_sous_enfants .
94
-				fin_cadre_sous_rub();
95
-		}
96
-	}
97
-
98
-	changer_typo($GLOBALS['spip_lang']); # remettre la typo de l'interface pour la suite
99
-	return $res;
32
+    $voir_logo = (isset($GLOBALS['meta']['image_process']) && $GLOBALS['meta']['image_process'] != 'non');
33
+    $logo = '';
34
+
35
+    if ($voir_logo) {
36
+        $chercher_logo = charger_fonction('chercher_logo', 'inc');
37
+        include_spip('inc/filtres_images_mini');
38
+    }
39
+
40
+    $res = [];
41
+
42
+    $result = sql_select(
43
+        'id_rubrique, id_parent, titre, descriptif, lang',
44
+        'spip_rubriques',
45
+        'id_parent=' . (int) $collection,
46
+        '',
47
+        '0+titre,titre',
48
+        $debut == -1 ? '' : "$debut,$limite"
49
+    );
50
+    while ($row = sql_fetch($result)) {
51
+        $id_rubrique = $row['id_rubrique'];
52
+        $id_parent = $row['id_parent'];
53
+        // pour etre sur de passer par tous les traitements
54
+        $titre = generer_objet_info($id_rubrique, 'rubrique', 'titre');
55
+        if ('' !== ($rang = recuperer_numero($row['titre']))) {
56
+            $rang = "<span class='rang'>$rang.</span> ";
57
+        }
58
+
59
+        if (autoriser('voir', 'rubrique', $id_rubrique)) {
60
+            $les_sous_enfants = sous_enfant_rub($id_rubrique);
61
+
62
+            changer_typo($row['lang']);
63
+            $lang_dir = lang_dir($row['lang']);
64
+            $descriptif = propre($row['descriptif']);
65
+
66
+            if ($voir_logo && ($logo = $chercher_logo($id_rubrique, 'id_rubrique', 'on'))) {
67
+                [$fid, $dir, $nom, $format] = $logo;
68
+                $logo = image_recadre_avec_fallback("<img src='$fid' alt='' />", 70, 70);
69
+                if ($logo) {
70
+                    $logo = wrap(inserer_attribut($logo, 'class', 'logo'), '<span class="logo-carre">');
71
+                }
72
+            }
73
+
74
+            $lib_bouton = (acces_restreint_rubrique($id_rubrique)
75
+                ? http_img_pack('auteur-0minirezo-16.png', '', " width='16' height='16'", _T('image_administrer_rubrique'))
76
+                : '') .
77
+                " <a class='titremlien' dir='$lang_dir'" .
78
+                ($row['lang'] !== $GLOBALS['spip_lang'] ? " hreflang='" . $row['lang'] . "'" : '') .
79
+                " href='" .
80
+                generer_objet_url($id_rubrique, 'rubrique') .
81
+                "'><span class='titre'>" .
82
+                $rang . $titre
83
+                . '</span>'
84
+                . (is_string($logo) ? $logo : '')
85
+                . '</a>';
86
+
87
+            $titre = bouton_block_depliable($lib_bouton, $les_sous_enfants ? false : -1, "enfants$id_rubrique")
88
+                . ($descriptif ? "\n<div class='descriptif'>$descriptif</div>" : '')
89
+                ;
90
+
91
+            $res[] =
92
+                debut_cadre_sous_rub(($id_parent ? 'rubrique-24.png' : 'secteur-24.png'), true, '', $titre) .
93
+                $les_sous_enfants .
94
+                fin_cadre_sous_rub();
95
+        }
96
+    }
97
+
98
+    changer_typo($GLOBALS['spip_lang']); # remettre la typo de l'interface pour la suite
99
+    return $res;
100 100
 }
101 101
 
102 102
 /**
@@ -109,71 +109,71 @@  discard block
 block discarded – undo
109 109
  *  Le contenu du bloc dépliable
110 110
  */
111 111
 function sous_enfant_rub($collection2) {
112
-	$nb = sql_countsel('spip_rubriques', 'id_parent=' . (int) $collection2);
113
-
114
-	$retour = '';
115
-	$pagination = '';
116
-	$debut = 0;
117
-	$limite = 500;
118
-
119
-	/**
120
-	 * On ne va afficher que 500 résultats max
121
-	 * Si > 500 on affiche une pagination
122
-	 */
123
-	if ($nb > $limite) {
124
-		$debut = _request('debut_rubrique' . $collection2) ?: $debut;
125
-		$pagination = chercher_filtre('pagination');
126
-		$pagination = '<nav class="pagination">' . $pagination(
127
-			$nb,
128
-			'_rubrique' . $collection2,
129
-			$debut,
130
-			$limite,
131
-			true,
132
-			'prive'
133
-		) . '</nav>';
134
-		$limite = $debut + $limite;
135
-	}
136
-
137
-	$result = sql_select(
138
-		'id_rubrique, id_parent, titre, lang',
139
-		'spip_rubriques',
140
-		'id_parent=' . (int) $collection2,
141
-		'',
142
-		'0+titre,titre',
143
-		$debut == -1 ? '' : "$debut,$limite"
144
-	);
145
-
146
-	while ($row = sql_fetch($result)) {
147
-		$id_rubrique2 = $row['id_rubrique'];
148
-		$titre2 = generer_objet_info(
149
-			$id_rubrique2,
150
-			'rubrique',
151
-			'titre'
152
-		); // pour etre sur de passer par tous les traitements
153
-		if ('' !== ($rang2 = recuperer_numero($row['titre']))) {
154
-			$rang2 = "<span class='rang'>$rang2.</span> ";
155
-		}
156
-
157
-		changer_typo($row['lang']);
158
-		$lang_dir = lang_dir($row['lang']);
159
-		if (autoriser('voir', 'rubrique', $id_rubrique2)) {
160
-			$retour .= "\n<li class='item' dir='$lang_dir'><a href='" . generer_objet_url(
161
-				$id_rubrique2,
162
-				'rubrique'
163
-			) . "'>" . $rang2 . $titre2 . "</a></li>\n";
164
-		}
165
-	}
166
-
167
-	$retour = $pagination . $retour . $pagination;
168
-
169
-	if (!$retour) {
170
-		return '';
171
-	}
172
-
173
-	return debut_block_depliable($debut > 0, "enfants$collection2")
174
-	. "\n<ul class='liste-items sous-sous-rub'>\n"
175
-	. $retour
176
-	. "</ul>\n" . fin_block() . "\n\n";
112
+    $nb = sql_countsel('spip_rubriques', 'id_parent=' . (int) $collection2);
113
+
114
+    $retour = '';
115
+    $pagination = '';
116
+    $debut = 0;
117
+    $limite = 500;
118
+
119
+    /**
120
+     * On ne va afficher que 500 résultats max
121
+     * Si > 500 on affiche une pagination
122
+     */
123
+    if ($nb > $limite) {
124
+        $debut = _request('debut_rubrique' . $collection2) ?: $debut;
125
+        $pagination = chercher_filtre('pagination');
126
+        $pagination = '<nav class="pagination">' . $pagination(
127
+            $nb,
128
+            '_rubrique' . $collection2,
129
+            $debut,
130
+            $limite,
131
+            true,
132
+            'prive'
133
+        ) . '</nav>';
134
+        $limite = $debut + $limite;
135
+    }
136
+
137
+    $result = sql_select(
138
+        'id_rubrique, id_parent, titre, lang',
139
+        'spip_rubriques',
140
+        'id_parent=' . (int) $collection2,
141
+        '',
142
+        '0+titre,titre',
143
+        $debut == -1 ? '' : "$debut,$limite"
144
+    );
145
+
146
+    while ($row = sql_fetch($result)) {
147
+        $id_rubrique2 = $row['id_rubrique'];
148
+        $titre2 = generer_objet_info(
149
+            $id_rubrique2,
150
+            'rubrique',
151
+            'titre'
152
+        ); // pour etre sur de passer par tous les traitements
153
+        if ('' !== ($rang2 = recuperer_numero($row['titre']))) {
154
+            $rang2 = "<span class='rang'>$rang2.</span> ";
155
+        }
156
+
157
+        changer_typo($row['lang']);
158
+        $lang_dir = lang_dir($row['lang']);
159
+        if (autoriser('voir', 'rubrique', $id_rubrique2)) {
160
+            $retour .= "\n<li class='item' dir='$lang_dir'><a href='" . generer_objet_url(
161
+                $id_rubrique2,
162
+                'rubrique'
163
+            ) . "'>" . $rang2 . $titre2 . "</a></li>\n";
164
+        }
165
+    }
166
+
167
+    $retour = $pagination . $retour . $pagination;
168
+
169
+    if (!$retour) {
170
+        return '';
171
+    }
172
+
173
+    return debut_block_depliable($debut > 0, "enfants$collection2")
174
+    . "\n<ul class='liste-items sous-sous-rub'>\n"
175
+    . $retour
176
+    . "</ul>\n" . fin_block() . "\n\n";
177 177
 }
178 178
 
179 179
 /**
@@ -188,41 +188,41 @@  discard block
 block discarded – undo
188 188
  *  Le contenu textuel affiché, la liste des sous rubriques
189 189
  */
190 190
 function afficher_enfant_rub($id_rubrique = 0) {
191
-	$pagination = '';
192
-	$debut = 0;
193
-	$limite = 500;
194
-
195
-	$nb = sql_countsel('spip_rubriques', 'id_parent=' . (int) $id_rubrique);
196
-
197
-	if ($nb > $limite) {
198
-		$debut = _request('debut_rubrique' . $id_rubrique) ?: $debut;
199
-		$pagination = chercher_filtre('pagination');
200
-		$pagination = '<br class="nettoyeur"><nav class="pagination">' .
201
-			$pagination($nb, '_rubrique' . $id_rubrique, $debut, $limite, true, 'prive') .
202
-		'</nav>';
203
-	}
204
-
205
-	$les_enfants = enfant_rub($id_rubrique, $debut, $limite);
206
-
207
-	if (!$n = count($les_enfants)) {
208
-		return '';
209
-	}
210
-
211
-	if ($n == 1) {
212
-		$les_enfants = reset($les_enfants);
213
-		$les_enfants2 = '';
214
-	} else {
215
-		$n = ceil($n / 2);
216
-		$les_enfants2 = implode('', array_slice($les_enfants, $n));
217
-		$les_enfants = implode('', array_slice($les_enfants, 0, $n));
218
-	}
219
-
220
-	return $pagination
221
-		. "<div class='gauche'>"
222
-		. $les_enfants
223
-		. '</div>'
224
-		. "<div class='droite'>"
225
-		. $les_enfants2
226
-		. '</div>'
227
-		. $pagination;
191
+    $pagination = '';
192
+    $debut = 0;
193
+    $limite = 500;
194
+
195
+    $nb = sql_countsel('spip_rubriques', 'id_parent=' . (int) $id_rubrique);
196
+
197
+    if ($nb > $limite) {
198
+        $debut = _request('debut_rubrique' . $id_rubrique) ?: $debut;
199
+        $pagination = chercher_filtre('pagination');
200
+        $pagination = '<br class="nettoyeur"><nav class="pagination">' .
201
+            $pagination($nb, '_rubrique' . $id_rubrique, $debut, $limite, true, 'prive') .
202
+        '</nav>';
203
+    }
204
+
205
+    $les_enfants = enfant_rub($id_rubrique, $debut, $limite);
206
+
207
+    if (!$n = count($les_enfants)) {
208
+        return '';
209
+    }
210
+
211
+    if ($n == 1) {
212
+        $les_enfants = reset($les_enfants);
213
+        $les_enfants2 = '';
214
+    } else {
215
+        $n = ceil($n / 2);
216
+        $les_enfants2 = implode('', array_slice($les_enfants, $n));
217
+        $les_enfants = implode('', array_slice($les_enfants, 0, $n));
218
+    }
219
+
220
+    return $pagination
221
+        . "<div class='gauche'>"
222
+        . $les_enfants
223
+        . '</div>'
224
+        . "<div class='droite'>"
225
+        . $les_enfants2
226
+        . '</div>'
227
+        . $pagination;
228 228
 }
Please login to merge, or discard this patch.
ecrire/inc/prepare_recherche.php 1 patch
Indentation   +139 added lines, -139 removed lines patch added patch discarded remove patch
@@ -16,12 +16,12 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 include_spip('inc/rechercher');
23 23
 if (!defined('_DELAI_CACHE_resultats')) {
24
-	define('_DELAI_CACHE_resultats', 600);
24
+    define('_DELAI_CACHE_resultats', 600);
25 25
 }
26 26
 
27 27
 /**
@@ -48,126 +48,126 @@  discard block
 block discarded – undo
48 48
  * @return array
49 49
  */
50 50
 function inc_prepare_recherche_dist(
51
-	$recherche,
52
-	$table = 'articles',
53
-	$cond = false,
54
-	$serveur = '',
55
-	$modificateurs = [],
56
-	$primary = ''
51
+    $recherche,
52
+    $table = 'articles',
53
+    $cond = false,
54
+    $serveur = '',
55
+    $modificateurs = [],
56
+    $primary = ''
57 57
 ) {
58
-	$where = null;
59
-	$rows = null;
60
-	static $cache = [];
61
-	$delai_fraicheur = min(
62
-		\_DELAI_CACHE_resultats,
63
-		time() - ($GLOBALS['meta']['derniere_modif'] ?? 0)
64
-	);
65
-
66
-	// si recherche n'est pas dans le contexte, on va prendre en globals
67
-	// ca permet de faire des inclure simple.
68
-	if (!isset($recherche) && isset($GLOBALS['recherche'])) {
69
-		$recherche = $GLOBALS['recherche'];
70
-	}
71
-
72
-	// traiter le cas {recherche?}
73
-	if ($cond && !strlen($recherche)) {
74
-		return [
75
-			'0 as points' /* as points */, /* where */
76
-			''
77
-		];
78
-	}
79
-
80
-
81
-	$rechercher = false;
82
-
83
-	$where_resultat_recent = sql_date_proche('maj', (0 - ($delai_fraicheur + 100)), ' SECOND');
84
-	if (!isset($cache[$serveur][$table][$recherche])) {
85
-		$hash_serv = ($serveur ? substr(md5($serveur), 0, 16) : '');
86
-		$hash = substr(md5($recherche . $table), 0, 16);
87
-		$where = "(resultats.recherche='$hash' AND resultats.table_objet=" . sql_quote($table) . " AND resultats.serveur='$hash_serv')";
88
-		$row = sql_fetsel(
89
-			'recherche',
90
-			'spip_resultats AS resultats',
91
-			$where . " AND $where_resultat_recent",
92
-			'',
93
-			'',
94
-			'0,1'
95
-		);
96
-		if (!$row || (defined('_VAR_MODE') && _VAR_MODE == 'recalcul')) {
97
-			$rechercher = true;
98
-		}
99
-	}
100
-
101
-	// si on n'a pas encore traite les donnees dans une boucle precedente
102
-	if ($rechercher) {
103
-		//$tables = liste_des_champs();
104
-		$x = objet_type($table);
105
-		$points = recherche_en_base(
106
-			$recherche,
107
-			$x,
108
-			[
109
-				'score' => true,
110
-				'toutvoir' => true,
111
-				'jointures' => true
112
-			],
113
-			$serveur
114
-		);
115
-		// pas de résultat, pas de point
116
-		$points = $points[$x] ?? [];
117
-
118
-		// permettre aux plugins de modifier le resultat
119
-		$points = pipeline('prepare_recherche', [
120
-			'args' => [
121
-				'type' => $x,
122
-				'recherche' => $recherche,
123
-				'serveur' => $serveur,
124
-				'modificateurs' => $modificateurs
125
-			],
126
-			'data' => $points
127
-		]);
128
-
129
-		// supprimer les anciens resultats de cette recherche
130
-		// et les resultats trop vieux avec une marge
131
-		// pas de AS resultats dans un delete (mysql)
132
-		$whered = str_replace(
133
-			['resultats.recherche', 'resultats.table_objet', 'resultats.serveur'],
134
-			['recherche', 'table_objet', 'serveur'],
135
-			$where
136
-		);
137
-
138
-		sql_delete(
139
-			'spip_resultats',
140
-			"NOT($where_resultat_recent) OR ($whered)"
141
-		);
142
-
143
-		// inserer les resultats dans la table de cache des resultats
144
-		if (is_countable($points) ? count($points) : 0) {
145
-			$tab_couples = [];
146
-			foreach ($points as $id => $p) {
147
-				$tab_couples[] = [
148
-					'recherche' => $hash,
149
-					'id' => $id,
150
-					'points' => $p['score'],
151
-					'table_objet' => $table,
152
-					'serveur' => $hash_serv,
153
-				];
154
-			}
155
-			sql_insertq_multi('spip_resultats', $tab_couples, []);
156
-		}
157
-	}
158
-
159
-	if (!isset($cache[$serveur][$table][$recherche])) {
160
-		if (!$serveur) {
161
-			$cache[$serveur][$table][$recherche] = ['resultats.points AS points', $where];
162
-		} else {
163
-			if (sql_countsel('spip_resultats as resultats', $where)) {
164
-				$rows = sql_allfetsel('resultats.id,resultats.points', 'spip_resultats as resultats', $where);
165
-			}
166
-			$cache[$serveur][$table][$recherche] = generer_select_where_explicites($table, $primary, $rows, $serveur);
167
-		}
168
-	}
169
-
170
-	return $cache[$serveur][$table][$recherche];
58
+    $where = null;
59
+    $rows = null;
60
+    static $cache = [];
61
+    $delai_fraicheur = min(
62
+        \_DELAI_CACHE_resultats,
63
+        time() - ($GLOBALS['meta']['derniere_modif'] ?? 0)
64
+    );
65
+
66
+    // si recherche n'est pas dans le contexte, on va prendre en globals
67
+    // ca permet de faire des inclure simple.
68
+    if (!isset($recherche) && isset($GLOBALS['recherche'])) {
69
+        $recherche = $GLOBALS['recherche'];
70
+    }
71
+
72
+    // traiter le cas {recherche?}
73
+    if ($cond && !strlen($recherche)) {
74
+        return [
75
+            '0 as points' /* as points */, /* where */
76
+            ''
77
+        ];
78
+    }
79
+
80
+
81
+    $rechercher = false;
82
+
83
+    $where_resultat_recent = sql_date_proche('maj', (0 - ($delai_fraicheur + 100)), ' SECOND');
84
+    if (!isset($cache[$serveur][$table][$recherche])) {
85
+        $hash_serv = ($serveur ? substr(md5($serveur), 0, 16) : '');
86
+        $hash = substr(md5($recherche . $table), 0, 16);
87
+        $where = "(resultats.recherche='$hash' AND resultats.table_objet=" . sql_quote($table) . " AND resultats.serveur='$hash_serv')";
88
+        $row = sql_fetsel(
89
+            'recherche',
90
+            'spip_resultats AS resultats',
91
+            $where . " AND $where_resultat_recent",
92
+            '',
93
+            '',
94
+            '0,1'
95
+        );
96
+        if (!$row || (defined('_VAR_MODE') && _VAR_MODE == 'recalcul')) {
97
+            $rechercher = true;
98
+        }
99
+    }
100
+
101
+    // si on n'a pas encore traite les donnees dans une boucle precedente
102
+    if ($rechercher) {
103
+        //$tables = liste_des_champs();
104
+        $x = objet_type($table);
105
+        $points = recherche_en_base(
106
+            $recherche,
107
+            $x,
108
+            [
109
+                'score' => true,
110
+                'toutvoir' => true,
111
+                'jointures' => true
112
+            ],
113
+            $serveur
114
+        );
115
+        // pas de résultat, pas de point
116
+        $points = $points[$x] ?? [];
117
+
118
+        // permettre aux plugins de modifier le resultat
119
+        $points = pipeline('prepare_recherche', [
120
+            'args' => [
121
+                'type' => $x,
122
+                'recherche' => $recherche,
123
+                'serveur' => $serveur,
124
+                'modificateurs' => $modificateurs
125
+            ],
126
+            'data' => $points
127
+        ]);
128
+
129
+        // supprimer les anciens resultats de cette recherche
130
+        // et les resultats trop vieux avec une marge
131
+        // pas de AS resultats dans un delete (mysql)
132
+        $whered = str_replace(
133
+            ['resultats.recherche', 'resultats.table_objet', 'resultats.serveur'],
134
+            ['recherche', 'table_objet', 'serveur'],
135
+            $where
136
+        );
137
+
138
+        sql_delete(
139
+            'spip_resultats',
140
+            "NOT($where_resultat_recent) OR ($whered)"
141
+        );
142
+
143
+        // inserer les resultats dans la table de cache des resultats
144
+        if (is_countable($points) ? count($points) : 0) {
145
+            $tab_couples = [];
146
+            foreach ($points as $id => $p) {
147
+                $tab_couples[] = [
148
+                    'recherche' => $hash,
149
+                    'id' => $id,
150
+                    'points' => $p['score'],
151
+                    'table_objet' => $table,
152
+                    'serveur' => $hash_serv,
153
+                ];
154
+            }
155
+            sql_insertq_multi('spip_resultats', $tab_couples, []);
156
+        }
157
+    }
158
+
159
+    if (!isset($cache[$serveur][$table][$recherche])) {
160
+        if (!$serveur) {
161
+            $cache[$serveur][$table][$recherche] = ['resultats.points AS points', $where];
162
+        } else {
163
+            if (sql_countsel('spip_resultats as resultats', $where)) {
164
+                $rows = sql_allfetsel('resultats.id,resultats.points', 'spip_resultats as resultats', $where);
165
+            }
166
+            $cache[$serveur][$table][$recherche] = generer_select_where_explicites($table, $primary, $rows, $serveur);
167
+        }
168
+    }
169
+
170
+    return $cache[$serveur][$table][$recherche];
171 171
 }
172 172
 
173 173
 
@@ -183,22 +183,22 @@  discard block
 block discarded – undo
183 183
  * @return array
184 184
  */
185 185
 function generer_select_where_explicites($table, $primary, $rows, $serveur) {
186
-	# calculer le {id_article IN()} et le {... as points}
187
-	if ($rows === []) {
188
-		return ["''", '0=1'];
189
-	} else {
190
-		$listes_ids = [];
191
-		$select = '0';
192
-		foreach ($rows as $r) {
193
-			$listes_ids[$r['points']][] = $r['id'];
194
-		}
195
-
196
-		foreach ($listes_ids as $p => $ids) {
197
-			$select .= "+$p*(" .
198
-				sql_in("$table.$primary", $ids, '', $serveur)
199
-				. ') ';
200
-		}
201
-
202
-		return ["$select AS points ", sql_in("$table.$primary", array_map('reset', $rows), '', $serveur)];
203
-	}
186
+    # calculer le {id_article IN()} et le {... as points}
187
+    if ($rows === []) {
188
+        return ["''", '0=1'];
189
+    } else {
190
+        $listes_ids = [];
191
+        $select = '0';
192
+        foreach ($rows as $r) {
193
+            $listes_ids[$r['points']][] = $r['id'];
194
+        }
195
+
196
+        foreach ($listes_ids as $p => $ids) {
197
+            $select .= "+$p*(" .
198
+                sql_in("$table.$primary", $ids, '', $serveur)
199
+                . ') ';
200
+        }
201
+
202
+        return ["$select AS points ", sql_in("$table.$primary", array_map('reset', $rows), '', $serveur)];
203
+    }
204 204
 }
Please login to merge, or discard this patch.
ecrire/inc/preselectionner_parent_nouvel_objet.php 1 patch
Indentation   +34 added lines, -34 removed lines patch added patch discarded remove patch
@@ -10,10 +10,10 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 if (!defined('_AUTO_SELECTION_RUBRIQUE')) {
16
-	define('_AUTO_SELECTION_RUBRIQUE', false);
16
+    define('_AUTO_SELECTION_RUBRIQUE', false);
17 17
 }
18 18
 
19 19
 
@@ -27,39 +27,39 @@  discard block
 block discarded – undo
27 27
  * @return string
28 28
  */
29 29
 function inc_preselectionner_parent_nouvel_objet_dist($objet, $row) {
30
-	if (!_AUTO_SELECTION_RUBRIQUE) {
31
-		return '';
32
-	}
30
+    if (!_AUTO_SELECTION_RUBRIQUE) {
31
+        return '';
32
+    }
33 33
 
34
-	if (!isset($row['id_rubrique'])) {
35
-		return '';
36
-	}
34
+    if (!isset($row['id_rubrique'])) {
35
+        return '';
36
+    }
37 37
 
38
-	$id_rubrique = '';
39
-	if ($GLOBALS['connect_id_rubrique']) {
40
-		// si admin restreint : sa rubrique
41
-		$id_rubrique = $GLOBALS['connect_id_rubrique'][0];
42
-	} elseif (
43
-		is_int(_AUTO_SELECTION_RUBRIQUE)
44
-		&& sql_fetsel('id_rubrique', 'spip_rubriques', 'id_rubrique=' . (int) _AUTO_SELECTION_RUBRIQUE)
45
-	) {
46
-		$id_rubrique = _AUTO_SELECTION_RUBRIQUE;
47
-	} else {
48
-		// sinon la derniere rubrique cree
49
-		$row_rub = sql_fetsel('id_rubrique', 'spip_rubriques', '', '', 'id_rubrique DESC', '0,1');
50
-		$id_rubrique = $row_rub['id_rubrique'];
51
-	}
52
-	// si le choix ne convient pas, on cherche dans un secteur
53
-	if (!autoriser('creer' . $objet . 'dans', 'rubrique', $id_rubrique)) {
54
-		$id_rubrique = '';
55
-		// manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
56
-		$res = sql_select('id_rubrique', 'spip_rubriques', 'id_parent=0');
57
-		while (!$id_rubrique && ($row_rub = sql_fetch($res))) {
58
-			if (autoriser('creer' . $objet . 'dans', 'rubrique', $row_rub['id_rubrique'])) {
59
-				$id_rubrique = $row_rub['id_rubrique'];
60
-			}
61
-		}
62
-	}
38
+    $id_rubrique = '';
39
+    if ($GLOBALS['connect_id_rubrique']) {
40
+        // si admin restreint : sa rubrique
41
+        $id_rubrique = $GLOBALS['connect_id_rubrique'][0];
42
+    } elseif (
43
+        is_int(_AUTO_SELECTION_RUBRIQUE)
44
+        && sql_fetsel('id_rubrique', 'spip_rubriques', 'id_rubrique=' . (int) _AUTO_SELECTION_RUBRIQUE)
45
+    ) {
46
+        $id_rubrique = _AUTO_SELECTION_RUBRIQUE;
47
+    } else {
48
+        // sinon la derniere rubrique cree
49
+        $row_rub = sql_fetsel('id_rubrique', 'spip_rubriques', '', '', 'id_rubrique DESC', '0,1');
50
+        $id_rubrique = $row_rub['id_rubrique'];
51
+    }
52
+    // si le choix ne convient pas, on cherche dans un secteur
53
+    if (!autoriser('creer' . $objet . 'dans', 'rubrique', $id_rubrique)) {
54
+        $id_rubrique = '';
55
+        // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
56
+        $res = sql_select('id_rubrique', 'spip_rubriques', 'id_parent=0');
57
+        while (!$id_rubrique && ($row_rub = sql_fetch($res))) {
58
+            if (autoriser('creer' . $objet . 'dans', 'rubrique', $row_rub['id_rubrique'])) {
59
+                $id_rubrique = $row_rub['id_rubrique'];
60
+            }
61
+        }
62
+    }
63 63
 
64
-	return $id_rubrique;
64
+    return $id_rubrique;
65 65
 }
Please login to merge, or discard this patch.