This article was written by Kshitij Sobti, senior open source developer at OpenCraft.

OpenCraft has been interested in working on improvements to the discussions infrastructure in Open edX for quite some time now, and created a proposal for creating a Discourse plugin for Open edX and making Discussions a pluggable component back in 2019.

Since then, we got the opportunity to work on a major blended development project with edX (now 2U) on bringing some of those improvements to fruition.

There have been major changes to the way discussions work in the platform at multiple levels. From foundational changes that allow selecting alternative discussion providers, and a revamped mechanism for configuring discussions, to new discussions UI that continues the trend of moving over the platform interface to React-based MFEs.

We’re happy we got to work on this pivotal functionality of the platform and hope to keep the momentum going in making improvements in this area.

Support for Alternative Discussion Providers

One of the key aspects of the work we’ve done as part of blended projects BD-3 and BD-38 has been to allow users to select alternative discussion providers.

Parts of this functionality have been landing in the platform since Koa, but from Lilac onwards it has been possible to use the new Course Authoring MFE to do so using a much simpler UI.

With the Course Authoring MFE, the discussion tool used for a course is now something that can be selected from a UI rather than just being an inbuilt default.  The Open edX platform will come with out-of-the-box support for Piazza, YellowDig, InScribe, and Ed Discussion. These providers support LTI (Learning Tools Interoperability) 1.1, which is a standard that allows learning tools to communicate and interoperate. In this case, we use it to allow seamless logging in the discussion tool without requiring the user to log in to another site.

With a simple wizard UI it’s possible to select the inbuilt forums or a third-party discussion provider, and configure credentials for the tool. Once configured, the discussion tool will appear embedded in the Discussion tab, replacing the standard Open edX forum interface.

A new UI in the Course Authoring MFE allows you to select a Discussion tool

We developed a newly added LTI infrastructure that also makes it possible to have other LTI-based course tabs, which can embed any kind of tool. However, this aspect is currently not easy to access without importing a specially edited course structure outside of studio. We hope to be able to develop this further in a future blended project. 

While the new UI simplifies the use of supported providers, it is also possible to manually configure a different discussion provider that isn’t supported yet by editing the configuration in the admin panel. Instructions for how to do this are at the end of this article.

Adding a new provider to the UI isn’t possible without some development effort. It currently requires some small modifications to the platform and UI. This is another aspect that we’d love to expand on in the future by making it pluggable or customisable.

One provider we’d particularly love to add better support for is Discourse. Discourse is a very popular discussion forum software that is open source, well known, modern and actively developed. Currently, using it requires installing plugins on the Discourse side as well. It also supports a more modern version of LTI (v1.3) that is supported by the platform, which is something OpenCraft worked on as part of Blended Project BD-02 but isn’t supported for discussions just yet. 

A New UI to Configure Discussions

As you may have seen from the above screenshots, there is now a UI to switch between discussion providers. This isn’t limited to just the LTI-based providers; there is now a new configuration UI for the internal forums as well.

The Course Authoring MFE also allows configuring a number of discussion settings from a single place

This new UI will allow you to configure some discussion options that were previously only available to edit through advanced course settings. It consolidates most discussions-related settings into one place. This includes the ability to enable anonymous posts, add general discussion topics, configure discussion cohorts division, and blackout dates.

This new interface lives in the Course Authoring MFE, which now also adds a UI to configure other aspects of a course, such as configuring teams, and enabling/disabling the progress tab, notes feature, calculator tool, and course wiki.

Applications and tools that previously required fiddling with advanced course settings and now be set up in a few clicks using the Course Authoring MFE

New Mechanism for Configuring Discussions

The UI is not the only thing that’s new. The whole mechanism for configuring discussions has also been revamped.

When authoring course content, you no longer need to create a discussion block and manually set a category and subcategory. With the new mechanism, you simply tick a checkbox for a Unit, and it will automatically be associated with a topic with the same name as the unit, and the discussions UI will show up for that Unit. By default, all Units will automatically be discussable unless they are in graded, or exam subsections.

There is no need for manually setting up a Discussions XBlock anymore

For units in graded subsections, discussions can be enabled using  a new configuration toggle. 

A migration path from the existing XBlock-based mechanism to the new mechanism is still in development. There are certain complex discussion setups, however, that are no longer supported with this new mechanism. 

A couple of scenarios that are no longer supported are:

  • With XBlocks it’s possible to have multiple discussion blocks in a single Unit, thus allowing multiple topics for a single unit. This is no longer supported.
  • XBlocks also require you to specify a separate category and subcategory for each topic, and these did not need to match the course hierarchy. 
  • Addition a discussion in exams is no longer possible, while it was with XBlocks. 
  • There was an undocumented, and somewhat broken mechanism for having discussion topic hierarchies of arbitrary depths. This is no longer possible.

New Discussions MFE

There is a brand-new Discussions MFE that is intended to replace the existing forum UI hosted by edx-platform. This new UI refresh modernizes the forum UI, making it easier to explore and navigate between topics. While it is still not officially released, it is possible to test and preview it in the latest Nutmeg release. 

This new UI is entirely API-driven, allowing quick browsing, sorting and filtering through topics, and posts. The MFE can be deployed to a subfolder or subdomain and independently accessed for any course that utilizes discussions. User avatars are now visible next to all user content, making conversations easier to follow.

A new UI has been added to manage learners in a course

There is an entirely new learners section that allows you to see learners in the course, and see their activity on the course. Moderators have the ability to sort learners based on most content reported/flagged for abuse, to make it easy to quickly spot users with most reported activity.

In-Context discussions can now be viewed in a sidebar next to units. The sidebar can be shown or hidden using an icon near the top right that can show different sidebars.

