Completed
Push — master ( 4fa0dc...b74578 )
by cam
01:19
created
ecrire/inc/filtres_dates.php 2 patches
Spacing   +33 added lines, -33 removed lines patch added patch discarded remove patch
@@ -39,7 +39,7 @@  discard block
 block discarded – undo
39 39
 function extraire_date($texte): string {
40 40
 	// format = 2001-08
41 41
 	if (preg_match(',([1-2][0-9]{3})[^0-9]*(1[0-2]|0?[1-9]),', $texte, $regs)) {
42
-		return $regs[1] . '-' . sprintf('%02d', $regs[2]) . '-01';
42
+		return $regs[1].'-'.sprintf('%02d', $regs[2]).'-01';
43 43
 	}
44 44
 	return '';
45 45
 }
@@ -70,11 +70,11 @@  discard block
 block discarded – undo
70 70
 		}
71 71
 		if (preg_match('#^([12][0-9]{3})([-/]00)?( [-0-9:]+)?$#', $date, $regs)) {
72 72
 			$regs = array_pad($regs, 4, null); // eviter notice php
73
-			$date = $regs[1] . '-00-00' . $regs[3];
73
+			$date = $regs[1].'-00-00'.$regs[3];
74 74
 		} else {
75 75
 			if (preg_match('#^([12][0-9]{3}[-/][01]?[0-9])([-/]00)?( [-0-9:]+)?$#', $date, $regs)) {
76 76
 				$regs = array_pad($regs, 4, null); // eviter notice php
77
-				$date = preg_replace('@/@', '-', $regs[1]) . '-00' . $regs[3];
77
+				$date = preg_replace('@/@', '-', $regs[1]).'-00'.$regs[3];
78 78
 			} else {
79 79
 				$date = date('Y-m-d H:i:s', strtotime($date));
80 80
 			}
@@ -101,7 +101,7 @@  discard block
 block discarded – undo
101 101
 	$letexte ??= '';
102 102
 	if (
103 103
 		!$verif_format_date
104
-		or (in_array(strlen($letexte), [10,19]) and
104
+		or (in_array(strlen($letexte), [10, 19]) and
105 105
 			  preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}(\s[0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $letexte))
106 106
 	) {
107 107
 		if (strncmp('0000-00-00', $letexte, 10) == 0) {
@@ -388,17 +388,17 @@  discard block
 block discarded – undo
388 388
 	if ($decal > 3600 * 24 * 30) {
389 389
 		$mois = floor($decal / (3600 * 24 * 30));
390 390
 		if ($mois < 2) {
391
-			$delai = "$mois " . _T('date_un_mois');
391
+			$delai = "$mois "._T('date_un_mois');
392 392
 		} else {
393
-			$delai = "$mois " . _T('date_mois');
393
+			$delai = "$mois "._T('date_mois');
394 394
 		}
395 395
 	} else {
396 396
 		if ($decal > 3600 * 24 * 7) {
397 397
 			$semaines = floor($decal / (3600 * 24 * 7));
398 398
 			if ($semaines < 2) {
399
-				$delai = "$semaines " . _T('date_une_semaine');
399
+				$delai = "$semaines "._T('date_une_semaine');
400 400
 			} else {
401
-				$delai = "$semaines " . _T('date_semaines');
401
+				$delai = "$semaines "._T('date_semaines');
402 402
 			}
403 403
 		} else {
404 404
 			if ($decal > 3600 * 24) {
@@ -406,30 +406,30 @@  discard block
 block discarded – undo
406 406
 				if ($jours < 2) {
407 407
 					return $il_y_a == 'date_dans' ? _T('date_demain') : _T('date_hier');
408 408
 				} else {
409
-					$delai = "$jours " . _T('date_jours');
409
+					$delai = "$jours "._T('date_jours');
410 410
 				}
411 411
 			} else {
412 412
 				if ($decal >= 3600) {
413 413
 					$heures = floor($decal / 3600);
414 414
 					if ($heures < 2) {
415
-						$delai = "$heures " . _T('date_une_heure');
415
+						$delai = "$heures "._T('date_une_heure');
416 416
 					} else {
417
-						$delai = "$heures " . _T('date_heures');
417
+						$delai = "$heures "._T('date_heures');
418 418
 					}
419 419
 				} else {
420 420
 					if ($decal >= 60) {
421 421
 						$minutes = floor($decal / 60);
422 422
 						if ($minutes < 2) {
423
-							$delai = "$minutes " . _T('date_une_minute');
423
+							$delai = "$minutes "._T('date_une_minute');
424 424
 						} else {
425
-							$delai = "$minutes " . _T('date_minutes');
425
+							$delai = "$minutes "._T('date_minutes');
426 426
 						}
427 427
 					} else {
428 428
 						$secondes = ceil($decal);
429 429
 						if ($secondes < 2) {
430
-							$delai = "$secondes " . _T('date_une_seconde');
430
+							$delai = "$secondes "._T('date_une_seconde');
431 431
 						} else {
432
-							$delai = "$secondes " . _T('date_secondes');
432
+							$delai = "$secondes "._T('date_secondes');
433 433
 						}
434 434
 					}
435 435
 				}
@@ -522,7 +522,7 @@  discard block
 block discarded – undo
522 522
 		$njour = 0;
523 523
 	} else {
524 524
 		$njour = intval($jour);
525
-		if ($jourth = _T('date_jnum' . $jour)) {
525
+		if ($jourth = _T('date_jnum'.$jour)) {
526 526
 			$jour = $jourth;
527 527
 		}
528 528
 	}
@@ -530,10 +530,10 @@  discard block
 block discarded – undo
530 530
 	$mois = intval($mois);
531 531
 	if ($mois > 0 and $mois < 13) {
532 532
 		/* Traiter le cas "abbr" pour les noms de mois */
533
-		$param = ((isset($options['param']) and $options['param'] === 'abbr') ? '_' . $options['param'] : '');
534
-		$nommois = _T('date_mois_' . $mois . $param);
533
+		$param = ((isset($options['param']) and $options['param'] === 'abbr') ? '_'.$options['param'] : '');
534
+		$nommois = _T('date_mois_'.$mois.$param);
535 535
 		if ($jour) {
536
-			$jourmois = _T('date_de_mois_' . $mois, ['j' => $jour, 'nommois' => $nommois]);
536
+			$jourmois = _T('date_de_mois_'.$mois, ['j' => $jour, 'nommois' => $nommois]);
537 537
 		} else {
538 538
 			$jourmois = $nommois;
539 539
 		}
@@ -543,7 +543,7 @@  discard block
 block discarded – undo
543 543
 	}
544 544
 
545 545
 	if ($annee < 0) {
546
-		$annee = -$annee . ' ' . _T('date_avant_jc');
546
+		$annee = -$annee.' '._T('date_avant_jc');
547 547
 		$avjc = true;
548 548
 	} else {
549 549
 		$avjc = false;
@@ -569,11 +569,11 @@  discard block
 block discarded – undo
569 569
 				}
570 570
 			}
571 571
 			if ($vue == 'saison') {
572
-				return $saison ? _T('date_saison_' . $saison) : '';
572
+				return $saison ? _T('date_saison_'.$saison) : '';
573 573
 			} else {
574 574
 				return $saison ? trim(_T(
575 575
 					'date_fmt_saison_annee',
576
-					['saison' => _T('date_saison_' . $saison), 'annee' => $annee]
576
+					['saison' => _T('date_saison_'.$saison), 'annee' => $annee]
577 577
 				)) : '';
578 578
 			}
579 579
 
@@ -650,9 +650,9 @@  discard block
 block discarded – undo
650 650
 			}
651 651
 			$nom = mktime(1, 1, 1, $mois, $njour, $annee);
652 652
 			$nom = 1 + (int) date('w', $nom);
653
-			$param = ((isset($options['param']) and $options['param']) ? '_' . $options['param'] : '');
653
+			$param = ((isset($options['param']) and $options['param']) ? '_'.$options['param'] : '');
654 654
 
655
-			return _T('date_jour_' . $nom . $param);
655
+			return _T('date_jour_'.$nom.$param);
656 656
 
657 657
 		case 'mois_annee':
658 658
 			if ($avjc) {
@@ -1047,8 +1047,8 @@  discard block
 block discarded – undo
1047 1047
 
1048 1048
 	$dtstart = $dtend = $dtabbr = '';
1049 1049
 	if (strpos($forme, 'hcal') !== false) {
1050
-		$dtstart = "<abbr class='dtstart' title='" . date_iso($date_debut) . "'>";
1051
-		$dtend = "<abbr class='dtend' title='" . date_iso($date_fin) . "'>";
1050
+		$dtstart = "<abbr class='dtstart' title='".date_iso($date_debut)."'>";
1051
+		$dtend = "<abbr class='dtend' title='".date_iso($date_fin)."'>";
1052 1052
 		$dtabbr = '</abbr>';
1053 1053
 	}
1054 1054
 
@@ -1096,7 +1096,7 @@  discard block
 block discarded – undo
1096 1096
 			}
1097 1097
 		} else {
1098 1098
 			if ($dtabbr && $dtstart) {
1099
-				$s = $dtstart . spip_ucfirst($s) . $dtabbr;
1099
+				$s = $dtstart.spip_ucfirst($s).$dtabbr;
1100 1100
 			} else {
1101 1101
 				$s = spip_ucfirst($s);
1102 1102
 			}
@@ -1119,8 +1119,8 @@  discard block
 block discarded – undo
1119 1119
 				$date_debut = _T('date_fmt_jour_heure', ['jour' => $date_debut, 'heure' => $hd]);
1120 1120
 				$date_fin = _T('date_fmt_jour_heure', ['jour' => $date_fin, 'heure' => $hf]);
1121 1121
 			}
1122
-			$date_debut = $dtstart . $date_debut . $dtabbr;
1123
-			$date_fin = $dtend . $date_fin . $dtabbr;
1122
+			$date_debut = $dtstart.$date_debut.$dtabbr;
1123
+			$date_fin = $dtend.$date_fin.$dtabbr;
1124 1124
 
1125 1125
 			$s = _T('date_fmt_periode', ['date_debut' => $date_debut, 'date_fin' => $date_fin]);
1126 1126
 		} else {
@@ -1137,8 +1137,8 @@  discard block
 block discarded – undo
1137 1137
 				$date_fin = _T('date_fmt_jour_heure', ['jour' => $date_fin, 'heure' => $hf]);
1138 1138
 			}
1139 1139
 
1140
-			$date_debut = $dtstart . $date_debut . $dtabbr;
1141
-			$date_fin = $dtend . $date_fin . $dtabbr;
1140
+			$date_debut = $dtstart.$date_debut.$dtabbr;
1141
+			$date_fin = $dtend.$date_fin.$dtabbr;
1142 1142
 			$s = _T('date_fmt_periode', ['date_debut' => $date_debut, 'date_fin' => $date_fin]);
1143 1143
 		}
1144 1144
 	}
@@ -1242,7 +1242,7 @@  discard block
 block discarded – undo
1242 1242
 		$d = date('Y-m-d');
1243 1243
 	}
1244 1244
 
1245
-	return substr($d, 0, 4) . substr($d, 5, 2) . substr($d, 8, 2);
1245
+	return substr($d, 0, 4).substr($d, 5, 2).substr($d, 8, 2);
1246 1246
 }
1247 1247
 
1248 1248
 /**
@@ -1262,7 +1262,7 @@  discard block
 block discarded – undo
1262 1262
 		$d = date('Y-m-d');
1263 1263
 	}
1264 1264
 
1265
-	return substr($d, 0, 4) . substr($d, 5, 2);
1265
+	return substr($d, 0, 4).substr($d, 5, 2);
1266 1266
 }
1267 1267
 
1268 1268
 /**
Please login to merge, or discard this patch.
Indentation   +590 added lines, -590 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
  * @package SPIP\Core\Filtres
16 16
  **/
17 17
 if (!defined('_ECRIRE_INC_VERSION')) {
18
-	return;
18
+    return;
19 19
 }
20 20
 
21 21
 
@@ -36,11 +36,11 @@  discard block
 block discarded – undo
36 36
  *    Date au format SQL tel que `2008-04-01` sinon ''
37 37
  **/
38 38
 function extraire_date($texte): string {
39
-	// format = 2001-08
40
-	if (preg_match(',([1-2][0-9]{3})[^0-9]*(1[0-2]|0?[1-9]),', $texte, $regs)) {
41
-		return $regs[1] . '-' . sprintf('%02d', $regs[2]) . '-01';
42
-	}
43
-	return '';
39
+    // format = 2001-08
40
+    if (preg_match(',([1-2][0-9]{3})[^0-9]*(1[0-2]|0?[1-9]),', $texte, $regs)) {
41
+        return $regs[1] . '-' . sprintf('%02d', $regs[2]) . '-01';
42
+    }
43
+    return '';
44 44
 }
45 45
 
46 46
 
@@ -62,29 +62,29 @@  discard block
 block discarded – undo
62 62
  *     - une chaîne vide si la date est considérée nulle
63 63
  **/
64 64
 function normaliser_date($date, $forcer_jour = false): string {
65
-	$date = vider_date($date);
66
-	if ($date) {
67
-		if (preg_match('/^[0-9]{8,10}$/', $date)) {
68
-			$date = date('Y-m-d H:i:s', $date);
69
-		}
70
-		if (preg_match('#^([12][0-9]{3})([-/]00)?( [-0-9:]+)?$#', $date, $regs)) {
71
-			$regs = array_pad($regs, 4, null); // eviter notice php
72
-			$date = $regs[1] . '-00-00' . $regs[3];
73
-		} else {
74
-			if (preg_match('#^([12][0-9]{3}[-/][01]?[0-9])([-/]00)?( [-0-9:]+)?$#', $date, $regs)) {
75
-				$regs = array_pad($regs, 4, null); // eviter notice php
76
-				$date = preg_replace('@/@', '-', $regs[1]) . '-00' . $regs[3];
77
-			} else {
78
-				$date = date('Y-m-d H:i:s', strtotime($date));
79
-			}
80
-		}
81
-
82
-		if ($forcer_jour) {
83
-			$date = str_replace('-00', '-01', $date);
84
-		}
85
-	}
86
-
87
-	return $date;
65
+    $date = vider_date($date);
66
+    if ($date) {
67
+        if (preg_match('/^[0-9]{8,10}$/', $date)) {
68
+            $date = date('Y-m-d H:i:s', $date);
69
+        }
70
+        if (preg_match('#^([12][0-9]{3})([-/]00)?( [-0-9:]+)?$#', $date, $regs)) {
71
+            $regs = array_pad($regs, 4, null); // eviter notice php
72
+            $date = $regs[1] . '-00-00' . $regs[3];
73
+        } else {
74
+            if (preg_match('#^([12][0-9]{3}[-/][01]?[0-9])([-/]00)?( [-0-9:]+)?$#', $date, $regs)) {
75
+                $regs = array_pad($regs, 4, null); // eviter notice php
76
+                $date = preg_replace('@/@', '-', $regs[1]) . '-00' . $regs[3];
77
+            } else {
78
+                $date = date('Y-m-d H:i:s', strtotime($date));
79
+            }
80
+        }
81
+
82
+        if ($forcer_jour) {
83
+            $date = str_replace('-00', '-01', $date);
84
+        }
85
+    }
86
+
87
+    return $date;
88 88
 }
89 89
 
90 90
 /**
@@ -97,23 +97,23 @@  discard block
 block discarded – undo
97 97
  *     - Une chaine vide
98 98
  **/
99 99
 function vider_date($letexte, $verif_format_date = false): string {
100
-	$letexte ??= '';
101
-	if (
102
-		!$verif_format_date
103
-		or (in_array(strlen($letexte), [10,19]) and
104
-			  preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}(\s[0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $letexte))
105
-	) {
106
-		if (strncmp('0000-00-00', $letexte, 10) == 0) {
107
-			return '';
108
-		}
109
-		if (strncmp('0001-01-01', $letexte, 10) == 0) {
110
-			return '';
111
-		}
112
-		if (strncmp('1970-01-01', $letexte, 10) == 0) {
113
-			return '';
114
-		}  // eviter le bug GMT-1
115
-	}
116
-	return $letexte;
100
+    $letexte ??= '';
101
+    if (
102
+        !$verif_format_date
103
+        or (in_array(strlen($letexte), [10,19]) and
104
+              preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}(\s[0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $letexte))
105
+    ) {
106
+        if (strncmp('0000-00-00', $letexte, 10) == 0) {
107
+            return '';
108
+        }
109
+        if (strncmp('0001-01-01', $letexte, 10) == 0) {
110
+            return '';
111
+        }
112
+        if (strncmp('1970-01-01', $letexte, 10) == 0) {
113
+            return '';
114
+        }  // eviter le bug GMT-1
115
+    }
116
+    return $letexte;
117 117
 }
118 118
 
119 119
 /**
@@ -129,17 +129,17 @@  discard block
 block discarded – undo
129 129
  **/
130 130
 function recup_heure($date): array {
131 131
 
132
-	if (preg_match('#([0-9]{1,2}):([0-9]{1,2})(?::([0-9]{1,2}))?#', $date, $elements)) {
133
-		array_shift($elements);
134
-		if (!isset($elements[2])) {
135
-			$elements[2] = 0;
136
-		}
137
-		$heure = $elements;
138
-	} else {
139
-		$heure = [0, 0, 0];
140
-	}
141
-
142
-	return $heure;
132
+    if (preg_match('#([0-9]{1,2}):([0-9]{1,2})(?::([0-9]{1,2}))?#', $date, $elements)) {
133
+        array_shift($elements);
134
+        if (!isset($elements[2])) {
135
+            $elements[2] = 0;
136
+        }
137
+        $heure = $elements;
138
+    } else {
139
+        $heure = [0, 0, 0];
140
+    }
141
+
142
+    return $heure;
143 143
 }
144 144
 
145 145
 /**
@@ -153,13 +153,13 @@  discard block
 block discarded – undo
153 153
  * @return string heures, sinon 0
154 154
  **/
155 155
 function heures($numdate): string {
156
-	$heures = null;
157
-	$date_array = recup_heure($numdate);
158
-	if ($date_array) {
159
-		[$heures, $minutes, $secondes] = $date_array;
160
-	}
156
+    $heures = null;
157
+    $date_array = recup_heure($numdate);
158
+    if ($date_array) {
159
+        [$heures, $minutes, $secondes] = $date_array;
160
+    }
161 161
 
162
-	return $heures;
162
+    return $heures;
163 163
 }
164 164
 
165 165
 /**
@@ -173,13 +173,13 @@  discard block
 block discarded – undo
173 173
  * @return string minutes, sinon 0
174 174
  **/
175 175
 function minutes($numdate): string {
176
-	$minutes = null;
177
-	$date_array = recup_heure($numdate);
178
-	if ($date_array) {
179
-		[$heures, $minutes, $secondes] = $date_array;
180
-	}
176
+    $minutes = null;
177
+    $date_array = recup_heure($numdate);
178
+    if ($date_array) {
179
+        [$heures, $minutes, $secondes] = $date_array;
180
+    }
181 181
 
182
-	return $minutes;
182
+    return $minutes;
183 183
 }
184 184
 
185 185
 /**
@@ -193,13 +193,13 @@  discard block
 block discarded – undo
193 193
  * @return string secondes, sinon 0
194 194
  **/
195 195
 function secondes($numdate): string {
196
-	$secondes = null;
197
-	$date_array = recup_heure($numdate);
198
-	if ($date_array) {
199
-		[$heures, $minutes, $secondes] = $date_array;
200
-	}
196
+    $secondes = null;
197
+    $date_array = recup_heure($numdate);
198
+    if ($date_array) {
199
+        [$heures, $minutes, $secondes] = $date_array;
200
+    }
201 201
 
202
-	return $secondes;
202
+    return $secondes;
203 203
 }
204 204
 
205 205
 /**
@@ -218,11 +218,11 @@  discard block
 block discarded – undo
218 218
  * @return string L'heure formatée dans la langue en cours.
219 219
  **/
220 220
 function heures_minutes($numdate, $forme = ''): string {
221
-	if ($forme !== 'abbr') {
222
-		return _T('date_fmt_heures_minutes', ['h' => heures($numdate), 'm' => minutes($numdate)]);
223
-	} else {
224
-		return _T('date_fmt_heures_minutes_court', ['h' => heures($numdate), 'm' => minutes($numdate)]);
225
-	}
221
+    if ($forme !== 'abbr') {
222
+        return _T('date_fmt_heures_minutes', ['h' => heures($numdate), 'm' => minutes($numdate)]);
223
+    } else {
224
+        return _T('date_fmt_heures_minutes_court', ['h' => heures($numdate), 'm' => minutes($numdate)]);
225
+    }
226 226
 }
227 227
 
228 228
 /**
@@ -247,57 +247,57 @@  discard block
 block discarded – undo
247 247
  * @return array [année, mois, jour, heures, minutes, secondes] ou []
248 248
  **/
249 249
 function recup_date($numdate, $forcer_jour = true): array {
250
-	if (!$numdate) {
251
-		return [];
252
-	}
253
-	$heures = $minutes = $secondes = 0;
254
-	if (preg_match('#([0-9]{1,2})/([0-9]{1,2})/([0-9]{4}|[0-9]{1,2})#', $numdate, $regs)) {
255
-		$jour = $regs[1];
256
-		$mois = $regs[2];
257
-		$annee = $regs[3];
258
-		if ($annee < 90) {
259
-			$annee = 2000 + $annee;
260
-		} elseif ($annee < 100) {
261
-			$annee = 1900 + $annee;
262
-		}
263
-		[$heures, $minutes, $secondes] = recup_heure($numdate);
264
-	} elseif (preg_match('#([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})#', $numdate, $regs)) {
265
-		$annee = $regs[1];
266
-		$mois = $regs[2];
267
-		$jour = $regs[3];
268
-		[$heures, $minutes, $secondes] = recup_heure($numdate);
269
-	} elseif (preg_match('#([0-9]{4})-([0-9]{2})#', $numdate, $regs)) {
270
-		$annee = $regs[1];
271
-		$mois = $regs[2];
272
-		$jour = '';
273
-		[$heures, $minutes, $secondes] = recup_heure($numdate);
274
-	} elseif (preg_match('#^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})$#', $numdate, $regs)) {
275
-		$annee = $regs[1];
276
-		$mois = $regs[2];
277
-		$jour = $regs[3];
278
-		$heures = $regs[4];
279
-		$minutes = $regs[5];
280
-		$secondes = $regs[6];
281
-	} else {
282
-		$annee = $mois = $jour = '';
283
-	}
284
-	if ($annee > 4000) {
285
-		$annee -= 9000;
286
-	}
287
-	if (strlen($jour) and substr($jour, 0, 1) == '0') {
288
-		$jour = substr($jour, 1);
289
-	}
290
-
291
-	if ($forcer_jour and $jour == '0') {
292
-		$jour = '1';
293
-	}
294
-	if ($forcer_jour and $mois == '0') {
295
-		$mois = '1';
296
-	}
297
-	if ($annee or $mois or $jour or $heures or $minutes or $secondes) {
298
-		return [$annee, $mois, $jour, $heures, $minutes, $secondes];
299
-	}
300
-	return [];
250
+    if (!$numdate) {
251
+        return [];
252
+    }
253
+    $heures = $minutes = $secondes = 0;
254
+    if (preg_match('#([0-9]{1,2})/([0-9]{1,2})/([0-9]{4}|[0-9]{1,2})#', $numdate, $regs)) {
255
+        $jour = $regs[1];
256
+        $mois = $regs[2];
257
+        $annee = $regs[3];
258
+        if ($annee < 90) {
259
+            $annee = 2000 + $annee;
260
+        } elseif ($annee < 100) {
261
+            $annee = 1900 + $annee;
262
+        }
263
+        [$heures, $minutes, $secondes] = recup_heure($numdate);
264
+    } elseif (preg_match('#([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})#', $numdate, $regs)) {
265
+        $annee = $regs[1];
266
+        $mois = $regs[2];
267
+        $jour = $regs[3];
268
+        [$heures, $minutes, $secondes] = recup_heure($numdate);
269
+    } elseif (preg_match('#([0-9]{4})-([0-9]{2})#', $numdate, $regs)) {
270
+        $annee = $regs[1];
271
+        $mois = $regs[2];
272
+        $jour = '';
273
+        [$heures, $minutes, $secondes] = recup_heure($numdate);
274
+    } elseif (preg_match('#^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})$#', $numdate, $regs)) {
275
+        $annee = $regs[1];
276
+        $mois = $regs[2];
277
+        $jour = $regs[3];
278
+        $heures = $regs[4];
279
+        $minutes = $regs[5];
280
+        $secondes = $regs[6];
281
+    } else {
282
+        $annee = $mois = $jour = '';
283
+    }
284
+    if ($annee > 4000) {
285
+        $annee -= 9000;
286
+    }
287
+    if (strlen($jour) and substr($jour, 0, 1) == '0') {
288
+        $jour = substr($jour, 1);
289
+    }
290
+
291
+    if ($forcer_jour and $jour == '0') {
292
+        $jour = '1';
293
+    }
294
+    if ($forcer_jour and $mois == '0') {
295
+        $mois = '1';
296
+    }
297
+    if ($annee or $mois or $jour or $heures or $minutes or $secondes) {
298
+        return [$annee, $mois, $jour, $heures, $minutes, $secondes];
299
+    }
300
+    return [];
301 301
 }
302 302
 
303 303
 /**
@@ -324,10 +324,10 @@  discard block
 block discarded – undo
324 324
  *     La date relative ou complète
325 325
  **/
326 326
 function date_interface($date, $decalage_maxi = 43200 /* 12*3600 */): string {
327
-	return sinon(
328
-		date_relative($date, $decalage_maxi),
329
-		affdate_heure($date)
330
-	);
327
+    return sinon(
328
+        date_relative($date, $decalage_maxi),
329
+        affdate_heure($date)
330
+    );
331 331
 }
332 332
 
333 333
 /**
@@ -360,86 +360,86 @@  discard block
 block discarded – undo
360 360
  **/
361 361
 function date_relative($date, $decalage_maxi = 0, $ref_date = null): string {
362 362
 
363
-	if (!$date) {
364
-		return '';
365
-	}
366
-
367
-	if (is_null($ref_date)) {
368
-		$ref_time = time();
369
-	} else {
370
-		$ref_time = strtotime($ref_date);
371
-	}
372
-
373
-	$decal = date('U', $ref_time) - date('U', strtotime($date));
374
-
375
-	if ($decalage_maxi and ($decal > $decalage_maxi or $decal < 0)) {
376
-		return '';
377
-	}
378
-
379
-	if ($decal < 0) {
380
-		$il_y_a = 'date_dans';
381
-		$decal = -1 * $decal;
382
-	} else {
383
-		$il_y_a = 'date_il_y_a';
384
-	}
385
-
386
-	if ($decal > 3600 * 24 * 30 * 6) {
387
-		return affdate_court($date);
388
-	}
389
-
390
-	if ($decal > 3600 * 24 * 30) {
391
-		$mois = floor($decal / (3600 * 24 * 30));
392
-		if ($mois < 2) {
393
-			$delai = "$mois " . _T('date_un_mois');
394
-		} else {
395
-			$delai = "$mois " . _T('date_mois');
396
-		}
397
-	} else {
398
-		if ($decal > 3600 * 24 * 7) {
399
-			$semaines = floor($decal / (3600 * 24 * 7));
400
-			if ($semaines < 2) {
401
-				$delai = "$semaines " . _T('date_une_semaine');
402
-			} else {
403
-				$delai = "$semaines " . _T('date_semaines');
404
-			}
405
-		} else {
406
-			if ($decal > 3600 * 24) {
407
-				$jours = floor($decal / (3600 * 24));
408
-				if ($jours < 2) {
409
-					return $il_y_a == 'date_dans' ? _T('date_demain') : _T('date_hier');
410
-				} else {
411
-					$delai = "$jours " . _T('date_jours');
412
-				}
413
-			} else {
414
-				if ($decal >= 3600) {
415
-					$heures = floor($decal / 3600);
416
-					if ($heures < 2) {
417
-						$delai = "$heures " . _T('date_une_heure');
418
-					} else {
419
-						$delai = "$heures " . _T('date_heures');
420
-					}
421
-				} else {
422
-					if ($decal >= 60) {
423
-						$minutes = floor($decal / 60);
424
-						if ($minutes < 2) {
425
-							$delai = "$minutes " . _T('date_une_minute');
426
-						} else {
427
-							$delai = "$minutes " . _T('date_minutes');
428
-						}
429
-					} else {
430
-						$secondes = ceil($decal);
431
-						if ($secondes < 2) {
432
-							$delai = "$secondes " . _T('date_une_seconde');
433
-						} else {
434
-							$delai = "$secondes " . _T('date_secondes');
435
-						}
436
-					}
437
-				}
438
-			}
439
-		}
440
-	}
441
-
442
-	return _T($il_y_a, ['delai' => $delai]);
363
+    if (!$date) {
364
+        return '';
365
+    }
366
+
367
+    if (is_null($ref_date)) {
368
+        $ref_time = time();
369
+    } else {
370
+        $ref_time = strtotime($ref_date);
371
+    }
372
+
373
+    $decal = date('U', $ref_time) - date('U', strtotime($date));
374
+
375
+    if ($decalage_maxi and ($decal > $decalage_maxi or $decal < 0)) {
376
+        return '';
377
+    }
378
+
379
+    if ($decal < 0) {
380
+        $il_y_a = 'date_dans';
381
+        $decal = -1 * $decal;
382
+    } else {
383
+        $il_y_a = 'date_il_y_a';
384
+    }
385
+
386
+    if ($decal > 3600 * 24 * 30 * 6) {
387
+        return affdate_court($date);
388
+    }
389
+
390
+    if ($decal > 3600 * 24 * 30) {
391
+        $mois = floor($decal / (3600 * 24 * 30));
392
+        if ($mois < 2) {
393
+            $delai = "$mois " . _T('date_un_mois');
394
+        } else {
395
+            $delai = "$mois " . _T('date_mois');
396
+        }
397
+    } else {
398
+        if ($decal > 3600 * 24 * 7) {
399
+            $semaines = floor($decal / (3600 * 24 * 7));
400
+            if ($semaines < 2) {
401
+                $delai = "$semaines " . _T('date_une_semaine');
402
+            } else {
403
+                $delai = "$semaines " . _T('date_semaines');
404
+            }
405
+        } else {
406
+            if ($decal > 3600 * 24) {
407
+                $jours = floor($decal / (3600 * 24));
408
+                if ($jours < 2) {
409
+                    return $il_y_a == 'date_dans' ? _T('date_demain') : _T('date_hier');
410
+                } else {
411
+                    $delai = "$jours " . _T('date_jours');
412
+                }
413
+            } else {
414
+                if ($decal >= 3600) {
415
+                    $heures = floor($decal / 3600);
416
+                    if ($heures < 2) {
417
+                        $delai = "$heures " . _T('date_une_heure');
418
+                    } else {
419
+                        $delai = "$heures " . _T('date_heures');
420
+                    }
421
+                } else {
422
+                    if ($decal >= 60) {
423
+                        $minutes = floor($decal / 60);
424
+                        if ($minutes < 2) {
425
+                            $delai = "$minutes " . _T('date_une_minute');
426
+                        } else {
427
+                            $delai = "$minutes " . _T('date_minutes');
428
+                        }
429
+                    } else {
430
+                        $secondes = ceil($decal);
431
+                        if ($secondes < 2) {
432
+                            $delai = "$secondes " . _T('date_une_seconde');
433
+                        } else {
434
+                            $delai = "$secondes " . _T('date_secondes');
435
+                        }
436
+                    }
437
+                }
438
+            }
439
+        }
440
+    }
441
+
442
+    return _T($il_y_a, ['delai' => $delai]);
443 443
 }
444 444
 
445 445
 
@@ -465,32 +465,32 @@  discard block
 block discarded – undo
465 465
  **/
466 466
 function date_relativecourt($date, $decalage_maxi = 0): string {
467 467
 
468
-	if (!$date) {
469
-		return '';
470
-	}
471
-	$decal = date('U', strtotime(date('Y-m-d')) - strtotime(date('Y-m-d', strtotime($date))));
472
-
473
-	if ($decalage_maxi and ($decal > $decalage_maxi or $decal < 0)) {
474
-		return '';
475
-	}
476
-
477
-	if ($decal < -24 * 3600) {
478
-		$retour = date_relative($date, $decalage_maxi);
479
-	} elseif ($decal < 0) {
480
-		$retour = _T('date_demain');
481
-	} else {
482
-		if ($decal < (3600 * 24)) {
483
-			$retour = _T('date_aujourdhui');
484
-		} else {
485
-			if ($decal < (3600 * 24 * 2)) {
486
-				$retour = _T('date_hier');
487
-			} else {
488
-				$retour = date_relative($date, $decalage_maxi);
489
-			}
490
-		}
491
-	}
492
-
493
-	return $retour;
468
+    if (!$date) {
469
+        return '';
470
+    }
471
+    $decal = date('U', strtotime(date('Y-m-d')) - strtotime(date('Y-m-d', strtotime($date))));
472
+
473
+    if ($decalage_maxi and ($decal > $decalage_maxi or $decal < 0)) {
474
+        return '';
475
+    }
476
+
477
+    if ($decal < -24 * 3600) {
478
+        $retour = date_relative($date, $decalage_maxi);
479
+    } elseif ($decal < 0) {
480
+        $retour = _T('date_demain');
481
+    } else {
482
+        if ($decal < (3600 * 24)) {
483
+            $retour = _T('date_aujourdhui');
484
+        } else {
485
+            if ($decal < (3600 * 24 * 2)) {
486
+                $retour = _T('date_hier');
487
+            } else {
488
+                $retour = date_relative($date, $decalage_maxi);
489
+            }
490
+        }
491
+    }
492
+
493
+    return $retour;
494 494
 }
495 495
 
496 496
 /**
@@ -507,175 +507,175 @@  discard block
 block discarded – undo
507 507
  * @return string
508 508
  */
