Completed
Push — master ( 423442...41f350 )
by cam
05:03 queued 12s
created

filtres_alertes.php ➔ message_alerte()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 5
dl 0
loc 11
rs 9.9
c 0
b 0
f 0
1
<?php
2
3
/***************************************************************************\
4
 *  SPIP, Système de publication pour l'internet                           *
5
 *                                                                         *
6
 *  Copyright © avec tendresse depuis 2001                                 *
7
 *  Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James  *
8
 *                                                                         *
9
 *  Ce programme est un logiciel libre distribué sous licence GNU/GPL.     *
10
 *  Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne.   *
11
\***************************************************************************/
12
13
/**
14
 * Ce fichier regroupe la gestion des filtres et balises générant
15
 * le HTML des messages d'alerte.
16
 *
17
 * @package SPIP\Core\Compilateur\Filtres
18
 **/
19
20
if (!defined('_ECRIRE_INC_VERSION')) {
21
	return;
22
}
23
24
/**
25
 * Compile la balise `#ALERTE` produisant le HTML d'un message d'alerte complet.
26
 *
27
 * @package SPIP\Core\Compilateur\Balises
28
 * @balise
29
 * @example
30
 *   ```
31
 *   #ALERTE{message[,titre][,classes][,role][,id]}
32
 *   [(#ALERTE{<:chaine_langue:>, <:chaine_langue:>, notice, status, mon_alerte})]
33
 *   ```
34
 *
35
 * @param Champ $p
36
 *     Pile au niveau de la balise
37
 * @return Champ
38
 *     Pile complétée par le code à générer
39
 */
40
function balise_ALERTE_dist($p) {
41
	$_texte = interprete_argument_balise(1, $p);
42
	$_titre = interprete_argument_balise(2, $p);
43
	$_class = interprete_argument_balise(3, $p);
44
	$_role  = interprete_argument_balise(4, $p);
45
	$_id    = interprete_argument_balise(5, $p);
46
	$_titre = ($_titre ? ", $_titre" : "''");
47
	$_class = ($_class ? ", $_class" : ", ''");
48
	$_role  = ($_role ? ", $_role" : ", ''");
49
	$_id    = ($_id ? ", $_id" : ", ''");
50
51
	$f = chercher_filtre('message_alerte');
52
	$p->code = "$f($_texte$_titre$_class$_role$_id)";
53
	$p->interdire_scripts = false;
54
55
	return $p;
56
}
57
58
/**
59
 * Compile la balise `#ALERTE_OUVRIR` produisant le HTML ouvrant d'un message d’alerte
60
 *
61
 * Doit être suivie du texte de l'alerte, puis de la balise `#ALERTE_FERMER`.
62
 *
63
 * @package SPIP\Core\Compilateur\Balises
64
 * @balise
65
 * @see balise_ALERTE_FERMER_dist() Pour clôturer une alerte
66
 * @example
67
 *   ```
68
 *   #ALERTE_OUVRIR{titre[,classes][,role][,id]}
69
 *   [(#ALERTE_OUVRIR{<:chaine_langue:>, notice, status, mon_alerte})]
70
 *   ```
71
 *
72
 * @param Champ $p
73
 *     Pile au niveau de la balise
74
 * @return Champ
75
 *     Pile complétée par le code à générer
76
 */
77
function balise_ALERTE_OUVRIR_dist($p) {
78
	$_titre = interprete_argument_balise(1, $p);
79
	$_class = interprete_argument_balise(2, $p);
80
	$_role  = interprete_argument_balise(3, $p);
81
	$_id    = interprete_argument_balise(4, $p);
82
	$_titre = ($_titre ? "$_titre" : "''");
83
	$_class = ($_class ? ", $_class" : ", ''");
84
	$_role  = ($_role ? ", $_role" : ", ''");
85
	$_id    = ($_id ? ", $_id" : ", ''");
86
87
	$f = chercher_filtre('message_alerte_ouvrir');
88
	$p->code = "$f($_titre$_class$_role$_id)";
89
	$p->interdire_scripts = false;
90
91
	return $p;
92
}
93
94
/**
95
 * Compile la balise `#ALERTE_FERMER` produisant le HTML clôturant un message d’alerte
96
 *
97
 * Doit être précédée du texte de l'alerte et de la balise `#ALERTE_OUVRIR`.
98
 *
99
 * @package SPIP\Core\Compilateur\Balises
100
 * @balise
101
 * @see balise_ALERTE_OUVRIR_dist() Pour ouvrir une alerte
102
 * @example
103
 *   ```
104
 *   #ALERTE_FERMER
105
 *   ```
106
 *
107
 * @param Champ $p
108
 *     Pile au niveau de la balise
109
 * @return Champ
110
 *     Pile complétée par le code à générer
111
 */
