Commit 2461669e by Piotr Mitros

Merged in functionality to show grades by student

parents a2c4010b f1ad393f
...@@ -153,7 +153,7 @@ def user_groups(user): ...@@ -153,7 +153,7 @@ def user_groups(user):
cache_expiration = 60 * 60 # one hour cache_expiration = 60 * 60 # one hour
# Kill caching on dev machines -- we switch groups a lot # Kill caching on dev machines -- we switch groups a lot
if "dev" not in setting.DEFAULT_GROUPS: if "dev" not in settings.DEFAULT_GROUPS:
group_names = cache.get(fasthash(key)) group_names = cache.get(fasthash(key))
else: else:
group_names = None group_names = None
......
...@@ -34,7 +34,7 @@ etree.set_default_parser(etree.XMLParser(dtd_validation=False, load_dtd=False, ...@@ -34,7 +34,7 @@ etree.set_default_parser(etree.XMLParser(dtd_validation=False, load_dtd=False,
template_imports={'urllib':urllib} template_imports={'urllib':urllib}
def get_grade(request, problem, cache): def get_grade(user, problem, cache):
## HACK: assumes max score is fixed per problem ## HACK: assumes max score is fixed per problem
id = problem.get('id') id = problem.get('id')
correct = 0 correct = 0
...@@ -43,7 +43,7 @@ def get_grade(request, problem, cache): ...@@ -43,7 +43,7 @@ def get_grade(request, problem, cache):
if id not in cache: if id not in cache:
module = StudentModule(module_type = 'problem', # TODO: Move into StudentModule.__init__? module = StudentModule(module_type = 'problem', # TODO: Move into StudentModule.__init__?
module_id = id, module_id = id,
student = request.user, student = user,
state = None, state = None,
grade = 0, grade = 0,
max_grade = None, max_grade = None,
...@@ -67,17 +67,25 @@ def get_grade(request, problem, cache): ...@@ -67,17 +67,25 @@ def get_grade(request, problem, cache):
return (correct, total) return (correct, total)
@cache_control(no_cache=True, no_store=True, must_revalidate=True) @cache_control(no_cache=True, no_store=True, must_revalidate=True)
def profile(request): def profile(request, student_id = None):
''' User profile. Show username, location, etc, as well as grades . ''' User profile. Show username, location, etc, as well as grades .
We need to allow the user to change some of these settings .''' We need to allow the user to change some of these settings .'''
if not request.user.is_authenticated(): if not request.user.is_authenticated():
return redirect('/') return redirect('/')
dom=content_parser.course_file(request.user) if student_id == None:
student = request.user
else:
print content_parser.user_groups(request.user)
if 'course_admin' not in content_parser.user_groups(request.user):
raise Http404
student = User.objects.get( id = int(student_id))
dom=content_parser.course_file(student)
course = dom.xpath('//course/@name')[0] course = dom.xpath('//course/@name')[0]
xmlChapters = dom.xpath('//course[@name=$course]/chapter', course=course) xmlChapters = dom.xpath('//course[@name=$course]/chapter', course=course)
responses=StudentModule.objects.filter(student=request.user) responses=StudentModule.objects.filter(student=student)
response_by_id = {} response_by_id = {}
for response in responses: for response in responses:
response_by_id[response.module_id] = response response_by_id[response.module_id] = response
...@@ -97,7 +105,7 @@ def profile(request): ...@@ -97,7 +105,7 @@ def profile(request):
scores=[] scores=[]
if len(problems)>0: if len(problems)>0:
for p in problems: for p in problems:
(correct,total) = get_grade(request, p, response_by_id) (correct,total) = get_grade(student, p, response_by_id)
# id = p.get('id') # id = p.get('id')
# correct = 0 # correct = 0
# if id in response_by_id: # if id in response_by_id:
...@@ -252,12 +260,12 @@ def profile(request): ...@@ -252,12 +260,12 @@ def profile(request):
] ]
user_info = UserProfile.objects.get(user=request.user) # request.user.profile_cache # user_info = UserProfile.objects.get(user=student) # request.user.profile_cache #
context={'name':user_info.name, context={'name':user_info.name,
'username':request.user.username, 'username':student.username,
'location':user_info.location, 'location':user_info.location,
'language':user_info.language, 'language':user_info.language,
'email':request.user.email, 'email':student.email,
'chapters':chapters, 'chapters':chapters,
'format_url_params' : format_url_params, 'format_url_params' : format_url_params,
'grade_summary' : grade_summary, 'grade_summary' : grade_summary,
......
...@@ -106,5 +106,5 @@ def add_user_to_group(group, user): ...@@ -106,5 +106,5 @@ def add_user_to_group(group, user):
def remove_user_from_group(group, user): def remove_user_from_group(group, user):
utg = UserTestGroup.objects.get(name = group) utg = UserTestGroup.objects.get(name = group)
utg.users.add(User.objects.get(username = user)) utg.users.remove(User.objects.get(username = user))
utg.save() utg.save()
...@@ -43,6 +43,7 @@ if settings.COURSEWARE_ENABLED: ...@@ -43,6 +43,7 @@ if settings.COURSEWARE_ENABLED:
url(r'^section/(?P<section>[^/]*)/$', 'courseware.views.render_section'), url(r'^section/(?P<section>[^/]*)/$', 'courseware.views.render_section'),
url(r'^modx/(?P<module>[^/]*)/(?P<id>[^/]*)/(?P<dispatch>[^/]*)$', 'courseware.views.modx_dispatch'), #reset_problem'), url(r'^modx/(?P<module>[^/]*)/(?P<id>[^/]*)/(?P<dispatch>[^/]*)$', 'courseware.views.modx_dispatch'), #reset_problem'),
url(r'^profile$', 'courseware.views.profile'), url(r'^profile$', 'courseware.views.profile'),
url(r'^profile/(?P<student_id>[^/]*)/$', 'courseware.views.profile'),
url(r'^change_setting$', 'student.views.change_setting'), url(r'^change_setting$', 'student.views.change_setting'),
url(r'^s/(?P<template>[^/]*)$', 'static_template_view.views.auth_index'), url(r'^s/(?P<template>[^/]*)$', 'static_template_view.views.auth_index'),
url(r'^book/(?P<page>[^/]*)$', 'staticbook.views.index'), url(r'^book/(?P<page>[^/]*)$', 'staticbook.views.index'),
......
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