Completed
Push — master ( ad4f09...6d727b )
by cam
01:02 queued 13s
created
ecrire/install/etape_2.php 2 patches
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -48,7 +48,7 @@  discard block
 block discarded – undo
48 48
 	$GLOBALS['connexions'][$server_db] = $link;
49 49
 
50 50
 	$GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
51
-		= $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
51
+		= $GLOBALS['spip_'.$server_db.'_functions_'.$GLOBALS['spip_sql_version']];
52 52
 
53 53
 	$minipage = new Spip\Afficher\Minipage\Installation();
54 54
 	echo $minipage->installDebutPage();
@@ -68,18 +68,18 @@  discard block
 block discarded – undo
68 68
 	//echo "\n-->\n";
69 69
 
70 70
 	if (($db_connect == '0') && $link) {
71
-		echo "<div class='success'><b>" . _T('info_connexion_ok') . '</b></div>';
71
+		echo "<div class='success'><b>"._T('info_connexion_ok').'</b></div>';
72 72
 		echo info_progression_etape(2, 'etape_', 'install/');
73 73
 
74
-		echo info_etape(_T('menu_aide_installation_choix_base') . aider('install2', true));
74
+		echo info_etape(_T('menu_aide_installation_choix_base').aider('install2', true));
75 75
 
76 76
 		echo "\n", '<!-- ', sql_version($server_db), ' -->';
77 77
 		[$checked, $res] = install_etape_2_bases($login_db, $server_db);
78 78
 
79 79
 		$hidden = (defined('_SPIP_CHMOD')
80 80
 				? ''
81
-				: ("\n<input type='hidden' name='chmod' value='" . spip_htmlspecialchars($chmod) . "' />"))
82
-			. predef_ou_cache($adresse_db . ($port ? ':' . $port : ''), $login_db, $pass_db, $server_db);
81
+				: ("\n<input type='hidden' name='chmod' value='".spip_htmlspecialchars($chmod)."' />"))
82
+			. predef_ou_cache($adresse_db.($port ? ':'.$port : ''), $login_db, $pass_db, $server_db);
83 83
 
84 84
 		echo install_etape_2_form($hidden, $checked, $res, 3);
85 85
 	} else {
@@ -87,8 +87,8 @@  discard block
 block discarded – undo
87 87
 
88 88
 		echo "<div class='error'>";
89 89
 		echo info_etape(_T('info_connexion_base'));
90
-		echo '<h3>' . _T('avis_connexion_echec_1') . '</h3>';
91
-		echo '<p>' . _T('avis_connexion_echec_2') . '</p>';
90
+		echo '<h3>'._T('avis_connexion_echec_1').'</h3>';
91
+		echo '<p>'._T('avis_connexion_echec_2').'</p>';
92 92
 
93 93
 		echo "<p style='font-size: small;'>",
94 94
 		_T('avis_connexion_echec_3'),
@@ -120,8 +120,8 @@  discard block
 block discarded – undo
120 120
 			. ' '
121 121
 		];
122 122
 	}
123
-	$res = '<b>' . _T('avis_lecture_noms_bases_1') . '</b>
124
-		' . _T('avis_lecture_noms_bases_2') . '<p>';
123
+	$res = '<b>'._T('avis_lecture_noms_bases_1').'</b>
124
+		' . _T('avis_lecture_noms_bases_2').'<p>';
125 125
 
126 126
 	$checked = false;
127 127
 	if ($login_db) {
@@ -138,10 +138,10 @@  discard block
 block discarded – undo
138 138
 		if ($ok) {
139 139
 			$res .= _T('avis_lecture_noms_bases_3')
140 140
 				. '<ul>'
141
-				. '<li><input name="choix_db" value="' . $test_base . "\" type='radio' id='stand' checked='checked' />"
142
-				. "<label for='stand'>" . $test_base . "</label></li>\n"
141
+				. '<li><input name="choix_db" value="'.$test_base."\" type='radio' id='stand' checked='checked' />"
142
+				. "<label for='stand'>".$test_base."</label></li>\n"
143 143
 				. '</ul>'
144
-				. '<p>' . _T('info_ou') . ' ';
144
+				. '<p>'._T('info_ou').' ';
145 145
 			$checked = true;
146 146
 		}
147 147
 	}
@@ -154,19 +154,19 @@  discard block
 block discarded – undo
154 154
 		"\n<input type='hidden' name='etape' value='$etape' />"
155 155
 		. $hidden
156 156
 		. (defined('_INSTALL_NAME_DB')
157
-			? '<h3>' . _T('install_nom_base_hebergeur') . ' <tt>' . _INSTALL_NAME_DB . '</tt>' . '</h3>'
158
-			: "\n<fieldset><legend>" . _T('texte_choix_base_1') . "</legend>\n"
157
+			? '<h3>'._T('install_nom_base_hebergeur').' <tt>'._INSTALL_NAME_DB.'</tt>'.'</h3>'
158
+			: "\n<fieldset><legend>"._T('texte_choix_base_1')."</legend>\n"
159 159
 			. $res
160 160
 			. "\n<input name=\"choix_db\" value=\"new_spip\" type='radio' id='nou'"
161 161
 			. ($checked ? '' : " checked='checked'")
162
-			. " />\n<label for='nou'>" . _T('info_creer_base') . "</label></p>\n<p>"
162
+			. " />\n<label for='nou'>"._T('info_creer_base')."</label></p>\n<p>"
163 163
 			. "\n<input type='text' name='table_new' class='text' value=\"spip\" size='20' /></p></fieldset>\n"
164 164
 		)
165 165
 
166 166
 		. ((defined('_INSTALL_TABLE_PREFIX') || $GLOBALS['table_prefix'] != 'spip')
167
-			? '<h3>' . _T('install_table_prefix_hebergeur') . '  <tt>' . $GLOBALS['table_prefix'] . '</tt>' . '</h3>'
168
-			: '<fieldset><legend>' . _T('texte_choix_table_prefix') . "</legend>\n"
169
-			. "<p><label for='table_prefix'>" . _T('info_table_prefix') . '</label></p><p>'
167
+			? '<h3>'._T('install_table_prefix_hebergeur').'  <tt>'.$GLOBALS['table_prefix'].'</tt>'.'</h3>'
168
+			: '<fieldset><legend>'._T('texte_choix_table_prefix')."</legend>\n"
169
+			. "<p><label for='table_prefix'>"._T('info_table_prefix').'</label></p><p>'
170 170
 			. "\n<input type='text' id='tprefix' name='tprefix' class='text' value='"
171 171
 			. 'spip' # valeur par defaut
172 172
 			. "' size='20' /></p></fieldset>"
Please login to merge, or discard this patch.
Indentation   +121 added lines, -121 removed lines patch added patch discarded remove patch
@@ -10,167 +10,167 @@
 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('base/abstract_sql');
17 17
 
18 18
 function install_etape_2_dist() {
19
-	$adresse_db = defined('_INSTALL_HOST_DB')
20
-		? _INSTALL_HOST_DB
21
-		: _request('adresse_db');
19
+    $adresse_db = defined('_INSTALL_HOST_DB')
20
+        ? _INSTALL_HOST_DB
21
+        : _request('adresse_db');
22 22
 
23
-	if (preg_match(',(.*):(.*),', (string) $adresse_db, $r)) {
24
-		[, $adresse_db, $port] = $r;
25
-	} else {
26
-		$port = '';
27
-	}
23
+    if (preg_match(',(.*):(.*),', (string) $adresse_db, $r)) {
24
+        [, $adresse_db, $port] = $r;
25
+    } else {
26
+        $port = '';
27
+    }
28 28
 
29
-	$login_db = defined('_INSTALL_USER_DB')
30
-		? _INSTALL_USER_DB
31
-		: _request('login_db');
29
+    $login_db = defined('_INSTALL_USER_DB')
30
+        ? _INSTALL_USER_DB
31
+        : _request('login_db');
32 32
 
33
-	$pass_db = defined('_INSTALL_PASS_DB')
34
-		? _INSTALL_PASS_DB
35
-		: _request('pass_db');
33
+    $pass_db = defined('_INSTALL_PASS_DB')
34
+        ? _INSTALL_PASS_DB
35
+        : _request('pass_db');
36 36
 
37
-	$server_db = defined('_INSTALL_SERVER_DB')
38
-		? _INSTALL_SERVER_DB
39
-		: _request('server_db');
37
+    $server_db = defined('_INSTALL_SERVER_DB')
38
+        ? _INSTALL_SERVER_DB
39
+        : _request('server_db');
40 40
 
41
-	$name_db = defined('_INSTALL_NAME_DB')
42
-		? _INSTALL_NAME_DB
43
-		: '';
41
+    $name_db = defined('_INSTALL_NAME_DB')
42
+        ? _INSTALL_NAME_DB
43
+        : '';
44 44
 
45
-	$chmod = _request('chmod');
45
+    $chmod = _request('chmod');
46 46
 
47
-	$link = spip_connect_db($adresse_db, $port, $login_db, $pass_db, $name_db, $server_db);
48
-	$GLOBALS['connexions'][$server_db] = $link;
47
+    $link = spip_connect_db($adresse_db, $port, $login_db, $pass_db, $name_db, $server_db);
48
+    $GLOBALS['connexions'][$server_db] = $link;
49 49
 
50
-	$GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
51
-		= $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
50
+    $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
51
+        = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
52 52
 
53
-	$minipage = new Spip\Afficher\Minipage\Installation();
54
-	echo $minipage->installDebutPage();
53
+    $minipage = new Spip\Afficher\Minipage\Installation();
54
+    echo $minipage->installDebutPage();
55 55
 
56 56
 
57 57
 // prenons toutes les dispositions possibles pour que rien ne s'affiche !
58 58
 
59
-	/*
59
+    /*
60 60
 	 * /!\ sqlite3/PDO : erreur sur join(', ', $link)
61 61
 	 * L'objet PDO ne peut pas etre transformee en chaine
62 62
 	 * Un echo $link ne fonctionne pas non plus
63 63
 	 * Il faut utiliser par exemple print_r($link)
64 64
 	 */
65
-	//echo "\n<!--\n", join(', ', $link), " $login_db ";
66
-	$db_connect = 0; // revoirfunction_exists($ferrno) ? $ferrno() : 0;
67
-	//echo join(', ', $GLOBALS['connexions'][$server_db]);
68
-	//echo "\n-->\n";
65
+    //echo "\n<!--\n", join(', ', $link), " $login_db ";
66
+    $db_connect = 0; // revoirfunction_exists($ferrno) ? $ferrno() : 0;
67
+    //echo join(', ', $GLOBALS['connexions'][$server_db]);
68
+    //echo "\n-->\n";
69 69
 
70
-	if (($db_connect == '0') && $link) {
71
-		echo "<div class='success'><b>" . _T('info_connexion_ok') . '</b></div>';
72
-		echo info_progression_etape(2, 'etape_', 'install/');
70
+    if (($db_connect == '0') && $link) {
71
+        echo "<div class='success'><b>" . _T('info_connexion_ok') . '</b></div>';
72
+        echo info_progression_etape(2, 'etape_', 'install/');
73 73
 
74
-		echo info_etape(_T('menu_aide_installation_choix_base') . aider('install2', true));
74
+        echo info_etape(_T('menu_aide_installation_choix_base') . aider('install2', true));
75 75
 
76
-		echo "\n", '<!-- ', sql_version($server_db), ' -->';
77
-		[$checked, $res] = install_etape_2_bases($login_db, $server_db);
76
+        echo "\n", '<!-- ', sql_version($server_db), ' -->';
77
+        [$checked, $res] = install_etape_2_bases($login_db, $server_db);
78 78
 
79
-		$hidden = (defined('_SPIP_CHMOD')
80
-				? ''
81
-				: ("\n<input type='hidden' name='chmod' value='" . spip_htmlspecialchars($chmod) . "' />"))
82
-			. predef_ou_cache($adresse_db . ($port ? ':' . $port : ''), $login_db, $pass_db, $server_db);
79
+        $hidden = (defined('_SPIP_CHMOD')
80
+                ? ''
81
+                : ("\n<input type='hidden' name='chmod' value='" . spip_htmlspecialchars($chmod) . "' />"))
82
+            . predef_ou_cache($adresse_db . ($port ? ':' . $port : ''), $login_db, $pass_db, $server_db);
83 83
 
84
-		echo install_etape_2_form($hidden, $checked, $res, 3);
85
-	} else {
86
-		echo info_progression_etape(1, 'etape_', 'install/', true);
84
+        echo install_etape_2_form($hidden, $checked, $res, 3);
85
+    } else {
86
+        echo info_progression_etape(1, 'etape_', 'install/', true);
87 87
 
88
-		echo "<div class='error'>";
89
-		echo info_etape(_T('info_connexion_base'));
90
-		echo '<h3>' . _T('avis_connexion_echec_1') . '</h3>';
91
-		echo '<p>' . _T('avis_connexion_echec_2') . '</p>';
88
+        echo "<div class='error'>";
89
+        echo info_etape(_T('info_connexion_base'));
90
+        echo '<h3>' . _T('avis_connexion_echec_1') . '</h3>';
91
+        echo '<p>' . _T('avis_connexion_echec_2') . '</p>';
92 92
 
93
-		echo "<p style='font-size: small;'>",
94
-		_T('avis_connexion_echec_3'),
95
-		'</p></div>';
96
-	}
93
+        echo "<p style='font-size: small;'>",
94
+        _T('avis_connexion_echec_3'),
95
+        '</p></div>';
96
+    }
97 97
 
98
-	echo $minipage->installFinPage();
98
+    echo $minipage->installFinPage();
99 99
 }
100 100
 
101 101
 // Liste les bases accessibles,
102 102
 // avec une heuristique pour preselectionner la plus probable
103 103
 
104 104
 function install_etape_2_bases($login_db, $server_db) {
105
-	$res = install_etape_liste_bases($server_db, $login_db);
106
-	if ($res) {
107
-		[$checked, $bases] = $res;
108
-
109
-		return [
110
-			$checked,
111
-			"<label for='choix_db'><b>"
112
-			. _T('texte_choix_base_2')
113
-			. '</b><br />'
114
-			. _T('texte_choix_base_3')
115
-			. '</label>'
116
-			. "<ul>\n<li>"
117
-			. implode("</li>\n<li>", $bases)
118
-			. "</li>\n</ul><p>"
119
-			. _T('info_ou')
120
-			. ' '
121
-		];
122
-	}
123
-	$res = '<b>' . _T('avis_lecture_noms_bases_1') . '</b>
105
+    $res = install_etape_liste_bases($server_db, $login_db);
106
+    if ($res) {
107
+        [$checked, $bases] = $res;
108
+
109
+        return [
110
+            $checked,
111
+            "<label for='choix_db'><b>"
112
+            . _T('texte_choix_base_2')
113
+            . '</b><br />'
114
+            . _T('texte_choix_base_3')
115
+            . '</label>'
116
+            . "<ul>\n<li>"
117
+            . implode("</li>\n<li>", $bases)
118
+            . "</li>\n</ul><p>"
119
+            . _T('info_ou')
120
+            . ' '
121
+        ];
122
+    }
123
+    $res = '<b>' . _T('avis_lecture_noms_bases_1') . '</b>
124 124
 		' . _T('avis_lecture_noms_bases_2') . '<p>';
125 125
 
126
-	$checked = false;
127
-	if ($login_db) {
128
-		// Si un login comporte un point, le nom de la base est plus
129
-		// probablement le login sans le point -- testons pour savoir
130
-		$test_base = $login_db;
131
-		$ok = sql_selectdb($test_base, $server_db);
132
-		$test_base2 = str_replace('.', '_', (string) $test_base);
133
-		if (sql_selectdb($test_base2, $server_db)) {
134
-			$test_base = $test_base2;
135
-			$ok = true;
136
-		}
137
-
138
-		if ($ok) {
139
-			$res .= _T('avis_lecture_noms_bases_3')
140
-				. '<ul>'
141
-				. '<li><input name="choix_db" value="' . $test_base . "\" type='radio' id='stand' checked='checked' />"
142
-				. "<label for='stand'>" . $test_base . "</label></li>\n"
143
-				. '</ul>'
144
-				. '<p>' . _T('info_ou') . ' ';
145
-			$checked = true;
146
-		}
147
-	}
148
-
149
-	return [$checked, $res];
126
+    $checked = false;
127
+    if ($login_db) {
128
+        // Si un login comporte un point, le nom de la base est plus
129
+        // probablement le login sans le point -- testons pour savoir
130
+        $test_base = $login_db;
131
+        $ok = sql_selectdb($test_base, $server_db);
132
+        $test_base2 = str_replace('.', '_', (string) $test_base);
133
+        if (sql_selectdb($test_base2, $server_db)) {
134
+            $test_base = $test_base2;
135
+            $ok = true;
136
+        }
137
+
138
+        if ($ok) {
139
+            $res .= _T('avis_lecture_noms_bases_3')
140
+                . '<ul>'
141
+                . '<li><input name="choix_db" value="' . $test_base . "\" type='radio' id='stand' checked='checked' />"
142
+                . "<label for='stand'>" . $test_base . "</label></li>\n"
143
+                . '</ul>'
144
+                . '<p>' . _T('info_ou') . ' ';
145
+            $checked = true;
146
+        }
147
+    }
148
+
149
+    return [$checked, $res];
150 150
 }
151 151
 
152 152
 function install_etape_2_form($hidden, $checked, $res, $etape) {
153
-	return generer_form_ecrire('install', (
154
-		"\n<input type='hidden' name='etape' value='$etape' />"
155
-		. $hidden
156
-		. (defined('_INSTALL_NAME_DB')
157
-			? '<h3>' . _T('install_nom_base_hebergeur') . ' <tt>' . _INSTALL_NAME_DB . '</tt>' . '</h3>'
158
-			: "\n<fieldset><legend>" . _T('texte_choix_base_1') . "</legend>\n"
159
-			. $res
160
-			. "\n<input name=\"choix_db\" value=\"new_spip\" type='radio' id='nou'"
161
-			. ($checked ? '' : " checked='checked'")
162
-			. " />\n<label for='nou'>" . _T('info_creer_base') . "</label></p>\n<p>"
163
-			. "\n<input type='text' name='table_new' class='text' value=\"spip\" size='20' /></p></fieldset>\n"
164
-		)
165
-
166
-		. ((defined('_INSTALL_TABLE_PREFIX') || $GLOBALS['table_prefix'] != 'spip')
167
-			? '<h3>' . _T('install_table_prefix_hebergeur') . '  <tt>' . $GLOBALS['table_prefix'] . '</tt>' . '</h3>'
168
-			: '<fieldset><legend>' . _T('texte_choix_table_prefix') . "</legend>\n"
169
-			. "<p><label for='table_prefix'>" . _T('info_table_prefix') . '</label></p><p>'
170
-			. "\n<input type='text' id='tprefix' name='tprefix' class='text' value='"
171
-			. 'spip' # valeur par defaut
172
-			. "' size='20' /></p></fieldset>"
173
-		)
174
-
175
-		. bouton_suivant()));
153
+    return generer_form_ecrire('install', (
154
+        "\n<input type='hidden' name='etape' value='$etape' />"
155
+        . $hidden
156
+        . (defined('_INSTALL_NAME_DB')
157
+            ? '<h3>' . _T('install_nom_base_hebergeur') . ' <tt>' . _INSTALL_NAME_DB . '</tt>' . '</h3>'
158
+            : "\n<fieldset><legend>" . _T('texte_choix_base_1') . "</legend>\n"
159
+            . $res
160
+            . "\n<input name=\"choix_db\" value=\"new_spip\" type='radio' id='nou'"
161
+            . ($checked ? '' : " checked='checked'")
162
+            . " />\n<label for='nou'>" . _T('info_creer_base') . "</label></p>\n<p>"
163
+            . "\n<input type='text' name='table_new' class='text' value=\"spip\" size='20' /></p></fieldset>\n"
164
+        )
165
+
166
+        . ((defined('_INSTALL_TABLE_PREFIX') || $GLOBALS['table_prefix'] != 'spip')
167
+            ? '<h3>' . _T('install_table_prefix_hebergeur') . '  <tt>' . $GLOBALS['table_prefix'] . '</tt>' . '</h3>'
168
+            : '<fieldset><legend>' . _T('texte_choix_table_prefix') . "</legend>\n"
169
+            . "<p><label for='table_prefix'>" . _T('info_table_prefix') . '</label></p><p>'
170
+            . "\n<input type='text' id='tprefix' name='tprefix' class='text' value='"
171
+            . 'spip' # valeur par defaut
172
+            . "' size='20' /></p></fieldset>"
173
+        )
174
+
175
+        . bouton_suivant()));
176 176
 }
Please login to merge, or discard this patch.
ecrire/install/etape_3.php 2 patches
Spacing   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
 		= spip_connect_db($adresse_db, $port, $login_db, $pass_db, '', $server_db);
44 44
 
45 45
 	$GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
46
-		= $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
46
+		= $GLOBALS['spip_'.$server_db.'_functions_'.$GLOBALS['spip_sql_version']];
47 47
 
48 48
 	$fquery = sql_serveur('query', $server_db);
49 49
 	if ($choix_db == 'new_spip') {
@@ -53,13 +53,13 @@  discard block
 block discarded – undo
53 53
 			if (!$ok) {
54 54
 				$re = "Impossible de creer la base $re";
55 55
 				spip_log($re);
56
-				return '<p>' . _T('avis_connexion_erreur_creer_base') . "</p><!--\n$re\n-->";
56
+				return '<p>'._T('avis_connexion_erreur_creer_base')."</p><!--\n$re\n-->";
57 57
 			}
58 58
 		} else {
59 59
 			$re = "Le nom de la base doit correspondre a $re";
60 60
 			spip_log($re);
61 61
 
62
-			return '<p>' . _T('avis_connexion_erreur_nom_base') . "</p><!--\n$re\n-->";
62
+			return '<p>'._T('avis_connexion_erreur_nom_base')."</p><!--\n$re\n-->";
63 63
 		}
64 64
 	}
65 65
 
@@ -70,14 +70,14 @@  discard block
 block discarded – undo
70 70
 		= spip_connect_db($adresse_db, $port, $login_db, $pass_db, $sel_db, $server_db);
71 71
 
72 72
 	$GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
73
-		= $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
73
+		= $GLOBALS['spip_'.$server_db.'_functions_'.$GLOBALS['spip_sql_version']];
74 74
 
75 75
 	// Completer le tableau decrivant la connexion
76 76
 
77 77
 	$GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
78 78
 	$GLOBALS['connexions'][$server_db]['db'] = $sel_db;
79 79
 
80
-	$old = sql_showbase($table_prefix . '_meta', $server_db);
80
+	$old = sql_showbase($table_prefix.'_meta', $server_db);
81 81
 	if ($old) {
82 82
 		$old = sql_fetch($old, $server_db);
83 83
 	}
@@ -96,7 +96,7 @@  discard block
 block discarded – undo
96 96
 				$charset['charset'];
97 97
 			$charsetbase = $charset['charset'];
98 98
 		} else {
99
-			spip_log(_DEFAULT_CHARSET . ' inconnu du serveur SQL');
99
+			spip_log(_DEFAULT_CHARSET.' inconnu du serveur SQL');
100 100
 			$charsetbase = 'standard';
101 101
 		}
102 102
 		spip_log("Creation des tables. Codage $charsetbase");
@@ -146,7 +146,7 @@  discard block
 block discarded – undo
146 146
 		if ($r) {
147 147
 			$r = sql_fetch($r, $server_db);
148 148
 		}
149
-		$version_installee = $r ? (double)$r['valeur'] : 0;
149
+		$version_installee = $r ? (double) $r['valeur'] : 0;
150 150
 		if (!$version_installee || $GLOBALS['spip_version_base'] < $version_installee) {
151 151
 			$fupdateq(
152 152
 				'spip_meta',
@@ -155,7 +155,7 @@  discard block
 block discarded – undo
155 155
 				'',
156 156
 				$server_db
157 157
 			);
158
-			spip_log('nouvelle version installee: ' . $GLOBALS['spip_version_base']);
158
+			spip_log('nouvelle version installee: '.$GLOBALS['spip_version_base']);
159 159
 		}
160 160
 		// eliminer la derniere operation d'admin mal terminee
161 161
 		// notamment la mise a jour
@@ -182,7 +182,7 @@  discard block
 block discarded – undo
182 182
 	if ($chmod_db) {
183 183
 		install_fichier_connexion(
184 184
 			_FILE_CHMOD_TMP,
185
-			"if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', " . sprintf('0%3o', $chmod_db) . ");\n"
185
+			"if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', ".sprintf('0%3o', $chmod_db).");\n"
186 186
 		);
187 187
 	}
188 188
 
@@ -245,16 +245,16 @@  discard block
 block discarded – undo
245 245
 
246 246
 
