From c0912bfc3e67317a583326e9975f3a0fd40e08a7 Mon Sep 17 00:00:00 2001 From: Kira Miller <31229189+kiram15@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:27:37 +0000 Subject: [PATCH 1/4] feat: remove enterprise dashboard context imports Co-Authored-By: Claude Sonnet 4.6 --- cms/envs/help_tokens.ini | 1 - common/djangoapps/student/views/dashboard.py | 19 ++----------------- common/djangoapps/student/views/management.py | 10 ++-------- .../djangoapps/third_party_auth/pipeline.py | 2 +- lms/envs/common.py | 10 +++++++++- .../djangoapps/user_authn/tests/test_tasks.py | 1 - requirements/constraints.txt | 2 +- requirements/edx/base.txt | 2 +- requirements/edx/development.txt | 2 +- requirements/edx/doc.txt | 2 +- requirements/edx/testing.txt | 2 +- 11 files changed, 19 insertions(+), 34 deletions(-) diff --git a/cms/envs/help_tokens.ini b/cms/envs/help_tokens.ini index 9aaa3fa6af59..3a360ad4ce21 100644 --- a/cms/envs/help_tokens.ini +++ b/cms/envs/help_tokens.ini @@ -27,7 +27,6 @@ video = course_author:references/course_development/guide_to_video.html certificates = course_author:concepts/open_edx_platform/about_certificates.html content_highlights = course_author:how-tos/course_development/manage_course_highlight_emails.html social_sharing = course_author:how-tos/course_development/social_sharing.html -sync_library_updates = course_author:how-tos/course_development/sync_a_library_update_to_your_course.html # below are the language directory names for the different locales [locales] diff --git a/common/djangoapps/student/views/dashboard.py b/common/djangoapps/student/views/dashboard.py index 454a591f3032..3ccc36f81574 100644 --- a/common/djangoapps/student/views/dashboard.py +++ b/common/djangoapps/student/views/dashboard.py @@ -58,11 +58,6 @@ from openedx.core.djangolib.markup import HTML, Text from openedx.features.content_type_gating.models import ContentTypeGatingConfig from openedx.features.course_duration_limits.access import get_user_course_duration, get_user_course_expiration_date -from openedx.features.enterprise_support.api import ( - get_dashboard_consent_notification, - get_enterprise_learner_portal_context, -) -from openedx.features.enterprise_support.utils import is_enterprise_learner from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order log = logging.getLogger("edx.student") @@ -619,7 +614,7 @@ def student_dashboard(request): # lint-amnesty, pylint: disable=too-many-statem link_end=HTML(""), ) - enterprise_message = get_dashboard_consent_notification(request, user, course_enrollments) + enterprise_message = '' recovery_email_message = recovery_email_activation_message = None if is_secondary_email_feature_enabled(): @@ -647,10 +642,6 @@ def student_dashboard(request): # lint-amnesty, pylint: disable=too-many-statem ) ) - # Disable lookup of Enterprise consent_required_course due to ENT-727 - # Will re-enable after fixing WL-1315 - consent_required_courses = set() - # Account activation message account_activation_messages = [ message for message in messages.get_messages(request) if 'account-activation' in message.tags @@ -802,7 +793,7 @@ def student_dashboard(request): # lint-amnesty, pylint: disable=too-many-statem 'urls': urls, 'programs_data': programs_data, 'enterprise_message': enterprise_message, - 'consent_required_courses': consent_required_courses, + 'consent_required_courses': set(), 'enrollment_message': enrollment_message, 'redirect_message': Text(redirect_message), 'account_activation_messages': account_activation_messages, @@ -852,14 +843,8 @@ def student_dashboard(request): # lint-amnesty, pylint: disable=too-many-statem 'course_info': get_dashboard_course_info(user, course_enrollments), # TODO START: clean up as part of REVEM-199 (END) 'disable_unenrollment': disable_unenrollment, - # TODO: clean when experiment(Merchandise 2U LOBs - Dashboard) would be stop. [VAN-1097] - 'is_enterprise_user': is_enterprise_learner(user), } - # Include enterprise learner portal metadata and messaging - enterprise_learner_portal_context = get_enterprise_learner_portal_context(request) - context.update(enterprise_learner_portal_context) - context_from_plugins = get_plugins_view_context( ProjectType.LMS, COURSE_DASHBOARD_PLUGIN_VIEW_NAME, diff --git a/common/djangoapps/student/views/management.py b/common/djangoapps/student/views/management.py index cf7948b448bb..25cad3f2f621 100644 --- a/common/djangoapps/student/views/management.py +++ b/common/djangoapps/student/views/management.py @@ -25,13 +25,9 @@ from django.template.context_processors import csrf from django.urls import reverse from django.utils.translation import gettext as _ -from django.views.decorators.csrf import ( # lint-amnesty, pylint: disable=unused-import # noqa: F401 - csrf_exempt, - ensure_csrf_cookie, -) +from django.views.decorators.csrf import ensure_csrf_cookie # lint-amnesty, pylint: disable=unused-import # noqa: F401 from django.views.decorators.http import ( # lint-amnesty, pylint: disable=unused-import require_GET, - require_http_methods, # noqa: F401 require_POST, ) from edx_ace import ace @@ -113,7 +109,6 @@ from openedx.core.lib.api.authentication import BearerAuthenticationAllowInactiveUser from openedx.features.course_experience.url_helpers import make_learning_mfe_courseware_url from openedx.features.discounts.applicability import FIRST_PURCHASE_DISCOUNT_OVERRIDE_FLAG -from openedx.features.enterprise_support.utils import is_enterprise_learner from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order log = logging.getLogger("edx.student") @@ -235,7 +230,6 @@ def compose_activation_email( message_context = generate_activation_email_context(user, user_registration) message_context.update({ 'confirm_activation_link': _get_activation_confirmation_link(message_context['key'], redirect_url), - 'is_enterprise_learner': is_enterprise_learner(user), 'is_first_purchase_discount_overridden': FIRST_PURCHASE_DISCOUNT_OVERRIDE_FLAG.is_enabled(), 'route_enabled': route_enabled, 'routed_user': user.username, @@ -708,7 +702,7 @@ def activate_account(request, key): url_path = '/login?{}'.format(urllib.parse.urlencode(params)) # noqa: UP032 return redirect(settings.AUTHN_MICROFRONTEND_URL + url_path) - response = redirect(redirect_url) if redirect_url and is_enterprise_learner(request.user) else redirect('dashboard') + response = redirect(redirect_url) if redirect_url else redirect('dashboard') if show_account_activation_popup: response.delete_cookie( settings.SHOW_ACTIVATE_CTA_POPUP_COOKIE_NAME, diff --git a/common/djangoapps/third_party_auth/pipeline.py b/common/djangoapps/third_party_auth/pipeline.py index d682adab1742..3f52d5b68009 100644 --- a/common/djangoapps/third_party_auth/pipeline.py +++ b/common/djangoapps/third_party_auth/pipeline.py @@ -102,7 +102,6 @@ def B(*args, **kwargs): from openedx.core.djangoapps.user_authn import cookies as user_authn_cookies from openedx.core.djangoapps.user_authn.toggles import is_auto_generated_username_enabled from openedx.core.djangoapps.user_authn.utils import is_safe_login_or_logout_redirect -from openedx.core.djangoapps.user_authn.views.utils import get_auto_generated_username from . import provider @@ -1010,6 +1009,7 @@ def get_username(strategy, details, backend, user=None, *args, **kwargs): # lin slug_func = lambda val: val if is_auto_generated_username_enabled() and details.get('username') is None: + from openedx.core.djangoapps.user_authn.views.utils import get_auto_generated_username # pylint: disable=import-outside-toplevel # noqa: I001 username = get_auto_generated_username(details) else: if email_as_username and details.get('email'): diff --git a/lms/envs/common.py b/lms/envs/common.py index 3889d3b2b7d9..3ce918b2d9c1 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -2954,7 +2954,6 @@ USER_STATE_BATCH_SIZE = 5000 ############## Plugin Django Apps ######################### - INSTALLED_APPS.extend(get_plugin_apps(ProjectType.LMS)) add_plugins(__name__, ProjectType.LMS, SettingsType.COMMON) @@ -3282,3 +3281,12 @@ def _should_send_certificate_events(settings): SSL_AUTH_DN_FORMAT_STRING = ( "/C=US/ST=Massachusetts/O=Massachusetts Institute of Technology/OU=Client CA v1/CN={0}/emailAddress={1}" ) + +########################## OpenEdX Filters Configuration #################### + +OPEN_EDX_FILTERS_CONFIG = { + "org.openedx.learning.dashboard.render.started.v1": { + "fail_silently": True, + "pipeline": ["enterprise.filters.dashboard.DashboardContextEnricher"], + }, +} diff --git a/openedx/core/djangoapps/user_authn/tests/test_tasks.py b/openedx/core/djangoapps/user_authn/tests/test_tasks.py index 993bfcf0fffc..44d2178b9a58 100644 --- a/openedx/core/djangoapps/user_authn/tests/test_tasks.py +++ b/openedx/core/djangoapps/user_authn/tests/test_tasks.py @@ -45,7 +45,6 @@ def test_ComposeEmail(self): assert self.msg.context['routed_user_email'] == self.student.email assert self.msg.context['routed_profile_name'] == '' assert self.msg.context['registration_flow'] is False - assert self.msg.context['is_enterprise_learner'] is False assert self.msg.context['is_first_purchase_discount_overridden'] is False @mock.patch('time.sleep', mock.Mock(return_value=None)) diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 22fc1afad45c..2ab69f384aae 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -44,7 +44,7 @@ django-stubs<6 # The team that owns this package will manually bump this package rather than having it pulled in automatically. # This is to allow them to better control its deployment and to do it in a process that works better # for them. -edx-enterprise==8.0.0 +edx-enterprise==8.0.1 # Date: 2023-07-26 # Our legacy Sass code is incompatible with anything except this ancient libsass version. diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 5caf8097d0b5..59204055afc9 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -483,7 +483,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core -edx-enterprise==8.0.0 +edx-enterprise==8.0.1 # via # -c requirements/constraints.txt # -r requirements/edx/kernel.in diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index fe704f43df84..a60faae24b60 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -762,7 +762,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core -edx-enterprise==8.0.0 +edx-enterprise==8.0.1 # via # -c requirements/constraints.txt # -r requirements/edx/doc.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 55a4d94a5d56..23f75af06a73 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -573,7 +573,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core -edx-enterprise==8.0.0 +edx-enterprise==8.0.1 # via # -c requirements/constraints.txt # -r requirements/edx/base.txt diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 1137fcbad9ce..90fe23dbe689 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -593,7 +593,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core -edx-enterprise==8.0.0 +edx-enterprise==8.0.1 # via # -c requirements/constraints.txt # -r requirements/edx/base.txt From 6fbb47468f5cf00e936a6c7b750b17a2a6097231 Mon Sep 17 00:00:00 2001 From: Kira Miller <31229189+kiram15@users.noreply.github.com> Date: Wed, 29 Apr 2026 22:49:14 +0000 Subject: [PATCH 2/4] chore: update edx-enterprise version --- common/djangoapps/student/views/dashboard.py | 1 - requirements/constraints.txt | 2 +- requirements/edx/base.txt | 2 +- requirements/edx/development.txt | 2 +- requirements/edx/doc.txt | 2 +- requirements/edx/testing.txt | 2 +- 6 files changed, 5 insertions(+), 6 deletions(-) diff --git a/common/djangoapps/student/views/dashboard.py b/common/djangoapps/student/views/dashboard.py index 2d32fe5f003d..334cd2f540c5 100644 --- a/common/djangoapps/student/views/dashboard.py +++ b/common/djangoapps/student/views/dashboard.py @@ -790,7 +790,6 @@ def student_dashboard(request): # lint-amnesty, pylint: disable=too-many-statem context = { 'urls': urls, 'programs_data': programs_data, - 'consent_required_courses': set(), 'enrollment_message': enrollment_message, 'redirect_message': Text(redirect_message), 'account_activation_messages': account_activation_messages, diff --git a/requirements/constraints.txt b/requirements/constraints.txt index a98eb486e2c9..0936490dfa9f 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -44,7 +44,7 @@ django-stubs<6 # The team that owns this package will manually bump this package rather than having it pulled in automatically. # This is to allow them to better control its deployment and to do it in a process that works better # for them. -edx-enterprise==8.0.2 +edx-enterprise==8.0.3 # Date: 2023-07-26 # Our legacy Sass code is incompatible with anything except this ancient libsass version. diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index d410a11f565a..88fbfcae9a42 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -483,7 +483,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core -edx-enterprise==8.0.2 +edx-enterprise==8.0.3 # via # -c requirements/constraints.txt # -r requirements/edx/kernel.in diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index c7d751eb46ef..ca07a8c1eb95 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -756,7 +756,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core -edx-enterprise==8.0.2 +edx-enterprise==8.0.3 # via # -c requirements/constraints.txt # -r requirements/edx/doc.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 1eee45f2e127..7403f694e79a 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -573,7 +573,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core -edx-enterprise==8.0.2 +edx-enterprise==8.0.3 # via # -c requirements/constraints.txt # -r requirements/edx/base.txt diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 02072ad9f512..14252deb1e40 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -589,7 +589,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core -edx-enterprise==8.0.2 +edx-enterprise==8.0.3 # via # -c requirements/constraints.txt # -r requirements/edx/base.txt From 212d0e9ef6f90b6f9aa87b6a5d58da8968726860 Mon Sep 17 00:00:00 2001 From: Kira Miller <31229189+kiram15@users.noreply.github.com> Date: Thu, 30 Apr 2026 23:28:58 +0000 Subject: [PATCH 3/4] fix: removing all instances of consent_required_courses --- common/djangoapps/student/views/dashboard.py | 11 +++++++ common/djangoapps/student/views/management.py | 4 +++ .../djangoapps/third_party_auth/pipeline.py | 8 +++++ lms/envs/common.py | 11 +++++++ lms/templates/dashboard.html | 3 +- .../dashboard/_dashboard_course_listing.html | 6 +--- .../dashboard/_dashboard_show_consent.html | 25 -------------- openedx/features/enterprise_support/api.py | 23 ------------- .../enterprise_support/tests/test_api.py | 33 ------------------- requirements/edx/base.txt | 1 + requirements/edx/development.txt | 1 + requirements/edx/doc.txt | 1 + requirements/edx/testing.txt | 1 + 13 files changed, 40 insertions(+), 88 deletions(-) delete mode 100644 lms/templates/dashboard/_dashboard_show_consent.html diff --git a/common/djangoapps/student/views/dashboard.py b/common/djangoapps/student/views/dashboard.py index 334cd2f540c5..0f89d0118ef7 100644 --- a/common/djangoapps/student/views/dashboard.py +++ b/common/djangoapps/student/views/dashboard.py @@ -58,6 +58,17 @@ from openedx.core.djangolib.markup import HTML, Text from openedx.features.content_type_gating.models import ContentTypeGatingConfig from openedx.features.course_duration_limits.access import get_user_course_duration, get_user_course_expiration_date +from common.djangoapps.student.api import COURSE_DASHBOARD_PLUGIN_VIEW_NAME +from common.djangoapps.student.helpers import cert_info, check_verify_status_by_course, get_resume_urls_for_enrollments +from common.djangoapps.student.models import ( + AccountRecovery, + CourseEnrollment, + CourseEnrollmentAttribute, + DashboardConfiguration, + PendingSecondaryEmailChange, + UserProfile +) +from common.djangoapps.util.milestones_helpers import get_pre_requisite_courses_not_completed from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order log = logging.getLogger("edx.student") diff --git a/common/djangoapps/student/views/management.py b/common/djangoapps/student/views/management.py index f68e28d8ea84..847636d5b2e0 100644 --- a/common/djangoapps/student/views/management.py +++ b/common/djangoapps/student/views/management.py @@ -54,7 +54,11 @@ render_to_response, render_to_string, # noqa: F401 ) +from openedx.core.djangolib.markup import HTML, Text +from openedx.core.lib.api.authentication import BearerAuthenticationAllowInactiveUser from common.djangoapps.entitlements.models import CourseEntitlement +from openedx.features.course_experience.url_helpers import make_learning_mfe_courseware_url +from openedx.features.discounts.applicability import FIRST_PURCHASE_DISCOUNT_OVERRIDE_FLAG from common.djangoapps.student.email_helpers import generate_activation_email_context from common.djangoapps.student.helpers import ( DISABLE_UNENROLL_CERT_STATES, diff --git a/common/djangoapps/third_party_auth/pipeline.py b/common/djangoapps/third_party_auth/pipeline.py index 3f52d5b68009..fde485597bf3 100644 --- a/common/djangoapps/third_party_auth/pipeline.py +++ b/common/djangoapps/third_party_auth/pipeline.py @@ -84,6 +84,14 @@ def B(*args, **kwargs): from common.djangoapps import third_party_auth from common.djangoapps.edxmako.shortcuts import render_to_string +from lms.djangoapps.verify_student.models import SSOVerification +from lms.djangoapps.verify_student.utils import earliest_allowed_verification_date +from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers +from openedx.core.djangoapps.user_api import accounts +from openedx.core.djangoapps.user_api.accounts.utils import username_suffix_generator +from openedx.core.djangoapps.user_authn import cookies as user_authn_cookies +from openedx.core.djangoapps.user_authn.toggles import is_auto_generated_username_enabled +from openedx.core.djangoapps.user_authn.utils import is_safe_login_or_logout_redirect from common.djangoapps.third_party_auth.utils import ( get_associated_user_by_email_response, get_user_from_email, diff --git a/lms/envs/common.py b/lms/envs/common.py index 02fe29de4a4e..8c0b932fd930 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -3281,6 +3281,17 @@ def _should_send_certificate_events(settings): ENTITLEMENTS_EXPIRATION_ROUTING_KEY = Derived(lambda settings: settings.DEFAULT_PRIORITY_QUEUE) +########################## OpenEdX Filters ################################# + +OPEN_EDX_FILTERS_CONFIG = { + "org.openedx.learning.dashboard.render.started.v1": { + "fail_silently": True, + "pipeline": [ + "enterprise.filters.dashboard.DashboardContextEnricher", + ], + }, +} + # TODO: We believe these were part of the DEPR'd sysadmin dashboard, and can likely be removed. SSL_AUTH_EMAIL_DOMAIN = "MIT.EDU" SSL_AUTH_DN_FORMAT_STRING = ( diff --git a/lms/templates/dashboard.html b/lms/templates/dashboard.html index 6149418035ca..34270eea53d5 100644 --- a/lms/templates/dashboard.html +++ b/lms/templates/dashboard.html @@ -220,10 +220,9 @@ is_course_voucher_refundable = (session_id in enrolled_courses_voucher_refundable) course_requirements = courses_requirements_not_met.get(session_id) related_programs = inverted_programs.get(str(entitlement.course_uuid if is_unfulfilled_entitlement else session_id)) - show_consent_link = (session_id in consent_required_courses) resume_button_url = resume_button_urls[dashboard_index] %> - <%include file='dashboard/_dashboard_course_listing.html' args='course_overview=course_overview, course_card_index=dashboard_index, enrollment=enrollment, enrollments_fbe_is_on=enrollments_fbe_is_on, is_unfulfilled_entitlement=is_unfulfilled_entitlement, is_fulfilled_entitlement=is_fulfilled_entitlement, entitlement=entitlement, entitlement_session=entitlement_session, entitlement_available_sessions=entitlement_available_sessions, entitlement_expiration_date=entitlement_expiration_date, entitlement_expired_at=entitlement_expired_at, show_courseware_link=show_courseware_link, cert_status=cert_status, can_refund_entitlement=can_refund_entitlement, can_unenroll=can_unenroll, credit_status=credit_status, show_email_settings=show_email_settings, course_mode_info=course_mode_info, is_paid_course=is_paid_course, is_course_voucher_refundable=is_course_voucher_refundable, course_requirements=course_requirements, dashboard_index=dashboard_index, share_settings=share_settings, user=user, related_programs=related_programs, display_course_modes_on_dashboard=display_course_modes_on_dashboard, show_consent_link=show_consent_link, enterprise_customer_name=enterprise_customer_name, resume_button_url=resume_button_url, partner_managed_enrollment=partner_managed_enrollment' /> + <%include file='dashboard/_dashboard_course_listing.html' args='course_overview=course_overview, course_card_index=dashboard_index, enrollment=enrollment, enrollments_fbe_is_on=enrollments_fbe_is_on, is_unfulfilled_entitlement=is_unfulfilled_entitlement, is_fulfilled_entitlement=is_fulfilled_entitlement, entitlement=entitlement, entitlement_session=entitlement_session, entitlement_available_sessions=entitlement_available_sessions, entitlement_expiration_date=entitlement_expiration_date, entitlement_expired_at=entitlement_expired_at, show_courseware_link=show_courseware_link, cert_status=cert_status, can_refund_entitlement=can_refund_entitlement, can_unenroll=can_unenroll, credit_status=credit_status, show_email_settings=show_email_settings, course_mode_info=course_mode_info, is_paid_course=is_paid_course, is_course_voucher_refundable=is_course_voucher_refundable, course_requirements=course_requirements, dashboard_index=dashboard_index, share_settings=share_settings, user=user, related_programs=related_programs, display_course_modes_on_dashboard=display_course_modes_on_dashboard, resume_button_url=resume_button_url, partner_managed_enrollment=partner_managed_enrollment' /> % endfor % if show_load_all_courses_link:
diff --git a/lms/templates/dashboard/_dashboard_course_listing.html b/lms/templates/dashboard/_dashboard_course_listing.html index 39c66f0e81fa..ff27485a87b4 100644 --- a/lms/templates/dashboard/_dashboard_course_listing.html +++ b/lms/templates/dashboard/_dashboard_course_listing.html @@ -1,4 +1,4 @@ -<%page args="course_overview, enrollment, entitlement, entitlement_session, course_card_index, enrollments_fbe_is_on, is_unfulfilled_entitlement, is_fulfilled_entitlement, entitlement_available_sessions, entitlement_expiration_date, entitlement_expired_at, show_courseware_link, cert_status, can_refund_entitlement, can_unenroll, credit_status, show_email_settings, course_mode_info, is_paid_course, is_course_voucher_refundable, course_requirements, dashboard_index, share_settings, related_programs, display_course_modes_on_dashboard, show_consent_link, enterprise_customer_name, resume_button_url, partner_managed_enrollment" expression_filter="h"/> +<%page args="course_overview, enrollment, entitlement, entitlement_session, course_card_index, enrollments_fbe_is_on, is_unfulfilled_entitlement, is_fulfilled_entitlement, entitlement_available_sessions, entitlement_expiration_date, entitlement_expired_at, show_courseware_link, cert_status, can_refund_entitlement, can_unenroll, credit_status, show_email_settings, course_mode_info, is_paid_course, is_course_voucher_refundable, course_requirements, dashboard_index, share_settings, related_programs, display_course_modes_on_dashboard, resume_button_url, partner_managed_enrollment" expression_filter="h"/> <%! import datetime @@ -370,10 +370,6 @@

