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})
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) })
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 })
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)
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