[PLUGINS] ~maj globale
[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 * @return string
24 */
25 function tag_img($img, $alt = '', $class = '') {
26 $balise_img = chercher_filtre('balise_img');
27
28 return $balise_img($img, $alt, $class);
29 }
30
31 function previsu_verifier_cle_temporaire($cle) {
32 $validite = 12; // validite de 12h maxi
33 $old = 0;
34
35 do {
36 $date = date('Y-m-d H', strtotime("-$old hour"));
37 if ($cle == previsu_cle_temporaire($date)) {
38 return true;
39 }
40 } while ($old++ < $validite);
41
42 return false;
43 }
44
45 function previsu_cle_temporaire($date = null) {
46 include_spip('inc/securiser_action');
47
48 if (!$date) {
49 $date = date('Y-m-d H');
50 }
51
52 $url = self();
53 $cle = md5($url.$date.secret_du_site());
54
55 return $cle;
56 }
57
58 if (!function_exists('push_table_valeur')) {
59 /**
60 * Filtre ajoutant une valeur à la fin d'une liste, possiblement dans une clé d'un tableau (comme table_valeur()).
61 *
62 * Attention, cette fonction est bien un "push", c'est-à-dire qu'elle ajoute un élément à la fin d'une liste.
63 *
64 * #TABLEAU|push_table_valeur{a/b/c, valeur, #CONDITION}
65 * - si la clé "c" est une liste : on ajoute "valeur" à la fin
66 * - si la clé "c" n'existe pas : on crée une liste et on met la première valeur dedans
67 * - si la clé "c" est un scalaire : on ne fait rien
68 * - si les clés autres que la dernière n'existent pas : on en fait des tableaux en cascade
69 *
70 * @see table_valeur
71 * @filtre
72 * @param array|object|string $table
73 * 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.
74 * @param string $chemin
75 * Une suite de clés ou de propriétés d'objet, séparées par le caractère "/" : un/element/ici
76 * @param mixed $valeur
77 * Une valeur à ajouter au paramètre précédent.
78 * @param mixed $condition=true
79 * Une valeur quelconque qui sera testée de manière booléenne pour savoir si on fait le traitement ou pas.
80 * 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.
81 * @param string $cle_finale
82 * Une clé dans laquelle placer la valeur si précisée
83 * @return array|object
84 * Retourne le tableau ou l'objet initial, modifié suivant les paramètres.
85 */
86 function push_table_valeur($table, $chemin, $valeur, $condition = true, $cle_finale = false) {
87 // Si la condition est fausse, on ne fait rien du tout
88 if ($condition) {
89 $table = is_string($table) ? @unserialize($table) : $table;
90 $element_a_modifier =& $table;
91
92 // S'il y a un emplacement donné, on cherche si c'est un tableau
93 if ($chemin and is_string($chemin) and $chemin = explode('/', $chemin) and is_array($chemin)) {
94 $i = 0;
95 foreach ($chemin as $cle) {
96 $i += 1;
97 // On ne fait que s'il la clé vaut quelque chose
98 if ($cle !== '') {
99 // Si c'est un tableau, on vérifie si la clé existe
100 if (is_array($element_a_modifier)) {
101 // Si la clé n'existe pas : on met un tableau vide qui se remplira
102 if (!isset($element_a_modifier[$cle])) {
103 $element_a_modifier[$cle] = array();
104 }
105 $element_a_modifier =& $element_a_modifier[$cle];
106 } elseif (is_object($element_a_modifier)) {
107 // Si c'est un objet on vérifie si la propriété existe
108 // Si la propriété 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 }
114 }
115 }
116 }
117
118 // Maintenant on est au bon endroit de ce qu'on veut modifier :
119
120 // Si l'élément à modifier est bien un tableau : on push la valeur dedans
121 if (is_array($element_a_modifier)) {
122 if ($cle_finale and is_string($cle_finale)) {
123 $element_a_modifier[$cle_finale] = $valeur;
124 } else {
125 array_push($element_a_modifier, $valeur);
126 }
127 }
128 // Sinon (si c'est un scalaire) on ne fait rien et il faudra utiliser set_table_valeur() par exemple
129 }
130
131 return $table;
132 }
133 }