1 | <?php |
---|
2 | /***************************************************************************\ |
---|
3 | * Associaspip, extension de SPIP pour gestion d'associations * |
---|
4 | * * |
---|
5 | * Copyright (c) 2007 Bernard Blazin & Fran�ois de Montlivault * |
---|
6 | * Copyright (c) 2010 Emmanuel Saint-James * |
---|
7 | * * |
---|
8 | * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * |
---|
9 | * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * |
---|
10 | \***************************************************************************/ |
---|
11 | |
---|
12 | if (!defined('_ECRIRE_INC_VERSION')) |
---|
13 | return; |
---|
14 | |
---|
15 | // Le premier element indique un ancien membre |
---|
16 | $GLOBALS['association_liste_des_statuts'] = |
---|
17 | array('sorti','prospect','ok','echu','relance'); |
---|
18 | |
---|
19 | $GLOBALS['association_styles_des_statuts'] = array( |
---|
20 | 'echu' => 'impair', |
---|
21 | 'ok' => 'valide', |
---|
22 | 'prospect' => 'prospect', |
---|
23 | 'relance' => 'pair', |
---|
24 | 'sorti' => 'sortie' |
---|
25 | ); |
---|
26 | |
---|
27 | define('_DIR_PLUGIN_ASSOCIATION_ICONES', _DIR_PLUGIN_ASSOCIATION.'img_pack/'); |
---|
28 | |
---|
29 | // boutons d'action (si page de script indiquee) dans les listing |
---|
30 | function association_bouton($texte, $image, $script='', $args='', $img_attributes='') |
---|
31 | { |
---|
32 | $res = ($script ? '<a href="'.generer_url_ecrire($script, $args).'">' : '' ); |
---|
33 | $res .= '<img src="'._DIR_PLUGIN_ASSOCIATION_ICONES.$image.'" alt="'; |
---|
34 | $res .= ($texte ? _T('asso:'.$texte).'" title="'._T('asso:'.$texte) : ' ' ); |
---|
35 | $res .= '" '.$img_attributes.' />'; |
---|
36 | $res .= ($script?'</a>':''); |
---|
37 | return $res; |
---|
38 | } |
---|
39 | |
---|
40 | // cas des boutons de vue non modifiable ou apercu dans les listing |
---|
41 | function association_bouton_afficher($objet, $args='', $tag='td') |
---|
42 | { |
---|
43 | $res = ($tag?"<$tag class='action'>":''); |
---|
44 | $res .= association_bouton('bouton_voir', 'voir-12.png', "voir_$objet", is_numeric($args)?"id=$args":$args, 'width="12" height="12" alt="⎀"'); |
---|
45 | $res .= ($tag?"</$tag>":''); |
---|
46 | return $res; |
---|
47 | } |
---|
48 | |
---|
49 | // cas des boutons d'edition (modification) dans les listing |
---|
50 | function association_bouton_modifier($objet, $args='', $tag='td') |
---|
51 | { |
---|
52 | $res = ($tag?"<$tag class='action'>":''); |
---|
53 | $res .= association_bouton('bouton_modifier', 'edit-12.gif', "edit_$objet", is_numeric($args)?"id=$args":$args, 'width="12" height="12" alt="⎀"'); |
---|
54 | $res .= ($tag?"</$tag>":''); |
---|
55 | return $res; |
---|
56 | } |
---|
57 | |
---|
58 | // cas des boutons d'effacement (suppression) dans les listing |
---|
59 | // ToDo: voir s'il est possible d'utiliser plutot la fonction bouton_action($libelle, $url, $class="", $confirm="", $title="") definie dans /ecrire/inc/filtres.php |
---|
60 | function association_bouton_supprimer($objet, $args='', $tag='td') |
---|
61 | { |
---|
62 | $res = ($tag?"<$tag class='action'>":''); |
---|
63 | $res .= association_bouton('bouton_supprimer', 'suppr-12.gif', "action_$objet", is_numeric($args)?"id=$args":$args, 'width="12" height="12" alt="⌧"'); // 8 pluriel contre 3 singulier |
---|
64 | $res .= ($tag?"</$tag>":''); |
---|
65 | return $res; |
---|
66 | } |
---|
67 | |
---|
68 | function request_statut_interne() |
---|
69 | { |
---|
70 | $statut_interne = _request('statut_interne'); |
---|
71 | if (in_array($statut_interne, $GLOBALS['association_liste_des_statuts'] )) |
---|
72 | return 'statut_interne='. sql_quote($statut_interne); |
---|
73 | elseif ($statut_interne=='tous') |
---|
74 | return "statut_interne LIKE '%'"; |
---|
75 | else { |
---|
76 | set_request('statut_interne', 'defaut'); |
---|
77 | $a = $GLOBALS['association_liste_des_statuts']; |
---|
78 | array_shift($a); |
---|
79 | return sql_in('statut_interne', $a); |
---|
80 | } |
---|
81 | } |
---|
82 | |
---|
83 | // demande de confirmation dans |
---|
84 | function bloc_confirmer_suppression($type,$id,$retour='') |
---|
85 | { |
---|
86 | $res = '<p><strong>'. _T('asso:vous_aller_effacer', array('quoi'=>'<i>'._T('asso:objet_num',array('objet'=>$type,'num'=>$id)).'</i>') ) .'</strong></p>'; |
---|
87 | $res .= '<p class="boutons"><input type="submit" value="'._T('asso:bouton_confirmer').'" /></p>'; |
---|
88 | echo redirige_action_post("supprimer_{$type}s", $id, ($retour?$retour:$type.'s'), '', $res); |
---|
89 | |
---|
90 | } |
---|
91 | |
---|
92 | // recupere dans une chaine un champ d'une table spip_asso_XXs pour un enregistrement identifie par son id_XX |
---|
93 | // un dernier drapeau mis a FALSE permet de traiter le cas des tables _plan|destination|destination_op qui n'ont pas de "s" final... |
---|
94 | /* conversion d'anciennes fonctions : |
---|
95 | * exercice_intitule($exo) <=> sql_asso1champ('exercice', $exo, 'intitule') |
---|
96 | * exercice_date_debut($exercice) <=> sql_asso1champ('exercice', $exercice, 'debut') |
---|
97 | * exercice_date_fin($exercice) <=> sql_asso1champ('exercice', $exercice, 'fin') |
---|
98 | */ |
---|
99 | function sql_asso1champ($table, $id, $champ, $pluriel=TRUE) |
---|
100 | { |
---|
101 | return sql_getfetsel($champ, "spip_asso_$table".($pluriel?'s':''), "id_$table=".intval($id)); |
---|
102 | } |
---|
103 | |
---|
104 | // recupere dans un tableau associatif un enregistrement d'une table spip_asso_XX identifie par son id_XX |
---|
105 | // un dernier drapeau mis a FALSE permet de traiter le cas des tables _plan|destination|destination_op qui n'ont pas de "s" final... |
---|
106 | function sql_asso1ligne($table, $id, $pluriel=TRUE) |
---|
107 | { |
---|
108 | return sql_fetsel('*', "spip_asso_$table".($pluriel?'s':''), "id_$table=".intval($id)); |
---|
109 | } |
---|
110 | |
---|
111 | // Affichage micro-formate d'un nom complet (de membre) suivant la configuration du plugin (i.e. champs geres ou non) |
---|
112 | function association_calculer_nom_membre($civilite, $prenom, $nom, $html_tag='') |
---|
113 | { |
---|
114 | $res = ''; |
---|
115 | if ($html_tag) { |
---|
116 | $res = '<'.$html_tag.' class="'. (($civilite || $prenonm)?'n':'fn') .'">'; |
---|
117 | } |
---|
118 | if ($GLOBALS['association_metas']['civilite']=='on' && $civilite) { |
---|
119 | $res .= ($html_tag?'<span class="honorific-prefix">':'') .$civilite. ($html_tag?'</span>':'') .' '; |
---|
120 | } |
---|
121 | if ($GLOBALS['association_metas']['prenom']=='on' && $prenom) { |
---|
122 | $res .= ($html_tag?'<span class="given-name">':'') .$prenom. ($html_tag?'</span>':'') .' '; |
---|
123 | } |
---|
124 | if ($nom) { |
---|
125 | $res .= ($html_tag?'<span class="family-name">':'') .$nom. ($html_tag?'</span>':'') .' '; |
---|
126 | } |
---|
127 | if ($html_tag) { |
---|
128 | $res .= '</'.$html_tag.'>'; |
---|
129 | } |
---|
130 | return $res; |
---|
131 | } |
---|
132 | |
---|
133 | // Affichage (dans un listing) du nom avec le lien vers la page correspondante |
---|
134 | // En fait c'est pour les modules dons/ventes/activites/prets ou l'acteur (donateur/acheteur/inscrit/emprunteur) |
---|
135 | // peut etre un membre/auteur (son id_acteur est alors renseigne) mais pas forcement son nom (qui peut etre different) |
---|
136 | // ou peut etre une personne exterieure a l'association (on a juste le nom obligatoire alors) |
---|
137 | function association_calculer_lien_nomid($nom, $id, $type='membre', $html_tag='') |
---|
138 | { |
---|
139 | $res = ''; |
---|
140 | if ($html_tag) { |
---|
141 | $res = '<'.$html_tag.' class="fn">'; |
---|
142 | } |
---|
143 | if ($id) { |
---|
144 | $res .= '['; |
---|
145 | } |
---|
146 | $res .= $nom; |
---|
147 | if ($id) { |
---|
148 | $res .= "->$type$id]"; |
---|
149 | } |
---|
150 | if ($html_tag) { |
---|
151 | $res .= '</'.$html_tag.'>'; |
---|
152 | } |
---|
153 | return propre($res); |
---|
154 | } |
---|
155 | |
---|
156 | // Affichage de date localisee et micro-formatee |
---|
157 | function association_datefr($iso_date, $css_class='', $htm_abbr='abbr') |
---|
158 | { |
---|
159 | $res = ($css_class?"<$htm_abbr class='$css_class' title='$iso_date'>":''); |
---|
160 | $res .= affdate_base($iso_date, 'entier'); // on fait appel a la fonction centrale des filtres SPIP... comme ca c'est traduit et formate dans les langues supportees ! si on prefere les mois en chiffres et non en lettre, y a qu'a changer les chaines de langue date_mois_XX |
---|
161 | $res .= ($css_class?"</$htm_abbr>":''); |
---|
162 | return $res; |
---|
163 | } |
---|
164 | |
---|
165 | function association_recupere_date($valeur) |
---|
166 | { |
---|
167 | if ($valeur!='') { |
---|
168 | $valeur = preg_replace('/\D/', '-', $valeur, 2); // la limitation a 2 separateurs permet de ne transformer que la partie "date" s'il s'agit d'un "datetime" par exemple. |
---|
169 | } |
---|
170 | return $valeur; |
---|
171 | } |
---|
172 | |
---|
173 | function association_verifier_date($date, $nullable=FALSE) |
---|
174 | { |
---|
175 | if ( $nullable && ($date=='0000-00-00' || !$date) ) |
---|
176 | return FALSE; |
---|
177 | if (!preg_match('/^\d{4}\D\d{2}\D\d{2}$/', $date)) // annee sur 4 chiffres ; mois sur 2 chiffres ; jour sur 2 chiffres ; separateur est caractere non numerique quelconque... |
---|
178 | # if (!preg_match('/^\d{4}\D(\d|1[0-2])\D([1-9]|0[1-9]|[12]\d|3[01])$/', $date)) // annee sur 4 chiffres ; mois sur 1 ou 2 chiffres entre 1 et 12 ; jour sur 1 ou 2 chiffres eentre 1 et 31 ; separateur est n'importe quel caractere ne representant pas un chiffre arabe de la notation decimale standard... |
---|
179 | return _T('asso:erreur_format_date', array('date'=>$date) ); // ...c'est un petit plus non documente (la documentation et le message d'erreur stipulent AAAA-MM-JJ : mois et jours toujours sur deux chiffres avec donc zero avant si inferieur a 10, separateur est tiret) |
---|
180 | list($annee, $mois, $jour) = preg_split('/\D/', $date); |
---|
181 | if (!checkdate($mois, $jour, $annee)) // la date doit etre valide : pas de 30 fevrier ou de 31 novembre par exemple. |
---|
182 | return _T('asso:erreur_valeur_date', array('date'=>$date) ); |
---|
183 | // return FALSE; |
---|
184 | } |
---|
185 | |
---|
186 | // Affichage de duree localisee et micro-formatee |
---|
187 | // Nota: les cas de minutes/secondes doivent etre specifie comme des heures au format ISO... |
---|
188 | function association_dureefr($nombre, $unite='', $htm_abbr='abbr') |
---|
189 | { |
---|
190 | $frmt_h = ''; |
---|
191 | $frmt_m = 'P'; |
---|
192 | switch(strtoupper($unite)) { // http://ufxtract.com/testsuite/documentation/iso-duration.htm |
---|
193 | case 'Y' : // year |
---|
194 | case 'A' : // annee |
---|
195 | $nombre = intval($nombre); |
---|
196 | $frmt_m .= $nombre.'Y'; |
---|
197 | $valeur = association_nbrefr($nombre,0); |
---|
198 | $unite = ($nombre<=1) ? _T('local:an') : _T('local:ans'); |
---|
199 | break; |
---|
200 | case 'M' : // month/mois |
---|
201 | $nombre = intval($nombre); |
---|
202 | $frmt_m .= $nombre.'M'; |
---|
203 | $valeur = association_nbrefr($nombre,0); |
---|
204 | $unite = ($nombre<=1) ? _T('spip:date_un_mois') : _T('spip:date_mois'); |
---|
205 | break; |
---|
206 | case 'W' : // week |
---|
207 | case 'S' : // semaine |
---|
208 | $nombre = intval($nombre); |
---|
209 | $frmt_m .= $nombre.'W'; |
---|
210 | $valeur = association_nbrefr($nombre,0); |
---|
211 | $unite = ($nombre<=1) ? _T('spip:date_une_semaine') : _T('spip:date_semaines'); |
---|
212 | break; |
---|
213 | case 'D' : // day |
---|
214 | case 'J' : // jour |
---|
215 | $nombre = intval($nombre); |
---|
216 | $frmt_m .= $nombre.'D'; |
---|
217 | $valeur = association_nbrefr($nombre,0); |
---|
218 | $unite = ($nombre<=1) ? _T('local:jour') : _T('spip:date_jours'); |
---|
219 | break; |
---|
220 | case 'H' : // hour/heure |
---|
221 | $frmt_m .= 'T'.str_replace('00M', '', str_replace(':','H',$nombre.':00').'M' ); |
---|
222 | $valeur = association_nbrefr($nombre,0); |
---|
223 | if (intval($nombre)>1) |
---|
224 | $unite = _T('spip:date_heures'); |
---|
225 | elseif (is_numeric($nombre)) |
---|
226 | $unite = _T('spip:date_une_heure'); |
---|
227 | elseif (strstr($nombre,'0:00')) |
---|
228 | $unite = _T('spip:date_une_minute'); |
---|
229 | else { |
---|
230 | $nombre = explode(':',$nombre); |
---|
231 | $frmt_h = _T('spip:date_fmt_heures_minutes', array('h'=>$nombre[0],'m'=>$nombre[1])); |
---|
232 | } |
---|
233 | break; |
---|
234 | case 'T' : // (full) ISO Time : no check... |
---|
235 | $frmt_m .= 'T'.str_replace( array('HM','HS','MS','00H','00M'), array('H','H','M'), preg_replace('m:m','M',preg_replace('h:h','H',$nombre,1),1).'S' ); |
---|
236 | $nombre = explode(':',$nombre,2); |
---|
237 | if ($nombre[0]>24) { // http://dev.mysql.com/doc/refman/4.1/en/time.html |
---|
238 | $nombre['-1'] = intval($nombre[0]/24); |
---|
239 | $nombre[0] = $nombre[0]%24; |
---|
240 | } |
---|
241 | switch($nombre['-1']) { // nombre de jours |
---|
242 | case 0: |
---|
243 | case '': |
---|
244 | $frmt_h = ''; |
---|
245 | break; |
---|
246 | case 1: |
---|
247 | $frmt_h = _T('duree_temps', array('nombre'=>1,'unite'=>_T('local:jour'))); |
---|
248 | break; |
---|
249 | default: |
---|
250 | $frmt_h = _T('duree_temps', array('nombre'=>association_nbrefr($nommbre['-1'],0),'unite'=>_T('spip:date_jours'))); |
---|
251 | break; |
---|
252 | } |
---|
253 | if ($nombre[0]) |
---|
254 | $frmt_h .= ', '; |
---|
255 | switch($nombre[0]) { // nombre d'heures |
---|
256 | case 0: |
---|
257 | $frmt_h .= ''; |
---|
258 | break; |
---|
259 | case 1: |
---|
260 | $frmt_h .= _T('duree_temps', array('nombre'=>1,'unite'=>_T('spip:date_une_heure'))); |
---|
261 | break; |
---|
262 | default: |
---|
263 | $frmt_h .= _T('duree_temps', array('nombre'=>association_nbrefr($nombre[0],0),'unite'=>_T('spip:date_heures'))); |
---|
264 | break; |
---|
265 | } |
---|
266 | if ($nombre[1]) |
---|
267 | $frmt_h .= ', '; |
---|
268 | switch($nombre[1]) { // nombre de minutes |
---|
269 | case 0: |
---|
270 | $frmt_h .= ''; |
---|
271 | break; |
---|
272 | case 1: |
---|
273 | $frmt_h .= _T('duree_temps', array('nombre'=>1,'unite'=>_T('spip:date_une_minute'))); |
---|
274 | break; |
---|
275 | default: |
---|
276 | $frmt_h .= _T('duree_temps', array('nombre'=>association_nbrefr($nombre[1],0),'unite'=>_T('spip:date_minutes'))); |
---|
277 | break; |
---|
278 | } |
---|
279 | if ($nombre[2]) |
---|
280 | $frmt_h .= ', '; |
---|
281 | switch($nombre[2]) { // nombre de secondes |
---|
282 | case 0: |
---|
283 | $frmt_h .= ''; |
---|
284 | break; |
---|
285 | case 1: |
---|
286 | $frmt_h .= _T('duree_temps', array('nombre'=>1,'unite'=>_T('spip:date_une_seconde'))); |
---|
287 | break; |
---|
288 | default: |
---|
289 | $frmt_h .= _T('duree_temps', array('nombre'=>association_nbrefr($nombre[2],0),'unite'=>_T('spip:date_secondes'))); |
---|
290 | break; |
---|
291 | } |
---|
292 | $frmt_h .= '. '; |
---|
293 | break; |
---|
294 | case 'I' : // (full) ISO DateTime or Date : no check !!! |
---|
295 | default : |
---|
296 | $frmt_m .= $nombre; |
---|
297 | $nombre = explode('T',$nombre,2); |
---|
298 | $ladate = explode(':',$nombre[0]); |
---|
299 | switch($ladate[0]) { // nombre d'annee |
---|
300 | case 0: |
---|
301 | case '': |
---|
302 | $frmt_h = ''; |
---|
303 | break; |
---|
304 | case 1: |
---|
305 | $frmt_h = _T('duree_temps', array('nombre'=>1,'unite'=>_T('local:an'))); |
---|
306 | break; |
---|
307 | default: |
---|
308 | $frmt_h = _T('duree_temps', array('nombre'=>association_nbrefr($ladate[0],0),'unite'=>_T('local:ans'))); |
---|
309 | break; |
---|
310 | } |
---|
311 | if ($ladate[1]) |
---|
312 | $frmt_h .= ', '; |
---|
313 | switch($ladate[1]) { // nombre de mois |
---|
314 | case 0: |
---|
315 | $frmt_h .= ''; |
---|
316 | break; |
---|
317 | case 1: |
---|
318 | $frmt_h .= _T('duree_temps', array('nombre'=>1,'unite'=>_T('spip:date_un_mois'))); |
---|
319 | break; |
---|
320 | default: |
---|
321 | $frmt_h .= _T('duree_temps', array('nombre'=>association_nbrefr($ladate[1],0),'unite'=>_T('spip:date_mois'))); |
---|
322 | break; |
---|
323 | } |
---|
324 | if ($ladate[2]) |
---|
325 | $frmt_h .= ', '; |
---|
326 | switch($ladate[2]) { // nombre de jours |
---|
327 | case 0: |
---|
328 | $frmt_h .= ''; |
---|
329 | break; |
---|
330 | case 1: |
---|
331 | $frmt_h .= _T('duree_temps', array('nombre'=>1,'unite'=>_T('local:jour'))); |
---|
332 | break; |
---|
333 | default: |
---|
334 | $frmt_h .= _T('duree_temps', array('nombre'=>association_nbrefr($ladate[2],0),'unite'=>_T('spip:date_jours'))); |
---|
335 | break; |
---|
336 | } |
---|
337 | if (count($lheure)) |
---|
338 | $frmt_h .= ', '; |
---|
339 | $lheure = explode(':',$nombre[1]); |
---|
340 | switch($lheure[0]) { // nombre d'heures |
---|
341 | case 0: |
---|
342 | $frmt_h .= ''; |
---|
343 | break; |
---|
344 | case 1: |
---|
345 | $frmt_h .= _T('duree_temps', array('nombre'=>1,'unite'=>_T('spip:date_une_heure'))); |
---|
346 | break; |
---|
347 | default: |
---|
348 | $frmt_h .= _T('duree_temps', array('nombre'=>association_nbrefr($lheure[0],0),'unite'=>_T('spip:date_heures'))); |
---|
349 | break; |
---|
350 | } |
---|
351 | if ($lheure[1]) |
---|
352 | $frmt_h .= ', '; |
---|
353 | switch($lheure[1]) { // nombre d'heures |
---|
354 | case 0: |
---|
355 | $frmt_h .= ''; |
---|
356 | break; |
---|
357 | case 1: |
---|
358 | $frmt_h .= _T('duree_temps', array('nombre'=>1,'unite'=>_T('spip:date_une_minute'))); |
---|
359 | break; |
---|
360 | default: |
---|
361 | $frmt_h .= _T('duree_temps', array('nombre'=>association_nbrefr($lheure[1],0),'unite'=>_T('spip:date_minutes'))); |
---|
362 | break; |
---|
363 | } |
---|
364 | if ($lheure[2]) |
---|
365 | $frmt_h .= ', '; |
---|
366 | switch($lheure[2]) { // nombre d'heures |
---|
367 | case 0: |
---|
368 | $frmt_h = ''; |
---|
369 | break; |
---|
370 | case 1: |
---|
371 | $frmt_h = _T('duree_temps', array('nombre'=>1,'unite'=>_T('spip:date_une_seconde'))); |
---|
372 | break; |
---|
373 | default: |
---|
374 | $frmt_h = _T('duree_temps', array('nombre'=>association_nbrefr($lheure[2],0),'unite'=>_T('spip:date_secondes'))); |
---|
375 | break; |
---|
376 | } |
---|
377 | $frmt_h .= '. '; |
---|
378 | break; |
---|
379 | } |
---|
380 | if (!$frmt_h) |
---|
381 | $frmt_h = _T('asso:duree_temps', array('nombre'=>$valeur, 'unite'=>$unite) ); |
---|
382 | return "<$htm_abbr class='duration' title='$frmt_m'>$frmt_h</$htm_abbr>"; |
---|
383 | } |
---|
384 | |
---|
385 | // micro-Formatage des montants avec devise |
---|
386 | // on n'utilise pas la fontcion PHP money_format() --qui ne fonctionne pas sous Windows-- car on veut micro-formater avec une devise fixee par la configuration (en fait les chaines de langue) du plugin |
---|
387 | function association_prixfr($montant, $unite_code='', $unite_nom='', $htm_span='span', $htm_abbr='abbr') |
---|
388 | { |
---|
389 | $res = "<$htm_span class='money price'>"; // pour la reference est "price" <http://microformats.org/wiki/hproduct> (reconnu par les moteurs de recherche), mais "money" <http://microformats.org/wiki/currency-brainstorming> est d'usage courant aussi |
---|
390 | $montant = "<$htm_abbr class='amount' title='$montant'>". association_nbrefr($montant) ."</$htm_abbr>"; |
---|
391 | $devise = "<$htm_abbr class='currency' title='". _T('asso:devise_code_iso') .'\'>'. _T('asso:devise_symbole') ."</$htm_abbr>"; |
---|
392 | $res .= _T('asso:devise_montant', array('montant'=>$montant, 'devise'=>$devise) ); |
---|
393 | $res .= ($unite_code?" <$htm_abbr class='unit' title='".($unite_nom?$unite_nom:$unite_code)."'>$unite_code</$htm_abbr>":''); |
---|
394 | return "$res</$htm_span>"; |
---|
395 | } |
---|
396 | |
---|
397 | // Formatage des nombres selon la langue de l'interface |
---|
398 | function association_nbrefr($montant, $decimales=2, $l10n='') |
---|
399 | { |
---|
400 | /** recuperer le code des parametres regionnaux a utiliser |
---|
401 | * dans un premier temps, on essaye d'utiliser la langue puisque SPIP gere bien cela et offre la possibilite d'en faire plus avec http://programmer.spip.org/Forcer-la-langue-selon-le-visiteur |
---|
402 | * comme ce n'est pas suffisant (le code de localisation est de la forme langue-pays ou langue_PAYS en utilisant les codes ISO), et recuperer le pays n'est pas simple sans faire appel a l'IP-geolocalisation http://stackoverflow.com/questions/2156231/how-do-you-detect-a-website-visitors-country-specifically-us-or-not |
---|
403 | * ni SPIP ni PHP n'offrant de moyen "simple" d'arriver a nos fin bah... |
---|
404 | **/ |
---|
405 | if (!$l10n) { // pas de localae specifiee |
---|
406 | $l10n = $_SERVER['HTTP_ACCEPT_LANGUAGE']; |
---|
407 | if (!$l10n) { // pas specifie par le navigateur non plus ? |
---|
408 | $l10n = array('french', 'fr_FR', 'fr_FR@euro', 'fr_FR.iso88591', 'fr_FR.iso885915@euro', 'fr_FR.utf8', 'fr_FR.utf8@euro'); // alors on s'impose... |
---|
409 | } else { // si specifie, on va transformer en tableau http://www.thefutureoftheweb.com/blog/use-accept-language-header |
---|
410 | preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $l10n, $lang_parse); |
---|
411 | if (count($lang_parse[1])) { // creer la liste locale=>preference |
---|
412 | $langues = array_combine($lang_parse[1], $lang_parse[4]); |
---|
413 | foreach ($langues as $langue => $taux) { // pour les taux de preferences non specifies, mettre a 100% |
---|
414 | if ($taux==='') |
---|
415 | $langues[$langue] = 1; |
---|
416 | } |
---|
417 | arsort($langues, SORT_NUMERIC); // ordonne par taux de preferences |
---|
418 | $l10n = array_keys($langues); // on recupere la liste des langues triees |
---|
419 | } |
---|
420 | |
---|
421 | } |
---|
422 | } |
---|
423 | /** formater selon la langue choisie/recuperee |
---|
424 | * @: http://stackoverflow.com/a/437642 |
---|
425 | **/ |
---|
426 | setlocale(LC_NUMERIC, $l10n); |
---|
427 | $locale = localeconv(); |
---|
428 | return number_format(floatval($montant), $decimales, $locale['decimal_point'], $locale['thousands_sep']); |
---|
429 | } |
---|
430 | |
---|
431 | /* prend en parametre le nom de l'argument a chercher dans _request et retourne un float */ |
---|
432 | function association_recupere_montant($valeur) |
---|
433 | { |
---|
434 | if ($valeur!='') { |
---|
435 | $valeur = str_replace(' ', '', $valeur); /* suppprime les espaces separateurs de milliers */ |
---|
436 | $valeur = str_replace(',', '.', $valeur); /* convertit les , en . */ |
---|
437 | $valeur = floatval($valeur); |
---|
438 | } else |
---|
439 | $valeur = 0.0; |
---|
440 | return $valeur; |
---|
441 | } |
---|
442 | |
---|
443 | /* s'assurer que la valeur saisie est un float positif */ |
---|
444 | function association_verifier_montant($valeur) |
---|
445 | { |
---|
446 | if (association_recupere_montant($valeur)<0) |
---|
447 | return _T('asso:erreur_montant'); |
---|
448 | // else |
---|
449 | // return FALSE; |
---|
450 | } |
---|
451 | |
---|
452 | /* s'assurer que l'entier saisie correspond bien a un id_auteur de la table spip_asso_membres (par defaut) ou spip_auteurs (si on elargi a tous les autteurs --ceci permet d'editer des membres effaces tant qu'ils sont references par SPIP) */ |
---|
453 | function association_verifier_membre($id_auteur, $touslesauteurs=false) |
---|
454 | { |
---|
455 | if ($id_auteur) { |
---|
456 | $id_auteur = intval($id_auteur); |
---|
457 | if (sql_countsel('spip_'.($touslesauteurs?'auteurs':'asso_membres'), "id_auteur=$id_auteur")==0) { |
---|
458 | return _T('asso:erreur_id_adherent'); |
---|
459 | } |
---|
460 | } else |
---|
461 | return FALSE; |
---|
462 | } |
---|
463 | |
---|
464 | // Affichage du message indiquant la date |
---|
465 | function association_date_du_jour($heure=false) |
---|
466 | { |
---|
467 | $ladate = affdate_jourcourt(date('d/m/Y')); |
---|
468 | $hr = ($heure?date('H'):''); |
---|
469 | $mn = ($heure?date('i'):''); |
---|
470 | $res = '<p class="'. ($heure?'datetime':'date'); |
---|
471 | $res .= '" title="'. date('Y-m-d') . ($heure?"T$hr:$mn":''); |
---|
472 | $lheure = ($heure? _T('spip:date_fmt_heures_minutes', array('h'=>$hr,'m'=>$mn)) :''); |
---|
473 | $res .= '">'.( $heure ? _T('asso:date_du_jour_heure', array('date'=>$ladate)) : _T('asso:date_du_jour',array('date'=>$ladate,'time'=>$lheure)) ).'</p>'; |
---|
474 | return $res; |
---|
475 | } |
---|
476 | |
---|
477 | function association_header_prive($flux) |
---|
478 | { |
---|
479 | $c = direction_css(find_in_path('association.css')); |
---|
480 | return "$flux\n<link rel='stylesheet' type='text/css' href='$c' />"; |
---|
481 | } |
---|
482 | |
---|
483 | // Filtre pour "afficher" ou "cacher" un bloc div |
---|
484 | // Utilise dans le formulaire cvt "editer_asso_comptes.html" |
---|
485 | function affichage_div($type_operation,$list_operation) |
---|
486 | { |
---|
487 | if(strpos($list_operation, '-')) { |
---|
488 | $operations = explode('-', $list_operation); |
---|
489 | $res = 'cachediv'; |
---|
490 | for($i=0;$i<count($operations);$i++) { |
---|
491 | $operation = $GLOBALS['association_metas']['classe_'.$operations[$i]]; |
---|
492 | if($type_operation===$operation) { |
---|
493 | $res = ''; |
---|
494 | break; |
---|
495 | } |
---|
496 | } |
---|
497 | } else { |
---|
498 | $res = ($type_operation===$GLOBALS['association_metas']['classe_'.$list_operation])?'':'cachediv'; |
---|
499 | } |
---|
500 | return $res; |
---|
501 | } |
---|
502 | |
---|
503 | /* selecteur d'exercice comptable */ |
---|
504 | function association_selectionner_exercice($exercice='', $url_action='') { |
---|
505 | if ($exec) { |
---|
506 | $res = '<form method="post" action="'. generer_url_ecrire($exec) .'"><div>'; |
---|
507 | $res .= '<input type="hidden" name="exec" value="'.$exec.'" />'; |
---|
508 | } else { |
---|
509 | $res = ''; |
---|
510 | } |
---|
511 | $res .= '<select name ="exercice" onchange="form.submit()">'; |
---|
512 | $res .= '<option value="0" '; |
---|
513 | if (!$exercice) { |
---|
514 | $res .= ' selected="selected"'; |
---|
515 | } |
---|
516 | $res .= '>'. _L("choisir l'exercice ?") .'</option>'; |
---|
517 | $sql = sql_select('id_exercice, intitule', 'spip_asso_exercices','', 'intitule DESC'); |
---|
518 | while ($val = sql_fetch($sql)) { |
---|
519 | $res .= '<option value="'.$val['id_exercice'].'" '; |
---|
520 | if ($exercice==$val['id_exercice']) { |
---|
521 | $res .= ' selected="selected"'; |
---|
522 | } |
---|
523 | $res .= '>'.$val['intitule'].'</option>'; |
---|
524 | } |
---|
525 | $res .= '</select>'; |
---|
526 | if ($exec) { |
---|
527 | $res .= '<noscript><input type="submit" value="'._T('asso:bouton_lister').'" /></noscript>'; |
---|
528 | $res .= '</div></form>'; |
---|
529 | } |
---|
530 | return $res; |
---|
531 | } |
---|
532 | |
---|
533 | /* selecteur d'exercice comptable */ |
---|
534 | function association_selectionner_destination($destination='', $exec='') { |
---|
535 | if ($exec) { |
---|
536 | $res = '<form method="post" action="'. generer_url_ecrire($exec) .'"><div>'; |
---|
537 | $res .= '<input type="hidden" name="exec" value="'.$exec.'" />'; |
---|
538 | } else { |
---|
539 | $res = ''; |
---|
540 | } |
---|
541 | // $res .= '<select name ="destination[]" multiple="multiple" onchange="form.submit()">'; |
---|
542 | $res .= '<select name ="destination" onchange="form.submit()">'; |
---|
543 | $res .= '<option value="0" '; |
---|
544 | // if ( !(array_search(0, $destinations)===FALSE) ) { |
---|
545 | if (!$destination) { |
---|
546 | $res .= ' selected="selected"'; |
---|
547 | } |
---|
548 | // $res .= '>'. _T('asso:toutes_destinations') .'</option><option disabled="disabled">--------</option>'; |
---|
549 | $res .= '>'. _T('asso:toutes_destinations') .'</option>'; |
---|
550 | $intitule_destinations = array(); |
---|
551 | $sql = sql_select('id_destination, intitule', 'spip_asso_destination','', 'intitule DESC'); |
---|
552 | while ($val = sql_fetch($sql)) { |
---|
553 | $res .= '<option value="'.$val['id_destination'].'" '; |
---|
554 | // if (!(array_search($val['id_destination'], $destinations)===FALSE)) { |
---|
555 | if ($destination==$val['id_destination']) { |
---|
556 | $res .= ' selected="selected"'; |
---|
557 | } |
---|
558 | $res .= '>'.$val['intitule'].'</option>'; |
---|
559 | // $intitule_destinations[$val['id_destination']] = $val['intitule']; |
---|
560 | } |
---|
561 | $res .= '</select>'; |
---|
562 | if ($exec) { |
---|
563 | $res .= '<noscript><input type="submit" value="'._T('asso:bouton_lister').'" /></noscript>'; |
---|
564 | $res .= '</div></form>'; |
---|
565 | } |
---|
566 | if ($GLOBALS['association_metas']['destinations']){ |
---|
567 | return $res; |
---|
568 | } else { |
---|
569 | return FALSE; |
---|
570 | } |
---|
571 | } |
---|
572 | |
---|
573 | /* selecteur de grouoe de membres*/ |
---|
574 | function association_selectionner_groupe($id_groupe='', $exec='') { |
---|
575 | if ($exec) { |
---|
576 | $res = '<form method="post" action="'. generer_url_ecrire($exec) .'"><div>'; |
---|
577 | $res .= '<input type="hidden" name="exec" value="'.$exec.'" />'; |
---|
578 | } else { |
---|
579 | $res = ''; |
---|
580 | } |
---|
581 | $qGroupes = sql_select('nom, id_groupe', 'spip_asso_groupes', 'id_groupe>=100', '', 'nom'); // on ne prend en consideration que les groupe d'id >= 100, les autres sont reserves a la gestion des autorisations |
---|
582 | if ( $qGroupes && sql_count($qGroupes) ) { // ne proposer que s'il y a des groupes definis |
---|
583 | $res .= '<select name="id_groupe" onchange="form.submit()">'; |
---|
584 | $res .= '<option value="">'._T('asso:tous_les_groupes').'</option>'; |
---|
585 | while ($groupe = sql_fetch($qGroupes)) { |
---|
586 | $res .= '<option value="'.$groupe['id_groupe'].'"'; |
---|
587 | if ($id_groupe==$groupe['id_groupe']) |
---|
588 | $res .= ' selected="selected"'; |
---|
589 | $res .= '>'.$groupe['nom'].'</option>'; |
---|
590 | } |
---|
591 | $res .= '</select><noscript><input type="submit" value="'._T('asso:bouton_lister').'" /></noscript></div></form>'; |
---|
592 | return $res; |
---|
593 | } else { |
---|
594 | return FALSE; |
---|
595 | } |
---|
596 | } |
---|
597 | |
---|
598 | /* selecteur de statut de membres*/ |
---|
599 | function association_selectionner_statut($statut_interne='', $exec='') { |
---|
600 | if ($exec) { |
---|
601 | $res = '<form method="post" action="'. generer_url_ecrire($exec) .'"><div>'; |
---|
602 | $res .= '<input type="hidden" name="exec" value="'.$exec.'" />'; |
---|
603 | } else { |
---|
604 | $res = ''; |
---|
605 | } |
---|
606 | $res .= '<select name="statut_interne" onchange="form.submit()">'; |
---|
607 | $res .= '<option value="%"'. (($statut_interne=='defaut' || $statut_interne=='%')?' selected="selected"':'') .'>'._T('asso:entete_tous').'</option>'; |
---|
608 | foreach ($GLOBALS['association_liste_des_statuts'] as $statut) { |
---|
609 | $res .= '<option value="'.$statut.'"'; |
---|
610 | if ($statut_interne==$statut) |
---|
611 | $res .= ' selected="selected"'; |
---|
612 | $res .= '> '._T('asso:adherent_entete_statut_'.$statut).'</option>'; |
---|
613 | } |
---|
614 | $res .= '</select>'; |
---|
615 | if ($exec) { |
---|
616 | $res .= '<noscript><input type="submit" value="'._T('asso:bouton_lister').'" /></noscript>'; |
---|
617 | $res .= '</div></form>'; |
---|
618 | } |
---|
619 | return $res; |
---|
620 | } |
---|
621 | |
---|
622 | function encadre($texte,$avant='[',$apres=']') |
---|
623 | { |
---|
624 | return ($texte=='')?'':$avant.$texte.$apres; |
---|
625 | } |
---|
626 | |
---|
627 | // Raccourcis |
---|
628 | // Les tables ayant 2 prefixes ("spip_asso_") |
---|
629 | // le raccourci "don" implique de declarer le raccourci "asso_don" etc. |
---|
630 | |
---|
631 | function generer_url_asso_don($id, $param='', $ancre='') { |
---|
632 | return generer_url_ecrire('edit_don', 'id='.intval($id)); |
---|
633 | } |
---|
634 | function generer_url_don($id, $param='', $ancre='') { |
---|
635 | return array('asso_don', $id); |
---|
636 | } |
---|
637 | |
---|
638 | function generer_url_asso_membre($id, $param='', $ancre='') { |
---|
639 | return generer_url_ecrire('voir_adherent', 'id='.intval($id)); |
---|
640 | } |
---|
641 | function generer_url_membre($id, $param='', $ancre='') { |
---|
642 | return array('asso_membre', $id); |
---|
643 | } |
---|
644 | |
---|
645 | function generer_url_asso_vente($id, $param='', $ancre='') { |
---|
646 | return generer_url_ecrire('edit_vente', 'id='.intval($id)); |
---|
647 | } |
---|
648 | function generer_url_vente($id, $param='', $ancre='') { |
---|
649 | return array('asso_vente', $id); |
---|
650 | } |
---|
651 | |
---|
652 | function generer_url_asso_ressource($id, $param='', $ancre='') { |
---|
653 | return generer_url_ecrire('edit_ressource', 'id='.intval($id)); |
---|
654 | } |
---|
655 | function generer_url_ressource($id, $param='', $ancre='') { |
---|
656 | return array('asso_ressource', $id); |
---|
657 | } |
---|
658 | |
---|
659 | function generer_url_asso_activite($id, $param='', $ancre='') { |
---|
660 | return generer_url_ecrire('voir_activite', 'id='.intval($id)); |
---|
661 | } |
---|
662 | function generer_url_activite($id, $param='', $ancre='') { |
---|
663 | return array('asso_activite', $id); |
---|
664 | } |
---|
665 | |
---|
666 | function instituer_adherent_ici($auteur=array()){ |
---|
667 | $instituer_adherent = charger_fonction('instituer_adherent', 'inc'); |
---|
668 | return $instituer_adherent($auteur); |
---|
669 | } |
---|
670 | function instituer_statut_interne_ici($auteur=array()){ |
---|
671 | $instituer_statut_interne = charger_fonction('instituer_statut_interne', 'inc'); |
---|
672 | return $instituer_statut_interne($auteur); |
---|
673 | } |
---|
674 | |
---|
675 | // bloc infos integral (colonne gauche) |
---|
676 | // Rem: une certaine similitude avec http://programmer.spip.org/boite_infos :) |
---|
677 | function bloc_infos($TitreObjet,$NumObjet,$DesLignes=array(),$PrefixeLangue='asso') |
---|
678 | { |
---|
679 | $res = debut_boite_info(true); |
---|
680 | $res .= '<div style="font-weight: bold; text-align: center" class="verdana1 spip_xx-small">'. _T("$PrefixeLangue:$TitreObjet") .'<br /><span class="spip_xx-large">'.$NumObjet.'</span></div>'; |
---|
681 | if (count($DesLignes)) { |
---|
682 | $res .= '<div class="verdana1 spip_xx-small">'; |
---|
683 | foreach ($DesLignes as $p) { |
---|
684 | $res .= propre($p); // propre() encadre dans P... |
---|
685 | } |
---|
686 | $res .= '</div>'; |
---|
687 | } |
---|
688 | $res .= association_date_du_jour(); |
---|
689 | $res .= fin_boite_info(true); |
---|
690 | return $res; |
---|
691 | } |
---|
692 | |
---|
693 | // Rappels sur l'objet dans le bloc infos |
---|
694 | // C'est un resume ou une petite presentation de l'objet en cours d'edition/lecture : ces informations permettent de situer le contexte de la page et n'apparaissent pas dans le bloc central ! |
---|
695 | function totauxinfos_intro($titre,$type='',$id=0,$DesLignes=array(),$PrefixeLangue='asso') |
---|
696 | { |
---|
697 | $res = ''; |
---|
698 | if ($type) { |
---|
699 | $res .= '<div style="text-align: center" class="verdana1 spip_x-small">'. _T('asso:titre_num', array('titre'=>_T("local:$type"), 'num'=>$id) ) .'</div>'; |
---|
700 | } |
---|
701 | $res .= '<div style="text-align: center" class="verdana1 spip_medium">'.$titre.'</div>'; |
---|
702 | if (count($DesLignes)) { |
---|
703 | $res .= '<dl class="verdana1 spip_xx-small">'; |
---|
704 | foreach ($DesLignes as $dt=>$dd) { |
---|
705 | $res .= '<dt>'. _T("$PrefixeLangue:$dt") .'</dt><dd>'. propre($dd) .'</dd>'; // propre() encadre dans P... |
---|
706 | } |
---|
707 | $res .= '</dl>'; |
---|
708 | } |
---|
709 | return $res; |
---|
710 | } |
---|
711 | |
---|
712 | // Tableau presentant les chiffres de synthese de la statistique descriptive dans le bloc infos |
---|
713 | // On prend en entree : la table du plugin sur laquelle va porter les statistique, un tableau de item de langue decrivant la ligne et liste des champs sur lesquels calcuer les statistiques, le critere de selection SQL des lignes (sinon toutes) |
---|
714 | // On renvoie pour chaque ligne : la moyenne arithmetique <http://fr.wikipedia.org/wiki/Moyenne#Moyenne_arithm.C3.A9tique> et l'ecart-type <http://fr.wikipedia.org/wiki/Dispersion_statistique#.C3.89cart_type> ainsi que les extrema <http://fr.wikipedia.org/wiki/Crit%C3%A8res_de_position#Valeur_maximum_et_valeur_minimum> si on le desire (par defaut non car tableau debordant dans ce petit cadre) |
---|
715 | function totauxinfos_stats($legende='',$sql_table_asso,$sql_champs,$sql_criteres='1=1',$decimales_significatives=1,$avec_extrema=false) |
---|
716 | { |
---|
717 | if (!is_array($sql_champs) || !$sql_table_asso) |
---|
718 | return FALSE; |
---|
719 | $res = '<table width="100%" class="asso_infos">'; |
---|
720 | $res .= '<caption>'. _T('asso:totaux_moyens', array('de_par'=>_T("local:$legende"))) .'</caption><thead>'; |
---|
721 | $res .= '<tr class="row_first"> <th> </th>'; |
---|
722 | $res .= '<th title="'. _T('entete_stats_moy') .'">x̄</th>'; // X <span style="font-size:75%;">X</span>̄ <span style="text-decoration:overline;">X</span> X<span style="position:relative; bottom:1.0ex; letter-spacing:-1.2ex; right:1.0ex">–</span> x<span style="position:relative; bottom:1.0ex; letter-spacing:-1.2ex; right:1.0ex">¯</span> |
---|
723 | $res .= '<th title="'. _T('entete_stats_mea') .'">σ</th>'; // σ σ σ σ |
---|
724 | if ($avec_extrema) { |
---|
725 | $res .= '<th title="'. _T('entete_stats_min') .'">[<</th>'; |
---|
726 | $res .= '<th title="'. _T('entete_stats_max') .'">>]</th>'; |
---|
727 | } |
---|
728 | $res .= '</tr>'; |
---|
729 | $res .= '</thead><tbody>'; |
---|
730 | $compteur = 0; |
---|
731 | foreach ($sql_champs as $libelle=>$champs) { |
---|
732 | $stats = sql_fetsel("AVG($champs) AS valMoy, STDDEV($champs) AS ekrTyp, MIN($champs) AS valMin, MAX($champs) AS valMax ", "spip_asso_$sql_table_asso", $sql_criteres); |
---|
733 | $res .= '<tr class="'. ($compteur%2?'row_odd':'row_even') .'">'; |
---|
734 | $res .= '<td class"text">'. _T('asso:'.(is_numeric($libelle)?$champs:$libelle)) .'</td>'; |
---|
735 | $res .= '<td class="'.($decimales_significatives?'decimal':'integer').'">'. association_nbrefr($stats['valMoy'],$decimales_significatives) .'</td>'; |
---|
736 | $res .= '<td class="'.($decimales_significatives?'decimal':'integer').'">'. association_nbrefr($stats['ekrTyp'],$decimales_significatives) .'</td>'; |
---|
737 | if ($avec_extrema) { |
---|
738 | $res .= '<td class="'.($decimales_significatives?'decimal':'integer').'">'. association_nbrefr($stats['valMin'],$decimales_significatives) .'</td>'; |
---|
739 | $res .= '<td class="'.($decimales_significatives?'decimal':'integer').'">'. association_nbrefr($stats['valMax'],$decimales_significatives) .'</td>'; |
---|
740 | } |
---|
741 | $res .= '</tr>'; |
---|
742 | $compteur++; |
---|
743 | } |
---|
744 | $res .= '</tbody></table>'; |
---|
745 | return $res; |
---|
746 | } |
---|
747 | |
---|
748 | // Tableau des decomptes statistiques dans le bloc infos |
---|
749 | // On prend en entree deux tableaux de taille egale (non controlee) --respectivement pour les intitules/libelles et les effectifs/occurences-- qui sont indexes par la classe CSS associee (parce-qu'elle doit etre unique pour chaque ligne) |
---|
750 | function totauxinfos_effectifs($legende='',$table_textes,$table_nombres,$decimales_significatives=0) |
---|
751 | { |
---|
752 | if (!is_array($table_textes) || !is_array($table_nombres) ) |
---|
753 | return FALSE; |
---|
754 | $nombre = $nombre_total = 0; |
---|
755 | $res = '<table width="100%" class="asso_infos">'; |
---|
756 | $res .= '<caption>'. _T('asso:totaux_nombres', array('de_par'=>_T("local:$legende"))) .'</caption><tbody>'; |
---|
757 | foreach ($table_textes as $classe_css=>$libelle) { |
---|
758 | $res .= '<tr class="'.$classe_css.'">'; |
---|
759 | $res .= '<td class"text">'._T('asso:'.$libelle).'</td>'; |
---|
760 | $res .= '<td class="' .($decimales_significatives?'decimal':'integer') .'">'. association_nbrefr($table_nombres[$classe_css],$decimales_significatives) .'</td>'; |
---|
761 | $nombre_total += $table_nombres[$classe_css]; |
---|
762 | $res .= '</tr>'; |
---|
763 | } |
---|
764 | $res .= '</tbody>'; |
---|
765 | if (count($table_nombres)>1) { |
---|
766 | $res .= '<tfoot>'; |
---|
767 | $res .= '<tr><th class="text">'._T('asso:liste_nombre_total').'</th>'; |
---|
768 | $res .= '<th class="' .($decimales_significatives?'decimal':'integer') .'">'. association_nbrefr($nombre_total,$decimales_significatives) .'</th></tr>'; |
---|
769 | $res .= '</tfoot>'; |
---|
770 | } |
---|
771 | return $res.'</table>'; |
---|
772 | } |
---|
773 | |
---|
774 | // Tableau des totaux comptables dans le bloc infos |
---|
775 | // On prend en entree : le complement de titre du tableau puis les sommes cumulees des recettes et des depenses. (tous ces parametres sont facultatifs, mais attention qu'un tableau est quand meme genere dans tous les cas) |
---|
776 | function totauxinfos_montants($legende='',$somme_recettes=0,$somme_depenses=0) |
---|
777 | { |
---|
778 | $res = '<table width="100%" class="asso_infos">'; |
---|
779 | $res .= '<caption>'. _T('asso:totaux_montants', array('de_par'=>_T("local:$legende"))) .'</caption><tbody>'; |
---|
780 | if ($somme_recettes) { |
---|
781 | $res .= '<tr class="impair">' |
---|
782 | . '<th class="entree">'. _T('asso:bilan_recettes') .'</th>' |
---|
783 | . '<td class="decimal">' .association_prixfr($somme_recettes). ' </td>' |
---|
784 | . '</tr>'; |
---|
785 | } |
---|
786 | if ($somme_depenses) { |
---|
787 | $res .= '<tr class="pair">' |
---|
788 | . '<th class="sortie">'. _T('asso:bilan_depenses') .'</th>' |
---|
789 | . '<td class="decimal">'.association_prixfr($somme_depenses) .'</td>' |
---|
790 | . '</tr>'; |
---|
791 | } |
---|
792 | if ($somme_recettes && $somme_depenses) { |
---|
793 | $solde = $somme_recettes-$somme_depenses; |
---|
794 | $res .= '<tr class="'.($solde>0?'impair':'pair').'">' |
---|
795 | . '<th class="solde">'. _T('asso:bilan_solde') .'</th>' |
---|
796 | . '<td class="decimal">'.association_prixfr($solde).'</td>' |
---|
797 | . '</tr>'; |
---|
798 | } |
---|
799 | return $res.'</tbody></table>'; |
---|
800 | } |
---|
801 | |
---|
802 | // pour executer les squelettes comportant la balise Meta |
---|
803 | include_spip('balise/meta'); |
---|
804 | // charger les metas donnees |
---|
805 | $inc_meta = charger_fonction('meta', 'inc'); // inc_version l'a deja chargee |
---|
806 | $inc_meta('association_metas'); |
---|
807 | |
---|
808 | // pouvoir utiliser les fonctions de coordonnees comme filtre |
---|
809 | if (test_plugin_actif('COORDONNEES')) { |
---|
810 | include_spip('inc/association_coordonnees'); |
---|
811 | } |
---|
812 | |
---|
813 | // Pour construire des menu avec SELECTED |
---|
814 | function association_mySel($varaut,$variable, $option=NULL) |
---|
815 | { |
---|
816 | if ( function_exists('mySel') ) //@ http://doc.spip.org/@mySel |
---|
817 | return mySel($varaut, $variable, $option); |
---|
818 | // la fonction mySel n'existe plus en SPIP 3 donc on la recree |
---|
819 | $res = ' value="'.$varaut.'"'. (($variable==$varaut) ? ' selected="selected"' : ''); |
---|
820 | return (!isset($option) ? $res : "<option$res>$option</option>\n"); |
---|
821 | } |
---|
822 | |
---|
823 | ?> |
---|