Commit 3f654af7 by Victor Shnayder

Refactor common code, fix view a bit

remaining:
 * support putting multiple names / emails in the big box we now have
parent 1a5fc065
......@@ -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 += '<font color="red">Error: unknown username "{0}"</font>'.format(uname)
user = None
if user is not None:
group = get_staff_group(course)
msg += '<font color="green">Added {0} to staff group = {1}</font>'.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 += '<font color="red">Error: unknown username "{0}"</font>'.format(uname)
user = None
if user is not None:
group = get_staff_group(course)
msg += '<font color="green">Removed {0} from staff group = {1}</font>'.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 += '<font color="red">Error: unknown username "{0}"</font>'.format(uname)
user = None
if user is not None:
group = get_beta_group(course)
msg += '<font color="green">Added {0} to beta testers group = {1}</font>'.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 += '<font color="red">Error: unknown username "{0}"</font>'.format(uname)
user = None
if user is not None:
group = get_beta_group(course)
msg += '<font color="green">Removed {0} from beta tester group = {1}</font>'.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 = '<font color="red">Error: unknown username "{0}"</font>'.format(uname)
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')
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 = '<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):
......
......@@ -36,6 +36,9 @@ table.stat_table td {
a.selectedmode { background-color: yellow; }
textarea {
height: 200px;
}
</style>
<script language="JavaScript" type="text/javascript">
......@@ -267,9 +270,11 @@ function goto( mode)
<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.
</p>
<input type="textarea" name="betausers">
<input type="submit" name="action" value="Add beta testers">
<p>
<textarea cols="50" row="30" name="betausers"></textarea>
<input type="submit" name="action" value="Remove beta testers">
<input type="submit" name="action" value="Add beta testers">
</p>
<hr width="40%" style="align:left">
%endif
%endif
......
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