def contest_add_source(request):
    try:
        check_capability(request, 'admin')
        statement_id = request.matchdict['contest_id']
        source_id = request.matchdict['source_id']
        statement_problems = db_session.query(StatementProblem).filter(
                StatementProblem.statement_id == statement_id).order_by(StatementProblem.rank).all()
        for i in range(len(statement_problems)):
            letter = ''
            cur = i + 1
            while cur:
                cur -= 1
                letter = chr(ord('A') + cur % 26) + letter
                cur //= 26

            source_add_by_dict({
                'name': 'Задача ' + letter,
                'parent_id': source_id,
                'order': (i + 1) * 10**7,
                'author': RequestGetUserId(request),
                'verified': True,
                'problem_id': statement_problems[i].problem_id
            })
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
def problem_add_source(request):
    try:
        check_capability(request, 'user')
        problem_id = request.matchdict['problem_id']
        subject_id = request.matchdict['subject_id']
        problem = problem_get_by_id(problem_id)
        subject = source_get_by_id(subject_id)
        if subject.get_type() != '_subject':
            check_capability(request, 'admin')
        cur_subject = db_session.query(Source).filter(Source.parent_id == subject_id, Source.problem_id == problem_id).all()
        if cur_subject:
            raise Exception('Already exists')
        verified = check_capability_ex(request, 'edit')
        add_dict = {
            'name': problem.name,
            'parent_id': subject_id,
            'order': 0,
            'problem_id': problem_id,
            'author': RequestGetUserId(request),
            'verified': verified
        }
        source_add_by_dict(add_dict)
        db_session.commit()
        return {'result': 'ok', 'verified': verified}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
Exemple #3
0
def contest_add_source(request):
    try:
        check_capability(request, 'admin')
        statement_id = request.matchdict['contest_id']
        source_id = request.matchdict['source_id']
        statement_problems = db_session.query(StatementProblem).filter(
            StatementProblem.statement_id == statement_id).order_by(
                StatementProblem.rank).all()
        for i in range(len(statement_problems)):
            letter = ''
            cur = i + 1
            while cur:
                cur -= 1
                letter = chr(ord('A') + cur % 26) + letter
                cur //= 26

            source_add_by_dict({
                'name': 'Задача ' + letter,
                'parent_id': source_id,
                'order': (i + 1) * 10**7,
                'author': RequestGetUserId(request),
                'verified': True,
                'problem_id': statement_problems[i].problem_id
            })
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
def problem_add_source(request):
    try:
        check_capability(request, 'user')
        problem_id = request.matchdict['problem_id']
        subject_id = request.matchdict['subject_id']
        problem = problem_get_by_id(problem_id)
        subject = source_get_by_id(subject_id)
        if subject.get_type() != '_subject':
            check_capability(request, 'admin')
        cur_subject = db_session.query(Source).filter(
            Source.parent_id == subject_id,
            Source.problem_id == problem_id).all()
        if cur_subject:
            raise Exception('Already exists')
        verified = check_capability_ex(request, 'edit')
        add_dict = {
            'name': problem.name,
            'parent_id': subject_id,
            'order': 0,
            'problem_id': problem_id,
            'author': RequestGetUserId(request),
            'verified': verified
        }
        source_add_by_dict(add_dict)
        db_session.commit()
        return {'result': 'ok', 'verified': verified}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
