Completed
Push — master ( 37aa61...be7234 )
by cam
01:24
created
prive/objets/liste/auteurs_fonctions.php 1 patch
Indentation   +69 added lines, -69 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
  * @package SPIP\Core\Fonctions
16 16
  **/
17 17
 if (!defined('_ECRIRE_INC_VERSION')) {
18
-	return;
18
+    return;
19 19
 }
20 20
 
21 21
 /**
@@ -28,29 +28,29 @@  discard block
 block discarded – undo
28 28
  * @param bool $left
29 29
  */
30 30
 function critere_compteur_articles_filtres_dist($idb, &$boucles, $crit, $left = false) {
31
-	$boucle = &$boucles[$idb];
31
+    $boucle = &$boucles[$idb];
32 32
 
33
-	$_statut = calculer_liste($crit->param[0], [], $boucles, $boucle->id_parent);
33
+    $_statut = calculer_liste($crit->param[0], [], $boucles, $boucle->id_parent);
34 34
 
35
-	$not = '';
36
-	if ($crit->not) {
37
-		$not = ", 'NOT'";
38
-	}
39
-	$boucle->from['LAA'] = 'spip_auteurs_liens';
40
-	$boucle->from_type['LAA'] = 'left';
41
-	$boucle->join['LAA'] = ["'auteurs'", "'id_auteur'", "'id_auteur'", "'LAA.objet=\'article\''"];
35
+    $not = '';
36
+    if ($crit->not) {
37
+        $not = ", 'NOT'";
38
+    }
39
+    $boucle->from['LAA'] = 'spip_auteurs_liens';
40
+    $boucle->from_type['LAA'] = 'left';
41
+    $boucle->join['LAA'] = ["'auteurs'", "'id_auteur'", "'id_auteur'", "'LAA.objet=\'article\''"];
42 42
 
43
-	$boucle->from['articles'] = 'spip_articles';
44
-	$boucle->from_type['articles'] = 'left';
45
-	$boucle->join['articles'] = [
46
-		"'LAA'",
47
-		"'id_article'",
48
-		"'id_objet'",
49
-		"'(articles.statut IS NULL OR '.sql_in_quote('articles.statut',[$_statut]$not).')'"
50
-	];
43
+    $boucle->from['articles'] = 'spip_articles';
44
+    $boucle->from_type['articles'] = 'left';
45
+    $boucle->join['articles'] = [
46
+        "'LAA'",
47
+        "'id_article'",
48
+        "'id_objet'",
49
+        "'(articles.statut IS NULL OR '.sql_in_quote('articles.statut',[$_statut]$not).')'"
50
+    ];
51 51
 
52
-	$boucle->select[] = 'COUNT(articles.id_article) AS compteur_articles';
53
-	$boucle->group[] = 'auteurs.id_auteur';
52
+    $boucle->select[] = 'COUNT(articles.id_article) AS compteur_articles';
53
+    $boucle->group[] = 'auteurs.id_auteur';
54 54
 }
55 55
 
56 56
 /**
@@ -68,7 +68,7 @@  discard block
 block discarded – undo
68 68
  *     Pile complétée par le code à générer
69 69
  */
70 70
 function balise_COMPTEUR_ARTICLES_dist($p) {
71
-	return rindex_pile($p, 'compteur_articles', 'compteur_articles_filtres');
71
+    return rindex_pile($p, 'compteur_articles', 'compteur_articles_filtres');
72 72
 }
73 73
 
74 74
 
@@ -84,37 +84,37 @@  discard block
 block discarded – undo
84 84
  * @return string
85 85
  */
86 86
 function afficher_initiale($url, $initiale, $compteur, $debut, $pas) {
87
-	static $memo = null;
88
-	static $res = [];
89
-	$out = '';
90
-	if (!$memo || !$initiale && !$url || $initiale !== $memo['initiale']) {
91
-		$newcompt = (int) (floor(($compteur - 1) / $pas) * $pas);
92
-		// si fin de la pagination et une seule entree, ne pas l'afficher, ca ne sert a rien
93
-		if (!$initiale && !$url && !$memo['compteur']) {
94
-			$memo = null;
95
-		}
96
-		if ($memo) {
97
-			$on = ($memo['compteur'] <= $debut && ($newcompt > $debut || $newcompt == $debut && $newcompt == $memo['compteur']));
98
-			$res[] = "<li class='pagination-item'>" . lien_ou_expose($memo['url'], $memo['initiale'], $on ? 'span.pagination-item-label' : '', 'pagination-item-label lien_pagination') . '</li>';
99
-		}
100
-		if ($initiale) {
101
-			$memo = [
102
-				'entree' => isset($memo['entree']) ? $memo['entree'] + 1 : 0,
103
-				'initiale' => $initiale,
104
-				'url' => parametre_url($url, 'i', $initiale),
105
-				'compteur' => $newcompt
106
-			];
107
-		}
108
-	}
109
-	if (!$initiale && !$url) {
110
-		if ((is_countable($res) ? count($res) : 0) > 1) {
111
-			$out = "<ul class='pagination-items'>" . implode(' ', $res) . '</ul>';
112
-		}
113
-		$memo = null;
114
-		$res = [];
115
-	}
87
+    static $memo = null;
88
+    static $res = [];
89
+    $out = '';
90
+    if (!$memo || !$initiale && !$url || $initiale !== $memo['initiale']) {
91
+        $newcompt = (int) (floor(($compteur - 1) / $pas) * $pas);
92
+        // si fin de la pagination et une seule entree, ne pas l'afficher, ca ne sert a rien
93
+        if (!$initiale && !$url && !$memo['compteur']) {
94
+            $memo = null;
95
+        }
96
+        if ($memo) {
97
+            $on = ($memo['compteur'] <= $debut && ($newcompt > $debut || $newcompt == $debut && $newcompt == $memo['compteur']));
98
+            $res[] = "<li class='pagination-item'>" . lien_ou_expose($memo['url'], $memo['initiale'], $on ? 'span.pagination-item-label' : '', 'pagination-item-label lien_pagination') . '</li>';
99
+        }
100
+        if ($initiale) {
101
+            $memo = [
102
+                'entree' => isset($memo['entree']) ? $memo['entree'] + 1 : 0,
103
+                'initiale' => $initiale,
104
+                'url' => parametre_url($url, 'i', $initiale),
105
+                'compteur' => $newcompt
106
+            ];
107
+        }
108
+    }
109
+    if (!$initiale && !$url) {
110
+        if ((is_countable($res) ? count($res) : 0) > 1) {
111
+            $out = "<ul class='pagination-items'>" . implode(' ', $res) . '</ul>';
112
+        }
113
+        $memo = null;
114
+        $res = [];
115
+    }
116 116
 
117
-	return $out;
117
+    return $out;
118 118
 }
119 119
 
120 120
 /**
@@ -133,24 +133,24 @@  discard block
 block discarded – undo
133 133
  * @return string
134 134
  */
135 135
 function auteur_lien_messagerie($id_auteur, $en_ligne, $statut, $imessage, $email = '') {
136
-	static $time = null;
137
-	if (!in_array($statut, ['0minirezo', '1comite'])) {
138
-		return '';
139
-	}
136
+    static $time = null;
137
+    if (!in_array($statut, ['0minirezo', '1comite'])) {
138
+        return '';
139
+    }
140 140
 
141
-	if (is_null($time)) {
142
-		$time = time();
143
-	}
144
-	$parti = (($time - strtotime($en_ligne)) > 15 * 60);
141
+    if (is_null($time)) {
142
+        $time = time();
143
+    }
144
+    $parti = (($time - strtotime($en_ligne)) > 15 * 60);
145 145
 
146
-	if (
147
-		$imessage != 'non' && !$parti // historique : est-ce que ca a encore un sens de limiter vu qu'on a la notification par email ?
148
-		&& $GLOBALS['meta']['messagerie_agenda'] != 'non'
149
-	) {
150
-		return parametre_url(parametre_url(generer_url_ecrire('message_edit', 'new=oui'), 'to', $id_auteur), 'redirect', self());
151
-	} elseif (strlen($email) && autoriser('voir', 'auteur', $id_auteur)) {
152
-		return 'mailto:' . $email;
153
-	} else {
154
-		return '';
155
-	}
146
+    if (
147
+        $imessage != 'non' && !$parti // historique : est-ce que ca a encore un sens de limiter vu qu'on a la notification par email ?
148
+        && $GLOBALS['meta']['messagerie_agenda'] != 'non'
149
+    ) {
150
+        return parametre_url(parametre_url(generer_url_ecrire('message_edit', 'new=oui'), 'to', $id_auteur), 'redirect', self());
151
+    } elseif (strlen($email) && autoriser('voir', 'auteur', $id_auteur)) {
152
+        return 'mailto:' . $email;
153
+    } else {
154
+        return '';
155
+    }
156 156
 }
Please login to merge, or discard this patch.
prive/objets/liste/objets-trad_fonctions.php 1 patch
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -10,24 +10,24 @@
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 function lister_traductions($id_trad, $objet) {
17
-	$table_objet_sql = table_objet_sql($objet);
18
-	$primary = id_table_objet($objet);
17
+    $table_objet_sql = table_objet_sql($objet);
18
+    $primary = id_table_objet($objet);
19 19
 
20
-	$select = "$primary as id,lang";
21
-	$where = 'id_trad=' . (int) $id_trad;
22
-	$trouver_table = charger_fonction('trouver_table', 'base');
23
-	$desc = $trouver_table($table_objet_sql);
24
-	if (isset($desc['field']['statut'])) {
25
-		$select .= ',statut';
26
-		$where .= ' AND statut!=' . sql_quote('poubelle');
27
-	}
20
+    $select = "$primary as id,lang";
21
+    $where = 'id_trad=' . (int) $id_trad;
22
+    $trouver_table = charger_fonction('trouver_table', 'base');
23
+    $desc = $trouver_table($table_objet_sql);
24
+    if (isset($desc['field']['statut'])) {
25
+        $select .= ',statut';
26
+        $where .= ' AND statut!=' . sql_quote('poubelle');
27
+    }
28 28
 
29
-	$rows = sql_allfetsel($select, $table_objet_sql, $where);
30
-	lang_select();
29
+    $rows = sql_allfetsel($select, $table_objet_sql, $where);
30
+    lang_select();
31 31
 
32
-	return $rows;
32
+    return $rows;
33 33
 }
Please login to merge, or discard this patch.
prive/echafaudage/hierarchie/objet_fonctions.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 /**
@@ -23,9 +23,9 @@  discard block
 block discarded – undo
23 23
  */
24 24
 function deplacement_restreint($objet, $statut) {
25 25
 
26
-	return match ($objet) {
27
-		'rubrique' => !$GLOBALS['connect_toutes_rubriques'],
28
-		'article', 'site', 'syndic', 'breve' => $statut == 'publie',
29
-		default => $statut ? $statut == 'publie' : false,
30
-	};
26
+    return match ($objet) {
27
+        'rubrique' => !$GLOBALS['connect_toutes_rubriques'],
28
+        'article', 'site', 'syndic', 'breve' => $statut == 'publie',
29
+        default => $statut ? $statut == 'publie' : false,
30
+    };
31 31
 }
Please login to merge, or discard this patch.
ecrire/install/etape_ldap3.php 1 patch
Indentation   +62 added lines, -62 removed lines patch added patch discarded remove patch
@@ -10,77 +10,77 @@
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 function install_etape_ldap3_dist() {
17
-	$info = [];
18
-	$adresse_ldap = _request('adresse_ldap');
19
-	$login_ldap = _request('login_ldap');
20
-	$pass_ldap = _request('pass_ldap');
21
-	$port_ldap = _request('port_ldap');
17
+    $info = [];
18
+    $adresse_ldap = _request('adresse_ldap');
19
+    $login_ldap = _request('login_ldap');
20
+    $pass_ldap = _request('pass_ldap');
21
+    $port_ldap = _request('port_ldap');
22 22
 
23
-	$base_ldap_text = defined('_INSTALL_BASE_LDAP')
24
-		? _INSTALL_BASE_LDAP
25
-		: 'ou=users, dc=mon-domaine, dc=com';
23
+    $base_ldap_text = defined('_INSTALL_BASE_LDAP')
24
+        ? _INSTALL_BASE_LDAP
25
+        : 'ou=users, dc=mon-domaine, dc=com';
26 26
 
27
-	$minipage = new Spip\Afficher\Minipage\Installation();
28
-	echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']);
27
+    $minipage = new Spip\Afficher\Minipage\Installation();
28
+    echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']);
29 29
 
30
-	echo info_etape(
31
-		_T('info_chemin_acces_1'),
32
-		info_progression_etape(3, 'etape_ldap', 'install/')
33
-	),
34
-	_T('info_chemin_acces_2');
30
+    echo info_etape(
31
+        _T('info_chemin_acces_1'),
32
+        info_progression_etape(3, 'etape_ldap', 'install/')
33
+    ),
34
+    _T('info_chemin_acces_2');
35 35
 
36
-	$ldap_link = @ldap_connect("$adresse_ldap", "$port_ldap");
37
-	if ($ldap_link) {
38
-		@ldap_bind($ldap_link, "$login_ldap", "$pass_ldap");
39
-		$result = @ldap_read($ldap_link, '', 'objectclass=*', ['namingContexts']);
40
-		$info = @ldap_get_entries($ldap_link, $result);
41
-		@ldap_close($ldap_link);
42
-	}
36
+    $ldap_link = @ldap_connect("$adresse_ldap", "$port_ldap");
37
+    if ($ldap_link) {
38
+        @ldap_bind($ldap_link, "$login_ldap", "$pass_ldap");
39
+        $result = @ldap_read($ldap_link, '', 'objectclass=*', ['namingContexts']);
40
+        $info = @ldap_get_entries($ldap_link, $result);
41
+        @ldap_close($ldap_link);
42
+    }
43 43
 
44
-	$checked = false;
45
-	$res = '';
46
-	if (is_array($info) && $info['count'] > 0) {
47
-		$res .= '<p>' . _T('info_selection_chemin_acces') . '</p>';
48
-		$res .= '<ul>';
49
-		$n = 0;
50
-		for ($i = 0; $i < $info['count']; $i++) {
51
-			$names = $info[$i]['namingcontexts'];
52
-			if (is_array($names)) {
53
-				for ($j = 0; $j < $names['count']; $j++) {
54
-					$n++;
55
-					$res .= '<li><input name="base_ldap" value="' . spip_htmlspecialchars($names[$j]) . "\" type='radio' id='tab$n'";
56
-					if (!$checked) {
57
-						$res .= ' checked="checked"';
58
-						$checked = true;
59
-					}
60
-					$res .= ' />';
61
-					$res .= "<label for='tab$n'>" . spip_htmlspecialchars($names[$j]) . "</label></li>\n";
62
-				}
63
-			}
64
-		}
65
-		$res .= '</ul>';
66
-		$res .= _T('info_ou') . ' ';
67
-	}
68
-	$res .= "<br />\n<input name=\"base_ldap\" value=\"\" type='radio' id='manuel'";
69
-	if (!$checked) {
70
-		$res .= ' checked="checked"';
71
-		$checked = true;
72
-	}
44
+    $checked = false;
45
+    $res = '';
46
+    if (is_array($info) && $info['count'] > 0) {
47
+        $res .= '<p>' . _T('info_selection_chemin_acces') . '</p>';
48
+        $res .= '<ul>';
49
+        $n = 0;
50
+        for ($i = 0; $i < $info['count']; $i++) {
51
+            $names = $info[$i]['namingcontexts'];
52
+            if (is_array($names)) {
53
+                for ($j = 0; $j < $names['count']; $j++) {
54
+                    $n++;
55
+                    $res .= '<li><input name="base_ldap" value="' . spip_htmlspecialchars($names[$j]) . "\" type='radio' id='tab$n'";
56
+                    if (!$checked) {
57
+                        $res .= ' checked="checked"';
58
+                        $checked = true;
59
+                    }
60
+                    $res .= ' />';
61
+                    $res .= "<label for='tab$n'>" . spip_htmlspecialchars($names[$j]) . "</label></li>\n";
62
+                }
63
+            }
64
+        }
65
+        $res .= '</ul>';
66
+        $res .= _T('info_ou') . ' ';
67
+    }
68
+    $res .= "<br />\n<input name=\"base_ldap\" value=\"\" type='radio' id='manuel'";
69
+    if (!$checked) {
70
+        $res .= ' checked="checked"';
71
+        $checked = true;
72
+    }
73 73
 
74
-	$res .= ' />'
75
-		. "\n<label for='manuel'>" . _T('entree_chemin_acces') . '</label> '
76
-		. "\n<fieldset>"
77
-		. "<input type='text' name='base_ldap_text' class='text' value=\"$base_ldap_text\" size='40' />"
78
-		. "\n</fieldset>"
79
-		. "\n<input type='hidden' name='etape' value='ldap4' />"
80
-		. install_propager(['adresse_ldap', 'port_ldap', 'login_ldap', 'pass_ldap', 'protocole_ldap', 'tls_ldap'])
81
-		. bouton_suivant();
74
+    $res .= ' />'
75
+        . "\n<label for='manuel'>" . _T('entree_chemin_acces') . '</label> '
76
+        . "\n<fieldset>"
77
+        . "<input type='text' name='base_ldap_text' class='text' value=\"$base_ldap_text\" size='40' />"
78
+        . "\n</fieldset>"
79
+        . "\n<input type='hidden' name='etape' value='ldap4' />"
80
+        . install_propager(['adresse_ldap', 'port_ldap', 'login_ldap', 'pass_ldap', 'protocole_ldap', 'tls_ldap'])
81
+        . bouton_suivant();
82 82
 
83
-	echo generer_form_ecrire('install', $res);
83
+    echo generer_form_ecrire('install', $res);
84 84
 
85
-	echo $minipage->installFinPage();
85
+    echo $minipage->installFinPage();
86 86
 }
