19972 Commits

Author SHA1 Message Date
Rodrigo Mendez
12a46e6463 feat: AuthZ for course authoring compatibility layer (#38013) 2026-03-06 09:35:17 -07:00
Agrendalath
ba5e620e3e fix: typo in the "from allowed to enroll to unenrolled" transition state 2026-03-05 14:57:05 -05:00
Feanil Patel
8048dbfb3a fix: exclude test entry points from karma sourceFiles patterns
In karma 6, files matched by earlier patterns aren't overridden by later
patterns. The sourceFiles patterns like `cms/**/!(*spec|djangojs).js`
matched test entry files (e.g., `cms/js/spec/main.js`) because they
don't end with "spec" or "djangojs". This prevented runFiles from
setting `included: true` on these files, so tests never started.

Split the sourceFiles patterns to precisely exclude spec/main*.js test
entry points while still serving other source files:
- Direct children of the js directory
- Subdirectories except spec/
- spec/ subdirectory, excluding main* files

This allows runFiles to control test entry point inclusion.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-04 10:13:18 -05:00
Feanil Patel
8143796b26 docs: update references from setup.py to pyproject.toml
Update documentation, comments, and docstrings throughout the codebase
to reflect the migration from setup.py to pyproject.toml:

- Transformer class docstrings: changed to reference "entry point name
  in the package configuration" for better future-proofing
- Block structure module docs: updated to reference pyproject.toml
- Test file comments: updated entry point references
- Config files (tox.ini, pytest.ini): updated references
- Documentation (extension_points.rst, course apps ADRs): updated to
  reference pyproject.toml with inclusive language for external packages
- Requirements documentation (github.in): updated with inclusive language
- edxmako README: modernized install command to use pip install

Historical ADRs and references to external packages that may still use
setup.py were intentionally left unchanged or updated with inclusive
language acknowledging both pyproject.toml and setup.py.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-03 10:46:16 -05:00
Alexander Dusenbery
2fcce121e9 feat: make marketing email and research opt-in checkboxs selectively ignorable
We want to support a flow for SSO-enabled Enterprise customers who have
agreed off-platform that none of their learners will opt-in to marketing emails
or sharing research data. This change proposes to do so by
adding an optional field that, when enabled, disables the presence of
the two checkboxes on this registration form and sets their values to false.

ENT-11401
2026-03-02 12:47:21 -05:00
feanil
7866c68dbf chore: geoip2: update maxmind geolite country database 2026-03-02 09:30:13 -05:00
Felipe Bermúdez-Mendoza
b367336d60 feat: make ACCOUNT_MICROFRONTEND_URL site aware. 2026-03-02 08:18:12 -05:00
Braden MacDonald
12e9af4f5c fix!: split modulestore's has_course(ignore_case=True) was not working (#38044)
BREAKING CHANGE: this forces course IDs in modulestore to be unique (case insensitive). This was always supposed to be the case, but it wasn't working properly on MySQL. Upgrading past this commit may cause a migration failure if you have conflicting course IDs - see the migration 0004 docstring for details.
2026-02-25 09:05:15 -08:00
Braden MacDonald
3e522d5272 feat: bump opaque-keys to get case-sensitivity support + default max_length (#38044)
refactor: remove some 'max_length=255' to be more DRY

feat: example of making an OpaqueKeyField case_sensitive (modulestore_migrator)

test: update test now that we're using case-insensitive collation on SQLite
2026-02-25 09:05:15 -08:00
Taylor Payne
7499a5f1e6 feat: authorize advanced settings endpoints via openedx-authz when fl… (#38009) 2026-02-19 12:03:11 -07:00
Kyle McCormick
c70bfe980a build!: Switch to openedx-core (renamed from openedx-learning) (#38011)
build!: Switch to openedx-core (renamed from openedx-learning)

Instead of installing openedx-learning==0.32.0, we install openedx-core==0.34.1.
We update various class names, function names, docstrings, and comments to
represent the rename:

* We say "openedx-core" when referring to the whole repo or PyPI project
  * or occasionally "Open edX Core" if we want it to look nice in the docs.
* We say "openedx_content" to refer to the Content API within openedx-core,
   which is actually the thing we have been calling "Learning Core" all along.
  * In snake-case code, it's `*_openedx_content_*`.
  * In camel-case code, it's `*OpenedXContent*`

For consistency's sake we avoid anything else like oex_core, OeXCore,
OpenEdXCore, OexContent, openedx-content, OpenEdxContent, etc.
There should be no more references to learning_core, learning-core, Learning Core,
Learning-Core, LC, openedx-learning, openedx_learning, etc.

BREAKING CHANGE: for openedx-learning/openedx-core developers:
You may need to uninstall openedx-learning and re-install openedx-core
from your venv. If running tutor, you may need to un-mount openedx-learning,
rename the directory to openedx-core, re-mount it, and re-build.
The code APIs themselves are fully backwards-compatible.

Part of: https://github.com/openedx/openedx-core/issues/470
2026-02-18 22:38:25 +00:00
Muhammad Qasim Gulzar
d847d222b2 fix: migrations to make postgresql compatible. (#35762)
This commit introduces several improvements to database migration
scripts to enhance compatibility between MySQL and PostgreSQL, ensure
case-sensitive behavior where needed, and improve migration safety and
correctness. The changes include dynamic SQL generation based on the
database engine, improved transaction handling, and adjustments to
field types and adapters for better cross-database support.

Database compatibility and case sensitivity improvements:

- Migration scripts in split_modulestore_django and learning_sequences
  now dynamically generate SQL statements for altering column case
  sensitivity and uniqueness based on whether the database is MySQL or
  PostgreSQL, ensuring correct behavior across both backends.
  - common/djangoapps/split_modulestore_django/migrations/0001_initial.py
  - openedx/core/djangoapps/content/learning_sequences/migrations/0001_initial.py

- The courseware.fields module now checks for "postgresql" in the
  database engine string instead of a specific backend name, improving
  compatibility with different PostgreSQL drivers.
  - lms/djangoapps/courseware/fields.py

- The 0011_csm_id_bigint migration in courseware now supports both MySQL
  and PostgreSQL for altering column types, with specific SQL for each
  backend.
  - lms/djangoapps/courseware/migrations/0011_csm_id_bigint.py

- The 0009_readd_facebook_url migration in course_overviews now
  introspects the table structure using backend-specific SQL for MySQL
  and PostgreSQL, ensuring correct detection of existing fields.
  - openedx/core/djangoapps/content/course_overviews/migrations/0009_readd_facebook_url.py

Migration safety and correctness:

- Service user creation and deletion in the commerce app is now wrapped
  in atomic transactions to ensure database consistency.
  - lms/djangoapps/commerce/migrations/0001_data__add_ecommerce_service_user.py

- The move_overrides_to_edx_when migration in courseware now specifies
  a no-op reverse migration, preventing accidental data loss on migration
  rollback.
  - lms/djangoapps/courseware/migrations/0008_move_idde_to_edx_when.py

Adapter registration and code cleanup:

- The common_initialization app now registers custom adapters for
  CourseLocator and related classes in psycopg2 when using PostgreSQL,
  ensuring proper serialization of these types.
  - openedx/core/djangoapps/common_initialization/apps.py

- Minor code cleanup and formatting improvements in migration files,
  including import order and field formatting for readability.
  - lms/djangoapps/grades/migrations/0015_historicalpersistentsubsectiongradeoverride.py
2026-02-12 14:02:46 -05:00
Chris Chávez
3c4cf0e2d2 fix: Nits on styles of library icon [FC-0114] (#37980)
- Fixes the issues described in https://github.com/openedx/frontend-app-authoring/issues/2762#issuecomment-3837508959:
    - Changed the background color for the library icon in the unit page.
    - Update punctuation for the library icon tooltip in the unit page.
    - Allows breaking the tooltip into multiple lines.
2026-02-09 22:10:38 +00:00
Feanil Patel
18113c63af test: update Jest snapshots for @edx/paragon 2.6.4 → 2.7.0
The caret version pinning change updated @edx/paragon from 2.6.4 to
2.7.0, which caused Icon component IDs to change from "Icon2" to
"Icon1" in snapshot tests.

This is a cosmetic change with no functional impact. The Icon
component generates unique IDs using a module-level counter in
src/utils/newId.js:

    let lastId = 0;
    const newId = (prefix = 'id') => {
      lastId += 1;
      return `${prefix}${lastId}`;
    };

The ID values depend on module import order, which changed slightly
between versions. The visual rendering and accessibility features
(screen reader text) are unaffected.

References:
- Paragon Icon component: https://github.com/edx/paragon/blob/v2.7.0/src/Icon/index.jsx
- Paragon newId utility: https://github.com/edx/paragon/blob/v2.7.0/src/utils/newId.js
- Version comparison: https://github.com/edx/paragon/compare/v2.6.4...v2.7.0

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 11:54:05 -05:00
Akanshu Aich
2d82d90279 refactor: migrated FEATURES dict settings to top-level in core files and fixed related test files. (#37389)
* refactor: moved remaining feature dicts settings into top-level settings.

* refactor: moved remaining feature dicts settings into top-level settings.

* fix: fixed the test files

* fix: fixed tehe pylint errors

* fix: fixation of the cms ci failure

* fix: fixed remaining feature settings for cms

* fix: added fix for requirements

* fix: added fix for lms tests

* fix: resolved the test views issue

* fix: configured views file and test_views

* fix: fixed lint errors and assertion issues

* fix: added fix for base url issue in test view

* fix: added fix for base_url and assertion issue

* fix: added configurations for base utl fix

* fix: handled none issue for mfe config

* fix: corrected override settings in test views

* fix: added getattr defensive technique for view settings

* fix: reverted views and test_views file

* fix: added settings in views file

* fix: added with patch within functions in test view

* fix: rearranged the features in default_legacy_config

* fix: fixing the tests  with clearing cache

* fix: reverted test views to verify the CI check

* fix: added cache clear in mfe config test

* fix: fixed the patch toggles to override settings

* fix: fixed the lint errors

* fix: changed patch toggle to override settings
2026-01-20 11:55:26 -05:00
Tarun Tak
f9d65aa23f chore: use zoneinfo instead of pytz 2026-01-09 12:22:23 -05:00
Daniel Wong
cd6faeb966 Follow-up to PR 36789 (#37751)
* refactor(certificates): replace direct model imports with data classes and APIs

* fix: use Certificates API to create certificates

* docs: update docstring for get_certificate_for_user

* fix: remove trailing whitespace

---------

Co-authored-by: coder1918 <ram.chandra@wgu.edu>
Co-authored-by: Deborah Kaplan <deborahgu@users.noreply.github.com>
2026-01-08 13:03:46 -05:00
Krish Tyagi
1ffa136d45 fix: removal of temporary saml toggle (#37651)
Removes temporary rollout toggle ENABLE_SAML_CONFIG_SIGNAL_HANDLERS. The
toggle was used to rollout a fix, and now the fix that uses the signal handlers is
enabled by default.

The only follow-up needed by anyone is to no longer set this toggle, which will no
longer do anything.
2026-01-06 16:38:41 -05:00
feanil
e31bbae35f chore: geoip2: update maxmind geolite country database 2026-01-02 11:01:28 -05:00
salmannawaz
2aeac45994 Convert discussion block sass variable into css variables (#37742)
* chore: convert discussion sass variable into css variables
2025-12-30 23:13:47 +05:00
Feanil Patel
00f72bb41e Merge pull request #37504 from Pearson-Advance/felipeb/learning-microfrontend-url-site-aware
feat: make LEARNING_MICROFRONTEND_URL site aware.
2025-12-23 10:58:34 -05:00
Feanil Patel
f2bb6cb2e6 fix: CourseLimitedStaffRole should not be able to access studio.
We previously fixed this when the CourseLimitedStaffRole was applied to
a course but did not handle the case where the role is applied to a user
for a whole org.  The underlying issue is that the CourseLimitedStaffRole
is a subclass of the CourseStaffRole and much of the system assumes that
subclesses are for giving more access not less access.

To prevent that from happening for the case of the CourseLimitedStaffRole,
when we do CourseStaffRole access checks, we use the strict_role_checking
context manager to ensure that we're not accidentally granting the
limited_staff role too much access.
2025-12-11 17:15:53 -05:00
Emad Rad
6a046ebe50 chore: fixed typos 2025-12-11 11:46:44 -05:00
feanil
c2fad03823 chore: geoip2: update maxmind geolite country database 2025-12-02 14:01:21 -05:00
Muhammad Labeeb
8ad4d42e3b feat!: Remove proctortrack references; add requires_escalation_email and show_review_rules options (#37576)
BREAKING CHANGE: All references to the hardcoded 'proctortrack' string have
been removed from the codebase,  as well as the `studio.show_review_rules`
waffle flag. These were used to determine whether an escalation email is
required and whether review rules should be shown. These decisions are now made
based on the value of 'requires_escalation_email' (default False) and 'show_review_rules'
(default True) config items in the PROCTORING_BACKENDS entry.

Additionally:
* The proctoring info api will now return the list of providers which require an escalation
   email so that frontend-app-learning does not need to use a hardcoded check agaist
   the provider name 'proctortrack'.
* Removed translation commands, mock variables and user facing strings that contained
  'proctortrack'.
* Updated all test cases that were using proctortrack to use fake providers names.

Part of: https://github.com/openedx/edx-platform/issues/36329
2025-11-25 09:37:32 -05:00
Haftamu Kebede
f32f8e8ac3 fix: Resolves faling tests when CERTIFICATE_LINKEDIN setting is configured at common.py #37428 (#37437)
In order to be able to share course certificate to LinkedIn, configure
SOCIAL_SHARING_SETTINGS with a value True for CERTIFICATE_LINKEDIN
entry. The setting is not available by default, but when used there
were failing tests and this change ensures all tests pass.

Fixes: https://github.com/openedx/edx-platform/issues/37428#issuecomment-3372788757
2025-11-14 09:05:47 -05:00
Sameen Fatima
8ca34141a6 feat: look up remote_id by remote_id_field_name (#37228) 2025-11-13 09:20:26 +05:00
Felipe Bermúdez-Mendoza
7c42a600da feat: make LEARNING_MICROFRONTEND_URL site aware. 2025-11-07 07:38:21 +01:00
github-actions[bot]
7f8ba45f36 chore: geoip2: update maxmind geolite country database (#37591)
Co-authored-by: feanil <feanil@users.noreply.github.com>
2025-11-06 18:39:34 +00:00
Kyle McCormick
834cb9482d refactor: rename ModuleStore runtimes now that XModules are gone (#35523)
* Consolidates and renames the runtime used as a base for all the others:
  * Before: `xmodule.x_module:DescriptorSystem` and
            `xmodule.mako_block:MakoDescriptorSystem`.
  * After:  `xmodule.x_module:ModuleStoreRuntime`.

* Co-locates and renames the runtimes for importing course OLX:
  * Before: `xmodule.x_module:XMLParsingSystem` and
            `xmodule.modulestore.xml:ImportSystem`.
  * After:  `xmodule.modulestore.xml:XMLParsingModuleStoreRuntime` and
            `xmodule.modulestore.xml:XMLImportingModuleStoreRuntime`.
  * Note: I would have liked to consolidate these, but it would have
          involved nontrivial test refactoring.

* Renames the stub Old Mongo runtime:
  * Before: `xmodule.modulestore.mongo.base:CachingDescriptorSystem`.
  * After: `xmodule.modulestore.mongo.base:OldModuleStoreRuntime`.

* Renames the Split Mongo runtime, the which is what runs courses in LMS and CMS:
  * Before: `xmodule.modulestore.split_mongo.caching_descriptor_system:CachingDescriptorSystem`.
  * After: `xmodule.modulestore.split_mongo.runtime:SplitModuleStoreRuntime`.

* Renames some of the dummy runtimes used only in unit tests.
2025-10-29 15:46:07 -04:00
Ahtisham Shahid
dc7db1d3ad feat: unpinned social-auth-core (#37550)
* feat: unpinned social-auth-core

feat: unpinned social-auth-core

* fix: updated to resolve failing tests

* fix: resolved linter errors and failing tests

* fix: updated get_attr signature according to new version
2025-10-29 13:16:34 -04:00
Krish Tyagi
b86e203249 fix: Improve SAML configuration checks and update warning messages (#37377)
- Removes custom attributes for report. Uses report output only.
- Adds a count for disabled SAML configs.
- Displays disabled status of provider.
- Slug mismatch now informational only (rather than warning)
* Cleans up unit tests.
2025-10-25 00:43:35 +00:00
Taimoor Ahmed
86d9b08b5d feat: remove last cs_comments service references (#37503)
This commit removes all remaining references to cs_comments_service
except the ForumsConfig model. The only purpose of keeping the model
and table around is so that the webapp processes don't start throwing
errors during deployment because they're running the old code for a
few minutes after the database migration has run. We can drop
ForumsConfig and add the drop-table migration after Ulmo is cut.

Also bumps the openedx-forum version to 0.3.7

---------

Co-authored-by: Taimoor  Ahmed <taimoor.ahmed@A006-01711.local>
2025-10-23 10:48:39 -04:00
Sameen Fatima
3a97ff2d5e fix: do not autogenerate username if coming through SSO (#37522)
Co-authored-by: Sameen Fatima <sameen.fatima@A006-01036.local>
2025-10-23 14:47:14 +05:00
Feanil Patel
28ab2ceb67 fix: Drop other references to studiofrontend.
Drop tooling to load studio-frontend components into mako templates and
XSS testing features related to it.
2025-10-20 14:08:45 -04:00
Tobias Macey
0fdb6ed2fe fix: Convert UUIDField columns to uuid type for MariaDB (#37494)
The behavior of the MariaDB backend has changed behavior for UUIDField
from a `CharField(32)` to an actual `uuid` type. This is not converted
automatically, which results in all writes to the affected columns to
error with a message about the data being too long. This is because the
actual tring being written is a UUID with the `-` included, resulting in
a 36 character value which can't be inserted into a 32 character column.
2025-10-20 10:32:44 -04:00
Peter Pinch
264198f013 Merge pull request #37395 from asajjad2/areeb/discussions-edit-errant-string
fix: prevent errant body string on title edit
2025-10-20 08:32:56 -04:00
Kyle McCormick
d91676fcb4 fix: Don't look for a custom Python ZIP in Content Libs V2 (#37500)
Python-evaluated problems were failing to render because they were trying to
invoke `course_id.make_asset_key` in order to obtain the asset key of the
custom Python ZIP file. Learning Core assets work differently (no asset keys,
etc.), and, furthermore, we haven't really thought though how and whether we
want to support custom Python ZIPs in libraries.

So, this fix punts on supporting Python ZIP files in libraries for now, but
enables rendering of advanced CAPA problems which don't rely on a ZIP. This
brings us to parity with Legacy Libraries, which didn't support assets at all
and thus didn't support Python ZIPs either.

Fixes: https://github.com/openedx/edx-platform/issues/37447
2025-10-17 17:29:26 -04:00
Peter Pinch
2b0982f2da Merge branch 'master' into areeb/discussions-edit-errant-string 2025-10-17 12:50:25 -04:00
Tony Busa
1704a0807a chore: remove karma-selenium-webdriver-launcher and unneeded browsers 2025-10-16 12:39:10 -06:00
usamasadiq
8aa2970c51 fix: fix pycodestyle error 2025-10-13 22:53:37 +05:00
usamasadiq
8a2c451439 fix: replace deprecated assertDictContainsSubset() 2025-10-12 11:10:36 +05:00
asajjad2
0b020a4bf4 test: edit form errant behavior 2025-10-10 12:17:29 +05:00
Braden MacDonald
9110ae0d71 revert: chore: upgrade jQuery UI to version 1.14.1 (#37025) (#37449)
This reverts commit e4270785b3.
2025-10-08 18:23:05 +00:00
Luis Felipe Castaño
e4270785b3 chore: upgrade jQuery UI to version 1.14.1 (#37025) 2025-10-08 10:33:53 -07:00
Haftamu Kebede
e46cfa6b32 feat: Certificate sharing to linkedin (optionally) consider course level organization name (#37331)
By adjusting social media sharing settings(specifically linkedin) certificate parameters are autopopulated to LinkedIn API. Additional setting parameters(such as CERTIFICATE_LINKEDIN_DEFAULTS_TO_COURSE_ORGANIZATION_NAME) are introduced to override existing(platform level parameter for organization name) parameters for an operator to configure course level organization name. This will enable learners to share certificate in to LinkedIn with an option for course associated organization to be autopopulated.
2025-10-07 16:02:08 -04:00
Muhammad Farhan Khan
5c759f1e13 refactor: Update and migrate Video Block JS files into xmodule/assets
- Move Video Block JS files from xmodule/js/src/video/ to xmodule/assets/video/public/js/ 
- Update JavaScript files from  RequireJS to ES6 import/export
- test: Enable and fix Karma Js tests for Video XBlock (#37351)

---------

Co-authored-by: salmannawaz <salman.nawaz@arbisoft.com>
2025-10-07 19:01:50 +05:00
Feanil Patel
c0ce868365 Merge pull request #37380 from openedx/feanil/move_user_util
feanil/move user util
2025-10-06 10:37:14 -04:00
asajjad2
761ad42290 fix: prevent errant body string on title edit 2025-10-06 15:43:50 +05:00
feanil
54a116f3d5 chore: geoip2: update maxmind geolite country database 2025-10-01 12:28:35 -04:00