コード例 #1
0
ファイル: views.py プロジェクト: yzq1979/edx-platform
    def _get_certificates_for_user(self, username):
        """
        Returns a user's viewable certificates sorted by course name.
        """
        course_certificates = get_certificates_for_user(username)
        passing_certificates = {}
        for course_certificate in course_certificates:
            if course_certificate.get('is_passing', False):
                course_key = course_certificate['course_key']
                passing_certificates[course_key] = course_certificate

        viewable_certificates = []
        for course_key, course_overview in CourseOverview.get_from_ids_if_exists(
                passing_certificates.keys()).items():
            if certificates_viewable_for_course(course_overview):
                course_certificate = passing_certificates[course_key]
                course_certificate[
                    'course_display_name'] = course_overview.display_name_with_default
                course_certificate[
                    'course_organization'] = course_overview.display_org_with_default
                viewable_certificates.append(course_certificate)

        viewable_certificates.sort(
            key=lambda certificate: certificate['created'])
        return viewable_certificates
コード例 #2
0
    def prefetch_courses(persistent_course_grades):
        """
        Prefetch courses from the list of course_ids present in the persistent_course_grades.

        Arguments:
            persistent_course_grades (list): A list of PersistentCourseGrade.

        Returns:
            (dict): A dictionary containing course_id to course_overview mapping.
        """
        return CourseOverview.get_from_ids_if_exists(
            [grade.course_id for grade in persistent_course_grades])
コード例 #3
0
    def get(self, request, program_uuid=None):
        """
        Defines the GET endpoint for overviews of course enrollments
        for a user as part of a program.
        """
        user = request.user

        user_program_enrollment = ProgramEnrollment.objects.filter(
            program_uuid=program_uuid,
            user=user,
            status='enrolled',
        ).order_by('-modified', )

        user_program_enrollment_count = user_program_enrollment.count()

        if user_program_enrollment_count > 1:
            # in the unusual and unlikely case of a user having two
            # active program enrollments for the same program,
            # choose the most recently modified enrollment and log
            # a warning
            user_program_enrollment = user_program_enrollment[0]
            logger.warning(
                ('User with user_id {} has more than program enrollment'
                 'with an enrolled status for program uuid {}.').format(
                     user.id,
                     program_uuid,
                 ))
        elif user_program_enrollment_count == 0:
            # if the user is not enrolled in the program, they are not authorized
            # to view the information returned by this endpoint
            raise PermissionDenied

        user_program_course_enrollments = ProgramCourseEnrollment.objects.filter(
            program_enrollment=user_program_enrollment).select_related(
                'course_enrollment')

        enrollment_dict = {
            enrollment.course_key: enrollment.course_enrollment
            for enrollment in user_program_course_enrollments
        }

        overviews = CourseOverview.get_from_ids_if_exists(
            enrollment_dict.keys())

        resume_course_run_urls = get_resume_urls_for_enrollments(
            user, enrollment_dict.values())

        response = {
            'course_runs': [],
        }

        for enrollment in user_program_course_enrollments:
            overview = overviews[enrollment.course_key]

            certificate_download_url = None
            is_certificate_passing = None
            certificate_creation_date = None
            certificate_info = get_certificate_for_user(
                user.username, enrollment.course_key)

            if certificate_info:
                certificate_download_url = certificate_info['download_url']
                is_certificate_passing = certificate_info['is_passing']
                certificate_creation_date = certificate_info['created']

            course_run_dict = {
                'course_run_id':
                enrollment.course_key,
                'display_name':
                overview.display_name_with_default,
                'course_run_status':
                self.get_course_run_status(overview, is_certificate_passing,
                                           certificate_creation_date),
                'course_run_url':
                self.get_course_run_url(request, enrollment.course_key),
                'start_date':
                overview.start,
                'end_date':
                overview.end,
                'due_dates':
                self.get_due_dates(request, enrollment.course_key, user),
            }

            if certificate_download_url:
                course_run_dict[
                    'certificate_download_url'] = certificate_download_url

            emails_enabled = self.get_emails_enabled(user,
                                                     enrollment.course_key)
            if emails_enabled is not None:
                course_run_dict['emails_enabled'] = emails_enabled

            micromasters_title = self.program['title'] if self.program[
                'type'] == 'MicroMasters' else None
            if micromasters_title:
                course_run_dict['micromasters_title'] = micromasters_title

            # if the url is '', then the url is None so we can omit it from the response
            resume_course_run_url = resume_course_run_urls[
                enrollment.course_key]
            if resume_course_run_url:
                course_run_dict[
                    'resume_course_run_url'] = resume_course_run_url

            response['course_runs'].append(course_run_dict)

        serializer = CourseRunOverviewListSerializer(response)
        return Response(serializer.data)