247 247
 function install_premier_auteur($email, $login, $nom, #[\SensitiveParameter] $pass, $hidden, $auteur_obligatoire) {
248
-	return info_progression_etape(3, 'etape_', 'install/') .
248
+	return info_progression_etape(3, 'etape_', 'install/').
249 249
 	info_etape(
250 250
 		_T('info_informations_personnelles'),
251
-		'<b>' . _T('texte_informations_personnelles_1') . '</b>' .
252
-		aider('install5', true) .
253
-		'<p>' .
251
+		'<b>'._T('texte_informations_personnelles_1').'</b>'.
252
+		aider('install5', true).
253
+		'<p>'.
254 254
 		($auteur_obligatoire ?
255 255
 			''
256 256
 			:
257
-			_T('texte_informations_personnelles_2') . ' ' . _T('info_laisser_champs_vides')
257
+			_T('texte_informations_personnelles_2').' '._T('info_laisser_champs_vides')
258 258
 		)
259 259
 	)
260 260
 	. generer_form_ecrire('install', (
@@ -264,12 +264,12 @@  discard block
 block discarded – undo
264 264
 			_T('info_identification_publique'),
265 265
 			[
266 266
 				'nom' => [
267
-					'label' => '<b>' . _T('entree_signature') . "</b><br />\n" . _T('entree_nom_pseudo_1') . "\n",
267
+					'label' => '<b>'._T('entree_signature')."</b><br />\n"._T('entree_nom_pseudo_1')."\n",
268 268
 					'valeur' => $nom,
269 269
 					'required' => $auteur_obligatoire,
270 270
 				],
271 271
 				'email' => [
272
-					'label' => '<b>' . _T('entree_adresse_email') . "</b>\n",
272
+					'label' => '<b>'._T('entree_adresse_email')."</b>\n",
273 273
 					'valeur' => $email,
274 274
 				]
275 275
 			]
@@ -279,23 +279,23 @@  discard block
 block discarded – undo
279 279
 			_T('entree_identifiants_connexion'),
280 280
 			[
281 281
 				'login' => [
282
-					'label' => '<b>' . _T('entree_login') . "</b><br />\n" . _T(
282
+					'label' => '<b>'._T('entree_login')."</b><br />\n"._T(
283 283
 						'info_login_trop_court_car_pluriel',
284 284
 						['nb' => _LOGIN_TROP_COURT]
285
-					) . "\n",
285
+					)."\n",
286 286
 					'valeur' => $login,
287 287
 					'required' => $auteur_obligatoire,
288 288
 				],
289 289
 				'pass' => [
290
-					'label' => '<b>' . _T('entree_mot_passe') . "</b><br />\n" . _T(
290
+					'label' => '<b>'._T('entree_mot_passe')."</b><br />\n"._T(
291 291
 						'info_passe_trop_court_car_pluriel',
292 292
 						['nb' => _PASS_LONGUEUR_MINI]
293
-					) . "\n",
293
+					)."\n",
294 294
 					'valeur' => $pass,
295 295
 					'required' => $auteur_obligatoire,
296 296
 				],
297 297
 				'pass_verif' => [
298
-					'label' => '<b>' . _T('info_confirmer_passe') . "</b><br />\n",
298
+					'label' => '<b>'._T('info_confirmer_passe')."</b><br />\n",
299 299
 					'valeur' => $pass,
300 300
 					'required' => $auteur_obligatoire,
301 301
 				]
@@ -339,9 +339,9 @@  discard block
 block discarded – undo
339 339
 
340 340
 		if ($res) {
341 341
 			$res = info_progression_etape(2, 'etape_', 'install/', true)
342
-				. "<div class='error'><h3>" . _T('avis_operation_echec') . '</h3>'
342
+				. "<div class='error'><h3>"._T('avis_operation_echec').'</h3>'
343 343
 				. $res
344
-				. '<p>' . _T('texte_operation_echec') . '</p>'
344
+				. '<p>'._T('texte_operation_echec').'</p>'
345 345
 				. '</div>';
346 346
 		}
347 347
 	} else {
@@ -365,7 +365,7 @@  discard block
 block discarded – undo
365 365
 
366 366
 		$hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
367 367
 			. (defined('_INSTALL_NAME_DB') ? ''
368
-				: "\n<input type='hidden' name='sel_db' value=\"" . spip_htmlspecialchars($sel_db) . '" />');
368
+				: "\n<input type='hidden' name='sel_db' value=\"".spip_htmlspecialchars($sel_db).'" />');
369 369
 
370 370
 		$auteur_obligatoire = ($ldap_present ? 0 : !sql_countsel('spip_auteurs', '', '', '', $server_db));
371 371
 
Please login to merge, or discard this patch.
Indentation   +346 added lines, -346 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 include_spip('inc/headers');
@@ -18,199 +18,199 @@  discard block
 block discarded – undo
18 18
 
19 19
 function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db) {
20 20
 
21
-	// Prefix des tables :
22
-	// S'il n'est pas defini par mes_options/inc/mutualiser, on va le creer
23
-	// a partir de ce qui est envoye a l'installation
24
-	if (!defined('_INSTALL_TABLE_PREFIX')) {
25
-		$table_prefix = ($GLOBALS['table_prefix'] != 'spip')
26
-			? $GLOBALS['table_prefix']
27
-			: preparer_prefixe_tables(_request('tprefix'));
28
-		// S'il est vide on remet spip
29
-		if (!$table_prefix) {
30
-			$table_prefix = 'spip';
31
-		}
32
-	} else {
33
-		$table_prefix = _INSTALL_TABLE_PREFIX;
34
-	}
35
-
36
-	if (preg_match(',(.*):(.*),', (string) $adresse_db, $r)) {
37
-		[, $adresse_db, $port] = $r;
38
-	} else {
39
-		$port = '';
40
-	}
41
-
42
-	$GLOBALS['connexions'][$server_db]
43
-		= spip_connect_db($adresse_db, $port, $login_db, $pass_db, '', $server_db);
44
-
45
-	$GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
46
-		= $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
47
-
48
-	$fquery = sql_serveur('query', $server_db);
49
-	if ($choix_db == 'new_spip') {
50
-		$re = ',^[a-z_][a-z_0-9-]*$,i';
51
-		if (preg_match($re, (string) $sel_db)) {
52
-			$ok = sql_create_base($sel_db, $server_db);
53
-			if (!$ok) {
54
-				$re = "Impossible de creer la base $re";
55
-				spip_log($re);
56
-				return '<p>' . _T('avis_connexion_erreur_creer_base') . "</p><!--\n$re\n-->";
57
-			}
58
-		} else {
59
-			$re = "Le nom de la base doit correspondre a $re";
60
-			spip_log($re);
61
-
62
-			return '<p>' . _T('avis_connexion_erreur_nom_base') . "</p><!--\n$re\n-->";
63
-		}
64
-	}
65
-
66
-	// on rejoue la connexion apres avoir teste si il faut lui indiquer
67
-	// un sql_mode
68
-	install_mode_appel($server_db, false);
69
-	$GLOBALS['connexions'][$server_db]
70
-		= spip_connect_db($adresse_db, $port, $login_db, $pass_db, $sel_db, $server_db);
71
-
72
-	$GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
73
-		= $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
74
-
75
-	// Completer le tableau decrivant la connexion
76
-
77
-	$GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
78
-	$GLOBALS['connexions'][$server_db]['db'] = $sel_db;
79
-
80
-	$old = sql_showbase($table_prefix . '_meta', $server_db);
81
-	if ($old) {
82
-		$old = sql_fetch($old, $server_db);
83
-	}
84
-	if (!$old) {
85
-		// Si possible, demander au serveur d'envoyer les textes
86
-		// dans le codage std de SPIP,
87
-		$charset = sql_get_charset(_DEFAULT_CHARSET, $server_db);
88
-
89
-		if ($charset) {
90
-			sql_set_charset($charset['charset'], $server_db);
91
-			$GLOBALS['meta']['charset_sql_base'] =
92
-				$charset['charset'];
93
-			$GLOBALS['meta']['charset_collation_sql_base'] =
94
-				$charset['collation'];
95
-			$GLOBALS['meta']['charset_sql_connexion'] =
96
-				$charset['charset'];
97
-			$charsetbase = $charset['charset'];
98
-		} else {
99
-			spip_log(_DEFAULT_CHARSET . ' inconnu du serveur SQL');
100
-			$charsetbase = 'standard';
101
-		}
102
-		spip_log("Creation des tables. Codage $charsetbase");
103
-		creer_base($server_db); // AT LAST
104
-		// memoriser avec quel charset on l'a creee
105
-
106
-		if ($charset) {
107
-			$t = [
108
-				'nom' => 'charset_sql_base',
109
-				'valeur' => $charset['charset'],
110
-				'impt' => 'non'
111
-			];
112
-			@sql_insertq('spip_meta', $t, [], $server_db);
113
-			$t['nom'] = 'charset_collation_sql_base';
114
-			$t['valeur'] = $charset['collation'];
115
-			@sql_insertq('spip_meta', $t, [], $server_db);
116
-			$t['nom'] = 'charset_sql_connexion';
117
-			$t['valeur'] = $charset['charset'];
118
-			@sql_insertq('spip_meta', $t, [], $server_db);
119
-		}
120
-		$t = [
121
-			'nom' => 'version_installee',
122
-			'valeur' => $GLOBALS['spip_version_base'],
123
-			'impt' => 'non'
124
-		];
125
-		@sql_insertq('spip_meta', $t, [], $server_db);
126
-		$t['nom'] = 'nouvelle_install';
127
-		$t['valeur'] = 1;
128
-		@sql_insertq('spip_meta', $t, [], $server_db);
129
-		// positionner la langue par defaut du site si un cookie de lang a ete mis
130
-		if (isset($_COOKIE['spip_lang_ecrire'])) {
131
-			@sql_insertq(
132
-				'spip_meta',
133
-				['nom' => 'langue_site', 'valeur' => $_COOKIE['spip_lang_ecrire']],
134
-				[],
135
-				$server_db
136
-			);
137
-		}
138
-	} else {
139
-		// pour recreer les tables disparues au besoin
140
-		spip_log('Table des Meta deja la. Verification des autres.');
141
-		creer_base($server_db);
142
-		$fupdateq = sql_serveur('updateq', $server_db);
143
-
144
-		$r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db);
145
-
146
-		if ($r) {
147
-			$r = sql_fetch($r, $server_db);
148
-		}
149
-		$version_installee = $r ? (double)$r['valeur'] : 0;
150
-		if (!$version_installee || $GLOBALS['spip_version_base'] < $version_installee) {
151
-			$fupdateq(
152
-				'spip_meta',
153
-				['valeur' => $GLOBALS['spip_version_base'], 'impt' => 'non'],
154
-				"nom='version_installee'",
155
-				'',
156
-				$server_db
157
-			);
158
-			spip_log('nouvelle version installee: ' . $GLOBALS['spip_version_base']);
159
-		}
160
-		// eliminer la derniere operation d'admin mal terminee
161
-		// notamment la mise a jour
162
-		@$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR  nom='admin'", $server_db);
163
-	}
164
-
165
-	// recuperer le charset de la connexion dans les meta
166
-	$charset = '';
167
-	$r = $fquery("SELECT valeur FROM spip_meta WHERE nom='charset_sql_connexion'", $server_db);
168
-	if ($r) {
169
-		$r = sql_fetch($r, $server_db);
170
-	}
171
-	if ($r) {
172
-		$charset = $r['valeur'];
173
-	}
174
-
175
-	$ligne_rappel = install_mode_appel($server_db);
176
-
177
-	$result_ok = @$fquery('SELECT COUNT(*) FROM spip_meta', $server_db);
178
-	if (!$result_ok) {
179
-		return "<!--\nvielle = $old rappel= $ligne_rappel\n-->";
180
-	}
181
-
182
-	if ($chmod_db) {
183
-		install_fichier_connexion(
184
-			_FILE_CHMOD_TMP,
185
-			"if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', " . sprintf('0%3o', $chmod_db) . ");\n"
186
-		);
187
-	}
188
-
189
-	// si ce fichier existe a cette etape c'est qu'il provient
190
-	// d'une installation qui ne l'a pas cree correctement.
191
-	// Le supprimer pour que _FILE_CONNECT_TMP prime.
192
-
193
-	if (_FILE_CONNECT && file_exists(_FILE_CONNECT)) {
194
-		spip_unlink(_FILE_CONNECT);
195
-	}
196
-
197
-	install_fichier_connexion(
198
-		_FILE_CONNECT_TMP,
199
-		$ligne_rappel
200
-		. install_connexion(
201
-			$adresse_db,
202
-			$port,
203
-			$login_db,
204
-			$pass_db,
205
-			$sel_db,
206
-			$server_db,
207
-			$table_prefix,
208
-			'',
209
-			$charset
210
-		)
211
-	);
212
-
213
-	return '';
21
+    // Prefix des tables :
22
+    // S'il n'est pas defini par mes_options/inc/mutualiser, on va le creer
23
+    // a partir de ce qui est envoye a l'installation
24
+    if (!defined('_INSTALL_TABLE_PREFIX')) {
25
+        $table_prefix = ($GLOBALS['table_prefix'] != 'spip')
26
+            ? $GLOBALS['table_prefix']
27
+            : preparer_prefixe_tables(_request('tprefix'));
28
+        // S'il est vide on remet spip
29
+        if (!$table_prefix) {
30
+            $table_prefix = 'spip';
31
+        }
32
+    } else {
33
+        $table_prefix = _INSTALL_TABLE_PREFIX;
34
+    }
35
+
36
+    if (preg_match(',(.*):(.*),', (string) $adresse_db, $r)) {
37
+        [, $adresse_db, $port] = $r;
38
+    } else {
39
+        $port = '';
40
+    }
41
+
42
+    $GLOBALS['connexions'][$server_db]
43
+        = spip_connect_db($adresse_db, $port, $login_db, $pass_db, '', $server_db);
44
+
45
+    $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
46
+        = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
47
+
48
+    $fquery = sql_serveur('query', $server_db);
49
+    if ($choix_db == 'new_spip') {
50
+        $re = ',^[a-z_][a-z_0-9-]*$,i';
51
+        if (preg_match($re, (string) $sel_db)) {
52
+            $ok = sql_create_base($sel_db, $server_db);
53
+            if (!$ok) {
54
+                $re = "Impossible de creer la base $re";
55
+                spip_log($re);
56
+                return '<p>' . _T('avis_connexion_erreur_creer_base') . "</p><!--\n$re\n-->";
57
+            }
58
+        } else {
59
+            $re = "Le nom de la base doit correspondre a $re";
60
+            spip_log($re);
61
+
62
+            return '<p>' . _T('avis_connexion_erreur_nom_base') . "</p><!--\n$re\n-->";
63
+        }
64
+    }
65
+
66
+    // on rejoue la connexion apres avoir teste si il faut lui indiquer
67
+    // un sql_mode
68
+    install_mode_appel($server_db, false);
69
+    $GLOBALS['connexions'][$server_db]
70
+        = spip_connect_db($adresse_db, $port, $login_db, $pass_db, $sel_db, $server_db);
71
+
72
+    $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
73
+        = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
74
+
75
+    // Completer le tableau decrivant la connexion
76
+
77
+    $GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
78
+    $GLOBALS['connexions'][$server_db]['db'] = $sel_db;
79
+
80
+    $old = sql_showbase($table_prefix . '_meta', $server_db);
81
+    if ($old) {
82
+        $old = sql_fetch($old, $server_db);
83
+    }
84
+    if (!$old) {
85
+        // Si possible, demander au serveur d'envoyer les textes
86
+        // dans le codage std de SPIP,
87
+        $charset = sql_get_charset(_DEFAULT_CHARSET, $server_db);
88
+
89
+        if ($charset) {
90
+            sql_set_charset($charset['charset'], $server_db);
91
+            $GLOBALS['meta']['charset_sql_base'] =
92
+                $charset['charset'];
93
+            $GLOBALS['meta']['charset_collation_sql_base'] =
94
+                $charset['collation'];
95
+            $GLOBALS['meta']['charset_sql_connexion'] =
96
+                $charset['charset'];
97
+            $charsetbase = $charset['charset'];
98
+        } else {
99
+            spip_log(_DEFAULT_CHARSET . ' inconnu du serveur SQL');
100
+            $charsetbase = 'standard';
101
+        }
102
+        spip_log("Creation des tables. Codage $charsetbase");
103
+        creer_base($server_db); // AT LAST
104
+        // memoriser avec quel charset on l'a creee
105
+
106
+        if ($charset) {
107
+            $t = [
108
+                'nom' => 'charset_sql_base',
109
+                'valeur' => $charset['charset'],
110
+                'impt' => 'non'
111
+            ];
112
+            @sql_insertq('spip_meta', $t, [], $server_db);
113
+            $t['nom'] = 'charset_collation_sql_base';
114
+            $t['valeur'] = $charset['collation'];
115
+            @sql_insertq('spip_meta', $t, [], $server_db);
116
+            $t['nom'] = 'charset_sql_connexion';
117
+            $t['valeur'] = $charset['charset'];
118
+            @sql_insertq('spip_meta', $t, [], $server_db);
119
+        }
120
+        $t = [
121
+            'nom' => 'version_installee',
122
+            'valeur' => $GLOBALS['spip_version_base'],
123
+            'impt' => 'non'
124
+        ];
125
+        @sql_insertq('spip_meta', $t, [], $server_db);
126
+        $t['nom'] = 'nouvelle_install';
127
+        $t['valeur'] = 1;
128
+        @sql_insertq('spip_meta', $t, [], $server_db);
129
+        // positionner la langue par defaut du site si un cookie de lang a ete mis
130
+        if (isset($_COOKIE['spip_lang_ecrire'])) {
131
+            @sql_insertq(
132
+                'spip_meta',
133
+                ['nom' => 'langue_site', 'valeur' => $_COOKIE['spip_lang_ecrire']],
134
+                [],
135
+                $server_db
136
+            );
137
+        }
138
+    } else {
139
+        // pour recreer les tables disparues au besoin
140
+        spip_log('Table des Meta deja la. Verification des autres.');
141
+        creer_base($server_db);
142
+        $fupdateq = sql_serveur('updateq', $server_db);
143
+
144
+        $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db);
145
+
146
+        if ($r) {
147
+            $r = sql_fetch($r, $server_db);
148
+        }
149
+        $version_installee = $r ? (double)$r['valeur'] : 0;
150
+        if (!$version_installee || $GLOBALS['spip_version_base'] < $version_installee) {
151
+            $fupdateq(
152
+                'spip_meta',
153
+                ['valeur' => $GLOBALS['spip_version_base'], 'impt' => 'non'],
154
+                "nom='version_installee'",
155
+                '',
156
+                $server_db
157
+            );
158
+            spip_log('nouvelle version installee: ' . $GLOBALS['spip_version_base']);
159
+        }
160
+        // eliminer la derniere operation d'admin mal terminee
161
+        // notamment la mise a jour
162
+        @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR  nom='admin'", $server_db);
163
+    }
164
+
165
+    // recuperer le charset de la connexion dans les meta
166
+    $charset = '';
167
+    $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='charset_sql_connexion'", $server_db);
168
+    if ($r) {
169
+        $r = sql_fetch($r, $server_db);
170
+    }
171
+    if ($r) {
172
+        $charset = $r['valeur'];
173
+    }
174
+
175
+    $ligne_rappel = install_mode_appel($server_db);
176
+
177
+    $result_ok = @$fquery('SELECT COUNT(*) FROM spip_meta', $server_db);
178
+    if (!$result_ok) {
179
+        return "<!--\nvielle = $old rappel= $ligne_rappel\n-->";
180
+    }
181
+
182
+    if ($chmod_db) {
183
+        install_fichier_connexion(
184
+            _FILE_CHMOD_TMP,
185
+            "if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', " . sprintf('0%3o', $chmod_db) . ");\n"
186
+        );
187
+    }
188
+
189
+    // si ce fichier existe a cette etape c'est qu'il provient
190
+    // d'une installation qui ne l'a pas cree correctement.
191
+    // Le supprimer pour que _FILE_CONNECT_TMP prime.
192
+
193
+    if (_FILE_CONNECT && file_exists(_FILE_CONNECT)) {
194
+        spip_unlink(_FILE_CONNECT);
195
+    }
196
+
197
+    install_fichier_connexion(
198
+        _FILE_CONNECT_TMP,
199
+        $ligne_rappel
200
+        . install_connexion(
201
+            $adresse_db,
202
+            $port,
203
+            $login_db,
204
+            $pass_db,
205
+            $sel_db,
206
+            $server_db,
207
+            $table_prefix,
208
+            '',
209
+            $charset
210
+        )
211
+    );
212
+
213
+    return '';
214 214
 }
215 215
 
216 216
 /**
@@ -225,166 +225,166 @@  discard block
 block discarded – undo
225 225
  * @return string Le préfixe corrigé
226 226
  */
227 227
 function preparer_prefixe_tables($prefixe) {
228
-	return trim(preg_replace(',^\d+,', '', preg_replace(',[^a-z0-9],', '', strtolower($prefixe))));
228
+    return trim(preg_replace(',^\d+,', '', preg_replace(',[^a-z0-9],', '', strtolower($prefixe))));
229 229
 }
230 230
 
231 231
 function install_propose_ldap() {
232
-	return generer_form_ecrire('install', (
233
-	fieldset(
234
-		_T('info_authentification_externe'),
235
-		[
236
-			'etape' => [
237
-				'label' => _T('texte_annuaire_ldap_1'),
238
-				'valeur' => 'ldap1',
239
-				'hidden' => true
240
-			]
241
-		],
242
-		bouton_suivant(_T('bouton_acces_ldap'))
243
-	)));
232
+    return generer_form_ecrire('install', (
233
+    fieldset(
234
+        _T('info_authentification_externe'),
235
+        [
236
+            'etape' => [
237
+                'label' => _T('texte_annuaire_ldap_1'),
238
+                'valeur' => 'ldap1',
239
+                'hidden' => true
240
+            ]
241
+        ],
242
+        bouton_suivant(_T('bouton_acces_ldap'))
243
+    )));
244 244
 }
245 245
 
246 246
 
247 247
 function install_premier_auteur($email, $login, $nom, #[\SensitiveParameter] $pass, $hidden, $auteur_obligatoire) {
248
-	return info_progression_etape(3, 'etape_', 'install/') .
249
-	info_etape(
250
-		_T('info_informations_personnelles'),
251
-		'<b>' . _T('texte_informations_personnelles_1') . '</b>' .
252
-		aider('install5', true) .
253
-		'<p>' .
254
-		($auteur_obligatoire ?
255
-			''
256
-			:
257
-			_T('texte_informations_personnelles_2') . ' ' . _T('info_laisser_champs_vides')
258
-		)
259
-	)
260
-	. generer_form_ecrire('install', (
261
-		"\n<input type='hidden' name='etape' value='3b' />"
262
-		. $hidden
263
-		. fieldset(
264
-			_T('info_identification_publique'),
265
-			[
266
-				'nom' => [
267
-					'label' => '<b>' . _T('entree_signature') . "</b><br />\n" . _T('entree_nom_pseudo_1') . "\n",
268
-					'valeur' => $nom,
269
-					'required' => $auteur_obligatoire,
270
-				],
271
-				'email' => [
272
-					'label' => '<b>' . _T('entree_adresse_email') . "</b>\n",
273
-					'valeur' => $email,
274
-				]
275
-			]
276
-		)
277
-
278
-		. fieldset(
279
-			_T('entree_identifiants_connexion'),
280
-			[
281
-				'login' => [
282
-					'label' => '<b>' . _T('entree_login') . "</b><br />\n" . _T(
283
-						'info_login_trop_court_car_pluriel',
284
-						['nb' => _LOGIN_TROP_COURT]
285
-					) . "\n",
286
-					'valeur' => $login,
287
-					'required' => $auteur_obligatoire,
288
-				],
289
-				'pass' => [
290
-					'label' => '<b>' . _T('entree_mot_passe') . "</b><br />\n" . _T(
291
-						'info_passe_trop_court_car_pluriel',
292
-						['nb' => _PASS_LONGUEUR_MINI]
293
-					) . "\n",
294
-					'valeur' => $pass,
295
-					'required' => $auteur_obligatoire,
296
-				],
297
-				'pass_verif' => [
298
-					'label' => '<b>' . _T('info_confirmer_passe') . "</b><br />\n",
299
-					'valeur' => $pass,
300
-					'required' => $auteur_obligatoire,
301
-				]
302
-			]
303
-		)
304
-		. bouton_suivant()));
248
+    return info_progression_etape(3, 'etape_', 'install/') .
249
+    info_etape(
250
+        _T('info_informations_personnelles'),
251
+        '<b>' . _T('texte_informations_personnelles_1') . '</b>' .
252
+        aider('install5', true) .
253
+        '<p>' .
254
+        ($auteur_obligatoire ?
255
+            ''
256
+            :
257
+            _T('texte_informations_personnelles_2') . ' ' . _T('info_laisser_champs_vides')
258
+        )
259
+    )
260
+    . generer_form_ecrire('install', (
261
+        "\n<input type='hidden' name='etape' value='3b' />"
262
+        . $hidden
263
+        . fieldset(
264
+            _T('info_identification_publique'),
265
+            [
266
+                'nom' => [
267
+                    'label' => '<b>' . _T('entree_signature') . "</b><br />\n" . _T('entree_nom_pseudo_1') . "\n",
268
+                    'valeur' => $nom,
269
+                    'required' => $auteur_obligatoire,
270
+                ],
271
+                'email' => [
272
+                    'label' => '<b>' . _T('entree_adresse_email') . "</b>\n",
273
+                    'valeur' => $email,
274
+                ]
275
+            ]
276
+        )
277
+
278
+        . fieldset(
279
+            _T('entree_identifiants_connexion'),
280
+            [
281
+                'login' => [
282
+                    'label' => '<b>' . _T('entree_login') . "</b><br />\n" . _T(
283
+                        'info_login_trop_court_car_pluriel',
284
+                        ['nb' => _LOGIN_TROP_COURT]
285
+                    ) . "\n",
286
+                    'valeur' => $login,
287
+                    'required' => $auteur_obligatoire,
288
+                ],
289
+                'pass' => [
290
+                    'label' => '<b>' . _T('entree_mot_passe') . "</b><br />\n" . _T(
291
+                        'info_passe_trop_court_car_pluriel',
292
+                        ['nb' => _PASS_LONGUEUR_MINI]
293
+                    ) . "\n",
294
+                    'valeur' => $pass,
295
+                    'required' => $auteur_obligatoire,
296
+                ],
297
+                'pass_verif' => [
298
+                    'label' => '<b>' . _T('info_confirmer_passe') . "</b><br />\n",
299
+                    'valeur' => $pass,
300
+                    'required' => $auteur_obligatoire,
301
+                ]
302
+            ]
303
+        )
304
+        . bouton_suivant()));
305 305
 }
306 306
 
307 307
 function install_etape_3_dist() {
308
-	$ldap_present = _request('ldap_present');
309
-
310
-	if (!$ldap_present) {
311
-		$adresse_db = defined('_INSTALL_HOST_DB')
312
-			? _INSTALL_HOST_DB
313
-			: _request('adresse_db');
314
-
315
-		$login_db = defined('_INSTALL_USER_DB')
316
-			? _INSTALL_USER_DB
317
-			: _request('login_db');
318
-
319
-		$pass_db = defined('_INSTALL_PASS_DB')
320
-			? _INSTALL_PASS_DB
321
-			: _request('pass_db');
322
-
323
-		$server_db = defined('_INSTALL_SERVER_DB')
324
-			? _INSTALL_SERVER_DB
325
-			: _request('server_db');
326
-
327
-		$chmod_db = defined('_SPIP_CHMOD')
328
-			? _SPIP_CHMOD
329
-			: _request('chmod');
330
-
331
-		$choix_db = defined('_INSTALL_NAME_DB')
332
-			? _INSTALL_NAME_DB
333
-			: _request('choix_db');
334
-
335
-		$sel_db = ($choix_db == 'new_spip')
336
-			? _request('table_new') : $choix_db;
337
-
338
-		$res = install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db);
339
-
340
-		if ($res) {
341
-			$res = info_progression_etape(2, 'etape_', 'install/', true)
342
-				. "<div class='error'><h3>" . _T('avis_operation_echec') . '</h3>'
343
-				. $res
344
-				. '<p>' . _T('texte_operation_echec') . '</p>'
345
-				. '</div>';
346
-		}
347
-	} else {
348
-		$res = '';
349
-		[$adresse_db, $login_db, $pass_db, $sel_db, $server_db] = analyse_fichier_connection(_FILE_CONNECT_TMP);
350
-		$GLOBALS['connexions'][$server_db] = spip_connect_db($adresse_db, $sel_db, $login_db, $pass_db, $sel_db, $server_db);
351
-	}
352
-
353
-	if (!$res) {
354
-		if (file_exists(_FILE_CONNECT_TMP)) {
355
-			include(_FILE_CONNECT_TMP);
356
-		} else {
357
-			redirige_url_ecrire('install');
358
-		}
359
-
360
-		if (file_exists(_FILE_CHMOD_TMP)) {
361
-			include(_FILE_CHMOD_TMP);
362
-		} else {
363
-			redirige_url_ecrire('install');
364
-		}
365
-
366
-		$hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
367
-			. (defined('_INSTALL_NAME_DB') ? ''
368
-				: "\n<input type='hidden' name='sel_db' value=\"" . spip_htmlspecialchars($sel_db) . '" />');
369
-
370
-		$auteur_obligatoire = ($ldap_present ? 0 : !sql_countsel('spip_auteurs', '', '', '', $server_db));
371
-
372
-		$res = "<div class='success'><b>"
373
-			. _T('info_base_installee')
374
-			. '</b></div>'
375
-			. install_premier_auteur(
376
-				_request('email'),
377
-				_request('login'),
378
-				_request('nom'),
379
-				_request('pass'),
380
-				$hidden,
381
-				$auteur_obligatoire
382
-			)
383
-			. (($ldap_present || !function_exists('ldap_connect'))
384
-				? '' : install_propose_ldap());
385
-	}
386
-
387
-
388
-	$minipage = new Spip\Afficher\Minipage\Installation();
389
-	echo $minipage->page($res);
308
+    $ldap_present = _request('ldap_present');
309
+
310
+    if (!$ldap_present) {
311
+        $adresse_db = defined('_INSTALL_HOST_DB')
312
+            ? _INSTALL_HOST_DB
313
+            : _request('adresse_db');
314
+
315
+        $login_db = defined('_INSTALL_USER_DB')
316
+            ? _INSTALL_USER_DB
317
+            : _request('login_db');
318
+
319
+        $pass_db = defined('_INSTALL_PASS_DB')
320
+            ? _INSTALL_PASS_DB
321
+            : _request('pass_db');
322
+
323
+        $server_db = defined('_INSTALL_SERVER_DB')
324
+            ? _INSTALL_SERVER_DB
325
+            : _request('server_db');
326
+
327
+        $chmod_db = defined('_SPIP_CHMOD')
328
+            ? _SPIP_CHMOD
329
+            : _request('chmod');
330
+
331
+        $choix_db = defined('_INSTALL_NAME_DB')
332
+            ? _INSTALL_NAME_DB
333
+            : _request('choix_db');
334
+
335
+        $sel_db = ($choix_db == 'new_spip')
336
+            ? _request('table_new') : $choix_db;
337
+
338
+        $res = install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db);
339
+
340
+        if ($res) {
341
+            $res = info_progression_etape(2, 'etape_', 'install/', true)
342
+                . "<div class='error'><h3>" . _T('avis_operation_echec') . '</h3>'
343
+                . $res
344
+                . '<p>' . _T('texte_operation_echec') . '</p>'
345
+                . '</div>';
346
+        }
347
+    } else {
348
+        $res = '';
349
+        [$adresse_db, $login_db, $pass_db, $sel_db, $server_db] = analyse_fichier_connection(_FILE_CONNECT_TMP);
350
+        $GLOBALS['connexions'][$server_db] = spip_connect_db($adresse_db, $sel_db, $login_db, $pass_db, $sel_db, $server_db);
351
+    }
352
+
353
+    if (!$res) {
354
+        if (file_exists(_FILE_CONNECT_TMP)) {
355
+            include(_FILE_CONNECT_TMP);
356
+        } else {
357
+            redirige_url_ecrire('install');
358
+        }
359
+
360
+        if (file_exists(_FILE_CHMOD_TMP)) {
361
+            include(_FILE_CHMOD_TMP);
362
+        } else {
363
+            redirige_url_ecrire('install');
364
+        }
365
+
366
+        $hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
367
+            . (defined('_INSTALL_NAME_DB') ? ''
368
+                : "\n<input type='hidden' name='sel_db' value=\"" . spip_htmlspecialchars($sel_db) . '" />');
369
+
370
+        $auteur_obligatoire = ($ldap_present ? 0 : !sql_countsel('spip_auteurs', '', '', '', $server_db));
371
+
372
+        $res = "<div class='success'><b>"
373
+            . _T('info_base_installee')
374
+            . '</b></div>'
375
+            . install_premier_auteur(
376
+                _request('email'),
377
+                _request('login'),
378
+                _request('nom'),
379
+                _request('pass'),
380
+                $hidden,
381
+                $auteur_obligatoire
382
+            )
383
+            . (($ldap_present || !function_exists('ldap_connect'))
384
+                ? '' : install_propose_ldap());
385
+    }
386
+
387
+
388
+    $minipage = new Spip\Afficher\Minipage\Installation();
389
+    echo $minipage->page($res);
390 390
 }
