Commit 570df1c9 by Victor Shnayder

Fix bugs, refactor, support lists of users

parent 3f654af7
...@@ -311,14 +311,19 @@ def instructor_dashboard(request, course_id): ...@@ -311,14 +311,19 @@ def instructor_dashboard(request, course_id):
track.views.server_track(request, 'list-beta-testers', {}, page='idashboard') track.views.server_track(request, 'list-beta-testers', {}, page='idashboard')
elif action == 'Add beta testers': elif action == 'Add beta testers':
uname = request.POST['betausers'] users = request.POST['betausers']
log.debug("users: {0!r}".format(users))
group = get_beta_group(course) group = get_beta_group(course)
msg += add_user_to_group(request, uname, group, 'beta testers', 'beta-tester') for username_or_email in users.split():
msg += "<p>{0}</p>".format(
add_user_to_group(request, username_or_email, group, 'beta testers', 'beta-tester'))
elif action == 'Remove beta testers': elif action == 'Remove beta testers':
uname = request.POST['betausers'] users = request.POST['betausers']
group = get_beta_group(course) group = get_beta_group(course)
msg += remove_user_from_group(request, uname, group, 'beta testers', 'beta-tester') for username_or_email in users.split():
msg += "<p>{0}</p>".format(
remove_user_from_group(request, username_or_email, group, 'beta testers', 'beta-tester'))
#---------------------------------------- #----------------------------------------
# forum administration # forum administration
...@@ -620,19 +625,11 @@ def _group_members_table(group, title, course_id): ...@@ -620,19 +625,11 @@ def _group_members_table(group, title, course_id):
datatable['title'] = '{0} in course {1}'.format(title, course_id) datatable['title'] = '{0} in course {1}'.format(title, course_id)
return datatable 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: def _add_or_remove_user_group(request, username_or_email, group, group_title, event_name, do_add):
html to insert in the message field """
Implementation for both add and remove functions, to get rid of shared code. do_add is bool that determines which
to do.
""" """
user = None user = None
try: try:
...@@ -641,16 +638,41 @@ def add_user_to_group(request, username_or_email, group, group_title, event_name ...@@ -641,16 +638,41 @@ def add_user_to_group(request, username_or_email, group, group_title, event_name
else: else:
user = User.objects.get(username=username_or_email) user = User.objects.get(username=username_or_email)
except User.DoesNotExist: except User.DoesNotExist:
msg = '<font color="red">Error: unknown username "{0}"</font>'.format(uname) msg = '<font color="red">Error: unknown username or email "{0}"</font>'.format(username_or_email)
user = None user = None
if user is not None: if user is not None:
msg = '<font color="green">Added {0} to {1} group = {2}</font>'.format(user, group_title, group.name) action = "Added" if do_add else "Removed"
user.groups.add(group) prep = "to" if do_add else "from"
track.views.server_track(request, 'add-{0} {1}'.format(event_name, user), {}, page='idashboard') msg = '<font color="green">{action} {0} {prep} {1} group = {2}</font>'.format(user, group_title, group.name,
action=action, prep=prep)
if do_add:
user.groups.add(group)
else:
user.groups.remove(group)
event = "add" if do_add else "remove"
track.views.server_track(request, '{event}-{0} {1}'.format(event_name, user, event=event),
{}, page='idashboard')
return msg return msg
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
"""
return _add_or_remove_user_group(request, username_or_email, group, group_title, event_name, True)
def remove_user_from_group(request, username_or_email, group, group_title, event_name): 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. Look up the given user by username (if no '@') or email (otherwise), and remove them from group.
...@@ -665,22 +687,7 @@ def remove_user_from_group(request, username_or_email, group, group_title, event ...@@ -665,22 +687,7 @@ def remove_user_from_group(request, username_or_email, group, group_title, event
Returns: Returns:
html to insert in the message field html to insert in the message field
""" """
user = None return _add_or_remove_user_group(request, username_or_email, group, group_title, event_name, False)
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 = '<font color="red">Error: unknown username "{0}"</font>'.format(uname)
user = None
if user is not None:
msg = '<font color="green">Removed {0} from {1} group = {2}</font>'.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): def get_student_grade_summary_data(request, course, course_id, get_grades=True, get_raw_scores=False, use_offline=False):
......
...@@ -268,7 +268,8 @@ function goto( mode) ...@@ -268,7 +268,8 @@ function goto( mode)
<p> <p>
<input type="submit" name="action" value="List beta testers"> <input type="submit" name="action" value="List beta testers">
<p> <p>
Enter usernames or emails for students who should be beta-testers. They will get to see course materials early, as configured via the <tt>days_early_for_beta</tt> option in the course policy. Enter usernames or emails for students who should be beta-testers, one per line. They will get to
see course materials early, as configured via the <tt>days_early_for_beta</tt> option in the course policy.
</p> </p>
<p> <p>
<textarea cols="50" row="30" name="betausers"></textarea> <textarea cols="50" row="30" name="betausers"></textarea>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment