Completed
Push — master ( b0842c...2f7bdd )
by cam
01:08
created
ecrire/lang/spip_fr.php 1 patch
Indentation   +669 added lines, -669 removed lines patch added patch discarded remove patch
@@ -2,248 +2,248 @@  discard block
 block discarded – undo
2 2
 // This is a SPIP language file  --  Ceci est un fichier langue de SPIP
3 3
 // Fichier source, a modifier dans https://git.spip.net/spip/spip.git
4 4
 if (!defined('_ECRIRE_INC_VERSION')) {
5
-	return;
5
+    return;
6 6
 }
7 7
 
8 8
 $GLOBALS[$GLOBALS['idx_lang']] = array(
9 9
 
10
-	// A
11
-	'access_interface_graphique' => 'Retour à l’interface graphique complète',
12
-	'access_mode_texte' => 'Afficher l’interface textuelle simplifiée',
13
-	'admin_debug' => 'debug',
14
-	'admin_modifier_article' => 'Modifier cet article',
15
-	'admin_modifier_auteur' => 'Modifier cet auteur',
16
-	'admin_modifier_breve' => 'Modifier cette brève',
17
-	'admin_modifier_mot' => 'Modifier ce mot-clé',
18
-	'admin_modifier_rubrique' => 'Modifier cette rubrique',
19
-	'admin_recalculer' => 'Recalculer cette page',
20
-	'afficher_calendrier' => 'Afficher le calendrier',
21
-	'afficher_trad' => 'afficher les traductions',
22
-	'alerte_maj_impossible' => '<b>Alerte !</b> La mise à jour de la base SQL vers la version @version@ est impossible, peut-être à cause d’un problème de droit de modification sur la base de données. Veuillez contacter votre hébergeur.',
23
-	'alerte_modif_info_concourante' => 'ATTENTION : Cette information a été modifiée par ailleurs. La valeur actuelle est :',
24
-	'analyse_xml' => 'Analyse XML',
25
-	'annuler' => 'Annuler',
26
-	'antispam_champ_vide' => 'Veuillez laisser ce champ vide :',
27
-	'articles_recents' => 'Articles les plus récents',
28
-	'attention_champ_mini_nb_caractères' => 'Attention ! @nb@ caractères au minimum',
29
-	'avis_1_erreur_saisie' => 'Il y a 1 erreur dans votre saisie, veuillez vérifier les informations.',
30
-	'avis_archive_incorrect' => 'le fichier archive n’est pas un fichier SPIP',
31
-	'avis_archive_invalide' => 'le fichier archive n’est pas valide',
32
-	'avis_attention' => 'ATTENTION !',
33
-	'avis_champ_incorrect_type_objet' => 'Nom de champ incorrect @name@ pour objet de type @type@',
34
-	'avis_colonne_inexistante' => 'La colonne @col@ n’existe pas',
35
-	'avis_erreur' => 'Erreur : voir ci-dessous',
36
-	'avis_erreur_connexion' => 'Erreur de connexion',
37
-	'avis_erreur_cookie' => 'problème de cookie',
38
-	'avis_erreur_fonction_contexte' => 'Erreur de programmation. Cette fonction ne doit pas être appelée dans ce contexte.',
39
-	'avis_erreur_mysql' => 'Erreur SQL',
40
-	'avis_erreur_sauvegarde' => 'Erreur dans la sauvegarde (@type@ @id_objet@) !',
41
-	'avis_erreur_visiteur' => 'Problème d’accès à l’espace privé',
42
-	'avis_nb_erreurs_saisie' => 'Il y a @nb@ erreurs dans votre saisie, veuillez vérifier les informations.',
10
+    // A
11
+    'access_interface_graphique' => 'Retour à l’interface graphique complète',
12
+    'access_mode_texte' => 'Afficher l’interface textuelle simplifiée',
13
+    'admin_debug' => 'debug',
14
+    'admin_modifier_article' => 'Modifier cet article',
15
+    'admin_modifier_auteur' => 'Modifier cet auteur',
16
+    'admin_modifier_breve' => 'Modifier cette brève',
17
+    'admin_modifier_mot' => 'Modifier ce mot-clé',
18
+    'admin_modifier_rubrique' => 'Modifier cette rubrique',
19
+    'admin_recalculer' => 'Recalculer cette page',
20
+    'afficher_calendrier' => 'Afficher le calendrier',
21
+    'afficher_trad' => 'afficher les traductions',
22
+    'alerte_maj_impossible' => '<b>Alerte !</b> La mise à jour de la base SQL vers la version @version@ est impossible, peut-être à cause d’un problème de droit de modification sur la base de données. Veuillez contacter votre hébergeur.',
23
+    'alerte_modif_info_concourante' => 'ATTENTION : Cette information a été modifiée par ailleurs. La valeur actuelle est :',
24
+    'analyse_xml' => 'Analyse XML',
25
+    'annuler' => 'Annuler',
26
+    'antispam_champ_vide' => 'Veuillez laisser ce champ vide :',
27
+    'articles_recents' => 'Articles les plus récents',
28
+    'attention_champ_mini_nb_caractères' => 'Attention ! @nb@ caractères au minimum',
29
+    'avis_1_erreur_saisie' => 'Il y a 1 erreur dans votre saisie, veuillez vérifier les informations.',
30
+    'avis_archive_incorrect' => 'le fichier archive n’est pas un fichier SPIP',
31
+    'avis_archive_invalide' => 'le fichier archive n’est pas valide',
32
+    'avis_attention' => 'ATTENTION !',
33
+    'avis_champ_incorrect_type_objet' => 'Nom de champ incorrect @name@ pour objet de type @type@',
34
+    'avis_colonne_inexistante' => 'La colonne @col@ n’existe pas',
35
+    'avis_erreur' => 'Erreur : voir ci-dessous',
36
+    'avis_erreur_connexion' => 'Erreur de connexion',
37
+    'avis_erreur_cookie' => 'problème de cookie',
38
+    'avis_erreur_fonction_contexte' => 'Erreur de programmation. Cette fonction ne doit pas être appelée dans ce contexte.',
39
+    'avis_erreur_mysql' => 'Erreur SQL',
40
+    'avis_erreur_sauvegarde' => 'Erreur dans la sauvegarde (@type@ @id_objet@) !',
41
+    'avis_erreur_visiteur' => 'Problème d’accès à l’espace privé',
42
+    'avis_nb_erreurs_saisie' => 'Il y a @nb@ erreurs dans votre saisie, veuillez vérifier les informations.',
43 43
 
44
-	// B
45
-	'barre_a_accent_grave' => 'Insérer un A accent grave majuscule',
46
-	'barre_aide' => 'Utilisez les raccourcis typographiques pour enrichir votre mise en page',
47
-	'barre_e_accent_aigu' => 'Insérer un E accent aigu majuscule',
48
-	'barre_eo' => 'Insérer un E dans l’O',
49
-	'barre_eo_maj' => 'Insérer un E dans l’O majuscule',
50
-	'barre_euro' => 'Insérer le symbole €',
51
-	'barre_gras' => 'Mettre en {{gras}}',
52
-	'barre_guillemets' => 'Entourer de « guillemets »',
53
-	'barre_guillemets_simples' => 'Entourer de “guillemets de second niveau”',
54
-	'barre_intertitre' => 'Transformer en {{{intertitre}}}',
55
-	'barre_italic' => 'Mettre en {italique}',
56
-	'barre_lien' => 'Transformer en [lien hypertexte->http://...]',
57
-	'barre_lien_input' => 'Veuillez indiquer l’adresse de votre lien (vous pouvez indiquer une adresse Web sous la forme http://www.monsite/com ou simplement indiquer le numéro d’un article de ce site.',
58
-	'barre_note' => 'Transformer en [[Note de bas de page]]',
59
-	'barre_paragraphe' => 'Créer un paragraphe',
60
-	'barre_quote' => '<quote>Citer un message</quote>',
61
-	'bouton_changer' => 'Changer',
62
-	'bouton_chercher' => 'Chercher',
63
-	'bouton_choisir' => 'Choisir',
64
-	'bouton_deplacer' => 'Déplacer',
65
-	'bouton_download' => 'Télécharger',
66
-	'bouton_enregistrer' => 'Enregistrer',
67
-	'bouton_radio_desactiver_messagerie_interne' => 'Désactiver la messagerie interne',
68
-	'bouton_radio_envoi_annonces' => 'Envoyer les annonces éditoriales',
69
-	'bouton_radio_non_envoi_annonces' => 'Ne pas envoyer d’annonces',
70
-	'bouton_radio_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés',
71
-	'bouton_recharger_page' => 'recharger cette page',
72
-	'bouton_telecharger' => 'Télécharger',
73
-	'bouton_upload' => 'Téléverser',
74
-	'bouton_valider' => 'Valider',
44
+    // B
45
+    'barre_a_accent_grave' => 'Insérer un A accent grave majuscule',
46
+    'barre_aide' => 'Utilisez les raccourcis typographiques pour enrichir votre mise en page',
47
+    'barre_e_accent_aigu' => 'Insérer un E accent aigu majuscule',
48
+    'barre_eo' => 'Insérer un E dans l’O',
49
+    'barre_eo_maj' => 'Insérer un E dans l’O majuscule',
50
+    'barre_euro' => 'Insérer le symbole €',
51
+    'barre_gras' => 'Mettre en {{gras}}',
52
+    'barre_guillemets' => 'Entourer de « guillemets »',
53
+    'barre_guillemets_simples' => 'Entourer de “guillemets de second niveau”',
54
+    'barre_intertitre' => 'Transformer en {{{intertitre}}}',
55
+    'barre_italic' => 'Mettre en {italique}',
56
+    'barre_lien' => 'Transformer en [lien hypertexte->http://...]',
57
+    'barre_lien_input' => 'Veuillez indiquer l’adresse de votre lien (vous pouvez indiquer une adresse Web sous la forme http://www.monsite/com ou simplement indiquer le numéro d’un article de ce site.',
58
+    'barre_note' => 'Transformer en [[Note de bas de page]]',
59
+    'barre_paragraphe' => 'Créer un paragraphe',
60
+    'barre_quote' => '<quote>Citer un message</quote>',
61
+    'bouton_changer' => 'Changer',
62
+    'bouton_chercher' => 'Chercher',
63
+    'bouton_choisir' => 'Choisir',
64
+    'bouton_deplacer' => 'Déplacer',
65
+    'bouton_download' => 'Télécharger',
66
+    'bouton_enregistrer' => 'Enregistrer',
67
+    'bouton_radio_desactiver_messagerie_interne' => 'Désactiver la messagerie interne',
68
+    'bouton_radio_envoi_annonces' => 'Envoyer les annonces éditoriales',
69
+    'bouton_radio_non_envoi_annonces' => 'Ne pas envoyer d’annonces',
70
+    'bouton_radio_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés',
71
+    'bouton_recharger_page' => 'recharger cette page',
72
+    'bouton_telecharger' => 'Télécharger',
73
+    'bouton_upload' => 'Téléverser',
74
+    'bouton_valider' => 'Valider',
75 75
 
76
-	// C
77
-	'cal_apresmidi' => 'après-midi',
78
-	'cal_jour_entier' => 'jour entier',
79
-	'cal_matin' => 'matin',
80
-	'cal_par_jour' => 'calendrier par jour',
81
-	'cal_par_mois' => 'calendrier par mois',
82
-	'cal_par_semaine' => 'calendrier par semaine',
83
-	'choix_couleur_interface' => 'couleur ',
84
-	'choix_interface' => 'choix  de l’interface',
85
-	'colonne' => 'Colonne',
86
-	'confirm_changer_statut' => 'Attention, vous avez demandé à changer le statut de cet élément. Souhaitez-vous continuer ?',
87
-	'correcte' => 'correcte', # chaine utilisée dans le debugueur : "validation .. impossible" ou "validation .. correcte"
76
+    // C
77
+    'cal_apresmidi' => 'après-midi',
78
+    'cal_jour_entier' => 'jour entier',
79
+    'cal_matin' => 'matin',
80
+    'cal_par_jour' => 'calendrier par jour',
81
+    'cal_par_mois' => 'calendrier par mois',
82
+    'cal_par_semaine' => 'calendrier par semaine',
83
+    'choix_couleur_interface' => 'couleur ',
84
+    'choix_interface' => 'choix  de l’interface',
85
+    'colonne' => 'Colonne',
86
+    'confirm_changer_statut' => 'Attention, vous avez demandé à changer le statut de cet élément. Souhaitez-vous continuer ?',
87
+    'correcte' => 'correcte', # chaine utilisée dans le debugueur : "validation .. impossible" ou "validation .. correcte"
88 88
 
89
-	// D
90
-	'date_aujourdhui' => 'aujourd’hui',
91
-	'date_avant_jc' => 'av. J.C.',
92
-	'date_dans' => 'dans @delai@',
93
-	'date_de_mois_1' => '@j@ @nommois@',
94
-	'date_de_mois_10' => '@j@ @nommois@',
95
-	'date_de_mois_11' => '@j@ @nommois@',
96
-	'date_de_mois_12' => '@j@ @nommois@',
97
-	'date_de_mois_2' => '@j@ @nommois@',
98
-	'date_de_mois_3' => '@j@ @nommois@',
99
-	'date_de_mois_4' => '@j@ @nommois@',
100
-	'date_de_mois_5' => '@j@ @nommois@',
101
-	'date_de_mois_6' => '@j@ @nommois@',
102
-	'date_de_mois_7' => '@j@ @nommois@',
103
-	'date_de_mois_8' => '@j@ @nommois@',
104
-	'date_de_mois_9' => '@j@ @nommois@',
105
-	'date_demain' => 'demain',
106
-	'date_fmt_heures_minutes' => '@h@h@m@min',
107
-	'date_fmt_heures_minutes_court' => '@h@h@m@',
108
-	'date_fmt_jour' => '@nomjour@ @jour@',
109
-	'date_fmt_jour_heure' => '@jour@ à @heure@',
110
-	'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ à @heure_fin@',
111
-	'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de @heure_debut@@dtabbr@ à @dtend@@heure_fin@@dtabbr@',
112
-	'date_fmt_jour_mois' => '@jour@ @nommois@',
113
-	'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@',
114
-	'date_fmt_mois_annee' => '@nommois@ @annee@',
115
-	'date_fmt_nomjour' => '@nomjour@ @date@',
116
-	'date_fmt_nomjour_date' => 'le @nomjour@ @date@',
117
-	'date_fmt_periode' => 'Du @date_debut@ au @date_fin@',
118
-	'date_fmt_periode_abbr' => 'Du @dtart@@date_debut@@dtabbr@ au @dtend@@date_fin@@dtabbr@',
119
-	'date_fmt_periode_from' => 'Du',
120
-	'date_fmt_periode_to' => 'au',
121
-	'date_fmt_saison_annee' => '@saison@ @annee@',
122
-	'date_heures' => 'heures',
123
-	'date_hier' => 'hier',
124
-	'date_il_y_a' => 'il y a @delai@',
125
-	'date_jnum1' => '1er',
126
-	'date_jnum10' => '10',
127
-	'date_jnum11' => '11',
128
-	'date_jnum12' => '12',
129
-	'date_jnum13' => '13',
130
-	'date_jnum14' => '14',
131
-	'date_jnum15' => '15',
132
-	'date_jnum16' => '16',
133
-	'date_jnum17' => '17',
134
-	'date_jnum18' => '18',
135
-	'date_jnum19' => '19',
136
-	'date_jnum2' => '2',
137
-	'date_jnum20' => '20',
138
-	'date_jnum21' => '21',
139
-	'date_jnum22' => '22',
140
-	'date_jnum23' => '23',
141
-	'date_jnum24' => '24',
142
-	'date_jnum25' => '25',
143
-	'date_jnum26' => '26',
144
-	'date_jnum27' => '27',
145
-	'date_jnum28' => '28',
146
-	'date_jnum29' => '29',
147
-	'date_jnum3' => '3',
148
-	'date_jnum30' => '30',
149
-	'date_jnum31' => '31',
150
-	'date_jnum4' => '4',
151
-	'date_jnum5' => '5',
152
-	'date_jnum6' => '6',
153
-	'date_jnum7' => '7',
154
-	'date_jnum8' => '8',
155
-	'date_jnum9' => '9',
156
-	'date_jour_1' => 'dimanche',
157
-	'date_jour_1_abbr' => 'dim.',
158
-	'date_jour_1_initiale' => 'd.',
159
-	'date_jour_2' => 'lundi',
160
-	'date_jour_2_abbr' => 'lun.',
161
-	'date_jour_2_initiale' => 'l.',
162
-	'date_jour_3' => 'mardi',
163
-	'date_jour_3_abbr' => 'mar.',
164
-	'date_jour_3_initiale' => 'm.',
165
-	'date_jour_4' => 'mercredi',
166
-	'date_jour_4_abbr' => 'mer.',
167
-	'date_jour_4_initiale' => 'm.',
168
-	'date_jour_5' => 'jeudi',
169
-	'date_jour_5_abbr' => 'jeu.',
170
-	'date_jour_5_initiale' => 'j.',
171
-	'date_jour_6' => 'vendredi',
172
-	'date_jour_6_abbr' => 'ven.',
173
-	'date_jour_6_initiale' => 'v.',
174
-	'date_jour_7' => 'samedi',
175
-	'date_jour_7_abbr' => 'sam.',
176
-	'date_jour_7_initiale' => 's.',
177
-	'date_jours' => 'jours',
178
-	'date_minutes' => 'minutes',
179
-	'date_mois' => 'mois',
180
-	'date_mois_1' => 'janvier',
181
-	'date_mois_10' => 'octobre',
182
-	'date_mois_10_abbr' => 'oct.',
183
-	'date_mois_11' => 'novembre',
184
-	'date_mois_11_abbr' => 'nov.',
185
-	'date_mois_12' => 'décembre',
186
-	'date_mois_12_abbr' => 'déc.',
187
-	'date_mois_1_abbr' => 'janv.',
188
-	'date_mois_2' => 'février',
189
-	'date_mois_2_abbr' => 'févr.',
190
-	'date_mois_3' => 'mars',
191
-	'date_mois_3_abbr' => 'mars',
192
-	'date_mois_4' => 'avril',
193
-	'date_mois_4_abbr' => 'avr.',
194
-	'date_mois_5' => 'mai',
195
-	'date_mois_5_abbr' => 'mai',
196
-	'date_mois_6' => 'juin',
197
-	'date_mois_6_abbr' => 'juin',
198
-	'date_mois_7' => 'juillet',
199
-	'date_mois_7_abbr' => 'juil.',
200
-	'date_mois_8' => 'août',
201
-	'date_mois_8_abbr' => 'août',
202
-	'date_mois_9' => 'septembre',
203
-	'date_mois_9_abbr' => 'sept.',
204
-	'date_saison_1' => 'hiver',
205
-	'date_saison_2' => 'printemps',
206
-	'date_saison_3' => 'été',
207
-	'date_saison_4' => 'automne',
208
-	'date_secondes' => 'secondes',
209
-	'date_semaines' => 'semaines',
210
-	'date_un_mois' => 'mois',
211
-	'date_une_heure' => 'heure',
212
-	'date_une_minute' => 'minute',
213
-	'date_une_seconde' => 'seconde',
214
-	'date_une_semaine' => 'semaine',
215
-	'dirs_commencer' => ' afin de commencer réellement l’installation',
216
-	'dirs_preliminaire' => 'Préliminaire : <b>Régler les droits d’accès</b>',
217
-	'dirs_probleme_droits' => 'Problème de droits d’accès',
218
-	'dirs_repertoires_absents' => '<p><b>Les répertoires suivants n’ont pas été trouvés :</b></p><ul>@bad_dirs@</ul>
89
+    // D
90
+    'date_aujourdhui' => 'aujourd’hui',
91
+    'date_avant_jc' => 'av. J.C.',
92
+    'date_dans' => 'dans @delai@',
93
+    'date_de_mois_1' => '@j@ @nommois@',
94
+    'date_de_mois_10' => '@j@ @nommois@',
95
+    'date_de_mois_11' => '@j@ @nommois@',
96
+    'date_de_mois_12' => '@j@ @nommois@',
97
+    'date_de_mois_2' => '@j@ @nommois@',
98
+    'date_de_mois_3' => '@j@ @nommois@',
99
+    'date_de_mois_4' => '@j@ @nommois@',
100
+    'date_de_mois_5' => '@j@ @nommois@',
101
+    'date_de_mois_6' => '@j@ @nommois@',
102
+    'date_de_mois_7' => '@j@ @nommois@',
103
+    'date_de_mois_8' => '@j@ @nommois@',
104
+    'date_de_mois_9' => '@j@ @nommois@',
105
+    'date_demain' => 'demain',
106
+    'date_fmt_heures_minutes' => '@h@h@m@min',
107
+    'date_fmt_heures_minutes_court' => '@h@h@m@',
108
+    'date_fmt_jour' => '@nomjour@ @jour@',
109
+    'date_fmt_jour_heure' => '@jour@ à @heure@',
110
+    'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ à @heure_fin@',
111
+    'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de @heure_debut@@dtabbr@ à @dtend@@heure_fin@@dtabbr@',
112
+    'date_fmt_jour_mois' => '@jour@ @nommois@',
113
+    'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@',
114
+    'date_fmt_mois_annee' => '@nommois@ @annee@',
115
+    'date_fmt_nomjour' => '@nomjour@ @date@',
116
+    'date_fmt_nomjour_date' => 'le @nomjour@ @date@',
117
+    'date_fmt_periode' => 'Du @date_debut@ au @date_fin@',
118
+    'date_fmt_periode_abbr' => 'Du @dtart@@date_debut@@dtabbr@ au @dtend@@date_fin@@dtabbr@',
119
+    'date_fmt_periode_from' => 'Du',
120
+    'date_fmt_periode_to' => 'au',
121
+    'date_fmt_saison_annee' => '@saison@ @annee@',
122
+    'date_heures' => 'heures',
123
+    'date_hier' => 'hier',
124
+    'date_il_y_a' => 'il y a @delai@',
125
+    'date_jnum1' => '1er',
126
+    'date_jnum10' => '10',
127
+    'date_jnum11' => '11',
128
+    'date_jnum12' => '12',
129
+    'date_jnum13' => '13',
130
+    'date_jnum14' => '14',
131
+    'date_jnum15' => '15',
132
+    'date_jnum16' => '16',
133
+    'date_jnum17' => '17',
134
+    'date_jnum18' => '18',
135
+    'date_jnum19' => '19',
136
+    'date_jnum2' => '2',
137
+    'date_jnum20' => '20',
138
+    'date_jnum21' => '21',
139
+    'date_jnum22' => '22',
140
+    'date_jnum23' => '23',
141
+    'date_jnum24' => '24',
142
+    'date_jnum25' => '25',
143
+    'date_jnum26' => '26',
144
+    'date_jnum27' => '27',
145
+    'date_jnum28' => '28',
146
+    'date_jnum29' => '29',
147
+    'date_jnum3' => '3',
148
+    'date_jnum30' => '30',
149
+    'date_jnum31' => '31',
150
+    'date_jnum4' => '4',
151
+    'date_jnum5' => '5',
152
+    'date_jnum6' => '6',
153
+    'date_jnum7' => '7',
154
+    'date_jnum8' => '8',
155
+    'date_jnum9' => '9',
156
+    'date_jour_1' => 'dimanche',
157
+    'date_jour_1_abbr' => 'dim.',
158
+    'date_jour_1_initiale' => 'd.',
159
+    'date_jour_2' => 'lundi',
160
+    'date_jour_2_abbr' => 'lun.',
161
+    'date_jour_2_initiale' => 'l.',
162
+    'date_jour_3' => 'mardi',
163
+    'date_jour_3_abbr' => 'mar.',
164
+    'date_jour_3_initiale' => 'm.',
165
+    'date_jour_4' => 'mercredi',
166
+    'date_jour_4_abbr' => 'mer.',
167
+    'date_jour_4_initiale' => 'm.',
168
+    'date_jour_5' => 'jeudi',
169
+    'date_jour_5_abbr' => 'jeu.',
170
+    'date_jour_5_initiale' => 'j.',
171
+    'date_jour_6' => 'vendredi',
172
+    'date_jour_6_abbr' => 'ven.',
173
+    'date_jour_6_initiale' => 'v.',
174
+    'date_jour_7' => 'samedi',
175
+    'date_jour_7_abbr' => 'sam.',
176
+    'date_jour_7_initiale' => 's.',
177
+    'date_jours' => 'jours',
178
+    'date_minutes' => 'minutes',
179
+    'date_mois' => 'mois',
180
+    'date_mois_1' => 'janvier',
181
+    'date_mois_10' => 'octobre',
182
+    'date_mois_10_abbr' => 'oct.',
183
+    'date_mois_11' => 'novembre',
184
+    'date_mois_11_abbr' => 'nov.',
185
+    'date_mois_12' => 'décembre',
186
+    'date_mois_12_abbr' => 'déc.',
187
+    'date_mois_1_abbr' => 'janv.',
188
+    'date_mois_2' => 'février',
189
+    'date_mois_2_abbr' => 'févr.',
190
+    'date_mois_3' => 'mars',
191
+    'date_mois_3_abbr' => 'mars',
192
+    'date_mois_4' => 'avril',
193
+    'date_mois_4_abbr' => 'avr.',
194
+    'date_mois_5' => 'mai',
195
+    'date_mois_5_abbr' => 'mai',
196
+    'date_mois_6' => 'juin',
197
+    'date_mois_6_abbr' => 'juin',
198
+    'date_mois_7' => 'juillet',
199
+    'date_mois_7_abbr' => 'juil.',
200
+    'date_mois_8' => 'août',
201
+    'date_mois_8_abbr' => 'août',
202
+    'date_mois_9' => 'septembre',
203
+    'date_mois_9_abbr' => 'sept.',
204
+    'date_saison_1' => 'hiver',
205
+    'date_saison_2' => 'printemps',
206
+    'date_saison_3' => 'été',
207
+    'date_saison_4' => 'automne',
208
+    'date_secondes' => 'secondes',
209
+    'date_semaines' => 'semaines',
210
+    'date_un_mois' => 'mois',
211
+    'date_une_heure' => 'heure',
212
+    'date_une_minute' => 'minute',
213
+    'date_une_seconde' => 'seconde',
214
+    'date_une_semaine' => 'semaine',
215
+    'dirs_commencer' => ' afin de commencer réellement l’installation',
216
+    'dirs_preliminaire' => 'Préliminaire : <b>Régler les droits d’accès</b>',
217
+    'dirs_probleme_droits' => 'Problème de droits d’accès',
218
+    'dirs_repertoires_absents' => '<p><b>Les répertoires suivants n’ont pas été trouvés :</b></p><ul>@bad_dirs@</ul>
219 219
   <p>Il est probable que cela soit dû à un problème de mauvaise mise en majuscules ou minuscules.
220 220
   Vérifiez que les minuscules et majuscules de ces répertoires concordent bien avec ce qui est affiché
221 221
   ci-dessus ; si ce n’est pas le cas, renommez les répertoires avec votre logiciel FTP de façon à corriger l’erreur.</p>
222 222
   <p>Une fois cette manipulation effectuée, vous pourrez ',
223
-	'dirs_repertoires_suivants' => '<p><b>Les répertoires suivants ne sont pas accessibles en écriture :</b></p> <ul>@bad_dirs@</ul>
223
+    'dirs_repertoires_suivants' => '<p><b>Les répertoires suivants ne sont pas accessibles en écriture :</b></p> <ul>@bad_dirs@</ul>
224 224
   <p>Pour y remédier, utilisez votre client FTP afin de régler les droits d’accès de chacun
225 225
   de ces répertoires. La procédure est expliquée en détail dans le guide d’installation.</p>
226 226
   <p>Une fois cette manipulation effectuée, vous pourrez ',
227
-	'double_occurrence' => 'Double occurrence de @balise@',
227
+    'double_occurrence' => 'Double occurrence de @balise@',
228 228
 
229
-	// E
230
-	'en_cours' => 'en cours',
231
-	'envoi_via_le_site' => 'Envoi via le site',
232
-	'erreur' => 'Erreur',
233
-	'erreur_balise_non_fermee' => 'dernière balise non refermée :',
234
-	'erreur_technique_ajaxform' => 'Oups. Une erreur inattendue a empêché de soumettre le formulaire. Vous pouvez essayer à nouveau.',
235
-	'erreur_technique_enregistrement_champs' => 'Une erreur technique a empêché l’enregistrement correct du champ @champs@.',
236
-	'erreur_technique_enregistrement_impossible' => 'Une erreur technique a empêché l’enregistrement.',
237
-	'erreur_texte' => 'erreur(s)',
238
-	'etape' => 'Étape',
229
+    // E
230
+    'en_cours' => 'en cours',
231
+    'envoi_via_le_site' => 'Envoi via le site',
232
+    'erreur' => 'Erreur',
233
+    'erreur_balise_non_fermee' => 'dernière balise non refermée :',
234
+    'erreur_technique_ajaxform' => 'Oups. Une erreur inattendue a empêché de soumettre le formulaire. Vous pouvez essayer à nouveau.',
235
+    'erreur_technique_enregistrement_champs' => 'Une erreur technique a empêché l’enregistrement correct du champ @champs@.',
236
+    'erreur_technique_enregistrement_impossible' => 'Une erreur technique a empêché l’enregistrement.',
237
+    'erreur_texte' => 'erreur(s)',
238
+    'etape' => 'Étape',
239 239
 
240
-	// F
241
-	'fichier_introuvable' => 'Fichier @fichier@ introuvable.',
242
-	'fonction_introuvable' => 'Fonction @fonction@() introuvable.',
243
-	'form_auteur_confirmation' => 'Confirmez votre adresse email',
244
-	'form_auteur_email_modifie' => 'Votre adresse email a été modifiée.',
245
-	'form_auteur_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d’être envoyé à @email@. Vous devrez visiter l’adresse Web mentionnée dans ce courrier pour valider votre adresse mail.',
246
-	'form_auteur_mail_confirmation' => 'Bonjour,
240
+    // F
241
+    'fichier_introuvable' => 'Fichier @fichier@ introuvable.',
242
+    'fonction_introuvable' => 'Fonction @fonction@() introuvable.',
243
+    'form_auteur_confirmation' => 'Confirmez votre adresse email',
244
+    'form_auteur_email_modifie' => 'Votre adresse email a été modifiée.',
245
+    'form_auteur_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d’être envoyé à @email@. Vous devrez visiter l’adresse Web mentionnée dans ce courrier pour valider votre adresse mail.',
246
+    'form_auteur_mail_confirmation' => 'Bonjour,
247 247
 
248 248
 Vous avez demandé à changer votre adresse email.
249 249
 Pour confirmer votre nouvelle adresse, il suffit de vous connecter à
@@ -252,346 +252,346 @@  discard block
 block discarded – undo
252 252
 
253 253
     @url@
254 254
 ',
255
-	'form_deja_inscrit' => 'Vous êtes déjà inscrit.',
256
-	'form_email_non_valide' => 'Votre adresse email n’est pas valide.',
257
-	'form_forum_access_refuse' => 'Vous n’avez plus accès à ce site.',
258
-	'form_forum_bonjour' => 'Bonjour @nom@,',
259
-	'form_forum_confirmer_email' => 'Pour confirmer votre adresse email, rendez-vous à cette adresse : @url_confirm@',
260
-	'form_forum_email_deja_enregistre' => 'Cette adresse email est déjà enregistrée, vous pouvez donc utiliser votre mot de passe habituel.',
261
-	'form_forum_identifiant_mail' => 'Votre nouvel identifiant vient de vous être envoyé par email.',
262
-	'form_forum_identifiants' => 'Identifiants personnels',
263
-	'form_forum_indiquer_nom_email' => 'Indiquez ici votre nom et votre adresse email. Votre identifiant personnel vous parviendra rapidement, par courrier électronique.',
264
-	'form_forum_login' => 'login :',
265
-	'form_forum_message_auto' => '(ceci est un message automatique)',
266
-	'form_forum_pass' => 'mot de passe :',
267
-	'form_forum_probleme_mail' => 'Problème de mail : l’identifiant ne peut pas être envoyé.',
268
-	'form_forum_voici1' => 'Voici vos identifiants pour pouvoir participer à la vie du site "@nom_site_spip@" (@adresse_site@) :',
269
-	'form_forum_voici2' => 'Voici vos identifiants pour proposer des articles sur
255
+    'form_deja_inscrit' => 'Vous êtes déjà inscrit.',
256
+    'form_email_non_valide' => 'Votre adresse email n’est pas valide.',
257
+    'form_forum_access_refuse' => 'Vous n’avez plus accès à ce site.',
258
+    'form_forum_bonjour' => 'Bonjour @nom@,',
259
+    'form_forum_confirmer_email' => 'Pour confirmer votre adresse email, rendez-vous à cette adresse : @url_confirm@',
260
+    'form_forum_email_deja_enregistre' => 'Cette adresse email est déjà enregistrée, vous pouvez donc utiliser votre mot de passe habituel.',
261
+    'form_forum_identifiant_mail' => 'Votre nouvel identifiant vient de vous être envoyé par email.',
262
+    'form_forum_identifiants' => 'Identifiants personnels',
263
+    'form_forum_indiquer_nom_email' => 'Indiquez ici votre nom et votre adresse email. Votre identifiant personnel vous parviendra rapidement, par courrier électronique.',
264
+    'form_forum_login' => 'login :',
265
+    'form_forum_message_auto' => '(ceci est un message automatique)',
266
+    'form_forum_pass' => 'mot de passe :',
267
+    'form_forum_probleme_mail' => 'Problème de mail : l’identifiant ne peut pas être envoyé.',
268
+    'form_forum_voici1' => 'Voici vos identifiants pour pouvoir participer à la vie du site "@nom_site_spip@" (@adresse_site@) :',
269
+    'form_forum_voici2' => 'Voici vos identifiants pour proposer des articles sur
270 270
 le site "@nom_site_spip@" (@adresse_login@) :',
271
-	'form_indiquer_email' => 'Veuillez indiquer votre adresse email.',
272
-	'form_indiquer_nom' => 'Veuillez indiquer votre nom.',
273
-	'form_indiquer_nom_site' => 'Veuillez indiquer le nom de votre site.',
274
-	'form_pet_deja_enregistre' => 'Ce site est déjà enregistré',
275
-	'form_pet_signature_pasprise' => 'Votre signature n’est pas prise en compte.',
276
-	'form_prop_confirmer_envoi' => 'Confirmer l’envoi',
277
-	'form_prop_description' => 'Description/commentaire',
278
-	'form_prop_enregistre' => 'Votre proposition est enregistrée, elle apparaîtra en ligne après validation par les responsables de ce site.',
279
-	'form_prop_envoyer' => 'Envoyer un message',
280
-	'form_prop_indiquer_email' => 'Veuillez indiquer une adresse email valide',
281
-	'form_prop_indiquer_nom_site' => 'Veuillez indiquer le nom du site.',
282
-	'form_prop_indiquer_sujet' => 'Veuillez indiquer un sujet',
283
-	'form_prop_message_envoye' => 'Message envoyé',
284
-	'form_prop_non_enregistre' => 'Votre proposition n’a pas été enregistrée.',
285
-	'form_prop_sujet' => 'Sujet',
286
-	'form_prop_url_site' => 'Adresse URL du site',
287
-	'format_date_attendu' => 'Saisir une date au format jj/mm/aaaa.',
288
-	'format_date_incorrecte' => 'La date ou son format est incorrect',
289
-	'format_heure_attendu' => 'Saisir une heure au format hh:mm.',
290
-	'format_heure_incorrecte' => 'L’heure ou son format est incorrect',
291
-	'forum_non_inscrit' => 'Vous n’êtes pas inscrit, ou l’adresse ou le mot de passe sont erronés.',
292
-	'forum_par_auteur' => 'par @auteur@',
293
-	'forum_titre_erreur' => 'Erreur...',
271
+    'form_indiquer_email' => 'Veuillez indiquer votre adresse email.',
272
+    'form_indiquer_nom' => 'Veuillez indiquer votre nom.',
273
+    'form_indiquer_nom_site' => 'Veuillez indiquer le nom de votre site.',
274
+    'form_pet_deja_enregistre' => 'Ce site est déjà enregistré',
275
+    'form_pet_signature_pasprise' => 'Votre signature n’est pas prise en compte.',
276
+    'form_prop_confirmer_envoi' => 'Confirmer l’envoi',
277
+    'form_prop_description' => 'Description/commentaire',
278
+    'form_prop_enregistre' => 'Votre proposition est enregistrée, elle apparaîtra en ligne après validation par les responsables de ce site.',
279
+    'form_prop_envoyer' => 'Envoyer un message',
280
+    'form_prop_indiquer_email' => 'Veuillez indiquer une adresse email valide',
281
+    'form_prop_indiquer_nom_site' => 'Veuillez indiquer le nom du site.',
282
+    'form_prop_indiquer_sujet' => 'Veuillez indiquer un sujet',
283
+    'form_prop_message_envoye' => 'Message envoyé',
284
+    'form_prop_non_enregistre' => 'Votre proposition n’a pas été enregistrée.',
285
+    'form_prop_sujet' => 'Sujet',
286
+    'form_prop_url_site' => 'Adresse URL du site',
287
+    'format_date_attendu' => 'Saisir une date au format jj/mm/aaaa.',
288
+    'format_date_incorrecte' => 'La date ou son format est incorrect',
289
+    'format_heure_attendu' => 'Saisir une heure au format hh:mm.',
290
+    'format_heure_incorrecte' => 'L’heure ou son format est incorrect',
291
+    'forum_non_inscrit' => 'Vous n’êtes pas inscrit, ou l’adresse ou le mot de passe sont erronés.',
292
+    'forum_par_auteur' => 'par @auteur@',
293
+    'forum_titre_erreur' => 'Erreur...',
294 294
 
295
-	// I
296
-	'ical_texte_rss_articles' => 'Le fichier « backend » des articles de ce site se trouve à l’adresse :',
297
-	'ical_texte_rss_articles2' => 'Vous pouvez également obtenir des fichiers « backend » pour les articles de chaque rubrique du site :',
298
-	'ical_texte_rss_breves' => 'Il existe de plus un fichier contenant les brèves du site. En précisant un numéro de rubrique, vous obtiendrez uniquement les brèves de cette rubrique.',
299
-	'icone_a_suivre' => 'À suivre',
300
-	'icone_admin_site' => 'Administration du site',
301
-	'icone_agenda' => 'Agenda',
302
-	'icone_aide_ligne' => 'Aide',
303
-	'icone_articles' => 'Articles',
304
-	'icone_auteurs' => 'Auteurs',
305
-	'icone_brouteur' => 'Navigation rapide',
306
-	'icone_configuration_site' => 'Configuration',
307
-	'icone_configurer_site' => 'Configurer votre site',
308
-	'icone_creer_nouvel_auteur' => 'Créer un nouvel auteur',
309
-	'icone_creer_rubrique' => 'Créer une rubrique',
310
-	'icone_creer_sous_rubrique' => 'Créer une sous-rubrique',
311
-	'icone_deconnecter' => 'Se déconnecter',
312
-	'icone_discussions' => 'Discussions',
313
-	'icone_doc_rubrique' => 'Documents des rubriques',
314
-	'icone_ecrire_article' => 'Écrire un nouvel article',
315
-	'icone_edition_site' => 'Édition',
316
-	'icone_gestion_langues' => 'Gestion des langues',
317
-	'icone_informations_personnelles' => 'Informations personnelles',
318
-	'icone_interface_complet' => 'interface complète',
319
-	'icone_interface_simple' => 'Interface simplifiée',
320
-	'icone_maintenance_site' => 'Maintenance du site',
321
-	'icone_messagerie_personnelle' => 'Messagerie personnelle',
322
-	'icone_repartition_debut' => 'Afficher la répartition depuis le début',
323
-	'icone_rubriques' => 'Rubriques',
324
-	'icone_sauver_site' => 'Sauvegarde du site',
325
-	'icone_site_entier' => 'Tout le site',
326
-	'icone_sites_references' => 'Sites référencés',
327
-	'icone_statistiques' => 'Statistiques du site',
328
-	'icone_suivi_activite' => 'Suivre la vie du site',
329
-	'icone_suivi_actualite' => 'Évolution du site',
330
-	'icone_suivi_pettions' => 'Suivre/gérer les pétitions',
331
-	'icone_suivi_revisions' => 'Modifications des articles',
332
-	'icone_supprimer_document' => 'Supprimer ce document',
333
-	'icone_supprimer_image' => 'Supprimer cette image',
334
-	'icone_tous_articles' => 'Tous vos articles',
335
-	'icone_tous_auteur' => 'Tous les auteurs',
336
-	'icone_tous_visiteur' => 'Tous les visiteurs',
337
-	'icone_visiter_site' => 'Voir le site public',
338
-	'icone_voir_en_ligne' => 'Voir en ligne',
339
-	'img_indisponible' => 'image indisponible',
340
-	'impossible' => 'impossible',
341
-	'info_a_suivre' => 'À SUIVRE »',
342
-	'info_acces_interdit' => 'Accès interdit',
343
-	'info_acces_refuse' => 'Accès refusé',
344
-	'info_action' => 'Action : @action@',
345
-	'info_administrer_rubriques' => 'Vous pouvez administrer cette rubrique et ses sous-rubriques',
346
-	'info_adresse_non_indiquee' => 'Vous n’avez pas indiqué d’adresse à tester !',
347
-	'info_aide' => 'AIDE :',
348
-	'info_ajouter_mot' => 'Ajouter ce mot',
349
-	'info_annonce' => 'ANNONCE',
350
-	'info_annonces_generales' => 'Annonces générales :',
351
-	'info_article_propose' => 'Article proposé',
352
-	'info_article_publie' => 'Article publié',
353
-	'info_article_redaction' => 'Article en cours de rédaction',
354
-	'info_article_refuse' => 'Article refusé',
355
-	'info_article_supprime' => 'Article supprimé',
356
-	'info_articles' => 'Articles',
357
-	'info_articles_a_valider' => 'Les articles à valider',
358
-	'info_articles_nb' => '@nb@ articles',
359
-	'info_articles_proposes' => 'Articles proposés',
360
-	'info_articles_un' => '1 article',
361
-	'info_auteurs_nombre' => 'auteur(s) :',
362
-	'info_authentification_ftp' => 'Authentification (par FTP).',
363
-	'info_breves_2' => 'brèves',
364
-	'info_breves_nb' => '@nb@ brèves',
365
-	'info_breves_un' => '1 brève',
366
-	'info_connexion_refusee' => 'Connexion refusée',
367
-	'info_contact_developpeur' => 'Veuillez contacter un développeur.',
368
-	'info_contenance' => 'Ce site contient :',
369
-	'info_contribution' => 'contributions',
370
-	'info_copyright' => '@spip@ est un logiciel libre distribué @lien_gpl@.',
371
-	'info_copyright_doc' => 'Pour plus d’informations, voir le site <a href="@spipnet@">@spipnet_affiche@</a>.',
372
-	'info_copyright_gpl' => 'sous licence GPL',
373
-	'info_cours_edition' => 'En cours de modification',
374
-	'info_creer_repertoire' => 'Veuillez créer un fichier ou un répertoire nommé :',
375
-	'info_creer_repertoire_2' => 'à l’intérieur du sous-répertoire <b>@repertoire@</b>, puis :',
376
-	'info_creer_vignette' => 'création automatique de la vignette',
377
-	'info_creerdansrubrique_non_autorise' => 'Vous n’avez pas de droits suffisants pour créer un contenu dans cette rubrique',
378
-	'info_deplier' => 'Déplier',
379
-	'info_descriptif_nombre' => 'descriptif(s) :',
380
-	'info_description' => 'Description :',
381
-	'info_description_2' => 'Description :',
382
-	'info_dimension' => 'Dimensions :',
383
-	'info_documents_nb' => '@nb@ documents',
384
-	'info_documents_un' => '1 document',
385
-	'info_ecire_message_prive' => 'Écrire un message privé',
386
-	'info_email_invalide' => 'Adresse email invalide.',
387
-	'info_en_cours_validation' => 'Vos articles en cours de rédaction',
388
-	'info_en_ligne' => 'Actuellement en ligne :',
389
-	'info_envoyer_message_prive' => 'Envoyer un message privé à cet auteur',
390
-	'info_erreur_requete' => 'Erreur dans la requête :',
391
-	'info_erreur_squelette2' => 'Aucun squelette <b>@fichier@</b> n’est disponible...',
392
-	'info_erreur_systeme' => 'Erreur système (errno @errsys@)',
393
-	'info_erreur_systeme2' => 'Le disque dur est peut-être plein, ou la base de données endommagée.<br />
295
+    // I
296
+    'ical_texte_rss_articles' => 'Le fichier « backend » des articles de ce site se trouve à l’adresse :',
297
+    'ical_texte_rss_articles2' => 'Vous pouvez également obtenir des fichiers « backend » pour les articles de chaque rubrique du site :',
298
+    'ical_texte_rss_breves' => 'Il existe de plus un fichier contenant les brèves du site. En précisant un numéro de rubrique, vous obtiendrez uniquement les brèves de cette rubrique.',
299
+    'icone_a_suivre' => 'À suivre',
300
+    'icone_admin_site' => 'Administration du site',
301
+    'icone_agenda' => 'Agenda',
302
+    'icone_aide_ligne' => 'Aide',
303
+    'icone_articles' => 'Articles',
304
+    'icone_auteurs' => 'Auteurs',
305
+    'icone_brouteur' => 'Navigation rapide',
306
+    'icone_configuration_site' => 'Configuration',
307
+    'icone_configurer_site' => 'Configurer votre site',
308
+    'icone_creer_nouvel_auteur' => 'Créer un nouvel auteur',
309
+    'icone_creer_rubrique' => 'Créer une rubrique',
310
+    'icone_creer_sous_rubrique' => 'Créer une sous-rubrique',
311
+    'icone_deconnecter' => 'Se déconnecter',
312
+    'icone_discussions' => 'Discussions',
313
+    'icone_doc_rubrique' => 'Documents des rubriques',
314
+    'icone_ecrire_article' => 'Écrire un nouvel article',
315
+    'icone_edition_site' => 'Édition',
316
+    'icone_gestion_langues' => 'Gestion des langues',
317
+    'icone_informations_personnelles' => 'Informations personnelles',
318
+    'icone_interface_complet' => 'interface complète',
319
+    'icone_interface_simple' => 'Interface simplifiée',
320
+    'icone_maintenance_site' => 'Maintenance du site',
321
+    'icone_messagerie_personnelle' => 'Messagerie personnelle',
322
+    'icone_repartition_debut' => 'Afficher la répartition depuis le début',
323
+    'icone_rubriques' => 'Rubriques',
324
+    'icone_sauver_site' => 'Sauvegarde du site',
325
+    'icone_site_entier' => 'Tout le site',
326
+    'icone_sites_references' => 'Sites référencés',
327
+    'icone_statistiques' => 'Statistiques du site',
328
+    'icone_suivi_activite' => 'Suivre la vie du site',
329
+    'icone_suivi_actualite' => 'Évolution du site',
330
+    'icone_suivi_pettions' => 'Suivre/gérer les pétitions',
331
+    'icone_suivi_revisions' => 'Modifications des articles',
332
+    'icone_supprimer_document' => 'Supprimer ce document',
333
+    'icone_supprimer_image' => 'Supprimer cette image',
334
+    'icone_tous_articles' => 'Tous vos articles',
335
+    'icone_tous_auteur' => 'Tous les auteurs',
336
+    'icone_tous_visiteur' => 'Tous les visiteurs',
337
+    'icone_visiter_site' => 'Voir le site public',
338
+    'icone_voir_en_ligne' => 'Voir en ligne',
339
+    'img_indisponible' => 'image indisponible',
340
+    'impossible' => 'impossible',
341
+    'info_a_suivre' => 'À SUIVRE »',
342
+    'info_acces_interdit' => 'Accès interdit',
343
+    'info_acces_refuse' => 'Accès refusé',
344
+    'info_action' => 'Action : @action@',
345
+    'info_administrer_rubriques' => 'Vous pouvez administrer cette rubrique et ses sous-rubriques',
346
+    'info_adresse_non_indiquee' => 'Vous n’avez pas indiqué d’adresse à tester !',
347
+    'info_aide' => 'AIDE :',
348
+    'info_ajouter_mot' => 'Ajouter ce mot',
349
+    'info_annonce' => 'ANNONCE',
350
+    'info_annonces_generales' => 'Annonces générales :',
351
+    'info_article_propose' => 'Article proposé',
352
+    'info_article_publie' => 'Article publié',
353
+    'info_article_redaction' => 'Article en cours de rédaction',
354
+    'info_article_refuse' => 'Article refusé',
355
+    'info_article_supprime' => 'Article supprimé',
356
+    'info_articles' => 'Articles',
357
+    'info_articles_a_valider' => 'Les articles à valider',
358
+    'info_articles_nb' => '@nb@ articles',
359
+    'info_articles_proposes' => 'Articles proposés',
360
+    'info_articles_un' => '1 article',
361
+    'info_auteurs_nombre' => 'auteur(s) :',
362
+    'info_authentification_ftp' => 'Authentification (par FTP).',
363
+    'info_breves_2' => 'brèves',
364
+    'info_breves_nb' => '@nb@ brèves',
365
+    'info_breves_un' => '1 brève',
366
+    'info_connexion_refusee' => 'Connexion refusée',
367
+    'info_contact_developpeur' => 'Veuillez contacter un développeur.',
368
+    'info_contenance' => 'Ce site contient :',
369
+    'info_contribution' => 'contributions',
370
+    'info_copyright' => '@spip@ est un logiciel libre distribué @lien_gpl@.',
371
+    'info_copyright_doc' => 'Pour plus d’informations, voir le site <a href="@spipnet@">@spipnet_affiche@</a>.',
372
+    'info_copyright_gpl' => 'sous licence GPL',
373
+    'info_cours_edition' => 'En cours de modification',
374
+    'info_creer_repertoire' => 'Veuillez créer un fichier ou un répertoire nommé :',
375
+    'info_creer_repertoire_2' => 'à l’intérieur du sous-répertoire <b>@repertoire@</b>, puis :',
376
+    'info_creer_vignette' => 'création automatique de la vignette',
377
+    'info_creerdansrubrique_non_autorise' => 'Vous n’avez pas de droits suffisants pour créer un contenu dans cette rubrique',
378
+    'info_deplier' => 'Déplier',
379
+    'info_descriptif_nombre' => 'descriptif(s) :',
380
+    'info_description' => 'Description :',
381
+    'info_description_2' => 'Description :',
382
+    'info_dimension' => 'Dimensions :',
383
+    'info_documents_nb' => '@nb@ documents',
384
+    'info_documents_un' => '1 document',
385
+    'info_ecire_message_prive' => 'Écrire un message privé',
386
+    'info_email_invalide' => 'Adresse email invalide.',
387
+    'info_en_cours_validation' => 'Vos articles en cours de rédaction',
388
+    'info_en_ligne' => 'Actuellement en ligne :',
389
+    'info_envoyer_message_prive' => 'Envoyer un message privé à cet auteur',
390
+    'info_erreur_requete' => 'Erreur dans la requête :',
391
+    'info_erreur_squelette2' => 'Aucun squelette <b>@fichier@</b> n’est disponible...',
392
+    'info_erreur_systeme' => 'Erreur système (errno @errsys@)',
393
+    'info_erreur_systeme2' => 'Le disque dur est peut-être plein, ou la base de données endommagée.<br />
394 394
 <span style="color:red;">Essayez de <a href=\'@script@\'>réparer la base</a>, ou contactez votre hébergeur.</span>',
395
-	'info_fini' => 'C’est fini !',
396
-	'info_format_image' => 'Formats d’images pouvant être utilisées pour créer des vignettes : @gd_formats@.',
397
-	'info_format_non_defini' => 'format non défini',
398
-	'info_grand_ecran' => 'Grand écran',
399
-	'info_image_aide' => 'AIDE',
400
-	'info_image_process_titre' => 'Méthode de fabrication des vignettes',
401
-	'info_impossible_lire_page' => '<b>Erreur !</b> Impossible de lire la page <tt><html>@test_proxy@</html></tt> à travers le proxy ',
402
-	'info_installation_systeme_publication' => 'Installation du système de publication...',
403
-	'info_installer_documents' => 'Vous pouvez installer automatiquement tous les documents contenus dans le dossier @upload@.',
404
-	'info_installer_ftp' => 'En tant qu’administrateur, vous pouvez installer (par FTP) des fichiers dans le dossier @upload@ pour ensuite les sélectionner directement ici.',
405
-	'info_installer_images' => 'Vous pouvez installer des images aux formats JPEG, GIF et PNG.',
406
-	'info_installer_images_dossier' => 'Installer des images dans le dossier @upload@ pour pouvoir les sélectionner ici.',
407
-	'info_interface_complete' => 'interface complète',
408
-	'info_interface_simple' => 'Interface simplifiée',
409
-	'info_joindre_document_article' => 'Vous pouvez joindre à cet article des documents de type',
410
-	'info_joindre_document_rubrique' => 'Vous pouvez ajouter dans cette rubrique des documents de type',
411
-	'info_joindre_documents_article' => 'Vous pouvez joindre à votre article des documents de type :',
412
-	'info_l_article' => 'l’article',
413
-	'info_la_breve' => 'la brève',
414
-	'info_la_rubrique' => 'la rubrique',
415
-	'info_langue_principale' => 'Langue principale du site',
416
-	'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels',
417
-	'info_les_auteurs_1' => 'par @les_auteurs@',
418
-	'info_logo_format_interdit' => 'Seuls les logos aux formats @formats@ sont autorisés.',
419
-	'info_logo_max_poids' => 'Les logos doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).',
420
-	'info_mail_fournisseur' => '[email protected]',
421
-	'info_message_2' => 'MESSAGE',
422
-	'info_message_supprime' => 'MESSAGE SUPPRIMÉ',
423
-	'info_messages_nb' => '@nb@ messages',
424
-	'info_messages_un' => '1 message',
425
-	'info_mise_en_ligne' => 'Date de mise en ligne :',
426
-	'info_modification_parametres_securite' => 'modifications des paramètres de sécurité',
427
-	'info_mois_courant' => 'Dans le courant du mois :',
428
-	'info_mot_cle_ajoute' => 'Le mot-clé suivant a été ajouté à',
429
-	'info_multi_herit' => 'Langue par défaut',
430
-	'info_multi_langues_soulignees' => 'Les <u>langues soulignées</u> bénéficient d’une traduction totale ou partielle des textes de l’interface. Si vous sélectionnez ces langues, de nombreux éléments du site public (dates, formulaires) seront automatiquement traduits. Pour les langues non soulignées, ces éléments apparaîtront dans la langue principale du site.',
431
-	'info_multilinguisme' => 'Multilinguisme',
432
-	'info_nom_non_utilisateurs_connectes' => 'Votre nom n’apparaît pas dans la liste des utilisateurs connectés.',
433
-	'info_nom_utilisateurs_connectes' => 'Votre nom apparaît dans la liste des utilisateurs connectés.',
434
-	'info_nombre_en_ligne' => 'Actuellement en ligne :',
435
-	'info_non_resultat' => 'Aucun résultat pour "@cherche_mot@"',
436
-	'info_non_utilisation_messagerie' => 'Vous n’utilisez pas la messagerie interne de ce site.',
437
-	'info_nouveau_message' => 'VOUS AVEZ UN NOUVEAU MESSAGE',
438
-	'info_nouveaux_messages' => 'VOUS AVEZ @total_messages@ NOUVEAUX MESSAGES',
439
-	'info_numero_abbreviation' => 'N° ',
440
-	'info_obligatoire' => 'Cette information est obligatoire',
441
-	'info_page_actuelle' => 'Page actuelle',
442
-	'info_pense_bete' => 'PENSE-BÊTE',
443
-	'info_petit_ecran' => 'Petit écran',
444
-	'info_petition_close' => 'Pétition close',
445
-	'info_pixels' => 'pixels',
446
-	'info_plusieurs_mots_trouves' => 'Plusieurs mots-clés trouvés pour "@cherche_mot@" :',
447
-	'info_portfolio_automatique' => 'Portfolio automatique :',
448
-	'info_premier_resultat' => '[@debut_limit@ premiers résultats sur @total@]',
449
-	'info_premier_resultat_sur' => '[@debut_limit@ premiers résultats sur @total@]',
450
-	'info_propose_1' => '[@nom_site_spip@] Propose : @titre@',
451
-	'info_propose_2' => 'Article proposé
395
+    'info_fini' => 'C’est fini !',
396
+    'info_format_image' => 'Formats d’images pouvant être utilisées pour créer des vignettes : @gd_formats@.',
397
+    'info_format_non_defini' => 'format non défini',
398
+    'info_grand_ecran' => 'Grand écran',
399
+    'info_image_aide' => 'AIDE',
400
+    'info_image_process_titre' => 'Méthode de fabrication des vignettes',
401
+    'info_impossible_lire_page' => '<b>Erreur !</b> Impossible de lire la page <tt><html>@test_proxy@</html></tt> à travers le proxy ',
402
+    'info_installation_systeme_publication' => 'Installation du système de publication...',
403
+    'info_installer_documents' => 'Vous pouvez installer automatiquement tous les documents contenus dans le dossier @upload@.',
404
+    'info_installer_ftp' => 'En tant qu’administrateur, vous pouvez installer (par FTP) des fichiers dans le dossier @upload@ pour ensuite les sélectionner directement ici.',
405
+    'info_installer_images' => 'Vous pouvez installer des images aux formats JPEG, GIF et PNG.',
406
+    'info_installer_images_dossier' => 'Installer des images dans le dossier @upload@ pour pouvoir les sélectionner ici.',
407
+    'info_interface_complete' => 'interface complète',
408
+    'info_interface_simple' => 'Interface simplifiée',
409
+    'info_joindre_document_article' => 'Vous pouvez joindre à cet article des documents de type',
410
+    'info_joindre_document_rubrique' => 'Vous pouvez ajouter dans cette rubrique des documents de type',
411
+    'info_joindre_documents_article' => 'Vous pouvez joindre à votre article des documents de type :',
412
+    'info_l_article' => 'l’article',
413
+    'info_la_breve' => 'la brève',
414
+    'info_la_rubrique' => 'la rubrique',
415
+    'info_langue_principale' => 'Langue principale du site',
416
+    'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels',
417
+    'info_les_auteurs_1' => 'par @les_auteurs@',
418
+    'info_logo_format_interdit' => 'Seuls les logos aux formats @formats@ sont autorisés.',
419
+    'info_logo_max_poids' => 'Les logos doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).',
420
+    'info_mail_fournisseur' => '[email protected]',
421
+    'info_message_2' => 'MESSAGE',
422
+    'info_message_supprime' => 'MESSAGE SUPPRIMÉ',
423
+    'info_messages_nb' => '@nb@ messages',
424
+    'info_messages_un' => '1 message',
425
+    'info_mise_en_ligne' => 'Date de mise en ligne :',
426
+    'info_modification_parametres_securite' => 'modifications des paramètres de sécurité',
427
+    'info_mois_courant' => 'Dans le courant du mois :',
428
+    'info_mot_cle_ajoute' => 'Le mot-clé suivant a été ajouté à',
429
+    'info_multi_herit' => 'Langue par défaut',
430
+    'info_multi_langues_soulignees' => 'Les <u>langues soulignées</u> bénéficient d’une traduction totale ou partielle des textes de l’interface. Si vous sélectionnez ces langues, de nombreux éléments du site public (dates, formulaires) seront automatiquement traduits. Pour les langues non soulignées, ces éléments apparaîtront dans la langue principale du site.',
431
+    'info_multilinguisme' => 'Multilinguisme',
432
+    'info_nom_non_utilisateurs_connectes' => 'Votre nom n’apparaît pas dans la liste des utilisateurs connectés.',
433
+    'info_nom_utilisateurs_connectes' => 'Votre nom apparaît dans la liste des utilisateurs connectés.',
434
+    'info_nombre_en_ligne' => 'Actuellement en ligne :',
435
+    'info_non_resultat' => 'Aucun résultat pour "@cherche_mot@"',
436
+    'info_non_utilisation_messagerie' => 'Vous n’utilisez pas la messagerie interne de ce site.',
437
+    'info_nouveau_message' => 'VOUS AVEZ UN NOUVEAU MESSAGE',
438
+    'info_nouveaux_messages' => 'VOUS AVEZ @total_messages@ NOUVEAUX MESSAGES',
439
+    'info_numero_abbreviation' => 'N° ',
440
+    'info_obligatoire' => 'Cette information est obligatoire',
441
+    'info_page_actuelle' => 'Page actuelle',
442
+    'info_pense_bete' => 'PENSE-BÊTE',
443
+    'info_petit_ecran' => 'Petit écran',
444
+    'info_petition_close' => 'Pétition close',
445
+    'info_pixels' => 'pixels',
446
+    'info_plusieurs_mots_trouves' => 'Plusieurs mots-clés trouvés pour "@cherche_mot@" :',
447
+    'info_portfolio_automatique' => 'Portfolio automatique :',
448
+    'info_premier_resultat' => '[@debut_limit@ premiers résultats sur @total@]',
449
+    'info_premier_resultat_sur' => '[@debut_limit@ premiers résultats sur @total@]',
450
+    'info_propose_1' => '[@nom_site_spip@] Propose : @titre@',
451
+    'info_propose_2' => 'Article proposé
452 452
 ---------------',
453
-	'info_propose_3' => 'L’article "@titre@" est proposé à la publication.',
454
-	'info_propose_4' => 'Vous êtes invité à venir le consulter et à donner votre opinion',
455
-	'info_propose_5' => 'dans le forum qui lui est attaché. Il est disponible à l’adresse :',
456
-	'info_publie_01' => 'L’article "@titre@" a été validé par @connect_nom@.',
457
-	'info_publie_1' => '[@nom_site_spip@] PUBLIE : @titre@',
458
-	'info_publie_2' => 'Article publié
453
+    'info_propose_3' => 'L’article "@titre@" est proposé à la publication.',
454
+    'info_propose_4' => 'Vous êtes invité à venir le consulter et à donner votre opinion',
455
+    'info_propose_5' => 'dans le forum qui lui est attaché. Il est disponible à l’adresse :',
456
+    'info_publie_01' => 'L’article "@titre@" a été validé par @connect_nom@.',
457
+    'info_publie_1' => '[@nom_site_spip@] PUBLIE : @titre@',
458
+    'info_publie_2' => 'Article publié
459 459
 --------------',
460
-	'info_rechercher' => 'Rechercher',
461
-	'info_rechercher_02' => 'Rechercher :',
462
-	'info_remplacer_vignette' => 'Remplacer la vignette par défaut par un logo personnalisé :',
463
-	'info_rubriques_nb' => '@nb@ rubriques',
464
-	'info_rubriques_un' => '1 rubrique',
465
-	'info_sans_titre_2' => 'sans titre',
466
-	'info_selectionner_fichier' => 'Vous pouvez sélectionner un fichier du dossier @upload@',
467
-	'info_selectionner_fichier_2' => 'Sélectionner un fichier :',
468
-	'info_sites_nb' => '@nb@ sites',
469
-	'info_sites_un' => '1 site',
470
-	'info_supprimer_vignette' => 'supprimer la vignette',
471
-	'info_symbole_bleu' => 'Le symbole <b>bleu</b> indique un <b>pense-bête</b> : c’est-à-dire un message à votre usage personnel.',
472
-	'info_symbole_jaune' => 'Le symbole <b>jaune</b> indique une <b>annonce à tous les rédacteurs</b> : modifiable par tous les administrateurs, et visible par tous les rédacteurs.',
473
-	'info_symbole_vert' => 'Le symbole <b>vert</b> indique les <b>messages échangés avec d’autres utilisateurs</b> du site.',
474
-	'info_telecharger_nouveau_logo' => 'Télécharger un nouveau logo :',
475
-	'info_telecharger_ordinateur' => 'Télécharger depuis votre ordinateur :',
476
-	'info_tous_resultats_enregistres' => '[tous les résultats sont enregistrés]',
477
-	'info_tout_afficher' => 'Tout afficher',
478
-	'info_travaux_texte' => 'Ce site n’est pas encore configuré. Revenez plus tard...',
479
-	'info_travaux_titre' => 'Site en travaux',
480
-	'info_trop_resultat' => 'Trop de résultats pour "@cherche_mot@" ; veuillez affiner la recherche.',
481
-	'info_utilisation_messagerie_interne' => 'Vous utilisez la messagerie interne de ce site.',
482
-	'info_valider_lien' => 'valider ce lien',
483
-	'info_verifier_image' => ', veuillez vérifier que vos images ont été transférées correctement.',
484
-	'info_vignette_defaut' => 'Vignette par défaut',
485
-	'info_vignette_personnalisee' => 'Vignette personnalisée',
486
-	'info_visite' => 'visite :',
487
-	'info_vos_rendez_vous' => 'Vos rendez-vous à venir',
488
-	'infos_vos_pense_bete' => 'Vos pense-bêtes',
460
+    'info_rechercher' => 'Rechercher',
461
+    'info_rechercher_02' => 'Rechercher :',
462
+    'info_remplacer_vignette' => 'Remplacer la vignette par défaut par un logo personnalisé :',
463
+    'info_rubriques_nb' => '@nb@ rubriques',
464
+    'info_rubriques_un' => '1 rubrique',
465
+    'info_sans_titre_2' => 'sans titre',
466
+    'info_selectionner_fichier' => 'Vous pouvez sélectionner un fichier du dossier @upload@',
467
+    'info_selectionner_fichier_2' => 'Sélectionner un fichier :',
468
+    'info_sites_nb' => '@nb@ sites',
469
+    'info_sites_un' => '1 site',
470
+    'info_supprimer_vignette' => 'supprimer la vignette',
471
+    'info_symbole_bleu' => 'Le symbole <b>bleu</b> indique un <b>pense-bête</b> : c’est-à-dire un message à votre usage personnel.',
472
+    'info_symbole_jaune' => 'Le symbole <b>jaune</b> indique une <b>annonce à tous les rédacteurs</b> : modifiable par tous les administrateurs, et visible par tous les rédacteurs.',
473
+    'info_symbole_vert' => 'Le symbole <b>vert</b> indique les <b>messages échangés avec d’autres utilisateurs</b> du site.',
474
+    'info_telecharger_nouveau_logo' => 'Télécharger un nouveau logo :',
475
+    'info_telecharger_ordinateur' => 'Télécharger depuis votre ordinateur :',
476
+    'info_tous_resultats_enregistres' => '[tous les résultats sont enregistrés]',
477
+    'info_tout_afficher' => 'Tout afficher',
478
+    'info_travaux_texte' => 'Ce site n’est pas encore configuré. Revenez plus tard...',
479
+    'info_travaux_titre' => 'Site en travaux',
480
+    'info_trop_resultat' => 'Trop de résultats pour "@cherche_mot@" ; veuillez affiner la recherche.',
481
+    'info_utilisation_messagerie_interne' => 'Vous utilisez la messagerie interne de ce site.',
482
+    'info_valider_lien' => 'valider ce lien',
483
+    'info_verifier_image' => ', veuillez vérifier que vos images ont été transférées correctement.',
484
+    'info_vignette_defaut' => 'Vignette par défaut',
485
+    'info_vignette_personnalisee' => 'Vignette personnalisée',
486
+    'info_visite' => 'visite :',
487
+    'info_vos_rendez_vous' => 'Vos rendez-vous à venir',
488
+    'infos_vos_pense_bete' => 'Vos pense-bêtes',
489 489
 
490
-	// L
491
-	'label_ajout_id_rapide' => 'Ajout rapide',
492
-	'label_poids_fichier' => 'Taille',
493
-	'label_ponctuer' => '@label@ :',
494
-	'lien_afficher_icones_seuls' => 'Afficher uniquement les icones',
495
-	'lien_afficher_texte_icones' => 'Afficher les icones et le texte',
496
-	'lien_afficher_texte_seul' => 'Afficher uniquement le texte',
497
-	'lien_aller_a_la_derniere_page' => 'Aller à la dernière page',
498
-	'lien_aller_a_la_page_nb' => 'Aller à la page @nb@',
499
-	'lien_aller_a_la_page_precedente' => 'Aller à la page précédente',
500
-	'lien_aller_a_la_page_suivante' => 'Aller à la page suivante',
501
-	'lien_aller_a_la_premiere_page' => 'Aller à la première page',
502
-	'lien_liberer' => 'libérer',
503
-	'lien_liberer_tous' => 'Tout libérer',
504
-	'lien_nouvea_pense_bete' => 'NOUVEAU PENSE-BÊTE',
505
-	'lien_nouveau_message' => 'NOUVEAU MESSAGE',
506
-	'lien_nouvelle_annonce' => 'NOUVELLE ANNONCE',
507
-	'lien_petitions' => 'PÉTITION',
508
-	'lien_popularite' => 'popularité : @popularite@%',
509
-	'lien_racine_site' => 'RACINE DU SITE',
510
-	'lien_reessayer' => 'réessayer',
511
-	'lien_repondre_message' => 'Répondre à ce message',
512
-	'lien_supprimer' => 'supprimer',
513
-	'lien_tout_afficher' => 'Tout afficher',
514
-	'lien_visite_site' => 'visiter ce site',
515
-	'lien_visites' => '@visites@ visites',
516
-	'lien_voir_auteur' => 'Voir cet auteur',
517
-	'ligne' => 'Ligne',
518
-	'login' => 'Connexion',
519
-	'login_acces_prive' => 'accès à l’espace privé',
520
-	'login_autre_identifiant' => 'se connecter sous un autre identifiant',
521
-	'login_cookie_accepte' => 'Veuillez régler votre navigateur pour qu’il les accepte (au moins pour ce site).',
522
-	'login_cookie_oblige' => 'Pour vous identifier de façon sûre sur ce site, vous devez accepter les cookies.',
523
-	'login_deconnexion_ok' => 'Déconnexion effectuée.',
524
-	'login_erreur_pass' => 'Erreur de mot de passe.',
525
-	'login_espace_prive' => 'espace privé',
526
-	'login_identifiant_inconnu' => 'L’identifiant « @login@ » est inconnu.',
527
-	'login_login' => 'Login :',
528
-	'login_login2' => 'Login ou adresse email :',
529
-	'login_login_pass_incorrect' => '(Login ou mot de passe incorrect.)',
530
-	'login_motpasseoublie' => 'mot de passe oublié ?',
531
-	'login_non_securise' => 'Attention, ce formulaire n’est pas sécurisé.
490
+    // L
491
+    'label_ajout_id_rapide' => 'Ajout rapide',
492
+    'label_poids_fichier' => 'Taille',
493
+    'label_ponctuer' => '@label@ :',
494
+    'lien_afficher_icones_seuls' => 'Afficher uniquement les icones',
495
+    'lien_afficher_texte_icones' => 'Afficher les icones et le texte',
496
+    'lien_afficher_texte_seul' => 'Afficher uniquement le texte',
497
+    'lien_aller_a_la_derniere_page' => 'Aller à la dernière page',
498
+    'lien_aller_a_la_page_nb' => 'Aller à la page @nb@',
499
+    'lien_aller_a_la_page_precedente' => 'Aller à la page précédente',
500
+    'lien_aller_a_la_page_suivante' => 'Aller à la page suivante',
501
+    'lien_aller_a_la_premiere_page' => 'Aller à la première page',
502
+    'lien_liberer' => 'libérer',
503
+    'lien_liberer_tous' => 'Tout libérer',
504
+    'lien_nouvea_pense_bete' => 'NOUVEAU PENSE-BÊTE',
505
+    'lien_nouveau_message' => 'NOUVEAU MESSAGE',
506
+    'lien_nouvelle_annonce' => 'NOUVELLE ANNONCE',
507
+    'lien_petitions' => 'PÉTITION',
508
+    'lien_popularite' => 'popularité : @popularite@%',
509
+    'lien_racine_site' => 'RACINE DU SITE',
510
+    'lien_reessayer' => 'réessayer',
511
+    'lien_repondre_message' => 'Répondre à ce message',
512
+    'lien_supprimer' => 'supprimer',
513
+    'lien_tout_afficher' => 'Tout afficher',
514
+    'lien_visite_site' => 'visiter ce site',
515
+    'lien_visites' => '@visites@ visites',
516
+    'lien_voir_auteur' => 'Voir cet auteur',
517
+    'ligne' => 'Ligne',
518
+    'login' => 'Connexion',
519
+    'login_acces_prive' => 'accès à l’espace privé',
520
+    'login_autre_identifiant' => 'se connecter sous un autre identifiant',
521
+    'login_cookie_accepte' => 'Veuillez régler votre navigateur pour qu’il les accepte (au moins pour ce site).',
522
+    'login_cookie_oblige' => 'Pour vous identifier de façon sûre sur ce site, vous devez accepter les cookies.',
523
+    'login_deconnexion_ok' => 'Déconnexion effectuée.',
524
+    'login_erreur_pass' => 'Erreur de mot de passe.',
525
+    'login_espace_prive' => 'espace privé',
526
+    'login_identifiant_inconnu' => 'L’identifiant « @login@ » est inconnu.',
527
+    'login_login' => 'Login :',
528
+    'login_login2' => 'Login ou adresse email :',
529
+    'login_login_pass_incorrect' => '(Login ou mot de passe incorrect.)',
530
+    'login_motpasseoublie' => 'mot de passe oublié ?',
531
+    'login_non_securise' => 'Attention, ce formulaire n’est pas sécurisé.
532 532
 			Si vous ne voulez pas que votre mot de passe puisse être
533 533
 			intercepté sur le réseau, veuillez activer Javascript
534 534
 			dans votre navigateur et',
535
-	'login_nouvelle_tentative' => 'Nouvelle tentative',
536
-	'login_par_ici' => 'Vous êtes enregistré... par ici...',
537
-	'login_pass2' => 'Mot de passe :',
538
-	'login_preferez_refuser' => '<b>Si vous préférez refuser les cookies</b>, une autre méthode de connexion (moins sécurisée) est à votre disposition :',
539
-	'login_recharger' => 'recharger cette page',
540
-	'login_rester_identifie' => 'Se souvenir de moi',
541
-	'login_retour_public' => 'Retour au site public',
542
-	'login_retour_site' => 'Retour au site public',
543
-	'login_retoursitepublic' => 'retour au site public',
544
-	'login_sans_cookie' => 'Identification sans cookie',
545
-	'login_securise' => 'Login sécurisé',
546
-	'login_sinscrire' => 's’inscrire',
547
-	'login_test_navigateur' => 'test navigateur/reconnexion',
548
-	'login_verifiez_navigateur' => '(Vérifiez toutefois que votre navigateur n’a pas mémorisé votre mot de passe...)',
535
+    'login_nouvelle_tentative' => 'Nouvelle tentative',
536
+    'login_par_ici' => 'Vous êtes enregistré... par ici...',
537
+    'login_pass2' => 'Mot de passe :',
538
+    'login_preferez_refuser' => '<b>Si vous préférez refuser les cookies</b>, une autre méthode de connexion (moins sécurisée) est à votre disposition :',
539
+    'login_recharger' => 'recharger cette page',
540
+    'login_rester_identifie' => 'Se souvenir de moi',
541
+    'login_retour_public' => 'Retour au site public',
542
+    'login_retour_site' => 'Retour au site public',
543
+    'login_retoursitepublic' => 'retour au site public',
544
+    'login_sans_cookie' => 'Identification sans cookie',
545
+    'login_securise' => 'Login sécurisé',
546
+    'login_sinscrire' => 's’inscrire',
547
+    'login_test_navigateur' => 'test navigateur/reconnexion',
548
+    'login_verifiez_navigateur' => '(Vérifiez toutefois que votre navigateur n’a pas mémorisé votre mot de passe...)',
549 549
 
550
-	// M
551
-	'masquer_colonne' => 'Masquer cette colonne',
552
-	'masquer_trad' => 'masquer les traductions',
553
-	'message_nouveaux_identifiants_echec' => 'Impossible de générer de nouveaux identifiants.',
554
-	'message_nouveaux_identifiants_echec_envoi' => 'Les nouveaux identifiants de connexion n’ont pas pu être envoyés.',
555
-	'message_nouveaux_identifiants_ok' => 'Les nouveaux identifiants de connexion ont été envoyés à @email@.',
556
-	'module_fichiers_langues' => 'Fichiers de langue',
550
+    // M
551
+    'masquer_colonne' => 'Masquer cette colonne',
552
+    'masquer_trad' => 'masquer les traductions',
553
+    'message_nouveaux_identifiants_echec' => 'Impossible de générer de nouveaux identifiants.',
554
+    'message_nouveaux_identifiants_echec_envoi' => 'Les nouveaux identifiants de connexion n’ont pas pu être envoyés.',
555
+    'message_nouveaux_identifiants_ok' => 'Les nouveaux identifiants de connexion ont été envoyés à @email@.',
556
+    'module_fichiers_langues' => 'Fichiers de langue',
557 557
 
558
-	// N
559
-	'navigateur_pas_redirige' => 'Si votre navigateur n’est pas redirigé, cliquez ici pour continuer.',
560
-	'numero' => 'Numéro',
558
+    // N
559
+    'navigateur_pas_redirige' => 'Si votre navigateur n’est pas redirigé, cliquez ici pour continuer.',
560
+    'numero' => 'Numéro',
561 561
 
562
-	// O
563
-	'occurence' => 'Occurrence',
564
-	'onglet_affacer_base' => 'Effacer la base',
565
-	'onglet_auteur' => 'L’auteur',
566
-	'onglet_contenu_site' => 'Contenu du site',
567
-	'onglet_evolution_visite_mod' => 'Évolution',
568
-	'onglet_fonctions_avances' => 'Fonctions avancées',
569
-	'onglet_informations_personnelles' => 'Informations personnelles',
570
-	'onglet_interactivite' => 'Interactivité',
571
-	'onglet_messagerie' => 'Messagerie',
572
-	'onglet_repartition_rubrique' => 'Répartition par rubriques',
573
-	'onglet_save_restaur_base' => 'Sauvegarder/restaurer la base',
574
-	'onglet_vider_cache' => 'Vider le cache',
562
+    // O
563
+    'occurence' => 'Occurrence',
564
+    'onglet_affacer_base' => 'Effacer la base',
565
+    'onglet_auteur' => 'L’auteur',
566
+    'onglet_contenu_site' => 'Contenu du site',
567
+    'onglet_evolution_visite_mod' => 'Évolution',
568
+    'onglet_fonctions_avances' => 'Fonctions avancées',
569
+    'onglet_informations_personnelles' => 'Informations personnelles',
570
+    'onglet_interactivite' => 'Interactivité',
571
+    'onglet_messagerie' => 'Messagerie',
572
+    'onglet_repartition_rubrique' => 'Répartition par rubriques',
573
+    'onglet_save_restaur_base' => 'Sauvegarder/restaurer la base',
574
+    'onglet_vider_cache' => 'Vider le cache',
575 575
 
576
-	// P
577
-	'pass_choix_pass' => 'Veuillez choisir votre nouveau mot de passe :',
578
-	'pass_erreur' => 'Erreur',
579
-	'pass_erreur_acces_refuse' => '<b>Erreur :</b> vous n’avez plus accès à ce site.',
580
-	'pass_erreur_code_inconnu' => '<b>Erreur :</b> ce code ne correspond à aucun des visiteurs ayant accès à ce site.',
581
-	'pass_erreur_non_enregistre' => '<b>Erreur :</b> l’adresse <tt>@email_oubli@</tt> n’est pas enregistrée sur ce site.',
582
-	'pass_erreur_non_valide' => '<b>Erreur :</b> cet email <tt>@email_oubli@</tt> n’est pas valide !',
583
-	'pass_erreur_probleme_technique' => '<b>Erreur :</b> à cause d’un problème technique, l’email ne peut pas être envoyé.',
584
-	'pass_espace_prive_bla' => 'L’espace privé de ce site est ouvert aux
576
+    // P
577
+    'pass_choix_pass' => 'Veuillez choisir votre nouveau mot de passe :',
578
+    'pass_erreur' => 'Erreur',
579
+    'pass_erreur_acces_refuse' => '<b>Erreur :</b> vous n’avez plus accès à ce site.',
580
+    'pass_erreur_code_inconnu' => '<b>Erreur :</b> ce code ne correspond à aucun des visiteurs ayant accès à ce site.',
581
+    'pass_erreur_non_enregistre' => '<b>Erreur :</b> l’adresse <tt>@email_oubli@</tt> n’est pas enregistrée sur ce site.',
582
+    'pass_erreur_non_valide' => '<b>Erreur :</b> cet email <tt>@email_oubli@</tt> n’est pas valide !',
583
+    'pass_erreur_probleme_technique' => '<b>Erreur :</b> à cause d’un problème technique, l’email ne peut pas être envoyé.',
584
+    'pass_espace_prive_bla' => 'L’espace privé de ce site est ouvert aux
585 585
 		visiteurs, après inscription. Une fois enregistré,
586 586
 		vous pourrez consulter les articles en cours de rédaction,
587 587
 		proposer des articles et participer à tous les forums.',
588
-	'pass_forum_bla' => 'Vous avez demandé à intervenir sur un forum
588
+    'pass_forum_bla' => 'Vous avez demandé à intervenir sur un forum
589 589
 		réservé aux visiteurs enregistrés.',
590
-	'pass_indiquez_cidessous' => 'Indiquez ci-dessous l’adresse email sous laquelle vous
590
+    'pass_indiquez_cidessous' => 'Indiquez ci-dessous l’adresse email sous laquelle vous
591 591
 			vous êtes précédemment enregistré. Vous
592 592
 			recevrez un email vous indiquant la marche à suivre pour
593 593
 			récupérer votre accès.',
594
-	'pass_mail_passcookie' => '(ceci est un message automatique)
594
+    'pass_mail_passcookie' => '(ceci est un message automatique)
595 595
 Pour retrouver votre accès au site
596 596
 @nom_site_spip@ (@adresse_site@)
597 597
 
@@ -603,146 +603,146 @@  discard block
 block discarded – undo
603 603
 et vous reconnecter au site.
604 604
 
605 605
 ',
606
-	'pass_mot_oublie' => 'Mot de passe oublié',
607
-	'pass_nouveau_enregistre' => 'Votre nouveau mot de passe a été enregistré.',
608
-	'pass_nouveau_pass' => 'Nouveau mot de passe',
609
-	'pass_ok' => 'OK',
610
-	'pass_oubli_mot' => 'Oubli du mot de passe',
611
-	'pass_procedure_changer' => 'Pour modifier votre mot de passe, merci d’indiquer l’adresse email associée à votre compte.',
612
-	'pass_quitter_fenetre' => 'Quitter cette fenêtre',
613
-	'pass_rappel_login' => 'Rappel : votre identifiant (login) est « @login@ ».',
614
-	'pass_recevoir_mail' => 'Un lien de réinitialisation de votre mot de passe vous a été envoyé sur votre adresse email (si celle-ci est valide).',
615
-	'pass_retour_public' => 'Retour sur le site public',
616
-	'pass_rien_a_faire_ici' => 'Rien à faire ici.',
617
-	'pass_vousinscrire' => 'Vous inscrire sur ce site',
618
-	'precedent' => 'précédent',
619
-	'previsualisation' => 'Prévisualisation',
620
-	'previsualiser' => 'Prévisualiser',
606
+    'pass_mot_oublie' => 'Mot de passe oublié',
607
+    'pass_nouveau_enregistre' => 'Votre nouveau mot de passe a été enregistré.',
608
+    'pass_nouveau_pass' => 'Nouveau mot de passe',
609
+    'pass_ok' => 'OK',
610
+    'pass_oubli_mot' => 'Oubli du mot de passe',
611
+    'pass_procedure_changer' => 'Pour modifier votre mot de passe, merci d’indiquer l’adresse email associée à votre compte.',
612
+    'pass_quitter_fenetre' => 'Quitter cette fenêtre',
613
+    'pass_rappel_login' => 'Rappel : votre identifiant (login) est « @login@ ».',
614
+    'pass_recevoir_mail' => 'Un lien de réinitialisation de votre mot de passe vous a été envoyé sur votre adresse email (si celle-ci est valide).',
615
+    'pass_retour_public' => 'Retour sur le site public',
616
+    'pass_rien_a_faire_ici' => 'Rien à faire ici.',
617
+    'pass_vousinscrire' => 'Vous inscrire sur ce site',
618
+    'precedent' => 'précédent',
619
+    'previsualisation' => 'Prévisualisation',
620
+    'previsualiser' => 'Prévisualiser',
621 621
 
622
-	// R
623
-	'retour' => 'Retour',
622
+    // R
623
+    'retour' => 'Retour',
624 624
 
625
-	// S
626
-	'spip_conforme_dtd' => 'SPIP considère ce document comme conforme à son DOCTYPE :',
627
-	'squelette' => 'squelette',
628
-	'squelette_inclus_ligne' => 'squelette inclus, ligne',
629
-	'squelette_ligne' => 'squelette, ligne',
630
-	'stats_visites_et_popularite' => '@visites@ visites ; popularité : @popularite@',
631
-	'suivant' => 'suivant',
625
+    // S
626
+    'spip_conforme_dtd' => 'SPIP considère ce document comme conforme à son DOCTYPE :',
627
+    'squelette' => 'squelette',
628
+    'squelette_inclus_ligne' => 'squelette inclus, ligne',
629
+    'squelette_ligne' => 'squelette, ligne',
630
+    'stats_visites_et_popularite' => '@visites@ visites ; popularité : @popularite@',
631
+    'suivant' => 'suivant',
632 632
 
633
-	// T
634
-	'taille_go' => '@taille@ Go',
635
-	'taille_ko' => '@taille@ ko',
636
-	'taille_mo' => '@taille@ Mo',
637
-	'taille_octets' => '@taille@ octets',
638
-	'texte_actualite_site_1' => 'Quand vous serez familiarisé(e) avec l’interface, vous pourrez cliquer sur « ',
639
-	'texte_actualite_site_2' => 'interface complète',
640
-	'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.',
641
-	'texte_creation_automatique_vignette' => 'La création automatique de vignettes de prévisualisation est activée sur ce site. Si vous installez à partir de ce formulaire des images au(x) format(s) @gd_formats@, elles seront accompagnées d’une vignette d’une taille maximale de @taille_preview@ pixels.',
642
-	'texte_documents_associes' => 'Les documents suivants sont associés à l’article,
633
+    // T
634
+    'taille_go' => '@taille@ Go',
635
+    'taille_ko' => '@taille@ ko',
636
+    'taille_mo' => '@taille@ Mo',
637
+    'taille_octets' => '@taille@ octets',
638
+    'texte_actualite_site_1' => 'Quand vous serez familiarisé(e) avec l’interface, vous pourrez cliquer sur « ',
639
+    'texte_actualite_site_2' => 'interface complète',
640
+    'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.',
641
+    'texte_creation_automatique_vignette' => 'La création automatique de vignettes de prévisualisation est activée sur ce site. Si vous installez à partir de ce formulaire des images au(x) format(s) @gd_formats@, elles seront accompagnées d’une vignette d’une taille maximale de @taille_preview@ pixels.',
642
+    'texte_documents_associes' => 'Les documents suivants sont associés à l’article,
643 643
 				mais ils n’y ont pas été directement
644 644
 				insérés. Selon la mise en page du site public,
645 645
 				ils pourront apparaître sous forme de documents joints.',
646
-	'texte_erreur_mise_niveau_base' => 'Erreur de base de données lors de la mise à niveau.
646
+    'texte_erreur_mise_niveau_base' => 'Erreur de base de données lors de la mise à niveau.
647 647
 		L’image <b>@fichier@</b> n’est pas passée (article @id_article@).
648 648
 		Notez bien cette référence, réessayez la mise à
649 649
 		niveau, et enfin vérifiez que les images apparaissent
650 650
 		toujours dans les articles.',
651
-	'texte_erreur_visiteur' => 'Vous avez tenté d’accéder à l’espace privé avec un login qui ne le permet pas.',
652
-	'texte_inc_auth_1' => 'Vous êtes identifié sous le
651
+    'texte_erreur_visiteur' => 'Vous avez tenté d’accéder à l’espace privé avec un login qui ne le permet pas.',
652
+    'texte_inc_auth_1' => 'Vous êtes identifié sous le
653 653
 		login <b>@auth_login@</b>, mais celui-ci n’existe pas/plus dans la base.
654 654
 		Essayez de vous',
655
-	'texte_inc_auth_2' => 'reconnecter',
656
-	'texte_inc_auth_3' => ', après avoir éventuellement quitté puis
655
+    'texte_inc_auth_2' => 'reconnecter',
656
+    'texte_inc_auth_3' => ', après avoir éventuellement quitté puis
657 657
 		redémarré votre navigateur.',
658
-	'texte_inc_config' => 'Les modifications effectuées dans ces pages influent notablement sur le
658
+    'texte_inc_config' => 'Les modifications effectuées dans ces pages influent notablement sur le
659 659
  fonctionnement de votre site. Nous vous recommandons de ne pas y intervenir tant que vous n’êtes pas
660 660
  familier du fonctionnement du système SPIP. <br /><br /><b>Plus
661 661
  généralement, il est fortement conseillé
662 662
  de laisser la charge de ces pages au webmestre principal de votre site.</b>',
663
-	'texte_inc_meta_1' => 'Le système a rencontré une erreur lors de l’écriture du fichier <code>@fichier@</code>. Veuillez, en tant qu’administrateur du site,',
664
-	'texte_inc_meta_2' => 'vérifier les droits d’écriture',
665
-	'texte_inc_meta_3' => 'sur le répertoire <code>@repertoire@</code>.',
666
-	'texte_statut_en_cours_redaction' => 'en cours de rédaction',
667
-	'texte_statut_poubelle' => 'à la poubelle',
668
-	'texte_statut_propose_evaluation' => 'proposé à l’évaluation',
669
-	'texte_statut_publie' => 'publié en ligne',
670
-	'texte_statut_refuse' => 'refusé',
671
-	'titre_ajouter_mot_cle' => 'AJOUTER UN MOT-CLÉ :',
672
-	'titre_cadre_raccourcis' => 'RACCOURCIS :',
673
-	'titre_changer_couleur_interface' => 'Changer la couleur de l’interface',
674
-	'titre_image_admin_article' => 'Vous pouvez administrer cet article',
675
-	'titre_image_administrateur' => 'Administrateur',
676
-	'titre_image_aide' => 'De l’aide sur cet élément',
677
-	'titre_image_auteur_supprime' => 'Auteur supprimé',
678
-	'titre_image_redacteur' => 'Rédacteur sans accès',
679
-	'titre_image_redacteur_02' => 'Rédacteur',
680
-	'titre_image_selecteur' => 'Afficher la liste',
681
-	'titre_image_visiteur' => 'Visiteur',
682
-	'titre_joindre_document' => 'JOINDRE UN DOCUMENT',
683
-	'titre_mots_cles' => 'MOTS-CLÉS',
684
-	'titre_probleme_technique' => 'Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de votre compréhension.',
685
-	'titre_publier_document' => 'PUBLIER UN DOCUMENT DANS CETTE RUBRIQUE',
686
-	'titre_signatures_attente' => 'Signatures en attente de validation',
687
-	'titre_signatures_confirmees' => 'Signatures confirmées',
688
-	'titre_statistiques' => 'Statistiques du site',
689
-	'titre_titre_document' => 'Titre du document :',
690
-	'todo' => 'à venir',
691
-	'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions',
692
-	'trad_reference' => '(référence des traductions)',
663
+    'texte_inc_meta_1' => 'Le système a rencontré une erreur lors de l’écriture du fichier <code>@fichier@</code>. Veuillez, en tant qu’administrateur du site,',
664
+    'texte_inc_meta_2' => 'vérifier les droits d’écriture',
665
+    'texte_inc_meta_3' => 'sur le répertoire <code>@repertoire@</code>.',
666
+    'texte_statut_en_cours_redaction' => 'en cours de rédaction',
667
+    'texte_statut_poubelle' => 'à la poubelle',
668
+    'texte_statut_propose_evaluation' => 'proposé à l’évaluation',
669
+    'texte_statut_publie' => 'publié en ligne',
670
+    'texte_statut_refuse' => 'refusé',
671
+    'titre_ajouter_mot_cle' => 'AJOUTER UN MOT-CLÉ :',
672
+    'titre_cadre_raccourcis' => 'RACCOURCIS :',
673
+    'titre_changer_couleur_interface' => 'Changer la couleur de l’interface',
674
+    'titre_image_admin_article' => 'Vous pouvez administrer cet article',
675
+    'titre_image_administrateur' => 'Administrateur',
676
+    'titre_image_aide' => 'De l’aide sur cet élément',
677
+    'titre_image_auteur_supprime' => 'Auteur supprimé',
678
+    'titre_image_redacteur' => 'Rédacteur sans accès',
679
+    'titre_image_redacteur_02' => 'Rédacteur',
680
+    'titre_image_selecteur' => 'Afficher la liste',
681
+    'titre_image_visiteur' => 'Visiteur',
682
+    'titre_joindre_document' => 'JOINDRE UN DOCUMENT',
683
+    'titre_mots_cles' => 'MOTS-CLÉS',
684
+    'titre_probleme_technique' => 'Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de votre compréhension.',
685
+    'titre_publier_document' => 'PUBLIER UN DOCUMENT DANS CETTE RUBRIQUE',
686
+    'titre_signatures_attente' => 'Signatures en attente de validation',
687
+    'titre_signatures_confirmees' => 'Signatures confirmées',
688
+    'titre_statistiques' => 'Statistiques du site',
689
+    'titre_titre_document' => 'Titre du document :',
690
+    'todo' => 'à venir',
691
+    'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions',
692
+    'trad_reference' => '(référence des traductions)',
693 693
 
694
-	// U
695
-	'upload_limit' => 'Ce fichier est trop gros pour le serveur ; la taille maximum autorisée en <i>upload</i> est de @max@.',
694
+    // U
695
+    'upload_limit' => 'Ce fichier est trop gros pour le serveur ; la taille maximum autorisée en <i>upload</i> est de @max@.',
696 696
 
697
-	// Z
698
-	'zbug_balise_b_aval' => ' : balise B en aval',
699
-	'zbug_balise_inexistante' => 'Balise @balise@ mal déclarée pour @from@',
700
-	'zbug_balise_sans_argument' => 'Argument manquant dans la balise @balise@',
701
-	'zbug_boucle' => 'boucle',
702
-	'zbug_boucle_recursive_undef' => 'Boucle récursive non définie : @nom@',
703
-	'zbug_calcul' => 'calcul',
704
-	'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle',
705
-	'zbug_champ_hors_critere' => 'Champ @champ@ hors critère @critere@',
706
-	'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@',
707
-	'zbug_code' => 'code',
708
-	'zbug_critere_inconnu' => 'Critère inconnu @critere@',
709
-	'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique',
710
-	'zbug_distant_interdit' => 'Externe interdit', # Contexte : une base de données "externe", pas gérée par SPIP, mais que SPIP 1.8 sait utiliser dans ses boucles -- seul problèmes certaines manipulations sont interdites sur ces bases-là.
711
-	'zbug_doublon_table_sans_cle_primaire' => 'Doublons sur une table sans clef primaire atomique',
712
-	'zbug_doublon_table_sans_index' => 'Doublons sur une table sans index',
713
-	'zbug_erreur_boucle_double' => 'Double définition de la boucle @id@',
714
-	'zbug_erreur_boucle_fermant' => 'Boucle @id@ non fermée',
715
-	'zbug_erreur_boucle_syntaxe' => 'Syntaxe de la boucle @id@ incorrecte',
716
-	'zbug_erreur_compilation' => 'Erreur de compilation',
717
-	'zbug_erreur_execution_page' => 'Erreur d’exécution',
718
-	'zbug_erreur_filtre' => 'Filtre @filtre@ non défini',
719
-	'zbug_erreur_filtre_nbarg_min' => 'Filtre @filtre@ : il manque @nb@ argument(s)',
720
-	'zbug_erreur_meme_parent' => 'Le critère {meme_parent} ne s’applique qu’aux boucles (FORUMS) ou (RUBRIQUES)',
721
-	'zbug_erreur_squelette' => 'Erreur(s) dans le squelette',
722
-	'zbug_hors_compilation' => 'Hors Compilation',
723
-	'zbug_info_erreur_squelette' => 'Erreur sur le site',
724
-	'zbug_inversion_ordre_inexistant' => 'Inversion d’un ordre inexistant',
725
-	'zbug_pagination_sans_critere' => 'Balise #PAGINATION sans critère {pagination} ou employé dans une boucle récursive',
726
-	'zbug_parametres_inclus_incorrects' => 'Paramètre d’inclusion incorrect : @param@',
727
-	'zbug_profile' => 'Temps de calcul : @time@',
728
-	'zbug_resultat' => 'résultat',
729
-	'zbug_serveur_indefini' => 'Serveur SQL indéfini',
730
-	'zbug_statistiques' => 'Statistiques des requêtes SQL classées par durée',
731
-	'zbug_table_inconnue' => 'Table SQL « @table@ » inconnue',
732
-	'zxml_connus_attributs' => 'attributs connus',
733
-	'zxml_de' => 'de',
734
-	'zxml_inconnu_attribut' => 'attribut inconnu',
735
-	'zxml_inconnu_balise' => 'balise inconnue',
736
-	'zxml_inconnu_entite' => 'entité inconnue',
737
-	'zxml_inconnu_id' => 'ID inconnu',
738
-	'zxml_mais_de' => 'mais de',
739
-	'zxml_non_conforme' => 'n’est pas conforme au motif',
740
-	'zxml_non_fils' => 'n’est pas un fils de',
741
-	'zxml_nonvide_balise' => 'balise non vide',
742
-	'zxml_obligatoire_attribut' => 'attribut obligatoire mais absent dans',
743
-	'zxml_succession_fils_incorrecte' => 'succession des fils incorrecte',
744
-	'zxml_survoler' => 'survoler pour voir les corrects',
745
-	'zxml_valeur_attribut' => 'valeur de l’attribut',
746
-	'zxml_vide_balise' => 'balise vide',
747
-	'zxml_vu' => 'vu auparavant'
697
+    // Z
698
+    'zbug_balise_b_aval' => ' : balise B en aval',
699
+    'zbug_balise_inexistante' => 'Balise @balise@ mal déclarée pour @from@',
700
+    'zbug_balise_sans_argument' => 'Argument manquant dans la balise @balise@',
701
+    'zbug_boucle' => 'boucle',
702
+    'zbug_boucle_recursive_undef' => 'Boucle récursive non définie : @nom@',
703
+    'zbug_calcul' => 'calcul',
704
+    'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle',
705
+    'zbug_champ_hors_critere' => 'Champ @champ@ hors critère @critere@',
706
+    'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@',
707
+    'zbug_code' => 'code',
708
+    'zbug_critere_inconnu' => 'Critère inconnu @critere@',
709
+    'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique',
710
+    'zbug_distant_interdit' => 'Externe interdit', # Contexte : une base de données "externe", pas gérée par SPIP, mais que SPIP 1.8 sait utiliser dans ses boucles -- seul problèmes certaines manipulations sont interdites sur ces bases-là.
711
+    'zbug_doublon_table_sans_cle_primaire' => 'Doublons sur une table sans clef primaire atomique',
712
+    'zbug_doublon_table_sans_index' => 'Doublons sur une table sans index',
713
+    'zbug_erreur_boucle_double' => 'Double définition de la boucle @id@',
714
+    'zbug_erreur_boucle_fermant' => 'Boucle @id@ non fermée',
715
+    'zbug_erreur_boucle_syntaxe' => 'Syntaxe de la boucle @id@ incorrecte',
716
+    'zbug_erreur_compilation' => 'Erreur de compilation',
717
+    'zbug_erreur_execution_page' => 'Erreur d’exécution',
718
+    'zbug_erreur_filtre' => 'Filtre @filtre@ non défini',
719
+    'zbug_erreur_filtre_nbarg_min' => 'Filtre @filtre@ : il manque @nb@ argument(s)',
720
+    'zbug_erreur_meme_parent' => 'Le critère {meme_parent} ne s’applique qu’aux boucles (FORUMS) ou (RUBRIQUES)',
721
+    'zbug_erreur_squelette' => 'Erreur(s) dans le squelette',
722
+    'zbug_hors_compilation' => 'Hors Compilation',
723
+    'zbug_info_erreur_squelette' => 'Erreur sur le site',
724
+    'zbug_inversion_ordre_inexistant' => 'Inversion d’un ordre inexistant',
725
+    'zbug_pagination_sans_critere' => 'Balise #PAGINATION sans critère {pagination} ou employé dans une boucle récursive',
726
+    'zbug_parametres_inclus_incorrects' => 'Paramètre d’inclusion incorrect : @param@',
727
+    'zbug_profile' => 'Temps de calcul : @time@',
728
+    'zbug_resultat' => 'résultat',
729
+    'zbug_serveur_indefini' => 'Serveur SQL indéfini',
730
+    'zbug_statistiques' => 'Statistiques des requêtes SQL classées par durée',
731
+    'zbug_table_inconnue' => 'Table SQL « @table@ » inconnue',
732
+    'zxml_connus_attributs' => 'attributs connus',
733
+    'zxml_de' => 'de',
734
+    'zxml_inconnu_attribut' => 'attribut inconnu',
735
+    'zxml_inconnu_balise' => 'balise inconnue',
736
+    'zxml_inconnu_entite' => 'entité inconnue',
737
+    'zxml_inconnu_id' => 'ID inconnu',
738
+    'zxml_mais_de' => 'mais de',
739
+    'zxml_non_conforme' => 'n’est pas conforme au motif',
740
+    'zxml_non_fils' => 'n’est pas un fils de',
741
+    'zxml_nonvide_balise' => 'balise non vide',
742
+    'zxml_obligatoire_attribut' => 'attribut obligatoire mais absent dans',
743
+    'zxml_succession_fils_incorrecte' => 'succession des fils incorrecte',
744
+    'zxml_survoler' => 'survoler pour voir les corrects',
745
+    'zxml_valeur_attribut' => 'valeur de l’attribut',
746
+    'zxml_vide_balise' => 'balise vide',
747
+    'zxml_vu' => 'vu auparavant'
748 748
 );
Please login to merge, or discard this patch.
ecrire/inc/utils.php 2 patches
Indentation   +2285 added lines, -2286 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -48,71 +48,71 @@  discard block
 block discarded – undo
48 48
  *     Nom de la fonction, ou false.
49 49
  */
50 50
 function charger_fonction($nom, $dossier = 'exec', $continue = false) {
51
-	static $echecs = [];
52
-
53
-	if (strlen($dossier) and substr($dossier, -1) != '/') {
54
-		$dossier .= '/';
55
-	}
56
-	$f = str_replace('/', '_', $dossier) . $nom;
57
-
58
-	if (function_exists($f)) {
59
-		return $f;
60
-	}
61
-	if (function_exists($g = $f . '_dist')) {
62
-		return $g;
63
-	}
64
-
65
-	if (isset($echecs[$f])) {
66
-		return $echecs[$f];
67
-	}
68
-	// Sinon charger le fichier de declaration si plausible
69
-
70
-	if (!preg_match(',^\w+$,', $f)) {
71
-		if ($continue) {
72
-			return false;
73
-		} //appel interne, on passe
74
-		include_spip('inc/minipres');
75
-		echo minipres();
76
-		exit;
77
-	}
78
-
79
-	// passer en minuscules (cf les balises de formulaires)
80
-	// et inclure le fichier
81
-	if (
82
-		!$inc = include_spip($dossier . ($d = strtolower($nom)))
83
-		// si le fichier truc/machin/nom.php n'existe pas,
84
-		// la fonction peut etre definie dans truc/machin.php qui regroupe plusieurs petites fonctions
85
-		and strlen(dirname($dossier)) and dirname($dossier) != '.'
86
-	) {
87
-		include_spip(substr($dossier, 0, -1));
88
-	}
89
-	if (function_exists($f)) {
90
-		return $f;
91
-	}
92
-	if (function_exists($g)) {
93
-		return $g;
94
-	}
95
-
96
-	if ($continue) {
97
-		return $echecs[$f] = false;
98
-	}
99
-
100
-	// Echec : message d'erreur
101
-	spip_log("fonction $nom ($f ou $g) indisponible" .
102
-		($inc ? '' : " (fichier $d absent de $dossier)"));
103
-
104
-	include_spip('inc/minipres');
105
-	echo minipres(
106
-		_T('forum_titre_erreur'),
107
-		$inc ?
108
-			_T('fonction_introuvable', ['fonction' => '<code>'.spip_htmlentities($f).'</code>'])
109
-			.'<br />'
110
-			._T('fonction_introuvable', ['fonction' => '<code>'.spip_htmlentities($g).'</code>'])
111
-			:
112
-			_T('fichier_introuvable', ['fichier' => '<code>'. spip_htmlentities($d).'</code>']),
113
-			['all_inline' => true,'status' => 404]
114
-	);
115
-	exit;
51
+    static $echecs = [];
52
+
53
+    if (strlen($dossier) and substr($dossier, -1) != '/') {
54
+        $dossier .= '/';
55
+    }
56
+    $f = str_replace('/', '_', $dossier) . $nom;
57
+
58
+    if (function_exists($f)) {
59
+        return $f;
60
+    }
61
+    if (function_exists($g = $f . '_dist')) {
62
+        return $g;
63
+    }
64
+
65
+    if (isset($echecs[$f])) {
66
+        return $echecs[$f];
67
+    }
68
+    // Sinon charger le fichier de declaration si plausible
69
+
70
+    if (!preg_match(',^\w+$,', $f)) {
71
+        if ($continue) {
72
+            return false;
73
+        } //appel interne, on passe
74
+        include_spip('inc/minipres');
75
+        echo minipres();
76
+        exit;
77
+    }
78
+
79
+    // passer en minuscules (cf les balises de formulaires)
80
+    // et inclure le fichier
81
+    if (
82
+        !$inc = include_spip($dossier . ($d = strtolower($nom)))
83
+        // si le fichier truc/machin/nom.php n'existe pas,
84
+        // la fonction peut etre definie dans truc/machin.php qui regroupe plusieurs petites fonctions
85
+        and strlen(dirname($dossier)) and dirname($dossier) != '.'
86
+    ) {
87
+        include_spip(substr($dossier, 0, -1));
88
+    }
89
+    if (function_exists($f)) {
90
+        return $f;
91
+    }
92
+    if (function_exists($g)) {
93
+        return $g;
94
+    }
95
+
96
+    if ($continue) {
97
+        return $echecs[$f] = false;
98
+    }
99
+
100
+    // Echec : message d'erreur
101
+    spip_log("fonction $nom ($f ou $g) indisponible" .
102
+        ($inc ? '' : " (fichier $d absent de $dossier)"));
103
+
104
+    include_spip('inc/minipres');
105
+    echo minipres(
106
+        _T('forum_titre_erreur'),
107
+        $inc ?
108
+            _T('fonction_introuvable', ['fonction' => '<code>'.spip_htmlentities($f).'</code>'])
109
+            .'<br />'
110
+            ._T('fonction_introuvable', ['fonction' => '<code>'.spip_htmlentities($g).'</code>'])
111
+            :
112
+            _T('fichier_introuvable', ['fichier' => '<code>'. spip_htmlentities($d).'</code>']),
113
+            ['all_inline' => true,'status' => 404]
114
+    );
115
+    exit;
116 116
 }
117 117
 
118 118
 /**
@@ -122,17 +122,17 @@  discard block
 block discarded – undo
122 122
  * @return bool
123 123
  */
124 124
 function include_once_check($file) {
125
-	if (file_exists($file)) {
126
-		include_once $file;
125
+    if (file_exists($file)) {
126
+        include_once $file;
127 127
 
128
-		return true;
129
-	}
130
-	$crash = (isset($GLOBALS['meta']['message_crash_plugins']) ? unserialize($GLOBALS['meta']['message_crash_plugins']) : '');
131
-	$crash = ($crash ?: []);
132
-	$crash[$file] = true;
133
-	ecrire_meta('message_crash_plugins', serialize($crash));
128
+        return true;
129
+    }
130
+    $crash = (isset($GLOBALS['meta']['message_crash_plugins']) ? unserialize($GLOBALS['meta']['message_crash_plugins']) : '');
131
+    $crash = ($crash ?: []);
132
+    $crash[$file] = true;
133
+    ecrire_meta('message_crash_plugins', serialize($crash));
134 134
 
135
-	return false;
135
+    return false;
136 136
 }
137 137
 
138 138
 
@@ -156,7 +156,7 @@  discard block
 block discarded – undo
156 156
  *     - string : chemin du fichier trouvé
157 157
  **/
158 158
 function include_spip($f, $include = true) {
159
-	return find_in_path($f . '.php', '', $include);
159
+    return find_in_path($f . '.php', '', $include);
160 160
 }
161 161
 
162 162
 /**
@@ -176,7 +176,7 @@  discard block
 block discarded – undo
176 176
  *     - string : chemin du fichier trouvé
177 177
  **/
178 178
 function require_spip($f) {
179
-	return find_in_path($f . '.php', '', 'required');
179
+    return find_in_path($f . '.php', '', 'required');
180 180
 }
181 181
 
182 182
 
@@ -185,27 +185,27 @@  discard block
 block discarded – undo
185 185
  * quand on a besoin dans le PHP de filtres/fonctions qui y sont definis
186 186
  */
187 187
 function include_fichiers_fonctions() {
188
-	static $done = false;
189
-	if (!$done) {
190
-		include_spip('inc/lang');
191
-
192
-		// NB: mes_fonctions peut initialiser $dossier_squelettes (old-style)
193
-		// donc il faut l'inclure "en globals"
194
-		if ($f = find_in_path('mes_fonctions.php')) {
195
-			global $dossier_squelettes;
196
-			include_once(_ROOT_CWD . $f);
197
-		}
198
-
199
-		if (@is_readable(_CACHE_PLUGINS_FCT)) {
200
-			// chargement optimise precompile
201
-			include_once(_CACHE_PLUGINS_FCT);
202
-		}
203
-		if (test_espace_prive()) {
204
-			include_spip('inc/filtres_ecrire');
205
-		}
206
-		include_spip('public/fonctions'); // charger les fichiers fonctions associes aux criteres, balises..
207
-		$done = true;
208
-	}
188
+    static $done = false;
189
+    if (!$done) {
190
+        include_spip('inc/lang');
191
+
192
+        // NB: mes_fonctions peut initialiser $dossier_squelettes (old-style)
193
+        // donc il faut l'inclure "en globals"
194
+        if ($f = find_in_path('mes_fonctions.php')) {
195
+            global $dossier_squelettes;
196
+            include_once(_ROOT_CWD . $f);
197
+        }
198
+
199
+        if (@is_readable(_CACHE_PLUGINS_FCT)) {
200
+            // chargement optimise precompile
201
+            include_once(_CACHE_PLUGINS_FCT);
202
+        }
203
+        if (test_espace_prive()) {
204
+            include_spip('inc/filtres_ecrire');
205
+        }
206
+        include_spip('public/fonctions'); // charger les fichiers fonctions associes aux criteres, balises..
207
+        $done = true;
208
+    }
209 209
 }
210 210
 
211 211
 /**
@@ -231,23 +231,23 @@  discard block
 block discarded – undo
231 231
  *     Les paramètres du pipeline modifiés
232 232
  **/
233 233
 function minipipe($fonc, &$val) {
234
-	// fonction
235
-	if (function_exists($fonc)) {
236
-		$val = call_user_func($fonc, $val);
237
-	} // Class::Methode
238
-	else {
239
-		if (
240
-			preg_match('/^(\w*)::(\w*)$/S', $fonc, $regs)
241
-			and $methode = [$regs[1], $regs[2]]
242
-			and is_callable($methode)
243
-		) {
244
-			$val = call_user_func($methode, $val);
245
-		} else {
246
-			spip_log("Erreur - '$fonc' non definie !");
247
-		}
248
-	}
249
-
250
-	return $val;
234
+    // fonction
235
+    if (function_exists($fonc)) {
236
+        $val = call_user_func($fonc, $val);
237
+    } // Class::Methode
238
+    else {
239
+        if (
240
+            preg_match('/^(\w*)::(\w*)$/S', $fonc, $regs)
241
+            and $methode = [$regs[1], $regs[2]]
242
+            and is_callable($methode)
243
+        ) {
244
+            $val = call_user_func($methode, $val);
245
+        } else {
246
+            spip_log("Erreur - '$fonc' non definie !");
247
+        }
248
+    }
249
+
250
+    return $val;
251 251
 }
252 252
 
253 253
 /**
@@ -278,46 +278,46 @@  discard block
 block discarded – undo
278 278
  *     Résultat
279 279
  */
280 280
 function pipeline($action, $val = null) {
281
-	static $charger;
282
-
283
-	// chargement initial des fonctions mises en cache, ou generation du cache
284
-	if (!$charger) {
285
-		if (!($ok = @is_readable($charger = _CACHE_PIPELINES))) {
286
-			include_spip('inc/plugin');
287
-			// generer les fichiers php precompiles
288
-			// de chargement des plugins et des pipelines
289
-			actualise_plugins_actifs();
290
-			if (!($ok = @is_readable($charger))) {
291
-				spip_log("fichier $charger pas cree");
292
-			}
293
-		}
294
-
295
-		if ($ok) {
296
-			include_once $charger;
297
-		}
298
-	}
299
-
300
-	// appliquer notre fonction si elle existe
301
-	$fonc = 'execute_pipeline_' . strtolower($action);
302
-	if (function_exists($fonc)) {
303
-		$val = $fonc($val);
304
-	} // plantage ?
305
-	else {
306
-		spip_log("fonction $fonc absente : pipeline desactive", _LOG_ERREUR);
307
-	}
308
-
309
-	// si le flux est une table avec 2 cle args&data
310
-	// on ne ressort du pipe que les donnees dans 'data'
311
-	// array_key_exists pour php 4.1.0
312
-	if (
313
-		is_array($val)
314
-		and count($val) == 2
315
-		and (array_key_exists('data', $val))
316
-	) {
317
-		$val = $val['data'];
318
-	}
319
-
320
-	return $val;
281
+    static $charger;
282
+
283
+    // chargement initial des fonctions mises en cache, ou generation du cache
284
+    if (!$charger) {
285
+        if (!($ok = @is_readable($charger = _CACHE_PIPELINES))) {
286
+            include_spip('inc/plugin');
287
+            // generer les fichiers php precompiles
288
+            // de chargement des plugins et des pipelines
289
+            actualise_plugins_actifs();
290
+            if (!($ok = @is_readable($charger))) {
291
+                spip_log("fichier $charger pas cree");
292
+            }
293
+        }
294
+
295
+        if ($ok) {
296
+            include_once $charger;
297
+        }
298
+    }
299
+
300
+    // appliquer notre fonction si elle existe
301
+    $fonc = 'execute_pipeline_' . strtolower($action);
302
+    if (function_exists($fonc)) {
303
+        $val = $fonc($val);
304
+    } // plantage ?
305
+    else {
306
+        spip_log("fonction $fonc absente : pipeline desactive", _LOG_ERREUR);
307
+    }
308
+
309
+    // si le flux est une table avec 2 cle args&data
310
+    // on ne ressort du pipe que les donnees dans 'data'
311
+    // array_key_exists pour php 4.1.0
312
+    if (
313
+        is_array($val)
314
+        and count($val) == 2
315
+        and (array_key_exists('data', $val))
316
+    ) {
317
+        $val = $val['data'];
318
+    }
319
+
320
+    return $val;
321 321
 }
322 322
 
323 323
 /**
@@ -361,38 +361,38 @@  discard block
 block discarded – undo
361 361
  *     paramètre est planté pour cause de compatibilité ascendante.
362 362
  */
363 363
 function spip_log($message = null, $name = null) {
364
-	static $pre = [];
365
-	static $log;
366
-	preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string)$name, $regs);
367
-	if (!isset($regs[1]) or !$logname = $regs[1]) {
368
-		$logname = null;
369
-	}
370
-	if (!isset($regs[2])) {
371
-		$niveau = _LOG_INFO;
372
-	}
373
-	else {
374
-		$niveau = intval($regs[2]);
375
-	}
376
-
377
-	if ($niveau <= (defined('_LOG_FILTRE_GRAVITE') ? _LOG_FILTRE_GRAVITE : _LOG_INFO_IMPORTANTE)) {
378
-		if (!$pre) {
379
-			$pre = [
380
-				_LOG_HS => 'HS:',
381
-				_LOG_ALERTE_ROUGE => 'ALERTE:',
382
-				_LOG_CRITIQUE => 'CRITIQUE:',
383
-				_LOG_ERREUR => 'ERREUR:',
384
-				_LOG_AVERTISSEMENT => 'WARNING:',
385
-				_LOG_INFO_IMPORTANTE => '!INFO:',
386
-				_LOG_INFO => 'info:',
387
-				_LOG_DEBUG => 'debug:'
388
-			];
389
-			$log = charger_fonction('log', 'inc');
390
-		}
391
-		if (!is_string($message)) {
392
-			$message = print_r($message, true);
393
-		}
394
-		$log($pre[$niveau] . ' ' . $message, $logname);
395
-	}
364
+    static $pre = [];
365
+    static $log;
366
+    preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string)$name, $regs);
367
+    if (!isset($regs[1]) or !$logname = $regs[1]) {
368
+        $logname = null;
369
+    }
370
+    if (!isset($regs[2])) {
371
+        $niveau = _LOG_INFO;
372
+    }
373
+    else {
374
+        $niveau = intval($regs[2]);
375
+    }
376
+
377
+    if ($niveau <= (defined('_LOG_FILTRE_GRAVITE') ? _LOG_FILTRE_GRAVITE : _LOG_INFO_IMPORTANTE)) {
378
+        if (!$pre) {
379
+            $pre = [
380
+                _LOG_HS => 'HS:',
381
+                _LOG_ALERTE_ROUGE => 'ALERTE:',
382
+                _LOG_CRITIQUE => 'CRITIQUE:',
383
+                _LOG_ERREUR => 'ERREUR:',
384
+                _LOG_AVERTISSEMENT => 'WARNING:',
385
+                _LOG_INFO_IMPORTANTE => '!INFO:',
386
+                _LOG_INFO => 'info:',
387
+                _LOG_DEBUG => 'debug:'
388
+            ];
389
+            $log = charger_fonction('log', 'inc');
390
+        }
391
+        if (!is_string($message)) {
392
+            $message = print_r($message, true);
393
+        }
394
+        $log($pre[$niveau] . ' ' . $message, $logname);
395
+    }
396 396
 }
397 397
 
398 398
 /**
@@ -403,8 +403,8 @@  discard block
 block discarded – undo
403 403
  * @param array $opt Tableau d'options
404 404
  **/
405 405
 function journal($phrase, $opt = []) {
406
-	$journal = charger_fonction('journal', 'inc');
407
-	$journal($phrase, $opt);
406
+    $journal = charger_fonction('journal', 'inc');
407
+    $journal($phrase, $opt);
408 408
 }
409 409
 
410 410
 
@@ -423,37 +423,37 @@  discard block
 block discarded – undo
423 423
  **/
424 424
 function _request($var, $c = false) {
425 425
 
426
-	if (is_array($c)) {
427
-		return $c[$var] ?? null;
428
-	}
429
-
430
-	if (isset($_GET[$var])) {
431
-		$a = $_GET[$var];
432
-	} elseif (isset($_POST[$var])) {
433
-		$a = $_POST[$var];
434
-	} else {
435
-		return null;
436
-	}
437
-
438
-	// Si on est en ajax et en POST tout a ete encode
439
-	// via encodeURIComponent, il faut donc repasser
440
-	// dans le charset local...
441
-	if (
442
-		defined('_AJAX')
443
-		and _AJAX
444
-		and isset($GLOBALS['meta']['charset'])
445
-		and $GLOBALS['meta']['charset'] != 'utf-8'
446
-		and is_string($a)
447
-		// check rapide mais pas fiable
448
-		and preg_match(',[\x80-\xFF],', $a)
449
-		// check fiable
450
-		and include_spip('inc/charsets')
451
-		and is_utf8($a)
452
-	) {
453
-		return importer_charset($a, 'utf-8');
454
-	}
455
-
456
-	return $a;
426
+    if (is_array($c)) {
427
+        return $c[$var] ?? null;
428
+    }
429
+
430
+    if (isset($_GET[$var])) {
431
+        $a = $_GET[$var];
432
+    } elseif (isset($_POST[$var])) {
433
+        $a = $_POST[$var];
434
+    } else {
435
+        return null;
436
+    }
437
+
438
+    // Si on est en ajax et en POST tout a ete encode
439
+    // via encodeURIComponent, il faut donc repasser
440
+    // dans le charset local...
441
+    if (
442
+        defined('_AJAX')
443
+        and _AJAX
444
+        and isset($GLOBALS['meta']['charset'])
445
+        and $GLOBALS['meta']['charset'] != 'utf-8'
446
+        and is_string($a)
447
+        // check rapide mais pas fiable
448
+        and preg_match(',[\x80-\xFF],', $a)
449
+        // check fiable
450
+        and include_spip('inc/charsets')
451
+        and is_utf8($a)
452
+    ) {
453
+        return importer_charset($a, 'utf-8');
454
+    }
455
+
456
+    return $a;
457 457
 }
458 458
 
459 459
 
@@ -471,22 +471,22 @@  discard block
 block discarded – undo
471 471
  *     - false sinon
472 472
  **/
473 473
 function set_request($var, $val = null, $c = false) {
474
-	if (is_array($c)) {
475
-		unset($c[$var]);
476
-		if ($val !== null) {
477
-			$c[$var] = $val;
478
-		}
474
+    if (is_array($c)) {
475
+        unset($c[$var]);
476
+        if ($val !== null) {
477
+            $c[$var] = $val;
478
+        }
479 479
 
480
-		return $c;
481
-	}
480
+        return $c;
481
+    }
482 482
 
483
-	unset($_GET[$var]);
484
-	unset($_POST[$var]);
485
-	if ($val !== null) {
486
-		$_GET[$var] = $val;
487
-	}
483
+    unset($_GET[$var]);
484
+    unset($_POST[$var]);
485
+    if ($val !== null) {
486
+        $_GET[$var] = $val;
487
+    }
488 488
 
489
-	return false; # n'affecte pas $c
489
+    return false; # n'affecte pas $c
490 490
 }
491 491
 
492 492
 /**
@@ -506,25 +506,25 @@  discard block
 block discarded – undo
506 506
  * @return array|mixed|string
507 507
  */
508 508
 function spip_sanitize_from_request($value, $key, $sanitize_function = 'entites_html') {
509
-	if (is_array($value)) {
510
-		if ($key == '*') {
511
-			$key = array_keys($value);
512
-		}
513
-		if (!is_array($key)) {
514
-			$key = [$key];
515
-		}
516
-		foreach ($key as $k) {
517
-			if (!empty($value[$k])) {
518
-				$value[$k] = spip_sanitize_from_request($value[$k], $k, $sanitize_function);
519
-			}
520
-		}
521
-		return $value;
522
-	}
523
-	// si la valeur vient des GET ou POST on la sanitize
524
-	if (!empty($value) and $value == _request($key)) {
525
-		$value = $sanitize_function($value);
526
-	}
527
-	return $value;
509
+    if (is_array($value)) {
510
+        if ($key == '*') {
511
+            $key = array_keys($value);
512
+        }
513
+        if (!is_array($key)) {
514
+            $key = [$key];
515
+        }
516
+        foreach ($key as $k) {
517
+            if (!empty($value[$k])) {
518
+                $value[$k] = spip_sanitize_from_request($value[$k], $k, $sanitize_function);
519
+            }
520
+        }
521
+        return $value;
522
+    }
523
+    // si la valeur vient des GET ou POST on la sanitize
524
+    if (!empty($value) and $value == _request($key)) {
525
+        $value = $sanitize_function($value);
526
+    }
527
+    return $value;
528 528
 }
529 529
 
530 530
 /**
@@ -532,23 +532,22 @@  discard block
 block discarded – undo
532 532
  *
533 533
  * On est sur le web, on exclut certains protocoles,
534 534
  * notamment 'file://', 'php://' et d'autres…
535
-
536 535
  * @param string $url
537 536
  * @return bool
538 537
  */
539 538
 function tester_url_absolue($url) {
540
-	$url = trim($url ?? '');
541
-	if ($url && preg_match(';^([a-z]{3,7}:)?//;Uims', $url, $m)) {
542
-		if (
543
-			isset($m[1])
544
-			and $p = strtolower(rtrim($m[1], ':'))
545
-			and in_array($p, ['file', 'php', 'zlib', 'glob', 'phar', 'ssh2', 'rar', 'ogg', 'expect', 'zip'])
546
-		) {
547
-			return false;
548
-		}
549
-		return true;
550
-	}
551
-	return false;
539
+    $url = trim($url ?? '');
540
+    if ($url && preg_match(';^([a-z]{3,7}:)?//;Uims', $url, $m)) {
541
+        if (
542
+            isset($m[1])
543
+            and $p = strtolower(rtrim($m[1], ':'))
544
+            and in_array($p, ['file', 'php', 'zlib', 'glob', 'phar', 'ssh2', 'rar', 'ogg', 'expect', 'zip'])
545
+        ) {
546
+            return false;
547
+        }
548
+        return true;
549
+    }
550
+    return false;
552 551
 }
553 552
 
554 553
 /**
@@ -570,95 +569,95 @@  discard block
 block discarded – undo
570 569
  * @return string URL
571 570
  */
572 571
 function parametre_url($url, $c, $v = null, $sep = '&amp;') {
573
-	// requete erronnee : plusieurs variable dans $c et aucun $v
574
-	if (strpos($c, '|') !== false and is_null($v)) {
575
-		return null;
576
-	}
577
-
578
-	// lever l'#ancre
579
-	if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
580
-		$url = $r[1];
581
-		$ancre = $r[2];
582
-	} else {
583
-		$ancre = '';
584
-	}
585
-
586
-	// eclater
587
-	$url = preg_split(',[?]|&amp;|&,', $url);
588
-
589
-	// recuperer la base
590
-	$a = array_shift($url);
591
-	if (!$a) {
592
-		$a = './';
593
-	}
594
-
595
-	$regexp = ',^(' . str_replace('[]', '\[\]', $c) . '[[]?[]]?)(=.*)?$,';
596
-	$ajouts = array_flip(explode('|', $c));
597
-	$u = is_array($v) ? $v : rawurlencode((string) $v);
598
-	$testv = (is_array($v) ? count($v) : strlen((string) $v));
599
-	$v_read = null;
600
-	// lire les variables et agir
601
-	foreach ($url as $n => $val) {
602
-		if (preg_match($regexp, urldecode($val), $r)) {
603
-			$r = array_pad($r, 3, null);
604
-			if ($v === null) {
605
-				// c'est un tableau, on memorise les valeurs
606
-				if (substr($r[1], -2) == '[]') {
607
-					if (!$v_read) {
608
-						$v_read = [];
609
-					}
610
-					$v_read[] = $r[2] ? substr($r[2], 1) : '';
611
-				} // c'est un scalaire, on retourne direct
612
-				else {
613
-					return $r[2] ? substr($r[2], 1) : '';
614
-				}
615
-			} // suppression
616
-			elseif (!$testv) {
617
-				unset($url[$n]);
618
-			}
619
-			// Ajout. Pour une variable, remplacer au meme endroit,
620
-			// pour un tableau ce sera fait dans la prochaine boucle
621
-			elseif (substr($r[1], -2) != '[]') {
622
-				$url[$n] = $r[1] . '=' . $u;
623
-				unset($ajouts[$r[1]]);
624
-			}
625
-			// Pour les tableaux on laisse tomber les valeurs de
626
-			// départ, on remplira à l'étape suivante
627
-			else {
628
-				unset($url[$n]);
629
-			}
630
-		}
631
-	}
632
-
633
-	// traiter les parametres pas encore trouves
634
-	if (
635
-		$v === null
636
-		and $args = func_get_args()
637
-		and count($args) == 2
638
-	) {
639
-		return $v_read; // rien trouve ou un tableau
640
-	} elseif ($testv) {
641
-		foreach ($ajouts as $k => $n) {
642
-			if (!is_array($v)) {
643
-				$url[] = $k . '=' . $u;
644
-			} else {
645
-				$id = (substr($k, -2) == '[]') ? $k : ($k . '[]');
646
-				foreach ($v as $w) {
647
-					$url[] = $id . '=' . (is_array($w) ? 'Array' : rawurlencode($w));
648
-				}
649
-			}
650
-		}
651
-	}
652
-
653
-	// eliminer les vides
654
-	$url = array_filter($url);
655
-
656
-	// recomposer l'adresse
657
-	if ($url) {
658
-		$a .= '?' . join($sep, $url);
659
-	}
660
-
661
-	return $a . $ancre;
572
+    // requete erronnee : plusieurs variable dans $c et aucun $v
573
+    if (strpos($c, '|') !== false and is_null($v)) {
574
+        return null;
575
+    }
576
+
577
+    // lever l'#ancre
578
+    if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
579
+        $url = $r[1];
580
+        $ancre = $r[2];
581
+    } else {
582
+        $ancre = '';
583
+    }
584
+
585
+    // eclater
586
+    $url = preg_split(',[?]|&amp;|&,', $url);
587
+
588
+    // recuperer la base
589
+    $a = array_shift($url);
590
+    if (!$a) {
591
+        $a = './';
592
+    }
593
+
594
+    $regexp = ',^(' . str_replace('[]', '\[\]', $c) . '[[]?[]]?)(=.*)?$,';
595
+    $ajouts = array_flip(explode('|', $c));
596
+    $u = is_array($v) ? $v : rawurlencode((string) $v);
597
+    $testv = (is_array($v) ? count($v) : strlen((string) $v));
598
+    $v_read = null;
599
+    // lire les variables et agir
600
+    foreach ($url as $n => $val) {
601
+        if (preg_match($regexp, urldecode($val), $r)) {
602
+            $r = array_pad($r, 3, null);
603
+            if ($v === null) {
604
+                // c'est un tableau, on memorise les valeurs
605
+                if (substr($r[1], -2) == '[]') {
606
+                    if (!$v_read) {
607
+                        $v_read = [];
608
+                    }
609
+                    $v_read[] = $r[2] ? substr($r[2], 1) : '';
610
+                } // c'est un scalaire, on retourne direct
611
+                else {
612
+                    return $r[2] ? substr($r[2], 1) : '';
613
+                }
614
+            } // suppression
615
+            elseif (!$testv) {
616
+                unset($url[$n]);
617
+            }
618
+            // Ajout. Pour une variable, remplacer au meme endroit,
619
+            // pour un tableau ce sera fait dans la prochaine boucle
620
+            elseif (substr($r[1], -2) != '[]') {
621
+                $url[$n] = $r[1] . '=' . $u;
622
+                unset($ajouts[$r[1]]);
623
+            }
624
+            // Pour les tableaux on laisse tomber les valeurs de
625
+            // départ, on remplira à l'étape suivante
626
+            else {
627
+                unset($url[$n]);
628
+            }
629
+        }
630
+    }
631
+
632
+    // traiter les parametres pas encore trouves
633
+    if (
634
+        $v === null
635
+        and $args = func_get_args()
636
+        and count($args) == 2
637
+    ) {
638
+        return $v_read; // rien trouve ou un tableau
639
+    } elseif ($testv) {
640
+        foreach ($ajouts as $k => $n) {
641
+            if (!is_array($v)) {
642
+                $url[] = $k . '=' . $u;
643
+            } else {
644
+                $id = (substr($k, -2) == '[]') ? $k : ($k . '[]');
645
+                foreach ($v as $w) {
646
+                    $url[] = $id . '=' . (is_array($w) ? 'Array' : rawurlencode($w));
647
+                }
648
+            }
649
+        }
650
+    }
651
+
652
+    // eliminer les vides
653
+    $url = array_filter($url);
654
+
655
+    // recomposer l'adresse
656
+    if ($url) {
657
+        $a .= '?' . join($sep, $url);
658
+    }
659
+
660
+    return $a . $ancre;
662 661
 }
663 662
 
664 663
 /**
@@ -676,21 +675,21 @@  discard block
 block discarded – undo
676 675
  * @return string
677 676
  */
678 677
 function ancre_url($url, $ancre) {
679
-	// lever l'#ancre
680
-	if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
681
-		$url = $r[1];
682
-	}
683
-	if (preg_match('/[^-_a-zA-Z0-9]+/S', $ancre)) {
684
-		if (!function_exists('translitteration')) {
685
-			include_spip('inc/charsets');
686
-		}
687
-		$ancre = preg_replace(
688
-			['/^[^-_a-zA-Z0-9]+/', '/[^-_a-zA-Z0-9]/'],
689
-			['', '-'],
690
-			translitteration($ancre)
691
-		);
692
-	}
693
-	return $url . (strlen($ancre) ? '#' . $ancre : '');
678
+    // lever l'#ancre
679
+    if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) {
680
+        $url = $r[1];
681
+    }
682
+    if (preg_match('/[^-_a-zA-Z0-9]+/S', $ancre)) {
683
+        if (!function_exists('translitteration')) {
684
+            include_spip('inc/charsets');
685
+        }
686
+        $ancre = preg_replace(
687
+            ['/^[^-_a-zA-Z0-9]+/', '/[^-_a-zA-Z0-9]/'],
688
+            ['', '-'],
689
+            translitteration($ancre)
690
+        );
691
+    }
692
+    return $url . (strlen($ancre) ? '#' . $ancre : '');
694 693
 }
695 694
 
696 695
 /**
@@ -700,16 +699,16 @@  discard block
 block discarded – undo
700 699
  * @return string
701 700
  */
702 701
 function nettoyer_uri($reset = null) {
703
-	static $done = false;
704
-	static $propre = '';
705
-	if (!is_null($reset)) {
706
-		return $propre = $reset;
707
-	}
708
-	if ($done) {
709
-		return $propre;
710
-	}
711
-	$done = true;
712
-	return $propre = nettoyer_uri_var($GLOBALS['REQUEST_URI']);
702
+    static $done = false;
703
+    static $propre = '';
704
+    if (!is_null($reset)) {
705
+        return $propre = $reset;
706
+    }
707
+    if ($done) {
708
+        return $propre;
709
+    }
710
+    $done = true;
711
+    return $propre = nettoyer_uri_var($GLOBALS['REQUEST_URI']);
713 712
 }
714 713
 
715 714
 /**
@@ -721,16 +720,16 @@  discard block
 block discarded – undo
721 720
  * @return string
722 721
  */
723 722
 function nettoyer_uri_var($request_uri) {
724
-	$uri1 = $request_uri;
725
-	do {
726
-		$uri = $uri1;
727
-		$uri1 = preg_replace(
728
-			',([?&])(var_[^=&]*|PHPSESSID|fbclid|utm_[^=&]*)=[^&]*(&|$),i',
729
-			'\1',
730
-			$uri
731
-		);
732
-	} while ($uri <> $uri1);
733
-	return preg_replace(',[?&]$,', '', $uri1);
723
+    $uri1 = $request_uri;
724
+    do {
725
+        $uri = $uri1;
726
+        $uri1 = preg_replace(
727
+            ',([?&])(var_[^=&]*|PHPSESSID|fbclid|utm_[^=&]*)=[^&]*(&|$),i',
728
+            '\1',
729
+            $uri
730
+        );
731
+    } while ($uri <> $uri1);
732
+    return preg_replace(',[?&]$,', '', $uri1);
734 733
 }
735 734
 
736 735
 
@@ -744,48 +743,48 @@  discard block
 block discarded – undo
744 743
  *    URL vers soi-même
745 744
  **/
746 745
 function self($amp = '&amp;', $root = false) {
747
-	$url = nettoyer_uri();
748
-	if (
749
-		!$root
750
-		and (
751
-			// si pas de profondeur on peut tronquer
752
-			$GLOBALS['profondeur_url'] < (_DIR_RESTREINT ? 1 : 2)
753
-			// sinon c'est OK si _SET_HTML_BASE a ete force a false
754
-			or (defined('_SET_HTML_BASE') and !_SET_HTML_BASE))
755
-	) {
756
-		$url = preg_replace(',^[^?]*/,', '', $url);
757
-	}
758
-	// ajouter le cas echeant les variables _POST['id_...']
759
-	foreach ($_POST as $v => $c) {
760
-		if (substr($v, 0, 3) == 'id_') {
761
-			$url = parametre_url($url, $v, $c, '&');
762
-		}
763
-	}
764
-
765
-	// supprimer les variables sans interet
766
-	if (test_espace_prive()) {
767
-		$url = preg_replace(',([?&])('
768
-			. 'lang|show_docs|'
769
-			. 'changer_lang|var_lang|action)=[^&]*,i', '\1', $url);
770
-		$url = preg_replace(',([?&])[&]+,', '\1', $url);
771
-		$url = preg_replace(',[&]$,', '\1', $url);
772
-	}
773
-
774
-	// eviter les hacks
775
-	include_spip('inc/filtres_mini');
776
-	$url = spip_htmlspecialchars($url);
777
-
778
-	$url = str_replace(["'", '"', '<', '[', ']', ':'], ['%27', '%22', '%3C', '%5B', '%5D', '%3A'], $url);
779
-
780
-	// &amp; ?
781
-	if ($amp != '&amp;') {
782
-		$url = str_replace('&amp;', $amp, $url);
783
-	}
784
-
785
-	// Si ca demarre par ? ou vide, donner './'
786
-	$url = preg_replace(',^([?].*)?$,', './\1', $url);
787
-
788
-	return $url;
746
+    $url = nettoyer_uri();
747
+    if (
748
+        !$root
749
+        and (
750
+            // si pas de profondeur on peut tronquer
751
+            $GLOBALS['profondeur_url'] < (_DIR_RESTREINT ? 1 : 2)
752
+            // sinon c'est OK si _SET_HTML_BASE a ete force a false
753
+            or (defined('_SET_HTML_BASE') and !_SET_HTML_BASE))
754
+    ) {
755
+        $url = preg_replace(',^[^?]*/,', '', $url);
756
+    }
757
+    // ajouter le cas echeant les variables _POST['id_...']
758
+    foreach ($_POST as $v => $c) {
759
+        if (substr($v, 0, 3) == 'id_') {
760
+            $url = parametre_url($url, $v, $c, '&');
761
+        }
762
+    }
763
+
764
+    // supprimer les variables sans interet
765
+    if (test_espace_prive()) {
766
+        $url = preg_replace(',([?&])('
767
+            . 'lang|show_docs|'
768
+            . 'changer_lang|var_lang|action)=[^&]*,i', '\1', $url);
769
+        $url = preg_replace(',([?&])[&]+,', '\1', $url);
770
+        $url = preg_replace(',[&]$,', '\1', $url);
771
+    }
772
+
773
+    // eviter les hacks
774
+    include_spip('inc/filtres_mini');
775
+    $url = spip_htmlspecialchars($url);
776
+
777
+    $url = str_replace(["'", '"', '<', '[', ']', ':'], ['%27', '%22', '%3C', '%5B', '%5D', '%3A'], $url);
778
+
779
+    // &amp; ?
780
+    if ($amp != '&amp;') {
781
+        $url = str_replace('&amp;', $amp, $url);
782
+    }
783
+
784
+    // Si ca demarre par ? ou vide, donner './'
785
+    $url = preg_replace(',^([?].*)?$,', './\1', $url);
786
+
787
+    return $url;
789 788
 }
790 789
 
791 790
 
@@ -796,7 +795,7 @@  discard block
 block discarded – undo
796 795
  *     true si c'est le cas, false sinon.
797 796
  */
798 797
 function test_espace_prive() {
799
-	return defined('_ESPACE_PRIVE') ? _ESPACE_PRIVE : false;
798
+    return defined('_ESPACE_PRIVE') ? _ESPACE_PRIVE : false;
800 799
 }
801 800
 
802 801
 /**
@@ -806,7 +805,7 @@  discard block
 block discarded – undo
806 805
  * @return bool
807 806
  */
808 807
 function test_plugin_actif($plugin) {
809
-	return ($plugin and defined('_DIR_PLUGIN_' . strtoupper($plugin))) ? true : false;
808
+    return ($plugin and defined('_DIR_PLUGIN_' . strtoupper($plugin))) ? true : false;
810 809
 }
811 810
 
812 811
 /**
@@ -837,52 +836,52 @@  discard block
 block discarded – undo
837 836
  *     Texte
838 837
  */
839 838
 function _T($texte, $args = [], $options = []) {
840
-	static $traduire = false;
841
-	$o = ['class' => '', 'force' => true, 'sanitize' => true];
842
-	if ($options) {
843
-		// support de l'ancien argument $class
844
-		if (is_string($options)) {
845
-			$options = ['class' => $options];
846
-		}
847
-		$o = array_merge($o, $options);
848
-	}
849
-
850
-	if (!$traduire) {
851
-		$traduire = charger_fonction('traduire', 'inc');
852
-		include_spip('inc/lang');
853
-	}
854
-
855
-	// On peut passer explicitement la langue dans le tableau
856
-	// On utilise le même nom de variable que la globale
857
-	if (isset($args['spip_lang'])) {
858
-		$lang = $args['spip_lang'];
859
-		// On l'enleve pour ne pas le passer au remplacement
860
-		unset($args['spip_lang']);
861
-	} // Sinon on prend la langue du contexte
862
-	else {
863
-		$lang = $GLOBALS['spip_lang'];
864
-	}
865
-	$text = $traduire($texte, $lang);
866
-
867
-	if ($text === null || !strlen($text)) {
868
-		if (!$o['force']) {
869
-			return '';
870
-		}
871
-
872
-		$text = $texte;
873
-
874
-		// pour les chaines non traduites, assurer un service minimum
875
-		if (!$GLOBALS['test_i18n'] and (_request('var_mode') != 'traduction')) {
876
-			$n = strpos($text, ':');
877
-			if ($n !== false) {
878
-				$text = substr($text, $n + 1);
879
-			}
880
-			$text = str_replace('_', ' ', $text);
881
-		}
882
-		$o['class'] = null;
883
-	}
884
-
885
-	return _L($text, $args, $o);
839
+    static $traduire = false;
840
+    $o = ['class' => '', 'force' => true, 'sanitize' => true];
841
+    if ($options) {
842
+        // support de l'ancien argument $class
843
+        if (is_string($options)) {
844
+            $options = ['class' => $options];
845
+        }
846
+        $o = array_merge($o, $options);
847
+    }
848
+
849
+    if (!$traduire) {
850
+        $traduire = charger_fonction('traduire', 'inc');
851
+        include_spip('inc/lang');
852
+    }
853
+
854
+    // On peut passer explicitement la langue dans le tableau
855
+    // On utilise le même nom de variable que la globale
856
+    if (isset($args['spip_lang'])) {
857
+        $lang = $args['spip_lang'];
858
+        // On l'enleve pour ne pas le passer au remplacement
859
+        unset($args['spip_lang']);
860
+    } // Sinon on prend la langue du contexte
861
+    else {
862
+        $lang = $GLOBALS['spip_lang'];
863
+    }
864
+    $text = $traduire($texte, $lang);
865
+
866
+    if ($text === null || !strlen($text)) {
867
+        if (!$o['force']) {
868
+            return '';
869
+        }
870
+
871
+        $text = $texte;
872
+
873
+        // pour les chaines non traduites, assurer un service minimum
874
+        if (!$GLOBALS['test_i18n'] and (_request('var_mode') != 'traduction')) {
875
+            $n = strpos($text, ':');
876
+            if ($n !== false) {
877
+                $text = substr($text, $n + 1);
878
+            }
879
+            $text = str_replace('_', ' ', $text);
880
+        }
881
+        $o['class'] = null;
882
+    }
883
+
884
+    return _L($text, $args, $o);
886 885
 }
887 886
 
888 887
 
@@ -909,53 +908,53 @@  discard block
 block discarded – undo
909 908
  *     Texte
910 909
  */
911 910
 function _L($text, $args = [], $options = []) {
912
-	$f = $text;
913
-	$defaut_options = [
914
-		'class' => null,
915
-		'sanitize' => true,
916
-	];
917
-	// support de l'ancien argument $class
918
-	if ($options and is_string($options)) {
919
-		$options = ['class' => $options];
920
-	}
921
-	if (is_array($options)) {
922
-		$options += $defaut_options;
923
-	} else {
924
-		$options = $defaut_options;
925
-	}
926
-
927
-	if (is_array($args) and count($args)) {
928
-		if (!function_exists('interdire_scripts')) {
929
-			include_spip('inc/texte');
930
-		}
931
-		if (!function_exists('echapper_html_suspect')) {
932
-			include_spip('inc/texte_mini');
933
-		}
934
-		foreach ($args as $name => $value) {
935
-			if (strpos($text, (string) "@$name@") !== false) {
936
-				if ($options['sanitize']) {
937
-					$value = echapper_html_suspect($value);
938
-					$value = interdire_scripts($value, -1);
939
-				}
940
-				if (!empty($options['class'])) {
941
-					$value = "<span class='" . $options['class'] . "'>$value</span>";
942
-				}
943
-				$text = str_replace("@$name@", $value, $text);
944
-				unset($args[$name]);
945
-			}
946
-		}
947
-		// Si des variables n'ont pas ete inserees, le signaler
948
-		// (chaines de langues pas a jour)
949
-		if ($args) {
950
-			spip_log("$f:  variables inutilisees " . join(', ', array_keys($args)), _LOG_DEBUG);
951
-		}
952
-	}
953
-
954
-	if (($GLOBALS['test_i18n'] or (_request('var_mode') == 'traduction')) and is_null($options['class'])) {
955
-		return "<span class='debug-traduction-erreur'>$text</span>";
956
-	} else {
957
-		return $text;
958
-	}
911
+    $f = $text;
912
+    $defaut_options = [
913
+        'class' => null,
914
+        'sanitize' => true,
915
+    ];
916
+    // support de l'ancien argument $class
917
+    if ($options and is_string($options)) {
918
+        $options = ['class' => $options];
919
+    }
920
+    if (is_array($options)) {
921
+        $options += $defaut_options;
922
+    } else {
923
+        $options = $defaut_options;
924
+    }
925
+
926
+    if (is_array($args) and count($args)) {
927
+        if (!function_exists('interdire_scripts')) {
928
+            include_spip('inc/texte');
929
+        }
930
+        if (!function_exists('echapper_html_suspect')) {
931
+            include_spip('inc/texte_mini');
932
+        }
933
+        foreach ($args as $name => $value) {
934
+            if (strpos($text, (string) "@$name@") !== false) {
935
+                if ($options['sanitize']) {
936
+                    $value = echapper_html_suspect($value);
937
+                    $value = interdire_scripts($value, -1);
938
+                }
939
+                if (!empty($options['class'])) {
940
+                    $value = "<span class='" . $options['class'] . "'>$value</span>";
941
+                }
942
+                $text = str_replace("@$name@", $value, $text);
943
+                unset($args[$name]);
944
+            }
945
+        }
946
+        // Si des variables n'ont pas ete inserees, le signaler
947
+        // (chaines de langues pas a jour)
948
+        if ($args) {
949
+            spip_log("$f:  variables inutilisees " . join(', ', array_keys($args)), _LOG_DEBUG);
950
+        }
951
+    }
952
+
953
+    if (($GLOBALS['test_i18n'] or (_request('var_mode') == 'traduction')) and is_null($options['class'])) {
954
+        return "<span class='debug-traduction-erreur'>$text</span>";
955
+    } else {
956
+        return $text;
957
+    }
959 958
 }
960 959
 
961 960
 
@@ -969,13 +968,13 @@  discard block
 block discarded – undo
969 968
  * @return string
970 969
  */
971 970
 function joli_repertoire($rep) {
972
-	$a = substr($rep, 0, 1);
973
-	if ($a <> '.' and $a <> '/') {
974
-		$rep = (_DIR_RESTREINT ? '' : _DIR_RESTREINT_ABS) . $rep;
975
-	}
976
-	$rep = preg_replace(',(^\.\.\/),', '', $rep);
971
+    $a = substr($rep, 0, 1);
972
+    if ($a <> '.' and $a <> '/') {
973
+        $rep = (_DIR_RESTREINT ? '' : _DIR_RESTREINT_ABS) . $rep;
974
+    }
975
+    $rep = preg_replace(',(^\.\.\/),', '', $rep);
977 976
 
978
-	return $rep;
977
+    return $rep;
979 978
 }
980 979
 
981 980
 
@@ -1000,54 +999,54 @@  discard block
 block discarded – undo
1000 999
  * @return float|int|string|void
1001 1000
  */
1002 1001
 function spip_timer($t = 'rien', $raw = false) {
1003
-	static $time;
1004
-	$a = time();
1005
-	$b = microtime();
1006
-	// microtime peut contenir les microsecondes et le temps
1007
-	$b = explode(' ', $b);
1008
-	if (count($b) == 2) {
1009
-		$a = end($b);
1010
-	} // plus precis !
1011
-	$b = reset($b);
1012
-	if (!isset($time[$t])) {
1013
-		$time[$t] = $a + $b;
1014
-	} else {
1015
-		$p = ($a + $b - $time[$t]) * 1000;
1016
-		unset($time[$t]);
1002
+    static $time;
1003
+    $a = time();
1004
+    $b = microtime();
1005
+    // microtime peut contenir les microsecondes et le temps
1006
+    $b = explode(' ', $b);
1007
+    if (count($b) == 2) {
1008
+        $a = end($b);
1009
+    } // plus precis !
1010
+    $b = reset($b);
1011
+    if (!isset($time[$t])) {
1012
+        $time[$t] = $a + $b;
1013
+    } else {
1014
+        $p = ($a + $b - $time[$t]) * 1000;
1015
+        unset($time[$t]);
1017 1016
 #			echo "'$p'";exit;
1018
-		if ($raw) {
1019
-			return $p;
1020
-		}
1021
-		if ($p < 1000) {
1022
-			$s = '';
1023
-		} else {
1024
-			$s = sprintf('%d ', $x = floor($p / 1000));
1025
-			$p -= ($x * 1000);
1026
-		}
1017
+        if ($raw) {
1018
+            return $p;
1019
+        }
1020
+        if ($p < 1000) {
1021
+            $s = '';
1022
+        } else {
1023
+            $s = sprintf('%d ', $x = floor($p / 1000));
1024
+            $p -= ($x * 1000);
1025
+        }
1027 1026
 
1028
-		return $s . sprintf($s ? '%07.3f ms' : '%.3f ms', $p);
1029
-	}
1027
+        return $s . sprintf($s ? '%07.3f ms' : '%.3f ms', $p);
1028
+    }
1030 1029
 }
1031 1030
 
1032 1031
 
1033 1032
 // Renvoie False si un fichier n'est pas plus vieux que $duree secondes,
1034 1033
 // sinon renvoie True et le date sauf si ca n'est pas souhaite
1035 1034
 function spip_touch($fichier, $duree = 0, $touch = true) {
1036
-	if ($duree) {
1037
-		clearstatcache();
1038
-		if ((@$f = filemtime($fichier)) and ($f >= time() - $duree)) {
1039
-			return false;
1040
-		}
1041
-	}
1042
-	if ($touch !== false) {
1043
-		if (!@touch($fichier)) {
1044
-			spip_unlink($fichier);
1045
-			@touch($fichier);
1046
-		};
1047
-		@chmod($fichier, _SPIP_CHMOD & ~0111);
1048
-	}
1035
+    if ($duree) {
1036
+        clearstatcache();
1037
+        if ((@$f = filemtime($fichier)) and ($f >= time() - $duree)) {
1038
+            return false;
1039
+        }
1040
+    }
1041
+    if ($touch !== false) {
1042
+        if (!@touch($fichier)) {
1043
+            spip_unlink($fichier);
1044
+            @touch($fichier);
1045
+        };
1046
+        @chmod($fichier, _SPIP_CHMOD & ~0111);
1047
+    }
1049 1048
 
1050
-	return true;
1049
+    return true;
1051 1050
 }
1052 1051
 
1053 1052
 
@@ -1058,11 +1057,11 @@  discard block
 block discarded – undo
1058 1057
  * @uses cron()
1059 1058
  **/
1060 1059
 function action_cron() {
1061
-	include_spip('inc/headers');
1062
-	http_response_code(204); // No Content
1063
-	header('Connection: close');
1064
-	define('_DIRECT_CRON_FORCE', true);
1065
-	cron();
1060
+    include_spip('inc/headers');
1061
+    http_response_code(204); // No Content
1062
+    header('Connection: close');
1063
+    define('_DIRECT_CRON_FORCE', true);
1064
+    cron();
1066 1065
 }
1067 1066
 
1068 1067
 /**
@@ -1078,26 +1077,26 @@  discard block
 block discarded – undo
1078 1077
  *     True si la tache a pu être effectuée
1079 1078
  */
1080 1079
 function cron($taches = [], $taches_old = []) {
1081
-	// si pas en mode cron force, laisser tomber.
1082
-	if (!defined('_DIRECT_CRON_FORCE')) {
1083
-		return false;
1084
-	}
1085
-	if (!is_array($taches)) {
1086
-		$taches = $taches_old;
1087
-	} // compat anciens appels
1088
-	// si taches a inserer en base et base inaccessible, laisser tomber
1089
-	// sinon on ne verifie pas la connexion tout de suite, car si ca se trouve
1090
-	// queue_sleep_time_to_next_job() dira qu'il n'y a rien a faire
1091
-	// et on evite d'ouvrir une connexion pour rien (utilisation de _DIRECT_CRON_FORCE dans mes_options.php)
1092
-	if ($taches and count($taches) and !spip_connect()) {
1093
-		return false;
1094
-	}
1095
-	spip_log('cron !', 'jq' . _LOG_DEBUG);
1096
-	if ($genie = charger_fonction('genie', 'inc', true)) {
1097
-		return $genie($taches);
1098
-	}
1099
-
1100
-	return false;
1080
+    // si pas en mode cron force, laisser tomber.
1081
+    if (!defined('_DIRECT_CRON_FORCE')) {
1082
+        return false;
1083
+    }
1084
+    if (!is_array($taches)) {
1085
+        $taches = $taches_old;
1086
+    } // compat anciens appels
1087
+    // si taches a inserer en base et base inaccessible, laisser tomber
1088
+    // sinon on ne verifie pas la connexion tout de suite, car si ca se trouve
1089
+    // queue_sleep_time_to_next_job() dira qu'il n'y a rien a faire
1090
+    // et on evite d'ouvrir une connexion pour rien (utilisation de _DIRECT_CRON_FORCE dans mes_options.php)
1091
+    if ($taches and count($taches) and !spip_connect()) {
1092
+        return false;
1093
+    }
1094
+    spip_log('cron !', 'jq' . _LOG_DEBUG);
1095
+    if ($genie = charger_fonction('genie', 'inc', true)) {
1096
+        return $genie($taches);
1097
+    }
1098
+
1099
+    return false;
1101 1100
 }
1102 1101
 
1103 1102
 /**
@@ -1129,17 +1128,17 @@  discard block
 block discarded – undo
1129 1128
  *     Le numéro de travail ajouté ou `0` si aucun travail n’a été ajouté.
1130 1129
  */
1131 1130
 function job_queue_add(
1132
-	$function,
1133
-	$description,
1134
-	$arguments = [],
1135
-	$file = '',
1136
-	$no_duplicate = false,
1137
-	$time = 0,
1138
-	$priority = 0
1131
+    $function,
1132
+    $description,
1133
+    $arguments = [],
1134
+    $file = '',
1135
+    $no_duplicate = false,
1136
+    $time = 0,
1137
+    $priority = 0
1139 1138
 ) {
1140
-	include_spip('inc/queue');
1139
+    include_spip('inc/queue');
1141 1140
 
1142
-	return queue_add_job($function, $description, $arguments, $file, $no_duplicate, $time, $priority);
1141
+    return queue_add_job($function, $description, $arguments, $file, $no_duplicate, $time, $priority);
1143 1142
 }
1144 1143
 
1145 1144
 /**
@@ -1150,9 +1149,9 @@  discard block
 block discarded – undo
1150 1149
  * @return bool
1151 1150
  */
1152 1151
 function job_queue_remove($id_job) {
1153
-	include_spip('inc/queue');
1152
+    include_spip('inc/queue');
1154 1153
 
1155
-	return queue_remove_job($id_job);
1154
+    return queue_remove_job($id_job);
1156 1155
 }
1157 1156
 
1158 1157
 /**
@@ -1165,9 +1164,9 @@  discard block
 block discarded – undo
1165 1164
  *     or an array of simple array to link multiples objet in one time
1166 1165
  */
1167 1166
 function job_queue_link($id_job, $objets) {
1168
-	include_spip('inc/queue');
1167
+    include_spip('inc/queue');
1169 1168
 
1170
-	return queue_link_job($id_job, $objets);
1169
+    return queue_link_job($id_job, $objets);
1171 1170
 }
1172 1171
 
1173 1172
 
@@ -1187,36 +1186,36 @@  discard block
 block discarded – undo
1187 1186
  *  - `null` si la queue n'est pas encore initialisée
1188 1187
  */
1189 1188
 function queue_sleep_time_to_next_job($force = null) {
1190
-	static $queue_next_job_time = -1;
1191
-	if ($force === true) {
1192
-		$queue_next_job_time = -1;
1193
-	} elseif ($force) {
1194
-		$queue_next_job_time = $force;
1195
-	}
1196
-
1197
-	if ($queue_next_job_time == -1) {
1198
-		if (!defined('_JQ_NEXT_JOB_TIME_FILENAME')) {
1199
-			define('_JQ_NEXT_JOB_TIME_FILENAME', _DIR_TMP . 'job_queue_next.txt');
1200
-		}
1201
-		// utiliser un cache memoire si dispo
1202
-		if (function_exists('cache_get') and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) {
1203
-			$queue_next_job_time = cache_get(_JQ_NEXT_JOB_TIME_FILENAME);
1204
-		} else {
1205
-			$queue_next_job_time = null;
1206
-			if (lire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, $contenu)) {
1207
-				$queue_next_job_time = intval($contenu);
1208
-			}
1209
-		}
1210
-	}
1211
-
1212
-	if (is_null($queue_next_job_time)) {
1213
-		return null;
1214
-	}
1215
-	if (!$_SERVER['REQUEST_TIME']) {
1216
-		$_SERVER['REQUEST_TIME'] = time();
1217
-	}
1218
-
1219
-	return $queue_next_job_time - $_SERVER['REQUEST_TIME'];
1189
+    static $queue_next_job_time = -1;
1190
+    if ($force === true) {
1191
+        $queue_next_job_time = -1;
1192
+    } elseif ($force) {
1193
+        $queue_next_job_time = $force;
1194
+    }
1195
+
1196
+    if ($queue_next_job_time == -1) {
1197
+        if (!defined('_JQ_NEXT_JOB_TIME_FILENAME')) {
1198
+            define('_JQ_NEXT_JOB_TIME_FILENAME', _DIR_TMP . 'job_queue_next.txt');
1199
+        }
1200
+        // utiliser un cache memoire si dispo
1201
+        if (function_exists('cache_get') and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) {
1202
+            $queue_next_job_time = cache_get(_JQ_NEXT_JOB_TIME_FILENAME);
1203
+        } else {
1204
+            $queue_next_job_time = null;
1205
+            if (lire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, $contenu)) {
1206
+                $queue_next_job_time = intval($contenu);
1207
+            }
1208
+        }
1209
+    }
1210
+
1211
+    if (is_null($queue_next_job_time)) {
1212
+        return null;
1213
+    }
1214
+    if (!$_SERVER['REQUEST_TIME']) {
1215
+        $_SERVER['REQUEST_TIME'] = time();
1216
+    }
1217
+
1218
+    return $queue_next_job_time - $_SERVER['REQUEST_TIME'];
1220 1219
 }
1221 1220
 
1222 1221
 
@@ -1228,11 +1227,11 @@  discard block
 block discarded – undo
1228 1227
  * @return string
1229 1228
  */
1230 1229
 function quote_amp($u) {
1231
-	return preg_replace(
1232
-		'/&(?![a-z]{0,4}\w{2,3};|#x?[0-9a-f]{2,6};)/i',
1233
-		'&amp;',
1234
-		$u
1235
-	);
1230
+    return preg_replace(
1231
+        '/&(?![a-z]{0,4}\w{2,3};|#x?[0-9a-f]{2,6};)/i',
1232
+        '&amp;',
1233
+        $u
1234
+    );
1236 1235
 }
1237 1236
 
1238 1237
 
@@ -1255,27 +1254,27 @@  discard block
 block discarded – undo
1255 1254
  *     Balise HTML `<script>` et son contenu
1256 1255
  **/
1257 1256
 function http_script($script, $src = '', $noscript = '') {
1258
-	static $done = [];
1257
+    static $done = [];
1259 1258
 
1260
-	if ($src && !isset($done[$src])) {
1261
-		$done[$src] = true;
1262
-		$src = find_in_path($src, _JAVASCRIPT);
1263
-		$src = " src='$src'";
1264
-	} else {
1265
-		$src = '';
1266
-	}
1267
-	if ($script) {
1268
-		$script = ("/*<![CDATA[*/\n" .
1269
-			preg_replace(',</([^>]*)>,', '<\/\1>', $script) .
1270
-			'/*]]>*/');
1271
-	}
1272
-	if ($noscript) {
1273
-		$noscript = "<noscript>\n\t$noscript\n</noscript>\n";
1274
-	}
1259
+    if ($src && !isset($done[$src])) {
1260
+        $done[$src] = true;
1261
+        $src = find_in_path($src, _JAVASCRIPT);
1262
+        $src = " src='$src'";
1263
+    } else {
1264
+        $src = '';
1265
+    }
1266
+    if ($script) {
1267
+        $script = ("/*<![CDATA[*/\n" .
1268
+            preg_replace(',</([^>]*)>,', '<\/\1>', $script) .
1269
+            '/*]]>*/');
1270
+    }
1271
+    if ($noscript) {
1272
+        $noscript = "<noscript>\n\t$noscript\n</noscript>\n";
1273
+    }
1275 1274
 
1276
-	return ($src or $script or $noscript)
1277
-		? "<script type='text/javascript'$src>$script</script>$noscript"
1278
-		: '';
1275
+    return ($src or $script or $noscript)
1276
+        ? "<script type='text/javascript'$src>$script</script>$noscript"
1277
+        : '';
1279 1278
 }
1280 1279
 
1281 1280
 
@@ -1310,7 +1309,7 @@  discard block
 block discarded – undo
1310 1309
  *     Texte échappé
1311 1310
  **/
1312 1311
 function texte_script(string $texte): string {
1313
-	return str_replace('\'', '\\\'', str_replace('\\', '\\\\', $texte));
1312
+    return str_replace('\'', '\\\'', str_replace('\\', '\\\\', $texte));
1314 1313
 }
1315 1314
 
1316 1315
 
@@ -1347,68 +1346,68 @@  discard block
 block discarded – undo
1347 1346
  *     Liste des chemins, par ordre de priorité.
1348 1347
  **/
1349 1348
 function _chemin($dir_path = null) {
1350
-	static $path_base = null;
1351
-	static $path_full = null;
1352
-	if ($path_base == null) {
1353
-		// Chemin standard depuis l'espace public
1354
-		$path = defined('_SPIP_PATH') ? _SPIP_PATH :
1355
-			_DIR_RACINE . ':' .
1356
-			_DIR_RACINE . 'squelettes-dist/:' .
1357
-			_DIR_RACINE . 'prive/:' .
1358
-			_DIR_RESTREINT;
1359
-		// Ajouter squelettes/
1360
-		if (@is_dir(_DIR_RACINE . 'squelettes')) {
1361
-			$path = _DIR_RACINE . 'squelettes/:' . $path;
1362
-		}
1363
-		foreach (explode(':', $path) as $dir) {
1364
-			if (strlen($dir) and substr($dir, -1) != '/') {
1365
-				$dir .= '/';
1366
-			}
1367
-			$path_base[] = $dir;
1368
-		}
1369
-		$path_full = $path_base;
1370
-		// Et le(s) dossier(s) des squelettes nommes
1371
-		if (strlen($GLOBALS['dossier_squelettes'])) {
1372
-			foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) {
1373
-				array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/');
1374
-			}
1375
-		}
1376
-		$GLOBALS['path_sig'] = md5(serialize($path_full));
1377
-	}
1378
-	if ($dir_path === null) {
1379
-		return $path_full;
1380
-	}
1381
-
1382
-	if (is_array($dir_path) or strlen($dir_path)) {
1383
-		$tete = '';
1384
-		if (reset($path_base) == _DIR_RACINE . 'squelettes/') {
1385
-			$tete = array_shift($path_base);
1386
-		}
1387
-		$dirs = (is_array($dir_path) ? $dir_path : explode(':', $dir_path));
1388
-		$dirs = array_reverse($dirs);
1389
-		foreach ($dirs as $dir_path) {
1390
-			if (substr($dir_path, -1) != '/') {
1391
-				$dir_path .= '/';
1392
-			}
1393
-			if (!in_array($dir_path, $path_base)) {
1394
-				array_unshift($path_base, $dir_path);
1395
-			}
1396
-		}
1397
-		if (strlen($tete)) {
1398
-			array_unshift($path_base, $tete);
1399
-		}
1400
-	}
1401
-	$path_full = $path_base;
1402
-	// Et le(s) dossier(s) des squelettes nommes
1403
-	if (strlen($GLOBALS['dossier_squelettes'])) {
1404
-		foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) {
1405
-			array_unshift($path_full, ((isset($d[0]) and $d[0] == '/') ? '' : _DIR_RACINE) . $d . '/');
1406
-		}
1407
-	}
1408
-
1409
-	$GLOBALS['path_sig'] = md5(serialize($path_full));
1410
-
1411
-	return $path_full;
1349
+    static $path_base = null;
1350
+    static $path_full = null;
1351
+    if ($path_base == null) {
1352
+        // Chemin standard depuis l'espace public
1353
+        $path = defined('_SPIP_PATH') ? _SPIP_PATH :
1354
+            _DIR_RACINE . ':' .
1355
+            _DIR_RACINE . 'squelettes-dist/:' .
1356
+            _DIR_RACINE . 'prive/:' .
1357
+            _DIR_RESTREINT;
1358
+        // Ajouter squelettes/
1359
+        if (@is_dir(_DIR_RACINE . 'squelettes')) {
1360
+            $path = _DIR_RACINE . 'squelettes/:' . $path;
1361
+        }
1362
+        foreach (explode(':', $path) as $dir) {
1363
+            if (strlen($dir) and substr($dir, -1) != '/') {
1364
+                $dir .= '/';
1365
+            }
1366
+            $path_base[] = $dir;
1367
+        }
1368
+        $path_full = $path_base;
1369
+        // Et le(s) dossier(s) des squelettes nommes
1370
+        if (strlen($GLOBALS['dossier_squelettes'])) {
1371
+            foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) {
1372
+                array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/');
1373
+            }
1374
+        }
1375
+        $GLOBALS['path_sig'] = md5(serialize($path_full));
1376
+    }
1377
+    if ($dir_path === null) {
1378
+        return $path_full;
1379
+    }
1380
+
1381
+    if (is_array($dir_path) or strlen($dir_path)) {
1382
+        $tete = '';
1383
+        if (reset($path_base) == _DIR_RACINE . 'squelettes/') {
1384
+            $tete = array_shift($path_base);
1385
+        }
1386
+        $dirs = (is_array($dir_path) ? $dir_path : explode(':', $dir_path));
1387
+        $dirs = array_reverse($dirs);
1388
+        foreach ($dirs as $dir_path) {
1389
+            if (substr($dir_path, -1) != '/') {
1390
+                $dir_path .= '/';
1391
+            }
1392
+            if (!in_array($dir_path, $path_base)) {
1393
+                array_unshift($path_base, $dir_path);
1394
+            }
1395
+        }
1396
+        if (strlen($tete)) {
1397
+            array_unshift($path_base, $tete);
1398
+        }
1399
+    }
1400
+    $path_full = $path_base;
1401
+    // Et le(s) dossier(s) des squelettes nommes
1402
+    if (strlen($GLOBALS['dossier_squelettes'])) {
1403
+        foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) {
1404
+            array_unshift($path_full, ((isset($d[0]) and $d[0] == '/') ? '' : _DIR_RACINE) . $d . '/');
1405
+        }
1406
+    }
1407
+
1408
+    $GLOBALS['path_sig'] = md5(serialize($path_full));
1409
+
1410
+    return $path_full;
1412 1411
 }
1413 1412
 
1414 1413
 /**
@@ -1421,78 +1420,78 @@  discard block
 block discarded – undo
1421 1420
  * @return array Liste de chemins
1422 1421
  **/
1423 1422
 function creer_chemin() {
1424
-	$path_a = _chemin();
1425
-	static $c = '';
1423
+    $path_a = _chemin();
1424
+    static $c = '';
1426 1425
 
1427
-	// on calcule le chemin si le dossier skel a change
1428
-	if ($c != $GLOBALS['dossier_squelettes']) {
1429
-		// assurer le non plantage lors de la montee de version :
1430
-		$c = $GLOBALS['dossier_squelettes'];
1431
-		$path_a = _chemin(''); // forcer un recalcul du chemin
1432
-	}
1426
+    // on calcule le chemin si le dossier skel a change
1427
+    if ($c != $GLOBALS['dossier_squelettes']) {
1428
+        // assurer le non plantage lors de la montee de version :
1429
+        $c = $GLOBALS['dossier_squelettes'];
1430
+        $path_a = _chemin(''); // forcer un recalcul du chemin
1431
+    }
1433 1432
 
1434
-	return $path_a;
1433
+    return $path_a;
1435 1434
 }
1436 1435
 
1437 1436
 
1438 1437
 function lister_themes_prives() {
1439
-	static $themes = null;
1440
-	if (is_null($themes)) {
1441
-		// si pas encore definie
1442
-		if (!defined('_SPIP_THEME_PRIVE')) {
1443
-			define('_SPIP_THEME_PRIVE', 'spip');
1444
-		}
1445
-		$themes = [_SPIP_THEME_PRIVE];
1446
-		// lors d'une installation neuve, prefs n'est pas definie.
1447
-		if (isset($GLOBALS['visiteur_session']['prefs'])) {
1448
-			$prefs = $GLOBALS['visiteur_session']['prefs'];
1449
-		} else {
1450
-			$prefs = [];
1451
-		}
1452
-		if (is_string($prefs)) {
1453
-			$prefs = unserialize($GLOBALS['visiteur_session']['prefs']);
1454
-		}
1455
-		if (
1456
-			((isset($prefs['theme']) and $theme = $prefs['theme'])
1457
-				or (isset($GLOBALS['theme_prive_defaut']) and $theme = $GLOBALS['theme_prive_defaut']))
1458
-			and $theme != _SPIP_THEME_PRIVE
1459
-		) {
1460
-			array_unshift($themes, $theme);
1461
-		} // placer le theme choisi en tete
1462
-	}
1463
-
1464
-	return $themes;
1438
+    static $themes = null;
1439
+    if (is_null($themes)) {
1440
+        // si pas encore definie
1441
+        if (!defined('_SPIP_THEME_PRIVE')) {
1442
+            define('_SPIP_THEME_PRIVE', 'spip');
1443
+        }
1444
+        $themes = [_SPIP_THEME_PRIVE];
1445
+        // lors d'une installation neuve, prefs n'est pas definie.
1446
+        if (isset($GLOBALS['visiteur_session']['prefs'])) {
1447
+            $prefs = $GLOBALS['visiteur_session']['prefs'];
1448
+        } else {
1449
+            $prefs = [];
1450
+        }
1451
+        if (is_string($prefs)) {
1452
+            $prefs = unserialize($GLOBALS['visiteur_session']['prefs']);
1453
+        }
1454
+        if (
1455
+            ((isset($prefs['theme']) and $theme = $prefs['theme'])
1456
+                or (isset($GLOBALS['theme_prive_defaut']) and $theme = $GLOBALS['theme_prive_defaut']))
1457
+            and $theme != _SPIP_THEME_PRIVE
1458
+        ) {
1459
+            array_unshift($themes, $theme);
1460
+        } // placer le theme choisi en tete
1461
+    }
1462
+
1463
+    return $themes;
1465 1464
 }
1466 1465
 
1467 1466
 function find_in_theme($file, $subdir = '', $include = false) {
1468
-	static $themefiles = [];
1469
-	if (isset($themefiles["$subdir$file"])) {
1470
-		return $themefiles["$subdir$file"];
1471
-	}
1472
-	// on peut fournir une icone generique -xx.svg qui fera le job dans toutes les tailles, et qui est prioritaire sur le png
1473
-	// si il y a un .svg a la bonne taille (-16.svg) a cote, on l'utilise en remplacement du -16.png
1474
-	if (
1475
-		preg_match(',-(\d+)[.](png|gif|svg)$,', $file, $m)
1476
-		and $file_svg_generique = substr($file, 0, -strlen($m[0])) . '-xx.svg'
1477
-		and $f = find_in_theme("$file_svg_generique")
1478
-	) {
1479
-		if ($fsize = substr($f, 0, -6) . $m[1] . '.svg' and file_exists($fsize)) {
1480
-			return $themefiles["$subdir$file"] = $fsize;
1481
-		}
1482
-		else {
1483
-			return $themefiles["$subdir$file"] = "$f?" . $m[1] . 'px';
1484
-		}
1485
-	}
1486
-
1487
-	$themes = lister_themes_prives();
1488
-	foreach ($themes as $theme) {
1489
-		if ($f = find_in_path($file, "prive/themes/$theme/$subdir", $include)) {
1490
-			return $themefiles["$subdir$file"] = $f;
1491
-		}
1492
-	}
1493
-	spip_log("$file introuvable dans le theme prive " . reset($themes), 'theme');
1494
-
1495
-	return $themefiles["$subdir$file"] = '';
1467
+    static $themefiles = [];
1468
+    if (isset($themefiles["$subdir$file"])) {
1469
+        return $themefiles["$subdir$file"];
1470
+    }
1471
+    // on peut fournir une icone generique -xx.svg qui fera le job dans toutes les tailles, et qui est prioritaire sur le png
1472
+    // si il y a un .svg a la bonne taille (-16.svg) a cote, on l'utilise en remplacement du -16.png
1473
+    if (
1474
+        preg_match(',-(\d+)[.](png|gif|svg)$,', $file, $m)
1475
+        and $file_svg_generique = substr($file, 0, -strlen($m[0])) . '-xx.svg'
1476
+        and $f = find_in_theme("$file_svg_generique")
1477
+    ) {
1478
+        if ($fsize = substr($f, 0, -6) . $m[1] . '.svg' and file_exists($fsize)) {
1479
+            return $themefiles["$subdir$file"] = $fsize;
1480
+        }
1481
+        else {
1482
+            return $themefiles["$subdir$file"] = "$f?" . $m[1] . 'px';
1483
+        }
1484
+    }
1485
+
1486
+    $themes = lister_themes_prives();
1487
+    foreach ($themes as $theme) {
1488
+        if ($f = find_in_path($file, "prive/themes/$theme/$subdir", $include)) {
1489
+            return $themefiles["$subdir$file"] = $f;
1490
+        }
1491
+    }
1492
+    spip_log("$file introuvable dans le theme prive " . reset($themes), 'theme');
1493
+
1494
+    return $themefiles["$subdir$file"] = '';
1496 1495
 }
1497 1496
 
1498 1497
 
@@ -1516,31 +1515,31 @@  discard block
 block discarded – undo
1516 1515
  *     sinon chaîne vide.
1517 1516
  **/
1518 1517
 function chemin_image($icone) {
1519
-	static $icone_renommer;
1520
-	if ($p = strpos($icone, '?')) {
1521
-		$icone = substr($icone, 0, $p);
1522
-	}
1523
-	// gerer le cas d'un double appel en evitant de refaire le travail inutilement
1524
-	if (strpos($icone, '/') !== false and file_exists($icone)) {
1525
-		return $icone;
1526
-	}
1527
-
1528
-	// si c'est un nom d'image complet (article-24.png) essayer de le renvoyer direct
1529
-	if (preg_match(',[.](png|gif|jpg|webp|svg)$,', $icone) and $f = find_in_theme("images/$icone")) {
1530
-		return $f;
1531
-	}
1532
-	// sinon passer par le module de renommage
1533
-	if (is_null($icone_renommer)) {
1534
-		$icone_renommer = charger_fonction('icone_renommer', 'inc', true);
1535
-	}
1536
-	if ($icone_renommer) {
1537
-		[$icone, $fonction] = $icone_renommer($icone, '');
1538
-		if (file_exists($icone)) {
1539
-			return $icone;
1540
-		}
1541
-	}
1542
-
1543
-	return find_in_path($icone, _NOM_IMG_PACK);
1518
+    static $icone_renommer;
1519
+    if ($p = strpos($icone, '?')) {
1520
+        $icone = substr($icone, 0, $p);
1521
+    }
1522
+    // gerer le cas d'un double appel en evitant de refaire le travail inutilement
1523
+    if (strpos($icone, '/') !== false and file_exists($icone)) {
1524
+        return $icone;
1525
+    }
1526
+
1527
+    // si c'est un nom d'image complet (article-24.png) essayer de le renvoyer direct
1528
+    if (preg_match(',[.](png|gif|jpg|webp|svg)$,', $icone) and $f = find_in_theme("images/$icone")) {
1529
+        return $f;
1530
+    }
1531
+    // sinon passer par le module de renommage
1532
+    if (is_null($icone_renommer)) {
1533
+        $icone_renommer = charger_fonction('icone_renommer', 'inc', true);
1534
+    }
1535
+    if ($icone_renommer) {
1536
+        [$icone, $fonction] = $icone_renommer($icone, '');
1537
+        if (file_exists($icone)) {
1538
+            return $icone;
1539
+        }
1540
+    }
1541
+
1542
+    return find_in_path($icone, _NOM_IMG_PACK);
1544 1543
 }
1545 1544
 
1546 1545
 //
@@ -1578,128 +1577,128 @@  discard block
 block discarded – undo
1578 1577
  *     - false : fichier introuvable
1579 1578
  **/
1580 1579
 function find_in_path($file, $dirname = '', $include = false) {
1581
-	static $dirs = [];
1582
-	static $inc = []; # cf https://git.spip.net/spip/spip/commit/42e4e028e38c839121efaee84308d08aee307eec
1583
-	static $c = '';
1584
-
1585
-	if (!$file and !strlen($file)) {
1586
-		return false;
1587
-	}
1588
-
1589
-	// on calcule le chemin si le dossier skel a change
1590
-	if ($c != $GLOBALS['dossier_squelettes']) {
1591
-		// assurer le non plantage lors de la montee de version :
1592
-		$c = $GLOBALS['dossier_squelettes'];
1593
-		creer_chemin(); // forcer un recalcul du chemin et la mise a jour de path_sig
1594
-	}
1595
-
1596
-	if (isset($GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file])) {
1597
-		if (!$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]) {
1598
-			return false;
1599
-		}
1600
-		if ($include and !isset($inc[$dirname][$file])) {
1601
-			include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
1602
-			$inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
1603
-		}
1604
-
1605
-		return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
1606
-	}
1607
-
1608
-	$a = strrpos($file, '/');
1609
-	if ($a !== false) {
1610
-		$dirname .= substr($file, 0, ++$a);
1611
-		$file = substr($file, $a);
1612
-	}
1613
-
1614
-	foreach (creer_chemin() as $dir) {
1615
-		if (!isset($dirs[$a = $dir . $dirname])) {
1616
-			$dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a);
1617
-		}
1618
-		if ($dirs[$a]) {
1619
-			if (file_exists(_ROOT_CWD . ($a .= $file))) {
1620
-				if ($include and !isset($inc[$dirname][$file])) {
1621
-					include_once _ROOT_CWD . $a;
1622
-					$inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
1623
-				}
1624
-				if (!defined('_SAUVER_CHEMIN')) {
1625
-					// si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
1626
-					if (is_null($GLOBALS['path_files'])) {
1627
-						return $a;
1628
-					}
1629
-					define('_SAUVER_CHEMIN', true);
1630
-				}
1631
-
1632
-				return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a;
1633
-			}
1634
-		}
1635
-	}
1636
-
1637
-	if ($include) {
1638
-		spip_log("include_spip $dirname$file non trouve");
1639
-		if ($include === 'required') {
1640
-			echo '<pre>',
1641
-			'<strong>Erreur Fatale</strong><br />';
1642
-			if (function_exists('debug_print_backtrace')) {
1643
-				echo debug_print_backtrace();
1644
-			}
1645
-			echo '</pre>';
1646
-			die("Erreur interne: ne peut inclure $dirname$file");
1647
-		}
1648
-	}
1649
-
1650
-	if (!defined('_SAUVER_CHEMIN')) {
1651
-		// si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
1652
-		if (is_null($GLOBALS['path_files'])) {
1653
-			return false;
1654
-		}
1655
-		define('_SAUVER_CHEMIN', true);
1656
-	}
1657
-
1658
-	return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false;
1580
+    static $dirs = [];
1581
+    static $inc = []; # cf https://git.spip.net/spip/spip/commit/42e4e028e38c839121efaee84308d08aee307eec
1582
+    static $c = '';
1583
+
1584
+    if (!$file and !strlen($file)) {
1585
+        return false;
1586
+    }
1587
+
1588
+    // on calcule le chemin si le dossier skel a change
1589
+    if ($c != $GLOBALS['dossier_squelettes']) {
1590
+        // assurer le non plantage lors de la montee de version :
1591
+        $c = $GLOBALS['dossier_squelettes'];
1592
+        creer_chemin(); // forcer un recalcul du chemin et la mise a jour de path_sig
1593
+    }
1594
+
1595
+    if (isset($GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file])) {
1596
+        if (!$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]) {
1597
+            return false;
1598
+        }
1599
+        if ($include and !isset($inc[$dirname][$file])) {
1600
+            include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
1601
+            $inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
1602
+        }
1603
+
1604
+        return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
1605
+    }
1606
+
1607
+    $a = strrpos($file, '/');
1608
+    if ($a !== false) {
1609
+        $dirname .= substr($file, 0, ++$a);
1610
+        $file = substr($file, $a);
1611
+    }
1612
+
1613
+    foreach (creer_chemin() as $dir) {
1614
+        if (!isset($dirs[$a = $dir . $dirname])) {
1615
+            $dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a);
1616
+        }
1617
+        if ($dirs[$a]) {
1618
+            if (file_exists(_ROOT_CWD . ($a .= $file))) {
1619
+                if ($include and !isset($inc[$dirname][$file])) {
1620
+                    include_once _ROOT_CWD . $a;
1621
+                    $inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
1622
+                }
1623
+                if (!defined('_SAUVER_CHEMIN')) {
1624
+                    // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
1625
+                    if (is_null($GLOBALS['path_files'])) {
1626
+                        return $a;
1627
+                    }
1628
+                    define('_SAUVER_CHEMIN', true);
1629
+                }
1630
+
1631
+                return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a;
1632
+            }
1633
+        }
1634
+    }
1635
+
1636
+    if ($include) {
1637
+        spip_log("include_spip $dirname$file non trouve");
1638
+        if ($include === 'required') {
1639
+            echo '<pre>',
1640
+            '<strong>Erreur Fatale</strong><br />';
1641
+            if (function_exists('debug_print_backtrace')) {
1642
+                echo debug_print_backtrace();
1643
+            }
1644
+            echo '</pre>';
1645
+            die("Erreur interne: ne peut inclure $dirname$file");
1646
+        }
1647
+    }
1648
+
1649
+    if (!defined('_SAUVER_CHEMIN')) {
1650
+        // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
1651
+        if (is_null($GLOBALS['path_files'])) {
1652
+            return false;
1653
+        }
1654
+        define('_SAUVER_CHEMIN', true);
1655
+    }
1656
+
1657
+    return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false;
1659 1658
 }
1660 1659
 
1661 1660
 function clear_path_cache() {
1662
-	$GLOBALS['path_files'] = [];
1663
-	spip_unlink(_CACHE_CHEMIN);
1661
+    $GLOBALS['path_files'] = [];
1662
+    spip_unlink(_CACHE_CHEMIN);
1664 1663
 }
1665 1664
 
1666 1665
 function load_path_cache() {
1667
-	// charger le path des plugins
1668
-	if (@is_readable(_CACHE_PLUGINS_PATH)) {
1669
-		include_once(_CACHE_PLUGINS_PATH);
1670
-	}
1671
-	$GLOBALS['path_files'] = [];
1672
-	// si le visiteur est admin,
1673
-	// on ne recharge pas le cache pour forcer sa mise a jour
1674
-	if (
1675
-		// la session n'est pas encore chargee a ce moment, on ne peut donc pas s'y fier
1676
-		//AND (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut']!='0minirezo')
1677
-		// utiliser le cookie est un pis aller qui marche 'en general'
1678
-		// on blinde par un second test au moment de la lecture de la session
1679
-		// !isset($_COOKIE[$GLOBALS['cookie_prefix'].'_admin'])
1680
-		// et en ignorant ce cache en cas de recalcul explicite
1681
-		!_request('var_mode')
1682
-	) {
1683
-		// on essaye de lire directement sans verrou pour aller plus vite
1684
-		if ($contenu = spip_file_get_contents(_CACHE_CHEMIN)) {
1685
-			// mais si semble corrompu on relit avec un verrou
1686
-			if (!$GLOBALS['path_files'] = unserialize($contenu)) {
1687
-				lire_fichier(_CACHE_CHEMIN, $contenu);
1688
-				if (!$GLOBALS['path_files'] = unserialize($contenu)) {
1689
-					$GLOBALS['path_files'] = [];
1690
-				}
1691
-			}
1692
-		}
1693
-	}
1666
+    // charger le path des plugins
1667
+    if (@is_readable(_CACHE_PLUGINS_PATH)) {
1668
+        include_once(_CACHE_PLUGINS_PATH);
1669
+    }
1670
+    $GLOBALS['path_files'] = [];
1671
+    // si le visiteur est admin,
1672
+    // on ne recharge pas le cache pour forcer sa mise a jour
1673
+    if (
1674
+        // la session n'est pas encore chargee a ce moment, on ne peut donc pas s'y fier
1675
+        //AND (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut']!='0minirezo')
1676
+        // utiliser le cookie est un pis aller qui marche 'en general'
1677
+        // on blinde par un second test au moment de la lecture de la session
1678
+        // !isset($_COOKIE[$GLOBALS['cookie_prefix'].'_admin'])
1679
+        // et en ignorant ce cache en cas de recalcul explicite
1680
+        !_request('var_mode')
1681
+    ) {
1682
+        // on essaye de lire directement sans verrou pour aller plus vite
1683
+        if ($contenu = spip_file_get_contents(_CACHE_CHEMIN)) {
1684
+            // mais si semble corrompu on relit avec un verrou
1685
+            if (!$GLOBALS['path_files'] = unserialize($contenu)) {
1686
+                lire_fichier(_CACHE_CHEMIN, $contenu);
1687
+                if (!$GLOBALS['path_files'] = unserialize($contenu)) {
1688
+                    $GLOBALS['path_files'] = [];
1689
+                }
1690
+            }
1691
+        }
1692
+    }
1694 1693
 }
1695 1694
 
1696 1695
 function save_path_cache() {
1697
-	if (
1698
-		defined('_SAUVER_CHEMIN')
1699
-		and _SAUVER_CHEMIN
1700
-	) {
1701
-		ecrire_fichier(_CACHE_CHEMIN, serialize($GLOBALS['path_files']));
1702
-	}
1696
+    if (
1697
+        defined('_SAUVER_CHEMIN')
1698
+        and _SAUVER_CHEMIN
1699
+    ) {
1700
+        ecrire_fichier(_CACHE_CHEMIN, serialize($GLOBALS['path_files']));
1701
+    }
1703 1702
 }
1704 1703
 
1705 1704
 
@@ -1719,33 +1718,33 @@  discard block
 block discarded – undo
1719 1718
  * @return array
1720 1719
  */
1721 1720
 function find_all_in_path($dir, $pattern, $recurs = false) {
1722
-	$liste_fichiers = [];
1723
-	$maxfiles = 10000;
1724
-
1725
-	// cas borderline si dans mes_options on appelle redirige_par_entete qui utilise _T et charge un fichier de langue
1726
-	// on a pas encore inclus flock.php
1727
-	if (!function_exists('preg_files')) {
1728
-		include_once _ROOT_RESTREINT . 'inc/flock.php';
1729
-	}
1730
-
1731
-	// Parcourir le chemin
1732
-	foreach (creer_chemin() as $d) {
1733
-		$f = $d . $dir;
1734
-		if (@is_dir($f)) {
1735
-			$liste = preg_files($f, $pattern, $maxfiles - count($liste_fichiers), $recurs === true ? [] : $recurs);
1736
-			foreach ($liste as $chemin) {
1737
-				$nom = basename($chemin);
1738
-				// ne prendre que les fichiers pas deja trouves
1739
-				// car find_in_path prend le premier qu'il trouve,
1740
-				// les autres sont donc masques
1741
-				if (!isset($liste_fichiers[$nom])) {
1742
-					$liste_fichiers[$nom] = $chemin;
1743
-				}
1744
-			}
1745
-		}
1746
-	}
1747
-
1748
-	return $liste_fichiers;
1721
+    $liste_fichiers = [];
1722
+    $maxfiles = 10000;
1723
+
1724
+    // cas borderline si dans mes_options on appelle redirige_par_entete qui utilise _T et charge un fichier de langue
1725
+    // on a pas encore inclus flock.php
1726
+    if (!function_exists('preg_files')) {
1727
+        include_once _ROOT_RESTREINT . 'inc/flock.php';
1728
+    }
1729
+
1730
+    // Parcourir le chemin
1731
+    foreach (creer_chemin() as $d) {
1732
+        $f = $d . $dir;
1733
+        if (@is_dir($f)) {
1734
+            $liste = preg_files($f, $pattern, $maxfiles - count($liste_fichiers), $recurs === true ? [] : $recurs);
1735
+            foreach ($liste as $chemin) {
1736
+                $nom = basename($chemin);
1737
+                // ne prendre que les fichiers pas deja trouves
1738
+                // car find_in_path prend le premier qu'il trouve,
1739
+                // les autres sont donc masques
1740
+                if (!isset($liste_fichiers[$nom])) {
1741
+                    $liste_fichiers[$nom] = $chemin;
1742
+                }
1743
+            }
1744
+        }
1745
+    }
1746
+
1747
+    return $liste_fichiers;
1749 1748
 }
1750 1749
 
1751 1750
 /**
@@ -1757,17 +1756,17 @@  discard block
 block discarded – undo
1757 1756
  * @return bool
1758 1757
  */
1759 1758
 function autoriser_sans_cookie($nom, $strict = false) {
1760
-	static $autsanscookie = ['install', 'base_repair'];
1759
+    static $autsanscookie = ['install', 'base_repair'];
1761 1760
 
1762
-	if (in_array($nom, $autsanscookie)) {
1763
-		if (test_espace_prive()) {
1764
-			include_spip('base/connect_sql');
1765
-			if (!$strict or !spip_connect()) {
1766
-				return true;
1767
-			}
1768
-		}
1769
-	}
1770
-	return false;
1761
+    if (in_array($nom, $autsanscookie)) {
1762
+        if (test_espace_prive()) {
1763
+            include_spip('base/connect_sql');
1764
+            if (!$strict or !spip_connect()) {
1765
+                return true;
1766
+            }
1767
+        }
1768
+    }
1769
+    return false;
1771 1770
 }
1772 1771
 
1773 1772
 /**
@@ -1777,56 +1776,56 @@  discard block
 block discarded – undo
1777 1776
  * @return string
1778 1777
  */
1779 1778
 function charger_fonction_url(string $quoi, string $type = '') {
1780
-	if ($type === 'defaut') {
1781
-		$objet = objet_type($quoi);
1782
-		if ($f = charger_fonction('generer_' . $objet . '_url', 'urls', true)
1783
-			// deprecated
1784
-			or $f = charger_fonction('generer_url_' . $objet, 'urls', true)
1785
-		) {
1786
-			return $f;
1787
-		}
1788
-		return '';
1789
-	}
1790
-
1791
-	if (!$type) {
1792
-		$type = $GLOBALS['type_urls'] ?? $GLOBALS['meta']['type_urls'] ?? 'page'; // sinon type "page" par défaut
1793
-	}
1794
-
1795
-	// inclure le module d'url
1796
-	include_spip('urls/'.$type);
1797
-
1798
-	switch ($quoi) {
1799
-		case 'page':
1800
-			if (
1801
-				 function_exists($f = "urls_{$type}_generer_url_page")
1802
-			  or function_exists($f .= "_dist")
1803
-			  // ou une fonction custom utilisateur independante du type d'url
1804
-			  or function_exists($f = "generer_url_page")
1805
-			  or function_exists($f .= "_dist")
1806
-			) {
1807
-				return $f;
1808
-			}
1809
-			// pas de compat ancienne version ici, c'est une nouvelle feature
1810
-			return '';
1811
-		case 'objet':
1812
-		case 'decoder':
1813
-		default:
1814
-			$fquoi = ($quoi === 'objet' ? 'generer_url_objet' : 'decoder_url');
1815
-			if (function_exists($f = "urls_{$type}_{$fquoi}")
1816
-			  or function_exists($f .= "_dist")) {
1817
-				return $f;
1818
-			}
1819
-			// est-ce qu'on a une ancienne fonction urls_xxx_dist() ?
1820
-			// c'est un ancien module d'url, on appelle l'ancienne fonction qui fait tout
1821
-			if ($f = charger_fonction($type, 'urls', true)) {
1822
-				return $f;
1823
-			}
1824
-			// sinon on se rabat sur les urls page
1825
-			if ($type !== 'page') {
1826
-				return charger_fonction_url($quoi, 'page');
1827
-			}
1828
-			return '';
1829
-	}
1779
+    if ($type === 'defaut') {
1780
+        $objet = objet_type($quoi);
1781
+        if ($f = charger_fonction('generer_' . $objet . '_url', 'urls', true)
1782
+            // deprecated
1783
+            or $f = charger_fonction('generer_url_' . $objet, 'urls', true)
1784
+        ) {
1785
+            return $f;
1786
+        }
1787
+        return '';
1788
+    }
1789
+
1790
+    if (!$type) {
1791
+        $type = $GLOBALS['type_urls'] ?? $GLOBALS['meta']['type_urls'] ?? 'page'; // sinon type "page" par défaut
1792
+    }
1793
+
1794
+    // inclure le module d'url
1795
+    include_spip('urls/'.$type);
1796
+
1797
+    switch ($quoi) {
1798
+        case 'page':
1799
+            if (
1800
+                    function_exists($f = "urls_{$type}_generer_url_page")
1801
+              or function_exists($f .= "_dist")
1802
+                // ou une fonction custom utilisateur independante du type d'url
1803
+              or function_exists($f = "generer_url_page")
1804
+              or function_exists($f .= "_dist")
1805
+            ) {
1806
+                return $f;
1807
+            }
1808
+            // pas de compat ancienne version ici, c'est une nouvelle feature
1809
+            return '';
1810
+        case 'objet':
1811
+        case 'decoder':
1812
+        default:
1813
+            $fquoi = ($quoi === 'objet' ? 'generer_url_objet' : 'decoder_url');
1814
+            if (function_exists($f = "urls_{$type}_{$fquoi}")
1815
+              or function_exists($f .= "_dist")) {
1816
+                return $f;
1817
+            }
1818
+            // est-ce qu'on a une ancienne fonction urls_xxx_dist() ?
1819
+            // c'est un ancien module d'url, on appelle l'ancienne fonction qui fait tout
1820
+            if ($f = charger_fonction($type, 'urls', true)) {
1821
+                return $f;
1822
+            }
1823
+            // sinon on se rabat sur les urls page
1824
+            if ($type !== 'page') {
1825
+                return charger_fonction_url($quoi, 'page');
1826
+            }
1827
+            return '';
1828
+    }
1830 1829
 }
1831 1830
 
1832 1831
 
@@ -1855,47 +1854,47 @@  discard block
 block discarded – undo
1855 1854
  *           (cas des raccourcis personalises [->spip20] : il faut implementer une fonction generer_spip_url et une fonction generer_spip_url_ecrire)
1856 1855
  */
1857 1856
 function generer_objet_url($id, string $entite, string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string {
1858
-	if ($public === null) {
1859
-		$public = !test_espace_prive();
1860
-	}
1861
-	$id = intval($id);
1862
-	$entite = objet_type($entite); // cas particulier d'appels sur objet/id_objet...
1863
-
1864
-	if (!$public) {
1865
-		if (!$entite) {
1866
-			return '';
1867
-		}
1868
-		if (!function_exists('generer_objet_url_ecrire')) {
1869
-			include_spip('inc/urls');
1870
-		}
1871
-		$res = generer_objet_url_ecrire($id, $entite, $args, $ancre, false, $connect);
1872
-	} else {
1873
-		$f = charger_fonction_url('objet', $type ?? '');
1874
-
1875
-		// @deprecated si $entite='', on veut la fonction de passage URL ==> id
1876
-		// @see charger_fonction_url
1877
-		if (!$entite) {
1878
-			return $f;
1879
-		}
1880
-
1881
-		// mais d'abord il faut tester le cas des urls sur une
1882
-		// base distante
1883
-		if ($connect
1884
-			and $g = charger_fonction('connect', 'urls', true)
1885
-		) {
1886
-			$f = $g;
1887
-		}
1888
-
1889
-		$res = $f(intval($id), $entite, $args ?: '', $ancre ?: '', $connect);
1890
-	}
1891
-	if ($res) {
1892
-		return $res;
1893
-	}
1894
-
1895
-	// On a ete gentil mais la ....
1896
-	spip_log("generer_objet_url: entite $entite ($f) inconnue $type $public $connect", _LOG_ERREUR);
1897
-
1898
-	return '';
1857
+    if ($public === null) {
1858
+        $public = !test_espace_prive();
1859
+    }
1860
+    $id = intval($id);
1861
+    $entite = objet_type($entite); // cas particulier d'appels sur objet/id_objet...
1862
+
1863
+    if (!$public) {
1864
+        if (!$entite) {
1865
+            return '';
1866
+        }
1867
+        if (!function_exists('generer_objet_url_ecrire')) {
1868
+            include_spip('inc/urls');
1869
+        }
1870
+        $res = generer_objet_url_ecrire($id, $entite, $args, $ancre, false, $connect);
1871
+    } else {
1872
+        $f = charger_fonction_url('objet', $type ?? '');
1873
+
1874
+        // @deprecated si $entite='', on veut la fonction de passage URL ==> id
1875
+        // @see charger_fonction_url
1876
+        if (!$entite) {
1877
+            return $f;
1878
+        }
1879
+
1880
+        // mais d'abord il faut tester le cas des urls sur une
1881
+        // base distante
1882
+        if ($connect
1883
+            and $g = charger_fonction('connect', 'urls', true)
1884
+        ) {
1885
+            $f = $g;
1886
+        }
1887
+
1888
+        $res = $f(intval($id), $entite, $args ?: '', $ancre ?: '', $connect);
1889
+    }
1890
+    if ($res) {
1891
+        return $res;
1892
+    }
1893
+
1894
+    // On a ete gentil mais la ....
1895
+    spip_log("generer_objet_url: entite $entite ($f) inconnue $type $public $connect", _LOG_ERREUR);
1896
+
1897
+    return '';
1899 1898
 }
1900 1899
 
1901 1900
 /**
@@ -1903,10 +1902,10 @@  discard block
 block discarded – undo
1903 1902
  * @see generer_objet_url
1904 1903
  */
1905 1904
 function generer_url_entite($id = 0, $entite = '', $args = '', $ancre = '', $public = null, $type = null){
1906
-	if ($public and is_string($public)) {
1907
-		return generer_objet_url(intval($id), $entite, $args ?: '', $ancre ?: '', true, $type ?? '', $public);
1908
-	}
1909
-	return generer_objet_url(intval($id), $entite, $args ?: '', $ancre ?: '', $public, $type ?? '');
1905
+    if ($public and is_string($public)) {
1906
+        return generer_objet_url(intval($id), $entite, $args ?: '', $ancre ?: '', true, $type ?? '', $public);
1907
+    }
1908
+    return generer_objet_url(intval($id), $entite, $args ?: '', $ancre ?: '', $public, $type ?? '');
1910 1909
 }
1911 1910
 
1912 1911
 /**
@@ -1918,19 +1917,19 @@  discard block
 block discarded – undo
1918 1917
  * @return string
1919 1918
  */
1920 1919
 function generer_objet_url_ecrire_edit($id, string $entite, string $args = '', string $ancre = ''): string {
1921
-	$id = intval($id);
1922
-	$exec = objet_info($entite, 'url_edit');
1923
-	$url = generer_url_ecrire($exec, $args);
1924
-	if (intval($id)) {
1925
-		$url = parametre_url($url, id_table_objet($entite), $id);
1926
-	} else {
1927
-		$url = parametre_url($url, 'new', 'oui');
1928
-	}
1929
-	if ($ancre) {
1930
-		$url = ancre_url($url, $ancre);
1931
-	}
1920
+    $id = intval($id);
1921
+    $exec = objet_info($entite, 'url_edit');
1922
+    $url = generer_url_ecrire($exec, $args);
1923
+    if (intval($id)) {
1924
+        $url = parametre_url($url, id_table_objet($entite), $id);
1925
+    } else {
1926
+        $url = parametre_url($url, 'new', 'oui');
1927
+    }
1928
+    if ($ancre) {
1929
+        $url = ancre_url($url, $ancre);
1930
+    }
1932 1931
 
1933
-	return $url;
1932
+    return $url;
1934 1933
 }
1935 1934
 
1936 1935
 /**
@@ -1938,18 +1937,18 @@  discard block
 block discarded – undo
1938 1937
  * @see generer_objet_url_ecrire_edit
1939 1938
  */
1940 1939
 function generer_url_ecrire_entite_edit($id, $entite, $args = '', $ancre = ''){
1941
-	return generer_objet_url_ecrire_edit(intval($id), $entite, $args, $ancre);
1940
+    return generer_objet_url_ecrire_edit(intval($id), $entite, $args, $ancre);
1942 1941
 }
1943 1942
 
1944 1943
 
1945 1944
 function urls_connect_dist($i, &$entite, $args = '', $ancre = '', $public = null) {
1946
-	include_spip('base/connect_sql');
1947
-	$id_type = id_table_objet($entite, $public);
1945
+    include_spip('base/connect_sql');
1946
+    $id_type = id_table_objet($entite, $public);
1948 1947
 
1949
-	return _DIR_RACINE . get_spip_script('./')
1950
-	. '?' . _SPIP_PAGE . "=$entite&$id_type=$i&connect=$public"
1951
-	. (!$args ? '' : "&$args")
1952
-	. (!$ancre ? '' : "#$ancre");
1948
+    return _DIR_RACINE . get_spip_script('./')
1949
+    . '?' . _SPIP_PAGE . "=$entite&$id_type=$i&connect=$public"
1950
+    . (!$args ? '' : "&$args")
1951
+    . (!$ancre ? '' : "#$ancre");
1953 1952
 }
1954 1953
 
1955 1954
 
@@ -1960,18 +1959,18 @@  discard block
 block discarded – undo
1960 1959
  * @return string
1961 1960
  */
1962 1961
 function urlencode_1738($url) {
1963
-	if (preg_match(',[^\x00-\x7E],sS', $url)) {
1964
-		$uri = '';
1965
-		for ($i = 0; $i < strlen($url); $i++) {
1966
-			if (ord($a = $url[$i]) > 127) {
1967
-				$a = rawurlencode($a);
1968
-			}
1969
-			$uri .= $a;
1970
-		}
1971
-		$url = $uri;
1972
-	}
1962
+    if (preg_match(',[^\x00-\x7E],sS', $url)) {
1963
+        $uri = '';
1964
+        for ($i = 0; $i < strlen($url); $i++) {
1965
+            if (ord($a = $url[$i]) > 127) {
1966
+                $a = rawurlencode($a);
1967
+            }
1968
+            $uri .= $a;
1969
+        }
1970
+        $url = $uri;
1971
+    }
1973 1972
 
1974
-	return quote_amp($url);
1973
+    return quote_amp($url);
1975 1974
 }
1976 1975
 
1977 1976
 /**
@@ -1987,14 +1986,14 @@  discard block
 block discarded – undo
1987 1986
  * @return string
1988 1987
  */
1989 1988
 function generer_objet_url_absolue($id = 0, string $entite = '', string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string {
1990
-	$id = intval($id);
1991
-	$h = generer_objet_url($id, $entite, $args, $ancre, $public, $type, $connect);
1992
-	if (!preg_match(',^\w+:,', $h)) {
1993
-		include_spip('inc/filtres_mini');
1994
-		$h = url_absolue($h);
1995
-	}
1989
+    $id = intval($id);
1990
+    $h = generer_objet_url($id, $entite, $args, $ancre, $public, $type, $connect);
1991
+    if (!preg_match(',^\w+:,', $h)) {
1992
+        include_spip('inc/filtres_mini');
1993
+        $h = url_absolue($h);
1994
+    }
1996 1995
 
1997
-	return $h;
1996
+    return $h;
1998 1997
 }
1999 1998
 
2000 1999
 /**
@@ -2002,7 +2001,7 @@  discard block
 block discarded – undo
2002 2001
  * @see  generer_objet_url_absolue
2003 2002
  */
2004 2003
 function generer_url_entite_absolue($id = 0, $entite = '', $args = '', $ancre = '', $connect = null){
2005
-	return generer_objet_url_absolue(intval($id), $entite, $args, $ancre, true, '', $connect);
2004
+    return generer_objet_url_absolue(intval($id), $entite, $args, $ancre, true, '', $connect);
2006 2005
 }
2007 2006
 
2008 2007
 
@@ -2018,11 +2017,11 @@  discard block
 block discarded – undo
2018 2017
  *     true si la valeur est considérée active ; false sinon.
2019 2018
  **/
2020 2019
 function test_valeur_serveur($truc) {
2021
-	if (!$truc) {
2022
-		return false;
2023
-	}
2020
+    if (!$truc) {
2021
+        return false;
2022
+    }
2024 2023
 
2025
-	return (strtolower($truc) !== 'off');
2024
+    return (strtolower($truc) !== 'off');
2026 2025
 }
2027 2026
 
2028 2027
 //
@@ -2050,82 +2049,82 @@  discard block
 block discarded – undo
2050 2049
  */
2051 2050
 function url_de_base($profondeur = null) {
2052 2051
 
2053
-	static $url = [];
2054
-	if (is_array($profondeur)) {
2055
-		return $url = $profondeur;
2056
-	}
2057
-	if ($profondeur === false) {
2058
-		return $url;
2059
-	}
2060
-
2061
-	if (is_null($profondeur)) {
2062
-		$profondeur = $GLOBALS['profondeur_url'] ?? (_DIR_RESTREINT ? 0 : 1);
2063
-	}
2064
-
2065
-	if (isset($url[$profondeur])) {
2066
-		return $url[$profondeur];
2067
-	}
2068
-
2069
-	$http = 'http';
2070
-
2071
-	if (
2072
-		isset($_SERVER['SCRIPT_URI'])
2073
-		and substr($_SERVER['SCRIPT_URI'], 0, 5) == 'https'
2074
-	) {
2075
-		$http = 'https';
2076
-	} elseif (
2077
-		isset($_SERVER['HTTPS'])
2078
-		and test_valeur_serveur($_SERVER['HTTPS'])
2079
-	) {
2080
-		$http = 'https';
2081
-	}
2082
-
2083
-	// note : HTTP_HOST contient le :port si necessaire
2084
-	$host = $_SERVER['HTTP_HOST'] ?? null;
2085
-	// si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback
2086
-	if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) {
2087
-		$host = $GLOBALS['meta']['adresse_site'];
2088
-		if ($scheme = parse_url($host, PHP_URL_SCHEME)) {
2089
-			$http = $scheme;
2090
-			$host = str_replace("{$scheme}://", '', $host);
2091
-		}
2092
-	}
2093
-	if (
2094
-		isset($_SERVER['SERVER_PORT'])
2095
-		and $port = $_SERVER['SERVER_PORT']
2096
-		and strpos($host, ':') == false
2097
-	) {
2098
-		if (!defined('_PORT_HTTP_STANDARD')) {
2099
-			define('_PORT_HTTP_STANDARD', '80');
2100
-		}
2101
-		if (!defined('_PORT_HTTPS_STANDARD')) {
2102
-			define('_PORT_HTTPS_STANDARD', '443');
2103
-		}
2104
-		if ($http == 'http' and !in_array($port, explode(',', _PORT_HTTP_STANDARD))) {
2105
-			$host .= ":$port";
2106
-		}
2107
-		if ($http == 'https' and !in_array($port, explode(',', _PORT_HTTPS_STANDARD))) {
2108
-			$host .= ":$port";
2109
-		}
2110
-	}
2111
-
2112
-	if (!$GLOBALS['REQUEST_URI']) {
2113
-		if (isset($_SERVER['REQUEST_URI'])) {
2114
-			$GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
2115
-		} else {
2116
-			$GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : '';
2117
-			if (
2118
-				!empty($_SERVER['QUERY_STRING'])
2119
-				and !strpos($_SERVER['REQUEST_URI'], '?')
2120
-			) {
2121
-				$GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
2122
-			}
2123
-		}
2124
-	}
2125
-
2126
-	$url[$profondeur] = url_de_($http, $host, $GLOBALS['REQUEST_URI'], $profondeur);
2127
-
2128
-	return $url[$profondeur];
2052
+    static $url = [];
2053
+    if (is_array($profondeur)) {
2054
+        return $url = $profondeur;
2055
+    }
2056
+    if ($profondeur === false) {
2057
+        return $url;
2058
+    }
2059
+
2060
+    if (is_null($profondeur)) {
2061
+        $profondeur = $GLOBALS['profondeur_url'] ?? (_DIR_RESTREINT ? 0 : 1);
2062
+    }
2063
+
2064
+    if (isset($url[$profondeur])) {
2065
+        return $url[$profondeur];
2066
+    }
2067
+
2068
+    $http = 'http';
2069
+
2070
+    if (
2071
+        isset($_SERVER['SCRIPT_URI'])
2072
+        and substr($_SERVER['SCRIPT_URI'], 0, 5) == 'https'
2073
+    ) {
2074
+        $http = 'https';
2075
+    } elseif (
2076
+        isset($_SERVER['HTTPS'])
2077
+        and test_valeur_serveur($_SERVER['HTTPS'])
2078
+    ) {
2079
+        $http = 'https';
2080
+    }
2081
+
2082
+    // note : HTTP_HOST contient le :port si necessaire
2083
+    $host = $_SERVER['HTTP_HOST'] ?? null;
2084
+    // si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback
2085
+    if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) {
2086
+        $host = $GLOBALS['meta']['adresse_site'];
2087
+        if ($scheme = parse_url($host, PHP_URL_SCHEME)) {
2088
+            $http = $scheme;
2089
+            $host = str_replace("{$scheme}://", '', $host);
2090
+        }
2091
+    }
2092
+    if (
2093
+        isset($_SERVER['SERVER_PORT'])
2094
+        and $port = $_SERVER['SERVER_PORT']
2095
+        and strpos($host, ':') == false
2096
+    ) {
2097
+        if (!defined('_PORT_HTTP_STANDARD')) {
2098
+            define('_PORT_HTTP_STANDARD', '80');
2099
+        }
2100
+        if (!defined('_PORT_HTTPS_STANDARD')) {
2101
+            define('_PORT_HTTPS_STANDARD', '443');
2102
+        }
2103
+        if ($http == 'http' and !in_array($port, explode(',', _PORT_HTTP_STANDARD))) {
2104
+            $host .= ":$port";
2105
+        }
2106
+        if ($http == 'https' and !in_array($port, explode(',', _PORT_HTTPS_STANDARD))) {
2107
+            $host .= ":$port";
2108
+        }
2109
+    }
2110
+
2111
+    if (!$GLOBALS['REQUEST_URI']) {
2112
+        if (isset($_SERVER['REQUEST_URI'])) {
2113
+            $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
2114
+        } else {
2115
+            $GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : '';
2116
+            if (
2117
+                !empty($_SERVER['QUERY_STRING'])
2118
+                and !strpos($_SERVER['REQUEST_URI'], '?')
2119
+            ) {
2120
+                $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
2121
+            }
2122
+        }
2123
+    }
2124
+
2125
+    $url[$profondeur] = url_de_($http, $host, $GLOBALS['REQUEST_URI'], $profondeur);
2126
+
2127
+    return $url[$profondeur];
2129 2128
 }
2130 2129
 
2131 2130
 /**
@@ -2138,26 +2137,26 @@  discard block
 block discarded – undo
2138 2137
  * @return string
2139 2138
  */
2140 2139
 function url_de_($http, $host, $request, $prof = 0) {
2141
-	$prof = max($prof, 0);
2140
+    $prof = max($prof, 0);
2142 2141
 
2143
-	$myself = ltrim($request, '/');
2144
-	# supprimer la chaine de GET
2145
-	[$myself] = explode('?', $myself);
2146
-	// vieux mode HTTP qui envoie après le nom de la methode l'URL compléte
2147
-	// protocole, "://", nom du serveur avant le path dans _SERVER["REQUEST_URI"]
2148
-	if (strpos($myself, '://') !== false) {
2149
-		$myself = explode('://', $myself);
2150
-		array_shift($myself);
2151
-		$myself = implode('://', $myself);
2152
-		$myself = explode('/', $myself);
2153
-		array_shift($myself);
2154
-		$myself = implode('/', $myself);
2155
-	}
2156
-	$url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)) . '/';
2142
+    $myself = ltrim($request, '/');
2143
+    # supprimer la chaine de GET
2144
+    [$myself] = explode('?', $myself);
2145
+    // vieux mode HTTP qui envoie après le nom de la methode l'URL compléte
2146
+    // protocole, "://", nom du serveur avant le path dans _SERVER["REQUEST_URI"]
2147
+    if (strpos($myself, '://') !== false) {
2148
+        $myself = explode('://', $myself);
2149
+        array_shift($myself);
2150
+        $myself = implode('://', $myself);
2151
+        $myself = explode('/', $myself);
2152
+        array_shift($myself);
2153
+        $myself = implode('/', $myself);
2154
+    }
2155
+    $url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)) . '/';
2157 2156
 
2158
-	$url = $http . '://' . rtrim($host, '/') . '/' . ltrim($url, '/');
2157
+    $url = $http . '://' . rtrim($host, '/') . '/' . ltrim($url, '/');
2159 2158
 
2160
-	return $url;
2159
+    return $url;
2161 2160
 }
2162 2161
 
2163 2162
 
@@ -2192,25 +2191,25 @@  discard block
 block discarded – undo
2192 2191
  * @return string URL
2193 2192
  **/
2194 2193
 function generer_url_ecrire($script = '', $args = '', $no_entities = false, $rel = false) {
2195
-	if (!$rel) {
2196
-		$rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT;
2197
-	} else {
2198
-		if (!is_string($rel)) {
2199
-			$rel = _DIR_RESTREINT ?: './' . _SPIP_ECRIRE_SCRIPT;
2200
-		}
2201
-	}
2202
-
2203
-	[$script, $ancre] = array_pad(explode('#', $script), 2, null);
2204
-	if ($script and ($script <> 'accueil' or $rel)) {
2205
-		$args = "?exec=$script" . (!$args ? '' : "&$args");
2206
-	} elseif ($args) {
2207
-		$args = "?$args";
2208
-	}
2209
-	if ($ancre) {
2210
-		$args .= "#$ancre";
2211
-	}
2212
-
2213
-	return $rel . ($no_entities ? $args : str_replace('&', '&amp;', $args));
2194
+    if (!$rel) {
2195
+        $rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT;
2196
+    } else {
2197
+        if (!is_string($rel)) {
2198
+            $rel = _DIR_RESTREINT ?: './' . _SPIP_ECRIRE_SCRIPT;
2199
+        }
2200
+    }
2201
+
2202
+    [$script, $ancre] = array_pad(explode('#', $script), 2, null);
2203
+    if ($script and ($script <> 'accueil' or $rel)) {
2204
+        $args = "?exec=$script" . (!$args ? '' : "&$args");
2205
+    } elseif ($args) {
2206
+        $args = "?$args";
2207
+    }
2208
+    if ($ancre) {
2209
+        $args .= "#$ancre";
2210
+    }
2211
+
2212
+    return $rel . ($no_entities ? $args : str_replace('&', '&amp;', $args));
2214 2213
 }
2215 2214
 
2216 2215
 //
@@ -2232,15 +2231,15 @@  discard block
 block discarded – undo
2232 2231
  *     Nom du fichier (constante _SPIP_SCRIPT), sinon nom par défaut
2233 2232
  **/
2234 2233
 function get_spip_script($default = '') {
2235
-	if (!defined('_SPIP_SCRIPT')) {
2236
-		return 'spip.php';
2237
-	}
2238
-	# cas define('_SPIP_SCRIPT', '');
2239
-	if (_SPIP_SCRIPT) {
2240
-		return _SPIP_SCRIPT;
2241
-	} else {
2242
-		return $default;
2243
-	}
2234
+    if (!defined('_SPIP_SCRIPT')) {
2235
+        return 'spip.php';
2236
+    }
2237
+    # cas define('_SPIP_SCRIPT', '');
2238
+    if (_SPIP_SCRIPT) {
2239
+        return _SPIP_SCRIPT;
2240
+    } else {
2241
+        return $default;
2242
+    }
2244 2243
 }
2245 2244
 
2246 2245
 /**
@@ -2269,45 +2268,45 @@  discard block
 block discarded – undo
2269 2268
  * @return string URL
2270 2269
  **/
2271 2270
 function generer_url_public($script = '', $args = '', $no_entities = false, $rel = true, $action = '') {
2272
-	// si le script est une action (spip_pass, spip_inscription),
2273
-	// standardiser vers la nouvelle API
2274
-
2275
-	if (is_array($args)) {
2276
-		$args = http_build_query($args);
2277
-	}
2278
-
2279
-	$url = '';
2280
-	if ($f = charger_fonction_url('page')) {
2281
-		$url = $f($script, $args);
2282
-		if ($url and !$rel) {
2283
-			include_spip('inc/filtres_mini');
2284
-			$url = url_absolue($url);
2285
-		}
2286
-	}
2287
-	if (!$url) {
2288
-		if (!$action) {
2289
-			$action = get_spip_script();
2290
-		}
2291
-		if ($script) {
2292
-			$action = parametre_url($action, _SPIP_PAGE, $script, '&');
2293
-		}
2294
-		if ($args) {
2295
-			$action .= (strpos($action, '?') !== false ? '&' : '?') . $args;
2296
-		}
2297
-		// ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide
2298
-		$url = ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/') . preg_replace(',^/[.]/,', '/', "/$action"));
2299
-	}
2300
-
2301
-	if (!$no_entities) {
2302
-		$url = quote_amp($url);
2303
-	}
2304
-
2305
-	return $url;
2271
+    // si le script est une action (spip_pass, spip_inscription),
2272
+    // standardiser vers la nouvelle API
2273
+
2274
+    if (is_array($args)) {
2275
+        $args = http_build_query($args);
2276
+    }
2277
+
2278
+    $url = '';
2279
+    if ($f = charger_fonction_url('page')) {
2280
+        $url = $f($script, $args);
2281
+        if ($url and !$rel) {
2282
+            include_spip('inc/filtres_mini');
2283
+            $url = url_absolue($url);
2284
+        }
2285
+    }
2286
+    if (!$url) {
2287
+        if (!$action) {
2288
+            $action = get_spip_script();
2289
+        }
2290
+        if ($script) {
2291
+            $action = parametre_url($action, _SPIP_PAGE, $script, '&');
2292
+        }
2293
+        if ($args) {
2294
+            $action .= (strpos($action, '?') !== false ? '&' : '?') . $args;
2295
+        }
2296
+        // ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide
2297
+        $url = ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/') . preg_replace(',^/[.]/,', '/', "/$action"));
2298
+    }
2299
+
2300
+    if (!$no_entities) {
2301
+        $url = quote_amp($url);
2302
+    }
2303
+
2304
+    return $url;
2306 2305
 }
2307 2306
 
2308 2307
 function generer_url_prive($script, $args = '', $no_entities = false) {
2309 2308
 
2310
-	return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS . 'prive.php');
2309
+    return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS . 'prive.php');
2311 2310
 }
2312 2311
 
2313 2312
 // Pour les formulaires en methode POST,
@@ -2332,19 +2331,19 @@  discard block
 block discarded – undo
2332 2331
  **/
2333 2332
 function generer_form_ecrire($script, $corps, $atts = '', $submit = '') {
2334 2333
 
2335
-	$script1 = explode('&', $script);
2336
-	$script1 = reset($script1);
2334
+    $script1 = explode('&', $script);
2335
+    $script1 = reset($script1);
2337 2336
 
2338
-	return "<form action='"
2339
-	. ($script ? generer_url_ecrire($script) : '')
2340
-	. "' "
2341
-	. ($atts ?: " method='post'")
2342
-	. "><div>\n"
2343
-	. "<input type='hidden' name='exec' value='$script1' />"
2344
-	. $corps
2345
-	. (!$submit ? '' :
2346
-		("<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><input class='fondo submit btn' type='submit' value=\"" . entites_html($submit) . '" /></div>'))
2347
-	. "</div></form>\n";
2337
+    return "<form action='"
2338
+    . ($script ? generer_url_ecrire($script) : '')
2339
+    . "' "
2340
+    . ($atts ?: " method='post'")
2341
+    . "><div>\n"
2342
+    . "<input type='hidden' name='exec' value='$script1' />"
2343
+    . $corps
2344
+    . (!$submit ? '' :
2345
+        ("<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><input class='fondo submit btn' type='submit' value=\"" . entites_html($submit) . '" /></div>'))
2346
+    . "</div></form>\n";
2348 2347
 }
2349 2348
 
2350 2349
 /**
@@ -2361,22 +2360,22 @@  discard block
 block discarded – undo
2361 2360
  * @return string
2362 2361
  */
2363 2362
 function generer_form_action($script, $corps, $atts = '', $public = false) {
2364
-	// si l'on est dans l'espace prive, on garde dans l'url
2365
-	// l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
2366
-	// ou non de proceder a l'authentification (cas typique de l'install par exemple)
2367
-	$h = (_DIR_RACINE and !$public)
2368
-		? generer_url_ecrire(_request('exec'))
2369
-		: generer_url_public();
2363
+    // si l'on est dans l'espace prive, on garde dans l'url
2364
+    // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
2365
+    // ou non de proceder a l'authentification (cas typique de l'install par exemple)
2366
+    $h = (_DIR_RACINE and !$public)
2367
+        ? generer_url_ecrire(_request('exec'))
2368
+        : generer_url_public();
2370 2369
 
2371
-	return "\n<form action='" .
2372
-	$h .
2373
-	"'" .
2374
-	$atts .
2375
-	">\n" .
2376
-	'<div>' .
2377
-	"\n<input type='hidden' name='action' value='$script' />" .
2378
-	$corps .
2379
-	'</div></form>';
2370
+    return "\n<form action='" .
2371
+    $h .
2372
+    "'" .
2373
+    $atts .
2374
+    ">\n" .
2375
+    '<div>' .
2376
+    "\n<input type='hidden' name='action' value='$script' />" .
2377
+    $corps .
2378
+    '</div></form>';
2380 2379
 }
2381 2380
 
2382 2381
 /**
@@ -2395,22 +2394,22 @@  discard block
 block discarded – undo
2395 2394
  *     URL
2396 2395
  */
2397 2396
 function generer_url_action($script, $args = '', $no_entities = false, $public = false) {
2398
-	// si l'on est dans l'espace prive, on garde dans l'url
2399
-	// l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
2400
-	// ou non de proceder a l'authentification (cas typique de l'install par exemple)
2401
-	$url = (_DIR_RACINE and !$public)
2402
-		? generer_url_ecrire(_request('exec'))
2403
-		: generer_url_public('', '', false, false);
2404
-	$url = parametre_url($url, 'action', $script);
2405
-	if ($args) {
2406
-		$url .= quote_amp('&' . $args);
2407
-	}
2397
+    // si l'on est dans l'espace prive, on garde dans l'url
2398
+    // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire
2399
+    // ou non de proceder a l'authentification (cas typique de l'install par exemple)
2400
+    $url = (_DIR_RACINE and !$public)
2401
+        ? generer_url_ecrire(_request('exec'))
2402
+        : generer_url_public('', '', false, false);
2403
+    $url = parametre_url($url, 'action', $script);
2404
+    if ($args) {
2405
+        $url .= quote_amp('&' . $args);
2406
+    }
2408 2407
 
2409
-	if ($no_entities) {
2410
-		$url = str_replace('&amp;', '&', $url);
2411
-	}
2408
+    if ($no_entities) {
2409
+        $url = str_replace('&amp;', '&', $url);
2410
+    }
2412 2411
 
2413
-	return $url;
2412
+    return $url;
2414 2413
 }
2415 2414
 
2416 2415
 
@@ -2429,23 +2428,23 @@  discard block
 block discarded – undo
2429 2428
  *     URL
2430 2429
  */
2431 2430
 function generer_url_api(string $script, string $path, string $args, bool $no_entities = false, ?bool $public = null) {
2432
-	if (is_null($public)) {
2433
-		$public = (_DIR_RACINE ? false : '');
2434
-	}
2435
-	if (substr($script, -4) !== '.api') {
2436
-		$script .= '.api';
2437
-	}
2438
-	$url =
2439
-		(($public ? _DIR_RACINE : _DIR_RESTREINT) ?: './')
2440
-	. $script . '/'
2441
-	. ($path ? trim($path, '/') : '')
2442
-	. ($args ? "?" . quote_amp($args) : '');
2431
+    if (is_null($public)) {
2432
+        $public = (_DIR_RACINE ? false : '');
2433
+    }
2434
+    if (substr($script, -4) !== '.api') {
2435
+        $script .= '.api';
2436
+    }
2437
+    $url =
2438
+        (($public ? _DIR_RACINE : _DIR_RESTREINT) ?: './')
2439
+    . $script . '/'
2440
+    . ($path ? trim($path, '/') : '')
2441
+    . ($args ? "?" . quote_amp($args) : '');
2443 2442
 
2444
-	if ($no_entities) {
2445
-		$url = str_replace('&amp;', '&', $url);
2446
-	}
2443
+    if ($no_entities) {
2444
+        $url = str_replace('&amp;', '&', $url);
2445
+    }
2447 2446
 
2448
-	return $url;
2447
+    return $url;
2449 2448
 }
2450 2449
 
2451 2450
 
@@ -2458,8 +2457,8 @@  discard block
 block discarded – undo
2458 2457
  * @param string $ta Répertoire temporaire accessible
2459 2458
  */
2460 2459
 function spip_initialisation($pi = null, $pa = null, $ti = null, $ta = null) {
2461
-	spip_initialisation_core($pi, $pa, $ti, $ta);
2462
-	spip_initialisation_suite();
2460
+    spip_initialisation_core($pi, $pa, $ti, $ta);
2461
+    spip_initialisation_suite();
2463 2462
 }
2464 2463
 
2465 2464
 /**
@@ -2479,322 +2478,322 @@  discard block
 block discarded – undo
2479 2478
  * @param string $ta Répertoire temporaire accessible
2480 2479
  */
2481 2480
 function spip_initialisation_core($pi = null, $pa = null, $ti = null, $ta = null) {
2482
-	static $too_late = 0;
2483
-	if ($too_late++) {
2484
-		return;
2485
-	}
2486
-
2487
-	// Declaration des repertoires
2488
-
2489
-	// le nom du repertoire plugins/ activables/desactivables
2490
-	if (!defined('_DIR_PLUGINS')) {
2491
-		define('_DIR_PLUGINS', _DIR_RACINE . 'plugins/');
2492
-	}
2493
-
2494
-	// le nom du repertoire des extensions/ permanentes du core, toujours actives
2495
-	if (!defined('_DIR_PLUGINS_DIST')) {
2496
-		define('_DIR_PLUGINS_DIST', _DIR_RACINE . 'plugins-dist/');
2497
-	}
2498
-
2499
-	// le nom du repertoire des librairies
2500
-	if (!defined('_DIR_LIB')) {
2501
-		define('_DIR_LIB', _DIR_RACINE . 'lib/');
2502
-	}
2503
-
2504
-	if (!defined('_DIR_IMG')) {
2505
-		define('_DIR_IMG', $pa);
2506
-	}
2507
-	if (!defined('_DIR_LOGOS')) {
2508
-		define('_DIR_LOGOS', $pa);
2509
-	}
2510
-	if (!defined('_DIR_IMG_ICONES')) {
2511
-		define('_DIR_IMG_ICONES', _DIR_LOGOS . 'icones/');
2512
-	}
2513
-
2514
-	if (!defined('_DIR_DUMP')) {
2515
-		define('_DIR_DUMP', $ti . 'dump/');
2516
-	}
2517
-	if (!defined('_DIR_SESSIONS')) {
2518
-		define('_DIR_SESSIONS', $ti . 'sessions/');
2519
-	}
2520
-	if (!defined('_DIR_TRANSFERT')) {
2521
-		define('_DIR_TRANSFERT', $ti . 'upload/');
2522
-	}
2523
-	if (!defined('_DIR_CACHE')) {
2524
-		define('_DIR_CACHE', $ti . 'cache/');
2525
-	}
2526
-	if (!defined('_DIR_CACHE_XML')) {
2527
-		define('_DIR_CACHE_XML', _DIR_CACHE . 'xml/');
2528
-	}
2529
-	if (!defined('_DIR_SKELS')) {
2530
-		define('_DIR_SKELS', _DIR_CACHE . 'skel/');
2531
-	}
2532
-	if (!defined('_DIR_AIDE')) {
2533
-		define('_DIR_AIDE', _DIR_CACHE . 'aide/');
2534
-	}
2535
-	if (!defined('_DIR_TMP')) {
2536
-		define('_DIR_TMP', $ti);
2537
-	}
2538
-
2539
-	if (!defined('_DIR_VAR')) {
2540
-		define('_DIR_VAR', $ta);
2541
-	}
2542
-
2543
-	if (!defined('_DIR_ETC')) {
2544
-		define('_DIR_ETC', $pi);
2545
-	}
2546
-	if (!defined('_DIR_CONNECT')) {
2547
-		define('_DIR_CONNECT', $pi);
2548
-	}
2549
-	if (!defined('_DIR_CHMOD')) {
2550
-		define('_DIR_CHMOD', $pi);
2551
-	}
2552
-
2553
-	if (!isset($GLOBALS['test_dirs'])) {
2554
-		// Pas $pi car il est bon de le mettre hors ecriture apres intstall
2555
-		// il sera rajoute automatiquement si besoin a l'etape 2 de l'install
2556
-	$GLOBALS['test_dirs'] = [$pa, $ti, $ta];
2557
-	}
2558
-
2559
-	// Declaration des fichiers
2560
-
2561
-	if (!defined('_CACHE_PLUGINS_PATH')) {
2562
-		define('_CACHE_PLUGINS_PATH', _DIR_CACHE . 'charger_plugins_chemins.php');
2563
-	}
2564
-	if (!defined('_CACHE_PLUGINS_OPT')) {
2565
-		define('_CACHE_PLUGINS_OPT', _DIR_CACHE . 'charger_plugins_options.php');
2566
-	}
2567
-	if (!defined('_CACHE_PLUGINS_FCT')) {
2568
-		define('_CACHE_PLUGINS_FCT', _DIR_CACHE . 'charger_plugins_fonctions.php');
2569
-	}
2570
-	if (!defined('_CACHE_PIPELINES')) {
2571
-		define('_CACHE_PIPELINES', _DIR_CACHE . 'charger_pipelines.php');
2572
-	}
2573
-	if (!defined('_CACHE_CHEMIN')) {
2574
-		define('_CACHE_CHEMIN', _DIR_CACHE . 'chemin.txt');
2575
-	}
2576
-
2577
-	# attention .php obligatoire pour ecrire_fichier_securise
2578
-	if (!defined('_FILE_META')) {
2579
-		define('_FILE_META', $ti . 'meta_cache.php');
2580
-	}
2581
-	if (!defined('_DIR_LOG')) {
2582
-		define('_DIR_LOG', _DIR_TMP . 'log/');
2583
-	}
2584
-	if (!defined('_FILE_LOG')) {
2585
-		define('_FILE_LOG', 'spip');
2586
-	}
2587
-	if (!defined('_FILE_LOG_SUFFIX')) {
2588
-		define('_FILE_LOG_SUFFIX', '.log');
2589
-	}
2590
-
2591
-	// Le fichier de connexion a la base de donnees
2592
-	// tient compte des anciennes versions (inc_connect...)
2593
-	if (!defined('_FILE_CONNECT_INS')) {
2594
-		define('_FILE_CONNECT_INS', 'connect');
2595
-	}
2596
-	if (!defined('_FILE_CONNECT')) {
2597
-		define(
2598
-			'_FILE_CONNECT',
2599
-			(@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f
2600
-			: (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
2601
-			: false))
2602
-		);
2603
-	}
2604
-
2605
-	// Le fichier de reglages des droits
2606
-	if (!defined('_FILE_CHMOD_INS')) {
2607
-		define('_FILE_CHMOD_INS', 'chmod');
2608
-	}
2609
-	if (!defined('_FILE_CHMOD')) {
2610
-		define(
2611
-			'_FILE_CHMOD',
2612
-			(@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f
2613
-			: false)
2614
-		);
2615
-	}
2616
-
2617
-	if (!defined('_FILE_LDAP')) {
2618
-		define('_FILE_LDAP', 'ldap.php');
2619
-	}
2620
-
2621
-	if (!defined('_FILE_TMP_SUFFIX')) {
2622
-		define('_FILE_TMP_SUFFIX', '.tmp.php');
2623
-	}
2624
-	if (!defined('_FILE_CONNECT_TMP')) {
2625
-		define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
2626
-	}
2627
-	if (!defined('_FILE_CHMOD_TMP')) {
2628
-		define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
2629
-	}
2630
-
2631
-	// Definition des droits d'acces en ecriture
2632
-	if (!defined('_SPIP_CHMOD') and _FILE_CHMOD) {
2633
-		include_once _FILE_CHMOD;
2634
-	}
2635
-
2636
-	// Se mefier des fichiers mal remplis!
2637
-	if (!defined('_SPIP_CHMOD')) {
2638
-		define('_SPIP_CHMOD', 0777);
2639
-	}
2640
-
2641
-	if (!defined('_DEFAULT_CHARSET')) {
2642
-		/** Le charset par défaut lors de l'installation */
2643
-		define('_DEFAULT_CHARSET', 'utf-8');
2644
-	}
2645
-	if (!defined('_ROOT_PLUGINS')) {
2646
-		define('_ROOT_PLUGINS', _ROOT_RACINE . 'plugins/');
2647
-	}
2648
-	if (!defined('_ROOT_PLUGINS_DIST')) {
2649
-		define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . 'plugins-dist/');
2650
-	}
2651
-	if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) {
2652
-		define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL));
2653
-	}
2654
-
2655
-	// La taille des Log
2656
-	if (!defined('_MAX_LOG')) {
2657
-		define('_MAX_LOG', 100);
2658
-	}
2659
-
2660
-	// Sommes-nous dans l'empire du Mal ?
2661
-	// (ou sous le signe du Pingouin, ascendant GNU ?)
2662
-	if (isset($_SERVER['SERVER_SOFTWARE']) and strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false) {
2663
-		if (!defined('_OS_SERVEUR')) {
2664
-			define('_OS_SERVEUR', 'windows');
2665
-		}
2666
-		if (!defined('_SPIP_LOCK_MODE')) {
2667
-			define('_SPIP_LOCK_MODE', 1);
2668
-		} // utiliser le flock php
2669
-	} else {
2670
-		if (!defined('_OS_SERVEUR')) {
2671
-			define('_OS_SERVEUR', '');
2672
-		}
2673
-		if (!defined('_SPIP_LOCK_MODE')) {
2674
-			define('_SPIP_LOCK_MODE', 1);
2675
-		} // utiliser le flock php
2676
-		#if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
2677
-	}
2678
-
2679
-	// Langue par defaut
2680
-	if (!defined('_LANGUE_PAR_DEFAUT')) {
2681
-		define('_LANGUE_PAR_DEFAUT', 'fr');
2682
-	}
2683
-
2684
-	//
2685
-	// Module de lecture/ecriture/suppression de fichiers utilisant flock()
2686
-	// (non surchargeable en l'etat ; attention si on utilise include_spip()
2687
-	// pour le rendre surchargeable, on va provoquer un reecriture
2688
-	// systematique du noyau ou une baisse de perfs => a etudier)
2689
-	include_once _ROOT_RESTREINT . 'inc/flock.php';
2690
-
2691
-	// charger tout de suite le path et son cache
2692
-	load_path_cache();
2693
-
2694
-	// *********** traiter les variables ************
2695
-
2696
-	//
2697
-	// Securite
2698
-	//
2699
-
2700
-	// Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto
2701
-	if (isset($_REQUEST['GLOBALS'])) {
2702
-		die();
2703
-	}
2704
-	// nettoyer les magic quotes \' et les caracteres nuls %00
2705
-	spip_desinfecte($_GET);
2706
-	spip_desinfecte($_POST);
2707
-	spip_desinfecte($_COOKIE);
2708
-	spip_desinfecte($_REQUEST);
2709
-
2710
-	// appliquer le cookie_prefix
2711
-	if ($GLOBALS['cookie_prefix'] != 'spip') {
2712
-		include_spip('inc/cookie');
2713
-		recuperer_cookies_spip($GLOBALS['cookie_prefix']);
2714
-	}
2715
-
2716
-	//
2717
-	// Capacites php (en fonction de la version)
2718
-	//
2719
-	$GLOBALS['flag_ob'] = (function_exists('ob_start')
2720
-		&& function_exists('ini_get')
2721
-		&& !strstr(@ini_get('disable_functions'), 'ob_'));
2722
-	$GLOBALS['flag_sapi_name'] = function_exists('php_sapi_name');
2723
-	$GLOBALS['flag_get_cfg_var'] = (@get_cfg_var('error_reporting') != '');
2724
-	$GLOBALS['flag_upload'] = (!$GLOBALS['flag_get_cfg_var'] ||
2725
-		(get_cfg_var('upload_max_filesize') > 0));
2726
-
2727
-
2728
-	// Compatibilite avec serveurs ne fournissant pas $REQUEST_URI
2729
-	if (isset($_SERVER['REQUEST_URI'])) {
2730
-		$GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
2731
-	} else {
2732
-		$GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : '';
2733
-		if (
2734
-			!empty($_SERVER['QUERY_STRING'])
2735
-			and !strpos($_SERVER['REQUEST_URI'], '?')
2736
-		) {
2737
-			$GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
2738
-		}
2739
-	}
2740
-
2741
-	// Duree de validite de l'alea pour les cookies et ce qui s'ensuit.
2742
-	if (!defined('_RENOUVELLE_ALEA')) {
2743
-		define('_RENOUVELLE_ALEA', 12 * 3600);
2744
-	}
2745
-	if (!defined('_DUREE_COOKIE_ADMIN')) {
2746
-		define('_DUREE_COOKIE_ADMIN', 14 * 24 * 3600);
2747
-	}
2748
-
2749
-	// charger les meta si possible et renouveller l'alea au besoin
2750
-	// charge aussi effacer_meta et ecrire_meta
2751
-	$inc_meta = charger_fonction('meta', 'inc');
2752
-	$inc_meta();
2753
-
2754
-	// nombre de repertoires depuis la racine
2755
-	// on compare a l'adresse de spip.php : $_SERVER["SCRIPT_NAME"]
2756
-	// ou a defaut celle donnee en meta ; (mais si celle-ci est fausse
2757
-	// le calcul est faux)
2758
-	if (!_DIR_RESTREINT) {
2759
-		$GLOBALS['profondeur_url'] = 1;
2760
-	} else {
2761
-		$uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : '';
2762
-		$uri_ref = $_SERVER['SCRIPT_NAME'];
2763
-		if (
2764
-			!$uri_ref
2765
-			// si on est appele avec un autre ti, on est sans doute en mutu
2766
-			// si jamais c'est de la mutu avec sous rep, on est perdu si on se fie
2767
-			// a spip.php qui est a la racine du spip, et vue qu'on sait pas se reperer
2768
-			// s'en remettre a l'adresse du site. alea jacta est.
2769
-			or $ti !== _NOM_TEMPORAIRES_INACCESSIBLES
2770
-		) {
2771
-			if (isset($GLOBALS['meta']['adresse_site'])) {
2772
-				$uri_ref = parse_url($GLOBALS['meta']['adresse_site']);
2773
-				$uri_ref = ($uri_ref['path'] ?? '') . '/';
2774
-			} else {
2775
-				$uri_ref = '';
2776
-			}
2777
-		}
2778
-		if (!$uri or !$uri_ref) {
2779
-			$GLOBALS['profondeur_url'] = 0;
2780
-		} else {
2781
-			$GLOBALS['profondeur_url'] = max(
2782
-				0,
2783
-				substr_count($uri[0], '/')
2784
-				- substr_count($uri_ref, '/')
2785
-			);
2786
-		}
2787
-	}
2788
-	// s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session
2789
-	if (_FILE_CONNECT) {
2790
-		if (
2791
-			verifier_visiteur() == '0minirezo'
2792
-			// si c'est un admin sans cookie admin, il faut ignorer le cache chemin !
2793
-			and !isset($_COOKIE['spip_admin'])
2794
-		) {
2795
-			clear_path_cache();
2796
-		}
2797
-	}
2481
+    static $too_late = 0;
2482
+    if ($too_late++) {
2483
+        return;
2484
+    }
2485
+
2486
+    // Declaration des repertoires
2487
+
2488
+    // le nom du repertoire plugins/ activables/desactivables
2489
+    if (!defined('_DIR_PLUGINS')) {
2490
+        define('_DIR_PLUGINS', _DIR_RACINE . 'plugins/');
2491
+    }
2492
+
2493
+    // le nom du repertoire des extensions/ permanentes du core, toujours actives
2494
+    if (!defined('_DIR_PLUGINS_DIST')) {
2495
+        define('_DIR_PLUGINS_DIST', _DIR_RACINE . 'plugins-dist/');
2496
+    }
2497
+
2498
+    // le nom du repertoire des librairies
2499
+    if (!defined('_DIR_LIB')) {
2500
+        define('_DIR_LIB', _DIR_RACINE . 'lib/');
2501
+    }
2502
+
2503
+    if (!defined('_DIR_IMG')) {
2504
+        define('_DIR_IMG', $pa);
2505
+    }
2506
+    if (!defined('_DIR_LOGOS')) {
2507
+        define('_DIR_LOGOS', $pa);
2508
+    }
2509
+    if (!defined('_DIR_IMG_ICONES')) {
2510
+        define('_DIR_IMG_ICONES', _DIR_LOGOS . 'icones/');
2511
+    }
2512
+
2513
+    if (!defined('_DIR_DUMP')) {
2514
+        define('_DIR_DUMP', $ti . 'dump/');
2515
+    }
2516
+    if (!defined('_DIR_SESSIONS')) {
2517
+        define('_DIR_SESSIONS', $ti . 'sessions/');
2518
+    }
2519
+    if (!defined('_DIR_TRANSFERT')) {
2520
+        define('_DIR_TRANSFERT', $ti . 'upload/');
2521
+    }
2522
+    if (!defined('_DIR_CACHE')) {
2523
+        define('_DIR_CACHE', $ti . 'cache/');
2524
+    }
2525
+    if (!defined('_DIR_CACHE_XML')) {
2526
+        define('_DIR_CACHE_XML', _DIR_CACHE . 'xml/');
2527
+    }
2528
+    if (!defined('_DIR_SKELS')) {
2529
+        define('_DIR_SKELS', _DIR_CACHE . 'skel/');
2530
+    }
2531
+    if (!defined('_DIR_AIDE')) {
2532
+        define('_DIR_AIDE', _DIR_CACHE . 'aide/');
2533
+    }
2534
+    if (!defined('_DIR_TMP')) {
2535
+        define('_DIR_TMP', $ti);
2536
+    }
2537
+
2538
+    if (!defined('_DIR_VAR')) {
2539
+        define('_DIR_VAR', $ta);
2540
+    }
2541
+
2542
+    if (!defined('_DIR_ETC')) {
2543
+        define('_DIR_ETC', $pi);
2544
+    }
2545
+    if (!defined('_DIR_CONNECT')) {
2546
+        define('_DIR_CONNECT', $pi);
2547
+    }
2548
+    if (!defined('_DIR_CHMOD')) {
2549
+        define('_DIR_CHMOD', $pi);
2550
+    }
2551
+
2552
+    if (!isset($GLOBALS['test_dirs'])) {
2553
+        // Pas $pi car il est bon de le mettre hors ecriture apres intstall
2554
+        // il sera rajoute automatiquement si besoin a l'etape 2 de l'install
2555
+    $GLOBALS['test_dirs'] = [$pa, $ti, $ta];
2556
+    }
2557
+
2558
+    // Declaration des fichiers
2559
+
2560
+    if (!defined('_CACHE_PLUGINS_PATH')) {
2561
+        define('_CACHE_PLUGINS_PATH', _DIR_CACHE . 'charger_plugins_chemins.php');
2562
+    }
2563
+    if (!defined('_CACHE_PLUGINS_OPT')) {
2564
+        define('_CACHE_PLUGINS_OPT', _DIR_CACHE . 'charger_plugins_options.php');
2565
+    }
2566
+    if (!defined('_CACHE_PLUGINS_FCT')) {
2567
+        define('_CACHE_PLUGINS_FCT', _DIR_CACHE . 'charger_plugins_fonctions.php');
2568
+    }
2569
+    if (!defined('_CACHE_PIPELINES')) {
2570
+        define('_CACHE_PIPELINES', _DIR_CACHE . 'charger_pipelines.php');
2571
+    }
2572
+    if (!defined('_CACHE_CHEMIN')) {
2573
+        define('_CACHE_CHEMIN', _DIR_CACHE . 'chemin.txt');
2574
+    }
2575
+
2576
+    # attention .php obligatoire pour ecrire_fichier_securise
2577
+    if (!defined('_FILE_META')) {
2578
+        define('_FILE_META', $ti . 'meta_cache.php');
2579
+    }
2580
+    if (!defined('_DIR_LOG')) {
2581
+        define('_DIR_LOG', _DIR_TMP . 'log/');
2582
+    }
2583
+    if (!defined('_FILE_LOG')) {
2584
+        define('_FILE_LOG', 'spip');
2585
+    }
2586
+    if (!defined('_FILE_LOG_SUFFIX')) {
2587
+        define('_FILE_LOG_SUFFIX', '.log');
2588
+    }
2589
+
2590
+    // Le fichier de connexion a la base de donnees
2591
+    // tient compte des anciennes versions (inc_connect...)
2592
+    if (!defined('_FILE_CONNECT_INS')) {
2593
+        define('_FILE_CONNECT_INS', 'connect');
2594
+    }
2595
+    if (!defined('_FILE_CONNECT')) {
2596
+        define(
2597
+            '_FILE_CONNECT',
2598
+            (@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f
2599
+            : (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
2600
+            : false))
2601
+        );
2602
+    }
2603
+
2604
+    // Le fichier de reglages des droits
2605
+    if (!defined('_FILE_CHMOD_INS')) {
2606
+        define('_FILE_CHMOD_INS', 'chmod');
2607
+    }
2608
+    if (!defined('_FILE_CHMOD')) {
2609
+        define(
2610
+            '_FILE_CHMOD',
2611
+            (@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f
2612
+            : false)
2613
+        );
2614
+    }
2615
+
2616
+    if (!defined('_FILE_LDAP')) {
2617
+        define('_FILE_LDAP', 'ldap.php');
2618
+    }
2619
+
2620
+    if (!defined('_FILE_TMP_SUFFIX')) {
2621
+        define('_FILE_TMP_SUFFIX', '.tmp.php');
2622
+    }
2623
+    if (!defined('_FILE_CONNECT_TMP')) {
2624
+        define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
2625
+    }
2626
+    if (!defined('_FILE_CHMOD_TMP')) {
2627
+        define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
2628
+    }
2629
+
2630
+    // Definition des droits d'acces en ecriture
2631
+    if (!defined('_SPIP_CHMOD') and _FILE_CHMOD) {
2632
+        include_once _FILE_CHMOD;
2633
+    }
2634
+
2635
+    // Se mefier des fichiers mal remplis!
2636
+    if (!defined('_SPIP_CHMOD')) {
2637
+        define('_SPIP_CHMOD', 0777);
2638
+    }
2639
+
2640
+    if (!defined('_DEFAULT_CHARSET')) {
2641
+        /** Le charset par défaut lors de l'installation */
2642
+        define('_DEFAULT_CHARSET', 'utf-8');
2643
+    }
2644
+    if (!defined('_ROOT_PLUGINS')) {
2645
+        define('_ROOT_PLUGINS', _ROOT_RACINE . 'plugins/');
2646
+    }
2647
+    if (!defined('_ROOT_PLUGINS_DIST')) {
2648
+        define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . 'plugins-dist/');
2649
+    }
2650
+    if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) {
2651
+        define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL));
2652
+    }
2653
+
2654
+    // La taille des Log
2655
+    if (!defined('_MAX_LOG')) {
2656
+        define('_MAX_LOG', 100);
2657
+    }
2658
+
2659
+    // Sommes-nous dans l'empire du Mal ?
2660
+    // (ou sous le signe du Pingouin, ascendant GNU ?)
2661
+    if (isset($_SERVER['SERVER_SOFTWARE']) and strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false) {
2662
+        if (!defined('_OS_SERVEUR')) {
2663
+            define('_OS_SERVEUR', 'windows');
2664
+        }
2665
+        if (!defined('_SPIP_LOCK_MODE')) {
2666
+            define('_SPIP_LOCK_MODE', 1);
2667
+        } // utiliser le flock php
2668
+    } else {
2669
+        if (!defined('_OS_SERVEUR')) {
2670
+            define('_OS_SERVEUR', '');
2671
+        }
2672
+        if (!defined('_SPIP_LOCK_MODE')) {
2673
+            define('_SPIP_LOCK_MODE', 1);
2674
+        } // utiliser le flock php
2675
+        #if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
2676
+    }
2677
+
2678
+    // Langue par defaut
2679
+    if (!defined('_LANGUE_PAR_DEFAUT')) {
2680
+        define('_LANGUE_PAR_DEFAUT', 'fr');
2681
+    }
2682
+
2683
+    //
2684
+    // Module de lecture/ecriture/suppression de fichiers utilisant flock()
2685
+    // (non surchargeable en l'etat ; attention si on utilise include_spip()
2686
+    // pour le rendre surchargeable, on va provoquer un reecriture
2687
+    // systematique du noyau ou une baisse de perfs => a etudier)
2688
+    include_once _ROOT_RESTREINT . 'inc/flock.php';
2689
+
2690
+    // charger tout de suite le path et son cache
2691
+    load_path_cache();
2692
+
2693
+    // *********** traiter les variables ************
2694
+
2695
+    //
2696
+    // Securite
2697
+    //
2698
+
2699
+    // Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto
2700
+    if (isset($_REQUEST['GLOBALS'])) {
2701
+        die();
2702
+    }
2703
+    // nettoyer les magic quotes \' et les caracteres nuls %00
2704
+    spip_desinfecte($_GET);
2705
+    spip_desinfecte($_POST);
2706
+    spip_desinfecte($_COOKIE);
2707
+    spip_desinfecte($_REQUEST);
2708
+
2709
+    // appliquer le cookie_prefix
2710
+    if ($GLOBALS['cookie_prefix'] != 'spip') {
2711
+        include_spip('inc/cookie');
2712
+        recuperer_cookies_spip($GLOBALS['cookie_prefix']);
2713
+    }
2714
+
2715
+    //
2716
+    // Capacites php (en fonction de la version)
2717
+    //
2718
+    $GLOBALS['flag_ob'] = (function_exists('ob_start')
2719
+        && function_exists('ini_get')
2720
+        && !strstr(@ini_get('disable_functions'), 'ob_'));
2721
+    $GLOBALS['flag_sapi_name'] = function_exists('php_sapi_name');
2722
+    $GLOBALS['flag_get_cfg_var'] = (@get_cfg_var('error_reporting') != '');
2723
+    $GLOBALS['flag_upload'] = (!$GLOBALS['flag_get_cfg_var'] ||
2724
+        (get_cfg_var('upload_max_filesize') > 0));
2725
+
2726
+
2727
+    // Compatibilite avec serveurs ne fournissant pas $REQUEST_URI
2728
+    if (isset($_SERVER['REQUEST_URI'])) {
2729
+        $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI'];
2730
+    } else {
2731
+        $GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : '';
2732
+        if (
2733
+            !empty($_SERVER['QUERY_STRING'])
2734
+            and !strpos($_SERVER['REQUEST_URI'], '?')
2735
+        ) {
2736
+            $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
2737
+        }
2738
+    }
2739
+
2740
+    // Duree de validite de l'alea pour les cookies et ce qui s'ensuit.
2741
+    if (!defined('_RENOUVELLE_ALEA')) {
2742
+        define('_RENOUVELLE_ALEA', 12 * 3600);
2743
+    }
2744
+    if (!defined('_DUREE_COOKIE_ADMIN')) {
2745
+        define('_DUREE_COOKIE_ADMIN', 14 * 24 * 3600);
2746
+    }
2747
+
2748
+    // charger les meta si possible et renouveller l'alea au besoin
2749
+    // charge aussi effacer_meta et ecrire_meta
2750
+    $inc_meta = charger_fonction('meta', 'inc');
2751
+    $inc_meta();
2752
+
2753
+    // nombre de repertoires depuis la racine
2754
+    // on compare a l'adresse de spip.php : $_SERVER["SCRIPT_NAME"]
2755
+    // ou a defaut celle donnee en meta ; (mais si celle-ci est fausse
2756
+    // le calcul est faux)
2757
+    if (!_DIR_RESTREINT) {
2758
+        $GLOBALS['profondeur_url'] = 1;
2759
+    } else {
2760
+        $uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : '';
2761
+        $uri_ref = $_SERVER['SCRIPT_NAME'];
2762
+        if (
2763
+            !$uri_ref
2764
+            // si on est appele avec un autre ti, on est sans doute en mutu
2765
+            // si jamais c'est de la mutu avec sous rep, on est perdu si on se fie
2766
+            // a spip.php qui est a la racine du spip, et vue qu'on sait pas se reperer
2767
+            // s'en remettre a l'adresse du site. alea jacta est.
2768
+            or $ti !== _NOM_TEMPORAIRES_INACCESSIBLES
2769
+        ) {
2770
+            if (isset($GLOBALS['meta']['adresse_site'])) {
2771
+                $uri_ref = parse_url($GLOBALS['meta']['adresse_site']);
2772
+                $uri_ref = ($uri_ref['path'] ?? '') . '/';
2773
+            } else {
2774
+                $uri_ref = '';
2775
+            }
2776
+        }
2777
+        if (!$uri or !$uri_ref) {
2778
+            $GLOBALS['profondeur_url'] = 0;
2779
+        } else {
2780
+            $GLOBALS['profondeur_url'] = max(
2781
+                0,
2782
+                substr_count($uri[0], '/')
2783
+                - substr_count($uri_ref, '/')
2784
+            );
2785
+        }
2786
+    }
2787
+    // s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session
2788
+    if (_FILE_CONNECT) {
2789
+        if (
2790
+            verifier_visiteur() == '0minirezo'
2791
+            // si c'est un admin sans cookie admin, il faut ignorer le cache chemin !
2792
+            and !isset($_COOKIE['spip_admin'])
2793
+        ) {
2794
+            clear_path_cache();
2795
+        }
2796
+    }
2798 2797
 }
2799 2798
 
2800 2799
 /**
@@ -2803,190 +2802,190 @@  discard block
 block discarded – undo
2803 2802
  *
2804 2803
  */
2805 2804
 function spip_initialisation_suite() {
2806
-	static $too_late = 0;
2807
-	if ($too_late++) {
2808
-		return;
2809
-	}
2810
-
2811
-	// taille mini des login
2812
-	if (!defined('_LOGIN_TROP_COURT')) {
2813
-		define('_LOGIN_TROP_COURT', 4);
2814
-	}
2815
-
2816
-	// la taille maxi des logos (0 : pas de limite) (pas de define par defaut, ce n'est pas utile)
2817
-	#if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko
2818
-	#if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
2819
-	#if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
2820
-
2821
-	// la taille maxi des images (0 : pas de limite) (pas de define par defaut, ce n'est pas utile)
2822
-	#if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko
2823
-	#if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko
2824
-	#if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels
2825
-	#if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels
2826
-
2827
-	if (!defined('_PASS_LONGUEUR_MINI')) {
2828
-		define('_PASS_LONGUEUR_MINI', 6);
2829
-	}
2830
-
2831
-	// largeur maximale des images dans l'administration
2832
-	if (!defined('_IMG_ADMIN_MAX_WIDTH')) {
2833
-		define('_IMG_ADMIN_MAX_WIDTH', 768);
2834
-	}
2835
-
2836
-	// Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite)
2837
-	if (!defined('_IMG_QUALITE')) {
2838
-		define('_IMG_QUALITE', 85);
2839
-	} # valeur par defaut
2840
-	if (!defined('_IMG_GD_QUALITE')) {
2841
-		define('_IMG_GD_QUALITE', _IMG_QUALITE);
2842
-	} # surcharge pour la lib GD
2843
-	if (!defined('_IMG_CONVERT_QUALITE')) {
2844
-		define('_IMG_CONVERT_QUALITE', _IMG_QUALITE);
2845
-	} # surcharge pour imagick en ligne de commande
2846
-	// Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE
2847
-	if (!defined('_IMG_IMAGICK_QUALITE')) {
2848
-		define('_IMG_IMAGICK_QUALITE', 75);
2849
-	} # surcharge pour imagick en PHP
2850
-
2851
-	if (!defined('_COPIE_LOCALE_MAX_SIZE')) {
2852
-		define('_COPIE_LOCALE_MAX_SIZE', 33_554_432);
2853
-	} // poids en octet
2854
-
2855
-	// qq chaines standard
2856
-	if (!defined('_ACCESS_FILE_NAME')) {
2857
-		define('_ACCESS_FILE_NAME', '.htaccess');
2858
-	}
2859
-	if (!defined('_AUTH_USER_FILE')) {
2860
-		define('_AUTH_USER_FILE', '.htpasswd');
2861
-	}
2862
-	if (!defined('_SPIP_DUMP')) {
2863
-		define('_SPIP_DUMP', 'dump@nom_site@@[email protected]');
2864
-	}
2865
-	if (!defined('_CACHE_RUBRIQUES')) {
2866
-		/** Fichier cache pour le navigateur de rubrique du bandeau */
2867
-		define('_CACHE_RUBRIQUES', _DIR_TMP . 'menu-rubriques-cache.txt');
2868
-	}
2869
-	if (!defined('_CACHE_RUBRIQUES_MAX')) {
2870
-		/** Nombre maxi de rubriques enfants affichées pour chaque rubrique du navigateur de rubrique du bandeau */
2871
-		define('_CACHE_RUBRIQUES_MAX', 500);
2872
-	}
2873
-
2874
-	if (!defined('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR')) {
2875
-		/**
2876
-		 * Basculer les contextes ajax en fichier si la longueur d’url est trop grande
2877
-		 * @var int Nombre de caractères */
2878
-		define('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR', 2000);
2879
-	}
2880
-
2881
-	if (!defined('_EXTENSION_SQUELETTES')) {
2882
-		define('_EXTENSION_SQUELETTES', 'html');
2883
-	}
2884
-
2885
-	if (!defined('_DOCTYPE_ECRIRE')) {
2886
-		/** Définit le doctype de l’espace privé */
2887
-		define('_DOCTYPE_ECRIRE', "<!DOCTYPE html>\n");
2888
-	}
2889
-	if (!defined('_DOCTYPE_AIDE')) {
2890
-		/** Définit le doctype de l’aide en ligne */
2891
-		define(
2892
-			'_DOCTYPE_AIDE',
2893
-			"<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>"
2894
-		);
2895
-	}
2896
-
2897
-	if (!defined('_SPIP_SCRIPT')) {
2898
-		/** L'adresse de base du site ; on peut mettre '' si la racine est gerée par
2899
-		 * le script de l'espace public, alias index.php */
2900
-		define('_SPIP_SCRIPT', 'spip.php');
2901
-	}
2902
-	if (!defined('_SPIP_PAGE')) {
2903
-		/** Argument page, personalisable en cas de conflit avec un autre script */
2904
-		define('_SPIP_PAGE', 'page');
2905
-	}
2906
-
2907
-	// le script de l'espace prive
2908
-	// Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes:
2909
-	// les anciens IIS n'acceptent pas les POST sur ecrire/ (#419)
2910
-	// meme pb sur thttpd cf. https://forum.spip.net/fr_184153.html
2911
-	if (!defined('_SPIP_ECRIRE_SCRIPT')) {
2912
-		if (!empty($_SERVER['SERVER_SOFTWARE']) and preg_match(',IIS|thttpd,', $_SERVER['SERVER_SOFTWARE'])) {
2913
-			define('_SPIP_ECRIRE_SCRIPT', 'index.php');
2914
-		} else {
2915
-			define('_SPIP_ECRIRE_SCRIPT', '');
2916
-		}
2917
-	}
2918
-
2919
-
2920
-	if (!defined('_SPIP_AJAX')) {
2921
-		define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax']))
2922
-			? 1
2923
-			: (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0)));
2924
-	}
2925
-
2926
-	// La requete est-elle en ajax ?
2927
-	if (!defined('_AJAX')) {
2928
-		define(
2929
-			'_AJAX',
2930
-			(isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery
2931
-				or !empty($_REQUEST['var_ajax_redir']) # redirection 302 apres ajax jQuery
2932
-				or !empty($_REQUEST['var_ajaxcharset']) # compat ascendante pour plugins
2933
-				or !empty($_REQUEST['var_ajax']) # forms ajax & inclure ajax de spip
2934
-			)
2935
-			and empty($_REQUEST['var_noajax']) # horrible exception, car c'est pas parce que la requete est ajax jquery qu'il faut tuer tous les formulaires ajax qu'elle contient
2936
-		);
2937
-	}
2938
-
2939
-	# nombre de pixels maxi pour calcul de la vignette avec gd
2940
-	# au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation
2941
-	# les configurations limitees en memoire ont un seuil plutot vers 1MPixel
2942
-	if (!defined('_IMG_GD_MAX_PIXELS')) {
2943
-		define(
2944
-			'_IMG_GD_MAX_PIXELS',
2945
-			(isset($GLOBALS['meta']['max_taille_vignettes']) and $GLOBALS['meta']['max_taille_vignettes'])
2946
-			? $GLOBALS['meta']['max_taille_vignettes']
2947
-			: 0
2948
-		);
2949
-	}
2950
-
2951
-	if (!defined('_MEMORY_LIMIT_MIN')) {
2952
-		define('_MEMORY_LIMIT_MIN', 16);
2953
-	} // en Mo
2954
-	// si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard)
2955
-	// on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche
2956
-	// il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche
2957
-	if (test_espace_prive() and _MEMORY_LIMIT_MIN > 8) {
2958
-		if ($memory = trim(ini_get('memory_limit')) and $memory != -1) {
2959
-			$unit = strtolower(substr($memory, -1));
2960
-			$memory = substr($memory, 0, -1);
2961
-			switch ($unit) {
2962
-				// Le modifieur 'G' est disponible depuis PHP 5.1.0
2963
-				case 'g':
2964
-					$memory *= 1024;
2965
-				case 'm':
2966
-					$memory *= 1024;
2967
-				case 'k':
2968
-					$memory *= 1024;
2969
-			}
2970
-			if ($memory < _MEMORY_LIMIT_MIN * 1024 * 1024) {
2971
-				@ini_set('memory_limit', $m = _MEMORY_LIMIT_MIN . 'M');
2972
-				if (trim(ini_get('memory_limit')) != $m) {
2973
-					if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) {
2974
-						define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
2975
-					} // evite une page blanche car on ne saura pas calculer la css dans ce hit
2976
-				}
2977
-			}
2978
-		} else {
2979
-			if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) {
2980
-				define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
2981
-			}
2982
-		} // evite une page blanche car on ne saura pas calculer la css dans ce hit
2983
-	}
2984
-	// Protocoles a normaliser dans les chaines de langues
2985
-	if (!defined('_PROTOCOLES_STD')) {
2986
-		define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal');
2987
-	}
2988
-
2989
-	init_var_mode();
2805
+    static $too_late = 0;
2806
+    if ($too_late++) {
2807
+        return;
2808
+    }
2809
+
2810
+    // taille mini des login
2811
+    if (!defined('_LOGIN_TROP_COURT')) {
2812
+        define('_LOGIN_TROP_COURT', 4);
2813
+    }
2814
+
2815
+    // la taille maxi des logos (0 : pas de limite) (pas de define par defaut, ce n'est pas utile)
2816
+    #if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko
2817
+    #if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
2818
+    #if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
2819
+
2820
+    // la taille maxi des images (0 : pas de limite) (pas de define par defaut, ce n'est pas utile)
2821
+    #if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko
2822
+    #if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko
2823
+    #if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels
2824
+    #if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels
2825
+
2826
+    if (!defined('_PASS_LONGUEUR_MINI')) {
2827
+        define('_PASS_LONGUEUR_MINI', 6);
2828
+    }
2829
+
2830
+    // largeur maximale des images dans l'administration
2831
+    if (!defined('_IMG_ADMIN_MAX_WIDTH')) {
2832
+        define('_IMG_ADMIN_MAX_WIDTH', 768);
2833
+    }
2834
+
2835
+    // Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite)
2836
+    if (!defined('_IMG_QUALITE')) {
2837
+        define('_IMG_QUALITE', 85);
2838
+    } # valeur par defaut
2839
+    if (!defined('_IMG_GD_QUALITE')) {
2840
+        define('_IMG_GD_QUALITE', _IMG_QUALITE);
2841
+    } # surcharge pour la lib GD
2842
+    if (!defined('_IMG_CONVERT_QUALITE')) {
2843
+        define('_IMG_CONVERT_QUALITE', _IMG_QUALITE);
2844
+    } # surcharge pour imagick en ligne de commande
2845
+    // Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE
2846
+    if (!defined('_IMG_IMAGICK_QUALITE')) {
2847
+        define('_IMG_IMAGICK_QUALITE', 75);
2848
+    } # surcharge pour imagick en PHP
2849
+
2850
+    if (!defined('_COPIE_LOCALE_MAX_SIZE')) {
2851
+        define('_COPIE_LOCALE_MAX_SIZE', 33_554_432);
2852
+    } // poids en octet
2853
+
2854
+    // qq chaines standard
2855
+    if (!defined('_ACCESS_FILE_NAME')) {
2856
+        define('_ACCESS_FILE_NAME', '.htaccess');
2857
+    }
2858
+    if (!defined('_AUTH_USER_FILE')) {
2859
+        define('_AUTH_USER_FILE', '.htpasswd');
2860
+    }
2861
+    if (!defined('_SPIP_DUMP')) {
2862
+        define('_SPIP_DUMP', 'dump@nom_site@@[email protected]');
2863
+    }
2864
+    if (!defined('_CACHE_RUBRIQUES')) {
2865
+        /** Fichier cache pour le navigateur de rubrique du bandeau */
2866
+        define('_CACHE_RUBRIQUES', _DIR_TMP . 'menu-rubriques-cache.txt');
2867
+    }
2868
+    if (!defined('_CACHE_RUBRIQUES_MAX')) {
2869
+        /** Nombre maxi de rubriques enfants affichées pour chaque rubrique du navigateur de rubrique du bandeau */
2870
+        define('_CACHE_RUBRIQUES_MAX', 500);
2871
+    }
2872
+
2873
+    if (!defined('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR')) {
2874
+        /**
2875
+         * Basculer les contextes ajax en fichier si la longueur d’url est trop grande
2876
+         * @var int Nombre de caractères */
2877
+        define('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR', 2000);
2878
+    }
2879
+
2880
+    if (!defined('_EXTENSION_SQUELETTES')) {
2881
+        define('_EXTENSION_SQUELETTES', 'html');
2882
+    }
2883
+
2884
+    if (!defined('_DOCTYPE_ECRIRE')) {
2885
+        /** Définit le doctype de l’espace privé */
2886
+        define('_DOCTYPE_ECRIRE', "<!DOCTYPE html>\n");
2887
+    }
2888
+    if (!defined('_DOCTYPE_AIDE')) {
2889
+        /** Définit le doctype de l’aide en ligne */
2890
+        define(
2891
+            '_DOCTYPE_AIDE',
2892
+            "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>"
2893
+        );
2894
+    }
2895
+
2896
+    if (!defined('_SPIP_SCRIPT')) {
2897
+        /** L'adresse de base du site ; on peut mettre '' si la racine est gerée par
2898
+         * le script de l'espace public, alias index.php */
2899
+        define('_SPIP_SCRIPT', 'spip.php');
2900
+    }
2901
+    if (!defined('_SPIP_PAGE')) {
2902
+        /** Argument page, personalisable en cas de conflit avec un autre script */
2903
+        define('_SPIP_PAGE', 'page');
2904
+    }
2905
+
2906
+    // le script de l'espace prive
2907
+    // Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes:
2908
+    // les anciens IIS n'acceptent pas les POST sur ecrire/ (#419)
2909
+    // meme pb sur thttpd cf. https://forum.spip.net/fr_184153.html
2910
+    if (!defined('_SPIP_ECRIRE_SCRIPT')) {
2911
+        if (!empty($_SERVER['SERVER_SOFTWARE']) and preg_match(',IIS|thttpd,', $_SERVER['SERVER_SOFTWARE'])) {
2912
+            define('_SPIP_ECRIRE_SCRIPT', 'index.php');
2913
+        } else {
2914
+            define('_SPIP_ECRIRE_SCRIPT', '');
2915
+        }
2916
+    }
2917
+
2918
+
2919
+    if (!defined('_SPIP_AJAX')) {
2920
+        define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax']))
2921
+            ? 1
2922
+            : (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0)));
2923
+    }
2924
+
2925
+    // La requete est-elle en ajax ?
2926
+    if (!defined('_AJAX')) {
2927
+        define(
2928
+            '_AJAX',
2929
+            (isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery
2930
+                or !empty($_REQUEST['var_ajax_redir']) # redirection 302 apres ajax jQuery
2931
+                or !empty($_REQUEST['var_ajaxcharset']) # compat ascendante pour plugins
2932
+                or !empty($_REQUEST['var_ajax']) # forms ajax & inclure ajax de spip
2933
+            )
2934
+            and empty($_REQUEST['var_noajax']) # horrible exception, car c'est pas parce que la requete est ajax jquery qu'il faut tuer tous les formulaires ajax qu'elle contient
2935
+        );
2936
+    }
2937
+
2938
+    # nombre de pixels maxi pour calcul de la vignette avec gd
2939
+    # au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation
2940
+    # les configurations limitees en memoire ont un seuil plutot vers 1MPixel
2941
+    if (!defined('_IMG_GD_MAX_PIXELS')) {
2942
+        define(
2943
+            '_IMG_GD_MAX_PIXELS',
2944
+            (isset($GLOBALS['meta']['max_taille_vignettes']) and $GLOBALS['meta']['max_taille_vignettes'])
2945
+            ? $GLOBALS['meta']['max_taille_vignettes']
2946
+            : 0
2947
+        );
2948
+    }
2949
+
2950
+    if (!defined('_MEMORY_LIMIT_MIN')) {
2951
+        define('_MEMORY_LIMIT_MIN', 16);
2952
+    } // en Mo
2953
+    // si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard)
2954
+    // on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche
2955
+    // il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche
2956
+    if (test_espace_prive() and _MEMORY_LIMIT_MIN > 8) {
2957
+        if ($memory = trim(ini_get('memory_limit')) and $memory != -1) {
2958
+            $unit = strtolower(substr($memory, -1));
2959
+            $memory = substr($memory, 0, -1);
2960
+            switch ($unit) {
2961
+                // Le modifieur 'G' est disponible depuis PHP 5.1.0
2962
+                case 'g':
2963
+                    $memory *= 1024;
2964
+                case 'm':
2965
+                    $memory *= 1024;
2966
+                case 'k':
2967
+                    $memory *= 1024;
2968
+            }
2969
+            if ($memory < _MEMORY_LIMIT_MIN * 1024 * 1024) {
2970
+                @ini_set('memory_limit', $m = _MEMORY_LIMIT_MIN . 'M');
2971
+                if (trim(ini_get('memory_limit')) != $m) {
2972
+                    if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) {
2973
+                        define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
2974
+                    } // evite une page blanche car on ne saura pas calculer la css dans ce hit
2975
+                }
2976
+            }
2977
+        } else {
2978
+            if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) {
2979
+                define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
2980
+            }
2981
+        } // evite une page blanche car on ne saura pas calculer la css dans ce hit
2982
+    }
2983
+    // Protocoles a normaliser dans les chaines de langues
2984
+    if (!defined('_PROTOCOLES_STD')) {
2985
+        define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal');
2986
+    }
2987
+
2988
+    init_var_mode();
2990 2989
 }
2991 2990
 
2992 2991
 /**
@@ -3020,219 +3019,219 @@  discard block
 block discarded – undo
3020 3019
  * `   var_mode` (calcul ou recalcul).
3021 3020
  */
3022 3021
 function init_var_mode() {
3023
-	static $done = false;
3024
-	if (!$done) {
3025
-		if (isset($_GET['var_mode'])) {
3026
-			$var_mode = explode(',', $_GET['var_mode']);
3027
-			// tout le monde peut calcul/recalcul
3028
-			if (!defined('_VAR_MODE')) {
3029
-				if (in_array('recalcul', $var_mode)) {
3030
-					define('_VAR_MODE', 'recalcul');
3031
-				} elseif (in_array('calcul', $var_mode)) {
3032
-					define('_VAR_MODE', 'calcul');
3033
-				}
3034
-			}
3035
-			$var_mode = array_diff($var_mode, ['calcul', 'recalcul']);
3036
-			if ($var_mode) {
3037
-				include_spip('inc/autoriser');
3038
-				// autoriser preview si preview seulement, et sinon autoriser debug
3039
-				if (
3040
-					autoriser(
3041
-						($_GET['var_mode'] == 'preview')
3042
-						? 'previsualiser'
3043
-						: 'debug'
3044
-					)
3045
-				) {
3046
-					if (in_array('traduction', $var_mode)) {
3047
-						// forcer le calcul pour passer dans traduire
3048
-						if (!defined('_VAR_MODE')) {
3049
-							define('_VAR_MODE', 'calcul');
3050
-						}
3051
-						// et ne pas enregistrer de cache pour ne pas trainer les surlignages sur d'autres pages
3052
-						if (!defined('_VAR_NOCACHE')) {
3053
-							define('_VAR_NOCACHE', true);
3054
-						}
3055
-						$var_mode = array_diff($var_mode, ['traduction']);
3056
-					}
3057
-					if (in_array('preview', $var_mode)) {
3058
-						// basculer sur les criteres de preview dans les boucles
3059
-						if (!defined('_VAR_PREVIEW')) {
3060
-							define('_VAR_PREVIEW', true);
3061
-						}
3062
-						// forcer le calcul
3063
-						if (!defined('_VAR_MODE')) {
3064
-							define('_VAR_MODE', 'calcul');
3065
-						}
3066
-						// et ne pas enregistrer de cache
3067
-						if (!defined('_VAR_NOCACHE')) {
3068
-							define('_VAR_NOCACHE', true);
3069
-						}
3070
-						$var_mode = array_diff($var_mode, ['preview']);
3071
-					}
3072
-					if (in_array('inclure', $var_mode)) {
3073
-						// forcer le compilo et ignorer les caches existants
3074
-						if (!defined('_VAR_MODE')) {
3075
-							define('_VAR_MODE', 'calcul');
3076
-						}
3077
-						if (!defined('_VAR_INCLURE')) {
3078
-							define('_VAR_INCLURE', true);
3079
-						}
3080
-						// et ne pas enregistrer de cache
3081
-						if (!defined('_VAR_NOCACHE')) {
3082
-							define('_VAR_NOCACHE', true);
3083
-						}
3084
-						$var_mode = array_diff($var_mode, ['inclure']);
3085
-					}
3086
-					if (in_array('urls', $var_mode)) {
3087
-						// forcer le compilo et ignorer les caches existants
3088
-						if (!defined('_VAR_MODE')) {
3089
-							define('_VAR_MODE', 'calcul');
3090
-						}
3091
-						if (!defined('_VAR_URLS')) {
3092
-							define('_VAR_URLS', true);
3093
-						}
3094
-						$var_mode = array_diff($var_mode, ['urls']);
3095
-					}
3096
-					if (in_array('images', $var_mode)) {
3097
-						// forcer le compilo et ignorer les caches existants
3098
-						if (!defined('_VAR_MODE')) {
3099
-							define('_VAR_MODE', 'calcul');
3100
-						}
3101
-						// indiquer qu'on doit recalculer les images
3102
-						if (!defined('_VAR_IMAGES')) {
3103
-							define('_VAR_IMAGES', true);
3104
-						}
3105
-						$var_mode = array_diff($var_mode, ['images']);
3106
-					}
3107
-					if (in_array('debug', $var_mode)) {
3108
-						if (!defined('_VAR_MODE')) {
3109
-							define('_VAR_MODE', 'debug');
3110
-						}
3111
-						// et ne pas enregistrer de cache
3112
-						if (!defined('_VAR_NOCACHE')) {
3113
-							define('_VAR_NOCACHE', true);
3114
-						}
3115
-						$var_mode = array_diff($var_mode, ['debug']);
3116
-					}
3117
-					if (count($var_mode) and !defined('_VAR_MODE')) {
3118
-						define('_VAR_MODE', reset($var_mode));
3119
-					}
3120
-					if (isset($GLOBALS['visiteur_session']['nom'])) {
3121
-						spip_log($GLOBALS['visiteur_session']['nom']
3122
-							. ' ' . _VAR_MODE);
3123
-					}
3124
-				} // pas autorise ?
3125
-				else {
3126
-					// si on n'est pas connecte on se redirige, si on est pas en cli et pas deja en train de se loger
3127
-					if (
3128
-						!$GLOBALS['visiteur_session']
3129
-						and !empty($_SERVER['HTTP_HOST'])
3130
-						and !empty($_SERVER['REQUEST_METHOD'])
3131
-						and $_SERVER['REQUEST_METHOD'] === 'GET'
3132
-					) {
3133
-						$self = self('&', true);
3134
-						if (strpos($self, 'page=login') === false) {
3135
-							include_spip('inc/headers');
3136
-							$redirect = parametre_url(self('&', true), 'var_mode', $_GET['var_mode'], '&');
3137
-							redirige_par_entete(generer_url_public('login', 'url=' . rawurlencode($redirect), true));
3138
-						}
3139
-					}
3140
-					// sinon tant pis
3141
-				}
3142
-			}
3143
-		}
3144
-		if (!defined('_VAR_MODE')) {
3145
-			/**
3146
-			 * Indique le mode de calcul ou d'affichage de la page.
3147
-			 * @see init_var_mode()
3148
-			 */
3149
-			define('_VAR_MODE', false);
3150
-		}
3151
-		$done = true;
3152
-	}
3022
+    static $done = false;
3023
+    if (!$done) {
3024
+        if (isset($_GET['var_mode'])) {
3025
+            $var_mode = explode(',', $_GET['var_mode']);
3026
+            // tout le monde peut calcul/recalcul
3027
+            if (!defined('_VAR_MODE')) {
3028
+                if (in_array('recalcul', $var_mode)) {
3029
+                    define('_VAR_MODE', 'recalcul');
3030
+                } elseif (in_array('calcul', $var_mode)) {
3031
+                    define('_VAR_MODE', 'calcul');
3032
+                }
3033
+            }
3034
+            $var_mode = array_diff($var_mode, ['calcul', 'recalcul']);
3035
+            if ($var_mode) {
3036
+                include_spip('inc/autoriser');
3037
+                // autoriser preview si preview seulement, et sinon autoriser debug
3038
+                if (
3039
+                    autoriser(
3040
+                        ($_GET['var_mode'] == 'preview')
3041
+                        ? 'previsualiser'
3042
+                        : 'debug'
3043
+                    )
3044
+                ) {
3045
+                    if (in_array('traduction', $var_mode)) {
3046
+                        // forcer le calcul pour passer dans traduire
3047
+                        if (!defined('_VAR_MODE')) {
3048
+                            define('_VAR_MODE', 'calcul');
3049
+                        }
3050
+                        // et ne pas enregistrer de cache pour ne pas trainer les surlignages sur d'autres pages
3051
+                        if (!defined('_VAR_NOCACHE')) {
3052
+                            define('_VAR_NOCACHE', true);
3053
+                        }
3054
+                        $var_mode = array_diff($var_mode, ['traduction']);
3055
+                    }
3056
+                    if (in_array('preview', $var_mode)) {
3057
+                        // basculer sur les criteres de preview dans les boucles
3058
+                        if (!defined('_VAR_PREVIEW')) {
3059
+                            define('_VAR_PREVIEW', true);
3060
+                        }
3061
+                        // forcer le calcul
3062
+                        if (!defined('_VAR_MODE')) {
3063
+                            define('_VAR_MODE', 'calcul');
3064
+                        }
3065
+                        // et ne pas enregistrer de cache
3066
+                        if (!defined('_VAR_NOCACHE')) {
3067
+                            define('_VAR_NOCACHE', true);
3068
+                        }
3069
+                        $var_mode = array_diff($var_mode, ['preview']);
3070
+                    }
3071
+                    if (in_array('inclure', $var_mode)) {
3072
+                        // forcer le compilo et ignorer les caches existants
3073
+                        if (!defined('_VAR_MODE')) {
3074
+                            define('_VAR_MODE', 'calcul');
3075
+                        }
3076
+                        if (!defined('_VAR_INCLURE')) {
3077
+                            define('_VAR_INCLURE', true);
3078
+                        }
3079
+                        // et ne pas enregistrer de cache
3080
+                        if (!defined('_VAR_NOCACHE')) {
3081
+                            define('_VAR_NOCACHE', true);
3082
+                        }
3083
+                        $var_mode = array_diff($var_mode, ['inclure']);
3084
+                    }
3085
+                    if (in_array('urls', $var_mode)) {
3086
+                        // forcer le compilo et ignorer les caches existants
3087
+                        if (!defined('_VAR_MODE')) {
3088
+                            define('_VAR_MODE', 'calcul');
3089
+                        }
3090
+                        if (!defined('_VAR_URLS')) {
3091
+                            define('_VAR_URLS', true);
3092
+                        }
3093
+                        $var_mode = array_diff($var_mode, ['urls']);
3094
+                    }
3095
+                    if (in_array('images', $var_mode)) {
3096
+                        // forcer le compilo et ignorer les caches existants
3097
+                        if (!defined('_VAR_MODE')) {
3098
+                            define('_VAR_MODE', 'calcul');
3099
+                        }
3100
+                        // indiquer qu'on doit recalculer les images
3101
+                        if (!defined('_VAR_IMAGES')) {
3102
+                            define('_VAR_IMAGES', true);
3103
+                        }
3104
+                        $var_mode = array_diff($var_mode, ['images']);
3105
+                    }
3106
+                    if (in_array('debug', $var_mode)) {
3107
+                        if (!defined('_VAR_MODE')) {
3108
+                            define('_VAR_MODE', 'debug');
3109
+                        }
3110
+                        // et ne pas enregistrer de cache
3111
+                        if (!defined('_VAR_NOCACHE')) {
3112
+                            define('_VAR_NOCACHE', true);
3113
+                        }
3114
+                        $var_mode = array_diff($var_mode, ['debug']);
3115
+                    }
3116
+                    if (count($var_mode) and !defined('_VAR_MODE')) {
3117
+                        define('_VAR_MODE', reset($var_mode));
3118
+                    }
3119
+                    if (isset($GLOBALS['visiteur_session']['nom'])) {
3120
+                        spip_log($GLOBALS['visiteur_session']['nom']
3121
+                            . ' ' . _VAR_MODE);
3122
+                    }
3123
+                } // pas autorise ?
3124
+                else {
3125
+                    // si on n'est pas connecte on se redirige, si on est pas en cli et pas deja en train de se loger
3126
+                    if (
3127
+                        !$GLOBALS['visiteur_session']
3128
+                        and !empty($_SERVER['HTTP_HOST'])
3129
+                        and !empty($_SERVER['REQUEST_METHOD'])
3130
+                        and $_SERVER['REQUEST_METHOD'] === 'GET'
3131
+                    ) {
3132
+                        $self = self('&', true);
3133
+                        if (strpos($self, 'page=login') === false) {
3134
+                            include_spip('inc/headers');
3135
+                            $redirect = parametre_url(self('&', true), 'var_mode', $_GET['var_mode'], '&');
3136
+                            redirige_par_entete(generer_url_public('login', 'url=' . rawurlencode($redirect), true));
3137
+                        }
3138
+                    }
3139
+                    // sinon tant pis
3140
+                }
3141
+            }
3142
+        }
3143
+        if (!defined('_VAR_MODE')) {
3144
+            /**
3145
+             * Indique le mode de calcul ou d'affichage de la page.
3146
+             * @see init_var_mode()
3147
+             */
3148
+            define('_VAR_MODE', false);
3149
+        }
3150
+        $done = true;
3151
+    }
3153 3152
 }
3154 3153
 
3155 3154
 // Annuler les magic quotes \' sur GET POST COOKIE et GLOBALS ;
3156 3155
 // supprimer aussi les eventuels caracteres nuls %00, qui peuvent tromper
3157 3156
 // la commande is_readable('chemin/vers/fichier/interdit%00truc_normal')
3158 3157
 function spip_desinfecte(&$t, $deep = true) {
3159
-	foreach ($t as $key => $val) {
3160
-		if (is_string($t[$key])) {
3161
-			$t[$key] = str_replace(chr(0), '-', $t[$key]);
3162
-		} // traiter aussi les "texte_plus" de article_edit
3163
-		else {
3164
-			if ($deep and is_array($t[$key]) and $key !== 'GLOBALS') {
3165
-				spip_desinfecte($t[$key], $deep);
3166
-			}
3167
-		}
3168
-	}
3158
+    foreach ($t as $key => $val) {
3159
+        if (is_string($t[$key])) {
3160
+            $t[$key] = str_replace(chr(0), '-', $t[$key]);
3161
+        } // traiter aussi les "texte_plus" de article_edit
3162
+        else {
3163
+            if ($deep and is_array($t[$key]) and $key !== 'GLOBALS') {
3164
+                spip_desinfecte($t[$key], $deep);
3165
+            }
3166
+        }
3167
+    }
3169 3168
 }
3170 3169
 
3171 3170
 //  retourne le statut du visiteur s'il s'annonce
3172 3171
 
3173 3172
 function verifier_visiteur() {
3174
-	// Rq: pour que cette fonction marche depuis mes_options
3175
-	// il faut forcer l'init si ce n'est fait
3176
-	// mais on risque de perturber des plugins en initialisant trop tot
3177
-	// certaines constantes
3178
-	@spip_initialisation_core(
3179
-		(_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES),
3180
-		(_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES),
3181
-		(_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES),
3182
-		(_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES)
3183
-	);
3184
-
3185
-	// Demarrer une session NON AUTHENTIFIEE si on donne son nom
3186
-	// dans un formulaire sans login (ex: #FORMULAIRE_FORUM)
3187
-	// Attention on separe bien session_nom et nom, pour eviter
3188
-	// les melanges entre donnees SQL et variables plus aleatoires
3189
-	$variables_session = ['session_nom', 'session_email'];
3190
-	foreach ($variables_session as $var) {
3191
-		if (_request($var) !== null) {
3192
-			$init = true;
3193
-			break;
3194
-		}
3195
-	}
3196
-	if (isset($init)) {
3197
-		#@spip_initialisation_suite();
3198
-		$session = charger_fonction('session', 'inc');
3199
-		$session();
3200
-		include_spip('inc/texte');
3201
-		foreach ($variables_session as $var) {
3202
-			if (($a = _request($var)) !== null) {
3203
-				$GLOBALS['visiteur_session'][$var] = safehtml($a);
3204
-			}
3205
-		}
3206
-		if (!isset($GLOBALS['visiteur_session']['id_auteur'])) {
3207
-			$GLOBALS['visiteur_session']['id_auteur'] = 0;
3208
-		}
3209
-		$session($GLOBALS['visiteur_session']);
3210
-
3211
-		return 0;
3212
-	}
3213
-
3214
-	$h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']);
3215
-	if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) {
3216
-		$session = charger_fonction('session', 'inc');
3217
-		if ($session()) {
3218
-			return $GLOBALS['visiteur_session']['statut'];
3219
-		}
3220
-		if ($h and isset($_SERVER['PHP_AUTH_PW'])) {
3221
-			include_spip('inc/auth');
3222
-			$h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
3223
-		}
3224
-		if ($h) {
3225
-			$GLOBALS['visiteur_session'] = $h;
3226
-
3227
-			return $GLOBALS['visiteur_session']['statut'];
3228
-		}
3229
-	}
3230
-
3231
-	// au moins son navigateur nous dit la langue preferee de cet inconnu
3232
-	include_spip('inc/lang');
3233
-	utiliser_langue_visiteur();
3234
-
3235
-	return false;
3173
+    // Rq: pour que cette fonction marche depuis mes_options
3174
+    // il faut forcer l'init si ce n'est fait
3175
+    // mais on risque de perturber des plugins en initialisant trop tot
3176
+    // certaines constantes
3177
+    @spip_initialisation_core(
3178
+        (_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES),
3179
+        (_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES),
3180
+        (_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES),
3181
+        (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES)
3182
+    );
3183
+
3184
+    // Demarrer une session NON AUTHENTIFIEE si on donne son nom
3185
+    // dans un formulaire sans login (ex: #FORMULAIRE_FORUM)
3186
+    // Attention on separe bien session_nom et nom, pour eviter
3187
+    // les melanges entre donnees SQL et variables plus aleatoires
3188
+    $variables_session = ['session_nom', 'session_email'];
3189
+    foreach ($variables_session as $var) {
3190
+        if (_request($var) !== null) {
3191
+            $init = true;
3192
+            break;
3193
+        }
3194
+    }
3195
+    if (isset($init)) {
3196
+        #@spip_initialisation_suite();
3197
+        $session = charger_fonction('session', 'inc');
3198
+        $session();
3199
+        include_spip('inc/texte');
3200
+        foreach ($variables_session as $var) {
3201
+            if (($a = _request($var)) !== null) {
3202
+                $GLOBALS['visiteur_session'][$var] = safehtml($a);
3203
+            }
3204
+        }
3205
+        if (!isset($GLOBALS['visiteur_session']['id_auteur'])) {
3206
+            $GLOBALS['visiteur_session']['id_auteur'] = 0;
3207
+        }
3208
+        $session($GLOBALS['visiteur_session']);
3209
+
3210
+        return 0;
3211
+    }
3212
+
3213
+    $h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']);
3214
+    if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) {
3215
+        $session = charger_fonction('session', 'inc');
3216
+        if ($session()) {
3217
+            return $GLOBALS['visiteur_session']['statut'];
3218
+        }
3219
+        if ($h and isset($_SERVER['PHP_AUTH_PW'])) {
3220
+            include_spip('inc/auth');
3221
+            $h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
3222
+        }
3223
+        if ($h) {
3224
+            $GLOBALS['visiteur_session'] = $h;
3225
+
3226
+            return $GLOBALS['visiteur_session']['statut'];
3227
+        }
3228
+    }
3229
+
3230
+    // au moins son navigateur nous dit la langue preferee de cet inconnu
3231
+    include_spip('inc/lang');
3232
+    utiliser_langue_visiteur();
3233
+
3234
+    return false;
3236 3235
 }
3237 3236
 
3238 3237
 
@@ -3255,21 +3254,21 @@  discard block
 block discarded – undo
3255 3254
  *     - string Langue utilisée.
3256 3255
  **/
3257 3256
 function lang_select($lang = null) {
3258
-	static $pile_langues = [];
3259
-	if (!function_exists('changer_langue')) {
3260
-		include_spip('inc/lang');
3261
-	}
3262
-	if ($lang === null) {
3263
-		$lang = array_pop($pile_langues);
3264
-	} else {
3265
-		array_push($pile_langues, $GLOBALS['spip_lang']);
3266
-	}
3267
-	if (isset($GLOBALS['spip_lang']) and $lang == $GLOBALS['spip_lang']) {
3268
-		return $lang;
3269
-	}
3270
-	changer_langue($lang);
3257
+    static $pile_langues = [];
3258
+    if (!function_exists('changer_langue')) {
3259
+        include_spip('inc/lang');
3260
+    }
3261
+    if ($lang === null) {
3262
+        $lang = array_pop($pile_langues);
3263
+    } else {
3264
+        array_push($pile_langues, $GLOBALS['spip_lang']);
3265
+    }
3266
+    if (isset($GLOBALS['spip_lang']) and $lang == $GLOBALS['spip_lang']) {
3267
+        return $lang;
3268
+    }
3269
+    changer_langue($lang);
3271 3270
 
3272
-	return $lang;
3271
+    return $lang;
3273 3272
 }
3274 3273
 
3275 3274
 /**
@@ -3286,20 +3285,20 @@  discard block
 block discarded – undo
3286 3285
  *     Identifiant de la session
3287 3286
  **/
3288 3287
 function spip_session($force = false) {
3289
-	static $session;
3290
-	if ($force or !isset($session)) {
3291
-		$s = pipeline(
3292
-			'definir_session',
3293
-			$GLOBALS['visiteur_session']
3294
-				? serialize($GLOBALS['visiteur_session'])
3295
-				. '_' . @$_COOKIE['spip_session']
3296
-				: ''
3297
-		);
3298
-		$session = $s ? substr(md5($s), 0, 8) : '';
3299
-	}
3288
+    static $session;
3289
+    if ($force or !isset($session)) {
3290
+        $s = pipeline(
3291
+            'definir_session',
3292
+            $GLOBALS['visiteur_session']
3293
+                ? serialize($GLOBALS['visiteur_session'])
3294
+                . '_' . @$_COOKIE['spip_session']
3295
+                : ''
3296
+        );
3297
+        $session = $s ? substr(md5($s), 0, 8) : '';
3298
+    }
3300 3299
 
3301
-	#spip_log('session: '.$session);
3302
-	return $session;
3300
+    #spip_log('session: '.$session);
3301
+    return $session;
3303 3302
 }
3304 3303
 
3305 3304
 
@@ -3318,9 +3317,9 @@  discard block
 block discarded – undo
3318 3317
  *    Lien sur une icone d'aide
3319 3318
  **/
3320 3319
 function aider($aide = '', $distante = false) {
3321
-	$aider = charger_fonction('aide', 'inc', true);
3320
+    $aider = charger_fonction('aide', 'inc', true);
3322 3321
 
3323
-	return $aider ? $aider($aide, '', [], $distante) : '';
3322
+    return $aider ? $aider($aide, '', [], $distante) : '';
3324 3323
 }
3325 3324
 
3326 3325
 /**
@@ -3330,24 +3329,24 @@  discard block
 block discarded – undo
3330 3329
  */
3331 3330
 function exec_info_dist() {
3332 3331
 
3333
-	include_spip('inc/autoriser');
3334
-	if (autoriser('phpinfos')) {
3335
-		$cookies_masques = ['spip_session', 'PHPSESSID'];
3336
-		$cookies_backup = [];
3337
-		foreach ($cookies_masques as $k) {
3338
-			if (!empty($_COOKIE[$k])) {
3339
-				$cookies_backup[$k] = $_COOKIE[$k];
3340
-				$_COOKIE[$k] = '******************************';
3341
-			}
3342
-		}
3343
-		phpinfo();
3344
-		foreach ($cookies_backup as $k => $v) {
3345
-			$_COOKIE[$k] = $v;
3346
-		}
3347
-	} else {
3348
-		include_spip('inc/filtres');
3349
-		sinon_interdire_acces();
3350
-	}
3332
+    include_spip('inc/autoriser');
3333
+    if (autoriser('phpinfos')) {
3334
+        $cookies_masques = ['spip_session', 'PHPSESSID'];
3335
+        $cookies_backup = [];
3336
+        foreach ($cookies_masques as $k) {
3337
+            if (!empty($_COOKIE[$k])) {
3338
+                $cookies_backup[$k] = $_COOKIE[$k];
3339
+                $_COOKIE[$k] = '******************************';
3340
+            }
3341
+        }
3342
+        phpinfo();
3343
+        foreach ($cookies_backup as $k => $v) {
3344
+            $_COOKIE[$k] = $v;
3345
+        }
3346
+    } else {
3347
+        include_spip('inc/filtres');
3348
+        sinon_interdire_acces();
3349
+    }
3351 3350
 }
3352 3351
 
3353 3352
 /**
@@ -3367,13 +3366,13 @@  discard block
 block discarded – undo
3367 3366
  *     - string si $message à false.
3368 3367
  **/
3369 3368
 function erreur_squelette($message = '', $lieu = '') {
3370
-	$debusquer = charger_fonction('debusquer', 'public');
3371
-	if (is_array($lieu)) {
3372
-		include_spip('public/compiler');
3373
-		$lieu = reconstruire_contexte_compil($lieu);
3374
-	}
3369
+    $debusquer = charger_fonction('debusquer', 'public');
3370
+    if (is_array($lieu)) {
3371
+        include_spip('public/compiler');
3372
+        $lieu = reconstruire_contexte_compil($lieu);
3373
+    }
3375 3374
 
3376
-	return $debusquer($message, $lieu);
3375
+    return $debusquer($message, $lieu);
3377 3376
 }
3378 3377
 
3379 3378
 /**
@@ -3410,108 +3409,108 @@  discard block
 block discarded – undo
3410 3409
  *     - ou tableau d'information sur le squelette.
3411 3410
  */
3412 3411
 function recuperer_fond($fond, $contexte = [], $options = [], string $connect = '') {
3413
-	if (!function_exists('evaluer_fond')) {
3414
-		include_spip('public/assembler');
3415
-	}
3416
-	// assurer la compat avec l'ancienne syntaxe
3417
-	// (trim etait le 3eme argument, par defaut a true)
3418
-	if (!is_array($options)) {
3419
-		$options = ['trim' => $options];
3420
-	}
3421
-	if (!isset($options['trim'])) {
3422
-		$options['trim'] = true;
3423
-	}
3424
-
3425
-	if (isset($contexte['connect'])) {
3426
-		$connect = $contexte['connect'];
3427
-		unset($contexte['connect']);
3428
-	}
3429
-
3430
-	$texte = '';
3431
-	$pages = [];
3432
-	$lang_select = '';
3433
-	if (!isset($options['etoile']) or !$options['etoile']) {
3434
-		// Si on a inclus sans fixer le critere de lang, on prend la langue courante
3435
-		if (!isset($contexte['lang'])) {
3436
-			$contexte['lang'] = $GLOBALS['spip_lang'];
3437
-		}
3438
-
3439
-		if ($contexte['lang'] != $GLOBALS['meta']['langue_site']) {
3440
-			$lang_select = lang_select($contexte['lang']);
3441
-		}
3442
-	}
3443
-
3444
-	if (!isset($GLOBALS['_INC_PUBLIC'])) {
3445
-		$GLOBALS['_INC_PUBLIC'] = 0;
3446
-	}
3447
-
3448
-	$GLOBALS['_INC_PUBLIC']++;
3449
-
3450
-	// fix #4235
3451
-	$cache_utilise_session_appelant	= ($GLOBALS['cache_utilise_session'] ?? null);
3452
-
3453
-
3454
-	foreach (is_array($fond) ? $fond : [$fond] as $f) {
3455
-		unset($GLOBALS['cache_utilise_session']);	// fix #4235
3456
-
3457
-		$page = evaluer_fond($f, $contexte, $connect);
3458
-		if ($page === '') {
3459
-			$c = $options['compil'] ?? '';
3460
-			$a = ['fichier' => $f];
3461
-			$erreur = _T('info_erreur_squelette2', $a); // squelette introuvable
3462
-			erreur_squelette($erreur, $c);
3463
-			// eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
3464
-			$page = ['texte' => '', 'erreur' => $erreur];
3465
-		}
3466
-
3467
-		$page = pipeline('recuperer_fond', [
3468
-			'args' => ['fond' => $f, 'contexte' => $contexte, 'options' => $options, 'connect' => $connect],
3469
-			'data' => $page
3470
-		]);
3471
-		if (isset($options['ajax']) and $options['ajax']) {
3472
-			if (!function_exists('encoder_contexte_ajax')) {
3473
-				include_spip('inc/filtres');
3474
-			}
3475
-			$page['texte'] = encoder_contexte_ajax(
3476
-				array_merge(
3477
-					$contexte,
3478
-					['fond' => $f],
3479
-					($connect ? ['connect' => $connect] : [])
3480
-				),
3481
-				'',
3482
-				$page['texte'],
3483
-				$options['ajax']
3484
-			);
3485
-		}
3486
-
3487
-		if (isset($options['raw']) and $options['raw']) {
3488
-			$pages[] = $page;
3489
-		} else {
3490
-			$texte .= $options['trim'] ? rtrim($page['texte'] ?? '') : $page['texte'];
3491
-		}
3492
-
3493
-		// contamination de la session appelante, pour les inclusions statiques
3494
-		if (isset($page['invalideurs']['session'])) {
3495
-			$cache_utilise_session_appelant = $page['invalideurs']['session'];
3496
-		}
3497
-	}
3498
-
3499
-	// restaurer le sessionnement du contexte appelant,
3500
-	// éventuellement contaminé si on vient de récupérer une inclusion statique sessionnée
3501
-	if (isset($cache_utilise_session_appelant)) {
3502
-		$GLOBALS['cache_utilise_session'] = $cache_utilise_session_appelant;
3503
-	}
3504
-
3505
-	$GLOBALS['_INC_PUBLIC']--;
3506
-
3507
-	if ($lang_select) {
3508
-		lang_select();
3509
-	}
3510
-	if (isset($options['raw']) and $options['raw']) {
3511
-		return is_array($fond) ? $pages : reset($pages);
3512
-	} else {
3513
-		return $options['trim'] ? ltrim($texte) : $texte;
3514
-	}
3412
+    if (!function_exists('evaluer_fond')) {
3413
+        include_spip('public/assembler');
3414
+    }
3415
+    // assurer la compat avec l'ancienne syntaxe
3416
+    // (trim etait le 3eme argument, par defaut a true)
3417
+    if (!is_array($options)) {
3418
+        $options = ['trim' => $options];
3419
+    }
3420
+    if (!isset($options['trim'])) {
3421
+        $options['trim'] = true;
3422
+    }
3423
+
3424
+    if (isset($contexte['connect'])) {
3425
+        $connect = $contexte['connect'];
3426
+        unset($contexte['connect']);
3427
+    }
3428
+
3429
+    $texte = '';
3430
+    $pages = [];
3431
+    $lang_select = '';
3432
+    if (!isset($options['etoile']) or !$options['etoile']) {
3433
+        // Si on a inclus sans fixer le critere de lang, on prend la langue courante
3434
+        if (!isset($contexte['lang'])) {
3435
+            $contexte['lang'] = $GLOBALS['spip_lang'];
3436
+        }
3437
+
3438
+        if ($contexte['lang'] != $GLOBALS['meta']['langue_site']) {
3439
+            $lang_select = lang_select($contexte['lang']);
3440
+        }
3441
+    }
3442
+
3443
+    if (!isset($GLOBALS['_INC_PUBLIC'])) {
3444
+        $GLOBALS['_INC_PUBLIC'] = 0;
3445
+    }
3446
+
3447
+    $GLOBALS['_INC_PUBLIC']++;
3448
+
3449
+    // fix #4235
3450
+    $cache_utilise_session_appelant	= ($GLOBALS['cache_utilise_session'] ?? null);
3451
+
3452
+
3453
+    foreach (is_array($fond) ? $fond : [$fond] as $f) {
3454
+        unset($GLOBALS['cache_utilise_session']);	// fix #4235
3455
+
3456
+        $page = evaluer_fond($f, $contexte, $connect);
3457
+        if ($page === '') {
3458
+            $c = $options['compil'] ?? '';
3459
+            $a = ['fichier' => $f];
3460
+            $erreur = _T('info_erreur_squelette2', $a); // squelette introuvable
3461
+            erreur_squelette($erreur, $c);
3462
+            // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
3463
+            $page = ['texte' => '', 'erreur' => $erreur];
3464
+        }
3465
+
3466
+        $page = pipeline('recuperer_fond', [
3467
+            'args' => ['fond' => $f, 'contexte' => $contexte, 'options' => $options, 'connect' => $connect],
3468
+            'data' => $page
3469
+        ]);
3470
+        if (isset($options['ajax']) and $options['ajax']) {
3471
+            if (!function_exists('encoder_contexte_ajax')) {
3472
+                include_spip('inc/filtres');
3473
+            }
3474
+            $page['texte'] = encoder_contexte_ajax(
3475
+                array_merge(
3476
+                    $contexte,
3477
+                    ['fond' => $f],
3478
+                    ($connect ? ['connect' => $connect] : [])
3479
+                ),
3480
+                '',
3481
+                $page['texte'],
3482
+                $options['ajax']
3483
+            );
3484
+        }
3485
+
3486
+        if (isset($options['raw']) and $options['raw']) {
3487
+            $pages[] = $page;
3488
+        } else {
3489
+            $texte .= $options['trim'] ? rtrim($page['texte'] ?? '') : $page['texte'];
3490
+        }
3491
+
3492
+        // contamination de la session appelante, pour les inclusions statiques
3493
+        if (isset($page['invalideurs']['session'])) {
3494
+            $cache_utilise_session_appelant = $page['invalideurs']['session'];
3495
+        }
3496
+    }
3497
+
3498
+    // restaurer le sessionnement du contexte appelant,
3499
+    // éventuellement contaminé si on vient de récupérer une inclusion statique sessionnée
3500
+    if (isset($cache_utilise_session_appelant)) {
3501
+        $GLOBALS['cache_utilise_session'] = $cache_utilise_session_appelant;
3502
+    }
3503
+
3504
+    $GLOBALS['_INC_PUBLIC']--;
3505
+
3506
+    if ($lang_select) {
3507
+        lang_select();
3508
+    }
3509
+    if (isset($options['raw']) and $options['raw']) {
3510
+        return is_array($fond) ? $pages : reset($pages);
3511
+    } else {
3512
+        return $options['trim'] ? ltrim($texte) : $texte;
3513
+    }
3515 3514
 }
3516 3515
 
3517 3516
 /**
@@ -3521,7 +3520,7 @@  discard block
 block discarded – undo
3521 3520
  * @return string
3522 3521
  */
3523 3522
 function trouve_modele($nom) {
3524
-	return trouver_fond($nom, 'modeles/');
3523
+    return trouver_fond($nom, 'modeles/');
3525 3524
 }
3526 3525
 
3527 3526
 /**
@@ -3537,21 +3536,21 @@  discard block
 block discarded – undo
3537 3536
  * @return array|string
3538 3537
  */
3539 3538
 function trouver_fond($nom, $dir = '', $pathinfo = false) {
3540
-	$f = find_in_path($nom . '.' . _EXTENSION_SQUELETTES, $dir ? rtrim($dir, '/') . '/' : '');
3541
-	if (!$pathinfo) {
3542
-		return $f;
3543
-	}
3544
-	// renvoyer un tableau detaille si $pathinfo==true
3545
-	$p = pathinfo($f);
3546
-	if (!isset($p['extension']) or !$p['extension']) {
3547
-		$p['extension'] = _EXTENSION_SQUELETTES;
3548
-	}
3549
-	if (!isset($p['extension']) or !$p['filename']) {
3550
-		$p['filename'] = ($p['basename'] ? substr($p['basename'], 0, -strlen($p['extension']) - 1) : '');
3551
-	}
3552
-	$p['fond'] = ($f ? substr($f, 0, -strlen($p['extension']) - 1) : '');
3539
+    $f = find_in_path($nom . '.' . _EXTENSION_SQUELETTES, $dir ? rtrim($dir, '/') . '/' : '');
3540
+    if (!$pathinfo) {
3541
+        return $f;
3542
+    }
3543
+    // renvoyer un tableau detaille si $pathinfo==true
3544
+    $p = pathinfo($f);
3545
+    if (!isset($p['extension']) or !$p['extension']) {
3546
+        $p['extension'] = _EXTENSION_SQUELETTES;
3547
+    }
3548
+    if (!isset($p['extension']) or !$p['filename']) {
3549
+        $p['filename'] = ($p['basename'] ? substr($p['basename'], 0, -strlen($p['extension']) - 1) : '');
3550
+    }
3551
+    $p['fond'] = ($f ? substr($f, 0, -strlen($p['extension']) - 1) : '');
3553 3552
 
3554
-	return $p;
3553
+    return $p;
3555 3554
 }
3556 3555
 
3557 3556
 /**
@@ -3571,21 +3570,21 @@  discard block
 block discarded – undo
3571 3570
  *     Nom de l'exec, sinon chaîne vide.
3572 3571
  **/
3573 3572
 function tester_url_ecrire($nom) {
3574
-	static $exec = [];
3575
-	if (isset($exec[$nom])) {
3576
-		return $exec[$nom];
3577
-	}
3578
-	// tester si c'est une page en squelette
3579
-	if (trouver_fond($nom, 'prive/squelettes/contenu/')) {
3580
-		return $exec[$nom] = 'fond';
3581
-	} // echafaudage d'un fond !
3582
-	elseif (include_spip('public/styliser_par_z') and z_echafaudable($nom)) {
3583
-		return $exec[$nom] = 'fond';
3584
-	}
3585
-	// attention, il ne faut pas inclure l'exec ici
3586
-	// car sinon #URL_ECRIRE provoque des inclusions
3587
-	// et des define intrusifs potentiels
3588
-	return $exec[$nom] = ((find_in_path("{$nom}.php", 'exec/') or charger_fonction($nom, 'exec', true)) ? $nom : '');
3573
+    static $exec = [];
3574
+    if (isset($exec[$nom])) {
3575
+        return $exec[$nom];
3576
+    }
3577
+    // tester si c'est une page en squelette
3578
+    if (trouver_fond($nom, 'prive/squelettes/contenu/')) {
3579
+        return $exec[$nom] = 'fond';
3580
+    } // echafaudage d'un fond !
3581
+    elseif (include_spip('public/styliser_par_z') and z_echafaudable($nom)) {
3582
+        return $exec[$nom] = 'fond';
3583
+    }
3584
+    // attention, il ne faut pas inclure l'exec ici
3585
+    // car sinon #URL_ECRIRE provoque des inclusions
3586
+    // et des define intrusifs potentiels
3587
+    return $exec[$nom] = ((find_in_path("{$nom}.php", 'exec/') or charger_fonction($nom, 'exec', true)) ? $nom : '');
3589 3588
 }
3590 3589
 
3591 3590
 /**
@@ -3595,8 +3594,8 @@  discard block
 block discarded – undo
3595 3594
  *     true si la constante _VERSION_HTML n'est pas définie ou égale à html5
3596 3595
  **/
3597 3596
 function html5_permis() {
3598
-	return (!defined('_VERSION_HTML')
3599
-		or _VERSION_HTML !== 'html4');
3597
+    return (!defined('_VERSION_HTML')
3598
+        or _VERSION_HTML !== 'html4');
3600 3599
 }
3601 3600
 
3602 3601
 /**
@@ -3606,30 +3605,30 @@  discard block
 block discarded – undo
3606 3605
  * @return array
3607 3606
  */
3608 3607
 function formats_image_acceptables($gd = null, $svg_allowed = true) {
3609
-	$formats = null;
3610
-	if (!is_null($gd)) {
3611
-		$config = ($gd ? 'gd_formats' : 'formats_graphiques');
3612
-		if (isset($GLOBALS['meta'][$config])) {
3613
-			$formats = $GLOBALS['meta'][$config];
3614
-			$formats = explode(',', $formats);
3615
-			$formats = array_filter($formats);
3616
-			$formats = array_map('trim', $formats);
3617
-		}
3618
-	}
3619
-	if (is_null($formats)) {
3620
-		include_spip('inc/filtres_images_lib_mini');
3621
-		$formats = _image_extensions_acceptees_en_entree();
3622
-	}
3623
-
3624
-	if ($svg_allowed) {
3625
-		if (!in_array('svg', $formats)) {
3626
-			$formats[] = 'svg';
3627
-		}
3628
-	}
3629
-	else {
3630
-		$formats = array_diff($formats, ['svg']);
3631
-	}
3632
-	return $formats;
3608
+    $formats = null;
3609
+    if (!is_null($gd)) {
3610
+        $config = ($gd ? 'gd_formats' : 'formats_graphiques');
3611
+        if (isset($GLOBALS['meta'][$config])) {
3612
+            $formats = $GLOBALS['meta'][$config];
3613
+            $formats = explode(',', $formats);
3614
+            $formats = array_filter($formats);
3615
+            $formats = array_map('trim', $formats);
3616
+        }
3617
+    }
3618
+    if (is_null($formats)) {
3619
+        include_spip('inc/filtres_images_lib_mini');
3620
+        $formats = _image_extensions_acceptees_en_entree();
3621
+    }
3622
+
3623
+    if ($svg_allowed) {
3624
+        if (!in_array('svg', $formats)) {
3625
+            $formats[] = 'svg';
3626
+        }
3627
+    }
3628
+    else {
3629
+        $formats = array_diff($formats, ['svg']);
3630
+    }
3631
+    return $formats;
3633 3632
 }
3634 3633
 
3635 3634
 /**
@@ -3638,20 +3637,20 @@  discard block
 block discarded – undo
3638 3637
  * @return array|bool
3639 3638
  */
3640 3639
 function spip_getimagesize($fichier) {
3641
-	if (!$imagesize = @getimagesize($fichier)) {
3642
-		include_spip('inc/svg');
3643
-		if ($attrs = svg_lire_attributs($fichier)) {
3644
-			[$width, $height, $viewbox] = svg_getimagesize_from_attr($attrs);
3645
-			$imagesize = [
3646
-				$width,
3647
-				$height,
3648
-				IMAGETYPE_SVG,
3649
-				"width=\"{$width}\" height=\"{$height}\"",
3650
-				'mime' => 'image/svg+xml'
3651
-			];
3652
-		}
3653
-	}
3654
-	return $imagesize;
3640
+    if (!$imagesize = @getimagesize($fichier)) {
3641
+        include_spip('inc/svg');
3642
+        if ($attrs = svg_lire_attributs($fichier)) {
3643
+            [$width, $height, $viewbox] = svg_getimagesize_from_attr($attrs);
3644
+            $imagesize = [
3645
+                $width,
3646
+                $height,
3647
+                IMAGETYPE_SVG,
3648
+                "width=\"{$width}\" height=\"{$height}\"",
3649
+                'mime' => 'image/svg+xml'
3650
+            ];
3651
+        }
3652
+    }
3653
+    return $imagesize;
3655 3654
 }
3656 3655
 
3657 3656
 /**
@@ -3665,19 +3664,19 @@  discard block
 block discarded – undo
3665 3664
  * @param string $statut
3666 3665
  */
3667 3666
 function avertir_auteurs($nom, $message, $statut = '') {
3668
-	$alertes = $GLOBALS['meta']['message_alertes_auteurs'];
3669
-	if (
3670
-		!$alertes
3671
-		or !is_array($alertes = unserialize($alertes))
3672
-	) {
3673
-		$alertes = [];
3674
-	}
3667
+    $alertes = $GLOBALS['meta']['message_alertes_auteurs'];
3668
+    if (
3669
+        !$alertes
3670
+        or !is_array($alertes = unserialize($alertes))
3671
+    ) {
3672
+        $alertes = [];
3673
+    }
3675 3674
 
3676
-	if (!isset($alertes[$statut])) {
3677
-		$alertes[$statut] = [];
3678
-	}
3679
-	$alertes[$statut][$nom] = $message;
3680
-	ecrire_meta('message_alertes_auteurs', serialize($alertes));
3675
+    if (!isset($alertes[$statut])) {
3676
+        $alertes[$statut] = [];
3677
+    }
3678
+    $alertes[$statut][$nom] = $message;
3679
+    ecrire_meta('message_alertes_auteurs', serialize($alertes));
3681 3680
 }
3682 3681
 
3683 3682
 /**
@@ -3691,10 +3690,10 @@  discard block
 block discarded – undo
3691 3690
  * @return string|string[]
3692 3691
  */
3693 3692
 function spip_sanitize_classname($classes) {
3694
-	if (is_array($classes)) {
3695
-		return array_map('spip_sanitize_classname', $classes);
3696
-	}
3697
-	return preg_replace('/[^ 0-9a-z_\-+@]/i', '', $classes);
3693
+    if (is_array($classes)) {
3694
+        return array_map('spip_sanitize_classname', $classes);
3695
+    }
3696
+    return preg_replace('/[^ 0-9a-z_\-+@]/i', '', $classes);
3698 3697
 }
3699 3698
 
3700 3699
 
@@ -3719,32 +3718,32 @@  discard block
 block discarded – undo
3719 3718
  *    Avec operateur : bool.
3720 3719
  **/
3721 3720
 function spip_version_compare($v1, $v2, $op = null) {
3722
-	$v1 = strtolower(preg_replace(',([0-9])[\s.-]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1.\\2', $v1));
3723
-	$v2 = strtolower(preg_replace(',([0-9])[\s.-]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1.\\2', $v2));
3724
-	$v1 = str_replace('rc', 'RC', $v1); // certaines versions de PHP ne comprennent RC qu'en majuscule
3725
-	$v2 = str_replace('rc', 'RC', $v2); // certaines versions de PHP ne comprennent RC qu'en majuscule
3726
-
3727
-	$v1 = explode('.', $v1);
3728
-	$v2 = explode('.', $v2);
3729
-	// $v1 est toujours une version, donc sans etoile
3730
-	while (count($v1) < count($v2)) {
3731
-		$v1[] = '0';
3732
-	}
3733
-
3734
-	// $v2 peut etre une borne, donc accepte l'etoile
3735
-	$etoile = false;
3736
-	foreach ($v1 as $k => $v) {
3737
-		if (!isset($v2[$k])) {
3738
-			$v2[] = ($etoile and (is_numeric($v) or $v == 'pl' or $v == 'p')) ? $v : '0';
3739
-		} else {
3740
-			if ($v2[$k] == '*') {
3741
-				$etoile = true;
3742
-				$v2[$k] = $v;
3743
-			}
3744
-		}
3745
-	}
3746
-	$v1 = implode('.', $v1);
3747
-	$v2 = implode('.', $v2);
3748
-
3749
-	return $op ? version_compare($v1, $v2, $op) : version_compare($v1, $v2);
3721
+    $v1 = strtolower(preg_replace(',([0-9])[\s.-]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1.\\2', $v1));
3722
+    $v2 = strtolower(preg_replace(',([0-9])[\s.-]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1.\\2', $v2));
3723
+    $v1 = str_replace('rc', 'RC', $v1); // certaines versions de PHP ne comprennent RC qu'en majuscule
3724
+    $v2 = str_replace('rc', 'RC', $v2); // certaines versions de PHP ne comprennent RC qu'en majuscule
3725
+
3726
+    $v1 = explode('.', $v1);
3727
+    $v2 = explode('.', $v2);
3728
+    // $v1 est toujours une version, donc sans etoile
3729
+    while (count($v1) < count($v2)) {
3730
+        $v1[] = '0';
3731
+    }
3732
+
3733
+    // $v2 peut etre une borne, donc accepte l'etoile
3734
+    $etoile = false;
3735
+    foreach ($v1 as $k => $v) {
3736
+        if (!isset($v2[$k])) {
3737
+            $v2[] = ($etoile and (is_numeric($v) or $v == 'pl' or $v == 'p')) ? $v : '0';
3738
+        } else {
3739
+            if ($v2[$k] == '*') {
3740
+                $etoile = true;
3741
+                $v2[$k] = $v;
3742
+            }
3743
+        }
3744
+    }
3745
+    $v1 = implode('.', $v1);
3746
+    $v2 = implode('.', $v2);
3747
+
3748
+    return $op ? version_compare($v1, $v2, $op) : version_compare($v1, $v2);
3750 3749
 }
Please login to merge, or discard this patch.
Spacing   +123 added lines, -124 removed lines patch added patch discarded remove patch
@@ -53,12 +53,12 @@  discard block
 block discarded – undo
53 53
 	if (strlen($dossier) and substr($dossier, -1) != '/') {
54 54
 		$dossier .= '/';
55 55
 	}
56
-	$f = str_replace('/', '_', $dossier) . $nom;
56
+	$f = str_replace('/', '_', $dossier).$nom;
57 57
 
58 58
 	if (function_exists($f)) {
59 59
 		return $f;
60 60
 	}
61
-	if (function_exists($g = $f . '_dist')) {
61
+	if (function_exists($g = $f.'_dist')) {
62 62
 		return $g;
63 63
 	}
64 64
 
@@ -79,7 +79,7 @@  discard block
 block discarded – undo
79 79
 	// passer en minuscules (cf les balises de formulaires)
80 80
 	// et inclure le fichier
81 81
 	if (
82
-		!$inc = include_spip($dossier . ($d = strtolower($nom)))
82
+		!$inc = include_spip($dossier.($d = strtolower($nom)))
83 83
 		// si le fichier truc/machin/nom.php n'existe pas,
84 84
 		// la fonction peut etre definie dans truc/machin.php qui regroupe plusieurs petites fonctions
85 85
 		and strlen(dirname($dossier)) and dirname($dossier) != '.'
@@ -98,7 +98,7 @@  discard block
 block discarded – undo
98 98
 	}
99 99
 
100 100
 	// Echec : message d'erreur
101
-	spip_log("fonction $nom ($f ou $g) indisponible" .
101
+	spip_log("fonction $nom ($f ou $g) indisponible".
102 102
 		($inc ? '' : " (fichier $d absent de $dossier)"));
103 103
 
104 104
 	include_spip('inc/minipres');
@@ -109,8 +109,8 @@  discard block
 block discarded – undo
109 109
 			.'<br />'
110 110
 			._T('fonction_introuvable', ['fonction' => '<code>'.spip_htmlentities($g).'</code>'])
111 111
 			:
112
-			_T('fichier_introuvable', ['fichier' => '<code>'. spip_htmlentities($d).'</code>']),
113
-			['all_inline' => true,'status' => 404]
112
+			_T('fichier_introuvable', ['fichier' => '<code>'.spip_htmlentities($d).'</code>']),
113
+			['all_inline' => true, 'status' => 404]
114 114
 	);
115 115
 	exit;
116 116
 }
@@ -156,7 +156,7 @@  discard block
 block discarded – undo
156 156
  *     - string : chemin du fichier trouvé
157 157
  **/
158 158
 function include_spip($f, $include = true) {
159
-	return find_in_path($f . '.php', '', $include);
159
+	return find_in_path($f.'.php', '', $include);
160 160
 }
161 161
 
162 162
 /**
@@ -176,7 +176,7 @@  discard block
 block discarded – undo
176 176
  *     - string : chemin du fichier trouvé
177 177
  **/
178 178
 function require_spip($f) {
179
-	return find_in_path($f . '.php', '', 'required');
179
+	return find_in_path($f.'.php', '', 'required');
180 180
 }
181 181
 
182 182
 
@@ -193,7 +193,7 @@  discard block
 block discarded – undo
193 193
 		// donc il faut l'inclure "en globals"
194 194
 		if ($f = find_in_path('mes_fonctions.php')) {
195 195
 			global $dossier_squelettes;
196
-			include_once(_ROOT_CWD . $f);
196
+			include_once(_ROOT_CWD.$f);
197 197
 		}
198 198
 
199 199
 		if (@is_readable(_CACHE_PLUGINS_FCT)) {
@@ -298,7 +298,7 @@  discard block
 block discarded – undo
298 298
 	}
299 299
 
300 300
 	// appliquer notre fonction si elle existe
301
-	$fonc = 'execute_pipeline_' . strtolower($action);
301
+	$fonc = 'execute_pipeline_'.strtolower($action);
302 302
 	if (function_exists($fonc)) {
303 303
 		$val = $fonc($val);
304 304
 	} // plantage ?
@@ -363,7 +363,7 @@  discard block
 block discarded – undo
363 363
 function spip_log($message = null, $name = null) {
364 364
 	static $pre = [];
365 365
 	static $log;
366
-	preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string)$name, $regs);
366
+	preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string) $name, $regs);
367 367
 	if (!isset($regs[1]) or !$logname = $regs[1]) {
368 368
 		$logname = null;
369 369
 	}
@@ -391,7 +391,7 @@  discard block
 block discarded – undo
391 391
 		if (!is_string($message)) {
392 392
 			$message = print_r($message, true);
393 393
 		}
394
-		$log($pre[$niveau] . ' ' . $message, $logname);
394
+		$log($pre[$niveau].' '.$message, $logname);
395 395
 	}
396 396
 }
397 397
 
@@ -592,7 +592,7 @@  discard block
 block discarded – undo
592 592
 		$a = './';
593 593
 	}
594 594
 
595
-	$regexp = ',^(' . str_replace('[]', '\[\]', $c) . '[[]?[]]?)(=.*)?$,';
595
+	$regexp = ',^('.str_replace('[]', '\[\]', $c).'[[]?[]]?)(=.*)?$,';
596 596
 	$ajouts = array_flip(explode('|', $c));
597 597
 	$u = is_array($v) ? $v : rawurlencode((string) $v);
598 598
 	$testv = (is_array($v) ? count($v) : strlen((string) $v));
@@ -619,7 +619,7 @@  discard block
 block discarded – undo
619 619
 			// Ajout. Pour une variable, remplacer au meme endroit,
620 620
 			// pour un tableau ce sera fait dans la prochaine boucle
621 621
 			elseif (substr($r[1], -2) != '[]') {
622
-				$url[$n] = $r[1] . '=' . $u;
622
+				$url[$n] = $r[1].'='.$u;
623 623
 				unset($ajouts[$r[1]]);
624 624
 			}
625 625
 			// Pour les tableaux on laisse tomber les valeurs de
@@ -640,11 +640,11 @@  discard block
 block discarded – undo
640 640
 	} elseif ($testv) {
641 641
 		foreach ($ajouts as $k => $n) {
642 642
 			if (!is_array($v)) {
643
-				$url[] = $k . '=' . $u;
643
+				$url[] = $k.'='.$u;
644 644
 			} else {
645
-				$id = (substr($k, -2) == '[]') ? $k : ($k . '[]');
645
+				$id = (substr($k, -2) == '[]') ? $k : ($k.'[]');
646 646
 				foreach ($v as $w) {
647
-					$url[] = $id . '=' . (is_array($w) ? 'Array' : rawurlencode($w));
647
+					$url[] = $id.'='.(is_array($w) ? 'Array' : rawurlencode($w));
648 648
 				}
649 649
 			}
650 650
 		}
@@ -655,10 +655,10 @@  discard block
 block discarded – undo
655 655
 
656 656
 	// recomposer l'adresse
657 657
 	if ($url) {
658
-		$a .= '?' . join($sep, $url);
658
+		$a .= '?'.join($sep, $url);
659 659
 	}
660 660
 
661
-	return $a . $ancre;
661
+	return $a.$ancre;
662 662
 }
663 663
 
664 664
 /**
@@ -690,7 +690,7 @@  discard block
 block discarded – undo
690 690
 			translitteration($ancre)
691 691
 		);
692 692
 	}
693
-	return $url . (strlen($ancre) ? '#' . $ancre : '');
693
+	return $url.(strlen($ancre) ? '#'.$ancre : '');
694 694
 }
695 695
 
696 696
 /**
@@ -806,7 +806,7 @@  discard block
 block discarded – undo
806 806
  * @return bool
807 807
  */
808 808
 function test_plugin_actif($plugin) {
809
-	return ($plugin and defined('_DIR_PLUGIN_' . strtoupper($plugin))) ? true : false;
809
+	return ($plugin and defined('_DIR_PLUGIN_'.strtoupper($plugin))) ? true : false;
810 810
 }
811 811
 
812 812
 /**
@@ -938,7 +938,7 @@  discard block
 block discarded – undo
938 938
 					$value = interdire_scripts($value, -1);
939 939
 				}
940 940
 				if (!empty($options['class'])) {
941
-					$value = "<span class='" . $options['class'] . "'>$value</span>";
941
+					$value = "<span class='".$options['class']."'>$value</span>";
942 942
 				}
943 943
 				$text = str_replace("@$name@", $value, $text);
944 944
 				unset($args[$name]);
@@ -947,7 +947,7 @@  discard block
 block discarded – undo
947 947
 		// Si des variables n'ont pas ete inserees, le signaler
948 948
 		// (chaines de langues pas a jour)
949 949
 		if ($args) {
950
-			spip_log("$f:  variables inutilisees " . join(', ', array_keys($args)), _LOG_DEBUG);
950
+			spip_log("$f:  variables inutilisees ".join(', ', array_keys($args)), _LOG_DEBUG);
951 951
 		}
952 952
 	}
953 953
 
@@ -971,7 +971,7 @@  discard block
 block discarded – undo
971 971
 function joli_repertoire($rep) {
972 972
 	$a = substr($rep, 0, 1);
973 973
 	if ($a <> '.' and $a <> '/') {
974
-		$rep = (_DIR_RESTREINT ? '' : _DIR_RESTREINT_ABS) . $rep;
974
+		$rep = (_DIR_RESTREINT ? '' : _DIR_RESTREINT_ABS).$rep;
975 975
 	}
976 976
 	$rep = preg_replace(',(^\.\.\/),', '', $rep);
977 977
 
@@ -1025,7 +1025,7 @@  discard block
 block discarded – undo
1025 1025
 			$p -= ($x * 1000);
1026 1026
 		}
1027 1027
 
1028
-		return $s . sprintf($s ? '%07.3f ms' : '%.3f ms', $p);
1028
+		return $s.sprintf($s ? '%07.3f ms' : '%.3f ms', $p);
1029 1029
 	}
1030 1030
 }
1031 1031
 
@@ -1092,7 +1092,7 @@  discard block
 block discarded – undo
1092 1092
 	if ($taches and count($taches) and !spip_connect()) {
1093 1093
 		return false;
1094 1094
 	}
1095
-	spip_log('cron !', 'jq' . _LOG_DEBUG);
1095
+	spip_log('cron !', 'jq'._LOG_DEBUG);
1096 1096
 	if ($genie = charger_fonction('genie', 'inc', true)) {
1097 1097
 		return $genie($taches);
1098 1098
 	}
@@ -1196,7 +1196,7 @@  discard block
 block discarded – undo
1196 1196
 
1197 1197
 	if ($queue_next_job_time == -1) {
1198 1198
 		if (!defined('_JQ_NEXT_JOB_TIME_FILENAME')) {
1199
-			define('_JQ_NEXT_JOB_TIME_FILENAME', _DIR_TMP . 'job_queue_next.txt');
1199
+			define('_JQ_NEXT_JOB_TIME_FILENAME', _DIR_TMP.'job_queue_next.txt');
1200 1200
 		}
1201 1201
 		// utiliser un cache memoire si dispo
1202 1202
 		if (function_exists('cache_get') and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) {
@@ -1265,8 +1265,8 @@  discard block
 block discarded – undo
1265 1265
 		$src = '';
1266 1266
 	}
1267 1267
 	if ($script) {
1268
-		$script = ("/*<![CDATA[*/\n" .
1269
-			preg_replace(',</([^>]*)>,', '<\/\1>', $script) .
1268
+		$script = ("/*<![CDATA[*/\n".
1269
+			preg_replace(',</([^>]*)>,', '<\/\1>', $script).
1270 1270
 			'/*]]>*/');
1271 1271
 	}
1272 1272
 	if ($noscript) {
@@ -1352,13 +1352,13 @@  discard block
 block discarded – undo
1352 1352
 	if ($path_base == null) {
1353 1353
 		// Chemin standard depuis l'espace public
1354 1354
 		$path = defined('_SPIP_PATH') ? _SPIP_PATH :
1355
-			_DIR_RACINE . ':' .
1356
-			_DIR_RACINE . 'squelettes-dist/:' .
1357
-			_DIR_RACINE . 'prive/:' .
1355
+			_DIR_RACINE.':'.
1356
+			_DIR_RACINE.'squelettes-dist/:'.
1357
+			_DIR_RACINE.'prive/:'.
1358 1358
 			_DIR_RESTREINT;
1359 1359
 		// Ajouter squelettes/
1360
-		if (@is_dir(_DIR_RACINE . 'squelettes')) {
1361
-			$path = _DIR_RACINE . 'squelettes/:' . $path;
1360
+		if (@is_dir(_DIR_RACINE.'squelettes')) {
1361
+			$path = _DIR_RACINE.'squelettes/:'.$path;
1362 1362
 		}
1363 1363
 		foreach (explode(':', $path) as $dir) {
1364 1364
 			if (strlen($dir) and substr($dir, -1) != '/') {
@@ -1370,7 +1370,7 @@  discard block
 block discarded – undo
1370 1370
 		// Et le(s) dossier(s) des squelettes nommes
1371 1371
 		if (strlen($GLOBALS['dossier_squelettes'])) {
1372 1372
 			foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) {
1373
-				array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/');
1373
+				array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE).$d.'/');
1374 1374
 			}
1375 1375
 		}
1376 1376
 		$GLOBALS['path_sig'] = md5(serialize($path_full));
@@ -1381,7 +1381,7 @@  discard block
 block discarded – undo
1381 1381
 
1382 1382
 	if (is_array($dir_path) or strlen($dir_path)) {
1383 1383
 		$tete = '';
1384
-		if (reset($path_base) == _DIR_RACINE . 'squelettes/') {
1384
+		if (reset($path_base) == _DIR_RACINE.'squelettes/') {
1385 1385
 			$tete = array_shift($path_base);
1386 1386
 		}
1387 1387
 		$dirs = (is_array($dir_path) ? $dir_path : explode(':', $dir_path));
@@ -1402,7 +1402,7 @@  discard block
 block discarded – undo
1402 1402
 	// Et le(s) dossier(s) des squelettes nommes
1403 1403
 	if (strlen($GLOBALS['dossier_squelettes'])) {
1404 1404
 		foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) {
1405
-			array_unshift($path_full, ((isset($d[0]) and $d[0] == '/') ? '' : _DIR_RACINE) . $d . '/');
1405
+			array_unshift($path_full, ((isset($d[0]) and $d[0] == '/') ? '' : _DIR_RACINE).$d.'/');
1406 1406
 		}
1407 1407
 	}
1408 1408
 
@@ -1473,14 +1473,14 @@  discard block
 block discarded – undo
1473 1473
 	// si il y a un .svg a la bonne taille (-16.svg) a cote, on l'utilise en remplacement du -16.png
1474 1474
 	if (
1475 1475
 		preg_match(',-(\d+)[.](png|gif|svg)$,', $file, $m)
1476
-		and $file_svg_generique = substr($file, 0, -strlen($m[0])) . '-xx.svg'
1476
+		and $file_svg_generique = substr($file, 0, -strlen($m[0])).'-xx.svg'
1477 1477
 		and $f = find_in_theme("$file_svg_generique")
1478 1478
 	) {
1479
-		if ($fsize = substr($f, 0, -6) . $m[1] . '.svg' and file_exists($fsize)) {
1479
+		if ($fsize = substr($f, 0, -6).$m[1].'.svg' and file_exists($fsize)) {
1480 1480
 			return $themefiles["$subdir$file"] = $fsize;
1481 1481
 		}
1482 1482
 		else {
1483
-			return $themefiles["$subdir$file"] = "$f?" . $m[1] . 'px';
1483
+			return $themefiles["$subdir$file"] = "$f?".$m[1].'px';
1484 1484
 		}
1485 1485
 	}
1486 1486
 
@@ -1490,7 +1490,7 @@  discard block
 block discarded – undo
1490 1490
 			return $themefiles["$subdir$file"] = $f;
1491 1491
 		}
1492 1492
 	}
1493
-	spip_log("$file introuvable dans le theme prive " . reset($themes), 'theme');
1493
+	spip_log("$file introuvable dans le theme prive ".reset($themes), 'theme');
1494 1494
 
1495 1495
 	return $themefiles["$subdir$file"] = '';
1496 1496
 }
@@ -1598,8 +1598,8 @@  discard block
 block discarded – undo
1598 1598
 			return false;
1599 1599
 		}
1600 1600
 		if ($include and !isset($inc[$dirname][$file])) {
1601
-			include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
1602
-			$inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
1601
+			include_once _ROOT_CWD.$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
1602
+			$inc[$dirname][$file] = $inc[''][$dirname.$file] = true;
1603 1603
 		}
1604 1604
 
1605 1605
 		return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file];
@@ -1612,14 +1612,14 @@  discard block
 block discarded – undo
1612 1612
 	}
1613 1613
 
1614 1614
 	foreach (creer_chemin() as $dir) {
1615
-		if (!isset($dirs[$a = $dir . $dirname])) {
1616
-			$dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a);
1615
+		if (!isset($dirs[$a = $dir.$dirname])) {
1616
+			$dirs[$a] = (is_dir(_ROOT_CWD.$a) || !$a);
1617 1617
 		}
1618 1618
 		if ($dirs[$a]) {
1619
-			if (file_exists(_ROOT_CWD . ($a .= $file))) {
1619
+			if (file_exists(_ROOT_CWD.($a .= $file))) {
1620 1620
 				if ($include and !isset($inc[$dirname][$file])) {
1621
-					include_once _ROOT_CWD . $a;
1622
-					$inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
1621
+					include_once _ROOT_CWD.$a;
1622
+					$inc[$dirname][$file] = $inc[''][$dirname.$file] = true;
1623 1623
 				}
1624 1624
 				if (!defined('_SAUVER_CHEMIN')) {
1625 1625
 					// si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
@@ -1629,7 +1629,7 @@  discard block
 block discarded – undo
1629 1629
 					define('_SAUVER_CHEMIN', true);
1630 1630
 				}
1631 1631
 
1632
-				return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a;
1632
+				return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname.$file] = $a;
1633 1633
 			}
1634 1634
 		}
1635 1635
 	}
@@ -1655,7 +1655,7 @@  discard block
 block discarded – undo
1655 1655
 		define('_SAUVER_CHEMIN', true);
1656 1656
 	}
1657 1657
 
1658
-	return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false;
1658
+	return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname.$file] = false;
1659 1659
 }
1660 1660
 
1661 1661
 function clear_path_cache() {
@@ -1725,12 +1725,12 @@  discard block
 block discarded – undo
1725 1725
 	// cas borderline si dans mes_options on appelle redirige_par_entete qui utilise _T et charge un fichier de langue
1726 1726
 	// on a pas encore inclus flock.php
1727 1727
 	if (!function_exists('preg_files')) {
1728
-		include_once _ROOT_RESTREINT . 'inc/flock.php';
1728
+		include_once _ROOT_RESTREINT.'inc/flock.php';
1729 1729
 	}
1730 1730
 
1731 1731
 	// Parcourir le chemin
1732 1732
 	foreach (creer_chemin() as $d) {
1733
-		$f = $d . $dir;
1733
+		$f = $d.$dir;
1734 1734
 		if (@is_dir($f)) {
1735 1735
 			$liste = preg_files($f, $pattern, $maxfiles - count($liste_fichiers), $recurs === true ? [] : $recurs);
1736 1736
 			foreach ($liste as $chemin) {
@@ -1779,9 +1779,9 @@  discard block
 block discarded – undo
1779 1779
 function charger_fonction_url(string $quoi, string $type = '') {
1780 1780
 	if ($type === 'defaut') {
1781 1781
 		$objet = objet_type($quoi);
1782
-		if ($f = charger_fonction('generer_' . $objet . '_url', 'urls', true)
1782
+		if ($f = charger_fonction('generer_'.$objet.'_url', 'urls', true)
1783 1783
 			// deprecated
1784
-			or $f = charger_fonction('generer_url_' . $objet, 'urls', true)
1784
+			or $f = charger_fonction('generer_url_'.$objet, 'urls', true)
1785 1785
 		) {
1786 1786
 			return $f;
1787 1787
 		}
@@ -1902,7 +1902,7 @@  discard block
 block discarded – undo
1902 1902
  * @deprecated 4.1
1903 1903
  * @see generer_objet_url
1904 1904
  */
1905
-function generer_url_entite($id = 0, $entite = '', $args = '', $ancre = '', $public = null, $type = null){
1905
+function generer_url_entite($id = 0, $entite = '', $args = '', $ancre = '', $public = null, $type = null) {
1906 1906
 	if ($public and is_string($public)) {
1907 1907
 		return generer_objet_url(intval($id), $entite, $args ?: '', $ancre ?: '', true, $type ?? '', $public);
1908 1908
 	}
@@ -1937,7 +1937,7 @@  discard block
 block discarded – undo
1937 1937
  * @deprecated 4.1
1938 1938
  * @see generer_objet_url_ecrire_edit
1939 1939
  */
1940
-function generer_url_ecrire_entite_edit($id, $entite, $args = '', $ancre = ''){
1940
+function generer_url_ecrire_entite_edit($id, $entite, $args = '', $ancre = '') {
1941 1941
 	return generer_objet_url_ecrire_edit(intval($id), $entite, $args, $ancre);
1942 1942
 }
1943 1943
 
@@ -1946,8 +1946,8 @@  discard block
 block discarded – undo
1946 1946
 	include_spip('base/connect_sql');
1947 1947
 	$id_type = id_table_objet($entite, $public);
1948 1948
 
1949
-	return _DIR_RACINE . get_spip_script('./')
1950
-	. '?' . _SPIP_PAGE . "=$entite&$id_type=$i&connect=$public"
1949
+	return _DIR_RACINE.get_spip_script('./')
1950
+	. '?'._SPIP_PAGE."=$entite&$id_type=$i&connect=$public"
1951 1951
 	. (!$args ? '' : "&$args")
1952 1952
 	. (!$ancre ? '' : "#$ancre");
1953 1953
 }
@@ -2001,7 +2001,7 @@  discard block
 block discarded – undo
2001 2001
  * @deprecated 4.1
2002 2002
  * @see  generer_objet_url_absolue
2003 2003
  */
2004
-function generer_url_entite_absolue($id = 0, $entite = '', $args = '', $ancre = '', $connect = null){
2004
+function generer_url_entite_absolue($id = 0, $entite = '', $args = '', $ancre = '', $connect = null) {
2005 2005
 	return generer_objet_url_absolue(intval($id), $entite, $args, $ancre, true, '', $connect);
2006 2006
 }
2007 2007
 
@@ -2118,7 +2118,7 @@  discard block
 block discarded – undo
2118 2118
 				!empty($_SERVER['QUERY_STRING'])
2119 2119
 				and !strpos($_SERVER['REQUEST_URI'], '?')
2120 2120
 			) {
2121
-				$GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
2121
+				$GLOBALS['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING'];
2122 2122
 			}
2123 2123
 		}
2124 2124
 	}
@@ -2153,9 +2153,9 @@  discard block
 block discarded – undo
2153 2153
 		array_shift($myself);
2154 2154
 		$myself = implode('/', $myself);
2155 2155
 	}
2156
-	$url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)) . '/';
2156
+	$url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)).'/';
2157 2157
 
2158
-	$url = $http . '://' . rtrim($host, '/') . '/' . ltrim($url, '/');
2158
+	$url = $http.'://'.rtrim($host, '/').'/'.ltrim($url, '/');
2159 2159
 
2160 2160
 	return $url;
2161 2161
 }
@@ -2193,16 +2193,16 @@  discard block
 block discarded – undo
2193 2193
  **/
2194 2194
 function generer_url_ecrire($script = '', $args = '', $no_entities = false, $rel = false) {
2195 2195
 	if (!$rel) {
2196
-		$rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT;
2196
+		$rel = url_de_base()._DIR_RESTREINT_ABS._SPIP_ECRIRE_SCRIPT;
2197 2197
 	} else {
2198 2198
 		if (!is_string($rel)) {
2199
-			$rel = _DIR_RESTREINT ?: './' . _SPIP_ECRIRE_SCRIPT;
2199
+			$rel = _DIR_RESTREINT ?: './'._SPIP_ECRIRE_SCRIPT;
2200 2200
 		}
2201 2201
 	}
2202 2202
 
2203 2203
 	[$script, $ancre] = array_pad(explode('#', $script), 2, null);
2204 2204
 	if ($script and ($script <> 'accueil' or $rel)) {
2205
-		$args = "?exec=$script" . (!$args ? '' : "&$args");
2205
+		$args = "?exec=$script".(!$args ? '' : "&$args");
2206 2206
 	} elseif ($args) {
2207 2207
 		$args = "?$args";
2208 2208
 	}
@@ -2210,7 +2210,7 @@  discard block
 block discarded – undo
2210 2210
 		$args .= "#$ancre";
2211 2211
 	}
2212 2212
 
2213
-	return $rel . ($no_entities ? $args : str_replace('&', '&amp;', $args));
2213
+	return $rel.($no_entities ? $args : str_replace('&', '&amp;', $args));
2214 2214
 }
2215 2215
 
2216 2216
 //
@@ -2292,10 +2292,10 @@  discard block
 block discarded – undo
2292 2292
 			$action = parametre_url($action, _SPIP_PAGE, $script, '&');
2293 2293
 		}
2294 2294
 		if ($args) {
2295
-			$action .= (strpos($action, '?') !== false ? '&' : '?') . $args;
2295
+			$action .= (strpos($action, '?') !== false ? '&' : '?').$args;
2296 2296
 		}
2297 2297
 		// ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide
2298
-		$url = ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/') . preg_replace(',^/[.]/,', '/', "/$action"));
2298
+		$url = ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/').preg_replace(',^/[.]/,', '/', "/$action"));
2299 2299
 	}
2300 2300
 
2301 2301
 	if (!$no_entities) {
@@ -2307,7 +2307,7 @@  discard block
 block discarded – undo
2307 2307
 
2308 2308
 function generer_url_prive($script, $args = '', $no_entities = false) {
2309 2309
 
2310
-	return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS . 'prive.php');
2310
+	return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS.'prive.php');
2311 2311
 }
2312 2312
 
2313 2313
 // Pour les formulaires en methode POST,
@@ -2342,8 +2342,7 @@  discard block
 block discarded – undo
2342 2342
 	. "><div>\n"
2343 2343
 	. "<input type='hidden' name='exec' value='$script1' />"
2344 2344
 	. $corps
2345
-	. (!$submit ? '' :
2346
-		("<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><input class='fondo submit btn' type='submit' value=\"" . entites_html($submit) . '" /></div>'))
2345
+	. (!$submit ? '' : ("<div style='text-align: ".$GLOBALS['spip_lang_right']."'><input class='fondo submit btn' type='submit' value=\"".entites_html($submit).'" /></div>'))
2347 2346
 	. "</div></form>\n";
2348 2347
 }
2349 2348
 
@@ -2368,14 +2367,14 @@  discard block
 block discarded – undo
2368 2367
 		? generer_url_ecrire(_request('exec'))
2369 2368
 		: generer_url_public();
2370 2369
 
2371
-	return "\n<form action='" .
2372
-	$h .
2373
-	"'" .
2374
-	$atts .
2375
-	">\n" .
2376
-	'<div>' .
2377
-	"\n<input type='hidden' name='action' value='$script' />" .
2378
-	$corps .
2370
+	return "\n<form action='".
2371
+	$h.
2372
+	"'".
2373
+	$atts.
2374
+	">\n".
2375
+	'<div>'.
2376
+	"\n<input type='hidden' name='action' value='$script' />".
2377
+	$corps.
2379 2378
 	'</div></form>';
2380 2379
 }
2381 2380
 
@@ -2403,7 +2402,7 @@  discard block
 block discarded – undo
2403 2402
 		: generer_url_public('', '', false, false);
2404 2403
 	$url = parametre_url($url, 'action', $script);
2405 2404
 	if ($args) {
2406
-		$url .= quote_amp('&' . $args);
2405
+		$url .= quote_amp('&'.$args);
2407 2406
 	}
2408 2407
 
2409 2408
 	if ($no_entities) {
@@ -2437,9 +2436,9 @@  discard block
 block discarded – undo
2437 2436
 	}
2438 2437
 	$url =
2439 2438
 		(($public ? _DIR_RACINE : _DIR_RESTREINT) ?: './')
2440
-	. $script . '/'
2439
+	. $script.'/'
2441 2440
 	. ($path ? trim($path, '/') : '')
2442
-	. ($args ? "?" . quote_amp($args) : '');
2441
+	. ($args ? "?".quote_amp($args) : '');
2443 2442
 
2444 2443
 	if ($no_entities) {
2445 2444
 		$url = str_replace('&amp;', '&', $url);
@@ -2488,17 +2487,17 @@  discard block
 block discarded – undo
2488 2487
 
2489 2488
 	// le nom du repertoire plugins/ activables/desactivables
2490 2489
 	if (!defined('_DIR_PLUGINS')) {
2491
-		define('_DIR_PLUGINS', _DIR_RACINE . 'plugins/');
2490
+		define('_DIR_PLUGINS', _DIR_RACINE.'plugins/');
2492 2491
 	}
2493 2492
 
2494 2493
 	// le nom du repertoire des extensions/ permanentes du core, toujours actives
2495 2494
 	if (!defined('_DIR_PLUGINS_DIST')) {
2496
-		define('_DIR_PLUGINS_DIST', _DIR_RACINE . 'plugins-dist/');
2495
+		define('_DIR_PLUGINS_DIST', _DIR_RACINE.'plugins-dist/');
2497 2496
 	}
2498 2497
 
2499 2498
 	// le nom du repertoire des librairies
2500 2499
 	if (!defined('_DIR_LIB')) {
2501
-		define('_DIR_LIB', _DIR_RACINE . 'lib/');
2500
+		define('_DIR_LIB', _DIR_RACINE.'lib/');
2502 2501
 	}
2503 2502
 
2504 2503
 	if (!defined('_DIR_IMG')) {
@@ -2508,29 +2507,29 @@  discard block
 block discarded – undo
2508 2507
 		define('_DIR_LOGOS', $pa);
2509 2508
 	}
2510 2509
 	if (!defined('_DIR_IMG_ICONES')) {
2511
-		define('_DIR_IMG_ICONES', _DIR_LOGOS . 'icones/');
2510
+		define('_DIR_IMG_ICONES', _DIR_LOGOS.'icones/');
2512 2511
 	}
2513 2512
 
2514 2513
 	if (!defined('_DIR_DUMP')) {
2515
-		define('_DIR_DUMP', $ti . 'dump/');
2514
+		define('_DIR_DUMP', $ti.'dump/');
2516 2515
 	}
2517 2516
 	if (!defined('_DIR_SESSIONS')) {
2518
-		define('_DIR_SESSIONS', $ti . 'sessions/');
2517
+		define('_DIR_SESSIONS', $ti.'sessions/');
2519 2518
 	}
2520 2519
 	if (!defined('_DIR_TRANSFERT')) {
2521
-		define('_DIR_TRANSFERT', $ti . 'upload/');
2520
+		define('_DIR_TRANSFERT', $ti.'upload/');
2522 2521
 	}
2523 2522
 	if (!defined('_DIR_CACHE')) {
2524
-		define('_DIR_CACHE', $ti . 'cache/');
2523
+		define('_DIR_CACHE', $ti.'cache/');
2525 2524
 	}
2526 2525
 	if (!defined('_DIR_CACHE_XML')) {
2527
-		define('_DIR_CACHE_XML', _DIR_CACHE . 'xml/');
2526
+		define('_DIR_CACHE_XML', _DIR_CACHE.'xml/');
2528 2527
 	}
2529 2528
 	if (!defined('_DIR_SKELS')) {
2530
-		define('_DIR_SKELS', _DIR_CACHE . 'skel/');
2529
+		define('_DIR_SKELS', _DIR_CACHE.'skel/');
2531 2530
 	}
2532 2531
 	if (!defined('_DIR_AIDE')) {
2533
-		define('_DIR_AIDE', _DIR_CACHE . 'aide/');
2532
+		define('_DIR_AIDE', _DIR_CACHE.'aide/');
2534 2533
 	}
2535 2534
 	if (!defined('_DIR_TMP')) {
2536 2535
 		define('_DIR_TMP', $ti);
@@ -2559,27 +2558,27 @@  discard block
 block discarded – undo
2559 2558
 	// Declaration des fichiers
2560 2559
 
2561 2560
 	if (!defined('_CACHE_PLUGINS_PATH')) {
2562
-		define('_CACHE_PLUGINS_PATH', _DIR_CACHE . 'charger_plugins_chemins.php');
2561
+		define('_CACHE_PLUGINS_PATH', _DIR_CACHE.'charger_plugins_chemins.php');
2563 2562
 	}
2564 2563
 	if (!defined('_CACHE_PLUGINS_OPT')) {
2565
-		define('_CACHE_PLUGINS_OPT', _DIR_CACHE . 'charger_plugins_options.php');
2564
+		define('_CACHE_PLUGINS_OPT', _DIR_CACHE.'charger_plugins_options.php');
2566 2565
 	}
2567 2566
 	if (!defined('_CACHE_PLUGINS_FCT')) {
2568
-		define('_CACHE_PLUGINS_FCT', _DIR_CACHE . 'charger_plugins_fonctions.php');
2567
+		define('_CACHE_PLUGINS_FCT', _DIR_CACHE.'charger_plugins_fonctions.php');
2569 2568
 	}
2570 2569
 	if (!defined('_CACHE_PIPELINES')) {
2571
-		define('_CACHE_PIPELINES', _DIR_CACHE . 'charger_pipelines.php');
2570
+		define('_CACHE_PIPELINES', _DIR_CACHE.'charger_pipelines.php');
2572 2571
 	}
2573 2572
 	if (!defined('_CACHE_CHEMIN')) {
2574
-		define('_CACHE_CHEMIN', _DIR_CACHE . 'chemin.txt');
2573
+		define('_CACHE_CHEMIN', _DIR_CACHE.'chemin.txt');
2575 2574
 	}
2576 2575
 
2577 2576
 	# attention .php obligatoire pour ecrire_fichier_securise
2578 2577
 	if (!defined('_FILE_META')) {
2579
-		define('_FILE_META', $ti . 'meta_cache.php');
2578
+		define('_FILE_META', $ti.'meta_cache.php');
2580 2579
 	}
2581 2580
 	if (!defined('_DIR_LOG')) {
2582
-		define('_DIR_LOG', _DIR_TMP . 'log/');
2581
+		define('_DIR_LOG', _DIR_TMP.'log/');
2583 2582
 	}
2584 2583
 	if (!defined('_FILE_LOG')) {
2585 2584
 		define('_FILE_LOG', 'spip');
@@ -2596,8 +2595,8 @@  discard block
 block discarded – undo
2596 2595
 	if (!defined('_FILE_CONNECT')) {
2597 2596
 		define(
2598 2597
 			'_FILE_CONNECT',
2599
-			(@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f
2600
-			: (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
2598
+			(@is_readable($f = _DIR_CONNECT._FILE_CONNECT_INS.'.php') ? $f
2599
+			: (@is_readable($f = _DIR_RESTREINT.'inc_connect.php') ? $f
2601 2600
 			: false))
2602 2601
 		);
2603 2602
 	}
@@ -2609,7 +2608,7 @@  discard block
 block discarded – undo
2609 2608
 	if (!defined('_FILE_CHMOD')) {
2610 2609
 		define(
2611 2610
 			'_FILE_CHMOD',
2612
-			(@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f
2611
+			(@is_readable($f = _DIR_CHMOD._FILE_CHMOD_INS.'.php') ? $f
2613 2612
 			: false)
2614 2613
 		);
2615 2614
 	}
@@ -2622,10 +2621,10 @@  discard block
 block discarded – undo
2622 2621
 		define('_FILE_TMP_SUFFIX', '.tmp.php');
2623 2622
 	}
2624 2623
 	if (!defined('_FILE_CONNECT_TMP')) {
2625
-		define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
2624
+		define('_FILE_CONNECT_TMP', _DIR_CONNECT._FILE_CONNECT_INS._FILE_TMP_SUFFIX);
2626 2625
 	}
2627 2626
 	if (!defined('_FILE_CHMOD_TMP')) {
2628
-		define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
2627
+		define('_FILE_CHMOD_TMP', _DIR_CHMOD._FILE_CHMOD_INS._FILE_TMP_SUFFIX);
2629 2628
 	}
2630 2629
 
2631 2630
 	// Definition des droits d'acces en ecriture
@@ -2643,13 +2642,13 @@  discard block
 block discarded – undo
2643 2642
 		define('_DEFAULT_CHARSET', 'utf-8');
2644 2643
 	}
2645 2644
 	if (!defined('_ROOT_PLUGINS')) {
2646
-		define('_ROOT_PLUGINS', _ROOT_RACINE . 'plugins/');
2645
+		define('_ROOT_PLUGINS', _ROOT_RACINE.'plugins/');
2647 2646
 	}
2648 2647
 	if (!defined('_ROOT_PLUGINS_DIST')) {
2649
-		define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . 'plugins-dist/');
2648
+		define('_ROOT_PLUGINS_DIST', _ROOT_RACINE.'plugins-dist/');
2650 2649
 	}
2651 2650
 	if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) {
2652
-		define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL));
2651
+		define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE.str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL));
2653 2652
 	}
2654 2653
 
2655 2654
 	// La taille des Log
@@ -2686,7 +2685,7 @@  discard block
 block discarded – undo
2686 2685
 	// (non surchargeable en l'etat ; attention si on utilise include_spip()
2687 2686
 	// pour le rendre surchargeable, on va provoquer un reecriture
2688 2687
 	// systematique du noyau ou une baisse de perfs => a etudier)
2689
-	include_once _ROOT_RESTREINT . 'inc/flock.php';
2688
+	include_once _ROOT_RESTREINT.'inc/flock.php';
2690 2689
 
2691 2690
 	// charger tout de suite le path et son cache
2692 2691
 	load_path_cache();
@@ -2734,7 +2733,7 @@  discard block
 block discarded – undo
2734 2733
 			!empty($_SERVER['QUERY_STRING'])
2735 2734
 			and !strpos($_SERVER['REQUEST_URI'], '?')
2736 2735
 		) {
2737
-			$GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
2736
+			$GLOBALS['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING'];
2738 2737
 		}
2739 2738
 	}
2740 2739
 
@@ -2770,7 +2769,7 @@  discard block
 block discarded – undo
2770 2769
 		) {
2771 2770
 			if (isset($GLOBALS['meta']['adresse_site'])) {
2772 2771
 				$uri_ref = parse_url($GLOBALS['meta']['adresse_site']);
2773
-				$uri_ref = ($uri_ref['path'] ?? '') . '/';
2772
+				$uri_ref = ($uri_ref['path'] ?? '').'/';
2774 2773
 			} else {
2775 2774
 				$uri_ref = '';
2776 2775
 			}
@@ -2864,7 +2863,7 @@  discard block
 block discarded – undo
2864 2863
 	}
2865 2864
 	if (!defined('_CACHE_RUBRIQUES')) {
2866 2865
 		/** Fichier cache pour le navigateur de rubrique du bandeau */
2867
-		define('_CACHE_RUBRIQUES', _DIR_TMP . 'menu-rubriques-cache.txt');
2866
+		define('_CACHE_RUBRIQUES', _DIR_TMP.'menu-rubriques-cache.txt');
2868 2867
 	}
2869 2868
 	if (!defined('_CACHE_RUBRIQUES_MAX')) {
2870 2869
 		/** Nombre maxi de rubriques enfants affichées pour chaque rubrique du navigateur de rubrique du bandeau */
@@ -2968,7 +2967,7 @@  discard block
 block discarded – undo
2968 2967
 					$memory *= 1024;
2969 2968
 			}
2970 2969
 			if ($memory < _MEMORY_LIMIT_MIN * 1024 * 1024) {
2971
-				@ini_set('memory_limit', $m = _MEMORY_LIMIT_MIN . 'M');
2970
+				@ini_set('memory_limit', $m = _MEMORY_LIMIT_MIN.'M');
2972 2971
 				if (trim(ini_get('memory_limit')) != $m) {
2973 2972
 					if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) {
2974 2973
 						define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
@@ -3119,7 +3118,7 @@  discard block
 block discarded – undo
3119 3118
 					}
3120 3119
 					if (isset($GLOBALS['visiteur_session']['nom'])) {
3121 3120
 						spip_log($GLOBALS['visiteur_session']['nom']
3122
-							. ' ' . _VAR_MODE);
3121
+							. ' '._VAR_MODE);
3123 3122
 					}
3124 3123
 				} // pas autorise ?
3125 3124
 				else {
@@ -3134,7 +3133,7 @@  discard block
 block discarded – undo
3134 3133
 						if (strpos($self, 'page=login') === false) {
3135 3134
 							include_spip('inc/headers');
3136 3135
 							$redirect = parametre_url(self('&', true), 'var_mode', $_GET['var_mode'], '&');
3137
-							redirige_par_entete(generer_url_public('login', 'url=' . rawurlencode($redirect), true));
3136
+							redirige_par_entete(generer_url_public('login', 'url='.rawurlencode($redirect), true));
3138 3137
 						}
3139 3138
 					}
3140 3139
 					// sinon tant pis
@@ -3176,10 +3175,10 @@  discard block
 block discarded – undo
3176 3175
 	// mais on risque de perturber des plugins en initialisant trop tot
3177 3176
 	// certaines constantes
3178 3177
 	@spip_initialisation_core(
3179
-		(_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES),
3180
-		(_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES),
3181
-		(_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES),
3182
-		(_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES)
3178
+		(_DIR_RACINE._NOM_PERMANENTS_INACCESSIBLES),
3179
+		(_DIR_RACINE._NOM_PERMANENTS_ACCESSIBLES),
3180
+		(_DIR_RACINE._NOM_TEMPORAIRES_INACCESSIBLES),
3181
+		(_DIR_RACINE._NOM_TEMPORAIRES_ACCESSIBLES)
3183 3182
 	);
3184 3183
 
3185 3184
 	// Demarrer une session NON AUTHENTIFIEE si on donne son nom
@@ -3212,7 +3211,7 @@  discard block
 block discarded – undo
3212 3211
 	}
3213 3212
 
3214 3213
 	$h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']);
3215
-	if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) {
3214
+	if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'].'_session'])) {
3216 3215
 		$session = charger_fonction('session', 'inc');
3217 3216
 		if ($session()) {
3218 3217
 			return $GLOBALS['visiteur_session']['statut'];
@@ -3292,7 +3291,7 @@  discard block
 block discarded – undo
3292 3291
 			'definir_session',
3293 3292
 			$GLOBALS['visiteur_session']
3294 3293
 				? serialize($GLOBALS['visiteur_session'])
3295
-				. '_' . @$_COOKIE['spip_session']
3294
+				. '_'.@$_COOKIE['spip_session']
3296 3295
 				: ''
3297 3296
 		);
3298 3297
 		$session = $s ? substr(md5($s), 0, 8) : '';
@@ -3448,11 +3447,11 @@  discard block
 block discarded – undo
3448 3447
 	$GLOBALS['_INC_PUBLIC']++;
3449 3448
 
3450 3449
 	// fix #4235
3451
-	$cache_utilise_session_appelant	= ($GLOBALS['cache_utilise_session'] ?? null);
3450
+	$cache_utilise_session_appelant = ($GLOBALS['cache_utilise_session'] ?? null);
3452 3451
 
3453 3452
 
3454 3453
 	foreach (is_array($fond) ? $fond : [$fond] as $f) {
3455
-		unset($GLOBALS['cache_utilise_session']);	// fix #4235
3454
+		unset($GLOBALS['cache_utilise_session']); // fix #4235
3456 3455
 
3457 3456
 		$page = evaluer_fond($f, $contexte, $connect);
3458 3457
 		if ($page === '') {
@@ -3537,7 +3536,7 @@  discard block
 block discarded – undo
3537 3536
  * @return array|string
3538 3537
  */
3539 3538
 function trouver_fond($nom, $dir = '', $pathinfo = false) {
3540
-	$f = find_in_path($nom . '.' . _EXTENSION_SQUELETTES, $dir ? rtrim($dir, '/') . '/' : '');
3539
+	$f = find_in_path($nom.'.'._EXTENSION_SQUELETTES, $dir ? rtrim($dir, '/').'/' : '');
3541 3540
 	if (!$pathinfo) {
3542 3541
 		return $f;
3543 3542
 	}
Please login to merge, or discard this patch.