diff --git a/common/djangoapps/student/tests/test_views.py b/common/djangoapps/student/tests/test_views.py index e3f85cb4e71f09574fa54f46d47e9a58d0b8769d..1f02879db6ced78466e99f1476e9f21be2fb41bb 100644 --- a/common/djangoapps/student/tests/test_views.py +++ b/common/djangoapps/student/tests/test_views.py @@ -264,6 +264,11 @@ class StudentDashboardTests(SharedModuleStoreTestCase, MilestonesTestCaseMixin, 'DASHBOARD_TWITTER': True, }, } + MOCK_SETTINGS_HIDE_COURSES = { + 'FEATURES': { + 'HIDE_DASHBOARD_COURSES_UNTIL_ACTIVATED': True, + } + } def setUp(self): """ @@ -619,6 +624,23 @@ class StudentDashboardTests(SharedModuleStoreTestCase, MilestonesTestCaseMixin, response = self.client.get(self.path) self.assertEqual(pq(response.content)(self.EMAIL_SETTINGS_ELEMENT_ID).length, 0) + @patch.multiple('django.conf.settings', **MOCK_SETTINGS_HIDE_COURSES) + def test_hide_dashboard_courses_until_activated(self): + """ + Verify that when the HIDE_DASHBOARD_COURSES_UNTIL_ACTIVATED feature is enabled, + inactive users don't see the Courses list, but active users still do. + """ + # Ensure active users see the course list + self.assertTrue(self.user.is_active) + response = self.client.get(reverse('dashboard')) + self.assertIn('You are not enrolled in any courses yet.', response.content) + + # Ensure inactive users don't see the course list + self.user.is_active = False + self.user.save() + response = self.client.get(reverse('dashboard')) + self.assertNotIn('You are not enrolled in any courses yet.', response.content) + @staticmethod def _remove_whitespace_from_html_string(html): return ''.join(html.split()) diff --git a/common/djangoapps/student/views/dashboard.py b/common/djangoapps/student/views/dashboard.py index 3c211245bef2b778198536709774e3a3b6da4a6c..d3c1537410af6fbd05b9060a2eb5ecf866dd4fec 100644 --- a/common/djangoapps/student/views/dashboard.py +++ b/common/djangoapps/student/views/dashboard.py @@ -562,6 +562,10 @@ def student_dashboard(request): activation_email_support_link = configuration_helpers.get_value( 'ACTIVATION_EMAIL_SUPPORT_LINK', settings.ACTIVATION_EMAIL_SUPPORT_LINK ) or settings.SUPPORT_SITE_LINK + hide_dashboard_courses_until_activated = configuration_helpers.get_value( + 'HIDE_DASHBOARD_COURSES_UNTIL_ACTIVATED', + settings.FEATURES.get('HIDE_DASHBOARD_COURSES_UNTIL_ACTIVATED', False) + ) # Get the org whitelist or the org blacklist for the current site site_org_whitelist, site_org_blacklist = get_org_black_and_whitelist_for_site() @@ -812,6 +816,7 @@ def student_dashboard(request): 'disable_courseware_js': True, 'display_course_modes_on_dashboard': enable_verified_certificates and display_course_modes_on_dashboard, 'display_sidebar_on_dashboard': display_sidebar_on_dashboard, + 'display_dashboard_courses': (user.is_active or not hide_dashboard_courses_until_activated), } if ecommerce_service.is_enabled(request.user): diff --git a/lms/envs/common.py b/lms/envs/common.py index f0045cbdb5a49cabfac8043a66b76936a7267981..7dd42d762c5d4b22a5f46394ff8a0f88c59e93aa 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -133,6 +133,9 @@ FEATURES = { # Can be turned off if course lists need to be hidden. Effects views and templates. 'COURSES_ARE_BROWSABLE': True, + # Set to hide the courses list on the Learner Dashboard if they are not enrolled in any courses yet. + 'HIDE_DASHBOARD_COURSES_UNTIL_ACTIVATED': False, + # Enables ability to restrict enrollment in specific courses by the user account login method 'RESTRICT_ENROLL_BY_REG_METHOD': False, diff --git a/lms/templates/dashboard.html b/lms/templates/dashboard.html index 3be671e7ec99c2c21635688b28f971ea2f5a87a1..a7ca9050ced0b7b5096a6dc8d0dfa8941e5fa03c 100644 --- a/lms/templates/dashboard.html +++ b/lms/templates/dashboard.html @@ -122,7 +122,7 @@ from student.models import CourseEnrollment <main id="main" aria-label="Content" tabindex="-1"> <div class="dashboard" id="dashboard-main"> - + % if display_dashboard_courses: <div class="main-container"> <div class="my-courses" id="my-courses"> <%include file="learner_dashboard/_dashboard_navigation_courses.html"/> @@ -224,6 +224,7 @@ from student.models import CourseEnrollment % endif </div> </div> + % endif <div class="side-container"> %if sidebar_account_activation_message: <div class="sidebar-notification">