Please login to merge, or discard this patch.
ecrire/install/etape_ldap4.php 1 patch
Indentation   +81 added lines, -81 removed lines patch added patch discarded remove patch
@@ -10,96 +10,96 @@
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 include_spip('auth/ldap');
17 17
 
18 18
 function install_etape_ldap4_dist() {
19
-	$adresse_ldap = _request('adresse_ldap');
20
-	$login_ldap = _request('login_ldap');
21
-	$pass_ldap = _request('pass_ldap');
22
-	$port_ldap = _request('port_ldap');
23
-	$base_ldap = _request('base_ldap');
24
-	$base_ldap_text = _request('base_ldap_text');
25
-	if (!$base_ldap) {
26
-		$base_ldap = $base_ldap_text;
27
-	}
28
-
29
-	$minipage = new Spip\Afficher\Minipage\Installation();
30
-	echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']);
31
-
32
-	$ldap_link = ldap_connect($adresse_ldap, $port_ldap);
33
-	@ldap_bind($ldap_link, $login_ldap, $pass_ldap);
34
-
35
-	// Essayer de verifier le chemin fourni
36
-	$r = @ldap_compare($ldap_link, $base_ldap, 'objectClass', '');
37
-	$fail = (ldap_errno($ldap_link) == 32);
38
-
39
-	if ($fail) {
40
-		echo info_etape(_T('info_chemin_acces_annuaire')),
41
-		info_progression_etape(3, 'etape_ldap', 'install/', true),
42
-			"<div class='error'><p><b>" . _T('avis_operation_echec') . '</b></p><p>' . _T('avis_chemin_invalide_1'),
43
-			' (<tt>' . spip_htmlspecialchars($base_ldap) . '</tt>) ' . _T('avis_chemin_invalide_2') . '</p></div>';
44
-	} else {
45
-		info_etape(_T('info_reglage_ldap'));
46
-		echo info_progression_etape(4, 'etape_ldap', 'install/');
47
-
48
-		$statuts = liste_statuts_ldap();
49
-		$statut_ldap = defined('_INSTALL_STATUT_LDAP')
50
-			? _INSTALL_STATUT_LDAP
51
-			: $GLOBALS['liste_des_statuts']['info_redacteurs'];
52
-
53
-
54
-		$res = install_propager(['adresse_ldap', 'port_ldap', 'login_ldap', 'pass_ldap', 'protocole_ldap', 'tls_ldap'])
55
-			. "<input type='hidden' name='etape' value='ldap5' />"
56
-			. "<input type='hidden' name='base_ldap' value='" . spip_htmlentities($base_ldap) . "' />"
57
-			. fieldset(
58
-				_T('info_statut_utilisateurs_1'),
59
-				[
60
-					'statut_ldap' => [
61
-						'label' => _T('info_statut_utilisateurs_2') . '<br />',
62
-						'valeur' => $statut_ldap,
63
-						'alternatives' => $statuts
64
-					]
65
-				]
66
-			)
67
-			. install_ldap_correspondances()
68
-			. bouton_suivant();
69
-
70
-		echo generer_form_ecrire('install', $res);
71
-	}
72
-
73
-	echo $minipage->installFinPage();
19
+    $adresse_ldap = _request('adresse_ldap');
20
+    $login_ldap = _request('login_ldap');
21
+    $pass_ldap = _request('pass_ldap');
22
+    $port_ldap = _request('port_ldap');
23
+    $base_ldap = _request('base_ldap');
24
+    $base_ldap_text = _request('base_ldap_text');
25
+    if (!$base_ldap) {
26
+        $base_ldap = $base_ldap_text;
27
+    }
28
+
29
+    $minipage = new Spip\Afficher\Minipage\Installation();
30
+    echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']);
31
+
32
+    $ldap_link = ldap_connect($adresse_ldap, $port_ldap);
33
+    @ldap_bind($ldap_link, $login_ldap, $pass_ldap);
34
+
35
+    // Essayer de verifier le chemin fourni
36
+    $r = @ldap_compare($ldap_link, $base_ldap, 'objectClass', '');
37
+    $fail = (ldap_errno($ldap_link) == 32);
38
+
39
+    if ($fail) {
40
+        echo info_etape(_T('info_chemin_acces_annuaire')),
41
+        info_progression_etape(3, 'etape_ldap', 'install/', true),
42
+            "<div class='error'><p><b>" . _T('avis_operation_echec') . '</b></p><p>' . _T('avis_chemin_invalide_1'),
43
+            ' (<tt>' . spip_htmlspecialchars($base_ldap) . '</tt>) ' . _T('avis_chemin_invalide_2') . '</p></div>';
44
+    } else {
45
+        info_etape(_T('info_reglage_ldap'));
46
+        echo info_progression_etape(4, 'etape_ldap', 'install/');
47
+
48
+        $statuts = liste_statuts_ldap();
49
+        $statut_ldap = defined('_INSTALL_STATUT_LDAP')
50
+            ? _INSTALL_STATUT_LDAP
51
+            : $GLOBALS['liste_des_statuts']['info_redacteurs'];
52
+
53
+
54
+        $res = install_propager(['adresse_ldap', 'port_ldap', 'login_ldap', 'pass_ldap', 'protocole_ldap', 'tls_ldap'])
55
+            . "<input type='hidden' name='etape' value='ldap5' />"
56
+            . "<input type='hidden' name='base_ldap' value='" . spip_htmlentities($base_ldap) . "' />"
57
+            . fieldset(
58
+                _T('info_statut_utilisateurs_1'),
59
+                [
60
+                    'statut_ldap' => [
61
+                        'label' => _T('info_statut_utilisateurs_2') . '<br />',
62
+                        'valeur' => $statut_ldap,
63
+                        'alternatives' => $statuts
64
+                    ]
65
+                ]
66
+            )
67
+            . install_ldap_correspondances()
68
+            . bouton_suivant();
69
+
70
+        echo generer_form_ecrire('install', $res);
71
+    }
72
+
73
+    echo $minipage->installFinPage();
74 74
 }
75 75
 
76 76
 function liste_statuts_ldap() {
77
-	$recom = [
78
-		'info_administrateurs' => ('<b>' . _T('info_administrateur_1') . '</b> ' . _T('info_administrateur_2') . '<br />'),
79
-		'info_redacteurs' => ('<b>' . _T('info_redacteur_1') . '</b> ' . _T('info_redacteur_2') . '<br />'),
80
-		'info_visiteurs' => ('<b>' . _T('info_visiteur_1') . '</b> ' . _T('info_visiteur_2') . '<br />')
81
-	];
82
-
83
-	$res = [];
84
-	foreach ($GLOBALS['liste_des_statuts'] as $k => $v) {
85
-		if (isset($recom[$k])) {
86
-			$res[$v] = $recom[$k];
87
-		}
88
-	}
89
-
90
-	return $res;
77
+    $recom = [
78
+        'info_administrateurs' => ('<b>' . _T('info_administrateur_1') . '</b> ' . _T('info_administrateur_2') . '<br />'),
79
+        'info_redacteurs' => ('<b>' . _T('info_redacteur_1') . '</b> ' . _T('info_redacteur_2') . '<br />'),
80
+        'info_visiteurs' => ('<b>' . _T('info_visiteur_1') . '</b> ' . _T('info_visiteur_2') . '<br />')
81
+    ];
82
+
83
+    $res = [];
84
+    foreach ($GLOBALS['liste_des_statuts'] as $k => $v) {
85
+        if (isset($recom[$k])) {
86
+            $res[$v] = $recom[$k];
87
+        }
88
+    }
89
+
90
+    return $res;
91 91
 }
92 92
 
93 93
 function install_ldap_correspondances() {
94
-	$champs = [];
95
-	foreach (is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : [] as $champ => $v) {
96
-		$nom = 'ldap_' . $champ;
97
-		$val = is_array($v) ? implode(',', $v) : (string) $v;
98
-		$champs[$nom] = [
99
-			'label' => _T('ldap_correspondance', ['champ' => "<tt>$champ</tt>"]) . '<br />',
100
-			'valeur' => $val
101
-		];
102
-	}
103
-
104
-	return $champs ? fieldset(_T('ldap_correspondance_1'), $champs, '', _T('ldap_correspondance_2') . '<br /><br />') : '';
94
+    $champs = [];
95
+    foreach (is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : [] as $champ => $v) {
96
+        $nom = 'ldap_' . $champ;
97
+        $val = is_array($v) ? implode(',', $v) : (string) $v;
98
+        $champs[$nom] = [
99
+            'label' => _T('ldap_correspondance', ['champ' => "<tt>$champ</tt>"]) . '<br />',
100
+            'valeur' => $val
101
+        ];
102
+    }
103
+
104
+    return $champs ? fieldset(_T('ldap_correspondance_1'), $champs, '', _T('ldap_correspondance_2') . '<br /><br />') : '';
105 105
 }
Please login to merge, or discard this patch.
ecrire/install/etape_ldap2.php 1 patch
Indentation   +81 added lines, -81 removed lines patch added patch discarded remove patch
@@ -10,88 +10,88 @@
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 function install_etape_ldap2_dist() {
17
-	$minipage = new Spip\Afficher\Minipage\Installation();
18
-	echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']);
19
-
20
-	$adresse_ldap = _request('adresse_ldap');
21
-
22
-	$port_ldap = _request('port_ldap');
23
-
24
-	$tls_ldap = _request('tls_ldap');
25
-
26
-	$protocole_ldap = _request('protocole_ldap');
27
-
28
-	$login_ldap = _request('login_ldap');
29
-
30
-	$pass_ldap = _request('pass_ldap');
31
-
32
-	$port_ldap = (int) $port_ldap;
33
-
34
-	$tls = false;
35
-
36
-	if ($tls_ldap == 'oui') {
37
-		if ($port_ldap == 636) {
38
-			$adresse_ldap = "ldaps://$adresse_ldap";
39
-		} else {
40
-			$tls = true;
41
-		}
42
-	}
43
-	else {
44
-		$tls_ldap == 'non';
45
-	}
46
-
47
-	// Verifions que l'adresse demandee est valide
48
-	$adresse_ldap = filter_var($adresse_ldap, FILTER_SANITIZE_URL) ?: '';
49
-
50
-	$ldap_link = ldap_connect($adresse_ldap, $port_ldap);
51
-	$erreur = 'ldap_connect(' . spip_htmlspecialchars($adresse_ldap) . ', ' . spip_htmlspecialchars($port_ldap) . ')';
52
-
53
-	if ($ldap_link) {
54
-		if (!ldap_set_option($ldap_link, LDAP_OPT_PROTOCOL_VERSION, $protocole_ldap)) {
55
-			$protocole_ldap = 2;
56
-			ldap_set_option($ldap_link, LDAP_OPT_PROTOCOL_VERSION, $protocole_ldap);
57
-		}
58
-		if ($tls && !ldap_start_tls($ldap_link)) {
59
-			$erreur = 'ldap_start_tls(' . spip_htmlspecialchars($ldap_link)
60
-				. ' ' . spip_htmlspecialchars($adresse_ldap)
61
-				. ', ' . spip_htmlspecialchars($port_ldap) . ')';
62
-			$ldap_link = false;
63
-		}
64
-		if ($ldap_link) {
65
-			$ldap_link = ldap_bind($ldap_link, $login_ldap, $pass_ldap);
66
-			$erreur = "ldap_bind('" . spip_htmlspecialchars($ldap_link)
67
-				. "', '" . spip_htmlspecialchars($login_ldap)
68
-				. "', '" . spip_htmlspecialchars($pass_ldap)
69
-				. "'): " . spip_htmlspecialchars($adresse_ldap)
70
-				. ', ' . spip_htmlspecialchars($port_ldap);
71
-		}
72
-	}
73
-
74
-	if ($ldap_link) {
75
-		echo info_etape(
76
-			_T('titre_connexion_ldap'),
77
-			info_progression_etape(2, 'etape_ldap', 'install/')
78
-		),  _T('info_connexion_ldap_ok');
79
-		echo generer_form_ecrire('install', (
80
-			"\n<input type='hidden' name='etape' value='ldap3' />"
81
-			. "\n<input type='hidden' name='adresse_ldap' value=\"" . spip_htmlspecialchars($adresse_ldap) . '" />'
82
-			. "\n<input type='hidden' name='port_ldap' value=\"" . spip_htmlspecialchars($port_ldap) . '" />'
83
-			. "\n<input type='hidden' name='login_ldap' value=\"" . spip_htmlspecialchars($login_ldap) . '" />'
84
-			. "\n<input type='hidden' name='pass_ldap' value=\"" . spip_htmlspecialchars($pass_ldap) . '" />'
85
-			. "\n<input type='hidden' name='protocole_ldap' value=\"" . spip_htmlspecialchars($protocole_ldap) . '" />'
86
-			. "\n<input type='hidden' name='tls_ldap' value=\"" . spip_htmlspecialchars($tls_ldap) . '" />'
87
-			. bouton_suivant()));
88
-	} else {
89
-		echo info_etape(_T('titre_connexion_ldap')), info_progression_etape(1, 'etape_ldap', 'install/', true),
90
-			"<div class='error'><p>" . _T('avis_connexion_ldap_echec_1') . '</p>',
91
-			'<p>' . _T('avis_connexion_ldap_echec_2') .
92
-			"<br />\n" . _T('avis_connexion_ldap_echec_3') .
93
-			'<br /><br />' . $erreur . '<b> ?</b></p></div>';
94
-	}
95
-
96
-	echo $minipage->installFinPage();
17
+    $minipage = new Spip\Afficher\Minipage\Installation();
18
+    echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']);
19
+
20
+    $adresse_ldap = _request('adresse_ldap');
21
+
22
+    $port_ldap = _request('port_ldap');
23
+
24
+    $tls_ldap = _request('tls_ldap');
25
+
26
+    $protocole_ldap = _request('protocole_ldap');
27
+
28
+    $login_ldap = _request('login_ldap');
29
+
30
+    $pass_ldap = _request('pass_ldap');
31
+
32
+    $port_ldap = (int) $port_ldap;
33
+
34
+    $tls = false;
35
+
36
+    if ($tls_ldap == 'oui') {
37
+        if ($port_ldap == 636) {
38
+            $adresse_ldap = "ldaps://$adresse_ldap";
39
+        } else {
40
+            $tls = true;
41
+        }
42
+    }
43
+    else {
44
+        $tls_ldap == 'non';
45
+    }
46
+
47
+    // Verifions que l'adresse demandee est valide
48
+    $adresse_ldap = filter_var($adresse_ldap, FILTER_SANITIZE_URL) ?: '';
49
+
50
+    $ldap_link = ldap_connect($adresse_ldap, $port_ldap);
51
+    $erreur = 'ldap_connect(' . spip_htmlspecialchars($adresse_ldap) . ', ' . spip_htmlspecialchars($port_ldap) . ')';
52
+
53
+    if ($ldap_link) {
54
+        if (!ldap_set_option($ldap_link, LDAP_OPT_PROTOCOL_VERSION, $protocole_ldap)) {
55
+            $protocole_ldap = 2;
56
+            ldap_set_option($ldap_link, LDAP_OPT_PROTOCOL_VERSION, $protocole_ldap);
57
+        }
58
+        if ($tls && !ldap_start_tls($ldap_link)) {
59
+            $erreur = 'ldap_start_tls(' . spip_htmlspecialchars($ldap_link)
60
+                . ' ' . spip_htmlspecialchars($adresse_ldap)
61
+                . ', ' . spip_htmlspecialchars($port_ldap) . ')';
62
+            $ldap_link = false;
63
+        }
64
+        if ($ldap_link) {
65
+            $ldap_link = ldap_bind($ldap_link, $login_ldap, $pass_ldap);
66
+            $erreur = "ldap_bind('" . spip_htmlspecialchars($ldap_link)
67
+                . "', '" . spip_htmlspecialchars($login_ldap)
68
+                . "', '" . spip_htmlspecialchars($pass_ldap)
69
+                . "'): " . spip_htmlspecialchars($adresse_ldap)
70
+                . ', ' . spip_htmlspecialchars($port_ldap);
71
+        }
72
+    }
73
+
74
+    if ($ldap_link) {
75
+        echo info_etape(
76
+            _T('titre_connexion_ldap'),
77
+            info_progression_etape(2, 'etape_ldap', 'install/')
78
+        ),  _T('info_connexion_ldap_ok');
79
+        echo generer_form_ecrire('install', (
80
+            "\n<input type='hidden' name='etape' value='ldap3' />"
81
+            . "\n<input type='hidden' name='adresse_ldap' value=\"" . spip_htmlspecialchars($adresse_ldap) . '" />'
82
+            . "\n<input type='hidden' name='port_ldap' value=\"" . spip_htmlspecialchars($port_ldap) . '" />'
83
+            . "\n<input type='hidden' name='login_ldap' value=\"" . spip_htmlspecialchars($login_ldap) . '" />'
84
+            . "\n<input type='hidden' name='pass_ldap' value=\"" . spip_htmlspecialchars($pass_ldap) . '" />'
85
+            . "\n<input type='hidden' name='protocole_ldap' value=\"" . spip_htmlspecialchars($protocole_ldap) . '" />'
86
+            . "\n<input type='hidden' name='tls_ldap' value=\"" . spip_htmlspecialchars($tls_ldap) . '" />'
87
+            . bouton_suivant()));
88
+    } else {
89
+        echo info_etape(_T('titre_connexion_ldap')), info_progression_etape(1, 'etape_ldap', 'install/', true),
90
+            "<div class='error'><p>" . _T('avis_connexion_ldap_echec_1') . '</p>',
91
+            '<p>' . _T('avis_connexion_ldap_echec_2') .
92
+            "<br />\n" . _T('avis_connexion_ldap_echec_3') .
93
+            '<br /><br />' . $erreur . '<b> ?</b></p></div>';
94
+    }
95
+
96
+    echo $minipage->installFinPage();
97 97
 }
