From 1ebe0e6ca2cb79ce65345da9f8d250675755744b Mon Sep 17 00:00:00 2001 From: "zia.fazal@arbisoft.com" Date: Wed, 15 Jun 2022 14:04:36 +0500 Subject: [PATCH] fix: Fixed broken HiddenContentTransformer when course pacing is self_paced fix: Fixed broken HiddenContentTransformer when course pacing is self_pace In case of self paced course we are relying on course end date to determine if a block is visible or not. However, when course blocks API is called with a block_key it breaks since all blocks do not have end field instead only course block has end field. These Changes fetch end date of block from parent or ancestors blocks to make sure we have course end date available while determining block visibility. --- .../course_blocks/transformers/hidden_content.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lms/djangoapps/course_blocks/transformers/hidden_content.py b/lms/djangoapps/course_blocks/transformers/hidden_content.py index 6f031fc608..41ac25df6f 100644 --- a/lms/djangoapps/course_blocks/transformers/hidden_content.py +++ b/lms/djangoapps/course_blocks/transformers/hidden_content.py @@ -10,7 +10,7 @@ from pytz import utc from openedx.core.djangoapps.content.block_structure.transformer import BlockStructureTransformer from xmodule.seq_module import SequenceBlock # lint-amnesty, pylint: disable=wrong-import-order -from .utils import collect_merged_boolean_field +from .utils import collect_merged_boolean_field, collect_merged_date_field MAXIMUM_DATE = utc.localize(datetime.max) @@ -31,9 +31,10 @@ class HiddenContentTransformer(BlockStructureTransformer): IMPORTANT: Must be run _after_ the DateOverrideTransformer from edx-when in case the 'due' date on a block has been shifted for a user. """ - WRITE_VERSION = 3 + WRITE_VERSION = 4 READ_VERSION = 3 MERGED_HIDE_AFTER_DUE = 'merged_hide_after_due' + MERGED_END_DATE = 'merged_end_date' @classmethod def name(cls): @@ -66,6 +67,13 @@ class HiddenContentTransformer(BlockStructureTransformer): xblock_field_name='hide_after_due', merged_field_name=cls.MERGED_HIDE_AFTER_DUE, ) + collect_merged_date_field( + block_structure, + transformer=cls, + xblock_field_name='end', + merged_field_name=cls.MERGED_END_DATE, + default_date=MAXIMUM_DATE + ) block_structure.request_xblock_fields('self_paced', 'end', 'due')