Commit d84c3bd7 by Kyle McCormick

MA-776 change UserCourseEnrollmentsList endpoint to use course_overviews

parent 1726c136
......@@ -663,17 +663,19 @@ def _has_staff_access_to_descriptor(user, descriptor, course_key):
return _has_staff_access_to_location(user, descriptor.location, course_key)
def is_mobile_available_for_user(user, course):
def is_mobile_available_for_user(user, descriptor):
"""
Returns whether the given course is mobile_available for the given user.
Checks:
mobile_available flag on the course
Beta User and staff access overrides the mobile_available flag
Arguments:
descriptor (CourseDescriptor|CourseOverview): course or overview of course in question
"""
return (
course.mobile_available or
auth.has_access(user, CourseBetaTesterRole(course.id)) or
_has_staff_access_to_descriptor(user, course, course.id)
descriptor.mobile_available or
auth.has_access(user, CourseBetaTesterRole(descriptor.id)) or
_has_staff_access_to_descriptor(user, descriptor, descriptor.id)
)
......
......@@ -9,11 +9,11 @@ from student.models import CourseEnrollment, User
from certificates.models import certificate_status_for_student, CertificateStatuses
class CourseField(serializers.RelatedField):
class CourseOverviewField(serializers.RelatedField):
"""Custom field to wrap a CourseDescriptor object. Read-only."""
def to_native(self, course):
course_id = unicode(course.id)
def to_native(self, course_overview):
course_id = unicode(course_overview.id)
request = self.context.get('request', None)
if request:
video_outline_url = reverse(
......@@ -38,14 +38,14 @@ class CourseField(serializers.RelatedField):
return {
"id": course_id,
"name": course.display_name,
"number": course.display_number_with_default,
"org": course.display_org_with_default,
"start": course.start,
"end": course.end,
"course_image": course_image_url(course),
"name": course_overview.display_name,
"number": course_overview.display_number_with_default,
"org": course_overview.display_org_with_default,
"start": course_overview.start,
"end": course_overview.end,
"course_image": course_overview.course_image_url,
"social_urls": {
"facebook": course.facebook_url,
"facebook": course_overview.facebook_url,
},
"latest_updates": {
"video": None
......@@ -53,7 +53,7 @@ class CourseField(serializers.RelatedField):
"video_outline": video_outline_url,
"course_updates": course_updates_url,
"course_handouts": course_handouts_url,
"subscription_id": course.clean_id(padding_char='_'),
"subscription_id": course_overview.clean_id(padding_char='_'),
}
......@@ -61,7 +61,7 @@ class CourseEnrollmentSerializer(serializers.ModelSerializer):
"""
Serializes CourseEnrollment models
"""
course = CourseField()
course = CourseOverviewField(source="course_overview")
certificate = serializers.SerializerMethodField('get_certificate')
def get_certificate(self, model):
......
......@@ -241,7 +241,8 @@ class UserCourseEnrollmentsList(generics.ListAPIView):
).order_by('created').reverse()
return [
enrollment for enrollment in enrollments
if enrollment.course and is_mobile_available_for_user(self.request.user, enrollment.course)
if enrollment.course_overview and
is_mobile_available_for_user(self.request.user, enrollment.course_overview)
]
......
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