Пример #1
0
    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(
                list(passing_certificates.keys())).items():
            if not course_overview:
                # For deleted XML courses in which learners have a valid certificate.
                # i.e. MITx/7.00x/2013_Spring
                course_overview = self._get_pseudo_course_overview(course_key)
            if certificates_viewable_for_course(course_overview):
                course_certificate = passing_certificates[course_key]
                # add certificate into viewable certificate list only if it's a PDF certificate
                # or there is an active certificate configuration.
                if course_certificate[
                        'is_pdf_certificate'] or course_overview.has_any_active_web_certificate:
                    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 _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(
                list(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
Пример #3
0
def get_course_overviews_from_ids(course_ids):
    """
    Return course overviews for the specified course ids.

    Params:
        course_ids (iterable[CourseKey])

    Returns:
        dict[CourseKey, CourseOverview|None]
    """
    return CourseOverview.get_from_ids(course_ids)
    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(
            [grade.course_id for grade in persistent_course_grades])
Пример #5
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
        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(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)