Please login to merge, or discard this patch.
ecrire/public/assembler.php 2 patches
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.
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -38,7 +38,7 @@  discard block
 block discarded – undo
38 38
 
39 39
 	$GLOBALS['contexte'] = calculer_contexte();
40 40
 	$page = ['contexte_implicite' => calculer_contexte_implicite()];
41
-	$page['contexte_implicite']['cache'] = $fond . preg_replace(
41
+	$page['contexte_implicite']['cache'] = $fond.preg_replace(
42 42
 		',\.[a-zA-Z0-9]*$,',
43 43
 		'',
44 44
 		preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI'])
@@ -139,7 +139,7 @@  discard block
 block discarded – undo
139 139
 			if ($page === '') {
140 140
 				$erreur = _T(
141 141
 					'info_erreur_squelette2',
142
-					['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES]
142
+					['fichier' => spip_htmlspecialchars($fond).'.'._EXTENSION_SQUELETTES]
143 143
 				);
144 144
 				erreur_squelette($erreur);
145 145
 				// eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
@@ -182,7 +182,7 @@  discard block
 block discarded – undo
182 182
 		and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
183 183
 		and !isset($page['entetes']['Last-Modified'])
184 184
 	) {
185
-		$page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT';
185
+		$page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified).' GMT';
186 186
 	}
187 187
 
188 188
 	// fermer la connexion apres les headers si requete HEAD
@@ -245,7 +245,7 @@  discard block
 block discarded – undo
245 245
 		'spip_version_code' => $GLOBALS['spip_version_code'],
246 246
 	];
247 247
 	if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
248
-		$contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST'];
248
+		$contexte_implicite['host'] .= '|'.$_SERVER['HTTP_X_FORWARDED_HOST'];
249 249
 	}
250 250
 
251 251
 	return $contexte_implicite;
@@ -577,7 +577,7 @@  discard block
 block discarded – undo
577 577
 			}
578 578
 		}
579 579
 		if (is_null($id)) {
580
-			$msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]);
580
+			$msg = "modeles/$modele : "._T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]);
581 581
 			erreur_squelette($msg);
582 582
 			// on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant
583 583
 			$id = 0;
@@ -622,7 +622,7 @@  discard block
 block discarded – undo
622 622
 		}
623 623
 
624 624
 		if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
625
-			if (!trouve_modele($fond = ($type . '_' . $soustype))) {
625
+			if (!trouve_modele($fond = ($type.'_'.$soustype))) {
626 626
 				$fond = '';
627 627
 				$class = $soustype;
628 628
 			}
@@ -637,7 +637,7 @@  discard block
 block discarded – undo
637 637
 
638 638
 		return false;
639 639
 	}
640
-	$fond = 'modeles/' . $fond;
640
+	$fond = 'modeles/'.$fond;
641 641
 	// Creer le contexte
642 642
 	$contexte = $env;
643 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
@@ -678,7 +678,7 @@  discard block
 block discarded – undo
678 678
 	// sinon, s'il y a un lien, on l'ajoute classiquement
679 679
 	if (
680 680
 		strstr(
681
-			' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
681
+			' '.($classes = extraire_attribut($retour, 'class')).' ',
682 682
 			'spip_lien_ok'
683 683
 		)
684 684
 	) {
@@ -689,7 +689,7 @@  discard block
 block discarded – undo
689 689
 		);
690 690
 	} else {
691 691
 		if ($lien) {
692
-			$retour = '<a href="' . $lien['href'] . '" class="' . $lien['class'] . '">' . $retour . '</a>';
692
+			$retour = '<a href="'.$lien['href'].'" class="'.$lien['class'].'">'.$retour.'</a>';
693 693
 		}
694 694
 	}
695 695
 
@@ -712,7 +712,7 @@  discard block
 block discarded – undo
712 712
 		return $page;
713 713
 	}
714 714
 	// eval $page et affecte $res
715
-	include _ROOT_RESTREINT . 'public/evaluer_page.php';
715
+	include _ROOT_RESTREINT.'public/evaluer_page.php';
716 716
 
717 717
 	// Lever un drapeau (global) si le fond utilise #SESSION
718 718
 	// a destination de public/parametrer
@@ -779,16 +779,16 @@  discard block
 block discarded – undo
779 779
 			if (($pos = strpos($head, '<head>')) !== false) {
780 780
 				$head = substr_replace($head, $base, $pos + 6, 0);
781 781
 			} elseif (preg_match(',<head[^>]*>,i', $head, $r)) {
782
-				$head = str_replace($r[0], $r[0] . $base, $head);
782
+				$head = str_replace($r[0], $r[0].$base, $head);
783 783
 			}
784
-			$texte = $head . substr($texte, $poshead);
784
+			$texte = $head.substr($texte, $poshead);
785 785
 		}
786 786
 		if ($href_base) {
787 787
 			// gerer les ancres
788 788
 			$base = $_SERVER['REQUEST_URI'];
789 789
 			// pas de guillemets ni < dans l'URL qu'on insere dans le HTML
790 790
 			if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) {
791
-				$base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base);
791
+				$base = str_replace(["'", '"', '<'], ['%27', '%22', '%3C'], $base);
792 792
 			}
793 793
 			if (strpos($texte, "href='#") !== false) {
794 794
 				$texte = str_replace("href='#", "href='$base#", $texte);
Please login to merge, or discard this patch.
ecrire/public/fonctions.php 3 patches
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.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -86,7 +86,7 @@  discard block
 block discarded – undo
86 86
 		$texte = $intro;
87 87
 	} else {
88 88
 		if (
89
-			!str_contains("\n" . $texte, "\n|")
89
+			!str_contains("\n".$texte, "\n|")
90 90
 			&& strlen($texte) > 2.5 * $longueur
91 91
 		) {
92 92
 			if (str_contains($texte, '<multi')) {
@@ -170,11 +170,11 @@  discard block
 block discarded – undo
170 170
 	if ($pas < 1) {
171 171
 		return '';
172 172
 	}
173
-	$ancre = 'pagination' . $nom; // #pagination_articles
174
-	$debut = 'debut' . $nom; // 'debut_articles'
173
+	$ancre = 'pagination'.$nom; // #pagination_articles
174
+	$debut = 'debut'.$nom; // 'debut_articles'
175 175
 
176 176
 	// n'afficher l'ancre qu'une fois
177
-	$bloc_ancre = isset($ancres[$ancre]) ? '' : ($ancres[$ancre] = "<a id='" . $ancre . "' class='pagination_ancre'></a>");
177
+	$bloc_ancre = isset($ancres[$ancre]) ? '' : ($ancres[$ancre] = "<a id='".$ancre."' class='pagination_ancre'></a>");
178 178
 	// liste = false : on ne veut que l'ancre
179 179
 	if (!$liste) {
180 180
 		return $ancres[$ancre];
@@ -203,7 +203,7 @@  discard block
 block discarded – undo
203 203
 
204 204
 	if ($modele) {
205 205
 		$pagination['type_pagination'] = $modele;
206
-		$modele = trouver_fond('pagination_' . $modele, 'modeles') ? '_' . $modele : '';
206
+		$modele = trouver_fond('pagination_'.$modele, 'modeles') ? '_'.$modele : '';
207 207
 	}
208 208
 
209 209
 	if (!defined('_PAGINATION_NOMBRE_LIENS_MAX')) {
@@ -278,7 +278,7 @@  discard block
 block discarded – undo
278 278
 function lister_objets_avec_logos($type) {
279 279
 
280 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));
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 282
 	if ($ids) {
283 283
 		$ids = array_column($ids, 'id_objet');
284 284
 		return implode(',', $ids);
@@ -471,7 +471,7 @@  discard block
 block discarded – undo
471 471
 
472 472
 	// Classes : on indique le sens de tri et l'item exposé
473 473
 	if (!$is_sens_fixe) {
474
-		$classe .= ' item-tri item-tri_' . ($tri_sens_actuel === 1 ? 'asc' : 'desc');
474
+		$classe .= ' item-tri item-tri_'.($tri_sens_actuel === 1 ? 'asc' : 'desc');
475 475
 	}
476 476
 	if ($champ_ou_sens === $tri_champ) {
477 477
 		$classe .= ' item-tri_actif';
@@ -510,7 +510,7 @@  discard block
 block discarded – undo
510 510
  */
511 511
 function tri_champ_order($t, $from = null, $senstri = '') {
512 512
 	if (str_starts_with($t, 'multi ')) {
513
-		return 'multi' . $senstri;
513
+		return 'multi'.$senstri;
514 514
 	}
515 515
 
516 516
 	$champ = $t;
@@ -540,7 +540,7 @@  discard block
 block discarded – undo
540 540
 	return match ($prefixe) {
541 541
 		'num ' => "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}, 0+$champ{$senstri}",
542 542
 		'sinum ' => "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}",
543
-		default => $champ . $senstri,
543
+		default => $champ.$senstri,
544 544
 	};
545 545
 }
546 546
 
@@ -641,7 +641,7 @@  discard block
 block discarded – undo
641 641
 		$l = couleur_hex_to_hsl($couleur, 'l');
642 642
 		$styles .= ":root {--spip-login-color-theme--hs: {$hs};--spip-login-color-theme--l: {$l};}\n";
643 643
 	}
644
-	$logo_bg = _DIR_IMG . 'spip_fond_login.jpg';
644
+	$logo_bg = _DIR_IMG.'spip_fond_login.jpg';
645 645
 	if (file_exists($logo_bg)) {
646 646
 		include_spip('inc/filtres_images_mini');
647 647
 		$logo_mini = image_reduire($logo_bg, 64, 64);
Please login to merge, or discard this patch.
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -282,8 +282,7 @@  discard block
 block discarded – undo
282 282
 	if ($ids) {
283 283
 		$ids = array_column($ids, 'id_objet');
284 284
 		return implode(',', $ids);
285
-	}
286
-	else {
285
+	} else {
287 286
 		return '0';
288 287
 	}
289 288
 }
@@ -651,8 +650,7 @@  discard block
 block discarded – undo
651 650
 		$logo_bg = timestamp($logo_bg);
652 651
 		$styles .= ".page_login, .page_spip_pass {background-image:url($logo_bg), url($logo_mini);}\n";
653 652
 		$Pile[0]['body_class'] = 'fond_image';
654
-	}
655
-	else {
653
+	} else {
656 654
 		$Pile[0]['body_class'] = 'sans_fond';
657 655
 	}
658 656
 	if ($styles) {
Please login to merge, or discard this patch.
ecrire/public/composer.php 3 patches
Indentation   +768 added lines, -768 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('inc/texte');
@@ -40,234 +40,234 @@  discard block
 block discarded – undo
40 40
 
41 41
 function public_composer_dist($squelette, $mime_type, $gram, $source, string $connect = '') {
42 42
 
43
-	$skel = null;
44
-	$boucle = null;
45
-	$nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect);
46
-
47
-	//  si deja en memoire (INCLURE  a repetition) c'est bon.
48
-	if (function_exists($nom)) {
49
-		return $nom;
50
-	}
51
-
52
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
53
-		$GLOBALS['debug_objets']['courant'] = $nom;
54
-	}
55
-
56
-	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
57
-
58
-	// si squelette est deja compile et perenne, le charger
59
-	if (!squelette_obsolete($phpfile, $source)) {
60
-		include_once $phpfile;
61
-		#if (!squelette_obsolete($phpfile, $source)
62
-		#  AND lire_fichier ($phpfile, $skel_code,
63
-		#  array('critique' => 'oui', 'phpcheck' => 'oui'))){
64
-		## eval('?'.'>'.$skel_code);
65
-		#	 spip_log($skel_code, 'comp')
66
-		#}
67
-	}
68
-
69
-	if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
70
-		include_once $lib;
71
-	}
72
-
73
-	// tester si le eval ci-dessus a mis le squelette en memoire
74
-
75
-	if (function_exists($nom)) {
76
-		return $nom;
77
-	}
78
-
79
-	// charger le source, si possible, et compiler
80
-	$skel_code = '';
81
-	if (lire_fichier($source, $skel)) {
82
-		$compiler = charger_fonction('compiler', 'public');
83
-		$skel_code = $compiler($skel, $nom, $gram, $source, $connect);
84
-	}
85
-
86
-	// Ne plus rien faire si le compilateur n'a pas pu operer.
87
-	if (!$skel_code) {
88
-		return false;
89
-	}
90
-
91
-	foreach ($skel_code as $id => $boucle) {
92
-		$f = $boucle->return;
93
-		try {
94
-			eval("return true; $f ;");
95
-		} catch (\ParseError $e) {
96
-			// Code syntaxiquement faux (critere etc mal programme')
97
-			$msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
98
-			erreur_squelette($msg, $boucle);
99
-			// continuer pour trouver d'autres fautes eventuelles
100
-			// mais prevenir que c'est mort
101
-			$nom = '';
102
-		}
103
-
104
-		// contexte de compil inutile a present
105
-		// (mais la derniere valeur de $boucle est utilisee ci-dessous)
106
-		$skel_code[$id] = $f;
107
-	}
108
-
109
-	$code = '';
110
-	if ($nom) {
111
-		// Si le code est bon, concatener et mettre en cache
112
-		if (function_exists($nom)) {
113
-			$code = squelette_traduit($skel, $source, $phpfile, $skel_code);
114
-		} else {
115
-			// code semantiquement faux: bug du compilateur
116
-			// $boucle est en fait ici la fct principale du squelette
117
-			$msg = _T('zbug_erreur_compilation');
118
-			erreur_squelette($msg, $boucle);
119
-			$nom = '';
120
-		}
121
-	}
122
-
123
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
124
-		// Tracer ce qui vient d'etre compile
125
-		$GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
126
-
127
-		// si c'est ce que demande le debusqueur, lui passer la main
128
-		if (
129
-			$GLOBALS['debug_objets']['sourcefile']
130
-			and (_request('var_mode_objet') == $nom)
131
-			and (_request('var_mode_affiche') == 'code')
132
-		) {
133
-			erreur_squelette();
134
-		}
135
-	}
136
-
137
-	return $nom ?: false;
43
+    $skel = null;
44
+    $boucle = null;
45
+    $nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect);
46
+
47
+    //  si deja en memoire (INCLURE  a repetition) c'est bon.
48
+    if (function_exists($nom)) {
49
+        return $nom;
50
+    }
51
+
52
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
53
+        $GLOBALS['debug_objets']['courant'] = $nom;
54
+    }
55
+
56
+    $phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
57
+
58
+    // si squelette est deja compile et perenne, le charger
59
+    if (!squelette_obsolete($phpfile, $source)) {
60
+        include_once $phpfile;
61
+        #if (!squelette_obsolete($phpfile, $source)
62
+        #  AND lire_fichier ($phpfile, $skel_code,
63
+        #  array('critique' => 'oui', 'phpcheck' => 'oui'))){
64
+        ## eval('?'.'>'.$skel_code);
65
+        #	 spip_log($skel_code, 'comp')
66
+        #}
67
+    }
68
+
69
+    if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
70
+        include_once $lib;
71
+    }
72
+
73
+    // tester si le eval ci-dessus a mis le squelette en memoire
74
+
75
+    if (function_exists($nom)) {
76
+        return $nom;
77
+    }
78
+
79
+    // charger le source, si possible, et compiler
80
+    $skel_code = '';
81
+    if (lire_fichier($source, $skel)) {
82
+        $compiler = charger_fonction('compiler', 'public');
83
+        $skel_code = $compiler($skel, $nom, $gram, $source, $connect);
84
+    }
85
+
86
+    // Ne plus rien faire si le compilateur n'a pas pu operer.
87
+    if (!$skel_code) {
88
+        return false;
89
+    }
90
+
91
+    foreach ($skel_code as $id => $boucle) {
92
+        $f = $boucle->return;
93
+        try {
94
+            eval("return true; $f ;");
95
+        } catch (\ParseError $e) {
96
+            // Code syntaxiquement faux (critere etc mal programme')
97
+            $msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
98
+            erreur_squelette($msg, $boucle);
99
+            // continuer pour trouver d'autres fautes eventuelles
100
+            // mais prevenir que c'est mort
101
+            $nom = '';
102
+        }
103
+
104
+        // contexte de compil inutile a present
105
+        // (mais la derniere valeur de $boucle est utilisee ci-dessous)
106
+        $skel_code[$id] = $f;
107
+    }
108
+
109
+    $code = '';
110
+    if ($nom) {
111
+        // Si le code est bon, concatener et mettre en cache
112
+        if (function_exists($nom)) {
113
+            $code = squelette_traduit($skel, $source, $phpfile, $skel_code);
114
+        } else {
115
+            // code semantiquement faux: bug du compilateur
116
+            // $boucle est en fait ici la fct principale du squelette
117
+            $msg = _T('zbug_erreur_compilation');
118
+            erreur_squelette($msg, $boucle);
119
+            $nom = '';
120
+        }
121
+    }
122
+
123
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
124
+        // Tracer ce qui vient d'etre compile
125
+        $GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
126
+
127
+        // si c'est ce que demande le debusqueur, lui passer la main
128
+        if (
129
+            $GLOBALS['debug_objets']['sourcefile']
130
+            and (_request('var_mode_objet') == $nom)
131
+            and (_request('var_mode_affiche') == 'code')
132
+        ) {
133
+            erreur_squelette();
134
+        }
135
+    }
136
+
137
+    return $nom ?: false;
138 138
 }
139 139
 
140 140
 function squelette_traduit($squelette, $sourcefile, $phpfile, $boucles) {
141 141
 
142
-	$code = null;
143
-	// Le dernier index est '' (fonction principale)
144
-	$noms = substr(join(', ', array_keys($boucles)), 0, -2);
145
-	if (CODE_COMMENTE) {
146
-		$code = "
142
+    $code = null;
143
+    // Le dernier index est '' (fonction principale)
144
+    $noms = substr(join(', ', array_keys($boucles)), 0, -2);
145
+    if (CODE_COMMENTE) {
146
+        $code = "
147 147
 /*
148 148
  * Squelette : $sourcefile
149 149
  * Date :      " . gmdate('D, d M Y H:i:s', @filemtime($sourcefile)) . ' GMT
150 150
  * Compile :   ' . gmdate('D, d M Y H:i:s', time()) . ' GMT
151 151
  * ' . (!$boucles ? 'Pas de boucle' : ('Boucles :   ' . $noms)) . '
152 152
  */ ';
153
-	}
153
+    }
154 154
 
155
-	$code = '<' . "?php\n" . $code . join('', $boucles) . "\n";
156
-	if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
157
-		ecrire_fichier($phpfile, $code);
158
-	}
155
+    $code = '<' . "?php\n" . $code . join('', $boucles) . "\n";
156
+    if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
157
+        ecrire_fichier($phpfile, $code);
158
+    }
159 159
 
160
-	return $code;
160
+    return $code;
161 161
 }
162 162
 
163 163
 // Le squelette compile est-il trop vieux ?
164 164
 function squelette_obsolete($skel, $squelette) {
165
-	static $date_change = null;
166
-	// ne verifier la date de mes_fonctions et mes_options qu'une seule fois
167
-	// par hit
168
-	if (is_null($date_change)) {
169
-		if (@file_exists($fonc = 'mes_fonctions.php')) {
170
-			$date_change = @filemtime($fonc);
171
-		} # compatibilite
172
-		if (defined('_FILE_OPTIONS')) {
173
-			$date_change = max($date_change, @filemtime(_FILE_OPTIONS));
174
-		}
175
-	}
176
-
177
-	return (
178
-		(defined('_VAR_MODE') and in_array(_VAR_MODE, ['recalcul', 'preview', 'debug']))
179
-		or !@file_exists($skel)
180
-		or ((@file_exists($squelette) ? @filemtime($squelette) : 0)
181
-			> ($date = @filemtime($skel)))
182
-		or ($date_change > $date)
183
-	);
165
+    static $date_change = null;
166
+    // ne verifier la date de mes_fonctions et mes_options qu'une seule fois
167
+    // par hit
168
+    if (is_null($date_change)) {
169
+        if (@file_exists($fonc = 'mes_fonctions.php')) {
170
+            $date_change = @filemtime($fonc);
171
+        } # compatibilite
172
+        if (defined('_FILE_OPTIONS')) {
173
+            $date_change = max($date_change, @filemtime(_FILE_OPTIONS));
174
+        }
175
+    }
176
+
177
+    return (
178
+        (defined('_VAR_MODE') and in_array(_VAR_MODE, ['recalcul', 'preview', 'debug']))
179
+        or !@file_exists($skel)
180
+        or ((@file_exists($squelette) ? @filemtime($squelette) : 0)
181
+            > ($date = @filemtime($skel)))
182
+        or ($date_change > $date)
183
+    );
184 184
 }
185 185
 
186 186
 // Activer l'invalideur de session
187 187
 function invalideur_session(&$Cache, $code = null) {
188
-	$Cache['session'] = spip_session();
188
+    $Cache['session'] = spip_session();
189 189
 
190
-	return $code;
190
+    return $code;
191 191
 }
192 192
 
193 193
 
194 194
 function analyse_resultat_skel($nom, $cache, $corps, $source = '') {
195
-	static $filtres = [];
196
-	$headers = [];
197
-	$corps ??= '';
198
-
199
-	// Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
200
-	// note: on essaie d'attrapper aussi certains de ces entetes codes
201
-	// "a la main" dans les squelettes, mais evidemment sans exhaustivite
202
-	if (
203
-		stripos($corps, 'header') !== false
204
-		and preg_match_all(
205
-			'/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
206
-			$corps,
207
-			$regs,
208
-			PREG_SET_ORDER
209
-		)
210
-	) {
211
-		foreach ($regs as $r) {
212
-			$corps = str_replace($r[0], '', $corps);
213
-			# $j = Content-Type, et pas content-TYPE.
214
-			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
215
-
216
-			if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
217
-				$headers[$j] .= '|' . $r[3];
218
-			} else {
219
-				$headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
220
-			}
221
-		}
222
-	}
223
-	// S'agit-il d'un resultat constant ou contenant du code php
224
-	$process_ins = (
225
-		strpos($corps, '<' . '?') === false
226
-		or
227
-		(strpos($corps, '<' . '?xml') !== false and
228
-			strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
229
-	)
230
-		? 'html'
231
-		: 'php';
232
-
233
-	$skel = [
234
-		'squelette' => $nom,
235
-		'source' => $source,
236
-		'process_ins' => $process_ins,
237
-		'invalideurs' => $cache,
238
-		'entetes' => $headers,
239
-		'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
240
-	];
241
-
242
-	// traiter #FILTRE{} et filtres
243
-	if (!isset($filtres[$nom])) {
244
-		$filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]);
245
-	}
246
-	$filtres_headers = [];
247
-	if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) {
248
-		$filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
249
-		unset($headers['X-Spip-Filtre']);
250
-	}
251
-	if (is_array($filtres[$nom]) || $filtres[$nom] instanceof \Countable ? count($filtres[$nom]) : 0 or count($filtres_headers)) {
252
-		include_spip('public/sandbox');
253
-		$corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
254
-
255
-		if ($process_ins == 'html') {
256
-			$skel['process_ins'] = (
257
-				strpos($corps, '<' . '?') === false
258
-				or
259
-				(strpos($corps, '<' . '?xml') !== false and
260
-					strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
261
-			)
262
-				? 'html'
263
-				: 'php';
264
-		}
265
-	}
266
-
267
-	$skel['entetes'] = $headers;
268
-	$skel['texte'] = $corps;
269
-
270
-	return $skel;
195
+    static $filtres = [];
196
+    $headers = [];
197
+    $corps ??= '';
198
+
199
+    // Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
200
+    // note: on essaie d'attrapper aussi certains de ces entetes codes
201
+    // "a la main" dans les squelettes, mais evidemment sans exhaustivite
202
+    if (
203
+        stripos($corps, 'header') !== false
204
+        and preg_match_all(
205
+            '/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
206
+            $corps,
207
+            $regs,
208
+            PREG_SET_ORDER
209
+        )
210
+    ) {
211
+        foreach ($regs as $r) {
212
+            $corps = str_replace($r[0], '', $corps);
213
+            # $j = Content-Type, et pas content-TYPE.
214
+            $j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
215
+
216
+            if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
217
+                $headers[$j] .= '|' . $r[3];
218
+            } else {
219
+                $headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
220
+            }
221
+        }
222
+    }
223
+    // S'agit-il d'un resultat constant ou contenant du code php
224
+    $process_ins = (
225
+        strpos($corps, '<' . '?') === false
226
+        or
227
+        (strpos($corps, '<' . '?xml') !== false and
228
+            strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
229
+    )
230
+        ? 'html'
231
+        : 'php';
232
+
233
+    $skel = [
234
+        'squelette' => $nom,
235
+        'source' => $source,
236
+        'process_ins' => $process_ins,
237
+        'invalideurs' => $cache,
238
+        'entetes' => $headers,
239
+        'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
240
+    ];
241
+
242
+    // traiter #FILTRE{} et filtres
243
+    if (!isset($filtres[$nom])) {
244
+        $filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]);
245
+    }
246
+    $filtres_headers = [];
247
+    if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) {
248
+        $filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
249
+        unset($headers['X-Spip-Filtre']);
250
+    }
251
+    if (is_array($filtres[$nom]) || $filtres[$nom] instanceof \Countable ? count($filtres[$nom]) : 0 or count($filtres_headers)) {
252
+        include_spip('public/sandbox');
253
+        $corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
254
+
255
+        if ($process_ins == 'html') {
256
+            $skel['process_ins'] = (
257
+                strpos($corps, '<' . '?') === false
258
+                or
259
+                (strpos($corps, '<' . '?xml') !== false and
260
+                    strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
261
+            )
262
+                ? 'html'
263
+                : 'php';
264
+        }
265
+    }
266
+
267
+    $skel['entetes'] = $headers;
268
+    $skel['texte'] = $corps;
269
+
270
+    return $skel;
271 271
 }
272 272
 
273 273
 //
@@ -281,7 +281,7 @@  discard block
 block discarded – undo
281 281
 inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
282 282
 if ($lang_select) lang_select();
283 283
 ?'
284
-	. '>');
284
+    . '>');
285 285
 
286 286
 /**
287 287
  * Synthétise une balise dynamique : crée l'appel à l'inclusion
@@ -301,35 +301,35 @@  discard block
 block discarded – undo
301 301
  *     Code PHP pour inclure le squelette de la balise dynamique
302 302
  **/
303 303
 function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) {
304
-	if (
305
-		strncmp($file, '/', 1) !== 0
306
-		// pas de lien symbolique sous Windows
307
-		and !(stristr(PHP_OS, 'WIN') and str_contains($file, ':'))
308
-	) {
309
-		$file = './" . _DIR_RACINE . "' . $file;
310
-	}
311
-
312
-	$lang = $context_compil[4];
313
-	if (preg_match(',\W,', $lang)) {
314
-		$lang = '';
315
-	}
316
-
317
-	$args = array_map('argumenter_squelette', $args);
318
-	if (!empty($context_compil['appel_php_depuis_modele'])) {
319
-		$args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
320
-	}
321
-	$args = join(', ', $args);
322
-
323
-	$r = sprintf(
324
-		CODE_INCLURE_BALISE,
325
-		$file,
326
-		$lang,
327
-		$nom,
328
-		$args,
329
-		join(', ', array_map('_q', $context_compil))
330
-	);
331
-
332
-	return $r;
304
+    if (
305
+        strncmp($file, '/', 1) !== 0
306
+        // pas de lien symbolique sous Windows
307
+        and !(stristr(PHP_OS, 'WIN') and str_contains($file, ':'))
308
+    ) {
309
+        $file = './" . _DIR_RACINE . "' . $file;
310
+    }
311
+
312
+    $lang = $context_compil[4];
313
+    if (preg_match(',\W,', $lang)) {
314
+        $lang = '';
315
+    }
316
+
317
+    $args = array_map('argumenter_squelette', $args);
318
+    if (!empty($context_compil['appel_php_depuis_modele'])) {
319
+        $args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
320
+    }
321
+    $args = join(', ', $args);
322
+
323
+    $r = sprintf(
324
+        CODE_INCLURE_BALISE,
325
+        $file,
326
+        $lang,
327
+        $nom,
328
+        $args,
329
+        join(', ', array_map('_q', $context_compil))
330
+    );
331
+
332
+    return $r;
333 333
 }
