diff --git a/.env b/.env
index eb423b5c8c..55688ba004 100644
--- a/.env
+++ b/.env
@@ -47,3 +47,4 @@ ENABLE_GRADING_METHOD_IN_PROBLEMS=false
LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder"
# Fallback in local style files
PARAGON_THEME_URLS={}
+COURSE_TEAM_SUPPORT_EMAIL=''
diff --git a/.env.development b/.env.development
index 4d3c937e56..f634640c1c 100644
--- a/.env.development
+++ b/.env.development
@@ -50,3 +50,4 @@ ENABLE_GRADING_METHOD_IN_PROBLEMS=false
LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder"
# Fallback in local style files
PARAGON_THEME_URLS={}
+COURSE_TEAM_SUPPORT_EMAIL=''
diff --git a/.env.test b/.env.test
index 2f66ab211f..20914c0550 100644
--- a/.env.test
+++ b/.env.test
@@ -42,3 +42,4 @@ ENABLE_GRADING_METHOD_IN_PROBLEMS=false
# "Multi-level" blocks are unsupported in libraries
LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder"
PARAGON_THEME_URLS=
+COURSE_TEAM_SUPPORT_EMAIL='support@example.com'
diff --git a/src/course-team/course-team-sidebar/CourseTeamSideBar.test.jsx b/src/course-team/course-team-sidebar/CourseTeamSideBar.test.jsx
index daab5fb7e0..746d9c3458 100644
--- a/src/course-team/course-team-sidebar/CourseTeamSideBar.test.jsx
+++ b/src/course-team/course-team-sidebar/CourseTeamSideBar.test.jsx
@@ -21,6 +21,20 @@ describe('', () => {
expect(getByText(messages.sidebarAbout_3.defaultMessage)).toBeInTheDocument();
});
+ it('renders CourseTeamSidebar component based on support email variable', () => {
+ const { getByText } = renderComponent();
+ const courseTeamSupportEmail = process.env.COURSE_TEAM_SUPPORT_EMAIL;
+
+ if (courseTeamSupportEmail) {
+ expect(getByText(messages.helpInfoSidebarTitle.defaultMessage)).toBeInTheDocument();
+ expect(getByText(courseTeamSupportEmail)).toBeInTheDocument();
+ expect(getByText(/to add, remove, or update user access in bulk\./i)).toBeInTheDocument();
+ } else {
+ expect(getByText(messages.helpInfoSidebarTitle.defaultMessage)).not.toBeInTheDocument();
+ expect(getByText(/to add, remove, or update user access in bulk\./i)).not.toBeInTheDocument();
+ }
+ });
+
it('render CourseTeamSidebar when isOwnershipHint is true', () => {
const { getByText } = renderComponent({ isOwnershipHint: true });
diff --git a/src/course-team/course-team-sidebar/CourseTeamSidebar.jsx b/src/course-team/course-team-sidebar/CourseTeamSidebar.jsx
index 2b7f42c457..cfad54444d 100644
--- a/src/course-team/course-team-sidebar/CourseTeamSidebar.jsx
+++ b/src/course-team/course-team-sidebar/CourseTeamSidebar.jsx
@@ -1,12 +1,14 @@
import React from 'react';
import PropTypes from 'prop-types';
import { useIntl } from '@edx/frontend-platform/i18n';
-
+import { Icon, MailtoLink } from '@openedx/paragon';
+import { InfoOutline } from '@openedx/paragon/icons';
import { HelpSidebar } from '../../generic/help-sidebar';
import messages from './messages';
const CourseTeamSideBar = ({ courseId, isOwnershipHint, isShowInitialSidebar }) => {
const intl = useIntl();
+ const courseTeamSupportEmail = process.env.COURSE_TEAM_SUPPORT_EMAIL;
return (
{intl.formatMessage(messages.sidebarAbout_3)}
+ {courseTeamSupportEmail && (
+ <>
+
+
+
+
+ {intl.formatMessage(messages.helpInfoSidebarTitle)}
+
+
+ {intl.formatMessage(messages.helpInfoDescription, {
+ email_address: (
+
+ {courseTeamSupportEmail}
+
+ ),
+ })}
+
+ >
+ )}
{isOwnershipHint && (
<>
diff --git a/src/course-team/course-team-sidebar/messages.js b/src/course-team/course-team-sidebar/messages.js
index a1934c19b2..1a61477f1c 100644
--- a/src/course-team/course-team-sidebar/messages.js
+++ b/src/course-team/course-team-sidebar/messages.js
@@ -25,6 +25,14 @@ const messages = defineMessages({
id: 'course-authoring.course-team.sidebar.ownership.description',
defaultMessage: 'Every course must have an Admin. If you are the Admin and you want to transfer ownership of the course, click {strong} to make another user the Admin, then ask that user to remove you from the Course Team list.',
},
+ helpInfoSidebarTitle: {
+ id: 'course-authoring.course-team.sidebar.helpInfoSidebarTitle',
+ defaultMessage: 'Need help across multiple courses?',
+ },
+ helpInfoDescription: {
+ id: 'course-authoring.course-team.sidebar.helpInfoDescription',
+ defaultMessage: 'Email {email_address} to add, remove, or update user access in bulk.',
+ },
addAdminAccess: {
id: 'course-authoring.course-team.sidebar.ownership.addAdminAccess',
defaultMessage: 'Add admin access',
diff --git a/src/index.jsx b/src/index.jsx
index 66a8611c0e..620de1d470 100755
--- a/src/index.jsx
+++ b/src/index.jsx
@@ -173,6 +173,7 @@ initialize({
ENABLE_CHECKLIST_QUALITY: process.env.ENABLE_CHECKLIST_QUALITY || 'true',
ENABLE_GRADING_METHOD_IN_PROBLEMS: process.env.ENABLE_GRADING_METHOD_IN_PROBLEMS === 'true',
LIBRARY_UNSUPPORTED_BLOCKS: (process.env.LIBRARY_UNSUPPORTED_BLOCKS || 'conditional,step-builder,problem-builder').split(','),
+ COURSE_TEAM_SUPPORT_EMAIL: process.env.COURSE_TEAM_SUPPORT_EMAIL || null,
}, 'CourseAuthoringConfig');
},
},
diff --git a/src/setupTest.js b/src/setupTest.js
index bb55d692ff..d138c26a2a 100755
--- a/src/setupTest.js
+++ b/src/setupTest.js
@@ -49,6 +49,7 @@ mergeConfig({
LMS_BASE_URL: process.env.LMS_BASE_URL || null,
LIBRARY_UNSUPPORTED_BLOCKS: (process.env.LIBRARY_UNSUPPORTED_BLOCKS || 'conditional,step-builder,problem-builder').split(','),
PARAGON_THEME_URLS: process.env.PARAGON_THEME_URLS || null,
+ COURSE_TEAM_SUPPORT_EMAIL: process.env.COURSE_TEAM_SUPPORT_EMAIL || null,
}, 'CourseAuthoringConfig');
class ResizeObserver {