509 509
 function affdate_base($numdate, $vue, $options = []): string {
510
-	if (is_string($options)) {
511
-		$options = ['param' => $options];
512
-	}
513
-	$date_array = recup_date($numdate, false);
514
-	if (!$date_array) {
515
-		return '';
516
-	}
517
-	[$annee, $mois, $jour, $heures, $minutes, $secondes] = $date_array;
518
-
519
-	// 1er, 21st, etc.
520
-	$journum = $jour;
521
-
522
-	if ($jour == 0) {
523
-		$jour = '';
524
-		$njour = 0;
525
-	} else {
526
-		$njour = intval($jour);
527
-		if ($jourth = _T('date_jnum' . $jour)) {
528
-			$jour = $jourth;
529
-		}
530
-	}
531
-
532
-	$mois = intval($mois);
533
-	if ($mois > 0 and $mois < 13) {
534
-		/* Traiter le cas "abbr" pour les noms de mois */
535
-		$param = ((isset($options['param']) and $options['param'] === 'abbr') ? '_' . $options['param'] : '');
536
-		$nommois = _T('date_mois_' . $mois . $param);
537
-		if ($jour) {
538
-			$jourmois = _T('date_de_mois_' . $mois, ['j' => $jour, 'nommois' => $nommois]);
539
-		} else {
540
-			$jourmois = $nommois;
541
-		}
542
-	} else {
543
-		$nommois = '';
544
-		$jourmois = '';
545
-	}
546
-
547
-	if ($annee < 0) {
548
-		$annee = -$annee . ' ' . _T('date_avant_jc');
549
-		$avjc = true;
550
-	} else {
551
-		$avjc = false;
552
-	}
553
-
554
-	switch ($vue) {
555
-		case 'saison':
556
-		case 'saison_annee':
557
-			$saison = '';
558
-			if ($mois > 0) {
559
-				$saison = ($options['param'] == 'sud') ? 3 : 1;
560
-				if (($mois == 3 and $jour >= 21) or $mois > 3) {
561
-					$saison = ($options['param'] == 'sud') ? 4 : 2;
562
-				}
563
-				if (($mois == 6 and $jour >= 21) or $mois > 6) {
564
-					$saison = ($options['param'] == 'sud') ? 1 : 3;
565
-				}
566
-				if (($mois == 9 and $jour >= 21) or $mois > 9) {
567
-					$saison = ($options['param'] == 'sud') ? 2 : 4;
568
-				}
569
-				if (($mois == 12 and $jour >= 21) or $mois > 12) {
570
-					$saison = ($options['param'] == 'sud') ? 3 : 1;
571
-				}
572
-			}
573
-			if ($vue == 'saison') {
574
-				return $saison ? _T('date_saison_' . $saison) : '';
575
-			} else {
576
-				return $saison ? trim(_T(
577
-					'date_fmt_saison_annee',
578
-					['saison' => _T('date_saison_' . $saison), 'annee' => $annee]
579
-				)) : '';
580
-			}
581
-
582
-		case 'court':
583
-			if ($avjc) {
584
-				return $annee;
585
-			}
586
-			$a = ((isset($options['annee_courante']) and $options['annee_courante']) ? $options['annee_courante'] : date('Y'));
587
-			if ($annee < ($a - 100) or $annee > ($a + 100)) {
588
-				return $annee;
589
-			}
590
-			if ($annee != $a) {
591
-				return _T(
592
-					'date_fmt_mois_annee',
593
-					['mois' => $mois, 'nommois' => spip_ucfirst($nommois), 'annee' => $annee]
594
-				);
595
-			}
596
-
597
-			return _T(
598
-				'date_fmt_jour_mois',
599
-				['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
600
-			);
601
-
602
-		case 'jourcourt':
603
-			if ($avjc) {
604
-				return $annee;
605
-			}
606
-			$a = ((isset($options['annee_courante']) and $options['annee_courante']) ? $options['annee_courante'] : date('Y'));
607
-			if ($annee < ($a - 100) or $annee > ($a + 100)) {
608
-				return $annee;
609
-			}
610
-			if ($annee != $a) {
611
-				return _T(
612
-					'date_fmt_jour_mois_annee',
613
-					['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
614
-				);
615
-			}
616
-
617
-			return _T(
618
-				'date_fmt_jour_mois',
619
-				['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
620
-			);
621
-
622
-		case 'entier':
623
-			if ($avjc) {
624
-				return $annee;
625
-			}
626
-			if ($jour) {
627
-				return _T(
628
-					'date_fmt_jour_mois_annee',
629
-					['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
630
-				);
631
-			} elseif ($mois) {
632
-				return trim(_T('date_fmt_mois_annee', ['mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]));
633
-			} else {
634
-				return $annee;
635
-			}
636
-
637
-		case 'nom_mois':
638
-			return $nommois;
639
-
640
-		case 'mois':
641
-			return sprintf('%02s', $mois);
642
-
643
-		case 'jour':
644
-			return $jour;
645
-
646
-		case 'journum':
647
-			return $journum;
648
-
649
-		case 'nom_jour':
650
-			if (!$mois or !$njour) {
651
-				return '';
652
-			}
653
-			$nom = mktime(1, 1, 1, $mois, $njour, $annee);
654
-			$nom = 1 + (int) date('w', $nom);
655
-			$param = ((isset($options['param']) and $options['param']) ? '_' . $options['param'] : '');
656
-
657
-			return _T('date_jour_' . $nom . $param);
658
-
659
-		case 'mois_annee':
660
-			if ($avjc) {
661
-				return $annee;
662
-			}
663
-
664
-			return trim(_T('date_fmt_mois_annee', ['mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]));
665
-
666
-		case 'annee':
667
-			return $annee;
668
-
669
-		// Cas d'une vue non definie : retomber sur le format
670
-		// de date propose par http://www.php.net/date
671
-		default:
672
-			[$annee, $mois, $jour, $heures, $minutes, $secondes] = $date_array;
673
-			// il faut envoyer jour = 1 si jour pas défini, c'est le comportement qu'on avait historiquement en envoyant ''
674
-			if (!$time = mktime($heures, $minutes, $secondes, $mois, is_numeric($jour) ? $jour : 1, $annee)) {
675
-				$time = strtotime($numdate);
676
-			}
677
-			return date($vue, $time);
678
-	}
510
+    if (is_string($options)) {
511
+        $options = ['param' => $options];
512
+    }
513
+    $date_array = recup_date($numdate, false);
514
+    if (!$date_array) {
515
+        return '';
516
+    }
517
+    [$annee, $mois, $jour, $heures, $minutes, $secondes] = $date_array;
518
+
519
+    // 1er, 21st, etc.
520
+    $journum = $jour;
521
+
522
+    if ($jour == 0) {
523
+        $jour = '';
524
+        $njour = 0;
525
+    } else {
526
+        $njour = intval($jour);
527
+        if ($jourth = _T('date_jnum' . $jour)) {
528
+            $jour = $jourth;
529
+        }
530
+    }
531
+
532
+    $mois = intval($mois);
533
+    if ($mois > 0 and $mois < 13) {
534
+        /* Traiter le cas "abbr" pour les noms de mois */
535
+        $param = ((isset($options['param']) and $options['param'] === 'abbr') ? '_' . $options['param'] : '');
536
+        $nommois = _T('date_mois_' . $mois . $param);
537
+        if ($jour) {
538
+            $jourmois = _T('date_de_mois_' . $mois, ['j' => $jour, 'nommois' => $nommois]);
539
+        } else {
540
+            $jourmois = $nommois;
541
+        }
542
+    } else {
543
+        $nommois = '';
544
+        $jourmois = '';
545
+    }
546
+
547
+    if ($annee < 0) {
548
+        $annee = -$annee . ' ' . _T('date_avant_jc');
549
+        $avjc = true;
550
+    } else {
551
+        $avjc = false;
552
+    }
553
+
554
+    switch ($vue) {
555
+        case 'saison':
556
+        case 'saison_annee':
557
+            $saison = '';
558
+            if ($mois > 0) {
559
+                $saison = ($options['param'] == 'sud') ? 3 : 1;
560
+                if (($mois == 3 and $jour >= 21) or $mois > 3) {
561
+                    $saison = ($options['param'] == 'sud') ? 4 : 2;
562
+                }
563
+                if (($mois == 6 and $jour >= 21) or $mois > 6) {
564
+                    $saison = ($options['param'] == 'sud') ? 1 : 3;
565
+                }
566
+                if (($mois == 9 and $jour >= 21) or $mois > 9) {
567
+                    $saison = ($options['param'] == 'sud') ? 2 : 4;
568
+                }
569
+                if (($mois == 12 and $jour >= 21) or $mois > 12) {
570
+                    $saison = ($options['param'] == 'sud') ? 3 : 1;
571
+                }
572
+            }
573
+            if ($vue == 'saison') {
574
+                return $saison ? _T('date_saison_' . $saison) : '';
575
+            } else {
576
+                return $saison ? trim(_T(
577
+                    'date_fmt_saison_annee',
578
+                    ['saison' => _T('date_saison_' . $saison), 'annee' => $annee]
579
+                )) : '';
580
+            }
581
+
582
+        case 'court':
583
+            if ($avjc) {
584
+                return $annee;
585
+            }
586
+            $a = ((isset($options['annee_courante']) and $options['annee_courante']) ? $options['annee_courante'] : date('Y'));
587
+            if ($annee < ($a - 100) or $annee > ($a + 100)) {
588
+                return $annee;
589
+            }
590
+            if ($annee != $a) {
591
+                return _T(
592
+                    'date_fmt_mois_annee',
593
+                    ['mois' => $mois, 'nommois' => spip_ucfirst($nommois), 'annee' => $annee]
594
+                );
595
+            }
596
+
597
+            return _T(
598
+                'date_fmt_jour_mois',
599
+                ['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
600
+            );
601
+
602
+        case 'jourcourt':
603
+            if ($avjc) {
604
+                return $annee;
605
+            }
606
+            $a = ((isset($options['annee_courante']) and $options['annee_courante']) ? $options['annee_courante'] : date('Y'));
607
+            if ($annee < ($a - 100) or $annee > ($a + 100)) {
608
+                return $annee;
609
+            }
610
+            if ($annee != $a) {
611
+                return _T(
612
+                    'date_fmt_jour_mois_annee',
613
+                    ['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
614
+                );
615
+            }
616
+
617
+            return _T(
618
+                'date_fmt_jour_mois',
619
+                ['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
620
+            );
621
+
622
+        case 'entier':
623
+            if ($avjc) {
624
+                return $annee;
625
+            }
626
+            if ($jour) {
627
+                return _T(
628
+                    'date_fmt_jour_mois_annee',
629
+                    ['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
630
+                );
631
+            } elseif ($mois) {
632
+                return trim(_T('date_fmt_mois_annee', ['mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]));
633
+            } else {
634
+                return $annee;
635
+            }
636
+
637
+        case 'nom_mois':
638
+            return $nommois;
639
+
640
+        case 'mois':
641
+            return sprintf('%02s', $mois);
642
+
643
+        case 'jour':
644
+            return $jour;
645
+
646
+        case 'journum':
647
+            return $journum;
648
+
649
+        case 'nom_jour':
650
+            if (!$mois or !$njour) {
651
+                return '';
652
+            }
653
+            $nom = mktime(1, 1, 1, $mois, $njour, $annee);
654
+            $nom = 1 + (int) date('w', $nom);
655
+            $param = ((isset($options['param']) and $options['param']) ? '_' . $options['param'] : '');
656
+
657
+            return _T('date_jour_' . $nom . $param);
658
+
659
+        case 'mois_annee':
660
+            if ($avjc) {
661
+                return $annee;
662
+            }
663
+
664
+            return trim(_T('date_fmt_mois_annee', ['mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]));
665
+
666
+        case 'annee':
667
+            return $annee;
668
+
669
+        // Cas d'une vue non definie : retomber sur le format
670
+        // de date propose par http://www.php.net/date
671
+        default:
672
+            [$annee, $mois, $jour, $heures, $minutes, $secondes] = $date_array;
673
+            // il faut envoyer jour = 1 si jour pas défini, c'est le comportement qu'on avait historiquement en envoyant ''
674
+            if (!$time = mktime($heures, $minutes, $secondes, $mois, is_numeric($jour) ? $jour : 1, $annee)) {
675
+                $time = strtotime($numdate);
676
+            }
677
+            return date($vue, $time);
678
+    }
679 679
 }
680 680
 
681 681
 
@@ -702,11 +702,11 @@  discard block
 block discarded – undo
702 702
  *     Nom du jour
703 703
  **/
704 704
 function nom_jour($numdate, $forme = ''): string {
705
-	if (!($forme === 'abbr' or $forme === 'initiale')) {
706
-		$forme = '';
707
-	}
705
+    if (!($forme === 'abbr' or $forme === 'initiale')) {
706
+        $forme = '';
707
+    }
708 708
 
709
-	return affdate_base($numdate, 'nom_jour', ['param' => $forme]);
709
+    return affdate_base($numdate, 'nom_jour', ['param' => $forme]);
710 710
 }
711 711
 
712 712
 /**
@@ -728,7 +728,7 @@  discard block
 block discarded – undo
728 728
  *     Numéro du jour
729 729
  **/
730 730
 function jour($numdate): string {
731
-	return affdate_base($numdate, 'jour');
731
+    return affdate_base($numdate, 'jour');
732 732
 }
733 733
 
734 734
 /**
@@ -746,7 +746,7 @@  discard block
 block discarded – undo
746 746
  *     Numéro du jour
747 747
  **/
748 748
 function journum($numdate): string {
749
-	return affdate_base($numdate, 'journum');
749
+    return affdate_base($numdate, 'journum');
750 750
 }
751 751
 
752 752
 /**
@@ -764,7 +764,7 @@  discard block
 block discarded – undo
764 764
  *     Numéro du mois (sur 2 chiffres)
765 765
  **/
766 766
 function mois($numdate): string {
767
-	return  affdate_base($numdate, 'mois');
767
+    return  affdate_base($numdate, 'mois');
768 768
 }
769 769
 
770 770
 /**
@@ -788,11 +788,11 @@  discard block
 block discarded – undo
788 788
  *     Nom du mois
789 789
  **/
790 790
 function nom_mois($numdate, $forme = ''): string {
791
-	if (!($forme === 'abbr')) {
792
-		$forme = '';
793
-	}
791
+    if (!($forme === 'abbr')) {
792
+        $forme = '';
793
+    }
794 794
 
795
-	return affdate_base($numdate, 'nom_mois', ['param' => $forme]);
795
+    return affdate_base($numdate, 'nom_mois', ['param' => $forme]);
796 796
 }
797 797
 
798 798
 /**
@@ -810,7 +810,7 @@  discard block
 block discarded – undo
810 810
  *     Année (sur 4 chiffres)
811 811
  **/
812 812
 function annee($numdate): string {
813
-	return affdate_base($numdate, 'annee');
813
+    return affdate_base($numdate, 'annee');
814 814
 }
815 815
 
816 816
 
@@ -840,11 +840,11 @@  discard block
 block discarded – undo
840 840
  *     La date formatée
841 841
  **/
842 842
 function saison($numdate, $hemisphere = 'nord'): string {
843
-	if ($hemisphere !== 'sud') {
844
-		$hemisphere = 'nord';
845
-	}
843
+    if ($hemisphere !== 'sud') {
844
+        $hemisphere = 'nord';
845
+    }
846 846
 
847
-	return affdate_base($numdate, 'saison', ['param' => $hemisphere]);
847
+    return affdate_base($numdate, 'saison', ['param' => $hemisphere]);
848 848
 }
849 849
 
850 850
 
@@ -873,11 +873,11 @@  discard block
 block discarded – undo
873 873
  *     La date formatée
874 874
  **/
875 875
 function saison_annee($numdate, $hemisphere = 'nord'): string {
876
-	if ($hemisphere !== 'sud') {
877
-		$hemisphere = 'nord';
878
-	}
876
+    if ($hemisphere !== 'sud') {
877
+        $hemisphere = 'nord';
878
+    }
879 879
 
880
-	return affdate_base($numdate, 'saison_annee', ['param' => $hemisphere]);
880
+    return affdate_base($numdate, 'saison_annee', ['param' => $hemisphere]);
881 881
 }
882 882
 
883 883
 /**
@@ -905,7 +905,7 @@  discard block
 block discarded – undo
905 905
  *     La date formatée
906 906
  **/
907 907
 function affdate($numdate, $format = 'entier'): string {
908
-	return affdate_base($numdate, $format);
908
+    return affdate_base($numdate, $format);
909 909
 }
910 910
 
911 911
 
@@ -932,7 +932,7 @@  discard block
 block discarded – undo
932 932
  *     La date formatée
933 933
  **/
934 934
 function affdate_court($numdate, $annee_courante = null): string {
935
-	return affdate_base($numdate, 'court', ['annee_courante' => $annee_courante]);
935
+    return affdate_base($numdate, 'court', ['annee_courante' => $annee_courante]);
936 936
 }
937 937
 
938 938
 
@@ -959,7 +959,7 @@  discard block
 block discarded – undo
959 959
  *     La date formatée
960 960
  **/
961 961
 function affdate_jourcourt($numdate, $annee_courante = null): string {
962
-	return affdate_base($numdate, 'jourcourt', ['annee_courante' => $annee_courante]);
962
+    return affdate_base($numdate, 'jourcourt', ['annee_courante' => $annee_courante]);
963 963
 }
964 964
 
965 965
 /**
@@ -977,7 +977,7 @@  discard block
 block discarded – undo
977 977
  *     La date formatée
978 978
  **/
979 979
 function affdate_mois_annee($numdate): string {
980
-	return affdate_base($numdate, 'mois_annee');
980
+    return affdate_base($numdate, 'mois_annee');
981 981
 }
982 982
 
983 983
 /**
@@ -995,16 +995,16 @@  discard block
 block discarded – undo
995 995
  *     La date formatée, sinon ''
996 996
  **/
997 997
 function affdate_heure($numdate): string {
998
-	$date_array = recup_date($numdate);
999
-	if (!$date_array) {
1000
-		return '';
1001
-	}
1002
-	[$annee, $mois, $jour, $heures, $minutes, $sec] = $date_array;
1003
-
1004
-	return _T('date_fmt_jour_heure', [
1005
-		'jour' => affdate($numdate),
1006
-		'heure' => _T('date_fmt_heures_minutes', ['h' => $heures, 'm' => $minutes])
1007
-	]);
998
+    $date_array = recup_date($numdate);
999
+    if (!$date_array) {
1000
+        return '';
1001
+    }
1002
+    [$annee, $mois, $jour, $heures, $minutes, $sec] = $date_array;
1003
+
1004
+    return _T('date_fmt_jour_heure', [
1005
+        'jour' => affdate($numdate),
1006
+        'heure' => _T('date_fmt_heures_minutes', ['h' => $heures, 'm' => $minutes])
1007
+    ]);
1008 1008
 }
1009 1009
 
1010 1010
 /**
@@ -1036,117 +1036,117 @@  discard block
 block discarded – undo
1036 1036
  *     texte de la date
1037 1037
  */
1038 1038
 function affdate_debut_fin($date_debut, $date_fin, $horaire = 'oui', $forme = ''): string {
1039
-	$abbr = $jour = '';
1040
-	$affdate = 'affdate_jourcourt';
1041
-	if (strpos($forme, 'abbr') !== false) {
1042
-		$abbr = 'abbr';
1043
-	}
1044
-	if (strpos($forme, 'annee') !== false) {
1045
-		$affdate = 'affdate';
1046
-	}
1047
-	if (strpos($forme, 'jour') !== false) {
1048
-		$jour = 'jour';
1049
-	}
1050
-
1051
-	$dtstart = $dtend = $dtabbr = '';
1052
-	if (strpos($forme, 'hcal') !== false) {
1053
-		$dtstart = "<abbr class='dtstart' title='" . date_iso($date_debut) . "'>";
1054
-		$dtend = "<abbr class='dtend' title='" . date_iso($date_fin) . "'>";
1055
-		$dtabbr = '</abbr>';
1056
-	}
1057
-
1058
-	$date_debut = strtotime($date_debut);
1059
-	$date_fin = strtotime($date_fin);
1060
-	$d = date('Y-m-d', $date_debut);
1061
-	$f = date('Y-m-d', $date_fin);
1062
-	$h = ($horaire === 'oui' or $horaire === true);
1063
-	$hd = _T('date_fmt_heures_minutes_court', ['h' => date('H', $date_debut), 'm' => date('i', $date_debut)]);
1064
-	$hf = _T('date_fmt_heures_minutes_court', ['h' => date('H', $date_fin), 'm' => date('i', $date_fin)]);
1065
-
1066
-	if ($d == $f) { // meme jour
1067
-		$nomjour = nom_jour($d, $abbr);
1068
-		$s = $affdate($d);
1069
-		$s = _T('date_fmt_jour', ['nomjour' => $nomjour, 'jour' => $s]);
1070
-		if ($h) {
1071
-			if ($hd == $hf) {
1072
-				// Lundi 20 fevrier a 18h25
1073
-				$s = spip_ucfirst(_T('date_fmt_jour_heure', ['jour' => $s, 'heure' => $hd]));
1074
-				$s = "$dtstart$s$dtabbr";
1075
-			} else {
1076
-				// Le <abbr...>lundi 20 fevrier de 18h00</abbr> a <abbr...>20h00</abbr>
1077
-				if ($dtabbr && $dtstart && $dtend) {
1078
-					$s = _T(
1079
-						'date_fmt_jour_heure_debut_fin_abbr',
1080
-						[
1081
-						'jour' => spip_ucfirst($s),
1082
-						'heure_debut' => $hd,
1083
-						'heure_fin' => $hf,
1084
-						'dtstart' => $dtstart,
1085
-						'dtend' => $dtend,
1086
-						'dtabbr' => $dtabbr
1087
-						],
1088
-						[
1089
-							'sanitize' => false
1090
-						]
1091
-					);
1092
-				} // Le lundi 20 fevrier de 18h00 a 20h00
1093
-				else {
1094
-					$s = spip_ucfirst(_T(
1095
-						'date_fmt_jour_heure_debut_fin',
1096
-						['jour' => $s, 'heure_debut' => $hd, 'heure_fin' => $hf]
1097
-					));
1098
-				}
1099
-			}
1100
-		} else {
1101
-			if ($dtabbr && $dtstart) {
1102
-				$s = $dtstart . spip_ucfirst($s) . $dtabbr;
1103
-			} else {
1104
-				$s = spip_ucfirst($s);
1105
-			}
1106
-		}
1107
-	} else {
1108
-		if ((date('Y-m', $date_debut)) == date('Y-m', $date_fin)) { // meme annee et mois, jours differents
1109
-			if (!$h) {
1110
-				$date_debut = jour($d);
1111
-			} else {
1112
-				$date_debut = affdate_jourcourt($d, date('Y', $date_fin));
1113
-			}
1114
-			$date_fin = $affdate($f);
1115
-			if ($jour) {
1116
-				$nomjour_debut = nom_jour($d, $abbr);
1117
-				$date_debut = _T('date_fmt_jour', ['nomjour' => $nomjour_debut, 'jour' => $date_debut]);
1118
-				$nomjour_fin = nom_jour($f, $abbr);
1119
-				$date_fin = _T('date_fmt_jour', ['nomjour' => $nomjour_fin, 'jour' => $date_fin]);
1120
-			}
1121
-			if ($h) {
1122
-				$date_debut = _T('date_fmt_jour_heure', ['jour' => $date_debut, 'heure' => $hd]);
1123
-				$date_fin = _T('date_fmt_jour_heure', ['jour' => $date_fin, 'heure' => $hf]);
1124
-			}
1125
-			$date_debut = $dtstart . $date_debut . $dtabbr;
1126
-			$date_fin = $dtend . $date_fin . $dtabbr;
1127
-
1128
-			$s = _T('date_fmt_periode', ['date_debut' => $date_debut, 'date_fin' => $date_fin]);
1129
-		} else {
1130
-			$date_debut = affdate_jourcourt($d, date('Y', $date_fin));
1131
-			$date_fin = $affdate($f);
1132
-			if ($jour) {
1133
-				$nomjour_debut = nom_jour($d, $abbr);
1134
-				$date_debut = _T('date_fmt_jour', ['nomjour' => $nomjour_debut, 'jour' => $date_debut]);
1135
-				$nomjour_fin = nom_jour($f, $abbr);
1136
-				$date_fin = _T('date_fmt_jour', ['nomjour' => $nomjour_fin, 'jour' => $date_fin]);
1137
-			}
1138
-			if ($h) {
1139
-				$date_debut = _T('date_fmt_jour_heure', ['jour' => $date_debut, 'heure' => $hd]);
1140
-				$date_fin = _T('date_fmt_jour_heure', ['jour' => $date_fin, 'heure' => $hf]);
1141
-			}
1142
-
1143
-			$date_debut = $dtstart . $date_debut . $dtabbr;
1144
-			$date_fin = $dtend . $date_fin . $dtabbr;
1145
-			$s = _T('date_fmt_periode', ['date_debut' => $date_debut, 'date_fin' => $date_fin]);
1146
-		}
1147
-	}
1148
-
1149
-	return $s;
1039
+    $abbr = $jour = '';
1040
+    $affdate = 'affdate_jourcourt';
1041
+    if (strpos($forme, 'abbr') !== false) {
1042
+        $abbr = 'abbr';
1043
+    }
1044
+    if (strpos($forme, 'annee') !== false) {
1045
+        $affdate = 'affdate';
1046
+    }
1047
+    if (strpos($forme, 'jour') !== false) {
1048
+        $jour = 'jour';
1049
+    }
1050
+
1051
+    $dtstart = $dtend = $dtabbr = '';
1052
+    if (strpos($forme, 'hcal') !== false) {
1053
+        $dtstart = "<abbr class='dtstart' title='" . date_iso($date_debut) . "'>";
1054
+        $dtend = "<abbr class='dtend' title='" . date_iso($date_fin) . "'>";
1055
+        $dtabbr = '</abbr>';
1056
+    }
1057
+
1058
+    $date_debut = strtotime($date_debut);
1059
+    $date_fin = strtotime($date_fin);
1060
+    $d = date('Y-m-d', $date_debut);
1061
+    $f = date('Y-m-d', $date_fin);
1062
+    $h = ($horaire === 'oui' or $horaire === true);
1063
+    $hd = _T('date_fmt_heures_minutes_court', ['h' => date('H', $date_debut), 'm' => date('i', $date_debut)]);
1064
+    $hf = _T('date_fmt_heures_minutes_court', ['h' => date('H', $date_fin), 'm' => date('i', $date_fin)]);
1065
+
1066
+    if ($d == $f) { // meme jour
1067
+        $nomjour = nom_jour($d, $abbr);
1068
+        $s = $affdate($d);
1069
+        $s = _T('date_fmt_jour', ['nomjour' => $nomjour, 'jour' => $s]);
1070
+        if ($h) {
1071
+            if ($hd == $hf) {
1072
+                // Lundi 20 fevrier a 18h25
1073
+                $s = spip_ucfirst(_T('date_fmt_jour_heure', ['jour' => $s, 'heure' => $hd]));
1074
+                $s = "$dtstart$s$dtabbr";
1075
+            } else {
1076
+                // Le <abbr...>lundi 20 fevrier de 18h00</abbr> a <abbr...>20h00</abbr>
1077
+                if ($dtabbr && $dtstart && $dtend) {
1078
+                    $s = _T(
1079
+                        'date_fmt_jour_heure_debut_fin_abbr',
1080
+                        [
1081
+                        'jour' => spip_ucfirst($s),
1082
+                        'heure_debut' => $hd,
1083
+                        'heure_fin' => $hf,
1084
+                        'dtstart' => $dtstart,
1085
+                        'dtend' => $dtend,
1086
+                        'dtabbr' => $dtabbr
1087
+                        ],
1088
+                        [
1089
+                            'sanitize' => false
1090
+                        ]
1091
+                    );
1092
+                } // Le lundi 20 fevrier de 18h00 a 20h00
1093
+                else {
1094
+                    $s = spip_ucfirst(_T(
1095
+                        'date_fmt_jour_heure_debut_fin',
1096
+                        ['jour' => $s, 'heure_debut' => $hd, 'heure_fin' => $hf]
1097
+                    ));
1098
+                }
1099
+            }
1100
+        } else {
1101
+            if ($dtabbr && $dtstart) {
1102
+                $s = $dtstart . spip_ucfirst($s) . $dtabbr;
1103
+            } else {
1104
+                $s = spip_ucfirst($s);
1105
+            }
1106
+        }
1107
+    } else {
1108
+        if ((date('Y-m', $date_debut)) == date('Y-m', $date_fin)) { // meme annee et mois, jours differents
1109
+            if (!$h) {
1110
+                $date_debut = jour($d);
1111
+            } else {
1112
+                $date_debut = affdate_jourcourt($d, date('Y', $date_fin));
1113
+            }
1114
+            $date_fin = $affdate($f);
1115
+            if ($jour) {
1116
+                $nomjour_debut = nom_jour($d, $abbr);
1117
+                $date_debut = _T('date_fmt_jour', ['nomjour' => $nomjour_debut, 'jour' => $date_debut]);
1118
+                $nomjour_fin = nom_jour($f, $abbr);
1119
+                $date_fin = _T('date_fmt_jour', ['nomjour' => $nomjour_fin, 'jour' => $date_fin]);
1120
+            }
1121
+            if ($h) {
1122
+                $date_debut = _T('date_fmt_jour_heure', ['jour' => $date_debut, 'heure' => $hd]);
1123
+                $date_fin = _T('date_fmt_jour_heure', ['jour' => $date_fin, 'heure' => $hf]);
1124
+            }
1125
+            $date_debut = $dtstart . $date_debut . $dtabbr;
1126
+            $date_fin = $dtend . $date_fin . $dtabbr;
1127
+
1128
+            $s = _T('date_fmt_periode', ['date_debut' => $date_debut, 'date_fin' => $date_fin]);
1129
+        } else {
1130
+            $date_debut = affdate_jourcourt($d, date('Y', $date_fin));
1131
+            $date_fin = $affdate($f);
1132
+            if ($jour) {
1133
+                $nomjour_debut = nom_jour($d, $abbr);
1134
+                $date_debut = _T('date_fmt_jour', ['nomjour' => $nomjour_debut, 'jour' => $date_debut]);
1135
+                $nomjour_fin = nom_jour($f, $abbr);
1136
+                $date_fin = _T('date_fmt_jour', ['nomjour' => $nomjour_fin, 'jour' => $date_fin]);
1137
+            }
1138
+            if ($h) {
1139
+                $date_debut = _T('date_fmt_jour_heure', ['jour' => $date_debut, 'heure' => $hd]);
1140
+                $date_fin = _T('date_fmt_jour_heure', ['jour' => $date_fin, 'heure' => $hf]);
1141
+            }
1142
+
1143
+            $date_debut = $dtstart . $date_debut . $dtabbr;
1144
+            $date_fin = $dtend . $date_fin . $dtabbr;
1145
+            $s = _T('date_fmt_periode', ['date_debut' => $date_debut, 'date_fin' => $date_fin]);
1146
+        }
1147
+    }
1148
+
1149
+    return $s;
1150 1150
 }
1151 1151
 
1152 1152
 /**
@@ -1167,10 +1167,10 @@  discard block
 block discarded – undo
1167 1167
  *     Date au format ical
1168 1168
  **/
1169 1169
 function date_ical($date, $addminutes = 0): string {
1170
-	[$heures, $minutes, $secondes] = recup_heure($date);
1171
-	[$annee, $mois, $jour] = recup_date($date);
1170
+    [$heures, $minutes, $secondes] = recup_heure($date);
1171
+    [$annee, $mois, $jour] = recup_date($date);
1172 1172
 
1173
-	return gmdate('Ymd\THis\Z', mktime($heures, $minutes + $addminutes, $secondes, $mois, $jour, $annee));
1173
+    return gmdate('Ymd\THis\Z', mktime($heures, $minutes + $addminutes, $secondes, $mois, $jour, $annee));
1174 1174
 }
1175 1175
 
1176 1176
 
@@ -1194,14 +1194,14 @@  discard block
 block discarded – undo
1194 1194
  *     La date formatée
1195 1195
  **/
1196 1196
 function date_iso($date_heure): string {
1197
-	$date = recup_date($date_heure);
1198
-	$annee = $date[0] ?? null;
1199
-	$mois = $date[1] ?? null;
1200
-	$jour = $date[2] ?? null;
1201
-	[$heures, $minutes, $secondes] = recup_heure($date_heure);
1202
-	$time = @mktime($heures, $minutes, $secondes, $mois, $jour, $annee);
1203
-
1204
-	return gmdate('Y-m-d\TH:i:s\Z', $time);
1197
+    $date = recup_date($date_heure);
1198
+    $annee = $date[0] ?? null;
1199
+    $mois = $date[1] ?? null;
1200
+    $jour = $date[2] ?? null;
1201
+    [$heures, $minutes, $secondes] = recup_heure($date_heure);
1202
+    $time = @mktime($heures, $minutes, $secondes, $mois, $jour, $annee);
1203
+
1204
+    return gmdate('Y-m-d\TH:i:s\Z', $time);
1205 1205
 }
1206 1206
 
1207 1207
 /**
@@ -1224,11 +1224,11 @@  discard block
 block discarded – undo
1224 1224
  *     La date formatée
1225 1225
  **/
1226 1226
 function date_822($date_heure): string {
1227
-	[$annee, $mois, $jour] = recup_date($date_heure);
1228
-	[$heures, $minutes, $secondes] = recup_heure($date_heure);
1229
-	$time = mktime($heures, $minutes, $secondes, $mois, $jour, $annee);
1227
+    [$annee, $mois, $jour] = recup_date($date_heure);
1228
+    [$heures, $minutes, $secondes] = recup_heure($date_heure);
1229
+    $time = mktime($heures, $minutes, $secondes, $mois, $jour, $annee);
1230 1230
 
1231
-	return date('r', $time);
1231
+    return date('r', $time);
1232 1232
 }
1233 1233
 
1234 1234
 /**
@@ -1244,11 +1244,11 @@  discard block
 block discarded – undo
1244 1244
  *     Date au format `Ymd`
1245 1245
  **/
1246 1246
 function date_anneemoisjour($d): string {
1247
-	if (!$d) {
1248
-		$d = date('Y-m-d');
1249
-	}
1247
+    if (!$d) {
1248
+        $d = date('Y-m-d');
1249
+    }
1250 1250
 
1251
-	return substr($d, 0, 4) . substr($d, 5, 2) . substr($d, 8, 2);
1251
+    return substr($d, 0, 4) . substr($d, 5, 2) . substr($d, 8, 2);
1252 1252
 }
1253 1253
 
1254 1254
 /**
@@ -1264,11 +1264,11 @@  discard block
 block discarded – undo
1264 1264
  *     Date au format `Ym`
1265 1265
  **/
1266 1266
 function date_anneemois($d): string {
1267
-	if (!$d) {
1268
-		$d = date('Y-m-d');
1269
-	}
1267
+    if (!$d) {
1268
+        $d = date('Y-m-d');
1269
+    }
1270 1270
 
1271
-	return substr($d, 0, 4) . substr($d, 5, 2);
1271
+    return substr($d, 0, 4) . substr($d, 5, 2);
1272 1272
 }
1273 1273
 
1274 1274
 /**
@@ -1284,13 +1284,13 @@  discard block
 block discarded – undo
1284 1284
  *     Date au lundi de la même semaine au format `Ymd`
1285 1285
  **/
1286 1286
 function date_debut_semaine($annee, $mois, $jour): string {
1287
-	$w_day = date('w', mktime(0, 0, 0, $mois, $jour, $annee));
1288
-	if ($w_day == 0) {
1289
-		$w_day = 7;
1290
-	} // Gaffe: le dimanche est zero
1291
-	$debut = $jour - $w_day + 1;
1287
+    $w_day = date('w', mktime(0, 0, 0, $mois, $jour, $annee));
1288
+    if ($w_day == 0) {
1289
+        $w_day = 7;
1290
+    } // Gaffe: le dimanche est zero
1291
+    $debut = $jour - $w_day + 1;
1292 1292
 
1293
-	return date('Ymd', mktime(0, 0, 0, $mois, $debut, $annee));
1293
+    return date('Ymd', mktime(0, 0, 0, $mois, $debut, $annee));
1294 1294
 }
1295 1295
 
1296 1296
 /**
@@ -1306,11 +1306,11 @@  discard block
 block discarded – undo
1306 1306
  *     Date au dimanche de la même semaine au format `Ymd`
1307 1307
  **/
1308 1308
 function date_fin_semaine($annee, $mois, $jour): string {
1309
-	$w_day = date('w', mktime(0, 0, 0, $mois, $jour, $annee));
1310
-	if ($w_day == 0) {
1311
-		$w_day = 7;
1312
-	} // Gaffe: le dimanche est zero
1313
-	$debut = $jour - $w_day + 1;
1309
+    $w_day = date('w', mktime(0, 0, 0, $mois, $jour, $annee));
1310
+    if ($w_day == 0) {
1311
+        $w_day = 7;
1312
+    } // Gaffe: le dimanche est zero
1313
+    $debut = $jour - $w_day + 1;
1314 1314
 
1315
-	return date('Ymd', mktime(0, 0, 0, $mois, $debut + 6, $annee));
1315
+    return date('Ymd', mktime(0, 0, 0, $mois, $debut + 6, $annee));
1316 1316
 }
Please login to merge, or discard this patch.
ecrire/inc/acces.php 2 patches
Spacing   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -31,7 +31,7 @@  discard block
 block discarded – undo
31 31
  *     Mot de passe
32 32
  **/
33 33
 function creer_pass_aleatoire($longueur = 16, $sel = '') {
34
-	$seed = (int)round(((float)microtime() + 1) * time());
34
+	$seed = (int) round(((float) microtime() + 1) * time());
35 35
 
36 36
 	mt_srand($seed);
37 37
 	$s = '';
@@ -42,9 +42,9 @@  discard block
 block discarded – undo
42 42
 			if (!$s) {
43 43
 				$s = random_int(0, mt_getrandmax());
44 44
 			}
45
-			$s = substr(md5(uniqid($s) . $sel), 0, 16);
45
+			$s = substr(md5(uniqid($s).$sel), 0, 16);
46 46
 		}
47
-		$r = unpack('Cr', pack('H2', $s . $s));
47
+		$r = unpack('Cr', pack('H2', $s.$s));
48 48
 		$x = $r['r'] & 63;
49 49
 		if ($x < 10) {
50 50
 			$x = chr($x + 48);
@@ -82,7 +82,7 @@  discard block
 block discarded – undo
82 82
 	static $seeded;
83 83
 
84 84
 	if (!$seeded) {
85
-		$seed = (int)round(((float)microtime() + 1) * time());
85
+		$seed = (int) round(((float) microtime() + 1) * time());
86 86
 		mt_srand($seed);
87 87
 		$seeded = true;
88 88
 	}
@@ -168,10 +168,10 @@  discard block
 block discarded – undo
168 168
 			ecrire_meta('low_sec', $low_sec = creer_pass_aleatoire());
169 169
 		}
170 170
 	} else {
171
-		$low_sec = sql_getfetsel('low_sec', 'spip_auteurs', 'id_auteur = ' . intval($id_auteur));
171
+		$low_sec = sql_getfetsel('low_sec', 'spip_auteurs', 'id_auteur = '.intval($id_auteur));
172 172
 		if (!$low_sec) {
173 173
 			$low_sec = creer_pass_aleatoire();
174
-			sql_updateq('spip_auteurs', ['low_sec' => $low_sec], 'id_auteur = ' . intval($id_auteur));
174
+			sql_updateq('spip_auteurs', ['low_sec' => $low_sec], 'id_auteur = '.intval($id_auteur));
175 175
 		}
176 176
 	}
177 177
 
@@ -229,7 +229,7 @@  discard block
 block discarded – undo
229 229
 function generer_url_api_low_sec(string $script, string $format, string $fond, string $path, string $args, bool $no_entities = false, ?bool $public = null) {
230 230
 	$id_auteur = $GLOBALS['visiteur_session']['id_auteur'] ?? 0;
231 231
 	$cle = afficher_low_sec($id_auteur, "$script/$format $fond $args");
232
-	$path = "$id_auteur/$cle/$format/$fond" . ($path ? "/$path" : '');
232
+	$path = "$id_auteur/$cle/$format/$fond".($path ? "/$path" : '');
233 233
 
234 234
 	return generer_url_api($script, $path, $args, $no_entities = false, $public);
235 235
 }
@@ -253,9 +253,9 @@  discard block
 block discarded – undo
253 253
 	foreach ($args as $val => $var) {
254 254
 		if ($var) {
255 255
 			if ($val <> 'statut') {
256
-				$a .= ':' . $val . '-' . $var;
256
+				$a .= ':'.$val.'-'.$var;
257 257
 			}
258
-			$b .= $val . '=' . $var . '&';
258
+			$b .= $val.'='.$var.'&';
259 259
 		}
260 260
 	}
261 261
 	$a = substr($a, 1);
@@ -285,7 +285,7 @@  discard block
 block discarded – undo
285 285
  *     Clé
286 286
  **/
287 287
 function afficher_low_sec($id_auteur, $action = '') {
288
-	return substr(md5($action . low_sec($id_auteur)), 0, 8);
288
+	return substr(md5($action.low_sec($id_auteur)), 0, 8);
289 289
 }
290 290
 
291 291
 /**
@@ -316,7 +316,7 @@  discard block
 block discarded – undo
316 316
 	if (!$id_auteur = intval($id_auteur)) {
317 317
 		return;
318 318
 	} // jamais trop prudent ;)
319
-	sql_updateq('spip_auteurs', ['low_sec' => ''], 'id_auteur = ' . intval($id_auteur));
319
+	sql_updateq('spip_auteurs', ['low_sec' => ''], 'id_auteur = '.intval($id_auteur));
320 320
 }
321 321
 
322 322
 
@@ -334,8 +334,8 @@  discard block
 block discarded – undo
334 334
  *     - void sinon.
335 335
  **/
336 336
 function ecrire_acces() {
337
-	$htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
338
-	$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
337
+	$htaccess = _DIR_RESTREINT._ACCESS_FILE_NAME;
338
+	$htpasswd = _DIR_TMP._AUTH_USER_FILE;
339 339
 
340 340
 	// Cette variable de configuration peut etre posee par un plugin
341 341
 	// par exemple acces_restreint ;
@@ -346,7 +346,7 @@  discard block
 block discarded – undo
346 346
 		and !@file_exists($htaccess)
347 347
 	) {
348 348
 		spip_unlink($htpasswd);
349
-		spip_unlink($htpasswd . '-admin');
349
+		spip_unlink($htpasswd.'-admin');
350 350
 		return;
351 351
 	}
352 352
 
@@ -374,10 +374,10 @@  discard block
 block discarded – undo
374 374
 	$pwd_all = ''; // login:htpass pour tous
375 375
 	$pwd_admin = ''; // login:htpass pour les admins
376 376
 
377
-	$res = sql_select('login, htpass, statut', 'spip_auteurs', "htpass!='' AND login!='' AND " . sql_in('statut', ['1comite', '0minirezo', 'nouveau']));
377
+	$res = sql_select('login, htpass, statut', 'spip_auteurs', "htpass!='' AND login!='' AND ".sql_in('statut', ['1comite', '0minirezo', 'nouveau']));
378 378
 	while ($row = sql_fetch($res)) {
379 379
 		if (strlen($row['login']) and strlen($row['htpass'])) {
380
-			$ligne = $row['login'] . ':' . $row['htpass'] . "\n";
380
+			$ligne = $row['login'].':'.$row['htpass']."\n";
381 381
 			$pwd_all .= $ligne;
382 382
 			if ($row['statut'] == '0minirezo') {
383 383
 				$pwd_admin .= $ligne;
@@ -420,7 +420,7 @@  discard block
 block discarded – undo
420 420
  * @return boolean
421 421
  */
422 422
 function verifier_htaccess($rep, $force = false) {
423
-	$htaccess = rtrim($rep, '/') . '/' . _ACCESS_FILE_NAME;
423
+	$htaccess = rtrim($rep, '/').'/'._ACCESS_FILE_NAME;
424 424
 	if (((@file_exists($htaccess)) or defined('_TEST_DIRS')) and !$force) {
425 425
 		return true;
426 426
 	}
@@ -449,17 +449,17 @@  discard block
 block discarded – undo
449 449
 		fputs($ht, $deny);
450 450
 		fclose($ht);
451 451
 		@chmod($htaccess, _SPIP_CHMOD & 0666);
452
-		$t = rtrim($rep, '/') . '/.ok';
452
+		$t = rtrim($rep, '/').'/.ok';
453 453
 		if ($ht = @fopen($t, 'w')) {
454 454
 			@fclose($ht);
455 455
 			include_spip('inc/distant');
456 456
 			$t = substr($t, strlen(_DIR_RACINE));
457
-			$t = url_de_base() . $t;
457
+			$t = url_de_base().$t;
458 458
 			$ht = recuperer_url($t, ['methode' => 'HEAD', 'taille_max' => 0, 'follow_location' => false]);
459 459
 			$ht = ($ht['status'] ?? null) === 403;
460 460
 		}
461 461
 	}
462
-	spip_log("Creation de $htaccess " . ($ht ? ' reussie' : ' manquee'));
462
+	spip_log("Creation de $htaccess ".($ht ? ' reussie' : ' manquee'));
463 463
 
464 464
 	return $ht;
465 465
 }
@@ -485,11 +485,11 @@  discard block
 block discarded – undo
485 485
 	$dirs = sql_allfetsel('extension', 'spip_types_documents');
486 486
 	$dirs[] = ['extension' => 'distant'];
487 487
 	foreach ($dirs as $e) {
488
-		if (is_dir($dir = _DIR_IMG . $e['extension'])) {
488
+		if (is_dir($dir = _DIR_IMG.$e['extension'])) {
489 489
 			if ($f) {
490 490
 				verifier_htaccess($dir);
491 491
 			} else {
492
-				spip_unlink($dir . '/' . _ACCESS_FILE_NAME);
492
+				spip_unlink($dir.'/'._ACCESS_FILE_NAME);
493 493
 			}
494 494
 		}
495 495
 	}
Please login to merge, or discard this patch.
Indentation   +234 added lines, -234 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -30,46 +30,46 @@  discard block
 block discarded – undo
30 30
  *     Mot de passe
31 31
  **/
32 32
 function creer_pass_aleatoire($longueur = 16, $sel = '') {
33
-	$seed = (int)round(((float)microtime() + 1) * time());
34
-
35
-	mt_srand($seed);
36
-	$s = '';
37
-	$pass = '';
38
-	for ($i = 0; $i < $longueur; $i++) {
39
-		if (!$s) {
40
-			$s = random_int(0, mt_getrandmax());
41
-			if (!$s) {
42
-				$s = random_int(0, mt_getrandmax());
43
-			}
44
-			$s = substr(md5(uniqid($s) . $sel), 0, 16);
45
-		}
46
-		$r = unpack('Cr', pack('H2', $s . $s));
47
-		$x = $r['r'] & 63;
48
-		if ($x < 10) {
49
-			$x = chr($x + 48);
50
-		} else {
51
-			if ($x < 36) {
52
-				$x = chr($x + 55);
53
-			} else {
54
-				if ($x < 62) {
55
-					$x = chr($x + 61);
56
-				} else {
57
-					if ($x == 63) {
58
-						$x = '/';
59
-					} else {
60
-						$x = '.';
61
-					}
62
-				}
63
-			}
64
-		}
65
-		$pass .= $x;
66
-		$s = substr($s, 2);
67
-	}
68
-	$pass = preg_replace('@[./]@', 'a', $pass);
69
-	$pass = preg_replace('@[I1l]@', 'L', $pass);
70
-	$pass = preg_replace('@[0O]@', 'o', $pass);
71
-
72
-	return $pass;
33
+    $seed = (int)round(((float)microtime() + 1) * time());
34
+
35
+    mt_srand($seed);
36
+    $s = '';
37
+    $pass = '';
38
+    for ($i = 0; $i < $longueur; $i++) {
39
+        if (!$s) {
40
+            $s = random_int(0, mt_getrandmax());
41
+            if (!$s) {
42
+                $s = random_int(0, mt_getrandmax());
43
+            }
44
+            $s = substr(md5(uniqid($s) . $sel), 0, 16);
45
+        }
46
+        $r = unpack('Cr', pack('H2', $s . $s));
47
+        $x = $r['r'] & 63;
48
+        if ($x < 10) {
49
+            $x = chr($x + 48);
50
+        } else {
51
+            if ($x < 36) {
52
+                $x = chr($x + 55);
53
+            } else {
54
+                if ($x < 62) {
55
+                    $x = chr($x + 61);
56
+                } else {
57
+                    if ($x == 63) {
58
+                        $x = '/';
59
+                    } else {
60
+                        $x = '.';
61
+                    }
62
+                }
63
+            }
64
+        }
65
+        $pass .= $x;
66
+        $s = substr($s, 2);
67
+    }
68
+    $pass = preg_replace('@[./]@', 'a', $pass);
69
+    $pass = preg_replace('@[I1l]@', 'L', $pass);
70
+    $pass = preg_replace('@[0O]@', 'o', $pass);
71
+
72
+    return $pass;
73 73
 }
74 74
 
75 75
 /**
@@ -78,20 +78,20 @@  discard block
 block discarded – undo
78 78
  * @return string Identifiant
79 79
  */
80 80
 function creer_uniqid() {
81
-	static $seeded;
81
+    static $seeded;
82 82
 
83
-	if (!$seeded) {
84
-		$seed = (int)round(((float)microtime() + 1) * time());
85
-		mt_srand($seed);
86
-		$seeded = true;
87
-	}
83
+    if (!$seeded) {
84
+        $seed = (int)round(((float)microtime() + 1) * time());
85
+        mt_srand($seed);
86
+        $seeded = true;
87
+    }
88 88
 
89
-	$s = random_int(0, mt_getrandmax());
90
-	if (!$s) {
91
-		$s = random_int(0, mt_getrandmax());
92
-	}
89
+    $s = random_int(0, mt_getrandmax());
90
+    if (!$s) {
91
+        $s = random_int(0, mt_getrandmax());
92
+    }
93 93
 
94
-	return uniqid($s, 1);
94
+    return uniqid($s, 1);
95 95
 }
96 96
 
97 97
 /**
@@ -105,42 +105,42 @@  discard block
 block discarded – undo
105 105
  * @return string Retourne l'alea éphemère actuel au passage
106 106
  */
107 107
 function charger_aleas() {
108
-	if (!isset($GLOBALS['meta']['alea_ephemere'])) {
109
-		include_spip('base/abstract_sql');
110
-		$aleas = sql_allfetsel(
111
-			['nom', 'valeur'],
112
-			'spip_meta',
113
-			sql_in('nom', ['alea_ephemere', 'alea_ephemere_ancien']),
114
-			'',
115
-			'',
116
-			'',
117
-			'',
118
-			'',
119
-			'continue'
120
-		);
121
-		if ($aleas) {
122
-			foreach ($aleas as $a) {
123
-				$GLOBALS['meta'][$a['nom']] = $a['valeur'];
124
-			}
125
-			return $GLOBALS['meta']['alea_ephemere'];
126
-		} else {
127
-			spip_log('aleas indisponibles', 'session');
128
-			return '';
129
-		}
130
-	}
131
-	return $GLOBALS['meta']['alea_ephemere'];
108
+    if (!isset($GLOBALS['meta']['alea_ephemere'])) {
109
+        include_spip('base/abstract_sql');
110
+        $aleas = sql_allfetsel(
111
+            ['nom', 'valeur'],
112
+            'spip_meta',
113
+            sql_in('nom', ['alea_ephemere', 'alea_ephemere_ancien']),
114
+            '',
115
+            '',
116
+            '',
117
+            '',
118
+            '',
119
+            'continue'
120
+        );
121
+        if ($aleas) {
122
+            foreach ($aleas as $a) {
123
+                $GLOBALS['meta'][$a['nom']] = $a['valeur'];
124
+            }
125
+            return $GLOBALS['meta']['alea_ephemere'];
126
+        } else {
127
+            spip_log('aleas indisponibles', 'session');
128
+            return '';
129
+        }
130
+    }
131
+    return $GLOBALS['meta']['alea_ephemere'];
132 132
 }
133 133
 
134 134
 /**
135 135
  * Renouveller l'alea (utilisé pour sécuriser les scripts du répertoire `action/`)
136 136
  **/
137 137
 function renouvelle_alea() {
138
-	charger_aleas();
139
-	ecrire_meta('alea_ephemere_ancien', @$GLOBALS['meta']['alea_ephemere'], 'non');
140
-	$GLOBALS['meta']['alea_ephemere'] = md5(creer_uniqid());
141
-	ecrire_meta('alea_ephemere', $GLOBALS['meta']['alea_ephemere'], 'non');
142
-	ecrire_meta('alea_ephemere_date', time(), 'non');
143
-	spip_log("renouvellement de l'alea_ephemere");
138
+    charger_aleas();
139
+    ecrire_meta('alea_ephemere_ancien', @$GLOBALS['meta']['alea_ephemere'], 'non');
140
+    $GLOBALS['meta']['alea_ephemere'] = md5(creer_uniqid());
141
+    ecrire_meta('alea_ephemere', $GLOBALS['meta']['alea_ephemere'], 'non');
142
+    ecrire_meta('alea_ephemere_date', time(), 'non');
143
+    spip_log("renouvellement de l'alea_ephemere");
144 144
 }
145 145
 
146 146
 
@@ -160,21 +160,21 @@  discard block
 block discarded – undo
160 160
  *     Clé de sécurité.
161 161
  **/
162 162
 function low_sec($id_auteur) {
163
-	// Pas d'id_auteur : low_sec
164
-	if (!$id_auteur = intval($id_auteur)) {
165
-		include_spip('inc/config');
166
-		if (!$low_sec = lire_config('low_sec')) {
167
-			ecrire_meta('low_sec', $low_sec = creer_pass_aleatoire());
168
-		}
169
-	} else {
170
-		$low_sec = sql_getfetsel('low_sec', 'spip_auteurs', 'id_auteur = ' . intval($id_auteur));
171
-		if (!$low_sec) {
172
-			$low_sec = creer_pass_aleatoire();
173
-			sql_updateq('spip_auteurs', ['low_sec' => $low_sec], 'id_auteur = ' . intval($id_auteur));
174
-		}
175
-	}
176
-
177
-	return $low_sec;
163
+    // Pas d'id_auteur : low_sec
164
+    if (!$id_auteur = intval($id_auteur)) {
165
+        include_spip('inc/config');
166
+        if (!$low_sec = lire_config('low_sec')) {
167
+            ecrire_meta('low_sec', $low_sec = creer_pass_aleatoire());
168
+        }
169
+    } else {
170
+        $low_sec = sql_getfetsel('low_sec', 'spip_auteurs', 'id_auteur = ' . intval($id_auteur));
171
+        if (!$low_sec) {
172
+            $low_sec = creer_pass_aleatoire();
173
+            sql_updateq('spip_auteurs', ['low_sec' => $low_sec], 'id_auteur = ' . intval($id_auteur));
174
+        }
175
+    }
176
+
177
+    return $low_sec;
178 178
 }
179 179
 
180 180
 
@@ -207,11 +207,11 @@  discard block
 block discarded – undo
207 207
  * @filtre
208 208
  */
209 209
 function securiser_acces_low_sec($id_auteur, #[\SensitiveParameter] $cle, $dir, $op = '', $args = '') {
210
-	if ($op) {
211
-		$dir .= " $op $args";
212
-	}
210
+    if ($op) {
211
+        $dir .= " $op $args";
212
+    }
213 213
 
214
-	return verifier_low_sec($id_auteur, $cle, $dir);
214
+    return verifier_low_sec($id_auteur, $cle, $dir);
215 215
 }
216 216
 
217 217
 /**
@@ -226,11 +226,11 @@  discard block
 block discarded – undo
226 226
  * @return string
227 227
  */
228 228
 function generer_url_api_low_sec(string $script, string $format, string $fond, string $path, string $args, bool $no_entities = false, ?bool $public = null) {
229
-	$id_auteur = $GLOBALS['visiteur_session']['id_auteur'] ?? 0;
230
-	$cle = afficher_low_sec($id_auteur, "$script/$format $fond $args");
231
-	$path = "$id_auteur/$cle/$format/$fond" . ($path ? "/$path" : '');
229
+    $id_auteur = $GLOBALS['visiteur_session']['id_auteur'] ?? 0;
230
+    $cle = afficher_low_sec($id_auteur, "$script/$format $fond $args");
231
+    $path = "$id_auteur/$cle/$format/$fond" . ($path ? "/$path" : '');
232 232
 
233
-	return generer_url_api($script, $path, $args, $no_entities = false, $public);
233
+    return generer_url_api($script, $path, $args, $no_entities = false, $public);
234 234
 }
235 235
 
236 236
 
@@ -248,27 +248,27 @@  discard block
 block discarded – undo
248 248
  * @deprecated 4.1
249 249
  */
250 250
 function param_low_sec($op, $args = [], $lang = '', $mime = 'rss') {
251
-	$a = $b = '';
252
-	foreach ($args as $val => $var) {
253
-		if ($var) {
254
-			if ($val <> 'statut') {
255
-				$a .= ':' . $val . '-' . $var;
256
-			}
257
-			$b .= $val . '=' . $var . '&';
258
-		}
259
-	}
260
-	$a = substr($a, 1);
261
-	$id = intval(@$GLOBALS['connect_id_auteur']);
262
-
263
-	return $b
264
-	. 'op='
265
-	. $op
266
-	. '&id='
267
-	. $id
268
-	. '&cle='
269
-	. afficher_low_sec($id, "$mime $op $a")
270
-	. (!$a ? '' : "&args=$a")
271
-	. (!$lang ? '' : "&lang=$lang");
251
+    $a = $b = '';
252
+    foreach ($args as $val => $var) {
253
+        if ($var) {
254
+            if ($val <> 'statut') {
255
+                $a .= ':' . $val . '-' . $var;
256
+            }
257
+            $b .= $val . '=' . $var . '&';
258
+        }
259
+    }
260
+    $a = substr($a, 1);
261
+    $id = intval(@$GLOBALS['connect_id_auteur']);
262
+
263
+    return $b
264
+    . 'op='
265
+    . $op
266
+    . '&id='
267
+    . $id
268
+    . '&cle='
269
+    . afficher_low_sec($id, "$mime $op $a")
270
+    . (!$a ? '' : "&args=$a")
271
+    . (!$lang ? '' : "&lang=$lang");
272 272
 }
273 273
 
274 274
 /**
@@ -284,7 +284,7 @@  discard block
 block discarded – undo
284 284
  *     Clé
285 285
  **/
286 286
 function afficher_low_sec($id_auteur, $action = '') {
287
-	return substr(md5($action . low_sec($id_auteur)), 0, 8);
287
+    return substr(md5($action . low_sec($id_auteur)), 0, 8);
288 288
 }
289 289
 
290 290
 /**
@@ -302,7 +302,7 @@  discard block
 block discarded – undo
302 302
  *     true si les clés corresponde, false sinon
303 303
  **/
304 304
 function verifier_low_sec($id_auteur, #[\SensitiveParameter] $cle, $action = '') {
305
-	return ($cle == afficher_low_sec($id_auteur, $action));
305
+    return ($cle == afficher_low_sec($id_auteur, $action));
306 306
 }
307 307
 
308 308
 /**
@@ -312,10 +312,10 @@  discard block
 block discarded – undo
312 312
  *     Identifiant de l'auteur
313 313
  **/
314 314
 function effacer_low_sec($id_auteur) {
315
-	if (!$id_auteur = intval($id_auteur)) {
316
-		return;
317
-	} // jamais trop prudent ;)
318
-	sql_updateq('spip_auteurs', ['low_sec' => ''], 'id_auteur = ' . intval($id_auteur));
315
+    if (!$id_auteur = intval($id_auteur)) {
316
+        return;
317
+    } // jamais trop prudent ;)
318
+    sql_updateq('spip_auteurs', ['low_sec' => ''], 'id_auteur = ' . intval($id_auteur));
319 319
 }
320 320
 
321 321
 
@@ -333,31 +333,31 @@  discard block
 block discarded – undo
333 333
  *     - void sinon.
334 334
  **/
335 335
 function ecrire_acces() {
336
-	$htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
337
-	$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
338
-
339
-	// Cette variable de configuration peut etre posee par un plugin
340
-	// par exemple acces_restreint ;
341
-	// si .htaccess existe, outrepasser spip_meta
342
-	if (
343
-		(!isset($GLOBALS['meta']['creer_htpasswd'])
344
-			or ($GLOBALS['meta']['creer_htpasswd'] != 'oui'))
345
-		and !@file_exists($htaccess)
346
-	) {
347
-		spip_unlink($htpasswd);
348
-		spip_unlink($htpasswd . '-admin');
349
-		return;
350
-	}
351
-
352
-	# remarque : ici on laisse passer les "nouveau" de maniere a leur permettre
353
-	# de devenir redacteur le cas echeant (auth http)... a nettoyer
354
-	// attention, il faut au prealable se connecter a la base (necessaire car utilise par install)
355
-	// TODO: factoriser avec auth/spip qui fait deja ce job et generaliser le test auth_ldap_connect()
356
-	if (include_spip('auth/ldap') and auth_ldap_connect()) {
357
-		return;
358
-	}
359
-
360
-	generer_htpasswd_files($htpasswd, "$htpasswd-admin");
336
+    $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
337
+    $htpasswd = _DIR_TMP . _AUTH_USER_FILE;
338
+
339
+    // Cette variable de configuration peut etre posee par un plugin
340
+    // par exemple acces_restreint ;
341
+    // si .htaccess existe, outrepasser spip_meta
342
+    if (
343
+        (!isset($GLOBALS['meta']['creer_htpasswd'])
344
+            or ($GLOBALS['meta']['creer_htpasswd'] != 'oui'))
345
+        and !@file_exists($htaccess)
346
+    ) {
347
+        spip_unlink($htpasswd);
348
+        spip_unlink($htpasswd . '-admin');
349
+        return;
350
+    }
351
+
352
+    # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre
353
+    # de devenir redacteur le cas echeant (auth http)... a nettoyer
354
+    // attention, il faut au prealable se connecter a la base (necessaire car utilise par install)
355
+    // TODO: factoriser avec auth/spip qui fait deja ce job et generaliser le test auth_ldap_connect()
356
+    if (include_spip('auth/ldap') and auth_ldap_connect()) {
357
+        return;
358
+    }
359
+
360
+    generer_htpasswd_files($htpasswd, "$htpasswd-admin");
361 361
 }
362 362
 
363 363
 /**
@@ -366,29 +366,29 @@  discard block
 block discarded – undo
366 366
  * @param $htpasswd_admin
367 367
  */
368 368
 function generer_htpasswd_files($htpasswd, $htpasswd_admin) {
369
-	if ($generer_htpasswd = charger_fonction('generer_htpasswd_files', 'inc', true)) {
370
-		$generer_htpasswd($htpasswd, $htpasswd_admin);
371
-	}
372
-
373
-	$pwd_all = ''; // login:htpass pour tous
374
-	$pwd_admin = ''; // login:htpass pour les admins
375
-
376
-	$res = sql_select('login, htpass, statut', 'spip_auteurs', "htpass!='' AND login!='' AND " . sql_in('statut', ['1comite', '0minirezo', 'nouveau']));
377
-	while ($row = sql_fetch($res)) {
378
-		if (strlen($row['login']) and strlen($row['htpass'])) {
379
-			$ligne = $row['login'] . ':' . $row['htpass'] . "\n";
380
-			$pwd_all .= $ligne;
381
-			if ($row['statut'] == '0minirezo') {
382
-				$pwd_admin .= $ligne;
383
-			}
384
-		}
385
-	}
386
-
387
-	if ($pwd_all) {
388
-		ecrire_fichier($htpasswd, $pwd_all);
389
-		ecrire_fichier($htpasswd_admin, $pwd_admin);
390
-		spip_log("Ecriture de $htpasswd et $htpasswd_admin", 'htpass');
391
-	}
369
+    if ($generer_htpasswd = charger_fonction('generer_htpasswd_files', 'inc', true)) {
370
+        $generer_htpasswd($htpasswd, $htpasswd_admin);
371
+    }
372
+
373
+    $pwd_all = ''; // login:htpass pour tous
374
+    $pwd_admin = ''; // login:htpass pour les admins
375
+
376
+    $res = sql_select('login, htpass, statut', 'spip_auteurs', "htpass!='' AND login!='' AND " . sql_in('statut', ['1comite', '0minirezo', 'nouveau']));
377
+    while ($row = sql_fetch($res)) {
378
+        if (strlen($row['login']) and strlen($row['htpass'])) {
379
+            $ligne = $row['login'] . ':' . $row['htpass'] . "\n";
380
+            $pwd_all .= $ligne;
381
+            if ($row['statut'] == '0minirezo') {
382
+                $pwd_admin .= $ligne;
383
+            }
384
+        }
385
+    }
386
+
387
+    if ($pwd_all) {
388
+        ecrire_fichier($htpasswd, $pwd_all);
389
+        ecrire_fichier($htpasswd_admin, $pwd_admin);
390
+        spip_log("Ecriture de $htpasswd et $htpasswd_admin", 'htpass');
391
+    }
392 392
 }
393 393
 
394 394
 /**
@@ -402,11 +402,11 @@  discard block
 block discarded – undo
402 402
  *  La chaîne hachée si fonction crypt présente, rien sinon.
403 403
  */
404 404
 function generer_htpass(#[\SensitiveParameter] $pass) {
405
-	if ($generer_htpass = charger_fonction('generer_htpass', 'inc', true)) {
406
-		return $generer_htpass($pass);
407
-	}
405
+    if ($generer_htpass = charger_fonction('generer_htpass', 'inc', true)) {
406
+        return $generer_htpass($pass);
407
+    }
408 408
 
409
-	return '';
409
+    return '';
410 410
 }
411 411
 
412 412
 /**
@@ -419,14 +419,14 @@  discard block
 block discarded – undo
419 419
  * @return boolean
420 420
  */
421 421
 function verifier_htaccess($rep, $force = false) {
422
-	$htaccess = rtrim($rep, '/') . '/' . _ACCESS_FILE_NAME;
423
-	if (((@file_exists($htaccess)) or defined('_TEST_DIRS')) and !$force) {
424
-		return true;
425
-	}
426
-
427
-	// directive deny compatible Apache 2.0+
428
-	$deny =
429
-		'# Deny all requests from Apache 2.4+.
422
+    $htaccess = rtrim($rep, '/') . '/' . _ACCESS_FILE_NAME;
423
+    if (((@file_exists($htaccess)) or defined('_TEST_DIRS')) and !$force) {
424
+        return true;
425
+    }
426
+
427
+    // directive deny compatible Apache 2.0+
428
+    $deny =
429
+        '# Deny all requests from Apache 2.4+.
430 430
 <IfModule mod_authz_core.c>
431 431
   Require all denied
432 432
 </IfModule>
@@ -435,32 +435,32 @@  discard block
 block discarded – undo
435 435
   Deny from all
436 436
 </IfModule>
437 437
 ';
438
-	// support des vieilles versions Apache 1.x mais uniquement si elles l'annoncent (pas en mode PROD)
439
-	if (
440
-		function_exists('apache_get_version')
441
-		and $v = apache_get_version()
442
-		and strncmp($v, 'Apache/1.', 9) == 0
443
-	) {
444
-		$deny = "deny from all\n";
445
-	}
446
-
447
-	if ($ht = @fopen($htaccess, 'w')) {
448
-		fputs($ht, $deny);
449
-		fclose($ht);
450
-		@chmod($htaccess, _SPIP_CHMOD & 0666);
451
-		$t = rtrim($rep, '/') . '/.ok';
452
-		if ($ht = @fopen($t, 'w')) {
453
-			@fclose($ht);
454
-			include_spip('inc/distant');
455
-			$t = substr($t, strlen(_DIR_RACINE));
456
-			$t = url_de_base() . $t;
457
-			$ht = recuperer_url($t, ['methode' => 'HEAD', 'taille_max' => 0, 'follow_location' => false]);
458
-			$ht = ($ht['status'] ?? null) === 403;
459
-		}
460
-	}
461
-	spip_log("Creation de $htaccess " . ($ht ? ' reussie' : ' manquee'));
462
-
463
-	return $ht;
438
+    // support des vieilles versions Apache 1.x mais uniquement si elles l'annoncent (pas en mode PROD)
439
+    if (
440
+        function_exists('apache_get_version')
441
+        and $v = apache_get_version()
442
+        and strncmp($v, 'Apache/1.', 9) == 0
443
+    ) {
444
+        $deny = "deny from all\n";
445
+    }
446
+
447
+    if ($ht = @fopen($htaccess, 'w')) {
448
+        fputs($ht, $deny);
449
+        fclose($ht);
450
+        @chmod($htaccess, _SPIP_CHMOD & 0666);
451
+        $t = rtrim($rep, '/') . '/.ok';
452
+        if ($ht = @fopen($t, 'w')) {
453
+            @fclose($ht);
454
+            include_spip('inc/distant');
455
+            $t = substr($t, strlen(_DIR_RACINE));
456
+            $t = url_de_base() . $t;
457
+            $ht = recuperer_url($t, ['methode' => 'HEAD', 'taille_max' => 0, 'follow_location' => false]);
458
+            $ht = ($ht['status'] ?? null) === 403;
459
+        }
460
+    }
461
+    spip_log("Creation de $htaccess " . ($ht ? ' reussie' : ' manquee'));
462
+
463
+    return $ht;
464 464
 }
465 465
 
466 466
 /**
@@ -478,20 +478,20 @@  discard block
 block discarded – undo
478 478
  *         Valeur de la configuration `creer_htaccess`
479 479
  */
480 480
 function gerer_htaccess() {
481
-	// Cette variable de configuration peut etre posee par un plugin
482
-	// par exemple acces_restreint
483
-	$f = (isset($GLOBALS['meta']['creer_htaccess']) and ($GLOBALS['meta']['creer_htaccess'] === 'oui'));
484
-	$dirs = sql_allfetsel('extension', 'spip_types_documents');
485
-	$dirs[] = ['extension' => 'distant'];
486
-	foreach ($dirs as $e) {
487
-		if (is_dir($dir = _DIR_IMG . $e['extension'])) {
488
-			if ($f) {
489
-				verifier_htaccess($dir);
490
-			} else {
491
-				spip_unlink($dir . '/' . _ACCESS_FILE_NAME);
492
-			}
493
-		}
494
-	}
495
-
496
-	return $GLOBALS['meta']['creer_htaccess'] ?? '';
481
+    // Cette variable de configuration peut etre posee par un plugin
482
+    // par exemple acces_restreint
483
+    $f = (isset($GLOBALS['meta']['creer_htaccess']) and ($GLOBALS['meta']['creer_htaccess'] === 'oui'));
484
+    $dirs = sql_allfetsel('extension', 'spip_types_documents');
485
+    $dirs[] = ['extension' => 'distant'];
486
+    foreach ($dirs as $e) {
487
+        if (is_dir($dir = _DIR_IMG . $e['extension'])) {
488
+            if ($f) {
489
+                verifier_htaccess($dir);
490
+            } else {
491
+                spip_unlink($dir . '/' . _ACCESS_FILE_NAME);
492
+            }
493
+        }
494
+    }
495
+
496
+    return $GLOBALS['meta']['creer_htaccess'] ?? '';
497 497
 }
Please login to merge, or discard this patch.
ecrire/inc/config.php 3 patches
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -312,8 +312,7 @@
 block discarded – undo
312 312
 					ecrire_meta($casier, $serialized_store, null, $table);
313 313
 				}
314 314
 			}
315
-		}
316
-		else {
315
+		} else {
317 316
 			ecrire_meta($casier, $store, null, $table);
318 317
 		}
319 318
 	}
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -303,9 +303,9 @@
 block discarded – undo
303 303
 			// et dans ce cas il faut verifier que l'ecriture en base a bien eu lieu a l'identique si il y a des planes dans la chaine
304 304
 			// car sinon ca casse le serialize PHP - par exemple si on est en mysql utf8 (non mb4)
305 305
 			if ($has_planes) {
306
-				$check_store = sql_getfetsel('valeur', 'spip_' . $table, 'nom=' . sql_quote($casier));
306
+				$check_store = sql_getfetsel('valeur', 'spip_'.$table, 'nom='.sql_quote($casier));
307 307
 				if ($check_store !== $serialized_store) {
308
-					array_walk_recursive($store, function (&$value, $key) {
308
+					array_walk_recursive($store, function(&$value, $key) {
309 309
 						if (is_string($value)) {
310 310
 							$value = utf8_noplanes($value);
311 311
 						}
Please login to merge, or discard this patch.
Indentation   +352 added lines, -352 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -28,7 +28,7 @@  discard block
 block discarded – undo
28 28
  * @return void
29 29
  */
30 30
 function inc_config_dist() {
31
-	actualise_metas(liste_metas());
31
+    actualise_metas(liste_metas());
32 32
 }
33 33
 
34 34
 /**
@@ -45,34 +45,34 @@  discard block
 block discarded – undo
45 45
  *     Liste (table, casier, sous_casier)
46 46
  */
47 47
 function expliquer_config($cfg) {
48
-	// par defaut, sur la table des meta
49
-	$table = 'meta';
50
-	$casier = null;
51
-	$sous_casier = [];
52
-	$cfg = explode('/', $cfg);
53
-
54
-	// si le premier argument est vide, c'est une syntaxe /table/ ou un appel vide ''
55
-	if (!reset($cfg) and count($cfg) > 1) {
56
-		array_shift($cfg);
57
-		$table = array_shift($cfg);
58
-		if (!isset($GLOBALS[$table])) {
59
-			lire_metas($table);
60
-		}
61
-	}
62
-
63
-	// si on a demande #CONFIG{/meta,'',0}
64
-	if (count($cfg)) {
65
-		// pas sur un appel vide ''
66
-		if ('' !== ($c = array_shift($cfg))) {
67
-			$casier = $c;
68
-		}
69
-	}
70
-
71
-	if (count($cfg)) {
72
-		$sous_casier = $cfg;
73
-	}
74
-
75
-	return [$table, $casier, $sous_casier];
48
+    // par defaut, sur la table des meta
49
+    $table = 'meta';
50
+    $casier = null;
51
+    $sous_casier = [];
52
+    $cfg = explode('/', $cfg);
53
+
54
+    // si le premier argument est vide, c'est une syntaxe /table/ ou un appel vide ''
55
+    if (!reset($cfg) and count($cfg) > 1) {
56
+        array_shift($cfg);
57
+        $table = array_shift($cfg);
58
+        if (!isset($GLOBALS[$table])) {
59
+            lire_metas($table);
60
+        }
61
+    }
62
+
63
+    // si on a demande #CONFIG{/meta,'',0}
64
+    if (count($cfg)) {
65
+        // pas sur un appel vide ''
66
+        if ('' !== ($c = array_shift($cfg))) {
67
+            $casier = $c;
68
+        }
69
+    }
70
+
71
+    if (count($cfg)) {
72
+        $sous_casier = $cfg;
73
+    }
74
+
75
+    return [$table, $casier, $sous_casier];
76 76
 }
77 77
 
78 78
 /**
@@ -100,65 +100,65 @@  discard block
 block discarded – undo
100 100
  *    Contenu de la configuration obtenue
101 101
  */
102 102
 function lire_config($cfg = '', $def = null, $unserialize = true) {
103
-	// lire le stockage sous la forme /table/valeur
104
-	// ou valeur qui est en fait implicitement /meta/valeur
105
-	// ou casier/valeur qui est en fait implicitement /meta/casier/valeur
106
-
107
-	// traiter en priorite le cas simple et frequent
108
-	// de lecture direct $GLOBALS['meta']['truc'], si $cfg ne contient ni / ni :
109
-	if ($cfg and strpbrk($cfg, '/:') === false) {
110
-		$r = isset($GLOBALS['meta'][$cfg]) ?
111
-			((!$unserialize
112
-				// ne pas essayer de deserialiser autre chose qu'une chaine
113
-				or !is_string($GLOBALS['meta'][$cfg])
114
-				// ne pas essayer de deserialiser si ce n'est visiblement pas une chaine serializee
115
-				or !str_contains($GLOBALS['meta'][$cfg], ':')
116
-				or ($t = @unserialize($GLOBALS['meta'][$cfg])) === false) ? $GLOBALS['meta'][$cfg] : $t)
117
-			: $def;
118
-
119
-		return $r;
120
-	}
121
-
122
-	// Brancher sur methodes externes si besoin
123
-	if ($cfg and $p = strpos($cfg, '::')) {
124
-		$methode = substr($cfg, 0, $p);
125
-		$lire_config = charger_fonction($methode, 'lire_config');
126
-
127
-		return $lire_config(substr($cfg, $p + 2), $def, $unserialize);
128
-	}
129
-
130
-	[$table, $casier, $sous_casier] = expliquer_config($cfg);
131
-
132
-	if (!isset($GLOBALS[$table])) {
133
-		return $def;
134
-	}
135
-
136
-	$r = $GLOBALS[$table];
137
-
138
-	// si on a demande #CONFIG{/meta,'',0}
139
-	if (!$casier) {
140
-		return $unserialize ? $r : serialize($r);
141
-	}
142
-
143
-	// casier principal :
144
-	// le deserializer si demande
145
-	// ou si on a besoin
146
-	// d'un sous casier
147
-	$r = $r[$casier] ?? null;
148
-	if (($unserialize or is_countable($sous_casier) ? count($sous_casier) : 0) and $r and is_string($r)) {
149
-		$r = (($t = @unserialize($r)) === false ? $r : $t);
150
-	}
151
-
152
-	// aller chercher le sous_casier
153
-	while (!is_null($r) and $casier = array_shift($sous_casier)) {
154
-		$r = $r[$casier] ?? null;
155
-	}
156
-
157
-	if (is_null($r)) {
158
-		return $def;
159
-	}
160
-
161
-	return $r;
103
+    // lire le stockage sous la forme /table/valeur
104
+    // ou valeur qui est en fait implicitement /meta/valeur
105
+    // ou casier/valeur qui est en fait implicitement /meta/casier/valeur
106
+
107
+    // traiter en priorite le cas simple et frequent
108
+    // de lecture direct $GLOBALS['meta']['truc'], si $cfg ne contient ni / ni :
109
+    if ($cfg and strpbrk($cfg, '/:') === false) {
110
+        $r = isset($GLOBALS['meta'][$cfg]) ?
111
+            ((!$unserialize
112
+                // ne pas essayer de deserialiser autre chose qu'une chaine
113
+                or !is_string($GLOBALS['meta'][$cfg])
114
+                // ne pas essayer de deserialiser si ce n'est visiblement pas une chaine serializee
115
+                or !str_contains($GLOBALS['meta'][$cfg], ':')
116
+                or ($t = @unserialize($GLOBALS['meta'][$cfg])) === false) ? $GLOBALS['meta'][$cfg] : $t)
117
+            : $def;
118
+
119
+        return $r;
120
+    }
121
+
122
+    // Brancher sur methodes externes si besoin
123
+    if ($cfg and $p = strpos($cfg, '::')) {
124
+        $methode = substr($cfg, 0, $p);
125
+        $lire_config = charger_fonction($methode, 'lire_config');
126
+
127
+        return $lire_config(substr($cfg, $p + 2), $def, $unserialize);
128
+    }
129
+
130
+    [$table, $casier, $sous_casier] = expliquer_config($cfg);
131
+
132
+    if (!isset($GLOBALS[$table])) {
133
+        return $def;
134
+    }
135
+
136
+    $r = $GLOBALS[$table];
137
+
138
+    // si on a demande #CONFIG{/meta,'',0}
139
+    if (!$casier) {
140
+        return $unserialize ? $r : serialize($r);
141
+    }
142
+
143
+    // casier principal :
144
+    // le deserializer si demande
145
+    // ou si on a besoin
146
+    // d'un sous casier
147
+    $r = $r[$casier] ?? null;
148
+    if (($unserialize or is_countable($sous_casier) ? count($sous_casier) : 0) and $r and is_string($r)) {
149
+        $r = (($t = @unserialize($r)) === false ? $r : $t);
150
+    }
151
+
152
+    // aller chercher le sous_casier
153
+    while (!is_null($r) and $casier = array_shift($sous_casier)) {
154
+        $r = $r[$casier] ?? null;
155
+    }
156
+
157
+    if (is_null($r)) {
158
+        return $def;
159
+    }
160
+
161
+    return $r;
162 162
 }
163 163
 
164 164
 /**
@@ -172,7 +172,7 @@  discard block
 block discarded – undo
172 172
  * @return mixed
173 173
  */
174 174
 function lire_config_metapack_dist($cfg = '', $def = null, $unserialize = true) {
175
-	return lire_config($cfg, $def, $unserialize);
175
+    return lire_config($cfg, $def, $unserialize);
176 176
 }
177 177
 
178 178
 
@@ -184,144 +184,144 @@  discard block
 block discarded – undo
184 184
  * @return bool
185 185
  */
186 186
 function ecrire_config($cfg, $store) {
187
-	// Brancher sur methodes externes si besoin
188
-	if ($cfg and $p = strpos($cfg, '::')) {
189
-		$methode = substr($cfg, 0, $p);
190
-		$ecrire_config = charger_fonction($methode, 'ecrire_config');
191
-
192
-		return $ecrire_config(substr($cfg, $p + 2), $store);
193
-	}
194
-
195
-	[$table, $casier, $sous_casier] = expliquer_config($cfg);
196
-	// il faut au moins un casier pour ecrire
197
-	if (!$casier) {
198
-		return false;
199
-	}
200
-
201
-	// trouvons ou creons le pointeur sur le casier
202
-	$st = $GLOBALS[$table][$casier] ?? null;
203
-	if (!is_array($st) and ($sous_casier or is_array($store))) {
204
-		if ($st === null) {
205
-			// ne rien creer si c'est une demande d'effacement
206
-			if ($store === null) {
207
-				return false;
208
-			}
209
-			$st = [];
210
-		} else {
211
-			$st = unserialize($st);
212
-			if ($st === false) {
213
-				// ne rien creer si c'est une demande d'effacement
214
-				if ($store === null) {
215
-					return false;
216
-				}
217
-				$st = [];
218
-			}
219
-		}
220
-	}
221
-
222
-	$has_planes = false;
223
-	// si on a affaire a un sous caiser
224
-	// il faut ecrire au bon endroit sans perdre les autres sous casier freres
225
-	if ($c = $sous_casier) {
226
-		$sc = &$st;
227
-		$pointeurs = [];
228
-		while (is_countable($c) ? count($c) : 0 and $cc = array_shift($c)) {
229
-			// creer l'entree si elle n'existe pas
230
-			if (!isset($sc[$cc])) {
231
-				// si on essaye d'effacer une config qui n'existe pas
232
-				// ne rien creer mais sortir
233
-				if (is_null($store)) {
234
-					return false;
235
-				}
236
-				$sc[$cc] = [];
237
-			}
238
-			$pointeurs[$cc] = &$sc;
239
-			$sc = &$sc[$cc];
240
-		}
241
-
242
-		// si c'est une demande d'effacement
243
-		if (is_null($store)) {
244
-			$c = $sous_casier;
245
-			$sous = array_pop($c);
246
-			// effacer, et remonter pour effacer les parents vides
247
-			do {
248
-				unset($pointeurs[$sous][$sous]);
249
-			} while ($sous = array_pop($c) and !(is_countable($pointeurs[$sous][$sous]) ? count($pointeurs[$sous][$sous]) : 0));
250
-
251
-			// si on a vide tous les sous casiers,
252
-			// et que le casier est vide
253
-			// vider aussi la meta
254
-			if (!$sous and !(is_countable($st) ? count($st) : 0)) {
255
-				$st = null;
256
-			}
257
-		} // dans tous les autres cas, on ecrase
258
-		else {
259
-			if (
260
-					defined('_MYSQL_NOPLANES')
261
-				and _MYSQL_NOPLANES
262
-				and !empty($GLOBALS['meta']['charset_sql_connexion'])
263
-				and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
264
-			) {
265
-				// detecter si la valeur qu'on veut ecrire a des planes
266
-				// @see utf8_noplanes
267
-				$serialized_store = (is_string($store) ? $store : serialize($store));
268
-				// un preg_match rapide pour voir si ca vaut le coup de lancer utf8_noplanes
269
-				if (preg_match(',[\xF0-\xF4],ms', $serialized_store)) {
270
-					if (!function_exists('utf8_noplanes')) {
271
-						include_spip('inc/charsets');
272
-					}
273
-					if ($serialized_store !== utf8_noplanes($serialized_store)) {
274
-						$has_planes = true;
275
-					}
276
-				}
277
-			}
278
-
279
-			$sc = $store;
280
-		}
281
-
282
-		// Maintenant que $st est modifiee
283
-		// reprenons la comme valeur a stocker dans le casier principal
284
-		$store = $st;
285
-	}
286
-
287
-	if (is_null($store)) {
288
-		if (is_null($st) and !$sous_casier) {
289
-			return false;
290
-		} // la config n'existait deja pas !
291
-		effacer_meta($casier, $table);
292
-		supprimer_table_meta($table); // supprimons la table (si elle est bien vide)
293
-	} // les meta ne peuvent etre que des chaines : il faut serializer le reste
294
-	else {
295
-		if (!isset($GLOBALS[$table])) {
296
-			installer_table_meta($table);
297
-		}
298
-		// si ce n'est pas une chaine
299
-		// il faut serializer
300
-		if (!is_string($store)) {
301
-			$serialized_store = serialize($store);
302
-			ecrire_meta($casier, $serialized_store, null, $table);
303
-			// et dans ce cas il faut verifier que l'ecriture en base a bien eu lieu a l'identique si il y a des planes dans la chaine
304
-			// car sinon ca casse le serialize PHP - par exemple si on est en mysql utf8 (non mb4)
305
-			if ($has_planes) {
306
-				$check_store = sql_getfetsel('valeur', 'spip_' . $table, 'nom=' . sql_quote($casier));
307
-				if ($check_store !== $serialized_store) {
308
-					array_walk_recursive($store, function (&$value, $key) {
309
-						if (is_string($value)) {
310
-							$value = utf8_noplanes($value);
311
-						}
312
-					});
313
-					$serialized_store = serialize($store);
314
-					ecrire_meta($casier, $serialized_store, null, $table);
315
-				}
316
-			}
317
-		}
318
-		else {
319
-			ecrire_meta($casier, $store, null, $table);
320
-		}
321
-	}
322
-
323
-	// verifier que lire_config($cfg)==$store ?
324
-	return true;
187
+    // Brancher sur methodes externes si besoin
188
+    if ($cfg and $p = strpos($cfg, '::')) {
189
+        $methode = substr($cfg, 0, $p);
190
+        $ecrire_config = charger_fonction($methode, 'ecrire_config');
191
+
192
+        return $ecrire_config(substr($cfg, $p + 2), $store);
193
+    }
194
+
195
+    [$table, $casier, $sous_casier] = expliquer_config($cfg);
196
+    // il faut au moins un casier pour ecrire
197
+    if (!$casier) {
198
+        return false;
199
+    }
200
+
201
+    // trouvons ou creons le pointeur sur le casier
202
+    $st = $GLOBALS[$table][$casier] ?? null;
203
+    if (!is_array($st) and ($sous_casier or is_array($store))) {
204
+        if ($st === null) {
205
+            // ne rien creer si c'est une demande d'effacement
206
+            if ($store === null) {
207
+                return false;
208
+            }
209
+            $st = [];
210
+        } else {
211
+            $st = unserialize($st);
212
+            if ($st === false) {
213
+                // ne rien creer si c'est une demande d'effacement
214
+                if ($store === null) {
215
+                    return false;
216
+                }
217
+                $st = [];
218
+            }
219
+        }
220
+    }
221
+
222
+    $has_planes = false;
223
+    // si on a affaire a un sous caiser
224
+    // il faut ecrire au bon endroit sans perdre les autres sous casier freres
225
+    if ($c = $sous_casier) {
226
+        $sc = &$st;
227
+        $pointeurs = [];
228
+        while (is_countable($c) ? count($c) : 0 and $cc = array_shift($c)) {
229
+            // creer l'entree si elle n'existe pas
230
+            if (!isset($sc[$cc])) {
231
+                // si on essaye d'effacer une config qui n'existe pas
232
+                // ne rien creer mais sortir
233
+                if (is_null($store)) {
234
+                    return false;
235
+                }
236
+                $sc[$cc] = [];
237
+            }
238
+            $pointeurs[$cc] = &$sc;
239
+            $sc = &$sc[$cc];
240
+        }
241
+
242
+        // si c'est une demande d'effacement
243
+        if (is_null($store)) {
244
+            $c = $sous_casier;
245
+            $sous = array_pop($c);
246
+            // effacer, et remonter pour effacer les parents vides
247
+            do {
248
+                unset($pointeurs[$sous][$sous]);
249
+            } while ($sous = array_pop($c) and !(is_countable($pointeurs[$sous][$sous]) ? count($pointeurs[$sous][$sous]) : 0));
250
+
251
+            // si on a vide tous les sous casiers,
252
+            // et que le casier est vide
253
+            // vider aussi la meta
254
+            if (!$sous and !(is_countable($st) ? count($st) : 0)) {
255
+                $st = null;
256
+            }
257
+        } // dans tous les autres cas, on ecrase
258
+        else {
259
+            if (
260
+                    defined('_MYSQL_NOPLANES')
261
+                and _MYSQL_NOPLANES
262
+                and !empty($GLOBALS['meta']['charset_sql_connexion'])
263
+                and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
264
+            ) {
265
+                // detecter si la valeur qu'on veut ecrire a des planes
266
+                // @see utf8_noplanes
267
+                $serialized_store = (is_string($store) ? $store : serialize($store));
268
+                // un preg_match rapide pour voir si ca vaut le coup de lancer utf8_noplanes
269
+                if (preg_match(',[\xF0-\xF4],ms', $serialized_store)) {
270
+                    if (!function_exists('utf8_noplanes')) {
271
+                        include_spip('inc/charsets');
272
+                    }
273
+                    if ($serialized_store !== utf8_noplanes($serialized_store)) {
274
+                        $has_planes = true;
275
+                    }
276
+                }
277
+            }
278
+
279
+            $sc = $store;
280
+        }
281
+
282
+        // Maintenant que $st est modifiee
283
+        // reprenons la comme valeur a stocker dans le casier principal
284
+        $store = $st;
285
+    }
286
+
287
+    if (is_null($store)) {
288
+        if (is_null($st) and !$sous_casier) {
289
+            return false;
290
+        } // la config n'existait deja pas !
291
+        effacer_meta($casier, $table);
292
+        supprimer_table_meta($table); // supprimons la table (si elle est bien vide)
293
+    } // les meta ne peuvent etre que des chaines : il faut serializer le reste
294
+    else {
295
+        if (!isset($GLOBALS[$table])) {
296
+            installer_table_meta($table);
297
+        }
298
+        // si ce n'est pas une chaine
299
+        // il faut serializer
300
+        if (!is_string($store)) {
301
+            $serialized_store = serialize($store);
302
+            ecrire_meta($casier, $serialized_store, null, $table);
303
+            // et dans ce cas il faut verifier que l'ecriture en base a bien eu lieu a l'identique si il y a des planes dans la chaine
304
+            // car sinon ca casse le serialize PHP - par exemple si on est en mysql utf8 (non mb4)
305
+            if ($has_planes) {
306
+                $check_store = sql_getfetsel('valeur', 'spip_' . $table, 'nom=' . sql_quote($casier));
307
+                if ($check_store !== $serialized_store) {
308
+                    array_walk_recursive($store, function (&$value, $key) {
309
+                        if (is_string($value)) {
310
+                            $value = utf8_noplanes($value);
311
+                        }
312
+                    });
313
+                    $serialized_store = serialize($store);
314
+                    ecrire_meta($casier, $serialized_store, null, $table);
315
+                }
316
+            }
317
+        }
318
+        else {
319
+            ecrire_meta($casier, $store, null, $table);
320
+        }
321
+    }
322
+
323
+    // verifier que lire_config($cfg)==$store ?
324
+    return true;
325 325
 }
326 326
 
327 327
 
@@ -335,14 +335,14 @@  discard block
 block discarded – undo
335 335
  * @return bool
336 336
  */
337 337
 function ecrire_config_metapack_dist($cfg, $store) {
338
-	// cas particulier en metapack::
339
-	// si on ecrit une chaine deja serializee, il faut la reserializer pour la rendre
340
-	// intacte en sortie ...
341
-	if (is_string($store) and strpos($store, ':') and unserialize($store)) {
342
-		$store = serialize($store);
343
-	}
344
-
345
-	return ecrire_config($cfg, $store);
338
+    // cas particulier en metapack::
339
+    // si on ecrit une chaine deja serializee, il faut la reserializer pour la rendre
340
+    // intacte en sortie ...
341
+    if (is_string($store) and strpos($store, ':') and unserialize($store)) {
342
+        $store = serialize($store);
343
+    }
344
+
345
+    return ecrire_config($cfg, $store);
346 346
 }
347 347
 
348 348
 /**
@@ -352,9 +352,9 @@  discard block
 block discarded – undo
352 352
  * @return bool
353 353
  */
354 354
 function effacer_config($cfg) {
355
-	ecrire_config($cfg, null);
355
+    ecrire_config($cfg, null);
356 356
 
357
-	return true;
357
+    return true;
358 358
 }
359 359
 
360 360
 /**
@@ -371,58 +371,58 @@  discard block
 block discarded – undo
371 371
  *    Couples nom de la `meta` => valeur par défaut
372 372
  */
373 373
 function liste_metas() {
374
-	return pipeline('configurer_liste_metas', [
375
-		'nom_site' => _T('info_mon_site_spip'),
376
-		'slogan_site' => '',
377
-		'adresse_site' => preg_replace(',/$,', '', url_de_base()),
378
-		'descriptif_site' => '',
379
-		'activer_logos' => 'oui',
380
-		'activer_logos_survol' => 'non',
381
-		'articles_surtitre' => 'non',
382
-		'articles_soustitre' => 'non',
383
-		'articles_descriptif' => 'non',
384
-		'articles_chapeau' => 'non',
385
-		'articles_texte' => 'oui',
386
-		'articles_ps' => 'non',
387
-		'articles_redac' => 'non',
388
-		'post_dates' => 'non',
389
-		'articles_urlref' => 'non',
390
-		'articles_redirection' => 'non',
391
-		'creer_preview' => 'non',
392
-		'taille_preview' => 150,
393
-		'articles_modif' => 'non',
394
-
395
-		'rubriques_descriptif' => 'non',
396
-		'rubriques_texte' => 'oui',
397
-
398
-		'accepter_inscriptions' => 'non',
399
-		'accepter_visiteurs' => 'non',
400
-		'prevenir_auteurs' => 'non',
401
-		'suivi_edito' => 'non',
402
-		'adresse_suivi' => '',
403
-		'adresse_suivi_inscription' => '',
404
-		'adresse_neuf' => '',
405
-		'jours_neuf' => '',
406
-		'quoi_de_neuf' => 'non',
407
-		'preview' => ',0minirezo,1comite,',
408
-
409
-		'syndication_integrale' => 'oui',
410
-		'charset' => _DEFAULT_CHARSET,
411
-		'dir_img' => substr(_DIR_IMG, strlen(_DIR_RACINE)),
412
-
413
-		'multi_rubriques' => 'non',
414
-		'multi_secteurs' => 'non',
415
-		'gerer_trad' => 'non',
416
-		'langues_multilingue' => '',
417
-
418
-		'version_html_max' => 'html4',
419
-
420
-		'type_urls' => 'page',
421
-
422
-		'email_envoi' => '',
423
-		'email_webmaster' => '',
424
-		'auto_compress_http' => 'non',
425
-	]);
374
+    return pipeline('configurer_liste_metas', [
375
+        'nom_site' => _T('info_mon_site_spip'),
376
+        'slogan_site' => '',
377
+        'adresse_site' => preg_replace(',/$,', '', url_de_base()),
378
+        'descriptif_site' => '',
379
+        'activer_logos' => 'oui',
380
+        'activer_logos_survol' => 'non',
381
+        'articles_surtitre' => 'non',
382
+        'articles_soustitre' => 'non',
383
+        'articles_descriptif' => 'non',
384
+        'articles_chapeau' => 'non',
385
+        'articles_texte' => 'oui',
386
+        'articles_ps' => 'non',
387
+        'articles_redac' => 'non',
388
+        'post_dates' => 'non',
389
+        'articles_urlref' => 'non',
390
+        'articles_redirection' => 'non',
391
+        'creer_preview' => 'non',
392
+        'taille_preview' => 150,
393
+        'articles_modif' => 'non',
394
+
395
+        'rubriques_descriptif' => 'non',
396
+        'rubriques_texte' => 'oui',
397
+
398
+        'accepter_inscriptions' => 'non',
399
+        'accepter_visiteurs' => 'non',
400
+        'prevenir_auteurs' => 'non',
401
+        'suivi_edito' => 'non',
402
+        'adresse_suivi' => '',
403
+        'adresse_suivi_inscription' => '',
404
+        'adresse_neuf' => '',
405
+        'jours_neuf' => '',
406
+        'quoi_de_neuf' => 'non',
407
+        'preview' => ',0minirezo,1comite,',
408
+
409
+        'syndication_integrale' => 'oui',
410
+        'charset' => _DEFAULT_CHARSET,
411
+        'dir_img' => substr(_DIR_IMG, strlen(_DIR_RACINE)),
412
+
413
+        'multi_rubriques' => 'non',
414
+        'multi_secteurs' => 'non',
415
+        'gerer_trad' => 'non',
416
+        'langues_multilingue' => '',
417
+
418
+        'version_html_max' => 'html4',
419
+
420
+        'type_urls' => 'page',
421
+
422
+        'email_envoi' => '',
423
+        'email_webmaster' => '',
424
+        'auto_compress_http' => 'non',
425
+    ]);
426 426
 }
427 427
 
428 428
 /**
@@ -433,43 +433,43 @@  discard block
 block discarded – undo
433 433
  * @return void
434 434
  */
435 435
 function actualise_metas($liste_meta) {
436
-	$meta_serveur =
437
-		[
438
-			'version_installee',
439
-			'adresse_site',
440
-			'alea_ephemere_ancien',
441
-			'alea_ephemere',
442
-			'alea_ephemere_date',
443
-			'langue_site',
444
-			'langues_proposees',
445
-			'date_calcul_rubriques',
446
-			'derniere_modif',
447
-			'optimiser_table',
448
-			'drapeau_edition',
449
-			'creer_preview',
450
-			'taille_preview',
451
-			'creer_htpasswd',
452
-			'creer_htaccess',
453
-			'gd_formats_read',
454
-			'gd_formats',
455
-			'netpbm_formats',
456
-			'formats_graphiques',
457
-			'image_process',
458
-			'plugin_header',
459
-			'plugin'
460
-		];
461
-	// verifier le impt=non
462
-	sql_updateq('spip_meta', ['impt' => 'non'], sql_in('nom', $meta_serveur));
463
-
464
-	foreach ($liste_meta as $nom => $valeur) {
465
-		if (empty($GLOBALS['meta'][$nom])) {
466
-			ecrire_meta($nom, $valeur);
467
-		}
468
-	}
469
-
470
-	include_spip('inc/rubriques');
471
-	$langues = calculer_langues_utilisees();
472
-	ecrire_meta('langues_utilisees', $langues);
436
+    $meta_serveur =
437
+        [
438
+            'version_installee',
439
+            'adresse_site',
440
+            'alea_ephemere_ancien',
441
+            'alea_ephemere',
442
+            'alea_ephemere_date',
443
+            'langue_site',
444
+            'langues_proposees',
445
+            'date_calcul_rubriques',
446
+            'derniere_modif',
447
+            'optimiser_table',
448
+            'drapeau_edition',
449
+            'creer_preview',
450
+            'taille_preview',
451
+            'creer_htpasswd',
452
+            'creer_htaccess',
453
+            'gd_formats_read',
454
+            'gd_formats',
455
+            'netpbm_formats',
456
+            'formats_graphiques',
457
+            'image_process',
458
+            'plugin_header',
459
+            'plugin'
460
+        ];
461
+    // verifier le impt=non
462
+    sql_updateq('spip_meta', ['impt' => 'non'], sql_in('nom', $meta_serveur));
463
+
464
+    foreach ($liste_meta as $nom => $valeur) {
465
+        if (empty($GLOBALS['meta'][$nom])) {
466
+            ecrire_meta($nom, $valeur);
467
+        }
468
+    }
469
+
470
+    include_spip('inc/rubriques');
471
+    $langues = calculer_langues_utilisees();
472
+    ecrire_meta('langues_utilisees', $langues);
473 473
 }
474 474
 
475 475
 
@@ -491,18 +491,18 @@  discard block
 block discarded – undo
491 491
  */
492 492
 function appliquer_modifs_config($purger_skel = false) {
493 493
 
494
-	foreach (liste_metas() as $i => $v) {
495
-		if (($x = _request($i)) !== null) {
496
-			ecrire_meta($i, $x);
497
-		} elseif (!isset($GLOBALS['meta'][$i])) {
498
-			ecrire_meta($i, $v);
499
-		}
500
-	}
501
-
502
-	if ($purger_skel) {
503
-		include_spip('inc/invalideur');
504
-		purger_repertoire(_DIR_SKELS);
505
-	}
494
+    foreach (liste_metas() as $i => $v) {
495
+        if (($x = _request($i)) !== null) {
496
+            ecrire_meta($i, $x);
497
+        } elseif (!isset($GLOBALS['meta'][$i])) {
498
+            ecrire_meta($i, $v);
499
+        }
500
+    }
501
+
502
+    if ($purger_skel) {
503
+        include_spip('inc/invalideur');
504
+        purger_repertoire(_DIR_SKELS);
505
+    }
506 506
 }
507 507
 
508 508
 /**
@@ -513,21 +513,21 @@  discard block
 block discarded – undo
513 513
  * @return string
514 514
  */
515 515
 function appliquer_adresse_site($adresse_site) {
516
-	if ($adresse_site !== null) {
517
-		if (!strlen($adresse_site)) {
518
-			$GLOBALS['profondeur_url'] = _DIR_RESTREINT ? 0 : 1;
519
-			$adresse_site = url_de_base();
520
-		}
521
-		$adresse_site = preg_replace(',/?\s*$,', '', $adresse_site);
516
+    if ($adresse_site !== null) {
517
+        if (!strlen($adresse_site)) {
518
+            $GLOBALS['profondeur_url'] = _DIR_RESTREINT ? 0 : 1;
519
+            $adresse_site = url_de_base();
520
+        }
521
+        $adresse_site = preg_replace(',/?\s*$,', '', $adresse_site);
522 522
 
523
-		if (!tester_url_absolue($adresse_site)) {
524
-			$adresse_site = "http://$adresse_site";
525
-		}
523
+        if (!tester_url_absolue($adresse_site)) {
524
+            $adresse_site = "http://$adresse_site";
525
+        }
526 526
 
527
-		$adresse_site = entites_html($adresse_site);
527
+        $adresse_site = entites_html($adresse_site);
528 528
 
529
-		ecrire_meta('adresse_site', $adresse_site);
530
-	}
529
+        ecrire_meta('adresse_site', $adresse_site);
530
+    }
531 531
 
532
-	return $adresse_site;
532
+    return $adresse_site;
533 533
 }
Please login to merge, or discard this patch.
ecrire/exec/admin_plugin.php 2 patches
Indentation   +203 added lines, -203 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  */
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('inc/config');
@@ -37,26 +37,26 @@  discard block
 block discarded – undo
37 37
  */
38 38
 function exec_admin_plugin_dist($retour = '') {
39 39
 
40
-	if (!autoriser('configurer', '_plugins')) {
41
-		include_spip('inc/minipres');
42
-		echo minipres();
43
-	} else {
44
-		// on fait la verif du path avant tout,
45
-		// et l'installation des qu'on est dans la colonne principale
46
-		// si jamais la liste des plugins actifs change, il faut faire un refresh du hit
47
-		// pour etre sur que les bons fichiers seront charges lors de l'install
48
-		$new = actualise_plugins_actifs();
49
-		if ($new and _request('actualise') < 2) {
50
-			include_spip('inc/headers');
51
-			if (isset($GLOBALS['fichier_php_compile_recent'])) {
52
-				// attendre eventuellement l'invalidation du cache opcode
53
-				spip_attend_invalidation_opcode_cache($GLOBALS['fichier_php_compile_recent']);
54
-			}
55
-			redirige_par_entete(parametre_url(self(), 'actualise', _request('actualise') + 1, '&'));
56
-		} else {
57
-			admin_plug_args(_request('voir'), _request('erreur'), _request('format'));
58
-		}
59
-	}
40
+    if (!autoriser('configurer', '_plugins')) {
41
+        include_spip('inc/minipres');
42
+        echo minipres();
43
+    } else {
44
+        // on fait la verif du path avant tout,
45
+        // et l'installation des qu'on est dans la colonne principale
46
+        // si jamais la liste des plugins actifs change, il faut faire un refresh du hit
47
+        // pour etre sur que les bons fichiers seront charges lors de l'install
48
+        $new = actualise_plugins_actifs();
49
+        if ($new and _request('actualise') < 2) {
50
+            include_spip('inc/headers');
51
+            if (isset($GLOBALS['fichier_php_compile_recent'])) {
52
+                // attendre eventuellement l'invalidation du cache opcode
53
+                spip_attend_invalidation_opcode_cache($GLOBALS['fichier_php_compile_recent']);
54
+            }
55
+            redirige_par_entete(parametre_url(self(), 'actualise', _request('actualise') + 1, '&'));
56
+        } else {
57
+            admin_plug_args(_request('voir'), _request('erreur'), _request('format'));
58
+        }
59
+    }
60 60
 }
61 61
 
62 62
 /**
@@ -81,132 +81,132 @@  discard block
 block discarded – undo
81 81
  *     Format d'affichage (liste ou arborescence)
82 82
  **/
83 83
 function admin_plug_args($quoi, $erreur, $format) {
84
-	$lpf = null;
85
-	$lcpas = null;
86
-	$lcpaffichesup = null;
87
-	if (!$quoi) {
88
-		$quoi = 'actifs';
89
-	}
90
-	// empecher l'affichage des erreurs dans le bandeau, on le donne ensuite
91
-	// format brut par plugin
92
-	$GLOBALS['erreurs_activation_raw'] = plugin_donne_erreurs(true, false);
93
-	// format resume mis en forme
94
-	$erreur_activation = plugin_donne_erreurs();
95
-	$commencer_page = charger_fonction('commencer_page', 'inc');
96
-	echo $commencer_page(_T('icone_admin_plugin'), 'configuration', 'plugin');
97
-
98
-	echo debut_gauche();
99
-	echo recuperer_fond('prive/squelettes/navigation/configurer', ['exec' => 'admin_plugin']);
100
-
101
-	echo pipeline(
102
-		'affiche_gauche',
103
-		[
104
-			'args' => ['exec' => 'admin_plugin'],
105
-			'data' => afficher_librairies()
106
-		]
107
-	);
108
-
109
-	echo debut_droite();
110
-	echo gros_titre(_T('icone_admin_plugin'), '');
111
-
112
-	// Barre d'onglets de premier niveau
113
-	echo barre_onglets('plugins', 'plugins_actifs');
114
-	// Barre d'onglets de second niveau
115
-	$onglet2 = $quoi == 'actifs' ? 'plugins_actifs' : 'admin_plugin';
116
-	echo debut_onglet('onglets_simple second');
117
-	echo onglet(_T('plugins_tous_liste'), generer_url_ecrire('admin_plugin', 'voir=tous'), 'admin_plugin', $onglet2);
118
-	echo onglet(_T('plugins_actifs_liste'), generer_url_ecrire('admin_plugin'), 'plugins_actifs', $onglet2);
119
-	echo fin_onglet();
120
-
121
-	// message d'erreur au retour d'une operation
122
-	if ($erreur) {
123
-		echo "<div class='error'>" . spip_htmlspecialchars($erreur) . '</div>';
124
-	}
125
-	if ($erreur_activation) {
126
-		echo "<div class='error'>$erreur_activation</div>";
127
-	}
128
-
129
-	// la mise a jour de cette meta a ete faite par ecrire_plugin_actifs
130
-	$actifs = (array) unserialize($GLOBALS['meta']['plugin']);
131
-	$lcpa = $actifs + (array) unserialize($GLOBALS['meta']['plugin_attente']);
132
-
133
-	// Les affichages se basent sur le repertoire, pas sur le nom
134
-	$actifs = liste_chemin_plugin($actifs, '');
135
-	if (defined('_DIR_PLUGINS_SUPPL')) {
136
-		$lcpas = liste_chemin_plugin($lcpa, _DIR_PLUGINS_SUPPL);
137
-	}
138
-	$lcpa = liste_chemin_plugin($lcpa);
139
-
140
-	// on installe les plugins maintenant,
141
-	// cela permet aux scripts d'install de faire des affichages (moches...)
142
-	plugin_installes_meta();
143
-
144
-	echo "<div class='liste-plugins formulaire_spip'>";
145
-	echo debut_cadre_trait_couleur('plugin-24.png', true, '', _T('plugins_liste'), 'plugins');
146
-
147
-	if ($quoi !== 'actifs') {
148
-		$lpf = liste_plugin_files();
149
-		if ($lpf) {
150
-			echo '<p>' . _T('texte_presente_plugin') . '</p>';
151
-		} else {
152
-			if (!@is_dir(_DIR_PLUGINS)) {
153
-				echo '<p>' . _T('plugin_info_automatique_ftp', ['rep' => joli_repertoire(_DIR_PLUGINS)])
154
-					. ' &mdash; ' . _T('plugin_info_automatique_creer') . '</p>';
155
-			}
156
-		}
157
-		$lcpaffiche = $lpf;
158
-		if (defined('_DIR_PLUGINS_SUPPL')) {
159
-			$lcpaffichesup = liste_plugin_files(_DIR_PLUGINS_SUPPL);
160
-		}
161
-	} else {
162
-		// la liste
163
-		// $quoi=='actifs'
164
-		$lcpaffiche = $lcpa;
165
-		if (defined('_DIR_PLUGINS_SUPPL')) {
166
-			$lcpaffichesup = $lcpas;
167
-		}
168
-	}
169
-
170
-	if ($quoi == 'actifs' or $lpf) {
171
-		$nb = is_countable($lcpa) ? count($lcpa) : 0;
172
-		if (defined('_DIR_PLUGINS_SUPPL')) {
173
-			$nb += is_countable($lcpas) ? count($lcpas) : 0;
174
-		}
175
-		echo '<h3>' . sinon(
176
-			singulier_ou_pluriel($nb, 'plugins_actif_un', 'plugins_actifs', 'count'),
177
-			_T('plugins_actif_aucun')
178
-		) . '</h3>';
179
-	}
180
-
181
-	if (empty($format)) {
182
-		$format = 'liste';
183
-	} elseif (!in_array($format, ['liste', 'repertoires'])) {
184
-		$format = 'repertoires';
185
-	}
186
-
187
-	$afficher = charger_fonction("afficher_$format", 'plugins');
188
-	$corps = $afficher(self(), $lcpaffiche, $lcpa, $actifs);
189
-	if (defined('_DIR_PLUGINS_SUPPL')) {
190
-		$corps .= $afficher(self(), $lcpaffichesup, $lcpas, $actifs, _DIR_PLUGINS_SUPPL);
191
-	}
192
-
193
-	if ($corps) {
194
-		$corps .= "\n<div class='boutons' style='display:none;'>"
195
-			. "<input type='submit' class='submit save' value='" . _T('bouton_enregistrer')
196
-			. "' />"
197
-			. '</div>';
198
-	}
199
-
200
-	echo redirige_action_post('activer_plugins', 'activer', 'admin_plugin', '', $corps);
201
-
202
-	echo fin_cadre_trait_couleur();
203
-
204
-	if ($quoi == 'actifs') {
205
-		echo affiche_les_plugins_verrouilles($actifs);
206
-	}
207
-	echo '</div>';
208
-
209
-	echo http_script("
84
+    $lpf = null;
85
+    $lcpas = null;
86
+    $lcpaffichesup = null;
87
+    if (!$quoi) {
88
+        $quoi = 'actifs';
89
+    }
90
+    // empecher l'affichage des erreurs dans le bandeau, on le donne ensuite
91
+    // format brut par plugin
92
+    $GLOBALS['erreurs_activation_raw'] = plugin_donne_erreurs(true, false);
93
+    // format resume mis en forme
94
+    $erreur_activation = plugin_donne_erreurs();
95
+    $commencer_page = charger_fonction('commencer_page', 'inc');
96
+    echo $commencer_page(_T('icone_admin_plugin'), 'configuration', 'plugin');
97
+
98
+    echo debut_gauche();
99
+    echo recuperer_fond('prive/squelettes/navigation/configurer', ['exec' => 'admin_plugin']);
100
+
101
+    echo pipeline(
102
+        'affiche_gauche',
103
+        [
104
+            'args' => ['exec' => 'admin_plugin'],
105
+            'data' => afficher_librairies()
106
+        ]
107
+    );
108
+
109
+    echo debut_droite();
110
+    echo gros_titre(_T('icone_admin_plugin'), '');
111
+
112
+    // Barre d'onglets de premier niveau
113
+    echo barre_onglets('plugins', 'plugins_actifs');
114
+    // Barre d'onglets de second niveau
115
+    $onglet2 = $quoi == 'actifs' ? 'plugins_actifs' : 'admin_plugin';
116
+    echo debut_onglet('onglets_simple second');
117
+    echo onglet(_T('plugins_tous_liste'), generer_url_ecrire('admin_plugin', 'voir=tous'), 'admin_plugin', $onglet2);
118
+    echo onglet(_T('plugins_actifs_liste'), generer_url_ecrire('admin_plugin'), 'plugins_actifs', $onglet2);
119
+    echo fin_onglet();
120
+
121
+    // message d'erreur au retour d'une operation
122
+    if ($erreur) {
123
+        echo "<div class='error'>" . spip_htmlspecialchars($erreur) . '</div>';
124
+    }
125
+    if ($erreur_activation) {
126
+        echo "<div class='error'>$erreur_activation</div>";
127
+    }
128
+
129
+    // la mise a jour de cette meta a ete faite par ecrire_plugin_actifs
130
+    $actifs = (array) unserialize($GLOBALS['meta']['plugin']);
131
+    $lcpa = $actifs + (array) unserialize($GLOBALS['meta']['plugin_attente']);
132
+
133
+    // Les affichages se basent sur le repertoire, pas sur le nom
134
+    $actifs = liste_chemin_plugin($actifs, '');
135
+    if (defined('_DIR_PLUGINS_SUPPL')) {
136
+        $lcpas = liste_chemin_plugin($lcpa, _DIR_PLUGINS_SUPPL);
137
+    }
138
+    $lcpa = liste_chemin_plugin($lcpa);
139
+
140
+    // on installe les plugins maintenant,
141
+    // cela permet aux scripts d'install de faire des affichages (moches...)
142
+    plugin_installes_meta();
143
+
144
+    echo "<div class='liste-plugins formulaire_spip'>";
145
+    echo debut_cadre_trait_couleur('plugin-24.png', true, '', _T('plugins_liste'), 'plugins');
146
+
147
+    if ($quoi !== 'actifs') {
148
+        $lpf = liste_plugin_files();
149
+        if ($lpf) {
150
+            echo '<p>' . _T('texte_presente_plugin') . '</p>';
151
+        } else {
152
+            if (!@is_dir(_DIR_PLUGINS)) {
153
+                echo '<p>' . _T('plugin_info_automatique_ftp', ['rep' => joli_repertoire(_DIR_PLUGINS)])
154
+                    . ' &mdash; ' . _T('plugin_info_automatique_creer') . '</p>';
155
+            }
156
+        }
157
+        $lcpaffiche = $lpf;
158
+        if (defined('_DIR_PLUGINS_SUPPL')) {
159
+            $lcpaffichesup = liste_plugin_files(_DIR_PLUGINS_SUPPL);
160
+        }
161
+    } else {
162
+        // la liste
163
+        // $quoi=='actifs'
164
+        $lcpaffiche = $lcpa;
165
+        if (defined('_DIR_PLUGINS_SUPPL')) {
166
+            $lcpaffichesup = $lcpas;
167
+        }
168
+    }
169
+
170
+    if ($quoi == 'actifs' or $lpf) {
171
+        $nb = is_countable($lcpa) ? count($lcpa) : 0;
172
+        if (defined('_DIR_PLUGINS_SUPPL')) {
173
+            $nb += is_countable($lcpas) ? count($lcpas) : 0;
174
+        }
175
+        echo '<h3>' . sinon(
176
+            singulier_ou_pluriel($nb, 'plugins_actif_un', 'plugins_actifs', 'count'),
177
+            _T('plugins_actif_aucun')
178
+        ) . '</h3>';
179
+    }
180
+
181
+    if (empty($format)) {
182
+        $format = 'liste';
183
+    } elseif (!in_array($format, ['liste', 'repertoires'])) {
184
+        $format = 'repertoires';
185
+    }
186
+
187
+    $afficher = charger_fonction("afficher_$format", 'plugins');
188
+    $corps = $afficher(self(), $lcpaffiche, $lcpa, $actifs);
189
+    if (defined('_DIR_PLUGINS_SUPPL')) {
190
+        $corps .= $afficher(self(), $lcpaffichesup, $lcpas, $actifs, _DIR_PLUGINS_SUPPL);
191
+    }
192
+
193
+    if ($corps) {
194
+        $corps .= "\n<div class='boutons' style='display:none;'>"
195
+            . "<input type='submit' class='submit save' value='" . _T('bouton_enregistrer')
196
+            . "' />"
197
+            . '</div>';
198
+    }
199
+
200
+    echo redirige_action_post('activer_plugins', 'activer', 'admin_plugin', '', $corps);
201
+
202
+    echo fin_cadre_trait_couleur();
203
+
204
+    if ($quoi == 'actifs') {
205
+        echo affiche_les_plugins_verrouilles($actifs);
206
+    }
207
+    echo '</div>';
208
+
209
+    echo http_script("
210 210
 	jQuery(function(){
211 211
 		jQuery('.plugins li.item a[rel=info]').click(function(){
212 212
 			var li = jQuery(this).parents('li').eq(0);
@@ -232,15 +232,15 @@  discard block
 block discarded – undo
232 232
 	});
233 233
 	");
234 234
 
235
-	echo pipeline(
236
-		'affiche_milieu',
237
-		[
238
-			'args' => ['exec' => 'admin_plugin'],
239
-			'data' => ''
240
-		]
241
-	);
235
+    echo pipeline(
236
+        'affiche_milieu',
237
+        [
238
+            'args' => ['exec' => 'admin_plugin'],
239
+            'data' => ''
240
+        ]
241
+    );
242 242
 
243
-	echo fin_gauche(), fin_page();
243
+    echo fin_gauche(), fin_page();
244 244
 }
245 245
 
246 246
 /**
@@ -254,23 +254,23 @@  discard block
 block discarded – undo
254 254
  *     Code HTML
255 255
  **/
256 256
 function affiche_les_plugins_verrouilles($actifs) {
257
-	if ((!$liste = liste_plugin_files(_DIR_PLUGINS_DIST))) {
258
-		return '';
259
-	}
260
-
261
-	$afficher = charger_fonction('afficher_liste', 'plugins');
262
-	$liste = $afficher(self(), $liste, [], $actifs, _DIR_PLUGINS_DIST);
263
-
264
-	return
265
-		"<div id='plugins_dist'>"
266
-		. debut_cadre_trait_couleur('', true, '', _T('plugins_liste_dist'), 'liste_plugins_dist')
267
-		. '<p>'
268
-		. _T('plugin_info_plugins_dist_1', ['plugins_dist' => joli_repertoire(_DIR_PLUGINS_DIST)])
269
-		. '<br />' . _T('plugin_info_plugins_dist_2')
270
-		. '</p>'
271
-		. $liste
272
-		. fin_cadre_trait_couleur()
273
-		. "</div>\n";
257
+    if ((!$liste = liste_plugin_files(_DIR_PLUGINS_DIST))) {
258
+        return '';
259
+    }
260
+
261
+    $afficher = charger_fonction('afficher_liste', 'plugins');
262
+    $liste = $afficher(self(), $liste, [], $actifs, _DIR_PLUGINS_DIST);
263
+
264
+    return
265
+        "<div id='plugins_dist'>"
266
+        . debut_cadre_trait_couleur('', true, '', _T('plugins_liste_dist'), 'liste_plugins_dist')
267
+        . '<p>'
268
+        . _T('plugin_info_plugins_dist_1', ['plugins_dist' => joli_repertoire(_DIR_PLUGINS_DIST)])
269
+        . '<br />' . _T('plugin_info_plugins_dist_2')
270
+        . '</p>'
271
+        . $liste
272
+        . fin_cadre_trait_couleur()
273
+        . "</div>\n";
274 274
 }
275 275
 
276 276
 /**
@@ -282,19 +282,19 @@  discard block
 block discarded – undo
282 282
  */
283 283
 function afficher_librairies() {
284 284
 
285
-	if (!$libs = liste_librairies()) {
286
-		return '';
287
-	}
288
-	ksort($libs);
289
-	$res = debut_cadre_enfonce('', true, '', _T('plugin_librairies_installees'));
290
-	$res .= '<dl>';
291
-	foreach ($libs as $lib => $rep) {
292
-		$res .= "<dt>$lib</dt><dd>" . joli_repertoire($rep) . "</dd>\n";
293
-	}
294
-	$res .= '</dl>';
295
-	$res .= fin_cadre_enfonce();
296
-
297
-	return $res;
285
+    if (!$libs = liste_librairies()) {
286
+        return '';
287
+    }
288
+    ksort($libs);
289
+    $res = debut_cadre_enfonce('', true, '', _T('plugin_librairies_installees'));
290
+    $res .= '<dl>';
291
+    foreach ($libs as $lib => $rep) {
292
+        $res .= "<dt>$lib</dt><dd>" . joli_repertoire($rep) . "</dd>\n";
293
+    }
294
+    $res .= '</dl>';
295
+    $res .= fin_cadre_enfonce();
296
+
297
+    return $res;
298 298
 }
299 299
 
300 300
 
@@ -305,22 +305,22 @@  discard block
 block discarded – undo
305 305
  *     Tableau (nom de la lib => repertoire , ...)
306 306
  */
307 307
 function liste_librairies() {
308
-	$libs = [];
309
-	foreach (array_reverse(creer_chemin()) as $d) {
310
-		if (
311
-			is_dir($dir = $d . 'lib/')
312
-			and $t = opendir($dir)
313
-		) {
314
-			while (($f = readdir($t)) !== false) {
315
-				if (
316
-					$f[0] != '.'
317
-					and is_dir("$dir/$f")
318
-				) {
319
-					$libs[$f] = $dir;
320
-				}
321
-			}
322
-		}
323
-	}
324
-
325
-	return $libs;
308
+    $libs = [];
309
+    foreach (array_reverse(creer_chemin()) as $d) {
310
+        if (
311
+            is_dir($dir = $d . 'lib/')
312
+            and $t = opendir($dir)
313
+        ) {
314
+            while (($f = readdir($t)) !== false) {
315
+                if (
316
+                    $f[0] != '.'
317
+                    and is_dir("$dir/$f")
318
+                ) {
319
+                    $libs[$f] = $dir;
320
+                }
321
+            }
322
+        }
323
+    }
324
+
325
+    return $libs;
326 326
 }
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -120,7 +120,7 @@  discard block
 block discarded – undo
120 120
 
121 121
 	// message d'erreur au retour d'une operation
122 122
 	if ($erreur) {
123
-		echo "<div class='error'>" . spip_htmlspecialchars($erreur) . '</div>';
123
+		echo "<div class='error'>".spip_htmlspecialchars($erreur).'</div>';
124 124
 	}
125 125
 	if ($erreur_activation) {
126 126
 		echo "<div class='error'>$erreur_activation</div>";
@@ -147,11 +147,11 @@  discard block
 block discarded – undo
147 147
 	if ($quoi !== 'actifs') {
148 148
 		$lpf = liste_plugin_files();
149 149
 		if ($lpf) {
150
-			echo '<p>' . _T('texte_presente_plugin') . '</p>';
150
+			echo '<p>'._T('texte_presente_plugin').'</p>';
151 151
 		} else {
152 152
 			if (!@is_dir(_DIR_PLUGINS)) {
153
-				echo '<p>' . _T('plugin_info_automatique_ftp', ['rep' => joli_repertoire(_DIR_PLUGINS)])
154
-					. ' &mdash; ' . _T('plugin_info_automatique_creer') . '</p>';
153
+				echo '<p>'._T('plugin_info_automatique_ftp', ['rep' => joli_repertoire(_DIR_PLUGINS)])
154
+					. ' &mdash; '._T('plugin_info_automatique_creer').'</p>';
155 155
 			}
156 156
 		}
157 157
 		$lcpaffiche = $lpf;
@@ -172,10 +172,10 @@  discard block
 block discarded – undo
172 172
 		if (defined('_DIR_PLUGINS_SUPPL')) {
173 173
 			$nb += is_countable($lcpas) ? count($lcpas) : 0;
174 174
 		}
175
-		echo '<h3>' . sinon(
175
+		echo '<h3>'.sinon(
176 176
 			singulier_ou_pluriel($nb, 'plugins_actif_un', 'plugins_actifs', 'count'),
177 177
 			_T('plugins_actif_aucun')
178
-		) . '</h3>';
178
+		).'</h3>';
179 179
 	}
180 180
 
181 181
 	if (empty($format)) {
@@ -192,7 +192,7 @@  discard block
 block discarded – undo
192 192
 
193 193
 	if ($corps) {
194 194
 		$corps .= "\n<div class='boutons' style='display:none;'>"
195
-			. "<input type='submit' class='submit save' value='" . _T('bouton_enregistrer')
195
+			. "<input type='submit' class='submit save' value='"._T('bouton_enregistrer')
196 196
 			. "' />"
197 197
 			. '</div>';
198 198
 	}
@@ -266,7 +266,7 @@  discard block
 block discarded – undo
266 266
 		. debut_cadre_trait_couleur('', true, '', _T('plugins_liste_dist'), 'liste_plugins_dist')
267 267
 		. '<p>'
268 268
 		. _T('plugin_info_plugins_dist_1', ['plugins_dist' => joli_repertoire(_DIR_PLUGINS_DIST)])
269
-		. '<br />' . _T('plugin_info_plugins_dist_2')
269
+		. '<br />'._T('plugin_info_plugins_dist_2')
270 270
 		. '</p>'
271 271
 		. $liste
272 272
 		. fin_cadre_trait_couleur()
@@ -289,7 +289,7 @@  discard block
 block discarded – undo
289 289
 	$res = debut_cadre_enfonce('', true, '', _T('plugin_librairies_installees'));
290 290
 	$res .= '<dl>';
291 291
 	foreach ($libs as $lib => $rep) {
292
-		$res .= "<dt>$lib</dt><dd>" . joli_repertoire($rep) . "</dd>\n";
292
+		$res .= "<dt>$lib</dt><dd>".joli_repertoire($rep)."</dd>\n";
293 293
 	}
294 294
 	$res .= '</dl>';
295 295
 	$res .= fin_cadre_enfonce();
@@ -308,7 +308,7 @@  discard block
 block discarded – undo
308 308
 	$libs = [];
309 309
 	foreach (array_reverse(creer_chemin()) as $d) {
310 310
 		if (
311
-			is_dir($dir = $d . 'lib/')
311
+			is_dir($dir = $d.'lib/')
312 312
 			and $t = opendir($dir)
313 313
 		) {
314 314
 			while (($f = readdir($t)) !== false) {
Please login to merge, or discard this patch.
ecrire/action/editer_logo.php 3 patches
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -42,8 +42,7 @@
 block discarded – undo
42 42
 		if ((is_countable($logo) ? count($logo) : 0) < 6) {
43 43
 			spip_log('Supprimer ancien logo ' . json_encode($logo, JSON_THROW_ON_ERROR), 'logo');
44 44
 			spip_unlink($logo[0]);
45
-		}
46
-		elseif (
45
+		} elseif (
47 46
 			$doc = $logo[5]
48 47
 			and isset($doc['id_document'])
49 48
 			and $id_document = $doc['id_document']
Please login to merge, or discard this patch.
Indentation   +223 added lines, -223 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  */
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -30,36 +30,36 @@  discard block
 block discarded – undo
30 30
  *     `on` ou `off`
31 31
  */
32 32
 function logo_supprimer($objet, $id_objet, $etat) {
33
-	$chercher_logo = charger_fonction('chercher_logo', 'inc');
34
-	$objet = objet_type($objet);
35
-	$primary = id_table_objet($objet);
36
-	include_spip('inc/chercher_logo');
37
-
38
-	// existe-t-il deja un logo ?
39
-	$logo = $chercher_logo($id_objet, $primary, $etat);
40
-	if ($logo) {
41
-		# TODO : deprecated, a supprimer -> anciens logos IMG/artonxx.png pas en base
42
-		if ((is_countable($logo) ? count($logo) : 0) < 6) {
43
-			spip_log('Supprimer ancien logo ' . json_encode($logo, JSON_THROW_ON_ERROR), 'logo');
44
-			spip_unlink($logo[0]);
45
-		}
46
-		elseif (
47
-			$doc = $logo[5]
48
-			and isset($doc['id_document'])
49
-			and $id_document = $doc['id_document']
50
-		) {
51
-			include_spip('action/editer_liens');
52
-			// supprimer le lien dans la base
53
-			objet_dissocier(['document' => $id_document], [$objet => $id_objet], ['role' => '*']);
54
-
55
-			// verifier si il reste des liens avec d'autres objets et sinon supprimer
56
-			$liens = objet_trouver_liens(['document' => $id_document], '*');
57
-			if (!count($liens)) {
58
-				$supprimer_document = charger_fonction('supprimer_document', 'action');
59
-				$supprimer_document($doc['id_document']);
60
-			}
61
-		}
62
-	}
33
+    $chercher_logo = charger_fonction('chercher_logo', 'inc');
34
+    $objet = objet_type($objet);
35
+    $primary = id_table_objet($objet);
36
+    include_spip('inc/chercher_logo');
37
+
38
+    // existe-t-il deja un logo ?
39
+    $logo = $chercher_logo($id_objet, $primary, $etat);
40
+    if ($logo) {
41
+        # TODO : deprecated, a supprimer -> anciens logos IMG/artonxx.png pas en base
42
+        if ((is_countable($logo) ? count($logo) : 0) < 6) {
43
+            spip_log('Supprimer ancien logo ' . json_encode($logo, JSON_THROW_ON_ERROR), 'logo');
44
+            spip_unlink($logo[0]);
45
+        }
46
+        elseif (
47
+            $doc = $logo[5]
48
+            and isset($doc['id_document'])
49
+            and $id_document = $doc['id_document']
50
+        ) {
51
+            include_spip('action/editer_liens');
52
+            // supprimer le lien dans la base
53
+            objet_dissocier(['document' => $id_document], [$objet => $id_objet], ['role' => '*']);
54
+
55
+            // verifier si il reste des liens avec d'autres objets et sinon supprimer
56
+            $liens = objet_trouver_liens(['document' => $id_document], '*');
57
+            if (!count($liens)) {
58
+                $supprimer_document = charger_fonction('supprimer_document', 'action');
59
+                $supprimer_document($doc['id_document']);
60
+            }
61
+        }
62
+    }
63 63
 }
64 64
 
65 65
 /**
@@ -76,200 +76,200 @@  discard block
 block discarded – undo
76 76
  *     Erreur, sinon ''
77 77
  */
78 78
 function logo_modifier($objet, $id_objet, $etat, $source) {
79
-	$chercher_logo = charger_fonction('chercher_logo', 'inc');
80
-	$objet = objet_type($objet);
81
-	$primary = id_table_objet($objet);
82
-	include_spip('inc/chercher_logo');
83
-
84
-	$mode = preg_replace(',\W,', '', $etat);
85
-	if (!$mode) {
86
-		spip_log("logo_modifier : etat $etat invalide", 'logo');
87
-		$erreur = 'etat invalide';
88
-
89
-		return $erreur;
90
-	}
91
-	// chercher dans la base
92
-	$mode_document = 'logo' . $mode;
93
-
94
-	include_spip('inc/documents');
95
-	$erreur = '';
96
-
97
-	if (!$source) {
98
-		spip_log('spip_image_ajouter : source inconnue', 'logo');
99
-		$erreur = 'source inconnue';
100
-
101
-		return $erreur;
102
-	}
103
-
104
-	// fichier dans upload/
105
-	if (is_string($source)) {
106
-		$tmp_name = false;
107
-		if (file_exists($source)) {
108
-			$tmp_name = $source;
109
-		} elseif (file_exists($f = determine_upload() . $source)) {
110
-			$tmp_name = $f;
111
-		}
112
-		if (!$tmp_name) {
113
-			spip_log('spip_image_ajouter : source inconnue', 'logo');
114
-			$erreur = 'source inconnue';
115
-
116
-			return $erreur;
117
-		}
118
-		$source = [
119
-			'tmp_name' => $tmp_name,
120
-			'name' => basename($tmp_name),
121
-		];
122
-	} elseif ($erreur = check_upload_error($source['error'], '', true)) {
123
-		return $erreur;
124
-	}
125
-
126
-	// supprimer le logo eventueel existant
127
-	// TODO : si un logo existe, le modifier plutot que supprimer + reinserer (mais il faut gerer le cas ou il est utilise par plusieurs objets, donc pas si simple)
128
-	// mais de toute facon l'interface actuelle oblige a supprimer + reinserer
129
-	if (empty($GLOBALS['logo_migrer_en_base'])) {
130
-		logo_supprimer($objet, $id_objet, $etat);
131
-	}
132
-
133
-
134
-	include_spip('inc/autoriser');
135
-	$source['mode'] = $mode_document;
136
-	$ajouter_documents = charger_fonction('ajouter_documents', 'action');
137
-	autoriser_exception('associerdocuments', $objet, $id_objet);
138
-	$ajoutes = $ajouter_documents('new', [$source], $objet, $id_objet, $mode_document);
139
-	autoriser_exception('associerdocuments', $objet, $id_objet, false);
140
-
141
-	$id_document = reset($ajoutes);
142
-
143
-	if (!is_numeric($id_document)) {
144
-		$erreur = ($id_document ?: 'Erreur inconnue');
145
-		spip_log("Erreur ajout logo : $erreur pour source=" . json_encode($source, JSON_THROW_ON_ERROR), 'logo');
146
-		return $erreur;
147
-	}
148
-
149
-	return ''; // tout est bon, pas d'erreur
79
+    $chercher_logo = charger_fonction('chercher_logo', 'inc');
80
+    $objet = objet_type($objet);
81
+    $primary = id_table_objet($objet);
82
+    include_spip('inc/chercher_logo');
83
+
84
+    $mode = preg_replace(',\W,', '', $etat);
85
+    if (!$mode) {
86
+        spip_log("logo_modifier : etat $etat invalide", 'logo');
87
+        $erreur = 'etat invalide';
88
+
89
+        return $erreur;
90
+    }
91
+    // chercher dans la base
92
+    $mode_document = 'logo' . $mode;
93
+
94
+    include_spip('inc/documents');
95
+    $erreur = '';
96
+
97
+    if (!$source) {
98
+        spip_log('spip_image_ajouter : source inconnue', 'logo');
99
+        $erreur = 'source inconnue';
100
+
101
+        return $erreur;
102
+    }
103
+
104
+    // fichier dans upload/
105
+    if (is_string($source)) {
106
+        $tmp_name = false;
107
+        if (file_exists($source)) {
108
+            $tmp_name = $source;
109
+        } elseif (file_exists($f = determine_upload() . $source)) {
110
+            $tmp_name = $f;
111
+        }
112
+        if (!$tmp_name) {
113
+            spip_log('spip_image_ajouter : source inconnue', 'logo');
114
+            $erreur = 'source inconnue';
115
+
116
+            return $erreur;
117
+        }
118
+        $source = [
119
+            'tmp_name' => $tmp_name,
120
+            'name' => basename($tmp_name),
121
+        ];
122
+    } elseif ($erreur = check_upload_error($source['error'], '', true)) {
123
+        return $erreur;
124
+    }
125
+
126
+    // supprimer le logo eventueel existant
127
+    // TODO : si un logo existe, le modifier plutot que supprimer + reinserer (mais il faut gerer le cas ou il est utilise par plusieurs objets, donc pas si simple)
128
+    // mais de toute facon l'interface actuelle oblige a supprimer + reinserer
129
+    if (empty($GLOBALS['logo_migrer_en_base'])) {
130
+        logo_supprimer($objet, $id_objet, $etat);
131
+    }
132
+
133
+
134
+    include_spip('inc/autoriser');
135
+    $source['mode'] = $mode_document;
136
+    $ajouter_documents = charger_fonction('ajouter_documents', 'action');
137
+    autoriser_exception('associerdocuments', $objet, $id_objet);
138
+    $ajoutes = $ajouter_documents('new', [$source], $objet, $id_objet, $mode_document);
139
+    autoriser_exception('associerdocuments', $objet, $id_objet, false);
140
+
141
+    $id_document = reset($ajoutes);
142
+
143
+    if (!is_numeric($id_document)) {
144
+        $erreur = ($id_document ?: 'Erreur inconnue');
145
+        spip_log("Erreur ajout logo : $erreur pour source=" . json_encode($source, JSON_THROW_ON_ERROR), 'logo');
146
+        return $erreur;
147
+    }
148
+
149
+    return ''; // tout est bon, pas d'erreur
150 150
 }
151 151
 
152 152
 function logo_migrer_en_base($objet, $time_limit) {
153 153
 
154
-	$dir_logos_erreurs = sous_repertoire(_DIR_IMG, 'logo_erreurs');
155
-	$dir_logos = sous_repertoire(_DIR_IMG, 'logo');
156
-	$formats_logos = ['jpg', 'png', 'svg', 'gif'];
157
-	if (isset($GLOBALS['formats_logos'])) {
158
-		$formats_logos = $GLOBALS['formats_logos'];
159
-	}
160
-
161
-
162
-	$trouver_table = charger_fonction('trouver_table', 'base');
163
-	$chercher_logo = charger_fonction('chercher_logo', 'inc');
164
-	include_spip('inc/chercher_logo');
165
-	$_id_objet = id_table_objet($objet);
166
-	$table = table_objet_sql($objet);
167
-	$type = type_du_logo($_id_objet);
168
-	$desc = $trouver_table($table);
169
-
170
-	// on desactive les revisions
171
-	$liste_objets_versionnes = $GLOBALS['meta']['objets_versions'] ?? '';
172
-	unset($GLOBALS['meta']['objets_versions']);
173
-	// et le signalement des editions
174
-	$articles_modif = $GLOBALS['meta']['articles_modif'] ?? '';
175
-	$GLOBALS['meta']['articles_modif'] = 'non';
176
-
177
-	foreach (['on', 'off'] as $mode) {
178
-		$nom_base = $type . $mode;
179
-		$dir = (defined('_DIR_LOGOS') ? _DIR_LOGOS : _DIR_IMG);
180
-
181
-		$files = glob($dir . $nom_base . '*');
182
-		// est-ce que c'est une nouvelle tentative de migration ?
183
-		// dans ce cas les logos sont deja dans IMG/logo/
184
-		if (!(is_countable($files) ? count($files) : 0)) {
185
-			$files = glob($dir_logos . $nom_base . '*');
186
-			if (is_countable($files) ? count($files) : 0) {
187
-				// mais il faut verifier si ils ont pas deja ete migres pour tout ou partie
188
-				$filescheck = [];
189
-				foreach ($files as $file) {
190
-					$short = basename(dirname($file)) . DIRECTORY_SEPARATOR . basename($file);
191
-					$filescheck[$short] = $file;
192
-				}
193
-				// trouver ceux deja migres
194
-				$deja = sql_allfetsel('fichier', 'spip_documents', sql_in('fichier', array_keys($filescheck)) . " AND mode LIKE 'logo%'");
195
-				if (is_countable($deja) ? count($deja) : 0) {
196
-					$deja = array_column($deja, 'fichier');
197
-					$restant = array_diff(array_keys($filescheck), $deja);
198
-					$files = [];
199
-					if (count($restant)) {
200
-						foreach ($restant as $r) {
201
-							$files[] = $filescheck[$r];
202
-						}
203
-					}
204
-				}
205
-				// et si il en reste on peut y aller...
206
-				// mais il faut modifier $dir qui sert de base dans la suite
207
-				if (is_countable($files) ? count($files) : 0) {
208
-					$dir = $dir_logos;
209
-				}
210
-			}
211
-		}
212
-
213
-		$count = (is_countable($files) ? count($files) : 0);
214
-		spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE);
215
-
216
-		$deja = [];
217
-		foreach ($files as $file) {
218
-			$logo = substr($file, strlen($dir . $nom_base));
219
-			$logo = explode('.', $logo);
220
-			if (
221
-				is_numeric($logo[0])
222
-				and ($id_objet = intval($logo[0]) or in_array($objet, ['site', 'rubrique']))
223
-			) {
224
-				if (!isset($deja[$id_objet])) {
225
-					$logo = $chercher_logo($id_objet, $_id_objet, $mode);
226
-					// if no logo in base
227
-					if (!$logo or (is_countable($logo) ? count($logo) : 0) < 6) {
228
-						foreach ($formats_logos as $format) {
229
-							if (@file_exists($d = ($dir . ($nom = $nom_base . intval($id_objet) . '.' . $format)))) {
230
-								if (isset($desc['field']['date_modif'])) {
231
-									$date_modif = sql_getfetsel('date_modif', $table, "$_id_objet=$id_objet");
232
-								} else {
233
-									$date_modif = null;
234
-								}
235
-								// s'assurer que le logo a les bon droits au passage (evite un echec en cas de sanitization d'un svg)
236
-								@chmod($d, _SPIP_CHMOD & 0666);
237
-								// logo_modifier commence par supprimer le logo existant, donc on le deplace pour pas le perdre
238
-								@rename($d, $dir_logos . $nom);
239
-								// et on le declare comme nouveau logo
240
-								logo_modifier($objet, $id_objet, $mode, $dir_logos . $nom);
241
-								if ($date_modif) {
242
-									sql_updateq($table, ['date_modif' => $date_modif], "$_id_objet=$id_objet");
243
-								}
244
-								break;
245
-							}
246
-						}
247
-					}
248
-					$deja[$id_objet] = true;
249
-				}
250
-			}
251
-			// si le fichier est encore la on le move : rien a faire ici
252
-			// (sauf si c'est une re-migration : il est deja dans logo/ donc il bouge pas)
253
-			if ($dir !== $dir_logos and file_exists($file)) {
254
-				@rename($file, $dir_logos_erreurs . basename($file));
255
-			}
256
-
257
-			$count--;
258
-			if ($count % 250 === 0) {
259
-				spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE);
260
-			}
261
-
262
-			if ($time_limit and time() > $time_limit) {
263
-				effacer_meta('drapeau_edition');
264
-				return;
265
-			}
266
-		}
267
-	}
268
-
269
-	if ($liste_objets_versionnes) {
270
-		$GLOBALS['meta']['objets_versions'] = $liste_objets_versionnes;
271
-	}
272
-	$GLOBALS['meta']['articles_modif'] = $articles_modif;
273
-
274
-	effacer_meta('drapeau_edition');
154
+    $dir_logos_erreurs = sous_repertoire(_DIR_IMG, 'logo_erreurs');
155
+    $dir_logos = sous_repertoire(_DIR_IMG, 'logo');
156
+    $formats_logos = ['jpg', 'png', 'svg', 'gif'];
157
+    if (isset($GLOBALS['formats_logos'])) {
158
+        $formats_logos = $GLOBALS['formats_logos'];
159
+    }
160
+
161
+
162
+    $trouver_table = charger_fonction('trouver_table', 'base');
163
+    $chercher_logo = charger_fonction('chercher_logo', 'inc');
164
+    include_spip('inc/chercher_logo');
165
+    $_id_objet = id_table_objet($objet);
166
+    $table = table_objet_sql($objet);
167
+    $type = type_du_logo($_id_objet);
168
+    $desc = $trouver_table($table);
169
+
170
+    // on desactive les revisions
171
+    $liste_objets_versionnes = $GLOBALS['meta']['objets_versions'] ?? '';
172
+    unset($GLOBALS['meta']['objets_versions']);
173
+    // et le signalement des editions
174
+    $articles_modif = $GLOBALS['meta']['articles_modif'] ?? '';
175
+    $GLOBALS['meta']['articles_modif'] = 'non';
176
+
177
+    foreach (['on', 'off'] as $mode) {
178
+        $nom_base = $type . $mode;
179
+        $dir = (defined('_DIR_LOGOS') ? _DIR_LOGOS : _DIR_IMG);
180
+
181
+        $files = glob($dir . $nom_base . '*');
182
+        // est-ce que c'est une nouvelle tentative de migration ?
183
+        // dans ce cas les logos sont deja dans IMG/logo/
184
+        if (!(is_countable($files) ? count($files) : 0)) {
185
+            $files = glob($dir_logos . $nom_base . '*');
186
+            if (is_countable($files) ? count($files) : 0) {
187
+                // mais il faut verifier si ils ont pas deja ete migres pour tout ou partie
188
+                $filescheck = [];
189
+                foreach ($files as $file) {
190
+                    $short = basename(dirname($file)) . DIRECTORY_SEPARATOR . basename($file);
191
+                    $filescheck[$short] = $file;
192
+                }
193
+                // trouver ceux deja migres
194
+                $deja = sql_allfetsel('fichier', 'spip_documents', sql_in('fichier', array_keys($filescheck)) . " AND mode LIKE 'logo%'");
195
+                if (is_countable($deja) ? count($deja) : 0) {
196
+                    $deja = array_column($deja, 'fichier');
197
+                    $restant = array_diff(array_keys($filescheck), $deja);
198
+                    $files = [];
199
+                    if (count($restant)) {
200
+                        foreach ($restant as $r) {
201
+                            $files[] = $filescheck[$r];
202
+                        }
203
+                    }
204
+                }
205
+                // et si il en reste on peut y aller...
206
+                // mais il faut modifier $dir qui sert de base dans la suite
207
+                if (is_countable($files) ? count($files) : 0) {
208
+                    $dir = $dir_logos;
209
+                }
210
+            }
211
+        }
212
+
213
+        $count = (is_countable($files) ? count($files) : 0);
214
+        spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE);
215
+
216
+        $deja = [];
217
+        foreach ($files as $file) {
218
+            $logo = substr($file, strlen($dir . $nom_base));
219
+            $logo = explode('.', $logo);
220
+            if (
221
+                is_numeric($logo[0])
222
+                and ($id_objet = intval($logo[0]) or in_array($objet, ['site', 'rubrique']))
223
+            ) {
224
+                if (!isset($deja[$id_objet])) {
225
+                    $logo = $chercher_logo($id_objet, $_id_objet, $mode);
226
+                    // if no logo in base
227
+                    if (!$logo or (is_countable($logo) ? count($logo) : 0) < 6) {
228
+                        foreach ($formats_logos as $format) {
229
+                            if (@file_exists($d = ($dir . ($nom = $nom_base . intval($id_objet) . '.' . $format)))) {
230
+                                if (isset($desc['field']['date_modif'])) {
231
+                                    $date_modif = sql_getfetsel('date_modif', $table, "$_id_objet=$id_objet");
232
+                                } else {
233
+                                    $date_modif = null;
234
+                                }
235
+                                // s'assurer que le logo a les bon droits au passage (evite un echec en cas de sanitization d'un svg)
236
+                                @chmod($d, _SPIP_CHMOD & 0666);
237
+                                // logo_modifier commence par supprimer le logo existant, donc on le deplace pour pas le perdre
238
+                                @rename($d, $dir_logos . $nom);
239
+                                // et on le declare comme nouveau logo
240
+                                logo_modifier($objet, $id_objet, $mode, $dir_logos . $nom);
241
+                                if ($date_modif) {
242
+                                    sql_updateq($table, ['date_modif' => $date_modif], "$_id_objet=$id_objet");
243
+                                }
244
+                                break;
245
+                            }
246
+                        }
247
+                    }
248
+                    $deja[$id_objet] = true;
249
+                }
250
+            }
251
+            // si le fichier est encore la on le move : rien a faire ici
252
+            // (sauf si c'est une re-migration : il est deja dans logo/ donc il bouge pas)
253
+            if ($dir !== $dir_logos and file_exists($file)) {
254
+                @rename($file, $dir_logos_erreurs . basename($file));
255
+            }
256
+
257
+            $count--;
258
+            if ($count % 250 === 0) {
259
+                spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE);
260
+            }
261
+
262
+            if ($time_limit and time() > $time_limit) {
263
+                effacer_meta('drapeau_edition');
264
+                return;
265
+            }
266
+        }
267
+    }
268
+
269
+    if ($liste_objets_versionnes) {
270
+        $GLOBALS['meta']['objets_versions'] = $liste_objets_versionnes;
271
+    }
272
+    $GLOBALS['meta']['articles_modif'] = $articles_modif;
273
+
274
+    effacer_meta('drapeau_edition');
275 275
 }
Please login to merge, or discard this patch.
Spacing   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -40,7 +40,7 @@  discard block
 block discarded – undo
40 40
 	if ($logo) {
41 41
 		# TODO : deprecated, a supprimer -> anciens logos IMG/artonxx.png pas en base
42 42
 		if ((is_countable($logo) ? count($logo) : 0) < 6) {
43
-			spip_log('Supprimer ancien logo ' . json_encode($logo, JSON_THROW_ON_ERROR), 'logo');
43
+			spip_log('Supprimer ancien logo '.json_encode($logo, JSON_THROW_ON_ERROR), 'logo');
44 44
 			spip_unlink($logo[0]);
45 45
 		}
46 46
 		elseif (
@@ -89,7 +89,7 @@  discard block
 block discarded – undo
89 89
 		return $erreur;
90 90
 	}
91 91
 	// chercher dans la base
92
-	$mode_document = 'logo' . $mode;
92
+	$mode_document = 'logo'.$mode;
93 93
 
94 94
 	include_spip('inc/documents');
95 95
 	$erreur = '';
@@ -106,7 +106,7 @@  discard block
 block discarded – undo
106 106
 		$tmp_name = false;
107 107
 		if (file_exists($source)) {
108 108
 			$tmp_name = $source;
109
-		} elseif (file_exists($f = determine_upload() . $source)) {
109
+		} elseif (file_exists($f = determine_upload().$source)) {
110 110
 			$tmp_name = $f;
111 111
 		}
112 112
 		if (!$tmp_name) {
@@ -142,7 +142,7 @@  discard block
 block discarded – undo
142 142
 
143 143
 	if (!is_numeric($id_document)) {
144 144
 		$erreur = ($id_document ?: 'Erreur inconnue');
145
-		spip_log("Erreur ajout logo : $erreur pour source=" . json_encode($source, JSON_THROW_ON_ERROR), 'logo');
145
+		spip_log("Erreur ajout logo : $erreur pour source=".json_encode($source, JSON_THROW_ON_ERROR), 'logo');
146 146
 		return $erreur;
147 147
 	}
148 148
 
@@ -175,23 +175,23 @@  discard block
 block discarded – undo
175 175
 	$GLOBALS['meta']['articles_modif'] = 'non';
176 176
 
177 177
 	foreach (['on', 'off'] as $mode) {
178
-		$nom_base = $type . $mode;
178
+		$nom_base = $type.$mode;
179 179
 		$dir = (defined('_DIR_LOGOS') ? _DIR_LOGOS : _DIR_IMG);
180 180
 
181
-		$files = glob($dir . $nom_base . '*');
181
+		$files = glob($dir.$nom_base.'*');
182 182
 		// est-ce que c'est une nouvelle tentative de migration ?
183 183
 		// dans ce cas les logos sont deja dans IMG/logo/
184 184
 		if (!(is_countable($files) ? count($files) : 0)) {
185
-			$files = glob($dir_logos . $nom_base . '*');
185
+			$files = glob($dir_logos.$nom_base.'*');
186 186
 			if (is_countable($files) ? count($files) : 0) {
187 187
 				// mais il faut verifier si ils ont pas deja ete migres pour tout ou partie
188 188
 				$filescheck = [];
189 189
 				foreach ($files as $file) {
190
-					$short = basename(dirname($file)) . DIRECTORY_SEPARATOR . basename($file);
190
+					$short = basename(dirname($file)).DIRECTORY_SEPARATOR.basename($file);
191 191
 					$filescheck[$short] = $file;
192 192
 				}
193 193
 				// trouver ceux deja migres
194
-				$deja = sql_allfetsel('fichier', 'spip_documents', sql_in('fichier', array_keys($filescheck)) . " AND mode LIKE 'logo%'");
194
+				$deja = sql_allfetsel('fichier', 'spip_documents', sql_in('fichier', array_keys($filescheck))." AND mode LIKE 'logo%'");
195 195
 				if (is_countable($deja) ? count($deja) : 0) {
196 196
 					$deja = array_column($deja, 'fichier');
197 197
 					$restant = array_diff(array_keys($filescheck), $deja);
@@ -211,11 +211,11 @@  discard block
 block discarded – undo
211 211
 		}
212 212
 
213 213
 		$count = (is_countable($files) ? count($files) : 0);
214
-		spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE);
214
+		spip_log("logo_migrer_en_base $objet $mode : ".$count.' logos restant', 'maj'._LOG_INFO_IMPORTANTE);
215 215
 
216 216
 		$deja = [];
217 217
 		foreach ($files as $file) {
218
-			$logo = substr($file, strlen($dir . $nom_base));
218
+			$logo = substr($file, strlen($dir.$nom_base));
219 219
 			$logo = explode('.', $logo);
220 220
 			if (
221 221
 				is_numeric($logo[0])
@@ -226,7 +226,7 @@  discard block
 block discarded – undo
226 226
 					// if no logo in base
227 227
 					if (!$logo or (is_countable($logo) ? count($logo) : 0) < 6) {
228 228
 						foreach ($formats_logos as $format) {
229
-							if (@file_exists($d = ($dir . ($nom = $nom_base . intval($id_objet) . '.' . $format)))) {
229
+							if (@file_exists($d = ($dir.($nom = $nom_base.intval($id_objet).'.'.$format)))) {
230 230
 								if (isset($desc['field']['date_modif'])) {
231 231
 									$date_modif = sql_getfetsel('date_modif', $table, "$_id_objet=$id_objet");
232 232
 								} else {
@@ -235,9 +235,9 @@  discard block
 block discarded – undo
235 235
 								// s'assurer que le logo a les bon droits au passage (evite un echec en cas de sanitization d'un svg)
236 236
 								@chmod($d, _SPIP_CHMOD & 0666);
237 237
 								// logo_modifier commence par supprimer le logo existant, donc on le deplace pour pas le perdre
238
-								@rename($d, $dir_logos . $nom);
238
+								@rename($d, $dir_logos.$nom);
239 239
 								// et on le declare comme nouveau logo
240
-								logo_modifier($objet, $id_objet, $mode, $dir_logos . $nom);
240
+								logo_modifier($objet, $id_objet, $mode, $dir_logos.$nom);
241 241
 								if ($date_modif) {
242 242
 									sql_updateq($table, ['date_modif' => $date_modif], "$_id_objet=$id_objet");
243 243
 								}
@@ -251,12 +251,12 @@  discard block
 block discarded – undo
251 251
 			// si le fichier est encore la on le move : rien a faire ici
252 252
 			// (sauf si c'est une re-migration : il est deja dans logo/ donc il bouge pas)
253 253
 			if ($dir !== $dir_logos and file_exists($file)) {
254
-				@rename($file, $dir_logos_erreurs . basename($file));
254
+				@rename($file, $dir_logos_erreurs.basename($file));
255 255
 			}
256 256
 
257 257
 			$count--;
258 258
 			if ($count % 250 === 0) {
259
-				spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE);
259
+				spip_log("logo_migrer_en_base $objet $mode : ".$count.' logos restant', 'maj'._LOG_INFO_IMPORTANTE);
260 260
 			}
261 261
 
262 262
 			if ($time_limit and time() > $time_limit) {
Please login to merge, or discard this patch.
ecrire/inc/filtres_mini.php 2 patches
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -45,10 +45,10 @@  discard block
 block discarded – undo
45 45
 	}
46 46
 
47 47
 	if ($query) {
48
-		$url .= '?' . $query;
48
+		$url .= '?'.$query;
49 49
 	}
50 50
 
51
-	return '/' . preg_replace(',^/,S', '', $url);
51
+	return '/'.preg_replace(',^/,S', '', $url);
52 52
 }
53 53
 
54 54
 
@@ -78,7 +78,7 @@  discard block
 block discarded – undo
78 78
 	if (preg_match(';^((?:[a-z]{3,33}:)?//.*?)(/.*)?$;iS', $lien, $r)) {
79 79
 		$r = array_pad($r, 3, '');
80 80
 
81
-		return $r[1] . resolve_path($r[2]);
81
+		return $r[1].resolve_path($r[2]);
82 82
 	}
83 83
 
84 84
 	# L'url site spip est un lien absolu aussi
@@ -99,13 +99,13 @@  discard block
 block discarded – undo
99 99
 	}
100 100
 	switch (substr($lien, 0, 1)) {
101 101
 		case '/':
102
-			return $debut . resolve_path($lien);
102
+			return $debut.resolve_path($lien);
103 103
 		case '#':
104
-			return $debut . resolve_path($dir . $mot . $get . $lien);
104
+			return $debut.resolve_path($dir.$mot.$get.$lien);
105 105
 		case '':
106
-			return $debut . resolve_path($dir . $mot . $get . $hash);
106
+			return $debut.resolve_path($dir.$mot.$get.$hash);
107 107
 		default:
108
-			return $debut . resolve_path($dir . $lien);
108
+			return $debut.resolve_path($dir.$lien);
109 109
 	}
110 110
 }
111 111
 
@@ -133,7 +133,7 @@  discard block
 block discarded – undo
133 133
 		return '';
134 134
 	}
135 135
 	if (!$base) {
136
-		$base = url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : '');
136
+		$base = url_de_base().(_DIR_RACINE ? _DIR_RESTREINT_ABS : '');
137 137
 	}
138 138
 
139 139
 	return suivre_lien($base, $url);
@@ -156,7 +156,7 @@  discard block
 block discarded – undo
156 156
  * @param array $protocoles_autorises
157 157
  * @return bool
158 158
  */
159
-function protocole_verifier($url_absolue, $protocoles_autorises = ['http','https']) {
159
+function protocole_verifier($url_absolue, $protocoles_autorises = ['http', 'https']) {
160 160
 
161 161
 	if (preg_match(';^([a-z]{3,7})://;i', $url_absolue, $m)) {
162 162
 		$protocole = $m[1];
Please login to merge, or discard this patch.
Indentation   +100 added lines, -100 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -35,20 +35,20 @@  discard block
 block discarded – undo
35 35
  * @return string URL nettoyée
36 36
  **/
37 37
 function resolve_path($url) {
38
-	[$url, $query] = array_pad(explode('?', $url, 2), 2, null);
39
-	while (
40
-		preg_match(',/\.?/,', $url, $regs)    # supprime // et /./
41
-		or preg_match(',/[^/]*/\.\./,S', $url, $regs)  # supprime /toto/../
42
-		or preg_match(',^/\.\./,S', $url, $regs) # supprime les /../ du haut
43
-	) {
44
-		$url = str_replace($regs[0], '/', $url);
45
-	}
38
+    [$url, $query] = array_pad(explode('?', $url, 2), 2, null);
39
+    while (
40
+        preg_match(',/\.?/,', $url, $regs)    # supprime // et /./
41
+        or preg_match(',/[^/]*/\.\./,S', $url, $regs)  # supprime /toto/../
42
+        or preg_match(',^/\.\./,S', $url, $regs) # supprime les /../ du haut
43
+    ) {
44
+        $url = str_replace($regs[0], '/', $url);
45
+    }
46 46
 
47
-	if ($query) {
48
-		$url .= '?' . $query;
49
-	}
47
+    if ($query) {
48
+        $url .= '?' . $query;
49
+    }
50 50
 
51
-	return '/' . preg_replace(',^/,S', '', $url);
51
+    return '/' . preg_replace(',^/,S', '', $url);
52 52
 }
53 53
 
54 54
 
@@ -69,44 +69,44 @@  discard block
 block discarded – undo
69 69
  **/
70 70
 function suivre_lien($url, $lien) {
71 71
 
72
-	$mot = null;
73
-	$get = null;
74
-	$hash = null;
75
-	if (preg_match(',^(mailto|javascript|data|tel|callto|file|ftp):,iS', $lien)) {
76
-		return $lien;
77
-	}
78
-	if (preg_match(';^((?:[a-z]{3,33}:)?//.*?)(/.*)?$;iS', $lien, $r)) {
79
-		$r = array_pad($r, 3, '');
72
+    $mot = null;
73
+    $get = null;
74
+    $hash = null;
75
+    if (preg_match(',^(mailto|javascript|data|tel|callto|file|ftp):,iS', $lien)) {
76
+        return $lien;
77
+    }
78
+    if (preg_match(';^((?:[a-z]{3,33}:)?//.*?)(/.*)?$;iS', $lien, $r)) {
79
+        $r = array_pad($r, 3, '');
80 80
 
81
-		return $r[1] . resolve_path($r[2]);
82
-	}
81
+        return $r[1] . resolve_path($r[2]);
82
+    }
83 83
 
84
-	# L'url site spip est un lien absolu aussi
85
-	if (isset($GLOBALS['meta']['adresse_site']) and $lien == $GLOBALS['meta']['adresse_site']) {
86
-		return $lien;
87
-	}
84
+    # L'url site spip est un lien absolu aussi
85
+    if (isset($GLOBALS['meta']['adresse_site']) and $lien == $GLOBALS['meta']['adresse_site']) {
86
+        return $lien;
87
+    }
88 88
 
89
-	# lien relatif, il faut verifier l'url de base
90
-	# commencer par virer la chaine de get de l'url de base
91
-	$dir = '/';
92
-	$debut = '';
93
-	if (preg_match(';^((?:[a-z]{3,7}:)?//[^/]+)(/.*?/?)?([^/#?]*)([?][^#]*)?(#.*)?$;S', $url, $regs)) {
94
-		$debut = $regs[1];
95
-		$dir = !strlen($regs[2]) ? '/' : $regs[2];
96
-		$mot = $regs[3];
97
-		$get = $regs[4] ?? '';
98
-		$hash = $regs[5] ?? '';
99
-	}
100
-	switch (substr($lien, 0, 1)) {
101
-		case '/':
102
-			return $debut . resolve_path($lien);
103
-		case '#':
104
-			return $debut . resolve_path($dir . $mot . $get . $lien);
105
-		case '':
106
-			return $debut . resolve_path($dir . $mot . $get . $hash);
107
-		default:
108
-			return $debut . resolve_path($dir . $lien);
109
-	}
89
+    # lien relatif, il faut verifier l'url de base
90
+    # commencer par virer la chaine de get de l'url de base
91
+    $dir = '/';
92
+    $debut = '';
93
+    if (preg_match(';^((?:[a-z]{3,7}:)?//[^/]+)(/.*?/?)?([^/#?]*)([?][^#]*)?(#.*)?$;S', $url, $regs)) {
94
+        $debut = $regs[1];
95
+        $dir = !strlen($regs[2]) ? '/' : $regs[2];
96
+        $mot = $regs[3];
97
+        $get = $regs[4] ?? '';
98
+        $hash = $regs[5] ?? '';
99
+    }
100
+    switch (substr($lien, 0, 1)) {
101
+        case '/':
102
+            return $debut . resolve_path($lien);
103
+        case '#':
104
+            return $debut . resolve_path($dir . $mot . $get . $lien);
105
+        case '':
106
+            return $debut . resolve_path($dir . $mot . $get . $hash);
107
+        default:
108
+            return $debut . resolve_path($dir . $lien);
109
+    }
110 110
 }
111 111
 
112 112
 
@@ -129,15 +129,15 @@  discard block
 block discarded – undo
129 129
  * @return string texte ou URL (en absolus)
130 130
  **/
131 131
 function url_absolue($url, $base = '') {
132
-	$url = trim((string) $url);
133
-	if (strlen($url = trim($url)) == 0) {
134
-		return '';
135
-	}
136
-	if (!$base) {
137
-		$base = url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : '');
138
-	}
132
+    $url = trim((string) $url);
133
+    if (strlen($url = trim($url)) == 0) {
134
+        return '';
135
+    }
136
+    if (!$base) {
137
+        $base = url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : '');
138
+    }
139 139
 
140
-	return suivre_lien($base, $url);
140
+    return suivre_lien($base, $url);
141 141
 }
142 142
 
143 143
 /**
@@ -148,7 +148,7 @@  discard block
 block discarded – undo
148 148
  * @return string
149 149
  */
150 150
 function protocole_implicite($url_absolue) {
151
-	return preg_replace(';^[a-z]{3,7}://;i', '//', $url_absolue);
151
+    return preg_replace(';^[a-z]{3,7}://;i', '//', $url_absolue);
152 152
 }
153 153
 
154 154
 /**
@@ -159,16 +159,16 @@  discard block
 block discarded – undo
159 159
  */
160 160
 function protocole_verifier($url_absolue, $protocoles_autorises = ['http','https']) {
161 161
 
162
-	if (preg_match(';^([a-z]{3,7})://;i', $url_absolue, $m)) {
163
-		$protocole = $m[1];
164
-		if (
165
-			in_array($protocole, $protocoles_autorises)
166
-			or in_array(strtolower($protocole), array_map('strtolower', $protocoles_autorises))
167
-		) {
168
-			return true;
169
-		}
170
-	}
171
-	return false;
162
+    if (preg_match(';^([a-z]{3,7})://;i', $url_absolue, $m)) {
163
+        $protocole = $m[1];
164
+        if (
165
+            in_array($protocole, $protocoles_autorises)
166
+            or in_array(strtolower($protocole), array_map('strtolower', $protocoles_autorises))
167
+        ) {
168
+            return true;
169
+        }
170
+    }
171
+    return false;
172 172
 }
173 173
 
174 174
 /**
@@ -185,27 +185,27 @@  discard block
 block discarded – undo
185 185
  * @return string texte avec des URLs absolues
186 186
  **/
187 187
 function liens_absolus($texte, $base = '') {
188
-	if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS', $texte, $liens, PREG_SET_ORDER)) {
189
-		if (!function_exists('extraire_attribut')) {
190
-			include_spip('inc/filtres');
191
-		}
192
-		foreach ($liens as $lien) {
193
-			foreach (['href', 'src'] as $attr) {
194
-				$href = extraire_attribut($lien[0], $attr) ?? '';
195
-				if (strlen($href) > 0) {
196
-					if (!preg_match(';^((?:[a-z]{3,7}:)?//);iS', $href)) {
197
-						$abs = url_absolue($href, $base);
198
-						if (rtrim($href, '/') !== rtrim($abs, '/') and !preg_match('/^#/', $href)) {
199
-							$texte_lien = inserer_attribut($lien[0], $attr, $abs);
200
-							$texte = str_replace($lien[0], $texte_lien, $texte);
201
-						}
202
-					}
203
-				}
204
-			}
205
-		}
206
-	}
188
+    if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS', $texte, $liens, PREG_SET_ORDER)) {
189
+        if (!function_exists('extraire_attribut')) {
190
+            include_spip('inc/filtres');
191
+        }
192
+        foreach ($liens as $lien) {
193
+            foreach (['href', 'src'] as $attr) {
194
+                $href = extraire_attribut($lien[0], $attr) ?? '';
195
+                if (strlen($href) > 0) {
196
+                    if (!preg_match(';^((?:[a-z]{3,7}:)?//);iS', $href)) {
197
+                        $abs = url_absolue($href, $base);
198
+                        if (rtrim($href, '/') !== rtrim($abs, '/') and !preg_match('/^#/', $href)) {
199
+                            $texte_lien = inserer_attribut($lien[0], $attr, $abs);
200
+                            $texte = str_replace($lien[0], $texte_lien, $texte);
201
+                        }
202
+                    }
203
+                }
204
+            }
205
+        }
206
+    }
207 207
 
208
-	return $texte;
208
+    return $texte;
209 209
 }
210 210
 
211 211
 
@@ -221,11 +221,11 @@  discard block
 block discarded – undo
221 221
  * @return string texte ou URL (en absolus)
222 222
  **/
223 223
 function abs_url($texte, $base = '') {
224
-	if ($GLOBALS['mode_abs_url'] == 'url') {
225
-		return url_absolue($texte, $base);
226
-	} else {
227
-		return liens_absolus($texte, $base);
228
-	}
224
+    if ($GLOBALS['mode_abs_url'] == 'url') {
225
+        return url_absolue($texte, $base);
226
+    } else {
227
+        return liens_absolus($texte, $base);
228
+    }
229 229
 }
230 230
 
231 231
 /**
@@ -238,11 +238,11 @@  discard block
 block discarded – undo
238 238
  * @return string
239 239
  */
240 240
 function spip_htmlspecialchars($string, $flags = null, $encoding = 'UTF-8', $double_encode = true) {
241
-	if (is_null($flags)) {
242
-		$flags = ENT_COMPAT | ENT_HTML401;
243
-	}
241
+    if (is_null($flags)) {
242
+        $flags = ENT_COMPAT | ENT_HTML401;
243
+    }
244 244
 
245
-	return htmlspecialchars($string, $flags, $encoding, $double_encode);
245
+    return htmlspecialchars($string, $flags, $encoding, $double_encode);
246 246
 }
247 247
 
248 248
 /**
@@ -255,9 +255,9 @@  discard block
 block discarded – undo
255 255
  * @return string
256 256
  */
257 257
 function spip_htmlentities($string, $flags = null, $encoding = 'UTF-8', $double_encode = true) {
258
-	if (is_null($flags)) {
259
-		$flags = ENT_COMPAT | ENT_HTML401;
260
-	}
258
+    if (is_null($flags)) {
259
+        $flags = ENT_COMPAT | ENT_HTML401;
260
+    }
261 261
 
262
-	return htmlentities($string, $flags, $encoding, $double_encode);
262
+    return htmlentities($string, $flags, $encoding, $double_encode);
263 263
 }
Please login to merge, or discard this patch.
ecrire/inc/drapeau_edition.php 1 patch
Indentation   +109 added lines, -109 removed lines patch added patch discarded remove patch
@@ -30,7 +30,7 @@  discard block
 block discarded – undo
30 30
  * @package SPIP\Core\Drapeaux\Edition
31 31
  **/
32 32
 if (!defined('_ECRIRE_INC_VERSION')) {
33
-	return;
33
+    return;
34 34
 }
35 35
 
36 36
 
@@ -45,46 +45,46 @@  discard block
 block discarded – undo
45 45
  *     `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()`
46 46
  **/
47 47
 function lire_tableau_edition() {
48
-	$edition = @unserialize($GLOBALS['meta']['drapeau_edition']);
49
-	if (!$edition) {
50
-		return [];
51
-	}
52
-	$changed = false;
48
+    $edition = @unserialize($GLOBALS['meta']['drapeau_edition']);
49
+    if (!$edition) {
50
+        return [];
51
+    }
52
+    $changed = false;
53 53
 
54
-	$bon_pour_le_service = time() - 3600;
55
-	// parcourir le tableau et virer les vieux
56
-	foreach ($edition as $objet => $data) {
57
-		if (!is_array($data)) {
58
-			unset($edition[$objet]);
59
-		} // vieille version
60
-		else {
61
-			foreach ($data as $id => $tab) {
62
-				if (!is_array($tab)) {
63
-					unset($edition[$objet][$tab]);
64
-				} // vieille version
65
-				else {
66
-					foreach ($tab as $n => $duo) {
67
-						if (current($duo) < $bon_pour_le_service) {
68
-							unset($edition[$objet][$id][$n]);
69
-							$changed = true;
70
-						}
71
-					}
72
-				}
73
-				if (!$edition[$objet][$id]) {
74
-					unset($edition[$objet][$id]);
75
-				}
76
-			}
77
-		}
78
-		if (!$edition[$objet]) {
79
-			unset($edition[$objet]);
80
-		}
81
-	}
54
+    $bon_pour_le_service = time() - 3600;
55
+    // parcourir le tableau et virer les vieux
56
+    foreach ($edition as $objet => $data) {
57
+        if (!is_array($data)) {
58
+            unset($edition[$objet]);
59
+        } // vieille version
60
+        else {
61
+            foreach ($data as $id => $tab) {
62
+                if (!is_array($tab)) {
63
+                    unset($edition[$objet][$tab]);
64
+                } // vieille version
65
+                else {
66
+                    foreach ($tab as $n => $duo) {
67
+                        if (current($duo) < $bon_pour_le_service) {
68
+                            unset($edition[$objet][$id][$n]);
69
+                            $changed = true;
70
+                        }
71
+                    }
72
+                }
73
+                if (!$edition[$objet][$id]) {
74
+                    unset($edition[$objet][$id]);
75
+                }
76
+            }
77
+        }
78
+        if (!$edition[$objet]) {
79
+            unset($edition[$objet]);
80
+        }
81
+    }
82 82
 
83
-	if ($changed) {
84
-		ecrire_tableau_edition($edition);
85
-	}
83
+    if ($changed) {
84
+        ecrire_tableau_edition($edition);
85
+    }
86 86
 
87
-	return $edition;
87
+    return $edition;
88 88
 }
89 89
 
90 90
 /**
@@ -97,7 +97,7 @@  discard block
 block discarded – undo
97 97
  *     `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()`
98 98
  **/
99 99
 function ecrire_tableau_edition($edition) {
100
-	ecrire_meta('drapeau_edition', serialize($edition));
100
+    ecrire_meta('drapeau_edition', serialize($edition));
101 101
 }
102 102
 
103 103
 /**
@@ -117,22 +117,22 @@  discard block
 block discarded – undo
117 117
  *     Type d'objet édité
118 118
  */
119 119
 function signale_edition($id, $auteur, $type = 'article') {
120
-	include_spip('base/objets');
121
-	include_spip('inc/filtres');
122
-	if (objet_info($type, 'editable') !== 'oui') {
123
-		return;
124
-	}
120
+    include_spip('base/objets');
121
+    include_spip('inc/filtres');
122
+    if (objet_info($type, 'editable') !== 'oui') {
123
+        return;
124
+    }
125 125
 
126
-	$edition = lire_tableau_edition();
126
+    $edition = lire_tableau_edition();
127 127
 	
128
-	$nom = $auteur['nom'] ?? $GLOBALS['ip'];
129
-	$id_a = $auteur['id_auteur'] ?? $GLOBALS['ip'];
128
+    $nom = $auteur['nom'] ?? $GLOBALS['ip'];
129
+    $id_a = $auteur['id_auteur'] ?? $GLOBALS['ip'];
130 130
 
131
-	if (!isset($edition[$type][$id]) or !is_array($edition[$type][$id])) {
132
-		$edition[$type][$id] = [];
133
-	}
134
-	$edition[$type][$id][$id_a][$nom] = time();
135
-	ecrire_tableau_edition($edition);
131
+    if (!isset($edition[$type][$id]) or !is_array($edition[$type][$id])) {
132
+        $edition[$type][$id] = [];
133
+    }
134
+    $edition[$type][$id][$id_a][$nom] = time();
135
+    ecrire_tableau_edition($edition);
136 136
 }
137 137
 
138 138
 /**
@@ -149,9 +149,9 @@  discard block
 block discarded – undo
149 149
  */
150 150
 function qui_edite($id, $type = 'article') {
151 151
 
152
-	$edition = lire_tableau_edition();
152
+    $edition = lire_tableau_edition();
153 153
 
154
-	return empty($edition[$type][$id]) ? [] : $edition[$type][$id];
154
+    return empty($edition[$type][$id]) ? [] : $edition[$type][$id];
155 155
 }
156 156
 
157 157
 /**
@@ -165,23 +165,23 @@  discard block
 block discarded – undo
165 165
  *     Liste de tableaux `['nom_auteur_modif' => x|y|z, 'date_diff' => n]`
166 166
  */
167 167
 function mention_qui_edite($id, $type = 'article'): array {
168
-	$modif = qui_edite($id, $type);
169
-	unset($modif[$GLOBALS['visiteur_session']['id_auteur']]);
168
+    $modif = qui_edite($id, $type);
169
+    unset($modif[$GLOBALS['visiteur_session']['id_auteur']]);
170 170
 
171
-	if ($modif) {
172
-		$quand = 0;
173
-		foreach ($modif as $duo) {
174
-			$auteurs[] = typo(key($duo));
175
-			$quand = max($quand, current($duo));
176
-		}
171
+    if ($modif) {
172
+        $quand = 0;
173
+        foreach ($modif as $duo) {
174
+            $auteurs[] = typo(key($duo));
175
+            $quand = max($quand, current($duo));
176
+        }
177 177
 
178
-		// format lie a la chaine de langue 'avis_article_modifie'
179
-		return [
180
-			'nom_auteur_modif' => join(' | ', $auteurs),
181
-			'date_diff' => ceil((time() - $quand) / 60)
182
-		];
183
-	}
184
-	return [];
178
+        // format lie a la chaine de langue 'avis_article_modifie'
179
+        return [
180
+            'nom_auteur_modif' => join(' | ', $auteurs),
181
+            'date_diff' => ceil((time() - $quand) / 60)
182
+        ];
183
+    }
184
+    return [];
185 185
 }
186 186
 
187 187
 /**
@@ -195,25 +195,25 @@  discard block
 block discarded – undo
195 195
  *     Liste de tableaux `['objet' => x, 'id_objet' => n]`
196 196
  */
197 197
 function liste_drapeau_edition($id_auteur) {
198
-	$edition = lire_tableau_edition();
199
-	$objets_ouverts = [];
198
+    $edition = lire_tableau_edition();
199
+    $objets_ouverts = [];
200 200
 
201
-	foreach ($edition as $objet => $data) {
202
-		foreach ($data as $id => $auteurs) {
203
-			if (
204
-				isset($auteurs[$id_auteur])
205
-				and is_array($auteurs[$id_auteur]) // precaution
206
-				and (array_pop($auteurs[$id_auteur]) > time() - 3600)
207
-			) {
208
-				$objets_ouverts[] = [
209
-					'objet' => $objet,
210
-					'id_objet' => $id,
211
-				];
212
-			}
213
-		}
214
-	}
201
+    foreach ($edition as $objet => $data) {
202
+        foreach ($data as $id => $auteurs) {
203
+            if (
204
+                isset($auteurs[$id_auteur])
205
+                and is_array($auteurs[$id_auteur]) // precaution
206
+                and (array_pop($auteurs[$id_auteur]) > time() - 3600)
207
+            ) {
208
+                $objets_ouverts[] = [
209
+                    'objet' => $objet,
210
+                    'id_objet' => $id,
211
+                ];
212
+            }
213
+        }
214
+    }
215 215
 
216
-	return $objets_ouverts;
216
+    return $objets_ouverts;
217 217
 }
218 218
 
219 219
 /**
@@ -226,15 +226,15 @@  discard block
 block discarded – undo
226 226
  * @return void
227 227
  */
228 228
 function debloquer_tous($id_auteur) {
229
-	$edition = lire_tableau_edition();
230
-	foreach ($edition as $objet => $data) {
231
-		foreach ($data as $id => $auteurs) {
232
-			if (isset($auteurs[$id_auteur])) {
233
-				unset($edition[$objet][$id][$id_auteur]);
234
-				ecrire_tableau_edition($edition);
235
-			}
236
-		}
237
-	}
229
+    $edition = lire_tableau_edition();
230
+    foreach ($edition as $objet => $data) {
231
+        foreach ($data as $id => $auteurs) {
232
+            if (isset($auteurs[$id_auteur])) {
233
+                unset($edition[$objet][$id][$id_auteur]);
234
+                ecrire_tableau_edition($edition);
235
+            }
236
+        }
237
+    }
238 238
 }
239 239
 
240 240
 /**
@@ -252,19 +252,19 @@  discard block
 block discarded – undo
252 252
  * @return void
253 253
  */
254 254
 function debloquer_edition($id_auteur, $id_objet, $type = 'article') {
255
-	$edition = lire_tableau_edition();
255
+    $edition = lire_tableau_edition();
256 256
 
257
-	foreach ($edition as $objet => $data) {
258
-		if ($objet == $type) {
259
-			foreach ($data as $id => $auteurs) {
260
-				if (
261
-					$id == $id_objet
262
-					and isset($auteurs[$id_auteur])
263
-				) {
264
-					unset($edition[$objet][$id][$id_auteur]);
265
-					ecrire_tableau_edition($edition);
266
-				}
267
-			}
268
-		}
269
-	}
257
+    foreach ($edition as $objet => $data) {
258
+        if ($objet == $type) {
259
+            foreach ($data as $id => $auteurs) {
260
+                if (
261
+                    $id == $id_objet
262
+                    and isset($auteurs[$id_auteur])
263
+                ) {
264
+                    unset($edition[$objet][$id][$id_auteur]);
265
+                    ecrire_tableau_edition($edition);
266
+                }
267
+            }
268
+        }
269
+    }
270 270
 }
Please login to merge, or discard this patch.
ecrire/inc/modifier.php 2 patches
Spacing   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -113,7 +113,7 @@  discard block
 block discarded – undo
113 113
 
114 114
 	// Appels incomplets (sans $c)
115 115
 	if (!is_array($c)) {
116
-		spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c');
116
+		spip_log('erreur appel objet_modifier_champs('.$objet.'), manque $c');
117 117
 
118 118
 		return _T('erreur_technique_enregistrement_impossible');
119 119
 	}
@@ -140,7 +140,7 @@  discard block
 block discarded – undo
140 140
 	// N'accepter que les champs qui existent dans la table
141 141
 	$champs = array_intersect_key($c, $desc['field']);
142 142
 	// et dont la valeur n'est pas null
143
-	$champs = array_filter($champs, static function ($var) {
143
+	$champs = array_filter($champs, static function($var) {
144 144
 		return $var !== null;
145 145
 	});
146 146
 	// TODO: ici aussi on peut valider les contenus
@@ -150,7 +150,7 @@  discard block
 block discarded – undo
150 150
 	$champs = array_map('corriger_caracteres', $champs);
151 151
 
152 152
 	// On récupère l'état avant toute modification
153
-	$row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet);
153
+	$row = sql_fetsel('*', $spip_table_objet, $id_table_objet.'='.$id_objet);
154 154
 
155 155
 	// Envoyer aux plugins
156 156
 	$champs = pipeline(
@@ -205,7 +205,7 @@  discard block
 block discarded – undo
205 205
 				$id_rubrique = 0;
206 206
 				if (isset($desc['field']['id_rubrique'])) {
207 207
 					$parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique';
208
-					$id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet));
208
+					$id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=".intval($id_objet));
209 209
 				}
210 210
 				$instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action');
211 211
 				$champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur);
@@ -227,13 +227,13 @@  discard block
 block discarded – undo
227 227
 		}
228 228
 
229 229
 		// allez on commit la modif
230
-		sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . intval($id_objet), [], $serveur);
230
+		sql_updateq($spip_table_objet, $champs, "$id_table_objet=".intval($id_objet), [], $serveur);
231 231
 
232 232
 		// on verifie si elle est bien passee
233 233
 		$moof = sql_fetsel(
234 234
 			array_keys($champs),
235 235
 			$spip_table_objet,
236
-			"$id_table_objet=" . intval($id_objet),
236
+			"$id_table_objet=".intval($id_objet),
237 237
 			[],
238 238
 			[],
239 239
 			'',
@@ -269,13 +269,13 @@  discard block
 block discarded – undo
269 269
 			// c'est un cas exceptionnel
270 270
 			if (count($liste)) {
271 271
 				spip_log(
272
-					"Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true),
273
-					'modifier.' . _LOG_CRITIQUE
272
+					"Erreur enregistrement en base $objet/$id_objet champs :".var_export($conflits, true),
273
+					'modifier.'._LOG_CRITIQUE
274 274
 				);
275 275
 
276 276
 				return _T(
277 277
 					'erreur_technique_enregistrement_champs',
278
-					['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"]
278
+					['champs' => "<i>'".implode("'</i>,<i>'", $liste)."'</i>"]
279 279
 				);
280 280
 			}
281 281
 		}
@@ -317,18 +317,18 @@  discard block
 block discarded – undo
317 317
 	include_spip('inc/filtres_mini');
318 318
 	$qui = '';
319 319
 	if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
320
-		$qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#';
320
+		$qui .= ' #id_auteur:'.$GLOBALS['visiteur_session']['id_auteur'].'#';
321 321
 	}
322 322
 	if (!empty($GLOBALS['visiteur_session']['nom'])) {
323
-		$qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#';
323
+		$qui .= ' #nom:'.$GLOBALS['visiteur_session']['nom'].'#';
324 324
 	}
325 325
 	if ($qui == '') {
326
-		$qui = '#ip:' . $GLOBALS['ip'] . '#';
326
+		$qui = '#ip:'.$GLOBALS['ip'].'#';
327 327
 	}
328
-	journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . join(
328
+	journal(_L($qui.' a édité '.$objet.' '.$id_objet.' ('.join(
329 329
 		'+',
330 330
 		array_diff(array_keys($champs), ['date_modif'])
331
-	) . ')'), [
331
+	).')'), [
332 332
 		'faire' => 'modifier',
333 333
 		'quoi' => $objet,
334 334
 		'id' => $id_objet
Please login to merge, or discard this patch.
Indentation   +281 added lines, -281 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -38,28 +38,28 @@  discard block
 block discarded – undo
38 38
  *     Tableau des champs et valeurs collectées
39 39
  */
40 40
 function collecter_requests($include_list, $exclude_list = [], $set = null, $tous = false) {
41
-	$c = $set;
42
-	if (!$c) {
43
-		$c = [];
44
-		foreach ($include_list as $champ) {
45
-			// on ne collecte que les champs reellement envoyes par defaut.
46
-			// le cas d'un envoi de valeur NULL peut du coup poser probleme.
47
-			$val = _request($champ);
48
-			if ($tous or $val !== null) {
49
-				$c[$champ] = $val;
50
-			}
51
-		}
52
-		// on ajoute toujours la lang en saisie possible
53
-		// meme si pas prevu au depart pour l'objet concerne
54
-		if ($l = _request('changer_lang')) {
55
-			$c['lang'] = $l;
56
-		}
57
-	}
58
-	foreach ($exclude_list as $champ) {
59
-		unset($c[$champ]);
60
-	}
61
-
62
-	return $c;
41
+    $c = $set;
42
+    if (!$c) {
43
+        $c = [];
44
+        foreach ($include_list as $champ) {
45
+            // on ne collecte que les champs reellement envoyes par defaut.
46
+            // le cas d'un envoi de valeur NULL peut du coup poser probleme.
47
+            $val = _request($champ);
48
+            if ($tous or $val !== null) {
49
+                $c[$champ] = $val;
50
+            }
51
+        }
52
+        // on ajoute toujours la lang en saisie possible
53
+        // meme si pas prevu au depart pour l'objet concerne
54
+        if ($l = _request('changer_lang')) {
55
+            $c['lang'] = $l;
56
+        }
57
+    }
58
+    foreach ($exclude_list as $champ) {
59
+        unset($c[$champ]);
60
+    }
61
+
62
+    return $c;
63 63
 }
64 64
 
65 65
 /**
@@ -96,262 +96,262 @@  discard block
 block discarded – undo
96 96
  *     - chaîne : texte d'un message d'erreur
97 97
  */
98 98
 function objet_modifier_champs($objet, $id_objet, $options, $c = null, $serveur = '') {
99
-	if (!$id_objet = intval($id_objet)) {
100
-		spip_log('Erreur $id_objet non defini', 'warn');
101
-
102
-		return _T('erreur_technique_enregistrement_impossible');
103
-	}
104
-
105
-	include_spip('inc/filtres');
106
-
107
-	$table_objet = table_objet($objet, $serveur);
108
-	$spip_table_objet = table_objet_sql($objet, $serveur);
109
-	$id_table_objet = id_table_objet($objet, $serveur);
110
-	$trouver_table = charger_fonction('trouver_table', 'base');
111
-	$desc = $trouver_table($spip_table_objet, $serveur);
112
-
113
-	// Appels incomplets (sans $c)
114
-	if (!is_array($c)) {
115
-		spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c');
116
-
117
-		return _T('erreur_technique_enregistrement_impossible');
118
-	}
119
-
120
-	// Securite : certaines variables ne sont jamais acceptees ici
121
-	// car elles ne relevent pas de autoriser(xxx, modifier) ;
122
-	// il faut passer par instituer_XX()
123
-	// TODO: faut-il passer ces variables interdites
124
-	// dans un fichier de description separe ?
125
-	unset($c['statut']);
126
-	unset($c['id_parent']);
127
-	unset($c['id_rubrique']);
128
-	unset($c['id_secteur']);
129
-
130
-	// Gerer les champs non vides
131
-	if (isset($options['nonvide']) and is_array($options['nonvide'])) {
132
-		foreach ($options['nonvide'] as $champ => $sinon) {
133
-			if (isset($c[$champ]) and $c[$champ] === '') {
134
-				$c[$champ] = $sinon;
135
-			}
136
-		}
137
-	}
138
-
139
-	// N'accepter que les champs qui existent dans la table
140
-	$champs = array_intersect_key($c, $desc['field']);
141
-	// et dont la valeur n'est pas null
142
-	$champs = array_filter($champs, static function ($var) {
143
-		return $var !== null;
144
-	});
145
-	// TODO: ici aussi on peut valider les contenus
146
-	// en fonction du type
147
-
148
-	// Nettoyer les valeurs
149
-	$champs = array_map('corriger_caracteres', $champs);
150
-
151
-	// On récupère l'état avant toute modification
152
-	$row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet);
153
-
154
-	// Envoyer aux plugins
155
-	$champs = pipeline(
156
-		'pre_edition',
157
-		[
158
-			'args' => [
159
-				'table' => $spip_table_objet, // compatibilite
160
-				'table_objet' => $table_objet,
161
-				'spip_table_objet' => $spip_table_objet,
162
-				'desc' => $desc,
163
-				'type' => $objet,
164
-				'id_objet' => $id_objet,
165
-				'data' => $options['data'] ?? null,
166
-				'champs' => $options['champs'] ?? [], // [doc] c'est quoi ?
167
-				'champs_anciens' => $row, // état du contenu avant modif
168
-				'serveur' => $serveur,
169
-				'action' => $options['action'] ?? 'modifier'
170
-			],
171
-			'data' => $champs
172
-		]
173
-	);
174
-
175
-	if (!$champs) {
176
-		return false;
177
-	}
178
-
179
-
180
-	// marquer le fait que l'objet est travaille par toto a telle date
181
-	include_spip('inc/config');
182
-	if (lire_config('articles_modif', 'non') !== 'non') {
183
-		include_spip('inc/drapeau_edition');
184
-		signale_edition($id_objet, $GLOBALS['visiteur_session'], $objet);
185
-	}
186
-
187
-	// Verifier si les mises a jour sont pertinentes, datees, en conflit etc
188
-	include_spip('inc/editer');
189
-	if (!isset($options['data']) or is_null($options['data'])) {
190
-		$options['data'] = &$_POST;
191
-	}
192
-	$conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur);
193
-	// cas hypothetique : normalement inc/editer verifie en amont le conflit edition
194
-	// et gere l'interface
195
-	// ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme
196
-	if ($conflits) {
197
-		return _T('titre_conflit_edition');
198
-	}
199
-
200
-	if ($champs) {
201
-		// cas particulier de la langue : passer par instituer_langue_objet
202
-		if (isset($champs['lang'])) {
203
-			if ($changer_lang = $champs['lang']) {
204
-				$id_rubrique = 0;
205
-				if (isset($desc['field']['id_rubrique'])) {
206
-					$parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique';
207
-					$id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet));
208
-				}
209
-				$instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action');
210
-				$champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur);
211
-			}
212
-			// on laisse 'lang' dans $champs,
213
-			// ca permet de passer dans le pipeline post_edition et de journaliser
214
-			// et ca ne gene pas qu'on refasse un sql_updateq dessus apres l'avoir
215
-			// deja pris en compte
216
-		}
217
-
218
-		// la modif peut avoir lieu
219
-
220
-		// faut-il ajouter date_modif ?
221
-		if (
222
-			!empty($options['date_modif'])
223
-			and !isset($champs[$options['date_modif']])
224
-		) {
225
-			$champs[$options['date_modif']] = date('Y-m-d H:i:s');
226
-		}
227
-
228
-		// allez on commit la modif
229
-		sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . intval($id_objet), [], $serveur);
230
-
231
-		// on verifie si elle est bien passee
232
-		$moof = sql_fetsel(
233
-			array_keys($champs),
234
-			$spip_table_objet,
235
-			"$id_table_objet=" . intval($id_objet),
236
-			[],
237
-			[],
238
-			'',
239
-			[],
240
-			$serveur
241
-		);
242
-		// si difference entre les champs, reperer les champs mal enregistres
243
-		if ($moof != $champs) {
244
-			$liste = [];
245
-			foreach ($moof as $k => $v) {
246
-				if (
247
-					$v !== $champs[$k]
248
-					// ne pas alerter si le champ est numerique est que les valeurs sont equivalentes
249
-					and (!is_numeric($v) or intval($v) !== intval($champs[$k]))
250
-					// ne pas alerter si le champ est date, qu'on a envoye une valeur vide et qu'on recupere une date nulle
251
-					and (strlen($champs[$k]) or !in_array($v, ['0000-00-00 00:00:00', '0000-00-00']))
252
-				) {
253
-					$liste[] = $k;
254
-					$conflits[$k]['post'] = $champs[$k];
255
-					$conflits[$k]['save'] = $v;
256
-
257
-					// cas specifique MySQL+emoji : si l'un est la
258
-					// conversion utf8_noplanes de l'autre alors c'est OK
259
-					if (defined('_MYSQL_NOPLANES') && _MYSQL_NOPLANES) {
260
-						include_spip('inc/charsets');
261
-						if ($v == utf8_noplanes($champs[$k])) {
262
-							array_pop($liste);
263
-						}
264
-					}
265
-				}
266
-			}
267
-			// si un champ n'a pas ete correctement enregistre, loger et retourner une erreur
268
-			// c'est un cas exceptionnel
269
-			if (count($liste)) {
270
-				spip_log(
271
-					"Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true),
272
-					'modifier.' . _LOG_CRITIQUE
273
-				);
274
-
275
-				return _T(
276
-					'erreur_technique_enregistrement_champs',
277
-					['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"]
278
-				);
279
-			}
280
-		}
281
-
282
-		// Invalider les caches
283
-		if (isset($options['invalideur']) and $options['invalideur']) {
284
-			include_spip('inc/invalideur');
285
-			if (is_array($options['invalideur'])) {
286
-				array_map('suivre_invalideur', $options['invalideur']);
287
-			} else {
288
-				suivre_invalideur($options['invalideur']);
289
-			}
290
-		}
291
-
292
-		// Notifications, gestion des revisions...
293
-		// en standard, appelle |nouvelle_revision ci-dessous
294
-		pipeline(
295
-			'post_edition',
296
-			[
297
-				'args' => [
298
-					'table' => $spip_table_objet,
299
-					'table_objet' => $table_objet,
300
-					'spip_table_objet' => $spip_table_objet,
301
-					'desc' => $desc,
302
-					'type' => $objet,
303
-					'id_objet' => $id_objet,
304
-					'champs' => $options['champs'] ?? [], // [doc] kesako ?
305
-					'champs_anciens' => $row, // état du contenu avant modif
306
-					'serveur' => $serveur,
307
-					'action' => $options['action'] ?? 'modifier'
308
-				],
309
-				'data' => $champs
310
-			]
311
-		);
312
-	}
313
-
314
-	// Appeler une notification
315
-	if ($notifications = charger_fonction('notifications', 'inc')) {
316
-		$notifications(
317
-			"{$objet}_modifier",
318
-			$id_objet,
319
-			[
320
-				'champs' => $champs,
321
-			]
322
-		);
323
-		$notifications(
324
-			'objet_modifier',
325
-			$id_objet,
326
-			[
327
-				'objet' => $objet,
328
-				'id_objet' => $id_objet,
329
-				'champs' => $champs,
330
-			]
331
-		);
332
-	}
333
-
334
-	// journaliser l'affaire
335
-	// message a affiner :-)
336
-	include_spip('inc/filtres_mini');
337
-	$qui = '';
338
-	if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
339
-		$qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#';
340
-	}
341
-	if (!empty($GLOBALS['visiteur_session']['nom'])) {
342
-		$qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#';
343
-	}
344
-	if ($qui == '') {
345
-		$qui = '#ip:' . $GLOBALS['ip'] . '#';
346
-	}
347
-	journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . join(
348
-		'+',
349
-		array_diff(array_keys($champs), ['date_modif'])
350
-	) . ')'), [
351
-		'faire' => 'modifier',
352
-		'quoi' => $objet,
353
-		'id' => $id_objet
354
-	]);
355
-
356
-	return '';
99
+    if (!$id_objet = intval($id_objet)) {
100
+        spip_log('Erreur $id_objet non defini', 'warn');
101
+
102
+        return _T('erreur_technique_enregistrement_impossible');
103
+    }
104
+
105
+    include_spip('inc/filtres');
106
+
107
+    $table_objet = table_objet($objet, $serveur);
108
+    $spip_table_objet = table_objet_sql($objet, $serveur);
109
+    $id_table_objet = id_table_objet($objet, $serveur);
110
+    $trouver_table = charger_fonction('trouver_table', 'base');
111
+    $desc = $trouver_table($spip_table_objet, $serveur);
112
+
113
+    // Appels incomplets (sans $c)
114
+    if (!is_array($c)) {
115
+        spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c');
116
+
117
+        return _T('erreur_technique_enregistrement_impossible');
118
+    }
119
+
120
+    // Securite : certaines variables ne sont jamais acceptees ici
121
+    // car elles ne relevent pas de autoriser(xxx, modifier) ;
122
+    // il faut passer par instituer_XX()
123
+    // TODO: faut-il passer ces variables interdites
124
+    // dans un fichier de description separe ?
125
+    unset($c['statut']);
126
+    unset($c['id_parent']);
127
+    unset($c['id_rubrique']);
128
+    unset($c['id_secteur']);
129
+
130
+    // Gerer les champs non vides
131
+    if (isset($options['nonvide']) and is_array($options['nonvide'])) {
132
+        foreach ($options['nonvide'] as $champ => $sinon) {
133
+            if (isset($c[$champ]) and $c[$champ] === '') {
134
+                $c[$champ] = $sinon;
135
+            }
136
+        }
137
+    }
138
+
139
+    // N'accepter que les champs qui existent dans la table
140
+    $champs = array_intersect_key($c, $desc['field']);
141
+    // et dont la valeur n'est pas null
142
+    $champs = array_filter($champs, static function ($var) {
143
+        return $var !== null;
144
+    });
145
+    // TODO: ici aussi on peut valider les contenus
146
+    // en fonction du type
147
+
148
+    // Nettoyer les valeurs
149
+    $champs = array_map('corriger_caracteres', $champs);
150
+
151
+    // On récupère l'état avant toute modification
152
+    $row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet);
153
+
154
+    // Envoyer aux plugins
155
+    $champs = pipeline(
156
+        'pre_edition',
157
+        [
158
+            'args' => [
159
+                'table' => $spip_table_objet, // compatibilite
160
+                'table_objet' => $table_objet,
161
+                'spip_table_objet' => $spip_table_objet,
162
+                'desc' => $desc,
163
+                'type' => $objet,
164
+                'id_objet' => $id_objet,
165
+                'data' => $options['data'] ?? null,
166
+                'champs' => $options['champs'] ?? [], // [doc] c'est quoi ?
167
+                'champs_anciens' => $row, // état du contenu avant modif
168
+                'serveur' => $serveur,
169
+                'action' => $options['action'] ?? 'modifier'
170
+            ],
171
+            'data' => $champs
172
+        ]
173
+    );
174
+
175
+    if (!$champs) {
176
+        return false;
177
+    }
178
+
179
+
180
+    // marquer le fait que l'objet est travaille par toto a telle date
181
+    include_spip('inc/config');
182
+    if (lire_config('articles_modif', 'non') !== 'non') {
183
+        include_spip('inc/drapeau_edition');
184
+        signale_edition($id_objet, $GLOBALS['visiteur_session'], $objet);
185
+    }
186
+
187
+    // Verifier si les mises a jour sont pertinentes, datees, en conflit etc
188
+    include_spip('inc/editer');
189
+    if (!isset($options['data']) or is_null($options['data'])) {
190
+        $options['data'] = &$_POST;
191
+    }
192
+    $conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur);
193
+    // cas hypothetique : normalement inc/editer verifie en amont le conflit edition
194
+    // et gere l'interface
195
+    // ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme
196
+    if ($conflits) {
197
+        return _T('titre_conflit_edition');
198
+    }
199
+
200
+    if ($champs) {
201
+        // cas particulier de la langue : passer par instituer_langue_objet
202
+        if (isset($champs['lang'])) {
203
+            if ($changer_lang = $champs['lang']) {
204
+                $id_rubrique = 0;
205
+                if (isset($desc['field']['id_rubrique'])) {
206
+                    $parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique';
207
+                    $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet));
208
+                }
209
+                $instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action');
210
+                $champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur);
211
+            }
212
+            // on laisse 'lang' dans $champs,
213
+            // ca permet de passer dans le pipeline post_edition et de journaliser
214
+            // et ca ne gene pas qu'on refasse un sql_updateq dessus apres l'avoir
215
+            // deja pris en compte
216
+        }
217
+
218
+        // la modif peut avoir lieu
219
+
220
+        // faut-il ajouter date_modif ?
221
+        if (
222
+            !empty($options['date_modif'])
223
+            and !isset($champs[$options['date_modif']])
224
+        ) {
225
+            $champs[$options['date_modif']] = date('Y-m-d H:i:s');
226
+        }
227
+
228
+        // allez on commit la modif
229
+        sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . intval($id_objet), [], $serveur);
230
+
231
+        // on verifie si elle est bien passee
232
+        $moof = sql_fetsel(
233
+            array_keys($champs),
234
+            $spip_table_objet,
235
+            "$id_table_objet=" . intval($id_objet),
236
+            [],
237
+            [],
238
+            '',
239
+            [],
240
+            $serveur
241
+        );
242
+        // si difference entre les champs, reperer les champs mal enregistres
243
+        if ($moof != $champs) {
244
+            $liste = [];
245
+            foreach ($moof as $k => $v) {
246
+                if (
247
+                    $v !== $champs[$k]
248
+                    // ne pas alerter si le champ est numerique est que les valeurs sont equivalentes
249
+                    and (!is_numeric($v) or intval($v) !== intval($champs[$k]))
250
+                    // ne pas alerter si le champ est date, qu'on a envoye une valeur vide et qu'on recupere une date nulle
251
+                    and (strlen($champs[$k]) or !in_array($v, ['0000-00-00 00:00:00', '0000-00-00']))
252
+                ) {
253
+                    $liste[] = $k;
254
+                    $conflits[$k]['post'] = $champs[$k];
255
+                    $conflits[$k]['save'] = $v;
256
+
257
+                    // cas specifique MySQL+emoji : si l'un est la
258
+                    // conversion utf8_noplanes de l'autre alors c'est OK
259
+                    if (defined('_MYSQL_NOPLANES') && _MYSQL_NOPLANES) {
260
+                        include_spip('inc/charsets');
261
+                        if ($v == utf8_noplanes($champs[$k])) {
262
+                            array_pop($liste);
263
+                        }
264
+                    }
265
+                }
266
+            }
267
+            // si un champ n'a pas ete correctement enregistre, loger et retourner une erreur
268
+            // c'est un cas exceptionnel
269
+            if (count($liste)) {
270
+                spip_log(
271
+                    "Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true),
272
+                    'modifier.' . _LOG_CRITIQUE
273
+                );
274
+
275
+                return _T(
276
+                    'erreur_technique_enregistrement_champs',
277
+                    ['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"]
278
+                );
279
+            }
280
+        }
281
+
282
+        // Invalider les caches
283
+        if (isset($options['invalideur']) and $options['invalideur']) {
284
+            include_spip('inc/invalideur');
285
+            if (is_array($options['invalideur'])) {
286
+                array_map('suivre_invalideur', $options['invalideur']);
287
+            } else {
288
+                suivre_invalideur($options['invalideur']);
289
+            }
290
+        }
291
+
292
+        // Notifications, gestion des revisions...
293
+        // en standard, appelle |nouvelle_revision ci-dessous
294
+        pipeline(
295
+            'post_edition',
296
+            [
297
+                'args' => [
298
+                    'table' => $spip_table_objet,
299
+                    'table_objet' => $table_objet,
300
+                    'spip_table_objet' => $spip_table_objet,
301
+                    'desc' => $desc,
302
+                    'type' => $objet,
303
+                    'id_objet' => $id_objet,
304
+                    'champs' => $options['champs'] ?? [], // [doc] kesako ?
305
+                    'champs_anciens' => $row, // état du contenu avant modif
306
+                    'serveur' => $serveur,
307
+                    'action' => $options['action'] ?? 'modifier'
308
+                ],
309
+                'data' => $champs
310
+            ]
311
+        );
312
+    }
313
+
314
+    // Appeler une notification
315
+    if ($notifications = charger_fonction('notifications', 'inc')) {
316
+        $notifications(
317
+            "{$objet}_modifier",
318
+            $id_objet,
319
+            [
320
+                'champs' => $champs,
321
+            ]
322
+        );
323
+        $notifications(
324
+            'objet_modifier',
325
+            $id_objet,
326
+            [
327
+                'objet' => $objet,
328
+                'id_objet' => $id_objet,
329
+                'champs' => $champs,
330
+            ]
331
+        );
332
+    }
333
+
334
+    // journaliser l'affaire
335
+    // message a affiner :-)
336
+    include_spip('inc/filtres_mini');
337
+    $qui = '';
338
+    if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
339
+        $qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#';
340
+    }
341
+    if (!empty($GLOBALS['visiteur_session']['nom'])) {
342
+        $qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#';
343
+    }
344
+    if ($qui == '') {
345
+        $qui = '#ip:' . $GLOBALS['ip'] . '#';
346
+    }
347
+    journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . join(
348
+        '+',
349
+        array_diff(array_keys($champs), ['date_modif'])
350
+    ) . ')'), [
351
+        'faire' => 'modifier',
352
+        'quoi' => $objet,
353
+        'id' => $id_objet
354
+    ]);
355
+
356
+    return '';
357 357
 }
Please login to merge, or discard this patch.
ecrire/auth/spip.php 3 patches
Spacing   +34 added lines, -34 removed lines patch added patch discarded remove patch
@@ -49,7 +49,7 @@  discard block
 block discarded – undo
49 49
 		$row = sql_fetsel(
50 50
 			'*',
51 51
 			'spip_auteurs',
52
-			'login=' . sql_quote($login, $serveur, 'text') . " AND statut<>'5poubelle'",
52
+			'login='.sql_quote($login, $serveur, 'text')." AND statut<>'5poubelle'",
53 53
 			'',
54 54
 			'',
55 55
 			'',
@@ -77,20 +77,20 @@  discard block
 block discarded – undo
77 77
 		// legacy = md5 ou sha256
78 78
 		case 32:
79 79
 			// tres anciens mots de passe encodes en md5(alea.pass)
80
-			$hash = md5($row['alea_actuel'] . $pass);
80
+			$hash = md5($row['alea_actuel'].$pass);
81 81
 			$methode = 'md5';
82 82
 		case 64:
83 83
 			if (empty($hash)) {
84 84
 				// anciens mots de passe encodes en sha256(alea.pass)
85 85
 				include_spip('auth/sha256.inc');
86
-				$hash = spip_sha256($row['alea_actuel'] . $pass);
86
+				$hash = spip_sha256($row['alea_actuel'].$pass);
87 87
 				$methode = 'sha256';
88 88
 			}
89 89
 			if ($row['pass'] === $hash) {
90
-				spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via $methode", 'auth' . _LOG_DEBUG);
90
+				spip_log("validation du mot de passe pour l'auteur #".$row['id_auteur']." $login via $methode", 'auth'._LOG_DEBUG);
91 91
 				// ce n'est pas cense arriver, mais si jamais c'est un backup inutilisable, il faut le nettoyer pour ne pas bloquer la creation d'une nouvelle cle d'auth
92 92
 				if (!empty($row['backup_cles'])) {
93
-					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur']));
93
+					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur='.intval($row['id_auteur']));
94 94
 				}
95 95
 				break;
96 96
 			}
@@ -108,19 +108,19 @@  discard block
 block discarded – undo
108 108
 				and !empty($row['backup_cles'])
109 109
 			) {
110 110
 				if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) {
111
-					spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE);
111
+					spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #'.$row['id_auteur'], 'auth'._LOG_INFO_IMPORTANTE);
112 112
 					if ($cles->save()) {
113 113
 						$secret = $cles->getSecretAuth();
114 114
 					}
115 115
 					else {
116
-						spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
116
+						spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth'._LOG_ERREUR);
117 117
 						// et on echoue car on ne veut pas que la situation reste telle quelle
118
-						raler_fichier(_DIR_ETC . 'cles.php');
118
+						raler_fichier(_DIR_ETC.'cles.php');
119 119
 					}
120 120
 				}
121 121
 				else {
122
-					spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR);
123
-					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur']));
122
+					spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #'.$row['id_auteur']." n'est pas valide", 'auth'._LOG_ERREUR);
123
+					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur='.intval($row['id_auteur']));
124 124
 				}
125 125
 			}
126 126
 
@@ -128,7 +128,7 @@  discard block
 block discarded – undo
128 128
 				unset($row);
129 129
 			}
130 130
 			else {
131
-				spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via Password::verifier", 'auth' . _LOG_DEBUG);
131
+				spip_log("validation du mot de passe pour l'auteur #".$row['id_auteur']." $login via Password::verifier", 'auth'._LOG_DEBUG);
132 132
 			}
133 133
 			break;
134 134
 	}
@@ -175,7 +175,7 @@  discard block
 block discarded – undo
175 175
 			@sql_update(
176 176
 				'spip_auteurs',
177 177
 				$set,
178
-				'id_auteur=' . intval($row['id_auteur']) . ' AND pass=' . sql_quote(
178
+				'id_auteur='.intval($row['id_auteur']).' AND pass='.sql_quote(
179 179
 					$row['pass'],
180 180
 					$serveur,
181 181
 					'text'
@@ -223,24 +223,24 @@  discard block
 block discarded – undo
223 223
 
224 224
 	// si force, on ne verifie pas la presence d'un backup chez un webmestre
225 225
 	if ($force) {
226
-		spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth' . _LOG_INFO_IMPORTANTE);
226
+		spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth'._LOG_INFO_IMPORTANTE);
227 227
 		$secret = $cles->getSecretAuth(true);
228 228
 		return true;
229 229
 	}
230 230
 
231
-	$has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut=' . sql_quote('0minirezo') . ' AND webmestre=' . sql_quote('oui') . " AND backup_cles!=''");
231
+	$has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut='.sql_quote('0minirezo').' AND webmestre='.sql_quote('oui')." AND backup_cles!=''");
232 232
 	$has_backup = array_column($has_backup, 'id_auteur');
233 233
 	if (empty($has_backup)) {
234
-		spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth' . _LOG_INFO_IMPORTANTE);
234
+		spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth'._LOG_INFO_IMPORTANTE);
235 235
 		if ($secret = $cles->getSecretAuth(true)) {
236 236
 			return true;
237 237
 		}
238
-		spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
238
+		spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth'._LOG_ERREUR);
239 239
 		// et on echoue car on ne veut pas que la situation reste telle quelle
240
-		raler_fichier(_DIR_ETC . 'cles.php');
240
+		raler_fichier(_DIR_ETC.'cles.php');
241 241
 	}
242 242
 	else {
243
-		spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR);
243
+		spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #'.implode(', #', $has_backup).' doit se connecter pour restaurer son backup des cles', 'auth'._LOG_ERREUR);
244 244
 	}
245 245
 	return false;
246 246
 }
@@ -257,8 +257,8 @@  discard block
 block discarded – undo
257 257
 	$flux['data'] .=
258 258
 		  '<script type="text/javascript">/*<![CDATA[*/'
259 259
 		. "$js\n"
260
-		. "var login_info={'login':'" . $flux['args']['contexte']['var_login'] . "',"
261
-		. "'page_auteur': '" . generer_url_public('informer_auteur') . "',"
260
+		. "var login_info={'login':'".$flux['args']['contexte']['var_login']."',"
261
+		. "'page_auteur': '".generer_url_public('informer_auteur')."',"
262 262
 		. "'informe_auteur_en_cours':false,"
263 263
 		. "'attente_informe':0};"
264 264
 		. "jQuery(function(){jQuery('#var_login').change(actualise_auteur);});"
@@ -301,7 +301,7 @@  discard block
 block discarded – undo
301 301
 		} else {
302 302
 			$n = sql_countsel(
303 303
 				'spip_auteurs',
304
-				'login=' . sql_quote($new_login) . ' AND id_auteur!=' . intval($id_auteur) . " AND statut!='5poubelle'",
304
+				'login='.sql_quote($new_login).' AND id_auteur!='.intval($id_auteur)." AND statut!='5poubelle'",
305 305
 				'',
306 306
 				'',
307 307
 				$serveur
@@ -329,7 +329,7 @@  discard block
 block discarded – undo
329 329
 	}
330 330
 	if (
331 331
 		!$id_auteur = intval($id_auteur)
332
-		or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
332
+		or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur='.intval($id_auteur), '', '', '', '', $serveur)
333 333
 	) {
334 334
 		return false;
335 335
 	}
@@ -344,7 +344,7 @@  discard block
 block discarded – undo
344 344
 		$anciens = sql_allfetsel(
345 345
 			'id_auteur',
346 346
 			'spip_auteurs',
347
-			'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'",
347
+			'login='.sql_quote($new_login, $serveur, 'text')." AND statut='5poubelle'",
348 348
 			'',
349 349
 			'',
350 350
 			'',
@@ -378,8 +378,8 @@  discard block
 block discarded – undo
378 378
 		$r = sql_getfetsel(
379 379
 			'login',
380 380
 			'spip_auteurs',
381
-			"statut<>'5poubelle'" .
382
-			' AND (length(pass)>0)' .
381
+			"statut<>'5poubelle'".
382
+			' AND (length(pass)>0)'.
383 383
 			" AND (login=$l)",
384 384
 			'',
385 385
 			'',
@@ -398,8 +398,8 @@  discard block
 block discarded – undo
398 398
 		return sql_getfetsel(
399 399
 			'login',
400 400
 			'spip_auteurs',
401
-			"statut<>'5poubelle'" .
402
-			' AND (length(pass)>0)' .
401
+			"statut<>'5poubelle'".
402
+			' AND (length(pass)>0)'.
403 403
 			" AND (login<>'' AND (nom=$l OR email=$l))",
404 404
 			'',
405 405
 			'',
@@ -468,7 +468,7 @@  discard block
 block discarded – undo
468 468
 
469 469
 	if (
470 470
 		!$id_auteur = intval($id_auteur)
471
-		or !$auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
471
+		or !$auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur='.intval($id_auteur), '', '', '', '', $serveur)
472 472
 	) {
473 473
 		return false;
474 474
 	}
@@ -529,8 +529,8 @@  discard block
 block discarded – undo
529 529
 		or isset($champs['statut'])
530 530
 		or (isset($options['all']) and $options['all'])
531 531
 	) {
532
-		$htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
533
-		$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
532
+		$htaccess = _DIR_RESTREINT._ACCESS_FILE_NAME;
533
+		$htpasswd = _DIR_TMP._AUTH_USER_FILE;
534 534
 
535 535
 		// Cette variable de configuration peut etre posee par un plugin
536 536
 		// par exemple acces_restreint ;
@@ -540,7 +540,7 @@  discard block
 block discarded – undo
540 540
 			and !@file_exists($htaccess)
541 541
 		) {
542 542
 			spip_unlink($htpasswd);
543
-			spip_unlink($htpasswd . '-admin');
543
+			spip_unlink($htpasswd.'-admin');
544 544
 
545 545
 			return;
546 546
 		}
@@ -558,16 +558,16 @@  discard block
 block discarded – undo
558 558
 		);
559 559
 		while ($t = sql_fetch($s)) {
560 560
 			if (strlen($t['login']) and strlen($t['htpass'])) {
561
-				$p1 .= $t['login'] . ':' . $t['htpass'] . "\n";
561
+				$p1 .= $t['login'].':'.$t['htpass']."\n";
562 562
 				if ($t['statut'] == '0minirezo') {
563
-					$p2 .= $t['login'] . ':' . $t['htpass'] . "\n";
563
+					$p2 .= $t['login'].':'.$t['htpass']."\n";
564 564
 				}
565 565
 			}
566 566
 		}
567 567
 		sql_free($s);
568 568
 		if ($p1) {
569 569
 			ecrire_fichier($htpasswd, $p1);
570
-			ecrire_fichier($htpasswd . '-admin', $p2);
570
+			ecrire_fichier($htpasswd.'-admin', $p2);
571 571
 			spip_log("Ecriture de $htpasswd et $htpasswd-admin");
572 572
 		}
573 573
 	}
Please login to merge, or discard this patch.
Braces   +5 added lines, -10 removed lines patch added patch discarded remove patch
@@ -111,14 +111,12 @@  discard block
 block discarded – undo
111 111
 					spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE);
112 112
 					if ($cles->save()) {
113 113
 						$secret = $cles->getSecretAuth();
114
-					}
115
-					else {
114
+					} else {
116 115
 						spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
117 116
 						// et on echoue car on ne veut pas que la situation reste telle quelle
118 117
 						raler_fichier(_DIR_ETC . 'cles.php');
119 118
 					}
120
-				}
121
-				else {
119
+				} else {
122 120
 					spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR);
123 121
 					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur']));
124 122
 				}
@@ -126,8 +124,7 @@  discard block
 block discarded – undo
126 124
 
127 125
 			if (!$secret or !Password::verifier($pass, $row['pass'], $secret)) {
128 126
 				unset($row);
129
-			}
130
-			else {
127
+			} else {
131 128
 				spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via Password::verifier", 'auth' . _LOG_DEBUG);
132 129
 			}
133 130
 			break;
@@ -238,8 +235,7 @@  discard block
 block discarded – undo
238 235
 		spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
239 236
 		// et on echoue car on ne veut pas que la situation reste telle quelle
240 237
 		raler_fichier(_DIR_ETC . 'cles.php');
241
-	}
242
-	else {
238
+	} else {
243 239
 		spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR);
244 240
 	}
245 241
 	return false;
@@ -479,8 +475,7 @@  discard block
 block discarded – undo
479 475
 	if (!$secret) {
480 476
 		if (auth_spip_initialiser_secret()) {
481 477
 			$secret = $cles->getSecretAuth();
482
-		}
483
-		else {
478
+		} else {
484 479
 			return false;
485 480
 		}
486 481
 	}
Please login to merge, or discard this patch.
Indentation   +409 added lines, -409 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
 use Spip\Chiffrer\SpipCles;
19 19
 
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 /**
@@ -33,169 +33,169 @@  discard block
 block discarded – undo
33 33
  */
34 34
 function auth_spip_dist($login, #[\SensitiveParameter] $pass, $serveur = '', $phpauth = false) {
35 35
 
36
-	// retrouver le login
37
-	$login = auth_spip_retrouver_login($login);
38
-	// login inconnu, n'allons pas plus loin
39
-	if (!$login) {
40
-		return [];
41
-	}
42
-
43
-	$md5pass = '';
44
-	$shapass = $shanext = '';
45
-	$auteur_peut_sauver_cles = false;
46
-
47
-	if ($pass) {
48
-		$row = sql_fetsel(
49
-			'*',
50
-			'spip_auteurs',
51
-			'login=' . sql_quote($login, $serveur, 'text') . " AND statut<>'5poubelle'",
52
-			'',
53
-			'',
54
-			'',
55
-			'',
56
-			$serveur
57
-		);
58
-
59
-		// lever un flag si cet auteur peut sauver les cles
60
-		if ($row['statut'] === '0minirezo' and $row['webmestre'] === 'oui' and isset($row['backup_cles'])) {
61
-			$auteur_peut_sauver_cles = true;
62
-		}
63
-	}
64
-
65
-	// login inexistant ou mot de passe vide
66
-	if (!$pass or !$row) {
67
-		return [];
68
-	}
69
-
70
-	$cles = SpipCles::instance();
71
-	$secret = $cles->getSecretAuth();
72
-
73
-	$hash = null;
74
-	switch (strlen($row['pass'])) {
75
-		// legacy = md5 ou sha256
76
-		case 32:
77
-			// tres anciens mots de passe encodes en md5(alea.pass)
78
-			$hash = md5($row['alea_actuel'] . $pass);
79
-			$methode = 'md5';
80
-		case 64:
81
-			if (empty($hash)) {
82
-				// anciens mots de passe encodes en sha256(alea.pass)
83
-				include_spip('auth/sha256.inc');
84
-				$hash = spip_sha256($row['alea_actuel'] . $pass);
85
-				$methode = 'sha256';
86
-			}
87
-			if ($row['pass'] === $hash) {
88
-				spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via $methode", 'auth' . _LOG_DEBUG);
89
-				// ce n'est pas cense arriver, mais si jamais c'est un backup inutilisable, il faut le nettoyer pour ne pas bloquer la creation d'une nouvelle cle d'auth
90
-				if (!empty($row['backup_cles'])) {
91
-					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur']));
92
-				}
93
-				break;
94
-			}
95
-
96
-		// on teste la methode par defaut, au cas ou ce serait un pass moderne qui a la malchance d'etre en 64char de long
97
-
98
-		case 60:
99
-		case 98:
100
-		default:
101
-			// doit-on restaurer un backup des cles ?
102
-			// si on a le bon pass on peut decoder le backup, retrouver la cle, et du coup valider le pass
103
-			if (
104
-				!$secret
105
-				and $auteur_peut_sauver_cles
106
-				and !empty($row['backup_cles'])
107
-			) {
108
-				if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) {
109
-					spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE);
110
-					if ($cles->save()) {
111
-						$secret = $cles->getSecretAuth();
112
-					}
113
-					else {
114
-						spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
115
-						// et on echoue car on ne veut pas que la situation reste telle quelle
116
-						raler_fichier(_DIR_ETC . 'cles.php');
117
-					}
118
-				}
119
-				else {
120
-					spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR);
121
-					sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur']));
122
-				}
123
-			}
124
-
125
-			if (!$secret or !Password::verifier($pass, $row['pass'], $secret)) {
126
-				unset($row);
127
-			}
128
-			else {
129
-				spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via Password::verifier", 'auth' . _LOG_DEBUG);
130
-			}
131
-			break;
132
-	}
133
-
134
-	// Migration depuis ancienne version : si on a pas encore de cle
135
-	// ET si c'est le login d'un auteur qui peut sauver la cle
136
-	// créer la clé (en s'assurant bien que personne n'a de backup d'un precedent fichier cle.php)
137
-	// si c'est un auteur normal, on ne fait rien, il garde son ancien pass hashé en sha256 en attendant le login d'un webmestre
138
-	if (!$secret and $auteur_peut_sauver_cles) {
139
-		if (auth_spip_initialiser_secret()) {
140
-			$secret = $cles->getSecretAuth();
141
-		}
142
-	}
143
-
144
-	// login/mot de passe incorrect
145
-	if (empty($row)) {
146
-		return [];
147
-	}
148
-
149
-	// fait tourner le codage du pass dans la base
150
-	// sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action()
151
-	if (!$phpauth and $secret) {
152
-		include_spip('inc/acces'); // pour creer_uniqid et verifier_htaccess
153
-		$pass_hash_next = Password::hacher($pass, $secret);
154
-		if ($pass_hash_next) {
155
-			$set = [
156
-				'alea_actuel' => 'alea_futur', // @deprecated 4.1
157
-				'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text'), // @deprecated 4.1
158
-				'pass' => sql_quote($pass_hash_next, $serveur, 'text'),
159
-			];
160
-
161
-			// regenerer un htpass si on a active/desactive le plugin htpasswd
162
-			// et/ou que l'algo a change - pour etre certain de toujours utiliser le bon algo
163
-			$htpass = generer_htpass($pass);
164
-			if (strlen($htpass) !== strlen($row['htpass'])) {
165
-				$set['htpass'] = sql_quote($htpass, $serveur, 'text');
166
-			}
167
-
168
-			// a chaque login de webmestre : sauvegarde chiffree des clés du site (avec les pass du webmestre)
169
-			if ($auteur_peut_sauver_cles) {
170
-				$set['backup_cles'] = sql_quote($cles->backup($pass), $serveur, 'text');
171
-			}
172
-
173
-			@sql_update(
174
-				'spip_auteurs',
175
-				$set,
176
-				'id_auteur=' . intval($row['id_auteur']) . ' AND pass=' . sql_quote(
177
-					$row['pass'],
178
-					$serveur,
179
-					'text'
180
-				),
181
-				[],
182
-				$serveur
183
-			);
184
-
185
-			// si on a change le htpass car changement d'algo, regenerer les fichiers htpasswd
186
-			if (isset($set['htpass'])) {
187
-				ecrire_acces();
188
-			}
189
-		}
190
-
191
-		// En profiter pour verifier la securite de tmp/
192
-		// Si elle ne fonctionne pas a l'installation, prevenir
193
-		if (!verifier_htaccess(_DIR_TMP) and defined('_ECRIRE_INSTALL')) {
194
-			return false;
195
-		}
196
-	}
197
-
198
-	return $row;
36
+    // retrouver le login
37
+    $login = auth_spip_retrouver_login($login);
38
+    // login inconnu, n'allons pas plus loin
39
+    if (!$login) {
40
+        return [];
41
+    }
42
+
43
+    $md5pass = '';
44
+    $shapass = $shanext = '';
45
+    $auteur_peut_sauver_cles = false;
46
+
47
+    if ($pass) {
48
+        $row = sql_fetsel(
49
+            '*',
50
+            'spip_auteurs',
51
+            'login=' . sql_quote($login, $serveur, 'text') . " AND statut<>'5poubelle'",
52
+            '',
53
+            '',
54
+            '',
55
+            '',
56
+            $serveur
57
+        );
58
+
59
+        // lever un flag si cet auteur peut sauver les cles
60
+        if ($row['statut'] === '0minirezo' and $row['webmestre'] === 'oui' and isset($row['backup_cles'])) {
61
+            $auteur_peut_sauver_cles = true;
62
+        }
63
+    }
64
+
65
+    // login inexistant ou mot de passe vide
66
+    if (!$pass or !$row) {
67
+        return [];
68
+    }
69
+
70
+    $cles = SpipCles::instance();
71
+    $secret = $cles->getSecretAuth();
72
+
73
+    $hash = null;
74
+    switch (strlen($row['pass'])) {
75
+        // legacy = md5 ou sha256
76
+        case 32:
77
+            // tres anciens mots de passe encodes en md5(alea.pass)
78
+            $hash = md5($row['alea_actuel'] . $pass);
79
+            $methode = 'md5';
80
+        case 64:
81
+            if (empty($hash)) {
82
+                // anciens mots de passe encodes en sha256(alea.pass)
83
+                include_spip('auth/sha256.inc');
84
+                $hash = spip_sha256($row['alea_actuel'] . $pass);
85
+                $methode = 'sha256';
86
+            }
87
+            if ($row['pass'] === $hash) {
88
+                spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via $methode", 'auth' . _LOG_DEBUG);
89
+                // ce n'est pas cense arriver, mais si jamais c'est un backup inutilisable, il faut le nettoyer pour ne pas bloquer la creation d'une nouvelle cle d'auth
90
+                if (!empty($row['backup_cles'])) {
91
+                    sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur']));
92
+                }
93
+                break;
94
+            }
95
+
96
+        // on teste la methode par defaut, au cas ou ce serait un pass moderne qui a la malchance d'etre en 64char de long
97
+
98
+        case 60:
99
+        case 98:
100
+        default:
101
+            // doit-on restaurer un backup des cles ?
102
+            // si on a le bon pass on peut decoder le backup, retrouver la cle, et du coup valider le pass
103
+            if (
104
+                !$secret
105
+                and $auteur_peut_sauver_cles
106
+                and !empty($row['backup_cles'])
107
+            ) {
108
+                if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) {
109
+                    spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE);
110
+                    if ($cles->save()) {
111
+                        $secret = $cles->getSecretAuth();
112
+                    }
113
+                    else {
114
+                        spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
115
+                        // et on echoue car on ne veut pas que la situation reste telle quelle
116
+                        raler_fichier(_DIR_ETC . 'cles.php');
117
+                    }
118
+                }
119
+                else {
120
+                    spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR);
121
+                    sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur']));
122
+                }
123
+            }
124
+
125
+            if (!$secret or !Password::verifier($pass, $row['pass'], $secret)) {
126
+                unset($row);
127
+            }
128
+            else {
129
+                spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via Password::verifier", 'auth' . _LOG_DEBUG);
130
+            }
131
+            break;
132
+    }
133
+
134
+    // Migration depuis ancienne version : si on a pas encore de cle
135
+    // ET si c'est le login d'un auteur qui peut sauver la cle
136
+    // créer la clé (en s'assurant bien que personne n'a de backup d'un precedent fichier cle.php)
137
+    // si c'est un auteur normal, on ne fait rien, il garde son ancien pass hashé en sha256 en attendant le login d'un webmestre
138
+    if (!$secret and $auteur_peut_sauver_cles) {
139
+        if (auth_spip_initialiser_secret()) {
140
+            $secret = $cles->getSecretAuth();
141
+        }
142
+    }
143
+
144
+    // login/mot de passe incorrect
145
+    if (empty($row)) {
146
+        return [];
147
+    }
148
+
149
+    // fait tourner le codage du pass dans la base
150
+    // sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action()
151
+    if (!$phpauth and $secret) {
152
+        include_spip('inc/acces'); // pour creer_uniqid et verifier_htaccess
153
+        $pass_hash_next = Password::hacher($pass, $secret);
154
+        if ($pass_hash_next) {
155
+            $set = [
156
+                'alea_actuel' => 'alea_futur', // @deprecated 4.1
157
+                'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text'), // @deprecated 4.1
158
+                'pass' => sql_quote($pass_hash_next, $serveur, 'text'),
159
+            ];
160
+
161
+            // regenerer un htpass si on a active/desactive le plugin htpasswd
162
+            // et/ou que l'algo a change - pour etre certain de toujours utiliser le bon algo
163
+            $htpass = generer_htpass($pass);
164
+            if (strlen($htpass) !== strlen($row['htpass'])) {
165
+                $set['htpass'] = sql_quote($htpass, $serveur, 'text');
166
+            }
167
+
168
+            // a chaque login de webmestre : sauvegarde chiffree des clés du site (avec les pass du webmestre)
169
+            if ($auteur_peut_sauver_cles) {
170
+                $set['backup_cles'] = sql_quote($cles->backup($pass), $serveur, 'text');
171
+            }
172
+
173
+            @sql_update(
174
+                'spip_auteurs',
175
+                $set,
176
+                'id_auteur=' . intval($row['id_auteur']) . ' AND pass=' . sql_quote(
177
+                    $row['pass'],
178
+                    $serveur,
179
+                    'text'
180
+                ),
181
+                [],
182
+                $serveur
183
+            );
184
+
185
+            // si on a change le htpass car changement d'algo, regenerer les fichiers htpasswd
186
+            if (isset($set['htpass'])) {
187
+                ecrire_acces();
188
+            }
189
+        }
190
+
191
+        // En profiter pour verifier la securite de tmp/
192
+        // Si elle ne fonctionne pas a l'installation, prevenir
193
+        if (!verifier_htaccess(_DIR_TMP) and defined('_ECRIRE_INSTALL')) {
194
+            return false;
195
+        }
196
+    }
197
+
198
+    return $row;
199 199
 }
