feat: add license_enforcement logic.#178
Merged
anfbermudezme merged 4 commits intopearson/ulmofrom Jan 2, 2026
Merged
Conversation
019a044 to
aef68aa
Compare
c951f5e to
3898ed6
Compare
JuanDavidBuitrago
approved these changes
Dec 31, 2025
luisfelipec95
approved these changes
Jan 2, 2026
3898ed6 to
743e45e
Compare
743e45e to
e4f4c6d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ticket
Description
This PR updates edx-platform to consume the new
openedx_filters.license_enforcementfilter contracts for the CCX / license_enforcement domain, replacing legacyrun_extension_point-style behavior with explicit, pipeline-driven filter invocations.With these changes, licensing-related decisions in CCX flows (tab visibility, coach dashboard access, pending enrollments, and enrollment enforcement) become configurable via
OPEN_EDX_FILTERS_CONFIGand decoupled from platform internals, while preserving existing behavior when Course Licensing is not enabled.This PR also includes related enrollment/invitation updates:
Changes made
CCX + Course Licensing integration (filter-driven)
CcxCreationPermissionRequested).CcxCreationPermissionRequestedallows it.CcxCoachTabAccessRequested.CcxPendingEnrollmentsRequestedand passed to the CCX dashboard context when licensing is enabled.CcxEnrollmentLicenseEnforcementRequested.Instructor Dashboard behavior for licensed CCXs
CcxLicensedStatusRequested).CCX utilities / helpers
get_master_course_by_ccx_idexclude_master_course_staff_usersmultiple_ccx_per_coach(gated byALLOW_MULTIPLE_CCX_PER_COACHsite config)Enrollment / invitation support
course_urlgeneration to point to the Learning MFE (LEARNING_MICROFRONTEND_URL).CourseEnrollmentStarted) so pipelines can prevent enrollment-related operations when needed for Enrollments Allowed.How to test
Automated
pytest lms/djangoapps/ccx/pytest lms/djangoapps/instructor/Manual / functional
Baseline behavior (licensing disabled)
OPEN_EDX_FILTERS_CONFIGpipeline step enables licensing.Licensing enabled behavior
OPEN_EDX_FILTERS_CONFIGsoCourseLicensingEnabledRequestedreturnsTrueand implement the licensing plugin steps for:CcxCreationPermissionRequestedCcxCoachTabAccessRequestedCcxPendingEnrollmentsRequestedCcxEnrollmentLicenseEnforcementRequestedCcxLicensedStatusRequestedEnrollment email links
course_urlpoints to the Learning MFE route.Dependencies / related work
Reviewers