0
|
1 #!/usr/bin/env python2.7 |
|
2 # -*- coding: utf-8 -*- |
|
3 |
|
4 from collections import namedtuple |
|
5 from twisted.internet import defer |
|
6 from libervia.server.constants import Const as C |
|
7 from sat.core.i18n import D_ |
|
8 from sat.tools import config |
|
9 from sat.tools.common import email |
|
10 from sat.core import exceptions |
|
11 from sat.core.log import getLogger |
|
12 |
|
13 log = getLogger(__name__) |
|
14 |
6
|
15 name = "association_membership" |
|
16 template = "association/membership.html" |
0
|
17 |
|
18 FIELDS = ( |
|
19 'name', |
|
20 'firstname', |
|
21 'address', |
|
22 'email', |
|
23 'jid', |
|
24 'subscription', |
|
25 'reference', |
|
26 'comment', |
|
27 'mailing_list', |
|
28 'documents_read', |
|
29 ) |
|
30 REQUIRED = ('name', 'firstname', 'address', 'email', 'subscription') |
|
31 FormData = namedtuple("FormData", FIELDS) |
|
32 |
6
|
33 SUBJECT_ADMIN = D_("New subscription to the association") |
|
34 BODY_ADMIN = D_("""\ |
0
|
35 New subscription received: |
|
36 |
|
37 {fields_list}""").format( |
6
|
38 fields_list="\n".join("- {0}: {{{0}}}".format(f) for f in FIELDS) |
0
|
39 ) |
|
40 |
6
|
41 SUBJECT = D_("Your association membership request") |
|
42 BODY = D_("""\ |
0
|
43 Hello {firstname}, |
|
44 |
|
45 you request to join the "Salut à Toi" association has been well received. |
|
46 Thank you and welcome to the SàT community. |
|
47 |
|
48 You can contact us at contact""" |
|
49 # we split the address to avoid |
|
50 # it being recognized too easily by spam bots |
6
|
51 + '@' + 'salut-a-toi' + '.org' |
|
52 """ |
0
|
53 or on the official XMPP chat room: |
|
54 xmpp: sat@chat.jabberfr.org |
|
55 web: https://chat.jabberfr.org/converse.js/sat@chat.jabberfr.org |
|
56 |
|
57 The Salut à Toi team |
|
58 """) |
|
59 |
|
60 WARNING_MSG_NOT_READ = D_( |
6
|
61 "You must have read the documents to validate your membership request") |
0
|
62 WARNING_MSG_MISSING_FIELDS = D_( |
6
|
63 "The form you posted is not complete, we can't validate this membership request.\n" |
|
64 "Please fill all the required fields, thank you!") |
0
|
65 |
|
66 @defer.inlineCallbacks |
|
67 def on_data_post(self, request): |
|
68 data = FormData(*self.getPostedData(request, FIELDS, raise_on_missing=False)) |
|
69 if any(not getattr(data, f) for f in REQUIRED): |
6
|
70 log.warning("missing data fields:\n{data}".format(data=data)) |
0
|
71 raise exceptions.DataError(WARNING_MSG_MISSING_FIELDS) |
|
72 if not C.bool(data.documents_read or C.BOOL_FALSE): |
6
|
73 log.warning("documents_read has not been checked:\n{data}".format(data=data)) |
0
|
74 raise exceptions.DataError(WARNING_MSG_NOT_READ) |
|
75 addresses = config.getConfig( |
|
76 self.host.main_conf, |
|
77 None, |
|
78 "email_admins_list", |
|
79 default=Exception) |
|
80 yield email.sendEmail( |
|
81 self.host.main_conf, |
|
82 addresses, |
|
83 SUBJECT_ADMIN, |
|
84 BODY_ADMIN.format(**data._asdict()), |
|
85 ) |
|
86 yield email.sendEmail( |
|
87 self.host.main_conf, |
|
88 data.email, |
|
89 SUBJECT, |
|
90 BODY.format(**data._asdict()), |
|
91 ) |
|
92 |