Please login to merge, or discard this patch.
ecrire/public/assembler.php 1 patch
Indentation   +633 added lines, -633 removed lines patch added patch discarded remove patch
@@ -19,178 +19,178 @@  discard block
 block discarded – undo
19 19
  **/
20 20
 
21 21
 if (!defined('_ECRIRE_INC_VERSION')) {
22
-	return;
22
+    return;
23 23
 }
24 24
 
25 25
 // En cas de modification, il faut aussi actualiser la regexp de nettoyer_uri_var() dans inc/utils.php
26 26
 if (!defined('_CONTEXTE_IGNORE_VARIABLES')) {
27
-	define('_CONTEXTE_IGNORE_VARIABLES', '/(^var_|^PHPSESSID$|^fbclid$|^utm_)/');
27
+    define('_CONTEXTE_IGNORE_VARIABLES', '/(^var_|^PHPSESSID$|^fbclid$|^utm_)/');
28 28
 }
29 29
 
30 30
 function assembler($fond, string $connect = '') {
31 31
 
32
-	$chemin_cache = null;
33
-	$lastmodified = null;
34
-	$res = null;
35
-	// flag_preserver est modifie ici, et utilise en globale
36
-	// use_cache sert a informer le bouton d'admin pr savoir s'il met un *
37
-	// contexte est utilise en globale dans le formulaire d'admin
38
-
39
-	$GLOBALS['contexte'] = calculer_contexte();
40
-	$page = ['contexte_implicite' => calculer_contexte_implicite()];
41
-	$page['contexte_implicite']['cache'] = $fond . preg_replace(
42
-		',\.[a-zA-Z0-9]*$,',
43
-		'',
44
-		preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI'])
45
-	);
46
-	// Cette fonction est utilisee deux fois
47
-	$cacher = charger_fonction('cacher', 'public', true);
48
-	// Les quatre derniers parametres sont modifies par la fonction:
49
-	// emplacement, validite, et, s'il est valide, contenu & age
50
-	if ($cacher) {
51
-		$res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified);
52
-	} else {
53
-		$GLOBALS['use_cache'] = -1;
54
-	}
55
-	// Si un resultat est retourne, c'est un message d'impossibilite
56
-	if ($res) {
57
-		return ['texte' => $res];
58
-	}
59
-
60
-	if (!$chemin_cache || !$lastmodified) {
61
-		$lastmodified = time();
62
-	}
63
-
64
-	$headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD');
65
-	$calculer_page = true;
66
-
67
-	// Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client})
68
-	// une perennite valide a meme reponse qu'une requete HEAD (par defaut les
69
-	// pages sont dynamiques)
70
-	if (
71
-		isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
72
-		and (!defined('_VAR_MODE') or !_VAR_MODE)
73
-		and $chemin_cache
74
-		and isset($page['entetes'])
75
-		and isset($page['entetes']['Cache-Control'])
76
-		and strstr($page['entetes']['Cache-Control'], 'max-age=')
77
-		and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/')
78
-	) {
79
-		$since = preg_replace(
80
-			'/;.*/',
81
-			'',
82
-			$_SERVER['HTTP_IF_MODIFIED_SINCE']
83
-		);
84
-		$since = str_replace('GMT', '', $since);
85
-		if (trim($since) == gmdate('D, d M Y H:i:s', $lastmodified)) {
86
-			$page['status'] = 304;
87
-			$headers_only = true;
88
-			$calculer_page = false;
89
-		}
90
-	}
91
-
92
-	// Si requete HEAD ou Last-modified compatible, ignorer le texte
93
-	// et pas de content-type (pour contrer le bouton admin de inc-public)
94
-	if (!$calculer_page) {
95
-		$page['texte'] = '';
96
-	} else {
97
-		// si la page est prise dans le cache
98
-		if (!$GLOBALS['use_cache']) {
99
-			// Informer les boutons d'admin du contexte
100
-			// (fourni par urls_decoder_url ci-dessous lors de la mise en cache)
101
-			$GLOBALS['contexte'] = $page['contexte'];
102
-
103
-			// vider les globales url propres qui ne doivent plus etre utilisees en cas
104
-			// d'inversion url => objet
105
-			// plus necessaire si on utilise bien la fonction urls_decoder_url
106
-			#unset($_SERVER['REDIRECT_url_propre']);
107
-			#unset($_ENV['url_propre']);
108
-		} else {
109
-			// Compat ascendante :
110
-			// 1. $contexte est global
111
-			// (a evacuer car urls_decoder_url gere ce probleme ?)
112
-			// et calculer la page
113
-			if (!test_espace_prive()) {
114
-				include_spip('inc/urls');
115
-				[$fond, $GLOBALS['contexte'], $url_redirect] = urls_decoder_url(
116
-					nettoyer_uri(),
117
-					$fond,
118
-					$GLOBALS['contexte'],
119
-					true
120
-				);
121
-			}
122
-			// squelette par defaut
123
-			if (!strlen($fond ?? '')) {
124
-				$fond = 'sommaire';
125
-			}
126
-
127
-			// produire la page : peut mettre a jour $lastmodified
128
-			$produire_page = charger_fonction('produire_page', 'public');
129
-			$page = $produire_page(
130
-				$fond,
131
-				$GLOBALS['contexte'],
132
-				$GLOBALS['use_cache'],
133
-				$chemin_cache,
134
-				null,
135
-				$page,
136
-				$lastmodified,
137
-				$connect
138
-			);
139
-			if ($page === '') {
140
-				$erreur = _T(
141
-					'info_erreur_squelette2',
142
-					['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES]
143
-				);
144
-				erreur_squelette($erreur);
145
-				// eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
146
-				$page = ['texte' => '', 'erreur' => $erreur];
147
-			}
148
-		}
149
-
150
-		if ($page and $chemin_cache) {
151
-			$page['cache'] = $chemin_cache;
152
-		}
153
-
154
-		auto_content_type($page);
155
-
156
-		$GLOBALS['flag_preserver'] |= headers_sent();
157
-
158
-		// Definir les entetes si ce n'est fait
159
-		if (!$GLOBALS['flag_preserver']) {
160
-			// Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions
161
-			if (
162
-				trim($page['texte']) === ''
163
-				and _VAR_MODE !== 'debug'
164
-				and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur
165
-			) {
166
-				$GLOBALS['contexte']['fond_erreur'] = $fond;
167
-				$page = message_page_indisponible($page, $GLOBALS['contexte']);
168
-			}
169
-			// pas de cache client en mode 'observation'
170
-			if (defined('_VAR_MODE') and _VAR_MODE) {
171
-				$page['entetes']['Cache-Control'] = 'no-cache,must-revalidate';
172
-				$page['entetes']['Pragma'] = 'no-cache';
173
-			}
174
-		}
175
-	}
176
-
177
-	// Entete Last-Modified:
178
-	// eviter d'etre incoherent en envoyant un lastmodified identique
179
-	// a celui qu'on a refuse d'honorer plus haut (cf. #655)
180
-	if (
181
-		$lastmodified
182
-		and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
183
-		and !isset($page['entetes']['Last-Modified'])
184
-	) {
185
-		$page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT';
186
-	}
187
-
188
-	// fermer la connexion apres les headers si requete HEAD
189
-	if ($headers_only) {
190
-		$page['entetes']['Connection'] = 'close';
191
-	}
192
-
193
-	return $page;
32
+    $chemin_cache = null;
33
+    $lastmodified = null;
34
+    $res = null;
35
+    // flag_preserver est modifie ici, et utilise en globale
36
+    // use_cache sert a informer le bouton d'admin pr savoir s'il met un *
37
+    // contexte est utilise en globale dans le formulaire d'admin
38
+
39
+    $GLOBALS['contexte'] = calculer_contexte();
40
+    $page = ['contexte_implicite' => calculer_contexte_implicite()];
41
+    $page['contexte_implicite']['cache'] = $fond . preg_replace(
42
+        ',\.[a-zA-Z0-9]*$,',
43
+        '',
44
+        preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI'])
45
+    );
46
+    // Cette fonction est utilisee deux fois
47
+    $cacher = charger_fonction('cacher', 'public', true);
48
+    // Les quatre derniers parametres sont modifies par la fonction:
49
+    // emplacement, validite, et, s'il est valide, contenu & age
50
+    if ($cacher) {
51
+        $res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified);
52
+    } else {
53
+        $GLOBALS['use_cache'] = -1;
54
+    }
55
+    // Si un resultat est retourne, c'est un message d'impossibilite
56
+    if ($res) {
57
+        return ['texte' => $res];
58
+    }
59
+
60
+    if (!$chemin_cache || !$lastmodified) {
61
+        $lastmodified = time();
62
+    }
63
+
64
+    $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD');
65
+    $calculer_page = true;
66
+
67
+    // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client})
68
+    // une perennite valide a meme reponse qu'une requete HEAD (par defaut les
69
+    // pages sont dynamiques)
70
+    if (
71
+        isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
72
+        and (!defined('_VAR_MODE') or !_VAR_MODE)
73
+        and $chemin_cache
74
+        and isset($page['entetes'])
75
+        and isset($page['entetes']['Cache-Control'])
76
+        and strstr($page['entetes']['Cache-Control'], 'max-age=')
77
+        and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/')
78
+    ) {
79
+        $since = preg_replace(
80
+            '/;.*/',
81
+            '',
82
+            $_SERVER['HTTP_IF_MODIFIED_SINCE']
83
+        );
84
+        $since = str_replace('GMT', '', $since);
85
+        if (trim($since) == gmdate('D, d M Y H:i:s', $lastmodified)) {
86
+            $page['status'] = 304;
87
+            $headers_only = true;
88
+            $calculer_page = false;
89
+        }
90
+    }
91
+
92
+    // Si requete HEAD ou Last-modified compatible, ignorer le texte
93
+    // et pas de content-type (pour contrer le bouton admin de inc-public)
94
+    if (!$calculer_page) {
95
+        $page['texte'] = '';
96
+    } else {
97
+        // si la page est prise dans le cache
98
+        if (!$GLOBALS['use_cache']) {
99
+            // Informer les boutons d'admin du contexte
100
+            // (fourni par urls_decoder_url ci-dessous lors de la mise en cache)
101
+            $GLOBALS['contexte'] = $page['contexte'];
102
+
103
+            // vider les globales url propres qui ne doivent plus etre utilisees en cas
104
+            // d'inversion url => objet
105
+            // plus necessaire si on utilise bien la fonction urls_decoder_url
106
+            #unset($_SERVER['REDIRECT_url_propre']);
107
+            #unset($_ENV['url_propre']);
108
+        } else {
109
+            // Compat ascendante :
110
+            // 1. $contexte est global
111
+            // (a evacuer car urls_decoder_url gere ce probleme ?)
112
+            // et calculer la page
113
+            if (!test_espace_prive()) {
114
+                include_spip('inc/urls');
115
+                [$fond, $GLOBALS['contexte'], $url_redirect] = urls_decoder_url(
116
+                    nettoyer_uri(),
117
+                    $fond,
118
+                    $GLOBALS['contexte'],
119
+                    true
120
+                );
121
+            }
122
+            // squelette par defaut
123
+            if (!strlen($fond ?? '')) {
124
+                $fond = 'sommaire';
125
+            }
126
+
127
+            // produire la page : peut mettre a jour $lastmodified
128
+            $produire_page = charger_fonction('produire_page', 'public');
129
+            $page = $produire_page(
130
+                $fond,
131
+                $GLOBALS['contexte'],
132
+                $GLOBALS['use_cache'],
133
+                $chemin_cache,
134
+                null,
135
+                $page,
136
+                $lastmodified,
137
+                $connect
138
+            );
139
+            if ($page === '') {
140
+                $erreur = _T(
141
+                    'info_erreur_squelette2',
142
+                    ['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES]
143
+                );
144
+                erreur_squelette($erreur);
145
+                // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
146
+                $page = ['texte' => '', 'erreur' => $erreur];
147
+            }
148
+        }
149
+
150
+        if ($page and $chemin_cache) {
151
+            $page['cache'] = $chemin_cache;
152
+        }
153
+
154
+        auto_content_type($page);
155
+
156
+        $GLOBALS['flag_preserver'] |= headers_sent();
157
+
158
+        // Definir les entetes si ce n'est fait
159
+        if (!$GLOBALS['flag_preserver']) {
160
+            // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions
161
+            if (
162
+                trim($page['texte']) === ''
163
+                and _VAR_MODE !== 'debug'
164
+                and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur
165
+            ) {
166
+                $GLOBALS['contexte']['fond_erreur'] = $fond;
167
+                $page = message_page_indisponible($page, $GLOBALS['contexte']);
168
+            }
169
+            // pas de cache client en mode 'observation'
170
+            if (defined('_VAR_MODE') and _VAR_MODE) {
171
+                $page['entetes']['Cache-Control'] = 'no-cache,must-revalidate';
172
+                $page['entetes']['Pragma'] = 'no-cache';
173
+            }
174
+        }
175
+    }
176
+
177
+    // Entete Last-Modified:
178
+    // eviter d'etre incoherent en envoyant un lastmodified identique
179
+    // a celui qu'on a refuse d'honorer plus haut (cf. #655)
180
+    if (
181
+        $lastmodified
182
+        and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
183
+        and !isset($page['entetes']['Last-Modified'])
184
+    ) {
185
+        $page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT';
186
+    }
187
+
188
+    // fermer la connexion apres les headers si requete HEAD
189
+    if ($headers_only) {
190
+        $page['entetes']['Connection'] = 'close';
191
+    }
192
+
193
+    return $page;
194 194
 }
