[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / spip-bonux-3 / public / spip_bonux_balises.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 /**
15 * Empile un element dans un tableau declare par #SET{tableau,#ARRAY}
16 * #SET_PUSH{tableau,valeur}
17 *
18 * @param Champ $p : objet balise
19 * @return Champ
20 * La balise ne retourne rien ("")
21 **/
22 function balise_SET_PUSH_dist($p) {
23 $_nom = interprete_argument_balise(1, $p);
24 $_valeur = interprete_argument_balise(2, $p);
25
26 if ($_nom and $_valeur) {
27 // si le tableau n'existe pas encore, on le cree
28 // on ajoute la valeur ensuite (sans passer par array_push)
29 $p->code = "vide((\$cle=$_nom)
30 . vide((!isset(\$Pile['vars'][\$cle]) OR !is_array(\$Pile['vars'][\$cle]))?\$Pile['vars'][\$cle]=array():'')
31 . vide(\$Pile['vars'][\$cle][]=$_valeur))";
32 } else {
33 $p->code = "''";
34 }
35
36 $p->interdire_scripts = false; // la balise ne renvoie rien
37 return $p;
38 }
39
40 /**
41 * Si 3 arguments : Cree un tableau nom_tableau de t1 + t2
42 * #SET_MERGE{nom_tableau,t1,t2}
43 * #SET_MERGE{nom_tableau,#GET{tableau},#ARRAY{cle,valeur}}
44 *
45 * Si 2 arguments : Merge t1 dans nom_tableau
46 * #SET_MERGE{nom_tableau,t1}
47 * #SET_MERGE{nom_tableau,#GET{tableau}}
48 *
49 * @param Champ $p : objet balise
50 * @return Champ
51 * La balise ne retourne rien ("")
52 **/
53 function balise_SET_MERGE_dist($p) {
54 $_nom = interprete_argument_balise(1, $p);
55 $_t1 = interprete_argument_balise(2, $p);
56 $_t2 = interprete_argument_balise(3, $p);
57
58 if ($_nom and $_t1 and !$_t2) {
59 // 2 arguments : merge de $_nom et $_t1 dans $_nom
60 // si le tableau n'existe pas encore, on le cree
61 $p->code = "vide((\$cle=$_nom)
62 . vide((!isset(\$Pile['vars'][\$cle]) OR !is_array(\$Pile['vars'][\$cle]))?\$Pile['vars'][\$cle]=array():'')
63 . vide(is_array(\$new=$_t1)?'':\$new=array(\$new))
64 . vide(\$Pile['vars'][\$cle] = array_merge(\$Pile['vars'][\$cle],\$new)))";
65 } elseif ($_nom and $_t1 and $_t2) {
66 // 3 arguments : merge de $_t1 et $_t2 dans $_nom
67 // si le tableau n'existe pas encore, on le cree
68 $p->code = "vide((\$cle=$_nom)
69 . vide((!isset(\$Pile['vars'][\$cle]) OR !is_array(\$Pile['vars'][\$cle]))?\$Pile['vars'][\$cle]=array():'')
70 . vide(is_array(\$new1=$_t1)?'':\$new1=array(\$new1))
71 . vide(is_array(\$new2=$_t2)?'':\$new2=array(\$new2))
72 . vide(\$Pile['vars'][\$cle] = array_merge(\$new1,\$new2)))";
73 } else {
74 $p->code = "''";
75 }
76
77 $p->interdire_scripts = false; // la balise ne renvoie rien
78 return $p;
79 }
80
81 /**
82 * Balise #COMPTEUR associee au critere compteur
83 *
84 * @param Champ $p
85 * @return Champ
86 */
87 function balise_COMPTEUR_dist($p) {
88 calculer_balise_criteres('compteur', $p);
89 if ($p->code == "''") {
90 calculer_balise_criteres('compteur', $p, 'compteur_left');
91 }
92 return $p;
93 }
94
95 /** Balise #SOMME associee au critere somme */
96 function balise_SOMME_dist($p) {
97 return calculer_balise_criteres('somme', $p);
98 }
99
100 /** Balise #COMPTE associee au critere compte */
101 function balise_COMPTE_dist($p) {
102 return calculer_balise_criteres('compte', $p);
103 }
104
105 /** Balise #MOYENNE associee au critere moyenne */
106 function balise_MOYENNE_dist($p) {
107 return calculer_balise_criteres('moyenne', $p);
108 }
109
110 /** Balise #MINIMUM associee au critere moyenne */
111 function balise_MINIMUM_dist($p) {
112 return calculer_balise_criteres('minimum', $p);
113 }
114
115 /** Balise #MAXIMUM associee au critere moyenne */
116 function balise_MAXIMUM_dist($p) {
117 return calculer_balise_criteres('maximum', $p);
118 }
119
120 /** Balise #STATS associee au critere stats
121 * #STATS{id_article,moyenne}
122 */
123 function balise_STATS_dist($p) {
124 if (isset($p->param[0][2][0])
125 and $nom = ($p->param[0][2][0]->texte)) {
126 return calculer_balise_criteres($nom, $p, 'stats');
127 }
128 return $p;
129 }
130
131 function calculer_balise_criteres($nom, $p, $motif = '') {
132 $p->code = "''";
133 $motif = $motif ? $motif : $nom;
134 if (isset($p->param[0][1][0])
135 and $champ = ($p->param[0][1][0]->texte)) {
136 return rindex_pile($p, $nom."_$champ", $motif);
137 }
138 return $p;
139 }