From 55f2cbc92faf64f526f48ea40a3fcda357f26ac4 Mon Sep 17 00:00:00 2001 From: cahrens Date: Tue, 6 Aug 2013 15:53:07 -0400 Subject: [PATCH] Split up event notification, make sorting on username work. --- cms/djangoapps/course_creators/admin.py | 52 +++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/cms/djangoapps/course_creators/admin.py b/cms/djangoapps/course_creators/admin.py index 0f9a189bb7..8256c5e8bf 100644 --- a/cms/djangoapps/course_creators/admin.py +++ b/cms/djangoapps/course_creators/admin.py @@ -2,13 +2,15 @@ django admin page for the course creators table """ -from course_creators.models import CourseCreator, update_creator_state +from course_creators.models import CourseCreator, update_creator_state, send_user_notification, send_admin_notification from course_creators.views import update_course_creator_group from ratelimitbackend import admin from django.conf import settings from django.dispatch import receiver from mitxmako.shortcuts import render_to_string +from django.core.mail import send_mail +from smtplib import SMTPException import logging @@ -28,12 +30,12 @@ class CourseCreatorAdmin(admin.ModelAdmin): """ # Fields to display on the overview page. - list_display = ['user', get_email, 'state', 'state_changed', 'note'] - readonly_fields = ['user', 'state_changed'] + list_display = ['username', get_email, 'state', 'state_changed', 'note'] + readonly_fields = ['username', 'state_changed'] # Controls the order on the edit form (without this, read-only fields appear at the end). fieldsets = ( (None, { - 'fields': ['user', 'state', 'state_changed', 'note'] + 'fields': ['username', 'state', 'state_changed', 'note'] }), ) # Fields that filtering support @@ -43,6 +45,16 @@ class CourseCreatorAdmin(admin.ModelAdmin): # Turn off the action bar (we have no bulk actions) actions = None + def username(self, inst): + """ + Returns the username for a given user. + + Implemented to make sorting by username instead of by user object. + """ + return inst.user.username + + username.admin_order_field = 'user__username' + def has_add_permission(self, request): return False @@ -70,6 +82,12 @@ def update_creator_group_callback(sender, **kwargs): updated_state = kwargs['state'] update_course_creator_group(kwargs['caller'], user, updated_state == CourseCreator.GRANTED) + +@receiver(send_user_notification, sender=CourseCreator) +def send_user_notification_callback(sender, **kwargs): + user = kwargs['user'] + updated_state = kwargs['state'] + studio_request_email = settings.MITX_FEATURES.get('STUDIO_REQUEST_EMAIL','') context = {'studio_request_email': studio_request_email} @@ -88,3 +106,29 @@ def update_creator_group_callback(sender, **kwargs): user.email_user(subject, message, studio_request_email) except: log.warning("Unable to send course creator status e-mail to %s", user.email) + + +@receiver(send_admin_notification, sender=CourseCreator) +def send_admin_notification_callback(sender, **kwargs): + """ + Callback for notifying admin of a user in the 'pending' state. + """ + user = kwargs['user'] + + studio_request_email = settings.MITX_FEATURES.get('STUDIO_REQUEST_EMAIL','') + context = {'user_name': user.username, 'user_email': user.email} + + subject = render_to_string('emails/course_creator_admin_subject.txt', context) + subject = ''.join(subject.splitlines()) + message = render_to_string('emails/course_creator_admin_user_pending.txt', context) + + try: + send_mail( + subject, + message, + studio_request_email, + [studio_request_email], + fail_silently=False + ) + except SMTPException: + log.warning("Failure sending 'pending state' e-mail for %s to %s", user.email, studio_request_email)