diff --git a/cms/djangoapps/contentstore/utils.py b/cms/djangoapps/contentstore/utils.py index b14dd8b353..cf0c281dd4 100644 --- a/cms/djangoapps/contentstore/utils.py +++ b/cms/djangoapps/contentstore/utils.py @@ -75,12 +75,15 @@ def get_course_for_item(location): return courses[0] -def get_lms_link_for_item(location, preview=False): +def get_lms_link_for_item(location, preview=False, course_id=None): + if course_id is None: + course_id = get_course_id(location) + if settings.LMS_BASE is not None: lms_link = "//{preview}{lms_base}/courses/{course_id}/jump_to/{location}".format( preview='preview.' if preview else '', lms_base=settings.LMS_BASE, - course_id=get_course_id(location), + course_id= course_id, location=Location(location) ) else: diff --git a/cms/djangoapps/contentstore/views.py b/cms/djangoapps/contentstore/views.py index 639f2258e0..b55dc13e58 100644 --- a/cms/djangoapps/contentstore/views.py +++ b/cms/djangoapps/contentstore/views.py @@ -114,7 +114,7 @@ def index(request): """ List all courses available to the logged in user """ - courses = modulestore().get_items(['i4x', None, None, 'course', None]) + courses = modulestore('direct').get_items(['i4x', None, None, 'course', None]) # filter out courses that we don't have access too def course_filter(course): @@ -132,7 +132,7 @@ def index(request): course.location.org, course.location.course, course.location.name]), - get_lms_link_for_item(course.location)) + get_lms_link_for_item(course.location, course_id=course.location.course_id)) for course in courses], 'user': request.user, 'disable_course_creation': settings.MITX_FEATURES.get('DISABLE_COURSE_CREATION', False) and not request.user.is_staff diff --git a/common/lib/xmodule/xmodule/modulestore/mongo.py b/common/lib/xmodule/xmodule/modulestore/mongo.py index 012efb0c27..8068129559 100644 --- a/common/lib/xmodule/xmodule/modulestore/mongo.py +++ b/common/lib/xmodule/xmodule/modulestore/mongo.py @@ -157,10 +157,15 @@ class MongoModuleStore(ModuleStoreBase): ''' # get all collections in the course, this query should not return any leaf nodes - query = { '_id.org' : location.org, - '_id.course' : location.course, - '_id.revision' : None, - 'definition.children':{'$ne': []} + query = { + '_id.org': location.org, + '_id.course': location.course, + '$or': [ + {"_id.category":"course"}, + {"_id.category":"chapter"}, + {"_id.category":"sequential"}, + {"_id.category":"vertical"} + ] } # we just want the Location, children, and metadata record_filter = {'_id':1,'definition.children':1,'metadata':1} @@ -279,6 +284,13 @@ class MongoModuleStore(ModuleStoreBase): resource_fs = OSFS(root) + metadata_inheritance_tree = None + + # if we are loading a course object, there is no parent to inherit the metadata from + # so don't bother getting it + if item['location']['category'] != 'course': + metadata_inheritance_tree = self.get_cached_metadata_inheritance_tree(Location(item['location']), 300) + # TODO (cdodge): When the 'split module store' work has been completed, we should remove # the 'metadata_inheritance_tree' parameter system = CachingDescriptorSystem( @@ -288,7 +300,7 @@ class MongoModuleStore(ModuleStoreBase): resource_fs, self.error_tracker, self.render_template, - metadata_inheritance_tree = self.get_cached_metadata_inheritance_tree(Location(item['location']), 60) + metadata_inheritance_tree = metadata_inheritance_tree ) return system.load_item(item['location'])