This doesn't handle the default case where the showanswer has never
been touched, in which case it will continue to return Finished,
but that also happens when it's turned off so this just helps out
for all of the other cases.
- send course emails to users based on whichever date is later,
sedule start date or course start date. This addresses the
scenario when a user enrolls in a self paced course before it
has actually started.
Adds the following additions to the toggle state endpoint:
- course override data from CourseWaffleFlag.
- computed_status for waffle flags (accounting for
course overrides when applicable), and waffle switches.
Note: the waffle switch computed_status will make more
sense when we include WaffleSwitch instances that don't
have any data in the database.
ARCHBOM-1429
ARCHBOM-1366
by overriding can_load_courseware if the MFE is disabled for the user
If the user would be allowed to see the courseware MFE
(can_load_courseware), we check whether the MFE is disabled for them,
based on global settings, course settings (mongo courses), or their
particular bucketing in our ExperimentWaffleFlag.
If we determine they shouldn’t be allowed to see it, we return a new
CoursewareMicrofrontendDisabledAccessError access response, which the
MFE will use to know it should redirect to the old LMS experience.
Fixes: TNL-7362
Co-authored-by: stvn <stvn@mit.edu>
* Moving plugins infrastructure to edx-django-utils
This PR extracts the code that enables plugins in edx-platform and puts it in edx-django-utils. This is done to allow other IDAS to add plugin functionality.
This effectively evaluates the flag outside of the context of a course.
This was previously available through `.is_enabled_without_course_context`,
which has been removed in favor of simply `is_enabled()`.
This was done to make the CourseWaffleFlag interface more uniform with
that of WaffleFlag and ExperimentWaffleFlag and eliminate unecessary
branching when handling CourseWaffleFlags.
For the Courseware MFE rollout experiment, we want users'
default buckets to be consistent across course runs.
ExperimentWaffleFlag advised that this could be done
by calling `.is_enabled(...)` without a course_key argument;
however, doing so breaks when uing the main_flag.BUCKET_NUM
scheme to apply bucket rules for a specific set of users
or courses.
This commit explicitly adds course-unaware-bucketing via
a new kwarg to ExperimentWaffleFlag.__init__ method.
Furthermore, it fixes ExperimentWaffleFlag.is_enabled(course_key=None)
to work as advertised, by means of calling
.is_enabled_without_course_context on its subordinate flags.
TNL-7405
- Hide the submit-button CTA link to reset dates in the mobile
app. They are working on their own solution.
- Don't show the dates_banner.html code in the courseware. It has
new CTA banner support with updated wording.
We support it still, but want to encourage folks to try to define it
as a method, so that in the future, we can rely on it being one.
Also updates lti-consumer to a version that has the value as a
method.
This also has an initial use case for Personalized Learner Schedules
to add CTAs to capa and vertical blocks to allow users to shift their
course deadlines.
We noticed that since users can choose to reset their due dates,
they would have the ability to let due dates pass and then for any
assessment that allows viewing the answer after the due date would be
visible. The user could thus view all answers and then reset their
due dates to receive a perfect score.
This PR works to fix that issue by changing all show answer values
to not take into account being past the due date when inside a PLS
course.
This is for the frontend-app-learning MFE to consume and show an
alert when offer_html is defined.
I've also tweaked that html a bit to work better in an environment
that doesn't have LMS's exact css.
Moved data.py out into the parent's dirctory i.e learning_sequences directory to avoid circular import issue which is occuring when we try to import data.py from models.py.
A new CourseContext model is created, which is responsible for housing course specific fields e.g course_visibility.