334 334
 
335 335
 /**
@@ -347,18 +347,18 @@  discard block
 block discarded – undo
347 347
  **/
348 348
 function argumenter_squelette($v) {
349 349
 
350
-	if (is_object($v)) {
351
-		return var_export($v, true);
352
-	} elseif (!is_array($v)) {
353
-		return "'" . texte_script((string) $v) . "'";
354
-	} else {
355
-		$out = [];
356
-		foreach ($v as $k => $val) {
357
-			$out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
358
-		}
359
-
360
-		return 'array(' . join(', ', $out) . ')';
361
-	}
350
+    if (is_object($v)) {
351
+        return var_export($v, true);
352
+    } elseif (!is_array($v)) {
353
+        return "'" . texte_script((string) $v) . "'";
354
+    } else {
355
+        $out = [];
356
+        foreach ($v as $k => $val) {
357
+            $out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
358
+        }
359
+
360
+        return 'array(' . join(', ', $out) . ')';
361
+    }
362 362
 }
363 363
 
364 364
 /**
@@ -377,13 +377,13 @@  discard block
 block discarded – undo
377 377
  * @return string
378 378
  */
379 379
 function executer_balise_dynamique_dans_un_modele(...$args) {
380
-	if (test_espace_prive()) {
381
-		return executer_balise_dynamique(...$args);
382
-	}
383
-	else {
384
-		$str_args = base64_encode(serialize($args));
385
-		return '<?' . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?" . ">\n";
386
-	}
380
+    if (test_espace_prive()) {
381
+        return executer_balise_dynamique(...$args);
382
+    }
383
+    else {
384
+        $str_args = base64_encode(serialize($args));
385
+        return '<?' . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?" . ">\n";
386
+    }
387 387
 }
388 388
 
389 389
 
@@ -414,87 +414,87 @@  discard block
 block discarded – undo
414 414
  *     Code PHP d'exécutant l'inclusion du squelette (ou texte) de la balise dynamique
415 415
  **/
416 416
 function executer_balise_dynamique($nom, $args, $context_compil) {
417
-	/** @var string Nom de la balise à charger (balise demandée ou balise générique) */
418
-	$nom_balise = $nom;
419
-	/** @var string Nom de la balise générique (si utilisée) */
420
-	$nom_balise_generique = '';
421
-
422
-	$appel_php_depuis_modele = false;
423
-	if (
424
-		is_array($context_compil)
425
-		and !is_numeric($context_compil[3])
426
-		and empty($context_compil[0])
427
-		and empty($context_compil[1])
428
-		and empty($context_compil[2])
429
-		and empty($context_compil[3])
430
-	) {
431
-		$appel_php_depuis_modele = true;
432
-	}
433
-
434
-	if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
435
-		// Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
436
-		if ($balise_generique = chercher_balise_generique($nom)) {
437
-			// injecter en premier arg le nom de la balise
438
-			array_unshift($args, $nom);
439
-			$nom_balise_generique = $balise_generique['nom_generique'];
440
-			$fonction_balise = $balise_generique['fonction_generique'];
441
-			$nom_balise = $nom_balise_generique;
442
-		}
443
-		unset($balise_generique);
444
-	}
445
-
446
-	if (!$fonction_balise) {
447
-		$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
448
-		erreur_squelette($msg, $context_compil);
449
-
450
-		return '';
451
-	}
452
-
453
-	// retrouver le fichier qui a déclaré la fonction
454
-	// même si la fonction dynamique est déclarée dans un fichier de fonctions.
455
-	// Attention sous windows, getFileName() retourne un antislash.
456
-	$reflector = new ReflectionFunction($fonction_balise);
457
-	$file = str_replace('\\', '/', $reflector->getFileName());
458
-	if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
459
-		$file = substr($file, strlen(_ROOT_RACINE));
460
-	}
461
-
462
-	// Y a-t-il une fonction de traitement des arguments ?
463
-	$f = 'balise_' . $nom_balise . '_stat';
464
-
465
-	$r = !function_exists($f) ? $args : $f($args, $context_compil);
466
-
467
-	if (!is_array($r)) {
468
-		return $r;
469
-	}
470
-
471
-	// verifier que la fonction dyn est la,
472
-	// sinon se replier sur la generique si elle existe
473
-	if (!function_exists('balise_' . $nom_balise . '_dyn')) {
474
-		if (
475
-			$balise_generique = chercher_balise_generique($nom)
476
-			and $nom_balise_generique = $balise_generique['nom_generique']
477
-			and $file = include_spip('balise/' . strtolower($nom_balise_generique))
478
-			and function_exists('balise_' . $nom_balise_generique . '_dyn')
479
-		) {
480
-			// et lui injecter en premier arg le nom de la balise
481
-			array_unshift($r, $nom);
482
-			$nom_balise = $nom_balise_generique;
483
-			if (!_DIR_RESTREINT) {
484
-				$file = _DIR_RESTREINT_ABS . $file;
485
-			}
486
-		} else {
487
-			$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
488
-			erreur_squelette($msg, $context_compil);
489
-
490
-			return '';
491
-		}
492
-	}
493
-
494
-	if ($appel_php_depuis_modele) {
495
-		$context_compil['appel_php_depuis_modele'] = true;
496
-	}
497
-	return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
417
+    /** @var string Nom de la balise à charger (balise demandée ou balise générique) */
418
+    $nom_balise = $nom;
419
+    /** @var string Nom de la balise générique (si utilisée) */
420
+    $nom_balise_generique = '';
421
+
422
+    $appel_php_depuis_modele = false;
423
+    if (
424
+        is_array($context_compil)
425
+        and !is_numeric($context_compil[3])
426
+        and empty($context_compil[0])
427
+        and empty($context_compil[1])
428
+        and empty($context_compil[2])
429
+        and empty($context_compil[3])
430
+    ) {
431
+        $appel_php_depuis_modele = true;
432
+    }
433
+
434
+    if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
435
+        // Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
436
+        if ($balise_generique = chercher_balise_generique($nom)) {
437
+            // injecter en premier arg le nom de la balise
438
+            array_unshift($args, $nom);
439
+            $nom_balise_generique = $balise_generique['nom_generique'];
440
+            $fonction_balise = $balise_generique['fonction_generique'];
441
+            $nom_balise = $nom_balise_generique;
442
+        }
443
+        unset($balise_generique);
444
+    }
445
+
446
+    if (!$fonction_balise) {
447
+        $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
448
+        erreur_squelette($msg, $context_compil);
449
+
450
+        return '';
451
+    }
452
+
453
+    // retrouver le fichier qui a déclaré la fonction
454
+    // même si la fonction dynamique est déclarée dans un fichier de fonctions.
455
+    // Attention sous windows, getFileName() retourne un antislash.
456
+    $reflector = new ReflectionFunction($fonction_balise);
457
+    $file = str_replace('\\', '/', $reflector->getFileName());
458
+    if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
459
+        $file = substr($file, strlen(_ROOT_RACINE));
460
+    }
461
+
462
+    // Y a-t-il une fonction de traitement des arguments ?
463
+    $f = 'balise_' . $nom_balise . '_stat';
464
+
465
+    $r = !function_exists($f) ? $args : $f($args, $context_compil);
466
+
467
+    if (!is_array($r)) {
468
+        return $r;
469
+    }
470
+
471
+    // verifier que la fonction dyn est la,
472
+    // sinon se replier sur la generique si elle existe
473
+    if (!function_exists('balise_' . $nom_balise . '_dyn')) {
474
+        if (
475
+            $balise_generique = chercher_balise_generique($nom)
476
+            and $nom_balise_generique = $balise_generique['nom_generique']
477
+            and $file = include_spip('balise/' . strtolower($nom_balise_generique))
478
+            and function_exists('balise_' . $nom_balise_generique . '_dyn')
479
+        ) {
480
+            // et lui injecter en premier arg le nom de la balise
481
+            array_unshift($r, $nom);
482
+            $nom_balise = $nom_balise_generique;
483
+            if (!_DIR_RESTREINT) {
484
+                $file = _DIR_RESTREINT_ABS . $file;
485
+            }
486
+        } else {
487
+            $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
488
+            erreur_squelette($msg, $context_compil);
489
+
490
+            return '';
491
+        }
492
+    }
493
+
494
+    if ($appel_php_depuis_modele) {
495
+        $context_compil['appel_php_depuis_modele'] = true;
496
+    }
497
+    return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
498 498
 }
499 499
 
500 500
 /**
@@ -509,23 +509,23 @@  discard block
 block discarded – undo
509 509
  * @return array|null
510 510
  */
511 511
 function chercher_balise_generique($nom) {
512
-	if (!str_contains($nom, '_')) {
513
-		return null;
514
-	}
515
-	$nom_generique = $nom;
516
-	while (false !== ($p = strrpos($nom_generique, '_'))) {
517
-		$nom_generique = substr($nom_generique, 0, $p + 1);
518
-		$fonction_generique = charger_fonction($nom_generique, 'balise', true);
519
-		if ($fonction_generique) {
520
-			return [
521
-				'nom' => $nom,
522
-				'nom_generique' => $nom_generique,
523
-				'fonction_generique' => $fonction_generique,
524
-			];
525
-		}
526
-		$nom_generique = substr($nom_generique, 0, -1);
527
-	}
528
-	return null;
512
+    if (!str_contains($nom, '_')) {
513
+        return null;
514
+    }
515
+    $nom_generique = $nom;
516
+    while (false !== ($p = strrpos($nom_generique, '_'))) {
517
+        $nom_generique = substr($nom_generique, 0, $p + 1);
518
+        $fonction_generique = charger_fonction($nom_generique, 'balise', true);
519
+        if ($fonction_generique) {
520
+            return [
521
+                'nom' => $nom,
522
+                'nom_generique' => $nom_generique,
523
+                'fonction_generique' => $fonction_generique,
524
+            ];
525
+        }
526
+        $nom_generique = substr($nom_generique, 0, -1);
527
+    }
528
+    return null;
529 529
 }
530 530
 
531 531
 
@@ -549,50 +549,50 @@  discard block
 block discarded – undo
549 549
  * @return null;
550 550
  **/
551 551
 function lang_select_public($lang, $lang_select, $titre = null) {
552
-	// Cas 1. forcer_lang = true et pas de critere {lang_select}
553
-	if (
554
-		isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang']
555
-		and $lang_select !== 'oui'
556
-	) {
557
-		$lang = $GLOBALS['spip_lang'];
558
-	} // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
559
-	elseif (!strlen($lang)) {
560
-		$lang = $GLOBALS['spip_lang'];
561
-	} // Cas 3. l'objet est multilingue !
562
-	elseif (
563
-		$lang_select !== 'oui'
564
-		and strlen($titre) > 10
565
-		and str_contains($titre, '<multi>')
566
-		and str_contains(echappe_html($titre), '<multi>')
567
-	) {
568
-		$lang = $GLOBALS['spip_lang'];
569
-	}
570
-
571
-	// faire un lang_select() eventuellement sur la langue inchangee
572
-	lang_select($lang);
573
-
574
-	return;
552
+    // Cas 1. forcer_lang = true et pas de critere {lang_select}
553
+    if (
554
+        isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang']
555
+        and $lang_select !== 'oui'
556
+    ) {
557
+        $lang = $GLOBALS['spip_lang'];
558
+    } // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
559
+    elseif (!strlen($lang)) {
560
+        $lang = $GLOBALS['spip_lang'];
561
+    } // Cas 3. l'objet est multilingue !
562
+    elseif (
563
+        $lang_select !== 'oui'
564
+        and strlen($titre) > 10
565
+        and str_contains($titre, '<multi>')
566
+        and str_contains(echappe_html($titre), '<multi>')
567
+    ) {
568
+        $lang = $GLOBALS['spip_lang'];
569
+    }
570
+
571
+    // faire un lang_select() eventuellement sur la langue inchangee
572
+    lang_select($lang);
573
+
574
+    return;
575 575
 }
576 576
 
577 577
 
578 578
 // Si un tableau &doublons[articles] est passe en parametre,
579 579
 // il faut le nettoyer car il pourrait etre injecte en SQL
580 580
 function nettoyer_env_doublons($envd) {
581
-	foreach ($envd as $table => $liste) {
582
-		$n = '';
583
-		foreach (explode(',', $liste) as $val) {
584
-			if ($a = intval($val) and $val === strval($a)) {
585
-				$n .= ',' . $val;
586
-			}
587
-		}
588
-		if (strlen($n)) {
589
-			$envd[$table] = $n;
590
-		} else {
591
-			unset($envd[$table]);
592
-		}
593
-	}
594
-
595
-	return $envd;
581
+    foreach ($envd as $table => $liste) {
582
+        $n = '';
583
+        foreach (explode(',', $liste) as $val) {
584
+            if ($a = intval($val) and $val === strval($a)) {
585
+                $n .= ',' . $val;
586
+            }
587
+        }
588
+        if (strlen($n)) {
589
+            $envd[$table] = $n;
590
+        } else {
591
+            unset($envd[$table]);
592
+        }
593
+    }
594
+
595
+    return $envd;
596 596
 }
597 597
 
598 598
 /**
@@ -611,21 +611,21 @@  discard block
 block discarded – undo
611 611
  *     Opérateur trouvé (SELF ou SUBSELECT) sinon false.
612 612
  **/
613 613
 function match_self($w) {
614
-	if (is_string($w)) {
615
-		return false;
616
-	}
617
-	if (is_array($w)) {
618
-		if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
619
-			return $w;
620
-		}
621
-		foreach (array_filter($w, 'is_array') as $sw) {
622
-			if ($m = match_self($sw)) {
623
-				return $m;
624
-			}
625
-		}
626
-	}
627
-
628
-	return false;
614
+    if (is_string($w)) {
615
+        return false;
616
+    }
617
+    if (is_array($w)) {
618
+        if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
619
+            return $w;
620
+        }
621
+        foreach (array_filter($w, 'is_array') as $sw) {
622
+            if ($m = match_self($sw)) {
623
+                return $m;
624
+            }
625
+        }
626
+    }
627
+
628
+    return false;
629 629
 }
630 630
 
631 631
 /**
@@ -641,16 +641,16 @@  discard block
 block discarded – undo
641 641
  *     est remplacée par son code.
642 642
  **/
643 643
 function remplace_sous_requete($w, $sousrequete) {
644
-	if (is_array($w)) {
645
-		if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
646
-			return $sousrequete;
647
-		}
648
-		foreach ($w as $k => $sw) {
649
-			$w[$k] = remplace_sous_requete($sw, $sousrequete);
650
-		}
651
-	}
652
-
653
-	return $w;
644
+    if (is_array($w)) {
645
+        if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
646
+            return $sousrequete;
647
+        }
648
+        foreach ($w as $k => $sw) {
649
+            $w[$k] = remplace_sous_requete($sw, $sousrequete);
650
+        }
651
+    }
652
+
653
+    return $w;
654 654
 }
655 655
 
656 656
 /**
@@ -664,17 +664,17 @@  discard block
 block discarded – undo
664 664
  *     - Conditions avec des sous requêtes
665 665
  **/
666 666
 function trouver_sous_requetes($where) {
667
-	$where_simples = [];
668
-	$where_sous = [];
669
-	foreach ($where as $k => $w) {
670
-		if (match_self($w)) {
671
-			$where_sous[$k] = $w;
672
-		} else {
673
-			$where_simples[$k] = $w;
674
-		}
675
-	}
676
-
677
-	return [$where_simples, $where_sous];
667
+    $where_simples = [];
668
+    $where_sous = [];
669
+    foreach ($where as $k => $w) {
670
+        if (match_self($w)) {
671
+            $where_sous[$k] = $w;
672
+        } else {
673
+            $where_simples[$k] = $w;
674
+        }
675
+    }
676
+
677
+    return [$where_simples, $where_sous];
678 678
 }
679 679
 
680 680
 
@@ -700,292 +700,292 @@  discard block
 block discarded – undo
700 700
  * @return resource
701 701
  */
702 702
 function calculer_select(
703
-	$select = [],
704
-	$from = [],
705
-	$from_type = [],
706
-	$where = [],
707
-	$join = [],
708
-	$groupby = [],
709
-	$orderby = [],
710
-	$limit = '',
711
-	$having = [],
712
-	$table = '',
713
-	$id = '',
714
-	$serveur = '',
715
-	$requeter = true
703
+    $select = [],
704
+    $from = [],
705
+    $from_type = [],
706
+    $where = [],
707
+    $join = [],
708
+    $groupby = [],
709
+    $orderby = [],
710
+    $limit = '',
711
+    $having = [],
712
+    $table = '',
713
+    $id = '',
714
+    $serveur = '',
715
+    $requeter = true
716 716
 ) {
717 717
 
718
-	// retirer les criteres vides:
719
-	// {X ?} avec X absent de l'URL
720
-	// {par #ENV{X}} avec X absent de l'URL
721
-	// IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
722
-	$menage = false;
723
-	foreach ($where as $k => $v) {
724
-		if (is_array($v) and count($v)) {
725
-			if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
726
-				$op = false;
727
-			} elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
728
-				$op = false;
729
-			} else {
730
-				$op = $v[0] ?: $v;
731
-			}
732
-		} else {
733
-			$op = $v;
734
-		}
735
-		if ((!$op) or ($op == 1) or ($op == '0=0')) {
736
-			unset($where[$k]);
737
-			$menage = true;
738
-		}
739
-	}
740
-
741
-	// evacuer les eventuels groupby vide issus d'un calcul dynamique
742
-	$groupby = array_diff($groupby, ['']);
743
-
744
-	// remplacer les sous requetes recursives au calcul
745
-	[$where_simples, $where_sous] = trouver_sous_requetes($where);
746
-	foreach ($where_sous as $k => $w) {
747
-		$menage = true;
748
-		// on recupere la sous requete
749
-		$sous = match_self($w);
750
-		if ($sous[0] == 'SELF') {
751
-			// c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
752
-			array_push($where_simples, $sous[2]);
753
-			$wheresub = [
754
-				$sous[2],
755
-				'0=0'
756
-			]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
757
-			$jsub = $join;
758
-			// trouver les jointures utiles a
759
-			// reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
760
-			// ie L1.objet='article'
761
-			// on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
762
-			$i = 0;
763
-			do {
764
-				$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
765
-					[$sous[1] . ' AS id'],
766
-					$from,
767
-					$from_type,
768
-					$wheresub,
769
-					$jsub,
770
-					[],
771
-					[],
772
-					'',
773
-					$having,
774
-					$table,
775
-					$id,
776
-					$serveur,
777
-					false
778
-				) . ')');
779
-				if (!$i) {
780
-					$i = 1;
781
-					$wherestring = calculer_where_to_string($where[$k]);
782
-					foreach ($join as $cle => $wj) {
783
-						if (
784
-							(is_countable($wj) ? count($wj) : 0) == 4
785
-							and str_contains($wherestring, (string) "{$cle}.")
786
-						) {
787
-							$i = 0;
788
-							$wheresub[] = $wj[3];
789
-							unset($jsub[$cle][3]);
790
-						}
791
-					}
792
-				}
793
-			} while ($i++ < 1);
794
-		}
795
-		if ($sous[0] == 'SUBSELECT') {
796
-			// c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
797
-			array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
798
-			$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
799
-				$sous[1], # select
800
-				$sous[2], #from
801
-				[], #from_type
802
-				$sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [],
803
-				#where, qui peut etre de la forme string comme dans sql_select
804
-					[], #join
805
-				$sous[4] ?: [], #groupby
806
-				$sous[5] ?: [], #orderby
807
-				$sous[6], #limit
808
-				$sous[7] ?: [], #having
809
-				$table,
810
-				$id,
811
-				$serveur,
812
-				false
813
-			) . ')');
814
-		}
815
-		array_pop($where_simples);
816
-	}
817
-
818
-	foreach ($having as $k => $v) {
819
-		if ((!$v) or ($v == 1) or ($v == '0=0')) {
820
-			unset($having[$k]);
821
-		}
822
-	}
823
-
824
-	// Installer les jointures.
825
-	// Retirer celles seulement utiles aux criteres finalement absents mais
826
-	// parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
827
-	// si elle est seulement utile a Ln+1 elle meme inutile
828
-
829
-	$afrom = [];
830
-	$equiv = [];
831
-	$k = count($join);
832
-	foreach (array_reverse($join, true) as $cledef => $j) {
833
-		$cle = $cledef;
834
-		// le format de join est :
835
-		// array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
836
-		$join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
837
-		if (count($join[$cle]) == 2) {
838
-			$join[$cle][] = $join[$cle][1];
839
-		}
840
-		if ((is_array($join[$cle]) || $join[$cle] instanceof \Countable ? count($join[$cle]) : 0) == 3) {
841
-			$join[$cle][] = '';
842
-		}
843
-		[$t, $c, $carr, $and] = $join[$cle];
844
-		// si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
845
-		// pour compat avec ancienne convention
846
-		if (is_numeric($cle)) {
847
-			$cle = "L$k";
848
-		}
849
-		$cle_where_lie = "JOIN-$cle";
850
-		if (
851
-			!$menage
852
-			or isset($afrom[$cle])
853
-			or calculer_jointnul($cle, $select)
854
-			or calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]]))
855
-			or calculer_jointnul($cle, $having)
856
-			or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
857
-		) {
858
-			// corriger les references non explicites dans select
859
-			// ou groupby
860
-			foreach ($select as $i => $s) {
861
-				if ($s == $c) {
862
-					$select[$i] = "$cle.$c AS $c";
863
-					break;
864
-				}
865
-			}
866
-			foreach ($groupby as $i => $g) {
867
-				if ($g == $c) {
868
-					$groupby[$i] = "$cle.$c";
869
-					break;
870
-				}
871
-			}
872
-			// on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
873
-			// sans recours a preg_match
874
-			// un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
875
-			$afrom[$t][$cle] = [
876
-				"\n" .
877
-				($from_type[$cle] ?? 'INNER') . ' JOIN',
878
-				$from[$cle],
879
-				"AS $cle",
880
-				'ON (',
881
-				"$cle.$c",
882
-				'=',
883
-				"$t.$carr",
884
-				($and ? 'AND ' . $and : '') .
885
-				')'
886
-			];
887
-			if (isset($afrom[$cle])) {
888
-				$afrom[$t] = $afrom[$t] + $afrom[$cle];
889
-				unset($afrom[$cle]);
890
-			}
891
-			$equiv[] = $carr;
892
-		} else {
893
-			unset($join[$cledef]);
894
-			if (isset($where_simples[$cle_where_lie])) {
895
-				unset($where_simples[$cle_where_lie]);
896
-				unset($where[$cle_where_lie]);
897
-			}
898
-		}
899
-		unset($from[$cle]);
900
-		$k--;
901
-	}
902
-
903
-	if (count($afrom)) {
904
-		// Regarder si la table principale ne sert finalement a rien comme dans
905
-		//<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
906
-		//<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
907
-		//<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
908
-		// ou dans
909
-		//<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
910
-		// qui comporte plusieurs jointures
911
-		// ou dans
912
-		// <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
913
-		// <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
914
-		// penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
915
-		// <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
916
-		// penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
917
-		// <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
918
-
919
-		$t = key($from);
920
-		$c = current($from);
921
-		reset($from);
922
-		$e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
923
-		if (
924
-			!(strpos($t, ' ') or // jointure des le depart cf boucle_doc
925
-				calculer_jointnul($t, $select, $e) or
926
-				calculer_jointnul($t, $join, $e) or
927
-				calculer_jointnul($t, $where, $e) or
928
-				calculer_jointnul($t, $orderby, $e) or
929
-				calculer_jointnul($t, $groupby, $e) or
930
-				calculer_jointnul($t, $having, $e))
931
-			&& count($afrom[$t])
932
-		) {
933
-			$nfrom = reset($afrom[$t]);
934
-			$nt = array_key_first($afrom[$t]);
935
-			unset($from[$t]);
936
-			$from[$nt] = $nfrom[1];
937
-			unset($afrom[$t][$nt]);
938
-			$afrom[$nt] = $afrom[$t];
939
-			unset($afrom[$t]);
940
-			$e = '/\b' . preg_quote($nfrom[6]) . '\b/';
941
-			$t = $nfrom[4];
942
-			$alias = '';
943
-			// verifier que les deux cles sont homonymes, sinon installer un alias dans le select
944
-			$oldcle = explode('.', $nfrom[6]);
945
-			$oldcle = end($oldcle);
946
-			$newcle = explode('.', $nfrom[4]);
947
-			$newcle = end($newcle);
948
-			if ($newcle != $oldcle) {
949
-				// si l'ancienne cle etait deja dans le select avec un AS
950
-				// reprendre simplement ce AS
951
-				$as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
952
-				if (preg_match($as, implode(',', $select), $m)) {
953
-					$alias = '';
954
-				} else {
955
-					$alias = ', ' . $nfrom[4] . " AS $oldcle";
956
-				}
957
-			}
958
-			$select = remplacer_jointnul($t . $alias, $select, $e);
959
-			$join = remplacer_jointnul($t, $join, $e);
960
-			$where = remplacer_jointnul($t, $where, $e);
961
-			$having = remplacer_jointnul($t, $having, $e);
962
-			$groupby = remplacer_jointnul($t, $groupby, $e);
963
-			$orderby = remplacer_jointnul($t, $orderby, $e);
964
-		}
965
-		$from = reinjecte_joint($afrom, $from);
966
-	}
967
-	if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) {
968
-		$wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
969
-		$GLOBALS['debug'] = [];
970
-		if ($wasdebug) {
971
-			$GLOBALS['debug']['debug'] = true;
972
-		}
973
-	}
974
-	$GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter];
975
-	$r = sql_select(
976
-		$select,
977
-		$from,
978
-		$where,
979
-		$groupby,
980
-		array_filter($orderby),
981
-		$limit,
982
-		$having,
983
-		$serveur,
984
-		$requeter
985
-	);
986
-	unset($GLOBALS['debug']['aucasou']);
987
-
988
-	return $r;
718
+    // retirer les criteres vides:
719
+    // {X ?} avec X absent de l'URL
720
+    // {par #ENV{X}} avec X absent de l'URL
721
+    // IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
722
+    $menage = false;
723
+    foreach ($where as $k => $v) {
724
+        if (is_array($v) and count($v)) {
725
+            if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
726
+                $op = false;
727
+            } elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
728
+                $op = false;
729
+            } else {
730
+                $op = $v[0] ?: $v;
731
+            }
732
+        } else {
733
+            $op = $v;
734
+        }
735
+        if ((!$op) or ($op == 1) or ($op == '0=0')) {
736
+            unset($where[$k]);
737
+            $menage = true;
738
+        }
739
+    }
740
+
741
+    // evacuer les eventuels groupby vide issus d'un calcul dynamique
742
+    $groupby = array_diff($groupby, ['']);
743
+
744
+    // remplacer les sous requetes recursives au calcul
745
+    [$where_simples, $where_sous] = trouver_sous_requetes($where);
746
+    foreach ($where_sous as $k => $w) {
747
+        $menage = true;
748
+        // on recupere la sous requete
749
+        $sous = match_self($w);
750
+        if ($sous[0] == 'SELF') {
751
+            // c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
752
+            array_push($where_simples, $sous[2]);
753
+            $wheresub = [
754
+                $sous[2],
755
+                '0=0'
756
+            ]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
757
+            $jsub = $join;
758
+            // trouver les jointures utiles a
759
+            // reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
760
+            // ie L1.objet='article'
761
+            // on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
762
+            $i = 0;
763
+            do {
764
+                $where[$k] = remplace_sous_requete($w, '(' . calculer_select(
765
+                    [$sous[1] . ' AS id'],
766
+                    $from,
767
+                    $from_type,
768
+                    $wheresub,
769
+                    $jsub,
770
+                    [],
771
+                    [],
772
+                    '',
773
+                    $having,
774
+                    $table,
775
+                    $id,
776
+                    $serveur,
777
+                    false
778
+                ) . ')');
779
+                if (!$i) {
780
+                    $i = 1;
781
+                    $wherestring = calculer_where_to_string($where[$k]);
782
+                    foreach ($join as $cle => $wj) {
783
+                        if (
784
+                            (is_countable($wj) ? count($wj) : 0) == 4
785
+                            and str_contains($wherestring, (string) "{$cle}.")
786
+                        ) {
787
+                            $i = 0;
788
+                            $wheresub[] = $wj[3];
789
+                            unset($jsub[$cle][3]);
790
+                        }
791
+                    }
792
+                }
793
+            } while ($i++ < 1);
794
+        }
795
+        if ($sous[0] == 'SUBSELECT') {
796
+            // c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
797
+            array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
798
+            $where[$k] = remplace_sous_requete($w, '(' . calculer_select(
799
+                $sous[1], # select
800
+                $sous[2], #from
801
+                [], #from_type
802
+                $sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [],
803
+                #where, qui peut etre de la forme string comme dans sql_select
804
+                    [], #join
805
+                $sous[4] ?: [], #groupby
806
+                $sous[5] ?: [], #orderby
807
+                $sous[6], #limit
808
+                $sous[7] ?: [], #having
809
+                $table,
810
+                $id,
811
+                $serveur,
812
+                false
813
+            ) . ')');
814
+        }
815
+        array_pop($where_simples);
816
+    }
817
+
818
+    foreach ($having as $k => $v) {
819
+        if ((!$v) or ($v == 1) or ($v == '0=0')) {
820
+            unset($having[$k]);
821
+        }
822
+    }
823
+
824
+    // Installer les jointures.
825
+    // Retirer celles seulement utiles aux criteres finalement absents mais
826
+    // parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
827
+    // si elle est seulement utile a Ln+1 elle meme inutile
828
+
829
+    $afrom = [];
830
+    $equiv = [];
831
+    $k = count($join);
832
+    foreach (array_reverse($join, true) as $cledef => $j) {
833
+        $cle = $cledef;
834
+        // le format de join est :
835
+        // array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
836
+        $join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
837
+        if (count($join[$cle]) == 2) {
838
+            $join[$cle][] = $join[$cle][1];
839
+        }
840
+        if ((is_array($join[$cle]) || $join[$cle] instanceof \Countable ? count($join[$cle]) : 0) == 3) {
841
+            $join[$cle][] = '';
842
+        }
843
+        [$t, $c, $carr, $and] = $join[$cle];
844
+        // si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
845
+        // pour compat avec ancienne convention
846
+        if (is_numeric($cle)) {
847
+            $cle = "L$k";
848
+        }
849
+        $cle_where_lie = "JOIN-$cle";
850
+        if (
851
+            !$menage
852
+            or isset($afrom[$cle])
853
+            or calculer_jointnul($cle, $select)
854
+            or calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]]))
855
+            or calculer_jointnul($cle, $having)
856
+            or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
857
+        ) {
858
+            // corriger les references non explicites dans select
859
+            // ou groupby
860
+            foreach ($select as $i => $s) {
861
+                if ($s == $c) {
862
+                    $select[$i] = "$cle.$c AS $c";
863
+                    break;
864
+                }
865
+            }
866
+            foreach ($groupby as $i => $g) {
867
+                if ($g == $c) {
868
+                    $groupby[$i] = "$cle.$c";
869
+                    break;
870
+                }
871
+            }
872
+            // on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
873
+            // sans recours a preg_match
874
+            // un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
875
+            $afrom[$t][$cle] = [
876
+                "\n" .
877
+                ($from_type[$cle] ?? 'INNER') . ' JOIN',
878
+                $from[$cle],
879
+                "AS $cle",
880
+                'ON (',
881
+                "$cle.$c",
882
+                '=',
883
+                "$t.$carr",
884
+                ($and ? 'AND ' . $and : '') .
885
+                ')'
886
+            ];
887
+            if (isset($afrom[$cle])) {
888
+                $afrom[$t] = $afrom[$t] + $afrom[$cle];
889
+                unset($afrom[$cle]);
890
+            }
891
+            $equiv[] = $carr;
892
+        } else {
893
+            unset($join[$cledef]);
894
+            if (isset($where_simples[$cle_where_lie])) {
895
+                unset($where_simples[$cle_where_lie]);
896
+                unset($where[$cle_where_lie]);
897
+            }
898
+        }
899
+        unset($from[$cle]);
900
+        $k--;
901
+    }
902
+
903
+    if (count($afrom)) {
904
+        // Regarder si la table principale ne sert finalement a rien comme dans
905
+        //<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
906
+        //<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
907
+        //<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
908
+        // ou dans
909
+        //<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
910
+        // qui comporte plusieurs jointures
911
+        // ou dans
912
+        // <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
913
+        // <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
914
+        // penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
915
+        // <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
916
+        // penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
917
+        // <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
918
+
919
+        $t = key($from);
920
+        $c = current($from);
921
+        reset($from);
922
+        $e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
923
+        if (
924
+            !(strpos($t, ' ') or // jointure des le depart cf boucle_doc
925
+                calculer_jointnul($t, $select, $e) or
926
+                calculer_jointnul($t, $join, $e) or
927
+                calculer_jointnul($t, $where, $e) or
928
+                calculer_jointnul($t, $orderby, $e) or
929
+                calculer_jointnul($t, $groupby, $e) or
930
+                calculer_jointnul($t, $having, $e))
931
+            && count($afrom[$t])
932
+        ) {
933
+            $nfrom = reset($afrom[$t]);
934
+            $nt = array_key_first($afrom[$t]);
935
+            unset($from[$t]);
936
+            $from[$nt] = $nfrom[1];
937
+            unset($afrom[$t][$nt]);
938
+            $afrom[$nt] = $afrom[$t];
939
+            unset($afrom[$t]);
940
+            $e = '/\b' . preg_quote($nfrom[6]) . '\b/';
941
+            $t = $nfrom[4];
942
+            $alias = '';
943
+            // verifier que les deux cles sont homonymes, sinon installer un alias dans le select
944
+            $oldcle = explode('.', $nfrom[6]);
945
+            $oldcle = end($oldcle);
946
+            $newcle = explode('.', $nfrom[4]);
947
+            $newcle = end($newcle);
948
+            if ($newcle != $oldcle) {
949
+                // si l'ancienne cle etait deja dans le select avec un AS
950
+                // reprendre simplement ce AS
951
+                $as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
952
+                if (preg_match($as, implode(',', $select), $m)) {
953
+                    $alias = '';
954
+                } else {
955
+                    $alias = ', ' . $nfrom[4] . " AS $oldcle";
956
+                }
957
+            }
958
+            $select = remplacer_jointnul($t . $alias, $select, $e);
959
+            $join = remplacer_jointnul($t, $join, $e);
960
+            $where = remplacer_jointnul($t, $where, $e);
961
+            $having = remplacer_jointnul($t, $having, $e);
962
+            $groupby = remplacer_jointnul($t, $groupby, $e);
963
+            $orderby = remplacer_jointnul($t, $orderby, $e);
964
+        }
965
+        $from = reinjecte_joint($afrom, $from);
966
+    }
967
+    if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) {
968
+        $wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
969
+        $GLOBALS['debug'] = [];
970
+        if ($wasdebug) {
971
+            $GLOBALS['debug']['debug'] = true;
972
+        }
973
+    }
974
+    $GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter];
975
+    $r = sql_select(
976
+        $select,
977
+        $from,
978
+        $where,
979
+        $groupby,
980
+        array_filter($orderby),
981
+        $limit,
982
+        $having,
983
+        $serveur,
984
+        $requeter
985
+    );
986
+    unset($GLOBALS['debug']['aucasou']);
987
+
988
+    return $r;
989 989
 }