200 200
 
201 201
 /**
@@ -210,36 +210,36 @@  discard block
 block discarded – undo
210 210
  * @return bool
211 211
  */
212 212
 function auth_spip_initialiser_secret(bool $force = false): bool {
213
-	$cles = SpipCles::instance();
214
-	$secret = $cles->getSecretAuth();
215
-
216
-	// on ne fait rien si on a un secret dispo
217
-	if ($secret) {
218
-		return false;
219
-	}
220
-
221
-	// si force, on ne verifie pas la presence d'un backup chez un webmestre
222
-	if ($force) {
223
-		spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth' . _LOG_INFO_IMPORTANTE);
224
-		$secret = $cles->getSecretAuth(true);
225
-		return true;
226
-	}
227
-
228
-	$has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut=' . sql_quote('0minirezo') . ' AND webmestre=' . sql_quote('oui') . " AND backup_cles!=''");
229
-	$has_backup = array_column($has_backup, 'id_auteur');
230
-	if (empty($has_backup)) {
231
-		spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth' . _LOG_INFO_IMPORTANTE);
232
-		if ($secret = $cles->getSecretAuth(true)) {
233
-			return true;
234
-		}
235
-		spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
236
-		// et on echoue car on ne veut pas que la situation reste telle quelle
237
-		raler_fichier(_DIR_ETC . 'cles.php');
238
-	}
239
-	else {
240
-		spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR);
241
-	}
242
-	return false;
213
+    $cles = SpipCles::instance();
214
+    $secret = $cles->getSecretAuth();
215
+
216
+    // on ne fait rien si on a un secret dispo
217
+    if ($secret) {
218
+        return false;
219
+    }
220
+
221
+    // si force, on ne verifie pas la presence d'un backup chez un webmestre
222
+    if ($force) {
223
+        spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth' . _LOG_INFO_IMPORTANTE);
224
+        $secret = $cles->getSecretAuth(true);
225
+        return true;
226
+    }
227
+
228
+    $has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut=' . sql_quote('0minirezo') . ' AND webmestre=' . sql_quote('oui') . " AND backup_cles!=''");
229
+    $has_backup = array_column($has_backup, 'id_auteur');
230
+    if (empty($has_backup)) {
231
+        spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth' . _LOG_INFO_IMPORTANTE);
232
+        if ($secret = $cles->getSecretAuth(true)) {
233
+            return true;
234
+        }
235
+        spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
236
+        // et on echoue car on ne veut pas que la situation reste telle quelle
237
+        raler_fichier(_DIR_ETC . 'cles.php');
238
+    }
239
+    else {
240
+        spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR);
241
+    }
242
+    return false;
243 243
 }