195 195
 
196 196
 /**
@@ -207,19 +207,19 @@  discard block
 block discarded – undo
207 207
  */
208 208
 function calculer_contexte() {
209 209
 
210
-	$contexte = [];
211
-	foreach ($_GET as $var => $val) {
212
-		if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
213
-			$contexte[$var] = $val;
214
-		}
215
-	}
216
-	foreach ($_POST as $var => $val) {
217
-		if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
218
-			$contexte[$var] = $val;
219
-		}
220
-	}
221
-
222
-	return $contexte;
210
+    $contexte = [];
211
+    foreach ($_GET as $var => $val) {
212
+        if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
213
+            $contexte[$var] = $val;
214
+        }
215
+    }
216
+    foreach ($_POST as $var => $val) {
217
+        if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
218
+            $contexte[$var] = $val;
219
+        }
220
+    }
221
+
222
+    return $contexte;
223 223
 }
224 224
 
225 225
 /**
@@ -230,25 +230,25 @@  discard block
 block discarded – undo
230 230
  * @return array
231 231
  */
232 232
 function calculer_contexte_implicite() {
233
-	static $notes = null;
234
-	if (is_null($notes)) {
235
-		$notes = charger_fonction('notes', 'inc', true);
236
-	}
237
-	$contexte_implicite = [
238
-		'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ?
239
-		'host' => ($_SERVER['HTTP_HOST'] ?? null),
240
-		'https' => ($_SERVER['HTTPS'] ?? ''),
241
-		'espace' => test_espace_prive(),
242
-		'marqueur' => ($GLOBALS['marqueur'] ?? ''),
243
-		'marqueur_skel' => ($GLOBALS['marqueur_skel'] ?? ''),
244
-		'notes' => $notes ? $notes('', 'contexter_cache') : '',
245
-		'spip_version_code' => $GLOBALS['spip_version_code'],
246
-	];
247
-	if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
248
-		$contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST'];
249
-	}
250
-
251
-	return $contexte_implicite;
233
+    static $notes = null;
234
+    if (is_null($notes)) {
235
+        $notes = charger_fonction('notes', 'inc', true);
236
+    }
237
+    $contexte_implicite = [
238
+        'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ?
239
+        'host' => ($_SERVER['HTTP_HOST'] ?? null),
240
+        'https' => ($_SERVER['HTTPS'] ?? ''),
241
+        'espace' => test_espace_prive(),
242
+        'marqueur' => ($GLOBALS['marqueur'] ?? ''),
243
+        'marqueur_skel' => ($GLOBALS['marqueur_skel'] ?? ''),
244
+        'notes' => $notes ? $notes('', 'contexter_cache') : '',
245
+        'spip_version_code' => $GLOBALS['spip_version_code'],
246
+    ];
247
+    if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
248
+        $contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST'];
249
+    }
250
+
251
+    return $contexte_implicite;
252 252
 }
253 253
 
254 254
 //
@@ -257,55 +257,55 @@  discard block
 block discarded – undo
257 257
 
258 258
 function auto_content_type($page) {
259 259
 
260
-	if (!isset($GLOBALS['flag_preserver'])) {
261
-		$GLOBALS['flag_preserver'] = ($page && preg_match(
262
-			'/header\s*\(\s*.content\-type:/isx',
263
-			$page['texte']
264
-		) || (isset($page['entetes']['Content-Type'])));
265
-	}
260
+    if (!isset($GLOBALS['flag_preserver'])) {
261
+        $GLOBALS['flag_preserver'] = ($page && preg_match(
262
+            '/header\s*\(\s*.content\-type:/isx',
263
+            $page['texte']
264
+        ) || (isset($page['entetes']['Content-Type'])));
265
+    }
266 266
 }
267 267
 
268 268
 function inclure_page($fond, $contexte, string $connect = '') {
269
-	$use_cache = null;
270
-	$chemin_cache = null;
271
-	$lastinclude = null;
272
-	$res = null;
273
-	static $cacher, $produire_page;
274
-
275
-	// enlever le fond de contexte inclus car sinon il prend la main
276
-	// dans les sous inclusions -> boucle infinie d'inclusion identique
277
-	// (cette precaution n'est probablement plus utile)
278
-	unset($contexte['fond']);
279
-	$page = ['contexte_implicite' => calculer_contexte_implicite()];
280
-	$page['contexte_implicite']['cache'] = $fond;
281
-	if (is_null($cacher)) {
282
-		$cacher = charger_fonction('cacher', 'public', true);
283
-	}
284
-	// Les quatre derniers parametres sont modifies par la fonction:
285
-	// emplacement, validite, et, s'il est valide, contenu & age
286
-	if ($cacher) {
287
-		$res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude);
288
-	} else {
289
-		$use_cache = -1;
290
-	}
291
-	// $res = message d'erreur : on sort de la
292
-	if ($res) {
293
-		return ['texte' => $res];
294
-	}
295
-
296
-	// Si use_cache ne vaut pas 0, la page doit etre calculee
297
-	// produire la page : peut mettre a jour $lastinclude
298
-	// le contexte_cache envoye a cacher() a ete conserve et est passe a produire
299
-	if ($use_cache) {
300
-		if (is_null($produire_page)) {
301
-			$produire_page = charger_fonction('produire_page', 'public');
302
-		}
303
-		$page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect);
304
-	}
305
-	// dans tous les cas, mettre a jour $GLOBALS['lastmodified']
306
-	$GLOBALS['lastmodified'] = max(($GLOBALS['lastmodified'] ?? 0), $lastinclude);
307
-
308
-	return $page;
269
+    $use_cache = null;
270
+    $chemin_cache = null;
271
+    $lastinclude = null;
272
+    $res = null;
273
+    static $cacher, $produire_page;
274
+
275
+    // enlever le fond de contexte inclus car sinon il prend la main
276
+    // dans les sous inclusions -> boucle infinie d'inclusion identique
277
+    // (cette precaution n'est probablement plus utile)
278
+    unset($contexte['fond']);
279
+    $page = ['contexte_implicite' => calculer_contexte_implicite()];
280
+    $page['contexte_implicite']['cache'] = $fond;
281
+    if (is_null($cacher)) {
282
+        $cacher = charger_fonction('cacher', 'public', true);
283
+    }
284
+    // Les quatre derniers parametres sont modifies par la fonction:
285
+    // emplacement, validite, et, s'il est valide, contenu & age
286
+    if ($cacher) {
287
+        $res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude);
288
+    } else {
289
+        $use_cache = -1;
290
+    }
291
+    // $res = message d'erreur : on sort de la
292
+    if ($res) {
293
+        return ['texte' => $res];
294
+    }
295
+
296
+    // Si use_cache ne vaut pas 0, la page doit etre calculee
297
+    // produire la page : peut mettre a jour $lastinclude
298
+    // le contexte_cache envoye a cacher() a ete conserve et est passe a produire
299
+    if ($use_cache) {
300
+        if (is_null($produire_page)) {
301
+            $produire_page = charger_fonction('produire_page', 'public');
302
+        }
303
+        $page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect);
304
+    }
305
+    // dans tous les cas, mettre a jour $GLOBALS['lastmodified']
306
+    $GLOBALS['lastmodified'] = max(($GLOBALS['lastmodified'] ?? 0), $lastinclude);
307
+
308
+    return $page;
309 309
 }
310 310
 
311 311
 /**
@@ -323,41 +323,41 @@  discard block
 block discarded – undo
323 323
  * @return array
324 324
  */
325 325
 function public_produire_page_dist(
326
-	$fond,
327
-	$contexte,
328
-	$use_cache,
329
-	$chemin_cache,
330
-	$contexte_cache,
331
-	&$page,
332
-	&$lastinclude,
333
-	$connect = ''
326
+    $fond,
327
+    $contexte,
328
+    $use_cache,
329
+    $chemin_cache,
330
+    $contexte_cache,
331
+    &$page,
332
+    &$lastinclude,
333
+    $connect = ''
334 334
 ) {
335
-	static $parametrer, $cacher;
336
-	if (!$parametrer) {
337
-		$parametrer = charger_fonction('parametrer', 'public');
338
-	}
339
-	$page = $parametrer($fond, $contexte, $chemin_cache, $connect);
340
-	// et on l'enregistre sur le disque
341
-	if (
342
-		$chemin_cache
343
-		and $use_cache > -1
344
-		and is_array($page)
345
-		and count($page)
346
-		and isset($page['entetes']['X-Spip-Cache'])
347
-		and $page['entetes']['X-Spip-Cache'] > 0
348
-	) {
349
-		if (is_null($cacher)) {
350
-			$cacher = charger_fonction('cacher', 'public', true);
351
-		}
352
-		$lastinclude = time();
353
-		if ($cacher) {
354
-			$cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude);
355
-		} else {
356
-			$use_cache = -1;
357
-		}
358
-	}
359
-
360
-	return $page;
335
+    static $parametrer, $cacher;
336
+    if (!$parametrer) {
337
+        $parametrer = charger_fonction('parametrer', 'public');
338
+    }
339
+    $page = $parametrer($fond, $contexte, $chemin_cache, $connect);
340
+    // et on l'enregistre sur le disque
341
+    if (
342
+        $chemin_cache
343
+        and $use_cache > -1
344
+        and is_array($page)
345
+        and count($page)
346
+        and isset($page['entetes']['X-Spip-Cache'])
347
+        and $page['entetes']['X-Spip-Cache'] > 0
348
+    ) {
349
+        if (is_null($cacher)) {
350
+            $cacher = charger_fonction('cacher', 'public', true);
351
+        }
352
+        $lastinclude = time();
353
+        if ($cacher) {
354
+            $cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude);
355
+        } else {
356
+            $use_cache = -1;
357
+        }
358
+    }
359
+
360
+    return $page;
361 361
 }
362 362
 
363 363
 // Fonction inseree par le compilateur dans le code compile.
@@ -371,14 +371,14 @@  discard block
 block discarded – undo
371 371
 // 4: langue
372 372
 
373 373
 function inserer_balise_dynamique($contexte_exec, $contexte_compil) {
374
-	arguments_balise_dyn_depuis_modele(null, 'reset');
375
-
376
-	if (!is_array($contexte_exec)) {
377
-		echo $contexte_exec;
378
-	} // message d'erreur etc
379
-	else {
380
-		inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
381
-	}
374
+    arguments_balise_dyn_depuis_modele(null, 'reset');
375
+
376
+    if (!is_array($contexte_exec)) {
377
+        echo $contexte_exec;
378
+    } // message d'erreur etc
379
+    else {
380
+        inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
381
+    }
382 382
 }
383 383
 
384 384
 /**
@@ -391,101 +391,101 @@  discard block
 block discarded – undo
391 391
  * @return string|void
392 392
  */
393 393
 function inclure_balise_dynamique($texte, $echo = true, $contexte_compil = []) {
394
-	if (is_array($texte)) {
395
-		[$fond, $delainc, $contexte_inclus] = $texte;
396
-
397
-		// delais a l'ancienne, c'est pratiquement mort
398
-		$d = $GLOBALS['delais'] ?? null;
399
-		$GLOBALS['delais'] = $delainc;
400
-
401
-		$page = recuperer_fond(
402
-			$fond,
403
-			$contexte_inclus,
404
-			['trim' => false, 'raw' => true, 'compil' => $contexte_compil]
405
-		);
406
-
407
-		$texte = $page['texte'];
408
-
409
-		$GLOBALS['delais'] = $d;
410
-		// Faire remonter les entetes
411
-		if (
412
-			isset($page['entetes'])
413
-			and is_array($page['entetes'])
414
-		) {
415
-			// mais pas toutes
416
-			unset($page['entetes']['X-Spip-Cache']);
417
-			unset($page['entetes']['Content-Type']);
418
-			if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) {
419
-				if (!is_array($GLOBALS['page']['entetes'])) {
420
-					$GLOBALS['page']['entetes'] = [];
421
-				}
422
-				$GLOBALS['page']['entetes'] =
423
-					array_merge($GLOBALS['page']['entetes'], $page['entetes']);
424
-			}
425
-		}
426
-		// _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
427
-		if (
428
-			isset($page['contexte']['_pipelines'])
429
-			and is_array($page['contexte']['_pipelines'])
430
-			and count($page['contexte']['_pipelines'])
431
-		) {
432
-			foreach ($page['contexte']['_pipelines'] as $pipe => $args) {
433
-				$args['contexte'] = $page['contexte'];
434
-				unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
435
-				$texte = pipeline(
436
-					$pipe,
437
-					[
438
-						'data' => $texte,
439
-						'args' => $args
440
-					]
441
-				);
442
-			}
443
-		}
444
-	}
445
-
446
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
447
-		// compatibilite : avant on donnait le numero de ligne ou rien.
448
-		$ligne = intval($contexte_compil[3] ?? $contexte_compil);
449
-		$GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
450
-	}
451
-	if ($echo) {
452
-		echo $texte;
453
-	} else {
454
-		return $texte;
455
-	}
394
+    if (is_array($texte)) {
395
+        [$fond, $delainc, $contexte_inclus] = $texte;
396
+
397
+        // delais a l'ancienne, c'est pratiquement mort
398
+        $d = $GLOBALS['delais'] ?? null;
399
+        $GLOBALS['delais'] = $delainc;
400
+
401
+        $page = recuperer_fond(
402
+            $fond,
403
+            $contexte_inclus,
404
+            ['trim' => false, 'raw' => true, 'compil' => $contexte_compil]
405
+        );
406
+
407
+        $texte = $page['texte'];
408
+
409
+        $GLOBALS['delais'] = $d;
410
+        // Faire remonter les entetes
411
+        if (
412
+            isset($page['entetes'])
413
+            and is_array($page['entetes'])
414
+        ) {
415
+            // mais pas toutes
416
+            unset($page['entetes']['X-Spip-Cache']);
417
+            unset($page['entetes']['Content-Type']);
418
+            if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) {
419
+                if (!is_array($GLOBALS['page']['entetes'])) {
420
+                    $GLOBALS['page']['entetes'] = [];
421
+                }
422
+                $GLOBALS['page']['entetes'] =
423
+                    array_merge($GLOBALS['page']['entetes'], $page['entetes']);
424
+            }
425
+        }
426
+        // _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
427
+        if (
428
+            isset($page['contexte']['_pipelines'])
429
+            and is_array($page['contexte']['_pipelines'])
430
+            and count($page['contexte']['_pipelines'])
431
+        ) {
432
+            foreach ($page['contexte']['_pipelines'] as $pipe => $args) {
433
+                $args['contexte'] = $page['contexte'];
434
+                unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
435
+                $texte = pipeline(
436
+                    $pipe,
437
+                    [
438
+                        'data' => $texte,
439
+                        'args' => $args
440
+                    ]
441
+                );
442
+            }
443
+        }
444
+    }
445
+
446
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
447
+        // compatibilite : avant on donnait le numero de ligne ou rien.
448
+        $ligne = intval($contexte_compil[3] ?? $contexte_compil);
449
+        $GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
450
+    }
451
+    if ($echo) {
452
+        echo $texte;
453
+    } else {
454
+        return $texte;
455
+    }
456 456
 }
457 457
 
