def fork_group(lti=lti): ''' Adds a group to a course''' # Get arguments assignment_group_id = int(request.values.get('assignment_group_id')) assignment_group = AssignmentGroup.by_id(assignment_group_id) is_embedded = ('embed' == request.values.get('menu', "select")) # Verify exists check_resource_exists(assignment_group, "Assignment Group", assignment_group_id) # Verify permissions require_course_instructor(g.user, assignment_group.course_id) # Perform action new_assignment_group = AssignmentGroup.new( owner_id=g.user.id, course_id=assignment_group.course_id, name=assignment_group.name) new_assignment_group.forked_id = assignment_group_id new_assignment_group.forked_version = assignment_group.version # Result select_url = get_select_menu_link(new_assignment_group.id, new_assignment_group.name, is_embedded, True) return jsonify(success=True, id=new_assignment_group.id, name=new_assignment_group.name, select=select_url)
def fix_course_outcome_url(): new_url = request.values.get("new_url") course_id = get_course_id() user, user_id = get_user() require_course_instructor(user, course_id) course = Course.by_id(course_id) course.update_endpoint(new_url) return ajax_success({"success": "True"})
def remove_assignment(lti=None): assignment_id = int(request.values.get('assignment_id')) assignment = Assignment.by_id(assignment_id) # Verify exists check_resource_exists(assignment, "Assignment", assignment_id) # Verify permissions require_course_instructor(g.user, assignment.course_id) Assignment.remove(assignment.id) return jsonify(success=True)
def rename_course(): course_id = int(request.values.get('course_id')) course = Course.by_id(course_id) # Verify exists check_resource_exists(course, "Course", course_id) # Verify permissions require_course_instructor(g.user, course_id) # Perform action new_name = request.values.get('name') Course.rename(course_id, new_name) return jsonify(success=True)
def remove_course(course_id): course_id = int(request.values.get('course_id')) course = Course.by_id(course_id) # Verify exists check_resource_exists(course, "Course", course_id) # Verify permissions require_course_instructor(g.user, course_id) # Perform action Course.remove(course_id) flash('Course removed') return redirect(url_for('courses.index'))
def move_course(lti=None): assignment_id = int(request.values.get('assignment_id')) new_course_id = int(request.values.get('new_course_id')) assignment = Assignment.by_id(int(assignment_id)) # Verify exists check_resource_exists(assignment, "Assignment", assignment_id) # Verify permissions require_course_instructor(g.user, assignment.course_id) require_course_instructor(g.user, new_course_id) # Perform action assignment.move_course(new_course_id) return jsonify(success=True)
def remove_group(lti=lti): ''' Removes a group from a course''' assignment_group_id = int(request.values.get('assignment_group_id')) assignment_group = AssignmentGroup.by_id(assignment_group_id) # Verify exists check_resource_exists(assignment_group, "Assignment Group", assignment_group_id) # Verify permissions require_course_instructor(g.user, assignment_group.course_id) # Perform action AssignmentGroup.remove(assignment_group.id) # Result return jsonify(success=True)
def edit_settings(lti=lti): # Get arguments assignment_group_id = int(request.values.get('assignment_group_id')) assignment_group = AssignmentGroup.by_id(assignment_group_id) ip_ranges = request.values.get('ip_ranges') passcode = request.values.get('passcode') # Verify exists check_resource_exists(assignment_group, "Assignment Group", assignment_group_id) # Verify permissions require_course_instructor(g.user, assignment_group.course_id) # Perform action if request.method == 'POST': if ip_ranges is not None: for assignment in assignment_group.get_assignments(): assignment.edit(dict(ip_ranges=ip_ranges)) assignment.update_setting("passcode", passcode) return redirect(request.url) # Result else: assignments = assignment_group.get_assignments() passcode = assignments[0].get_setting("passcode", "") existing_ip_ranges = [ assignment.ip_ranges for assignment in assignments ] merged_duplicates = set(existing_ip_ranges) warning = "" if len(merged_duplicates) == 1: ip_ranges = merged_duplicates.pop() elif merged_duplicates: ip_ranges = existing_ip_ranges[0] warning = "This assignment has multiple IP ranges: <pre>{}</pre>".format( "\n".join(existing_ip_ranges)) return ''' <!doctype html> <title>Edit Assignment Group Settings</title> <h1>Edit Assignment Group Settings</h1> <p>Assignment: {group_name}</p> <p>{warning}</p> <form action="" method=post> <p>IP Ranges: <input type=text name=ip_ranges value="{ip_ranges}"><br> Passcode: <input type=text name=passcode value="{passcode}"><br> <input type=submit value=Change> </form> '''.format(group_name=assignment_group.name, ip_ranges=ip_ranges if ip_ranges else "", passcode=passcode if passcode else "", warning=warning)
def edit_group(lti=lti): # Get arguments assignment_group_id = int(request.values.get('assignment_group_id')) assignment_group = AssignmentGroup.by_id(assignment_group_id) new_name = request.values.get('new_name') new_url = request.values.get('new_url') # Verify exists check_resource_exists(assignment_group, "Assignment Group", assignment_group_id) # Verify permissions require_course_instructor(g.user, assignment_group.course_id) # Perform action changed = assignment_group.edit(dict(name=new_name, url=new_url)) # Result return jsonify(success=True, name=assignment_group.name, url=assignment_group.url)
def add_group(lti=lti): ''' Adds a group to a course''' # Get arguments course_id = int(request.values.get('course_id')) new_name = request.values.get('name') new_url = request.values.get('url') is_embedded = ('embed' == request.values.get('menu', "select")) # Verify permissions require_course_instructor(g.user, course_id) # Perform action assignment_group = AssignmentGroup.new(owner_id=g.user.id, course_id=course_id, name=new_name, url=new_url) # Result select_url = get_select_menu_link(assignment_group.id, assignment_group.name, is_embedded, True) return jsonify(success=True, id=assignment_group.id, url=assignment_group.url, name=assignment_group.name, select=select_url)
def new_assignment(lti=lti): # Get arguments course_id = int(request.values.get('course_id')) name = request.values.get('name', None) or None url = request.values.get('url', None) or None level = request.values.get('level', None) or None is_embedded = ('embed' == request.values.get('menu', "select")) assignment_type = request.values.get('type', "blockpy") # Verify permissions require_course_instructor(g.user, course_id) # Perform action assignment = Assignment.new(owner_id=g.user.id, course_id=course_id, url=url, type=assignment_type, name=name, level=level) select_url = get_select_menu_link(assignment.id, assignment.title(), is_embedded, False) return jsonify(success=True, redirect=url_for('assignments.load', assignment_id=assignment.id), id=assignment.id, url=url, name=assignment.name, type=assignment_type, instructions=strip_tags(assignment.instructions)[:255], title=assignment.title(), view=url_for('assignments.load', assignment_id=assignment.id, embed=is_embedded), select=select_url, edit=url_for('assignments.load', assignment_id=assignment.id, course_id=assignment.course_id), date_modified=assignment.pretty_date_modified())
def move_membership(lti=None): # Get arguments assignment_id = int(request.values.get('assignment_id')) old_group_id = int(request.values.get('old_group_id')) new_group_id = int(request.values.get('new_group_id')) assignment = Assignment.by_id(assignment_id) # Verify exists check_resource_exists(assignment, "Assignment", assignment_id) # Verify permissions require_course_instructor(g.user, assignment.course_id) # Verify permissions if new_group_id != -1: new_assignment_group = AssignmentGroup.by_id(new_group_id) require_course_instructor(g.user, new_assignment_group.course_id) if old_group_id != -1: old_assignment_group = AssignmentGroup.by_id(old_group_id) require_course_instructor(g.user, old_assignment_group.course_id) # Perform action AssignmentGroupMembership.move_assignment(assignment_id, new_group_id) # Result return jsonify(success=True)