Example #1
0
def section_class_list(request, section_id):
    """
    Return a sorted set of enrollments that represent unique combinations of user and role.  Only user/role
    combinations that are not enrolled in the current section are considered.  This view assumes that the
    actual section that the resulting unique enrollments are part of doesn't matter, since this view is used
    to represent the user/role combinations that can be added to the section list.
    """
    canvas_course_id = request.LTI['custom_canvas_course_id']
    section = canvas_api_helper_sections.get_section(canvas_course_id, section_id)
    course_enrollments = [
        e for e in canvas_api_helper_enrollments.get_enrollments(canvas_course_id)
        if e['type'] in ENROLLMENT_TYPES
    ]

    eligible_enrollments = unique_enrollments_not_in_section_filter(
        section_id, course_enrollments)
    enrollments_badged = _add_badge_label_name_to_enrollments(
        eligible_enrollments)
    enrollments = canvas_api_helper_enrollments.add_role_labels_to_enrollments(
        enrollments_badged)
    enrollments.sort(key=lambda x: x['user']['sortable_name'])

    return render(request, 'manage_sections/_section_classlist.html', {
        'enrollments': enrollments,
        'section_id': section_id,
        'allow_edit': is_editable_section(section)
    })
def section_class_list(request, section_id):
    """
    Return a sorted set of enrollments that represent unique combinations of user and role.  Only user/role
    combinations that are not enrolled in the current section are considered.  This view assumes that the
    actual section that the resulting unique enrollments are part of doesn't matter, since this view is used
    to represent the user/role combinations that can be added to the section list.
    """
    canvas_course_id = request.LTI['custom_canvas_course_id']
    section = canvas_api_helper_sections.get_section(canvas_course_id, section_id)
    course_enrollments = [
        e for e in canvas_api_helper_enrollments.get_enrollments(canvas_course_id)
        if e['type'] in ENROLLMENT_TYPES
    ]

    eligible_enrollments = unique_enrollments_not_in_section_filter(
        section_id, course_enrollments)
    enrollments_badged = _add_badge_label_name_to_enrollments(
        eligible_enrollments)
    enrollments = canvas_api_helper_enrollments.add_role_labels_to_enrollments(
        enrollments_badged)
    enrollments.sort(key=lambda x: x['user']['sortable_name'])

    return render(request, 'manage_sections/_section_classlist.html', {
        'enrollments': enrollments,
        'section_id': section_id,
        'allow_edit': is_editable_section(section)
    })
def edit_section(request, section_id):
    canvas_course_id = request.LTI['custom_canvas_course_id']
    section_name = request.POST.get('section_name_input', '').strip()
    enrollment_count = request.POST.get('enrollment_count')

    # check to see if the textbox is empty
    if not section_name:
        return render(request, 'manage_sections/create_section_form.html', {}, status=400)

    # grab the section
    try:
        section = canvas_api_helper_sections.get_section(canvas_course_id, section_id)
    except RuntimeError:
        logger.exception(
            'Unable to get section {} (course {}) from Canvas'.format(
                section_id, canvas_course_id))
        section = None
    if not section:
        message = 'Failed to retrieve section {} from course {}'.format(section_id, canvas_course_id)
        logger.error(message)
        return JsonResponse({'message': message}, status=500)

    # verify we should allow the edit
    if not is_editable_section(section):
        # send http status code 422=Unprocessable Entity
        return JsonResponse(
            {'message': 'Error: Registrar fed sections cannot be edited'},
            status=422
        )

    # do the edit
    try:
        course_section = canvas_api_helper_sections.update_section(
            canvas_course_id, section_id, course_section_name=section_name
        )
    except RuntimeError:
        logger.exception('Unable to update section {} to {} on Canvas'.format(
            section, section_name))
        course_section = None
    else:
        canvas_api_helper_courses.delete_cache(canvas_course_id=canvas_course_id)
        canvas_api_helper_enrollments.delete_cache(canvas_course_id)

    # if section update failed for whatever reason, return error status.
    if not course_section:
        return render(request, 'manage_sections/create_section_form.html', {},
                      status=500)

    # Append section count to course_section object so the badge will appear
    # correctly. Setting to zero for newly created section.
    course_section['enrollment_count'] = enrollment_count or 0

    return render(request, 'manage_sections/section_list.html',
                  {'section': course_section})