458 458
 function message_page_indisponible($page, $contexte) {
459
-	static $deja = false;
460
-	if ($deja) {
461
-		return 'erreur';
462
-	}
463
-	$codes = [
464
-		'404' => '404 Not Found',
465
-		'503' => '503 Service Unavailable',
466
-	];
467
-
468
-	$contexte['status'] = ($page !== false) ? '404' : '503';
469
-	$contexte['code'] = $codes[$contexte['status']];
470
-	$contexte['fond'] = '404'; // gere les 2 erreurs
471
-	if (!isset($contexte['lang'])) {
472
-		include_spip('inc/lang');
473
-		$contexte['lang'] = $GLOBALS['spip_lang'];
474
-	}
475
-
476
-	$deja = true;
477
-	// passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
478
-	// ex restriction d'acces => 401
479
-	$contexte = pipeline('page_indisponible', $contexte);
480
-
481
-	// produire la page d'erreur
482
-	$page = inclure_page($contexte['fond'], $contexte);
483
-	if (!$page) {
484
-		$page = inclure_page('404', $contexte);
485
-	}
486
-	$page['status'] = $contexte['status'];
487
-
488
-	return $page;
459
+    static $deja = false;
460
+    if ($deja) {
461
+        return 'erreur';
462
+    }
463
+    $codes = [
464
+        '404' => '404 Not Found',
465
+        '503' => '503 Service Unavailable',
466
+    ];
467
+
468
+    $contexte['status'] = ($page !== false) ? '404' : '503';
469
+    $contexte['code'] = $codes[$contexte['status']];
470
+    $contexte['fond'] = '404'; // gere les 2 erreurs
471
+    if (!isset($contexte['lang'])) {
472
+        include_spip('inc/lang');
473
+        $contexte['lang'] = $GLOBALS['spip_lang'];
474
+    }
475
+
476
+    $deja = true;
477
+    // passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
478
+    // ex restriction d'acces => 401
479
+    $contexte = pipeline('page_indisponible', $contexte);
480
+
481
+    // produire la page d'erreur
482
+    $page = inclure_page($contexte['fond'], $contexte);
483
+    if (!$page) {
484
+        $page = inclure_page('404', $contexte);
485
+    }
486
+    $page['status'] = $contexte['status'];
487
+
488
+    return $page;
489 489
 }
490 490
 
491 491
 /**
@@ -497,44 +497,44 @@  discard block
 block discarded – undo
497 497
  * @return mixed
498 498
  */
499 499
 function arguments_balise_dyn_depuis_modele($arg, $operation = 'set') {
500
-	static $balise_dyn_appellee_par_modele = null;
501
-	switch ($operation) {
502
-		case 'read':
503
-			return $balise_dyn_appellee_par_modele;
504
-		case 'reset':
505
-			$balise_dyn_appellee_par_modele = null;
506
-			return null;
507
-		case 'set':
508
-		default:
509
-			$balise_dyn_appellee_par_modele = $arg;
510
-			return $arg;
511
-	}
500
+    static $balise_dyn_appellee_par_modele = null;
501
+    switch ($operation) {
502
+        case 'read':
503
+            return $balise_dyn_appellee_par_modele;
504
+        case 'reset':
505
+            $balise_dyn_appellee_par_modele = null;
506
+            return null;
507
+        case 'set':
508
+        default:
509
+            $balise_dyn_appellee_par_modele = $arg;
510
+            return $arg;
511
+    }
512 512
 }
513 513
 
514 514
 // temporairement ici : a mettre dans le futur inc/modeles
515 515
 // creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array()
516 516
 function creer_contexte_de_modele($args) {
517
-	$contexte = [];
518
-	foreach ($args as $var => $val) {
519
-		if (is_int($var)) { // argument pas formate
520
-			if (in_array($val, ['left', 'right', 'center'])) {
521
-				$var = 'align';
522
-				$contexte[$var] = $val;
523
-			} else {
524
-				$args = explode('=', $val);
525
-				if (count($args) >= 2) { // Flashvars=arg1=machin&arg2=truc genere plus de deux args
526
-				$contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1);
527
-				} else // notation abregee
528
-				{
529
-					$contexte[trim($val)] = trim($val);
530
-				}
531
-			}
532
-		} else {
533
-			$contexte[$var] = $val;
534
-		}
535
-	}
536
-
537
-	return $contexte;
517
+    $contexte = [];
518
+    foreach ($args as $var => $val) {
519
+        if (is_int($var)) { // argument pas formate
520
+            if (in_array($val, ['left', 'right', 'center'])) {
521
+                $var = 'align';
522
+                $contexte[$var] = $val;
523
+            } else {
524
+                $args = explode('=', $val);
525
+                if (count($args) >= 2) { // Flashvars=arg1=machin&arg2=truc genere plus de deux args
526
+                $contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1);
527
+                } else // notation abregee
528
+                {
529
+                    $contexte[trim($val)] = trim($val);
530
+                }
531
+            }
532
+        } else {
533
+            $contexte[$var] = $val;
534
+        }
535
+    }
536
+
537
+    return $contexte;
538 538
 }
539 539
 
540 540
 /**
@@ -549,43 +549,43 @@  discard block
 block discarded – undo
549 549
  * @return string
550 550
  */
551 551
 function styliser_modele($modele, $id, $contexte = null) {
552
-	static $styliseurs = null;
553
-	if (is_null($styliseurs)) {
554
-		$tables_objet = lister_tables_objets_sql();
555
-		foreach ($tables_objet as $table => $desc) {
556
-			if (
557
-				isset($desc['modeles']) and $desc['modeles']
558
-				and isset($desc['modeles_styliser']) and $desc['modeles_styliser']
559
-				and function_exists($desc['modeles_styliser'])
560
-			) {
561
-				$primary = id_table_objet($table);
562
-				foreach ($desc['modeles'] as $m) {
563
-					$styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']];
564
-				}
565
-			}
566
-		}
567
-	}
568
-
569
-	if (isset($styliseurs[$modele])) {
570
-		$styliseur = $styliseurs[$modele]['callback'];
571
-		$primary = $styliseurs[$modele]['primary'];
572
-		if (is_null($id) and $contexte) {
573
-			if (isset($contexte['id'])) {
574
-				$id = $contexte['id'];
575
-			} elseif (isset($contexte[$primary])) {
576
-				$id = $contexte[$primary];
577
-			}
578
-		}
579
-		if (is_null($id)) {
580
-			$msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]);
581
-			erreur_squelette($msg);
582
-			// on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant
583
-			$id = 0;
584
-		}
585
-		$modele = $styliseur($modele, $id);
586
-	}
587
-
588
-	return $modele;
552
+    static $styliseurs = null;
553
+    if (is_null($styliseurs)) {
554
+        $tables_objet = lister_tables_objets_sql();
555
+        foreach ($tables_objet as $table => $desc) {
556
+            if (
557
+                isset($desc['modeles']) and $desc['modeles']
558
+                and isset($desc['modeles_styliser']) and $desc['modeles_styliser']
559
+                and function_exists($desc['modeles_styliser'])
560
+            ) {
561
+                $primary = id_table_objet($table);
562
+                foreach ($desc['modeles'] as $m) {
563
+                    $styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']];
564
+                }
565
+            }
566
+        }
567
+    }
568
+
569
+    if (isset($styliseurs[$modele])) {
570
+        $styliseur = $styliseurs[$modele]['callback'];
571
+        $primary = $styliseurs[$modele]['primary'];
572
+        if (is_null($id) and $contexte) {
573
+            if (isset($contexte['id'])) {
574
+                $id = $contexte['id'];
575
+            } elseif (isset($contexte[$primary])) {
576
+                $id = $contexte[$primary];
577
+            }
578
+        }
579
+        if (is_null($id)) {
580
+            $msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]);
581
+            erreur_squelette($msg);
582
+            // on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant
583
+            $id = 0;
584
+        }
585
+        $modele = $styliseur($modele, $id);
586
+    }
587
+
588
+    return $modele;
589 589
 }
590 590
 
591 591
 /**
@@ -602,102 +602,102 @@  discard block
 block discarded – undo
602 602
  */
603 603
 function inclure_modele($type, $id, $params, $lien, string $connect = '', $env = []) {
604 604
 
605
-	static $compteur;
606
-	if (++$compteur > 10) {
607
-		return '';
608
-	} # ne pas boucler indefiniment
609
-
610
-	$type = strtolower($type);
611
-	$type = styliser_modele($type, $id);
612
-
613
-	$fond = $class = '';
614
-
615
-	$params = array_filter(explode('|', $params));
616
-	if ($params) {
617
-		$soustype = current($params);
618
-		$soustype = strtolower(trim($soustype));
619
-		if (in_array($soustype, ['left', 'right', 'center', 'ajax'])) {
620
-			$soustype = next($params);
621
-			$soustype = strtolower($soustype);
622
-		}
623
-
624
-		if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
625
-			if (!trouve_modele($fond = ($type . '_' . $soustype))) {
626
-				$fond = '';
627
-				$class = $soustype;
628
-			}
629
-			// enlever le sous type des params
630
-			$params = array_diff($params, [$soustype]);
631
-		}
632
-	}
633
-
634
-	// Si ca marche pas en precisant le sous-type, prendre le type
635
-	if (!$fond and !trouve_modele($fond = $type)) {
636
-		spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE);
637
-
638
-		return false;
639
-	}
640
-	$fond = 'modeles/' . $fond;
641
-	// Creer le contexte
642
-	$contexte = $env;
643
-	$contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte
644
-
645
-	// Le numero du modele est mis dans l'environnement
646
-	// d'une part sous l'identifiant "id"
647
-	// et d'autre part sous l'identifiant de la cle primaire
648
-	// par la fonction id_table_objet,
649
-	// (<article1> =>> article =>> id_article =>> id_article=1)
650
-	$_id = id_table_objet($type);
651
-	$contexte['id'] = $contexte[$_id] = $id;
652
-
653
-	if (isset($class)) {
654
-		$contexte['class'] = $class;
655
-	}
656
-
657
-	// Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url]
658
-	if ($lien) {
659
-		# un eventuel guillemet (") sera reechappe par #ENV
660
-		$contexte['lien'] = str_replace('&quot;', '"', $lien['href']);
661
-		$contexte['lien_class'] = $lien['class'];
662
-		$contexte['lien_mime'] = $lien['mime'];
663
-		$contexte['lien_title'] = $lien['title'];
664
-		$contexte['lien_hreflang'] = $lien['hreflang'];
665
-	}
666
-
667
-	// Traiter les parametres
668
-	// par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
669
-	$arg_list = creer_contexte_de_modele($params);
670
-	$contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
671
-	$contexte = array_merge($contexte, $arg_list);
672
-
673
-	// Appliquer le modele avec le contexte
674
-	$retour = recuperer_fond($fond, $contexte, [], $connect);
675
-
676
-	// Regarder si le modele tient compte des liens (il *doit* alors indiquer
677
-	// spip_lien_ok dans les classes de son conteneur de premier niveau ;
678
-	// sinon, s'il y a un lien, on l'ajoute classiquement
679
-	if (
680
-		strstr(
681
-			' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
682
-			'spip_lien_ok'
683
-		)
684
-	) {
685
-		$retour = inserer_attribut(
686
-			$retour,
687
-			'class',
688
-			trim(str_replace(' spip_lien_ok ', ' ', " $classes "))
689
-		);
690
-	} else {
691
-		if ($lien) {
692
-			$retour = '<a href="' . $lien['href'] . '" class="' . $lien['class'] . '">' . $retour . '</a>';
693
-		}
694
-	}
695
-
696
-	$compteur--;
697
-
698
-	return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax')
699
-		? encoder_contexte_ajax($contexte, '', $retour)
700
-		: $retour;
605
+    static $compteur;
606
+    if (++$compteur > 10) {
607
+        return '';
608
+    } # ne pas boucler indefiniment
609
+
610
+    $type = strtolower($type);
611
+    $type = styliser_modele($type, $id);
612
+
613
+    $fond = $class = '';
614
+
615
+    $params = array_filter(explode('|', $params));
616
+    if ($params) {
617
+        $soustype = current($params);
618
+        $soustype = strtolower(trim($soustype));
619
+        if (in_array($soustype, ['left', 'right', 'center', 'ajax'])) {
620
+            $soustype = next($params);
621
+            $soustype = strtolower($soustype);
622
+        }
623
+
624
+        if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
625
+            if (!trouve_modele($fond = ($type . '_' . $soustype))) {
626
+                $fond = '';
627
+                $class = $soustype;
628
+            }
629
+            // enlever le sous type des params
630
+            $params = array_diff($params, [$soustype]);
631
+        }
632
+    }
633
+
634
+    // Si ca marche pas en precisant le sous-type, prendre le type
635
+    if (!$fond and !trouve_modele($fond = $type)) {
636
+        spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE);
637
+
638
+        return false;
639
+    }
640
+    $fond = 'modeles/' . $fond;
641
+    // Creer le contexte
642
+    $contexte = $env;
643
+    $contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte
644
+
645
+    // Le numero du modele est mis dans l'environnement
646
+    // d'une part sous l'identifiant "id"
647
+    // et d'autre part sous l'identifiant de la cle primaire
648
+    // par la fonction id_table_objet,
649
+    // (<article1> =>> article =>> id_article =>> id_article=1)
650
+    $_id = id_table_objet($type);
651
+    $contexte['id'] = $contexte[$_id] = $id;
652
+
653
+    if (isset($class)) {
654
+        $contexte['class'] = $class;
655
+    }
656
+
657
+    // Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url]
658
+    if ($lien) {
659
+        # un eventuel guillemet (") sera reechappe par #ENV
660
+        $contexte['lien'] = str_replace('&quot;', '"', $lien['href']);
661
+        $contexte['lien_class'] = $lien['class'];
662
+        $contexte['lien_mime'] = $lien['mime'];
663
+        $contexte['lien_title'] = $lien['title'];
664
+        $contexte['lien_hreflang'] = $lien['hreflang'];
665
+    }
666
+
667
+    // Traiter les parametres
668
+    // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
669
+    $arg_list = creer_contexte_de_modele($params);
670
+    $contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
671
+    $contexte = array_merge($contexte, $arg_list);
672
+
673
+    // Appliquer le modele avec le contexte
674
+    $retour = recuperer_fond($fond, $contexte, [], $connect);
675
+
676
+    // Regarder si le modele tient compte des liens (il *doit* alors indiquer
677
+    // spip_lien_ok dans les classes de son conteneur de premier niveau ;
678
+    // sinon, s'il y a un lien, on l'ajoute classiquement
679
+    if (
680
+        strstr(
681
+            ' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
682
+            'spip_lien_ok'
683
+        )
684
+    ) {
685
+        $retour = inserer_attribut(
686
+            $retour,
687
+            'class',
688
+            trim(str_replace(' spip_lien_ok ', ' ', " $classes "))
689
+        );
690
+    } else {
691
+        if ($lien) {
692
+            $retour = '<a href="' . $lien['href'] . '" class="' . $lien['class'] . '">' . $retour . '</a>';
693
+        }
694
+    }
695
+
696
+    $compteur--;
697
+
698
+    return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax')
699
+        ? encoder_contexte_ajax($contexte, '', $retour)
700
+        : $retour;
701 701
 }
702 702
 
703 703
 // Un inclure_page qui marche aussi pour l'espace prive
@@ -706,105 +706,105 @@  discard block
 block discarded – undo
706 706
 // 	recuperer_fond($fond,$contexte,array('raw'=>true))
707 707
 function evaluer_fond($fond, $contexte = [], string $connect = '') {
708 708
 
709
-	$page = inclure_page($fond, $contexte, $connect);
710
-
711
-	if (!$page) {
712
-		return $page;
713
-	}
714
-	// eval $page et affecte $res
715
-	include _ROOT_RESTREINT . 'public/evaluer_page.php';
716
-
717
-	// Lever un drapeau (global) si le fond utilise #SESSION
718
-	// a destination de public/parametrer
719
-	// pour remonter vers les inclusions appelantes
720
-	// il faut bien lever ce drapeau apres avoir evalue le fond
721
-	// pour ne pas faire descendre le flag vers les inclusions appelees
722
-	if (
723
-		isset($page['invalideurs'])
724
-		and isset($page['invalideurs']['session'])
725
-	) {
726
-		$GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
727
-	}
728
-
729
-	return $page;
709
+    $page = inclure_page($fond, $contexte, $connect);
710
+
711
+    if (!$page) {
712
+        return $page;
713
+    }
714
+    // eval $page et affecte $res
715
+    include _ROOT_RESTREINT . 'public/evaluer_page.php';
716
+
717
+    // Lever un drapeau (global) si le fond utilise #SESSION
718
+    // a destination de public/parametrer
719
+    // pour remonter vers les inclusions appelantes
720
+    // il faut bien lever ce drapeau apres avoir evalue le fond
721
+    // pour ne pas faire descendre le flag vers les inclusions appelees
722
+    if (
723
+        isset($page['invalideurs'])
724
+        and isset($page['invalideurs']['session'])
725
+    ) {
726
+        $GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
727
+    }
728
+
729
+    return $page;
730 730
 }