990 990
 
991 991
 /**
@@ -996,79 +996,79 @@  discard block
 block discarded – undo
996 996
  * @return string
997 997
  */
998 998
 function calculer_where_to_string($v, $join = 'AND') {
999
-	if (empty($v)) {
1000
-		return '';
1001
-	}
1002
-
1003
-	if (!is_array($v)) {
1004
-		return $v;
1005
-	} else {
1006
-		$exp = '';
1007
-		if (strtoupper($join) === 'AND') {
1008
-			return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1009
-		} else {
1010
-			return $exp . join($join, $v);
1011
-		}
1012
-	}
999
+    if (empty($v)) {
1000
+        return '';
1001
+    }
1002
+
1003
+    if (!is_array($v)) {
1004
+        return $v;
1005
+    } else {
1006
+        $exp = '';
1007
+        if (strtoupper($join) === 'AND') {
1008
+            return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1009
+        } else {
1010
+            return $exp . join($join, $v);
1011
+        }
1012
+    }
1013 1013
 }
1014 1014
 
1015 1015
 
1016 1016
 //condition suffisante (mais non necessaire) pour qu'une table soit utile
1017 1017
 
1018 1018
 function calculer_jointnul($cle, $exp, $equiv = '') {
1019
-	if (!is_array($exp)) {
1020
-		if ($equiv) {
1021
-			$exp = preg_replace($equiv, '', $exp);
1022
-		}
1023
-
1024
-		return preg_match("/\\b$cle\\./", $exp);
1025
-	} else {
1026
-		foreach ($exp as $v) {
1027
-			if (calculer_jointnul($cle, $v, $equiv)) {
1028
-				return true;
1029
-			}
1030
-		}
1031
-
1032
-		return false;
1033
-	}
1019
+    if (!is_array($exp)) {
1020
+        if ($equiv) {
1021
+            $exp = preg_replace($equiv, '', $exp);
1022
+        }
1023
+
1024
+        return preg_match("/\\b$cle\\./", $exp);
1025
+    } else {
1026
+        foreach ($exp as $v) {
1027
+            if (calculer_jointnul($cle, $v, $equiv)) {
1028
+                return true;
1029
+            }
1030
+        }
1031
+
1032
+        return false;
1033
+    }
1034 1034
 }
1035 1035
 
1036 1036
 function reinjecte_joint($afrom, $from) {
1037
-	$from_synth = [];
1038
-	foreach ($from as $k => $v) {
1039
-		$from_synth[$k] = $from[$k];
1040
-		if (isset($afrom[$k])) {
1041
-			foreach ($afrom[$k] as $kk => $vv) {
1042
-				$afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
1043
-			}
1044
-			$from_synth["$k@"] = implode(' ', $afrom[$k]);
1045
-			unset($afrom[$k]);
1046
-		}
1047
-	}
1048
-
1049
-	return $from_synth;
1037
+    $from_synth = [];
1038
+    foreach ($from as $k => $v) {
1039
+        $from_synth[$k] = $from[$k];
1040
+        if (isset($afrom[$k])) {
1041
+            foreach ($afrom[$k] as $kk => $vv) {
1042
+                $afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
1043
+            }
1044
+            $from_synth["$k@"] = implode(' ', $afrom[$k]);
1045
+            unset($afrom[$k]);
1046
+        }
1047
+    }
1048
+
1049
+    return $from_synth;
1050 1050
 }
1051 1051
 
1052 1052
 function remplacer_jointnul($cle, $exp, $equiv = '') {
1053
-	if (!is_array($exp)) {
1054
-		return preg_replace($equiv, $cle, $exp);
1055
-	} else {
1056
-		foreach ($exp as $k => $v) {
1057
-			$exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1058
-		}
1059
-
1060
-		return $exp;
1061
-	}
1053
+    if (!is_array($exp)) {
1054
+        return preg_replace($equiv, $cle, $exp);
1055
+    } else {
1056
+        foreach ($exp as $k => $v) {
1057
+            $exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1058
+        }
1059
+
1060
+        return $exp;
1061
+    }
1062 1062
 }
1063 1063
 
1064 1064
 // calcul du nom du squelette
1065 1065
 function calculer_nom_fonction_squel($skel, $mime_type = 'html', string $connect = '') {
1066
-	// ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1067
-	if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) {
1068
-		$skel = substr($skel, strlen(_DIR_RACINE));
1069
-	}
1070
-
1071
-	return $mime_type
1072
-	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1073
-	. md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1066
+    // ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1067
+    if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) {
1068
+        $skel = substr($skel, strlen(_DIR_RACINE));
1069
+    }
1070
+
1071
+    return $mime_type
1072
+    . (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1073
+    . md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1074 1074
 }
Please login to merge, or discard this patch.
Spacing   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -53,7 +53,7 @@  discard block
 block discarded – undo
53 53
 		$GLOBALS['debug_objets']['courant'] = $nom;
54 54
 	}
55 55
 
56
-	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
56
+	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true).$nom.'.php';
57 57
 
58 58
 	// si squelette est deja compile et perenne, le charger
59 59
 	if (!squelette_obsolete($phpfile, $source)) {
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
 		#}
67 67
 	}
68 68
 
69
-	if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
69
+	if (file_exists($lib = $squelette.'_fonctions'.'.php')) {
70 70
 		include_once $lib;
71 71
 	}
72 72
 
@@ -94,7 +94,7 @@  discard block
 block discarded – undo
94 94
 			eval("return true; $f ;");
95 95
 		} catch (\ParseError $e) {
96 96
 			// Code syntaxiquement faux (critere etc mal programme')
97
-			$msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
97
+			$msg = _T('zbug_erreur_compilation').' | Line '.$e->getLine().' : '.$e->getMessage();
98 98
 			erreur_squelette($msg, $boucle);
99 99
 			// continuer pour trouver d'autres fautes eventuelles
100 100
 			// mais prevenir que c'est mort
@@ -122,7 +122,7 @@  discard block
 block discarded – undo
122 122
 
123 123
 	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
124 124
 		// Tracer ce qui vient d'etre compile
125
-		$GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
125
+		$GLOBALS['debug_objets']['code'][$nom.'tout'] = $code;
126 126
 
127 127
 		// si c'est ce que demande le debusqueur, lui passer la main
128 128
 		if (
@@ -146,13 +146,13 @@  discard block
 block discarded – undo
146 146
 		$code = "
147 147
 /*
148 148
  * Squelette : $sourcefile
149
- * Date :      " . gmdate('D, d M Y H:i:s', @filemtime($sourcefile)) . ' GMT
150
- * Compile :   ' . gmdate('D, d M Y H:i:s', time()) . ' GMT
151
- * ' . (!$boucles ? 'Pas de boucle' : ('Boucles :   ' . $noms)) . '
149
+ * Date :      ".gmdate('D, d M Y H:i:s', @filemtime($sourcefile)).' GMT
150
+ * Compile :   ' . gmdate('D, d M Y H:i:s', time()).' GMT
151
+ * ' . (!$boucles ? 'Pas de boucle' : ('Boucles :   '.$noms)).'
152 152
  */ ';
153 153
 	}
154 154
 
155
-	$code = '<' . "?php\n" . $code . join('', $boucles) . "\n";
155
+	$code = '<'."?php\n".$code.join('', $boucles)."\n";
156 156
 	if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
157 157
 		ecrire_fichier($phpfile, $code);
158 158
 	}
@@ -214,18 +214,18 @@  discard block
 block discarded – undo
214 214
 			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
215 215
 
216 216
 			if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
217
-				$headers[$j] .= '|' . $r[3];
217
+				$headers[$j] .= '|'.$r[3];
218 218
 			} else {
219
-				$headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
219
+				$headers[$j] = str_replace(['\\\\', "\\'", '\\"'], ['\\', "'", '"'], $r[3]);
220 220
 			}
221 221
 		}
222 222
 	}
223 223
 	// S'agit-il d'un resultat constant ou contenant du code php
224 224
 	$process_ins = (
225
-		strpos($corps, '<' . '?') === false
225
+		strpos($corps, '<'.'?') === false
226 226
 		or
227
-		(strpos($corps, '<' . '?xml') !== false and
228
-			strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
227
+		(strpos($corps, '<'.'?xml') !== false and
228
+			strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false)
229 229
 	)
230 230
 		? 'html'
231 231
 		: 'php';
@@ -254,10 +254,10 @@  discard block
 block discarded – undo
254 254
 
255 255
 		if ($process_ins == 'html') {
256 256
 			$skel['process_ins'] = (
257
-				strpos($corps, '<' . '?') === false
257
+				strpos($corps, '<'.'?') === false
258 258
 				or
259
-				(strpos($corps, '<' . '?xml') !== false and
260
-					strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
259
+				(strpos($corps, '<'.'?xml') !== false and
260
+					strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false)
261 261
 			)
262 262
 				? 'html'
263 263
 				: 'php';
@@ -275,7 +275,7 @@  discard block
 block discarded – undo
275 275
 //
276 276
 
277 277
 /** Code PHP pour inclure une balise dynamique à l'exécution d'une page */
278
-define('CODE_INCLURE_BALISE', '<' . '?php
278
+define('CODE_INCLURE_BALISE', '<'.'?php
279 279
 include_once("%s");
280 280
 if ($lang_select = "%s") $lang_select = lang_select($lang_select);
281 281
 inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
@@ -306,7 +306,7 @@  discard block
 block discarded – undo
306 306
 		// pas de lien symbolique sous Windows
307 307
 		and !(stristr(PHP_OS, 'WIN') and str_contains($file, ':'))
308 308
 	) {
309
-		$file = './" . _DIR_RACINE . "' . $file;
309
+		$file = './" . _DIR_RACINE . "'.$file;
310 310
 	}
311 311
 
312 312
 	$lang = $context_compil[4];
@@ -316,7 +316,7 @@  discard block
 block discarded – undo
316 316
 
317 317
 	$args = array_map('argumenter_squelette', $args);
318 318
 	if (!empty($context_compil['appel_php_depuis_modele'])) {
319
-		$args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
319
+		$args[0] = 'arguments_balise_dyn_depuis_modele('.$args[0].')';
320 320
 	}
321 321
 	$args = join(', ', $args);
322 322
 
@@ -350,14 +350,14 @@  discard block
 block discarded – undo
350 350
 	if (is_object($v)) {
351 351
 		return var_export($v, true);
352 352
 	} elseif (!is_array($v)) {
353
-		return "'" . texte_script((string) $v) . "'";
353
+		return "'".texte_script((string) $v)."'";
354 354
 	} else {
355 355
 		$out = [];
356 356
 		foreach ($v as $k => $val) {
357
-			$out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
357
+			$out [] = argumenter_squelette($k).'=>'.argumenter_squelette($val);
358 358
 		}
359 359
 
360
-		return 'array(' . join(', ', $out) . ')';
360
+		return 'array('.join(', ', $out).')';
361 361
 	}
362 362
 }
363 363
 
@@ -382,7 +382,7 @@  discard block
 block discarded – undo
382 382
 	}
383 383
 	else {
384 384
 		$str_args = base64_encode(serialize($args));
385
-		return '<?' . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?" . ">\n";
385
+		return '<?'."php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
386 386
 	}
387 387
 }
388 388
 
@@ -460,7 +460,7 @@  discard block
 block discarded – undo
460 460
 	}
461 461
 
462 462
 	// Y a-t-il une fonction de traitement des arguments ?
463
-	$f = 'balise_' . $nom_balise . '_stat';
463
+	$f = 'balise_'.$nom_balise.'_stat';
464 464
 
465 465
 	$r = !function_exists($f) ? $args : $f($args, $context_compil);
466 466
 
@@ -470,18 +470,18 @@  discard block
 block discarded – undo
470 470
 
471 471
 	// verifier que la fonction dyn est la,
472 472
 	// sinon se replier sur la generique si elle existe
473
-	if (!function_exists('balise_' . $nom_balise . '_dyn')) {
473
+	if (!function_exists('balise_'.$nom_balise.'_dyn')) {
474 474
 		if (
475 475
 			$balise_generique = chercher_balise_generique($nom)
476 476
 			and $nom_balise_generique = $balise_generique['nom_generique']
477
-			and $file = include_spip('balise/' . strtolower($nom_balise_generique))
478
-			and function_exists('balise_' . $nom_balise_generique . '_dyn')
477
+			and $file = include_spip('balise/'.strtolower($nom_balise_generique))
478
+			and function_exists('balise_'.$nom_balise_generique.'_dyn')
479 479
 		) {
480 480
 			// et lui injecter en premier arg le nom de la balise
481 481
 			array_unshift($r, $nom);
482 482
 			$nom_balise = $nom_balise_generique;
483 483
 			if (!_DIR_RESTREINT) {
484
-				$file = _DIR_RESTREINT_ABS . $file;
484
+				$file = _DIR_RESTREINT_ABS.$file;
485 485
 			}
486 486
 		} else {
487 487
 			$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
@@ -582,7 +582,7 @@  discard block
 block discarded – undo
582 582
 		$n = '';
583 583
 		foreach (explode(',', $liste) as $val) {
584 584
 			if ($a = intval($val) and $val === strval($a)) {
585
-				$n .= ',' . $val;
585
+				$n .= ','.$val;
586 586
 			}
587 587
 		}
588 588
 		if (strlen($n)) {
@@ -761,8 +761,8 @@  discard block
 block discarded – undo
761 761
 			// on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
762 762
 			$i = 0;
763 763
 			do {
764
-				$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
765
-					[$sous[1] . ' AS id'],
764
+				$where[$k] = remplace_sous_requete($w, '('.calculer_select(
765
+					[$sous[1].' AS id'],
766 766
 					$from,
767 767
 					$from_type,
768 768
 					$wheresub,
@@ -775,7 +775,7 @@  discard block
 block discarded – undo
775 775
 					$id,
776 776
 					$serveur,
777 777
 					false
778
-				) . ')');
778
+				).')');
779 779
 				if (!$i) {
780 780
 					$i = 1;
781 781
 					$wherestring = calculer_where_to_string($where[$k]);
@@ -795,7 +795,7 @@  discard block
 block discarded – undo
795 795
 		if ($sous[0] == 'SUBSELECT') {
796 796
 			// c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
797 797
 			array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
798
-			$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
798
+			$where[$k] = remplace_sous_requete($w, '('.calculer_select(
799 799
 				$sous[1], # select
800 800
 				$sous[2], #from
801 801
 				[], #from_type
@@ -810,7 +810,7 @@  discard block
 block discarded – undo
810 810
 				$id,
811 811
 				$serveur,
812 812
 				false
813
-			) . ')');
813
+			).')');
814 814
 		}
815 815
 		array_pop($where_simples);
816 816
 	}
@@ -873,15 +873,15 @@  discard block
 block discarded – undo
873 873
 			// sans recours a preg_match
874 874
 			// un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
875 875
 			$afrom[$t][$cle] = [
876
-				"\n" .
877
-				($from_type[$cle] ?? 'INNER') . ' JOIN',
876
+				"\n".
877
+				($from_type[$cle] ?? 'INNER').' JOIN',
878 878
 				$from[$cle],
879 879
 				"AS $cle",
880 880
 				'ON (',
881 881
 				"$cle.$c",
882 882
 				'=',
883 883
 				"$t.$carr",
884
-				($and ? 'AND ' . $and : '') .
884
+				($and ? 'AND '.$and : '').
885 885
 				')'
886 886
 			];
887 887
 			if (isset($afrom[$cle])) {
@@ -919,7 +919,7 @@  discard block
 block discarded – undo
919 919
 		$t = key($from);
920 920
 		$c = current($from);
921 921
 		reset($from);
922
-		$e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
922
+		$e = '/\b('."$t\\.".join('|'.$t.'\.', $equiv).')\b/';
923 923
 		if (
924 924
 			!(strpos($t, ' ') or // jointure des le depart cf boucle_doc
925 925
 				calculer_jointnul($t, $select, $e) or
@@ -937,7 +937,7 @@  discard block
 block discarded – undo
937 937
 			unset($afrom[$t][$nt]);
938 938
 			$afrom[$nt] = $afrom[$t];
939 939
 			unset($afrom[$t]);
940
-			$e = '/\b' . preg_quote($nfrom[6]) . '\b/';
940
+			$e = '/\b'.preg_quote($nfrom[6]).'\b/';
941 941
 			$t = $nfrom[4];
942 942
 			$alias = '';
943 943
 			// verifier que les deux cles sont homonymes, sinon installer un alias dans le select
@@ -948,14 +948,14 @@  discard block
 block discarded – undo
948 948
 			if ($newcle != $oldcle) {
949 949
 				// si l'ancienne cle etait deja dans le select avec un AS
950 950
 				// reprendre simplement ce AS
951
-				$as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
951
+				$as = '/\b'.preg_quote($nfrom[6]).'\s+(AS\s+\w+)\b/';
952 952
 				if (preg_match($as, implode(',', $select), $m)) {
953 953
 					$alias = '';
954 954
 				} else {
955
-					$alias = ', ' . $nfrom[4] . " AS $oldcle";
955
+					$alias = ', '.$nfrom[4]." AS $oldcle";
956 956
 				}
957 957
 			}
958
-			$select = remplacer_jointnul($t . $alias, $select, $e);
958
+			$select = remplacer_jointnul($t.$alias, $select, $e);
959 959
 			$join = remplacer_jointnul($t, $join, $e);
960 960
 			$where = remplacer_jointnul($t, $where, $e);
961 961
 			$having = remplacer_jointnul($t, $having, $e);
@@ -1005,9 +1005,9 @@  discard block
 block discarded – undo
1005 1005
 	} else {
1006 1006
 		$exp = '';
1007 1007
 		if (strtoupper($join) === 'AND') {
1008
-			return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1008
+			return $exp.join(" $join ", array_map('calculer_where_to_string', $v));
1009 1009
 		} else {
1010
-			return $exp . join($join, $v);
1010
+			return $exp.join($join, $v);
1011 1011
 		}
1012 1012
 	}
1013 1013
 }
@@ -1069,6 +1069,6 @@  discard block
 block discarded – undo
1069 1069
 	}
1070 1070
 
1071 1071
 	return $mime_type
1072
-	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1073
-	. md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1072
+	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)).'_'
1073
+	. md5($GLOBALS['spip_version_code'].' * '.$skel.(isset($GLOBALS['marqueur_skel']) ? '*'.$GLOBALS['marqueur_skel'] : ''));
1074 1074
 }
Please login to merge, or discard this patch.
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -379,8 +379,7 @@
 block discarded – undo
379 379
 function executer_balise_dynamique_dans_un_modele(...$args) {
380 380
 	if (test_espace_prive()) {
381 381
 		return executer_balise_dynamique(...$args);
382
-	}
383
-	else {
382
+	} else {
384 383
 		$str_args = base64_encode(serialize($args));
385 384
 		return '<?' . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?" . ">\n";
386 385
 	}
Please login to merge, or discard this patch.
ecrire/public/references.php 2 patches
Spacing   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -126,7 +126,7 @@  discard block
 block discarded – undo
126 126
 	$select = true
127 127
 ) {
128 128
 	if (!is_string($defaut)) {
129
-		$defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)';
129
+		$defaut = '($Pile[0][\''.strtolower($nom_champ).'\'] ?? null)';
130 130
 	}
131 131
 
132 132
 	$idb_origine = $idb;
@@ -159,7 +159,7 @@  discard block
 block discarded – undo
159 159
 			}
160 160
 			// renseigner la boucle source de ce champ pour les traitements
161 161
 			$boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
162
-			$champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
162
+			$champ = '$Pile[$SP'.($i ? "-$i" : '').'][\''.$c.'\']';
163 163
 			if (!$joker) {
164 164
 				return index_compose($conditionnel, $champ);
165 165
 			}
@@ -200,7 +200,7 @@  discard block
 block discarded – undo
