* Automatically create user partitions on course publish for each ICRV checkpoint. * Disable partitions for ICRV checkpoints that have been deleted. * Skip partitions that have been disabled when checking access. * Add verification access control UI to visibility settings. * Add verification access control UI to sequential and vertical settings. * Add partition scheme for verification partition groups. * Cache information used by verification partition scheme and invalidate the cache on update. * Add location parameter to UserPartition so the partition scheme can find the associated checkpoint. * Refactor GroupConfiguration to allow multiple user partitions. * Add special messaging to ICRV for students in the honor track. Authors: Zubair Arbi, Awais Qureshi, Aamir Khan, Will Daly
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
"""
|
|
Utilities for the credit app.
|
|
"""
|
|
from xmodule.modulestore import ModuleStoreEnum
|
|
from xmodule.modulestore.django import modulestore
|
|
|
|
|
|
def get_course_blocks(course_key, category):
|
|
"""
|
|
Retrieve all XBlocks in the course for a particular category.
|
|
|
|
Returns only XBlocks that are published and haven't been deleted.
|
|
"""
|
|
# Note: we need to check if found components have been orphaned
|
|
# due to a bug in split modulestore (PLAT-799). Once that bug
|
|
# is resolved, we can skip the `_is_in_course_tree()` check entirely.
|
|
return [
|
|
block for block in modulestore().get_items(
|
|
course_key,
|
|
qualifiers={"category": category},
|
|
revision=ModuleStoreEnum.RevisionOption.published_only,
|
|
)
|
|
if _is_in_course_tree(block)
|
|
]
|
|
|
|
|
|
def _is_in_course_tree(block):
|
|
"""
|
|
Check that the XBlock is in the course tree.
|
|
|
|
It's possible that the XBlock is not in the course tree
|
|
if its parent has been deleted and is now an orphan.
|
|
"""
|
|
ancestor = block.get_parent()
|
|
while ancestor is not None and ancestor.location.category != "course":
|
|
ancestor = ancestor.get_parent()
|
|
|
|
return ancestor is not None
|