731 731
 
732 732
 
733 733
 function page_base_href(&$texte) {
734
-	static $set_html_base = null;
735
-	if (is_null($set_html_base)) {
736
-		if (!defined('_SET_HTML_BASE')) {
737
-			// si la profondeur est superieure a 1
738
-			// est que ce n'est pas une url page ni une url action
739
-			// activer par defaut
740
-		$set_html_base = ((
741
-				$GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2)
742
-				and _request(_SPIP_PAGE) !== 'login'
743
-				and !_request('action')) ? true : false);
744
-		} else {
745
-			$set_html_base = _SET_HTML_BASE;
746
-		}
747
-	}
748
-
749
-	if (
750
-		$set_html_base
751
-		and isset($GLOBALS['html']) and $GLOBALS['html']
752
-		and $GLOBALS['profondeur_url'] > 0
753
-		and ($poshead = strpos($texte, '</head>')) !== false
754
-	) {
755
-		$head = substr($texte, 0, $poshead);
756
-		$insert = false;
757
-		$href_base = false;
758
-		if (strpos($head, '<base') === false) {
759
-			$insert = true;
760
-		} else {
761
-			// si aucun <base ...> n'a de href il faut en inserer un
762
-			// sinon juste re-ecrire les ancres si besoin
763
-			$insert = true;
764
-			include_spip('inc/filtres');
765
-			$bases = extraire_balises($head, 'base');
766
-			foreach ($bases as $base) {
767
-				if ($href_base = extraire_attribut($base, 'href')) {
768
-					$insert = false;
769
-					break;
770
-				}
771
-			}
772
-		}
773
-
774
-		if ($insert) {
775
-			include_spip('inc/filtres_mini');
776
-			// ajouter un base qui reglera tous les liens relatifs
777
-			$href_base = url_absolue('./');
778
-			$base = "\n<base href=\"$href_base\" />";
779
-			if (($pos = strpos($head, '<head>')) !== false) {
780
-				$head = substr_replace($head, $base, $pos + 6, 0);
781
-			} elseif (preg_match(',<head[^>]*>,i', $head, $r)) {
782
-				$head = str_replace($r[0], $r[0] . $base, $head);
783
-			}
784
-			$texte = $head . substr($texte, $poshead);
785
-		}
786
-		if ($href_base) {
787
-			// gerer les ancres
788
-			$base = $_SERVER['REQUEST_URI'];
789
-			// pas de guillemets ni < dans l'URL qu'on insere dans le HTML
790
-			if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) {
791
-				$base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base);
792
-			}
793
-			if (strpos($texte, "href='#") !== false) {
794
-				$texte = str_replace("href='#", "href='$base#", $texte);
795
-			}
796
-			if (strpos($texte, 'href="#') !== false) {
797
-				$texte = str_replace('href="#', "href=\"$base#", $texte);
798
-			}
799
-		}
800
-	}
734
+    static $set_html_base = null;
735
+    if (is_null($set_html_base)) {
736
+        if (!defined('_SET_HTML_BASE')) {
737
+            // si la profondeur est superieure a 1
738
+            // est que ce n'est pas une url page ni une url action
739
+            // activer par defaut
740
+        $set_html_base = ((
741
+                $GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2)
742
+                and _request(_SPIP_PAGE) !== 'login'
743
+                and !_request('action')) ? true : false);
744
+        } else {
745
+            $set_html_base = _SET_HTML_BASE;
746
+        }
747
+    }
748
+
749
+    if (
750
+        $set_html_base
751
+        and isset($GLOBALS['html']) and $GLOBALS['html']
752
+        and $GLOBALS['profondeur_url'] > 0
753
+        and ($poshead = strpos($texte, '</head>')) !== false
754
+    ) {
755
+        $head = substr($texte, 0, $poshead);
756
+        $insert = false;
757
+        $href_base = false;
758
+        if (strpos($head, '<base') === false) {
759
+            $insert = true;
760
+        } else {
761
+            // si aucun <base ...> n'a de href il faut en inserer un
762
+            // sinon juste re-ecrire les ancres si besoin
763
+            $insert = true;
764
+            include_spip('inc/filtres');
765
+            $bases = extraire_balises($head, 'base');
766
+            foreach ($bases as $base) {
767
+                if ($href_base = extraire_attribut($base, 'href')) {
768
+                    $insert = false;
769
+                    break;
770
+                }
771
+            }
772
+        }
773
+
774
+        if ($insert) {
775
+            include_spip('inc/filtres_mini');
776
+            // ajouter un base qui reglera tous les liens relatifs
777
+            $href_base = url_absolue('./');
778
+            $base = "\n<base href=\"$href_base\" />";
779
+            if (($pos = strpos($head, '<head>')) !== false) {
780
+                $head = substr_replace($head, $base, $pos + 6, 0);
781
+            } elseif (preg_match(',<head[^>]*>,i', $head, $r)) {
782
+                $head = str_replace($r[0], $r[0] . $base, $head);
783
+            }
784
+            $texte = $head . substr($texte, $poshead);
785
+        }
786
+        if ($href_base) {
787
+            // gerer les ancres
788
+            $base = $_SERVER['REQUEST_URI'];
789
+            // pas de guillemets ni < dans l'URL qu'on insere dans le HTML
790
+            if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) {
791
+                $base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base);
792
+            }
793
+            if (strpos($texte, "href='#") !== false) {
794
+                $texte = str_replace("href='#", "href='$base#", $texte);
795
+            }
796
+            if (strpos($texte, 'href="#') !== false) {
797
+                $texte = str_replace('href="#', "href=\"$base#", $texte);
798
+            }
799
+        }
800
+    }
801 801
 }
802 802
 
803 803
 
804 804
 // Envoyer les entetes, en retenant ceux qui sont a usage interne
805 805
 // et demarrent par X-Spip-...
806 806
 function envoyer_entetes($entetes) {
807
-	foreach ($entetes as $k => $v) { #	if (strncmp($k, 'X-Spip-', 7))
808
-	@header(strlen($v) ? "$k: $v" : $k);
809
-	}
807
+    foreach ($entetes as $k => $v) { #	if (strncmp($k, 'X-Spip-', 7))
808
+    @header(strlen($v) ? "$k: $v" : $k);
809
+    }
810 810
 }
Please login to merge, or discard this patch.
ecrire/public/boucles.php 1 patch
Indentation   +24 added lines, -24 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
 
@@ -31,7 +31,7 @@  discard block
 block discarded – undo
31 31
  *     Code PHP compilé de la boucle
32 32
  **/
33 33
 function boucle_DEFAUT_dist($id_boucle, &$boucles) {
34
-	return calculer_boucle($id_boucle, $boucles);
34
+    return calculer_boucle($id_boucle, $boucles);
35 35
 }
36 36
 
37 37
 
@@ -50,7 +50,7 @@  discard block
 block discarded – undo
50 50
  *     Code PHP compilé de la boucle
51 51
  **/
52 52
 function boucle_BOUCLE_dist($id_boucle, &$boucles) {
53
-	return calculer_boucle($id_boucle, $boucles);
53
+    return calculer_boucle($id_boucle, $boucles);
54 54
 }
55 55
 
56 56
 
@@ -80,30 +80,30 @@  discard block
 block discarded – undo
80 80
  *     Code PHP compilé de la boucle
81 81
  **/
82 82
 function boucle_HIERARCHIE_dist($id_boucle, &$boucles) {
83
-	$boucle = &$boucles[$id_boucle];
84
-	$id_table = $boucle->id_table . '.id_rubrique';
83
+    $boucle = &$boucles[$id_boucle];
84
+    $id_table = $boucle->id_table . '.id_rubrique';
85 85
 
86
-	// Si la boucle mere est une boucle RUBRIQUES il faut ignorer la feuille
87
-	// sauf en presence du critere {tout} (vu par phraser_html)
88
-	// ou {id_article} qui positionne aussi le {tout}
86
+    // Si la boucle mere est une boucle RUBRIQUES il faut ignorer la feuille
87
+    // sauf en presence du critere {tout} (vu par phraser_html)
88
+    // ou {id_article} qui positionne aussi le {tout}
89 89
 
90
-	$boucle->hierarchie = 'if (!($id_rubrique = intval('
91
-		. calculer_argument_precedent($boucle->id_boucle, 'id_rubrique', $boucles)
92
-		. ")))\n\t\treturn '';\n\t"
93
-		. "include_spip('inc/rubriques');\n\t"
94
-		. '$hierarchie = calcul_hierarchie_in($id_rubrique,'
95
-		. (isset($boucle->modificateur['tout']) ? 'true' : 'false')
96
-		. ");\n\t"
97
-		. 'if (!$hierarchie) return "";' . "\n\t";
90
+    $boucle->hierarchie = 'if (!($id_rubrique = intval('
91
+        . calculer_argument_precedent($boucle->id_boucle, 'id_rubrique', $boucles)
92
+        . ")))\n\t\treturn '';\n\t"
93
+        . "include_spip('inc/rubriques');\n\t"
94
+        . '$hierarchie = calcul_hierarchie_in($id_rubrique,'
95
+        . (isset($boucle->modificateur['tout']) ? 'true' : 'false')
96
+        . ");\n\t"
97
+        . 'if (!$hierarchie) return "";' . "\n\t";
98 98
 
99
-	$boucle->where[] = ["'IN'", "'$id_table'", '"($hierarchie)"'];
99
+    $boucle->where[] = ["'IN'", "'$id_table'", '"($hierarchie)"'];
100 100
 
101
-	$order = "FIELD($id_table, \$hierarchie)";
102
-	if (!isset($boucle->default_order[0]) || $boucle->default_order[0] != ' DESC') {
103
-		$boucle->default_order[] = "\"$order\"";
104
-	} else {
105
-		$boucle->default_order[0] = "\"$order DESC\"";
106
-	}
101
+    $order = "FIELD($id_table, \$hierarchie)";
102
+    if (!isset($boucle->default_order[0]) || $boucle->default_order[0] != ' DESC') {
103
+        $boucle->default_order[] = "\"$order\"";
104
+    } else {
105
+        $boucle->default_order[0] = "\"$order DESC\"";
106
+    }
107 107
 
108
-	return calculer_boucle($id_boucle, $boucles);
108
+    return calculer_boucle($id_boucle, $boucles);
109 109
 }
Please login to merge, or discard this patch.
ecrire/public/fonctions.php 1 patch
Indentation   +367 added lines, -367 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
  **/
23 23
 
24 24
 if (!defined('_ECRIRE_INC_VERSION')) {
25
-	return;
25
+    return;
26 26
 }
27 27
 
28 28
 // public/interfaces definit des traitements sur les champs qui utilisent des fonctions de inc/texte
@@ -54,75 +54,75 @@  discard block
 block discarded – undo
54 54
  *     Introduction calculée
55 55
  **/
56 56
 function filtre_introduction_dist($descriptif, $texte, $longueur, $connect, $suite = null) {
57
-	// Si un descriptif est envoye, on l'utilise directement
58
-	if (strlen($descriptif)) {
59
-		return appliquer_traitement_champ($descriptif, 'introduction', '', [], $connect);
60
-	}
61
-
62
-	// De preference ce qui est marque <intro>...</intro>
63
-	$intro = '';
64
-	$texte = preg_replace(',(</?)intro>,i', "\\1intro>", $texte); // minuscules
65
-	while ($fin = strpos($texte, '</intro>')) {
66
-		$zone = substr($texte, 0, $fin);
67
-		$texte = substr($texte, $fin + strlen('</intro>'));
68
-		if (($deb = strpos($zone, '<intro>')) || str_starts_with($zone, '<intro>')) {
69
-			$zone = substr($zone, $deb + 7);
70
-		}
71
-		$intro .= $zone;
72
-	}
73
-
74
-	// [12025] On ne *PEUT* pas couper simplement ici car c'est du texte brut,
75
-	// qui inclus raccourcis et modeles
76
-	// un simple <articlexx> peut etre ensuite transforme en 1000 lignes ...
77
-	// par ailleurs le nettoyage des raccourcis ne tient pas compte
78
-	// des surcharges et enrichissement de propre
79
-	// couper doit se faire apres propre
80
-	//$texte = nettoyer_raccourcis_typo($intro ? $intro : $texte, $connect);
81
-
82
-	// Cependant pour des questions de perfs on coupe quand meme, en prenant
83
-	// large et en se mefiant des tableaux #1323
84
-
85
-	if (strlen($intro)) {
86
-		$texte = $intro;
87
-	} else {
88
-		if (
89
-			!str_contains("\n" . $texte, "\n|")
90
-			&& strlen($texte) > 2.5 * $longueur
91
-		) {
92
-			if (str_contains($texte, '<multi')) {
93
-				$texte = extraire_multi($texte);
94
-			}
95
-			$texte = couper($texte, 2 * $longueur);
96
-		}
97
-	}
98
-
99
-	// ne pas tenir compte des notes
100
-	if ($notes = charger_fonction('notes', 'inc', true)) {
101
-		$notes('', 'empiler');
102
-	}
103
-	// Supprimer les modèles avant le propre afin d'éviter qu'ils n'ajoutent du texte indésirable
104
-	// dans l'introduction.
105
-	$texte = supprime_img($texte, '');
106
-	$texte = appliquer_traitement_champ($texte, 'introduction', '', [], $connect);
107
-
108
-	if ($notes) {
109
-		$notes('', 'depiler');
110
-	}
111
-
112
-	if (is_null($suite) && defined('_INTRODUCTION_SUITE')) {
113
-		$suite = _INTRODUCTION_SUITE;
114
-	}
115
-	$texte = couper($texte, $longueur, $suite);
116
-	// comme on a coupe il faut repasser la typo (on a perdu les insecables)
117
-	$texte = typo($texte, true, $connect, []);
118
-
119
-	// et reparagrapher si necessaire (coherence avec le cas descriptif)
120
-	// une introduction a tojours un <p>
121
-	if ($GLOBALS['toujours_paragrapher']) { // Fermer les paragraphes
122
-	$texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']);
123
-	}
124
-
125
-	return $texte;
57
+    // Si un descriptif est envoye, on l'utilise directement
58
+    if (strlen($descriptif)) {
59
+        return appliquer_traitement_champ($descriptif, 'introduction', '', [], $connect);
60
+    }
61
+
62
+    // De preference ce qui est marque <intro>...</intro>
63
+    $intro = '';
64
+    $texte = preg_replace(',(</?)intro>,i', "\\1intro>", $texte); // minuscules
65
+    while ($fin = strpos($texte, '</intro>')) {
66
+        $zone = substr($texte, 0, $fin);
67
+        $texte = substr($texte, $fin + strlen('</intro>'));
68
+        if (($deb = strpos($zone, '<intro>')) || str_starts_with($zone, '<intro>')) {
69
+            $zone = substr($zone, $deb + 7);
70
+        }
71
+        $intro .= $zone;
72
+    }
73
+
74
+    // [12025] On ne *PEUT* pas couper simplement ici car c'est du texte brut,
75
+    // qui inclus raccourcis et modeles
76
+    // un simple <articlexx> peut etre ensuite transforme en 1000 lignes ...
77
+    // par ailleurs le nettoyage des raccourcis ne tient pas compte
78
+    // des surcharges et enrichissement de propre
79
+    // couper doit se faire apres propre
80
+    //$texte = nettoyer_raccourcis_typo($intro ? $intro : $texte, $connect);
81
+
82
+    // Cependant pour des questions de perfs on coupe quand meme, en prenant
83
+    // large et en se mefiant des tableaux #1323
84
+
85
+    if (strlen($intro)) {
86
+        $texte = $intro;
87
+    } else {
88
+        if (
89
+            !str_contains("\n" . $texte, "\n|")
90
+            && strlen($texte) > 2.5 * $longueur
91
+        ) {
92
+            if (str_contains($texte, '<multi')) {
93
+                $texte = extraire_multi($texte);
94
+            }
95
+            $texte = couper($texte, 2 * $longueur);
96
+        }
97
+    }
98
+
99
+    // ne pas tenir compte des notes
100
+    if ($notes = charger_fonction('notes', 'inc', true)) {
101
+        $notes('', 'empiler');
102
+    }
103
+    // Supprimer les modèles avant le propre afin d'éviter qu'ils n'ajoutent du texte indésirable
104
+    // dans l'introduction.
105
+    $texte = supprime_img($texte, '');
106
+    $texte = appliquer_traitement_champ($texte, 'introduction', '', [], $connect);
107
+
108
+    if ($notes) {
109
+        $notes('', 'depiler');
110
+    }
111
+
112
+    if (is_null($suite) && defined('_INTRODUCTION_SUITE')) {
113
+        $suite = _INTRODUCTION_SUITE;
114
+    }
115
+    $texte = couper($texte, $longueur, $suite);
116
+    // comme on a coupe il faut repasser la typo (on a perdu les insecables)
117
+    $texte = typo($texte, true, $connect, []);
118
+
119
+    // et reparagrapher si necessaire (coherence avec le cas descriptif)
120
+    // une introduction a tojours un <p>
121
+    if ($GLOBALS['toujours_paragrapher']) { // Fermer les paragraphes
122
+    $texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']);
123
+    }
124
+
125
+    return $texte;
126 126
 }
