4 * Le plugin qui lave plus SPIP que SPIP
5 * (c) 2008 Mathieu Marcillaud, Cedric Morin, Tetue
10 if (!defined('_ECRIRE_INC_VERSION')) {
15 * Empile un element dans un tableau declare par #SET{tableau,#ARRAY}
16 * #SET_PUSH{tableau,valeur}
18 * @param Champ $p : objet balise
20 * La balise ne retourne rien ("")
22 function balise_SET_PUSH_dist($p) {
23 $_nom = interprete_argument_balise(1, $p);
24 $_valeur = interprete_argument_balise(2, $p);
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))";
36 $p->interdire_scripts
= false; // la balise ne renvoie rien
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}}
45 * Si 2 arguments : Merge t1 dans nom_tableau
46 * #SET_MERGE{nom_tableau,t1}
47 * #SET_MERGE{nom_tableau,#GET{tableau}}
49 * @param Champ $p : objet balise
51 * La balise ne retourne rien ("")
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);
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)))";
77 $p->interdire_scripts
= false; // la balise ne renvoie rien
82 * Balise #COMPTEUR associee au critere compteur
87 function balise_COMPTEUR_dist($p) {
88 calculer_balise_criteres('compteur', $p);
89 if ($p->code
== "''") {
90 calculer_balise_criteres('compteur', $p, 'compteur_left');
95 /** Balise #SOMME associee au critere somme */
96 function balise_SOMME_dist($p) {
97 return calculer_balise_criteres('somme', $p);
100 /** Balise #COMPTE associee au critere compte */
101 function balise_COMPTE_dist($p) {
102 return calculer_balise_criteres('compte', $p);
105 /** Balise #MOYENNE associee au critere moyenne */
106 function balise_MOYENNE_dist($p) {
107 return calculer_balise_criteres('moyenne', $p);
110 /** Balise #MINIMUM associee au critere moyenne */
111 function balise_MINIMUM_dist($p) {
112 return calculer_balise_criteres('minimum', $p);
115 /** Balise #MAXIMUM associee au critere moyenne */
116 function balise_MAXIMUM_dist($p) {
117 return calculer_balise_criteres('maximum', $p);
120 /** Balise #STATS associee au critere stats
121 * #STATS{id_article,moyenne}
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');
131 function calculer_balise_criteres($nom, $p, $motif = '') {
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);