""" This module is essentially a broker to xmodule/tabs.py -- it was originally introduced to perform some LMS-specific tab display gymnastics for the Entrance Exams feature """ from django.conf import settings from django.utils.translation import ugettext as _ from courseware.access import has_access from student.models import CourseEnrollment from xmodule.tabs import CourseTabList if settings.FEATURES.get('MILESTONES_APP', False): from milestones.api import get_course_milestones_fulfillment_paths from util.milestones_helpers import serialize_user def get_course_tab_list(course, user): """ Retrieves the course tab list from xmodule.tabs and manipulates the set as necessary """ user_is_enrolled = user.is_authenticated() and CourseEnrollment.is_enrolled(user, course.id) xmodule_tab_list = CourseTabList.iterate_displayable( course, settings, user.is_authenticated(), has_access(user, 'staff', course, course.id), user_is_enrolled ) # Entrance Exams Feature # If the course has an entrance exam, we'll need to see if the user has not passed it # If so, we'll need to hide away all of the tabs except for Courseware and Instructor entrance_exam_mode = False if settings.FEATURES.get('ENTRANCE_EXAMS', False): if getattr(course, 'entrance_exam_enabled', False): course_milestones_paths = get_course_milestones_fulfillment_paths( unicode(course.id), serialize_user(user) ) for __, value in course_milestones_paths.iteritems(): if len(value.get('content', [])): for content in value['content']: if content == course.entrance_exam_id: entrance_exam_mode = True break # Now that we've loaded the tabs for this course, perform the Entrance Exam mode work # Majority case is no entrance exam defined course_tab_list = [] for tab in xmodule_tab_list: if entrance_exam_mode: # Hide all of the tabs except for 'Courseware' and 'Instructor' # Rename 'Courseware' tab to 'Entrance Exam' if tab.type not in ['courseware', 'instructor']: continue if tab.type == 'courseware': tab.name = _("Entrance Exam") course_tab_list.append(tab) return course_tab_list