Example #1
0
    def get_queryset(self):
        api_version = self.kwargs.get('api_version')
        enrollments = self.queryset.filter(
            user__username=self.kwargs['username'],
            is_active=True).order_by('created').reverse()
        org = self.request.query_params.get('org', None)

        if api_version == API_V05:
            # for v0.5 don't return expired courses
            return [
                enrollment for enrollment in enrollments
                if enrollment.course_overview
                and self.is_org(org, enrollment.course_overview.org)
                and is_mobile_available_for_user(self.request.user,
                                                 enrollment.course_overview)
                and not self.hide_course_for_enrollment_fee_experiment(
                    self.request.user, enrollment) and (
                        not CONTENT_TYPE_GATING_FLAG.is_enabled()
                        or check_course_expired(self.request.user, enrollment.
                                                course) == ACCESS_GRANTED)
            ]
        else:
            # return all courses, with associated expiration
            return [
                enrollment for enrollment in enrollments
                if enrollment.course_overview
                and self.is_org(org, enrollment.course_overview.org)
                and is_mobile_available_for_user(self.request.user,
                                                 enrollment.course_overview)
            ]
Example #2
0
    def get_queryset(self):
        api_version = self.kwargs.get('api_version')
        enrollments = self.queryset.filter(
            user__username=self.kwargs['username'],
            is_active=True
        ).order_by('created').reverse()
        org = self.request.query_params.get('org', None)

        same_org = (
            enrollment for enrollment in enrollments
            if enrollment.course_overview and self.is_org(org, enrollment.course_overview.org)
        )
        mobile_available = (
            enrollment for enrollment in same_org
            if is_mobile_available_for_user(self.request.user, enrollment.course_overview)
        )
        not_hidden_for_experiments = (
            enrollment for enrollment in mobile_available
            if not self.hide_course_for_enrollment_fee_experiment(self.request.user, enrollment)
        )
        not_duration_limited = (
            enrollment for enrollment in not_hidden_for_experiments
            if check_course_expired(self.request.user, enrollment.course) == ACCESS_GRANTED
        )

        if api_version == API_V05:
            # for v0.5 don't return expired courses
            return list(not_duration_limited)
        else:
            # return all courses, with associated expiration
            return list(mobile_available)
Example #3
0
    def get_queryset(self):
        CREATED = 'created'
        CREATED_REVERSE = 'created_reverse'
        COURSE_NAME = 'course_name'
        COURSE_NAME_REVERSE = 'course_name_reverse'
        
        queryset_options = {
            CREATED: self.queryset_order_by_created,
            CREATED_REVERSE: self.queryset_order_by_created_reverse,
            COURSE_NAME: self.queryset_order_by_course_name,
            COURSE_NAME_REVERSE: self.queryset_order_by_course_name_reverse
        }

        partial_queryset =\
            self.queryset.filter(
                user__username=self.kwargs['username'],
                is_active=True
            )

        order_by =\
            configuration_helpers.get_value(
                'USER_COURSE_ENROLLMENTS_ORDER_BY',
                settings.USER_COURSE_ENROLLMENTS_ORDER_BY
            )

        enrollments = queryset_options[order_by](partial_queryset)
        org = self.request.query_params.get('org', None)
        orgs = configuration_helpers.get_all_orgs()
        return [
            enrollment for enrollment in enrollments
            if enrollment.course_overview and
            self.is_org(org, enrollment.course_overview.org) and
            (org or enrollment.course_overview.org not in orgs) and
            is_mobile_available_for_user(self.request.user, enrollment.course_overview)
        ]
Example #4
0
    def get(self, request, username):
        """
        Returns a list of courses enrolled by user.
        """
        queryset = CourseEnrollment.objects.all()
        course_ids = set(queryset.values_list('course_id', flat=True))
        catalog_course_runs_against_course_keys = get_course_runs(course_ids, request.user)

        enrollments = queryset.filter(
            user__username=username,
            is_active=True
        ).order_by('created').reverse()
        org = request.query_params.get('org', None)

        return Response([
            CourseEnrollmentSerializer(
                enrollment,
                context={
                    "request": request,
                    "catalog_course_run": (
                        catalog_course_runs_against_course_keys[unicode(enrollment.course_id)]
                        if unicode(enrollment.course_id) in catalog_course_runs_against_course_keys else None
                    )
                }
            ).data for enrollment in enrollments
            if enrollment.course_overview and self.is_org(org, enrollment.course_overview.org) and
            is_mobile_available_for_user(request.user, enrollment.course_overview)
        ])