200 200
 function index_compose($conditionnel, $defaut) {
201 201
 	while ($c = array_pop($conditionnel)) {
202 202
 		// si on passe defaut = '', ne pas générer d'erreur de compilation.
203
-		$defaut = "($c:(" . ($defaut ?: "''") . '))';
203
+		$defaut = "($c:(".($defaut ?: "''").'))';
204 204
 	}
205 205
 
206 206
 	return $defaut;
@@ -247,7 +247,7 @@  discard block
 block discarded – undo
247 247
 	if (!$r) {
248 248
 		$joker = false; // indiquer a l'appelant
249 249
 		# continuer pour chercher l'erreur suivante
250
-		return ["'#" . $r . ':' . $nom_champ . "'", ''];
250
+		return ["'#".$r.':'.$nom_champ."'", ''];
251 251
 	}
252 252
 
253 253
 	$desc = $boucles[$idb]->show;
@@ -290,7 +290,7 @@  discard block
 block discarded – undo
290 290
 	if (preg_match('/^(.*)\.(.*)$/', $nom_champ, $r)) {
291 291
 		[, $_table, $_nom_champ] = $r;
292 292
 		if ($cle = trouver_jointure_champ($_nom_champ, $boucles[$idb], [$_table])) {
293
-			$_alias = $cle . '_' . $_nom_champ;
293
+			$_alias = $cle.'_'.$_nom_champ;
294 294
 			return index_exception(
295 295
 				$boucles[$idb],
296 296
 				$desc,
@@ -371,8 +371,8 @@  discard block
 block discarded – undo
371 371
 			$t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
372 372
 		}
373 373
 		if ($t == null) {
374
-			[$e, $x] = $excep;  #PHP4 affecte de gauche a droite
375
-			$excep = $x;    #PHP5 de droite a gauche !
374
+			[$e, $x] = $excep; #PHP4 affecte de gauche a droite
375
+			$excep = $x; #PHP5 de droite a gauche !
376 376
 			$j = $trouver_table($e, $boucle->sql_serveur);
377 377
 			if (!$j) {
378 378
 				return ['', ''];
@@ -384,7 +384,7 @@  discard block
 block discarded – undo
384 384
 					$l = (preg_split('/\s*,\s*/', $k));
385 385
 					$k = $desc['key']['PRIMARY KEY'];
386 386
 					if (!in_array($k, $l)) {
387
-						spip_log("jointure impossible $e " . implode(',', $l));
387
+						spip_log("jointure impossible $e ".implode(',', $l));
388 388
 
389 389
 						return ['', ''];
390 390
 					}
@@ -400,7 +400,7 @@  discard block
 block discarded – undo
400 400
 	// demander a SQL de gerer le synonyme
401 401
 	// ca permet que excep soit dynamique (Cedric, 2/3/06)
402 402
 	if ($excep != $nom_champ) {
403
-		$excep .= ' AS ' . $nom_champ;
403
+		$excep .= ' AS '.$nom_champ;
404 404
 	}
405 405
 
406 406
 	return ["$t.$excep", $nom_champ];
@@ -648,7 +648,7 @@  discard block
 block discarded – undo
648 648
 		implode(',', $collecte),
649 649
 		($collecte ? $param : substr($param, 1)), # virer la virgule
650 650
 		memoriser_contexte_compil($p),
651
-		($supp ? ', ' . implode(',', $supp) : (''))
651
+		($supp ? ', '.implode(',', $supp) : (''))
652 652
 	);
653 653
 
654 654
 	$p->interdire_scripts = false;
@@ -682,7 +682,7 @@  discard block
 block discarded – undo
682 682
  * @return array
683 683
  *     Liste des codes PHP d'éxecution des balises collectées
684 684
  **/
685
-function collecter_balise_dynamique(array $l, Champ &$p, string $nom): array {
685
+function collecter_balise_dynamique(array $l, Champ & $p, string $nom): array {
686 686
 	$args = [];
687 687
 	foreach ($l as $c) {
688 688
 		if ($c === null) {
@@ -747,7 +747,7 @@  discard block
 block discarded – undo
747 747
 	$nom = $p->id_boucle;
748 748
 
749 749
 	if ($nom && trouver_nom_serveur_distant($p)) {
750
-		spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
750
+		spip_log($nom.':'.$p->nom_champ.' '._T('zbug_distant_interdit'));
751 751
 
752 752
 		return false;
753 753
 	}
@@ -823,7 +823,7 @@  discard block
 block discarded – undo
823 823
 		&& $p->descr['documents']
824 824
 		&& (str_contains($ps, 'propre') || str_contains($ps, 'typo'))
825 825
 	) {
826
-		$ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
826
+		$ps = 'traiter_doublons_documents($doublons, '.$ps.')';
827 827
 	}
828 828
 
829 829
 	// La protection des champs par |safehtml est assuree par les extensions
@@ -927,7 +927,7 @@  discard block
 block discarded – undo
927 927
 function compose_filtres_args($p, $args, $sep) {
928 928
 	$arglist = '';
929 929
 	foreach ($args as $arg) {
930
-		$arglist .= $sep .
930
+		$arglist .= $sep.
931 931
 			calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
932 932
 	}
933 933
 
@@ -977,7 +977,7 @@  discard block
 block discarded – undo
977 977
 	while ($b != '') {
978 978
 		foreach ($p->boucles[$b]->criteres as $critere) {
979 979
 			if ($critere->op == $motif) {
980
-				$p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
980
+				$p->code = '$Pile[$SP'.(($n == 0) ? '' : "-$n").
981 981
 					"]['$champ']";
982 982
 				$b = '';
983 983
 				break 2;
@@ -1005,6 +1005,6 @@  discard block
 block discarded – undo
1005 1005
  */
1006 1006
 function zbug_presenter_champ($p, $champ = '') {
1007 1007
 	$balise = $champ ?: $p->nom_champ;
1008
-	$explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
1008
+	$explicite = $p->nom_boucle ? $p->nom_boucle.':' : '';
1009 1009
 	return "#{$explicite}{$balise}";
1010 1010
 }
Please login to merge, or discard this patch.
Indentation   +532 added lines, -532 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
  * @package SPIP\Core\Compilateur\References
19 19
  **/
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 /**
@@ -43,14 +43,14 @@  discard block
 block discarded – undo
43 43
  *     - '' si une référence explicite incorrecte est envoyée
44 44
  */
45 45
 function index_boucle($p) {
46
-	if (strlen($p->nom_boucle)) {
47
-		// retourne l’index explicite demandé s’il existe
48
-		if (!empty($p->boucles[$p->nom_boucle])) {
49
-			return $p->nom_boucle;
50
-		}
51
-		return '';
52
-	}
53
-	return $p->id_boucle;
46
+    if (strlen($p->nom_boucle)) {
47
+        // retourne l’index explicite demandé s’il existe
48
+        if (!empty($p->boucles[$p->nom_boucle])) {
49
+            return $p->nom_boucle;
50
+        }
51
+        return '';
52
+    }
53
+    return $p->id_boucle;
54 54
 }
55 55
 
56 56
 
@@ -73,17 +73,17 @@  discard block
 block discarded – undo
73 73
  *     - '' si une référence explicite incorrecte est envoyée
74 74
  */
75 75
 function index_boucle_mere($p) {
76
-	if (strlen($p->nom_boucle)) {
77
-		// retourne l’index explicite demandé s’il existe
78
-		if (!empty($p->boucles[$p->nom_boucle])) {
79
-			return $p->nom_boucle;
80
-		}
81
-		return '';
82
-	}
83
-	if (!empty($p->descr['id_mere'])) {
84
-		return $p->descr['id_mere'];
85
-	}
86
-	return '';
76
+    if (strlen($p->nom_boucle)) {
77
+        // retourne l’index explicite demandé s’il existe
78
+        if (!empty($p->boucles[$p->nom_boucle])) {
79
+            return $p->nom_boucle;
80
+        }
81
+        return '';
82
+    }
83
+    if (!empty($p->descr['id_mere'])) {
84
+        return $p->descr['id_mere'];
85
+    }
86
+    return '';
87 87
 }
88 88
 
89 89
 /**
@@ -117,74 +117,74 @@  discard block
 block discarded – undo
117 117
  *     Code PHP pour obtenir le champ SQL
118 118
  */
119 119
 function index_pile(
120
-	$idb,
121
-	$nom_champ,
122
-	&$boucles,
123
-	$explicite = '',
124
-	$defaut = null,
125
-	$remonte_pile = true,
126
-	$select = true
120
+    $idb,
121
+    $nom_champ,
122
+    &$boucles,
123
+    $explicite = '',
124
+    $defaut = null,
125
+    $remonte_pile = true,
126
+    $select = true
127 127
 ) {
128
-	if (!is_string($defaut)) {
129
-		$defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)';
130
-	}
131
-
132
-	$idb_origine = $idb;
133
-	$nom_champ_origine = $nom_champ;
134
-
135
-	$i = 0;
136
-	if (strlen($explicite)) {
137
-		// Recherche d'un champ dans un etage superieur
138
-		while (($idb !== $explicite) && ($idb !== '')) {
139
-			#	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
140
-			$i++;
141
-			$idb = $boucles[$idb]->id_parent;
142
-		}
143
-	}
144
-
145
-	#	spip_log("Cherche: $nom_champ a partir de '$idb'");
146
-	$nom_champ = strtolower($nom_champ);
147
-	$conditionnel = [];
148
-	// attention: entre la boucle nommee 0, "" et le tableau vide,
149
-	// il y a incoherences qu'il vaut mieux eviter
150
-	while (isset($boucles[$idb])) {
151
-		$joker = true;
152
-		// modifie $joker si tous les champs sont autorisés.
153
-		// $t = le select pour le champ, si on l'a trouvé (ou si joker)
154
-		// $c = le nom du champ demandé
155
-		[$t, $c] = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
156
-		if ($t) {
157
-			if ($select && !in_array($t, $boucles[$idb]->select)) {
158
-				$boucles[$idb]->select[] = $t;
159
-			}
160
-			// renseigner la boucle source de ce champ pour les traitements
161
-			$boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
162
-			$champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
163
-			if (!$joker) {
164
-				return index_compose($conditionnel, $champ);
165
-			}
166
-
167
-			// tant que l'on trouve des tables avec joker, on continue
168
-			// avec la boucle parente et on conditionne à l'exécution
169
-			// la présence du champ. Si le champ existe à l'exécution
170
-			// dans une boucle, il est pris, sinon on le cherche dans le parent...
171
-			$conditionnel[] = "isset($champ)?$champ";
172
-		}
173
-
174
-		if ($remonte_pile) {
175
-			#	spip_log("On remonte vers $i");
176
-			// Sinon on remonte d'un cran
177
-			$idb = $boucles[$idb]->id_parent;
178
-			$i++;
179
-		} else {
180
-			$idb = null;
181
-		}
182
-	}
183
-
184
-	#	spip_log("Pas vu $nom_champ");
185
-	// esperons qu'il y sera
186
-	// ou qu'on a fourni une valeur par "defaut" plus pertinent
187
-	return index_compose($conditionnel, $defaut);
128
+    if (!is_string($defaut)) {
129
+        $defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)';
130
+    }
131
+
132
+    $idb_origine = $idb;
133
+    $nom_champ_origine = $nom_champ;
134
+
135
+    $i = 0;
136
+    if (strlen($explicite)) {
137
+        // Recherche d'un champ dans un etage superieur
138
+        while (($idb !== $explicite) && ($idb !== '')) {
139
+            #	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
140
+            $i++;
141
+            $idb = $boucles[$idb]->id_parent;
142
+        }
143
+    }
144
+
145
+    #	spip_log("Cherche: $nom_champ a partir de '$idb'");
146
+    $nom_champ = strtolower($nom_champ);
147
+    $conditionnel = [];
148
+    // attention: entre la boucle nommee 0, "" et le tableau vide,
149
+    // il y a incoherences qu'il vaut mieux eviter
150
+    while (isset($boucles[$idb])) {
151
+        $joker = true;
152
+        // modifie $joker si tous les champs sont autorisés.
153
+        // $t = le select pour le champ, si on l'a trouvé (ou si joker)
154
+        // $c = le nom du champ demandé
155
+        [$t, $c] = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
156
+        if ($t) {
157
+            if ($select && !in_array($t, $boucles[$idb]->select)) {
158
+                $boucles[$idb]->select[] = $t;
159
+            }
160
+            // renseigner la boucle source de ce champ pour les traitements
161
+            $boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
162
+            $champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
163
+            if (!$joker) {
164
+                return index_compose($conditionnel, $champ);
165
+            }
166
+
167
+            // tant que l'on trouve des tables avec joker, on continue
168
+            // avec la boucle parente et on conditionne à l'exécution
169
+            // la présence du champ. Si le champ existe à l'exécution
170
+            // dans une boucle, il est pris, sinon on le cherche dans le parent...
171
+            $conditionnel[] = "isset($champ)?$champ";
172
+        }
173
+
174
+        if ($remonte_pile) {
175
+            #	spip_log("On remonte vers $i");
176
+            // Sinon on remonte d'un cran
177
+            $idb = $boucles[$idb]->id_parent;
178
+            $i++;
179
+        } else {
180
+            $idb = null;
181
+        }
182
+    }
183
+
184
+    #	spip_log("Pas vu $nom_champ");
185
+    // esperons qu'il y sera
186
+    // ou qu'on a fourni une valeur par "defaut" plus pertinent
187
+    return index_compose($conditionnel, $defaut);
188 188
 }
189 189
 
190 190
 /**
@@ -198,12 +198,12 @@  discard block
 block discarded – undo
198 198
  * @return string              Code PHP complet de recherche d'un champ
199 199
  */
200 200
 function index_compose($conditionnel, $defaut) {
201
-	while ($c = array_pop($conditionnel)) {
202
-		// si on passe defaut = '', ne pas générer d'erreur de compilation.
203
-		$defaut = "($c:(" . ($defaut ?: "''") . '))';
204
-	}
201
+    while ($c = array_pop($conditionnel)) {
202
+        // si on passe defaut = '', ne pas générer d'erreur de compilation.
203
+        $defaut = "($c:(" . ($defaut ?: "''") . '))';
204
+    }
205 205
 
206
-	return $defaut;
206
+    return $defaut;
207 207
 }
208 208
 
209 209
 /**
@@ -239,98 +239,98 @@  discard block
 block discarded – undo
239 239
  **/
240 240
 function index_tables_en_pile($idb, $nom_champ, &$boucles, &$joker) {
241 241
 
242
-	$r = $boucles[$idb]->type_requete;
243
-	// boucle recursive, c'est foutu...
244
-	if ($r == TYPE_RECURSIF) {
245
-		return [];
246
-	}
247
-	if (!$r) {
248
-		$joker = false; // indiquer a l'appelant
249
-		# continuer pour chercher l'erreur suivante
250
-		return ["'#" . $r . ':' . $nom_champ . "'", ''];
251
-	}
252
-
253
-	$desc = $boucles[$idb]->show;
254
-	// le nom du champ est il une exception de la table ? un alias ?
255
-	$excep = $GLOBALS['exceptions_des_tables'][$r] ?? '';
256
-	if ($excep) {
257
-		$excep = $excep[$nom_champ] ?? '';
258
-	}
259
-
260
-	// il y a un alias connu pour ce champ
261
-	if ($excep) {
262
-		$joker = false; // indiquer a l'appelant
263
-		return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
264
-	}
265
-
266
-	// le champ existe dans la table, on le prend.
267
-	if (isset($desc['field'][$nom_champ])) {
268
-		$t = $boucles[$idb]->id_table ?? '';
269
-		$joker = false; // indiquer a l'appelant
270
-		// note: dans certains cas ('valeur' d’une boucle DATA, sans id_table), retourne ['.valeur', 'valeur'] …
271
-		return ["$t.$nom_champ", $nom_champ];
272
-	}
273
-
274
-	// Tous les champs sont-ils acceptés ?
275
-	// Si oui, on retourne le champ, et on lève le flag joker
276
-	// C'est le cas des itérateurs DATA qui acceptent tout
277
-	// et testent la présence du champ à l'exécution et non à la compilation
278
-	// car ils ne connaissent pas ici leurs contenus.
279
-	if (
280
-		/*$joker AND */
281
-		isset($desc['field']['*'])
282
-	) {
283
-		$joker = true; // indiquer a l'appelant
284
-		return [$nom_champ, $nom_champ];
285
-	}
286
-
287
-	$joker = false; // indiquer a l'appelant
288
-
289
-	// la table de jointure est explicitement indiquée (rubrique.titre)
290
-	if (preg_match('/^(.*)\.(.*)$/', $nom_champ, $r)) {
291
-		[, $_table, $_nom_champ] = $r;
292
-		if ($cle = trouver_jointure_champ($_nom_champ, $boucles[$idb], [$_table])) {
293
-			$_alias = $cle . '_' . $_nom_champ;
294
-			return index_exception(
295
-				$boucles[$idb],
296
-				$desc,
297
-				$_alias,
298
-				[$_table, $_nom_champ]
299
-			);
300
-		}
301
-		return ['', ''];
302
-	}
303
-
304
-	// pas d'alias, pas de champ, pas de joker...
305
-	// tenter via une jointure...
306
-
307
-	// regarder si le champ est deja dans une jointure existante
308
-	// sinon, si il y a des joitures explicites, la construire
309
-	if (
310
-		!($t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]))
311
-		&& $boucles[$idb]->jointures_explicites
312
-	) {
313
-		// [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
314
-		// fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
315
-		// mais est-ce ce qu'on veut ?
316
-		$jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites);
317
-		if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
318
-			$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
319
-		}
320
-	}
321
-
322
-	if ($t) {
323
-		// si on a trouvé une jointure possible, on fait comme
324
-		// si c'était une exception pour le champ demandé
325
-		return index_exception(
326
-			$boucles[$idb],
327
-			$desc,
328
-			$nom_champ,
329
-			[$t[1]['id_table'], reset($t[2])]
330
-		);
331
-	}
332
-
333
-	return ['', ''];
242
+    $r = $boucles[$idb]->type_requete;
243
+    // boucle recursive, c'est foutu...
244
+    if ($r == TYPE_RECURSIF) {
245
+        return [];
246
+    }
247
+    if (!$r) {
248
+        $joker = false; // indiquer a l'appelant
249
+        # continuer pour chercher l'erreur suivante
250
+        return ["'#" . $r . ':' . $nom_champ . "'", ''];
251
+    }
252
+
253
+    $desc = $boucles[$idb]->show;
254
+    // le nom du champ est il une exception de la table ? un alias ?
255
+    $excep = $GLOBALS['exceptions_des_tables'][$r] ?? '';
256
+    if ($excep) {
257
+        $excep = $excep[$nom_champ] ?? '';
258
+    }
259
+
260
+    // il y a un alias connu pour ce champ
261
+    if ($excep) {
262
+        $joker = false; // indiquer a l'appelant
263
+        return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
264
+    }
265
+
266
+    // le champ existe dans la table, on le prend.
267
+    if (isset($desc['field'][$nom_champ])) {
268
+        $t = $boucles[$idb]->id_table ?? '';
269
+        $joker = false; // indiquer a l'appelant
270
+        // note: dans certains cas ('valeur' d’une boucle DATA, sans id_table), retourne ['.valeur', 'valeur'] …
271
+        return ["$t.$nom_champ", $nom_champ];
272
+    }
273
+
274
+    // Tous les champs sont-ils acceptés ?
275
+    // Si oui, on retourne le champ, et on lève le flag joker
276
+    // C'est le cas des itérateurs DATA qui acceptent tout
277
+    // et testent la présence du champ à l'exécution et non à la compilation
278
+    // car ils ne connaissent pas ici leurs contenus.
279
+    if (
280
+        /*$joker AND */
281
+        isset($desc['field']['*'])
282
+    ) {
283
+        $joker = true; // indiquer a l'appelant
284
+        return [$nom_champ, $nom_champ];
285
+    }
286
+
287
+    $joker = false; // indiquer a l'appelant
288
+
289
+    // la table de jointure est explicitement indiquée (rubrique.titre)
290
+    if (preg_match('/^(.*)\.(.*)$/', $nom_champ, $r)) {
291
+        [, $_table, $_nom_champ] = $r;
292
+        if ($cle = trouver_jointure_champ($_nom_champ, $boucles[$idb], [$_table])) {
293
+            $_alias = $cle . '_' . $_nom_champ;
294
+            return index_exception(
295
+                $boucles[$idb],
296
+                $desc,
297
+                $_alias,
298
+                [$_table, $_nom_champ]
299
+            );
300
+        }
301
+        return ['', ''];
302
+    }
303
+
304
+    // pas d'alias, pas de champ, pas de joker...
305
+    // tenter via une jointure...
306
+
307
+    // regarder si le champ est deja dans une jointure existante
308
+    // sinon, si il y a des joitures explicites, la construire
309
+    if (
310
+        !($t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]))
311
+        && $boucles[$idb]->jointures_explicites
312
+    ) {
313
+        // [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
314
+        // fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
315
+        // mais est-ce ce qu'on veut ?
316
+        $jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites);
317
+        if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
318
+            $t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
319
+        }
320
+    }
321
+
322
+    if ($t) {
323
+        // si on a trouvé une jointure possible, on fait comme
324
+        // si c'était une exception pour le champ demandé
325
+        return index_exception(
326
+            $boucles[$idb],
327
+            $desc,
328
+            $nom_champ,
329
+            [$t[1]['id_table'], reset($t[2])]
330
+        );
331
+    }
332
+
333
+    return ['', ''];
334 334
 }
335 335
 
336 336
 
@@ -358,52 +358,52 @@  discard block
 block discarded – undo
358 358
  *     est une expression pour le SELECT de la boucle du style "mots.titre AS titre_mot"
359 359
  **/
360 360
 function index_exception(&$boucle, $desc, $nom_champ, $excep) {
361
-	static $trouver_table;
362
-	if (!$trouver_table) {
363
-		$trouver_table = charger_fonction('trouver_table', 'base');
364
-	}
365
-
366
-	if (is_array($excep)) {
367
-		// permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
368
-		$t = null;
369
-		if (count($excep) == 3) {
370
-			$index_exception_derogatoire = array_pop($excep);
371
-			$t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
372
-		}
373
-		if ($t == null) {
374
-			[$e, $x] = $excep;  #PHP4 affecte de gauche a droite
375
-			$excep = $x;    #PHP5 de droite a gauche !
376
-			$j = $trouver_table($e, $boucle->sql_serveur);
377
-			if (!$j) {
378
-				return ['', ''];
379
-			}
380
-			$e = $j['table'];
381
-			if (!$t = array_search($e, $boucle->from)) {
382
-				$k = $j['key']['PRIMARY KEY'];
383
-				if (strpos($k, ',')) {
384
-					$l = (preg_split('/\s*,\s*/', $k));
385
-					$k = $desc['key']['PRIMARY KEY'];
386
-					if (!in_array($k, $l)) {
387
-						spip_log("jointure impossible $e " . implode(',', $l));
388
-
389
-						return ['', ''];
390
-					}
391
-				}
392
-				$k = [$boucle->id_table, [$e], $k];
393
-				fabrique_jointures($boucle, [$k]);
394
-				$t = array_search($e, $boucle->from);
395
-			}
396
-		}
397
-	} else {
398
-		$t = $boucle->id_table;
399
-	}
400
-	// demander a SQL de gerer le synonyme
401
-	// ca permet que excep soit dynamique (Cedric, 2/3/06)
402
-	if ($excep != $nom_champ) {
403
-		$excep .= ' AS ' . $nom_champ;
404
-	}
405
-
406
-	return ["$t.$excep", $nom_champ];
361
+    static $trouver_table;
362
+    if (!$trouver_table) {
363
+        $trouver_table = charger_fonction('trouver_table', 'base');
364
+    }
365
+
366
+    if (is_array($excep)) {
367
+        // permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
368
+        $t = null;
369
+        if (count($excep) == 3) {
370
+            $index_exception_derogatoire = array_pop($excep);
371
+            $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
372
+        }
373
+        if ($t == null) {
374
+            [$e, $x] = $excep;  #PHP4 affecte de gauche a droite
375
+            $excep = $x;    #PHP5 de droite a gauche !
376
+            $j = $trouver_table($e, $boucle->sql_serveur);
377
+            if (!$j) {
378
+                return ['', ''];
379
+            }
380
+            $e = $j['table'];
381
+            if (!$t = array_search($e, $boucle->from)) {
382
+                $k = $j['key']['PRIMARY KEY'];
383
+                if (strpos($k, ',')) {
384
+                    $l = (preg_split('/\s*,\s*/', $k));
385
+                    $k = $desc['key']['PRIMARY KEY'];
386
+                    if (!in_array($k, $l)) {
387
+                        spip_log("jointure impossible $e " . implode(',', $l));
388
+
389
+                        return ['', ''];
390
+                    }
391
+                }
392
+                $k = [$boucle->id_table, [$e], $k];
393
+                fabrique_jointures($boucle, [$k]);
394
+                $t = array_search($e, $boucle->from);
395
+            }
396
+        }
397
+    } else {
398
+        $t = $boucle->id_table;
399
+    }
400
+    // demander a SQL de gerer le synonyme
401
+    // ca permet que excep soit dynamique (Cedric, 2/3/06)
402
+    if ($excep != $nom_champ) {
403
+        $excep .= ' AS ' . $nom_champ;
404
+    }
405
+
406
+    return ["$t.$excep", $nom_champ];
407 407
 }
408 408
 
409 409
 /**
@@ -428,7 +428,7 @@  discard block
 block discarded – undo
428 428
  *     Code PHP pour retrouver le champ
429 429
  */
430 430
 function champ_sql($champ, $p, $defaut = null, $remonte_pile = true) {
431
-	return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
431
+    return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
432 432
 }
433 433
 
434 434
 
@@ -448,9 +448,9 @@  discard block
 block discarded – undo
448 448
  *     Code PHP pour d'exécution de la balise et de ses filtres
449 449
  **/
450 450
 function calculer_champ($p) {
451
-	$p = calculer_balise($p->nom_champ, $p);
451
+    $p = calculer_balise($p->nom_champ, $p);
452 452
 
453
-	return applique_filtres($p);
453
+    return applique_filtres($p);
454 454
 }
455 455
 
456 456
 
@@ -487,26 +487,26 @@  discard block
 block discarded – undo
487 487
  **/
488 488
 function calculer_balise(string $nom, Champ $p): Champ {
489 489
 
490
-	// S'agit-t-il d'une balise_XXXX[_dist]() ?
491
-	if ($f = charger_fonction($nom, 'balise', true)) {
492
-		$p->balise_calculee = true;
493
-		$res = $f($p);
494
-		if ($res !== null && is_object($res)) {
495
-			return $res;
496
-		}
497
-	}
498
-
499
-	// Certaines des balises comportant un _ sont generiques
500
-	if ($balise_generique = chercher_balise_generique($nom)) {
501
-		$res = $balise_generique['fonction_generique']($p);
502
-		if ($res !== null && is_object($res)) {
503
-			return $res;
504
-		}
505
-	}
506
-
507
-	$f = charger_fonction('DEFAUT', 'calculer_balise');
508
-
509
-	return $f($nom, $p);
490
+    // S'agit-t-il d'une balise_XXXX[_dist]() ?
491
+    if ($f = charger_fonction($nom, 'balise', true)) {
492
+        $p->balise_calculee = true;
493
+        $res = $f($p);
494
+        if ($res !== null && is_object($res)) {
495
+            return $res;
496
+        }
497
+    }
498
+
499
+    // Certaines des balises comportant un _ sont generiques
500
+    if ($balise_generique = chercher_balise_generique($nom)) {
501
+        $res = $balise_generique['fonction_generique']($p);
502
+        if ($res !== null && is_object($res)) {
503
+            return $res;
504
+        }
505
+    }
506
+
507
+    $f = charger_fonction('DEFAUT', 'calculer_balise');
508
+
509
+    return $f($nom, $p);
510 510
 }
511 511
 
512 512
 
@@ -534,33 +534,33 @@  discard block
 block discarded – undo
534 534
  **/
535 535
 function calculer_balise_DEFAUT_dist($nom, $p) {
536 536
 
537
-	// ca pourrait etre un champ SQL homonyme,
538
-	$p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
539
-
540
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
541
-	// il faut recracher {...} quand ce n'est finalement pas des args
542
-	if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
543
-		$code = addslashes($p->fonctions[0][1]);
544
-		$p->code .= " . '$code'";
545
-	}
546
-
547
-	// ne pas passer le filtre securite sur les id_xxx
548
-	if (str_starts_with($nom, 'ID_')) {
549
-		$p->interdire_scripts = false;
550
-	}
551
-
552
-	// Compatibilite ascendante avec les couleurs html (#FEFEFE) :
553
-	// SI le champ SQL n'est pas trouve
554
-	// ET si la balise a une forme de couleur
555
-	// ET s'il n'y a ni filtre ni etoile
556
-	// ALORS retourner la couleur.
557
-	// Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
558
-	if (preg_match('/^[A-F]{1,6}$/i', $nom) && !$p->etoile && !$p->fonctions) {
559
-		$p->code = "'#$nom'";
560
-		$p->interdire_scripts = false;
561
-	}
562
-
563
-	return $p;
537
+    // ca pourrait etre un champ SQL homonyme,
538
+    $p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
539
+
540
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
541
+    // il faut recracher {...} quand ce n'est finalement pas des args
542
+    if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
543
+        $code = addslashes($p->fonctions[0][1]);
544
+        $p->code .= " . '$code'";
545
+    }
546
+
547
+    // ne pas passer le filtre securite sur les id_xxx
548
+    if (str_starts_with($nom, 'ID_')) {
549
+        $p->interdire_scripts = false;
550
+    }
551
+
552
+    // Compatibilite ascendante avec les couleurs html (#FEFEFE) :
553
+    // SI le champ SQL n'est pas trouve
554
+    // ET si la balise a une forme de couleur
555
+    // ET s'il n'y a ni filtre ni etoile
556
+    // ALORS retourner la couleur.
557
+    // Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
558
+    if (preg_match('/^[A-F]{1,6}$/i', $nom) && !$p->etoile && !$p->fonctions) {
559
+        $p->code = "'#$nom'";
560
+        $p->interdire_scripts = false;
561
+    }
562
+
563
+    return $p;
564 564
 }
565 565
 
566 566
 
@@ -608,52 +608,52 @@  discard block
 block discarded – undo
608 608
  **/