def source_verify(request):
    try:
        check_capability(request, 'edit')
        source = source_get_by_id(request.matchdict['source_id'])
        source.verified = True
        db_session.commit()
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
def source_verify(request):
    try:
        check_capability(request, 'edit')
        source = source_get_by_id(request.matchdict['source_id'])
        source.verified = True
        db_session.commit()
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
Exemple #7
0
def course_add(request):
    try:
        add_dict = dict(request.params)
        names = request.params['name'].split('\n')
        order = request.params['order']
        parent_id = int(request.params['parent_id'])
        user_id = int(RequestGetUserId(request))
        if order == 'end':
            parent = db_session.query(Course).filter(
                Course.id == request.params['parent_id']).one()
            max_order = max(course.order for course in parent.children) \
                if list(parent.children) else 0
            order = "{0}:{1}".format(max_order, max_order + 10**7)
        order, order_right = map(int, order.split(':'))
        order_shift = (order_right - order) / (len(names) + 1)
        ids = []
        for name in names:
            vals = name.split("+++")
            title, course_id = name, 0
            if len(vals) == 2:
                title, course_id = vals
            similar = db_session.query(Course).filter(
                Course.parent_id == request.params['parent_id'],
                Course.course_id == course_id,
            ).all()
            verified = check_capability_ex_course(request, 'admin') \
                    or bool(course_tree_check_owner(parent_id, user_id))
            if course_id:
                if similar:
                    continue
                if course_check_owner(int(course_id),
                                      int(RequestGetUserId(request))):
                    check_capability_course(request, 'teacher')
                else:
                    check_capability_course(request, 'admin')
            else:
                check_capability_course(request, 'teacher')

            order += order_shift
            add_dict['name'] = title
            add_dict['order'] = order
            add_dict['verified'] = verified
            add_dict['course_id'] = course_id
            add_dict['author'] = max(0, user_id)
            node_id = course_add_by_dict(add_dict)
            ids.append(node_id)
        db_session.commit()
        course_make_dump(request)
        return {
            "result": "ok",
            "content": {
                "new_id": ids,
            }
        }
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
def source_verify_cancel(request):
    try:
        check_capability(request, 'edit')
        source = source_get_by_id(request.matchdict['source_id'])
        if source.verified:
            raise Exception("Source mustn't be canceled")
        db_session.delete(source)
        db_session.commit()
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
def source_erase(request):
    try:
        check_capability(request, 'edit')
        source = source_get_by_id(request.matchdict['source_id'])
        if source.get_type() != '_subject' or not source.problem_id:
            check_capability(request, 'admin')
        db_session.delete(source)
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Exemple #10
0
def source_erase(request):
    try:
        check_capability(request, 'edit')
        source = source_get_by_id(request.matchdict['source_id'])
        if source.get_type() != '_subject' or not source.problem_id:
            check_capability(request, 'admin')
        db_session.delete(source)
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Exemple #11
0
def source_verify_cancel(request):
    try:
        check_capability(request, 'edit')
        source = source_get_by_id(request.matchdict['source_id'])
        if source.verified:
            raise Exception("Source mustn't be canceled")
        db_session.delete(source)
        db_session.commit()
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
Exemple #12
0
def course_verify_cancel(request):
    try:
        check_capability_course(request, 'admin')
        course = course_get_by_id(request.matchdict['course_id'])
        if course.verified:
            raise Exception("Source mustn't be canceled")
        db_session.delete(course)
        db_session.commit()
        course_make_dump(request)
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
def source_update(request):
    try:
        check_capability(request, 'admin')
        source = source_get_by_id(request.matchdict['source_id'])
        for field in request.params:
            if field in ['name', 'parent_id', 'order', 'problem_id', 'verified']:
                source.__setattr__(field, request.params[field])
        source.author = RequestGetUserId(request)
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
def course_verify_cancel(request):
    try:
        check_capability_course(request, 'admin')
        course = course_get_by_id(request.matchdict['course_id'])
        if course.verified:
            raise Exception("Source mustn't be canceled")
        db_session.delete(course)
        db_session.commit()
        course_make_dump(request)
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
def course_add(request):
    try:
        add_dict = dict(request.params)
        names = request.params['name'].split('\n')
        order = request.params['order']
        parent_id = int(request.params['parent_id'])
        user_id = int(RequestGetUserId(request))
        if order == 'end':
            parent = db_session.query(Course).filter(
                Course.id == request.params['parent_id']
            ).one()
            max_order = max(course.order for course in parent.children) \
                if list(parent.children) else 0
            order = "{0}:{1}".format(max_order, max_order + 10**7)
        order, order_right = map(int, order.split(':'))
        order_shift = (order_right - order) / (len(names) + 1)
        ids = []
        for name in names:
            vals = name.split("+++")
            title, course_id = name, 0
            if len(vals) == 2:
                title, course_id = vals
            similar = db_session.query(Course).filter(
                Course.parent_id == request.params['parent_id'],
                Course.course_id == course_id,
            ).all()
            verified = check_capability_ex_course(request, 'admin') \
                    or bool(course_tree_check_owner(parent_id, user_id))
            if course_id:
                if similar:
                    continue
                if course_check_owner(int(course_id), int(RequestGetUserId(request))):
                    check_capability_course(request, 'teacher')
                else:
                    check_capability_course(request, 'admin')
            else:
                check_capability_course(request, 'teacher')
            
            order += order_shift
            add_dict['name'] = title
            add_dict['order'] = order
            add_dict['verified'] = verified
            add_dict['course_id'] = course_id
            add_dict['author'] = max(0, user_id)
            node_id = course_add_by_dict(add_dict)
            ids.append(node_id)
        db_session.commit()
        course_make_dump(request)
        return {"result": "ok", "content": {
            "new_id": ids,
        }}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Exemple #16