The in-context experience for discussions has also been updated. Rather than appearing in an XBlock in the course flow, discussions can now be viewed within a sidebar next to the course content.

New Discussions Features

The Open edX discussion forum functionality is the only backend feature that is written in Ruby as opposed to Python. While this remains the case, the Ruby forum component (cs_comments_service) has seen a lot of changes recently, with major new features.

The forum now tracks user activity, making it easier to track the level of contribution from different users. The learner section, for instance, will show users that have the highest levels of engagement first.

Edit reasons allow a moderator to clarify the reason for editing a post or comment
Post close reasons allow moderators to clarify the reason for closing a post

For moderation, there is now the ability to provide a reason when performing moderation actions, such as editing content or closing a post. When editing content or closing a post, moderators will see a UI to select a reason for performing that action. For instance, a moderator can select that a post is being closed since it’s off-topic, or is a duplicate. Reasons for editing posts or comments, include corrections for grammar and spelling, or removing Personally Identifiable Information (PII), quiz/exam answers, etc. These reasons can be customized by Open edX admins during deployment through Django settings.

How to try out these new Features

If these recent changes seem exciting, you can check out the new discussions configuration experience using the Course Authoring MFE and see the new Discussions UI in action using the Discussions MFE. These MFEs can be set up like any other MFE. 

Using the Course Authoring MFE

If you’ve set up the new Course Authoring MFE, you can simply access it by visiting the following URL for any course: 

[MFE_URL]/course/[course_id]/pages-and-resources/

For instance, on the devstack, for the demo course you’d visit: 

http://localhost:2001/course/course-v1:edX+DemoX+Demo_Course/pages-and-resources/

To have better integration of this MFE with Studio, you need to add the discussions.pages_and_resources_mfe waffle flag to a course or globally. This will add a link to “Pages and Resources” under the “Content” menu in Studio. 

Previewing the new Discussions MFE

Once you’ve set up the Discussions MFE, you can visit the following URL for any course that uses discussions:

    [MFE_URL]/[course_id]/

For instance, on the devstack, for the demo course, you’d visit:

http://localhost:2002/course-v1:OC+NP+Test/

The following waffle flags are available to tweak this new experience:

  • discussions.enable_discussions_mfe
    Enables integration of the MFE with the existing discussion tab.
  • discussions.enable_learners_tab_in_discussions_mfe
    Enables the new learners tab in the discussions MFE.
  • discussions.enable_moderation_reason_codes
    Enables the new moderation features in the Discussions MFE
  • discussions.enable_view_mfe_in_iframe
    This flag is only available in the latest code, and allows switching between a standalone MFE experience and embedding the MFE in the discussion tab.

Preview the new Discussion Configuration Experience

Previewing the new Discussions configuration experience is currently a little more complex, since the migration process for that is still being worked on. This area of the platform is in active development, and as such the process is bound to change. While this feature can be tested in Nutmeg, we’d recommend testing it in a sandbox or development environment running the latest Open edX code. 

However, you can test it out by with the following steps:

  • Enable the discussions.enable_new_structure_discussions waffle flag globally, or for a single course. This will now allow switching that course to the new configuration mechanism. 
  • Visit the course authoring MFE and configure the discussions app. You will see two providers called “edX”, and it is the second one that is the new provider.  
  • Alternatively, you can visit the /course/<course-id>/pages-and-resources/discussion/configure/openedx path on the course authoring MFE (insert the actual course ID), and click save.

If you only saw one provider called “edX” it’s probably because your version doesn’t include the most recent changes. In that case, you may need to manually add a discussion configuration for your course. 

  • Visit [LMS]/admin/discussions/discussionsconfiguration/
  • Search for the course ID for which you’re configuring discussions. If no entry exists, create a new one. 
  • If creating a new entry, enter the course ID in “Learning Context Key”
  • Make sure “Enable in context” and “Unit level visibility” are checked. 
  • Under discussion provider, enter “openedx”, and click Save. 

You will now be able to enable/disable discussion for individual units in your course without needing to add an XBlock.

This new experience is still actively being worked on and simplified, so expect this process to get a lot smoother over time, and the configuration to get further streamlined.

Use an Unsupported LTI Discussion Tool

While Piazza, YellowDig, InScribe, and Ed Discussion are available to set up using a simple UI Wizard. The process for configuring an unsupported provider isn’t very complex either. It just needs access to the admin panel. 

Since Lilac, the Open edX platform has had the ability to create a discussion configuration via thevia that the admin panel that will allow using an LTI tool instead of the internal forums. For this you need to visit the discussion configuration page in the LMS’s admin page at [LMS]/admin/discussions/discussionsconfiguration/

Once there, here is what you can do to set up your custom discussion provider:

  • Search for a course ID, and edit it if it exists, or create a new configuration. 
  • If creating a new configuration, enter the course ID under “Learning Context Key”. 
  • Click the + sign next to Lti configuration to add a new LTI Configuration entry. 
  • On this new page that pops up, make sure you select LTI 1.1 for the Version, and “Configuration Stored on this model” under Config store. 
  • Enter the launch URL, client key and client secret in “Lti 1p1 launch url”, “Lti 1p1 client key”, and “Lti 1p1 client secret” respectively. 
  • Leave the rest alone and click save. 

The Discussion tab on this course should now embed the LTI tool. 

Note that if your provider needs access to a user’s username or email to work, you will need to explicitly enable sharing such PII with the provider using the following additional steps:

  • Visit [LMS]/admin/lti_consumer/courseallowpiisharinginltiflag/ and add an entry enabling PII sharing for a particular course. 
  • Additionally, in the discussion configuration above, when editing the LTI configuration, add the following in the text area for “Lti config”:
{
    "pii_share_username": true,
    "pii_share_email": true
}

Photo by Volodymyr Hryshchenko on Unsplash