diff --git a/lms/djangoapps/courseware/access.py b/lms/djangoapps/courseware/access.py index 3fa2cda60c..3d41f5525d 100644 --- a/lms/djangoapps/courseware/access.py +++ b/lms/djangoapps/courseware/access.py @@ -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) ) diff --git a/lms/djangoapps/mobile_api/users/serializers.py b/lms/djangoapps/mobile_api/users/serializers.py index 1674313343..b4876b3ae4 100644 --- a/lms/djangoapps/mobile_api/users/serializers.py +++ b/lms/djangoapps/mobile_api/users/serializers.py @@ -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): diff --git a/lms/djangoapps/mobile_api/users/views.py b/lms/djangoapps/mobile_api/users/views.py index 72e66cb0e5..19dae819c9 100644 --- a/lms/djangoapps/mobile_api/users/views.py +++ b/lms/djangoapps/mobile_api/users/views.py @@ -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) ]