0
def source_update(request):
    try:
        check_capability(request, 'admin')
        source = source_get_by_id(request.matchdict['source_id'])
        for field in request.params:
            if field in [
                    'name', 'parent_id', 'order', 'problem_id', 'verified'
            ]:
                source.__setattr__(field, request.params[field])
        source.author = RequestGetUserId(request)
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Exemple #17
0
def source_dir_contest_create(request):
    try:
        check_capability(request, 'manage_contest')
        basket = request.session['basket']
        for i in range(len(basket.problems)):
            db_session.add(
                StatementProblem(basket.contest_id, basket.problems[i], i + 1))
        db_session.commit()
        course_id = basket.course_id
        del request.session['basket']
        return exc.HTTPFound(location='/moodle/mod/statements/view.php?id=' +
                             str(course_id))
    except Exception as e:
        return exc.HTTPForbidden() if e.__str__(
        ) == 'Access denied' else exc.HTTPInternalServerError()
def source_erase_all(request):
    def erase_tree(source):
        if not source:
            return
        for child in source.children:
            erase_tree(child)
        db_session.delete(source)
    try:
        check_capability(request, 'admin')
        source = source_get_by_id(request.matchdict['source_id'])
        erase_tree(source)
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Exemple #19
0
def course_verify(request):
    try:
        check_capability_course(request, 'admin')
        full_access = int(request.params.get('full_access', 0))
        course = course_get_by_id(request.matchdict['course_id'])
        course.verified = True
        if full_access:
            db_session.add(CourseTreeCap(
                node_id=course.id,
                user_id=course.author,
            ))
        db_session.commit()
        course_make_dump(request)
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
def source_dir_contest_create(request):
    try:
        check_capability(request, 'manage_contest')
        basket = request.session['basket']
        for i in range(len(basket.problems)):
            db_session.add(StatementProblem(
                basket.contest_id, 
                basket.problems[i], 
                i + 1
        ))
        db_session.commit()
        course_id = basket.course_id
        del request.session['basket']
        return exc.HTTPFound(location='/moodle/mod/statements/view.php?id=' + str(course_id))
    except Exception as e:
        return exc.HTTPForbidden() if e.__str__() == 'Access denied' else exc.HTTPInternalServerError()
