diff --git a/openedx/core/djangoapps/course_live/README.rst b/openedx/core/djangoapps/course_live/README.rst new file mode 100644 index 0000000000..c24dcb61fe --- /dev/null +++ b/openedx/core/djangoapps/course_live/README.rst @@ -0,0 +1,2 @@ +This plugin app allow you to enable/disable the live tab in a course. The live +tab is used to integrate video conferencing tools like "Zoom". diff --git a/openedx/core/djangoapps/course_live/docs/decisions/001-course-live.rst b/openedx/core/djangoapps/course_live/docs/decisions/001-course-live.rst new file mode 100644 index 0000000000..230504ce59 --- /dev/null +++ b/openedx/core/djangoapps/course_live/docs/decisions/001-course-live.rst @@ -0,0 +1,67 @@ +Course Live Plugin +_______________ + +Status +====== +Accepted + +Context +======= + +The new `Course Authoring MFE`_ includes a new UX called "Pages and Resources" +for configuring different aspects of the course experience such as progress, +wiki, teams, discussions, etc. all from one place. + +This ADR describes the addition of another course app named ``Live``. The +Live app will be used to configure a video conferencing tool for the course. +The will be available as a new Tab in the course experience. +The tool will be added as an LTI integration. We will currently support only +``Zoom`` as a video conferencing provider. But other providers can also be +added later. + + +.. _Course Authoring MFE: https://github.com/edx/frontend-app-course-authoring/ + + +Decision +======== + +We proposed to add the course live as a plugin with the following structure + +Course Live App Plugin Class +----------------------- + +The app will be loaded as a plugin and added to `setup.py` with the namespace +"openedx.course_app". + +.. code-block :: python + + class CourseLiveApp: + app_id: str = 'live' + name: str = 'Live' + description: str = 'Enable in-platform video conferencing by + configuring live.' + + @classmethod + def is_available(cls, course_key): + # The app will be available for everyone + # We will initially keep the availability behind a Waffle flag + return True + + @classmethod + def is_enabled(cls, course_key): + # This will be controlled by the CourseLiveConfiguration model + return True + + @classmethod + def set_enabled(cls, course_key, user, enabled): + # This will be controlled by the CourseLiveConfiguration model + return enabled + + @classmethod + def get_allowed_operations(cls, course_key, user): + # Can only enable live for a course if live is configured. + return { + 'enable': Only if configuration exists, + 'configure': True + }