def index(request): canvas_user_id = request.LTI['custom_canvas_user_id'] sis_account_id = request.LTI['custom_canvas_account_sis_id'] ci_filters = {key: request.GET.get(key, '') for key in COURSE_INSTANCE_FILTERS} (account_type, _) = canvas_api_accounts.parse_canvas_account_id(sis_account_id) schools = [] terms = [] departments = [] course_groups = [] school = None if account_type in canvas_api_accounts.ACCOUNT_TYPES: # We are in the context of a SIS type account, so limit options to that context school_id = sis_account_id if account_type == canvas_api_accounts.ACCOUNT_TYPE_DEPARTMENT: department = canvas_api_accounts.get_account_by_sis_account_id(canvas_user_id, sis_account_id) department_id = department['sis_account_id'] school_id = department['parent_account_id'] ci_filters[canvas_api_accounts.ACCOUNT_TYPE_COURSE_GROUP] = department_id departments.append(get_department_data_for_school(canvas_user_id, school_id, department_id)) elif account_type == canvas_api_accounts.ACCOUNT_TYPE_COURSE_GROUP: course_group = canvas_api_accounts.get_account_by_sis_account_id(canvas_user_id, sis_account_id) course_group_id = course_group['sis_account_id'] school_id = course_group['parent_account_id'] ci_filters[canvas_api_accounts.ACCOUNT_TYPE_COURSE_GROUP] = course_group_id course_groups.append(get_course_group_data_for_school(canvas_user_id, school_id, course_group_id)) school = get_school_data_for_user(canvas_user_id, school_id) ci_filters[canvas_api_accounts.ACCOUNT_TYPE_SCHOOL] = school['id'] schools.append(school) else: # We are outside the context of a SIS type account, so show all schools # that the user has permission to create courses for schools = get_school_data_for_user(canvas_user_id) school_sis_account_id = ci_filters.get('school') if school_sis_account_id: school = get_school_data_for_user(canvas_user_id, school_sis_account_id) if len(schools) == 0: return redirect('not_authorized') if school: # Populate term, department, and course_group filter options if we already have a school school_sis_account_id = school['id'] terms = get_term_data_for_school(school_sis_account_id) if not departments and not course_groups: departments = get_department_data_for_school(canvas_user_id, school_sis_account_id) course_groups = get_course_group_data_for_school(canvas_user_id, school_sis_account_id) return render(request, 'bulk_site_creation/index.html', { 'filters': ci_filters, 'schools': schools, 'terms': terms, 'departments': departments, 'course_groups': course_groups })
def get_course_group_data_for_school(canvas_user_id, school_sis_account_id, course_group_sis_account_id=None): school_account = canvas_api_accounts_helper.get_account_by_sis_account_id(canvas_user_id, school_sis_account_id) course_groups = [] accounts = canvas_api_accounts_helper.get_course_group_accounts( canvas_user_id, school_account['id'], canvas_api_accounts_helper.ACCOUNT_PERMISSION_MANAGE_COURSES ) for account in accounts: account_id = account['sis_account_id'] course_group = { 'id': account_id, 'name': account['name'] } if course_group_sis_account_id and course_group_sis_account_id == account_id: return course_group else: course_groups.append(course_group) return course_groups
def get_department_data_for_school(canvas_user_id, school_sis_account_id, department_sis_account_id=None): school_account = canvas_api_accounts_helper.get_account_by_sis_account_id(canvas_user_id, school_sis_account_id) departments = [] accounts = canvas_api_accounts_helper.get_department_accounts( canvas_user_id, school_account['id'], canvas_api_accounts_helper.ACCOUNT_PERMISSION_MANAGE_COURSES ) for account in accounts: account_id = account['sis_account_id'] department = { 'id': account_id, 'name': account['name'] } if department_sis_account_id and department_sis_account_id == account_id: return department else: departments.append(department) return departments