From 23a5df5edaf8cff9492d947eed2dd4d568959cbb Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Fri, 30 Sep 2011 09:16:21 +0100 Subject: [PATCH] Send emails out to users on major Group changes --- .../templates/groups/email/accepted.html | 0 .../templates/groups/email/accepted.txt | 0 .../templates/groups/email/rejected.html | 0 .../templates/groups/email/rejected.txt | 0 .../templates/groups/email/request.html | 0 app/groups/templates/groups/email/request.txt | 0 app/groups/utils.py | 15 ++++++++ app/groups/views.py | 38 ++++++++++++------- 8 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 app/groups/templates/groups/email/accepted.html create mode 100644 app/groups/templates/groups/email/accepted.txt create mode 100644 app/groups/templates/groups/email/rejected.html create mode 100644 app/groups/templates/groups/email/rejected.txt create mode 100644 app/groups/templates/groups/email/request.html create mode 100644 app/groups/templates/groups/email/request.txt create mode 100644 app/groups/utils.py diff --git a/app/groups/templates/groups/email/accepted.html b/app/groups/templates/groups/email/accepted.html new file mode 100644 index 0000000..e69de29 diff --git a/app/groups/templates/groups/email/accepted.txt b/app/groups/templates/groups/email/accepted.txt new file mode 100644 index 0000000..e69de29 diff --git a/app/groups/templates/groups/email/rejected.html b/app/groups/templates/groups/email/rejected.html new file mode 100644 index 0000000..e69de29 diff --git a/app/groups/templates/groups/email/rejected.txt b/app/groups/templates/groups/email/rejected.txt new file mode 100644 index 0000000..e69de29 diff --git a/app/groups/templates/groups/email/request.html b/app/groups/templates/groups/email/request.html new file mode 100644 index 0000000..e69de29 diff --git a/app/groups/templates/groups/email/request.txt b/app/groups/templates/groups/email/request.txt new file mode 100644 index 0000000..e69de29 diff --git a/app/groups/utils.py b/app/groups/utils.py new file mode 100644 index 0000000..3877967 --- /dev/null +++ b/app/groups/utils.py @@ -0,0 +1,15 @@ +from django.conf import settings +from django.core.mail import EmailMultiAlternatives +from django.template.loader import get_template +from django.template import Context + +def send_group_mail(request, to_email, subject, email_text_template, email_html_template): + """Sends a email to a group of people using a standard layout""" + + # Mail the admins to inform them of a new request + ctx = Context({'request': obj}) + to_email = group.admins.values_list('email', flat=True) + msg = EmailMultiAlternatives(subject, get_template(email_text_template).render(ctx), getattr(settings, 'SERVER_EMAIL', 'auth@pleaseignore.com'), to_email) + msg.attach_alternative(get_template(email_html_template).render(ctx), 'text/html') + mag.send(fail_silently=True) + diff --git a/app/groups/views.py b/app/groups/views.py index e118319..8964565 100644 --- a/app/groups/views.py +++ b/app/groups/views.py @@ -62,7 +62,7 @@ def group_list(request): @login_required -def create_request(request, groupid): +def create_request(request, groupid, email_text_template='email/request.txt', email_html_template='email/request.html'): group = get_object_or_404(Group, id=groupid) @@ -91,7 +91,11 @@ def create_request(request, groupid): obj.group = group obj.changed_by = request.user obj.save() + messages.add_message(request, messages.INFO, "You membership request has been created.") + to_email = obj.group.groupinformation.admins.values_list('email', flat=True) + send_group_email(obj, to_email, '[Auth] %s has requested membership to %s' % (user.username, group.name), email_text_template, email_html_template) + return HttpResponseRedirect(reverse('groups.views.group_list')) # Redirect after POST else: form = GroupRequestForm() # An unbound form @@ -100,29 +104,35 @@ def create_request(request, groupid): @login_required -def accept_request(request, requestid): +def accept_request(request, requestid, email_text_template='email/accepted.txt', email_html_template='email/accepted.html'): - requestobj = get_object_or_404(GroupRequest, id=requestid) + obj = get_object_or_404(GroupRequest, id=requestid) - if request.user in requestobj.group.groupinformation.admins.all() or request.user.is_superuser: - requestobj.status = REQUEST_ACCEPTED - requestobj.user.groups.add(requestobj.group) - requestobj.changed_by = request.user - requestobj.save() + if request.user in obj.group.groupinformation.admins.all() or request.user.is_superuser: + obj.status = REQUEST_ACCEPTED + obj.user.groups.add(obj.group) + obj.changed_by = request.user + obj.save() update_user_access.delay(requestobj.user.id) + messages.add_message(request, messages.INFO, "%s has been accepted into %s" % (requestobj.user, requestobj.group)) + send_group_email(obj, [obj.user.email], '[Auth] Your membership to %s has been accepted.' % group.name, email_text_template, email_html_template) + return HttpResponseRedirect(reverse('groups.views.admin_group', args=[requestobj.group.id])) @login_required -def reject_request(request, requestid): +def reject_request(request, requestid, email_text_template='email/rejected.txt', email_html_template='email/rejected.html'): + + obj = get_object_or_404(GroupRequest, id=requestid) + if request.user in obj.group.groupinformation.admins.all() or request.user.is_superuser: + obj.status = REQUEST_REJECTED + obj.changed_by = request.user + obj.save() - requestobj = get_object_or_404(GroupRequest, id=requestid) - if request.user in requestobj.group.groupinformation.admins.all() or request.user.is_superuser: - requestobj.status = REQUEST_REJECTED - requestobj.changed_by = request.user - requestobj.save() messages.add_message(request, messages.INFO, "%s has been rejected for %s" % (requestobj.user, requestobj.group)) + send_group_email(obj, [obj.user.email], '[Auth] Your membership to %s has been rejected.' % group.name, email_text_template, email_html_template) + return HttpResponseRedirect(reverse('groups.views.admin_group', args=[requestobj.group.id]))