Example #4
0
def edit_section(request, section_id):
    canvas_course_id = request.LTI['custom_canvas_course_id']
    section_name = request.POST.get('section_name_input', '').strip()
    enrollment_count = request.POST.get('enrollment_count')

    # check to see if the textbox is empty
    if not section_name:
        return render(request, 'manage_sections/create_section_form.html', {}, status=400)

    # grab the section
    try:
        section = canvas_api_helper_sections.get_section(canvas_course_id, section_id)
    except RuntimeError:
        logger.exception(
            'Unable to get section {} (course {}) from Canvas'.format(
                section_id, canvas_course_id))
        section = None
    if not section:
        message = 'Failed to retrieve section {} from course {}'.format(section_id, canvas_course_id)
        logger.error(message)
        return JsonResponse({'message': message}, status=500)

    # verify we should allow the edit
    if not is_editable_section(section):
        # send http status code 422=Unprocessable Entity
        return JsonResponse(
            {'message': 'Error: Registrar fed sections cannot be edited'},
            status=422
        )

    # do the edit
    try:
        course_section = canvas_api_helper_sections.update_section(
            canvas_course_id, section_id, course_section_name=section_name
        )
    except RuntimeError:
        logger.exception('Unable to update section {} to {} on Canvas'.format(
            section, section_name))
        course_section = None
    else:
        canvas_api_helper_courses.delete_cache(canvas_course_id=canvas_course_id)
        canvas_api_helper_enrollments.delete_cache(canvas_course_id)

    # if section update failed for whatever reason, return error status.
    if not course_section:
        return render(request, 'manage_sections/create_section_form.html', {},
                      status=500)

    # Append section count to course_section object so the badge will appear
    # correctly. Setting to zero for newly created section.
    course_section['enrollment_count'] = enrollment_count or 0

    return render(request, 'manage_sections/section_list.html',
                  {'section': course_section})
def section_user_list(request, section_id):
    canvas_course_id = request.LTI['custom_canvas_course_id']
    section = canvas_api_helper_sections.get_section(canvas_course_id, section_id)
    enrollments = _add_badge_label_name_to_enrollments(
        _filter_student_view_enrollments(section['enrollments'])
    )
    enrollments.sort(key=lambda x: x['user']['sortable_name'])
    return render(request, 'manage_sections/_section_userlist.html', {
        'allow_edit': is_editable_section(section),
        'enroll_count': len(enrollments),
        'enrollments': enrollments,
        'section_id': section_id
    })
def section_details(request, section_id):
    canvas_course_id = request.LTI['custom_canvas_course_id']
    section = canvas_api_helper_sections.get_section(canvas_course_id, section_id)
    if not section:
        logger.error(
            'Section %s not found for Canvas course %s'
            % (section_id, canvas_course_id)
        )
        return render(request, 'manage_sections/error.html', status=500)
    return render(request, 'manage_sections/section_details.html', {
        'section_id': section_id,
        'section_name': section['name'],
        'allow_edit': is_editable_section(section)
    })
Example #7
0
def section_user_list(request, section_id):
    canvas_course_id = request.LTI['custom_canvas_course_id']
    section = canvas_api_helper_sections.get_section(canvas_course_id, section_id)
    enrollments_raw = _filter_student_view_enrollments(section['enrollments'])
    enrollments_badged = _add_badge_label_name_to_enrollments(enrollments_raw)
    enrollments = canvas_api_helper_enrollments.add_role_labels_to_enrollments(
        enrollments_badged)
    enrollments.sort(key=lambda x: x['user']['sortable_name'])
    return render(request, 'manage_sections/_section_userlist.html', {
        'allow_edit': is_editable_section(section),
        'enroll_count': len(enrollments),
        'enrollments': enrollments,
        'section_id': section_id
    })
Example #8
0
def section_details(request, section_id):
    canvas_course_id = request.LTI['custom_canvas_course_id']
    section = canvas_api_helper_sections.get_section(canvas_course_id, section_id)
    if not section:
        logger.error(
            'Section %s not found for Canvas course %s'
            % (section_id, canvas_course_id)
        )
        return render(request, 'manage_sections/error.html', status=500)
    return render(request, 'manage_sections/section_details.html', {
        'section_id': section_id,
        'section_name': section['name'],
        'allow_edit': is_editable_section(section)
    })
def remove_section(request, section_id):
    canvas_course_id = request.LTI['custom_canvas_course_id']
    section = canvas_api_helper_sections.get_section(canvas_course_id, section_id)
    if not section:
        message = "Failed to retrieve section %s from course %s" % (section_id, canvas_course_id)
        logger.error(message)
        return JsonResponse({'message': message}, status=500)

    if not is_editable_section(section):
        # send http status code 422=Unprocessable Entity
        return JsonResponse(
            {'message': 'Error: Registrar fed sections cannot be deleted'},
            status=422
        )

    section = canvas_api_helper_sections.delete_section(canvas_course_id, section_id)
    if not section:
        message = "Failed to remove section %s from course %s" % (section_id, canvas_course_id)
        logger.error(message)
        return JsonResponse({'message': message}, status=500)

    return JsonResponse(section)
Example #10
0
def remove_section(request, section_id):
    canvas_course_id = request.LTI['custom_canvas_course_id']
    section = canvas_api_helper_sections.get_section(canvas_course_id, section_id)
    if not section:
        message = "Failed to retrieve section %s from course %s" % (section_id, canvas_course_id)
        logger.error(message)
        return JsonResponse({'message': message}, status=500)

    if not is_editable_section(section):
        # send http status code 422=Unprocessable Entity
        return JsonResponse(
            {'message': 'Error: Registrar fed sections cannot be deleted'},
            status=422
        )

    section = canvas_api_helper_sections.delete_section(canvas_course_id, section_id)
    if not section:
        message = "Failed to remove section %s from course %s" % (section_id, canvas_course_id)
        logger.error(message)
        return JsonResponse({'message': message}, status=500)

    return JsonResponse(section)
Example #11
0
def get_section(canvas_course_id, section_id):
    if section_id:
        section = canvas_api_helper_sections.get_section(canvas_course_id, section_id)
        return section
    return None