Completed
Push — master ( 0528ed...3f7b24 )
by cam
01:54
created
ecrire/lang/public_en.php 1 patch
Indentation   +114 added lines, -114 removed lines patch added patch discarded remove patch
@@ -5,118 +5,118 @@
 block discarded – undo
5 5
 
6 6
 return [
7 7
 
8
-	// A
9
-	'accueil_site' => 'Home',
10
-	'article' => 'Article',
11
-	'articles' => 'Articles',
12
-	'articles_auteur' => 'Articles by this author',
13
-	'articles_populaires' => 'Most popular articles',
14
-	'articles_rubrique' => 'Articles in this section',
15
-	'aucun_article' => 'No articles here',
16
-	'aucun_auteur' => 'No authors here',
17
-	'aucun_site' => 'No links here',
18
-	'aucune_breve' => 'No news items here',
19
-	'aucune_rubrique' => 'No sections here',
20
-	'auteur' => 'Author',
21
-	'autres' => 'Others',
22
-	'autres_breves' => 'Other news',
23
-	'autres_groupes_mots_clefs' => 'Other groups of keywords',
24
-	'autres_sites' => 'Other websites',
25
-
26
-	// B
27
-	'bonjour' => 'Hello',
28
-
29
-	// C
30
-	'commenter_site' => 'Comment on this site',
31
-	'contact' => 'Contact',
32
-	'copie_document_impossible' => 'Impossible to copy this document',
33
-
34
-	// D
35
-	'date' => 'Date',
36
-	'dernier_ajout' => 'Latest update',
37
-	'dernieres_breves' => 'Latest news',
38
-	'derniers_articles' => 'Latest articles',
39
-	'derniers_commentaires' => 'Latest comments',
40
-	'derniers_messages_forum' => 'Latest forum posts',
41
-
42
-	// E
43
-	'edition_mode_texte' => 'Text mode only',
44
-	'en_reponse' => 'Replying to:',
45
-	'en_resume' => 'Summary',
46
-	'envoyer_message' => 'Send a message',
47
-	'espace_prive' => 'Back-office',
48
-
49
-	// F
50
-	'formats_acceptes' => 'Valid formats: @formats@.',
51
-
52
-	// H
53
-	'hierarchie_site' => 'Site map',
54
-
55
-	// J
56
-	'jours' => 'days',
57
-
58
-	// L
59
-	'lien_connecter' => 'Log in',
60
-
61
-	// M
62
-	'meme_auteur' => 'By the same author',
63
-	'meme_rubrique' => 'Also in this section',
64
-	'memes_auteurs' => 'By the same authors',
65
-	'message' => 'Message',
66
-	'messages_forum' => 'Forum posts',
67
-	'messages_recents' => 'Most recent forum posts',
68
-	'mots_clef' => 'Keyword',
69
-	'mots_clefs' => 'Keywords',
70
-	'mots_clefs_meme_groupe' => 'Other keywords in this group',
71
-
72
-	// N
73
-	'navigation' => 'Browsing',
74
-	'nom' => 'Name',
75
-	'nouveautes' => 'What’s new',
76
-	'nouveautes_web' => 'What’s new on the Web',
77
-	'nouveaux_articles' => 'New articles',
78
-	'nouvelles_breves' => 'Latest news items',
79
-
80
-	// P
81
-	'page_precedente' => 'previous page',
82
-	'page_suivante' => 'next page',
83
-	'par_auteur' => 'by ',
84
-	'participer_site' => 'You can take active part in this website and write your own articles by signing up here. You will receive an email with your account information for the back-office of the site.',
85
-	'plan_site' => 'Site Map',
86
-	'popularite' => 'Popularity',
87
-	'poster_message' => 'Post a message',
88
-	'proposer_site' => 'You can suggest a website for inclusion in this section:',
89
-
90
-	// R
91
-	'repondre_article' => 'Comment on this article',
92
-	'repondre_breve' => 'Comment on this news item',
93
-	'resultats_recherche' => 'Search results',
94
-	'retour_debut_forums' => 'Back to forum top',
95
-	'rss_abonnement' => 'Simply copy the following URL into your aggregator:',
96
-	'rss_abonnement_titre' => 'Subscribe',
97
-	'rss_abonnement_titre_page' => 'Subscribe to',
98
-	'rss_explication' => 'An RSS thread collects information about a site’s update. It delivers the content of the tickets or the comments or an extract of them, as well as a link to the full versions et some other information. This thread is to be read by an RSS aggregator.',
99
-	'rss_explication_titre' => 'What is an RSS feed?',
100
-	'rubrique' => 'Section',
101
-	'rubriques' => 'Sections',
102
-
103
-	// S
104
-	'signatures_petition' => 'Signatures',
105
-	'site_realise_avec_spip' => 'Site powered by SPIP',
106
-	'sites_web' => 'Websites',
107
-	'sous_rubriques' => 'Subsections',
108
-	'spam' => 'Spam',
109
-	'suite' => 'continue',
110
-	'sur_web' => 'Around the Web',
111
-	'syndiquer_rubrique' => 'Subscribe to this section',
112
-	'syndiquer_site' => 'Subscribe to the whole site',
113
-
114
-	// T
115
-	'texte_lettre_information' => 'Here is the site newsletter',
116
-	'texte_lettre_information_2' => 'This site contains news items published since',
117
-
118
-	// V
119
-	'ver_imprimer' => 'Printable version',
120
-	'voir_en_ligne' => 'View online',
121
-	'voir_squelette' => 'show the template of this page',
8
+    // A
9
+    'accueil_site' => 'Home',
10
+    'article' => 'Article',
11
+    'articles' => 'Articles',
12
+    'articles_auteur' => 'Articles by this author',
13
+    'articles_populaires' => 'Most popular articles',
14
+    'articles_rubrique' => 'Articles in this section',
15
+    'aucun_article' => 'No articles here',
16
+    'aucun_auteur' => 'No authors here',
17
+    'aucun_site' => 'No links here',
18
+    'aucune_breve' => 'No news items here',
19
+    'aucune_rubrique' => 'No sections here',
20
+    'auteur' => 'Author',
21
+    'autres' => 'Others',
22
+    'autres_breves' => 'Other news',
23
+    'autres_groupes_mots_clefs' => 'Other groups of keywords',
24
+    'autres_sites' => 'Other websites',
25
+
26
+    // B
27
+    'bonjour' => 'Hello',
28
+
29
+    // C
30
+    'commenter_site' => 'Comment on this site',
31
+    'contact' => 'Contact',
32
+    'copie_document_impossible' => 'Impossible to copy this document',
33
+
34
+    // D
35
+    'date' => 'Date',
36
+    'dernier_ajout' => 'Latest update',
37
+    'dernieres_breves' => 'Latest news',
38
+    'derniers_articles' => 'Latest articles',
39
+    'derniers_commentaires' => 'Latest comments',
40
+    'derniers_messages_forum' => 'Latest forum posts',
41
+
42
+    // E
43
+    'edition_mode_texte' => 'Text mode only',
44
+    'en_reponse' => 'Replying to:',
45
+    'en_resume' => 'Summary',
46
+    'envoyer_message' => 'Send a message',
47
+    'espace_prive' => 'Back-office',
48
+
49
+    // F
50
+    'formats_acceptes' => 'Valid formats: @formats@.',
51
+
52
+    // H
53
+    'hierarchie_site' => 'Site map',
54
+
55
+    // J
56
+    'jours' => 'days',
57
+
58
+    // L
59
+    'lien_connecter' => 'Log in',
60
+
61
+    // M
62
+    'meme_auteur' => 'By the same author',
63
+    'meme_rubrique' => 'Also in this section',
64
+    'memes_auteurs' => 'By the same authors',
65
+    'message' => 'Message',
66
+    'messages_forum' => 'Forum posts',
67
+    'messages_recents' => 'Most recent forum posts',
68
+    'mots_clef' => 'Keyword',
69
+    'mots_clefs' => 'Keywords',
70
+    'mots_clefs_meme_groupe' => 'Other keywords in this group',
71
+
72
+    // N
73
+    'navigation' => 'Browsing',
74
+    'nom' => 'Name',
75
+    'nouveautes' => 'What’s new',
76
+    'nouveautes_web' => 'What’s new on the Web',
77
+    'nouveaux_articles' => 'New articles',
78
+    'nouvelles_breves' => 'Latest news items',
79
+
80
+    // P
81
+    'page_precedente' => 'previous page',
82
+    'page_suivante' => 'next page',
83
+    'par_auteur' => 'by ',
84
+    'participer_site' => 'You can take active part in this website and write your own articles by signing up here. You will receive an email with your account information for the back-office of the site.',
85
+    'plan_site' => 'Site Map',
86
+    'popularite' => 'Popularity',
87
+    'poster_message' => 'Post a message',
88
+    'proposer_site' => 'You can suggest a website for inclusion in this section:',
89
+
90
+    // R
91
+    'repondre_article' => 'Comment on this article',
92
+    'repondre_breve' => 'Comment on this news item',
93
+    'resultats_recherche' => 'Search results',
94
+    'retour_debut_forums' => 'Back to forum top',
95
+    'rss_abonnement' => 'Simply copy the following URL into your aggregator:',
96
+    'rss_abonnement_titre' => 'Subscribe',
97
+    'rss_abonnement_titre_page' => 'Subscribe to',
98
+    'rss_explication' => 'An RSS thread collects information about a site’s update. It delivers the content of the tickets or the comments or an extract of them, as well as a link to the full versions et some other information. This thread is to be read by an RSS aggregator.',
99
+    'rss_explication_titre' => 'What is an RSS feed?',
100
+    'rubrique' => 'Section',
101
+    'rubriques' => 'Sections',
102
+
103
+    // S
104
+    'signatures_petition' => 'Signatures',
105
+    'site_realise_avec_spip' => 'Site powered by SPIP',
106
+    'sites_web' => 'Websites',
107
+    'sous_rubriques' => 'Subsections',
108
+    'spam' => 'Spam',
109
+    'suite' => 'continue',
110
+    'sur_web' => 'Around the Web',
111
+    'syndiquer_rubrique' => 'Subscribe to this section',
112
+    'syndiquer_site' => 'Subscribe to the whole site',
113
+
114
+    // T
115
+    'texte_lettre_information' => 'Here is the site newsletter',
116
+    'texte_lettre_information_2' => 'This site contains news items published since',
117
+
118
+    // V
119
+    'ver_imprimer' => 'Printable version',
120
+    'voir_en_ligne' => 'View online',
121
+    'voir_squelette' => 'show the template of this page',
122 122
 ];
Please login to merge, or discard this patch.
prive/formulaires/inscription.php 2 patches
Indentation   +127 added lines, -127 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
 /**
@@ -39,26 +39,26 @@  discard block
 block discarded – undo
39 39
  */
40 40
 function formulaires_inscription_charger_dist($mode = '', $options = [], $retour = '') {
41 41
 
42
-	$id = ($options['id'] ?? 0);
43
-
44
-	// fournir le mode de la config ou tester si l'argument du formulaire est un mode accepte par celle-ci
45
-	// pas de formulaire si le mode est interdit
46
-	include_spip('inc/autoriser');
47
-	if (!autoriser('inscrireauteur', $mode, $id)) {
48
-		return false;
49
-	}
50
-
51
-	// pas de formulaire si on a déjà une session avec un statut égal ou meilleur au mode
52
-	if (isset($GLOBALS['visiteur_session']['statut']) && $GLOBALS['visiteur_session']['statut'] <= $mode) {
53
-		return false;
54
-	}
55
-
56
-	return [
57
-		'nom_inscription' => '',
58
-		'mail_inscription' => '',
59
-		'id' => $id,
60
-		'_mode' => $mode
61
-	];
42
+    $id = ($options['id'] ?? 0);
43
+
44
+    // fournir le mode de la config ou tester si l'argument du formulaire est un mode accepte par celle-ci
45
+    // pas de formulaire si le mode est interdit
46
+    include_spip('inc/autoriser');
47
+    if (!autoriser('inscrireauteur', $mode, $id)) {
48
+        return false;
49
+    }
50
+
51
+    // pas de formulaire si on a déjà une session avec un statut égal ou meilleur au mode
52
+    if (isset($GLOBALS['visiteur_session']['statut']) && $GLOBALS['visiteur_session']['statut'] <= $mode) {
53
+        return false;
54
+    }
55
+
56
+    return [
57
+        'nom_inscription' => '',
58
+        'mail_inscription' => '',
59
+        'id' => $id,
60
+        '_mode' => $mode
61
+    ];
62 62
 }
63 63
 
64 64
 
@@ -71,65 +71,65 @@  discard block
 block discarded – undo
71 71
  * @return array
72 72
  */
73 73
 function formulaires_inscription_verifier_dist($mode = '', $options = [], $retour = '') {
74
-	set_request('_upgrade_auteur'); // securite
75
-	include_spip('inc/filtres');
76
-	$erreurs = [];
77
-
78
-	$id = ($options['id'] ?? 0);
79
-
80
-	include_spip('inc/autoriser');
81
-	if (!autoriser('inscrireauteur', $mode, $id) || strlen((string) _request('nobot')) > 0) {
82
-		$erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
83
-	}
84
-
85
-	if (!$nom = _request('nom_inscription')) {
86
-		$erreurs['nom_inscription'] = _T('info_obligatoire');
87
-	} elseif (!nom_acceptable(_request('nom_inscription'))) {
88
-		$erreurs['nom_inscription'] = _T('ecrire:info_nom_pas_conforme');
89
-	}
90
-	if (!$mail = (string) _request('mail_inscription')) {
91
-		$erreurs['mail_inscription'] = _T('info_obligatoire');
92
-	}
93
-
94
-	// compatibilite avec anciennes fonction surchargeables
95
-	// plus de definition par defaut
96
-	if ($erreurs === []) {
97
-		include_spip('action/inscrire_auteur');
98
-		$f = function_exists('test_inscription') ? 'test_inscription' : 'test_inscription_dist';
99
-		$declaration = $f($mode, $mail, $nom, $options);
100
-		if (is_string($declaration)) {
101
-			$k = (str_contains($declaration, 'mail')) ?
102
-				'mail_inscription' : 'nom_inscription';
103
-			$erreurs[$k] = _T($declaration);
104
-		} else {
105
-			include_spip('base/abstract_sql');
106
-
107
-			if (
108
-				$row = sql_fetsel(
109
-					'statut, id_auteur, login, email',
110
-					'spip_auteurs',
111
-					'email=' . sql_quote($declaration['email'])
112
-				)
113
-			) {
114
-				if ($row['statut'] == '5poubelle' && empty($declaration['pass'])) {
115
-					// irrecuperable
116
-					$erreurs['message_erreur'] = _T('form_forum_access_refuse');
117
-				} else {
118
-					if ($row['statut'] != 'nouveau' && empty($declaration['pass'])) {
119
-						if ((int) $row['statut'] > (int) $mode) {
120
-							set_request('_upgrade_auteur', $row['id_auteur']);
121
-						} else {
122
-							// deja inscrit
123
-							$erreurs['message_erreur'] = _T('form_forum_email_deja_enregistre');
124
-						}
125
-					}
126
-				}
127
-				spip_logger()->info($row['id_auteur'] . ' veut se resinscrire');
128
-			}
129
-		}
130
-	}
131
-
132
-	return $erreurs;
74
+    set_request('_upgrade_auteur'); // securite
75
+    include_spip('inc/filtres');
76
+    $erreurs = [];
77
+
78
+    $id = ($options['id'] ?? 0);
79
+
80
+    include_spip('inc/autoriser');
81
+    if (!autoriser('inscrireauteur', $mode, $id) || strlen((string) _request('nobot')) > 0) {
82
+        $erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
83
+    }
84
+
85
+    if (!$nom = _request('nom_inscription')) {
86
+        $erreurs['nom_inscription'] = _T('info_obligatoire');
87
+    } elseif (!nom_acceptable(_request('nom_inscription'))) {
88
+        $erreurs['nom_inscription'] = _T('ecrire:info_nom_pas_conforme');
89
+    }
90
+    if (!$mail = (string) _request('mail_inscription')) {
91
+        $erreurs['mail_inscription'] = _T('info_obligatoire');
92
+    }
93
+
94
+    // compatibilite avec anciennes fonction surchargeables
95
+    // plus de definition par defaut
96
+    if ($erreurs === []) {
97
+        include_spip('action/inscrire_auteur');
98
+        $f = function_exists('test_inscription') ? 'test_inscription' : 'test_inscription_dist';
99
+        $declaration = $f($mode, $mail, $nom, $options);
100
+        if (is_string($declaration)) {
101
+            $k = (str_contains($declaration, 'mail')) ?
102
+                'mail_inscription' : 'nom_inscription';
103
+            $erreurs[$k] = _T($declaration);
104
+        } else {
105
+            include_spip('base/abstract_sql');
106
+
107
+            if (
108
+                $row = sql_fetsel(
109
+                    'statut, id_auteur, login, email',
110
+                    'spip_auteurs',
111
+                    'email=' . sql_quote($declaration['email'])
112
+                )
113
+            ) {
114
+                if ($row['statut'] == '5poubelle' && empty($declaration['pass'])) {
115
+                    // irrecuperable
116
+                    $erreurs['message_erreur'] = _T('form_forum_access_refuse');
117
+                } else {
118
+                    if ($row['statut'] != 'nouveau' && empty($declaration['pass'])) {
119
+                        if ((int) $row['statut'] > (int) $mode) {
120
+                            set_request('_upgrade_auteur', $row['id_auteur']);
121
+                        } else {
122
+                            // deja inscrit
123
+                            $erreurs['message_erreur'] = _T('form_forum_email_deja_enregistre');
124
+                        }
125
+                    }
126
+                }
127
+                spip_logger()->info($row['id_auteur'] . ' veut se resinscrire');
128
+            }
129
+        }
130
+    }
131
+
132
+    return $erreurs;
133 133
 }
134 134
 
135 135
 /**
@@ -140,51 +140,51 @@  discard block
 block discarded – undo
140 140
  * @return array
141 141
  */
