[config,{gest,ldap}_crans,gen_confs/] Modifications systeme droits

* gest_crans.py :: Dialogue permettant de desabonner les gens des MLs lorsqu'on
leur enleve des droits (les gens ne sont pas desabonnes automatiquement de
certaines MLs a l'enlevement des droits, il propose de le faire quand meme)
=> gest_crans.complexite++
 * config.py :: Deplacement des definitions droits <-> {MLs, groupes unix}
depuis droits.py
 * droits.py :: Ajout de fonctionnalites :
  * -d pour supprimer certaines adresses mail de certaines MLs
  * -u pour afficher les MLs inscrites non-automatiquement a certaines MLs
 * ldap_crans.py :: Les droits ne contiennent plus d'accents depuis un moment

darcs-hash:20100319001432-ddb99-f0d337d161b8d95e6b6300cd53efbae8b9a7e834.gz
This commit is contained in:
Michel Blockelet 2010-03-19 01:14:32 +01:00
parent 61302647c9
commit 392006237d
5 changed files with 261 additions and 107 deletions

View file

@ -564,13 +564,64 @@ def set_droits(adher):
annul, result = dialog(arg)
if annul: return 1
# Traitement
# Dans le cas ou l'utilisateur qui modiifie n'est pas nounou
### Traitement
# Dans le cas où l'utilisateur qui modifie n'est pas nounou, on ajoute les
# droits critiques que l'adhérent possède déjà
if not isadm:
for key in [d for d in droits_critiques if key in adher.droits()]:
result.append(key.encode("ISO-8859-15"))
# On regarde les MLs auxquelles l'adhérent était inscrit grâce à ses
# droits et auxquelles il ne sera pas désabonné
# (MLs à débonnement manuel)
droits_mls = config.droits_mailing_listes
# On nettoie la sortie de dialog
new = []
for droit in result:
droit = droit.strip()
if droit == '': continue
if droit not in droits_possibles:
raise ValueError(u'Droit %s incorrect' % droit)
new.append(droit)
# Droits supprimés
diff = [droit for droit in adher.droits()
if droit not in new]
# Droits supprimés qui abonnaient à une ML
old_mls = []
for droit in diff:
old_mls.extend([m for m in droits_mls
if m[0] == '+' and droit in droits_mls[m]
and m not in old_mls])
# MLs pour lesquelles un autre droit abonne encore
for droit in new:
for ml in [m for m in old_mls if droit in droits_mls[m]]:
old_mls.pop(ml)
# Choix des MLs auxquelles débonner
if old_mls:
arg = u'--title "Mailing-listes dont désabonner %s" ' % adher.Nom()
arg += u'--separate-output '
arg += u'--checklist "%s a été abonné automatiquement' % adher.Nom()
arg += u' aux MLs suivantes lorsqu\'il a obtenu ses droits." 0 0 0 '
for ml in old_mls:
arg += u'"%s" " " "" ' % ml[1:]
annulmls, resultmls = dialog(arg)
if annulmls: resultmls = []
del_mls = []
for resml in resultmls:
if resml == '': continue
del_mls.append(resml.strip())
if del_mls:
db.services_to_restart('desabonner_ml',
map(lambda m: "%s$%s" % (adher.mail(), m), resultmls))
# On modifie !
if not isadm:
for key in droits_critiques:
if key in adher.droits():
result.append(key.encode("ISO-8859-15"))
adher.droits(result, light=True)
else:
adher.droits(result)