127 127
 
128 128
 
@@ -157,64 +157,64 @@  discard block
 block discarded – undo
157 157
  *     Code HTML de la pagination
158 158
  **/
159 159
 function filtre_pagination_dist(
160
-	$total,
161
-	$nom,
162
-	$position,
163
-	$pas,
164
-	$liste = true,
165
-	$modele = '',
166
-	string $connect = '',
167
-	$env = []
160
+    $total,
161
+    $nom,
162
+    $position,
163
+    $pas,
164
+    $liste = true,
165
+    $modele = '',
166
+    string $connect = '',
167
+    $env = []
168 168
 ) {
169
-	static $ancres = [];
170
-	if ($pas < 1) {
171
-		return '';
172
-	}
173
-	$ancre = 'pagination' . $nom; // #pagination_articles
174
-	$debut = 'debut' . $nom; // 'debut_articles'
175
-
176
-	// n'afficher l'ancre qu'une fois
177
-	$bloc_ancre = isset($ancres[$ancre]) ? '' : ($ancres[$ancre] = "<a id='" . $ancre . "' class='pagination_ancre'></a>");
178
-	// liste = false : on ne veut que l'ancre
179
-	if (!$liste) {
180
-		return $ancres[$ancre];
181
-	}
182
-
183
-	$self = (empty($env['self']) ? self() : $env['self']);
184
-	$pagination = [
185
-		'debut' => $debut,
186
-		'url' => parametre_url($self, 'fragment', ''), // nettoyer l'id ahah eventuel
187
-		'total' => $total,
188
-		'position' => (int) $position,
189
-		'pas' => $pas,
190
-		'nombre_pages' => floor(($total - 1) / $pas) + 1,
191
-		'page_courante' => floor((int) $position / $pas) + 1,
192
-		'ancre' => $ancre,
193
-		'bloc_ancre' => $bloc_ancre
194
-	];
195
-	if (is_array($env)) {
196
-		$pagination = array_merge($env, $pagination);
197
-	}
198
-
199
-	// Pas de pagination
200
-	if ($pagination['nombre_pages'] <= 1) {
201
-		return '';
202
-	}
203
-
204
-	if ($modele) {
205
-		$pagination['type_pagination'] = $modele;
206
-		$modele = trouver_fond('pagination_' . $modele, 'modeles') ? '_' . $modele : '';
207
-	}
208
-
209
-	if (!defined('_PAGINATION_NOMBRE_LIENS_MAX')) {
210
-		define('_PAGINATION_NOMBRE_LIENS_MAX', 10);
211
-	}
212
-	if (!defined('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE')) {
213
-		define('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE', 5);
214
-	}
215
-
216
-
217
-	return recuperer_fond("modeles/pagination$modele", $pagination, ['trim' => true], $connect);
169
+    static $ancres = [];
170
+    if ($pas < 1) {
171
+        return '';
172
+    }
173
+    $ancre = 'pagination' . $nom; // #pagination_articles
174
+    $debut = 'debut' . $nom; // 'debut_articles'
175
+
176
+    // n'afficher l'ancre qu'une fois
177
+    $bloc_ancre = isset($ancres[$ancre]) ? '' : ($ancres[$ancre] = "<a id='" . $ancre . "' class='pagination_ancre'></a>");
178
+    // liste = false : on ne veut que l'ancre
179
+    if (!$liste) {
180
+        return $ancres[$ancre];
181
+    }
182
+
183
+    $self = (empty($env['self']) ? self() : $env['self']);
184
+    $pagination = [
185
+        'debut' => $debut,
186
+        'url' => parametre_url($self, 'fragment', ''), // nettoyer l'id ahah eventuel
187
+        'total' => $total,
188
+        'position' => (int) $position,
189
+        'pas' => $pas,
190
+        'nombre_pages' => floor(($total - 1) / $pas) + 1,
191
+        'page_courante' => floor((int) $position / $pas) + 1,
192
+        'ancre' => $ancre,
193
+        'bloc_ancre' => $bloc_ancre
194
+    ];
195
+    if (is_array($env)) {
196
+        $pagination = array_merge($env, $pagination);
197
+    }
198
+
199
+    // Pas de pagination
200
+    if ($pagination['nombre_pages'] <= 1) {
201
+        return '';
202
+    }
203
+
204
+    if ($modele) {
205
+        $pagination['type_pagination'] = $modele;
206
+        $modele = trouver_fond('pagination_' . $modele, 'modeles') ? '_' . $modele : '';
207
+    }
208
+
209
+    if (!defined('_PAGINATION_NOMBRE_LIENS_MAX')) {
210
+        define('_PAGINATION_NOMBRE_LIENS_MAX', 10);
211
+    }
212
+    if (!defined('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE')) {
213
+        define('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE', 5);
214
+    }
215
+
216
+
217
+    return recuperer_fond("modeles/pagination$modele", $pagination, ['trim' => true], $connect);
218 218
 }
219 219
 
220 220
 
@@ -233,38 +233,38 @@  discard block
 block discarded – undo
233 233
  *     Liste (première page, dernière page).
234 234
  **/
235 235
 function filtre_bornes_pagination_dist($courante, $nombre, $max = 10) {
236
-	if ($max <= 0 || $max >= $nombre) {
237
-		return [1, $nombre];
238
-	}
239
-	if ($max <= 1) {
240
-		return [$courante, $courante];
241
-	}
242
-
243
-	$premiere = max(1, $courante - floor(($max - 1) / 2));
244
-	$derniere = min($nombre, $premiere + $max - 2);
245
-	$premiere = $derniere == $nombre ? $derniere - $max + 1 : $premiere;
246
-
247
-	return [$premiere, $derniere];
236
+    if ($max <= 0 || $max >= $nombre) {
237
+        return [1, $nombre];
238
+    }
239
+    if ($max <= 1) {
240
+        return [$courante, $courante];
241
+    }
242
+
243
+    $premiere = max(1, $courante - floor(($max - 1) / 2));
244
+    $derniere = min($nombre, $premiere + $max - 2);
245
+    $premiere = $derniere == $nombre ? $derniere - $max + 1 : $premiere;
246
+
247
+    return [$premiere, $derniere];
248 248
 }
249 249
 
250 250
 function filtre_pagination_affiche_texte_lien_page_dist($type_pagination, $numero_page, $rang_item) {
251
-	if ($numero_page === 'tous') {
252
-		return '&#8734;';
253
-	}
254
-	if ($numero_page === 'prev') {
255
-		return '&lt;';
256
-	}
257
-	if ($numero_page === 'next') {
258
-		return '&gt;';
259
-	}
260
-
261
-	return match ($type_pagination) {
262
-		'resultats' => $rang_item + 1, // 1 11 21 31...
263
-		'naturel' => $rang_item ?: 1, // 1 10 20 30...
264
-		'rang' => $rang_item, // 0 10 20 30...
265
-		'page', 'prive' => $numero_page, // 1 2 3 4 5...
266
-		default => $numero_page, // 1 2 3 4 5...
267
-	};
251
+    if ($numero_page === 'tous') {
252
+        return '&#8734;';
253
+    }
254
+    if ($numero_page === 'prev') {
255
+        return '&lt;';
256
+    }
257
+    if ($numero_page === 'next') {
258
+        return '&gt;';
259
+    }
260
+
261
+    return match ($type_pagination) {
262
+        'resultats' => $rang_item + 1, // 1 11 21 31...
263
+        'naturel' => $rang_item ?: 1, // 1 10 20 30...
264
+        'rang' => $rang_item, // 0 10 20 30...
265
+        'page', 'prive' => $numero_page, // 1 2 3 4 5...
266
+        default => $numero_page, // 1 2 3 4 5...
267
+    };
268 268
 }
269 269
 
270 270
 /**
@@ -277,15 +277,15 @@  discard block
 block discarded – undo
277 277
  **/
278 278
 function lister_objets_avec_logos($type) {
279 279
 
280
-	$objet = objet_type($type);
281
-	$ids = sql_allfetsel('L.id_objet', 'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document', 'D.mode=' . sql_quote('logoon') . ' AND L.objet=' . sql_quote($objet));
282
-	if ($ids) {
283
-		$ids = array_column($ids, 'id_objet');
284
-		return implode(',', $ids);
285
-	}
286
-	else {
287
-		return '0';
288
-	}
280
+    $objet = objet_type($type);
281
+    $ids = sql_allfetsel('L.id_objet', 'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document', 'D.mode=' . sql_quote('logoon') . ' AND L.objet=' . sql_quote($objet));
282
+    if ($ids) {
283
+        $ids = array_column($ids, 'id_objet');
284
+        return implode(',', $ids);
285
+    }
286
+    else {
287
+        return '0';
288
+    }
289 289
 }
290 290
 
291 291
 
@@ -301,14 +301,14 @@  discard block
 block discarded – undo
301 301
  *     Code HTML des notes
302 302
  **/
303 303
 function calculer_notes() {
304
-	$r = '';
305
-	if ($notes = charger_fonction('notes', 'inc', true)) {
306
-		$r = $notes([]);
307
-		$notes('', 'depiler');
308
-		$notes('', 'empiler');
309
-	}
310
-
311
-	return $r;
304
+    $r = '';
305
+    if ($notes = charger_fonction('notes', 'inc', true)) {
306
+        $r = $notes([]);
307
+        $notes('', 'depiler');
308
+        $notes('', 'empiler');
309
+    }
310
+
311
+    return $r;
312 312
 }
313 313
 
314 314
 
@@ -325,10 +325,10 @@  discard block
 block discarded – undo
325 325
  * @return string
326 326
  */
327 327
 function retrouver_rang_lien($objet_source, $ids, $objet_lie, $idl, $objet_lien) {
328
-	$res = lister_objets_liens($objet_source, $objet_lie, $idl, $objet_lien);
329
-	$res = array_column($res, 'rang_lien', $objet_source);
328
+    $res = lister_objets_liens($objet_source, $objet_lie, $idl, $objet_lien);
329
+    $res = array_column($res, 'rang_lien', $objet_source);
330 330
 
331
-	return ($res[$ids] ?? '');
331
+    return ($res[$ids] ?? '');
332 332
 }
333 333
 
334 334
 
@@ -345,19 +345,19 @@  discard block
 block discarded – undo
345 345
  * @private
346 346
  */
347 347
 function lister_objets_liens($objet_source, $objet, $id_objet, $objet_lien) {
348
-	static $liens = [];
349
-	if (!isset($liens["$objet_source-$objet-$id_objet-$objet_lien"])) {
350
-		include_spip('action/editer_liens');
351
-		// quand $objet == $objet_lien == $objet_source on reste sur le cas par defaut de $objet_lien == $objet_source
352
-		if ($objet_lien == $objet && $objet_lien !== $objet_source) {
353
-			$res = objet_trouver_liens([$objet => $id_objet], [$objet_source => '*']);
354
-		} else {
355
-			$res = objet_trouver_liens([$objet_source => '*'], [$objet => $id_objet]);
356
-		}
357
-
358
-		$liens["$objet_source-$objet-$id_objet-$objet_lien"] = $res;
359
-	}
360
-	return $liens["$objet_source-$objet-$id_objet-$objet_lien"];
348
+    static $liens = [];
349
+    if (!isset($liens["$objet_source-$objet-$id_objet-$objet_lien"])) {
350
+        include_spip('action/editer_liens');
351
+        // quand $objet == $objet_lien == $objet_source on reste sur le cas par defaut de $objet_lien == $objet_source
352
+        if ($objet_lien == $objet && $objet_lien !== $objet_source) {
353
+            $res = objet_trouver_liens([$objet => $id_objet], [$objet_source => '*']);
354
+        } else {
355
+            $res = objet_trouver_liens([$objet_source => '*'], [$objet => $id_objet]);
356
+        }
357
+
358
+        $liens["$objet_source-$objet-$id_objet-$objet_lien"] = $res;
359
+    }
360
+    return $liens["$objet_source-$objet-$id_objet-$objet_lien"];
361 361
 }
362 362
 
363 363
 /**
@@ -371,24 +371,24 @@  discard block
 block discarded – undo
371 371
  * @return int|string
372 372
  */
373 373
 function calculer_rang_smart($titre, $objet_source, $id, $env) {
374
-	// Cas du #RANG utilisé dans #FORMULAIRE_EDITER_LIENS -> attraper le rang du lien
375
-	// permet de voir le rang du lien si il y en a un en base, meme avant un squelette xxxx-lies.html ne gerant pas les liens
376
-	if (
377
-		isset($env['form']) && $env['form']
378
-		&& isset($env['_objet_lien']) && $env['_objet_lien']
379
-		&& (function_exists('lien_triables') || include_spip('action/editer_liens'))
380
-		&& ($r = objet_associable($env['_objet_lien']))
381
-		&& ([$p, $table_lien] = $r)
382
-		&& lien_triables($table_lien)
383
-		&& isset($env['objet']) && $env['objet']
384
-		&& isset($env['id_objet']) && $env['id_objet']
385
-		&& $objet_source
386
-		&& ($id = (int) $id)
387
-	) {
388
-		$rang = retrouver_rang_lien($objet_source, $id, $env['objet'], $env['id_objet'], $env['_objet_lien']);
389
-		return ($rang ?: '');
390
-	}
391
-	return recuperer_numero($titre);
374
+    // Cas du #RANG utilisé dans #FORMULAIRE_EDITER_LIENS -> attraper le rang du lien
375
+    // permet de voir le rang du lien si il y en a un en base, meme avant un squelette xxxx-lies.html ne gerant pas les liens
376
+    if (
377
+        isset($env['form']) && $env['form']
378
+        && isset($env['_objet_lien']) && $env['_objet_lien']
379
+        && (function_exists('lien_triables') || include_spip('action/editer_liens'))
380
+        && ($r = objet_associable($env['_objet_lien']))
381
+        && ([$p, $table_lien] = $r)
382
+        && lien_triables($table_lien)
383
+        && isset($env['objet']) && $env['objet']
384
+        && isset($env['id_objet']) && $env['id_objet']
385
+        && $objet_source
386
+        && ($id = (int) $id)
387
+    ) {
388
+        $rang = retrouver_rang_lien($objet_source, $id, $env['objet'], $env['id_objet'], $env['_objet_lien']);
389
+        return ($rang ?: '');
390
+    }
391
+    return recuperer_numero($titre);
392 392
 }
393 393
 
394 394
 /**
@@ -415,72 +415,72 @@  discard block
 block discarded – undo
415 415
  */