142 142
 function formulaires_inscription_traiter_dist($mode = '', array $options = [], $retour = '') {
143
-	if ($retour) {
144
-		refuser_traiter_formulaire_ajax();
145
-	}
146
-
147
-	include_spip('inc/filtres');
148
-	include_spip('inc/autoriser');
149
-
150
-	$id = ($options['id'] ?? 0);
151
-
152
-	if (!autoriser('inscrireauteur', $mode, $id)) {
153
-		$desc = 'rien a faire ici';
154
-	} else {
155
-		if ($id_auteur = _request('_upgrade_auteur')) {
156
-			include_spip('action/editer_auteur');
157
-			autoriser_exception('modifier', 'auteur', $id_auteur);
158
-			autoriser_exception('instituer', 'auteur', $id_auteur);
159
-			auteur_modifier($id_auteur, ['statut' => $mode]);
160
-			autoriser_exception('modifier', 'auteur', $id_auteur, false);
161
-			autoriser_exception('instituer', 'auteur', $id_auteur, false);
162
-
163
-			return ['message_ok' => _T('form_forum_email_deja_enregistre'), 'id_auteur' => $id_auteur];
164
-		}
165
-
166
-		$nom = _request('nom_inscription');
167
-		$mail_complet = _request('mail_inscription');
168
-
169
-		$inscrire_auteur = charger_fonction('inscrire_auteur', 'action');
170
-		$desc = $inscrire_auteur($mode, $mail_complet, $nom, $options);
171
-	}
172
-
173
-	// erreur ?
174
-	if (is_string($desc)) {
175
-		return ['message_erreur' => $desc];
176
-	} // OK
177
-	else {
178
-		$retours = [
179
-			'message_ok' => _T('form_forum_identifiant_mail'),
180
-			'id_auteur' => $desc['id_auteur']
181
-		];
182
-
183
-		// Si on demande à rediriger juste après validation du formulaire
184
-		if ($retour) {
185
-			$retours['redirect'] = $retour;
186
-		}
187
-
188
-		return $retours;
189
-	}
143
+    if ($retour) {
144
+        refuser_traiter_formulaire_ajax();
145
+    }
146
+
147
+    include_spip('inc/filtres');
148
+    include_spip('inc/autoriser');
149
+
150
+    $id = ($options['id'] ?? 0);
151
+
152
+    if (!autoriser('inscrireauteur', $mode, $id)) {
153
+        $desc = 'rien a faire ici';
154
+    } else {
155
+        if ($id_auteur = _request('_upgrade_auteur')) {
156
+            include_spip('action/editer_auteur');
157
+            autoriser_exception('modifier', 'auteur', $id_auteur);
158
+            autoriser_exception('instituer', 'auteur', $id_auteur);
159
+            auteur_modifier($id_auteur, ['statut' => $mode]);
160
+            autoriser_exception('modifier', 'auteur', $id_auteur, false);
161
+            autoriser_exception('instituer', 'auteur', $id_auteur, false);
162
+
163
+            return ['message_ok' => _T('form_forum_email_deja_enregistre'), 'id_auteur' => $id_auteur];
164
+        }
165
+
166
+        $nom = _request('nom_inscription');
167
+        $mail_complet = _request('mail_inscription');
168
+
169
+        $inscrire_auteur = charger_fonction('inscrire_auteur', 'action');
170
+        $desc = $inscrire_auteur($mode, $mail_complet, $nom, $options);
171
+    }
172
+
173
+    // erreur ?
174
+    if (is_string($desc)) {
175
+        return ['message_erreur' => $desc];
176
+    } // OK
177
+    else {
178
+        $retours = [
179
+            'message_ok' => _T('form_forum_identifiant_mail'),
180
+            'id_auteur' => $desc['id_auteur']
181
+        ];
182
+
183
+        // Si on demande à rediriger juste après validation du formulaire
184
+        if ($retour) {
185
+            $retours['redirect'] = $retour;
186
+        }
187
+
188
+        return $retours;
189
+    }
190 190
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -108,7 +108,7 @@  discard block
 block discarded – undo
108 108
 				$row = sql_fetsel(
109 109
 					'statut, id_auteur, login, email',
110 110
 					'spip_auteurs',
111
-					'email=' . sql_quote($declaration['email'])
111
+					'email='.sql_quote($declaration['email'])
112 112
 				)
113 113
 			) {
114 114
 				if ($row['statut'] == '5poubelle' && empty($declaration['pass'])) {
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
 						}
125 125
 					}
126 126
 				}
127
-				spip_logger()->info($row['id_auteur'] . ' veut se resinscrire');
127
+				spip_logger()->info($row['id_auteur'].' veut se resinscrire');
128 128
 			}
129 129
 		}
130 130
 	}
Please login to merge, or discard this patch.
prive/formulaires/mot_de_passe.php 3 patches
Indentation   +131 added lines, -131 removed lines patch added patch discarded remove patch
@@ -10,31 +10,31 @@  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('base/abstract_sql');
17 17
 
18 18
 function retrouve_auteur($id_auteur, $jeton = '') {
19
-	if ($id_auteur = (int) $id_auteur) {
20
-		return sql_fetsel(
21
-			'*',
22
-			'spip_auteurs',
23
-			['id_auteur=' . (int) $id_auteur, "statut<>'5poubelle'", "pass<>''", "login<>''"]
24
-		);
25
-	} elseif ($jeton) {
26
-		include_spip('action/inscrire_auteur');
27
-		if (
28
-			($auteur = auteur_verifier_jeton($jeton))
29
-			&& $auteur['statut'] != '5poubelle'
30
-			&& $auteur['pass'] != ''
31
-			&& $auteur['login'] != ''
32
-		) {
33
-			return $auteur;
34
-		}
35
-	}
36
-
37
-	return false;
19
+    if ($id_auteur = (int) $id_auteur) {
20
+        return sql_fetsel(
21
+            '*',
22
+            'spip_auteurs',
23
+            ['id_auteur=' . (int) $id_auteur, "statut<>'5poubelle'", "pass<>''", "login<>''"]
24
+        );
25
+    } elseif ($jeton) {
26
+        include_spip('action/inscrire_auteur');
27
+        if (
28
+            ($auteur = auteur_verifier_jeton($jeton))
29
+            && $auteur['statut'] != '5poubelle'
30
+            && $auteur['pass'] != ''
31
+            && $auteur['login'] != ''
32
+        ) {
33
+            return $auteur;
34
+        }
35
+    }
36
+
37
+    return false;
38 38
 }
39 39
 
40 40
 // chargement des valeurs par defaut des champs du formulaire
@@ -49,30 +49,30 @@  discard block
 block discarded – undo
49 49
  */
50 50
 function formulaires_mot_de_passe_charger_dist($id_auteur = null, $jeton = null) {
51 51
 
52
-	$valeurs = [];
53
-	// compatibilite anciens appels du formulaire
54
-	if (is_null($jeton)) {
55
-		$jeton = _request('p');
56
-	}
57
-	$auteur = retrouve_auteur($id_auteur, $jeton);
58
-
59
-	if ($auteur) {
60
-		$valeurs['id_auteur'] = $id_auteur; // a toutes fins utiles pour le formulaire
61
-		if ($jeton) {
62
-			$valeurs['_hidden'] = '<input type="hidden" name="p" value="' . $jeton . '" />';
63
-		}
64
-	} else {
65
-		$valeurs['message_erreur'] = _T('pass_erreur_code_inconnu');
66
-		$valeurs['editable'] = false; // pas de saisie
67
-	}
68
-	$valeurs['oubli'] = '';
69
-	// le champ login n'est pas utilise, mais il est destine aux navigateurs smarts
70
-	// qui veulent remplir le formulaire avec login/mot de passe
71
-	// et qui sinon remplissent le champ nobot (autocomplete=off n'est pas une option, certains navigateurs l'ignorant)
72
-	$valeurs['login'] = '';
73
-	$valeurs['nobot'] = '';
74
-
75
-	return $valeurs;
52
+    $valeurs = [];
53
+    // compatibilite anciens appels du formulaire
54
+    if (is_null($jeton)) {
55
+        $jeton = _request('p');
56
+    }
57
+    $auteur = retrouve_auteur($id_auteur, $jeton);
58
+
59
+    if ($auteur) {
60
+        $valeurs['id_auteur'] = $id_auteur; // a toutes fins utiles pour le formulaire
61
+        if ($jeton) {
62
+            $valeurs['_hidden'] = '<input type="hidden" name="p" value="' . $jeton . '" />';
63
+        }
64
+    } else {
65
+        $valeurs['message_erreur'] = _T('pass_erreur_code_inconnu');
66
+        $valeurs['editable'] = false; // pas de saisie
67
+    }
68
+    $valeurs['oubli'] = '';
69
+    // le champ login n'est pas utilise, mais il est destine aux navigateurs smarts
70
+    // qui veulent remplir le formulaire avec login/mot de passe
71
+    // et qui sinon remplissent le champ nobot (autocomplete=off n'est pas une option, certains navigateurs l'ignorant)
72
+    $valeurs['login'] = '';
73
+    $valeurs['nobot'] = '';
74
+
75
+    return $valeurs;
76 76
 }
77 77
 
78 78
 /**
@@ -83,36 +83,36 @@  discard block
 block discarded – undo
83 83
  * @param int $id_auteur
84 84
  */
85 85
 function formulaires_mot_de_passe_verifier_dist($id_auteur = null, $jeton = null) {
86
-	$erreurs = [];
87
-	if (!_request('oubli')) {
88
-		$erreurs['oubli'] = _T('info_obligatoire');
89
-	} else {
90
-		if (strlen((string) ($p = _request('oubli'))) < _PASS_LONGUEUR_MINI) {
91
-			$erreurs['oubli'] = _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]);
92
-		} else {
93
-			if (!is_null($c = _request('oubli_confirm'))) {
94
-				if (!$c) {
95
-					$erreurs['oubli_confirm'] = _T('info_obligatoire');
96
-				} elseif ($c !== $p) {
97
-					$erreurs['oubli'] = _T('info_passes_identiques');
98
-				}
99
-			}
100
-		}
101
-	}
102
-	if (isset($erreurs['oubli'])) {
103
-		set_request('oubli');
104
-		set_request('oubli_confirm');
105
-	}
106
-
107
-	if (_request('nobot')) {
108
-		$erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
109
-	}
110
-	// precaution
111
-	if (_request('login')) {
112
-		set_request('login');
113
-	}
114
-
115
-	return $erreurs;
86
+    $erreurs = [];
87
+    if (!_request('oubli')) {
88
+        $erreurs['oubli'] = _T('info_obligatoire');
89
+    } else {
90
+        if (strlen((string) ($p = _request('oubli'))) < _PASS_LONGUEUR_MINI) {
91
+            $erreurs['oubli'] = _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]);
92
+        } else {
93
+            if (!is_null($c = _request('oubli_confirm'))) {
94
+                if (!$c) {
95
+                    $erreurs['oubli_confirm'] = _T('info_obligatoire');
96
+                } elseif ($c !== $p) {
97
+                    $erreurs['oubli'] = _T('info_passes_identiques');
98
+                }
99
+            }
100
+        }
101
+    }
102
+    if (isset($erreurs['oubli'])) {
103
+        set_request('oubli');
104
+        set_request('oubli_confirm');
105
+    }
106
+
107
+    if (_request('nobot')) {
108
+        $erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
109
+    }
110
+    // precaution
111
+    if (_request('login')) {
112
+        set_request('login');
113
+    }
114
+
115
+    return $erreurs;
116 116
 }
117 117
 
118 118
 /**
@@ -122,61 +122,61 @@  discard block
 block discarded – undo
122 122
  * @param int $id_auteur
123 123
  */