244 244
 
245 245
 /**
@@ -249,19 +249,19 @@  discard block
 block discarded – undo
249 249
  * @return array
250 250
  */
251 251
 function auth_spip_formulaire_login($flux) {
252
-	// javascript qui gere la securite du login en evitant de faire circuler le pass en clair
253
-	$js = file_get_contents(find_in_path('prive/javascript/login.js'));
254
-	$flux['data'] .=
255
-		  '<script type="text/javascript">/*<![CDATA[*/'
256
-		. "$js\n"
257
-		. "var login_info={'login':'" . $flux['args']['contexte']['var_login'] . "',"
258
-		. "'page_auteur': '" . generer_url_public('informer_auteur') . "',"
259
-		. "'informe_auteur_en_cours':false,"
260
-		. "'attente_informe':0};"
261
-		. "jQuery(function(){jQuery('#var_login').change(actualise_auteur);});"
262
-		. '/*]]>*/</script>';
263
-
264
-	return $flux;
252
+    // javascript qui gere la securite du login en evitant de faire circuler le pass en clair
253
+    $js = file_get_contents(find_in_path('prive/javascript/login.js'));
254
+    $flux['data'] .=
255
+            '<script type="text/javascript">/*<![CDATA[*/'
256
+        . "$js\n"
257
+        . "var login_info={'login':'" . $flux['args']['contexte']['var_login'] . "',"
258
+        . "'page_auteur': '" . generer_url_public('informer_auteur') . "',"
259
+        . "'informe_auteur_en_cours':false,"
260
+        . "'attente_informe':0};"
261
+        . "jQuery(function(){jQuery('#var_login').change(actualise_auteur);});"
262
+        . '/*]]>*/</script>';
263
+
264
+    return $flux;
265 265
 }
