[CSS] +fix page header and title color
[lhc/web/www.git] / www / plugins / spip-bonux-3 / spip_bonux_fonctions.php
1 <?php
2 /**
3 * Plugin Spip-Bonux
4 * Le plugin qui lave plus SPIP que SPIP
5 * (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
6 * Licence GPL
7 *
8 */
9
10 if (!defined('_ECRIRE_INC_VERSION')) {
11 return;
12 }
13
14 include_spip('public/spip_bonux_criteres');
15 include_spip('public/spip_bonux_balises');
16
17 /**
18 * une fonction pour generer une balise img a partir d'un nom de fichier
19 *
20 * @param string $img
21 * @param string $alt
22 * @param string $class
23 *
24 * @return string
25 */
26 function tag_img($img, $alt = '', $class = '') {
27 $balise_img = chercher_filtre('balise_img');
28
29 return $balise_img($img, $alt, $class);
30 }
31
32 if (!defined('_PREVISU_TEMPORAIRE_VALIDITE')) {
33 define('_PREVISU_TEMPORAIRE_VALIDITE', 12);
34 }
35
36 function previsu_verifier_cle_temporaire($cle) {
37 $validite = _PREVISU_TEMPORAIRE_VALIDITE; // validite de 12h maxi par défaut
38 $old = 0;
39
40 do {
41 $date = date('Y-m-d H', strtotime("-$old hour"));
42 if ($cle == previsu_cle_temporaire($date)) {
43 return true;
44 }
45 } while ($old++ < $validite);
46
47 return false;
48 }
49
50 function previsu_cle_temporaire($date = null) {
51 include_spip('inc/securiser_action');
52
53 if (!$date) {
54 $date = date('Y-m-d H');
55 }
56
57 $url = self();
58 $cle = md5($url . $date . secret_du_site());
59
60 return $cle;
61 }
62
63 if (!function_exists('push_table_valeur')) {
64 /**
65 * Filtre ajoutant une valeur à la fin d'une liste, possiblement dans une clé d'un tableau (comme table_valeur()).
66 *
67 * Attention, cette fonction est bien un "push", c'est-à-dire qu'elle ajoute un élément à la fin d'une liste.
68 *
69 * `#TABLEAU|push_table_valeur{a/b/c, valeur, #CONDITION}`
70 * - si la clé "c" est une liste : on ajoute "valeur" à la fin
71 * - si la clé "c" n'existe pas : on crée une liste et on met la première valeur dedans
72 * - si la clé "c" est un scalaire : on ne fait rien
73 * - si les clés autres que la dernière n'existent pas : on en fait des tableaux en cascade
74 *
75 * @see table_valeur
76 * @filtre
77 *
78 * @param array|object|string $table
79 * Table ou objet dont on veut modifier ou augmenter une des clés/propriétés. Peut être une chaîne à désérialiser contenant ce tableau ou cet objet.
80 * @param string $chemin
81 * Une suite de clés ou de propriétés d'objet, séparées par le caractère "/" : un/element/ici
82 * @param mixed $valeur
83 * Une valeur à ajouter au paramètre précédent.
84 * @param mixed $condition =true
85 * Une valeur quelconque qui sera testée de manière booléenne pour savoir si on fait le traitement ou pas.
86 * Cela allège l'écriture si l'ajout de valeur ne doit se faire que sous condition, notamment que s'il y a une valeur à ajouter.
87 * @param string $cle_finale
88 * Une clé dans laquelle placer la valeur si précisée
89 *
90 * @return array|object
91 * Retourne le tableau ou l'objet initial, modifié suivant les paramètres.
92 */
93 function push_table_valeur($table, $chemin, $valeur, $condition = true, $cle_finale = false) {
94 // Si la condition est fausse, on ne fait rien du tout
95 if ($condition) {
96 $table = is_string($table) ? @unserialize($table) : $table;
97 $element_a_modifier =& $table;
98
99 // S'il y a un emplacement donné, on cherche si c'est un tableau
100 if ($chemin and is_string($chemin) and $chemin = explode('/', $chemin) and is_array($chemin)) {
101 $i = 0;
102 foreach ($chemin as $cle) {
103 $i += 1;
104 // On ne fait que s'il la clé vaut quelque chose
105 if ($cle !== '') {
106 // Si c'est un tableau, on vérifie si la clé existe
107 if (is_array($element_a_modifier)) {
108 // Si la clé n'existe pas : on met un tableau vide qui se remplira
109 if (!isset($element_a_modifier[$cle])) {
110 $element_a_modifier[$cle] = array();
111 }
112 $element_a_modifier =& $element_a_modifier[$cle];
113 } elseif (is_object($element_a_modifier)) {
114 // Si c'est un objet on vérifie si la propriété existe
115 // Si la propriété n'existe pas : on met un tableau vide qui se remplira
116 if (!isset($element_a_modifier->$cle)) {
117 $element_a_modifier->$cle = array();
118 }
119 $element_a_modifier =& $element_a_modifier->$cle;
120 }
121 }
122 }
123 }
124
125 // Maintenant on est au bon endroit de ce qu'on veut modifier :
126
127 // Si l'élément à modifier est bien un tableau : on push la valeur dedans
128 if (is_array($element_a_modifier)) {
129 if ($cle_finale and is_string($cle_finale)) {
130 $element_a_modifier[$cle_finale] = $valeur;
131 } else {
132 array_push($element_a_modifier, $valeur);
133 }
134 }
135 // Sinon (si c'est un scalaire) on ne fait rien et il faudra utiliser set_table_valeur() par exemple
136 }
137
138 return $table;
139 }
140 }
141
142 /**
143 * Cette fonction permet de transformer un texte clair en nom court pouvant servir d'identifiant, class, id, url...
144 * en ne conservant que des caracteres alphanumeriques et un separateur
145 *
146 * @param string $texte
147 * Texte à transformer en nom machine
148 * @param string $type
149 *
150 * @param array $options
151 * string separateur : par défaut, un underscore `_`.
152 * int longueur_maxi : par defaut 60
153 *
154 * @return string
155 */
156 function filtre_slugify_dist($texte, $type = '', $options = array()) {
157
158 $separateur = (isset($options['separateur'])?$options['separateur']:'_');
159 $longueur_maxi = (isset($options['longueur_maxi'])?$options['longueur_maxi']:60);
160
161 if (!function_exists('translitteration')) {
162 include_spip('inc/charsets');
163 }
164
165 // pas de balise html
166 if (strpos($texte, '<') !== false) {
167 $texte = strip_tags($texte);
168 }
169 if (strpos($texte, '&') !== false) {
170 $texte = unicode2charset($texte);
171 }
172 // On enlève les espaces indésirables
173 $texte = trim($texte);
174
175 // On enlève les accents et cie
176 $texte = translitteration($texte);
177
178 // On remplace tout ce qui n'est pas un mot par un separateur
179 $texte = preg_replace(',\W+,ms', $separateur, $texte);
180
181 // nettoyer les doubles occurences du separateur si besoin
182 while (strpos($texte, "$separateur$separateur") !== false) {
183 $texte = str_replace("$separateur$separateur", $separateur, $texte);
184 }
185
186 // pas de separateur au debut ni a la fin
187 $texte = trim($texte, $separateur);
188
189 // en minuscules
190 $texte = strtolower($texte);
191
192 switch ($type) {
193 case 'class':
194 case 'id':
195 case 'anchor':
196 if (preg_match(',^\d,', $texte)) {
197 $texte = substr($type, 0, 1).$texte;
198 }
199 }
200
201 if (strlen($texte)>$longueur_maxi) {
202 $texte = substr($texte, 0, $longueur_maxi);
203 }
204
205 return $texte;
206 }
207
208 if (!function_exists('slugify')) {
209 function slugify($texte, $type = '', $options = array()) {
210 $slugify = chercher_filtre('slugify');
211 return $slugify($texte, $type, $options);
212 }
213 }