Commit Graph

25618 Commits

Author SHA1 Message Date
Brian Buck
81bdfdd8d2 feat: Adds course_run field to CourseInformationSerializer v2
Adds sort_order field to tabs JSON in the tabs list in CourseInformationSerializer v2 serializer

Move course_run below course_number and also move the serializer method.

Auto-format removing extraneous white space.

Add trailing commas to the instructor course tabs list to improve the diff going forward.

Add comment about sort order
2025-12-16 09:20:28 -07:00
Leonardo Beroes
70ea641c99 feat: Improve robust score rendering with event-based architecture
This commit implements a comprehensive solution for test score integration in the
enhancement system along with improvements to the score rendering mechanism. Key
changes include:

- Add event handler for rendering blocks with edx-submissions scores
- Implement event-based mechanism to render XBlocks with scoring data
- Create signal handlers in handlers.py to process external grader scores
- Develop specialized XBlock loader for rendering without HTTP requests
- Add queue_key propagation across the submission pipeline
- Register submission URLs in LMS routing configuration
- Add complete docstrings to score render module for better code maintainability
- Add ADR for XBlock rendering with external grader integration
- Add openedx-events fork branch as a dependency in testing.in
- Upgrade edx submission dependency

These changes support the migration from traditional XQueue callback HTTP requests
to a more robust event-based architecture, improving performance and reliability
when processing submission scores. The included ADR documents the architectural
decision and implementation approach for this significant improvement to the
external grading workflow.
2025-12-15 09:01:40 -05:00
Usama Sadiq
e1747f3844 build: add support for Python 3.12 (#37160)
* build: add support for Python 3.12
2025-12-15 12:12:29 +05:00
Emad Rad
6a046ebe50 chore: fixed typos 2025-12-11 11:46:44 -05:00
Irtaza Akram
99c6e901d9 Convert Problem Block Mako Templates to Django Templates (#37570)
* fix: convert mako to django templates for problem block

* fix: pylint issues
2025-12-09 19:29:06 +05:00
Ahtisham Shahid
cda62c22db feat: added unfollow behaviour in discussion notification (#37690) 2025-12-08 12:14:00 +05:00
Taylor Payne
d592784b35 refactor: lift shared test settings up to common module (#37714) 2025-12-04 16:50:12 -07:00
Javier Ontiveros
215116028a feat: instructor dash - change due date v2 endpoint (#37685)
* feat: added extensions v2 endpoint
2025-12-03 15:39:15 -05:00
Asespinel
957e254a0a fix: Course search pill not cleared when text deleted. (#37709)
* fix: Course search pill not cleared when text deleted

* chore: fix spacing

Co-authored-by: Feanil Patel <feanil@axim.org>

---------

Co-authored-by: Feanil Patel <feanil@axim.org>
2025-12-03 11:28:49 -05:00
KEVYN SUAREZ
6f391d93b9 feat: enrollment_date added to csv report and add custom fields method (#37264)
* chore: enrollment_date added to csv report and add custom fields method managing

* test: tests added

* fix: pylint fix

* fix: new line at test_basic.py added

* feat: new function added to handle available features with custom fields

* chore: replace include_ parameters with direct feature checks

* feat: type validation for custom attributes added

* chore: site config name and variable updated, attribute fixing erased

* test: tests updated
2025-12-03 10:43:40 -05:00
Ahtisham Shahid
ad513cbd23 fix: removed course_id from notification flag implementation (#37716) 2025-12-03 16:38:17 +05:00
Serhiii Nanai
0c3d709d63 feat: add assignment color codes to Progress API (#37438)
* feat: change list of color codes

* fix: add missing color

* style: rename attribute for assignment color list

* docs: add explanation for current implementation
2025-12-02 13:52:36 -05:00
Stanislav
82f574ec2c feat: Replace Twitter with X (#36524)
* feat: Replace Twitter with X


---------

Co-authored-by: Turchanikov Arsen <arsen.turchanikov@raccoongang.com>
2025-12-02 10:43:26 -05:00
Ahtisham Shahid
c8e6a760f9 feat: add grouping for new response notification (#37674) 2025-12-02 15:21:36 +05:00
Deimer Morales
a765273cf7 fix: fixing the documentation article links (#37493)
* fix: fixing articles

The articles were updated because they pointed to the old documentation.

* fix: updating articles references

The documentation links were pointing to the old documentation and in many cases, these links no longer worked, so we have updated these links to the new documentation.
2025-12-01 15:40:15 -05:00
Peter Pinch
cf1e104e04 Merge branch 'master' into arslan/6850-add-lti-logging 2025-11-26 17:09:59 -05:00
Taimoor Ahmed
56f7da908a fix: send thread_created signal after transaction commit (#37675)
Prevents notification failures with MySQL backend by ensuring signals
are only sent after database transactions commit. This fixes race
conditions where Celery workers couldn't see newly created threads.

- Added send_signal_after_commit() helper function
- Updated both thread creation paths to use the helper

Co-authored-by: Taimoor  Ahmed <taimoor.ahmed@A006-01711.local>
2025-11-26 11:43:45 +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
Arslan Ashraf
1b2bfaf89f chore(logging): add additional logs for LTI launch flow 2025-11-25 16:34:27 +05:00
Feanil Patel
d082d3d87c fix: Make sure that the features proxy works w/devstack settings. (#37666)
Without this the devstack settings don't correctly proxy the features
updates made to get devstack working.

Co-authored-by: Kyle McCormick <kyle@axim.org>
2025-11-20 22:14:47 +00:00
Feanil Patel
8611e6110d Merge pull request #37108 from haftamuk/ESHE-37081
Fix: When clicking "Download Handout", the handout (image) overlays the video area, and the download does not start automatically.
2025-11-20 14:38:05 -05:00
Asad Ali
ab6cf6e85e revert: feat: [FC-0092] Optimize Course Info Blocks API (#37122) (#37661)
This reverts commit 7cd4170ca7.
2025-11-20 12:05:14 -05:00
Haftamu Kebede
f5904d1223 fix: Download Handout link in a video component overlaying over the video
After applying a "download" property on html5 anchor tag, Download Handout
link in a video component initiates a direct download instead of overlaying
over the video.

Fixed issue: https://github.com/openedx/edx-platform/issues/37081
2025-11-20 18:56:28 +03:00
Feanil Patel
02c1530b48 Merge pull request #37547 from open-craft/agrendalath/start-date-masquerade
feat: add Waffle flag to control start date access for masquerading users
2025-11-20 10:29:15 -05:00
Feanil Patel
539bb7d7b2 Merge pull request #36335 from raccoongang/lunyachek/fix/instructor-rtl-remove-horizontal-scroll
fix: Remove horizontal scroll on instructor page in RTL version
2025-11-20 09:41:49 -05:00
Ivan Niedielnitsev
5df4564173 fix: use correct full name when emitting COURSE_PASSING_STATUS_UPDATED
This commit fixes the incorrect saving of the user's full name in the
credentials service by modifying how the COURSE_PASSING_STATUS_UPDATED
and CCX_COURSE_PASSING_STATUS_UPDATED events are emitted.

Previously, we had been using Django's standard User.get_full_name()
to fetch the user's full name. However, Open edX uses the convention of
storing the full name in user.profile.name and leaves the User's first
and last name fields blank. (This is to better accommodate the wide
range of international conventions regarding names.)
2025-11-19 15:24:24 -05:00
Feanil Patel
f175bea4db Merge pull request #37486 from eduNEXT/bav/add-user-certificate-to-context
feat: add user certificate to context in HTML view
2025-11-19 14:59:57 -05:00
Stanislav
64528b6411 fix: show Order History link only when MFE is configured (#37354) 2025-11-19 13:48:59 -05:00
jawad khan
712123847e feat: Instructor course information v2 apis (#37588)
* feat: Instructor course information v2 apis
2025-11-19 16:09:59 +05:00
Stanislav Lunyachek
139f5f7f2b fix: Changes after review 2025-11-19 12:22:49 +02:00
Stanislav Lunyachek
3eaa9500fe fix: After review 2025-11-19 12:22:49 +02:00
Stanislav Lunyachek
1d7df66e5d fix: Remove horizontal scroll on instructor page in RTL version 2025-11-19 12:22:49 +02:00
Feanil Patel
1a7d985a5d Merge pull request #37590 from openedx/feanil/enable_edx_oauth2
feat: Drop the ENABLE_OAUTH2_PROVIDER flag.
2025-11-18 13:26:07 -05:00
salmannawaz
d516736482 refactor: Convert BuiltIn Video Block's html from mako to django template (#37509)
Closes: https://github.com/openedx/public-engineering/issues/427
2025-11-18 10:59:11 -05:00
Muhammad Farhan Khan
a50ab7d75f chore: Move waffle flags, configs (used in video block) to video service
Merge pull request #37631 from openedx/farhan/add-waffle-flags
2025-11-17 17:52:29 +05:00
Muhammad Farhan Khan
f51343c871 refactor: move transcripts_utils from xmodule to video-config (#37600)
As part of the ongoing effort to deprecate and eventually remove xmodule,
we’ve started gradually migrating the necessary code files from xmodule
to more appropriate locations within the codebase.

Ticket: https://github.com/openedx/public-engineering/issues/445

Also: this tweaks importlinter ignores & add follow-up issue links

Co-authored-by: Kyle McCormick <kyle@axim.org>
2025-11-14 18:26:35 +00:00
farhan
0cd62bf786 refactor: Introduce VideoConfig service, move video sharing methods in it 2025-11-11 12:55:02 +05:00
Feanil Patel
92a47097b7 feat: Drop the ENABLE_OAUTH2_PROVIDER flag.
This setting was not actually not changing installation behavior, that
is being set by whether oauth_dispatch is in INSTALLED_APPS or not.

This flag was being used to:

* Hide enable/disable certain URL paths.
    * We need these paths on all the time in the LMS because all other
      services and MFE rely on oauth to authenticate with the LMS so we
      just end up turning this on later in the settings stack.

* We use it to only run certain oauth_dispatch tests in the LMS test
  environment because the oauth_dispatch app is not installed in the
  CMS.
    * We use the `skip_unless_lms` decorator now instead to do this or
      just run the tests in both suites because they are valid tests in
      both contexts.
2025-11-03 12:54:06 -05:00
salmannawaz
7f0375b6b9 Remove branding related code from video xblock. (#37491)
* chore: remove branding related code from video_block class as it is stop being used, we have plan to remove the specialized VIDEO_CDN_URL in the next phase as after removing URL nothing will reference the branding code so we're removing it first.
2025-11-01 09:22:45 +05:00
Serhiii Nanai
7cd4170ca7 feat: [FC-0092] Optimize Course Info Blocks API (#37122)
The Course Info Blocks API endpoint has been known to be rather slow
to return the response. Previous investigation showed that the major
time sink was the get_course_blocks function, which is called three
times in a single request. This commit aims to improve the response
times by reducing the number of times that this function is called.

Solution Summary

The first time the function get_course_blocks is called, the result
(transformed course blocks) is stored in the current WSGI request
object. Later in the same request, before the second get_course_blocks
call is triggered, the already transformed course blocks are taken
from the request object, and if they are available, get_course_blocks
is not called (if not, it is called as a fallback). Later in the
request, the function is called again as before (see Optimization
Strategy and Difficulties).

Optimization Strategy and Difficulties

The original idea was to fetch and transform the course blocks once
and reuse them in all three cases, which would reduce get_course_blocks
call count to 1. However, this did not turn out to be a viable solution
because of the arguments passed to get_course_blocks. Notably, the
allow_start_dates_in_future boolean flag affects the behavior of
StartDateTransformer, which is a filtering transformer modifying the
block structure returned.

The first two times allow_start_dates_in_future is False, the third
time it is True. Setting it to True in all three cases would mean that
some blocks would be incorrectly included in the response.

This left us with one option - optimize the first two calls. The
difference between the first two calls is the non-filtering
transformers, however the second call applies a subset of transformers
from the first call, so it was safe to apply the superset of
transformers in both cases. This allowed to reduce the number of
function calls to 2. However, the cached structure may be further
mutated by filters downstream, which means we need to cache a copy of
the course structure (not the structure itself). The copy method itself
is quite heavy (it calls deepcopy three times), making the benefits of
this solution much less tangible. In fact, another potential
optimization that was considered was to reuse the collected block
structure (pre-transformation), but since calling copy on a collected
structure proved to be more time-consuming than calling get_collected,
this change was discarded, considering that the goal is to improve
performance.

Revised Solution

To achieve a more tangible performance improvement, it was decided to
modify the previous strategy as follows:

* Pass a for_blocks_view parameter to the get_blocks function to make
  sure the new caching logic only affects the blocks view.
* Collect and cache course blocks with future dates included.
* Include start key in requested fields.
* Reuse the cached blocks in the third call, which is in
  get_course_assignments
* Before returning the response, filter out any blocks with a future
  start date, and also remove the start key if it was not in requested
  fields
2025-10-30 17:23:49 -04:00
Feanil Patel
d76bed4bbb style: Drop unused imports. (#37572)
* style: Drop unused imports.

I was looking at these files for some other reason and saw that these
imports were unused. Some of it looks like an artifact of the hoisting
of some settings up to the `openedx/env/common.py` file and others look
like some ancient unused imports.


Co-authored-by: Kyle McCormick <kyle@axim.org>
2025-10-30 10:55:38 -04: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
Peter Kulko
2a473cffd3 feat: Prevent empty wrapper divs for about sections with no content (#37551) 2025-10-29 10:52:21 -04:00
Agrendalath
890b8268c9 feat: add Waffle flag to control start date access for masquerading users
This introduces the `ENFORCE_MASQUERADE_START_DATES` flag.
When the flag is disabled (default), masquerading users bypass start dates.
When the flag is enabled, masquerading users see the same start date
restrictions as regular students.
2025-10-28 13:46:05 +01: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
Tarun Tak
067ca72ed0 fix: remove unused waffle switch for optimizing learner retrieval (#37513) 2025-10-22 19:53:07 -04:00
Tarun Tak
f05fb639c8 feat: remove unused USE_ENCRYPTED_USER_DATA (#37305) 2025-10-22 19:41:59 -04:00
Muhammad Anas
4afff6ef5c feat: shift progress calculation to backend, add never_but_include_grade (#37399)
This commit migrates the data calculation logic for the GradeSummary
table, which was previously in the frontend-app-learning.

This commit also introduces a new visibility option for assignment
scores: “Never show individual assessment results, but show overall
assessment results after the due date.”

With this option, learners cannot see question-level correctness or
scores at any time. However, once the due date has passed, they can
view their overall score in the total grades section on the Progress
page.

These two changes are coupled with each other because it compromises
the integrity of this data to do the score hiding logic on the front
end.

The corresponding frontend PR is: openedx/frontend-app-learning#1797
2025-10-22 10:15:42 -04:00
Feanil Patel
b55c44a81a Merge pull request #37510 from openedx/feanil/fix_branding_redirect_loop
feanil/fix branding redirect loop
2025-10-21 13:27:48 -04:00
Feanil Patel
a0ab48921f fix: Handle a case that could cause infinite redirects.
If ENABLE_MKTG_SITE is True, MKTG_URLS['ROOT'] must be set.  However if
it is set to the same value as the LMS_ROOT_URL (which points to this
view), you can end up in an infinite redirect loop.  If the two URLs do
match, don't redirect, just fall through to the content that this page
would have responded with instead.
2025-10-21 12:11:57 -04:00