コード例 #4
0
ファイル: views.py プロジェクト: edx/edx-platform
    def get(self, request, program_uuid=None):
        """
        Defines the GET endpoint for overviews of course enrollments
        for a user as part of a program.
        """
        user = request.user

        user_program_enrollment = ProgramEnrollment.objects.filter(
            program_uuid=program_uuid,
            user=user,
            status='enrolled',
        ).order_by(
            '-modified',
        )

        user_program_enrollment_count = user_program_enrollment.count()

        if user_program_enrollment_count > 1:
            # in the unusual and unlikely case of a user having two
            # active program enrollments for the same program,
            # choose the most recently modified enrollment and log
            # a warning
            user_program_enrollment = user_program_enrollment[0]
            logger.warning(
                ('User with user_id {} has more than program enrollment'
                 'with an enrolled status for program uuid {}.').format(
                    user.id,
                    program_uuid,
                )
            )
        elif user_program_enrollment_count == 0:
            # if the user is not enrolled in the program, they are not authorized
            # to view the information returned by this endpoint
            raise PermissionDenied

        user_program_course_enrollments = ProgramCourseEnrollment.objects.filter(
            program_enrollment=user_program_enrollment
        ).select_related('course_enrollment')

        enrollment_dict = {enrollment.course_key: enrollment.course_enrollment for enrollment in user_program_course_enrollments}

        overviews = CourseOverview.get_from_ids_if_exists(enrollment_dict.keys())

        resume_course_run_urls = get_resume_urls_for_enrollments(user, enrollment_dict.values())

        response = {
            'course_runs': [],
        }

        for enrollment in user_program_course_enrollments:
            overview = overviews[enrollment.course_key]

            certificate_download_url = None
            is_certificate_passing = None
            certificate_creation_date = None
            certificate_info = get_certificate_for_user(user.username, enrollment.course_key)

            if certificate_info:
                certificate_download_url = certificate_info['download_url']
                is_certificate_passing = certificate_info['is_passing']
                certificate_creation_date = certificate_info['created']

            course_run_dict = {
                'course_run_id': enrollment.course_key,
                'display_name': overview.display_name_with_default,
                'course_run_status': self.get_course_run_status(overview, is_certificate_passing, certificate_creation_date),
                'course_run_url': self.get_course_run_url(request, enrollment.course_key),
                'start_date': overview.start,
                'end_date': overview.end,
                'due_dates': self.get_due_dates(request, enrollment.course_key, user),
            }

            if certificate_download_url:
                course_run_dict['certificate_download_url'] = certificate_download_url

            emails_enabled = self.get_emails_enabled(user, enrollment.course_key)
            if emails_enabled is not None:
                course_run_dict['emails_enabled'] = emails_enabled

            micromasters_title = self.program['title'] if self.program['type'] == 'MicroMasters' else None
            if micromasters_title:
                course_run_dict['micromasters_title'] = micromasters_title

            # if the url is '', then the url is None so we can omit it from the response
            resume_course_run_url = resume_course_run_urls[enrollment.course_key]
            if resume_course_run_url:
                course_run_dict['resume_course_run_url'] = resume_course_run_url

            response['course_runs'].append(course_run_dict)

        serializer = CourseRunOverviewListSerializer(response)
        return Response(serializer.data)
