* feat: added notification when response is endorsed or answered
* test: added and fixed test cases
* fix: fixed lint errors
* refactor: changed method name for readibility
* feat: added notification when my response is endorsed
* test: fixed failed test cases
one time data migration for certificates that ended up in a broken
state (not marked is unavailable, but having invalidation records).
FIXES: APER-1322
This reverts commit 4ec70eb98b.
This commit introduced a new setting (`brand_color`) that does not appear to be set and is causing issues with account deletion and other parts of the courseware.
Reverting until we can understand the change better.
During the process of generatinng report for problem responses,
there are two places where N + 1 query problem exist. In both
cases, `StudentModule` objects are fetched and looped over where
`student.username` field for each object is accessed. This result
in a seperate database call to get the username for each student
response.
This problem is fixed by creating a join to fetch the related
table in the original query using `select_related`. In a test
conducted on report having 5000 `StudentModule` objects, the
number of queries for the request reduced from 8363 to 29. The
total time taken for the task reduced from 23764 ms to 7394 ms.
undid my auto formatters reordering of the includes, because I'm
assuming that's what the lint-amnesty directives are there for. Best
practice would have a human-written comment explaining why they need to
stay there, but I'm just going have to assume it's correct, Because no
such human-written comment exists.
FIXES: APER-2851
adds a management command to modify certificate templates, with a dry
run option. Inherently unsafe; just as a search and replace on the first
string match.
TODO:
* unit tests
* make sure the multi-line string replacements work via django admin
FIXES: APER-2851
Web scrapers do annoying stuff like visit urls they shouldn't know about and cause xblock handlers to break.
I tested this by:
Making sure video transcripts worked as normal while logged in
making sure that I got no 500s in my logs while attempting to view it logged out.
Normally, the course API would return an access error_code of
`course_not_started` if the course has not started yet. This change
breaks that up into two codes:
* if the course has not started:
* return error_code=`course_not_started_enterprise_learner` if the
learner is enrolled as a subsidized enterprise learner.
* else, return error_code=`course_not_started`.
This supports a change to the frontend which will interpret
`course_not_started_enterprise_learner` differently and trigger a
redirect to the enterprise (B2B) learner dashboard instead of the B2C
dashboard.
ENT-8078
Normally, the course API would return an access error_code of
`course_not_started` if the course has not started yet. This change
breaks that up into two codes:
* if the course has not started:
* return error_code=`course_not_started_enterprise_learner` if the
learner is enrolled as a subsidized enterprise learner.
* else, return error_code=`course_not_started`.
This supports a change to the frontend which will interpret
`course_not_started_enterprise_learner` differently and trigger a
redirect to the enterprise (B2B) learner dashboard instead of the B2C
dashboard.
ENT-8078