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)

        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 #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_duration_limited = (
            enrollment for enrollment in mobile_available
            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 can_load():
        """
        Can this user load this course?

        NOTE: this is not checking whether user is actually enrolled in the course.
        """
        # N.B. I'd love a better way to handle this pattern, without breaking the
        # shortcircuiting logic. Maybe AccessResponse needs to grow a
        # fluent interface?
        #
        # return (
        #     _visible_to_nonstaff_users(courselike).and(
        #         check_course_open_for_learner, user, courselike
        #     ).and(
        #         _can_view_courseware_with_prerequisites, user, courselike
        #     )
        # ).or(
        #     _has_staff_access_to_descriptor, user, courselike, courselike.id
        # )
        if courselike.id.deprecated:  # we no longer support accessing Old Mongo courses
            return OldMongoAccessError(courselike)

        visible_to_nonstaff = _visible_to_nonstaff_users(courselike)
        if not visible_to_nonstaff:
            staff_access = _has_staff_access_to_descriptor(
                user, courselike, courselike.id)
            if staff_access:
                return staff_access
            else:
                return visible_to_nonstaff

        open_for_learner = check_course_open_for_learner(user, courselike)
        if not open_for_learner:
            staff_access = _has_staff_access_to_descriptor(
                user, courselike, courselike.id)
            if staff_access:
                return staff_access
            else:
                return open_for_learner

        view_with_prereqs = _can_view_courseware_with_prerequisites(
            user, courselike)
        if not view_with_prereqs:
            staff_access = _has_staff_access_to_descriptor(
                user, courselike, courselike.id)
            if staff_access:
                return staff_access
            else:
                return view_with_prereqs

        has_not_expired = check_course_expired(user, courselike)
        if not has_not_expired:
            staff_access = _has_staff_access_to_descriptor(
                user, courselike, courselike.id)
            if staff_access:
                return staff_access
            else:
                return has_not_expired

        return ACCESS_GRANTED
Example #4
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 #5
0
    def can_load():
        """
        Can this user load this course?

        NOTE: this is not checking whether user is actually enrolled in the course.
        """
        # N.B. I'd love a better way to handle this pattern, without breaking the
        # shortcircuiting logic. Maybe AccessResponse needs to grow a
        # fluent interface?
        #
        # return (
        #     _visible_to_nonstaff_users(courselike).and(
        #         check_course_open_for_learner, user, courselike
        #     ).and(
        #         _can_view_courseware_with_prerequisites, user, courselike
        #     )
        # ).or(
        #     _has_staff_access_to_descriptor, user, courselike, courselike.id
        # )
        visible_to_nonstaff = _visible_to_nonstaff_users(courselike)
        if not visible_to_nonstaff:
            staff_access = _has_staff_access_to_descriptor(user, courselike, courselike.id)
            if staff_access:
                return staff_access
            else:
                return visible_to_nonstaff

        open_for_learner = check_course_open_for_learner(user, courselike)
        if not open_for_learner:
            staff_access = _has_staff_access_to_descriptor(user, courselike, courselike.id)
            if staff_access:
                return staff_access
            else:
                return open_for_learner

        view_with_prereqs = _can_view_courseware_with_prerequisites(user, courselike)
        if not view_with_prereqs:
            staff_access = _has_staff_access_to_descriptor(user, courselike, courselike.id)
            if staff_access:
                return staff_access
            else:
                return view_with_prereqs

        has_not_expired = check_course_expired(user, courselike)
        if not has_not_expired:
            staff_access = _has_staff_access_to_descriptor(user, courselike, courselike.id)
            if staff_access:
                return staff_access
            else:
                return has_not_expired

        return ACCESS_GRANTED