コード例 #5
0
ファイル: views.py プロジェクト: jpbeaudry/edx-platform
    def get(self, request, program_uuid=None):
        """
        Defines the GET endpoint for overviews of course enrollments
        for a user as part of a program.
        """
        user = request.user
        self._check_program_enrollment_exists(user, program_uuid)

        course_run_keys = [
            CourseKey.from_string(key)
            for key in course_run_keys_for_program(self.program)
        ]

        course_enrollments = CourseEnrollment.objects.filter(
            user=user,
            course_id__in=course_run_keys,
            mode__in=[CourseMode.VERIFIED, CourseMode.MASTERS],
            is_active=True,
        )

        overviews = CourseOverview.get_from_ids_if_exists(course_run_keys)

        course_run_resume_urls = get_resume_urls_for_enrollments(
            user, course_enrollments)

        course_runs = []

        for enrollment in course_enrollments:
            overview = overviews[enrollment.course_id]

            certificate_info = get_certificate_for_user(
                user.username, enrollment.course_id) or {}

            course_run_dict = {
                'course_run_id':
                enrollment.course_id,
                'display_name':
                overview.display_name_with_default,
                'course_run_status':
                get_course_run_status(overview, certificate_info),
                'course_run_url':
                get_course_run_url(request, enrollment.course_id),
                'start_date':
                overview.start,
                'end_date':
                overview.end,
                'due_dates':
                get_due_dates(request, enrollment.course_id, user),
            }

            emails_enabled = get_emails_enabled(user, enrollment.course_id)
            if emails_enabled is not None:
                course_run_dict['emails_enabled'] = emails_enabled

            if certificate_info.get('download_url'):
                course_run_dict[
                    'certificate_download_url'] = request.build_absolute_uri(
                        certificate_info['download_url'])

            if self.program['type'] == 'MicroMasters':
                course_run_dict['micromasters_title'] = self.program['title']

            if course_run_resume_urls.get(enrollment.course_id):
                relative_resume_course_run_url = course_run_resume_urls.get(
                    enrollment.course_id)
                course_run_dict[
                    'resume_course_run_url'] = request.build_absolute_uri(
                        relative_resume_course_run_url)

            course_runs.append(course_run_dict)

        serializer = CourseRunOverviewListSerializer(
            {'course_runs': course_runs})
        return Response(serializer.data)
コード例 #6
0
ファイル: views.py プロジェクト: WH-77/edx-platform
    def get(self, request, program_uuid=None):
        """
        Defines the GET endpoint for overviews of course enrollments
        for a user as part of a program.
        """
        user = request.user
        program_enrollment = self._get_program_enrollment(user, program_uuid)

        program_course_enrollments = ProgramCourseEnrollment.objects.filter(
            program_enrollment=program_enrollment).select_related(
                'course_enrollment')

        enrollments_by_course_key = {
            enrollment.course_key: enrollment.course_enrollment
            for enrollment in program_course_enrollments
        }

        overviews = CourseOverview.get_from_ids_if_exists(
            enrollments_by_course_key.keys())

        course_run_resume_urls = get_resume_urls_for_enrollments(
            user, enrollments_by_course_key.values())

        course_runs = []

        for enrollment in program_course_enrollments:
            overview = overviews[enrollment.course_key]

            certificate_info = get_certificate_for_user(
                user.username, enrollment.course_key) or {}

            course_run_dict = {
                'course_run_id':
                enrollment.course_key,
                'display_name':
                overview.display_name_with_default,
                'course_run_status':
                self.get_course_run_status(overview, certificate_info),
                'course_run_url':
                self.get_course_run_url(request, enrollment.course_key),
                'start_date':
                overview.start,
                'end_date':
                overview.end,
                'due_dates':
                self.get_due_dates(request, enrollment.course_key, user),
            }

            emails_enabled = self.get_emails_enabled(user,
                                                     enrollment.course_key)
            if emails_enabled is not None:
                course_run_dict['emails_enabled'] = emails_enabled

            if certificate_info.get('download_url'):
                course_run_dict['certificate_download_url'] = certificate_info[
                    'download_url']

            if self.program['type'] == 'MicroMasters':
                course_run_dict['micromasters_title'] = self.program['title']

            if course_run_resume_urls.get(enrollment.course_key):
                course_run_dict[
                    'resume_course_run_url'] = course_run_resume_urls.get(
                        enrollment.course_key)

            course_runs.append(course_run_dict)

        serializer = CourseRunOverviewListSerializer(
            {'course_runs': course_runs})
        return Response(serializer.data)