def course_erase(request):
    return course_erase_all(request)
    try:
        raise Exception("DEPRECATED")
        course = course_get_by_id(request.matchdict['course_id'])
        if course_check_owner(course.course_id, int(RequestGetUserId(request))) \
            or course_tree_check_owner(course.id, RequestGetUserId(request)):
            check_capability_course(request, 'teacher')
        else:
            check_capability_course(request, 'admin')
        db_session.delete(course)
        db_session.commit()
        course_make_dump(request)
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
Exemple #22
0
def source_erase_all(request):
    def erase_tree(source):
        if not source:
            return
        for child in source.children:
            erase_tree(child)
        db_session.delete(source)

    try:
        check_capability(request, 'admin')
        source = source_get_by_id(request.matchdict['source_id'])
        erase_tree(source)
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Exemple #23
0
def course_erase(request):
    return course_erase_all(request)
    try:
        raise Exception("DEPRECATED")
        course = course_get_by_id(request.matchdict['course_id'])
        if course_check_owner(course.course_id, int(RequestGetUserId(request))) \
            or course_tree_check_owner(course.id, RequestGetUserId(request)):
            check_capability_course(request, 'teacher')
        else:
            check_capability_course(request, 'admin')
        db_session.delete(course)
        db_session.commit()
        course_make_dump(request)
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
def course_erase_all(request):
    try:
        course = course_get_by_id(request.matchdict['course_id'])
        teacher = False
        teacher = teacher or (not course.verified \
                              and course.author == int(RequestGetUserId(request)))
        teacher = teacher or course_check_owner(course.course_id, 
                                                int(RequestGetUserId(request)))
        teacher = teacher or course_tree_check_owner(course.id, 
                                                     RequestGetUserId(request))
        check_capability_course(request, 'teacher' if teacher else 'admin')
        erase_tree(course)
        db_session.commit()
        course_make_dump(request)
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
Exemple #25
0
def course_erase_all(request):
    try:
        course = course_get_by_id(request.matchdict['course_id'])
        teacher = False
        teacher = teacher or (not course.verified \
                              and course.author == int(RequestGetUserId(request)))
        teacher = teacher or course_check_owner(course.course_id,
                                                int(RequestGetUserId(request)))
        teacher = teacher or course_tree_check_owner(course.id,
                                                     RequestGetUserId(request))
        check_capability_course(request, 'teacher' if teacher else 'admin')
        erase_tree(course)
        db_session.commit()
        course_make_dump(request)
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
Exemple #26
0
def course_update(request):
    try:
        course = course_get_by_id(request.matchdict['course_id'])
        if course_check_owner(course.course_id, int(RequestGetUserId(request))) \
            or course_tree_check_owner(course.id, RequestGetUserId(request)):
            check_capability_course(request, 'teacher')
        else:
            check_capability_course(request, 'admin')
        for field in ['parent_id', 'name', 'order', 'verified', 'course_id', 'displayed']:
            if field in request.params:
                course.__setattr__(field, request.params[field])
        course.author = RequestGetUserId(request)
        db_session.commit()
        course_make_dump(request)
        return {'result': 'ok'}
    except Exception as e:
        return {'result': 'error', 'content': e.__str__()}
def source_add(request):
    try:
        check_capability(request, 'admin')
        add_dict = dict(request.params)
        names = request.params['name'].split('\n')
        order, order_right = map(int, request.params['order'].split(':'))
        order_shift = (order_right - order) / (len(names) + 1)
        for name in names:
            order += order_shift
            add_dict['name'] = name
            add_dict['order'] = order
            add_dict['verified'] = True
            add_dict['author'] = RequestGetUserId(request)
            source_add_by_dict(add_dict)
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}
Exemple #28
0
def source_add(request):
    try:
        check_capability(request, 'admin')
        add_dict = dict(request.params)
        names = request.params['name'].split('\n')
        order, order_right = map(int, request.params['order'].split(':'))
        order_shift = (order_right - order) / (len(names) + 1)
        for name in names:
            order += order_shift
            add_dict['name'] = name
            add_dict['order'] = order
            add_dict['verified'] = True
            add_dict['author'] = RequestGetUserId(request)
            source_add_by_dict(add_dict)
        db_session.commit()
        return {"result": "ok"}
    except Exception as e:
        return {"result": "error", "content": e.__str__()}