def remove_from_section(request): canvas_course_id = request.LTI['custom_canvas_course_id'] user_section_id = request.POST.get('user_section_id') if not user_section_id: return JsonResponse({'message': "Invalid user_section_id %s" % user_section_id}, status=500) try: response = canvas_api_enrollments.conclude_enrollment( SDK_CONTEXT, canvas_course_id, user_section_id, 'delete' ) canvas_api_helper_courses.delete_cache(canvas_course_id=canvas_course_id) canvas_api_helper_enrollments.delete_cache(canvas_course_id) canvas_api_helper_sections.delete_cache(canvas_course_id) except CanvasAPIError: message = "Failed to remove user from section %s in course %s", user_section_id, canvas_course_id logger.exception(message) return JsonResponse({'message': message}, status=500) return JsonResponse(response.json())
def remove_from_section(request): canvas_course_id = request.LTI['custom_canvas_course_id'] user_section_id = request.POST.get('user_section_id') section_id = request.POST.get('section_id') if not user_section_id: return JsonResponse({'message': "Invalid user_section_id %s" % user_section_id}, status=500) try: response = canvas_api_enrollments.conclude_enrollment( SDK_CONTEXT, canvas_course_id, user_section_id, 'delete' ) canvas_api_helper_courses.delete_cache(canvas_course_id=canvas_course_id) canvas_api_helper_enrollments.delete_cache(canvas_course_id) canvas_api_helper_sections.delete_cache(canvas_course_id) canvas_api_helper_sections.delete_section_cache(section_id) except CanvasAPIError: message = "Failed to remove user from section %s in course %s", user_section_id, canvas_course_id logger.exception(message) canvas_api_helper_sections.delete_cache(canvas_course_id) return JsonResponse({'message': message}, status=500) return JsonResponse(response.json())
def remove_user(request): canvas_course_id = request.POST.get('canvas_course_id') sis_user_id = request.POST.get('sis_user_id') canvas_role_id = request.POST.get('canvas_role_id') user_role_id = request.POST.get('user_role_id') try: course_instance_id = request.LTI['lis_course_offering_sourcedid'] except KeyError as e: return lti_key_error_response(request, e) user_role = get_user_role_if_permitted(course_instance_id, user_role_id) if user_role is None: return JsonResponse( {'result': 'failure', 'message': 'Error: The specified user role {} is not valid.' .format(user_role_id)}, status=500) if int(user_role.canvas_role_id) != int(canvas_role_id): logger.exception( u'The specified Canvas role %s does not correspond with user role ' u'%s record\'s Canvas role (%s).', canvas_role_id, user_role_id, user_role.canvas_role_id) return JsonResponse( {'result': 'failure', 'message': 'Error: The specified canvas role {} is not valid.' .format(canvas_role_id)}, status=500) # start by getting all the enrollments for this user user_id = 'sis_user_id:%s' % sis_user_id try: user_enrollments = get_all_list_data( SDK_CONTEXT, enrollments.list_enrollments_users, user_id) except CanvasAPIError as api_error: logger.exception( u"CanvasAPIError trying to get enrollments for user %s", sis_user_id, api_error) return JsonResponse( {'result': 'failure', 'message': 'Error: There was a problem getting enrollments for ' 'the user.'}, status=500) else: # create a filtered list of just the users enrollments for the course # matching the canvas_course_id and the canvas role being removed user_enrollments_to_remove = [ enrollment['id'] for enrollment in user_enrollments if (int(enrollment['course_id']) == int(canvas_course_id) and int(enrollment['role_id']) == int(canvas_role_id))] # Remove the user from all Canvas sections in course for enrollment_id in user_enrollments_to_remove: try: enrollments.conclude_enrollment(SDK_CONTEXT, canvas_course_id, enrollment_id, task='delete') except CanvasAPIError as api_error: logger.exception( u'Canvas API Error trying to delete user %s with enrollment id ' u'%s from course instance %s: %s', sis_user_id, enrollment_id, course_instance_id, api_error ) return JsonResponse( {'result': 'failure', 'message': 'Error: There was a problem in deleting the user'}, status=500) # update canvas api caches canvas_api_helper_courses.delete_cache(canvas_course_id=canvas_course_id) canvas_api_helper_enrollments.delete_cache(canvas_course_id) canvas_api_helper_sections.delete_cache(canvas_course_id) logger.debug( u'Now removing user with user_id=%s from course_instance_id=%s in ' u'CourseManager DB.', sis_user_id, course_instance_id ) # find the enrollment in question model_class = get_course_member_class(user_role) try: enrollment = model_class.objects.get( course_instance_id=course_instance_id, user_id=sis_user_id) except model_class.DoesNotExist: logger.exception(u'Unable to remove user %s from %s membership in ' u'course %s: no such membership exists.', sis_user_id, model_class._meta.db_table, course_instance_id) return JsonResponse( {'result': 'failure', 'message': 'Error: There was a problem in deleting the user'}, status=500) # now delete it try: enrollment.delete() except Exception as e: logger.exception( u"Error in deleting user=%s from course_instance_id=%s: %s", sis_user_id, course_instance_id, e.message ) return JsonResponse( {'result': 'failure', 'message': 'Error: There was a problem in deleting the user'}, status=500) # Record the delete in the audit log audit_logger.info( u'Course Enrollee=%s was deleted by user=%s for canvas_course_id=%s', sis_user_id, request.user.username, canvas_course_id) response_data = { 'result': 'success', 'message': 'User successfully removed from course', } return JsonResponse(response_data)