...
- New configuration settings were added to
lms/envs/common.py
- New course settings were added to
InheritanceMixin in
common/lib/xmodule/xmodule/modulestore/inheritance.py
- The core HTML component was updated to render notes inline
- The
AnnotatorJS
library was added as a vendor library tocommon/static/js/vendor
- A new LMS "Notes" tab was added to
common/lib/xmodule/xmodule/tabs.py
- The URL for the new tab was added to
lms/urls.py
- Mako templates for the new tab were added to
lms/templates
- CSS for the new tab was added to
lms/static/sass
- The JavaScript Backbone views were added to
lms/static/js
- The URL for the new tab was added to
- Tests were written for all the new UI
- Jasmine tests were added to lms/static/js/spec
- Jasmine HTML fixtures were added to lms/static/js/fixtures
- Bok Choy tests were added to
common/tests/acceptance
5. Proctored Exams
Proctored exams were implemented as a standalone Python library along with some fairly substantial integration into edx-platform
- The Python library lives here: https://github.com/edx/edx-proctoring
Some notes:
- Proctored exams were not implemented as a new type of XBlock, but instead were hard-wired into the built-in sequential module
- New fields were added directly to sequential module
- The proctoring code was provided as an XBlock runtime service to be called out to from the sequential module
- Conditional logic was added when rendering sequential modules to call out to the proctored exam rendering code
- Course-scoped settings were added directly to the course module
- New configuration settings were added to both
lms.env.json
andlms.auth.json
- Custom Studio UI was added to manage the new settings for sequentials
- Studio was extended to include custom registration of proctored exams:
- The course outline was updated to have custom rendering for proctored exams
- URLs were added directly to the LMS's urls.py file
- All of the styling for proctored exams was added directly into the LMS's main courseware Sass file
- A new tab for 'special exams' was added to the instructor dashboard
6. Student Data Tab
Here is an upcoming use case from Braden MacDonald:
...
Here are the various types of UX changes that were seen in the relevant features. Note that the "Mobile Support" column describes whether such a change will automatically be supported by mobile, or whether it will require additional changes to the mobile app.
UX Change | Description | Examples | Mobile Support | Cohorted Courseware | ORA 2 | Student Notes | CCX |
---|
Proctored Exams | ||||||||
---|---|---|---|---|---|---|---|---|
Feature Flag | Allow the feature to be enabled or disabled | ENABLED_EDXNOTES flag | ||||||
Service | Introduce a new service that other parts of the platform can consume | edX Notes Service edX Submissions Service | (but clients need to be updated) | |||||
REST API | Introduce new REST APIs that allow new data models to be consumed by other parts of the platform | User API, edX Notes Service API | (but clients need to be updated) | |||||
Core behavior change | Change how core parts of the platform function | Cohorted content, CCX due dates | ||||||
New course role | Introduce a new role for users within a course | CCX coach | ||||||
New group type | Introduce a new kind of grouping of users | Cohorts, Content Groups | ||||||
New LMS page | Add a new page to the top level of the LMS | Learner profile page | ||||||
New Studio page | Add a new page to the top level of Studio | "Group Configurations" page | N/A | |||||
Update Studio course settings view | Update the "Settings" view to allow editing of new features | Course Licenses | ||||||
Courseware component | Add a new component type that an author can add to their course | "Peer Assessment" component | (with some caveats) | |||||
LMS tab | There are two different classes of tabs: those that are shown per role, and those that are shown when a feature is enabled. Note: these are currently shown as tabs in the web version of the LMS, but this concept should be generalized to work for mobile and future non-tab implementations. | "Notes" tab, "CCX" tab | ||||||
Instructor admin component | Add a new component that instructors can use to administer their course in the LMS | "Cohorts" tab | ||||||
Instructor reports | Add a new report that instructors can download | "Download Profile Information" | ||||||
Course feature flag | Allow the feature to be enabled per course (by author or instructor) | "Enable Student Notes", "Enable Cohorts" | ||||||
Studio advanced setting | Add a new setting that authors can use to configure aspects of their course | "Student Notes Visibility" | N/A | |||||
Studio authoring view | Add a new view to allow authors to visually configure aspects of an xblock | "Edit Visibility", ORA 2 settings | N/A | |||||
Studio type | Introducing a new type requires providing an editor component | "Language" picker | N/A |
Here are the types of implementation changes that had to be made to introduce the above features:
Change | Description | Update Required | Mobile Support | Cohorted Courseware | ORA 2 | Student Notes | CCX | Proctored Exams |
---|---|---|---|---|---|---|---|---|
Configuration Settings | Allow the feature to be enabled or disabled | Update lms/envs/common.py (or cms) | Not picked up by mobile today | |||||
URLs | Most features require new LMS and/or Studio URLs | Update lms/urls.py (or cms) | Not picked up by mobile today | |||||
Django models | Add new persisted data models, or update existing ones | Add models to your Django app, or update existing ones in the platform | ||||||
Modulestore logic | Changes needed in core modulestore logic | Update xmodule/modulestore | ||||||
Courseware component | Add a new component type that an author can add to their course. | Implement an xblock (some caveats that still require xmodule). Update the Studio configuration to allow the user to create such a component. | (with some caveats) | |||||
Course-scoped fields | Add a new field that can be set per-course. | Add fields to xmodule/course_module.py and sometimes | ||||||
User partition scheme | Provide a new way to partition users into groups/teams/cohorts etc | Provide a plug-in of type openedx.user_partition.scheme | ||||||
Images | Images need to get into the pipeline to end up served through the CDN | Add new images to lms/static/images (or cms) | ||||||
CSS | Introduce new styling for custom components | Add new SASS files to lms/static/sass (or cms) | (for web views) | (see ORA section below) | ||||
Mako Template | Include new HTML templates to be returned when serving a new page | Add new templates to lms/templates (or cms) | ||||||
Third-party JS libraries | Add new libraries needed by the new JS UI, e.g. AnnotatorJS | Add the files to Add the new dependencies to RequireJS and the Jasmine tests | ||||||
JavaScript | Add new custom JS code to support more dynamic browser interactions | Add new JS files to lms/static/js (or cms). Add new dependencies to | ||||||
Unit Tests | Add new Python or Jasmine code to test your new feature | Add new tests to your Django app Update | ||||||
Integration Tests | Add new Bok Choy tests that verify your feature works when running inside the platform | Add new tests to Note: ORA 2 has Bok Choy tests in its own repo, but no easy way to run them |
See Also
- PR 7610: Django extension spike
- PR 7937: Add "Teams" tab
- Thoughts on LMS front end architecture
- How to add a new feature to LMS or Studio
- Adding a new course tab
...