124 124
 function formulaires_mot_de_passe_traiter_dist($id_auteur = null, $jeton = null) {
125
-	$res = ['message_ok' => ''];
126
-	refuser_traiter_formulaire_ajax(); // puisqu'on va loger l'auteur a la volee (c'est bonus)
127
-
128
-	// compatibilite anciens appels du formulaire
129
-	if (is_null($jeton)) {
130
-		$jeton = _request('p');
131
-	}
132
-	$row = retrouve_auteur($id_auteur, $jeton);
133
-
134
-	if (
135
-		$row
136
-		&& ($id_auteur = $row['id_auteur'])
137
-		&& ($oubli = _request('oubli'))
138
-	) {
139
-		include_spip('action/editer_auteur');
140
-		include_spip('action/inscrire_auteur');
141
-		if ($err = auteur_modifier($id_auteur, ['pass' => $oubli])) {
142
-			$res = ['message_erreur' => $err];
143
-		} else {
144
-			auteur_effacer_jeton($id_auteur);
145
-
146
-			// Par défaut, on rappelle de s'identifier avec son email s'il existe
147
-			// et qu'il n'est PAS utilisé par quelqu'un d'autre
148
-			if (
149
-				$row['email'] && !sql_fetsel(
150
-					'id_auteur',
151
-					'spip_auteurs',
152
-					[
153
-						'(email=' . sql_quote($row['email']) . ' or login=' . sql_quote($row['email']) . ')',
154
-						'id_auteur != ' . $id_auteur
155
-					],
156
-					'',
157
-					'',
158
-					'0,1'
159
-				)
160
-			) {
161
-				$identifiant = $row['email'];
162
-			}
163
-			// Sinon on dit d'utiliser le login
164
-			else {
165
-				$identifiant = $row['login'];
166
-			}
167
-			$res['message_ok'] = '<b>' . _T('pass_nouveau_enregistre') . '</b>' .
168
-				'<br />' . _T('pass_rappel_login', ['login' => $identifiant]);
169
-
170
-			include_spip('inc/auth');
171
-			$auth = auth_identifier_login($row['login'], $oubli);
172
-			if (!is_array($auth)) {
173
-				spip_logger()->error('Erreur identification ' . $row['login'] . " après changement de mot de passe: $auth");
174
-			}
175
-			elseif ($auth['id_auteur'] == $id_auteur) {
176
-				auth_loger($auth);
177
-			}
178
-		}
179
-	}
180
-
181
-	return $res;
125
+    $res = ['message_ok' => ''];
126
+    refuser_traiter_formulaire_ajax(); // puisqu'on va loger l'auteur a la volee (c'est bonus)
127
+
128
+    // compatibilite anciens appels du formulaire
129
+    if (is_null($jeton)) {
130
+        $jeton = _request('p');
131
+    }
132
+    $row = retrouve_auteur($id_auteur, $jeton);
133
+
134
+    if (
135
+        $row
136
+        && ($id_auteur = $row['id_auteur'])
137
+        && ($oubli = _request('oubli'))
138
+    ) {
139
+        include_spip('action/editer_auteur');
140
+        include_spip('action/inscrire_auteur');
141
+        if ($err = auteur_modifier($id_auteur, ['pass' => $oubli])) {
142
+            $res = ['message_erreur' => $err];
143
+        } else {
144
+            auteur_effacer_jeton($id_auteur);
145
+
146
+            // Par défaut, on rappelle de s'identifier avec son email s'il existe
147
+            // et qu'il n'est PAS utilisé par quelqu'un d'autre
148
+            if (
149
+                $row['email'] && !sql_fetsel(
150
+                    'id_auteur',
151
+                    'spip_auteurs',
152
+                    [
153
+                        '(email=' . sql_quote($row['email']) . ' or login=' . sql_quote($row['email']) . ')',
154
+                        'id_auteur != ' . $id_auteur
155
+                    ],
156
+                    '',
157
+                    '',
158
+                    '0,1'
159
+                )
160
+            ) {
161
+                $identifiant = $row['email'];
162
+            }
163
+            // Sinon on dit d'utiliser le login
164
+            else {
165
+                $identifiant = $row['login'];
166
+            }
167
+            $res['message_ok'] = '<b>' . _T('pass_nouveau_enregistre') . '</b>' .
168
+                '<br />' . _T('pass_rappel_login', ['login' => $identifiant]);
169
+
170
+            include_spip('inc/auth');
171
+            $auth = auth_identifier_login($row['login'], $oubli);
172
+            if (!is_array($auth)) {
173
+                spip_logger()->error('Erreur identification ' . $row['login'] . " après changement de mot de passe: $auth");
174
+            }
175
+            elseif ($auth['id_auteur'] == $id_auteur) {
176
+                auth_loger($auth);
177
+            }
178
+        }
179
+    }
180
+
181
+    return $res;
182 182
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -20,7 +20,7 @@  discard block
 block discarded – undo
20 20
 		return sql_fetsel(
21 21
 			'*',
22 22
 			'spip_auteurs',
23
-			['id_auteur=' . (int) $id_auteur, "statut<>'5poubelle'", "pass<>''", "login<>''"]
23
+			['id_auteur='.(int) $id_auteur, "statut<>'5poubelle'", "pass<>''", "login<>''"]
24 24
 		);
25 25
 	} elseif ($jeton) {
26 26
 		include_spip('action/inscrire_auteur');
@@ -59,7 +59,7 @@  discard block
 block discarded – undo
59 59
 	if ($auteur) {
60 60
 		$valeurs['id_auteur'] = $id_auteur; // a toutes fins utiles pour le formulaire
61 61
 		if ($jeton) {
62
-			$valeurs['_hidden'] = '<input type="hidden" name="p" value="' . $jeton . '" />';
62
+			$valeurs['_hidden'] = '<input type="hidden" name="p" value="'.$jeton.'" />';
63 63
 		}
64 64
 	} else {
65 65
 		$valeurs['message_erreur'] = _T('pass_erreur_code_inconnu');
@@ -150,8 +150,8 @@  discard block
 block discarded – undo
150 150
 					'id_auteur',
151 151
 					'spip_auteurs',
152 152
 					[
153
-						'(email=' . sql_quote($row['email']) . ' or login=' . sql_quote($row['email']) . ')',
154
-						'id_auteur != ' . $id_auteur
153
+						'(email='.sql_quote($row['email']).' or login='.sql_quote($row['email']).')',
154
+						'id_auteur != '.$id_auteur
155 155
 					],
156 156
 					'',
157 157
 					'',
@@ -164,13 +164,13 @@  discard block
 block discarded – undo
164 164
 			else {
165 165
 				$identifiant = $row['login'];
166 166
 			}
167
-			$res['message_ok'] = '<b>' . _T('pass_nouveau_enregistre') . '</b>' .
168
-				'<br />' . _T('pass_rappel_login', ['login' => $identifiant]);
167
+			$res['message_ok'] = '<b>'._T('pass_nouveau_enregistre').'</b>'.
168
+				'<br />'._T('pass_rappel_login', ['login' => $identifiant]);
169 169
 
170 170
 			include_spip('inc/auth');
171 171
 			$auth = auth_identifier_login($row['login'], $oubli);
172 172
 			if (!is_array($auth)) {
173
-				spip_logger()->error('Erreur identification ' . $row['login'] . " après changement de mot de passe: $auth");
173
+				spip_logger()->error('Erreur identification '.$row['login']." après changement de mot de passe: $auth");
174 174
 			}
175 175
 			elseif ($auth['id_auteur'] == $id_auteur) {
176 176
 				auth_loger($auth);
Please login to merge, or discard this patch.
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -171,8 +171,7 @@
 block discarded – undo
171 171
 			$auth = auth_identifier_login($row['login'], $oubli);
172 172
 			if (!is_array($auth)) {
173 173
 				spip_logger()->error('Erreur identification ' . $row['login'] . " après changement de mot de passe: $auth");
174
-			}
175
-			elseif ($auth['id_auteur'] == $id_auteur) {
174
+			} elseif ($auth['id_auteur'] == $id_auteur) {
176 175
 				auth_loger($auth);
177 176
 			}
178 177
 		}
Please login to merge, or discard this patch.
ecrire/notifications/instituerarticle.php 1 patch
Indentation   +44 added lines, -44 removed lines patch added patch discarded remove patch
@@ -10,53 +10,53 @@
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 // Fonction appelee par divers pipelines
17 17
 function notifications_instituerarticle_dist($quoi, $id_article, $options) {
18 18
 
19
-	// ne devrait jamais se produire
20
-	if ($options['statut'] == $options['statut_ancien']) {
21
-		spip_logger('notifications')->info('statut inchange');
22
-
23
-		return;
24
-	}
25
-
26
-	include_spip('inc/texte');
27
-
28
-	$modele = '';
29
-	if ($options['statut'] == 'publie') {
30
-		if (
31
-			$GLOBALS['meta']['post_dates'] == 'non'
32
-			&& strtotime((string) $options['date']) > time()
33
-		) {
34
-			$modele = 'notifications/article_valide';
35
-		} else {
36
-			$modele = 'notifications/article_publie';
37
-		}
38
-	}
39
-
40
-	if ($options['statut'] == 'prop' && $options['statut_ancien'] != 'publie') {
41
-		$modele = 'notifications/article_propose';
42
-	}
43
-
44
-	if ($modele) {
45
-		$destinataires = [];
46
-		if ($GLOBALS['meta']['suivi_edito'] == 'oui') {
47
-			$destinataires = explode(',', (string) $GLOBALS['meta']['adresse_suivi']);
48
-		}
49
-
50
-
51
-		$destinataires = pipeline(
52
-			'notifications_destinataires',
53
-			[
54
-				'args' => ['quoi' => $quoi, 'id' => $id_article, 'options' => $options],
55
-				'data' => $destinataires
56
-			]
57
-		);
58
-
59
-		$texte = email_notification_article($id_article, $modele);
60
-		notifications_envoyer_mails($destinataires, $texte);
61
-	}
19
+    // ne devrait jamais se produire
20
+    if ($options['statut'] == $options['statut_ancien']) {
21
+        spip_logger('notifications')->info('statut inchange');
22
+
23
+        return;
24
+    }
25
+
26
+    include_spip('inc/texte');
27
+
28
+    $modele = '';
29
+    if ($options['statut'] == 'publie') {
30
+        if (
31
+            $GLOBALS['meta']['post_dates'] == 'non'
32
+            && strtotime((string) $options['date']) > time()
33
+        ) {
34
+            $modele = 'notifications/article_valide';
35
+        } else {
36
+            $modele = 'notifications/article_publie';
37
+        }
38
+    }
39
+
40
+    if ($options['statut'] == 'prop' && $options['statut_ancien'] != 'publie') {
41
+        $modele = 'notifications/article_propose';
42
+    }
43
+
44
+    if ($modele) {
45
+        $destinataires = [];
46
+        if ($GLOBALS['meta']['suivi_edito'] == 'oui') {
47
+            $destinataires = explode(',', (string) $GLOBALS['meta']['adresse_suivi']);
48
+        }
49
+
50
+
51
+        $destinataires = pipeline(
52
+            'notifications_destinataires',
53
+            [
54
+                'args' => ['quoi' => $quoi, 'id' => $id_article, 'options' => $options],
55
+                'data' => $destinataires
56
+            ]
57
+        );
58
+
59
+        $texte = email_notification_article($id_article, $modele);
60
+        notifications_envoyer_mails($destinataires, $texte);
61
+    }
62 62
 }
Please login to merge, or discard this patch.
ecrire/install/etape_3.php 2 patches
Indentation   +348 added lines, -348 removed lines patch added patch discarded remove patch
@@ -12,7 +12,7 @@  discard block
 block discarded – undo
12 12
 \***************************************************************************/
13 13
 
14 14
 if (!defined('_ECRIRE_INC_VERSION')) {
15
-	return;
15
+    return;
16 16
 }
17 17
 
18 18
 include_spip('inc/headers');
@@ -20,201 +20,201 @@  discard block
 block discarded – undo
20 20
 
21 21
 function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db) {
22 22
 
23
-	$logger = spip_logger();
24
-
25
-	// Prefix des tables :
26
-	// S'il n'est pas defini par mes_options/inc/mutualiser, on va le creer
27
-	// a partir de ce qui est envoye a l'installation
28
-	if (!defined('_INSTALL_TABLE_PREFIX')) {
29
-		$table_prefix = ($GLOBALS['table_prefix'] != 'spip')
30
-			? $GLOBALS['table_prefix']
31
-			: preparer_prefixe_tables(_request('tprefix'));
32
-		// S'il est vide on remet spip
33
-		if (!$table_prefix) {
34
-			$table_prefix = 'spip';
35
-		}
36
-	} else {
37
-		$table_prefix = _INSTALL_TABLE_PREFIX;
38
-	}
39
-
40
-	if (preg_match(',(.*):(.*),', (string) $adresse_db, $r)) {
41
-		[, $adresse_db, $port] = $r;
42
-	} else {
43
-		$port = '';
44
-	}
45
-
46
-	$GLOBALS['connexions'][$server_db]
47
-		= spip_connect_db($adresse_db, $port, $login_db, $pass_db, '', $server_db);
48
-
49
-	$GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
50
-		= $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
51
-
52
-	$fquery = sql_serveur('query', $server_db);
53
-	if ($choix_db == 'new_spip') {
54
-		$re = ',^[a-z_][a-z_0-9-]*$,i';
55
-		if (preg_match($re, (string) $sel_db)) {
56
-			$ok = sql_create_base($sel_db, $server_db);
57
-			if (!$ok) {
58
-				$re = "Impossible de creer la base $re";
59
-				$logger->info($re);
60
-				return '<p>' . _T('avis_connexion_erreur_creer_base') . "</p><!--\n$re\n-->";
61
-			}
62
-		} else {
63
-			$re = "Le nom de la base doit correspondre a $re";
64
-			$logger->info($re);
65
-
66
-			return '<p>' . _T('avis_connexion_erreur_nom_base') . "</p><!--\n$re\n-->";
67
-		}
68
-	}
69
-
70
-	// on rejoue la connexion apres avoir teste si il faut lui indiquer
71
-	// un sql_mode
72
-	install_mode_appel($server_db, false);
73
-	$GLOBALS['connexions'][$server_db]
74
-		= spip_connect_db($adresse_db, $port, $login_db, $pass_db, $sel_db, $server_db);
75
-
76
-	$GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
77
-		= $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
78
-
79
-	// Completer le tableau decrivant la connexion
80
-
81
-	$GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
82
-	$GLOBALS['connexions'][$server_db]['db'] = $sel_db;
83
-
84
-	$old = sql_showbase($table_prefix . '_meta', $server_db);
85
-	if ($old) {
86
-		$old = sql_fetch($old, $server_db);
87
-	}
88
-	if (!$old) {
89
-		// Si possible, demander au serveur d'envoyer les textes
90
-		// dans le codage std de SPIP,
91
-		$charset = sql_get_charset(_DEFAULT_CHARSET, $server_db);
92
-
93
-		if ($charset) {
94
-			sql_set_charset($charset['charset'], $server_db);
95
-			$GLOBALS['meta']['charset_sql_base'] =
96
-				$charset['charset'];
97
-			$GLOBALS['meta']['charset_collation_sql_base'] =
98
-				$charset['collation'];
99
-			$GLOBALS['meta']['charset_sql_connexion'] =
100
-				$charset['charset'];
101
-			$charsetbase = $charset['charset'];
102
-		} else {
103
-			$logger->info(_DEFAULT_CHARSET . ' inconnu du serveur SQL');
104
-			$charsetbase = 'standard';
105
-		}
106
-		$logger->info("Creation des tables. Codage $charsetbase");
107
-		creer_base($server_db); // AT LAST
108
-		// memoriser avec quel charset on l'a creee
109
-
110
-		if ($charset) {
111
-			$t = [
112
-				'nom' => 'charset_sql_base',
113
-				'valeur' => $charset['charset'],
114
-				'impt' => 'non'
115
-			];
116
-			@sql_insertq('spip_meta', $t, [], $server_db);
117
-			$t['nom'] = 'charset_collation_sql_base';
118
-			$t['valeur'] = $charset['collation'];
119
-			@sql_insertq('spip_meta', $t, [], $server_db);
120
-			$t['nom'] = 'charset_sql_connexion';
121
-			$t['valeur'] = $charset['charset'];
122
-			@sql_insertq('spip_meta', $t, [], $server_db);
123
-		}
124
-		$t = [
125
-			'nom' => 'version_installee',
126
-			'valeur' => $GLOBALS['spip_version_base'],
127
-			'impt' => 'non'
128
-		];
129
-		@sql_insertq('spip_meta', $t, [], $server_db);
130
-		$t['nom'] = 'nouvelle_install';
131
-		$t['valeur'] = 1;
132
-		@sql_insertq('spip_meta', $t, [], $server_db);
133
-		// positionner la langue par defaut du site si un cookie de lang a ete mis
134
-		if (isset($_COOKIE['spip_lang_ecrire'])) {
135
-			@sql_insertq(
136
-				'spip_meta',
137
-				['nom' => 'langue_site', 'valeur' => $_COOKIE['spip_lang_ecrire']],
138
-				[],
139
-				$server_db
140
-			);
141
-		}
142
-	} else {
143
-		// pour recreer les tables disparues au besoin
144
-		$logger->info('Table des Meta deja la. Verification des autres.');
145
-		creer_base($server_db);
146
-		$fupdateq = sql_serveur('updateq', $server_db);
147
-
148
-		$r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db);
149
-
150
-		if ($r) {
151
-			$r = sql_fetch($r, $server_db);
152
-		}
153
-		$version_installee = $r ? (double)$r['valeur'] : 0;
154
-		if (!$version_installee || $GLOBALS['spip_version_base'] < $version_installee) {
155
-			$fupdateq(
156
-				'spip_meta',
157
-				['valeur' => $GLOBALS['spip_version_base'], 'impt' => 'non'],
158
-				"nom='version_installee'",
159
-				'',
160
-				$server_db
161
-			);
162
-			$logger->info('nouvelle version installee: ' . $GLOBALS['spip_version_base']);
163
-		}
164
-		// eliminer la derniere operation d'admin mal terminee
165
-		// notamment la mise a jour
166
-		@$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR  nom='admin'", $server_db);
167
-	}
168
-
169
-	// recuperer le charset de la connexion dans les meta
170
-	$charset = '';
171
-	$r = $fquery("SELECT valeur FROM spip_meta WHERE nom='charset_sql_connexion'", $server_db);
172
-	if ($r) {
173
-		$r = sql_fetch($r, $server_db);
174
-	}
175
-	if ($r) {
176
-		$charset = $r['valeur'];
177
-	}
178
-
179
-	$ligne_rappel = install_mode_appel($server_db);
180
-
181
-	$result_ok = @$fquery('SELECT COUNT(*) FROM spip_meta', $server_db);
182
-	if (!$result_ok) {
183
-		return "<!--\nvielle = $old rappel= $ligne_rappel\n-->";
184
-	}
185
-
186
-	if ($chmod_db) {
187
-		install_fichier_connexion(
188
-			_FILE_CHMOD_TMP,
189
-			"if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', " . sprintf('0%3o', $chmod_db) . ");\n"
190
-		);
191
-	}
192
-
193
-	// si ce fichier existe a cette etape c'est qu'il provient
194
-	// d'une installation qui ne l'a pas cree correctement.
195
-	// Le supprimer pour que _FILE_CONNECT_TMP prime.
196
-
197
-	if (_FILE_CONNECT && file_exists(_FILE_CONNECT)) {
198
-		spip_unlink(_FILE_CONNECT);
199
-	}
200
-
201
-	install_fichier_connexion(
202
-		_FILE_CONNECT_TMP,
203
-		$ligne_rappel
204
-		. install_connexion(
205
-			$adresse_db,
206
-			$port,
207
-			$login_db,
208
-			$pass_db,
209
-			$sel_db,
210
-			$server_db,
211
-			$table_prefix,
212
-			'',
213
-			$charset
214
-		)
215
-	);
216
-
217
-	return '';
23
+    $logger = spip_logger();
24
+
25
+    // Prefix des tables :
26
+    // S'il n'est pas defini par mes_options/inc/mutualiser, on va le creer
27
+    // a partir de ce qui est envoye a l'installation
28
+    if (!defined('_INSTALL_TABLE_PREFIX')) {
29
+        $table_prefix = ($GLOBALS['table_prefix'] != 'spip')
30
+            ? $GLOBALS['table_prefix']
31
+            : preparer_prefixe_tables(_request('tprefix'));
32
+        // S'il est vide on remet spip
33
+        if (!$table_prefix) {
34
+            $table_prefix = 'spip';
35
+        }
36
+    } else {
37
+        $table_prefix = _INSTALL_TABLE_PREFIX;
38
+    }
39
+
40
+    if (preg_match(',(.*):(.*),', (string) $adresse_db, $r)) {
41
+        [, $adresse_db, $port] = $r;
42
+    } else {
43
+        $port = '';
44
+    }
45
+
46
+    $GLOBALS['connexions'][$server_db]
47
+        = spip_connect_db($adresse_db, $port, $login_db, $pass_db, '', $server_db);
48
+
49
+    $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
50
+        = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
51
+
52
+    $fquery = sql_serveur('query', $server_db);
53
+    if ($choix_db == 'new_spip') {
54
+        $re = ',^[a-z_][a-z_0-9-]*$,i';
55
+        if (preg_match($re, (string) $sel_db)) {
56
+            $ok = sql_create_base($sel_db, $server_db);
57
+            if (!$ok) {
58
+                $re = "Impossible de creer la base $re";
59
+                $logger->info($re);
60
+                return '<p>' . _T('avis_connexion_erreur_creer_base') . "</p><!--\n$re\n-->";
61
+            }
62
+        } else {
63
+            $re = "Le nom de la base doit correspondre a $re";
64
+            $logger->info($re);
65
+
66
+            return '<p>' . _T('avis_connexion_erreur_nom_base') . "</p><!--\n$re\n-->";
67
+        }
68
+    }
69
+
70
+    // on rejoue la connexion apres avoir teste si il faut lui indiquer
71
+    // un sql_mode
72
+    install_mode_appel($server_db, false);
73
+    $GLOBALS['connexions'][$server_db]
74
+        = spip_connect_db($adresse_db, $port, $login_db, $pass_db, $sel_db, $server_db);
75
+
76
+    $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
77
+        = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
78
+
79
+    // Completer le tableau decrivant la connexion
80
+
81
+    $GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
82
+    $GLOBALS['connexions'][$server_db]['db'] = $sel_db;
83
+
84
+    $old = sql_showbase($table_prefix . '_meta', $server_db);
85
+    if ($old) {
86
+        $old = sql_fetch($old, $server_db);
87
+    }
88
+    if (!$old) {
89
+        // Si possible, demander au serveur d'envoyer les textes
90
+        // dans le codage std de SPIP,
91
+        $charset = sql_get_charset(_DEFAULT_CHARSET, $server_db);
92
+
93
+        if ($charset) {
94
+            sql_set_charset($charset['charset'], $server_db);
95
+            $GLOBALS['meta']['charset_sql_base'] =
96
+                $charset['charset'];
97
+            $GLOBALS['meta']['charset_collation_sql_base'] =
98
+                $charset['collation'];
99
+            $GLOBALS['meta']['charset_sql_connexion'] =
100
+                $charset['charset'];
101
+            $charsetbase = $charset['charset'];
102
+        } else {
103
+            $logger->info(_DEFAULT_CHARSET . ' inconnu du serveur SQL');
104
+            $charsetbase = 'standard';
105
+        }
106
+        $logger->info("Creation des tables. Codage $charsetbase");
107
+        creer_base($server_db); // AT LAST
108
+        // memoriser avec quel charset on l'a creee
109
+
110
+        if ($charset) {
111
+            $t = [
112
+                'nom' => 'charset_sql_base',
113
+                'valeur' => $charset['charset'],
114
+                'impt' => 'non'
115
+            ];
116
+            @sql_insertq('spip_meta', $t, [], $server_db);
117
+            $t['nom'] = 'charset_collation_sql_base';
118
+            $t['valeur'] = $charset['collation'];
119
+            @sql_insertq('spip_meta', $t, [], $server_db);
120
+            $t['nom'] = 'charset_sql_connexion';
121
+            $t['valeur'] = $charset['charset'];
122
+            @sql_insertq('spip_meta', $t, [], $server_db);
123
+        }
124
+        $t = [
125
+            'nom' => 'version_installee',
126
+            'valeur' => $GLOBALS['spip_version_base'],
127
+            'impt' => 'non'
128
+        ];
129
+        @sql_insertq('spip_meta', $t, [], $server_db);
130
+        $t['nom'] = 'nouvelle_install';
131
+        $t['valeur'] = 1;
132
+        @sql_insertq('spip_meta', $t, [], $server_db);
133
+        // positionner la langue par defaut du site si un cookie de lang a ete mis
134
+        if (isset($_COOKIE['spip_lang_ecrire'])) {
135
+            @sql_insertq(
136
+                'spip_meta',
137
+                ['nom' => 'langue_site', 'valeur' => $_COOKIE['spip_lang_ecrire']],
138
+                [],
139
+                $server_db
140
+            );
141
+        }
142
+    } else {
143
+        // pour recreer les tables disparues au besoin
144
+        $logger->info('Table des Meta deja la. Verification des autres.');
145
+        creer_base($server_db);
146
+        $fupdateq = sql_serveur('updateq', $server_db);
147
+
148
+        $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db);
149
+
150
+        if ($r) {
151
+            $r = sql_fetch($r, $server_db);
152
+        }
153
+        $version_installee = $r ? (double)$r['valeur'] : 0;
154
+        if (!$version_installee || $GLOBALS['spip_version_base'] < $version_installee) {
155
+            $fupdateq(
156
+                'spip_meta',
157
+                ['valeur' => $GLOBALS['spip_version_base'], 'impt' => 'non'],
158
+                "nom='version_installee'",
159
+                '',
160
+                $server_db
161
+            );
162
+            $logger->info('nouvelle version installee: ' . $GLOBALS['spip_version_base']);
163
+        }
164
+        // eliminer la derniere operation d'admin mal terminee
165
+        // notamment la mise a jour
166
+        @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR  nom='admin'", $server_db);
167
+    }
168
+
169
+    // recuperer le charset de la connexion dans les meta
170
+    $charset = '';
171
+    $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='charset_sql_connexion'", $server_db);
172
+    if ($r) {
173
+        $r = sql_fetch($r, $server_db);
174
+    }
175
+    if ($r) {
176
+        $charset = $r['valeur'];
177
+    }
178
+
179
+    $ligne_rappel = install_mode_appel($server_db);
180
+
181
+    $result_ok = @$fquery('SELECT COUNT(*) FROM spip_meta', $server_db);
182
+    if (!$result_ok) {
183
+        return "<!--\nvielle = $old rappel= $ligne_rappel\n-->";
184
+    }
185
+
186
+    if ($chmod_db) {
187
+        install_fichier_connexion(
188
+            _FILE_CHMOD_TMP,
189
+            "if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', " . sprintf('0%3o', $chmod_db) . ");\n"
190
+        );
191
+    }
192
+
193
+    // si ce fichier existe a cette etape c'est qu'il provient
194
+    // d'une installation qui ne l'a pas cree correctement.
195
+    // Le supprimer pour que _FILE_CONNECT_TMP prime.
196
+
197
+    if (_FILE_CONNECT && file_exists(_FILE_CONNECT)) {
198
+        spip_unlink(_FILE_CONNECT);
199
+    }
200
+
201
+    install_fichier_connexion(
202
+        _FILE_CONNECT_TMP,
203
+        $ligne_rappel
204
+        . install_connexion(
205
+            $adresse_db,
206
+            $port,
207
+            $login_db,
208
+            $pass_db,
209
+            $sel_db,
210
+            $server_db,
211
+            $table_prefix,
212
+            '',
213
+            $charset
214
+        )
215
+    );
216
+
217
+    return '';
218 218
 }