266 266
 
267 267
 
@@ -273,11 +273,11 @@  discard block
 block discarded – undo
273 273
  *   toujours true pour un auteur cree dans SPIP
274 274
  */
275 275
 function auth_spip_autoriser_modifier_login(string $serveur = ''): bool {
276
-	// les fonctions d'ecriture sur base distante sont encore incompletes
277
-	if (strlen($serveur)) {
278
-		return false;
279
-	}
280
-	return true;
276
+    // les fonctions d'ecriture sur base distante sont encore incompletes
277
+    if (strlen($serveur)) {
278
+        return false;
279
+    }
280
+    return true;
281 281
 }
282 282
 
283 283
 /**
@@ -291,25 +291,25 @@  discard block
 block discarded – undo
291 291
  *  message d'erreur si login non valide, chaine vide sinon
292 292
  */
293 293
 function auth_spip_verifier_login($new_login, $id_auteur = 0, $serveur = '') {
294
-	// login et mot de passe
295
-	if (strlen($new_login)) {
296
-		if (strlen($new_login) < _LOGIN_TROP_COURT) {
297
-			return _T('info_login_trop_court_car_pluriel', ['nb' => _LOGIN_TROP_COURT]);
298
-		} else {
299
-			$n = sql_countsel(
300
-				'spip_auteurs',
301
-				'login=' . sql_quote($new_login) . ' AND id_auteur!=' . intval($id_auteur) . " AND statut!='5poubelle'",
302
-				'',
303
-				'',
304
-				$serveur
305
-			);
306
-			if ($n) {
307
-				return _T('info_login_existant');
308
-			}
309
-		}
310
-	}
311
-
312
-	return '';
294
+    // login et mot de passe
295
+    if (strlen($new_login)) {
296
+        if (strlen($new_login) < _LOGIN_TROP_COURT) {
297
+            return _T('info_login_trop_court_car_pluriel', ['nb' => _LOGIN_TROP_COURT]);
298
+        } else {
299
+            $n = sql_countsel(
300
+                'spip_auteurs',
301
+                'login=' . sql_quote($new_login) . ' AND id_auteur!=' . intval($id_auteur) . " AND statut!='5poubelle'",
302
+                '',
303
+                '',
304
+                $serveur
305
+            );
306
+            if ($n) {
307
+                return _T('info_login_existant');
308
+            }
309
+        }
310
+    }
311
+
312
+    return '';
313 313
 }