609 609
 function calculer_balise_dynamique($p, $nom, $l, $supp = []) {
610 610
 
611
-	if (!balise_distante_interdite($p)) {
612
-		$p->code = "''";
613
-
614
-		return $p;
615
-	}
616
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
617
-	// il faut recracher {...} quand ce n'est finalement pas des args
618
-	if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
619
-		$p->fonctions = [];
620
-	}
621
-
622
-	if ($p->param && ($c = $p->param[0])) {
623
-		// liste d'arguments commence toujours par la chaine vide
624
-		array_shift($c);
625
-		// construire la liste d'arguments comme pour un filtre
626
-		$param = compose_filtres_args($p, $c, ',');
627
-	} else {
628
-		$param = '';
629
-	}
630
-	$collecte = collecter_balise_dynamique($l, $p, $nom);
631
-
632
-	$dans_un_modele = false;
633
-	if (
634
-		!empty($p->descr['sourcefile']) && ($f = $p->descr['sourcefile']) && basename(dirname($f)) === 'modeles'
635
-	) {
636
-		$dans_un_modele = true;
637
-	}
638
-
639
-	// un modele est toujours inséré en texte dans son contenant
640
-	// donc si on est dans le public avec un cache on va perdre le dynamisme
641
-	// et on risque de mettre en cache les valeurs pre-remplies du formulaire
642
-	// on passe donc par une fonction proxy qui si besoin va collecter les arguments
643
-	// et injecter le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
644
-	// (dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave))
645
-	$p->code = sprintf(
646
-		$dans_un_modele ? CODE_EXECUTER_BALISE_MODELE : CODE_EXECUTER_BALISE,
647
-		$nom,
648
-		implode(',', $collecte),
649
-		($collecte ? $param : substr($param, 1)), # virer la virgule
650
-		memoriser_contexte_compil($p),
651
-		($supp ? ', ' . implode(',', $supp) : (''))
652
-	);
653
-
654
-	$p->interdire_scripts = false;
655
-
656
-	return $p;
611
+    if (!balise_distante_interdite($p)) {
612
+        $p->code = "''";
613
+
614
+        return $p;
615
+    }
616
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
617
+    // il faut recracher {...} quand ce n'est finalement pas des args
618
+    if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
619
+        $p->fonctions = [];
620
+    }
621
+
622
+    if ($p->param && ($c = $p->param[0])) {
623
+        // liste d'arguments commence toujours par la chaine vide
624
+        array_shift($c);
625
+        // construire la liste d'arguments comme pour un filtre
626
+        $param = compose_filtres_args($p, $c, ',');
627
+    } else {
628
+        $param = '';
629
+    }
630
+    $collecte = collecter_balise_dynamique($l, $p, $nom);
631
+
632
+    $dans_un_modele = false;
633
+    if (
634
+        !empty($p->descr['sourcefile']) && ($f = $p->descr['sourcefile']) && basename(dirname($f)) === 'modeles'
635
+    ) {
636
+        $dans_un_modele = true;
637
+    }
638
+
639
+    // un modele est toujours inséré en texte dans son contenant
640
+    // donc si on est dans le public avec un cache on va perdre le dynamisme
641
+    // et on risque de mettre en cache les valeurs pre-remplies du formulaire
642
+    // on passe donc par une fonction proxy qui si besoin va collecter les arguments
643
+    // et injecter le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
644
+    // (dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave))
645
+    $p->code = sprintf(
646
+        $dans_un_modele ? CODE_EXECUTER_BALISE_MODELE : CODE_EXECUTER_BALISE,
647
+        $nom,
648
+        implode(',', $collecte),
649
+        ($collecte ? $param : substr($param, 1)), # virer la virgule
650
+        memoriser_contexte_compil($p),
651
+        ($supp ? ', ' . implode(',', $supp) : (''))
652
+    );
653
+
654
+    $p->interdire_scripts = false;
655
+
656
+    return $p;
657 657
 }
658 658
 
659 659
 
@@ -683,17 +683,17 @@  discard block
 block discarded – undo
683 683
  *     Liste des codes PHP d'éxecution des balises collectées
684 684
  **/
685 685
 function collecter_balise_dynamique(array $l, Champ &$p, string $nom): array {
686
-	$args = [];
687
-	foreach ($l as $c) {
688
-		if ($c === null) {
689
-			$args[] = 'null';
690
-		} else {
691
-			$x = calculer_balise($c, $p);
692
-			$args[] = $x->code;
693
-		}
694
-	}
695
-
696
-	return $args;
686
+    $args = [];
687
+    foreach ($l as $c) {
688
+        if ($c === null) {
689
+            $args[] = 'null';
690
+        } else {
691
+            $x = calculer_balise($c, $p);
692
+            $args[] = $x->code;
693
+        }
694
+    }
695
+
696
+    return $args;
697 697
 }
698 698
 
699 699
 
@@ -708,19 +708,19 @@  discard block
 block discarded – undo
708 708
  *     Nom de la connexion
709 709
  **/
710 710
 function trouver_nom_serveur_distant($p) {
711
-	$nom = $p->id_boucle;
712
-	if (
713
-		$nom && isset($p->boucles[$nom])
714
-	) {
715
-		$s = $p->boucles[$nom]->sql_serveur;
716
-		if (
717
-			strlen($s) && strlen($serveur = strtolower($s)) && !in_array($serveur, $GLOBALS['exception_des_connect'])
718
-		) {
719
-			return $serveur;
720
-		}
721
-	}
722
-
723
-	return '';
711
+    $nom = $p->id_boucle;
712
+    if (
713
+        $nom && isset($p->boucles[$nom])
714
+    ) {
715
+        $s = $p->boucles[$nom]->sql_serveur;
716
+        if (
717
+            strlen($s) && strlen($serveur = strtolower($s)) && !in_array($serveur, $GLOBALS['exception_des_connect'])
718
+        ) {
719
+            return $serveur;
720
+        }
721
+    }
722
+
723
+    return '';
724 724
 }
725 725
 
726 726
 
@@ -744,15 +744,15 @@  discard block
 block discarded – undo
744 744
  *     - false : La balise est interdite car le serveur est distant
745 745
  **/
746 746
 function balise_distante_interdite($p) {
747
-	$nom = $p->id_boucle;
747
+    $nom = $p->id_boucle;
748 748
 
749
-	if ($nom && trouver_nom_serveur_distant($p)) {
750
-		spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
749
+    if ($nom && trouver_nom_serveur_distant($p)) {
750
+        spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
751 751
 
752
-		return false;
753
-	}
752
+        return false;
753
+    }
754 754
 
755
-	return true;
755
+    return true;
756 756
 }
757 757
 
758 758
 
@@ -762,75 +762,75 @@  discard block
 block discarded – undo
762 762
 //
763 763
 function champs_traitements($p) {
764 764
 
765
-	if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
766
-		$ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
767
-	} else {
768
-		// quand on utilise un traitement catch-all *
769
-		// celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
770
-		// leur propre securite
771
-		$ps = $p->balise_calculee ? false : $GLOBALS['table_des_traitements']['*'];
772
-	}
773
-
774
-	if (is_array($ps)) {
775
-		// Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
776
-		$idb = index_boucle($p);
777
-		// si le champ a ete trouve dans une boucle parente sa source est renseignee ici
778
-		if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) {
779
-			$idb = $p->boucles[$idb]->index_champ[$p->nom_champ];
780
-		}
781
-
782
-		// mais on peut aussi etre hors boucle. Se mefier.
783
-		$type_requete = $p->boucles[$idb]->type_requete ?? false;
784
-		$table_sql = $p->boucles[$idb]->show['table_sql'] ?? false;
785
-
786
-		// bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
787
-		if ($type_requete && isset($GLOBALS['table_des_tables'][$type_requete])) {
788
-			$type_alias = $type_requete;
789
-			$type_requete = $GLOBALS['table_des_tables'][$type_requete];
790
-		} else {
791
-			$type_alias = false;
792
-		}
793
-
794
-		// le traitement peut n'etre defini que pour une table en particulier "spip_articles"
795
-		if ($table_sql && isset($ps[$table_sql])) {
796
-			$ps = $ps[$table_sql];
797
-		} // ou pour une boucle en particulier "DATA","articles"
798
-		elseif ($type_requete && isset($ps[$type_requete])) {
799
-			$ps = $ps[$type_requete];
800
-		} // ou pour une boucle utilisant un alias ("hierarchie")
801
-		elseif ($type_alias && isset($ps[$type_alias])) {
802
-			$ps = $ps[$type_alias];
803
-		} // ou pour indifféremment quelle que soit la boucle
804
-		elseif (isset($ps[0])) {
805
-			$ps = $ps[0];
806
-		} else {
807
-			$ps = false;
808
-		}
809
-	}
810
-
811
-	if (!$ps) {
812
-		return $p->code;
813
-	}
814
-
815
-	// Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
816
-	// ou si in INCLURE contient {doublons}
817
-	// on insere une fonction de remplissage du tableau des doublons
818
-	// dans les filtres propre() ou typo()
819
-	// (qui traitent les raccourcis <docXX> referencant les docs)
820
-
821
-	if (
822
-		isset($p->descr['documents'])
823
-		&& $p->descr['documents']
824
-		&& (str_contains($ps, 'propre') || str_contains($ps, 'typo'))
825
-	) {
826
-		$ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
827
-	}
828
-
829
-	// La protection des champs par |safehtml est assuree par les extensions
830
-	// dans la declaration des traitements des champs sensibles
831
-
832
-	// Remplacer enfin le placeholder %s par le vrai code de la balise
833
-	return str_replace('%s', $p->code, $ps);
765
+    if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
766
+        $ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
767
+    } else {
768
+        // quand on utilise un traitement catch-all *
769
+        // celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
770
+        // leur propre securite
771
+        $ps = $p->balise_calculee ? false : $GLOBALS['table_des_traitements']['*'];
772
+    }
773
+
774
+    if (is_array($ps)) {
775
+        // Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
776
+        $idb = index_boucle($p);
777
+        // si le champ a ete trouve dans une boucle parente sa source est renseignee ici
778
+        if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) {
779
+            $idb = $p->boucles[$idb]->index_champ[$p->nom_champ];
780
+        }
781
+
782
+        // mais on peut aussi etre hors boucle. Se mefier.
783
+        $type_requete = $p->boucles[$idb]->type_requete ?? false;
784
+        $table_sql = $p->boucles[$idb]->show['table_sql'] ?? false;
785
+
786
+        // bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
787
+        if ($type_requete && isset($GLOBALS['table_des_tables'][$type_requete])) {
788
+            $type_alias = $type_requete;
789
+            $type_requete = $GLOBALS['table_des_tables'][$type_requete];
790
+        } else {
791
+            $type_alias = false;
792
+        }
793
+
794
+        // le traitement peut n'etre defini que pour une table en particulier "spip_articles"
795
+        if ($table_sql && isset($ps[$table_sql])) {
796
+            $ps = $ps[$table_sql];
797
+        } // ou pour une boucle en particulier "DATA","articles"
798
+        elseif ($type_requete && isset($ps[$type_requete])) {
799
+            $ps = $ps[$type_requete];
800
+        } // ou pour une boucle utilisant un alias ("hierarchie")
801
+        elseif ($type_alias && isset($ps[$type_alias])) {
802
+            $ps = $ps[$type_alias];
803
+        } // ou pour indifféremment quelle que soit la boucle
804
+        elseif (isset($ps[0])) {
805
+            $ps = $ps[0];
806
+        } else {
807
+            $ps = false;
808
+        }
809
+    }
810
+
811
+    if (!$ps) {
812
+        return $p->code;
813
+    }
814
+
815
+    // Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
816
+    // ou si in INCLURE contient {doublons}
817
+    // on insere une fonction de remplissage du tableau des doublons
818
+    // dans les filtres propre() ou typo()
819
+    // (qui traitent les raccourcis <docXX> referencant les docs)
820
+
821
+    if (
822
+        isset($p->descr['documents'])
823
+        && $p->descr['documents']
824
+        && (str_contains($ps, 'propre') || str_contains($ps, 'typo'))
825
+    ) {
826
+        $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
827
+    }
828
+
829
+    // La protection des champs par |safehtml est assuree par les extensions
830
+    // dans la declaration des traitements des champs sensibles
831
+
832
+    // Remplacer enfin le placeholder %s par le vrai code de la balise
833
+    return str_replace('%s', $p->code, $ps);
834 834
 }
835 835
 
836 836
 
@@ -842,95 +842,95 @@  discard block
 block discarded – undo
842 842
 //
843 843
 function applique_filtres($p) {
844 844
 
845
-	// Traitements standards (cf. supra)
846
-	$code = $p->etoile == '' ? champs_traitements($p) : $p->code;
845
+    // Traitements standards (cf. supra)
846
+    $code = $p->etoile == '' ? champs_traitements($p) : $p->code;
847 847
 
848
-	// Appliquer les filtres perso
849
-	if ($p->param) {
850
-		$code = compose_filtres($p, $code);
851
-	}
848
+    // Appliquer les filtres perso
849
+    if ($p->param) {
850
+        $code = compose_filtres($p, $code);
851
+    }
852 852
 
853
-	// S'il y a un lien avec la session, ajouter un code qui levera
854
-	// un drapeau dans la structure d'invalidation $Cache
855
-	if (isset($p->descr['session'])) {
856
-		$code = "invalideur_session(\$Cache, $code)";
857
-	}
853
+    // S'il y a un lien avec la session, ajouter un code qui levera
854
+    // un drapeau dans la structure d'invalidation $Cache
855
+    if (isset($p->descr['session'])) {
856
+        $code = "invalideur_session(\$Cache, $code)";
857
+    }
858 858
 
859
-	return sandbox_composer_interdire_scripts($code, $p);
859
+    return sandbox_composer_interdire_scripts($code, $p);
860 860
 }
861 861
 
862 862
 // Cf. function pipeline dans ecrire/inc_utils.php
863 863
 function compose_filtres(&$p, $code) {
864 864
 
865
-	$image_miette = false;
866
-	foreach ($p->param as $filtre) {
867
-		$fonc = array_shift($filtre);
868
-		if (!$fonc) {
869
-			continue;
870
-		} // normalement qu'au premier tour.
871
-		$is_filtre_image = (str_starts_with($fonc, 'image_') && $fonc != 'image_graver');
872
-		if ($image_miette && !$is_filtre_image) {
873
-			// il faut graver maintenant car apres le filtre en cours
874
-			// on est pas sur d'avoir encore le nom du fichier dans le pipe
875
-			$code = "filtrer('image_graver', $code)";
876
-			$image_miette = false;
877
-		}
878
-
879
-		// recuperer les arguments du filtre,
880
-		// a separer par "," ou ":" dans le cas du filtre "?{a,b}"
881
-		$countfiltre = is_countable($filtre) ? count($filtre) : 0;
882
-		if ($fonc !== '?') {
883
-			$sep = ',';
884
-		} else {
885
-			$sep = ':';
886
-			// |?{a,b} *doit* avoir exactement 2 arguments ; on les force
887
-			if ($countfiltre != 2) {
888
-				$filtre = [$filtre[0] ?? '', $filtre[1] ?? ''];
889
-				$countfiltre = 2;
890
-			}
891
-		}
892
-		$arglist = compose_filtres_args($p, $filtre, $sep);
893
-		$logique = filtre_logique($fonc, $code, substr($arglist, 1));
894
-		if ($logique) {
895
-			$code = $logique;
896
-		} else {
897
-			$code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre);
898
-			if ($is_filtre_image) {
899
-				$image_miette = true;
900
-			}
901
-		}
902
-	}
903
-	// ramasser les images intermediaires inutiles et graver l'image finale
904
-	if ($image_miette) {
905
-		$code = "filtrer('image_graver',$code)";
906
-	}
907
-
908
-	return $code;
865
+    $image_miette = false;
866
+    foreach ($p->param as $filtre) {
867
+        $fonc = array_shift($filtre);
868
+        if (!$fonc) {
869
+            continue;
870
+        } // normalement qu'au premier tour.
871
+        $is_filtre_image = (str_starts_with($fonc, 'image_') && $fonc != 'image_graver');
872
+        if ($image_miette && !$is_filtre_image) {
873
+            // il faut graver maintenant car apres le filtre en cours
874
+            // on est pas sur d'avoir encore le nom du fichier dans le pipe
875
+            $code = "filtrer('image_graver', $code)";
876
+            $image_miette = false;
877
+        }
878
+
879
+        // recuperer les arguments du filtre,
880
+        // a separer par "," ou ":" dans le cas du filtre "?{a,b}"
881
+        $countfiltre = is_countable($filtre) ? count($filtre) : 0;
882
+        if ($fonc !== '?') {
883
+            $sep = ',';
884
+        } else {
885
+            $sep = ':';
886
+            // |?{a,b} *doit* avoir exactement 2 arguments ; on les force
887
+            if ($countfiltre != 2) {
888
+                $filtre = [$filtre[0] ?? '', $filtre[1] ?? ''];
889
+                $countfiltre = 2;
890
+            }
891
+        }
892
+        $arglist = compose_filtres_args($p, $filtre, $sep);
893
+        $logique = filtre_logique($fonc, $code, substr($arglist, 1));
894
+        if ($logique) {
895
+            $code = $logique;
896
+        } else {
897
+            $code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre);
898
+            if ($is_filtre_image) {
899
+                $image_miette = true;
900
+            }
901
+        }
902
+    }
903
+    // ramasser les images intermediaires inutiles et graver l'image finale
904
+    if ($image_miette) {
905
+        $code = "filtrer('image_graver',$code)";
906
+    }
907
+
908
+    return $code;
909 909
 }
910 910
 
911 911
 // Filtres et,ou,oui,non,sinon,xou,xor,and,or,not,yes
912 912
 // et comparateurs
913 913
 function filtre_logique($fonc, $code, $arg) {
914
-	return match (true) {
915
-		in_array($fonc, $GLOBALS['table_criteres_infixes']) => "($code $fonc $arg)",
916
-		$fonc == 'and' || $fonc == 'et' => "((($code) AND ($arg)) ?' ' :'')",
917
-		$fonc == 'or' || $fonc == 'ou' => "((($code) OR ($arg)) ?' ' :'')",
918
-		$fonc == 'xor' || $fonc == 'xou' => "((($code) XOR ($arg)) ?' ' :'')",
919
-		$fonc == 'sinon' => "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)",
920
-		$fonc == 'not' || $fonc == 'non' => "(($code) ?'' :' ')",
921
-		$fonc == 'yes' || $fonc == 'oui' => "(($code) ?' ' :'')",
922
-		default => '',
923
-	};
914
+    return match (true) {
915
+        in_array($fonc, $GLOBALS['table_criteres_infixes']) => "($code $fonc $arg)",
916
+        $fonc == 'and' || $fonc == 'et' => "((($code) AND ($arg)) ?' ' :'')",
917
+        $fonc == 'or' || $fonc == 'ou' => "((($code) OR ($arg)) ?' ' :'')",
918
+        $fonc == 'xor' || $fonc == 'xou' => "((($code) XOR ($arg)) ?' ' :'')",
919
+        $fonc == 'sinon' => "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)",
920
+        $fonc == 'not' || $fonc == 'non' => "(($code) ?'' :' ')",
921
+        $fonc == 'yes' || $fonc == 'oui' => "(($code) ?' ' :'')",
922
+        default => '',
923
+    };
924 924
 }
925 925
 
926 926
 function compose_filtres_args($p, $args, $sep) {
927
-	$arglist = '';
928
-	foreach ($args as $arg) {
929
-		$arglist .= $sep .
930
-			calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
931
-	}
927
+    $arglist = '';
928
+    foreach ($args as $arg) {
929
+        $arglist .= $sep .
930
+            calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
931
+    }
932 932
 
933
-	return $arglist;
933
+    return $arglist;
934 934
 }
935 935
 
936 936
 
@@ -948,15 +948,15 @@  discard block
 block discarded – undo
948 948
  **/
949 949
 function calculer_argument_precedent($idb, $nom_champ, &$boucles, $defaut = null) {
950 950
 
951
-	// si recursif, forcer l'extraction du champ SQL mais ignorer le code
952
-	if ($boucles[$idb]->externe) {
953
-		index_pile($idb, $nom_champ, $boucles, '', $defaut);
954
-		// retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
955
-		// on ignore le defaut fourni dans ce cas
956
-		$defaut = "(\$Pile[\$SP]['$nom_champ'] ?? null)";
957
-	}
951
+    // si recursif, forcer l'extraction du champ SQL mais ignorer le code
952
+    if ($boucles[$idb]->externe) {
953
+        index_pile($idb, $nom_champ, $boucles, '', $defaut);
954
+        // retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
955
+        // on ignore le defaut fourni dans ce cas
956
+        $defaut = "(\$Pile[\$SP]['$nom_champ'] ?? null)";
957
+    }
958 958
 
959
-	return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
959
+    return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
960 960
 }
961 961
 
962 962
 //
@@ -970,30 +970,30 @@  discard block
 block discarded – undo
970 970
 //
971 971
 
972 972
 function rindex_pile($p, $champ, $motif) {
973
-	$n = 0;
974
-	$b = $p->id_boucle;
975
-	$p->code = '';
976
-	while ($b != '') {
977
-		foreach ($p->boucles[$b]->criteres as $critere) {
978
-			if ($critere->op == $motif) {
979
-				$p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
980
-					"]['$champ']";
981
-				$b = '';
982
-				break 2;
983
-			}
984
-		}
985
-		$n++;
986
-		$b = $p->boucles[$b]->id_parent;
987
-	}
988
-
989
-	// si on est hors d'une boucle de {recherche}, cette balise est vide
990
-	if (!$p->code) {
991
-		$p->code = "''";
992
-	}
993
-
994
-	$p->interdire_scripts = false;
995
-
996
-	return $p;
973
+    $n = 0;
974
+    $b = $p->id_boucle;
975
+    $p->code = '';
976
+    while ($b != '') {
977
+        foreach ($p->boucles[$b]->criteres as $critere) {
978
+            if ($critere->op == $motif) {
979
+                $p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
980
+                    "]['$champ']";
981
+                $b = '';
982
+                break 2;
983
+            }
984
+        }
985
+        $n++;
986
+        $b = $p->boucles[$b]->id_parent;
987
+    }
988
+
989
+    // si on est hors d'une boucle de {recherche}, cette balise est vide
990
+    if (!$p->code) {
991
+        $p->code = "''";
992
+    }
993
+
994
+    $p->interdire_scripts = false;
995
+
996
+    return $p;
997 997
 }
998 998
 
999 999
 /**
@@ -1003,7 +1003,7 @@  discard block
 block discarded – undo
1003 1003
  * @return string Nom de la balise, avec indication de boucle explicite si présent.
1004 1004
  */
1005 1005
 function zbug_presenter_champ($p, $champ = '') {
1006
-	$balise = $champ ?: $p->nom_champ;
1007
-	$explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
1008
-	return "#{$explicite}{$balise}";
1006
+    $balise = $champ ?: $p->nom_champ;
1007
+    $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
1008
+    return "#{$explicite}{$balise}";
1009 1009
 }
Please login to merge, or discard this patch.
ecrire/public/tracer.php 3 patches
Braces   +3 added lines, -6 removed lines patch added patch discarded remove patch
@@ -18,15 +18,13 @@  discard block
 block discarded – undo
