From 31b49c0e861c4ec46b48c99ff30affd998b82d3d Mon Sep 17 00:00:00 2001 From: Artur Gaspar Date: Wed, 30 Aug 2023 21:26:29 -0300 Subject: [PATCH 1/3] fix: add course overview model method to bind course to a user Add a method bind_course_for_student to course overview model, in order to load user preferences before course defaults. --- .../content/course_overviews/models.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/openedx/core/djangoapps/content/course_overviews/models.py b/openedx/core/djangoapps/content/course_overviews/models.py index 9f2a0ef43da8..fd9ec49037e9 100644 --- a/openedx/core/djangoapps/content/course_overviews/models.py +++ b/openedx/core/djangoapps/content/course_overviews/models.py @@ -23,6 +23,7 @@ from opaque_keys.edx.django.models import CourseKeyField, UsageKeyField from simple_history.models import HistoricalRecords +from lms.djangoapps.courseware.model_data import FieldDataCache from lms.djangoapps.discussion import django_comment_client from openedx.core.djangoapps.catalog.models import CatalogIntegration from openedx.core.djangoapps.lang_pref.api import get_closest_released_language @@ -844,6 +845,23 @@ def _original_course(self): """ return modulestore().get_course(self.id) + def bind_course_for_student(self, request): + """ + Bind user-specific field data to the Course XBlock. + + By default, the retrieved course XBlock is "unbound" - it means that any field from the `user_info` scope + (like `edxnotes_visibility`) returns its default value. + """ + # Delay import until here to avoid circular dependency. + from lms.djangoapps.courseware.block_render import get_block_for_descriptor + get_block_for_descriptor( + request.user, + request, + self._original_course, + FieldDataCache([self._original_course], self._original_course.id, request.user), + self._original_course.id, + ) + @property def allow_public_wiki_access(self): """ From f6dad9dbef75c10755f18f7c0c34f2dd0877d63f Mon Sep 17 00:00:00 2001 From: Artur Gaspar Date: Wed, 30 Aug 2023 21:27:40 -0300 Subject: [PATCH 2/3] fix: bind course to user in courseware API Bind the course overview object to a user in courseware API, in order to use user preferences over course defaults. --- openedx/core/djangoapps/courseware_api/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openedx/core/djangoapps/courseware_api/views.py b/openedx/core/djangoapps/courseware_api/views.py index 5ae28fe54dc7..8ee882abe3e2 100644 --- a/openedx/core/djangoapps/courseware_api/views.py +++ b/openedx/core/djangoapps/courseware_api/views.py @@ -89,6 +89,7 @@ def __init__(self, course_key, request, username=''): staff_access=original_user_is_staff, ) self.request.user = self.effective_user + self.overview.bind_course_for_student(self.request) self.enrollment_object = CourseEnrollment.get_enrollment(self.effective_user, self.course_key, select_related=['celebration', 'user__celebration']) From 2f531caa2f980eabe4943525b45e78e3402861f5 Mon Sep 17 00:00:00 2001 From: Artur Gaspar Date: Fri, 25 Aug 2023 05:19:43 -0300 Subject: [PATCH 3/3] fix: pass user-bound course block to toggle_notes.html --- lms/djangoapps/courseware/views/views.py | 1 + lms/templates/courseware/courseware-chromeless.html | 4 ++-- lms/templates/courseware/courseware.html | 2 +- lms/templates/edxnotes/toggle_notes.html | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lms/djangoapps/courseware/views/views.py b/lms/djangoapps/courseware/views/views.py index 51d9bb4d5e9f..085e9e5a19f4 100644 --- a/lms/djangoapps/courseware/views/views.py +++ b/lms/djangoapps/courseware/views/views.py @@ -1636,6 +1636,7 @@ def render_xblock(request, usage_key_string, check_if_enrolled=True, disable_sta context = { 'fragment': fragment, 'course': course, + 'block': block, 'disable_accordion': True, 'allow_iframing': True, 'disable_header': True, diff --git a/lms/templates/courseware/courseware-chromeless.html b/lms/templates/courseware/courseware-chromeless.html index 053fef73a788..1d0d4017267c 100644 --- a/lms/templates/courseware/courseware-chromeless.html +++ b/lms/templates/courseware/courseware-chromeless.html @@ -100,7 +100,7 @@