314 314
 
315 315
 /**
@@ -321,41 +321,41 @@  discard block
 block discarded – undo
321 321
  * @return bool
322 322
  */
323 323
 function auth_spip_modifier_login($new_login, $id_auteur, $serveur = '') {
324
-	if (is_null($new_login) or auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') {
325
-		return false;
326
-	}
327
-	if (
328
-		!$id_auteur = intval($id_auteur)
329
-		or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
330
-	) {
331
-		return false;
332
-	}
333
-	if ($new_login == $auteur['login']) {
334
-		return true;
335
-	} // on a rien fait mais c'est bon !
336
-
337
-	include_spip('action/editer_auteur');
338
-
339
-	// vider le login des auteurs a la poubelle qui avaient ce meme login
340
-	if (strlen($new_login)) {
341
-		$anciens = sql_allfetsel(
342
-			'id_auteur',
343
-			'spip_auteurs',
344
-			'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'",
345
-			'',
346
-			'',
347
-			'',
348
-			'',
349
-			$serveur
350
-		);
351
-		while ($row = array_pop($anciens)) {
352
-			auteur_modifier($row['id_auteur'], ['login' => ''], true); // manque la gestion de $serveur
353
-		}
354
-	}
355
-
356
-	auteur_modifier($id_auteur, ['login' => $new_login], true); // manque la gestion de $serveur
357
-
358
-	return true;
324
+    if (is_null($new_login) or auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') {
325
+        return false;
326
+    }
327
+    if (
328
+        !$id_auteur = intval($id_auteur)
329
+        or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
330
+    ) {
331
+        return false;
332
+    }
333
+    if ($new_login == $auteur['login']) {
334
+        return true;
335
+    } // on a rien fait mais c'est bon !
336
+
337
+    include_spip('action/editer_auteur');
338
+
339
+    // vider le login des auteurs a la poubelle qui avaient ce meme login
340
+    if (strlen($new_login)) {
341
+        $anciens = sql_allfetsel(
342
+            'id_auteur',
343
+            'spip_auteurs',
344
+            'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'",
345
+            '',
346
+            '',
347
+            '',
348
+            '',
349
+            $serveur
350
+        );
351
+        while ($row = array_pop($anciens)) {
352
+            auteur_modifier($row['id_auteur'], ['login' => ''], true); // manque la gestion de $serveur
353
+        }
354
+    }
355
+
356
+    auteur_modifier($id_auteur, ['login' => $new_login], true); // manque la gestion de $serveur
357
+
358
+    return true;
359 359
 }
