Hide errors from non-staff users

This commit is contained in:
Victor Shnayder
2012-08-12 18:03:12 -04:00
parent 9a54295ea1
commit 3455f8f64d
4 changed files with 28 additions and 3 deletions

View File

@@ -8,6 +8,7 @@ from django.conf import settings
from django.http import Http404
from xmodule.course_module import CourseDescriptor
from xmodule.modulestore import Location
from xmodule.modulestore.django import modulestore
from xmodule.modulestore.exceptions import ItemNotFoundError
from static_replace import replace_urls
@@ -168,6 +169,14 @@ def has_staff_access_to_course_id(user, course_id):
return has_staff_access_to_course(user, loc.course)
def has_staff_access_to_location(user, location):
"""Helper method that checks whether the user has staff access to
the course of the location.
location: something that can be passed to Location
"""
return has_staff_access_to_course(user, Location(location).course)
def has_access_to_course(user, course):
'''course is the .course element of a location'''
if course.metadata.get('ispublic'):

View File

@@ -146,8 +146,14 @@ def progress_summary(student, course, grader, student_module_cache):
"""
chapters = []
for c in course.get_children():
# Don't include chapters that aren't displayable (e.g. due to error)
if c not in c.displayable_items():
continue
sections = []
for s in c.get_children():
# Same for sections
if s not in s.displayable_items():
continue
graded = s.metadata.get('graded', False)
scores = []
for module in yield_module_descendents(s):

View File

@@ -16,7 +16,8 @@ from xmodule.exceptions import NotFoundError
from xmodule.x_module import ModuleSystem
from xmodule_modifiers import replace_static_urls, add_histogram, wrap_xmodule
from courseware.courses import has_staff_access_to_course
from courseware.courses import (has_staff_access_to_course,
has_staff_access_to_location)
log = logging.getLogger("mitx.courseware")
@@ -182,7 +183,7 @@ def get_module(user, request, location, student_module_cache, position=None):
# a module is coming through get_html and is therefore covered
# by the replace_static_urls code below
replace_urls=replace_urls,
is_staff=user.is_staff,
is_staff=has_staff_access_to_location(user, location),
)
# pass position specified in URL to module through ModuleSystem
system.set('position', position)