diff --git a/common/djangoapps/student/tests/test_views.py b/common/djangoapps/student/tests/test_views.py index cf63aa82d1c9..cba6e9b0b148 100644 --- a/common/djangoapps/student/tests/test_views.py +++ b/common/djangoapps/student/tests/test_views.py @@ -603,6 +603,48 @@ def test_email_settings_unfulfilled_entitlement(self, mock_email_feature, mock_c response = self.client.get(self.path) self.assertEqual(pq(response.content)(self.EMAIL_SETTINGS_ELEMENT_ID).length, 0) + @ddt.data( + ( + {"ENABLE_FILTER_COURSES_BY_USER_LANG": True}, + [ + { + "org": "DC", + "number": "001", + "run": "2013", + "name": "Man of Steel", + "language": "en" + }, + { + "org": "DC", + "number": "002", + "run": "2016", + "name": "Dawn of Justice", + "language": "ar" + }, + ], + "Dawn of Justice" + ) + ) + @ddt.unpack + @override_settings(LANGUAGE_CODE='en') + def test_load_student_dashboard_filter_courses_by_user_lang(self, config, courses_detail, expected_result): + with patch.dict('django.conf.settings.FEATURES', config): + for course_detail in courses_detail: + course = CourseFactory( + org=course_detail["org"], + number=course_detail["number"], + run=course_detail["run"], + name=course_detail["name"] + ) + + CourseEnrollmentFactory(course_id=course.id, user=self.user) + course_overview = CourseOverview.get_from_id(course.id) + course_overview.language = course_detail["language"] + course_overview.save() + + response = self.client.get(self.path) + self.assertNotIn(response.content, expected_result) + @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @override_settings(BRANCH_IO_KEY='test_key') diff --git a/common/djangoapps/student/views/dashboard.py b/common/djangoapps/student/views/dashboard.py index ce745d3ec907..704e6c28a6a8 100644 --- a/common/djangoapps/student/views/dashboard.py +++ b/common/djangoapps/student/views/dashboard.py @@ -32,6 +32,7 @@ get_visible_sessions_for_entitlement ) from openedx.core.djangoapps.credit.email_utils import get_credit_provider_display_names, make_providers_strings +from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.programs.models import ProgramsApiConfig from openedx.core.djangoapps.programs.utils import ProgramDataExtender, ProgramProgressMeter from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers @@ -729,12 +730,17 @@ def student_dashboard(request): ) - if configuration_helpers.get_value("ENABLE_FILTER_COURSES_BY_USER_LANG", - settings.FEATURES.get('ENABLE_FILTER_COURSES_BY_USER_LANG')): - user_prefered_lang = request.LANGUAGE_CODE + if configuration_helpers.get_value( + "ENABLE_FILTER_COURSES_BY_USER_LANG", + settings.FEATURES.get("ENABLE_FILTER_COURSES_BY_USER_LANG") + ): + preferred_lang = request.LANGUAGE_CODE for enrollment in course_enrollments[:]: - course_language = modulestore().get_course(enrollment.course_id).language - if course_language != user_prefered_lang: + course = modulestore().get_course(enrollment.course_id) + course_overview = CourseOverview.get_from_id(course.id) + course_language = course_overview.language + + if course_language != preferred_lang: course_enrollments.remove(enrollment) diff --git a/common/djangoapps/student/views/management.py b/common/djangoapps/student/views/management.py index 8fe55d6b9307..1f873107dbee 100644 --- a/common/djangoapps/student/views/management.py +++ b/common/djangoapps/student/views/management.py @@ -162,6 +162,14 @@ def index(request, extra_context=None, user=AnonymousUser()): else: courses = sort_by_announcement(courses) + if configuration_helpers.get_value( + "ENABLE_FILTER_COURSES_BY_USER_LANG", + settings.FEATURES.get("ENABLE_FILTER_COURSES_BY_USER_LANG") + ): + preferred_lang = request.LANGUAGE_CODE + courses =\ + [course for course in courses if course.language == preferred_lang] + context = {'courses': courses} context['homepage_overlay_html'] = configuration_helpers.get_value('homepage_overlay_html') diff --git a/lms/djangoapps/courseware/views/views.py b/lms/djangoapps/courseware/views/views.py index de8d443d3167..9736c3c0a70a 100644 --- a/lms/djangoapps/courseware/views/views.py +++ b/lms/djangoapps/courseware/views/views.py @@ -246,10 +246,15 @@ def courses(request): # Add marketable programs to the context. programs_list = get_programs_with_type(request.site, include_hidden=False) - if configuration_helpers.get_value("ENABLE_FILTER_COURSES_BY_USER_LANG", - settings.FEATURES.get('ENABLE_FILTER_COURSES_BY_USER_LANG')): - user_prefered_lang = get_user_preferences(request.user)['pref-lang'] - courses_list = filter(lambda x: x.language == user_prefered_lang, courses_list) + if configuration_helpers.get_value( + "ENABLE_FILTER_COURSES_BY_USER_LANG", + settings.FEATURES.get("ENABLE_FILTER_COURSES_BY_USER_LANG") + ): + preferred_lang = request.LANGUAGE_CODE + courses_list = [ + course for course in courses_list + if course.language == preferred_lang + ] return render_to_response( "courseware/courses.html",