360 360
 
361 361
 /**
@@ -367,44 +367,44 @@  discard block
 block discarded – undo
367 367
  * @return string
368 368
  */
369 369
 function auth_spip_retrouver_login($login, $serveur = '') {
370
-	if (!strlen($login)) {
371
-		return null;
372
-	} // pas la peine de requeter
373
-	$l = sql_quote($login, $serveur, 'text');
374
-	if (
375
-		$r = sql_getfetsel(
376
-			'login',
377
-			'spip_auteurs',
378
-			"statut<>'5poubelle'" .
379
-			' AND (length(pass)>0)' .
380
-			" AND (login=$l)",
381
-			'',
382
-			'',
383
-			'',
384
-			'',
385
-			$serveur
386
-		)
387
-	) {
388
-		return $r;
389
-	}
390
-	// Si pas d'auteur avec ce login
391
-	// regarder s'il a saisi son nom ou son mail.
392
-	// Ne pas fusionner avec la requete precedente
393
-	// car un nom peut etre homonyme d'un autre login
394
-	else {
395
-		return sql_getfetsel(
396
-			'login',
397
-			'spip_auteurs',
398
-			"statut<>'5poubelle'" .
399
-			' AND (length(pass)>0)' .
400
-			" AND (login<>'' AND (nom=$l OR email=$l))",
401
-			'',
402
-			'',
403
-			'',
404
-			'',
405
-			$serveur
406
-		);
407
-	}
370
+    if (!strlen($login)) {
371
+        return null;
372
+    } // pas la peine de requeter
373
+    $l = sql_quote($login, $serveur, 'text');
374
+    if (
375
+        $r = sql_getfetsel(
376
+            'login',
377
+            'spip_auteurs',
378
+            "statut<>'5poubelle'" .
379
+            ' AND (length(pass)>0)' .
380
+            " AND (login=$l)",
381
+            '',
382
+            '',
383
+            '',
384
+            '',
385
+            $serveur
386
+        )
387
+    ) {
388
+        return $r;
389
+    }
390
+    // Si pas d'auteur avec ce login
391
+    // regarder s'il a saisi son nom ou son mail.
392
+    // Ne pas fusionner avec la requete precedente
393
+    // car un nom peut etre homonyme d'un autre login
394
+    else {
395
+        return sql_getfetsel(
396
+            'login',
397
+            'spip_auteurs',
398
+            "statut<>'5poubelle'" .
399
+            ' AND (length(pass)>0)' .
400
+            " AND (login<>'' AND (nom=$l OR email=$l))",
401
+            '',
402
+            '',
403
+            '',
404
+            '',
405
+            $serveur
406
+        );
407
+    }
408 408
 }
