.. image:: https://img.shields.io/pypi/v/edx-enterprise.svg :target: https://pypi.python.org/pypi/edx-enterprise/ :alt: PyPI
.. image:: http://codecov.io/github/edx/edx-enterprise/coverage.svg?branch=master :target: http://codecov.io/github/edx/edx-enterprise?branch=master :alt: Codecov
.. image:: https://readthedocs.org/projects/open-edx-enterprise-service-documentation/badge/?version=latest :target: http://open-edx-enterprise-service-documentation.readthedocs.io/en/latest/ :alt: Documentation
.. image:: https://img.shields.io/pypi/pyversions/edx-enterprise.svg :target: https://pypi.python.org/pypi/edx-enterprise/ :alt: Supported Python versions
.. image:: https://img.shields.io/github/license/edx/edx-enterprise.svg :target: https://github.com/edx/edx-enterprise/blob/master/LICENSE.txt :alt: License
The Open edx Enterprise Service
app provides enterprise features to the Open
edX platform. The majority of these features are structured around the concept
of an Enterprise Customer
, which is an organization or a group of people
that "consumes" courses published on the Open edX platform.
Full documentation for the Open edX Enterprise Service can be found at http://open-edx-enterprise-service-documentation.readthedocs.io/en/latest/.
The code in this repository is licensed under the AGPL 3.0 unless otherwise noted.
Please see LICENSE.txt
for details.
Contributions are very welcome.
Please read How To Contribute <https://github.com/edx/edx-platform/blob/master/CONTRIBUTING.rst>
_ for details.
Even though they were written with edx-platform
in mind, the guidelines
should be followed for Open edX code in general.
A Pull Request Description Template can be found atPULL_REQUEST_TEMPLATE.md
_ - this
template is automatically applied when you open a pull request from GitHub. Please
make sure to include this template if submitting a pull request via other channels.
.. _PULL_REQUEST_TEMPLATE.md: https://github.com/edx/edx-enterprise/blob/master/.github/PULL_REQUEST_TEMPLATE_TEMPLATE.md
After submitting a pull request, please use the Github "Reviewers" widget to add relevant reviewers and track review process.
Please do not report security issues in public. Please email security@edx.org.
Have a question about this repository, or about Open edX in general? Please
refer to this list of resources
_ if you need any assistance.
.. _list of resources: https://open.edx.org/getting-help
.. All enhancements and patches to edx-enterprise will be documented in this file. It adheres to the structure of http://keepachangelog.com/ , but in reStructuredText instead of Markdown (for ease of incorporation into Sphinx documentation and the PyPI description). Additionally, we no longer track the date here since PyPi has its own history of dates based on when the package is published.
This project adheres to Semantic Versioning (http://semver.org/).
.. There should always be an "Unreleased" section for changes pending release.
fix: add back squashed migrations (fixes devstack provisioning)
feat: exec ed content is tagged and distinguishable from edx content
fix: sorting error reporting audits by all datetimes at once instead of three separate order bys
fix: adding an index for performance, testing syntax for no-lock
build: write an updated pylintrc and quiet a noisy logging statement
chore: allowing for page size specification in error reporting api
fix: cleaning up integrated channels inheritance column types
refactor: Removed unused code related to tableau.
fix: internal service error fix for enterprise branding
fix: fixed a bug that didn't allow admins to create an account or update password
fix: fix bug that didn't allow admins to customize branding
fix: catch update transmissions that failed and need to be resent
feat: Add health check for canvas integrated channels
feat: Add in learner and content sync time records to integrated channel configs
fix: make integrated channels api response record field readonly in admin view
fix: Added model field validation for pgp_encryption_key
refactor: update enterprise manual reporting to make it generic
fix: Added validation for PGP encryption key entered by the user.
feat: integration sync reporting viewset improvements
feat: populate freindly_status_message in content and learner metadata api
chore: smarter canvas client update course behavior (course deleted)
feat: integrated channels customer configs soft delete support
chore: fixing api view that included unneeded values
feat: transmission audit admin view and api improvements
fix: integrated channels not picking up courses to update
feat: adding new variables to the learner transmission audit model
feat: Add a new endpoint to generate a signed token for plotly analytics.
feat: remove debug logging used to investigate missing CSOD deletes
feat: Added POST support for catalog query preview
fix: impoving transmission records by moving response body to new table
executive-education-2u
should not be excluded from being associated with that record.
See related enterprise-catalog PR, which includes an ADR: https://github.com/openedx/enterprise-catalog/pull/507feat: integration sync status self service endpoints
feat: tagging exported content records for transmission
chore: add plugin_configuration_id to standard integration logging
chore: smarter canvas client update course behavior
chore: adding http status response code to content record django admin table
chore: cleaning up Canvas client url construction
fix: adhering to urljoin patterns in integrated channels API views
fix: properly truncate payload to resolve missing CSOD deletes
feat: add debug logging to investigate missing CSOD deletes
feat: add debug logging to investigate missing CSOD deletes
feat: expand utility of CSOD deleted_at reset job
fix: properly pass SAP client status back to content transmission records
fix: open redirect url whitelisting for data sharing conseent and change enterprise page
fix: replace id with uuid in branding logo file path
fix: refactor the way we send cornerstone content metadata deletes
fix: accounting for integrated Canvas instances that have no root account Ids.
feat: refactor content metadata jobs to save api call status
fix: accurately selecting content key values when filtering for existing content metadata transmission audits.
fix: integrated channels properly handling customers with multiple catalogs that have overlapping content.
fix: properly removing update transmission payloads from SAP transmissions before saving completed records.
feat: add enable_executive_education_2U_fulfillment
to EnterpriseCustomer
fix: follow-on to cornerstone learner records foreign keys job
fix: create cornerstone learner audit records with new foreign keys
feat: Remove progress, progress_v2 option from reporting configs and move all v1, v2 to v3.
fix: update course run selection logic for SAP content exporter
feat: mark Cornerstone session token fields read-only in admin
feat: update data sharing consent request language
feat: Django Admin tweaks for integrations
feat: Added management command for weekly nudge to dormant enterprise learners
feat: add enable_portal_learner_credit_management_screen
to EnterpriseCustomer
feat: basic integrated channels task concurrency control
feat: Added command for monthly impact report for enterprise administrators
feat: add enable_learner_portal_offers
to EnterpriseCustomer
fix: append backslash to ecommerce url and change get
to get_or_create
in fulfill_pending_course_enrollments
feat: add source query param in data sharing consent url
chore: add logs for dsc
fix: parsing improvements to incorrect learner completion completed-at dates
fix: incorrect learner completion completed-at dates
feat: add lms_user_id to serialized admin users
feat: add dry-run mode to integrated channels
fix: don't transmit schedule data to SAP if start or end date is empty
feat: improved channel logging
fix: add stricter validation on system wide role assignments
fix: Return None for context if a SystemWideEnterpriseUserRoleAssignment
has no enterprise_customer and does not apply to all contexts.
We'll no longer fall back on granting context based on enterprise membership when there is no explicit context.
chore: add migration to remove is_active from role assignment model schema
chore: remove is_active field from role assignment model
chore: remove data-cleaning management commands. prepare for column-removal migration
temp: adding system wide role assignment field and management commands to clean data
fix: correctly handle multiple canvas and blackboard oauth configs
fix: degreed2 improperly tracking completion status
fix: Degreed2 estimated time to complete in hours
fix: update logic for parsing course price for SAP
fix: Degreed2 estimated time to complete in days
feat: admin view improvements
fix: modify signature of EmbargoApiClient.redirect_if_blocked
Make this signature match and use the same signature that
openedx.core.djangoapps.embargo.api.redirect_if_blocked()
now uses.
fix: implement back-off and retry for degreed2 fix: drop tpa_hint param in redirects when no SSO
fix: Undoes revert of 3.44.0, while also ensuring that
SystemWideEnterpriseUserRoleAssignment.get_assignments()
can handle and respect any null values returned
from get_context()
.
fix: no-op version bump (skipping 3.44.0) to account for a revert: https://github.com/openedx/edx-enterprise/pull/1534
fix: [REVERTED] override get_assignments() so that active enterprise uuids come first.
Overrides the SystemWideEnterpriseUserRoleAssignment.get_assignments() method to return a list of (role, context) assignments, where the first item in the list corresponds to the currently active enterprise for the user.
chore: replace enterprise customer drop-downs in django admin
feat: allow admins to remove learners from org
fix: improve guards on fk data backfill job
feat: updated logic for completions in integrated channels
feat: additional fk data backfill performance improvements
feat: speed up fk data backfill
feat: use new foreign keys on integrated channels audit models
feat: add admin_users to EnterpriseCustomerSerializer
fix: remove backfill managment command arguments
fix: Use enterprise customer uuid coming in request data
fix: Add unique_together constraint in SystemWideEnterpriseUserRoleAssignment
fix: Add management command to backfill missing audit record foreign keys.
fix: Squash SAP Success Factors migrations to remove reference to PositiveIntegerField
.
fix: Alter enterprise_course_enrollment_id
field from PositiveIntegerField
to IntegerField
in BlackboardLearnerAssessmentDataTransmissionAudit
and SapSuccessFactorsLearnerDataTransmissionAudit
. This change
require to run migrations on mysql8.
fix: add foreign keys to integrated channels audit models
fix: making making degreed token base url optional
feat: add missing logging for grades api results in integrated channels exporter
feat: added html pages for oauth authorization success/failure
fix: allow null completed_timestamp field for integrated channels learner audit models
feat: setting customer identity provider config is_valid on first SSO login
feat: Allow partial_update on EnterpriseCustomerViewSet
fix: CSOD Learner Audit Django Admin Timeouts
fix: Use correct completions URL for Degreed2
fix: CornerstoneLearnerDataTransmissionAudit admin view timeout
fix: Degreed2 Missing Learner Data Audit Records
fix: Degreed2 Missing Learner Data Audit Records
feat: New integrated channels Blackboard api endpoint to fetch global config creds
feat: Add drafting functionality to save incorrect fields
feat: new integrated channels customer configs list view, new integrated channels config serializer is_valid
field
feat: add enable_browse_and_request field to EnterpriseCustomer
fix: Broken Canvas oauth authorization url
feat: SAPSF content metadata transmission now also sends course schedule
feat: adding CornerstoneLearnerDataTransmissionAudit admin view feat: log if-modified-since + content metadata for CSOD
feat: support filtering by a list of user ids for EnterpriseCustomerUserViewSet
feat: show field show_course_price in SAPSF Django admin form
feat: override chunk size default to match channel capability
chore: squash migrations for blackboard and sap_success_factor apps.
fix: Alter enterprise_course_enrollment_id
field from PositiveIntegerField
to IntegerField
in BlackboardLearnerAssessmentDataTransmissionAudit
and SapSuccessFactorsLearnerDataTransmissionAudit
. This change
require to run migrations on mysql8.
fix: switching blackboard integrated channels from client based auth credentials to global creds
fix: ensure active
field on EnterpriseCustomerUser objects are set to False
appropriately
feat: add management command to clean up active
fields on EnterpriseCustomerUser objects
feat: customer configs draft saving that makes all variables optional feat: feat: Add field for Display name for LMS configs
[3.39.0] chore: dropped Django22, 30 and 31 support
feat: add created to enterprise course enrollment serializer fields
fix: update link_learners action to respond with error when payload is empty.
fix: bugfix for Cornerstone missing completion records
fix: more logging to debug missing completion records
fix: Django Admin bugfix
feat: New crud viewset for IC degreed2 configurations
feat: Adds toggle_universal_link endpoint
feat: Dependency upgrades
fix: check if instance is an iterable rather than a list in EnterpriseCustomerUserReadOnlySerializer
feat: add enterprise role assignments to EnterpriseCustomerUserReadOnlySerializer
fix: Integrated channels Degreed2 exporter now handles invalid start/end date in content metadata item
fix: add basic_list
action to EnterpriseCustomerInviteKeyViewSet
to return unpaginated set of invite keys.
feat: new oauth state for multi-lms-configuration
feat: allow more than 1 lms configuration per lms-kind
feat: update enterprise_customer_invite_key
filter and serializer
feat: Show OAuth Auth link for Blackboard Admin
fix: add support for an enterprise_customer_invite_key
UUID query parameter to be passed and handled by the EnterpriseProxyLoginView
feat: OAuth Auth link for Blackboard Admin
feat: Integrated channels, grade send logic only logs instead of raising when enterprise_customer_user record is inactive
feat: add is_active on enterprise customer invite key
feat: improved integrated channel log consistency
feat: added view to link learners from a enterprise customer key
fix: require expiry date on EnterpriseCustomerInviteKey
model
feat: reformat integrated channels logging to be more splunk friendly
docs: Updating help_text for universal_link field on EnterpriseCustomer model
feat: Adding universal_link field to EnterpriseCustomer model
feat: add try catch block to skip unfound courses
feat: add enterprise customer invite key model and viewset
feat: New management command to revert enrollment data
feat: SAPSF integrated no longer considers grade change as a reason to retransmit completions.
feat: New management command to backfill end dates on Canvas
fix: incorrectly skipping completion transmissions
feat: allow filtering enterprise learners by enterprise uuid and enterprise role
fix: Moodle duplicate content metadata records detected
fix: allow for records to be saved for integrated channels' content across catalogs
fix: CSOD API session tokens bugfix
fix: CSOD API session tokens are now saved to the customer's configuration instead of individual transmission audits
feat: integrated channels only requests content metadata for courses that need updating
feat: Change Bulk Enrollment Assignment Logic for Pending learners
fix: no longer notify learners of already existing enrollments
fix: Rename model field from key to client_id: Degreed2
feat: New Integrated channel Degreed v2.
feat: Added management command to fix DSC records having spaces instead of +.
fix: pip-tools upgrade
feat: new integrated channels content metadata transmitter flow
fix: blackboard logging function was not returning desired string
fix: properly weight blackboard grades
jsonfield
from jsonfield2
EnterpriseCustomerUser
records are re-linked.EnterpriseCustomerUser
records get deleted, also delete the "enterprise_admin" role specific to the relevant enterprise customer.failure_reason=dsc_denied
to the DSC failure url when learner denies the DSC terms.progress_v3
report type for enterprise reporting.failure_url
query params when a verified course mode
is not available for DSC-based enrollments.AdminNotification
table.EnterpriseCustomerUser
record only deletes the enterprise_learner
system-wide role for that
particular EnterpriseCustomerUser
, as opposed to all enterprise_learner
roles associated with the user.page_size
is passed as a param to the get_content_metadata
endpoint.
Add a unit test for the EnterpriseCatalogApiClient.get_content_metadata()
method, which
was previously untested.ENABLE_MULTIPLE_USER_ENTERPRISES_FEATURE
waffle switchenable_compression
flag in EnterpriseCustomerReportConfiguration table.Added new field reply_to in enterprise customer where learner's reply to enterprise emails will be delivered.
Removed migrations that have been merged into squashed migrations.
--enrollment-before
and --no-commit
params in email_drip_for_missing_dsc_records
command.TableauAuthView
enable_integrated_customer_learner_portal_search
field on the EnterpriseCustomer
model.enterprise-customer
API endpoint.enterprise_customer__name
is now a viable search fieldINFORMATION_SCHEMA.TABLES
list_select_related
None
values passed to enterprise catalog creations callsproxied_get()
to clean up duplicate logic.roles_api.roles_by_name()
.SystemWideEnterpriseUserRoleAssignment
records in a way
that makes them more explicitly defined.utf-8-sig
encoding to handle Byte Order MarkOwners
field to Partners
for Cornerstone Integration[3.17.38]
EnterpriseCourseEnrollment
if we successfully create/update a CourseEnrollment
recordroles_api
module and use the roles API in signal receivers
that need to create or delete role assignments.enterprise_customer
to which that user is linked.student.CourseEnrollment
in the EnterpriseCourseEnrollmentSerializer
.SystemWideEnterpriseUserRoleAssignment
, Use either applies_to_all_contexts
or enterprise_customer
if they are True or non-null, respectively, in determining the result of get_context()
,
but continue to return list of all linked enterprise customer UUIDs if not, (which is the current behavior).
This is a small step on our journey to explicitly defining user-role assignments.SystemWideEnterpriseUserRoleAssignment
model, adds an enterprise_customer
FK (nullable)
and an applies_to_all
boolean field (defaults to False) that indicates if the user has wildcard permissions.EnterpriseCourseEnrollment
and related
LicensedEnterpriseCourseEnrollment
records via the Django Admin site, so that site admins can manually
delete enterprise enrollments that were created in error.
This is only allowed if a Django settings feature flag is set to True
.applies_to_all_contexts
field to SystemWideEnterpriseUserRoleAssignment
.third_party_auth
should be imported as common.djangoapps.third_party_auth
.sender_alias
in enterprise customer which will be used in emails except of default alias.enterprise_course_enrollments
API endpoint deems the course is complete even though the course itself may not have ended yet per the configured dates.EnterpriseCourseEnrollment
docstring, add is_active
property to same.student.CourseEnrollment
unenrollment signal, as introduced in 3.17.0student.CourseEnrollment
unenrollment signal and delete associated
EnterpriseCourseEnrollment
record if one exists (we will have a historical record of the deletion).EnterpriseCustomerUser
by both user_id and enterprise_customer to handle users who are pending for more than 1 enterprise.is_enrollment_active
key that indicates the status of the enterprise enrollment's related student.CourseEnrollment`. Allow the endpoint to optionally accept an
?is_active`` query param, so that clients may request
only active enrollments from it.handle_user_post_save
to account for the potential of being a pending learner/admin for more than 1 Enterprise.handle_user_post_save
to be responsible for linking PendingEnterpriseCustomerUser records and granting admin permissions.get_platform_logo_url
in the legacy Django templatesget_platform_logo_url
and update default branding colors.edx-platform ADR #7 <https://github.com/edx/edx-platform/blob/master/docs/decisions/0007-sys-path-modification-removal.rst>
_.course_id
column in the "Manage Learners" CSV bulk upload to allow manual enrollments in multiple courses at once.get_service_usernames()
to read from a list variable (that may not exist).seed_enterprise_devstack_data
management command now accepts an enterprise name when creating an enterprise,
and the learner portal is activated by default.default_contract_discount
to the EnterpriseCustomer
model and passing it to ecommerce when creating ordersEnterpriseContentCatalog.save()
method to sync the content_filter
from an associated
EnterpriseCatalogQuery
, if appropriate.update_enterprise_catalog_query
signal.seed_enterprise_devstack_data
management command is now idempotent when creating an enterprise,
and creates users and operator roles for the license-manager and enterprise-catalog workers.update_course_enrollment_mode_for_user
method to the EnrollmentApiClient.saved_for_later
.saved_for_later
and is_revoked
.banner_border_color
and banner_background_color
branding config fields.banner_border_color
and banner_background_color
branding config fields.auth.User
record with the given user_email already exists.linked
attribute is False)update_or_create
a system-wide enterprise role named enterprise_catalog_admin
migrate_enterprise_catalogs
management command to check if a catalog already exists in the enterprise-catalog service. If a catalog already exists, it will be updated with a PUT request; otherwise, a new catalog will be created with a POST request.create_enterprise_course_enrollments
management command.user_not_enrolled
errormanual enrollments api
to include enterprise customer infoedx-tincan-py35
PYPI package instead of downloading via git[2.0.18] - 2019-11-13
Enterprise Customer Learners
and System wide Enterprise User Role Assignments
admin screenunlink_inactive_sap_learners
command and matching social auth user by uid
fieldcornerstone
with course-list API.SystemWideEnterpriseUserRoleAssignment
SystemWideEnterpriseUserRoleAssignment
admin interface search to support search by enterprise customeravailability
key to default content filter for ECC.assign_enterprise_user_roles
management command to also assign catalog and enrollment api admin roles.RouterView
if user is already enrolled in course run of a course then user will land on that course_run.enterprise-openedx-operator
role.edx-openedx-operator
role.assign_enterprise_user_roles
management command to also assign enterprise operator role.transmit_learner_data
command is runprogress_v2
option in the reporting config to be used for data API fetching.json
report type.EnterpriseIntegratedChannel
model and any other related but unused code.enabled-course-modes
field of EnterpriseCustomerCatalogerror
to info
in our LMS API Client, as it wasn't really an error.force_fresh_session
decorator in conjunction with enterprise_login_required
require_account_level_consent
, but no migration.require_account_level_consent
nullable.configuration_helpers
.auth-user
endpoint completely.consent.models.DataSharingConsent
model for when dealing with consent.consent
app.EnterpriseApiClient
method for getting enrollment data about a single user+course pairtransmit_learner_data
to support sending completion data for
self-paced courses, and to use the Certificates API for instructor-paced courses.Added ^^^^^
Technical features ^^^^^^^^^^^^^^^^^^
Version | Tag | Published |
---|---|---|
3.60.4 | 1mo ago | |
3.60.3 | 1mo ago | |
3.60.2 | 1mo ago | |
3.60.1 | 1mo ago |