416 416
 function calculer_balise_tri(string $champ_ou_sens, string $libelle, string $classe, string $tri_nom, string $tri_champ, string $tri_sens, $liste_tri_sens_defaut): string {
417 417
 
418
-	$url = self('&');
419
-	$tri_sens = (int) $tri_sens;
420
-	$alias_sens = [
421
-		'<' => -1,
422
-		'>' => 1,
423
-		'inverse' => -1,
424
-	];
425
-
426
-	// Normaliser la liste des sens de tri par défaut
427
-	// On ajoute un jocker pour les champs non présents dans la liste
428
-	// avec la valeur du 1er item de la liste, idem critère {tri}
429
-	if (is_array($liste_tri_sens_defaut)) {
430
-		$liste_tri_sens_defaut['*'] = array_values($liste_tri_sens_defaut)[0];
431
-	} else {
432
-		$liste_tri_sens_defaut = [
433
-			'*' => (int) ($alias_sens[$liste_tri_sens_defaut] ?? $liste_tri_sens_defaut),
434
-		];
435
-	}
436
-
437
-	// Les sens de tri actuel et nouveau :
438
-	// Soit c'est un sens fixe donné en paramètre (< ou >)
439
-	$is_sens_fixe = array_key_exists($champ_ou_sens, $alias_sens);
440
-	if ($is_sens_fixe) {
441
-		$tri_sens_actuel = $tri_sens;
442
-		$tri_sens_nouveau = $alias_sens[$champ_ou_sens];
443
-	// Soit c'est le champ utilisé actuellement pour le tri → on inverse le sens
444
-	} elseif ($champ_ou_sens === $tri_champ) {
445
-		$tri_sens_actuel = $tri_sens;
446
-		$tri_sens_nouveau = $tri_sens * -1;
447
-	// Sinon c'est un nouveau champ, et on prend son tri par défaut
448
-	} else {
449
-		$tri_sens_actuel = $tri_sens_nouveau = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']);
450
-	}
451
-
452
-	// URL : ajouter le champ sur lequel porte le tri
453
-	if (!$is_sens_fixe) {
454
-		$param_tri = "tri$tri_nom";
455
-		$url = parametre_url($url, $param_tri, $champ_ou_sens);
456
-	}
457
-
458
-	// URL : n'ajouter le sens de tri que si nécessaire,
459
-	// c.à.d différent du sens par défaut pour le champ
460
-	$param_sens = "sens$tri_nom";
461
-	$tri_sens_defaut_champ = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']);
462
-	if ($tri_sens_nouveau !== $tri_sens_defaut_champ) {
463
-		$url = parametre_url($url, $param_sens, $tri_sens_nouveau);
464
-	} else {
465
-		$url = parametre_url($url, $param_sens, '');
466
-	}
467
-
468
-	// Drapeau pour garder en session ?
469
-	$param_memo = ($is_sens_fixe ? $param_sens : $param_tri);
470
-	$url = parametre_url($url, 'var_memotri', str_starts_with($tri_nom, 'session') ? $param_memo : '');
471
-
472
-	// Classes : on indique le sens de tri et l'item exposé
473
-	if (!$is_sens_fixe) {
474
-		$classe .= ' item-tri item-tri_' . ($tri_sens_actuel === 1 ? 'asc' : 'desc');
475
-	}
476
-	if ($champ_ou_sens === $tri_champ) {
477
-		$classe .= ' item-tri_actif';
478
-	}
479
-
480
-	// Lien
481
-	$balise = lien_ou_expose($url, $libelle, false, $classe);
482
-
483
-	return $balise;
418
+    $url = self('&');
419
+    $tri_sens = (int) $tri_sens;
420
+    $alias_sens = [
421
+        '<' => -1,
422
+        '>' => 1,
423
+        'inverse' => -1,
424
+    ];
425
+
426
+    // Normaliser la liste des sens de tri par défaut
427
+    // On ajoute un jocker pour les champs non présents dans la liste
428
+    // avec la valeur du 1er item de la liste, idem critère {tri}
429
+    if (is_array($liste_tri_sens_defaut)) {
430
+        $liste_tri_sens_defaut['*'] = array_values($liste_tri_sens_defaut)[0];
431
+    } else {
432
+        $liste_tri_sens_defaut = [
433
+            '*' => (int) ($alias_sens[$liste_tri_sens_defaut] ?? $liste_tri_sens_defaut),
434
+        ];
435
+    }
436
+
437
+    // Les sens de tri actuel et nouveau :
438
+    // Soit c'est un sens fixe donné en paramètre (< ou >)
439
+    $is_sens_fixe = array_key_exists($champ_ou_sens, $alias_sens);
440
+    if ($is_sens_fixe) {
441
+        $tri_sens_actuel = $tri_sens;
442
+        $tri_sens_nouveau = $alias_sens[$champ_ou_sens];
443
+    // Soit c'est le champ utilisé actuellement pour le tri → on inverse le sens
444
+    } elseif ($champ_ou_sens === $tri_champ) {
445
+        $tri_sens_actuel = $tri_sens;
446
+        $tri_sens_nouveau = $tri_sens * -1;
447
+    // Sinon c'est un nouveau champ, et on prend son tri par défaut
448
+    } else {
449
+        $tri_sens_actuel = $tri_sens_nouveau = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']);
450
+    }
451
+
452
+    // URL : ajouter le champ sur lequel porte le tri
453
+    if (!$is_sens_fixe) {
454
+        $param_tri = "tri$tri_nom";
455
+        $url = parametre_url($url, $param_tri, $champ_ou_sens);
456
+    }
457
+
458
+    // URL : n'ajouter le sens de tri que si nécessaire,
459
+    // c.à.d différent du sens par défaut pour le champ
460
+    $param_sens = "sens$tri_nom";
461
+    $tri_sens_defaut_champ = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']);
462
+    if ($tri_sens_nouveau !== $tri_sens_defaut_champ) {
463
+        $url = parametre_url($url, $param_sens, $tri_sens_nouveau);
464
+    } else {
465
+        $url = parametre_url($url, $param_sens, '');
466
+    }
467
+
468
+    // Drapeau pour garder en session ?
469
+    $param_memo = ($is_sens_fixe ? $param_sens : $param_tri);
470
+    $url = parametre_url($url, 'var_memotri', str_starts_with($tri_nom, 'session') ? $param_memo : '');
471
+
472
+    // Classes : on indique le sens de tri et l'item exposé
473
+    if (!$is_sens_fixe) {
474
+        $classe .= ' item-tri item-tri_' . ($tri_sens_actuel === 1 ? 'asc' : 'desc');
475
+    }
476
+    if ($champ_ou_sens === $tri_champ) {
477
+        $classe .= ' item-tri_actif';
478
+    }
479
+
480
+    // Lien
481
+    $balise = lien_ou_expose($url, $libelle, false, $classe);
482
+
483
+    return $balise;
484 484
 }
485 485
 
486 486
 
@@ -496,7 +496,7 @@  discard block
 block discarded – undo
496 496
  * @return string
497 497
  */
498 498
 function tri_protege_champ($t) {
499
-	return preg_replace(',[^\s\w.+\[\]],', '', $t);
499
+    return preg_replace(',[^\s\w.+\[\]],', '', $t);
500 500
 }
501 501
 
502 502
 /**
@@ -509,39 +509,39 @@  discard block
 block discarded – undo
509 509
  * @return string
510 510
  */
511 511
 function tri_champ_order($t, $from = null, $senstri = '') {
512
-	if (str_starts_with($t, 'multi ')) {
513
-		return 'multi' . $senstri;
514
-	}
515
-
516
-	$champ = $t;
517
-
518
-	$prefixe = '';
519
-	foreach (['num ', 'sinum '] as $p) {
520
-		if (str_starts_with($t, $p)) {
521
-			$champ = substr($t, strlen($p));
522
-			$prefixe = $p;
523
-		}
524
-	}
525
-
526
-	// enlever les autres espaces non evacues par tri_protege_champ
527
-	$champ = preg_replace(',\s,', '', $champ);
528
-
529
-	if (is_array($from)) {
530
-		$trouver_table = charger_fonction('trouver_table', 'base');
531
-		foreach ($from as $idt => $table_sql) {
532
-			if (
533
-				($desc = $trouver_table($table_sql)) && isset($desc['field'][$champ])
534
-			) {
535
-				$champ = "$idt.$champ";
536
-				break;
537
-			}
538
-		}
539
-	}
540
-	return match ($prefixe) {
541
-		'num ' => "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}, 0+$champ{$senstri}",
542
-		'sinum ' => "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}",
543
-		default => $champ . $senstri,
544
-	};
512
+    if (str_starts_with($t, 'multi ')) {
513
+        return 'multi' . $senstri;
514
+    }
515
+
516
+    $champ = $t;
517
+
518
+    $prefixe = '';
519
+    foreach (['num ', 'sinum '] as $p) {
520
+        if (str_starts_with($t, $p)) {
521
+            $champ = substr($t, strlen($p));
522
+            $prefixe = $p;
523
+        }
524
+    }
525
+
526
+    // enlever les autres espaces non evacues par tri_protege_champ
527
+    $champ = preg_replace(',\s,', '', $champ);
528
+
529
+    if (is_array($from)) {
530
+        $trouver_table = charger_fonction('trouver_table', 'base');
531
+        foreach ($from as $idt => $table_sql) {
532
+            if (
533
+                ($desc = $trouver_table($table_sql)) && isset($desc['field'][$champ])
534
+            ) {
535
+                $champ = "$idt.$champ";
536
+                break;
537
+            }
538
+        }
539
+    }
540
+    return match ($prefixe) {
541
+        'num ' => "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}, 0+$champ{$senstri}",
542
+        'sinum ' => "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}",
543
+        default => $champ . $senstri,
544
+    };
545 545
 }
546 546
 
547 547
 /**
@@ -555,17 +555,17 @@  discard block
 block discarded – undo
555 555
  * @return string
556 556
  */
557 557
 function tri_champ_select($t) {
558
-	if (str_starts_with($t, 'multi ')) {
559
-		$t = substr($t, 6);
560
-		$t = preg_replace(',\s,', '', $t);
558
+    if (str_starts_with($t, 'multi ')) {
559
+        $t = substr($t, 6);
560
+        $t = preg_replace(',\s,', '', $t);
561 561
 
562
-		return sql_multi($t, $GLOBALS['spip_lang']);
563
-	}
564
-	if (trim($t) == 'hasard') {
565
-		return 'rand() AS hasard';
566
-	}
562
+        return sql_multi($t, $GLOBALS['spip_lang']);
563
+    }
564
+    if (trim($t) == 'hasard') {
565
+        return 'rand() AS hasard';
566
+    }
567 567
 
568
-	return "''";
568
+    return "''";
569 569
 }
570 570
 
571 571
 /**
@@ -577,15 +577,15 @@  discard block
 block discarded – undo
577 577
  * @return string
578 578
  */
579 579
 function formate_liste_critere_par_ordre_liste($valeurs, $serveur = '') {
580
-	if (!is_array($valeurs)) {
581
-		return '';
582
-	}
583
-	$f = sql_serveur('quote', $serveur, true);
584
-	if (!is_string($f) || !$f) {
585
-		return '';
586
-	}
587
-
588
-	return implode(',', array_map($f, array_unique($valeurs)));
580
+    if (!is_array($valeurs)) {
581
+        return '';
582
+    }
583
+    $f = sql_serveur('quote', $serveur, true);
584
+    if (!is_string($f) || !$f) {
585
+        return '';
586
+    }
587
+
588
+    return implode(',', array_map($f, array_unique($valeurs)));
589 589
 }
590 590
 
591 591
 /**
@@ -608,22 +608,22 @@  discard block
 block discarded – undo
608 608
  *     Valeur $defaut sinon.
609 609
  **/
610 610
 function appliquer_filtre_sinon($arg, $filtre, $args, $defaut = '') {
611
-	// Si c'est un filtre d'image, on utilise image_filtrer()
612
-	// Attention : les 2 premiers arguments sont inversés dans ce cas
613
-	if (trouver_filtre_matrice($filtre) && str_starts_with($filtre, 'image_')) {
614
-		include_spip('inc/filtres_images_lib_mini');
615
-		$args[1] = $args[0];
616
-		$args[0] = $filtre;
617
-		return image_graver(image_filtrer($args));
618
-	}
619
-
620
-	$f = chercher_filtre($filtre);
621
-	if (!$f) {
622
-		return $defaut;
623
-	}
624
-	array_shift($args); // enlever $arg
625
-	array_shift($args); // enlever $filtre
626
-	return $f($arg, ...$args);
611
+    // Si c'est un filtre d'image, on utilise image_filtrer()
612
+    // Attention : les 2 premiers arguments sont inversés dans ce cas
613
+    if (trouver_filtre_matrice($filtre) && str_starts_with($filtre, 'image_')) {
614
+        include_spip('inc/filtres_images_lib_mini');
615
+        $args[1] = $args[0];
616
+        $args[0] = $filtre;
617
+        return image_graver(image_filtrer($args));
618
+    }
619
+
620
+    $f = chercher_filtre($filtre);
621
+    if (!$f) {
622
+        return $defaut;
623
+    }
624
+    array_shift($args); // enlever $arg
625
+    array_shift($args); // enlever $filtre
626
+    return $f($arg, ...$args);
627 627
 }
628 628
 
629 629
 /**
@@ -633,30 +633,30 @@  discard block
 block discarded – undo
633 633
  * @return string
634 634
  */
635 635
 function filtre_styles_inline_page_login_pass_dist(&$Pile, ...$dummy) {
636
-	$styles = '';
637
-	include_spip('inc/config');
638
-	if ($couleur = lire_config('couleur_login')) {
639
-		include_spip('inc/filtres_images_mini');
640
-		$hs = couleur_hex_to_hsl($couleur, 'h, s');
641
-		$l = couleur_hex_to_hsl($couleur, 'l');
642
-		$styles .= ":root {--spip-login-color-theme--hs: {$hs};--spip-login-color-theme--l: {$l};}\n";
643
-	}
644
-	$logo_bg = _DIR_IMG . 'spip_fond_login.jpg';
645
-	if (file_exists($logo_bg)) {
646
-		include_spip('inc/filtres_images_mini');
647
-		$logo_mini = image_reduire($logo_bg, 64, 64);
648
-		$logo_mini = extraire_attribut($logo_mini, 'src');
649
-		$embarque_fichier = charger_filtre('embarque_fichier');
650
-		$logo_mini = $embarque_fichier($logo_mini);
651
-		$logo_bg = timestamp($logo_bg);
652
-		$styles .= ".page_login, .page_spip_pass {background-image:url($logo_bg), url($logo_mini);}\n";
653
-		$Pile[0]['body_class'] = 'fond_image';
654
-	}
655
-	else {
656
-		$Pile[0]['body_class'] = 'sans_fond';
657
-	}
658
-	if ($styles) {
659
-		$styles = "<style type='text/css'>$styles</style>";
660
-	}
661
-	return $styles;
636
+    $styles = '';
637
+    include_spip('inc/config');
638
+    if ($couleur = lire_config('couleur_login')) {
639
+        include_spip('inc/filtres_images_mini');
640
+        $hs = couleur_hex_to_hsl($couleur, 'h, s');
641
+        $l = couleur_hex_to_hsl($couleur, 'l');
642
+        $styles .= ":root {--spip-login-color-theme--hs: {$hs};--spip-login-color-theme--l: {$l};}\n";
643
+    }
644
+    $logo_bg = _DIR_IMG . 'spip_fond_login.jpg';
645
+    if (file_exists($logo_bg)) {
646
+        include_spip('inc/filtres_images_mini');
647
+        $logo_mini = image_reduire($logo_bg, 64, 64);
648
+        $logo_mini = extraire_attribut($logo_mini, 'src');
649
+        $embarque_fichier = charger_filtre('embarque_fichier');
650
+        $logo_mini = $embarque_fichier($logo_mini);
651
+        $logo_bg = timestamp($logo_bg);
652
+        $styles .= ".page_login, .page_spip_pass {background-image:url($logo_bg), url($logo_mini);}\n";
653
+        $Pile[0]['body_class'] = 'fond_image';
654
+    }
655
+    else {
656
+        $Pile[0]['body_class'] = 'sans_fond';
657
+    }
658
+    if ($styles) {
659
+        $styles = "<style type='text/css'>$styles</style>";
660
+    }
661
+    return $styles;
662 662
 }
Please login to merge, or discard this patch.