diff --git a/lms/djangoapps/instructor/views.py b/lms/djangoapps/instructor/views.py
index 1519d876bb..99d96cad95 100644
--- a/lms/djangoapps/instructor/views.py
+++ b/lms/djangoapps/instructor/views.py
@@ -250,11 +250,7 @@ def instructor_dashboard(request, course_id):
elif 'List course staff' in action:
group = get_staff_group(course)
msg += 'Staff group = {0}'.format(group.name)
- log.debug('staffgrp={0}'.format(group.name))
- uset = group.user_set.all()
- datatable = {'header': ['Username', 'Full name']}
- datatable['data'] = [[x.username, x.profile.name] for x in uset]
- datatable['title'] = 'List of Staff in course {0}'.format(course_id)
+ datatable = _group_members_table(group, "List of Staff", course_id)
track.views.server_track(request, 'list-staff', {}, page='idashboard')
elif 'List course instructors' in action and request.user.is_staff:
@@ -269,17 +265,8 @@ def instructor_dashboard(request, course_id):
elif action == 'Add course staff':
uname = request.POST['staffuser']
- try:
- user = User.objects.get(username=uname)
- except User.DoesNotExist:
- msg += 'Error: unknown username "{0}"'.format(uname)
- user = None
- if user is not None:
- group = get_staff_group(course)
- msg += 'Added {0} to staff group = {1}'.format(user, group.name)
- log.debug('staffgrp={0}'.format(group.name))
- user.groups.add(group)
- track.views.server_track(request, 'add-staff {0}'.format(user), {}, page='idashboard')
+ group = get_staff_group(course)
+ msg += add_user_to_group(request, uname, group, 'staff', 'staff')
elif action == 'Add instructor' and request.user.is_staff:
uname = request.POST['instructor']
@@ -297,17 +284,8 @@ def instructor_dashboard(request, course_id):
elif action == 'Remove course staff':
uname = request.POST['staffuser']
- try:
- user = User.objects.get(username=uname)
- except User.DoesNotExist:
- msg += 'Error: unknown username "{0}"'.format(uname)
- user = None
- if user is not None:
- group = get_staff_group(course)
- msg += 'Removed {0} from staff group = {1}'.format(user, group.name)
- log.debug('staffgrp={0}'.format(group.name))
- user.groups.remove(group)
- track.views.server_track(request, 'remove-staff {0}'.format(user), {}, page='idashboard')
+ group = get_staff_group(course)
+ msg += remove_user_from_group(request, uname, group, 'staff', 'staff')
elif action == 'Remove instructor' and request.user.is_staff:
uname = request.POST['instructor']
@@ -334,32 +312,13 @@ def instructor_dashboard(request, course_id):
elif action == 'Add beta testers':
uname = request.POST['betausers']
- try:
- user = User.objects.get(username=uname)
- except User.DoesNotExist:
- msg += 'Error: unknown username "{0}"'.format(uname)
- user = None
- if user is not None:
- group = get_beta_group(course)
- msg += 'Added {0} to beta testers group = {1}'.format(user, group.name)
- log.debug('staffgrp={0}'.format(group.name))
- user.groups.add(group)
- track.views.server_track(request, 'add-beta-tester {0}'.format(user), {}, page='idashboard')
+ group = get_beta_group(course)
+ msg += add_user_to_group(request, uname, group, 'beta testers', 'beta-tester')
elif action == 'Remove beta testers':
uname = request.POST['betausers']
- try:
- user = User.objects.get(username=uname)
- except User.DoesNotExist:
- msg += 'Error: unknown username "{0}"'.format(uname)
- user = None
- if user is not None:
- group = get_beta_group(course)
- msg += 'Removed {0} from beta tester group = {1}'.format(user, group.name)
- log.debug('staffgrp={0}'.format(group.name))
- user.groups.remove(group)
- track.views.server_track(request, 'remove-beta-tester {0}'.format(user), {}, page='idashboard')
-
+ group = get_beta_group(course)
+ msg += remove_user_from_group(request, uname, group, 'beta testers', 'beta-tester')
#----------------------------------------
# forum administration
@@ -661,6 +620,67 @@ def _group_members_table(group, title, course_id):
datatable['title'] = '{0} in course {1}'.format(title, course_id)
return datatable
+def add_user_to_group(request, username_or_email, group, group_title, event_name):
+ """
+ Look up the given user by username (if no '@') or email (otherwise), and add them to group.
+
+ Arguments:
+ request: django request--used for tracking log
+ username_or_email: who to add. Decide if it's an email by presense of an '@'
+ group: django group object
+ group_title: what to call this group in messages to user--e.g. "beta-testers".
+ event_name: what to call this event when logging to tracking logs.
+
+ Returns:
+ html to insert in the message field
+ """
+ user = None
+ try:
+ if '@' in username_or_email:
+ user = User.objects.get(email=username_or_email)
+ else:
+ user = User.objects.get(username=username_or_email)
+ except User.DoesNotExist:
+ msg = 'Error: unknown username "{0}"'.format(uname)
+ user = None
+
+ if user is not None:
+ msg = 'Added {0} to {1} group = {2}'.format(user, group_title, group.name)
+ user.groups.add(group)
+ track.views.server_track(request, 'add-{0} {1}'.format(event_name, user), {}, page='idashboard')
+
+ return msg
+
+def remove_user_from_group(request, username_or_email, group, group_title, event_name):
+ """
+ Look up the given user by username (if no '@') or email (otherwise), and remove them from group.
+
+ Arguments:
+ request: django request--used for tracking log
+ username_or_email: who to remove. Decide if it's an email by presense of an '@'
+ group: django group object
+ group_title: what to call this group in messages to user--e.g. "beta-testers".
+ event_name: what to call this event when logging to tracking logs.
+
+ Returns:
+ html to insert in the message field
+ """
+ user = None
+ try:
+ if '@' in username_or_email:
+ user = User.objects.get(email=username_or_email)
+ else:
+ user = User.objects.get(username=username_or_email)
+ except User.DoesNotExist:
+ msg = 'Error: unknown username "{0}"'.format(uname)
+ user = None
+
+ if user is not None:
+ msg = 'Removed {0} from {1} group = {2}'.format(user, group_title, group.name)
+ user.groups.remove(group)
+ track.views.server_track(request, 'remove-{0} {1}'.format(event_name, user), {}, page='idashboard')
+
+ return msg
def get_student_grade_summary_data(request, course, course_id, get_grades=True, get_raw_scores=False, use_offline=False):
diff --git a/lms/templates/courseware/instructor_dashboard.html b/lms/templates/courseware/instructor_dashboard.html
index 04248336e5..b12d17dced 100644
--- a/lms/templates/courseware/instructor_dashboard.html
+++ b/lms/templates/courseware/instructor_dashboard.html
@@ -36,6 +36,9 @@ table.stat_table td {
a.selectedmode { background-color: yellow; }
+textarea {
+ height: 200px;
+}