219 219
 
220 220
 /**
@@ -229,166 +229,166 @@  discard block
 block discarded – undo
229 229
  * @return string Le préfixe corrigé
230 230
  */
231 231
 function preparer_prefixe_tables($prefixe) {
232
-	return trim(preg_replace(',^\d+,', '', preg_replace(',[^a-z0-9],', '', strtolower($prefixe))));
232
+    return trim(preg_replace(',^\d+,', '', preg_replace(',[^a-z0-9],', '', strtolower($prefixe))));
233 233
 }
234 234
 
235 235
 function install_propose_ldap() {
236
-	return generer_form_ecrire('install', (
237
-	fieldset(
238
-		_T('info_authentification_externe'),
239
-		[
240
-			'etape' => [
241
-				'label' => _T('texte_annuaire_ldap_1'),
242
-				'valeur' => 'ldap1',
243
-				'hidden' => true
244
-			]
245
-		],
246
-		bouton_suivant(_T('bouton_acces_ldap'))
247
-	)));
236
+    return generer_form_ecrire('install', (
237
+    fieldset(
238
+        _T('info_authentification_externe'),
239
+        [
240
+            'etape' => [
241
+                'label' => _T('texte_annuaire_ldap_1'),
242
+                'valeur' => 'ldap1',
243
+                'hidden' => true
244
+            ]
245
+        ],
246
+        bouton_suivant(_T('bouton_acces_ldap'))
247
+    )));
248 248
 }
249 249
 
250 250
 
251 251
 function install_premier_auteur($email, $login, $nom, #[\SensitiveParameter] $pass, $hidden, $auteur_obligatoire) {
252
-	return info_progression_etape(3, 'etape_', 'install/') .
253
-	info_etape(
254
-		_T('info_informations_personnelles'),
255
-		'<b>' . _T('texte_informations_personnelles_1') . '</b>' .
256
-		aider('install5', true) .
257
-		'<p>' .
258
-		($auteur_obligatoire ?
259
-			''
260
-			:
261
-			_T('texte_informations_personnelles_2') . ' ' . _T('info_laisser_champs_vides')
262
-		)
263
-	)
264
-	. generer_form_ecrire('install', (
265
-		"\n<input type='hidden' name='etape' value='3b' />"
266
-		. $hidden
267
-		. fieldset(
268
-			_T('info_identification_publique'),
269
-			[
270
-				'nom' => [
271
-					'label' => '<b>' . _T('entree_signature') . "</b><br />\n" . _T('entree_nom_pseudo_1') . "\n",
272
-					'valeur' => $nom,
273
-					'required' => $auteur_obligatoire,
274
-				],
275
-				'email' => [
276
-					'label' => '<b>' . _T('entree_adresse_email') . "</b>\n",
277
-					'valeur' => $email,
278
-				]
279
-			]
280
-		)
281
-
282
-		. fieldset(
283
-			_T('entree_identifiants_connexion'),
284
-			[
285
-				'login' => [
286
-					'label' => '<b>' . _T('entree_login') . "</b><br />\n" . _T(
287
-						'info_login_trop_court_car_pluriel',
288
-						['nb' => _LOGIN_TROP_COURT]
289
-					) . "\n",
290
-					'valeur' => $login,
291
-					'required' => $auteur_obligatoire,
292
-				],
293
-				'pass' => [
294
-					'label' => '<b>' . _T('entree_mot_passe') . "</b><br />\n" . _T(
295
-						'info_passe_trop_court_car_pluriel',
296
-						['nb' => _PASS_LONGUEUR_MINI]
297
-					) . "\n",
298
-					'valeur' => $pass,
299
-					'required' => $auteur_obligatoire,
300
-				],
301
-				'pass_verif' => [
302
-					'label' => '<b>' . _T('info_confirmer_passe') . "</b><br />\n",
303
-					'valeur' => $pass,
304
-					'required' => $auteur_obligatoire,
305
-				]
306
-			]
307
-		)
308
-		. bouton_suivant()));
252
+    return info_progression_etape(3, 'etape_', 'install/') .
253
+    info_etape(
254
+        _T('info_informations_personnelles'),
255
+        '<b>' . _T('texte_informations_personnelles_1') . '</b>' .
256
+        aider('install5', true) .
257
+        '<p>' .
258
+        ($auteur_obligatoire ?
259
+            ''
260
+            :
261
+            _T('texte_informations_personnelles_2') . ' ' . _T('info_laisser_champs_vides')
262
+        )
263
+    )
264
+    . generer_form_ecrire('install', (
265
+        "\n<input type='hidden' name='etape' value='3b' />"
266
+        . $hidden
267
+        . fieldset(
268
+            _T('info_identification_publique'),
269
+            [
270
+                'nom' => [
271
+                    'label' => '<b>' . _T('entree_signature') . "</b><br />\n" . _T('entree_nom_pseudo_1') . "\n",
272
+                    'valeur' => $nom,
273
+                    'required' => $auteur_obligatoire,
274
+                ],
275
+                'email' => [
276
+                    'label' => '<b>' . _T('entree_adresse_email') . "</b>\n",
277
+                    'valeur' => $email,
278
+                ]
279
+            ]
280
+        )
281
+
282
+        . fieldset(
283
+            _T('entree_identifiants_connexion'),
284
+            [
285
+                'login' => [
286
+                    'label' => '<b>' . _T('entree_login') . "</b><br />\n" . _T(
287
+                        'info_login_trop_court_car_pluriel',
288
+                        ['nb' => _LOGIN_TROP_COURT]
289
+                    ) . "\n",
290
+                    'valeur' => $login,
291
+                    'required' => $auteur_obligatoire,
292
+                ],
293
+                'pass' => [
294
+                    'label' => '<b>' . _T('entree_mot_passe') . "</b><br />\n" . _T(
295
+                        'info_passe_trop_court_car_pluriel',
296
+                        ['nb' => _PASS_LONGUEUR_MINI]
297
+                    ) . "\n",
298
+                    'valeur' => $pass,
299
+                    'required' => $auteur_obligatoire,
300
+                ],
301
+                'pass_verif' => [
302
+                    'label' => '<b>' . _T('info_confirmer_passe') . "</b><br />\n",
303
+                    'valeur' => $pass,
304
+                    'required' => $auteur_obligatoire,
305
+                ]
306
+            ]
307
+        )
308
+        . bouton_suivant()));
309 309
 }
310 310
 
311 311
 function install_etape_3_dist() {
312
-	$ldap_present = _request('ldap_present');
313
-
314
-	if (!$ldap_present) {
315
-		$adresse_db = defined('_INSTALL_HOST_DB')
316
-			? _INSTALL_HOST_DB
317
-			: _request('adresse_db');
318
-
319
-		$login_db = defined('_INSTALL_USER_DB')
320
-			? _INSTALL_USER_DB
321
-			: _request('login_db');
322
-
323
-		$pass_db = defined('_INSTALL_PASS_DB')
324
-			? _INSTALL_PASS_DB
325
-			: _request('pass_db');
326
-
327
-		$server_db = defined('_INSTALL_SERVER_DB')
328
-			? _INSTALL_SERVER_DB
329
-			: _request('server_db');
330
-
331
-		$chmod_db = defined('_SPIP_CHMOD')
332
-			? _SPIP_CHMOD
333
-			: _request('chmod');
334
-
335
-		$choix_db = defined('_INSTALL_NAME_DB')
336
-			? _INSTALL_NAME_DB
337
-			: _request('choix_db');
338
-
339
-		$sel_db = ($choix_db == 'new_spip')
340
-			? _request('table_new') : $choix_db;
341
-
342
-		$res = install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db);
343
-
344
-		if ($res) {
345
-			$res = info_progression_etape(2, 'etape_', 'install/', true)
346
-				. "<div class='error'><h3>" . _T('avis_operation_echec') . '</h3>'
347
-				. $res
348
-				. '<p>' . _T('texte_operation_echec') . '</p>'
349
-				. '</div>';
350
-		}
351
-	} else {
352
-		$res = '';
353
-		[$adresse_db, $login_db, $pass_db, $sel_db, $server_db] = analyse_fichier_connection(_FILE_CONNECT_TMP);
354
-		$GLOBALS['connexions'][$server_db] = spip_connect_db($adresse_db, $sel_db, $login_db, $pass_db, $sel_db, $server_db);
355
-	}
356
-
357
-	if (!$res) {
358
-		if (file_exists(_FILE_CONNECT_TMP)) {
359
-			include(_FILE_CONNECT_TMP);
360
-		} else {
361
-			redirige_url_ecrire('install');
362
-		}
363
-
364
-		if (file_exists(_FILE_CHMOD_TMP)) {
365
-			include(_FILE_CHMOD_TMP);
366
-		} else {
367
-			redirige_url_ecrire('install');
368
-		}
369
-
370
-		$hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
371
-			. (defined('_INSTALL_NAME_DB') ? ''
372
-				: "\n<input type='hidden' name='sel_db' value=\"" . spip_htmlspecialchars($sel_db) . '" />');
373
-
374
-		$auteur_obligatoire = ($ldap_present ? 0 : !sql_countsel('spip_auteurs', '', '', '', $server_db));
375
-
376
-		$res = "<div class='success'><b>"
377
-			. _T('info_base_installee')
378
-			. '</b></div>'
379
-			. install_premier_auteur(
380
-				_request('email'),
381
-				_request('login'),
382
-				_request('nom'),
383
-				_request('pass'),
384
-				$hidden,
385
-				$auteur_obligatoire
386
-			)
387
-			. (($ldap_present || !function_exists('ldap_connect'))
388
-				? '' : install_propose_ldap());
389
-	}
390
-
391
-
392
-	$minipage = new Installation();
393
-	echo $minipage->page($res);
312
+    $ldap_present = _request('ldap_present');
313
+
314
+    if (!$ldap_present) {
315
+        $adresse_db = defined('_INSTALL_HOST_DB')
316
+            ? _INSTALL_HOST_DB
317
+            : _request('adresse_db');
318
+
319
+        $login_db = defined('_INSTALL_USER_DB')
320
+            ? _INSTALL_USER_DB
321
+            : _request('login_db');
322
+
323
+        $pass_db = defined('_INSTALL_PASS_DB')
324
+            ? _INSTALL_PASS_DB
325
+            : _request('pass_db');
326
+
327
+        $server_db = defined('_INSTALL_SERVER_DB')
328
+            ? _INSTALL_SERVER_DB
329
+            : _request('server_db');
330
+
331
+        $chmod_db = defined('_SPIP_CHMOD')
332
+            ? _SPIP_CHMOD
333
+            : _request('chmod');
334
+
335
+        $choix_db = defined('_INSTALL_NAME_DB')
336
+            ? _INSTALL_NAME_DB
337
+            : _request('choix_db');
338
+
339
+        $sel_db = ($choix_db == 'new_spip')
340
+            ? _request('table_new') : $choix_db;
341
+
342
+        $res = install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db);
343
+
344
+        if ($res) {
345
+            $res = info_progression_etape(2, 'etape_', 'install/', true)
346
+                . "<div class='error'><h3>" . _T('avis_operation_echec') . '</h3>'
347
+                . $res
348
+                . '<p>' . _T('texte_operation_echec') . '</p>'
349
+                . '</div>';
350
+        }
351
+    } else {
352
+        $res = '';
353
+        [$adresse_db, $login_db, $pass_db, $sel_db, $server_db] = analyse_fichier_connection(_FILE_CONNECT_TMP);
354
+        $GLOBALS['connexions'][$server_db] = spip_connect_db($adresse_db, $sel_db, $login_db, $pass_db, $sel_db, $server_db);
355
+    }
356
+
357
+    if (!$res) {
358
+        if (file_exists(_FILE_CONNECT_TMP)) {
359
+            include(_FILE_CONNECT_TMP);
360
+        } else {
361
+            redirige_url_ecrire('install');
362
+        }
363
+
364
+        if (file_exists(_FILE_CHMOD_TMP)) {
365
+            include(_FILE_CHMOD_TMP);
366
+        } else {
367
+            redirige_url_ecrire('install');
368
+        }
369
+
370
+        $hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
371
+            . (defined('_INSTALL_NAME_DB') ? ''
372
+                : "\n<input type='hidden' name='sel_db' value=\"" . spip_htmlspecialchars($sel_db) . '" />');
373
+
374
+        $auteur_obligatoire = ($ldap_present ? 0 : !sql_countsel('spip_auteurs', '', '', '', $server_db));
375
+
376
+        $res = "<div class='success'><b>"
377
+            . _T('info_base_installee')
378
+            . '</b></div>'
379
+            . install_premier_auteur(
380
+                _request('email'),
381
+                _request('login'),
382
+                _request('nom'),
383
+                _request('pass'),
384
+                $hidden,
385
+                $auteur_obligatoire
386
+            )
387
+            . (($ldap_present || !function_exists('ldap_connect'))
388
+                ? '' : install_propose_ldap());
389
+    }
390
+
391
+
392
+    $minipage = new Installation();
393
+    echo $minipage->page($res);
394 394
 }
Please login to merge, or discard this patch.
Spacing   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -47,7 +47,7 @@  discard block
 block discarded – undo
47 47
 		= spip_connect_db($adresse_db, $port, $login_db, $pass_db, '', $server_db);
48 48
 
49 49
 	$GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
50
-		= $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
50
+		= $GLOBALS['spip_'.$server_db.'_functions_'.$GLOBALS['spip_sql_version']];
51 51
 
52 52
 	$fquery = sql_serveur('query', $server_db);
53 53
 	if ($choix_db == 'new_spip') {
@@ -57,13 +57,13 @@  discard block
 block discarded – undo
57 57
 			if (!$ok) {
58 58
 				$re = "Impossible de creer la base $re";
59 59
 				$logger->info($re);
60
-				return '<p>' . _T('avis_connexion_erreur_creer_base') . "</p><!--\n$re\n-->";
60
+				return '<p>'._T('avis_connexion_erreur_creer_base')."</p><!--\n$re\n-->";
61 61
 			}
62 62
 		} else {
63 63
 			$re = "Le nom de la base doit correspondre a $re";
64 64
 			$logger->info($re);
65 65
 
66
-			return '<p>' . _T('avis_connexion_erreur_nom_base') . "</p><!--\n$re\n-->";
66
+			return '<p>'._T('avis_connexion_erreur_nom_base')."</p><!--\n$re\n-->";
67 67
 		}
