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): ...@@ -250,11 +250,7 @@ def instructor_dashboard(request, course_id):
elif 'List course staff' in action: elif 'List course staff' in action:
group = get_staff_group(course) group = get_staff_group(course)
msg += 'Staff group = {0}'.format(group.name) msg += 'Staff group = {0}'.format(group.name)
log.debug('staffgrp={0}'.format(group.name)) datatable = _group_members_table(group, "List of Staff", course_id)
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)
track.views.server_track(request, 'list-staff', {}, page='idashboard') track.views.server_track(request, 'list-staff', {}, page='idashboard')
elif 'List course instructors' in action and request.user.is_staff: elif 'List course instructors' in action and request.user.is_staff:
...@@ -269,17 +265,8 @@ def instructor_dashboard(request, course_id): ...@@ -269,17 +265,8 @@ def instructor_dashboard(request, course_id):
elif action == 'Add course staff': elif action == 'Add course staff':
uname = request.POST['staffuser'] uname = request.POST['staffuser']
try: group = get_staff_group(course)
user = User.objects.get(username=uname) msg += add_user_to_group(request, uname, group, 'staff', 'staff')
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')
elif action == 'Add instructor' and request.user.is_staff: elif action == 'Add instructor' and request.user.is_staff:
uname = request.POST['instructor'] uname = request.POST['instructor']
...@@ -297,17 +284,8 @@ def instructor_dashboard(request, course_id): ...@@ -297,17 +284,8 @@ def instructor_dashboard(request, course_id):
elif action == 'Remove course staff': elif action == 'Remove course staff':
uname = request.POST['staffuser'] uname = request.POST['staffuser']
try: group = get_staff_group(course)
user = User.objects.get(username=uname) msg += remove_user_from_group(request, uname, group, 'staff', 'staff')
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')
elif action == 'Remove instructor' and request.user.is_staff: elif action == 'Remove instructor' and request.user.is_staff:
uname = request.POST['instructor'] uname = request.POST['instructor']
...@@ -334,32 +312,13 @@ def instructor_dashboard(request, course_id): ...@@ -334,32 +312,13 @@ def instructor_dashboard(request, course_id):
elif action == 'Add beta testers': elif action == 'Add beta testers':
uname = request.POST['betausers'] uname = request.POST['betausers']
try: group = get_beta_group(course)
user = User.objects.get(username=uname) msg += add_user_to_group(request, uname, group, 'beta testers', 'beta-tester')
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')
elif action == 'Remove beta testers': elif action == 'Remove beta testers':
uname = request.POST['betausers'] uname = request.POST['betausers']
try: group = get_beta_group(course)
user = User.objects.get(username=uname) msg += remove_user_from_group(request, uname, group, 'beta testers', 'beta-tester')
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')
#---------------------------------------- #----------------------------------------
# forum administration # forum administration
...@@ -661,6 +620,67 @@ def _group_members_table(group, title, course_id): ...@@ -661,6 +620,67 @@ 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:
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): 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 { ...@@ -36,6 +36,9 @@ table.stat_table td {
a.selectedmode { background-color: yellow; } a.selectedmode { background-color: yellow; }
textarea {
height: 200px;
}
</style> </style>
<script language="JavaScript" type="text/javascript"> <script language="JavaScript" type="text/javascript">
...@@ -267,9 +270,11 @@ function goto( mode) ...@@ -267,9 +270,11 @@ function goto( mode)
<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. 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>
<input type="textarea" name="betausers"> <p>
<input type="submit" name="action" value="Add beta testers"> <textarea cols="50" row="30" name="betausers"></textarea>
<input type="submit" name="action" value="Remove beta testers"> <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"> <hr width="40%" style="align:left">
%endif %endif
%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