Split up event notification, make sorting on username work.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user