68 68
 	}
69 69
 
@@ -74,14 +74,14 @@  discard block
 block discarded – undo
74 74
 		= spip_connect_db($adresse_db, $port, $login_db, $pass_db, $sel_db, $server_db);
75 75
 
76 76
 	$GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
77
-		= $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']];
77
+		= $GLOBALS['spip_'.$server_db.'_functions_'.$GLOBALS['spip_sql_version']];
78 78
 
79 79
 	// Completer le tableau decrivant la connexion
80 80
 
81 81
 	$GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
82 82
 	$GLOBALS['connexions'][$server_db]['db'] = $sel_db;
83 83
 
84
-	$old = sql_showbase($table_prefix . '_meta', $server_db);
84
+	$old = sql_showbase($table_prefix.'_meta', $server_db);
85 85
 	if ($old) {
86 86
 		$old = sql_fetch($old, $server_db);
87 87
 	}
@@ -100,7 +100,7 @@  discard block
 block discarded – undo
100 100
 				$charset['charset'];
101 101
 			$charsetbase = $charset['charset'];
102 102
 		} else {
103
-			$logger->info(_DEFAULT_CHARSET . ' inconnu du serveur SQL');
103
+			$logger->info(_DEFAULT_CHARSET.' inconnu du serveur SQL');
104 104
 			$charsetbase = 'standard';
105 105
 		}
106 106
 		$logger->info("Creation des tables. Codage $charsetbase");
@@ -150,7 +150,7 @@  discard block
 block discarded – undo
150 150
 		if ($r) {
151 151
 			$r = sql_fetch($r, $server_db);
152 152
 		}
153
-		$version_installee = $r ? (double)$r['valeur'] : 0;
153
+		$version_installee = $r ? (double) $r['valeur'] : 0;
154 154
 		if (!$version_installee || $GLOBALS['spip_version_base'] < $version_installee) {
155 155
 			$fupdateq(
156 156
 				'spip_meta',
@@ -159,7 +159,7 @@  discard block
 block discarded – undo
159 159
 				'',
160 160
 				$server_db
161 161
 			);
162
-			$logger->info('nouvelle version installee: ' . $GLOBALS['spip_version_base']);
162
+			$logger->info('nouvelle version installee: '.$GLOBALS['spip_version_base']);
163 163
 		}
164 164
 		// eliminer la derniere operation d'admin mal terminee
165 165
 		// notamment la mise a jour
@@ -186,7 +186,7 @@  discard block
 block discarded – undo
186 186
 	if ($chmod_db) {
187 187
 		install_fichier_connexion(
188 188
 			_FILE_CHMOD_TMP,
189
-			"if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', " . sprintf('0%3o', $chmod_db) . ");\n"
189
+			"if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', ".sprintf('0%3o', $chmod_db).");\n"
190 190
 		);
191 191
 	}
192 192
 
@@ -249,16 +249,16 @@  discard block
 block discarded – undo
249 249
 
250 250
 
