Completed
Push — master ( 3fe97a...7569f9 )
by cam
02:24
created
ecrire/auth/sha256.inc.php 1 patch
Indentation   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -12,6 +12,6 @@
 block discarded – undo
12 12
  * @return string Le SHA de la chaîne
13 13
  */
14 14
 function spip_sha256($str) {
15
-	trigger_deprecation('spip', '5.0', 'Using "%s" is deprecated, use "%s" instead.', 'spip_sha256($str)', 'hash(\'sha256\', $str)');
16
-	return hash('sha256', $str);
15
+    trigger_deprecation('spip', '5.0', 'Using "%s" is deprecated, use "%s" instead.', 'spip_sha256($str)', 'hash(\'sha256\', $str)');
16
+    return hash('sha256', $str);
17 17
 }
Please login to merge, or discard this patch.
ecrire/inc/headers.php 1 patch
Indentation   +135 added lines, -135 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
 
@@ -37,133 +37,133 @@  discard block
 block discarded – undo
37 37
  * @param int $status Code de redirection (301 ou 302)
38 38
  **/
39 39
 function redirige_par_entete($url, $equiv = '', $status = 302) {
40
-	if (!in_array($status, [301, 302])) {
41
-		$status = 302;
42
-	}
43
-
44
-	$url = trim(strtr($url, "\n\r", '  '));
45
-	# si l'url de redirection est relative, on la passe en absolue
46
-	if (!preg_match(',^(\w+:)?//,', $url)) {
47
-		include_spip('inc/filtres_mini');
48
-		$url = url_absolue($url);
49
-	}
50
-
51
-	if (defined('_AJAX') && _AJAX) {
52
-		$url = parametre_url($url, 'var_ajax_redir', 1, '&');
53
-	}
54
-
55
-	// ne pas laisser passer n'importe quoi dans l'url
56
-	$url = str_replace(['<', '"'], ['&lt;', '&quot;'], (string) $url);
57
-	$url = str_replace(["\r", "\n", ' '], ['%0D', '%0A', '%20'], $url);
58
-	while (str_contains($url, '%0A')) {
59
-		$url = str_replace('%0A', '', $url);
60
-	}
61
-	// interdire les url inline avec des pseudo-protocoles :
62
-	if (
63
-		preg_match(',data:,i', $url) && preg_match('/base64\s*,/i', $url) || preg_match(',(javascript|mailto):,i', $url)
64
-	) {
65
-		$url = './';
66
-	}
67
-
68
-	// Il n'y a que sous Apache que setcookie puis redirection fonctionne
69
-	include_spip('inc/cookie');
70
-	if (!defined('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE')) {
71
-		define('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE', '^(Apache|Cherokee|nginx)');
72
-	}
73
-	if (!defined('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE')) {
74
-		define('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE', 'Apache|Cherokee|nginx');
75
-	}
76
-	if (
77
-		!$equiv && !spip_cookie_envoye()
78
-		|| (
79
-			!empty($_SERVER['SERVER_SOFTWARE'])
80
-				&& _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE
81
-				&& preg_match('/' . _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', (string) $_SERVER['SERVER_SOFTWARE'])
82
-			|| !empty($_SERVER['SERVER_SIGNATURE'])
83
-				&& _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE
84
-				&& preg_match('/' . _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', (string) $_SERVER['SERVER_SIGNATURE'])
85
-			|| function_exists('apache_getenv')
86
-			|| defined('_SERVER_APACHE')
87
-		)
88
-	) {
89
-		@header('Location: ' . $url);
90
-		$equiv = '';
91
-	} else {
92
-		@header('Refresh: 0; url=' . $url);
93
-		if (isset($GLOBALS['meta']['charset'])) {
94
-			@header('Content-Type: text/html; charset=' . $GLOBALS['meta']['charset']);
95
-		}
96
-		$equiv = "<meta http-equiv='Refresh' content='0; url=$url'>";
97
-	}
98
-	include_spip('inc/lang');
99
-	if ($status != 302) {
100
-		http_response_code($status);
101
-	}
102
-	echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">', "\n",
103
-	html_lang_attributes(), '
40
+    if (!in_array($status, [301, 302])) {
41
+        $status = 302;
42
+    }
43
+
44
+    $url = trim(strtr($url, "\n\r", '  '));
45
+    # si l'url de redirection est relative, on la passe en absolue
46
+    if (!preg_match(',^(\w+:)?//,', $url)) {
47
+        include_spip('inc/filtres_mini');
48
+        $url = url_absolue($url);
49
+    }
50
+
51
+    if (defined('_AJAX') && _AJAX) {
52
+        $url = parametre_url($url, 'var_ajax_redir', 1, '&');
53
+    }
54
+
55
+    // ne pas laisser passer n'importe quoi dans l'url
56
+    $url = str_replace(['<', '"'], ['&lt;', '&quot;'], (string) $url);
57
+    $url = str_replace(["\r", "\n", ' '], ['%0D', '%0A', '%20'], $url);
58
+    while (str_contains($url, '%0A')) {
59
+        $url = str_replace('%0A', '', $url);
60
+    }
61
+    // interdire les url inline avec des pseudo-protocoles :
62
+    if (
63
+        preg_match(',data:,i', $url) && preg_match('/base64\s*,/i', $url) || preg_match(',(javascript|mailto):,i', $url)
64
+    ) {
65
+        $url = './';
66
+    }
67
+
68
+    // Il n'y a que sous Apache que setcookie puis redirection fonctionne
69
+    include_spip('inc/cookie');
70
+    if (!defined('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE')) {
71
+        define('_SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE', '^(Apache|Cherokee|nginx)');
72
+    }
73
+    if (!defined('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE')) {
74
+        define('_SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE', 'Apache|Cherokee|nginx');
75
+    }
76
+    if (
77
+        !$equiv && !spip_cookie_envoye()
78
+        || (
79
+            !empty($_SERVER['SERVER_SOFTWARE'])
80
+                && _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE
81
+                && preg_match('/' . _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', (string) $_SERVER['SERVER_SOFTWARE'])
82
+            || !empty($_SERVER['SERVER_SIGNATURE'])
83
+                && _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE
84
+                && preg_match('/' . _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE . '/i', (string) $_SERVER['SERVER_SIGNATURE'])
85
+            || function_exists('apache_getenv')
86
+            || defined('_SERVER_APACHE')
87
+        )
88
+    ) {
89
+        @header('Location: ' . $url);
90
+        $equiv = '';
91
+    } else {
92
+        @header('Refresh: 0; url=' . $url);
93
+        if (isset($GLOBALS['meta']['charset'])) {
94
+            @header('Content-Type: text/html; charset=' . $GLOBALS['meta']['charset']);
95
+        }
96
+        $equiv = "<meta http-equiv='Refresh' content='0; url=$url'>";
97
+    }
98
+    include_spip('inc/lang');
99
+    if ($status != 302) {
100
+        http_response_code($status);
101
+    }
102
+    echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">', "\n",
103
+    html_lang_attributes(), '
104 104
 <head>',
105
-	$equiv, '
105
+    $equiv, '
106 106
 <title>HTTP ' . $status . '</title>
107 107
 ' . ((isset($GLOBALS['meta']['charset'])) ? '<meta http-equiv="Content-Type" content="text/html;charset=' . $GLOBALS['meta']['charset'] . '">' : '') . '
108 108
 </head>
109 109
 <body>
110 110
 <h1>HTTP ' . $status . '</h1>
111 111
 <a href="',
112
-	quote_amp($url),
113
-	'">',
114
-	_T('navigateur_pas_redirige'),
115
-	'</a></body></html>';
112
+    quote_amp($url),
113
+    '">',
114
+    _T('navigateur_pas_redirige'),
115
+    '</a></body></html>';
116 116
 
117
-	spip_log("redirige $status: $url");
117
+    spip_log("redirige $status: $url");
118 118
 
119
-	exit;
119
+    exit;
120 120
 }
121 121
 
122 122
 function redirige_formulaire($url, $equiv = '', $format = 'message') {
123
-	if (
124
-		!_AJAX
125
-		&& !headers_sent()
126
-		&& !_request('var_ajax')
127
-	) {
128
-		redirige_par_entete(str_replace('&amp;', '&', (string) $url), $equiv);
129
-	} // si c'est une ancre, fixer simplement le window.location.hash
130
-	elseif ($format == 'ajaxform' && preg_match(',^#[0-9a-z\-_]+$,i', (string) $url)) {
131
-		return [
132
-			// on renvoie un lien masque qui sera traite par ajaxCallback.js
133
-			"<a href='$url' name='ajax_ancre' style='display:none;'>anchor</a>",
134
-			// et rien dans le message ok
135
-			''
136
-		];
137
-	} else {
138
-		// ne pas laisser passer n'importe quoi dans l'url
139
-		$url = str_replace(['<', '"'], ['&lt;', '&quot;'], (string) $url);
140
-
141
-		$url = strtr($url, "\n\r", '  ');
142
-		# en theorie on devrait faire ca tout le temps, mais quand la chaine
143
-		# commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne
144
-		if ($url[0] == '?') {
145
-			$url = url_de_base() . $url;
146
-		}
147
-		$url = str_replace('&amp;', '&', (string) $url);
148
-		spip_log("redirige formulaire ajax: $url");
149
-		include_spip('inc/filtres');
150
-		if ($format == 'ajaxform') {
151
-			return [
152
-				// on renvoie un lien masque qui sera traite par ajaxCallback.js
153
-				'<a href="' . quote_amp($url) . '" name="ajax_redirect"  style="display:none;">' . _T('navigateur_pas_redirige') . '</a>',
154
-				// et un message au cas ou
155
-				'<br /><a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>'
156
-			];
157
-		} else // format message texte, tout en js inline
158
-		{
159
-			return
160
-				// ie poste les formulaires dans une iframe, il faut donc rediriger son parent
161
-				"<script type='text/javascript'>if (parent.window){parent.window.document.location.replace(\"$url\");} else {document.location.replace(\"$url\");}</script>"
162
-				. http_img_pack('loader.svg', '', " class='loader'")
163
-				. '<br />'
164
-				. '<a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>';
165
-		}
166
-	}
123
+    if (
124
+        !_AJAX
125
+        && !headers_sent()
126
+        && !_request('var_ajax')
127
+    ) {
128
+        redirige_par_entete(str_replace('&amp;', '&', (string) $url), $equiv);
129
+    } // si c'est une ancre, fixer simplement le window.location.hash
130
+    elseif ($format == 'ajaxform' && preg_match(',^#[0-9a-z\-_]+$,i', (string) $url)) {
131
+        return [
132
+            // on renvoie un lien masque qui sera traite par ajaxCallback.js
133
+            "<a href='$url' name='ajax_ancre' style='display:none;'>anchor</a>",
134
+            // et rien dans le message ok
135
+            ''
136
+        ];
137
+    } else {
138
+        // ne pas laisser passer n'importe quoi dans l'url
139
+        $url = str_replace(['<', '"'], ['&lt;', '&quot;'], (string) $url);
140
+
141
+        $url = strtr($url, "\n\r", '  ');
142
+        # en theorie on devrait faire ca tout le temps, mais quand la chaine
143
+        # commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne
144
+        if ($url[0] == '?') {
145
+            $url = url_de_base() . $url;
146
+        }
147
+        $url = str_replace('&amp;', '&', (string) $url);
148
+        spip_log("redirige formulaire ajax: $url");
149
+        include_spip('inc/filtres');
150
+        if ($format == 'ajaxform') {
151
+            return [
152
+                // on renvoie un lien masque qui sera traite par ajaxCallback.js
153
+                '<a href="' . quote_amp($url) . '" name="ajax_redirect"  style="display:none;">' . _T('navigateur_pas_redirige') . '</a>',
154
+                // et un message au cas ou
155
+                '<br /><a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>'
156
+            ];
157
+        } else // format message texte, tout en js inline
158
+        {
159
+            return
160
+                // ie poste les formulaires dans une iframe, il faut donc rediriger son parent
161
+                "<script type='text/javascript'>if (parent.window){parent.window.document.location.replace(\"$url\");} else {document.location.replace(\"$url\");}</script>"
162
+                . http_img_pack('loader.svg', '', " class='loader'")
163
+                . '<br />'
164
+                . '<a href="' . quote_amp($url) . '">' . _T('navigateur_pas_redirige') . '</a>';
165
+        }
166
+    }
167 167
 }
168 168
 
169 169
 /**
@@ -184,27 +184,27 @@  discard block
 block discarded – undo
184 184
  * @return void
185 185
  **/
186 186
 function redirige_url_ecrire($script = '', $args = '', $equiv = '') {
187
-	return redirige_par_entete(generer_url_ecrire($script, $args, true), $equiv);
187
+    return redirige_par_entete(generer_url_ecrire($script, $args, true), $equiv);
188 188
 }
189 189
 
190 190
 // Retourne ce qui va bien pour que le navigateur ne mette pas la page en cache
191 191
 function http_no_cache() {
192
-	if (headers_sent()) {
193
-		spip_log('http_no_cache arrive trop tard');
194
-
195
-		return;
196
-	}
197
-	$charset = empty($GLOBALS['meta']['charset']) ? 'utf-8' : $GLOBALS['meta']['charset'];
198
-
199
-	// selon http://developer.apple.com/internet/safari/faq.html#anchor5
200
-	// il faudrait aussi pour Safari
201
-	// header("Cache-Control: post-check=0, pre-check=0", false)
202
-	// mais ca ne respecte pas
203
-	// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
204
-
205
-	header("Content-Type: text/html; charset=$charset");
206
-	header('Expires: 0');
207
-	header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
208
-	header('Cache-Control: no-cache, must-revalidate');
209
-	header('Pragma: no-cache');
192
+    if (headers_sent()) {
193
+        spip_log('http_no_cache arrive trop tard');
194
+
195
+        return;
196
+    }
197
+    $charset = empty($GLOBALS['meta']['charset']) ? 'utf-8' : $GLOBALS['meta']['charset'];
198
+
199
+    // selon http://developer.apple.com/internet/safari/faq.html#anchor5
200
+    // il faudrait aussi pour Safari
201
+    // header("Cache-Control: post-check=0, pre-check=0", false)
202
+    // mais ca ne respecte pas
203
+    // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
204
+
205
+    header("Content-Type: text/html; charset=$charset");
206
+    header('Expires: 0');
207
+    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
208
+    header('Cache-Control: no-cache, must-revalidate');
209
+    header('Pragma: no-cache');
210 210
 }
Please login to merge, or discard this patch.
ecrire/inc/filtres_dates.php 1 patch
Indentation   +562 added lines, -562 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,29 +36,29 @@  discard block
 block discarded – undo
36 36
  *     - une chaîne vide si la date est considérée nulle
37 37
  **/
38 38
 function normaliser_date($date, $forcer_jour = false): string {
39
-	$date = vider_date($date);
40
-	if ($date) {
41
-		if (preg_match('/^\d{8,10}$/', $date)) {
42
-			$date = date('Y-m-d H:i:s', $date);
43
-		}
44
-		if (preg_match('#^([12]\d{3})([-/]00)?( [-0-9:]+)?$#', $date, $regs)) {
45
-			$regs = array_pad($regs, 4, null); // eviter notice php
46
-			$date = $regs[1] . '-00-00' . $regs[3];
47
-		} else {
48
-			if (preg_match('#^([12]\d{3}[-/][01]?\d)([-/]00)?( [-0-9:]+)?$#', $date, $regs)) {
49
-				$regs = array_pad($regs, 4, null); // eviter notice php
50
-				$date = preg_replace('@/@', '-', (string) $regs[1]) . '-00' . $regs[3];
51
-			} else {
52
-				$date = date('Y-m-d H:i:s', strtotime($date));
53
-			}
54
-		}
55
-
56
-		if ($forcer_jour) {
57
-			$date = str_replace('-00', '-01', $date);
58
-		}
59
-	}
60
-
61
-	return $date;
39
+    $date = vider_date($date);
40
+    if ($date) {
41
+        if (preg_match('/^\d{8,10}$/', $date)) {
42
+            $date = date('Y-m-d H:i:s', $date);
43
+        }
44
+        if (preg_match('#^([12]\d{3})([-/]00)?( [-0-9:]+)?$#', $date, $regs)) {
45
+            $regs = array_pad($regs, 4, null); // eviter notice php
46
+            $date = $regs[1] . '-00-00' . $regs[3];
47
+        } else {
48
+            if (preg_match('#^([12]\d{3}[-/][01]?\d)([-/]00)?( [-0-9:]+)?$#', $date, $regs)) {
49
+                $regs = array_pad($regs, 4, null); // eviter notice php
50
+                $date = preg_replace('@/@', '-', (string) $regs[1]) . '-00' . $regs[3];
51
+            } else {
52
+                $date = date('Y-m-d H:i:s', strtotime($date));
53
+            }
54
+        }
55
+
56
+        if ($forcer_jour) {
57
+            $date = str_replace('-00', '-01', $date);
58
+        }
59
+    }
60
+
61
+    return $date;
62 62
 }
63 63
 
64 64
 /**
@@ -71,22 +71,22 @@  discard block
 block discarded – undo
71 71
  *     - Une chaine vide
72 72
  **/
73 73
 function vider_date($letexte, $verif_format_date = false): string {
74
-	$letexte ??= '';
75
-	if (
76
-		!$verif_format_date
77
-		|| in_array(strlen($letexte), [10,19]) && preg_match('/^\d{4}-\d{2}-\d{2}(\s\d{2}:\d{2}:\d{2})?$/', $letexte)
78
-	) {
79
-		if (strncmp('0000-00-00', $letexte, 10) == 0) {
80
-			return '';
81
-		}
82
-		if (strncmp('0001-01-01', $letexte, 10) == 0) {
83
-			return '';
84
-		}
85
-		if (strncmp('1970-01-01', $letexte, 10) == 0) {
86
-			return '';
87
-		}  // eviter le bug GMT-1
88
-	}
89
-	return $letexte;
74
+    $letexte ??= '';
75
+    if (
76
+        !$verif_format_date
77
+        || in_array(strlen($letexte), [10,19]) && preg_match('/^\d{4}-\d{2}-\d{2}(\s\d{2}:\d{2}:\d{2})?$/', $letexte)
78
+    ) {
79
+        if (strncmp('0000-00-00', $letexte, 10) == 0) {
80
+            return '';
81
+        }
82
+        if (strncmp('0001-01-01', $letexte, 10) == 0) {
83
+            return '';
84
+        }
85
+        if (strncmp('1970-01-01', $letexte, 10) == 0) {
86
+            return '';
87
+        }  // eviter le bug GMT-1
88
+    }
89
+    return $letexte;
90 90
 }
91 91
 
92 92
 /**
@@ -102,17 +102,17 @@  discard block
 block discarded – undo
102 102
  **/
103 103
 function recup_heure($date): array {
104 104
 
105
-	if (preg_match('#(\d{1,2}):(\d{1,2})(?::(\d{1,2}))?#', $date, $elements)) {
106
-		array_shift($elements);
107
-		if (!isset($elements[2])) {
108
-			$elements[2] = 0;
109
-		}
110
-		$heure = $elements;
111
-	} else {
112
-		$heure = [0, 0, 0];
113
-	}
114
-
115
-	return $heure;
105
+    if (preg_match('#(\d{1,2}):(\d{1,2})(?::(\d{1,2}))?#', $date, $elements)) {
106
+        array_shift($elements);
107
+        if (!isset($elements[2])) {
108
+            $elements[2] = 0;
109
+        }
110
+        $heure = $elements;
111
+    } else {
112
+        $heure = [0, 0, 0];
113
+    }
114
+
115
+    return $heure;
116 116
 }
117 117
 
118 118
 /**
@@ -126,13 +126,13 @@  discard block
 block discarded – undo
126 126
  * @return string heures, sinon 0
127 127
  **/
128 128
 function heures($numdate): string {
129
-	$heures = null;
130
-	$date_array = recup_heure($numdate);
131
-	if ($date_array) {
132
-		[$heures, $minutes, $secondes] = $date_array;
133
-	}
129
+    $heures = null;
130
+    $date_array = recup_heure($numdate);
131
+    if ($date_array) {
132
+        [$heures, $minutes, $secondes] = $date_array;
133
+    }
134 134
 
135
-	return $heures;
135
+    return $heures;
136 136
 }
137 137
 
138 138
 /**
@@ -146,13 +146,13 @@  discard block
 block discarded – undo
146 146
  * @return string minutes, sinon 0
147 147
  **/
148 148
 function minutes($numdate): string {
149
-	$minutes = null;
150
-	$date_array = recup_heure($numdate);
151
-	if ($date_array) {
152
-		[$heures, $minutes, $secondes] = $date_array;
153
-	}
149
+    $minutes = null;
150
+    $date_array = recup_heure($numdate);
151
+    if ($date_array) {
152
+        [$heures, $minutes, $secondes] = $date_array;
153
+    }
154 154
 
155
-	return $minutes;
155
+    return $minutes;
156 156
 }
157 157
 
158 158
 /**
@@ -166,13 +166,13 @@  discard block
 block discarded – undo
166 166
  * @return string secondes, sinon 0
167 167
  **/
168 168
 function secondes($numdate): string {
169
-	$secondes = null;
170
-	$date_array = recup_heure($numdate);
171
-	if ($date_array) {
172
-		[$heures, $minutes, $secondes] = $date_array;
173
-	}
169
+    $secondes = null;
170
+    $date_array = recup_heure($numdate);
171
+    if ($date_array) {
172
+        [$heures, $minutes, $secondes] = $date_array;
173
+    }
174 174
 
175
-	return $secondes;
175
+    return $secondes;
176 176
 }
177 177
 
178 178
 /**
@@ -191,11 +191,11 @@  discard block
 block discarded – undo
191 191
  * @return string L'heure formatée dans la langue en cours.
192 192
  **/
193 193
 function heures_minutes($numdate, $forme = ''): string {
194
-	if ($forme !== 'abbr') {
195
-		return _T('date_fmt_heures_minutes', ['h' => heures($numdate), 'm' => minutes($numdate)]);
196
-	} else {
197
-		return _T('date_fmt_heures_minutes_court', ['h' => heures($numdate), 'm' => minutes($numdate)]);
198
-	}
194
+    if ($forme !== 'abbr') {
195
+        return _T('date_fmt_heures_minutes', ['h' => heures($numdate), 'm' => minutes($numdate)]);
196
+    } else {
197
+        return _T('date_fmt_heures_minutes_court', ['h' => heures($numdate), 'm' => minutes($numdate)]);
198
+    }
199 199
 }
200 200
 
201 201
 /**
@@ -220,57 +220,57 @@  discard block
 block discarded – undo
220 220
  * @return array [année, mois, jour, heures, minutes, secondes] ou []
221 221
  **/
222 222
 function recup_date($numdate, $forcer_jour = true): array {
223
-	if (!$numdate) {
224
-		return [];
225
-	}
226
-	$heures = $minutes = $secondes = 0;
227
-	if (preg_match('#(\d{1,2})/(\d{1,2})/(\d{4}|\d{1,2})#', $numdate, $regs)) {
228
-		$jour = $regs[1];
229
-		$mois = $regs[2];
230
-		$annee = $regs[3];
231
-		if ($annee < 90) {
232
-			$annee = 2000 + $annee;
233
-		} elseif ($annee < 100) {
234
-			$annee = 1900 + $annee;
235
-		}
236
-		[$heures, $minutes, $secondes] = recup_heure($numdate);
237
-	} elseif (preg_match('#(\d{4})-(\d{1,2})-(\d{1,2})#', $numdate, $regs)) {
238
-		$annee = $regs[1];
239
-		$mois = $regs[2];
240
-		$jour = $regs[3];
241
-		[$heures, $minutes, $secondes] = recup_heure($numdate);
242
-	} elseif (preg_match('#(\d{4})-(\d{2})#', $numdate, $regs)) {
243
-		$annee = $regs[1];
244
-		$mois = $regs[2];
245
-		$jour = '';
246
-		[$heures, $minutes, $secondes] = recup_heure($numdate);
247
-	} elseif (preg_match('#^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$#', $numdate, $regs)) {
248
-		$annee = $regs[1];
249
-		$mois = $regs[2];
250
-		$jour = $regs[3];
251
-		$heures = $regs[4];
252
-		$minutes = $regs[5];
253
-		$secondes = $regs[6];
254
-	} else {
255
-		$annee = $mois = $jour = '';
256
-	}
257
-	if ($annee > 4000) {
258
-		$annee -= 9000;
259
-	}
260
-	if (strlen($jour) && str_starts_with($jour, '0')) {
261
-		$jour = substr($jour, 1);
262
-	}
263
-
264
-	if ($forcer_jour && $jour == '0') {
265
-		$jour = '1';
266
-	}
267
-	if ($forcer_jour && $mois == '0') {
268
-		$mois = '1';
269
-	}
270
-	if ($annee || $mois || $jour || $heures || $minutes || $secondes) {
271
-		return [$annee, $mois, $jour, $heures, $minutes, $secondes];
272
-	}
273
-	return [];
223
+    if (!$numdate) {
224
+        return [];
225
+    }
226
+    $heures = $minutes = $secondes = 0;
227
+    if (preg_match('#(\d{1,2})/(\d{1,2})/(\d{4}|\d{1,2})#', $numdate, $regs)) {
228
+        $jour = $regs[1];
229
+        $mois = $regs[2];
230
+        $annee = $regs[3];
231
+        if ($annee < 90) {
232
+            $annee = 2000 + $annee;
233
+        } elseif ($annee < 100) {
234
+            $annee = 1900 + $annee;
235
+        }
236
+        [$heures, $minutes, $secondes] = recup_heure($numdate);
237
+    } elseif (preg_match('#(\d{4})-(\d{1,2})-(\d{1,2})#', $numdate, $regs)) {
238
+        $annee = $regs[1];
239
+        $mois = $regs[2];
240
+        $jour = $regs[3];
241
+        [$heures, $minutes, $secondes] = recup_heure($numdate);
242
+    } elseif (preg_match('#(\d{4})-(\d{2})#', $numdate, $regs)) {
243
+        $annee = $regs[1];
244
+        $mois = $regs[2];
245
+        $jour = '';
246
+        [$heures, $minutes, $secondes] = recup_heure($numdate);
247
+    } elseif (preg_match('#^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$#', $numdate, $regs)) {
248
+        $annee = $regs[1];
249
+        $mois = $regs[2];
250
+        $jour = $regs[3];
251
+        $heures = $regs[4];
252
+        $minutes = $regs[5];
253
+        $secondes = $regs[6];
254
+    } else {
255
+        $annee = $mois = $jour = '';
256
+    }
257
+    if ($annee > 4000) {
258
+        $annee -= 9000;
259
+    }
260
+    if (strlen($jour) && str_starts_with($jour, '0')) {
261
+        $jour = substr($jour, 1);
262
+    }
263
+
264
+    if ($forcer_jour && $jour == '0') {
265
+        $jour = '1';
266
+    }
267
+    if ($forcer_jour && $mois == '0') {
268
+        $mois = '1';
269
+    }
270
+    if ($annee || $mois || $jour || $heures || $minutes || $secondes) {
271
+        return [$annee, $mois, $jour, $heures, $minutes, $secondes];
272
+    }
273
+    return [];
274 274
 }
275 275
 
276 276
 /**
@@ -297,10 +297,10 @@  discard block
 block discarded – undo
297 297
  *     La date relative ou complète
298 298
  **/
299 299
 function date_interface($date, $decalage_maxi = 43200 /* 12*3600 */): string {
300
-	return sinon(
301
-		date_relative($date, $decalage_maxi),
302
-		affdate_heure($date)
303
-	);
300
+    return sinon(
301
+        date_relative($date, $decalage_maxi),
302
+        affdate_heure($date)
303
+    );
304 304
 }
305 305
 
306 306
 /**
@@ -333,72 +333,72 @@  discard block
 block discarded – undo
333 333
  **/
334 334
 function date_relative($date, $decalage_maxi = 0, $ref_date = null): string {
335 335
 
336
-	if (!$date) {
337
-		return '';
338
-	}
339
-
340
-	$ref_time = is_null($ref_date) ? time() : strtotime($ref_date);
341
-
342
-	$decal = date('U', $ref_time) - date('U', strtotime($date));
343
-
344
-	if ($decalage_maxi && ($decal > $decalage_maxi || $decal < 0)) {
345
-		return '';
346
-	}
347
-
348
-	if ($decal < 0) {
349
-		$il_y_a = 'date_dans';
350
-		$decal = -1 * $decal;
351
-	} else {
352
-		$il_y_a = 'date_il_y_a';
353
-	}
354
-
355
-	if ($decal > 3600 * 24 * 30 * 6) {
356
-		return affdate_court($date);
357
-	}
358
-
359
-	if ($decal > 3600 * 24 * 30) {
360
-		$mois = floor($decal / (3600 * 24 * 30));
361
-		$delai = $mois < 2
362
-			? "$mois " . _T('date_un_mois')
363
-			: "$mois " . _T('date_mois');
364
-	} else {
365
-		if ($decal > 3600 * 24 * 7) {
366
-			$semaines = floor($decal / (3600 * 24 * 7));
367
-			$delai = $semaines < 2
368
-				? "$semaines " . _T('date_une_semaine')
369
-				: "$semaines " . _T('date_semaines');
370
-		} else {
371
-			if ($decal > 3600 * 24) {
372
-				$jours = floor($decal / (3600 * 24));
373
-				if ($jours < 2) {
374
-					return $il_y_a == 'date_dans' ? _T('date_demain') : _T('date_hier');
375
-				} else {
376
-					$delai = "$jours " . _T('date_jours');
377
-				}
378
-			} else {
379
-				if ($decal >= 3600) {
380
-					$heures = floor($decal / 3600);
381
-					$delai = $heures < 2
382
-						? "$heures " . _T('date_une_heure')
383
-						: "$heures " . _T('date_heures');
384
-				} else {
385
-					if ($decal >= 60) {
386
-						$minutes = floor($decal / 60);
387
-						$delai = $minutes < 2
388
-							? "$minutes " . _T('date_une_minute')
389
-							: "$minutes " . _T('date_minutes');
390
-					} else {
391
-						$secondes = ceil($decal);
392
-						$delai = $secondes < 2
393
-							? "$secondes " . _T('date_une_seconde')
394
-							: "$secondes " . _T('date_secondes');
395
-					}
396
-				}
397
-			}
398
-		}
399
-	}
400
-
401
-	return _T($il_y_a, ['delai' => $delai]);
336
+    if (!$date) {
337
+        return '';
338
+    }
339
+
340
+    $ref_time = is_null($ref_date) ? time() : strtotime($ref_date);
341
+
342
+    $decal = date('U', $ref_time) - date('U', strtotime($date));
343
+
344
+    if ($decalage_maxi && ($decal > $decalage_maxi || $decal < 0)) {
345
+        return '';
346
+    }
347
+
348
+    if ($decal < 0) {
349
+        $il_y_a = 'date_dans';
350
+        $decal = -1 * $decal;
351
+    } else {
352
+        $il_y_a = 'date_il_y_a';
353
+    }
354
+
355
+    if ($decal > 3600 * 24 * 30 * 6) {
356
+        return affdate_court($date);
357
+    }
358
+
359
+    if ($decal > 3600 * 24 * 30) {
360
+        $mois = floor($decal / (3600 * 24 * 30));
361
+        $delai = $mois < 2
362
+            ? "$mois " . _T('date_un_mois')
363
+            : "$mois " . _T('date_mois');
364
+    } else {
365
+        if ($decal > 3600 * 24 * 7) {
366
+            $semaines = floor($decal / (3600 * 24 * 7));
367
+            $delai = $semaines < 2
368
+                ? "$semaines " . _T('date_une_semaine')
369
+                : "$semaines " . _T('date_semaines');
370
+        } else {
371
+            if ($decal > 3600 * 24) {
372
+                $jours = floor($decal / (3600 * 24));
373
+                if ($jours < 2) {
374
+                    return $il_y_a == 'date_dans' ? _T('date_demain') : _T('date_hier');
375
+                } else {
376
+                    $delai = "$jours " . _T('date_jours');
377
+                }
378
+            } else {
379
+                if ($decal >= 3600) {
380
+                    $heures = floor($decal / 3600);
381
+                    $delai = $heures < 2
382
+                        ? "$heures " . _T('date_une_heure')
383
+                        : "$heures " . _T('date_heures');
384
+                } else {
385
+                    if ($decal >= 60) {
386
+                        $minutes = floor($decal / 60);
387
+                        $delai = $minutes < 2
388
+                            ? "$minutes " . _T('date_une_minute')
389
+                            : "$minutes " . _T('date_minutes');
390
+                    } else {
391
+                        $secondes = ceil($decal);
392
+                        $delai = $secondes < 2
393
+                            ? "$secondes " . _T('date_une_seconde')
394
+                            : "$secondes " . _T('date_secondes');
395
+                    }
396
+                }
397
+            }
398
+        }
399
+    }
400
+
401
+    return _T($il_y_a, ['delai' => $delai]);
402 402
 }
403 403
 
404 404
 
@@ -424,30 +424,30 @@  discard block
 block discarded – undo
424 424
  **/
425 425
 function date_relativecourt($date, $decalage_maxi = 0): string {
426 426
 
427
-	if (!$date) {
428
-		return '';
429
-	}
430
-	$decal = date('U', strtotime(date('Y-m-d')) - strtotime(date('Y-m-d', strtotime($date))));
431
-
432
-	if ($decalage_maxi && ($decal > $decalage_maxi || $decal < 0)) {
433
-		return '';
434
-	}
435
-
436
-	if ($decal < -24 * 3600) {
437
-		$retour = date_relative($date, $decalage_maxi);
438
-	} elseif ($decal < 0) {
439
-		$retour = _T('date_demain');
440
-	} else {
441
-		if ($decal < (3600 * 24)) {
442
-			$retour = _T('date_aujourdhui');
443
-		} else {
444
-			$retour = $decal < (3600 * 24 * 2)
445
-				? _T('date_hier')
446
-				: date_relative($date, $decalage_maxi);
447
-		}
448
-	}
449
-
450
-	return $retour;
427
+    if (!$date) {
428
+        return '';
429
+    }
430
+    $decal = date('U', strtotime(date('Y-m-d')) - strtotime(date('Y-m-d', strtotime($date))));
431
+
432
+    if ($decalage_maxi && ($decal > $decalage_maxi || $decal < 0)) {
433
+        return '';
434
+    }
435
+
436
+    if ($decal < -24 * 3600) {
437
+        $retour = date_relative($date, $decalage_maxi);
438
+    } elseif ($decal < 0) {
439
+        $retour = _T('date_demain');
440
+    } else {
441
+        if ($decal < (3600 * 24)) {
442
+            $retour = _T('date_aujourdhui');
443
+        } else {
444
+            $retour = $decal < (3600 * 24 * 2)
445
+                ? _T('date_hier')
446
+                : date_relative($date, $decalage_maxi);
447
+        }
448
+    }
449
+
450
+    return $retour;
451 451
 }
452 452
 
453 453
 /**
@@ -464,173 +464,173 @@  discard block
 block discarded – undo
464 464
  * @return string
465 465
  */
466 466
 function affdate_base($numdate, $vue, $options = []): string {
467
-	if (is_string($options)) {
468
-		$options = ['param' => $options];
469
-	}
470
-	$date_array = recup_date($numdate, false);
471
-	if (!$date_array) {
472
-		return '';
473
-	}
474
-	[$annee, $mois, $jour, $heures, $minutes, $secondes] = $date_array;
475
-
476
-	// 1er, 21st, etc.
477
-	$journum = $jour;
478
-
479
-	if ($jour == 0) {
480
-		$jour = '';
481
-		$njour = 0;
482
-	} else {
483
-		$njour = (int) $jour;
484
-		if ($jourth = _T('date_jnum' . $jour)) {
485
-			$jour = $jourth;
486
-		}
487
-	}
488
-
489
-	$mois = (int) $mois;
490
-	if ($mois > 0 && $mois < 13) {
491
-		/* Traiter le cas "abbr" pour les noms de mois */
492
-		$param = ((isset($options['param']) && $options['param'] === 'abbr') ? '_' . $options['param'] : '');
493
-		$nommois = _T('date_mois_' . $mois . $param);
494
-		$jourmois = $jour
495
-			? _T('date_de_mois_' . $mois, ['j' => $jour, 'nommois' => $nommois])
496
-			: $nommois;
497
-	} else {
498
-		$nommois = '';
499
-		$jourmois = '';
500
-	}
501
-
502
-	if ($annee < 0) {
503
-		$annee = -$annee . ' ' . _T('date_avant_jc');
504
-		$avjc = true;
505
-	} else {
506
-		$avjc = false;
507
-	}
508
-
509
-	switch ($vue) {
510
-		case 'saison':
511
-		case 'saison_annee':
512
-			$saison = '';
513
-			if ($mois > 0) {
514
-				$saison = ($options['param'] == 'sud') ? 3 : 1;
515
-				if ($mois == 3 && $jour >= 21 || $mois > 3) {
516
-					$saison = ($options['param'] == 'sud') ? 4 : 2;
517
-				}
518
-				if ($mois == 6 && $jour >= 21 || $mois > 6) {
519
-					$saison = ($options['param'] == 'sud') ? 1 : 3;
520
-				}
521
-				if ($mois == 9 && $jour >= 21 || $mois > 9) {
522
-					$saison = ($options['param'] == 'sud') ? 2 : 4;
523
-				}
524
-				if ($mois == 12 && $jour >= 21 || $mois > 12) {
525
-					$saison = ($options['param'] == 'sud') ? 3 : 1;
526
-				}
527
-			}
528
-			if ($vue == 'saison') {
529
-				return $saison ? _T('date_saison_' . $saison) : '';
530
-			} else {
531
-				return $saison ? trim((string) _T(
532
-					'date_fmt_saison_annee',
533
-					['saison' => _T('date_saison_' . $saison), 'annee' => $annee]
534
-				)) : '';
535
-			}
536
-
537
-		case 'court':
538
-			if ($avjc) {
539
-				return $annee;
540
-			}
541
-			$a = ((isset($options['annee_courante']) && $options['annee_courante']) ? $options['annee_courante'] : date('Y'));
542
-			if ($annee < ($a - 100) || $annee > ($a + 100)) {
543
-				return $annee;
544
-			}
545
-			if ($annee != $a) {
546
-				return _T(
547
-					'date_fmt_mois_annee',
548
-					['mois' => $mois, 'nommois' => spip_ucfirst($nommois), 'annee' => $annee]
549
-				);
550
-			}
551
-
552
-			return _T(
553
-				'date_fmt_jour_mois',
554
-				['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
555
-			);
556
-
557
-		case 'jourcourt':
558
-			if ($avjc) {
559
-				return $annee;
560
-			}
561
-			$a = ((isset($options['annee_courante']) && $options['annee_courante']) ? $options['annee_courante'] : date('Y'));
562
-			if ($annee < ($a - 100) || $annee > ($a + 100)) {
563
-				return $annee;
564
-			}
565
-			if ($annee != $a) {
566
-				return _T(
567
-					'date_fmt_jour_mois_annee',
568
-					['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
569
-				);
570
-			}
571
-
572
-			return _T(
573
-				'date_fmt_jour_mois',
574
-				['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
575
-			);
576
-
577
-		case 'entier':
578
-			if ($avjc) {
579
-				return $annee;
580
-			}
581
-			if ($jour) {
582
-				return _T(
583
-					'date_fmt_jour_mois_annee',
584
-					['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
585
-				);
586
-			} elseif ($mois) {
587
-				return trim((string) _T('date_fmt_mois_annee', ['mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]));
588
-			} else {
589
-				return $annee;
590
-			}
591
-
592
-		case 'nom_mois':
593
-			return $nommois;
594
-
595
-		case 'mois':
596
-			return sprintf('%02s', $mois);
597
-
598
-		case 'jour':
599
-			return $jour;
600
-
601
-		case 'journum':
602
-			return $journum;
603
-
604
-		case 'nom_jour':
605
-			if (!$mois || !$njour) {
606
-				return '';
607
-			}
608
-			$nom = mktime(1, 1, 1, $mois, $njour, $annee);
609
-			$nom = 1 + (int) date('w', $nom);
610
-			$param = ((isset($options['param']) && $options['param']) ? '_' . $options['param'] : '');
611
-
612
-			return _T('date_jour_' . $nom . $param);
613
-
614
-		case 'mois_annee':
615
-			if ($avjc) {
616
-				return $annee;
617
-			}
618
-
619
-			return trim((string) _T('date_fmt_mois_annee', ['mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]));
620
-
621
-		case 'annee':
622
-			return $annee;
623
-
624
-		// Cas d'une vue non definie : retomber sur le format
625
-		// de date propose par http://www.php.net/date
626
-		default:
627
-			[$annee, $mois, $jour, $heures, $minutes, $secondes] = $date_array;
628
-			// il faut envoyer jour = 1 si jour pas défini, c'est le comportement qu'on avait historiquement en envoyant ''
629
-			if (!$time = mktime($heures, $minutes, $secondes, $mois, is_numeric($jour) ? $jour : 1, $annee)) {
630
-				$time = strtotime($numdate);
631
-			}
632
-			return date($vue, $time);
633
-	}
467
+    if (is_string($options)) {
468
+        $options = ['param' => $options];
469
+    }
470
+    $date_array = recup_date($numdate, false);
471
+    if (!$date_array) {
472
+        return '';
473
+    }
474
+    [$annee, $mois, $jour, $heures, $minutes, $secondes] = $date_array;
475
+
476
+    // 1er, 21st, etc.
477
+    $journum = $jour;
478
+
479
+    if ($jour == 0) {
480
+        $jour = '';
481
+        $njour = 0;
482
+    } else {
483
+        $njour = (int) $jour;
484
+        if ($jourth = _T('date_jnum' . $jour)) {
485
+            $jour = $jourth;
486
+        }
487
+    }
488
+
489
+    $mois = (int) $mois;
490
+    if ($mois > 0 && $mois < 13) {
491
+        /* Traiter le cas "abbr" pour les noms de mois */
492
+        $param = ((isset($options['param']) && $options['param'] === 'abbr') ? '_' . $options['param'] : '');
493
+        $nommois = _T('date_mois_' . $mois . $param);
494
+        $jourmois = $jour
495
+            ? _T('date_de_mois_' . $mois, ['j' => $jour, 'nommois' => $nommois])
496
+            : $nommois;
497
+    } else {
498
+        $nommois = '';
499
+        $jourmois = '';
500
+    }
501
+
502
+    if ($annee < 0) {
503
+        $annee = -$annee . ' ' . _T('date_avant_jc');
504
+        $avjc = true;
505
+    } else {
506
+        $avjc = false;
507
+    }
508
+
509
+    switch ($vue) {
510
+        case 'saison':
511
+        case 'saison_annee':
512
+            $saison = '';
513
+            if ($mois > 0) {
514
+                $saison = ($options['param'] == 'sud') ? 3 : 1;
515
+                if ($mois == 3 && $jour >= 21 || $mois > 3) {
516
+                    $saison = ($options['param'] == 'sud') ? 4 : 2;
517
+                }
518
+                if ($mois == 6 && $jour >= 21 || $mois > 6) {
519
+                    $saison = ($options['param'] == 'sud') ? 1 : 3;
520
+                }
521
+                if ($mois == 9 && $jour >= 21 || $mois > 9) {
522
+                    $saison = ($options['param'] == 'sud') ? 2 : 4;
523
+                }
524
+                if ($mois == 12 && $jour >= 21 || $mois > 12) {
525
+                    $saison = ($options['param'] == 'sud') ? 3 : 1;
526
+                }
527
+            }
528
+            if ($vue == 'saison') {
529
+                return $saison ? _T('date_saison_' . $saison) : '';
530
+            } else {
531
+                return $saison ? trim((string) _T(
532
+                    'date_fmt_saison_annee',
533
+                    ['saison' => _T('date_saison_' . $saison), 'annee' => $annee]
534
+                )) : '';
535
+            }
536
+
537
+        case 'court':
538
+            if ($avjc) {
539
+                return $annee;
540
+            }
541
+            $a = ((isset($options['annee_courante']) && $options['annee_courante']) ? $options['annee_courante'] : date('Y'));
542
+            if ($annee < ($a - 100) || $annee > ($a + 100)) {
543
+                return $annee;
544
+            }
545
+            if ($annee != $a) {
546
+                return _T(
547
+                    'date_fmt_mois_annee',
548
+                    ['mois' => $mois, 'nommois' => spip_ucfirst($nommois), 'annee' => $annee]
549
+                );
550
+            }
551
+
552
+            return _T(
553
+                'date_fmt_jour_mois',
554
+                ['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
555
+            );
556
+
557
+        case 'jourcourt':
558
+            if ($avjc) {
559
+                return $annee;
560
+            }
561
+            $a = ((isset($options['annee_courante']) && $options['annee_courante']) ? $options['annee_courante'] : date('Y'));
562
+            if ($annee < ($a - 100) || $annee > ($a + 100)) {
563
+                return $annee;
564
+            }
565
+            if ($annee != $a) {
566
+                return _T(
567
+                    'date_fmt_jour_mois_annee',
568
+                    ['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
569
+                );
570
+            }
571
+
572
+            return _T(
573
+                'date_fmt_jour_mois',
574
+                ['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
575
+            );
576
+
577
+        case 'entier':
578
+            if ($avjc) {
579
+                return $annee;
580
+            }
581
+            if ($jour) {
582
+                return _T(
583
+                    'date_fmt_jour_mois_annee',
584
+                    ['jourmois' => $jourmois, 'jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]
585
+                );
586
+            } elseif ($mois) {
587
+                return trim((string) _T('date_fmt_mois_annee', ['mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]));
588
+            } else {
589
+                return $annee;
590
+            }
591
+
592
+        case 'nom_mois':
593
+            return $nommois;
594
+
595
+        case 'mois':
596
+            return sprintf('%02s', $mois);
597
+
598
+        case 'jour':
599
+            return $jour;
600
+
601
+        case 'journum':
602
+            return $journum;
603
+
604
+        case 'nom_jour':
605
+            if (!$mois || !$njour) {
606
+                return '';
607
+            }
608
+            $nom = mktime(1, 1, 1, $mois, $njour, $annee);
609
+            $nom = 1 + (int) date('w', $nom);
610
+            $param = ((isset($options['param']) && $options['param']) ? '_' . $options['param'] : '');
611
+
612
+            return _T('date_jour_' . $nom . $param);
613
+
614
+        case 'mois_annee':
615
+            if ($avjc) {
616
+                return $annee;
617
+            }
618
+
619
+            return trim((string) _T('date_fmt_mois_annee', ['mois' => $mois, 'nommois' => $nommois, 'annee' => $annee]));
620
+
621
+        case 'annee':
622
+            return $annee;
623
+
624
+        // Cas d'une vue non definie : retomber sur le format
625
+        // de date propose par http://www.php.net/date
626
+        default:
627
+            [$annee, $mois, $jour, $heures, $minutes, $secondes] = $date_array;
628
+            // il faut envoyer jour = 1 si jour pas défini, c'est le comportement qu'on avait historiquement en envoyant ''
629
+            if (!$time = mktime($heures, $minutes, $secondes, $mois, is_numeric($jour) ? $jour : 1, $annee)) {
630
+                $time = strtotime($numdate);
631
+            }
632
+            return date($vue, $time);
633
+    }
634 634
 }
635 635
 
636 636
 
@@ -657,11 +657,11 @@  discard block
 block discarded – undo
657 657
  *     Nom du jour
658 658
  **/
659 659
 function nom_jour($numdate, $forme = ''): string {
660
-	if ($forme !== 'abbr' && $forme !== 'initiale') {
661
-		$forme = '';
662
-	}
660
+    if ($forme !== 'abbr' && $forme !== 'initiale') {
661
+        $forme = '';
662
+    }
663 663
 
664
-	return affdate_base($numdate, 'nom_jour', ['param' => $forme]);
664
+    return affdate_base($numdate, 'nom_jour', ['param' => $forme]);
665 665
 }
666 666
 
667 667
 /**
@@ -683,7 +683,7 @@  discard block
 block discarded – undo
683 683
  *     Numéro du jour
684 684
  **/
685 685
 function jour($numdate): string {
686
-	return affdate_base($numdate, 'jour');
686
+    return affdate_base($numdate, 'jour');
687 687
 }
688 688
 
689 689
 /**
@@ -701,7 +701,7 @@  discard block
 block discarded – undo
701 701
  *     Numéro du jour
702 702
  **/
703 703
 function journum($numdate): string {
704
-	return affdate_base($numdate, 'journum');
704
+    return affdate_base($numdate, 'journum');
705 705
 }
706 706
 
707 707
 /**
@@ -719,7 +719,7 @@  discard block
 block discarded – undo
719 719
  *     Numéro du mois (sur 2 chiffres)
720 720
  **/
721 721
 function mois($numdate): string {
722
-	return  affdate_base($numdate, 'mois');
722
+    return  affdate_base($numdate, 'mois');
723 723
 }
724 724
 
725 725
 /**
@@ -743,11 +743,11 @@  discard block
 block discarded – undo
743 743
  *     Nom du mois
744 744
  **/
745 745
 function nom_mois($numdate, $forme = ''): string {
746
-	if ($forme !== 'abbr') {
747
-		$forme = '';
748
-	}
746
+    if ($forme !== 'abbr') {
747
+        $forme = '';
748
+    }
749 749
 
750
-	return affdate_base($numdate, 'nom_mois', ['param' => $forme]);
750
+    return affdate_base($numdate, 'nom_mois', ['param' => $forme]);
751 751
 }
752 752
 
753 753
 /**
@@ -765,7 +765,7 @@  discard block
 block discarded – undo
765 765
  *     Année (sur 4 chiffres)
766 766
  **/
767 767
 function annee($numdate): string {
768
-	return affdate_base($numdate, 'annee');
768
+    return affdate_base($numdate, 'annee');
769 769
 }
770 770
 
771 771
 
@@ -795,11 +795,11 @@  discard block
 block discarded – undo
795 795
  *     La date formatée
796 796
  **/
797 797
 function saison($numdate, $hemisphere = 'nord'): string {
798
-	if ($hemisphere !== 'sud') {
799
-		$hemisphere = 'nord';
800
-	}
798
+    if ($hemisphere !== 'sud') {
799
+        $hemisphere = 'nord';
800
+    }
801 801
 
802
-	return affdate_base($numdate, 'saison', ['param' => $hemisphere]);
802
+    return affdate_base($numdate, 'saison', ['param' => $hemisphere]);
803 803
 }
804 804
 
805 805
 
@@ -828,11 +828,11 @@  discard block
 block discarded – undo
828 828
  *     La date formatée
829 829
  **/
830 830
 function saison_annee($numdate, $hemisphere = 'nord'): string {
831
-	if ($hemisphere !== 'sud') {
832
-		$hemisphere = 'nord';
833
-	}
831
+    if ($hemisphere !== 'sud') {
832
+        $hemisphere = 'nord';
833
+    }
834 834
 
835
-	return affdate_base($numdate, 'saison_annee', ['param' => $hemisphere]);
835
+    return affdate_base($numdate, 'saison_annee', ['param' => $hemisphere]);
836 836
 }
837 837
 
838 838
 /**
@@ -860,7 +860,7 @@  discard block
 block discarded – undo
860 860
  *     La date formatée
861 861
  **/
862 862
 function affdate($numdate, $format = 'entier'): string {
863
-	return affdate_base($numdate, $format);
863
+    return affdate_base($numdate, $format);
864 864
 }
865 865
 
866 866
 
@@ -887,7 +887,7 @@  discard block
 block discarded – undo
887 887
  *     La date formatée
888 888
  **/
889 889
 function affdate_court($numdate, $annee_courante = null): string {
890
-	return affdate_base($numdate, 'court', ['annee_courante' => $annee_courante]);
890
+    return affdate_base($numdate, 'court', ['annee_courante' => $annee_courante]);
891 891
 }
892 892
 
893 893
 
@@ -914,7 +914,7 @@  discard block
 block discarded – undo
914 914
  *     La date formatée
915 915
  **/
916 916
 function affdate_jourcourt($numdate, $annee_courante = null): string {
917
-	return affdate_base($numdate, 'jourcourt', ['annee_courante' => $annee_courante]);
917
+    return affdate_base($numdate, 'jourcourt', ['annee_courante' => $annee_courante]);
918 918
 }
919 919
 
920 920
 /**
@@ -932,7 +932,7 @@  discard block
 block discarded – undo
932 932
  *     La date formatée
933 933
  **/
934 934
 function affdate_mois_annee($numdate): string {
935
-	return affdate_base($numdate, 'mois_annee');
935
+    return affdate_base($numdate, 'mois_annee');
936 936
 }
937 937
 
938 938
 /**
@@ -950,16 +950,16 @@  discard block
 block discarded – undo
950 950
  *     La date formatée, sinon ''
951 951
  **/
952 952
 function affdate_heure($numdate): string {
953
-	$date_array = recup_date($numdate);
954
-	if (!$date_array) {
955
-		return '';
956
-	}
957
-	[$annee, $mois, $jour, $heures, $minutes, $sec] = $date_array;
958
-
959
-	return _T('date_fmt_jour_heure', [
960
-		'jour' => affdate($numdate),
961
-		'heure' => _T('date_fmt_heures_minutes', ['h' => $heures, 'm' => $minutes])
962
-	]);
953
+    $date_array = recup_date($numdate);
954
+    if (!$date_array) {
955
+        return '';
956
+    }
957
+    [$annee, $mois, $jour, $heures, $minutes, $sec] = $date_array;
958
+
959
+    return _T('date_fmt_jour_heure', [
960
+        'jour' => affdate($numdate),
961
+        'heure' => _T('date_fmt_heures_minutes', ['h' => $heures, 'm' => $minutes])
962
+    ]);
963 963
 }
964 964
 
965 965
 /**
@@ -991,113 +991,113 @@  discard block
 block discarded – undo
991 991
  *     texte de la date
992 992
  */
993 993
 function affdate_debut_fin($date_debut, $date_fin, $horaire = 'oui', $forme = ''): string {
994
-	$abbr = $jour = '';
995
-	$affdate = 'affdate_jourcourt';
996
-	if (str_contains($forme, 'abbr')) {
997
-		$abbr = 'abbr';
998
-	}
999
-	if (str_contains($forme, 'annee')) {
1000
-		$affdate = 'affdate';
1001
-	}
1002
-	if (str_contains($forme, 'jour')) {
1003
-		$jour = 'jour';
1004
-	}
1005
-
1006
-	$dtstart = $dtend = $dtabbr = '';
1007
-	if (str_contains($forme, 'hcal')) {
1008
-		$dtstart = "<abbr class='dtstart' title='" . date_iso($date_debut) . "'>";
1009
-		$dtend = "<abbr class='dtend' title='" . date_iso($date_fin) . "'>";
1010
-		$dtabbr = '</abbr>';
1011
-	}
1012
-
1013
-	$date_debut = strtotime($date_debut);
1014
-	$date_fin = strtotime($date_fin);
1015
-	$d = date('Y-m-d', $date_debut);
1016
-	$f = date('Y-m-d', $date_fin);
1017
-	$h = ($horaire === 'oui' || $horaire === true);
1018
-	$hd = _T('date_fmt_heures_minutes_court', ['h' => date('H', $date_debut), 'm' => date('i', $date_debut)]);
1019
-	$hf = _T('date_fmt_heures_minutes_court', ['h' => date('H', $date_fin), 'm' => date('i', $date_fin)]);
1020
-
1021
-	if ($d === $f) { // meme jour
1022
-		$nomjour = nom_jour($d, $abbr);
1023
-		$s = $affdate($d);
1024
-		$s = _T('date_fmt_jour', ['nomjour' => $nomjour, 'jour' => $s]);
1025
-		if ($h) {
1026
-			if ($hd === $hf) {
1027
-				// Lundi 20 fevrier a 18h25
1028
-				$s = spip_ucfirst(_T('date_fmt_jour_heure', ['jour' => $s, 'heure' => $hd]));
1029
-				$s = "$dtstart$s$dtabbr";
1030
-			} else {
1031
-				// Le <abbr...>lundi 20 fevrier de 18h00</abbr> a <abbr...>20h00</abbr>
1032
-				if ($dtabbr && $dtstart && $dtend) {
1033
-					$s = _T(
1034
-						'date_fmt_jour_heure_debut_fin_abbr',
1035
-						[
1036
-						'jour' => spip_ucfirst($s),
1037
-						'heure_debut' => $hd,
1038
-						'heure_fin' => $hf,
1039
-						'dtstart' => $dtstart,
1040
-						'dtend' => $dtend,
1041
-						'dtabbr' => $dtabbr
1042
-						],
1043
-						[
1044
-							'sanitize' => false
1045
-						]
1046
-					);
1047
-				} // Le lundi 20 fevrier de 18h00 a 20h00
1048
-				else {
1049
-					$s = spip_ucfirst(_T(
1050
-						'date_fmt_jour_heure_debut_fin',
1051
-						['jour' => $s, 'heure_debut' => $hd, 'heure_fin' => $hf]
1052
-					));
1053
-				}
1054
-			}
1055
-		} else {
1056
-			$s = $dtabbr && $dtstart
1057
-				? $dtstart . spip_ucfirst($s) . $dtabbr
1058
-				: spip_ucfirst($s);
1059
-		}
1060
-	} else {
1061
-		if (date('Y-m', $date_debut) === date('Y-m', $date_fin)) { // meme annee et mois, jours differents
1062
-			$date_debut = $h
1063
-				? affdate_jourcourt($d, date('Y', $date_fin))
1064
-				: jour($d);
1065
-			$date_fin = $affdate($f);
1066
-			if ($jour) {
1067
-				$nomjour_debut = nom_jour($d, $abbr);
1068
-				$date_debut = _T('date_fmt_jour', ['nomjour' => $nomjour_debut, 'jour' => $date_debut]);
1069
-				$nomjour_fin = nom_jour($f, $abbr);
1070
-				$date_fin = _T('date_fmt_jour', ['nomjour' => $nomjour_fin, 'jour' => $date_fin]);
1071
-			}
1072
-			if ($h) {
1073
-				$date_debut = _T('date_fmt_jour_heure', ['jour' => $date_debut, 'heure' => $hd]);
1074
-				$date_fin = _T('date_fmt_jour_heure', ['jour' => $date_fin, 'heure' => $hf]);
1075
-			}
1076
-			$date_debut = $dtstart . $date_debut . $dtabbr;
1077
-			$date_fin = $dtend . $date_fin . $dtabbr;
1078
-
1079
-			$s = _T('date_fmt_periode', ['date_debut' => $date_debut, 'date_fin' => $date_fin]);
1080
-		} else {
1081
-			$date_debut = affdate_jourcourt($d, date('Y', $date_fin));
1082
-			$date_fin = $affdate($f);
1083
-			if ($jour) {
1084
-				$nomjour_debut = nom_jour($d, $abbr);
1085
-				$date_debut = _T('date_fmt_jour', ['nomjour' => $nomjour_debut, 'jour' => $date_debut]);
1086
-				$nomjour_fin = nom_jour($f, $abbr);
1087
-				$date_fin = _T('date_fmt_jour', ['nomjour' => $nomjour_fin, 'jour' => $date_fin]);
1088
-			}
1089
-			if ($h) {
1090
-				$date_debut = _T('date_fmt_jour_heure', ['jour' => $date_debut, 'heure' => $hd]);
1091
-				$date_fin = _T('date_fmt_jour_heure', ['jour' => $date_fin, 'heure' => $hf]);
1092
-			}
1093
-
1094
-			$date_debut = $dtstart . $date_debut . $dtabbr;
1095
-			$date_fin = $dtend . $date_fin . $dtabbr;
1096
-			$s = _T('date_fmt_periode', ['date_debut' => $date_debut, 'date_fin' => $date_fin]);
1097
-		}
1098
-	}
1099
-
1100
-	return $s;
994
+    $abbr = $jour = '';
995
+    $affdate = 'affdate_jourcourt';
996
+    if (str_contains($forme, 'abbr')) {
997
+        $abbr = 'abbr';
998
+    }
999
+    if (str_contains($forme, 'annee')) {
1000
+        $affdate = 'affdate';
1001
+    }
1002
+    if (str_contains($forme, 'jour')) {
1003
+        $jour = 'jour';
1004
+    }
1005
+
1006
+    $dtstart = $dtend = $dtabbr = '';
1007
+    if (str_contains($forme, 'hcal')) {
1008
+        $dtstart = "<abbr class='dtstart' title='" . date_iso($date_debut) . "'>";
1009
+        $dtend = "<abbr class='dtend' title='" . date_iso($date_fin) . "'>";
1010
+        $dtabbr = '</abbr>';
1011
+    }
1012
+
1013
+    $date_debut = strtotime($date_debut);
1014
+    $date_fin = strtotime($date_fin);
1015
+    $d = date('Y-m-d', $date_debut);
1016
+    $f = date('Y-m-d', $date_fin);
1017
+    $h = ($horaire === 'oui' || $horaire === true);
1018
+    $hd = _T('date_fmt_heures_minutes_court', ['h' => date('H', $date_debut), 'm' => date('i', $date_debut)]);
1019
+    $hf = _T('date_fmt_heures_minutes_court', ['h' => date('H', $date_fin), 'm' => date('i', $date_fin)]);
1020
+
1021
+    if ($d === $f) { // meme jour
1022
+        $nomjour = nom_jour($d, $abbr);
1023
+        $s = $affdate($d);
1024
+        $s = _T('date_fmt_jour', ['nomjour' => $nomjour, 'jour' => $s]);
1025
+        if ($h) {
1026
+            if ($hd === $hf) {
1027
+                // Lundi 20 fevrier a 18h25
1028
+                $s = spip_ucfirst(_T('date_fmt_jour_heure', ['jour' => $s, 'heure' => $hd]));
1029
+                $s = "$dtstart$s$dtabbr";
1030
+            } else {
1031
+                // Le <abbr...>lundi 20 fevrier de 18h00</abbr> a <abbr...>20h00</abbr>
1032
+                if ($dtabbr && $dtstart && $dtend) {
1033
+                    $s = _T(
1034
+                        'date_fmt_jour_heure_debut_fin_abbr',
1035
+                        [
1036
+                        'jour' => spip_ucfirst($s),
1037
+                        'heure_debut' => $hd,
1038
+                        'heure_fin' => $hf,
1039
+                        'dtstart' => $dtstart,
1040
+                        'dtend' => $dtend,
1041
+                        'dtabbr' => $dtabbr
1042
+                        ],
1043
+                        [
1044
+                            'sanitize' => false
1045
+                        ]
1046
+                    );
1047
+                } // Le lundi 20 fevrier de 18h00 a 20h00
1048
+                else {
1049
+                    $s = spip_ucfirst(_T(
1050
+                        'date_fmt_jour_heure_debut_fin',
1051
+                        ['jour' => $s, 'heure_debut' => $hd, 'heure_fin' => $hf]
1052
+                    ));
1053
+                }
1054
+            }
1055
+        } else {
1056
+            $s = $dtabbr && $dtstart
1057
+                ? $dtstart . spip_ucfirst($s) . $dtabbr
1058
+                : spip_ucfirst($s);
1059
+        }
1060
+    } else {
1061
+        if (date('Y-m', $date_debut) === date('Y-m', $date_fin)) { // meme annee et mois, jours differents
1062
+            $date_debut = $h
1063
+                ? affdate_jourcourt($d, date('Y', $date_fin))
1064
+                : jour($d);
1065
+            $date_fin = $affdate($f);
1066
+            if ($jour) {
1067
+                $nomjour_debut = nom_jour($d, $abbr);
1068
+                $date_debut = _T('date_fmt_jour', ['nomjour' => $nomjour_debut, 'jour' => $date_debut]);
1069
+                $nomjour_fin = nom_jour($f, $abbr);
1070
+                $date_fin = _T('date_fmt_jour', ['nomjour' => $nomjour_fin, 'jour' => $date_fin]);
1071
+            }
1072
+            if ($h) {
1073
+                $date_debut = _T('date_fmt_jour_heure', ['jour' => $date_debut, 'heure' => $hd]);
1074
+                $date_fin = _T('date_fmt_jour_heure', ['jour' => $date_fin, 'heure' => $hf]);
1075
+            }
1076
+            $date_debut = $dtstart . $date_debut . $dtabbr;
1077
+            $date_fin = $dtend . $date_fin . $dtabbr;
1078
+
1079
+            $s = _T('date_fmt_periode', ['date_debut' => $date_debut, 'date_fin' => $date_fin]);
1080
+        } else {
1081
+            $date_debut = affdate_jourcourt($d, date('Y', $date_fin));
1082
+            $date_fin = $affdate($f);
1083
+            if ($jour) {
1084
+                $nomjour_debut = nom_jour($d, $abbr);
1085
+                $date_debut = _T('date_fmt_jour', ['nomjour' => $nomjour_debut, 'jour' => $date_debut]);
1086
+                $nomjour_fin = nom_jour($f, $abbr);
1087
+                $date_fin = _T('date_fmt_jour', ['nomjour' => $nomjour_fin, 'jour' => $date_fin]);
1088
+            }
1089
+            if ($h) {
1090
+                $date_debut = _T('date_fmt_jour_heure', ['jour' => $date_debut, 'heure' => $hd]);
1091
+                $date_fin = _T('date_fmt_jour_heure', ['jour' => $date_fin, 'heure' => $hf]);
1092
+            }
1093
+
1094
+            $date_debut = $dtstart . $date_debut . $dtabbr;
1095
+            $date_fin = $dtend . $date_fin . $dtabbr;
1096
+            $s = _T('date_fmt_periode', ['date_debut' => $date_debut, 'date_fin' => $date_fin]);
1097
+        }
1098
+    }
1099
+
1100
+    return $s;
1101 1101
 }
1102 1102
 
1103 1103
 /**
@@ -1118,10 +1118,10 @@  discard block
 block discarded – undo
1118 1118
  *     Date au format ical
1119 1119
  **/
1120 1120
 function date_ical($date, $addminutes = 0): string {
1121
-	[$heures, $minutes, $secondes] = recup_heure($date);
1122
-	[$annee, $mois, $jour] = recup_date($date);
1121
+    [$heures, $minutes, $secondes] = recup_heure($date);
1122
+    [$annee, $mois, $jour] = recup_date($date);
1123 1123
 
1124
-	return gmdate('Ymd\THis\Z', mktime($heures, $minutes + $addminutes, $secondes, $mois, $jour, $annee));
1124
+    return gmdate('Ymd\THis\Z', mktime($heures, $minutes + $addminutes, $secondes, $mois, $jour, $annee));
1125 1125
 }
1126 1126
 
1127 1127
 
@@ -1145,14 +1145,14 @@  discard block
 block discarded – undo
1145 1145
  *     La date formatée
1146 1146
  **/
1147 1147
 function date_iso($date_heure): string {
1148
-	$date = recup_date($date_heure);
1149
-	$annee = $date[0] ?? null;
1150
-	$mois = $date[1] ?? null;
1151
-	$jour = $date[2] ?? null;
1152
-	[$heures, $minutes, $secondes] = recup_heure($date_heure);
1153
-	$time = @mktime($heures, $minutes, $secondes, $mois, $jour, $annee);
1154
-
1155
-	return gmdate('Y-m-d\TH:i:s\Z', $time);
1148
+    $date = recup_date($date_heure);
1149
+    $annee = $date[0] ?? null;
1150
+    $mois = $date[1] ?? null;
1151
+    $jour = $date[2] ?? null;
1152
+    [$heures, $minutes, $secondes] = recup_heure($date_heure);
1153
+    $time = @mktime($heures, $minutes, $secondes, $mois, $jour, $annee);
1154
+
1155
+    return gmdate('Y-m-d\TH:i:s\Z', $time);
1156 1156
 }
1157 1157
 
1158 1158
 /**
@@ -1175,11 +1175,11 @@  discard block
 block discarded – undo
1175 1175
  *     La date formatée
1176 1176
  **/
1177 1177
 function date_822($date_heure): string {
1178
-	[$annee, $mois, $jour] = recup_date($date_heure);
1179
-	[$heures, $minutes, $secondes] = recup_heure($date_heure);
1180
-	$time = mktime($heures, $minutes, $secondes, $mois, $jour, $annee);
1178
+    [$annee, $mois, $jour] = recup_date($date_heure);
1179
+    [$heures, $minutes, $secondes] = recup_heure($date_heure);
1180
+    $time = mktime($heures, $minutes, $secondes, $mois, $jour, $annee);
1181 1181
 
1182
-	return date('r', $time);
1182
+    return date('r', $time);
1183 1183
 }
1184 1184
 
1185 1185
 /**
@@ -1195,11 +1195,11 @@  discard block
 block discarded – undo
1195 1195
  *     Date au format `Ymd`
1196 1196
  **/
1197 1197
 function date_anneemoisjour($d): string {
1198
-	if (!$d) {
1199
-		$d = date('Y-m-d');
1200
-	}
1198
+    if (!$d) {
1199
+        $d = date('Y-m-d');
1200
+    }
1201 1201
 
1202
-	return substr($d, 0, 4) . substr($d, 5, 2) . substr($d, 8, 2);
1202
+    return substr($d, 0, 4) . substr($d, 5, 2) . substr($d, 8, 2);
1203 1203
 }
1204 1204
 
1205 1205
 /**
@@ -1215,11 +1215,11 @@  discard block
 block discarded – undo
1215 1215
  *     Date au format `Ym`
1216 1216
  **/
1217 1217
 function date_anneemois($d): string {
1218
-	if (!$d) {
1219
-		$d = date('Y-m-d');
1220
-	}
1218
+    if (!$d) {
1219
+        $d = date('Y-m-d');
1220
+    }
1221 1221
 
1222
-	return substr($d, 0, 4) . substr($d, 5, 2);
1222
+    return substr($d, 0, 4) . substr($d, 5, 2);
1223 1223
 }
1224 1224
 
1225 1225
 /**
@@ -1235,13 +1235,13 @@  discard block
 block discarded – undo
1235 1235
  *     Date au lundi de la même semaine au format `Ymd`
1236 1236
  **/
1237 1237
 function date_debut_semaine($annee, $mois, $jour): string {
1238
-	$w_day = date('w', mktime(0, 0, 0, $mois, $jour, $annee));
1239
-	if ($w_day == 0) {
1240
-		$w_day = 7;
1241
-	} // Gaffe: le dimanche est zero
1242
-	$debut = $jour - $w_day + 1;
1238
+    $w_day = date('w', mktime(0, 0, 0, $mois, $jour, $annee));
1239
+    if ($w_day == 0) {
1240
+        $w_day = 7;
1241
+    } // Gaffe: le dimanche est zero
1242
+    $debut = $jour - $w_day + 1;
1243 1243
 
1244
-	return date('Ymd', mktime(0, 0, 0, $mois, $debut, $annee));
1244
+    return date('Ymd', mktime(0, 0, 0, $mois, $debut, $annee));
1245 1245
 }
1246 1246
 
1247 1247
 /**
@@ -1257,11 +1257,11 @@  discard block
 block discarded – undo
1257 1257
  *     Date au dimanche de la même semaine au format `Ymd`
1258 1258
  **/
1259 1259
 function date_fin_semaine($annee, $mois, $jour): string {
1260
-	$w_day = date('w', mktime(0, 0, 0, $mois, $jour, $annee));
1261
-	if ($w_day == 0) {
1262
-		$w_day = 7;
1263
-	} // Gaffe: le dimanche est zero
1264
-	$debut = $jour - $w_day + 1;
1260
+    $w_day = date('w', mktime(0, 0, 0, $mois, $jour, $annee));
1261
+    if ($w_day == 0) {
1262
+        $w_day = 7;
1263
+    } // Gaffe: le dimanche est zero
1264
+    $debut = $jour - $w_day + 1;
1265 1265
 
1266
-	return date('Ymd', mktime(0, 0, 0, $mois, $debut + 6, $annee));
1266
+    return date('Ymd', mktime(0, 0, 0, $mois, $debut + 6, $annee));
1267 1267
 }
Please login to merge, or discard this patch.
ecrire/inc/cvt_multietapes.php 1 patch
Indentation   +156 added lines, -156 removed lines patch added patch discarded remove patch
@@ -65,7 +65,7 @@  discard block
 block discarded – undo
65 65
  */
66 66
 
67 67
 if (!defined('_ECRIRE_INC_VERSION')) {
68
-	return;
68
+    return;
69 69
 }
70 70
 
71 71
 /**
@@ -76,46 +76,46 @@  discard block
 block discarded – undo
76 76
  * @return array|false
77 77
  */
78 78
 function cvtmulti_recuperer_post_precedents($form) {
79
-	include_spip('inc/filtres');
80
-	if (
81
-		$form
82
-		&& ($c = _request('cvtm_prev_post'))
83
-		&& ($c = decoder_contexte_ajax($c, $form))
84
-	) {
85
-		#var_dump($c);
79
+    include_spip('inc/filtres');
80
+    if (
81
+        $form
82
+        && ($c = _request('cvtm_prev_post'))
83
+        && ($c = decoder_contexte_ajax($c, $form))
84
+    ) {
85
+        #var_dump($c);
86 86
 
87
-		# reinjecter dans la bonne variable pour permettre de retrouver
88
-		# toutes les saisies dans un seul tableau
89
-		if ($_SERVER['REQUEST_METHOD'] == 'POST') {
90
-			$store = &$_POST;
91
-		} else {
92
-			$store = &$_GET;
93
-		}
87
+        # reinjecter dans la bonne variable pour permettre de retrouver
88
+        # toutes les saisies dans un seul tableau
89
+        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
90
+            $store = &$_POST;
91
+        } else {
92
+            $store = &$_GET;
93
+        }
94 94
 
95
-		foreach ($c as $k => $v) { // on ecrase pas si saisi a nouveau !
96
-		if (!isset($store[$k])) {
97
-				$_REQUEST[$k] = $store[$k] = $v;
98
-		} // mais si tableau des deux cotes, on merge avec priorite a la derniere saisie
99
-			elseif (
100
-				is_array($store[$k])
101
-				&& is_array($v)
102
-				&& ($z = array_keys($v))
103
-				&& !is_numeric(reset($z))
104
-				&& ($z = array_keys($store[$k]))
105
-				&& !is_numeric(reset($z))
106
-			) {
107
-				$_REQUEST[$k] = $store[$k] = array_merge($v, $store[$k]);
108
-			}
109
-		}
95
+        foreach ($c as $k => $v) { // on ecrase pas si saisi a nouveau !
96
+        if (!isset($store[$k])) {
97
+                $_REQUEST[$k] = $store[$k] = $v;
98
+        } // mais si tableau des deux cotes, on merge avec priorite a la derniere saisie
99
+            elseif (
100
+                is_array($store[$k])
101
+                && is_array($v)
102
+                && ($z = array_keys($v))
103
+                && !is_numeric(reset($z))
104
+                && ($z = array_keys($store[$k]))
105
+                && !is_numeric(reset($z))
106
+            ) {
107
+                $_REQUEST[$k] = $store[$k] = array_merge($v, $store[$k]);
108
+            }
109
+        }
110 110
 
111
-		// vider pour eviter un second appel a verifier_n
112
-		// en cas de double implementation (unipotence)
113
-		set_request('cvtm_prev_post');
111
+        // vider pour eviter un second appel a verifier_n
112
+        // en cas de double implementation (unipotence)
113
+        set_request('cvtm_prev_post');
114 114
 
115
-		return [$c['_etape'], $c['_etapes']];
116
-	}
115
+        return [$c['_etape'], $c['_etapes']];
116
+    }
117 117
 
118
-	return false;
118
+    return false;
119 119
 }
120 120
 
121 121
 /**
@@ -128,28 +128,28 @@  discard block
 block discarded – undo
128 128
  * @return array
129 129
  */
130 130
 function cvtmulti_sauver_post($form, $je_suis_poste, &$valeurs) {
131
-	if (!isset($valeurs['_cvtm_prev_post'])) {
132
-		$post = ['_etape' => $valeurs['_etape'], '_etapes' => $valeurs['_etapes']];
133
-		foreach (array_keys($valeurs) as $champ) {
134
-			if (
135
-				!str_starts_with($champ, '_')
136
-				&& ($je_suis_poste || (isset($valeurs['_forcer_request']) && $valeurs['_forcer_request']))
137
-				&& ($v = _request($champ)) !== null
138
-			) {
139
-				$post[$champ] = $v;
140
-			}
141
-		}
142
-		include_spip('inc/filtres');
143
-		$c = encoder_contexte_ajax($post, $form);
144
-		if (!isset($valeurs['_hidden'])) {
145
-			$valeurs['_hidden'] = '';
146
-		}
147
-		$valeurs['_hidden'] .= "<input type='hidden' name='cvtm_prev_post' value='$c' />";
148
-		// marquer comme fait, pour eviter double encodage (unipotence)
149
-		$valeurs['_cvtm_prev_post'] = true;
150
-	}
131
+    if (!isset($valeurs['_cvtm_prev_post'])) {
132
+        $post = ['_etape' => $valeurs['_etape'], '_etapes' => $valeurs['_etapes']];
133
+        foreach (array_keys($valeurs) as $champ) {
134
+            if (
135
+                !str_starts_with($champ, '_')
136
+                && ($je_suis_poste || (isset($valeurs['_forcer_request']) && $valeurs['_forcer_request']))
137
+                && ($v = _request($champ)) !== null
138
+            ) {
139
+                $post[$champ] = $v;
140
+            }
141
+        }
142
+        include_spip('inc/filtres');
143
+        $c = encoder_contexte_ajax($post, $form);
144
+        if (!isset($valeurs['_hidden'])) {
145
+            $valeurs['_hidden'] = '';
146
+        }
147
+        $valeurs['_hidden'] .= "<input type='hidden' name='cvtm_prev_post' value='$c' />";
148
+        // marquer comme fait, pour eviter double encodage (unipotence)
149
+        $valeurs['_cvtm_prev_post'] = true;
150
+    }
151 151
 
152
-	return $valeurs;
152
+    return $valeurs;
153 153
 }
154 154
 
155 155
 /**
@@ -159,19 +159,19 @@  discard block
 block discarded – undo
159 159
  * @return array
160 160
  */
161 161
 function cvtmulti_formulaire_charger_etapes($args, $valeurs) {
162
-	if (!isset($valeurs['_etape'])) {
163
-		$form = $args['form'];
164
-		$je_suis_poste = $args['je_suis_poste'];
165
-		$nb_etapes = $valeurs['_etapes'];
166
-		$etape = _request('_etape');
167
-		$etape = min(max($etape, 1), $nb_etapes);
168
-		set_request('_etape', $etape);
169
-		$valeurs['_etape'] = $etape;
162
+    if (!isset($valeurs['_etape'])) {
163
+        $form = $args['form'];
164
+        $je_suis_poste = $args['je_suis_poste'];
165
+        $nb_etapes = $valeurs['_etapes'];
166
+        $etape = _request('_etape');
167
+        $etape = min(max($etape, 1), $nb_etapes);
168
+        set_request('_etape', $etape);
169
+        $valeurs['_etape'] = $etape;
170 170
 
171
-		// sauver les posts de cette etape pour les avoir a la prochaine etape
172
-		$valeurs = cvtmulti_sauver_post($form, $je_suis_poste, $valeurs);
173
-	}
174
-	return $valeurs;
171
+        // sauver les posts de cette etape pour les avoir a la prochaine etape
172
+        $valeurs = cvtmulti_sauver_post($form, $je_suis_poste, $valeurs);
173
+    }
174
+    return $valeurs;
175 175
 }
176 176
 
177 177
 /**
@@ -182,87 +182,87 @@  discard block
 block discarded – undo
182 182
  * @return array
183 183
  */
184 184
 function cvtmulti_formulaire_verifier_etapes($args, $erreurs) {
185
-	#var_dump('Pipe verifier');
185
+    #var_dump('Pipe verifier');
186 186
 
187
-	if (
188
-		($form = $args['form'])
189
-		&& ($e = cvtmulti_recuperer_post_precedents($form)) !== false
190
-	) {
191
-		// recuperer l'etape saisie et le nombre d'etapes total
192
-		[$etape, $etapes] = $e;
193
-		$etape_demandee = (int) _request('aller_a_etape'); // possibilite de poster un entier dans aller_a_etape
187
+    if (
188
+        ($form = $args['form'])
189
+        && ($e = cvtmulti_recuperer_post_precedents($form)) !== false
190
+    ) {
191
+        // recuperer l'etape saisie et le nombre d'etapes total
192
+        [$etape, $etapes] = $e;
193
+        $etape_demandee = (int) _request('aller_a_etape'); // possibilite de poster un entier dans aller_a_etape
194 194
 
195
-		$args['etape_saisie'] = $etape;
196
-		$args['etapes'] = $etapes;
197
-		// lancer les verifs pour chaque etape deja saisie de 1 a $etape
198
-		$erreurs_etapes = [];
199
-		$derniere_etape_ok = 0;
200
-		$e = 0;
201
-		while ($e < max($etape, $etape_demandee - 1) && $e < $etapes) {
202
-			$e++;
203
-			$erreurs_etapes[$e] = [];
204
-			if ($verifier = charger_fonction("verifier_$e", "formulaires/$form/", true)) {
205
-				$erreurs_etapes[$e] = $verifier(...$args['args']);
206
-			} elseif ($verifier = charger_fonction('verifier_etape', "formulaires/$form/", true)) {
207
-				$a = $args['args'];
208
-				array_unshift($a, $e);
209
-				$erreurs_etapes[$e] = $verifier(...$a);
210
-			}
211
-			// et on appelle un pipeline dedie aux etapes, plus easy
212
-			$args['etape'] = $e;
213
-			$args['etape_demandee'] = $etape_demandee;
214
-			$erreurs_etapes[$e] = pipeline(
215
-				'formulaire_verifier_etape',
216
-				[
217
-					'args' => $args,
218
-					'data' => $erreurs_etapes[$e]
219
-				]
220
-			);
195
+        $args['etape_saisie'] = $etape;
196
+        $args['etapes'] = $etapes;
197
+        // lancer les verifs pour chaque etape deja saisie de 1 a $etape
198
+        $erreurs_etapes = [];
199
+        $derniere_etape_ok = 0;
200
+        $e = 0;
201
+        while ($e < max($etape, $etape_demandee - 1) && $e < $etapes) {
202
+            $e++;
203
+            $erreurs_etapes[$e] = [];
204
+            if ($verifier = charger_fonction("verifier_$e", "formulaires/$form/", true)) {
205
+                $erreurs_etapes[$e] = $verifier(...$args['args']);
206
+            } elseif ($verifier = charger_fonction('verifier_etape', "formulaires/$form/", true)) {
207
+                $a = $args['args'];
208
+                array_unshift($a, $e);
209
+                $erreurs_etapes[$e] = $verifier(...$a);
210
+            }
211
+            // et on appelle un pipeline dedie aux etapes, plus easy
212
+            $args['etape'] = $e;
213
+            $args['etape_demandee'] = $etape_demandee;
214
+            $erreurs_etapes[$e] = pipeline(
215
+                'formulaire_verifier_etape',
216
+                [
217
+                    'args' => $args,
218
+                    'data' => $erreurs_etapes[$e]
219
+                ]
220
+            );
221 221
 
222
-			if ($derniere_etape_ok === $e - 1 && !(is_countable($erreurs_etapes[$e]) ? count($erreurs_etapes[$e]) : 0)) {
223
-				$derniere_etape_ok = $e;
224
-			}
225
-			// possibilite de poster dans _retour_etape_x ou aller_a_etape
226
-			if (!is_null(_request("_retour_etape_$e"))) {
227
-				$etape_demandee = $e;
228
-			}
229
-			// Il se peut que les verifications ait décidé de faire sauter des étapes
230
-			if ($aller_a_etape = (int) _request('aller_a_etape')) {
231
-				$etape_demandee = $aller_a_etape; // possibilite de poster un entier dans aller_a_etape
232
-			}
233
-		}
222
+            if ($derniere_etape_ok === $e - 1 && !(is_countable($erreurs_etapes[$e]) ? count($erreurs_etapes[$e]) : 0)) {
223
+                $derniere_etape_ok = $e;
224
+            }
225
+            // possibilite de poster dans _retour_etape_x ou aller_a_etape
226
+            if (!is_null(_request("_retour_etape_$e"))) {
227
+                $etape_demandee = $e;
228
+            }
229
+            // Il se peut que les verifications ait décidé de faire sauter des étapes
230
+            if ($aller_a_etape = (int) _request('aller_a_etape')) {
231
+                $etape_demandee = $aller_a_etape; // possibilite de poster un entier dans aller_a_etape
232
+            }
233
+        }
234 234
 
235 235
 
236
-		// si la derniere etape OK etait la derniere
237
-		// on renvoie le flux inchange et ca declenche traiter
238
-		if (
239
-			$derniere_etape_ok == $etapes
240
-			&& (!$etape_demandee || $etape_demandee >= $etapes)
241
-		) {
242
-			return $erreurs;
243
-		} else {
244
-			$etape = $derniere_etape_ok + 1;
245
-			if ($etape_demandee > 0 && $etape_demandee < $etape) {
246
-				$etape = $etape_demandee;
247
-			}
248
-			$etape = min($etape, $etapes);
249
-			#var_dump("prochaine etape $etape");
250
-			// retourner les erreurs de l'etape ciblee
251
-			$erreurs = $erreurs_etapes[$etape] ?? [];
252
-			// Ne pas se tromper dans le texte du message d'erreur : la clé '_etapes' n'est pas une erreur !
253
-			if ($erreurs) {
254
-				if (!isset($erreurs['message_erreur'])) {
255
-					$erreurs['message_erreur'] = singulier_ou_pluriel(is_countable($erreurs) ? count($erreurs) : 0, 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
256
-				}
257
-			} else {
258
-				$erreurs['message_erreur'] = '';
259
-			}
260
-			$erreurs['_etapes'] = "etape suivante $etape";
261
-			set_request('_etape', $etape);
262
-		}
263
-	}
236
+        // si la derniere etape OK etait la derniere
237
+        // on renvoie le flux inchange et ca declenche traiter
238
+        if (
239
+            $derniere_etape_ok == $etapes
240
+            && (!$etape_demandee || $etape_demandee >= $etapes)
241
+        ) {
242
+            return $erreurs;
243
+        } else {
244
+            $etape = $derniere_etape_ok + 1;
245
+            if ($etape_demandee > 0 && $etape_demandee < $etape) {
246
+                $etape = $etape_demandee;
247
+            }
248
+            $etape = min($etape, $etapes);
249
+            #var_dump("prochaine etape $etape");
250
+            // retourner les erreurs de l'etape ciblee
251
+            $erreurs = $erreurs_etapes[$etape] ?? [];
252
+            // Ne pas se tromper dans le texte du message d'erreur : la clé '_etapes' n'est pas une erreur !
253
+            if ($erreurs) {
254
+                if (!isset($erreurs['message_erreur'])) {
255
+                    $erreurs['message_erreur'] = singulier_ou_pluriel(is_countable($erreurs) ? count($erreurs) : 0, 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
256
+                }
257
+            } else {
258
+                $erreurs['message_erreur'] = '';
259
+            }
260
+            $erreurs['_etapes'] = "etape suivante $etape";
261
+            set_request('_etape', $etape);
262
+        }
263
+    }
264 264
 
265
-	return $erreurs;
265
+    return $erreurs;
266 266
 }
267 267
 
268 268
 /**
@@ -274,17 +274,17 @@  discard block
 block discarded – undo
274 274
  * @return array
275 275
  */
276 276
 function cvtmulti_styliser($flux) {
277
-	if (
278
-		str_starts_with((string) $flux['args']['fond'], 'formulaires/')
279
-		&& isset($flux['args']['contexte']['_etapes'])
280
-		&& isset($flux['args']['contexte']['_etape'])
281
-		&& ($e = $flux['args']['contexte']['_etape']) > 1
282
-		&& ($ext = $flux['args']['ext'])
283
-		&& ($f = $flux['data'])
284
-		&& file_exists($f . "_$e.$ext")
285
-	) {
286
-		$flux['data'] = $f . "_$e";
287
-	}
277
+    if (
278
+        str_starts_with((string) $flux['args']['fond'], 'formulaires/')
279
+        && isset($flux['args']['contexte']['_etapes'])
280
+        && isset($flux['args']['contexte']['_etape'])
281
+        && ($e = $flux['args']['contexte']['_etape']) > 1
282
+        && ($ext = $flux['args']['ext'])
283
+        && ($f = $flux['data'])
284
+        && file_exists($f . "_$e.$ext")
285
+    ) {
286
+        $flux['data'] = $f . "_$e";
287
+    }
288 288
 
289
-	return $flux;
289
+    return $flux;
290 290
 }
Please login to merge, or discard this patch.
ecrire/inc/exporter_csv.php 1 patch
Indentation   +119 added lines, -119 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
 include_spip('inc/charsets');
@@ -31,13 +31,13 @@  discard block
 block discarded – undo
31 31
  * @return string
32 32
  */
33 33
 function exporter_csv_champ($champ) {
34
-	#$champ = str_replace("\r", "\n", $champ);
35
-	#$champ = preg_replace(",[\n]+,ms", "\n", $champ);
36
-	#$champ = str_replace("\n", ", ", $champ);
37
-	$champ = preg_replace(',[\s]+,ms', ' ', $champ);
38
-	$champ = str_replace('"', '""', $champ);
34
+    #$champ = str_replace("\r", "\n", $champ);
35
+    #$champ = preg_replace(",[\n]+,ms", "\n", $champ);
36
+    #$champ = str_replace("\n", ", ", $champ);
37
+    $champ = preg_replace(',[\s]+,ms', ' ', $champ);
38
+    $champ = str_replace('"', '""', $champ);
39 39
 
40
-	return '"' . $champ . '"';
40
+    return '"' . $champ . '"';
41 41
 }
42 42
 
43 43
 /**
@@ -54,15 +54,15 @@  discard block
 block discarded – undo
54 54
  * @return string
55 55
  */
56 56
 function exporter_csv_ligne_numerotee($nb, $ligne, $delim = ',', $importer_charset = null, ?callable $callback = null) {
57
-	if ($callback) {
58
-		$ligne = $callback($nb, $ligne, $delim, $importer_charset);
59
-	}
60
-	$output = implode($delim, array_map('exporter_csv_champ', $ligne)) . "\r\n";
61
-	if ($importer_charset) {
62
-		$output = str_replace('’', '\'', $output);
63
-		$output = unicode2charset(html2unicode(charset2unicode($output)), $importer_charset);
64
-	}
65
-	return $output;
57
+    if ($callback) {
58
+        $ligne = $callback($nb, $ligne, $delim, $importer_charset);
59
+    }
60
+    $output = implode($delim, array_map('exporter_csv_champ', $ligne)) . "\r\n";
61
+    if ($importer_charset) {
62
+        $output = str_replace('’', '\'', $output);
63
+        $output = unicode2charset(html2unicode(charset2unicode($output)), $importer_charset);
64
+    }
65
+    return $output;
66 66
 }
67 67
 
68 68
 /**
@@ -90,107 +90,107 @@  discard block
 block discarded – undo
90 90
  */
91 91
 function inc_exporter_csv_dist($titre, $resource, $options = []) {
92 92
 
93
-	// support ancienne syntaxe
94
-	// inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null, $envoyer = true)
95
-	if (is_string($options)) {
96
-		$args = func_get_args();
97
-		$options = [];
98
-		foreach ([2 => 'delim', 3 => 'entetes', 4 => 'envoyer'] as $k => $option) {
99
-			if (!empty($args[$k])) {
100
-				$options[$option] = $args[$k];
101
-			}
102
-		}
103
-	}
104
-
105
-	$default_options = [
106
-		'fichier' => null, // par défaut = $titre
107
-		'extension' => null, // par défaut = choix auto
108
-		'delim' => ',',
109
-		'entetes' => null,
110
-		'envoyer' => true,
111
-		'charset' => null,
112
-		'callback' => null,
113
-	];
114
-	$options = array_merge($default_options, $options);
115
-
116
-	// Délimiteur
117
-	if ($options['delim'] == 'TAB') {
118
-		$options['delim'] = "\t";
119
-	}
120
-	if (!in_array($options['delim'], [',', ';', "\t"])) {
121
-		$options['delim'] = ',';
122
-	}
123
-
124
-	// Nom du fichier : celui indiqué dans les options, sinon le titre
125
-	// Normalisation : uniquement les caractères non spéciaux, tirets, underscore et point + remplacer espaces par underscores
126
-	$filename = $options['fichier'] ?? translitteration(textebrut(typo($titre)));
127
-	$filename = preg_replace([',[^\w\-_\.\s]+,', ',\s+,'], ['', '_'], trim((string) $filename));
128
-	$filename = rtrim($filename, '.');
129
-
130
-	// Extension : celle indiquée en option, sinon choisie selon le délimiteur
131
-	// Normalisation : uniquement les charactères non spéciaux
132
-	if (!empty($options['extension'])) {
133
-		$options['extension'] = preg_replace(',[^\w]+,', '', trim((string) $options['extension']));
134
-	}
135
-	$extension = $options['extension'] ?? ($options['delim'] === ',' ? 'csv' : 'xls');
136
-
137
-	// Fichier
138
-	$basename = "$filename.$extension";
139
-
140
-	// Charset : celui indiqué en option, sinon celui compatible excel si nécessaire, sinon celui du site
141
-	// Excel n'accepte pas l'utf-8 ni les entites html... on transcode tout ce qu'on peut
142
-	$charset_site = $GLOBALS['meta']['charset'];
143
-	$charset_excel = ($extension === 'xls' ? 'iso-8859-1' : null);
144
-	$charset = $options['charset'] ?? $charset_excel ?? $charset_site;
145
-	$importer_charset = (($charset === $charset_site) ? null : $charset);
146
-
147
-	$output = '';
148
-	$nb = 0;
149
-	if (!empty($options['entetes']) && is_array($options['entetes'])) {
150
-		$output = exporter_csv_ligne_numerotee($nb, $options['entetes'], $options['delim'], $importer_charset, $options['callback']);
151
-	}
152
-	// les donnees commencent toujours a la ligne 1, qu'il y ait ou non des entetes
153
-	$nb++;
154
-
155
-	if ($options['envoyer']) {
156
-		$disposition = ($options['envoyer'] === 'attachment' ? 'attachment' : 'inline');
157
-		header("Content-Type: text/comma-separated-values; charset=$charset");
158
-		header("Content-Disposition: $disposition; filename=$basename");
159
-
160
-		// Vider tous les tampons
161
-		$level = @ob_get_level();
162
-		while ($level--) {
163
-			@ob_end_flush();
164
-		}
165
-	}
166
-
167
-	// si envoyer=='attachment' on passe par un fichier temporaire
168
-	// sinon on ecrit directement sur stdout
169
-	if ($options['envoyer'] && $options['envoyer'] !== 'attachment') {
170
-		$fichier = 'php://output';
171
-	}
172
-	else {
173
-		$fichier = sous_repertoire(_DIR_CACHE, 'export') . $basename;
174
-	}
175
-
176
-	$fp = fopen($fichier, 'w');
177
-	$length = fwrite($fp, $output);
178
-
179
-	while ($row = is_array($resource) ? array_shift($resource) : sql_fetch($resource)) {
180
-		$output = exporter_csv_ligne_numerotee($nb, $row, $options['delim'], $importer_charset, $options['callback']);
181
-		$length += fwrite($fp, $output);
182
-		$nb++;
183
-	}
184
-	fclose($fp);
185
-
186
-	if ($options['envoyer']) {
187
-		if ($options['envoyer'] === 'attachment') {
188
-			header("Content-Length: $length");
189
-			readfile($fichier);
190
-		}
191
-		// si on a envoye inline, c'est deja tout bon
192
-		exit;
193
-	}
194
-
195
-	return $fichier;
93
+    // support ancienne syntaxe
94
+    // inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null, $envoyer = true)
95
+    if (is_string($options)) {
96
+        $args = func_get_args();
97
+        $options = [];
98
+        foreach ([2 => 'delim', 3 => 'entetes', 4 => 'envoyer'] as $k => $option) {
99
+            if (!empty($args[$k])) {
100
+                $options[$option] = $args[$k];
101
+            }
102
+        }
103
+    }
104
+
105
+    $default_options = [
106
+        'fichier' => null, // par défaut = $titre
107
+        'extension' => null, // par défaut = choix auto
108
+        'delim' => ',',
109
+        'entetes' => null,
110
+        'envoyer' => true,
111
+        'charset' => null,
112
+        'callback' => null,
113
+    ];
114
+    $options = array_merge($default_options, $options);
115
+
116
+    // Délimiteur
117
+    if ($options['delim'] == 'TAB') {
118
+        $options['delim'] = "\t";
119
+    }
120
+    if (!in_array($options['delim'], [',', ';', "\t"])) {
121
+        $options['delim'] = ',';
122
+    }
123
+
124
+    // Nom du fichier : celui indiqué dans les options, sinon le titre
125
+    // Normalisation : uniquement les caractères non spéciaux, tirets, underscore et point + remplacer espaces par underscores
126
+    $filename = $options['fichier'] ?? translitteration(textebrut(typo($titre)));
127
+    $filename = preg_replace([',[^\w\-_\.\s]+,', ',\s+,'], ['', '_'], trim((string) $filename));
128
+    $filename = rtrim($filename, '.');
129
+
130
+    // Extension : celle indiquée en option, sinon choisie selon le délimiteur
131
+    // Normalisation : uniquement les charactères non spéciaux
132
+    if (!empty($options['extension'])) {
133
+        $options['extension'] = preg_replace(',[^\w]+,', '', trim((string) $options['extension']));
134
+    }
135
+    $extension = $options['extension'] ?? ($options['delim'] === ',' ? 'csv' : 'xls');
136
+
137
+    // Fichier
138
+    $basename = "$filename.$extension";
139
+
140
+    // Charset : celui indiqué en option, sinon celui compatible excel si nécessaire, sinon celui du site
141
+    // Excel n'accepte pas l'utf-8 ni les entites html... on transcode tout ce qu'on peut
142
+    $charset_site = $GLOBALS['meta']['charset'];
143
+    $charset_excel = ($extension === 'xls' ? 'iso-8859-1' : null);
144
+    $charset = $options['charset'] ?? $charset_excel ?? $charset_site;
145
+    $importer_charset = (($charset === $charset_site) ? null : $charset);
146
+
147
+    $output = '';
148
+    $nb = 0;
149
+    if (!empty($options['entetes']) && is_array($options['entetes'])) {
150
+        $output = exporter_csv_ligne_numerotee($nb, $options['entetes'], $options['delim'], $importer_charset, $options['callback']);
151
+    }
152
+    // les donnees commencent toujours a la ligne 1, qu'il y ait ou non des entetes
153
+    $nb++;
154
+
155
+    if ($options['envoyer']) {
156
+        $disposition = ($options['envoyer'] === 'attachment' ? 'attachment' : 'inline');
157
+        header("Content-Type: text/comma-separated-values; charset=$charset");
158
+        header("Content-Disposition: $disposition; filename=$basename");
159
+
160
+        // Vider tous les tampons
161
+        $level = @ob_get_level();
162
+        while ($level--) {
163
+            @ob_end_flush();
164
+        }
165
+    }
166
+
167
+    // si envoyer=='attachment' on passe par un fichier temporaire
168
+    // sinon on ecrit directement sur stdout
169
+    if ($options['envoyer'] && $options['envoyer'] !== 'attachment') {
170
+        $fichier = 'php://output';
171
+    }
172
+    else {
173
+        $fichier = sous_repertoire(_DIR_CACHE, 'export') . $basename;
174
+    }
175
+
176
+    $fp = fopen($fichier, 'w');
177
+    $length = fwrite($fp, $output);
178
+
179
+    while ($row = is_array($resource) ? array_shift($resource) : sql_fetch($resource)) {
180
+        $output = exporter_csv_ligne_numerotee($nb, $row, $options['delim'], $importer_charset, $options['callback']);
181
+        $length += fwrite($fp, $output);
182
+        $nb++;
183
+    }
184
+    fclose($fp);
185
+
186
+    if ($options['envoyer']) {
187
+        if ($options['envoyer'] === 'attachment') {
188
+            header("Content-Length: $length");
189
+            readfile($fichier);
190
+        }
191
+        // si on a envoye inline, c'est deja tout bon
192
+        exit;
193
+    }
194
+
195
+    return $fichier;
196 196
 }
Please login to merge, or discard this patch.
ecrire/inc/chercher_logo.php 1 patch
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
  * @package SPIP\Core\Logos
16 16
  **/
17 17
 if (!defined('_ECRIRE_INC_VERSION')) {
18
-	return;
18
+    return;
19 19
 }
20 20
 
21 21
 /**
@@ -34,23 +34,23 @@  discard block
 block discarded – undo
34 34
  **/
35 35
 function inc_chercher_logo_dist(int $id, string $_id_objet, string $mode = 'on', bool $compat_old_logos = false): array {
36 36
 
37
-	$mode = preg_replace(',\W,', '', $mode);
38
-	if ($mode) {
39
-		// chercher dans la base
40
-		$mode_document = 'logo' . $mode;
41
-		$objet = objet_type($_id_objet);
42
-		$doc = sql_fetsel(
43
-			'D.*',
44
-			'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document',
45
-			'D.mode=' . sql_quote($mode_document) . ' AND L.objet=' . sql_quote($objet) . ' AND id_objet=' . $id
46
-		);
47
-		if ($doc) {
48
-			include_spip('inc/documents');
49
-			$d = get_spip_doc($doc['fichier']);
50
-			return [$d, _DIR_IMG, basename($d), $doc['extension'], @filemtime($d), $doc];
51
-		}
52
-	}
37
+    $mode = preg_replace(',\W,', '', $mode);
38
+    if ($mode) {
39
+        // chercher dans la base
40
+        $mode_document = 'logo' . $mode;
41
+        $objet = objet_type($_id_objet);
42
+        $doc = sql_fetsel(
43
+            'D.*',
44
+            'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document',
45
+            'D.mode=' . sql_quote($mode_document) . ' AND L.objet=' . sql_quote($objet) . ' AND id_objet=' . $id
46
+        );
47
+        if ($doc) {
48
+            include_spip('inc/documents');
49
+            $d = get_spip_doc($doc['fichier']);
50
+            return [$d, _DIR_IMG, basename($d), $doc['extension'], @filemtime($d), $doc];
51
+        }
52
+    }
53 53
 
54
-	# coherence de type pour servir comme filtre (formulaire_login)
55
-	return [];
54
+    # coherence de type pour servir comme filtre (formulaire_login)
55
+    return [];
56 56
 }
Please login to merge, or discard this patch.
prive/squelettes/contenu/job_queue_fonctions.php 1 patch
Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -1,24 +1,24 @@
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if (!defined('_ECRIRE_INC_VERSION')) {
4
-	return;
4
+    return;
5 5
 }
6 6
 
7 7
 function job_queue_block_and_watch() {
8
-	// bloquer la queue sur ce hit
9
-	// pour avoir coherence entre l'affichage de la liste de jobs
10
-	// et les jobs en base en fin de hit
11
-	define('_DEBUG_BLOCK_QUEUE', true);
12
-	include_spip('inc/genie');
13
-	genie_queue_watch_dist();
8
+    // bloquer la queue sur ce hit
9
+    // pour avoir coherence entre l'affichage de la liste de jobs
10
+    // et les jobs en base en fin de hit
11
+    define('_DEBUG_BLOCK_QUEUE', true);
12
+    include_spip('inc/genie');
13
+    genie_queue_watch_dist();
14 14
 }
15 15
 
16 16
 /**
17 17
  * Prévisu d'un appel à une fonction avec ses arguments
18 18
  */
19 19
 function job_queue_display_call(string $function, string $args): string {
20
-	$args = unserialize($args);
21
-	$args = array_map(fn ($arg) => is_scalar($arg) ? $arg : get_debug_type($arg), $args);
20
+    $args = unserialize($args);
21
+    $args = array_map(fn ($arg) => is_scalar($arg) ? $arg : get_debug_type($arg), $args);
22 22
 
23
-	return sprintf('%s(%s)', $function, implode(', ', $args));
23
+    return sprintf('%s(%s)', $function, implode(', ', $args));
24 24
 }
Please login to merge, or discard this patch.
prive/formulaires/login.php 1 patch
Indentation   +247 added lines, -247 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
 include_spip('base/abstract_sql');
@@ -30,11 +30,11 @@  discard block
 block discarded – undo
30 30
  *     true si espace privé, false sinon.
31 31
  **/
32 32
 function is_url_prive($cible) {
33
-	include_spip('inc/filtres_mini');
34
-	$path = parse_url(tester_url_absolue($cible) ? $cible : url_absolue($cible));
35
-	$path = ($path['path'] ?? '');
33
+    include_spip('inc/filtres_mini');
34
+    $path = parse_url(tester_url_absolue($cible) ? $cible : url_absolue($cible));
35
+    $path = ($path['path'] ?? '');
36 36
 
37
-	return str_starts_with(substr($path, -strlen((string) _DIR_RESTREINT_ABS)), (string) _DIR_RESTREINT_ABS);
37
+    return str_starts_with(substr($path, -strlen((string) _DIR_RESTREINT_ABS)), (string) _DIR_RESTREINT_ABS);
38 38
 }
39 39
 
40 40
 /**
@@ -59,110 +59,110 @@  discard block
 block discarded – undo
59 59
  *     Environnement du formulaire
60 60
  **/
61 61
 function formulaires_login_charger_dist($cible = '', $options = [], $deprecated = null) {
62
-	$erreur = _request('var_erreur');
63
-
64
-	if (!is_array($options)) {
65
-		$options = [
66
-			'login' => $options,
67
-			'prive' => $deprecated
68
-		];
69
-	}
70
-
71
-	$login = (empty($options['login']) ? '' : $options['login']);
72
-	$prive = (empty($options['prive']) ? null : $options['prive']);
73
-	// conserver le fonctionnement historique
74
-	if (!isset($options['autofocus'])) {
75
-		$options['autofocus'] = true;
76
-	}
77
-
78
-	if (!$login) {
79
-		$login = (string) _request('var_login');
80
-	}
81
-	// si on est deja identifie
82
-	if (!$login && isset($GLOBALS['visiteur_session']['email'])) {
83
-		$login = $GLOBALS['visiteur_session']['email'];
84
-	}
85
-	if (!$login && isset($GLOBALS['visiteur_session']['login'])) {
86
-		$login = $GLOBALS['visiteur_session']['login'];
87
-	}
88
-	// ou si on a un cookie admin
89
-	if (
90
-		!$login
91
-		&& isset($_COOKIE['spip_admin'])
92
-		&& preg_match(',^@(.*)$,', (string) $_COOKIE['spip_admin'], $regs)
93
-	) {
94
-		$login = $regs[1];
95
-	}
96
-
97
-	$lang = $GLOBALS['spip_lang'];
98
-	include_spip('inc/auth');
99
-	$row = auth_informer_login($login);
100
-
101
-	// retablir la langue de l'URL si forcee (on ignore la langue de l'auteur dans ce cas)
102
-	if (_request('lang') === $lang && $GLOBALS['spip_lang'] !== $lang) {
103
-		changer_langue($lang);
104
-	}
105
-
106
-	// Construire l'environnement du squelette
107
-	// Ne pas proposer de "rester connecte quelques jours"
108
-	// si la duree de l'alea est inferieure a 12 h (valeur par defaut)
109
-
110
-	$valeurs = [
111
-		'var_login' => $login,
112
-		'editable' => !$row,
113
-		'cnx' => $row['cnx'] ?? '0',
114
-		'auth_http' => login_auth_http(),
115
-		'rester_connecte' => ((_RENOUVELLE_ALEA < 12 * 3600) ? '' : ' '),
116
-		'_logo' => $row['logo'] ?? '',
117
-		'_alea_actuel' => $row['alea_actuel'] ?? '',
118
-		'_alea_futur' => $row['alea_futur'] ?? '',
119
-		'_pipeline' => 'affiche_formulaire_login', // faire passer le formulaire dans un pipe dedie pour les methodes auth
120
-		'_autofocus' => ($options['autofocus'] && $options['autofocus'] !== 'non') ? ' ' : '',
121
-	];
122
-
123
-	if ($erreur || !isset($GLOBALS['visiteur_session']['id_auteur']) || !$GLOBALS['visiteur_session']['id_auteur']) {
124
-		$valeurs['editable'] = true;
125
-	}
126
-
127
-	if (is_null($prive) ? is_url_prive($cible) : $prive) {
128
-		include_spip('inc/autoriser');
129
-		$loge = autoriser('ecrire');
130
-	} else {
131
-		$loge = (isset($GLOBALS['visiteur_session']['auth']) && $GLOBALS['visiteur_session']['auth'] != '');
132
-	}
133
-
134
-	// Si on est connecte, appeler traiter()
135
-	// et lancer la redirection si besoin
136
-	if (!$valeurs['editable'] && $loge && _request('formulaire_action') !== 'login') {
137
-		$traiter = charger_fonction('traiter', 'formulaires/login');
138
-		$res = $traiter($cible, $login, $prive);
139
-		$valeurs = array_merge($valeurs, $res);
140
-
141
-		if (isset($res['redirect']) && $res['redirect']) {
142
-			include_spip('inc/headers');
143
-			# preparer un lien pour quand redirige_formulaire ne fonctionne pas
144
-			$m = redirige_formulaire($res['redirect']);
145
-			$valeurs['_deja_loge'] = inserer_attribut(
146
-				'<a>' . _T('login_par_ici') . "</a>$m",
147
-				'href',
148
-				$res['redirect']
149
-			);
150
-		}
151
-	}
152
-	// en cas d'echec de cookie, inc_auth a renvoye vers le script de
153
-	// pose de cookie ; s'il n'est pas la, c'est echec cookie
154
-	// s'il est la, c'est probablement un bookmark sur bonjour=oui,
155
-	// et pas un echec cookie.
156
-	if ($erreur == 'cookie') {
157
-		$valeurs['echec_cookie'] = ' ';
158
-	} elseif ($erreur) {
159
-		// une erreur d'un SSO indique dans la redirection vers ici
160
-		// mais il faut se proteger de toute tentative d'injection malveilante
161
-		include_spip('inc/filtres');
162
-		$valeurs['message_erreur'] = textebrut($erreur);
163
-	}
164
-
165
-	return $valeurs;
62
+    $erreur = _request('var_erreur');
63
+
64
+    if (!is_array($options)) {
65
+        $options = [
66
+            'login' => $options,
67
+            'prive' => $deprecated
68
+        ];
69
+    }
70
+
71
+    $login = (empty($options['login']) ? '' : $options['login']);
72
+    $prive = (empty($options['prive']) ? null : $options['prive']);
73
+    // conserver le fonctionnement historique
74
+    if (!isset($options['autofocus'])) {
75
+        $options['autofocus'] = true;
76
+    }
77
+
78
+    if (!$login) {
79
+        $login = (string) _request('var_login');
80
+    }
81
+    // si on est deja identifie
82
+    if (!$login && isset($GLOBALS['visiteur_session']['email'])) {
83
+        $login = $GLOBALS['visiteur_session']['email'];
84
+    }
85
+    if (!$login && isset($GLOBALS['visiteur_session']['login'])) {
86
+        $login = $GLOBALS['visiteur_session']['login'];
87
+    }
88
+    // ou si on a un cookie admin
89
+    if (
90
+        !$login
91
+        && isset($_COOKIE['spip_admin'])
92
+        && preg_match(',^@(.*)$,', (string) $_COOKIE['spip_admin'], $regs)
93
+    ) {
94
+        $login = $regs[1];
95
+    }
96
+
97
+    $lang = $GLOBALS['spip_lang'];
98
+    include_spip('inc/auth');
99
+    $row = auth_informer_login($login);
100
+
101
+    // retablir la langue de l'URL si forcee (on ignore la langue de l'auteur dans ce cas)
102
+    if (_request('lang') === $lang && $GLOBALS['spip_lang'] !== $lang) {
103
+        changer_langue($lang);
104
+    }
105
+
106
+    // Construire l'environnement du squelette
107
+    // Ne pas proposer de "rester connecte quelques jours"
108
+    // si la duree de l'alea est inferieure a 12 h (valeur par defaut)
109
+
110
+    $valeurs = [
111
+        'var_login' => $login,
112
+        'editable' => !$row,
113
+        'cnx' => $row['cnx'] ?? '0',
114
+        'auth_http' => login_auth_http(),
115
+        'rester_connecte' => ((_RENOUVELLE_ALEA < 12 * 3600) ? '' : ' '),
116
+        '_logo' => $row['logo'] ?? '',
117
+        '_alea_actuel' => $row['alea_actuel'] ?? '',
118
+        '_alea_futur' => $row['alea_futur'] ?? '',
119
+        '_pipeline' => 'affiche_formulaire_login', // faire passer le formulaire dans un pipe dedie pour les methodes auth
120
+        '_autofocus' => ($options['autofocus'] && $options['autofocus'] !== 'non') ? ' ' : '',
121
+    ];
122
+
123
+    if ($erreur || !isset($GLOBALS['visiteur_session']['id_auteur']) || !$GLOBALS['visiteur_session']['id_auteur']) {
124
+        $valeurs['editable'] = true;
125
+    }
126
+
127
+    if (is_null($prive) ? is_url_prive($cible) : $prive) {
128
+        include_spip('inc/autoriser');
129
+        $loge = autoriser('ecrire');
130
+    } else {
131
+        $loge = (isset($GLOBALS['visiteur_session']['auth']) && $GLOBALS['visiteur_session']['auth'] != '');
132
+    }
133
+
134
+    // Si on est connecte, appeler traiter()
135
+    // et lancer la redirection si besoin
136
+    if (!$valeurs['editable'] && $loge && _request('formulaire_action') !== 'login') {
137
+        $traiter = charger_fonction('traiter', 'formulaires/login');
138
+        $res = $traiter($cible, $login, $prive);
139
+        $valeurs = array_merge($valeurs, $res);
140
+
141
+        if (isset($res['redirect']) && $res['redirect']) {
142
+            include_spip('inc/headers');
143
+            # preparer un lien pour quand redirige_formulaire ne fonctionne pas
144
+            $m = redirige_formulaire($res['redirect']);
145
+            $valeurs['_deja_loge'] = inserer_attribut(
146
+                '<a>' . _T('login_par_ici') . "</a>$m",
147
+                'href',
148
+                $res['redirect']
149
+            );
150
+        }
151
+    }
152
+    // en cas d'echec de cookie, inc_auth a renvoye vers le script de
153
+    // pose de cookie ; s'il n'est pas la, c'est echec cookie
154
+    // s'il est la, c'est probablement un bookmark sur bonjour=oui,
155
+    // et pas un echec cookie.
156
+    if ($erreur == 'cookie') {
157
+        $valeurs['echec_cookie'] = ' ';
158
+    } elseif ($erreur) {
159
+        // une erreur d'un SSO indique dans la redirection vers ici
160
+        // mais il faut se proteger de toute tentative d'injection malveilante
161
+        include_spip('inc/filtres');
162
+        $valeurs['message_erreur'] = textebrut($erreur);
163
+    }
164
+
165
+    return $valeurs;
166 166
 }
167 167
 
168 168
 
@@ -177,20 +177,20 @@  discard block
 block discarded – undo
177 177
  *     - chaîne vide sinon.
178 178
  **/
179 179
 function login_auth_http() {
180
-	if (!$GLOBALS['ignore_auth_http'] && _request('var_erreur') == 'cookie') {
181
-		include_spip('inc/session');
182
-		$cookie = lire_cookie_session(true);
183
-		if ($cookie !== 'test_echec_cookie'
184
-		  && (preg_match(',apache,', \PHP_SAPI) || preg_match(',^Apache.* PHP,', (string) $_SERVER['SERVER_SOFTWARE']))
185
-		  // Attention dans le cas 'intranet' la proposition de se loger
186
-		  // par auth_http peut conduire a l'echec.
187
-		  && !(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']))
188
-		) {
189
-			return generer_url_action('cookie', '', false, true);
190
-		}
191
-	}
192
-
193
-	return '';
180
+    if (!$GLOBALS['ignore_auth_http'] && _request('var_erreur') == 'cookie') {
181
+        include_spip('inc/session');
182
+        $cookie = lire_cookie_session(true);
183
+        if ($cookie !== 'test_echec_cookie'
184
+          && (preg_match(',apache,', \PHP_SAPI) || preg_match(',^Apache.* PHP,', (string) $_SERVER['SERVER_SOFTWARE']))
185
+            // Attention dans le cas 'intranet' la proposition de se loger
186
+            // par auth_http peut conduire a l'echec.
187
+          && !(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']))
188
+        ) {
189
+            return generer_url_action('cookie', '', false, true);
190
+        }
191
+    }
192
+
193
+    return '';
194 194
 }
195 195
 
196 196
 
@@ -216,64 +216,64 @@  discard block
 block discarded – undo
216 216
  **/
217 217
 function formulaires_login_verifier_dist($cible = '', $options = [], $deprecated = null) {
218 218
 
219
-	$erreurs = [];
220
-	if (!is_array($options)) {
221
-		$options = [
222
-			'login' => $options,
223
-			'prive' => $deprecated
224
-		];
225
-	}
226
-
227
-	$prive = (empty($options['prive']) ? null : $options['prive']);
228
-
229
-	$session_login = _request('var_login');
230
-	$session_password = _request('password');
231
-	$session_remember = _request('session_remember');
232
-
233
-	if (!$session_login) {
234
-		# pas de login saisi !
235
-		return ['var_login' => _T('info_obligatoire')];
236
-	}
237
-
238
-	// appeler auth_identifier_login qui va :
239
-	// - renvoyer un string si echec (message d'erreur)
240
-	// - un array decrivant l'auteur identifie si possible
241
-	// - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification
242
-	include_spip('inc/auth');
243
-	$auteur = auth_identifier_login($session_login, $session_password);
244
-	// on arrive ici si on ne s'est pas identifie avec un SSO
245
-	if (!is_array($auteur)) {
246
-		$erreurs = [];
247
-		if (is_string($auteur) && strlen($auteur)) {
248
-			$erreurs['var_login'] = $auteur;
249
-		}
250
-		include_spip('inc/cookie');
251
-		spip_setcookie('spip_admin', '', time() - 3600, httponly: true);
252
-		if (strlen((string) $session_password)) {
253
-			$erreurs['password'] = _T('login_erreur_pass');
254
-		} else {
255
-			// sinon c'est un login en deux passe old style (ou js en panne)
256
-			// pas de message d'erreur
257
-			$erreurs['password'] = ' ';
258
-			$erreurs['message_erreur'] = '';
259
-		}
260
-
261
-		return $erreurs;
262
-	}
263
-	// on a ete authentifie, construire la session
264
-	// en gerant la duree demandee pour son cookie
265
-	if ($session_remember !== null) {
266
-		$auteur['cookie'] = $session_remember;
267
-	}
268
-	// si la connexion est refusee on renvoi un message erreur de mot de passe
269
-	// car en donnant plus de detail on renseignerait un assaillant sur l'existence d'un compte
270
-	if (auth_loger($auteur) === false) {
271
-		$erreurs['message_erreur'] = _T('login_erreur_pass');
272
-		return $erreurs;
273
-	}
274
-
275
-	return (is_null($prive) ? is_url_prive($cible) : $prive)
276
-		? login_autoriser() : [];
219
+    $erreurs = [];
220
+    if (!is_array($options)) {
221
+        $options = [
222
+            'login' => $options,
223
+            'prive' => $deprecated
224
+        ];
225
+    }
226
+
227
+    $prive = (empty($options['prive']) ? null : $options['prive']);
228
+
229
+    $session_login = _request('var_login');
230
+    $session_password = _request('password');
231
+    $session_remember = _request('session_remember');
232
+
233
+    if (!$session_login) {
234
+        # pas de login saisi !
235
+        return ['var_login' => _T('info_obligatoire')];
236
+    }
237
+
238
+    // appeler auth_identifier_login qui va :
239
+    // - renvoyer un string si echec (message d'erreur)
240
+    // - un array decrivant l'auteur identifie si possible
241
+    // - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification
242
+    include_spip('inc/auth');
243
+    $auteur = auth_identifier_login($session_login, $session_password);
244
+    // on arrive ici si on ne s'est pas identifie avec un SSO
245
+    if (!is_array($auteur)) {
246
+        $erreurs = [];
247
+        if (is_string($auteur) && strlen($auteur)) {
248
+            $erreurs['var_login'] = $auteur;
249
+        }
250
+        include_spip('inc/cookie');
251
+        spip_setcookie('spip_admin', '', time() - 3600, httponly: true);
252
+        if (strlen((string) $session_password)) {
253
+            $erreurs['password'] = _T('login_erreur_pass');
254
+        } else {
255
+            // sinon c'est un login en deux passe old style (ou js en panne)
256
+            // pas de message d'erreur
257
+            $erreurs['password'] = ' ';
258
+            $erreurs['message_erreur'] = '';
259
+        }
260
+
261
+        return $erreurs;
262
+    }
263
+    // on a ete authentifie, construire la session
264
+    // en gerant la duree demandee pour son cookie
265
+    if ($session_remember !== null) {
266
+        $auteur['cookie'] = $session_remember;
267
+    }
268
+    // si la connexion est refusee on renvoi un message erreur de mot de passe
269
+    // car en donnant plus de detail on renseignerait un assaillant sur l'existence d'un compte
270
+    if (auth_loger($auteur) === false) {
271
+        $erreurs['message_erreur'] = _T('login_erreur_pass');
272
+        return $erreurs;
273
+    }
274
+
275
+    return (is_null($prive) ? is_url_prive($cible) : $prive)
276
+        ? login_autoriser() : [];
277 277
 }
278 278
 
279 279
 /**
@@ -288,21 +288,21 @@  discard block
 block discarded – undo
288 288
  *     - tableau vide sinon.
289 289
  **/
290 290
 function login_autoriser() {
291
-	include_spip('inc/autoriser');
292
-	if (!autoriser('ecrire')) {
293
-		$h = generer_url_action('logout', 'logout=prive&url=' . urlencode((string) self()));
294
-
295
-		return [
296
-			'message_erreur' => '<h1>'
297
-				. _T('avis_erreur_visiteur')
298
-				. '</h1><p>'
299
-				. _T('texte_erreur_visiteur')
300
-				. "</p><p class='retour'>[<a href='$h'>"
301
-				. _T('icone_deconnecter') . '</a>]</p>'
302
-		];
303
-	}
304
-
305
-	return [];
291
+    include_spip('inc/autoriser');
292
+    if (!autoriser('ecrire')) {
293
+        $h = generer_url_action('logout', 'logout=prive&url=' . urlencode((string) self()));
294
+
295
+        return [
296
+            'message_erreur' => '<h1>'
297
+                . _T('avis_erreur_visiteur')
298
+                . '</h1><p>'
299
+                . _T('texte_erreur_visiteur')
300
+                . "</p><p class='retour'>[<a href='$h'>"
301
+                . _T('icone_deconnecter') . '</a>]</p>'
302
+        ];
303
+    }
304
+
305
+    return [];
306 306
 }
307 307
 
308 308
 /**
@@ -323,55 +323,55 @@  discard block
 block discarded – undo
323 323
  *     Retours du traitement
324 324
  **/
325 325
 function formulaires_login_traiter_dist($cible = '', $options = [], $deprecated = null) {
326
-	$res = [];
327
-
328
-	if (!is_array($options)) {
329
-		$options = [
330
-			'login' => $options,
331
-			'prive' => $deprecated
332
-		];
333
-	}
334
-
335
-	$login = (empty($options['login']) ? '' : $options['login']);
336
-	$prive = (empty($options['prive']) ? null : $options['prive']);
337
-
338
-	// Si on se connecte dans l'espace prive,
339
-	// ajouter "bonjour" (repere a peu pres les cookies desactives)
340
-	if (is_null($prive) ? is_url_prive($cible) : $prive) {
341
-		$cible = parametre_url($cible, 'bonjour', 'oui', '&');
342
-	}
343
-	if ($cible == '@page_auteur') {
344
-		$cible = generer_objet_url($GLOBALS['auteur_session']['id_auteur'], 'auteur');
345
-	}
346
-
347
-	if ($cible) {
348
-		$cible = parametre_url($cible, 'var_login', '', '&');
349
-
350
-		// transformer la cible absolue en cible relative
351
-		// pour pas echouer quand la meta adresse_site est foireuse
352
-		if (strncmp((string) $cible, (string) ($u = url_de_base()), strlen((string) $u)) == 0) {
353
-			$cible = './' . substr((string) $cible, strlen((string) $u));
354
-		} elseif (tester_url_absolue($cible) && !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) {
355
-			// si c'est une url absolue, refuser la redirection
356
-			// sauf si cette securite est levee volontairement par le webmestre
357
-			$cible = '';
358
-		}
359
-	}
360
-
361
-	// Si on est connecte, envoyer vers la destination
362
-	if ($cible && $cible != self('&') && $cible != self()) {
363
-		$res['redirect'] = $cible;
364
-		$res['message_ok'] = inserer_attribut(
365
-			'<a>' . _T('login_par_ici') . '</a>',
366
-			'href',
367
-			$cible
368
-		);
369
-	}
370
-
371
-	// avant de rediriger il faut mettre a jour les sessions sur le disque si on a charge une session
372
-	if (function_exists('terminer_actualiser_sessions')) {
373
-		terminer_actualiser_sessions();
374
-	}
375
-
376
-	return $res;
326
+    $res = [];
327
+
328
+    if (!is_array($options)) {
329
+        $options = [
330
+            'login' => $options,
331
+            'prive' => $deprecated
332
+        ];
333
+    }
334
+
335
+    $login = (empty($options['login']) ? '' : $options['login']);
336
+    $prive = (empty($options['prive']) ? null : $options['prive']);
337
+
338
+    // Si on se connecte dans l'espace prive,
339
+    // ajouter "bonjour" (repere a peu pres les cookies desactives)
340
+    if (is_null($prive) ? is_url_prive($cible) : $prive) {
341
+        $cible = parametre_url($cible, 'bonjour', 'oui', '&');
342
+    }
343
+    if ($cible == '@page_auteur') {
344
+        $cible = generer_objet_url($GLOBALS['auteur_session']['id_auteur'], 'auteur');
345
+    }
346
+
347
+    if ($cible) {
348
+        $cible = parametre_url($cible, 'var_login', '', '&');
349
+
350
+        // transformer la cible absolue en cible relative
351
+        // pour pas echouer quand la meta adresse_site est foireuse
352
+        if (strncmp((string) $cible, (string) ($u = url_de_base()), strlen((string) $u)) == 0) {
353
+            $cible = './' . substr((string) $cible, strlen((string) $u));
354
+        } elseif (tester_url_absolue($cible) && !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) {
355
+            // si c'est une url absolue, refuser la redirection
356
+            // sauf si cette securite est levee volontairement par le webmestre
357
+            $cible = '';
358
+        }
359
+    }
360
+
361
+    // Si on est connecte, envoyer vers la destination
362
+    if ($cible && $cible != self('&') && $cible != self()) {
363
+        $res['redirect'] = $cible;
364
+        $res['message_ok'] = inserer_attribut(
365
+            '<a>' . _T('login_par_ici') . '</a>',
366
+            'href',
367
+            $cible
368
+        );
369
+    }
370
+
371
+    // avant de rediriger il faut mettre a jour les sessions sur le disque si on a charge une session
372
+    if (function_exists('terminer_actualiser_sessions')) {
373
+        terminer_actualiser_sessions();
374
+    }
375
+
376
+    return $res;
377 377
 }
Please login to merge, or discard this patch.
prive/formulaires/editer_liens.php 1 patch
Indentation   +433 added lines, -433 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
  * @package SPIP\Core\Formulaires
16 16
  **/
17 17
 if (!defined('_ECRIRE_INC_VERSION')) {
18
-	return;
18
+    return;
19 19
 }
20 20
 
21 21
 
@@ -35,25 +35,25 @@  discard block
 block discarded – undo
35 35
  *   ($table_source,$objet,$id_objet,$objet_lien)
36 36
  */
37 37
 function determine_source_lien_objet($a, $b, $c) {
38
-	$table_source = $objet_lien = $objet = $id_objet = null;
39
-	// auteurs, article, 23 :
40
-	// associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens
41
-	if (is_numeric($c) && !is_numeric($b)) {
42
-		$table_source = table_objet($a);
43
-		$objet_lien = objet_type($a);
44
-		$objet = objet_type($b);
45
-		$id_objet = $c;
46
-	}
47
-	// article, 23, auteurs
48
-	// associer des auteurs à l'article 23, sur la table pivot spip_articles_liens
49
-	if (is_numeric($b) && !is_numeric($c)) {
50
-		$table_source = table_objet($c);
51
-		$objet_lien = objet_type($a);
52
-		$objet = objet_type($a);
53
-		$id_objet = $b;
54
-	}
55
-
56
-	return [$table_source, $objet, $id_objet, $objet_lien];
38
+    $table_source = $objet_lien = $objet = $id_objet = null;
39
+    // auteurs, article, 23 :
40
+    // associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens
41
+    if (is_numeric($c) && !is_numeric($b)) {
42
+        $table_source = table_objet($a);
43
+        $objet_lien = objet_type($a);
44
+        $objet = objet_type($b);
45
+        $id_objet = $c;
46
+    }
47
+    // article, 23, auteurs
48
+    // associer des auteurs à l'article 23, sur la table pivot spip_articles_liens
49
+    if (is_numeric($b) && !is_numeric($c)) {
50
+        $table_source = table_objet($c);
51
+        $objet_lien = objet_type($a);
52
+        $objet = objet_type($a);
53
+        $id_objet = $b;
54
+    }
55
+
56
+    return [$table_source, $objet, $id_objet, $objet_lien];
57 57
 }
58 58
 
59 59
 /**
@@ -79,87 +79,87 @@  discard block
 block discarded – undo
79 79
  */
80 80
 function formulaires_editer_liens_charger_dist($a, $b, $c, $options = []) {
81 81
 
82
-	// compat avec ancienne signature ou le 4eme argument est $editable
83
-	if (!is_array($options)) {
84
-		$options = ['editable' => $options];
85
-	} elseif (!isset($options['editable'])) {
86
-		$options['editable'] = true;
87
-	}
88
-
89
-	$editable = $options['editable'];
90
-
91
-	[$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
92
-	if (!$table_source || !$objet || !$objet_lien || !$id_objet) {
93
-		return false;
94
-	}
95
-
96
-	$objet_source = objet_type($table_source);
97
-	$table_sql_source = table_objet_sql($objet_source);
98
-
99
-	// verifier existence de la table xxx_liens
100
-	include_spip('action/editer_liens');
101
-	if (!objet_associable($objet_lien)) {
102
-		return false;
103
-	}
104
-
105
-	// L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
106
-	include_spip('inc/autoriser');
107
-	$editable = ($editable
108
-		&& autoriser('associer' . $table_source, $objet, $id_objet)
109
-		&& autoriser('modifier', $objet, $id_objet));
110
-
111
-	if (
112
-		!$editable && !count(objet_trouver_liens(
113
-			[$objet_lien => '*'],
114
-			[($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet]
115
-		))
116
-	) {
117
-		return false;
118
-	}
119
-
120
-	// squelettes de vue et de d'association
121
-	// ils sont différents si des rôles sont définis.
122
-	$skel_vue = $table_source . '_lies';
123
-	$skel_ajout = $table_source . '_associer';
124
-
125
-	// description des roles
126
-	include_spip('inc/roles');
127
-	if ($roles = roles_presents($objet_source, $objet)) {
128
-		// on demande de nouveaux squelettes en conséquence
129
-		$skel_vue = $table_source . '_roles_lies';
130
-		$skel_ajout = $table_source . '_roles_associer';
131
-	}
132
-
133
-	$oups = '';
134
-	if ($editable) {
135
-		$oups = lien_gerer__oups('editer_liens', 'hash');
136
-	}
137
-	$valeurs = [
138
-		'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form
139
-		'_vue_liee' => $skel_vue,
140
-		'_vue_ajout' => $skel_ajout,
141
-		'_objet_lien' => $objet_lien,
142
-		'id_lien_ajoute' => _request('id_lien_ajoute'),
143
-		'objet' => $objet,
144
-		'id_objet' => $id_objet,
145
-		'objet_source' => $objet_source,
146
-		'table_source' => $table_source,
147
-		'recherche' => '',
148
-		'visible' => 0,
149
-		'ajouter_lien' => '',
150
-		'supprimer_lien' => '',
151
-		'qualifier_lien' => '',
152
-		'ordonner_lien' => '',
153
-		'desordonner_liens' => '',
154
-		'_roles' => $roles, # description des roles
155
-		'_oups' => entites_html($oups),
156
-		'editable' => $editable,
157
-	];
158
-
159
-	// les options non definies dans $valeurs sont passees telles quelles au formulaire html
160
-	$valeurs = array_merge($options, $valeurs);
161
-
162
-	return $valeurs;
82
+    // compat avec ancienne signature ou le 4eme argument est $editable
83
+    if (!is_array($options)) {
84
+        $options = ['editable' => $options];
85
+    } elseif (!isset($options['editable'])) {
86
+        $options['editable'] = true;
87
+    }
88
+
89
+    $editable = $options['editable'];
90
+
91
+    [$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
92
+    if (!$table_source || !$objet || !$objet_lien || !$id_objet) {
93
+        return false;
94
+    }
95
+
96
+    $objet_source = objet_type($table_source);
97
+    $table_sql_source = table_objet_sql($objet_source);
98
+
99
+    // verifier existence de la table xxx_liens
100
+    include_spip('action/editer_liens');
101
+    if (!objet_associable($objet_lien)) {
102
+        return false;
103
+    }
104
+
105
+    // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
106
+    include_spip('inc/autoriser');
107
+    $editable = ($editable
108
+        && autoriser('associer' . $table_source, $objet, $id_objet)
109
+        && autoriser('modifier', $objet, $id_objet));
110
+
111
+    if (
112
+        !$editable && !count(objet_trouver_liens(
113
+            [$objet_lien => '*'],
114
+            [($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet]
115
+        ))
116
+    ) {
117
+        return false;
118
+    }
119
+
120
+    // squelettes de vue et de d'association
121
+    // ils sont différents si des rôles sont définis.
122
+    $skel_vue = $table_source . '_lies';
123
+    $skel_ajout = $table_source . '_associer';
124
+
125
+    // description des roles
126
+    include_spip('inc/roles');
127
+    if ($roles = roles_presents($objet_source, $objet)) {
128
+        // on demande de nouveaux squelettes en conséquence
129
+        $skel_vue = $table_source . '_roles_lies';
130
+        $skel_ajout = $table_source . '_roles_associer';
131
+    }
132
+
133
+    $oups = '';
134
+    if ($editable) {
135
+        $oups = lien_gerer__oups('editer_liens', 'hash');
136
+    }
137
+    $valeurs = [
138
+        'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form
139
+        '_vue_liee' => $skel_vue,
140
+        '_vue_ajout' => $skel_ajout,
141
+        '_objet_lien' => $objet_lien,
142
+        'id_lien_ajoute' => _request('id_lien_ajoute'),
143
+        'objet' => $objet,
144
+        'id_objet' => $id_objet,
145
+        'objet_source' => $objet_source,
146
+        'table_source' => $table_source,
147
+        'recherche' => '',
148
+        'visible' => 0,
149
+        'ajouter_lien' => '',
150
+        'supprimer_lien' => '',
151
+        'qualifier_lien' => '',
152
+        'ordonner_lien' => '',
153
+        'desordonner_liens' => '',
154
+        '_roles' => $roles, # description des roles
155
+        '_oups' => entites_html($oups),
156
+        'editable' => $editable,
157
+    ];
158
+
159
+    // les options non definies dans $valeurs sont passees telles quelles au formulaire html
160
+    $valeurs = array_merge($options, $valeurs);
161
+
162
+    return $valeurs;
163 163
 }
164 164
 
165 165
 /**
@@ -203,170 +203,170 @@  discard block
 block discarded – undo
203 203
  * @return array
204 204
  */
205 205
 function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = []) {
206
-	// compat avec ancienne signature ou le 4eme argument est $editable
207
-	if (!is_array($options)) {
208
-		$options = ['editable' => $options];
209
-	} elseif (!isset($options['editable'])) {
210
-		$options['editable'] = true;
211
-	}
212
-
213
-	$editable = $options['editable'];
214
-
215
-	$res = ['editable' => (bool) $editable];
216
-	[$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
217
-	if (!$table_source || !$objet || !$objet_lien) {
218
-		return $res;
219
-	}
220
-
221
-
222
-	if (_request('tout_voir')) {
223
-		set_request('recherche', '');
224
-	}
225
-
226
-	include_spip('inc/autoriser');
227
-	if (autoriser('modifier', $objet, $id_objet)) {
228
-		// recuperer le oups du coup d'avant pour le propager à charger() si on ne fait rien par exemple
229
-		lien_gerer__oups('editer_liens', 'request');
230
-
231
-		// annuler les suppressions du coup d'avant ?
232
-		if (
233
-			_request('annuler_oups')
234
-			&& ($oups = lien_gerer__oups('editer_liens', 'get'))
235
-		) {
236
-			if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) {
237
-				$oups_objets($oups);
238
-			} else {
239
-				$objet_source = objet_type($table_source);
240
-				include_spip('action/editer_liens');
241
-				foreach ($oups as $oup) {
242
-					if ($objet_lien == $objet_source) {
243
-						objet_associer([$objet_source => $oup[$objet_source]], [$objet => $oup[$objet]], $oup);
244
-					} else {
245
-						objet_associer([$objet => $oup[$objet]], [$objet_source => $oup[$objet_source]], $oup);
246
-					}
247
-				}
248
-			}
249
-			# oups ne persiste que pour la derniere action, si suppression
250
-			lien_gerer__oups('editer_liens', 'reset');
251
-		}
252
-
253
-		$supprimer = _request('supprimer_lien');
254
-		$ajouter = _request('ajouter_lien');
255
-		$ordonner = _request('ordonner_lien');
256
-
257
-		if (_request('desordonner_liens')) {
258
-			include_spip('action/editer_liens');
259
-			objet_qualifier_liens([$objet_lien => '*'], [$objet => $id_objet], ['rang_lien' => 0]);
260
-		}
261
-
262
-		// il est possible de preciser dans une seule variable un remplacement :
263
-		// remplacer_lien[old][new]
264
-		if ($remplacer = _request('remplacer_lien')) {
265
-			foreach ($remplacer as $k => $v) {
266
-				if ($old = lien_verifier_action($k, '')) {
267
-					foreach (is_array($v) ? $v : [$v] as $kn => $vn) {
268
-						if ($new = lien_verifier_action($kn, $vn)) {
269
-							$supprimer[$old] = 'x';
270
-							$ajouter[$new] = '+';
271
-						}
272
-					}
273
-				}
274
-			}
275
-		}
276
-
277
-		if ($supprimer) {
278
-			if (
279
-				$supprimer_objets = charger_fonction(
280
-					"editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}",
281
-					'action',
282
-					true
283
-				)
284
-			) {
285
-				$oups = $supprimer_objets($supprimer);
286
-			} else {
287
-				include_spip('action/editer_liens');
288
-				$oups = [];
289
-
290
-				foreach ($supprimer as $k => $v) {
291
-					if ($lien = lien_verifier_action($k, $v)) {
292
-						$lien = explode('-', $lien);
293
-						[$objet_source, $ids, $objet_lie, $idl, $role] = array_pad($lien, 5, null);
294
-						// appliquer une condition sur le rôle si défini ('*' pour tous les roles)
295
-						$cond = (is_null($role) ? [] : ['role' => $role]);
296
-						if ($objet_lien == $objet_source) {
297
-							$oups = array_merge(
298
-								$oups,
299
-								objet_trouver_liens([$objet_source => $ids], [$objet_lie => $idl], $cond)
300
-							);
301
-							objet_dissocier([$objet_source => $ids], [$objet_lie => $idl], $cond);
302
-						} else {
303
-							$oups = array_merge(
304
-								$oups,
305
-								objet_trouver_liens([$objet_lie => $idl], [$objet_source => $ids], $cond)
306
-							);
307
-							objet_dissocier([$objet_lie => $idl], [$objet_source => $ids], $cond);
308
-						}
309
-					}
310
-				}
311
-			}
312
-			if (!empty($oups)) {
313
-				lien_gerer__oups('editer_liens', 'set', $oups);
314
-			} else {
315
-				lien_gerer__oups('editer_liens', 'reset');
316
-			}
317
-		}
318
-
319
-		if ($ajouter) {
320
-			if (
321
-				$ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true)
322
-			) {
323
-				$ajout_ok = $ajouter_objets($ajouter);
324
-			} else {
325
-				$ajout_ok = false;
326
-				include_spip('action/editer_liens');
327
-				foreach ($ajouter as $k => $v) {
328
-					if ($lien = lien_verifier_action($k, $v)) {
329
-						$ajout_ok = true;
330
-						[$objet1, $ids, $objet2, $idl] = explode('-', $lien);
331
-						$qualifs = lien_retrouver_qualif($objet_lien, $lien);
332
-						if ($objet_lien == $objet1) {
333
-							lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs);
334
-						} else {
335
-							lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs);
336
-						}
337
-						set_request('id_lien_ajoute', $ids);
338
-					}
339
-				}
340
-			}
341
-			# oups ne persiste que pour la derniere action, si suppression
342
-			# une suppression suivie d'un ajout dans le meme hit est un remplacement
343
-			# non annulable !
344
-			if ($ajout_ok) {
345
-				lien_gerer__oups('editer_liens', 'reset');
346
-			}
347
-		}
348
-
349
-		if ($ordonner) {
350
-			include_spip('action/editer_liens');
351
-			foreach ($ordonner as $k => $rang_lien) {
352
-				if ($lien = lien_verifier_action($k, '')) {
353
-					[$objet1, $ids, $objet2, $idl] = explode('-', $lien);
354
-					$qualif = ['rang_lien' => $rang_lien];
355
-
356
-					if ($objet_lien == $objet1) {
357
-						objet_qualifier_liens([$objet1 => $ids], [$objet2 => $idl], $qualif);
358
-					} else {
359
-						objet_qualifier_liens([$objet2 => $idl], [$objet1 => $ids], $qualif);
360
-					}
361
-					set_request('id_lien_ajoute', $ids);
362
-					lien_gerer__oups('editer_liens', 'reset');
363
-				}
364
-			}
365
-		}
366
-	}
367
-
368
-
369
-	return $res;
206
+    // compat avec ancienne signature ou le 4eme argument est $editable
207
+    if (!is_array($options)) {
208
+        $options = ['editable' => $options];
209
+    } elseif (!isset($options['editable'])) {
210
+        $options['editable'] = true;
211
+    }
212
+
213
+    $editable = $options['editable'];
214
+
215
+    $res = ['editable' => (bool) $editable];
216
+    [$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
217
+    if (!$table_source || !$objet || !$objet_lien) {
218
+        return $res;
219
+    }
220
+
221
+
222
+    if (_request('tout_voir')) {
223
+        set_request('recherche', '');
224
+    }
225
+
226
+    include_spip('inc/autoriser');
227
+    if (autoriser('modifier', $objet, $id_objet)) {
228
+        // recuperer le oups du coup d'avant pour le propager à charger() si on ne fait rien par exemple
229
+        lien_gerer__oups('editer_liens', 'request');
230
+
231
+        // annuler les suppressions du coup d'avant ?
232
+        if (
233
+            _request('annuler_oups')
234
+            && ($oups = lien_gerer__oups('editer_liens', 'get'))
235
+        ) {
236
+            if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) {
237
+                $oups_objets($oups);
238
+            } else {
239
+                $objet_source = objet_type($table_source);
240
+                include_spip('action/editer_liens');
241
+                foreach ($oups as $oup) {
242
+                    if ($objet_lien == $objet_source) {
243
+                        objet_associer([$objet_source => $oup[$objet_source]], [$objet => $oup[$objet]], $oup);
244
+                    } else {
245
+                        objet_associer([$objet => $oup[$objet]], [$objet_source => $oup[$objet_source]], $oup);
246
+                    }
247
+                }
248
+            }
249
+            # oups ne persiste que pour la derniere action, si suppression
250
+            lien_gerer__oups('editer_liens', 'reset');
251
+        }
252
+
253
+        $supprimer = _request('supprimer_lien');
254
+        $ajouter = _request('ajouter_lien');
255
+        $ordonner = _request('ordonner_lien');
256
+
257
+        if (_request('desordonner_liens')) {
258
+            include_spip('action/editer_liens');
259
+            objet_qualifier_liens([$objet_lien => '*'], [$objet => $id_objet], ['rang_lien' => 0]);
260
+        }
261
+
262
+        // il est possible de preciser dans une seule variable un remplacement :
263
+        // remplacer_lien[old][new]
264
+        if ($remplacer = _request('remplacer_lien')) {
265
+            foreach ($remplacer as $k => $v) {
266
+                if ($old = lien_verifier_action($k, '')) {
267
+                    foreach (is_array($v) ? $v : [$v] as $kn => $vn) {
268
+                        if ($new = lien_verifier_action($kn, $vn)) {
269
+                            $supprimer[$old] = 'x';
270
+                            $ajouter[$new] = '+';
271
+                        }
272
+                    }
273
+                }
274
+            }
275
+        }
276
+
277
+        if ($supprimer) {
278
+            if (
279
+                $supprimer_objets = charger_fonction(
280
+                    "editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}",
281
+                    'action',
282
+                    true
283
+                )
284
+            ) {
285
+                $oups = $supprimer_objets($supprimer);
286
+            } else {
287
+                include_spip('action/editer_liens');
288
+                $oups = [];
289
+
290
+                foreach ($supprimer as $k => $v) {
291
+                    if ($lien = lien_verifier_action($k, $v)) {
292
+                        $lien = explode('-', $lien);
293
+                        [$objet_source, $ids, $objet_lie, $idl, $role] = array_pad($lien, 5, null);
294
+                        // appliquer une condition sur le rôle si défini ('*' pour tous les roles)
295
+                        $cond = (is_null($role) ? [] : ['role' => $role]);
296
+                        if ($objet_lien == $objet_source) {
297
+                            $oups = array_merge(
298
+                                $oups,
299
+                                objet_trouver_liens([$objet_source => $ids], [$objet_lie => $idl], $cond)
300
+                            );
301
+                            objet_dissocier([$objet_source => $ids], [$objet_lie => $idl], $cond);
302
+                        } else {
303
+                            $oups = array_merge(
304
+                                $oups,
305
+                                objet_trouver_liens([$objet_lie => $idl], [$objet_source => $ids], $cond)
306
+                            );
307
+                            objet_dissocier([$objet_lie => $idl], [$objet_source => $ids], $cond);
308
+                        }
309
+                    }
310
+                }
311
+            }
312
+            if (!empty($oups)) {
313
+                lien_gerer__oups('editer_liens', 'set', $oups);
314
+            } else {
315
+                lien_gerer__oups('editer_liens', 'reset');
316
+            }
317
+        }
318
+
319
+        if ($ajouter) {
320
+            if (
321
+                $ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true)
322
+            ) {
323
+                $ajout_ok = $ajouter_objets($ajouter);
324
+            } else {
325
+                $ajout_ok = false;
326
+                include_spip('action/editer_liens');
327
+                foreach ($ajouter as $k => $v) {
328
+                    if ($lien = lien_verifier_action($k, $v)) {
329
+                        $ajout_ok = true;
330
+                        [$objet1, $ids, $objet2, $idl] = explode('-', $lien);
331
+                        $qualifs = lien_retrouver_qualif($objet_lien, $lien);
332
+                        if ($objet_lien == $objet1) {
333
+                            lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs);
334
+                        } else {
335
+                            lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs);
336
+                        }
337
+                        set_request('id_lien_ajoute', $ids);
338
+                    }
339
+                }
340
+            }
341
+            # oups ne persiste que pour la derniere action, si suppression
342
+            # une suppression suivie d'un ajout dans le meme hit est un remplacement
343
+            # non annulable !
344
+            if ($ajout_ok) {
345
+                lien_gerer__oups('editer_liens', 'reset');
346
+            }
347
+        }
348
+
349
+        if ($ordonner) {
350
+            include_spip('action/editer_liens');
351
+            foreach ($ordonner as $k => $rang_lien) {
352
+                if ($lien = lien_verifier_action($k, '')) {
353
+                    [$objet1, $ids, $objet2, $idl] = explode('-', $lien);
354
+                    $qualif = ['rang_lien' => $rang_lien];
355
+
356
+                    if ($objet_lien == $objet1) {
357
+                        objet_qualifier_liens([$objet1 => $ids], [$objet2 => $idl], $qualif);
358
+                    } else {
359
+                        objet_qualifier_liens([$objet2 => $idl], [$objet1 => $ids], $qualif);
360
+                    }
361
+                    set_request('id_lien_ajoute', $ids);
362
+                    lien_gerer__oups('editer_liens', 'reset');
363
+                }
364
+            }
365
+        }
366
+    }
367
+
368
+
369
+    return $res;
370 370
 }
371 371
 
372 372
 
@@ -389,24 +389,24 @@  discard block
 block discarded – undo
389 389
  * @return string Action demandée si trouvée, sinon ''
390 390
  */
391 391
 function lien_verifier_action($k, $v) {
392
-	$action = '';
393
-	if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) {
394
-		$action = $k;
395
-	}
396
-	if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) {
397
-		if (is_numeric($k)) {
398
-			$action = $v;
399
-		}
400
-		if (_request($k)) {
401
-			$action = $v;
402
-		}
403
-	}
404
-	// ajout un role null fictif (plus pratique) si pas défini
405
-	if ($action && count(explode('-', $action)) == 4) {
406
-		$action .= '-';
407
-	}
408
-
409
-	return $action;
392
+    $action = '';
393
+    if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) {
394
+        $action = $k;
395
+    }
396
+    if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) {
397
+        if (is_numeric($k)) {
398
+            $action = $v;
399
+        }
400
+        if (_request($k)) {
401
+            $action = $v;
402
+        }
403
+    }
404
+    // ajout un role null fictif (plus pratique) si pas défini
405
+    if ($action && count(explode('-', $action)) == 4) {
406
+        $action .= '-';
407
+    }
408
+
409
+    return $action;
410 410
 }
411 411
 
412 412
 
@@ -422,62 +422,62 @@  discard block
 block discarded – undo
422 422
  *   Liste des qualifs pour chaque lien. Tableau vide s'il n'y en a pas.
423 423
  **/
424 424
 function lien_retrouver_qualif($objet_lien, $lien) {
425
-	// un role est défini dans la liaison
426
-	$defs = explode('-', $lien);
427
-	[$objet1, , $objet2, , $role] = array_pad($defs, 5, null);
428
-	$colonne_role = $objet_lien == $objet1 ? roles_colonne($objet1, $objet2) : roles_colonne($objet2, $objet1);
429
-
430
-	// cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut)
431
-	if ($role) {
432
-		return [
433
-			// un seul lien avec ce role
434
-			[$colonne_role => $role]
435
-		];
436
-	}
437
-
438
-	// retrouver les rôles postés pour cette liaison, s'il y en a.
439
-	$qualifier_lien = _request('qualifier_lien');
440
-	if (!$qualifier_lien || !is_array($qualifier_lien)) {
441
-		return [];
442
-	}
443
-
444
-	// pas avec l'action complete (incluant le role)
445
-	$qualif = [];
446
-	if (
447
-		(!isset($qualifier_lien[$lien]) || !$qualif = $qualifier_lien[$lien])
448
-		&& count($defs) == 5
449
-	) {
450
-		// on tente avec l'action sans le role
451
-		array_pop($defs);
452
-		$lien = implode('-', $defs);
453
-		if (!isset($qualifier_lien[$lien]) || !$qualif = $qualifier_lien[$lien]) {
454
-			$qualif = [];
455
-		}
456
-	}
457
-
458
-	// $qualif de la forme array(role=>array(...),valeur=>array(...),....)
459
-	// on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...)
460
-	$qualifs = [];
461
-	while (is_countable($qualif) ? count($qualif) : 0) {
462
-		$q = [];
463
-		foreach ($qualif as $att => $values) {
464
-			if (is_array($values)) {
465
-				$q[$att] = array_shift($qualif[$att]);
466
-				if (!(is_countable($qualif[$att]) ? count($qualif[$att]) : 0)) {
467
-					unset($qualif[$att]);
468
-				}
469
-			} else {
470
-				$q[$att] = $values;
471
-				unset($qualif[$att]);
472
-			}
473
-		}
474
-		// pas de rôle vide
475
-		if (!$colonne_role || !isset($q[$colonne_role]) || $q[$colonne_role]) {
476
-			$qualifs[] = $q;
477
-		}
478
-	}
479
-
480
-	return $qualifs;
425
+    // un role est défini dans la liaison
426
+    $defs = explode('-', $lien);
427
+    [$objet1, , $objet2, , $role] = array_pad($defs, 5, null);
428
+    $colonne_role = $objet_lien == $objet1 ? roles_colonne($objet1, $objet2) : roles_colonne($objet2, $objet1);
429
+
430
+    // cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut)
431
+    if ($role) {
432
+        return [
433
+            // un seul lien avec ce role
434
+            [$colonne_role => $role]
435
+        ];
436
+    }
437
+
438
+    // retrouver les rôles postés pour cette liaison, s'il y en a.
439
+    $qualifier_lien = _request('qualifier_lien');
440
+    if (!$qualifier_lien || !is_array($qualifier_lien)) {
441
+        return [];
442
+    }
443
+
444
+    // pas avec l'action complete (incluant le role)
445
+    $qualif = [];
446
+    if (
447
+        (!isset($qualifier_lien[$lien]) || !$qualif = $qualifier_lien[$lien])
448
+        && count($defs) == 5
449
+    ) {
450
+        // on tente avec l'action sans le role
451
+        array_pop($defs);
452
+        $lien = implode('-', $defs);
453
+        if (!isset($qualifier_lien[$lien]) || !$qualif = $qualifier_lien[$lien]) {
454
+            $qualif = [];
455
+        }
456
+    }
457
+
458
+    // $qualif de la forme array(role=>array(...),valeur=>array(...),....)
459
+    // on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...)
460
+    $qualifs = [];
461
+    while (is_countable($qualif) ? count($qualif) : 0) {
462
+        $q = [];
463
+        foreach ($qualif as $att => $values) {
464
+            if (is_array($values)) {
465
+                $q[$att] = array_shift($qualif[$att]);
466
+                if (!(is_countable($qualif[$att]) ? count($qualif[$att]) : 0)) {
467
+                    unset($qualif[$att]);
468
+                }
469
+            } else {
470
+                $q[$att] = $values;
471
+                unset($qualif[$att]);
472
+            }
473
+        }
474
+        // pas de rôle vide
475
+        if (!$colonne_role || !isset($q[$colonne_role]) || $q[$colonne_role]) {
476
+            $qualifs[] = $q;
477
+        }
478
+    }
479
+
480
+    return $qualifs;
481 481
 }
482 482
 
483 483
 /**
@@ -496,14 +496,14 @@  discard block
 block discarded – undo
496 496
  **/
497 497
 function lien_ajouter_liaisons($objet_source, $ids, $objet_lien, $idl, $qualifs) {
498 498
 
499
-	// retrouver la colonne de roles s'il y en a a lier
500
-	if (is_array($qualifs) && count($qualifs)) {
501
-		foreach ($qualifs as $qualif) {
502
-			objet_associer([$objet_source => $ids], [$objet_lien => $idl], $qualif);
503
-		}
504
-	} else {
505
-		objet_associer([$objet_source => $ids], [$objet_lien => $idl]);
506
-	}
499
+    // retrouver la colonne de roles s'il y en a a lier
500
+    if (is_array($qualifs) && count($qualifs)) {
501
+        foreach ($qualifs as $qualif) {
502
+            objet_associer([$objet_source => $ids], [$objet_lien => $idl], $qualif);
503
+        }
504
+    } else {
505
+        objet_associer([$objet_source => $ids], [$objet_lien => $idl]);
506
+    }
507 507
 }
508 508
 
509 509
 
@@ -513,77 +513,77 @@  discard block
 block discarded – undo
513 513
  * @return array|string|null
514 514
  */
515 515
 function lien_gerer__oups(string $form, string $action, ?array $valeur = null) {
516
-	static $_oups_value;
517
-
518
-	switch ($action) {
519
-		case 'reset':
520
-			$res = !empty($_oups_value);
521
-			$_oups_value = null;
522
-			return $res;
523
-
524
-		case 'get':
525
-			return $_oups_value ?: null;
526
-
527
-		case 'set':
528
-			$_oups_value = $valeur;
529
-			return true;
530
-
531
-		case 'request':
532
-			$_oups_value = null;
533
-			if ($oups = _request('_oups')) {
534
-				include_spip('inc/filtres');
535
-				// on accepte uniquement une valeur signée
536
-				if ($oups = decoder_contexte_ajax($oups, $form)) {
537
-					if (
538
-						!is_array($oups)
539
-						|| empty($oups['id_auteur'])
540
-						|| $oups['id_auteur'] !== $GLOBALS['visiteur_session']['id_auteur']
541
-						|| empty($oups['time'])
542
-						|| $oups['time'] < $_SERVER['REQUEST_TIME'] - 86400
543
-						|| empty($oups['args'])
544
-						|| $oups['args'] !== lien_gerer__oups_collecter_args($form, debug_backtrace(0, 5))
545
-						|| empty($oups['oups_value'])
546
-					) {
547
-						$oups = null;
548
-					}
549
-					else {
550
-						$oups = $oups['oups_value'];
551
-						// controler le contenu
552
-						foreach ($oups as $k => $oup) {
553
-							if (!is_array($oup)) {
554
-								unset($oups[$k]);
555
-							} else {
556
-								foreach ($oup as $champ => $valeur) {
557
-									if (!is_scalar($champ) || !is_scalar($valeur) || preg_match(',\W,', $champ)) {
558
-										unset($oups[$k][$champ]);
559
-									}
560
-								}
561
-								if (empty($oups[$k])) {
562
-									unset($oups[$k]);
563
-								}
564
-							}
565
-						}
566
-					}
567
-					$_oups_value = $oups;
568
-					return $_oups_value;
569
-				}
570
-			}
571
-			break;
572
-
573
-		case 'hash':
574
-			if (!$_oups_value) {
575
-				return '';
576
-			}
577
-
578
-			include_spip('inc/filtres');
579
-			$oups = [
580
-				'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'] ?? 0,
581
-				'time' => strtotime(date('Y-m-d H:00:00')),
582
-				'args' => lien_gerer__oups_collecter_args($form, debug_backtrace(0, 5)),
583
-				'oups_value' => $_oups_value,
584
-			];
585
-			return encoder_contexte_ajax($oups, $form);
586
-	}
516
+    static $_oups_value;
517
+
518
+    switch ($action) {
519
+        case 'reset':
520
+            $res = !empty($_oups_value);
521
+            $_oups_value = null;
522
+            return $res;
523
+
524
+        case 'get':
525
+            return $_oups_value ?: null;
526
+
527
+        case 'set':
528
+            $_oups_value = $valeur;
529
+            return true;
530
+
531
+        case 'request':
532
+            $_oups_value = null;
533
+            if ($oups = _request('_oups')) {
534
+                include_spip('inc/filtres');
535
+                // on accepte uniquement une valeur signée
536
+                if ($oups = decoder_contexte_ajax($oups, $form)) {
537
+                    if (
538
+                        !is_array($oups)
539
+                        || empty($oups['id_auteur'])
540
+                        || $oups['id_auteur'] !== $GLOBALS['visiteur_session']['id_auteur']
541
+                        || empty($oups['time'])
542
+                        || $oups['time'] < $_SERVER['REQUEST_TIME'] - 86400
543
+                        || empty($oups['args'])
544
+                        || $oups['args'] !== lien_gerer__oups_collecter_args($form, debug_backtrace(0, 5))
545
+                        || empty($oups['oups_value'])
546
+                    ) {
547
+                        $oups = null;
548
+                    }
549
+                    else {
550
+                        $oups = $oups['oups_value'];
551
+                        // controler le contenu
552
+                        foreach ($oups as $k => $oup) {
553
+                            if (!is_array($oup)) {
554
+                                unset($oups[$k]);
555
+                            } else {
556
+                                foreach ($oup as $champ => $valeur) {
557
+                                    if (!is_scalar($champ) || !is_scalar($valeur) || preg_match(',\W,', $champ)) {
558
+                                        unset($oups[$k][$champ]);
559
+                                    }
560
+                                }
561
+                                if (empty($oups[$k])) {
562
+                                    unset($oups[$k]);
563
+                                }
564
+                            }
565
+                        }
566
+                    }
567
+                    $_oups_value = $oups;
568
+                    return $_oups_value;
569
+                }
570
+            }
571
+            break;
572
+
573
+        case 'hash':
574
+            if (!$_oups_value) {
575
+                return '';
576
+            }
577
+
578
+            include_spip('inc/filtres');
579
+            $oups = [
580
+                'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'] ?? 0,
581
+                'time' => strtotime(date('Y-m-d H:00:00')),
582
+                'args' => lien_gerer__oups_collecter_args($form, debug_backtrace(0, 5)),
583
+                'oups_value' => $_oups_value,
584
+            ];
585
+            return encoder_contexte_ajax($oups, $form);
586
+    }
587 587
 }
588 588
 
589 589
 /**
@@ -593,19 +593,19 @@  discard block
 block discarded – undo
593 593
  * @return string
594 594
  */
595 595
 function lien_gerer__oups_collecter_args($form, $trace) {
596
-	$args = '';
597
-	if (!empty($trace)) {
598
-		do {
599
-			$t = array_shift($trace);
600
-			$function = $t['function'] ?? '';
601
-			if (str_starts_with((string) $function, 'formulaires_' . $form)) {
602
-				if (isset($t['args'])) {
603
-					$args = json_encode($t['args'], JSON_THROW_ON_ERROR);
604
-				}
605
-				break;
606
-			}
607
-		}
608
-		while (count($trace));
609
-	}
610
-	return $args;
596
+    $args = '';
597
+    if (!empty($trace)) {
598
+        do {
599
+            $t = array_shift($trace);
600
+            $function = $t['function'] ?? '';
601
+            if (str_starts_with((string) $function, 'formulaires_' . $form)) {
602
+                if (isset($t['args'])) {
603
+                    $args = json_encode($t['args'], JSON_THROW_ON_ERROR);
604
+                }
605
+                break;
606
+            }
607
+        }
608
+        while (count($trace));
609
+    }
610
+    return $args;
611 611
 }
Please login to merge, or discard this patch.