112
function balise_ALERTE_FERMER_dist($p) {
113
	$f = chercher_filtre('message_alerte_fermer');
114
	$p->code = "$f()";
115
	$p->interdire_scripts = false;
116
117
	return $p;
118
}
119
120
/**
121
 * Générer un message d’alerte
122
 *
123
 * Peut-être surchargé par `filtre_message_alerte_dist` ou `filtre_message_alerte`
124
 *
125
 * @filtre
126
 * @see balise_ALERTE_dist() qui utilise ce filtre
127
 * @see message_alerte_ouvrir()
128
 * @see message_alerte_fermer()
129
 * @param string $texte
130
 *     Contenu de l'alerte
131
 * @param string $titre
132
 *     Titre de l'alerte : texte simple, <hn> ou autre.
133
 * @param string $class
134
 *     Classes CSS ajoutées au conteneur
135
 *     Doit contenir le type : `notice`, `error`, `success`, `info`
136
 * @param string $role
137
 *     Attribut rôle ajouté au conteneur : `alert` ou `status`, selon l'importance
138
 * @param string $id
139
 *     Identifiant HTML du conteneur
140
 * @return string
141
 *     HTML de l'alerte
142
 */
143
function message_alerte(string $texte, string $titre = '', string $class = '', string $role = '', string $id = '') : string {
144
145
	$message_alerte_ouvrir = chercher_filtre('message_alerte_ouvrir');
146
	$message_alerte_fermer = chercher_filtre('message_alerte_fermer');
147
	$message =
148
		$message_alerte_ouvrir($titre, $class, $role, $id) .
149
		$texte .
150
		$message_alerte_fermer();
151
152
	return $message;
153
}
154
155
/**
156
 * Ouvrir un message d’alerte
157
 *
158
 * Peut-être surchargé par `filtre_message_alerte_ouvrir_dist` ou `filtre_message_alerte_ouvrir`
159
 *
160
 * @filtre
161
 * @see balise_ALERTE_OUVRIR_dist() qui utilise ce filtre
162
 * @param string $titre
163
 *     Titre de l'alerte : texte simple, <hn> ou autre.
164
 * @param string $class
165
 *     Classes CSS ajoutées au conteneur
166
 *     Doit contenir le type : `notice`, `error`, `success`, `info`
167
 *     Défaut = `notice`
168
 * @param string $role
169
 *     Attribut role ajouté au conteneur : `alert` ou `status`, selon l'importance
170
 *     Défaut = `alert`
171
 * @param string $id
172
 *     Identifiant HTML du conteneur
173
 * @return string
174
 *     HTML d'ouverture de l'alerte
175
 */
176
function message_alerte_ouvrir(string $titre = '', string $class = '', string $role = '', string $id = '') : string {
177
178
	$prive = test_espace_prive();
179
180
	// Type d'alerte : le chercher dans les classes, nettoyer celles-ci, puis le réinjecter
181
	$types = [
182
		'notice',
183
		'error',
184
		'success',
185
		'info',
186
	];
187
	$type = array_intersect(explode(' ', $class), $types);
188
	$type  = reset($type) ?: 'notice';
189
	$class = trim(str_replace($types, '', $class) . " $type");
190
191
	// Role
192
	$role = $role ?: 'alert';
193
194
	// Classes
195
	$class_racine = 'msg-alert';
196
	$clearfix     = ($prive ? 'clearfix' : '');
197
	$class_alerte = "$class_racine $class";
198
	$class_texte  = "${class_racine}__text $clearfix";
199
	$class_titre  = "${class_racine}__heading";
200
201
	// Titre : markup
202
	$titre = trim($titre);
203
	if (strlen($titre)) {
204
		include_spip('inc/filtres');
205
		// Si besoin on encapsule le titre : un h3 dans le privé, un simple div sinon.
206
		$cherche_tag = ($prive ? '<h' : '<');
207
		$wrap_tag    = ($prive ? '<h3>' : '<div>');
208
		if (strpos($titre, $cherche_tag) !== 0) {
209
			$titre = wrap($titre, $wrap_tag);
210
		}
211
		// puis on ajoute la classe
212
		$titre = ajouter_class($titre, $class_titre);
213
	}
214
215
	// Autres attributs
216
	$attr_id = ($id ? "id=\"$id\"" : '');
217
	$attr_data = ($type ? "data-$role=\"$type\"" : '');
218
219
	$message =
220
		"<div class=\"$class_alerte\" role=\"$role\" $attr_id $attr_data>" .
221
			$titre .
222
			"<div class=\"$class_texte\">";
223
224
	return $message;
225
}
226
227
/**
228
 * Fermer un message d’alerte
229
 *
230
 * Peut-être surchargé par `filtre_message_alerte_fermer_dist` ou `filtre_message_alerte_fermer`
231
 *
232
 * @filtre
233
 * @see balise_ALERTE_FERMER_dist() qui utilise ce filtre
234
 * @return string
235
 *     HTML de fin de l'alerte
236
 */
237
function message_alerte_fermer() : string {
238
	return '</div></div>';
239
}
240