Commit 570df1c9 by Victor Shnayder

Fix bugs, refactor, support lists of users

parent 3f654af7
......@@ -311,14 +311,19 @@ def instructor_dashboard(request, course_id):
track.views.server_track(request, 'list-beta-testers', {}, page='idashboard')
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)
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':
uname = request.POST['betausers']
users = request.POST['betausers']
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
......@@ -620,19 +625,11 @@ 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
def _add_or_remove_user_group(request, username_or_email, group, group_title, event_name, do_add):
"""
Implementation for both add and remove functions, to get rid of shared code. do_add is bool that determines which
to do.
"""
user = None
try:
......@@ -641,16 +638,41 @@ def add_user_to_group(request, username_or_email, group, group_title, event_name
else:
user = User.objects.get(username=username_or_email)
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
if user is not None:
msg = '<font color="green">Added {0} to {1} group = {2}</font>'.format(user, group_title, group.name)
user.groups.add(group)
track.views.server_track(request, 'add-{0} {1}'.format(event_name, user), {}, page='idashboard')
action = "Added" if do_add else "Removed"
prep = "to" if do_add else "from"
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
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):
"""
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
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 = '<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
return _add_or_remove_user_group(request, username_or_email, group, group_title, event_name, 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)
<p>
<input type="submit" name="action" value="List beta testers">
<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>
<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