source: spip-zone/_plugins_/Associaspip/trunk/association_autorisations.php @ 68033

Last change on this file since 68033 was 68033, checked in by esj@…, 7 years ago

Associaspip amélioration: comme pour la cotisation en r67878, permettre à un membre de déclarer lui-même ses dons. Ceci termine ce travail commencé en r67885.

File size: 19.4 KB
Line 
1<?php
2if (!defined('_ECRIRE_INC_VERSION'))
3        return;
4
5/**
6 * Fonction pour le pipeline, n'a rien a effectuer
7 *
8 * @note
9 *   http://programmer.spip.net/autoriser
10 */
11function association_autoriser() {
12}
13
14/**
15 * Teste si un auteur est dans un groupe ou une liste de groupes
16 *
17 * @param int $id_auteur
18 *   ID de l'auteur dont on verifie l'appartenance
19 * @param int|array $id_groups
20 *   Liste des ID des groupes d'appartenance a verifier
21 * @return bool
22 *   Vrai si l'auteur est dans le(s) groupe(s), faux sinon
23 */
24function is_in_groups($id_auteur, $id_groupes) {
25        if (is_array($id_auteur)) {
26                $id_auteur = $id_auteur['id_auteur'];
27        }
28        $where = "id_auteur=$id_auteur AND ";
29        if (is_array($id_groupes)) {
30                $where .= sql_in("id_groupe", $id_groupes);
31        } else {
32                $where .= "id_groupe=$id_groupes";
33        }
34        if (sql_countsel("spip_asso_groupes_liaisons", $where) != 0) {
35                return TRUE;
36        } else {
37                return false;
38        }
39}
40
41/*****************************************
42 * @defgroup autoriser_associer
43 *
44 * Groupes d'acces
45 * Les autorisation d'acces sont geres par des groupes de membres (d'auteur SPIP
46 * en fait, un auteur non membre peut avoir un access, par exemple le personnel
47 * administratif de l'asso) Qu'ils soient ou on present dans le groupe, les
48 * webmestres ont tous les acces ; les admins non restreints certains.
49 *
50 * Mapping des id_groupe (xy<100) et des autorisations associées :
51 *
52 * 0y Groupes ****************************
53 * 01 => edition des groupes y compris ceux d'autorisation. defaut: webmestres
54 * 02 => edition des groupes d'id>100. defaut : admin non restreints
55 * 03 => voir les groupes d'id>100. defaut : redacteurs
56 * 1y Comptabilite ***********************
57 * 10 => expert-comptable : toutes les autorisations sur la compta.
58 * 11 => comptable/tresorier : peut enregistrer des ecritures mais pas modifier le plan comptable
59 * 12 => auditeur : acces en lecture seule a la comptabilite
60 * 3y Membres ****************************
61 * 30 => editer membres. Ajouter/Supprimer des membres, editer les membres (ajout cotisations, modifications informations). defaut : admin non restreint
62 * 31 => voir membres. Lister les membres et voir leur page. defaut : admin non restreint
63 * 32 => synchroniser les membres. defaut : admin non restreint
64 * 33 => relancer les membres. defaut : admin non restreint
65 *
66 * @param string $faire
67 *   Action demandee (mapping id_goupe xy<100) :
68 *   - x0 = gerer_ : droits complets sur le module,
69 *     dont configuration et synchronisations.
70 *   - x1|x4|x7 = editer_ : editer (ajouter, modifier, supprimer) + lire toutes les infos (voir details, exporter, lister).
71 *  - x2|x5|x8 = export_ : lire tout (voir details exporter, lister).
72 *    les exports necessitent de pouvoir voir tous les details...
73 *  - x3|x6|x9 = list_ : lister (voir seulement champs affiches)
74 *    les listes n'affichent qu'un certain nombre d'informations
75 *    (parfois configurables) et d'autres ne sont pas accessibles (par defaut)
76 * @param string $type
77 *   Type d'bjet concerne (mapping id_goupe xy<100) :
78 *   - 0y = _groupes : Autorisations ; Groupes utilisateurs
79 *   - 1y = _compta : Comptabilite
80 *   - 2y = _profil : Profil Association
81 *   - 3y = _membres : Membres
82 *   - 4y = _dons : Dons
83 *   - 5y = _ventes : Ventes
84 *   - 6y = _ressources|_prets : Ressources (locations et prets)
85 *   - 7y = _activites : Inscriptions aux activites
86 *   - 8y : reserve pour un usage futur
87 *   - 9y : reserve pour un usage futur
88 * @param int $id
89 *   ID de l'objet concerne
90 * @param int $qui
91 *   Auteur (par defaut celui connecte)
92 * @param array $opt
93 *   Options supplementaires pour l'autorisation
94 * @return bool
95 * @note
96 *   http://programmer.spip.net/La-librairie-autoriser
97 *   http://programmer.spip.net/Definir-des-boutons
98 *   http://programmer.spip.net/Definir-des-onglets
99 *   http://programmer.spip.net/Processus-de-la-fonction-autoriser
100 *   http://programmer.spip.net/Creer-ou-surcharger-des
101 *
102** @{ */
103
104/// 0 /// groupes d'autorisations (id_groupe<100) et groupes propres a l'association
105
106/**
107 * Gestion des autorisations.
108 * defaut : webmestres.
109 * groupe : 01.
110 */
111function autoriser_association_gerer_autorisations_dist($faire, $type, $id, $qui, $opt) {
112        if ($qui['statut']=='0minirezo' && $qui['webmestre']=='oui') {
113                return TRUE; // on retourne ok pour tous les webmestres
114        }
115        return is_in_groups($qui['id_auteur'], 1); // c'est le groupe 1 qui liste les gens qui peuvent toucher aux autorisations
116}
117
118/**
119 * Edition des groupes.
120 * defaut : admins non-restreints.
121 * groupes : 01,02.
122 */
123function autoriser_association_editer_groupes_dist($faire, $type, $id, $qui, $opt) {
124        if ($id!=0 && $id<100) { // on n'arrive jamais ici sauf si quelqu'un entre des urls a la main ce qui peut arriver
125                return autoriser_association_gerer_autorisations_dist($faire, $type, $id, $qui, $opt); // si l'id est-il inferieur a 100 (groupe d'autorisations) et different de 0 (creation d'un groupe) : on retourne le resultat de la fonction d'autorisation de gestion des autorisations
126        }
127        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
128                return TRUE;
129        }
130        return is_in_groups($qui['id_auteur'], array(2,1));
131}
132
133/**
134 * Voir les groupes.
135 * defaut : redacteurs.
136 * groupes : 01,02,03.
137 */
138function autoriser_association_voir_groupes_dist($faire, $type, $id, $qui, $opt) {
139        if ($id!=0 && $id<100) { // on n'arrive jamais ici sauf si quelqu'un entre des urls a la main ce qui peut arriver
140                return autoriser_association_gerer_autorisations_dist($faire, $type, $id, $qui, $opt); // si l'id est-il inferieur a 100 (groupe d'autorisations) et different de 0 (creation d'un groupe) : on retourne le resultat de la fonction d'autorisation de gestion des autorisations
141        }
142        if ($qui['statut']=='0minirezo' || $qui['statut']=='1comite') {
143                return TRUE;
144        }
145        return is_in_groups($qui['id_auteur'], array(3,2,1));
146}
147
148/// 1 /// comptabilite (module des comptes et modules dependant...)
149
150/**
151 * Droits complets (configuration et gestion) sur la compatabilite. (expert comptable)
152 * defaut : webmestre
153 * groupe : 10.
154 */
155function autoriser_association_gerer_compta_dist($faire, $type, $id, $qui, $opt) {
156        if ($qui['statut']=='0minirezo' && $qui['webmestre']=='oui') {
157                return TRUE;
158        }
159        return is_in_groups($qui['id_auteur'], 10);
160}
161
162/**
163 * Edition et exporter des operations comptables. (comptable/tresorier)
164 * Cela inclut normalement l'edition dans d'autres modules si necessaire
165 * (la permission adequade incorpore donc ce groupe automatiquemnt)
166 * defaut : webmestre
167 * groupes : 10,11.
168 */
169function autoriser_association_editer_compta_dist($faire, $type, $id, $qui, $opt) {
170        if ($qui['statut']=='0minirezo' && $qui['webmestre']=='oui') {
171                return TRUE;
172        }
173        return is_in_groups($qui['id_auteur'], array(11,10));
174}
175
176/**
177 * Consultation elargie de la compatabilite.
178 * Cela inclut la consultation et l'export du "Grand Journal/Livre des operations"
179 * des etats/syntheses comptables, et des operations liees a la comptabilite
180 * (dans les autres modules)...
181 * defaut : webmestre
182 * groupes : 10,11,12.
183 */
184function autoriser_association_exporter_compta_dist($faire, $type, $id, $qui, $opt) {
185        if ($qui['statut']=='0minirezo' && $qui['webmestre']=='oui') {
186                return TRUE;
187        }
188        return is_in_groups($qui['id_auteur'], array(12,11,10));
189}
190
191/**
192 * Consulter la compatabilite. (auditeur comptable et autres membres du CA)
193 * Cette consultation (lecture seule) est celle du "Grand Journal/Livre des operations"
194 * ainsi que la consultation et l'export des etats/syntheses comptables !
195 * defaut : webmestre
196 * groupes : 10,11,12,13.
197 */
198function autoriser_association_voir_compta_dist($faire, $type, $id, $qui, $opt) {
199        if ($qui['statut']=='0minirezo' && $qui['webmestre']=='oui') {
200                return TRUE;
201        }
202        return is_in_groups($qui['id_auteur'], array(13,12,11,10));
203}
204
205/// 2 /// profil de l'association (page d'accueil et configuration du plugin)
206
207/**
208 * Ceux qui peuvent voir les infos de l'association doivent avoir le bouton dans
209 * l'espace privé avec l'interface normale
210 * defaut : redacteurs.
211 * groupes : 10,20,21,23.
212 */
213function autoriser_association_bouton_dist($faire, $type, $id, $qui, $opt) {
214        return autoriser_association_voir_profil_dist($faire, $type, $id, $qui, $opt);
215}
216
217/**
218 * Ceux qui peuvent voir les infos de l'association doivent avoir le bouton dans
219 * l'espace privé avec le plugin navigation prive (bando)
220 * defaut : redacteurs.
221 * groupes : 10,20,21,23.
222 */
223function autoriser_association_bando_bouton_dist($faire, $type, $id, $qui, $opt) {
224        return autoriser_association_voir_profil_dist($faire, $type, $id, $qui, $opt);
225}
226
227/**
228 * Modifier le profil de l'association.
229 * defaut : webmestre
230 * groupes : 10,20,21.
231 */
232function autoriser_association_editer_profil_dist($faire, $type, $id, $qui, $opt) {
233        if ($qui['statut']=='0minirezo' && $qui['webmestre']=='oui') {
234                return TRUE;
235        }
236        return is_in_groups($qui['id_auteur'], array(21,20,10));
237}
238
239/**
240 * Voir le profil de l'association.
241 * defaut : rédacteurs.
242 * groupes : 20,21,22,23.
243 */
244function autoriser_association_voir_profil_dist($faire, $type, $id, $qui, $opt) {
245        if ($qui['statut']=='0minirezo' || $qui['statut']=='1comite') {
246                return TRUE;
247        }
248        return is_in_groups($qui['id_auteur'], array(23,22,21,20,13,12,11,10));
249}
250
251/// 3 /// membres de l'association
252
253/**
254 * Creer un membre depuis un auteur spip
255 * defaut : admins non restreints.
256 * groupe : aucun.
257 */
258function autoriser_associer_adherents_dist($faire, $type, $id, $qui, $opt) {
259        return autoriser_association_gerer_membres_dist($faire, $type, $id, $qui, $opt);
260}
261
262/// Un membre peut declarer lui-meme sa cotisation
263/// si la destination et l'imputation des cotisations sont uniques.
264/// Le tresorier n'aura plus qu'a valider.
265
266function autoriser_association_ajouter_cotisation_dist($faire, $type, $id, $qui, $opt) {
267        if ($qui['statut']=='0minirezo' && !$qui['restreint']) return true;
268        if ($id != $GLOBALS['visiteur_session']['id_auteur']) return false;
269        if (!$GLOBALS['association_metas']['unique_dest']) return false;
270        return (sql_countsel('spip_asso_plan', "(active=1) AND (classe=" . sql_quote($GLOBALS['association_metas']['classe_banques']) . ") AND (code!=" . sql_quote($GLOBALS['association_metas']['pc_intravirements']) . ')') == 1);
271}
272
273/**
274 * Synchroniser les membres avec les auteurs SPIP.
275 * defaut : admin non restreint.
276 * groupe : 30.
277 */
278function autoriser_association_gerer_membres_dist($faire, $type, $id, $qui, $opt) {
279        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
280                return TRUE;
281        }
282        return is_in_groups($qui['id_auteur'], 30);
283}
284
285/**
286 * Editer les informations des membres.
287 * defaut : admin non restreint.
288 * groupe : 10,11,30,31.
289 */
290function autoriser_association_editer_membres_dist($faire, $type, $id, $qui, $opt) {
291        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
292                return TRUE;
293        }
294        return is_in_groups($qui['id_auteur'], array(31,30,11,10));
295}
296
297/**
298 * Voir et exporter les informations des membres.
299 * defaut : admin non restreint.
300 * groupes : 11,30,31,32.
301 */
302function autoriser_association_exporter_membres_dist($faire, $type, $id, $qui, $opt) {
303        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
304                return TRUE;
305        }
306        return is_in_groups($qui['id_auteur'], array(32,31,30,11));
307}
308
309/**
310 * Voir la page des membres et leurs pages personnelle.
311 * defaut : admin non restreint et membre en question.
312 * groupes : 10,11,12,30,31,32,33.
313 */
314function autoriser_association_voir_membres_dist($faire, $type, $id, $qui, $opt) {
315        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
316                return TRUE;
317        }
318        if ($id == intval($GLOBALS['visiteur_session']['id_auteur'])) {
319                return TRUE;
320        }
321        return is_in_groups($qui['id_auteur'], array(33,32,31,30,12,11,10));
322}
323
324/**
325 * Publiposter des messages (de rappels) aux membres.
326 * defaut : admin non restreint.
327 * groupes : 11,30,32,35.
328 */
329function autoriser_association_relancer_membres_dist($faire, $type, $id, $qui, $opt) {
330        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
331                return TRUE;
332        }
333        return is_in_groups($qui['id_auteur'], array(35,32,30,11)); // c'est le groupe 35 qui a le pouvoir de relancer les membres, le 32 celui de generer les listes et etiquettes... (est-ce que les relances font parti des messages envoyes par le secretaire ?), le 11 celui de reclamer les cotisations... (mais dans certaines associations il ne s'occupe pas de cet aspect administratif qui est laisse a la charge du secretaire avec qui il collabore sur ce point)
334}
335
336/**
337 * Recevoir un recu fiscal
338 * defaut : admin non restreint et le genereux donateur pour lui meme
339 * groupe : aucun.
340 */
341function autoriser_fiscaliser_membres($faire, $type, $id, $qui, $opt) {
342  return (($qui['statut']=='0minirezo' && !$qui['restreint']) || ($id==$GLOBALS['visiteur_session']['id_auteur']));
343}
344
345/// 4 /// dons a l'association
346
347/**
348 * Droits complets sur le module des dons
349 * defaut : admin non restreint.
350 * groupes : 10,11,40.
351 */
352function autoriser_association_gerer_dons_dist($faire, $type, $id, $qui, $opt) {
353        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
354                return TRUE;
355        }
356        return is_in_groups($qui['id_auteur'], array(40,11,10));
357}
358
359/**
360 * Editer les donations.
361 * groupes : 10,11,40,41.
362 * sinon, comme les cotisations
363 */
364function autoriser_association_editer_dons_dist($faire, $type, $id, $qui, $opt) {
365        if (is_in_groups($qui['id_auteur'], array(41,40,11,10)))
366                return TRUE;
367        return autoriser_association_ajouter_cotisation_dist($faire, $type, $id, $qui, $opt);
368}
369
370/**
371 * Exporter les donations.
372 * defaut : admin non restreint.
373 * groupes : 10,11,40,41,42.
374 */
375function autoriser_association_exporter_dons_dist($faire, $type, $id, $qui, $opt) {
376        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
377                return TRUE;
378        }
379        return is_in_groups($qui['id_auteur'], array(42,41,40,11,10));
380}
381
382/**
383 * Lister les donations.
384 * defaut : admin non restreint.
385 * groupes : 10,11,12,40,41,42,43.
386 */
387function autoriser_association_voir_dons_dist($faire, $type, $id, $qui, $opt) {
388        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
389                return TRUE;
390        }
391        return is_in_groups($qui['id_auteur'], array(43,42,41,40,12,11,10));
392}
393
394/// 5 /// ventes de l'association
395
396/**
397 * Droits complets sur le module des ventes.
398 * defaut : admin non restreint.
399 * groupes : 10,11,50.
400 */
401function autoriser_association_gerer_ventes_dist($faire, $type, $id, $qui, $opt) {
402        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
403                return TRUE;
404        }
405        return is_in_groups($qui['id_auteur'], array(50,11,10));
406}
407
408/**
409 * Editer les ventes.
410 * defaut : admin non restreint.
411 * groupes : 10,11,50,51.
412 */
413function autoriser_association_editer_ventes_dist($faire, $type, $id, $qui, $opt) {
414        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
415                return TRUE;
416        }
417        return is_in_groups($qui['id_auteur'], array(51,50,11,10));
418}
419
420/**
421 * Exporter les ventes.
422 * defaut : admin non restreint.
423 * groupes : 10,11,50,51,52.
424 */
425function autoriser_association_exporter_ventes_dist($faire, $type, $id, $qui, $opt) {
426        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
427                return TRUE;
428        }
429        return is_in_groups($qui['id_auteur'], array(52,51,50,11,10));
430}
431
432/**
433 * Lister les ventes.
434 * defaut : admin non restreint.
435 * groupes : 10,11,12,50,51,52,53.
436 */
437function autoriser_association_voir_ventes_dist($faire, $type, $id, $qui, $opt) {
438        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
439                return TRUE;
440        }
441        return is_in_groups($qui['id_auteur'], array(53,52,51,50,12,11,10));
442}
443
444/// 6 /// ressources associatives a disposition (prets ou locations)
445
446/**
447 * Droits complets sur le module des ressources.
448 * defaut : admin non restreint.
449 * groupes : 10,11,60.
450 */
451function autoriser_association_gerer_ressources_dist($faire, $type, $id, $qui, $opt) {
452        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
453                return TRUE;
454        }
455        return is_in_groups($qui['id_auteur'], array(60,11,10));
456}
457
458/**
459 * Editer les ressources.
460 * defaut : admin non restreint.
461 * groupes : 10,11,60,61.
462 */
463function autoriser_association_editer_ressources_dist($faire, $type, $id, $qui, $opt) {
464        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
465                return TRUE;
466        }
467        return is_in_groups($qui['id_auteur'], array(61,60,11,10));
468}
469
470/**
471 * Exporter les ressources.
472 * defaut : admin non restreint.
473 * groupes : 10,11,60,61,62.
474 */
475function autoriser_association_exporter_ressources_dist($faire, $type, $id, $qui, $opt) {
476        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
477                return TRUE;
478        }
479        return is_in_groups($qui['id_auteur'], array(62,61,60,11,10));
480}
481
482/**
483 * Lister les ressources.
484 * defaut : redacteurs.
485 * groupes : 10,11,12,50,51,52,53.
486 */
487function autoriser_association_voir_ressources_dist($faire, $type, $id, $qui, $opt) {
488        if ($qui['statut']=='0minirezo' || $qui['statut']=='1comite') {
489                return TRUE;
490        }
491        return is_in_groups($qui['id_auteur'], array(63,62,61,60,12,11,10));
492}
493
494/**
495 * Editer les prets/locations.
496 * defaut : admin non restreint.
497 * groupes : 10,11,60,61,64.
498 */
499function autoriser_association_editer_prets_dist($faire, $type, $id, $qui, $opt) {
500        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
501                return TRUE;
502        }
503        return is_in_groups($qui['id_auteur'], array(64,61,60,11,10));
504}
505
506/**
507 * Exporter les prets/locations.
508 * defaut : admin non restreint.
509 * groupes : 10,11,60,61,62,64,65.
510 */
511function autoriser_association_exporter_prets_dist($faire, $type, $id, $qui, $opt) {
512        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
513                return TRUE;
514        }
515        return is_in_groups($qui['id_auteur'], array(65,64,62,61,60,11,10));
516}
517
518/**
519 * Lister les prets/locations.
520 * defaut : admins non restreints.
521 * groupes : 10,11,12,60,61,62,63,64,65,66.
522 */
523function autoriser_association_voir_prets_dist($faire, $type, $id, $qui, $opt) {
524        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
525                return TRUE;
526        }
527        return is_in_groups($qui['id_auteur'], array(66,65,64,63,62,61,60,12,11,10));
528}
529
530/// 7 /// participations aux activites de l'association
531
532/**
533 * Droits complets sur le module des activites.
534 * defaut : admin non restreint.
535 * groupes : 10,11,70.
536 */
537function autoriser_association_gerer_activites_dist($faire, $type, $id, $qui, $opt) {
538        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
539                return TRUE;
540        }
541        return is_in_groups($qui['id_auteur'], array(70,11,10));
542}
543
544/**
545 * Lister les activites.
546 * defaut : redacteurs.
547 * groupes : 10,11,12,70,71,72,73.
548 */
549function autoriser_association_voir_activites_dist($faire, $type, $id, $qui, $opt) {
550        if ($qui['statut']=='0minirezo' || $qui['statut']=='1comite') {
551                return TRUE;
552        }
553        return is_in_groups($qui['id_auteur'], array(73,72,71,70,12,11,10));
554}
555
556/**
557 * Editer les inscriptions aux activites.
558 * defaut : admin non restreint.
559 * groupes : 10,11,70,71,74.
560 */
561function autoriser_association_editer_inscriptions_dist($faire, $type, $id, $qui, $opt) {
562        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
563                return TRUE;
564        }
565        return is_in_groups($qui['id_auteur'], array(74,71,70,11,10));
566}
567
568/**
569 * Exporter les inscriptions aux activites.
570 * defaut : admin non restreint.
571 * groupes : 10,11,60,71,72,74,75.
572 */
573function autoriser_association_exporter_inscriptions_dist($faire, $type, $id, $qui, $opt) {
574        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
575                return TRUE;
576        }
577        return is_in_groups($qui['id_auteur'], array(75,74,72,71,70,11,10));
578}
579
580/**
581 * Lister les inscripts aux activites.
582 * defaut : admins non restreints et membres inscrits a l'activite.
583 * groupes : 10,11,12,70,71,72,73,74,75,76.
584 */
585function autoriser_association_voir_inscriptions_dist($faire, $type, $id, $qui, $opt) {
586        if ( ($qui['statut']=='0minirezo' && !$qui['restreint']) OR sql_getfetsel('*', 'spip_asso_activites', 'id_evenement='.intval($id).' AND id_auteur='.intval($qui['id_auteur'])) ) {
587                return TRUE;
588        }
589        return is_in_groups($qui['id_auteur'], array(76,75,74,73,72,71,70,12,11,10));
590}
591
592/// 8 /// reserve
593
594/// 9 /// reserve
595
596
597?>
Note: See TracBrowser for help on using the repository browser.