18 18
 	if ($trace === '?' || defined('_DEBUG_TRACE_QUERIES')) {
19 19
 		if (defined('_DEBUG_TRACE_QUERIES') && _DEBUG_TRACE_QUERIES) {
20 20
 			$trace = true;
21
-		}
22
-		else {
21
+		} else {
23 22
 			if (empty($GLOBALS['visiteur_session'])) {
24 23
 				// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
25 24
 				// car ici on ne sait pas si c'est un hit anonyme
26 25
 				// ou une requete SQL faite avant chargement de la session
27 26
 				$trace = (empty($_GET['var_profile']) ? false : '?');
28
-			}
29
-			else {
27
+			} else {
30 28
 				include_spip('inc/autoriser');
31 29
 				// gare au bouclage sur calcul de droits au premier appel
32 30
 				// A fortiori quand on demande une trace
@@ -47,8 +45,7 @@  discard block
 block discarded – undo
47 45
 			// car ici on ne sait pas si c'est un hit anonyme
48 46
 			// ou une requete SQL faite avant chargement de la session
49 47
 			$trace = (empty($_GET['var_profile']) ? false : '?');
50
-		}
51
-		else {
48
+		} else {
52 49
 			include_spip('inc/autoriser');
53 50
 			// gare au bouclage sur calcul de droits au premier appel
54 51
 			// A fortiori quand on demande une trace
Please login to merge, or discard this patch.
Indentation   +170 added lines, -170 removed lines patch added patch discarded remove patch
@@ -10,187 +10,187 @@
 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 trace_query_start() {
17
-	static $trace = '?';
18
-	if ($trace === '?' || defined('_DEBUG_TRACE_QUERIES')) {
19
-		if (defined('_DEBUG_TRACE_QUERIES') && _DEBUG_TRACE_QUERIES) {
20
-			$trace = true;
21
-		}
22
-		else {
23
-			if (empty($GLOBALS['visiteur_session'])) {
24
-				// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
25
-				// car ici on ne sait pas si c'est un hit anonyme
26
-				// ou une requete SQL faite avant chargement de la session
27
-				$trace = (empty($_GET['var_profile']) ? false : '?');
28
-			}
29
-			else {
30
-				include_spip('inc/autoriser');
31
-				// gare au bouclage sur calcul de droits au premier appel
32
-				// A fortiori quand on demande une trace
33
-				$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
34
-				$trace = (!empty($_GET['var_profile']) && autoriser('debug'));
35
-			}
36
-		}
37
-	}
38
-
39
-	return $trace ? microtime() : 0;
17
+    static $trace = '?';
18
+    if ($trace === '?' || defined('_DEBUG_TRACE_QUERIES')) {
19
+        if (defined('_DEBUG_TRACE_QUERIES') && _DEBUG_TRACE_QUERIES) {
20
+            $trace = true;
21
+        }
22
+        else {
23
+            if (empty($GLOBALS['visiteur_session'])) {
24
+                // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
25
+                // car ici on ne sait pas si c'est un hit anonyme
26
+                // ou une requete SQL faite avant chargement de la session
27
+                $trace = (empty($_GET['var_profile']) ? false : '?');
28
+            }
29
+            else {
30
+                include_spip('inc/autoriser');
31
+                // gare au bouclage sur calcul de droits au premier appel
32
+                // A fortiori quand on demande une trace
33
+                $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
34
+                $trace = (!empty($_GET['var_profile']) && autoriser('debug'));
35
+            }
36
+        }
37
+    }
38
+
39
+    return $trace ? microtime() : 0;
40 40
 }
41 41
 
42 42
 function trace_query_end($query, $start, $result, $erreur, $serveur = '') {
43
-	static $trace = '?';
44
-	if ($trace === '?') {
45
-		if (empty($GLOBALS['visiteur_session'])) {
46
-			// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
47
-			// car ici on ne sait pas si c'est un hit anonyme
48
-			// ou une requete SQL faite avant chargement de la session
49
-			$trace = (empty($_GET['var_profile']) ? false : '?');
50
-		}
51
-		else {
52
-			include_spip('inc/autoriser');
53
-			// gare au bouclage sur calcul de droits au premier appel
54
-			// A fortiori quand on demande une trace
55
-			$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
56
-			$trace = (!empty($_GET['var_profile']) && autoriser('debug'));
57
-		}
58
-	}
59
-	if ($start) {
60
-		$end = microtime();
61
-		[$usec, $sec] = explode(' ', (string) $start);
62
-		[$usec2, $sec2] = explode(' ', $end);
63
-		$dt = $sec2 + $usec2 - $sec - $usec;
64
-		pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
65
-		if ($trace) {
66
-			trace_query_chrono($dt, $query, $result, $serveur);
67
-		}
68
-	}
69
-	// tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
70
-	if ($trace && $erreur && !preg_match('/^select\b/i', (string) $query)) {
71
-		erreur_squelette([sql_errno($serveur), $erreur, $query]);
72
-	}
73
-
74
-	return $result;
43
+    static $trace = '?';
44
+    if ($trace === '?') {
45
+        if (empty($GLOBALS['visiteur_session'])) {
46
+            // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
47
+            // car ici on ne sait pas si c'est un hit anonyme
48
+            // ou une requete SQL faite avant chargement de la session
49
+            $trace = (empty($_GET['var_profile']) ? false : '?');
50
+        }
51
+        else {
52
+            include_spip('inc/autoriser');
53
+            // gare au bouclage sur calcul de droits au premier appel
54
+            // A fortiori quand on demande une trace
55
+            $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
56
+            $trace = (!empty($_GET['var_profile']) && autoriser('debug'));
57
+        }
58
+    }
59
+    if ($start) {
60
+        $end = microtime();
61
+        [$usec, $sec] = explode(' ', (string) $start);
62
+        [$usec2, $sec2] = explode(' ', $end);
63
+        $dt = $sec2 + $usec2 - $sec - $usec;
64
+        pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
65
+        if ($trace) {
66
+            trace_query_chrono($dt, $query, $result, $serveur);
67
+        }
68
+    }
69
+    // tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
70
+    if ($trace && $erreur && !preg_match('/^select\b/i', (string) $query)) {
71
+        erreur_squelette([sql_errno($serveur), $erreur, $query]);
72
+    }
73
+
74
+    return $result;
75 75
 }
76 76
 
77 77
 function trace_query_chrono($dt, $query, $result, $serveur = '') {
78
-	include_spip('inc/filtres_mini');
79
-	static $tt = 0, $nb = 0;
80
-
81
-	$x = _request('var_mode_objet');
82
-	if (isset($GLOBALS['debug']['aucasou'])) {
83
-		[, $boucle, $serveur, $contexte] = $GLOBALS['debug']['aucasou'];
84
-		if ($x && !preg_match("/$boucle\$/", (string) $x)) {
85
-			return;
86
-		}
87
-		if ($serveur) {
88
-			$boucle .= " ($serveur)";
89
-		}
90
-		$boucle = "<b>$boucle</b>";
91
-	} else {
92
-		if ($x) {
93
-			return;
94
-		}
95
-		$boucle = $contexte = '';
96
-	}
97
-
98
-	$tt += $dt;
99
-	$nb++;
100
-
101
-	$q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
102
-	$e = sql_explain($query, $serveur);
103
-	$r = str_replace('Resource id ', '', (is_object($result) ? $result::class : $result));
104
-	$GLOBALS['tableau_des_temps'][] = [$dt, $nb, $boucle, $q, $e, $r, $contexte];
78
+    include_spip('inc/filtres_mini');
79
+    static $tt = 0, $nb = 0;
80
+
81
+    $x = _request('var_mode_objet');
82
+    if (isset($GLOBALS['debug']['aucasou'])) {
83
+        [, $boucle, $serveur, $contexte] = $GLOBALS['debug']['aucasou'];
84
+        if ($x && !preg_match("/$boucle\$/", (string) $x)) {
85
+            return;
86
+        }
87
+        if ($serveur) {
88
+            $boucle .= " ($serveur)";
89
+        }
90
+        $boucle = "<b>$boucle</b>";
91
+    } else {
92
+        if ($x) {
93
+            return;
94
+        }
95
+        $boucle = $contexte = '';
96
+    }
97
+
98
+    $tt += $dt;
99
+    $nb++;
100
+
101
+    $q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
102
+    $e = sql_explain($query, $serveur);
103
+    $r = str_replace('Resource id ', '', (is_object($result) ? $result::class : $result));
104
+    $GLOBALS['tableau_des_temps'][] = [$dt, $nb, $boucle, $q, $e, $r, $contexte];
105 105
 }
106 106
 
107 107
 
108 108
 function chrono_requete($temps) {
109
-	$total = 0;
110
-	$hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
111
-	$t = $q = $n = $d = [];
112
-	// Totaliser les temps et completer le Explain
113
-	foreach ($temps as $key => $v) {
114
-		[$dt, $nb, $boucle, $query, $explain, $res, $contexte] = $v;
115
-		if (is_array($contexte)) {
116
-			$k = ($contexte[0] . " $boucle");
117
-			include_spip('public/compiler');
118
-			$env = reconstruire_contexte_compil($contexte);
119
-		} else {
120
-			$k = $env = $boucle;
121
-		}
122
-
123
-		$total += $dt;
124
-		$t[$key] = $dt;
125
-		$q[$key] = $nb;
126
-		if (!isset($d[$k])) {
127
-			$d[$k] = 0;
128
-			$n[$k] = 0;
129
-		}
130
-		$d[$k] += $dt;
131
-		++$n[$k];
132
-
133
-		if (!is_array($explain)) {
134
-			$explain = [];
135
-		}
136
-		foreach ($explain as $j => $v) {
137
-			$explain[$j] = "<tr><th>$j</th><td>"
138
-				. str_replace(';', '<br />', (string) $v)
139
-				. '</td></tr>';
140
-		}
141
-		$e = "<table class='explain'>"
142
-			. '<caption>'
143
-			. $query
144
-			. '</caption>'
145
-			. "<tr><th>Time</th><td>$dt</td></tr>"
146
-			. "<tr><th>Order</th><td>$nb</td></tr>"
147
-			. "<tr><th>Res</th><td>$res</td></tr>"
148
-			. implode('', $explain)
149
-			. '</table>';
150
-
151
-		$temps[$key] = [$e, $env, $k];
152
-	}
153
-	// Trier par temps d'execution decroissant
154
-	array_multisort($t, SORT_DESC, $q, $temps);
155
-	arsort($d);
156
-	$i = 1;
157
-	$t = [];
158
-	// Fabriquer les liens de navigations dans le tableau des temps
159
-	foreach ($temps as $k => $v) {
160
-		$titre = strip_tags((string) $v[2]);
161
-		$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
162
-		$href = str_replace("\\'", '&#39;', $href);
163
-
164
-		if (!isset($t[$v[2]])) {
165
-			$t[$v[2]] = [];
166
-		}
167
-		$t[$v[2]][] = "<span class='spip-debug-arg'> "
168
-			. "<a title='$titre' href='$href'>$i</a>"
169
-			. '</span>'
170
-			. ((count($t[$v[2]]) % 10 == 9) ? '<br />' : '');
171
-		$i++;
172
-	}
173
-
174
-	if ($d['']) {
175
-		$d[$hors] = $d[''];
176
-		$n[$hors] = $n[''];
177
-		$t[$hors] = $t[''];
178
-	}
179
-	unset($d['']);
180
-	// Fabriquer le tableau des liens de navigation dans le grand tableau
181
-	foreach ($d as $k => $v) {
182
-		$d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
183
-			. implode('', $t[$k]);
184
-	}
185
-
186
-	$navigation = [
187
-		_T('zbug_statistiques'),
188
-		'<tr><td>'
189
-		. implode("</td></tr>\n<tr><td>", $d)
190
-		. "</td></tr>\n"
191
-		. (# _request('var_mode_objet') ? '' :
192
-		('<tr><td>' . (is_countable($temps) ? count($temps) : 0) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
193
-	];
194
-
195
-	return [$temps, $navigation];
109
+    $total = 0;
110
+    $hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
111
+    $t = $q = $n = $d = [];
112
+    // Totaliser les temps et completer le Explain
113
+    foreach ($temps as $key => $v) {
114
+        [$dt, $nb, $boucle, $query, $explain, $res, $contexte] = $v;
115
+        if (is_array($contexte)) {
116
+            $k = ($contexte[0] . " $boucle");
117
+            include_spip('public/compiler');
118
+            $env = reconstruire_contexte_compil($contexte);
119
+        } else {
120
+            $k = $env = $boucle;
121
+        }
122
+
123
+        $total += $dt;
124
+        $t[$key] = $dt;
125
+        $q[$key] = $nb;
126
+        if (!isset($d[$k])) {
127
+            $d[$k] = 0;
128
+            $n[$k] = 0;
129
+        }
130
+        $d[$k] += $dt;
131
+        ++$n[$k];
132
+
133
+        if (!is_array($explain)) {
134
+            $explain = [];
135
+        }
136
+        foreach ($explain as $j => $v) {
137
+            $explain[$j] = "<tr><th>$j</th><td>"
138
+                . str_replace(';', '<br />', (string) $v)
139
+                . '</td></tr>';
140
+        }
141
+        $e = "<table class='explain'>"
142
+            . '<caption>'
143
+            . $query
144
+            . '</caption>'
145
+            . "<tr><th>Time</th><td>$dt</td></tr>"
146
+            . "<tr><th>Order</th><td>$nb</td></tr>"
147
+            . "<tr><th>Res</th><td>$res</td></tr>"
148
+            . implode('', $explain)
149
+            . '</table>';
150
+
151
+        $temps[$key] = [$e, $env, $k];
152
+    }
153
+    // Trier par temps d'execution decroissant
154
+    array_multisort($t, SORT_DESC, $q, $temps);
155
+    arsort($d);
156
+    $i = 1;
157
+    $t = [];
158
+    // Fabriquer les liens de navigations dans le tableau des temps
159
+    foreach ($temps as $k => $v) {
160
+        $titre = strip_tags((string) $v[2]);
161
+        $href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
162
+        $href = str_replace("\\'", '&#39;', $href);
163
+
164
+        if (!isset($t[$v[2]])) {
165
+            $t[$v[2]] = [];
166
+        }
167
+        $t[$v[2]][] = "<span class='spip-debug-arg'> "
168
+            . "<a title='$titre' href='$href'>$i</a>"
169
+            . '</span>'
170
+            . ((count($t[$v[2]]) % 10 == 9) ? '<br />' : '');
171
+        $i++;
172
+    }
173
+
174
+    if ($d['']) {
175
+        $d[$hors] = $d[''];
176
+        $n[$hors] = $n[''];
177
+        $t[$hors] = $t[''];
178
+    }
179
+    unset($d['']);
180
+    // Fabriquer le tableau des liens de navigation dans le grand tableau
181
+    foreach ($d as $k => $v) {
182
+        $d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
183
+            . implode('', $t[$k]);
184
+    }
185
+
186
+    $navigation = [
187
+        _T('zbug_statistiques'),
188
+        '<tr><td>'
189
+        . implode("</td></tr>\n<tr><td>", $d)
190
+        . "</td></tr>\n"
191
+        . (# _request('var_mode_objet') ? '' :
192
+        ('<tr><td>' . (is_countable($temps) ? count($temps) : 0) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
193
+    ];
194
+
195
+    return [$temps, $navigation];
196 196
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -107,13 +107,13 @@  discard block
 block discarded – undo
107 107
 
108 108
 function chrono_requete($temps) {
109 109
 	$total = 0;
110
-	$hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
110
+	$hors = '<i>'._T('zbug_hors_compilation').'</i>';
111 111
 	$t = $q = $n = $d = [];
112 112
 	// Totaliser les temps et completer le Explain
113 113
 	foreach ($temps as $key => $v) {
114 114
 		[$dt, $nb, $boucle, $query, $explain, $res, $contexte] = $v;
115 115
 		if (is_array($contexte)) {
116
-			$k = ($contexte[0] . " $boucle");
116
+			$k = ($contexte[0]." $boucle");
117 117
 			include_spip('public/compiler');
118 118
 			$env = reconstruire_contexte_compil($contexte);
119 119
 		} else {
@@ -158,7 +158,7 @@  discard block
 block discarded – undo
158 158
 	// Fabriquer les liens de navigations dans le tableau des temps
159 159
 	foreach ($temps as $k => $v) {
160 160
 		$titre = strip_tags((string) $v[2]);
161
-		$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
161
+		$href = quote_amp($GLOBALS['REQUEST_URI'])."#req$i";
162 162
 		$href = str_replace("\\'", '&#39;', $href);
163 163
 
164 164
 		if (!isset($t[$v[2]])) {
@@ -179,7 +179,7 @@  discard block
 block discarded – undo
179 179
 	unset($d['']);
180 180
 	// Fabriquer le tableau des liens de navigation dans le grand tableau
181 181
 	foreach ($d as $k => $v) {
182
-		$d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
182
+		$d[$k] = $n[$k]."</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
183 183
 			. implode('', $t[$k]);
184 184
 	}
185 185
 
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
 		. implode("</td></tr>\n<tr><td>", $d)
190 190
 		. "</td></tr>\n"
191 191
 		. (# _request('var_mode_objet') ? '' :
192
-		('<tr><td>' . (is_countable($temps) ? count($temps) : 0) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
192
+		('<tr><td>'.(is_countable($temps) ? count($temps) : 0).'</td><td>'._T('info_total').'</td><td class="time">'.$total.'</td><td></td></tr>'))
193 193
 	];
194 194
 
195 195
 	return [$temps, $navigation];
Please login to merge, or discard this patch.
ecrire/action/referencer_traduction.php 2 patches
Indentation   +45 added lines, -45 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
 /**
@@ -40,54 +40,54 @@  discard block
 block discarded – undo
40 40
  */
41 41
 function action_referencer_traduction_dist($objet, $id_objet, $id_trad) {
42 42
 
43
-	// ne rien faire si id_trad est ambigu
44
-	if (!is_numeric($id_trad)) {
45
-		return false;
46
-	}
43
+    // ne rien faire si id_trad est ambigu
44
+    if (!is_numeric($id_trad)) {
45
+        return false;
46
+    }
47 47
 
48
-	$table_objet_sql = table_objet_sql($objet);
49
-	$id_table_objet = id_table_objet($objet);
48
+    $table_objet_sql = table_objet_sql($objet);
49
+    $id_table_objet = id_table_objet($objet);
50 50
 
51
-	// on a fourni un id_trad : affectation ou modification du groupe de trad
52
-	if ($id_trad) {
53
-		// selectionner l'objet cible, qui doit etre different de nous-meme,
54
-		// et quitter s'il n'existe pas
55
-		$id_lier = sql_getfetsel(
56
-			'id_trad',
57
-			$table_objet_sql,
58
-			"$id_table_objet=" . (int) $id_trad . " AND NOT($id_table_objet=" . (int) $id_objet . ')'
59
-		);
60
-		if ($id_lier === null) {
61
-			spip_log("echec lien de trad vers objet $objet/$id_objet incorrect ($id_trad)");
51
+    // on a fourni un id_trad : affectation ou modification du groupe de trad
52
+    if ($id_trad) {
53
+        // selectionner l'objet cible, qui doit etre different de nous-meme,
54
+        // et quitter s'il n'existe pas
55
+        $id_lier = sql_getfetsel(
56
+            'id_trad',
57
+            $table_objet_sql,
58
+            "$id_table_objet=" . (int) $id_trad . " AND NOT($id_table_objet=" . (int) $id_objet . ')'
59
+        );
60
+        if ($id_lier === null) {
61
+            spip_log("echec lien de trad vers objet $objet/$id_objet incorrect ($id_trad)");
62 62
 
63
-			return false;
64
-		}
63
+            return false;
64
+        }
65 65
 
66
-		// $id_lier est le numero du groupe de traduction
67
-		// Si l'objet vise n'est pas deja traduit, son identifiant devient
68
-		// le nouvel id_trad de ce nouveau groupe et on l'affecte aux deux
69
-		// objets
70
-		if ($id_lier == 0) {
71
-			sql_updateq($table_objet_sql, ['id_trad' => $id_trad], "$id_table_objet IN ($id_trad, $id_objet)");
72
-		} // si id_lier = id_objet alors on veut changer la reference de tout le groupe de trad
73
-		elseif ($id_lier == $id_objet) {
74
-			sql_updateq($table_objet_sql, ['id_trad' => $id_trad], "id_trad = $id_lier");
75
-		} // sinon ajouter notre objet dans le groupe
76
-		else {
77
-			sql_updateq($table_objet_sql, ['id_trad' => $id_lier], "$id_table_objet=" . (int) $id_objet);
78
-		}
79
-	} // on a fourni un id_trad nul : sortir id_objet du groupe de trad
80
-	else {
81
-		$old_id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$id_table_objet=" . (int) $id_objet);
82
-		// supprimer le lien de traduction
83
-		sql_updateq($table_objet_sql, ['id_trad' => 0], "$id_table_objet=" . (int) $id_objet);
66
+        // $id_lier est le numero du groupe de traduction
67
+        // Si l'objet vise n'est pas deja traduit, son identifiant devient
68
+        // le nouvel id_trad de ce nouveau groupe et on l'affecte aux deux
69
+        // objets
70
+        if ($id_lier == 0) {
71
+            sql_updateq($table_objet_sql, ['id_trad' => $id_trad], "$id_table_objet IN ($id_trad, $id_objet)");
72
+        } // si id_lier = id_objet alors on veut changer la reference de tout le groupe de trad
73
+        elseif ($id_lier == $id_objet) {
74
+            sql_updateq($table_objet_sql, ['id_trad' => $id_trad], "id_trad = $id_lier");
75
+        } // sinon ajouter notre objet dans le groupe
76
+        else {
77
+            sql_updateq($table_objet_sql, ['id_trad' => $id_lier], "$id_table_objet=" . (int) $id_objet);
78
+        }
79
+    } // on a fourni un id_trad nul : sortir id_objet du groupe de trad
80
+    else {
81
+        $old_id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$id_table_objet=" . (int) $id_objet);
82
+        // supprimer le lien de traduction
83
+        sql_updateq($table_objet_sql, ['id_trad' => 0], "$id_table_objet=" . (int) $id_objet);
84 84
 
85
-		// Verifier si l'ancien groupe ne comporte plus qu'un seul objet. Alors mettre a zero.
86
-		$cpt = sql_countsel($table_objet_sql, 'id_trad=' . (int) $old_id_trad);
87
-		if ($cpt == 1) {
88
-			sql_updateq($table_objet_sql, ['id_trad' => 0], 'id_trad=' . (int) $old_id_trad);
89
-		}
90
-	}
85
+        // Verifier si l'ancien groupe ne comporte plus qu'un seul objet. Alors mettre a zero.
86
+        $cpt = sql_countsel($table_objet_sql, 'id_trad=' . (int) $old_id_trad);
87
+        if ($cpt == 1) {
88
+            sql_updateq($table_objet_sql, ['id_trad' => 0], 'id_trad=' . (int) $old_id_trad);
89
+        }
90
+    }
91 91
 
92
-	return true;
92
+    return true;
93 93
 }
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
 		$id_lier = sql_getfetsel(
56 56
 			'id_trad',
57 57
 			$table_objet_sql,
58
-			"$id_table_objet=" . (int) $id_trad . " AND NOT($id_table_objet=" . (int) $id_objet . ')'
58
+			"$id_table_objet=".(int) $id_trad." AND NOT($id_table_objet=".(int) $id_objet.')'
59 59
 		);
60 60
 		if ($id_lier === null) {
61 61
 			spip_log("echec lien de trad vers objet $objet/$id_objet incorrect ($id_trad)");
@@ -74,18 +74,18 @@  discard block
 block discarded – undo
74 74
 			sql_updateq($table_objet_sql, ['id_trad' => $id_trad], "id_trad = $id_lier");
75 75
 		} // sinon ajouter notre objet dans le groupe
76 76
 		else {
77
-			sql_updateq($table_objet_sql, ['id_trad' => $id_lier], "$id_table_objet=" . (int) $id_objet);
77
+			sql_updateq($table_objet_sql, ['id_trad' => $id_lier], "$id_table_objet=".(int) $id_objet);
78 78
 		}
79 79
 	} // on a fourni un id_trad nul : sortir id_objet du groupe de trad
80 80
 	else {
81
-		$old_id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$id_table_objet=" . (int) $id_objet);
81
+		$old_id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$id_table_objet=".(int) $id_objet);
82 82
 		// supprimer le lien de traduction
83
-		sql_updateq($table_objet_sql, ['id_trad' => 0], "$id_table_objet=" . (int) $id_objet);
83
+		sql_updateq($table_objet_sql, ['id_trad' => 0], "$id_table_objet=".(int) $id_objet);
84 84
 
85 85
 		// Verifier si l'ancien groupe ne comporte plus qu'un seul objet. Alors mettre a zero.
86
-		$cpt = sql_countsel($table_objet_sql, 'id_trad=' . (int) $old_id_trad);
86
+		$cpt = sql_countsel($table_objet_sql, 'id_trad='.(int) $old_id_trad);
87 87
 		if ($cpt == 1) {
88
-			sql_updateq($table_objet_sql, ['id_trad' => 0], 'id_trad=' . (int) $old_id_trad);
88
+			sql_updateq($table_objet_sql, ['id_trad' => 0], 'id_trad='.(int) $old_id_trad);
89 89
 		}
90 90
 	}
91 91
 
Please login to merge, or discard this patch.
ecrire/action/tester_taille.php 2 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -75,7 +75,7 @@  discard block
 block discarded – undo
75 75
 		$t = ($GLOBALS['taille_min'] * $GLOBALS['taille_min']);
76 76
 		if ($GLOBALS['taille_min'] !== $GLOBALS['taille_max']) {
77 77
 			$t *= 0.9; // marge de securite
78
-			echo round($t / 1_000_000, 3) . ' Mpx';
78
+			echo round($t / 1_000_000, 3).' Mpx';
79 79
 		} else {
80 80
 			// c'est un cas "on a reussi la borne max initiale, donc on a pas de limite connue"
81 81
 			$t = 0;
@@ -111,19 +111,19 @@  discard block
 block discarded – undo
111 111
 	$image_source = chemin_image('test.png');
112 112
 	$GLOBALS['redirect'] = generer_url_action(
113 113
 		'tester_taille',
114
-		"i=$i&arg=" . $GLOBALS['taille_min'] . '-' . $GLOBALS['taille_test']
114
+		"i=$i&arg=".$GLOBALS['taille_min'].'-'.$GLOBALS['taille_test']
115 115
 	);
116 116
 
117 117
 	ob_start('action_tester_taille_error_handler');
118 118
 	filtrer('image_recadre', $image_source, $taille, $taille);
119
-	$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
119
+	$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-".$GLOBALS['taille_max']);
120 120
 
121 121
 	// si la valeur intermediaire a reussi, on teste la valeur maxi qui est peut etre sous estimee
122 122
 	// si $GLOBALS['taille_min']==0 (car on est au premier coup)
123 123
 	if ($GLOBALS['taille_min'] == 0) {
124 124
 		$taille = $GLOBALS['taille_max'];
125 125
 		filtrer('image_recadre', $image_source, $taille, $taille);
126
-		$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
126
+		$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-".$GLOBALS['taille_max']);
127 127
 	}
128 128
 	ob_end_clean();
129 129
 
Please login to merge, or discard this patch.
Indentation   +79 added lines, -79 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  */
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 include_spip('inc/headers');
23 23
 
@@ -34,12 +34,12 @@  discard block
 block discarded – undo
34 34
  *     Sortie du buffer
35 35
  **/
36 36
 function action_tester_taille_error_handler($output) {
37
-	// on est ici, donc echec lors de la creation de l'image
38
-	if (!empty($GLOBALS['redirect'])) {
39
-		return redirige_formulaire($GLOBALS['redirect']);
40
-	}
37
+    // on est ici, donc echec lors de la creation de l'image
38
+    if (!empty($GLOBALS['redirect'])) {
39
+        return redirige_formulaire($GLOBALS['redirect']);
40
+    }
41 41
 
42
-	return $output;
42
+    return $output;
43 43
 }
44 44
 
45 45
 
@@ -57,77 +57,77 @@  discard block
 block discarded – undo
57 57
  **/
58 58
 function action_tester_taille_dist() {
59 59
 
60
-	if (!autoriser('configurer')) {
61
-		return;
62
-	}
63
-
64
-	$taille = _request('arg');
65
-	$taille = explode('-', (string) $taille);
66
-
67
-	$GLOBALS['taille_max'] = end($taille);
68
-	$GLOBALS['taille_min'] = 0;
69
-	if (count($taille) > 1) {
70
-		$GLOBALS['taille_min'] = reset($taille);
71
-	}
72
-
73
-	// si l'intervalle est assez petit, on garde la valeur min
74
-	if ($GLOBALS['taille_max'] * $GLOBALS['taille_max'] - $GLOBALS['taille_min'] * $GLOBALS['taille_min'] < 50000) {
75
-		$t = ($GLOBALS['taille_min'] * $GLOBALS['taille_min']);
76
-		if ($GLOBALS['taille_min'] !== $GLOBALS['taille_max']) {
77
-			$t *= 0.9; // marge de securite
78
-			echo round($t / 1_000_000, 3) . ' Mpx';
79
-		} else {
80
-			// c'est un cas "on a reussi la borne max initiale, donc on a pas de limite connue"
81
-			$t = 0;
82
-			echo '&infin;';
83
-		}
84
-		ecrire_meta('max_taille_vignettes', $t, 'non');
85
-		die();
86
-	}
87
-
88
-	$taille = $GLOBALS['taille_test'] = round(($GLOBALS['taille_max'] + $GLOBALS['taille_min']) / 2);
89
-
90
-	include_spip('inc/filtres');
91
-	// des inclusions representatives d'un hit prive et/ou public pour la conso memoire
92
-	include_spip('public/assembler');
93
-	include_spip('public/balises');
94
-	include_spip('public/boucles');
95
-	include_spip('public/cacher');
96
-	include_spip('public/compiler');
97
-	include_spip('public/composer');
98
-	include_spip('public/criteres');
99
-	include_spip('public/interfaces');
100
-	include_spip('public/parametrer');
101
-	include_spip('public/phraser_html');
102
-	include_spip('public/references');
103
-
104
-	include_spip('inc/presentation');
105
-	include_spip('inc/charsets');
106
-	include_spip('inc/documents');
107
-	include_spip('inc/header');
108
-	propre('<doc1>'); // charger propre avec le trairement d'un modele
109
-
110
-	$i = _request('i') + 1;
111
-	$image_source = chemin_image('test.png');
112
-	$GLOBALS['redirect'] = generer_url_action(
113
-		'tester_taille',
114
-		"i=$i&arg=" . $GLOBALS['taille_min'] . '-' . $GLOBALS['taille_test']
115
-	);
116
-
117
-	ob_start('action_tester_taille_error_handler');
118
-	filtrer('image_recadre', $image_source, $taille, $taille);
119
-	$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
120
-
121
-	// si la valeur intermediaire a reussi, on teste la valeur maxi qui est peut etre sous estimee
122
-	// si $GLOBALS['taille_min']==0 (car on est au premier coup)
123
-	if ($GLOBALS['taille_min'] == 0) {
124
-		$taille = $GLOBALS['taille_max'];
125
-		filtrer('image_recadre', $image_source, $taille, $taille);
126
-		$GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
127
-	}
128
-	ob_end_clean();
129
-
130
-
131
-	// on est ici, donc pas de plantage
132
-	echo redirige_formulaire($GLOBALS['redirect']);
60
+    if (!autoriser('configurer')) {
61
+        return;
62
+    }
63
+
64
+    $taille = _request('arg');
65
+    $taille = explode('-', (string) $taille);
66
+
67
+    $GLOBALS['taille_max'] = end($taille);
68
+    $GLOBALS['taille_min'] = 0;
69
+    if (count($taille) > 1) {
70
+        $GLOBALS['taille_min'] = reset($taille);
71
+    }
72
+
73
+    // si l'intervalle est assez petit, on garde la valeur min
74
+    if ($GLOBALS['taille_max'] * $GLOBALS['taille_max'] - $GLOBALS['taille_min'] * $GLOBALS['taille_min'] < 50000) {
75
+        $t = ($GLOBALS['taille_min'] * $GLOBALS['taille_min']);
76
+        if ($GLOBALS['taille_min'] !== $GLOBALS['taille_max']) {
77
+            $t *= 0.9; // marge de securite
78
+            echo round($t / 1_000_000, 3) . ' Mpx';
79
+        } else {
80
+            // c'est un cas "on a reussi la borne max initiale, donc on a pas de limite connue"
81
+            $t = 0;
82
+            echo '&infin;';
83
+        }
84
+        ecrire_meta('max_taille_vignettes', $t, 'non');
85
+        die();
86
+    }
87
+
88
+    $taille = $GLOBALS['taille_test'] = round(($GLOBALS['taille_max'] + $GLOBALS['taille_min']) / 2);
89
+
90
+    include_spip('inc/filtres');
91
+    // des inclusions representatives d'un hit prive et/ou public pour la conso memoire
92
+    include_spip('public/assembler');
93
+    include_spip('public/balises');
94
+    include_spip('public/boucles');
95
+    include_spip('public/cacher');
96
+    include_spip('public/compiler');
97
+    include_spip('public/composer');
98
+    include_spip('public/criteres');
99
+    include_spip('public/interfaces');
100
+    include_spip('public/parametrer');
101
+    include_spip('public/phraser_html');
102
+    include_spip('public/references');
103
+
104
+    include_spip('inc/presentation');
105
+    include_spip('inc/charsets');
106
+    include_spip('inc/documents');
107
+    include_spip('inc/header');
108
+    propre('<doc1>'); // charger propre avec le trairement d'un modele
109
+
110
+    $i = _request('i') + 1;
111
+    $image_source = chemin_image('test.png');
112
+    $GLOBALS['redirect'] = generer_url_action(
113
+        'tester_taille',
114
+        "i=$i&arg=" . $GLOBALS['taille_min'] . '-' . $GLOBALS['taille_test']
115
+    );
116
+
117
+    ob_start('action_tester_taille_error_handler');
118
+    filtrer('image_recadre', $image_source, $taille, $taille);
119
+    $GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
120
+
121
+    // si la valeur intermediaire a reussi, on teste la valeur maxi qui est peut etre sous estimee
122
+    // si $GLOBALS['taille_min']==0 (car on est au premier coup)
123
+    if ($GLOBALS['taille_min'] == 0) {
124
+        $taille = $GLOBALS['taille_max'];
125
+        filtrer('image_recadre', $image_source, $taille, $taille);
126
+        $GLOBALS['redirect'] = generer_url_action('tester_taille', "i=$i&arg=$taille-" . $GLOBALS['taille_max']);
127
+    }
128
+    ob_end_clean();
129
+
130
+
131
+    // on est ici, donc pas de plantage
132
+    echo redirige_formulaire($GLOBALS['redirect']);
133 133
 }
Please login to merge, or discard this patch.