409 409
 
410 410
 /**
@@ -415,11 +415,11 @@  discard block
 block discarded – undo
415 415
  *  toujours true pour un auteur cree dans SPIP
416 416
  */
417 417
 function auth_spip_autoriser_modifier_pass(string $serveur = ''): bool {
418
-	// les fonctions d'ecriture sur base distante sont encore incompletes
419
-	if (strlen($serveur)) {
420
-		return false;
421
-	}
422
-	return true;
418
+    // les fonctions d'ecriture sur base distante sont encore incompletes
419
+    if (strlen($serveur)) {
420
+        return false;
421
+    }
422
+    return true;
423 423
 }
424 424
 
425 425
 
@@ -440,12 +440,12 @@  discard block
 block discarded – undo
440 440
  *  message d'erreur si login non valide, chaine vide sinon
441 441
  */
442 442
 function auth_spip_verifier_pass($login, #[\SensitiveParameter] $new_pass, $id_auteur = 0, $serveur = '') {
443
-	// login et mot de passe
444
-	if (strlen($new_pass) < _PASS_LONGUEUR_MINI) {
445
-		return _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]);
446
-	}
443
+    // login et mot de passe
444
+    if (strlen($new_pass) < _PASS_LONGUEUR_MINI) {
445
+        return _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]);
446
+    }
447 447
 
448
-	return '';
448
+    return '';
449 449
 }
450 450
 
451 451
 /**
@@ -459,47 +459,47 @@  discard block
 block discarded – undo
459 459
  * @return bool
460 460
  */
461 461
 function auth_spip_modifier_pass($login, #[\SensitiveParameter] $new_pass, $id_auteur, $serveur = '') {
462
-	if (is_null($new_pass) or auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
463
-		return false;
464
-	}
465
-
466
-	if (
467
-		!$id_auteur = intval($id_auteur)
468
-		or !$auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
469
-	) {
470
-		return false;
471
-	}
472
-
473
-	$cles = SpipCles::instance();
474
-	$secret = $cles->getSecretAuth();
475
-	if (!$secret) {
476
-		if (auth_spip_initialiser_secret()) {
477
-			$secret = $cles->getSecretAuth();
478
-		}
479
-		else {
480
-			return false;
481
-		}
482
-	}
483
-
484
-
485
-	include_spip('inc/acces');
486
-	$set = [
487
-		'pass' => Password::hacher($new_pass, $secret),
488
-		'htpass' => generer_htpass($new_pass),
489
-		'alea_actuel' => creer_uniqid(), // @deprecated 4.1
490
-		'alea_futur' => creer_uniqid(), // @deprecated 4.1
491
-		'low_sec' => '',
492
-	];
493
-
494
-	// si c'est un webmestre, on met a jour son backup des cles
495
-	if ($auteur['statut'] === '0minirezo' and $auteur['webmestre'] === 'oui') {
496
-		$set['backup_cles'] = $cles->backup($new_pass);
497
-	}
498
-
499
-	include_spip('action/editer_auteur');
500
-	auteur_modifier($id_auteur, $set, true); // manque la gestion de $serveur
501
-
502
-	return true; // on a bien modifie le pass
462
+    if (is_null($new_pass) or auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
463
+        return false;
464
+    }
465
+
466
+    if (
467
+        !$id_auteur = intval($id_auteur)
468
+        or !$auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
469
+    ) {
470
+        return false;
471
+    }
472
+
473
+    $cles = SpipCles::instance();
474
+    $secret = $cles->getSecretAuth();
475
+    if (!$secret) {
476
+        if (auth_spip_initialiser_secret()) {
477
+            $secret = $cles->getSecretAuth();
478
+        }
479
+        else {
480
+            return false;
481
+        }
482
+    }
483
+
484
+
485
+    include_spip('inc/acces');
486
+    $set = [
487
+        'pass' => Password::hacher($new_pass, $secret),
488
+        'htpass' => generer_htpass($new_pass),
489
+        'alea_actuel' => creer_uniqid(), // @deprecated 4.1
490
+        'alea_futur' => creer_uniqid(), // @deprecated 4.1
491
+        'low_sec' => '',
492
+    ];
493
+
494
+    // si c'est un webmestre, on met a jour son backup des cles
495
+    if ($auteur['statut'] === '0minirezo' and $auteur['webmestre'] === 'oui') {
496
+        $set['backup_cles'] = $cles->backup($new_pass);
497
+    }
498
+
499
+    include_spip('action/editer_auteur');
500
+    auteur_modifier($id_auteur, $set, true); // manque la gestion de $serveur
501
+
502
+    return true; // on a bien modifie le pass
503 503
 }
504 504
 
505 505
 /**
@@ -513,58 +513,58 @@  discard block
 block discarded – undo
513 513
  * @return void
514 514
  */
515 515
 function auth_spip_synchroniser_distant($id_auteur, $champs, $options = [], string $serveur = ''): void {
516
-	// ne rien faire pour une base distante : on ne sait pas regenerer les htaccess
517
-	if (strlen($serveur)) {
518
-		return;
519
-	}
520
-	// si un login, pass ou statut a ete modifie
521
-	// regenerer les fichier htpass
522
-	if (
523
-		isset($champs['login'])
524
-		or isset($champs['pass'])
525
-		or isset($champs['statut'])
526
-		or (isset($options['all']) and $options['all'])
527
-	) {
528
-		$htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
529
-		$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
530
-
531
-		// Cette variable de configuration peut etre posee par un plugin
532
-		// par exemple acces_restreint ;
533
-		// si .htaccess existe, outrepasser spip_meta
534
-		if (
535
-			(!isset($GLOBALS['meta']['creer_htpasswd']) or ($GLOBALS['meta']['creer_htpasswd'] != 'oui'))
536
-			and !@file_exists($htaccess)
537
-		) {
538
-			spip_unlink($htpasswd);
539
-			spip_unlink($htpasswd . '-admin');
540
-
541
-			return;
542
-		}
543
-
544
-		# remarque : ici on laisse passer les "nouveau" de maniere a leur permettre
545
-		# de devenir redacteur le cas echeant (auth http)... a nettoyer
546
-		// attention, il faut au prealable se connecter a la base (necessaire car utilise par install)
547
-
548
-		$p1 = ''; // login:htpass pour tous
549
-		$p2 = ''; // login:htpass pour les admins
550
-		$s = sql_select(
551
-			'login, htpass, statut',
552
-			'spip_auteurs',
553
-			sql_in('statut', ['1comite', '0minirezo', 'nouveau'])
554
-		);
555
-		while ($t = sql_fetch($s)) {
556
-			if (strlen($t['login']) and strlen($t['htpass'])) {
557
-				$p1 .= $t['login'] . ':' . $t['htpass'] . "\n";
558
-				if ($t['statut'] == '0minirezo') {
559
-					$p2 .= $t['login'] . ':' . $t['htpass'] . "\n";
560
-				}
561
-			}
562
-		}
563
-		sql_free($s);
564
-		if ($p1) {
565
-			ecrire_fichier($htpasswd, $p1);
566
-			ecrire_fichier($htpasswd . '-admin', $p2);
567
-			spip_log("Ecriture de $htpasswd et $htpasswd-admin");
568
-		}
569
-	}
516
+    // ne rien faire pour une base distante : on ne sait pas regenerer les htaccess
517
+    if (strlen($serveur)) {
518
+        return;
519
+    }
520
+    // si un login, pass ou statut a ete modifie
521
+    // regenerer les fichier htpass
522
+    if (
523
+        isset($champs['login'])
524
+        or isset($champs['pass'])
525
+        or isset($champs['statut'])
526
+        or (isset($options['all']) and $options['all'])
527
+    ) {
528
+        $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
529
+        $htpasswd = _DIR_TMP . _AUTH_USER_FILE;
530
+
531
+        // Cette variable de configuration peut etre posee par un plugin
532
+        // par exemple acces_restreint ;
533
+        // si .htaccess existe, outrepasser spip_meta
534
+        if (
535
+            (!isset($GLOBALS['meta']['creer_htpasswd']) or ($GLOBALS['meta']['creer_htpasswd'] != 'oui'))
536
+            and !@file_exists($htaccess)
537
+        ) {
538
+            spip_unlink($htpasswd);
539
+            spip_unlink($htpasswd . '-admin');
540
+
541
+            return;
542
+        }
543
+
544
+        # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre
545
+        # de devenir redacteur le cas echeant (auth http)... a nettoyer
546
+        // attention, il faut au prealable se connecter a la base (necessaire car utilise par install)
547
+
548
+        $p1 = ''; // login:htpass pour tous
549
+        $p2 = ''; // login:htpass pour les admins
550
+        $s = sql_select(
551
+            'login, htpass, statut',
552
+            'spip_auteurs',
553
+            sql_in('statut', ['1comite', '0minirezo', 'nouveau'])
554
+        );
555
+        while ($t = sql_fetch($s)) {
556
+            if (strlen($t['login']) and strlen($t['htpass'])) {
557
+                $p1 .= $t['login'] . ':' . $t['htpass'] . "\n";
558
+                if ($t['statut'] == '0minirezo') {
559
+                    $p2 .= $t['login'] . ':' . $t['htpass'] . "\n";
560
+                }
561
+            }
562
+        }
563
+        sql_free($s);
564
+        if ($p1) {
565
+            ecrire_fichier($htpasswd, $p1);
566
+            ecrire_fichier($htpasswd . '-admin', $p2);
567
+            spip_log("Ecriture de $htpasswd et $htpasswd-admin");
568
+        }
569
+    }
570 570
 }
Please login to merge, or discard this patch.