Example #5
0
    def list(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.GET, files=request.FILES)
        if not serializer.is_valid():
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

        # Get friends from Facebook
        result = get_friends_from_facebook(serializer)
        if not isinstance(result, list):
            return result

        friends_that_are_edx_users = get_linked_edx_accounts(result)

        # Filter by sharing preferences
        users_with_sharing = [
            friend for friend in friends_that_are_edx_users if share_with_facebook_friends(friend)
        ]

        # Get unique enrollments
        enrollments = []
        for friend in users_with_sharing:
            query_set = CourseEnrollment.objects.filter(
                user_id=friend['edX_id']
            ).exclude(course_id__in=[enrollment.course_id for enrollment in enrollments])
            enrollments.extend(query_set)

        # Get course objects
        courses = [
            enrollment for enrollment in enrollments if enrollment.course
            and is_mobile_available_for_user(self.request.user, enrollment.course)
        ]

        return Response(CourseEnrollmentSerializer(courses, context={'request': request}).data)
Example #6
0
    def get_queryset(self):
        api_version = self.kwargs.get('api_version')
        enrollments = self.queryset.filter(
            user__username=self.kwargs['username'],
            is_active=True).order_by('created').reverse()
        org = self.request.query_params.get('org', None)

        same_org = (enrollment for enrollment in enrollments
                    if enrollment.course_overview
                    and self.is_org(org, enrollment.course_overview.org))
        mobile_available = (enrollment for enrollment in same_org
                            if is_mobile_available_for_user(
                                self.request.user, enrollment.course_overview))
        not_hidden_for_experiments = (
            enrollment for enrollment in mobile_available
            if not self.hide_course_for_enrollment_fee_experiment(
                self.request.user, enrollment))
        not_duration_limited = (
            enrollment for enrollment in not_hidden_for_experiments
            if check_course_expired(self.request.user,
                                    enrollment.course) == ACCESS_GRANTED)

        if api_version == API_V05:
            # for v0.5 don't return expired courses
            return list(not_duration_limited)
        else:
            # return all courses, with associated expiration
            return list(mobile_available)
Example #7
0
 def get_queryset(self):
     enrollments = self.queryset.filter(
         user__username=self.kwargs['username'],
         is_active=True
     ).order_by('created').reverse()
     return [
         enrollment for enrollment in enrollments
         if enrollment.course and is_mobile_available_for_user(self.request.user, enrollment.course)
     ]
Example #8
0
 def get_queryset(self):
     enrollments = self.queryset.filter(
         user__username=self.kwargs['username'],
         is_active=True
     ).order_by('created').reverse()
     return [
         enrollment for enrollment in enrollments
         if enrollment.course and is_mobile_available_for_user(self.request.user, enrollment.course)
     ]
Example #9
0
 def get_queryset(self):
     enrollments = self.queryset.filter(
         user__username=self.kwargs['username'],
         is_active=True
     ).order_by('created').reverse()
     org = self.request.query_params.get('org', None)
     return [
         enrollment for enrollment in enrollments
         if enrollment.course_overview and self.is_org(org, enrollment.course_overview.org) and
         is_mobile_available_for_user(self.request.user, enrollment.course_overview)
     ]
Example #10
0
 def get_queryset(self):
     enrollments = self.queryset.filter(
         user__username=self.kwargs['username'],
         is_active=True
     ).order_by('created').reverse()
     org = self.request.query_params.get('org', None)
     return [
         enrollment for enrollment in enrollments
         if enrollment.course_overview and self.is_org(org, enrollment.course_overview.org) and
         is_mobile_available_for_user(self.request.user, enrollment.course_overview)
     ]