251 251
 function install_premier_auteur($email, $login, $nom, #[\SensitiveParameter] $pass, $hidden, $auteur_obligatoire) {
252
-	return info_progression_etape(3, 'etape_', 'install/') .
252
+	return info_progression_etape(3, 'etape_', 'install/').
253 253
 	info_etape(
254 254
 		_T('info_informations_personnelles'),
255
-		'<b>' . _T('texte_informations_personnelles_1') . '</b>' .
256
-		aider('install5', true) .
257
-		'<p>' .
255
+		'<b>'._T('texte_informations_personnelles_1').'</b>'.
256
+		aider('install5', true).
257
+		'<p>'.
258 258
 		($auteur_obligatoire ?
259 259
 			''
260 260
 			:
261
-			_T('texte_informations_personnelles_2') . ' ' . _T('info_laisser_champs_vides')
261
+			_T('texte_informations_personnelles_2').' '._T('info_laisser_champs_vides')
262 262
 		)
263 263
 	)
264 264
 	. generer_form_ecrire('install', (
@@ -268,12 +268,12 @@  discard block
 block discarded – undo
268 268
 			_T('info_identification_publique'),
269 269
 			[
270 270
 				'nom' => [
271
-					'label' => '<b>' . _T('entree_signature') . "</b><br />\n" . _T('entree_nom_pseudo_1') . "\n",
271
+					'label' => '<b>'._T('entree_signature')."</b><br />\n"._T('entree_nom_pseudo_1')."\n",
272 272
 					'valeur' => $nom,
273 273
 					'required' => $auteur_obligatoire,
274 274
 				],
275 275
 				'email' => [
276
-					'label' => '<b>' . _T('entree_adresse_email') . "</b>\n",
276
+					'label' => '<b>'._T('entree_adresse_email')."</b>\n",
277 277
 					'valeur' => $email,
278 278
 				]
279 279
 			]
@@ -283,23 +283,23 @@  discard block
 block discarded – undo
283 283
 			_T('entree_identifiants_connexion'),
284 284
 			[
285 285
 				'login' => [
286
-					'label' => '<b>' . _T('entree_login') . "</b><br />\n" . _T(
286
+					'label' => '<b>'._T('entree_login')."</b><br />\n"._T(
287 287
 						'info_login_trop_court_car_pluriel',
288 288
 						['nb' => _LOGIN_TROP_COURT]
289
-					) . "\n",
289
+					)."\n",
290 290
 					'valeur' => $login,
291 291
 					'required' => $auteur_obligatoire,
292 292
 				],
293 293
 				'pass' => [
294
-					'label' => '<b>' . _T('entree_mot_passe') . "</b><br />\n" . _T(
294
+					'label' => '<b>'._T('entree_mot_passe')."</b><br />\n"._T(
295 295
 						'info_passe_trop_court_car_pluriel',
296 296
 						['nb' => _PASS_LONGUEUR_MINI]
297
-					) . "\n",
297
+					)."\n",
298 298
 					'valeur' => $pass,
299 299
 					'required' => $auteur_obligatoire,
300 300
 				],
301 301
 				'pass_verif' => [
302
-					'label' => '<b>' . _T('info_confirmer_passe') . "</b><br />\n",
302
+					'label' => '<b>'._T('info_confirmer_passe')."</b><br />\n",
303 303
 					'valeur' => $pass,
304 304
 					'required' => $auteur_obligatoire,
305 305
 				]
@@ -343,9 +343,9 @@  discard block
 block discarded – undo
343 343
 
344 344
 		if ($res) {
345 345
 			$res = info_progression_etape(2, 'etape_', 'install/', true)
346
-				. "<div class='error'><h3>" . _T('avis_operation_echec') . '</h3>'
346
+				. "<div class='error'><h3>"._T('avis_operation_echec').'</h3>'
347 347
 				. $res
348
-				. '<p>' . _T('texte_operation_echec') . '</p>'
348
+				. '<p>'._T('texte_operation_echec').'</p>'
349 349
 				. '</div>';
350 350
 		}
351 351
 	} else {
@@ -369,7 +369,7 @@  discard block
 block discarded – undo
369 369
 
370 370
 		$hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
371 371
 			. (defined('_INSTALL_NAME_DB') ? ''
372
-				: "\n<input type='hidden' name='sel_db' value=\"" . spip_htmlspecialchars($sel_db) . '" />');
372
+				: "\n<input type='hidden' name='sel_db' value=\"".spip_htmlspecialchars($sel_db).'" />');
373 373
 
374 374
 		$auteur_obligatoire = ($ldap_present ? 0 : !sql_countsel('spip_auteurs', '', '', '', $server_db));
375 375
 
Please login to merge, or discard this patch.
ecrire/public/parametrer.php 2 patches
Indentation   +247 added lines, -247 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_fichiers_fonctions();
@@ -29,178 +29,178 @@  discard block
 block discarded – undo
29 29
 # En cas d'erreur process_ins est absent et texte est un tableau de 2 chaines
30 30
 
31 31
 function public_parametrer_dist($fond, $contexte = '', $cache = '', string $connect = '') {
32
-	static $composer, $styliser, $notes = null;
33
-	$courant = null;
34
-	$page = tester_redirection($fond, $contexte, $connect);
35
-	if ($page) {
36
-		return $page;
37
-	}
38
-
39
-	if (isset($contexte['lang'])) {
40
-		$lang = $contexte['lang'];
41
-	} elseif (!isset($lang)) {
42
-		$lang = $GLOBALS['meta']['langue_site'];
43
-	}
44
-
45
-	$select = ((!isset($GLOBALS['forcer_lang']) || !$GLOBALS['forcer_lang']) && $lang != $GLOBALS['spip_lang']);
46
-	if ($select) {
47
-		$select = lang_select($lang);
48
-	}
49
-
50
-	$debug = (defined('_VAR_MODE') && _VAR_MODE == 'debug');
51
-
52
-	if (!$styliser) {
53
-		$styliser = charger_fonction('styliser', 'public');
54
-	}
55
-	[$skel, $mime_type, $gram, $sourcefile] =
56
-		$styliser($fond, $contexte, $GLOBALS['spip_lang'], $connect);
57
-
58
-	if ($skel) {
59
-		// sauver le nom de l'eventuel squelette en cours d'execution
60
-		// (recursion possible a cause des modeles)
61
-		if ($debug) {
62
-			$courant = $GLOBALS['debug_objets']['courant'] ?? null;
63
-			$GLOBALS['debug_objets']['contexte'][$sourcefile] = $contexte;
64
-		}
65
-
66
-		// charger le squelette en specifiant les langages cibles et source
67
-		// au cas il faudrait le compiler (source posterieure au resultat)
68
-
69
-		if (!$composer) {
70
-			$composer = charger_fonction('composer', 'public');
71
-		}
72
-		$fonc = $composer($skel, $mime_type, $gram, $sourcefile, $connect);
73
-	} else {
74
-		$fonc = '';
75
-	}
76
-
77
-	if (!$fonc) { // squelette inconnu (==='') ou faux (===false)
78
-		$page = $fonc;
79
-	} else {
80
-		// Preparer l'appel de la fonction principale du squelette
81
-
82
-		spip_timer($a = 'calcul page ' . random_int(0, 1000));
83
-
84
-		// On cree un marqueur de notes unique lie a cette composition
85
-		// et on enregistre l'etat courant des globales de notes...
86
-		if (is_null($notes)) {
87
-			$notes = charger_fonction('notes', 'inc', true);
88
-		}
89
-		if ($notes) {
90
-			$notes('', 'empiler');
91
-		}
92
-
93
-		// Rajouter d'office ces deux parametres
94
-		// (mais vaudrait mieux que le compilateur sache le simuler
95
-		// car ca interdit l'usage de criteres conditionnels dessus).
96
-		if (!isset($contexte['date'])) {
97
-			$contexte['date'] = date('Y-m-d H:i:s');
98
-			$contexte['date_default'] = true;
99
-		} else {
100
-			$contexte['date'] = normaliser_date($contexte['date'], true);
101
-		}
102
-
103
-		if (!isset($contexte['date_redac'])) {
104
-			$contexte['date_redac'] = date('Y-m-d H:i:s');
105
-			$contexte['date_redac_default'] = true;
106
-		} else {
107
-			$contexte['date_redac'] = normaliser_date($contexte['date_redac'], true);
108
-		}
109
-
110
-		// Passer le nom du cache pour produire sa destruction automatique
111
-		try {
112
-			$page = $fonc(['cache' => $cache], [$contexte]);
113
-		} catch (Throwable $e) {
114
-			$msg = _T('zbug_erreur_execution_page') . " $sourcefile";
115
-			$full_msg = $msg . ' | File ' . $e->getFile() . ' Line ' . $e->getLine() . ' : ' . $e->getMessage();
116
-			$full_msg = str_replace(_ROOT_RACINE, '[…]/', $full_msg);
117
-			$corps = "<pre>$msg</pre>";
118
-			$page = analyse_resultat_skel($fond, ['cache' => $cache], $corps, $sourcefile);
119
-			erreur_squelette($full_msg);
120
-			unset($msg, $full_msg, $corps);
121
-		}
122
-
123
-		// Restituer les globales de notes telles qu'elles etaient avant l'appel
124
-		// Si l'inclus n'a pas affiche ses notes, tant pis (elles *doivent*
125
-		// etre dans son resultat, autrement elles ne seraient pas prises en
126
-		// compte a chaque calcul d'un texte contenant un modele, mais seulement
127
-		// quand le modele serait calcule, et on aurait des resultats incoherents)
128
-		if ($notes) {
129
-			$notes('', 'depiler');
130
-		}
131
-
132
-		// reinjecter en dynamique la pile des notes
133
-		// si il y a des inclure dynamiques
134
-		// si la pile n'est pas vide
135
-		// la generalisation de cette injection permettrait de corriger le point juste au dessus
136
-		// en faisant remonter les notes a l'incluant (A tester et valider avant application)
137
-		if ($notes) {
138
-			$page['notes'] = $notes('', 'sauver_etat');
139
-		}
140
-
141
-		// spip_log: un joli contexte
142
-		$infos = presenter_contexte(array_filter($contexte));
143
-
144
-		$profile = spip_timer($a);
145
-		spip_logger()->info("calcul ($profile) [$skel] $infos"
146
-			. ' (' . strlen((string) $page['texte']) . ' octets)');
147
-
148
-		if (defined('_CALCUL_PROFILER') && (int) $profile > _CALCUL_PROFILER) {
149
-			spip_logger('profiler')->notice("calcul ($profile) [$skel] $infos"
150
-				. ' (' . strlen((string) $page['texte']) . ' octets) | ' . $_SERVER['REQUEST_URI']);
151
-		}
152
-
153
-		if ($debug) {
154
-			// si c'est ce que demande le debusqueur, lui passer la main
155
-			$t = strlen((string) $page['texte']) ? $page['texte'] : ' ';
156
-			$GLOBALS['debug_objets']['resultat'][$fonc . 'tout'] = $t;
157
-			$GLOBALS['debug_objets']['courant'] = $courant;
158
-			$GLOBALS['debug_objets']['profile'][$sourcefile] = $profile;
159
-			if (
160
-				$GLOBALS['debug_objets']['sourcefile']
161
-				&& _request('var_mode_objet') == $fonc
162
-				&& _request('var_mode_affiche') == 'resultat'
163
-			) {
164
-				erreur_squelette();
165
-			}
166
-		}
167
-		// Si #CACHE{} n'etait pas la, le mettre a $delais
168
-		if (!isset($page['entetes']['X-Spip-Cache'])) {
169
-			// Dans l'espace prive ou dans un modeles/ on pose un cache 0 par defaut
170
-			// si aucun #CACHE{} spécifié
171
-			// le contexte implicite qui conditionne le cache assure qu'on retombe pas sur le meme
172
-			// entre public et prive
173
-			if (test_espace_prive() || str_starts_with((string) $fond, 'modeles/')) {
174
-				$page['entetes']['X-Spip-Cache'] = 0;
175
-			} else {
176
-				$page['entetes']['X-Spip-Cache'] = $GLOBALS['delais'] ?? 36000;
177
-			}
178
-		}
179
-
180
-		$page['contexte'] = $contexte;
181
-
182
-		// faire remonter le fichier source
183
-		static $js_inclus = false;
184
-		if (defined('_VAR_INCLURE') && _VAR_INCLURE) {
185
-			$page['sourcefile'] = $sourcefile;
186
-			$page['texte'] =
187
-				"<div class='inclure_blocs'><h6>" . $page['sourcefile'] . '</h6>' . $page['texte'] . '</div>'
188
-				. ($js_inclus ? '' : "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs > h6:first-child').hover(function(){jQuery(this).parent().addClass('hover')},function(){jQuery(this).parent().removeClass('hover')})});</script>");
189
-			$js_inclus = true;
190
-		}
191
-
192
-		// Si un modele contenait #SESSION, on note l'info dans $page
193
-		if (isset($GLOBALS['cache_utilise_session'])) {
194
-			$page['invalideurs']['session'] = $GLOBALS['cache_utilise_session'];
195
-			unset($GLOBALS['cache_utilise_session']);
196
-		}
197
-	}
198
-
199
-	if ($select) {
200
-		lang_select();
201
-	}
202
-
203
-	return $page;
32
+    static $composer, $styliser, $notes = null;
33
+    $courant = null;
34
+    $page = tester_redirection($fond, $contexte, $connect);
35
+    if ($page) {
36
+        return $page;
37
+    }
38
+
39
+    if (isset($contexte['lang'])) {
40
+        $lang = $contexte['lang'];
41
+    } elseif (!isset($lang)) {
42
+        $lang = $GLOBALS['meta']['langue_site'];
43
+    }
44
+
45
+    $select = ((!isset($GLOBALS['forcer_lang']) || !$GLOBALS['forcer_lang']) && $lang != $GLOBALS['spip_lang']);
46
+    if ($select) {
47
+        $select = lang_select($lang);
48
+    }
49
+
50
+    $debug = (defined('_VAR_MODE') && _VAR_MODE == 'debug');
51
+
52
+    if (!$styliser) {
53
+        $styliser = charger_fonction('styliser', 'public');
54
+    }
55
+    [$skel, $mime_type, $gram, $sourcefile] =
56
+        $styliser($fond, $contexte, $GLOBALS['spip_lang'], $connect);
57
+
58
+    if ($skel) {
59
+        // sauver le nom de l'eventuel squelette en cours d'execution
60
+        // (recursion possible a cause des modeles)
61
+        if ($debug) {
62
+            $courant = $GLOBALS['debug_objets']['courant'] ?? null;
63
+            $GLOBALS['debug_objets']['contexte'][$sourcefile] = $contexte;
64
+        }
65
+
66
+        // charger le squelette en specifiant les langages cibles et source
67
+        // au cas il faudrait le compiler (source posterieure au resultat)
68
+
69
+        if (!$composer) {
70
+            $composer = charger_fonction('composer', 'public');
71
+        }
72
+        $fonc = $composer($skel, $mime_type, $gram, $sourcefile, $connect);
73
+    } else {
74
+        $fonc = '';
75
+    }
76
+
77
+    if (!$fonc) { // squelette inconnu (==='') ou faux (===false)
78
+        $page = $fonc;
79
+    } else {
80
+        // Preparer l'appel de la fonction principale du squelette
81
+
82
+        spip_timer($a = 'calcul page ' . random_int(0, 1000));
83
+
84
+        // On cree un marqueur de notes unique lie a cette composition
85
+        // et on enregistre l'etat courant des globales de notes...
86
+        if (is_null($notes)) {
87
+            $notes = charger_fonction('notes', 'inc', true);
88
+        }
89
+        if ($notes) {
90
+            $notes('', 'empiler');
91
+        }
92
+
93
+        // Rajouter d'office ces deux parametres
94
+        // (mais vaudrait mieux que le compilateur sache le simuler
95
+        // car ca interdit l'usage de criteres conditionnels dessus).
96
+        if (!isset($contexte['date'])) {
97
+            $contexte['date'] = date('Y-m-d H:i:s');
98
+            $contexte['date_default'] = true;
99
+        } else {
100
+            $contexte['date'] = normaliser_date($contexte['date'], true);
101
+        }
102
+
103
+        if (!isset($contexte['date_redac'])) {
104
+            $contexte['date_redac'] = date('Y-m-d H:i:s');
105
+            $contexte['date_redac_default'] = true;
106
+        } else {
107
+            $contexte['date_redac'] = normaliser_date($contexte['date_redac'], true);
108
+        }
109
+
110
+        // Passer le nom du cache pour produire sa destruction automatique
111
+        try {
112
+            $page = $fonc(['cache' => $cache], [$contexte]);
113
+        } catch (Throwable $e) {
114
+            $msg = _T('zbug_erreur_execution_page') . " $sourcefile";
115
+            $full_msg = $msg . ' | File ' . $e->getFile() . ' Line ' . $e->getLine() . ' : ' . $e->getMessage();
116
+            $full_msg = str_replace(_ROOT_RACINE, '[…]/', $full_msg);
117
+            $corps = "<pre>$msg</pre>";
118
+            $page = analyse_resultat_skel($fond, ['cache' => $cache], $corps, $sourcefile);
119
+            erreur_squelette($full_msg);
120
+            unset($msg, $full_msg, $corps);
121
+        }
122
+
123
+        // Restituer les globales de notes telles qu'elles etaient avant l'appel
124
+        // Si l'inclus n'a pas affiche ses notes, tant pis (elles *doivent*
125
+        // etre dans son resultat, autrement elles ne seraient pas prises en
126
+        // compte a chaque calcul d'un texte contenant un modele, mais seulement
127
+        // quand le modele serait calcule, et on aurait des resultats incoherents)
128
+        if ($notes) {
129
+            $notes('', 'depiler');
130
+        }
131
+
132
+        // reinjecter en dynamique la pile des notes
133
+        // si il y a des inclure dynamiques
134
+        // si la pile n'est pas vide
135
+        // la generalisation de cette injection permettrait de corriger le point juste au dessus
136
+        // en faisant remonter les notes a l'incluant (A tester et valider avant application)
137
+        if ($notes) {
138
+            $page['notes'] = $notes('', 'sauver_etat');
139
+        }
140
+
141
+        // spip_log: un joli contexte
142
+        $infos = presenter_contexte(array_filter($contexte));
143
+
144
+        $profile = spip_timer($a);
145
+        spip_logger()->info("calcul ($profile) [$skel] $infos"
146
+            . ' (' . strlen((string) $page['texte']) . ' octets)');
147
+
148
+        if (defined('_CALCUL_PROFILER') && (int) $profile > _CALCUL_PROFILER) {
149
+            spip_logger('profiler')->notice("calcul ($profile) [$skel] $infos"
150
+                . ' (' . strlen((string) $page['texte']) . ' octets) | ' . $_SERVER['REQUEST_URI']);
151
+        }
152
+
153
+        if ($debug) {
154
+            // si c'est ce que demande le debusqueur, lui passer la main
155
+            $t = strlen((string) $page['texte']) ? $page['texte'] : ' ';
156
+            $GLOBALS['debug_objets']['resultat'][$fonc . 'tout'] = $t;
157
+            $GLOBALS['debug_objets']['courant'] = $courant;
158
+            $GLOBALS['debug_objets']['profile'][$sourcefile] = $profile;
159
+            if (
160
+                $GLOBALS['debug_objets']['sourcefile']
161
+                && _request('var_mode_objet') == $fonc
162
+                && _request('var_mode_affiche') == 'resultat'
163
+            ) {
164
+                erreur_squelette();
165
+            }
166
+        }
167
+        // Si #CACHE{} n'etait pas la, le mettre a $delais
168
+        if (!isset($page['entetes']['X-Spip-Cache'])) {
169
+            // Dans l'espace prive ou dans un modeles/ on pose un cache 0 par defaut
170
+            // si aucun #CACHE{} spécifié
171
+            // le contexte implicite qui conditionne le cache assure qu'on retombe pas sur le meme
172
+            // entre public et prive
173
+            if (test_espace_prive() || str_starts_with((string) $fond, 'modeles/')) {
174
+                $page['entetes']['X-Spip-Cache'] = 0;
175
+            } else {
176
+                $page['entetes']['X-Spip-Cache'] = $GLOBALS['delais'] ?? 36000;
177
+            }
178
+        }
179
+
180
+        $page['contexte'] = $contexte;
181
+
182
+        // faire remonter le fichier source
183
+        static $js_inclus = false;
184
+        if (defined('_VAR_INCLURE') && _VAR_INCLURE) {
185
+            $page['sourcefile'] = $sourcefile;
186
+            $page['texte'] =
187
+                "<div class='inclure_blocs'><h6>" . $page['sourcefile'] . '</h6>' . $page['texte'] . '</div>'
188
+                . ($js_inclus ? '' : "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs > h6:first-child').hover(function(){jQuery(this).parent().addClass('hover')},function(){jQuery(this).parent().removeClass('hover')})});</script>");
189
+            $js_inclus = true;
190
+        }
191
+
192
+        // Si un modele contenait #SESSION, on note l'info dans $page
193
+        if (isset($GLOBALS['cache_utilise_session'])) {
194
+            $page['invalideurs']['session'] = $GLOBALS['cache_utilise_session'];
195
+            unset($GLOBALS['cache_utilise_session']);
196
+        }
197
+    }
198
+
199
+    if ($select) {
200
+        lang_select();
201
+    }
202
+
203
+    return $page;
204 204
 }
205 205
 
206 206
 /**
@@ -209,37 +209,37 @@  discard block
 block discarded – undo
209 209
  * @return string
210 210
 */
211 211
 function presenter_contexte($contexte, $profondeur_max = 1, $max_lines = 0) {
212
-	$infos = [];
213
-	$line = 0;
214
-	foreach ($contexte as $var => $val) {
215
-		$line++;
216
-		if ($max_lines && $max_lines < $line) {
217
-			$infos[] = '…';
218
-			break;
219
-		}
220
-		if ($val === null) {
221
-			$val = '';
222
-		} elseif (is_array($val)) {
223
-			if ($profondeur_max > 0) {
224
-				$val = 'array:' . count($val) . '(' . presenter_contexte($val, $profondeur_max - 1, 3) . ')';
225
-			} else {
226
-				$val = 'array:' . count($val);
227
-			}
228
-		} elseif (is_object($val)) {
229
-			$val = $val::class;
230
-		} elseif (strlen("$val") > 30) {
231
-			$val = substr("$val", 0, 29) . '…';
232
-			if (strstr($val, ' ')) {
233
-				$val = "'$val'";
234
-			}
235
-		} elseif (strstr((string) $val, ' ')) {
236
-			$val = "'$val'";
237
-		} elseif (!strlen((string) $val)) {
238
-			$val = "''";
239
-		}
240
-		$infos[] = $var . '=' . $val;
241
-	}
242
-	return implode(', ', $infos);
212
+    $infos = [];
213
+    $line = 0;
214
+    foreach ($contexte as $var => $val) {
215
+        $line++;
216
+        if ($max_lines && $max_lines < $line) {
217
+            $infos[] = '…';
218
+            break;
219
+        }
220
+        if ($val === null) {
221
+            $val = '';
222
+        } elseif (is_array($val)) {
223
+            if ($profondeur_max > 0) {
224
+                $val = 'array:' . count($val) . '(' . presenter_contexte($val, $profondeur_max - 1, 3) . ')';
225
+            } else {
226
+                $val = 'array:' . count($val);
227
+            }
228
+        } elseif (is_object($val)) {
229
+            $val = $val::class;
230
+        } elseif (strlen("$val") > 30) {
231
+            $val = substr("$val", 0, 29) . '…';
232
+            if (strstr($val, ' ')) {
233
+                $val = "'$val'";
234
+            }
235
+        } elseif (strstr((string) $val, ' ')) {
236
+            $val = "'$val'";
237
+        } elseif (!strlen((string) $val)) {
238
+            $val = "''";
239
+        }
240
+        $infos[] = $var . '=' . $val;
241
+    }
242
+    return implode(', ', $infos);
243 243
 }
244 244
 
245 245
 
@@ -256,11 +256,11 @@  discard block
 block discarded – undo
256 256
  * @return array|bool
257 257
  */
258 258
 function tester_redirection($fond, $contexte, $connect) {
259
-	static $tester_redirection = null;
260
-	if (is_null($tester_redirection)) {
261
-		$tester_redirection = charger_fonction('tester_redirection', 'public');
262
-	}
263
-	return $tester_redirection($fond, $contexte, $connect);
259
+    static $tester_redirection = null;
260
+    if (is_null($tester_redirection)) {
261
+        $tester_redirection = charger_fonction('tester_redirection', 'public');
262
+    }
263
+    return $tester_redirection($fond, $contexte, $connect);
264 264
 }
265 265
 
266 266
 
@@ -276,42 +276,42 @@  discard block
 block discarded – undo
276 276
  * @return array|bool
277 277
  */
278 278
 function public_tester_redirection_dist($fond, $contexte, $connect) {
279
-	if (
280
-		$fond == 'article'
281
-		&& !empty($contexte['id_article'])
282
-		&& ($id_article = (int) $contexte['id_article'])
283
-	) {
284
-		include_spip('public/quete'); // pour quete_virtuel et ses dependances
285
-		$m = quete_virtuel($id_article, $connect) ?? '';
286
-		if (strlen($m)) {
287
-			include_spip('inc/texte');
288
-			// les navigateurs pataugent si l'URL est vide
289
-			if ($url = virtuel_redirige($m, true)) {
290
-				// passer en url absolue car cette redirection pourra
291
-				// etre utilisee dans un contexte d'url qui change
292
-				// y compris url arbo
293
-				$status = 302;
294
-				if (defined('_STATUS_REDIRECTION_VIRTUEL')) {
295
-					$status = _STATUS_REDIRECTION_VIRTUEL;
296
-				}
297
-				if (!preg_match(',^\w+:,', (string) $url)) {
298
-					include_spip('inc/filtres_mini');
299
-					$url = url_absolue($url);
300
-				}
301
-				$url = str_replace('&amp;', '&', (string) $url);
302
-
303
-				return [
304
-					'texte' => '<'
305
-						. "?php include_spip('inc/headers');redirige_par_entete('"
306
-						. texte_script($url)
307
-						. "','',$status);"
308
-						. '?' . '>',
309
-					'process_ins' => 'php',
310
-					'status' => $status
311
-				];
312
-			}
313
-		}
314
-	}
315
-
316
-	return false;
279
+    if (
280
+        $fond == 'article'
281
+        && !empty($contexte['id_article'])
282
+        && ($id_article = (int) $contexte['id_article'])
283
+    ) {
284
+        include_spip('public/quete'); // pour quete_virtuel et ses dependances
285
+        $m = quete_virtuel($id_article, $connect) ?? '';
286
+        if (strlen($m)) {
287
+            include_spip('inc/texte');
288
+            // les navigateurs pataugent si l'URL est vide
289
+            if ($url = virtuel_redirige($m, true)) {
290
+                // passer en url absolue car cette redirection pourra
291
+                // etre utilisee dans un contexte d'url qui change
292
+                // y compris url arbo
293
+                $status = 302;
294
+                if (defined('_STATUS_REDIRECTION_VIRTUEL')) {
295
+                    $status = _STATUS_REDIRECTION_VIRTUEL;
296
+                }
297
+                if (!preg_match(',^\w+:,', (string) $url)) {
298
+                    include_spip('inc/filtres_mini');
299
+                    $url = url_absolue($url);
300
+                }
301
+                $url = str_replace('&amp;', '&', (string) $url);
302
+
303
+                return [
304
+                    'texte' => '<'
305
+                        . "?php include_spip('inc/headers');redirige_par_entete('"
306
+                        . texte_script($url)
307
+                        . "','',$status);"
308
+                        . '?' . '>',
309
+                    'process_ins' => 'php',
310
+                    'status' => $status
311
+                ];
312
+            }
313
+        }
314
+    }
315
+
316
+    return false;
317 317
 }
Please login to merge, or discard this patch.
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -79,7 +79,7 @@  discard block
 block discarded – undo
79 79
 	} else {
80 80
 		// Preparer l'appel de la fonction principale du squelette
81 81
 
82
-		spip_timer($a = 'calcul page ' . random_int(0, 1000));
82
+		spip_timer($a = 'calcul page '.random_int(0, 1000));
83 83
 
84 84
 		// On cree un marqueur de notes unique lie a cette composition
85 85
 		// et on enregistre l'etat courant des globales de notes...
@@ -111,8 +111,8 @@  discard block
 block discarded – undo
111 111
 		try {
112 112
 			$page = $fonc(['cache' => $cache], [$contexte]);
113 113
 		} catch (Throwable $e) {
114
-			$msg = _T('zbug_erreur_execution_page') . " $sourcefile";
115
-			$full_msg = $msg . ' | File ' . $e->getFile() . ' Line ' . $e->getLine() . ' : ' . $e->getMessage();
114
+			$msg = _T('zbug_erreur_execution_page')." $sourcefile";
115
+			$full_msg = $msg.' | File '.$e->getFile().' Line '.$e->getLine().' : '.$e->getMessage();
116 116
 			$full_msg = str_replace(_ROOT_RACINE, '[…]/', $full_msg);
117 117
 			$corps = "<pre>$msg</pre>";
118 118
 			$page = analyse_resultat_skel($fond, ['cache' => $cache], $corps, $sourcefile);
@@ -143,17 +143,17 @@  discard block
 block discarded – undo
143 143
 
144 144
 		$profile = spip_timer($a);
145 145
 		spip_logger()->info("calcul ($profile) [$skel] $infos"
146
-			. ' (' . strlen((string) $page['texte']) . ' octets)');
146
+			. ' ('.strlen((string) $page['texte']).' octets)');
147 147
 
148 148
 		if (defined('_CALCUL_PROFILER') && (int) $profile > _CALCUL_PROFILER) {
149 149
 			spip_logger('profiler')->notice("calcul ($profile) [$skel] $infos"
150
-				. ' (' . strlen((string) $page['texte']) . ' octets) | ' . $_SERVER['REQUEST_URI']);
150
+				. ' ('.strlen((string) $page['texte']).' octets) | '.$_SERVER['REQUEST_URI']);
151 151
 		}
152 152
 
153 153
 		if ($debug) {
154 154
 			// si c'est ce que demande le debusqueur, lui passer la main
155 155
 			$t = strlen((string) $page['texte']) ? $page['texte'] : ' ';
156
-			$GLOBALS['debug_objets']['resultat'][$fonc . 'tout'] = $t;
156
+			$GLOBALS['debug_objets']['resultat'][$fonc.'tout'] = $t;
157 157
 			$GLOBALS['debug_objets']['courant'] = $courant;
158 158
 			$GLOBALS['debug_objets']['profile'][$sourcefile] = $profile;
159 159
 			if (
@@ -184,7 +184,7 @@  discard block
 block discarded – undo
184 184
 		if (defined('_VAR_INCLURE') && _VAR_INCLURE) {
185 185
 			$page['sourcefile'] = $sourcefile;
186 186
 			$page['texte'] =
187
-				"<div class='inclure_blocs'><h6>" . $page['sourcefile'] . '</h6>' . $page['texte'] . '</div>'
187
+				"<div class='inclure_blocs'><h6>".$page['sourcefile'].'</h6>'.$page['texte'].'</div>'
188 188
 				. ($js_inclus ? '' : "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs > h6:first-child').hover(function(){jQuery(this).parent().addClass('hover')},function(){jQuery(this).parent().removeClass('hover')})});</script>");
189 189
 			$js_inclus = true;
190 190
 		}
@@ -221,14 +221,14 @@  discard block
 block discarded – undo
221 221
 			$val = '';
222 222
 		} elseif (is_array($val)) {
223 223
 			if ($profondeur_max > 0) {
224
-				$val = 'array:' . count($val) . '(' . presenter_contexte($val, $profondeur_max - 1, 3) . ')';
224
+				$val = 'array:'.count($val).'('.presenter_contexte($val, $profondeur_max - 1, 3).')';
225 225
 			} else {
226
-				$val = 'array:' . count($val);
226
+				$val = 'array:'.count($val);
227 227
 			}
228 228
 		} elseif (is_object($val)) {
229 229
 			$val = $val::class;
230 230
 		} elseif (strlen("$val") > 30) {
231
-			$val = substr("$val", 0, 29) . '…';
231
+			$val = substr("$val", 0, 29).'…';
232 232
 			if (strstr($val, ' ')) {
233 233
 				$val = "'$val'";
234 234
 			}
@@ -237,7 +237,7 @@  discard block
 block discarded – undo
237 237
 		} elseif (!strlen((string) $val)) {
238 238
 			$val = "''";
239 239
 		}
240
-		$infos[] = $var . '=' . $val;
240
+		$infos[] = $var.'='.$val;
241 241
 	}
242 242
 	return implode(', ', $infos);
243 243
 }
@@ -305,7 +305,7 @@  discard block
 block discarded – undo
305 305
 						. "?php include_spip('inc/headers');redirige_par_entete('"
306 306
 						. texte_script($url)
307 307
 						. "','',$status);"
308
-						. '?' . '>',
308
+						. '?'.'>',
309 309
 					'process_ins' => 'php',
310 310
 					'status' => $status
311 311
 				];