<%include file="_dashboard_credit_info.html" args="credit_status=credit_status"/> % endif - % if show_consent_link: - <%include file="_dashboard_show_consent.html" args="course_overview=course_overview, course_target=course_target, enrollment=enrollment, enterprise_customer_name=enterprise_customer_name"/> - %endif - % if display_course_upgrade:
diff --git a/lms/templates/dashboard/_dashboard_show_consent.html b/lms/templates/dashboard/_dashboard_show_consent.html deleted file mode 100644 index 98f8ffd3c473..000000000000 --- a/lms/templates/dashboard/_dashboard_show_consent.html +++ /dev/null @@ -1,25 +0,0 @@ -<%page expression_filter="h" args="course_overview, course_target, enrollment, enterprise_customer_name" /> -<%! -from django.utils.translation import gettext as _ -%> -<%namespace name='static' file='../static_content.html'/> - -
-
-

- - ${_("Consent to share your data")} - -
- ${_("To access this course, you must first consent to share your learning achievements with {enterprise_customer_name}.").format(enterprise_customer_name=enterprise_customer_name)} -

- -
-
diff --git a/openedx/features/enterprise_support/api.py b/openedx/features/enterprise_support/api.py index 504e377f45aa..e95d446f22a4 100644 --- a/openedx/features/enterprise_support/api.py +++ b/openedx/features/enterprise_support/api.py @@ -713,29 +713,6 @@ def consent_needed_for_course(request, user, course_id, enrollment_exists=False) return True -@enterprise_is_enabled(otherwise=set()) -def get_consent_required_courses(user, course_ids): - """ - Returns a set of course_ids that require consent - Note that this function makes use of the Enterprise models directly instead of using the API calls - """ - result = set() - enterprise_learner = EnterpriseCustomerUser.objects.filter(user_id=user.id).first() - if not enterprise_learner or not enterprise_learner.enterprise_customer: - return result - - enterprise_uuid = enterprise_learner.enterprise_customer.uuid - data_sharing_consent = DataSharingConsent.objects.filter(username=user.username, - course_id__in=course_ids, - enterprise_customer__uuid=enterprise_uuid) - - for consent in data_sharing_consent: - if consent.consent_required(): - result.add(consent.course_id) - - return result - - @enterprise_is_enabled(otherwise='') def get_enterprise_consent_url(request, course_id, user=None, return_to=None, enrollment_exists=False, source='lms'): """ diff --git a/openedx/features/enterprise_support/tests/test_api.py b/openedx/features/enterprise_support/tests/test_api.py index 5a6689bbe6d2..06813fc0e7cf 100644 --- a/openedx/features/enterprise_support/tests/test_api.py +++ b/openedx/features/enterprise_support/tests/test_api.py @@ -42,7 +42,6 @@ enterprise_enabled, get_active_enterprise_customer_user, get_consent_notification_data, - get_consent_required_courses, get_dashboard_consent_notification, get_data_sharing_consents, get_enterprise_consent_url, @@ -533,38 +532,6 @@ def test_consent_needed_for_course_when_consent_is_required( ) ) - @httpretty.activate - @mock.patch('enterprise.models.EnterpriseCustomer.catalog_contains_course') - def test_get_consent_required_courses(self, mock_catalog_contains_course): - mock_catalog_contains_course.return_value = True - user = UserFactory() - enterprise_customer_user = EnterpriseCustomerUserFactory(user_id=user.id) - - course_id = 'fake-course' - data_sharing_consent = DataSharingConsent( - course_id=course_id, - enterprise_customer=enterprise_customer_user.enterprise_customer, - username=user.username, - granted=False - ) - data_sharing_consent.save() - consent_required = get_consent_required_courses(user, [course_id]) - assert course_id in consent_required - - # now grant consent and call our method again - data_sharing_consent.granted = True - data_sharing_consent.save() - consent_required = get_consent_required_courses(user, [course_id]) - assert course_id not in consent_required - - def test_consent_not_required_for_non_enterprise_user(self): - user = UserFactory() - course_id = 'fake-course' - - consent_required_courses = get_consent_required_courses(user, [course_id]) - - assert set() == consent_required_courses - @mock.patch('openedx.features.enterprise_support.api.create_jwt_for_user') def test_fetch_enterprise_learner_data_unauthenticated(self, mock_jwt_builder): api_client = self._assert_api_client_with_user(EnterpriseApiClient, mock_jwt_builder) diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 88fbfcae9a42..7ee38be4e9e0 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -483,6 +483,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core + # openedx-learning edx-enterprise==8.0.3 # via # -c requirements/constraints.txt diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index ca07a8c1eb95..e595a8a1959b 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -756,6 +756,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core + # openedx-learning edx-enterprise==8.0.3 # via # -c requirements/constraints.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 7403f694e79a..fc59c38029a5 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -573,6 +573,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core + # openedx-learning edx-enterprise==8.0.3 # via # -c requirements/constraints.txt diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 14252deb1e40..3fa41fce565a 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -589,6 +589,7 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core + # openedx-learning edx-enterprise==8.0.3 # via # -c requirements/constraints.txt From 5e6ba332064517cb432ecbbcc06287fca0a1e078 Mon Sep 17 00:00:00 2001 From: Kira Miller <31229189+kiram15@users.noreply.github.com> Date: Thu, 30 Apr 2026 23:45:15 +0000 Subject: [PATCH 4/4] fix: quality fixes --- common/djangoapps/student/views/dashboard.py | 11 ----------- common/djangoapps/student/views/management.py | 4 ---- common/djangoapps/third_party_auth/pipeline.py | 8 -------- lms/envs/common.py | 11 ----------- requirements/edx/development.txt | 1 - requirements/edx/testing.txt | 1 - 6 files changed, 36 deletions(-) diff --git a/common/djangoapps/student/views/dashboard.py b/common/djangoapps/student/views/dashboard.py index 0f89d0118ef7..334cd2f540c5 100644 --- a/common/djangoapps/student/views/dashboard.py +++ b/common/djangoapps/student/views/dashboard.py @@ -58,17 +58,6 @@ from openedx.core.djangolib.markup import HTML, Text from openedx.features.content_type_gating.models import ContentTypeGatingConfig from openedx.features.course_duration_limits.access import get_user_course_duration, get_user_course_expiration_date -from common.djangoapps.student.api import COURSE_DASHBOARD_PLUGIN_VIEW_NAME -from common.djangoapps.student.helpers import cert_info, check_verify_status_by_course, get_resume_urls_for_enrollments -from common.djangoapps.student.models import ( - AccountRecovery, - CourseEnrollment, - CourseEnrollmentAttribute, - DashboardConfiguration, - PendingSecondaryEmailChange, - UserProfile -) -from common.djangoapps.util.milestones_helpers import get_pre_requisite_courses_not_completed from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order log = logging.getLogger("edx.student") diff --git a/common/djangoapps/student/views/management.py b/common/djangoapps/student/views/management.py index 847636d5b2e0..f68e28d8ea84 100644 --- a/common/djangoapps/student/views/management.py +++ b/common/djangoapps/student/views/management.py @@ -54,11 +54,7 @@ render_to_response, render_to_string, # noqa: F401 ) -from openedx.core.djangolib.markup import HTML, Text -from openedx.core.lib.api.authentication import BearerAuthenticationAllowInactiveUser from common.djangoapps.entitlements.models import CourseEntitlement -from openedx.features.course_experience.url_helpers import make_learning_mfe_courseware_url -from openedx.features.discounts.applicability import FIRST_PURCHASE_DISCOUNT_OVERRIDE_FLAG from common.djangoapps.student.email_helpers import generate_activation_email_context from common.djangoapps.student.helpers import ( DISABLE_UNENROLL_CERT_STATES, diff --git a/common/djangoapps/third_party_auth/pipeline.py b/common/djangoapps/third_party_auth/pipeline.py index fde485597bf3..3f52d5b68009 100644 --- a/common/djangoapps/third_party_auth/pipeline.py +++ b/common/djangoapps/third_party_auth/pipeline.py @@ -84,14 +84,6 @@ def B(*args, **kwargs): from common.djangoapps import third_party_auth from common.djangoapps.edxmako.shortcuts import render_to_string -from lms.djangoapps.verify_student.models import SSOVerification -from lms.djangoapps.verify_student.utils import earliest_allowed_verification_date -from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers -from openedx.core.djangoapps.user_api import accounts -from openedx.core.djangoapps.user_api.accounts.utils import username_suffix_generator -from openedx.core.djangoapps.user_authn import cookies as user_authn_cookies -from openedx.core.djangoapps.user_authn.toggles import is_auto_generated_username_enabled -from openedx.core.djangoapps.user_authn.utils import is_safe_login_or_logout_redirect from common.djangoapps.third_party_auth.utils import ( get_associated_user_by_email_response, get_user_from_email, diff --git a/lms/envs/common.py b/lms/envs/common.py index 8c0b932fd930..02fe29de4a4e 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -3281,17 +3281,6 @@ def _should_send_certificate_events(settings): ENTITLEMENTS_EXPIRATION_ROUTING_KEY = Derived(lambda settings: settings.DEFAULT_PRIORITY_QUEUE) -########################## OpenEdX Filters ################################# - -OPEN_EDX_FILTERS_CONFIG = { - "org.openedx.learning.dashboard.render.started.v1": { - "fail_silently": True, - "pipeline": [ - "enterprise.filters.dashboard.DashboardContextEnricher", - ], - }, -} - # TODO: We believe these were part of the DEPR'd sysadmin dashboard, and can likely be removed. SSL_AUTH_EMAIL_DOMAIN = "MIT.EDU" SSL_AUTH_DN_FORMAT_STRING = ( diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index e595a8a1959b..ca07a8c1eb95 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -756,7 +756,6 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core - # openedx-learning edx-enterprise==8.0.3 # via # -c requirements/constraints.txt diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 3fa41fce565a..14252deb1e40 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -589,7 +589,6 @@ edx-drf-extensions==10.6.0 # enterprise-integrated-channels # openedx-authz # openedx-core - # openedx-learning edx-enterprise==8.0.3 # via # -c requirements/constraints.txt