1 | <?php |
---|
2 | |
---|
3 | if (!defined("_ECRIRE_INC_VERSION")) return; |
---|
4 | |
---|
5 | // pouvoir utiliser _T_ou_typo si present |
---|
6 | function _TT($texte) { |
---|
7 | static $T = null; |
---|
8 | if (!isset($T)) { |
---|
9 | $T = function_exists('_T_ou_typo') ? '_T_ou_typo' : false ; |
---|
10 | } |
---|
11 | $change = false; |
---|
12 | // tenter de traiter les "<multi>" et "<:x:>" |
---|
13 | if ($T) { |
---|
14 | $t = $T($texte); |
---|
15 | if ($t !== $texte) { |
---|
16 | $change = true; |
---|
17 | } |
---|
18 | $texte = $t; |
---|
19 | } |
---|
20 | // tenter comme avant avec _T(x) |
---|
21 | if (!$change) { |
---|
22 | $texte = _T($texte); |
---|
23 | } |
---|
24 | |
---|
25 | return $texte; |
---|
26 | } |
---|
27 | |
---|
28 | |
---|
29 | /** |
---|
30 | * Retourne la classe ChampExtra du champ demande |
---|
31 | * permettant ainsi d'exploiter ses donnees. |
---|
32 | * |
---|
33 | * <BOUCLE_x(TABLE)> |
---|
34 | * - #CHAMP_EXTRA{nom_du_champ} |
---|
35 | * </BOUCLE_x> |
---|
36 | * |
---|
37 | * @return ChampExtra |
---|
38 | **/ |
---|
39 | function balise_CHAMP_EXTRA_dist($p) { |
---|
40 | // prendre nom de la cle primaire de l'objet pour calculer sa valeur |
---|
41 | $id_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; |
---|
42 | $objet = $p->boucles[$id_boucle]->id_table; |
---|
43 | |
---|
44 | // recuperer les parametres : colonne sql (champ) |
---|
45 | $colonne = interprete_argument_balise(1, $p); |
---|
46 | $demande = sinon(interprete_argument_balise(2, $p), "''"); |
---|
47 | $p->code = "calculer_balise_CHAMP_EXTRA('$objet', $colonne, $demande)"; |
---|
48 | return $p; |
---|
49 | } |
---|
50 | |
---|
51 | // retourne un champ extra donne (sa classe) ou une propriete ou methode demandee |
---|
52 | function calculer_balise_CHAMP_EXTRA($objet, $colonne, $demande='') { |
---|
53 | // recuperer la liste des champs extras existants |
---|
54 | include_spip('cextras_pipelines'); |
---|
55 | if (!$c = cextras_get_extra($objet, $colonne)) { |
---|
56 | return ''; |
---|
57 | } |
---|
58 | if (!$demande) { |
---|
59 | return $c; // retourner ChampExtra (attention, c'est un objet !) |
---|
60 | } |
---|
61 | $chaine = ''; |
---|
62 | if (property_exists($c, $demande)) { |
---|
63 | $chaine = $c->$demande; |
---|
64 | } |
---|
65 | if (method_exists($c, $demande)) { |
---|
66 | $chaine = $c->$demande(); |
---|
67 | } |
---|
68 | |
---|
69 | // appliquer _T ou typo |
---|
70 | if (is_string($chaine) and !$p->etoile) { |
---|
71 | // '<multi>' ou '<:x:>' ou 'x:y' |
---|
72 | $chaine = _TT($chaine); |
---|
73 | } |
---|
74 | |
---|
75 | return $chaine; |
---|
76 | } |
---|
77 | |
---|
78 | |
---|
79 | /** |
---|
80 | * Retourne les choix possibles d'un champ extra donné |
---|
81 | * |
---|
82 | * #LISTER_CHOIX{champ} |
---|
83 | * #LISTER_CHOIX{champ, " > "} |
---|
84 | * #LISTER_CHOIX**{champ} // retourne un tableau cle/valeur |
---|
85 | * |
---|
86 | * @return ChampExtra |
---|
87 | **/ |
---|
88 | function balise_LISTER_CHOIX_dist($p) { |
---|
89 | // prendre nom de la cle primaire de l'objet pour calculer sa valeur |
---|
90 | $id_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; |
---|
91 | $objet = $p->boucles[$id_boucle]->id_table; |
---|
92 | |
---|
93 | // recuperer les parametres : colonne sql (champ) |
---|
94 | $colonne = interprete_argument_balise(1, $p); |
---|
95 | $separateur = interprete_argument_balise(2, $p); |
---|
96 | if (!$separateur) $separateur = "', '"; |
---|
97 | |
---|
98 | // generer le code d'execution |
---|
99 | $p->code = "calculer_balise_LISTER_CHOIX('$objet', $colonne)"; |
---|
100 | |
---|
101 | // retourne un array si #LISTER_CHOIX** |
---|
102 | // sinon fabrique une chaine avec le separateur designe. |
---|
103 | if ($p->etoile != "**") { |
---|
104 | $p->code = "join($separateur, " . $p->code . ")"; |
---|
105 | } |
---|
106 | |
---|
107 | return $p; |
---|
108 | } |
---|
109 | |
---|
110 | |
---|
111 | function calculer_balise_LISTER_CHOIX($objet, $colonne) { |
---|
112 | if ($c = calculer_balise_CHAMP_EXTRA($objet, $colonne)) { |
---|
113 | // saisie externe (SAISIES) |
---|
114 | if (isset($c->saisie_parametres['datas']) and $c->saisie_parametres['datas']) { |
---|
115 | return $c->saisie_parametres['datas']; |
---|
116 | } |
---|
117 | // saisie de ce plugin |
---|
118 | if ($c->enum) { |
---|
119 | $enum = cextras_enum_array($c->enum); |
---|
120 | if (!is_array($enum)) { |
---|
121 | $enum = array(); |
---|
122 | } |
---|
123 | return $enum; |
---|
124 | } |
---|
125 | } |
---|
126 | return ''; |
---|
127 | } |
---|
128 | |
---|
129 | |
---|
130 | |
---|
131 | /* |
---|
132 | * Liste les valeurs des champs de type liste (enum, radio, case) |
---|
133 | * Ces champs enregistrent en base la valeur de la cle |
---|
134 | * Il faut donc transcrire cle -> valeur |
---|
135 | * |
---|
136 | * #LISTER_VALEURS{champ} |
---|
137 | * #LISTER_VALEURS{champ, " > "} |
---|
138 | * #LISTER_VALEURS**{champ} // retourne un tableau cle/valeur |
---|
139 | * |
---|
140 | * /!\ |
---|
141 | * Pour des raisons d'efficacite des requetes SQL |
---|
142 | * le parametre "champ" ne peut etre calcule |
---|
143 | * #LISTER_VALEURS{#GET{champ}} ne peut pas fonctionner. |
---|
144 | * |
---|
145 | * Si cette restriction est trop limitative, on verra par la suite |
---|
146 | * pour l'instant, on laisse comme ca... |
---|
147 | * |
---|
148 | */ |
---|
149 | function balise_LISTER_VALEURS_dist($p) { |
---|
150 | // prendre nom de la cle primaire de l'objet pour calculer sa valeur |
---|
151 | $id_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; |
---|
152 | $objet = $p->boucles[$id_boucle]->id_table; |
---|
153 | $_id_objet = $p->boucles[$id_boucle]->primary; |
---|
154 | $id_objet = champ_sql($_id_objet, $p); |
---|
155 | |
---|
156 | // recuperer les parametres : colonne sql (champ) et separateur |
---|
157 | $colonne = interprete_argument_balise(1, $p); |
---|
158 | $separateur = interprete_argument_balise(2, $p); |
---|
159 | if (!$separateur) $separateur = "', '"; |
---|
160 | |
---|
161 | // demander la colonne dans la requete SQL |
---|
162 | // $colonne doit etre un texte 'nom' |
---|
163 | $texte_colonne = $p->param[0][1][0]->texte; |
---|
164 | $valeur = champ_sql($texte_colonne, $p); |
---|
165 | |
---|
166 | // generer le code d'execution |
---|
167 | $p->code = "calculer_balise_LISTER_VALEURS('$objet', '$_id_objet', $colonne, $id_objet, $valeur)"; |
---|
168 | |
---|
169 | // retourne un array si #LISTER_VALEURS** |
---|
170 | // sinon fabrique une chaine avec le separateur designe. |
---|
171 | if ($p->etoile != "**") { |
---|
172 | $p->code = "join($separateur, " . $p->code . ")"; |
---|
173 | } |
---|
174 | |
---|
175 | return $p; |
---|
176 | } |
---|
177 | |
---|
178 | |
---|
179 | // retourne un tableau de la liste des valeurs choisies pour un champ extra de table donne |
---|
180 | function calculer_balise_LISTER_VALEURS($objet, $_id_objet, $colonne, $id_objet, $cles) { |
---|
181 | // exploser les cles ! |
---|
182 | $cles = explode(',', $cles); |
---|
183 | |
---|
184 | // si pas de cles, on part aussi gentiment |
---|
185 | if (!$cles) return array(); |
---|
186 | |
---|
187 | // recuperer les choix possibles |
---|
188 | $choix = calculer_balise_LISTER_CHOIX($objet, $colonne); |
---|
189 | |
---|
190 | // sortir gentiment si pas de champs declares |
---|
191 | // on ne peut pas traduire les cles |
---|
192 | if (!$choix) return $cles; |
---|
193 | |
---|
194 | // correspondances... |
---|
195 | foreach($choix as $cle=>$valeur) { |
---|
196 | if (in_array($cle, $cles)) $vals[$cle] = $valeur; |
---|
197 | } |
---|
198 | |
---|
199 | // et voici les valeurs ! |
---|
200 | return $vals ? $vals : $cles; |
---|
201 | } |
---|
202 | |
---|
203 | |
---|
204 | |
---|
205 | ?> |
---|