Please login to merge, or discard this patch.
ecrire/public/references.php 2 patches
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_logger()->info("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
140
-			$i++;
141
-			$idb = $boucles[$idb]->id_parent;
142
-		}
143
-	}
144
-
145
-	#	spip_logger()->info("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_logger()->info("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_logger()->info("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_logger()->info("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
140
+            $i++;
141
+            $idb = $boucles[$idb]->id_parent;
142
+        }
143
+    }
144
+
145
+    #	spip_logger()->info("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_logger()->info("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_logger()->info("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_logger()->info("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_logger()->info("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_logger()->info($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
749
+    if ($nom && trouver_nom_serveur_distant($p)) {
750
+        spip_logger()->info($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.
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_logger()->info("jointure impossible $e " . implode(',', $l));
387
+						spip_logger()->info("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_logger()->info($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
750
+		spip_logger()->info($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
@@ -926,7 +926,7 @@  discard block
 block discarded – undo
926 926
 function compose_filtres_args($p, $args, $sep) {
927 927
 	$arglist = '';
928 928
 	foreach ($args as $arg) {
929
-		$arglist .= $sep .
929
+		$arglist .= $sep.
930 930
 			calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
931 931
 	}
932 932
 
@@ -976,7 +976,7 @@  discard block
 block discarded – undo
976 976
 	while ($b != '') {
977 977
 		foreach ($p->boucles[$b]->criteres as $critere) {
978 978
 			if ($critere->op == $motif) {
979
-				$p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
979
+				$p->code = '$Pile[$SP'.(($n == 0) ? '' : "-$n").
980 980
 					"]['$champ']";
981 981
 				$b = '';
982 982
 				break 2;
@@ -1004,6 +1004,6 @@  discard block
 block discarded – undo
1004 1004
  */
1005 1005
 function zbug_presenter_champ($p, $champ = '') {
1006 1006
 	$balise = $champ ?: $p->nom_champ;
1007
-	$explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
1007
+	$explicite = $p->nom_boucle ? $p->nom_boucle.':' : '';
1008 1008
 	return "#{$explicite}{$balise}";
1009 1009
 }
Please login to merge, or discard this patch.
ecrire/public/normaliser.php 1 patch
Indentation   +50 added lines, -50 removed lines patch added patch discarded remove patch
@@ -13,15 +13,15 @@  discard block
 block discarded – undo
13 13
 \***************************************************************************/
14 14
 
15 15
 if (!defined('_ECRIRE_INC_VERSION')) {
16
-	return;
16
+    return;
17 17
 }
18 18
 
19 19
 function phraser_vieux_modele($p) {
20
- normaliser_args_inclumodel($p);
20
+    normaliser_args_inclumodel($p);
21 21
 }
22 22
 
23 23
 function phraser_vieux_inclu($p) {
24
- normaliser_args_inclumodel($p);
24
+    normaliser_args_inclumodel($p);
25 25
 }
26 26
 
27 27
 /**
@@ -32,24 +32,24 @@  discard block
 block discarded – undo
32 32
  * @return void
33 33
  */
34 34
 function normaliser_args_inclumodel($p) {
35
-	$params = $p->param;
36
-	if (!$params) {
37
-		return;
38
-	}
39
-	$args = $params[0];
40
-	if ($args[0]) {
41
-		return;
42
-	} // filtre immediat
43
-	array_shift($p->param);
44
-	foreach ($p->param as $l) {
45
-		if (!array_shift($l)) {
46
-			$args = array_merge($args, $l);
47
-			array_shift($p->param);
48
-		} else {
49
-			break;
50
-		} // filtre
51
-	}
52
-	array_unshift($p->param, $args);
35
+    $params = $p->param;
36
+    if (!$params) {
37
+        return;
38
+    }
39
+    $args = $params[0];
40
+    if ($args[0]) {
41
+        return;
42
+    } // filtre immediat
43
+    array_shift($p->param);
44
+    foreach ($p->param as $l) {
45
+        if (!array_shift($l)) {
46
+            $args = array_merge($args, $l);
47
+            array_shift($p->param);
48
+        } else {
49
+            break;
50
+        } // filtre
51
+    }
52
+    array_unshift($p->param, $args);
53 53
 }
54 54
 
55 55
 
@@ -59,35 +59,35 @@  discard block
 block discarded – undo
59 59
  * @return void
60 60
  */
61 61
 function normaliser_inclure($champ) {
62
-	normaliser_args_inclumodel($champ);
63
-	$l = $champ->param[0];
64
-	if (is_array($l) && !$l[0]) {
65
-		foreach ($l as $k => $p) {
66
-			if ($p && $p[0]->type == 'texte' && !strpos((string) $p[0]->texte, '=')) {
67
-				$p[0]->texte = trim((string) $p[0]->texte);
68
-			}
69
-		}
70
-		foreach ($l as $k => $p) {
71
-			if (
72
-				!$p || $p[0]->type != 'texte'
73
-				|| !preg_match('/^fond\s*=\s*(.*)$/', (string) $p[0]->texte, $r)
74
-			) {
75
-				continue;
76
-			}
62
+    normaliser_args_inclumodel($champ);
63
+    $l = $champ->param[0];
64
+    if (is_array($l) && !$l[0]) {
65
+        foreach ($l as $k => $p) {
66
+            if ($p && $p[0]->type == 'texte' && !strpos((string) $p[0]->texte, '=')) {
67
+                $p[0]->texte = trim((string) $p[0]->texte);
68
+            }
69
+        }
70
+        foreach ($l as $k => $p) {
71
+            if (
72
+                !$p || $p[0]->type != 'texte'
73
+                || !preg_match('/^fond\s*=\s*(.*)$/', (string) $p[0]->texte, $r)
74
+            ) {
75
+                continue;
76
+            }
77 77
 
78
-			if ($r[1]) {
79
-				$p[0]->texte = $r[1];
80
-			} else {
81
-				unset($p[0]);
82
-			}
83
-			$champ->texte = $p;
84
-			unset($champ->param[0][$k]);
85
-			if ((is_countable($champ->param[0]) ? count($champ->param[0]) : 0) == 1) {
86
-				array_shift($champ->param);
87
-			}
78
+            if ($r[1]) {
79
+                $p[0]->texte = $r[1];
80
+            } else {
81
+                unset($p[0]);
82
+            }
83
+            $champ->texte = $p;
84
+            unset($champ->param[0][$k]);
85
+            if ((is_countable($champ->param[0]) ? count($champ->param[0]) : 0) == 1) {
86
+                array_shift($champ->param);
87
+            }
88 88
 
89
-			return;
90
-		}
91
-	}
92
-	spip_logger('vieilles_def')->info('inclure sans fond ni fichier');
89
+            return;
90
+        }
91
+    }
92
+    spip_logger('vieilles_def')->info('inclure sans fond ni fichier');
93 93
 }
Please login to merge, or discard this patch.
ecrire/public/cacher.php 2 patches
Indentation   +276 added lines, -276 removed lines patch added patch discarded remove patch
@@ -14,7 +14,7 @@  discard block
 block discarded – undo
14 14
 use Spip\Component\Hasher\Hash32;
15 15
 
16 16
 if (!defined('_ECRIRE_INC_VERSION')) {
17
-	return;
17
+    return;
18 18
 }
19 19
 
20 20
 /**
@@ -23,24 +23,24 @@  discard block
 block discarded – undo
23 23
  * @internal Temporary fonction until DI in SPIP
24 24
  */
25 25
 function cache_instance(): CacheInterface {
26
-	static $cache = null;
27
-	return $cache ??= new LimitedFilesystem('calcul', _DIR_CACHE);
26
+    static $cache = null;
27
+    return $cache ??= new LimitedFilesystem('calcul', _DIR_CACHE);
28 28
 }
29 29
 
30 30
 /**
31 31
  * Returns a key cache (id) for this data
32 32
  */
33 33
 function cache_key(array $contexte, array $page): string {
34
-	static $hasher = null;
35
-	$hasher ??= new Hash32();
36
-	return $hasher->hash([$contexte, $page]) . '.cache';
34
+    static $hasher = null;
35
+    $hasher ??= new Hash32();
36
+    return $hasher->hash([$contexte, $page]) . '.cache';
37 37
 }
38 38
 
39 39
 /**
40 40
  * Écrire le cache dans un casier
41 41
  */
42 42
 function ecrire_cache(string $cache_key, array $valeur): bool {
43
-	return cache_instance()->set($cache_key, ['cache_key' => $cache_key, 'valeur' => $valeur]);
43
+    return cache_instance()->set($cache_key, ['cache_key' => $cache_key, 'valeur' => $valeur]);
44 44
 }
45 45
 
46 46
 /**
@@ -49,7 +49,7 @@  discard block
 block discarded – undo
49 49
  * @return null|mixed null: probably cache miss
50 50
  */
51 51
 function lire_cache(string $cache_key): mixed {
52
-	return cache_instance()->get($cache_key)['valeur'] ?? null;
52
+    return cache_instance()->get($cache_key)['valeur'] ?? null;
53 53
 }
54 54
 
55 55
 /**
@@ -58,16 +58,16 @@  discard block
 block discarded – undo
58 58
  * Parano : on signe le cache, afin d'interdire un hack d'injection dans notre memcache
59 59
  */
60 60
 function cache_signature(&$page): string {
61
-	if (!isset($GLOBALS['meta']['cache_signature'])) {
62
-		include_spip('inc/acces');
63
-		ecrire_meta(
64
-			'cache_signature',
65
-			hash('sha256', $_SERVER['DOCUMENT_ROOT'] . ($_SERVER['SERVER_SIGNATURE'] ?? '') . creer_uniqid()),
66
-			'non'
67
-		);
68
-	}
69
-
70
-	return (new Hash32())->hash($GLOBALS['meta']['cache_signature'] . $page['texte']);
61
+    if (!isset($GLOBALS['meta']['cache_signature'])) {
62
+        include_spip('inc/acces');
63
+        ecrire_meta(
64
+            'cache_signature',
65
+            hash('sha256', $_SERVER['DOCUMENT_ROOT'] . ($_SERVER['SERVER_SIGNATURE'] ?? '') . creer_uniqid()),
66
+            'non'
67
+        );
68
+    }
69
+
70
+    return (new Hash32())->hash($GLOBALS['meta']['cache_signature'] . $page['texte']);
71 71
 }
72 72
 
73 73
 /**
@@ -79,14 +79,14 @@  discard block
 block discarded – undo
79 79
  * on positionne un flag gz si on comprime, pour savoir si on doit decompresser ou pas
80 80
  */
81 81
 function gzip_page(array $page): array {
82
-	if (function_exists('gzcompress') && strlen((string) $page['texte']) > 16 * 1024) {
83
-		$page['gz'] = true;
84
-		$page['texte'] = gzcompress((string) $page['texte']);
85
-	} else {
86
-		$page['gz'] = false;
87
-	}
88
-
89
-	return $page;
82
+    if (function_exists('gzcompress') && strlen((string) $page['texte']) > 16 * 1024) {
83
+        $page['gz'] = true;
84
+        $page['texte'] = gzcompress((string) $page['texte']);
85
+    } else {
86
+        $page['gz'] = false;
87
+    }
88
+
89
+    return $page;
90 90
 }
91 91
 
92 92
 /**
@@ -97,10 +97,10 @@  discard block
 block discarded – undo
97 97
  * de decompresser deux fois de suite un cache (ce qui echoue)
98 98
  */
99 99
 function gunzip_page(array &$page): void {
100
-	if ($page['gz']) {
101
-		$page['texte'] = gzuncompress($page['texte']);
102
-		$page['gz'] = false; // ne pas gzuncompress deux fois une meme page
103
-	}
100
+    if ($page['gz']) {
101
+        $page['texte'] = gzuncompress($page['texte']);
102
+        $page['gz'] = false; // ne pas gzuncompress deux fois une meme page
103
+    }
104 104
 }
105 105
 
106 106
 /**
@@ -114,72 +114,72 @@  discard block
 block discarded – undo
114 114
  *  - -1 si il faut calculer sans stocker en cache
115 115
  */
116 116
 function cache_valide(array &$page, int $date): int {
117
-	$now = $_SERVER['REQUEST_TIME'];
118
-
119
-	// Apparition d'un nouvel article post-date ?
120
-	if (
121
-		isset($GLOBALS['meta']['post_dates'])
122
-		&& $GLOBALS['meta']['post_dates'] == 'non'
123
-		&& isset($GLOBALS['meta']['date_prochain_postdate'])
124
-		&& $now > $GLOBALS['meta']['date_prochain_postdate']
125
-	) {
126
-		spip_logger()->info('Un article post-date invalide le cache');
127
-		include_spip('inc/rubriques');
128
-		calculer_prochain_postdate(true);
129
-	}
130
-
131
-	if (defined('_VAR_NOCACHE') && _VAR_NOCACHE) {
132
-		return -1;
133
-	}
134
-	if (isset($GLOBALS['meta']['cache_inhib']) && $_SERVER['REQUEST_TIME'] < $GLOBALS['meta']['cache_inhib']) {
135
-		return -1;
136
-	}
137
-	if (defined('_NO_CACHE')) {
138
-		return (_NO_CACHE == 0 && !isset($page['texte'])) ? 1 : _NO_CACHE;
139
-	}
140
-
141
-	// pas de cache ? on le met a jour, sauf pour les bots (on leur calcule la page sans mise en cache)
142
-	if (!$page || !isset($page['texte']) || !isset($page['entetes']['X-Spip-Cache'])) {
143
-		return _IS_BOT ? -1 : 1;
144
-	}
145
-
146
-	// controle de la signature
147
-	if ($page['sig'] !== cache_signature($page)) {
148
-		return _IS_BOT ? -1 : 1;
149
-	}
150
-
151
-	// #CACHE{n,statique} => on n'invalide pas avec derniere_modif
152
-	// cf. ecrire/public/balises.php, balise_CACHE_dist()
153
-	// Cache invalide par la meta 'derniere_modif'
154
-	// sauf pour les bots, qui utilisent toujours le cache
155
-	if (
156
-		(!isset($page['entetes']['X-Spip-Statique']) || $page['entetes']['X-Spip-Statique'] !== 'oui')
157
-		&& (
158
-			!_IS_BOT
159
-			&& $GLOBALS['derniere_modif_invalide']
160
-			&& isset($GLOBALS['meta']['derniere_modif'])
161
-			&& $date < $GLOBALS['meta']['derniere_modif']
162
-		)
163
-	) {
164
-		return 1;
165
-	}
166
-
167
-	// Sinon comparer l'age du fichier a sa duree de cache
168
-	$duree = (int) $page['entetes']['X-Spip-Cache'];
169
-	$cache_mark = ($GLOBALS['meta']['cache_mark'] ?? 0);
170
-	if ($duree == 0) {  #CACHE{0}
171
-	return -1;
172
-	} // sauf pour les bots, qui utilisent toujours le cache
173
-	else {
174
-		if (
175
-			!_IS_BOT && $date + $duree < $now
176
-			|| $date < $cache_mark
177
-		) {
178
-			return _IS_BOT ? -1 : 1;
179
-		} else {
180
-			return 0;
181
-		}
182
-	}
117
+    $now = $_SERVER['REQUEST_TIME'];
118
+
119
+    // Apparition d'un nouvel article post-date ?
120
+    if (
121
+        isset($GLOBALS['meta']['post_dates'])
122
+        && $GLOBALS['meta']['post_dates'] == 'non'
123
+        && isset($GLOBALS['meta']['date_prochain_postdate'])
124
+        && $now > $GLOBALS['meta']['date_prochain_postdate']
125
+    ) {
126
+        spip_logger()->info('Un article post-date invalide le cache');
127
+        include_spip('inc/rubriques');
128
+        calculer_prochain_postdate(true);
129
+    }
130
+
131
+    if (defined('_VAR_NOCACHE') && _VAR_NOCACHE) {
132
+        return -1;
133
+    }
134
+    if (isset($GLOBALS['meta']['cache_inhib']) && $_SERVER['REQUEST_TIME'] < $GLOBALS['meta']['cache_inhib']) {
135
+        return -1;
136
+    }
137
+    if (defined('_NO_CACHE')) {
138
+        return (_NO_CACHE == 0 && !isset($page['texte'])) ? 1 : _NO_CACHE;
139
+    }
140
+
141
+    // pas de cache ? on le met a jour, sauf pour les bots (on leur calcule la page sans mise en cache)
142
+    if (!$page || !isset($page['texte']) || !isset($page['entetes']['X-Spip-Cache'])) {
143
+        return _IS_BOT ? -1 : 1;
144
+    }
145
+
146
+    // controle de la signature
147
+    if ($page['sig'] !== cache_signature($page)) {
148
+        return _IS_BOT ? -1 : 1;
149
+    }
150
+
151
+    // #CACHE{n,statique} => on n'invalide pas avec derniere_modif
152
+    // cf. ecrire/public/balises.php, balise_CACHE_dist()
153
+    // Cache invalide par la meta 'derniere_modif'
154
+    // sauf pour les bots, qui utilisent toujours le cache
155
+    if (
156
+        (!isset($page['entetes']['X-Spip-Statique']) || $page['entetes']['X-Spip-Statique'] !== 'oui')
157
+        && (
158
+            !_IS_BOT
159
+            && $GLOBALS['derniere_modif_invalide']
160
+            && isset($GLOBALS['meta']['derniere_modif'])
161
+            && $date < $GLOBALS['meta']['derniere_modif']
162
+        )
163
+    ) {
164
+        return 1;
165
+    }
166
+
167
+    // Sinon comparer l'age du fichier a sa duree de cache
168
+    $duree = (int) $page['entetes']['X-Spip-Cache'];
169
+    $cache_mark = ($GLOBALS['meta']['cache_mark'] ?? 0);
170
+    if ($duree == 0) {  #CACHE{0}
171
+    return -1;
172
+    } // sauf pour les bots, qui utilisent toujours le cache
173
+    else {
174
+        if (
175
+            !_IS_BOT && $date + $duree < $now
176
+            || $date < $cache_mark
177
+        ) {
178
+            return _IS_BOT ? -1 : 1;
179
+        } else {
180
+            return 0;
181
+        }
182
+    }
183 183
 }
184 184
 
185 185
 /**
@@ -193,58 +193,58 @@  discard block
 block discarded – undo
193 193
  */
194 194
 function creer_cache(&$page, &$cache_key) {
195 195
 
196
-	// Ne rien faire si on est en preview, debug, ou si une erreur
197
-	// grave s'est presentee (compilation du squelette, MySQL, etc)
198
-	// le cas var_nocache ne devrait jamais arriver ici (securite)
199
-	// le cas spip_interdire_cache correspond a une ereur SQL grave non anticipable
200
-	if (
201
-		defined('_VAR_NOCACHE') && _VAR_NOCACHE
202
-		|| defined('spip_interdire_cache')
203
-	) {
204
-		return;
205
-	}
206
-
207
-	// Si la page a un invalideur de session, utiliser un cache_key spécifique
208
-	if (
209
-		isset($page['invalideurs'])
210
-		&& isset($page['invalideurs']['session'])
211
-	) {
212
-		// on verifie que le contenu du chemin cache indique seulement
213
-		// "cache sessionne" ; sa date indique la date de validite
214
-		// des caches sessionnes
215
-		if (!$tmp = lire_cache($cache_key)) {
216
-			spip_logger()->info('Creation cache sessionne ' . $cache_key);
217
-			$tmp = [
218
-				'invalideurs' => ['session' => ''],
219
-				'lastmodified' => $_SERVER['REQUEST_TIME']
220
-			];
221
-			ecrire_cache($cache_key, $tmp);
222
-		}
223
-		$cache_key = cache_key(
224
-			['cache_key' => $cache_key],
225
-			['session' => $page['invalideurs']['session']]
226
-		);
227
-	}
228
-
229
-	// ajouter la date de production dans le cache lui meme
230
-	// (qui contient deja sa duree de validite)
231
-	$page['lastmodified'] = $_SERVER['REQUEST_TIME'];
232
-
233
-	// compresser le contenu si besoin
234
-	$pagez = gzip_page($page);
235
-
236
-	// signer le contenu
237
-	$pagez['sig'] = cache_signature($pagez);
238
-
239
-	// l'enregistrer, compresse ou non...
240
-	$ok = ecrire_cache($cache_key, $pagez);
241
-
242
-	spip_logger()->info((_IS_BOT ? 'Bot:' : '') . "Creation du cache $cache_key pour "
243
-		. $page['entetes']['X-Spip-Cache'] . ' secondes' . ($ok ? '' : ' (erreur!)'));
244
-
245
-	// Inserer ses invalideurs
246
-	include_spip('inc/invalideur');
247
-	maj_invalideurs($cache_key, $page);
196
+    // Ne rien faire si on est en preview, debug, ou si une erreur
197
+    // grave s'est presentee (compilation du squelette, MySQL, etc)
198
+    // le cas var_nocache ne devrait jamais arriver ici (securite)
199
+    // le cas spip_interdire_cache correspond a une ereur SQL grave non anticipable
200
+    if (
201
+        defined('_VAR_NOCACHE') && _VAR_NOCACHE
202
+        || defined('spip_interdire_cache')
203
+    ) {
204
+        return;
205
+    }
206
+
207
+    // Si la page a un invalideur de session, utiliser un cache_key spécifique
208
+    if (
209
+        isset($page['invalideurs'])
210
+        && isset($page['invalideurs']['session'])
211
+    ) {
212
+        // on verifie que le contenu du chemin cache indique seulement
213
+        // "cache sessionne" ; sa date indique la date de validite
214
+        // des caches sessionnes
215
+        if (!$tmp = lire_cache($cache_key)) {
216
+            spip_logger()->info('Creation cache sessionne ' . $cache_key);
217
+            $tmp = [
218
+                'invalideurs' => ['session' => ''],
219
+                'lastmodified' => $_SERVER['REQUEST_TIME']
220
+            ];
221
+            ecrire_cache($cache_key, $tmp);
222
+        }
223
+        $cache_key = cache_key(
224
+            ['cache_key' => $cache_key],
225
+            ['session' => $page['invalideurs']['session']]
226
+        );
227
+    }
228
+
229
+    // ajouter la date de production dans le cache lui meme
230
+    // (qui contient deja sa duree de validite)
231
+    $page['lastmodified'] = $_SERVER['REQUEST_TIME'];
232
+
233
+    // compresser le contenu si besoin
234
+    $pagez = gzip_page($page);
235
+
236
+    // signer le contenu
237
+    $pagez['sig'] = cache_signature($pagez);
238
+
239
+    // l'enregistrer, compresse ou non...
240
+    $ok = ecrire_cache($cache_key, $pagez);
241
+
242
+    spip_logger()->info((_IS_BOT ? 'Bot:' : '') . "Creation du cache $cache_key pour "
243
+        . $page['entetes']['X-Spip-Cache'] . ' secondes' . ($ok ? '' : ' (erreur!)'));
244
+
245
+    // Inserer ses invalideurs
246
+    include_spip('inc/invalideur');
247
+    maj_invalideurs($cache_key, $page);
248 248
 }
249 249
 
250 250
 /**
@@ -272,132 +272,132 @@  discard block
 block discarded – undo
272 272
  */
273 273
 function public_cacher_dist($contexte, &$use_cache, &$cache_key, &$page, &$lastmodified) {
274 274
 
275
-	# fonction de cache minimale : dire "non on ne met rien en cache"
276
-	# $use_cache = -1; return;
277
-
278
-	// Second appel, destine a l'enregistrement du cache sur le disque
279
-	if (isset($cache_key)) {
280
-		creer_cache($page, $cache_key);
281
-		return;
282
-	}
283
-
284
-	// Toute la suite correspond au premier appel
285
-	$contexte_implicite = $page['contexte_implicite'];
286
-
287
-	// Cas ignorant le cache car completement dynamique
288
-	if (
289
-		!empty($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'POST'
290
-		|| _request('connect')
291
-	) {
292
-		$use_cache = -1;
293
-		$lastmodified = 0;
294
-		$cache_key = '';
295
-		$page = [];
296
-
297
-		return;
298
-	}
299
-
300
-	// Controler l'existence d'un cache nous correspondant
301
-	$cache_key = cache_key($contexte, $page);
302
-	$lastmodified = 0;
303
-
304
-	// charger le cache s'il existe (et si il a bien le bon hash = anticollision)
305
-	if (!$page = lire_cache($cache_key)) {
306
-		$page = [];
307
-	}
308
-
309
-	// s'il est sessionne, charger celui correspondant a notre session
310
-	if (
311
-		isset($page['invalideurs'])
312
-		&& isset($page['invalideurs']['session'])
313
-	) {
314
-		$cache_key_session = cache_key(
315
-			['cache_key' => $cache_key],
316
-			['session' => spip_session()]
317
-		);
318
-		if (
319
-			($page_session = lire_cache($cache_key_session)) && $page_session['lastmodified'] >= $page['lastmodified']
320
-		) {
321
-			$page = $page_session;
322
-		} else {
323
-			$page = [];
324
-		}
325
-	}
326
-
327
-
328
-	// Faut-il effacer des pages invalidees (en particulier ce cache-ci) ?
329
-	// ne le faire que si la base est disponible
330
-	$invalider = false;
331
-	if (isset($GLOBALS['meta']['invalider']) && spip_connect()) {
332
-		$invalider = true;
333
-	}
334
-
335
-	// Si un calcul, recalcul [ou preview, mais c'est recalcul] est demande,
336
-	// on supprime le cache
337
-	if (
338
-		defined('_VAR_MODE')
339
-		&& _VAR_MODE
340
-		&& (
341
-			isset($_COOKIE['spip_session'])
342
-			|| isset($_COOKIE['spip_admin'])
343
-			|| @file_exists(_ACCESS_FILE_NAME)
344
-		)
345
-	) {
346
-		$page = ['contexte_implicite' => $contexte_implicite]; // ignorer le cache deja lu
347
-		$invalider = true;
348
-	}
349
-	if ($invalider) {
350
-		include_spip('inc/invalideur');
351
-		retire_caches($cache_key); # API invalideur inutile
352
-		cache_instance()->delete($cache_key);
353
-		if (isset($cache_key_session) && $cache_key_session) {
354
-			cache_instance()->delete($cache_key_session);
355
-		}
356
-	}
357
-
358
-	// $delais par defaut
359
-	// pour toutes les pages sans #CACHE{} hors modeles/ et espace privé
360
-	// qui sont a cache nul par defaut
361
-	if (!isset($GLOBALS['delais'])) {
362
-		if (!defined('_DUREE_CACHE_DEFAUT')) {
363
-			define('_DUREE_CACHE_DEFAUT', 24 * 3600);
364
-		}
365
-		$GLOBALS['delais'] = _DUREE_CACHE_DEFAUT;
366
-	}
367
-
368
-	// determiner la validite de la page
369
-	if ($page) {
370
-		$use_cache = cache_valide($page, $page['lastmodified'] ?? 0);
371
-		// le contexte implicite n'est pas stocke dans le cache, mais il y a equivalence
372
-		// par le nom du cache. On le reinjecte donc ici pour utilisation eventuelle au calcul
373
-		$page['contexte_implicite'] = $contexte_implicite;
374
-		if (!$use_cache) {
375
-			// $page est un cache utilisable
376
-			gunzip_page($page);
377
-
378
-			return;
379
-		}
380
-	} else {
381
-		$page = ['contexte_implicite' => $contexte_implicite];
382
-		$use_cache = cache_valide($page, 0); // fichier cache absent : provoque le calcul
383
-	}
384
-
385
-	// Si pas valide mais pas de connexion a la base, le garder quand meme
386
-	if (!spip_connect()) {
387
-		if (isset($page['texte'])) {
388
-			gunzip_page($page);
389
-			$use_cache = 0;
390
-		} else {
391
-			spip_logger()->info("Erreur base de donnees, impossible utiliser $cache_key");
392
-			include_spip('inc/minipres');
393
-
394
-			return minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'), ['status' => 503]);
395
-		}
396
-	}
397
-
398
-	if ($use_cache < 0) {
399
-		$cache_key = '';
400
-	}
401
-
402
-	return;
275
+    # fonction de cache minimale : dire "non on ne met rien en cache"
276
+    # $use_cache = -1; return;
277
+
278
+    // Second appel, destine a l'enregistrement du cache sur le disque
279
+    if (isset($cache_key)) {
280
+        creer_cache($page, $cache_key);
281
+        return;
282
+    }
283
+
284
+    // Toute la suite correspond au premier appel
285
+    $contexte_implicite = $page['contexte_implicite'];
286
+
287
+    // Cas ignorant le cache car completement dynamique
288
+    if (
289
+        !empty($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'POST'
290
+        || _request('connect')
291
+    ) {
292
+        $use_cache = -1;
293
+        $lastmodified = 0;
294
+        $cache_key = '';
295
+        $page = [];
296
+
297
+        return;
298
+    }
299
+
300
+    // Controler l'existence d'un cache nous correspondant
301
+    $cache_key = cache_key($contexte, $page);
302
+    $lastmodified = 0;
303
+
304
+    // charger le cache s'il existe (et si il a bien le bon hash = anticollision)
305
+    if (!$page = lire_cache($cache_key)) {
306
+        $page = [];
307
+    }
308
+
309
+    // s'il est sessionne, charger celui correspondant a notre session
310
+    if (
311
+        isset($page['invalideurs'])
312
+        && isset($page['invalideurs']['session'])
313
+    ) {
314
+        $cache_key_session = cache_key(
315
+            ['cache_key' => $cache_key],
316
+            ['session' => spip_session()]
317
+        );
318
+        if (
319
+            ($page_session = lire_cache($cache_key_session)) && $page_session['lastmodified'] >= $page['lastmodified']
320
+        ) {
321
+            $page = $page_session;
322
+        } else {
323
+            $page = [];
324
+        }
325
+    }
326
+
327
+
328
+    // Faut-il effacer des pages invalidees (en particulier ce cache-ci) ?
329
+    // ne le faire que si la base est disponible
330
+    $invalider = false;
331
+    if (isset($GLOBALS['meta']['invalider']) && spip_connect()) {
332
+        $invalider = true;
333
+    }
334
+
335
+    // Si un calcul, recalcul [ou preview, mais c'est recalcul] est demande,
336
+    // on supprime le cache
337
+    if (
338
+        defined('_VAR_MODE')
339
+        && _VAR_MODE
340
+        && (
341
+            isset($_COOKIE['spip_session'])
342
+            || isset($_COOKIE['spip_admin'])
343
+            || @file_exists(_ACCESS_FILE_NAME)
344
+        )
345
+    ) {
346
+        $page = ['contexte_implicite' => $contexte_implicite]; // ignorer le cache deja lu
347
+        $invalider = true;
348
+    }
349
+    if ($invalider) {
350
+        include_spip('inc/invalideur');
351
+        retire_caches($cache_key); # API invalideur inutile
352
+        cache_instance()->delete($cache_key);
353
+        if (isset($cache_key_session) && $cache_key_session) {
354
+            cache_instance()->delete($cache_key_session);
355
+        }
356
+    }
357
+
358
+    // $delais par defaut
359
+    // pour toutes les pages sans #CACHE{} hors modeles/ et espace privé
360
+    // qui sont a cache nul par defaut
361
+    if (!isset($GLOBALS['delais'])) {
362
+        if (!defined('_DUREE_CACHE_DEFAUT')) {
363
+            define('_DUREE_CACHE_DEFAUT', 24 * 3600);
364
+        }
365
+        $GLOBALS['delais'] = _DUREE_CACHE_DEFAUT;
366
+    }
367
+
368
+    // determiner la validite de la page
369
+    if ($page) {
370
+        $use_cache = cache_valide($page, $page['lastmodified'] ?? 0);
371
+        // le contexte implicite n'est pas stocke dans le cache, mais il y a equivalence
372
+        // par le nom du cache. On le reinjecte donc ici pour utilisation eventuelle au calcul
373
+        $page['contexte_implicite'] = $contexte_implicite;
374
+        if (!$use_cache) {
375
+            // $page est un cache utilisable
376
+            gunzip_page($page);
377
+
378
+            return;
379
+        }
380
+    } else {
381
+        $page = ['contexte_implicite' => $contexte_implicite];
382
+        $use_cache = cache_valide($page, 0); // fichier cache absent : provoque le calcul
383
+    }
384
+
385
+    // Si pas valide mais pas de connexion a la base, le garder quand meme
386
+    if (!spip_connect()) {
387
+        if (isset($page['texte'])) {
388
+            gunzip_page($page);
389
+            $use_cache = 0;
390
+        } else {
391
+            spip_logger()->info("Erreur base de donnees, impossible utiliser $cache_key");
392
+            include_spip('inc/minipres');
393
+
394
+            return minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'), ['status' => 503]);
395
+        }
396
+    }
397
+
398
+    if ($use_cache < 0) {
399
+        $cache_key = '';
400
+    }
401
+
402
+    return;
403 403
 }
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -33,7 +33,7 @@  discard block
 block discarded – undo
33 33
 function cache_key(array $contexte, array $page): string {
34 34
 	static $hasher = null;
35 35
 	$hasher ??= new Hash32();
36
-	return $hasher->hash([$contexte, $page]) . '.cache';
36
+	return $hasher->hash([$contexte, $page]).'.cache';
37 37
 }
38 38
 
39 39
 /**
@@ -62,12 +62,12 @@  discard block
 block discarded – undo
62 62
 		include_spip('inc/acces');
63 63
 		ecrire_meta(
64 64
 			'cache_signature',
65
-			hash('sha256', $_SERVER['DOCUMENT_ROOT'] . ($_SERVER['SERVER_SIGNATURE'] ?? '') . creer_uniqid()),
65
+			hash('sha256', $_SERVER['DOCUMENT_ROOT'].($_SERVER['SERVER_SIGNATURE'] ?? '').creer_uniqid()),
66 66
 			'non'
67 67
 		);
68 68
 	}
69 69
 
70
-	return (new Hash32())->hash($GLOBALS['meta']['cache_signature'] . $page['texte']);
70
+	return (new Hash32())->hash($GLOBALS['meta']['cache_signature'].$page['texte']);
71 71
 }
72 72
 
73 73
 /**
@@ -213,7 +213,7 @@  discard block
 block discarded – undo
213 213
 		// "cache sessionne" ; sa date indique la date de validite
214 214
 		// des caches sessionnes
215 215
 		if (!$tmp = lire_cache($cache_key)) {
216
-			spip_logger()->info('Creation cache sessionne ' . $cache_key);
216
+			spip_logger()->info('Creation cache sessionne '.$cache_key);
217 217
 			$tmp = [
218 218
 				'invalideurs' => ['session' => ''],
219 219
 				'lastmodified' => $_SERVER['REQUEST_TIME']
@@ -239,8 +239,8 @@  discard block
 block discarded – undo
239 239
 	// l'enregistrer, compresse ou non...
240 240
 	$ok = ecrire_cache($cache_key, $pagez);
241 241
 
242
-	spip_logger()->info((_IS_BOT ? 'Bot:' : '') . "Creation du cache $cache_key pour "
243
-		. $page['entetes']['X-Spip-Cache'] . ' secondes' . ($ok ? '' : ' (erreur!)'));
242
+	spip_logger()->info((_IS_BOT ? 'Bot:' : '')."Creation du cache $cache_key pour "
243
+		. $page['entetes']['X-Spip-Cache'].' secondes'.($ok ? '' : ' (erreur!)'));
244 244
 
245 245
 	// Inserer ses invalideurs
246 246
 	include_spip('inc/invalideur');
Please login to merge, or discard this patch.