def admin_rlms_rlms_list_external(rlmstype, rlmsversion, id): rlms = db_session.query(RLMS).filter_by(id = id).first() if rlms is None or rlms.rlms_version.version != rlmsversion or rlms.rlms_version.rlms_type.name != rlmstype: return render_template("labmanager_admin/rlms_errors.html") existing_laboratory_ids = [ laboratory.laboratory_id for laboratory in rlms.laboratories ] ManagerClass = get_manager_class(rlmstype, rlmsversion) manager_class = ManagerClass(rlms.configuration) try: available_laboratories = manager_class.get_laboratories() except: traceback.print_exc() flash("There was an error retrieving laboratories. Check the trace") return render_template("labmanager_admin/rlms_errors.html") available_laboratory_ids = [ lab.laboratory_id for lab in available_laboratories ] if request.method == 'POST': if request.form.get('action','') == 'add': for laboratory_id in request.form: if laboratory_id != 'action' and laboratory_id in available_laboratory_ids and laboratory_id not in existing_laboratory_ids: new_lab = Laboratory(laboratory_id, laboratory_id, rlms) db_session.add(new_lab) db_session.commit() return redirect(url_for('admin_rlms_rlms_list', rlmstype = rlmstype, rlmsversion = rlmsversion, id = id)) return render_template("labmanager_admin/rlms_rlms_list_external.html", available_laboratories = available_laboratories, type_name = rlmstype, version = rlmsversion, rlms_name = rlms.name, existing_laboratory_ids = existing_laboratory_ids)
def admin_rlms_versions(rlmstype): rlms_type = db_session.query(RLMSType).filter_by(name=rlmstype).first() if rlms_type is not None: versions = rlms_type.versions retrieved_versions = set( (retrieved_version.version for retrieved_version in versions)) if request.method == 'POST' and request.form.get( 'action', '').lower().startswith('add'): for supported_version in get_supported_versions(rlmstype): if supported_version not in retrieved_versions: new_version = RLMSTypeVersion(rlms_type, supported_version) db_session.add(new_version) db_session.commit() versions = rlms_type.versions retrieved_versions = set( (retrieved_version.version for retrieved_version in versions)) any_supported_missing = any([ supported_version not in retrieved_versions for supported_version in get_supported_versions(rlmstype) ]) return render_template("labmanager_admin/rlms_versions.html", versions=versions, name=rlms_type.name, supported=get_supported_versions(rlmstype), any_supported_missing=any_supported_missing) return render_template("labmanager_admin/rlms_errors.html")
def lms_admin_external_courses(): q = request.args.get('q','') try: start = int(request.args.get('start','0')) except: start = 0 db_lms = db_session.query(LMS).filter_by(lms_login = session['lms']).first() user = db_lms.labmanager_login password = db_lms.labmanager_password url = "%s?q=%s&start=%s" % (db_lms.url, q, start) VISIBLE_PAGES = 10 results = retrieve_courses(url, user, password) if isinstance(results, basestring): return "Invalid JSON provided or could not connect to the LMS. Look at the logs for more information" try: courses_data = results['courses'] courses = [ (course['id'], course['name']) for course in courses_data ] course_dict = dict(courses) number = int(results['number']) per_page = int(results['per-page']) number_of_pages = ((number - 1) / per_page ) + 1 current_page = ((start - 1) / per_page ) + 1 THEORICAL_BEFORE_PAGES = VISIBLE_PAGES / 2 if current_page < THEORICAL_BEFORE_PAGES: BEFORE_PAGES = current_page AFTER_PAGES = VISIBLE_PAGES - current_page else: BEFORE_PAGES = THEORICAL_BEFORE_PAGES AFTER_PAGES = BEFORE_PAGES min_page = (start/VISIBLE_PAGES - BEFORE_PAGES) max_page = (start/VISIBLE_PAGES + AFTER_PAGES) if max_page >= number_of_pages: max_page = number_of_pages if min_page <= -1: min_page = 0 current_pages = range(min_page, max_page) except: traceback.print_exc() return "Malformed data retrieved. Look at the logs for more information" existing_courses = db_session.query(Course).filter(Course.course_id.in_(course_dict.keys()), Course.lms == db_lms).all() existing_course_ids = [ existing_course.course_id for existing_course in existing_courses ] if request.method == 'POST': for course_id in request.form: if course_id != 'action' and course_id in course_dict and course_id not in existing_course_ids: db_course = Course(db_lms, course_id, course_dict[course_id]) db_session.add(db_course) db_session.commit() return redirect(url_for('lms_admin_courses')) return render_template("lms_admin/courses_external.html", courses = courses, existing_course_ids = existing_course_ids, q = q, current_page = current_page, number = number, current_pages = current_pages, per_page = per_page, start = start)
def _add_or_edit_lms(id): form = AddLmsForm(id is None) if form.validate_on_submit(): if id is None: new_lms = LMS(name=form.name.data, url=form.url.data, lms_login=form.lms_login.data, lms_password=hash_password(form.lms_password.data), labmanager_login=form.labmanager_login.data, labmanager_password=form.labmanager_password.data) db_session.add(new_lms) else: lms = db_session.query(LMS).filter_by(id=id).first() if lms is None: return render_template("labmanager_admin/lms_errors.html") lms.url = form.url.data lms.name = form.name.data lms.lms_login = form.lms_login.data lms.labmanager_login = form.labmanager_login.data if form.lms_password.data: lms.lms_password = hash_password(form.lms_password.data) if form.labmanager_password.data: lms.labmanager_password = form.labmanager_password.data db_session.commit() return redirect( url_for('admin_lms_edit', lms_login=form.lms_login.data)) if id is not None: lms = db_session.query(LMS).filter_by(id=id).first() if lms is None: return render_template("labmanager_admin/lms_errors.html") name = lms.name form.url.data = lms.url form.name.data = lms.name form.lms_login.data = lms.lms_login form.labmanager_login.data = lms.labmanager_login courses = retrieve_courses(lms.url, lms.labmanager_login, lms.labmanager_password) if isinstance(courses, basestring): # There was an error, show it flash(courses) else: name = None return render_template("labmanager_admin/lms_add.html", form=form, name=name)
def lms_admin_courses_permissions_edit(course_id, permission_on_lab_id): db_lms = db_session.query(LMS).filter_by(lms_login=session['lms']).first() course = db_session.query(Course).filter_by(id=course_id, lms=db_lms).first() permission_on_lab = db_session.query(PermissionOnLaboratory).filter_by( id=permission_on_lab_id, lms=db_lms).first() if course is None or permission_on_lab is None: return render_template("lms_admin/course_errors.html") lab = permission_on_lab.laboratory db_rlms = lab.rlms db_rlms_version = db_rlms.rlms_version db_rlms_type = db_rlms_version.rlms_type rlmstype = db_rlms_type.name rlmsversion = db_rlms_version.version permission = db_session.query(PermissionOnCourse).filter_by( permission_on_lab=permission_on_lab, course=course).first() PermissionsForm = get_permissions_form_class(rlmstype, rlmsversion) form = PermissionsForm() if form.validate_on_submit(): configuration_dict = {} for field in form.get_field_names(): data = getattr(form, field).data if data != '': configuration_dict[field] = data configuration = json.dumps(configuration_dict) if permission is None: # Not yet granted: add it permission = PermissionOnCourse( permission_on_lab=permission_on_lab, course=course, configuration=configuration) db_session.add(permission) else: # Already granted: edit it permission.configuration = configuration db_session.commit() return redirect( url_for('lms_admin_courses_permissions', course_id=course_id)) if permission is not None: configuration_dict = json.loads(permission.configuration or '{}') for field in configuration_dict: if hasattr(form, field): getattr(form, field).data = configuration_dict.get(field, '') return render_template("lms_admin/courses_permissions_add.html", course=course, form=form, lab=lab)
def _add_or_edit_rlms(rlmstype, rlmsversion, id): if not is_supported(rlmstype, rlmsversion): return "Not supported" rlms_version = _get_rlms_version(rlmstype, rlmsversion) if rlms_version is None: return render_template("labmanager_admin/rlms_errors.html") if id is not None: rlms = db_session.query(RLMS).filter_by(id = id).first() if rlms is None or rlms.rlms_version != rlms_version: return render_template("labmanager_admin/rlms_errors.html") AddForm = get_form_class(rlmstype, rlmsversion) form = AddForm(id is None) if form.validate_on_submit(): configuration_dict = {} for field in form.get_field_names(): if field not in ('location', 'name'): configuration_dict[field] = getattr(form, field).data configuration = json.dumps(configuration_dict) if id is None: new_rlms = RLMS(name = form.name.data, location = form.location.data, rlms_version = rlms_version, configuration = configuration) db_session.add(new_rlms) else: rlms = db_session.query(RLMS).filter_by(id = id).first() if rlms is None: return render_template("labmanager_admin/rlms_errors.html") rlms.name = form.name.data rlms.location = form.location.data rlms.configuration = AddForm.process_configuration(rlms.configuration, configuration) db_session.commit() return redirect(url_for('admin_rlms_rlms', rlmstype = rlmstype, rlmsversion = rlmsversion)) if id is not None: rlms = db_session.query(RLMS).filter_by(id = id).first() if rlms is None: return render_template("labmanager_admin/rlms_errors.html") form.name.data = rlms.name form.location.data = rlms.location if rlms.configuration is not None and rlms.configuration != '': configuration = json.loads(rlms.configuration) for key in configuration: getattr(form, key).data = configuration[key] return render_template("labmanager_admin/rlms_rlms_add.html", rlmss = rlms_version.rlms, name = rlms_version.rlms_type.name, version = rlms_version.version, form = form)
def _add_or_edit_lms(id): form = AddLmsForm(id is None) if form.validate_on_submit(): if id is None: new_lms = LMS(name = form.name.data, url = form.url.data, lms_login = form.lms_login.data, lms_password = hash_password(form.lms_password.data), labmanager_login = form.labmanager_login.data, labmanager_password = form.labmanager_password.data) db_session.add(new_lms) else: lms = db_session.query(LMS).filter_by(id = id).first() if lms is None: return render_template("labmanager_admin/lms_errors.html") lms.url = form.url.data lms.name = form.name.data lms.lms_login = form.lms_login.data lms.labmanager_login = form.labmanager_login.data if form.lms_password.data: lms.lms_password = hash_password(form.lms_password.data) if form.labmanager_password.data: lms.labmanager_password = form.labmanager_password.data db_session.commit() return redirect(url_for('admin_lms_edit', lms_login = form.lms_login.data)) if id is not None: lms = db_session.query(LMS).filter_by(id = id).first() if lms is None: return render_template("labmanager_admin/lms_errors.html") name = lms.name form.url.data = lms.url form.name.data = lms.name form.lms_login.data = lms.lms_login form.labmanager_login.data = lms.labmanager_login courses = retrieve_courses(lms.url, lms.labmanager_login, lms.labmanager_password) if isinstance(courses, basestring): # There was an error, show it flash(courses) else: name = None return render_template("labmanager_admin/lms_add.html", form = form, name = name)
def admin_rlms(): types = db_session.query(RLMSType).all() retrieved_types = set( (retrieved_type.name for retrieved_type in types) ) if request.method == 'POST' and request.form.get('action','').lower().startswith('add'): for supported_type in get_supported_types(): if supported_type not in retrieved_types: new_type = RLMSType(supported_type) db_session.add(new_type) db_session.commit() types = db_session.query(RLMSType).all() retrieved_types = set( (retrieved_type.name for retrieved_type in types) ) any_supported_missing = any([ supported_type not in retrieved_types for supported_type in get_supported_types()]) return render_template("labmanager_admin/rlms_types.html", types = types, supported = get_supported_types(), any_supported_missing = any_supported_missing)
def lms_admin_courses_permissions_edit(course_id, permission_on_lab_id): db_lms = db_session.query(LMS).filter_by(lms_login = session['lms']).first() course = db_session.query(Course).filter_by(id = course_id, lms = db_lms).first() permission_on_lab = db_session.query(PermissionOnLaboratory).filter_by(id = permission_on_lab_id, lms = db_lms).first() if course is None or permission_on_lab is None: return render_template("lms_admin/course_errors.html") lab = permission_on_lab.laboratory db_rlms = lab.rlms db_rlms_version = db_rlms.rlms_version db_rlms_type = db_rlms_version.rlms_type rlmstype = db_rlms_type.name rlmsversion = db_rlms_version.version permission = db_session.query(PermissionOnCourse).filter_by(permission_on_lab = permission_on_lab, course = course).first() PermissionsForm = get_permissions_form_class(rlmstype, rlmsversion) form = PermissionsForm() if form.validate_on_submit(): configuration_dict = {} for field in form.get_field_names(): data = getattr(form, field).data if data != '': configuration_dict[field] = data configuration = json.dumps(configuration_dict) if permission is None: # Not yet granted: add it permission = PermissionOnCourse(permission_on_lab = permission_on_lab, course = course, configuration = configuration) db_session.add(permission) else: # Already granted: edit it permission.configuration = configuration db_session.commit() return redirect(url_for('lms_admin_courses_permissions', course_id = course_id)) if permission is not None: configuration_dict = json.loads(permission.configuration or '{}') for field in configuration_dict: if hasattr(form, field): getattr(form, field).data = configuration_dict.get(field,'') return render_template("lms_admin/courses_permissions_add.html", course = course, form = form, lab = lab)
def _add_or_edit_user(id): form = AddUserForm(id is None) if form.validate_on_submit(): if id is None: new_user = LabManagerUser(login=form.login.data, name=form.name.data, password=hash_password( form.password.data)) db_session.add(new_user) else: user = db_session.query(LabManagerUser).filter_by(id=id).first() if user is None: return render_template("labmanager_admin/user_errors.html") if user.login == session.get('login'): session['login'] = form.login.data session['user_name'] = form.name.data user.name = form.name.data user.login = form.login.data if form.password.data: user.password = hash_password(form.password.data) db_session.commit() return redirect(url_for('admin_users')) if id is not None: user = db_session.query(LabManagerUser).filter_by(id=id).first() if user is None: return render_template("labmanager_admin/user_errors.html") name = user.name form.name.data = user.name form.login.data = user.login else: name = None return render_template("labmanager_admin/user_add.html", form=form, name=name)
def admin_rlms_rlms_list_external(rlmstype, rlmsversion, id): rlms = db_session.query(RLMS).filter_by(id=id).first() if rlms is None or rlms.rlms_version.version != rlmsversion or rlms.rlms_version.rlms_type.name != rlmstype: return render_template("labmanager_admin/rlms_errors.html") existing_laboratory_ids = [ laboratory.laboratory_id for laboratory in rlms.laboratories ] ManagerClass = get_manager_class(rlmstype, rlmsversion) manager_class = ManagerClass(rlms.configuration) try: available_laboratories = manager_class.get_laboratories() except: traceback.print_exc() flash("There was an error retrieving laboratories. Check the trace") return render_template("labmanager_admin/rlms_errors.html") available_laboratory_ids = [ lab.laboratory_id for lab in available_laboratories ] if request.method == 'POST': if request.form.get('action', '') == 'add': for laboratory_id in request.form: if laboratory_id != 'action' and laboratory_id in available_laboratory_ids and laboratory_id not in existing_laboratory_ids: new_lab = Laboratory(laboratory_id, laboratory_id, rlms) db_session.add(new_lab) db_session.commit() return redirect( url_for('admin_rlms_rlms_list', rlmstype=rlmstype, rlmsversion=rlmsversion, id=id)) return render_template("labmanager_admin/rlms_rlms_list_external.html", available_laboratories=available_laboratories, type_name=rlmstype, version=rlmsversion, rlms_name=rlms.name, existing_laboratory_ids=existing_laboratory_ids)
def admin_rlms_versions(rlmstype): rlms_type = db_session.query(RLMSType).filter_by(name = rlmstype).first() if rlms_type is not None: versions = rlms_type.versions retrieved_versions = set( (retrieved_version.version for retrieved_version in versions) ) if request.method == 'POST' and request.form.get('action','').lower().startswith('add'): for supported_version in get_supported_versions(rlmstype): if supported_version not in retrieved_versions: new_version = RLMSTypeVersion(rlms_type, supported_version) db_session.add(new_version) db_session.commit() versions = rlms_type.versions retrieved_versions = set( (retrieved_version.version for retrieved_version in versions) ) any_supported_missing = any([ supported_version not in retrieved_versions for supported_version in get_supported_versions(rlmstype)]) return render_template("labmanager_admin/rlms_versions.html", versions = versions, name = rlms_type.name, supported = get_supported_versions(rlmstype), any_supported_missing = any_supported_missing ) return render_template("labmanager_admin/rlms_errors.html")
def _add_or_edit_user(id): form = AddUserForm(id is None) if form.validate_on_submit(): if id is None: new_user = LabManagerUser(login = form.login.data, name = form.name.data, password = hash_password(form.password.data)) db_session.add(new_user) else: user = db_session.query(LabManagerUser).filter_by(id = id).first() if user is None: return render_template("labmanager_admin/user_errors.html") if user.login == session.get('login'): session['login'] = form.login.data session['user_name'] = form.name.data user.name = form.name.data user.login = form.login.data if form.password.data: user.password = hash_password(form.password.data) db_session.commit() return redirect(url_for('admin_users')) if id is not None: user = db_session.query(LabManagerUser).filter_by(id = id).first() if user is None: return render_template("labmanager_admin/user_errors.html") name = user.name form.name.data = user.name form.login.data = user.login else: name = None return render_template("labmanager_admin/user_add.html", form = form, name = name)
def admin_rlms(): types = db_session.query(RLMSType).all() retrieved_types = set((retrieved_type.name for retrieved_type in types)) if request.method == 'POST' and request.form.get( 'action', '').lower().startswith('add'): for supported_type in get_supported_types(): if supported_type not in retrieved_types: new_type = RLMSType(supported_type) db_session.add(new_type) db_session.commit() types = db_session.query(RLMSType).all() retrieved_types = set( (retrieved_type.name for retrieved_type in types)) any_supported_missing = any([ supported_type not in retrieved_types for supported_type in get_supported_types() ]) return render_template("labmanager_admin/rlms_types.html", types=types, supported=get_supported_types(), any_supported_missing=any_supported_missing)
def admin_rlms_rlms_lab_edit_permissions_lms(rlmstype, rlmsversion, id, lab_id, lms_login): template_variables = {} lab, rlms = get_lab_and_lms(rlmstype, rlmsversion, id, lab_id) if lab is None or rlms is None: return render_template("labmanager_admin/rlms_errors.html") lms = db_session.query(LMS).filter_by(lms_login=lms_login).first() if lms is None: return render_template("labmanager_admin/rlms_errors.html") permission = db_session.query(PermissionOnLaboratory).filter_by( laboratory_id=lab_id, lms_id=lms.id).first() LmsPermissionsForm = get_lms_permissions_form_class(rlmstype, rlmsversion) form = LmsPermissionsForm() if form.validate_on_submit(): configuration_dict = {} for field in form.get_field_names(): if field != 'identifier': data = getattr(form, field).data if data != '': configuration_dict[field] = data identifier = form.identifier.data configuration = json.dumps(configuration_dict) permission_with_same_identifier = db_session.query( PermissionOnLaboratory).filter_by( lms_id=lms.id, local_identifier=identifier).first() if permission_with_same_identifier is not None and permission_with_same_identifier != permission: flash( "Could not grant permission. The identifier %s was already used in the LMS %s for the laboratory %s. Choose other identifier." % (identifier, lms.name, permission_with_same_identifier.laboratory.name)) return render_template("labmanager_admin/rlms_errors.html") if permission is None: # Not yet granted: add it permission = PermissionOnLaboratory(lms=lms, laboratory=lab, configuration=configuration, local_identifier=identifier) db_session.add(permission) else: # Already granted: edit it permission.local_identifier = identifier permission.configuration = configuration db_session.commit() return redirect( url_for('admin_rlms_rlms_lab_edit_permissions', rlmstype=rlmstype, rlmsversion=rlmsversion, id=id, lab_id=lab_id)) if permission is not None: configuration_dict = json.loads(permission.configuration or '{}') for field in configuration_dict: if hasattr(form, field): getattr(form, field).data = configuration_dict.get(field, '') form.identifier.data = permission.local_identifier template_variables['type_name'] = rlmstype template_variables['version'] = rlmsversion template_variables['rlms_name'] = rlms.name template_variables['rlms_id'] = id template_variables['lab_name'] = lab.name template_variables['lab_id'] = lab_id template_variables['lms_name'] = lms.name template_variables['add_or_edit'] = permission is None template_variables['form'] = form return render_template( "labmanager_admin/rlms_rlms_lab_edit_permissions_add.html", **template_variables)
def admin_rlms_rlms_lab_edit_permissions_lms(rlmstype, rlmsversion, id, lab_id, lms_login): template_variables = {} lab, rlms = get_lab_and_lms(rlmstype, rlmsversion, id, lab_id) if lab is None or rlms is None: return render_template("labmanager_admin/rlms_errors.html") lms = db_session.query(LMS).filter_by(lms_login = lms_login).first() if lms is None: return render_template("labmanager_admin/rlms_errors.html") permission = db_session.query(PermissionOnLaboratory).filter_by(laboratory_id = lab_id, lms_id = lms.id).first() LmsPermissionsForm = get_lms_permissions_form_class(rlmstype, rlmsversion) form = LmsPermissionsForm() if form.validate_on_submit(): configuration_dict = {} for field in form.get_field_names(): if field != 'identifier': data = getattr(form, field).data if data != '': configuration_dict[field] = data identifier = form.identifier.data configuration = json.dumps(configuration_dict) permission_with_same_identifier = db_session.query(PermissionOnLaboratory).filter_by(lms_id = lms.id, local_identifier = identifier).first() if permission_with_same_identifier is not None and permission_with_same_identifier != permission: flash("Could not grant permission. The identifier %s was already used in the LMS %s for the laboratory %s. Choose other identifier." % (identifier, lms.name, permission_with_same_identifier.laboratory.name)) return render_template("labmanager_admin/rlms_errors.html") if permission is None: # Not yet granted: add it permission = PermissionOnLaboratory(lms = lms, laboratory = lab, configuration = configuration, local_identifier = identifier) db_session.add(permission) else: # Already granted: edit it permission.local_identifier = identifier permission.configuration = configuration db_session.commit() return redirect(url_for('admin_rlms_rlms_lab_edit_permissions', rlmstype = rlmstype, rlmsversion = rlmsversion, id = id, lab_id = lab_id)) if permission is not None: configuration_dict = json.loads(permission.configuration or '{}') for field in configuration_dict: if hasattr(form, field): getattr(form, field).data = configuration_dict.get(field,'') form.identifier.data = permission.local_identifier template_variables['type_name'] = rlmstype template_variables['version'] = rlmsversion template_variables['rlms_name'] = rlms.name template_variables['rlms_id'] = id template_variables['lab_name'] = lab.name template_variables['lab_id'] = lab_id template_variables['lms_name'] = lms.name template_variables['add_or_edit'] = permission is None template_variables['form'] = form return render_template("labmanager_admin/rlms_rlms_lab_edit_permissions_add.html", **template_variables)
def lms_admin_external_courses(): q = request.args.get('q', '') try: start = int(request.args.get('start', '0')) except: start = 0 db_lms = db_session.query(LMS).filter_by(lms_login=session['lms']).first() user = db_lms.labmanager_login password = db_lms.labmanager_password url = "%s?q=%s&start=%s" % (db_lms.url, q, start) VISIBLE_PAGES = 10 results = retrieve_courses(url, user, password) if isinstance(results, basestring): return "Invalid JSON provided or could not connect to the LMS. Look at the logs for more information" try: courses_data = results['courses'] courses = [(course['id'], course['name']) for course in courses_data] course_dict = dict(courses) number = int(results['number']) per_page = int(results['per-page']) number_of_pages = ((number - 1) / per_page) + 1 current_page = ((start - 1) / per_page) + 1 THEORICAL_BEFORE_PAGES = VISIBLE_PAGES / 2 if current_page < THEORICAL_BEFORE_PAGES: BEFORE_PAGES = current_page AFTER_PAGES = VISIBLE_PAGES - current_page else: BEFORE_PAGES = THEORICAL_BEFORE_PAGES AFTER_PAGES = BEFORE_PAGES min_page = (start / VISIBLE_PAGES - BEFORE_PAGES) max_page = (start / VISIBLE_PAGES + AFTER_PAGES) if max_page >= number_of_pages: max_page = number_of_pages if min_page <= -1: min_page = 0 current_pages = range(min_page, max_page) except: traceback.print_exc() return "Malformed data retrieved. Look at the logs for more information" existing_courses = db_session.query(Course).filter( Course.course_id.in_(course_dict.keys()), Course.lms == db_lms).all() existing_course_ids = [ existing_course.course_id for existing_course in existing_courses ] if request.method == 'POST': for course_id in request.form: if course_id != 'action' and course_id in course_dict and course_id not in existing_course_ids: db_course = Course(db_lms, course_id, course_dict[course_id]) db_session.add(db_course) db_session.commit() return redirect(url_for('lms_admin_courses')) return render_template("lms_admin/courses_external.html", courses=courses, existing_course_ids=existing_course_ids, q=q, current_page=current_page, number=number, current_pages=current_pages, per_page=per_page, start=start)
def _add_or_edit_rlms(rlmstype, rlmsversion, id): if not is_supported(rlmstype, rlmsversion): return "Not supported" rlms_version = _get_rlms_version(rlmstype, rlmsversion) if rlms_version is None: return render_template("labmanager_admin/rlms_errors.html") if id is not None: rlms = db_session.query(RLMS).filter_by(id=id).first() if rlms is None or rlms.rlms_version != rlms_version: return render_template("labmanager_admin/rlms_errors.html") AddForm = get_form_class(rlmstype, rlmsversion) form = AddForm(id is None) if form.validate_on_submit(): configuration_dict = {} for field in form.get_field_names(): if field not in ('location', 'name'): configuration_dict[field] = getattr(form, field).data configuration = json.dumps(configuration_dict) if id is None: new_rlms = RLMS(name=form.name.data, location=form.location.data, rlms_version=rlms_version, configuration=configuration) db_session.add(new_rlms) else: rlms = db_session.query(RLMS).filter_by(id=id).first() if rlms is None: return render_template("labmanager_admin/rlms_errors.html") rlms.name = form.name.data rlms.location = form.location.data rlms.configuration = AddForm.process_configuration( rlms.configuration, configuration) db_session.commit() return redirect( url_for('admin_rlms_rlms', rlmstype=rlmstype, rlmsversion=rlmsversion)) if id is not None: rlms = db_session.query(RLMS).filter_by(id=id).first() if rlms is None: return render_template("labmanager_admin/rlms_errors.html") form.name.data = rlms.name form.location.data = rlms.location if rlms.configuration is not None and rlms.configuration != '': configuration = json.loads(rlms.configuration) for key in configuration: getattr(form, key).data = configuration[key] return render_template("labmanager_admin/rlms_rlms_add.html", rlmss=rlms_version.rlms, name=rlms_version.rlms_type.name, version=rlms_version.version, form=form)