Commit c089ea42 by Matthew Piatetsky Committed by GitHub

Merge pull request #13880 from edx/release

Merge release into master
parents 9d1e77e0 333c6866
...@@ -54,10 +54,8 @@ class CourseListGetForm(UsernameValidatorMixin, Form): ...@@ -54,10 +54,8 @@ class CourseListGetForm(UsernameValidatorMixin, Form):
filter_type = namedtuple('filter_type', ['param_name', 'field_name']) filter_type = namedtuple('filter_type', ['param_name', 'field_name'])
supported_filters = [ supported_filters = [
filter_type(param_name='mobile', field_name='mobile_available'), filter_type(param_name='mobile', field_name='mobile_available'),
filter_type(param_name='include_hidden', field_name='include_hidden'),
] ]
mobile = ExtendedNullBooleanField(required=False) mobile = ExtendedNullBooleanField(required=False)
include_hidden = ExtendedNullBooleanField(required=False)
def clean(self): def clean(self):
""" """
......
...@@ -72,21 +72,10 @@ class CourseSerializer(serializers.Serializer): # pylint: disable=abstract-meth ...@@ -72,21 +72,10 @@ class CourseSerializer(serializers.Serializer): # pylint: disable=abstract-meth
start_type = serializers.CharField() start_type = serializers.CharField()
pacing = serializers.CharField() pacing = serializers.CharField()
mobile_available = serializers.BooleanField() mobile_available = serializers.BooleanField()
hidden = serializers.SerializerMethodField()
# 'course_id' is a deprecated field, please use 'id' instead. # 'course_id' is a deprecated field, please use 'id' instead.
course_id = serializers.CharField(source='id', read_only=True) course_id = serializers.CharField(source='id', read_only=True)
def get_hidden(self, course_overview):
"""
Get the representation for SerializerMethodField `hidden`
Represents whether course is hidden in LMS
"""
catalog_visibility = course_overview.catalog_visibility
if catalog_visibility in ['about', 'none']:
return True
return False
def get_blocks_url(self, course_overview): def get_blocks_url(self, course_overview):
""" """
Get the representation for SerializerMethodField `blocks_url` Get the representation for SerializerMethodField `blocks_url`
......
...@@ -5,7 +5,7 @@ Tests for Course API forms. ...@@ -5,7 +5,7 @@ Tests for Course API forms.
import ddt import ddt
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django.http import QueryDict from django.http import QueryDict
from itertools import product, chain from itertools import product
from urllib import urlencode from urllib import urlencode
from openedx.core.djangoapps.util.test_forms import FormTestMixin from openedx.core.djangoapps.util.test_forms import FormTestMixin
...@@ -66,7 +66,6 @@ class TestCourseListGetForm(FormTestMixin, UsernameTestMixin, SharedModuleStoreT ...@@ -66,7 +66,6 @@ class TestCourseListGetForm(FormTestMixin, UsernameTestMixin, SharedModuleStoreT
'org': '', 'org': '',
'mobile': None, 'mobile': None,
'filter_': None, 'filter_': None,
'include_hidden': None,
} }
def test_basic(self): def test_basic(self):
...@@ -79,13 +78,10 @@ class TestCourseListGetForm(FormTestMixin, UsernameTestMixin, SharedModuleStoreT ...@@ -79,13 +78,10 @@ class TestCourseListGetForm(FormTestMixin, UsernameTestMixin, SharedModuleStoreT
self.assert_valid(self.cleaned_data) self.assert_valid(self.cleaned_data)
@ddt.data( @ddt.data(
*chain(product( *product(
[('mobile', 'mobile_available')], [('mobile', 'mobile_available')],
[(True, True), (False, False), ('1', True), ('0', False), (None, None)], [(True, True), (False, False), ('1', True), ('0', False), (None, None)],
), product( )
[('include_hidden', 'include_hidden')],
[(True, True), (False, False), ('1', True), ('0', False), (None, None)],
))
) )
@ddt.unpack @ddt.unpack
def test_filter(self, param_field_name, param_field_value): def test_filter(self, param_field_name, param_field_value):
......
...@@ -68,7 +68,6 @@ class TestCourseSerializer(CourseApiFactoryMixin, ModuleStoreTestCase): ...@@ -68,7 +68,6 @@ class TestCourseSerializer(CourseApiFactoryMixin, ModuleStoreTestCase):
'effort': u'6 hours', 'effort': u'6 hours',
'pacing': 'instructor', 'pacing': 'instructor',
'mobile_available': False, 'mobile_available': False,
'hidden': False,
# 'course_id' is a deprecated field, please use 'id' instead. # 'course_id' is a deprecated field, please use 'id' instead.
'course_id': u'edX/toy/2012_Fall', 'course_id': u'edX/toy/2012_Fall',
......
...@@ -152,10 +152,6 @@ class CourseListView(DeveloperErrorViewMixin, ListAPIView): ...@@ -152,10 +152,6 @@ class CourseListView(DeveloperErrorViewMixin, ListAPIView):
If specified, only visible `CourseOverview` objects that are If specified, only visible `CourseOverview` objects that are
designated as mobile_available are returned. designated as mobile_available are returned.
include_hidden (optional):
If specified, courses that are hidden in the LMS, will be returned
with a hidden flag set to true.
**Returns** **Returns**
* 200 on success, with a list of course discovery objects as returned * 200 on success, with a list of course discovery objects as returned
......
...@@ -376,7 +376,6 @@ def get_courses(user, org=None, filter_=None): ...@@ -376,7 +376,6 @@ def get_courses(user, org=None, filter_=None):
Returns a list of courses available, sorted by course.number and optionally Returns a list of courses available, sorted by course.number and optionally
filtered by org code (case-insensitive). filtered by org code (case-insensitive).
""" """
include_hidden = filter_.pop('include_hidden', False) if filter_ else False
courses = branding.get_visible_courses(org=org, filter_=filter_) courses = branding.get_visible_courses(org=org, filter_=filter_)
permission_name = configuration_helpers.get_value( permission_name = configuration_helpers.get_value(
...@@ -384,14 +383,8 @@ def get_courses(user, org=None, filter_=None): ...@@ -384,14 +383,8 @@ def get_courses(user, org=None, filter_=None):
settings.COURSE_CATALOG_VISIBILITY_PERMISSION settings.COURSE_CATALOG_VISIBILITY_PERMISSION
) )
# see_in_catalog is the permission that checks the catalog visibility setting. courses = [c for c in courses if has_access(user, permission_name, c)]
# include_hidden refers to showing courses that are normally not visible due to this setting.
# We don't want to show courses that are hidden for other reasons, which is why we don't
# use the override for other permissions.
if permission_name is 'see_in_catalog':
courses = [c for c in courses if include_hidden or has_access(user, permission_name, c)]
else:
courses = [c for c in courses if has_access(user, permission_name, c)]
return courses return courses
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment