From a2a8538b6127517d8151ddcf07b257c387e0653f Mon Sep 17 00:00:00 2001 From: Gabriel Detraz Date: Sat, 22 Aug 2015 03:38:35 +0200 Subject: [PATCH] Modernisation et reparation de controle charte MA pour le secretaire --- admin/controle_chartes_MA.py | 88 +++++++++---------- .../mail/template/missing_charte_MA/From/fr | 1 + .../mail/template/missing_charte_MA/README | 1 + .../template/missing_charte_MA/Subject/fr | 1 + gestion/mail/template/missing_charte_MA/To/fr | 1 + .../template/missing_charte_MA/X-Mailer/fr | 1 + .../mail/template/missing_charte_MA/body/fr | 14 +++ 7 files changed, 61 insertions(+), 46 deletions(-) create mode 100644 gestion/mail/template/missing_charte_MA/From/fr create mode 100644 gestion/mail/template/missing_charte_MA/README create mode 100644 gestion/mail/template/missing_charte_MA/Subject/fr create mode 100644 gestion/mail/template/missing_charte_MA/To/fr create mode 100644 gestion/mail/template/missing_charte_MA/X-Mailer/fr create mode 100644 gestion/mail/template/missing_charte_MA/body/fr diff --git a/admin/controle_chartes_MA.py b/admin/controle_chartes_MA.py index 7c45b899..fd47f81f 100755 --- a/admin/controle_chartes_MA.py +++ b/admin/controle_chartes_MA.py @@ -1,7 +1,8 @@ -#! /usr/bin/env python +#!/bin/bash /usr/scripts/python.sh # -*- coding: utf-8 -*- # Copyright (C) Stéphane Glondu, Alexandre Bos, Michel Blockelet +# Remanié en 2015 par Gabriel Détraz # Licence : GPLv2 u"""Ce script permet au secrétaire de repérer plus facilement les membres @@ -21,22 +22,23 @@ Les commandes sont : import sys, os, re -sys.path.append('/usr/scripts/gestion') -import config -import config.mails -from email_tools import send_email, parse_mail_template # Fonctions d'affichage -from affich_tools import coul, tableau, prompt, cprint +from gestion.affich_tools import coul, tableau, prompt, cprint + +from utils.sendmail import actually_sendmail +from gestion import mail # Importation de la base de données -from ldap_crans import crans_ldap, ann_scol -db = crans_ldap() +from lc_ldap import shortcuts # Lors des tests, on m'envoie tous les mails ! from socket import gethostname debug = False +# Conn à la db +ldap = shortcuts.lc_ldap_admin() + if __name__ == '__main__': if len(sys.argv) > 3 and sys.argv[-2] == '--debug': debug = sys.argv[-1] @@ -56,42 +58,37 @@ def _controle_interactif_adherents(liste): restant = len(liste) if restant == 0: return 0, 0 - + cprint(u'\nContrôle des membre actifs' , 'cyan') cprint(u"Pour chaque entrée, il faut taper 'o' ou 'n' (défaut=n).") cprint(u"Une autre réponse entraîne l'interruption du processus.") cprint(u"Le format est [nb_restant] Nom, Prénom (aid).") cprint(u"") - + nb = 0 for a in liste: - valeur = a.charteMA() + valeur = a['charteMA'] if valeur: suggestion = 'o' else: suggestion = 'n' ok = prompt(u'[%3d] %s, %s (%s) ?' - % (restant, a.nom(), a.prenom(), a.id()), suggestion, '').lower() + % (restant, a['nom'][0], a['prenom'][0], a['aid'][0]), suggestion, '').lower() restant -= 1 if ok == 'o': nb += 1 - if a.charteMA() == False : - modifiable = db.search('aid=%s' % a.id(), 'w')['adherent'][0] - if modifiable._modifiable: - modifiable.charteMA(True) - cprint(modifiable.save()) - else: - cprint(u'Adhérent %s locké, réessayer plus tard' % modifiable.Nom(), 'rouge') - elif ok == 'n': - if a.charteMA() == True: - modifiable = db.search('aid=%s' % a.id(), 'w')['adherent'][0] - if modifiable._modifiable: - modifiable.charteMA(False) - cprint(modifiable.save()) - else: - cprint(u'Adhérent %s locké, réessayer plus tard' % modifiable.Nom(), 'rouge') - else: - cprint(u'Arrêt du contrôle %s des membres actifs' % explicite, 'rouge') + if a['charteMA'] != True : + modifiable = ldap.search(u'aid=%s' % a['aid'][0], mode='rw') + try: + with modifiable[0] as adh: + adh['charteMA']=True + adh.history_gen() + adh.save() + cprint(u'Controle OK') + except: + cprint(u'Adhérent %s locké, réessayer plus tard' % a['nom'][0], 'rouge') + elif ok != 'n': + cprint(u'Arrêt du contrôle des membres actifs', 'rouge') break return nb, len(liste)-nb @@ -99,12 +96,12 @@ def _controle_interactif_adherents(liste): def liste_charte_nok(): """Retourne la liste des membres actifs qui n'ont pas signé la charte.""" - liste_actifs = db.search('droits=*')['adherent'] + liste_actifs = ldap.search(u'droits=*') liste_nok = [] for adh in liste_actifs: - if (len([droit for droit in adh.droits() + if (len([droit for droit in adh['droits'] if droit not in ['Multimachines', 'Webradio']]) > 0 - and not adh.charteMA()): + and not adh['charteMA']): liste_nok.append(adh) return liste_nok @@ -113,14 +110,14 @@ def controle_interactif(): Procédure interactive de contrôle des chartes de membres actifs. """ todo_list = liste_charte_nok() - + # Tri de la liste des adhérents selon nom, prénom # Ça peut se faire plus facilement en Python 2.4 avec l'argument key - todo_list.sort(lambda x, y: cmp((x.nom(), x.prenom()), (y.nom(), y.prenom()))) + todo_list.sort(lambda x, y: cmp((x['nom'][0], x['prenom'][0]), (y['nom'][0], y['prenom'][0]))) # Zou ! ok, nok = _controle_interactif_adherents(todo_list) - + cprint(u'\nRécapitulatif des nouveaux contrôles :', 'violet') liste = [[u'membres actifs', str(ok), str(nok)]] cprint(tableau(liste, @@ -132,20 +129,19 @@ def spammer(): todo_list = liste_charte_nok() if todo_list: - from smtplib import SMTP - connexion = SMTP() - if gethostname().split(".")[0] == 'redisdead': - connexion.connect("localhost") - else: connexion.connect("redisdead.crans.org") print "Envoi des mails de rappel pour les chartes des membres actifs" - + for adh in todo_list: - to = adh.email() + to = adh['mail'][0] print to if not debug: - data = config.mails.txt_charte_MA % {'From' : u"ca@crans.org", 'To' : to} - connexion.sendmail("ca@crans.org",to,data.encode('utf-8')) - + From = u"ca@crans.org" + data=mail.generate('missing_charte_MA', { + 'To': to, + 'From': From, + }) + actually_sendmail(u'ca@crans.org', (to,), data) + def __usage(message=None): """ Comment ça marche ? """ cprint(__doc__ % { 'prog': sys.argv[0] }) @@ -163,7 +159,7 @@ if __name__ == '__main__' : __usage(u'Mauvaise utilisation de liste') print "Liste des membres actifs n'ayant pas signé la charte :" for adh in liste_charte_nok(): - print adh.Nom() + print unicode(adh['prenom'][0]) + u" " + unicode(adh['nom'][0]) elif sys.argv[1] == 'modif': if len(sys.argv) != 2: __usage(u'Mauvaise utilisation de modif') diff --git a/gestion/mail/template/missing_charte_MA/From/fr b/gestion/mail/template/missing_charte_MA/From/fr new file mode 100644 index 00000000..3ff8d049 --- /dev/null +++ b/gestion/mail/template/missing_charte_MA/From/fr @@ -0,0 +1 @@ +Le bureau du Crans diff --git a/gestion/mail/template/missing_charte_MA/README b/gestion/mail/template/missing_charte_MA/README new file mode 100644 index 00000000..f9a30aa8 --- /dev/null +++ b/gestion/mail/template/missing_charte_MA/README @@ -0,0 +1 @@ +Envoyé à l'adhérent lorsque son impression est terminée diff --git a/gestion/mail/template/missing_charte_MA/Subject/fr b/gestion/mail/template/missing_charte_MA/Subject/fr new file mode 100644 index 00000000..466d10ae --- /dev/null +++ b/gestion/mail/template/missing_charte_MA/Subject/fr @@ -0,0 +1 @@ +[Crans] Charte membre actif manquante diff --git a/gestion/mail/template/missing_charte_MA/To/fr b/gestion/mail/template/missing_charte_MA/To/fr new file mode 100644 index 00000000..38476730 --- /dev/null +++ b/gestion/mail/template/missing_charte_MA/To/fr @@ -0,0 +1 @@ +{{To}} diff --git a/gestion/mail/template/missing_charte_MA/X-Mailer/fr b/gestion/mail/template/missing_charte_MA/X-Mailer/fr new file mode 100644 index 00000000..f5d9c869 --- /dev/null +++ b/gestion/mail/template/missing_charte_MA/X-Mailer/fr @@ -0,0 +1 @@ +{{ mailer }} diff --git a/gestion/mail/template/missing_charte_MA/body/fr b/gestion/mail/template/missing_charte_MA/body/fr new file mode 100644 index 00000000..f11e37df --- /dev/null +++ b/gestion/mail/template/missing_charte_MA/body/fr @@ -0,0 +1,14 @@ +Bonjour, + +Il semble que tu es membre actif du CRANS et que tu n'as pas +signé la charte des membres actifs. Si tu n'es pas membre actif +ou si tu as signé la charte des membres actifs, merci de nous le +signaler. Sinon, il faudrait signer la charte et nous la rendre +rapidement. Tu peux l'imprimer à partir du fichier suivant : + +https://wiki.crans.org/CransAdministratif?action=AttachFile&do=get&target=charte_ma.pdf + +Merci par avance, + +-- +Le bureau du CRANS