Commit Graph

5858 Commits

Author SHA1 Message Date
Feanil Patel
3abfeb24ca test: Switch the library test to use problem instead of html.
Since we're removing the studio implementation of the html block, update
the library test that was using it to use the problem block instead.
2025-10-16 15:01:36 -04:00
Feanil Patel
fc374e7dfa Merge pull request #37474 from openedx/fix-assert-dict-contains-subset-depr
fix: replace deprecated assertDictContainsSubset()
2025-10-14 13:42:51 -04: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
farhan
dc074d57cd chore: Move sharing_sites into video_configuration app
- https://github.com/openedx/edx-platform/issues/37456
2025-10-10 17:25:39 +05:00
Taimoor Ahmed
4c051378d0 feat!: remove last calls to cs_comments_service (#37376)
This removes the last remaining code that called out to the
cs_comments_service. All forums backend logic now uses the v2 API from
the forum repo (https://github.com/openedx/forum). This does NOT remove
MongoDB support.

This also implements the endpoint to retrieve all comments for a user
using the new forum backend. This is not actually called from any known
frontend code, but it has not been formally deprecated as an endpoint,
and therefore needs to be supported.

As part of the cleanup, the ENABLE_FORUM_V2 course waffle flag has also
been removed, along with all remaining switching logic that used to
route between the Python API in the forum repo and service calls to the
cs_comments_service Ruby service.

Other endpoints affected (switching logic removed):

* get course commentable counts
* get/update course user stats
* update comment/thread/user
* delete thread (implementation moved to forum repo)
* follow
* retire user

This is part of the following overall DEPR ticket:
  https://github.com/openedx/cs_comments_service/issues/437
2025-10-08 11:36:52 -04:00
Abdul-Muqadim-Arbisoft
e5b497cbba fix: prevent None entrance_exam_minimum_score_pct from breaking CourseOverview sync (#37339)
* fix: prevent None entrance_exam_minimum_score_pct from breaking CourseOverview sync

When entrance exams are disabled in Studio, the field
`entrance_exam_minimum_score_pct` was set to `None`. This caused silent failures
when saving `CourseOverview` because the database column requires a float (NOT NULL).

This patch ensures that:
- CourseOverview sanitizes None values by falling back to
  `settings.ENTRANCE_EXAM_MIN_SCORE_PCT` (default=50).
- Studio avoids writing `None` and instead applies the configured default.

Impact:
- Prevents IntegrityErrors and silent failures when updating course settings.
- Restores proper syncing between modulestore (Mongo) and CourseOverview (MySQL).
- Fixes reported issues such as display name changes not persisting and course
  start dates not syncing.

Closes: https://github.com/openedx/edx-platform/issues/37319#

* refactor: clean up entrance_exam_minimum_score_pct handling

- Consolidate logic to avoid repeated assignments
- Centralize None fallback and int/float normalization
- Improve readability with inline comment and consistency with Open edX style

* test: update entrance exam deletion test to expect default min score

- Adjusted `test_entrance_exam_created_updated_and_deleted_successfully` to check for
  `settings.ENTRANCE_EXAM_MIN_SCORE_PCT` instead of `None` after exam deletion
- Added handling for both int and float defaults (`/100` for integer case)
2025-10-08 15:26:00 +05: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
Rodrigo Mendez
0c9997ce92 feat: Implementation of library v2 backup endpoints 2025-10-06 18:13:02 -04:00
Braden MacDonald
245b861e01 fix: reindex_studio could crash if an XBlock child isn't loadable (#37177)
Co-authored-by: Chris Chávez <xnpiochv@gmail.com>
2025-10-02 18:22:28 -07:00
Maxwell Frank
7fc88d5a25 feat: extend program dash endpoint to b2c (#37387) 2025-10-01 11:38:05 -04:00
Chris Chávez
51bfd3febe feat: Add blockType to xblockPreview & title to xblock_iframe [FC-0097] (#37362)
- Adds `blockType` and `is_modified` to the `showXBlockLibraryChangesPreview` iframe message.
- Add title to the `xblock_iframe`
- Add `is-modified` to `studio_xblock_wrapper`
- Add `disable_staff_debug_info` as a query param in `render_xblock`
- `downstream_is_modified` added to ComponentLink and ContainerLink
2025-09-29 23:27:32 +00:00
Muhammad Arslan
51ac947caf fix: always generate block structure from "published-only" branch (#37335)
Block structures are meant to be an optimization for the LMS, meaning
that they should always be collecting from the published branch of
modulestore. This is what happens by default when it's run from the LMS
celery process, but this code is sometimes invoked from a Studio worker
(e.g. development mode celery, running in immediate in-proc mode).

---------

Co-authored-by: Peter Pinch <pdpinch@mit.edu>
2025-09-26 20:58:12 -04:00
Kyle McCormick
7275ce1634 feat!: modulestore_migrator (#36873)
This introduces the modulestore_migrator app, which can be
used to copy content (courses and libraries) from modulestore
into Learning Core. It is currently aimed to work on the legacy
library -> v2 library migration, but it will be used in the future
for course->library and course->course migrations.

This includes an initial REST API, Django admin interface,
and Python API.

Closes: https://github.com/openedx/edx-platform/issues/37211

Requires some follow-up work before this is production-ready:
https://github.com/openedx/edx-platform/issues/37259

Co-authored-by: Andrii <andrii.hantkovskyi@raccoongang.com>
Co-authored-by: Maksim Sokolskiy <maksim.sokolskiy@raccoongang.com>
2025-09-24 11:02:05 -04:00
Feanil Patel
f120a7cac5 Merge pull request #37067 from WGU-Open-edX/collapse-features-dictionary
refactor: flatten FEATURES dictionary with backward compatible proxy
2025-09-18 10:39:48 -04:00
Kaustav Banerjee
6b48ff9470 feat: add ability to override middlewares for recurring nudges
* feat: add ability to override middlewares for recurring nudges

* feat: add ability to run command for all sites
2025-09-17 21:52:39 +05:30
Ali-Salman29
539666dc40 feat!: remove cs_comments_service support for forum's content APIs
- This will force the use of the new v2 forum's APIs for Threads & Comment.
- Update params for get_user_subscription function. It uses the same structure as we have in the get_user_threads.
2025-09-15 09:10:06 -04:00
Muhammad Adeel Tajamul
51a254a45c feat: added feature to rate limit secondary email change (#37356) 2025-09-15 13:45:46 +05:00
Muhammad Adeel Tajamul
1a081f23c0 feat: added configurable param to rate limit email change in account settings (#37349) 2025-09-12 18:21:10 +05:00
Krish Tyagi
a403f4bcc4 chore!: removing of pyjwkest dependency from edx-platform (#37159) 2025-09-11 08:24:17 -04:00
coder1918
790a67a0d1 refactor: flatten FEATURES dictionary with backward compatible proxy 2025-09-09 14:11:39 -06:00
Nathan Sprenkle
cb7f0f4811 fix: fix bad serialization of courseware metadata (#37338)
* Formats single_paid_mode as a dict, rather than named tuple which couldn't be serialized to DictField
* Allow ecommerce_checkout_link to be empty

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-09-09 14:18:20 -04:00
Taimoor Ahmed
ed45fbba37 fix: Invalid read param in forum thread api
This PR fixes the invalid read parameter being passed in forum update_thread api.
this was somehow introduced in this commit 6f522f3992 (diff-b9d08209a02c673887f6ca72b0018758174e95508539adbcb6885f22c7844eb8L292)
2025-09-08 11:17:10 -04:00
Ram Chandra Bhavirisetty
42afa1bb62 chore: remove deprecated DEFAULT_FILE_STORAGE and STATICFILES_STORAGE settings (#37002) 2025-09-05 17:52:33 -04:00
Feanil Patel
06b54e79f2 Merge pull request #36845 from raccoongang/rg/axm-course-catalog-extend-courseware-api
feat: [FC-86] extend courseware api with new fields
2025-09-04 09:46:25 -04:00
Serhii Nanai
ed69cb554b fix: remove unused fields 'prerequisites', 'ocw_links' 2025-09-03 12:38:08 +03:00
Moncef Abboud
9c90fa0dd1 feat: tpa automatic logout with a single redirect 2025-09-01 13:23:45 +02:00
Hassan Raza
515ce7f791 chore: Management command to update preferences (#37297) 2025-09-01 13:08:43 +05:00
Serhii Nanai
577ef63a78 docs: add comment for skip_unless_lms 2025-08-29 13:30:35 +03:00
Serhii Nanai
b0ecbdfbd6 refactor: move import inside testcase
refactor: fix unused imports
2025-08-29 13:30:35 +03:00
Muhammad Adeel Tajamul
acad883a38 fix: added info in notification preferences (#37295) 2025-08-29 11:41:28 +05:00
Serhii Nanai
3a8366e053 docs: update docstring for course info serializer 2025-08-28 18:00:44 +03:00
Serhii Nanai
fa2eddb775 docs: update docstring for prerequisite course serializer 2025-08-28 17:58:06 +03:00
Awais Qureshi
ec83b2aa64 fix: Updated tuple unpacking of signal receivers to match current structure in django52. (#37249) 2025-08-27 17:38:08 +05:00
Eemaan Amir
3b50dbb933 chore: remove edx.notifications.preferences.viewed event (#37285) 2025-08-27 17:04:04 +05:00
Muhammad Adeel Tajamul
abd305df85 feat: added rate limit on one click unsubscribe api (#37272)
* feat: added rate limit on one click unsubscribe api

* fix: fixed failing test

* chore: raise 400 error on invalid username

* fix: fixed pylint
2025-08-27 16:58:06 +05:00
Taimoor Ahmed
7e80061e39 fix: Discussion xblock error when loading for the first time
This PR fixes the user not being created when accessing the discussion xblock as the course_key was missing in some of the api calls and that lead to the forum backend not being fetched correctly.
2025-08-25 09:12:19 -04:00
Tarun Tak
6f13c1e1cd fix!: session ID stability while maintaining inactivity timeout (#36896)
This change modifies the SessionInactivityTimeout middleware to prevent
the session ID from changing on every request while still enforcing the
inactivity timeout.

Key improvements:
- Store datetime values as ISO strings for proper serialization
- Implement hybrid session save approach that only allows full session
  saves periodically (controlled by SESSION_SAVE_FREQUENCY_SECONDS)
- Preserve session ID between requests while still tracking user activity

This resolves the issue where lms_sessionid was changing on every user
interaction, which caused problems.

BREAKING CHANGE: The breaking change is that SESSION_ACTIVITY_SAVE_DELAY_SECONDS was introduced with a 15 minute default, which will change the current behavior. It is not necessarily breaking (since it actually fixes an issue), but this is to bring more attention to the new setting because the default is reasonable, but also somewhat arbitrary.
2025-08-21 23:15:12 -04:00
Navin Karkera
617b6447cc feat: reindex course and recreate upstream links post import and course re-run (#37237)
Index the newly created course after import and course re-run. Also recreate upstream links after course re-run.

We make use of newly created COURSE_RERUN_COMPLETED signal to run post re-run processes.
2025-08-21 18:15:55 +00:00
Awais Qureshi
98f4756d09 fix: Passing unsaved model instances to related filters is no longer … (#37227)
* fix: Passing unsaved model instances to related filters is no longer allowed.
2025-08-20 11:16:20 +05:00
Usama Sadiq
be438f1554 fix: pylint warning arguments-differ (#37234) 2025-08-19 15:24:15 +05:00
Chris Chávez
af01129316 feat: API to retrieve library block/container hierarchy (#36813)
* test: Test for publish section/subsection

* test: published_by is now None for unpublished containers

* test: adds TODO comments to the tests

in anticipation of publishing container children

* feat: adds api to retrieve library block/container hierarchy

* test: adds query counts for hierarchy API tests

These are really high, but highlight the need for future optimizations.

* perf: reduce hierarchy API query counts

* perf: cut query counts in half

Required a refactor of the approach to avoid using the Metadata classes.

* chore: trigger ci

* chore: update openedx-learning constraint

* chore: compile requirements

* test: updating query count

* style: Add missing comment in kernel.in

* fix: get_container_from_key param and comments

* docs: mark api as UNSTABLE and add comment about get_library_object_hierarchy implementation

---------

Co-authored-by: Jillian Vogel <jill@opencraft.com>
Co-authored-by: Rômulo Penido <romulo.penido@gmail.com>
2025-08-18 18:15:47 -07:00
Rômulo Penido
1a9f6e15a5 feat: copy/paste containers (units/subsections/sections) in Studio (#37008)
* feat: copy endpoint for Library Containers

* fix: make source_usage_key optional and removing upstram info for xblock olx

* test: add tests

* refactor: remove unecessary changes to reduce diff

* fix: change assert

* feat: add `write_upstream` field to ContainerSerializer

* fix: remove comment

* refactor: change `source_usage_key` type and more

* fix: try to infer the source version

* fix: InvalidKeyError while copying container with assets

* fix: read source_version from OLX

* fix: remove store check

* fix: change ident

Co-authored-by: Braden MacDonald <mail@bradenm.com>

* feat: fill source_version and make get_component_version_from_block public

* refactor: rename `source_key` to `copied_from_block`

* test: add test to `write_copied_from=false`

* fix: removing unused fallback elif

* fix: remove `copied_from_block` param

---------

Co-authored-by: Braden MacDonald <mail@bradenm.com>
2025-08-14 08:06:35 -07:00
Mubbshar Anwar
ee8b19442d fix: Remove assertQuerysetEqual (#37200)
replace assertQuerysetEqual with assertEqual dut to deprecation in Django 5.2
2025-08-13 22:24:08 +05:00
M. Sumair Khokhar
eb66c5d88b fix: test failure in test_all_languages (#37201)
* fix: test failure in test_all_languages
2025-08-13 22:18:41 +05:00
Feanil Patel
2a53e2e561 Merge pull request #37165 from openedx/feanil/remove_unnecessary_pin
feanil/remove unnecessary pin
2025-08-13 08:57:57 -04:00
Mubbshar Anwar
b52e72f6e0 fix: fix timezone utc for 52 (#37199)
The django.utils.timezone.utc is removed in Django 5.1.

issue: 37151
2025-08-13 17:46:17 +05:00
Hassan Raza
9a8dc51535 chore: Handle forbidden username exceptions on registration (#37185) 2025-08-13 12:34:11 +05:00
Feanil Patel
bf62862b9f test: Fix notifacitons test for new DRF version.
DRF was swallowing an underlying error string and providing its own
which was being checked for here.

See https://github.com/encode/django-rest-framework/pull/8051 for
details.

The new version fixes that underlying issue and so the test failed.

Rather than checking for the exact string of the 404 which is not
relevant, we now just verify that the error code associated with the
request matches the HTTP response. This should make the test more
resilient to future text changes in the underlying Django function
`get_object_or_404`
2025-08-12 16:08:29 -04:00
Feanil Patel
7121d4e466 fix: Correct serializer model reference.
When linking a DRF serializer with a model, you need to link it to the
model class not an instance of the model.

The newer version of DRF tries to access the model_manager from the
model here and runs into issues if it's not defined correctly.
2025-08-12 13:59:40 -04:00