Esempio n. 1
0
def cmp_page(env, headers, cmp_id):
    cookies = _get_cookies(env)
    user_id = auth.is_logined(cookies)
    if user_id is not None:
        sql_str = 'id={}'
        sql_str = sql_str.format(cmp_id)
        rows = db.select('CMPS', sql_str)
        if rows and len(rows):
            row = rows[0]
            if common.is_user_solve_cmp(cmp_id, user_id):
                headers.append(('Location', '/quiz/{}/results'.format(cmp_id)))
            else:
                username = db.username_by_id(user_id)
                sql_str = 'cmp_id={}'
                sql_str = sql_str.format(cmp_id)
                questions = [(r[0], r[1]) for r in db.select('QUESTIONS', sql_str)]
                return ui.solve_page({
                    'cmp_id': row[0],
                    'title': row[1],
                    'description': row[2],
                    'user_name': username,
                    'questions': questions})
        else:
            err_msg = "User ID {} tried to solve non-existing cmp {}"
            err_msg = err_msg.format(str(user_id), str(cmp_id))
            common.dbg_log(err_msg)
            return (ui.error_page({'error_msg': '404: Competition not found'}), '404 Not Found')
    else:
        headers.append(('Location', '/'))
    return ''
Esempio n. 2
0
def cmp_results(env, headers, cmp_id):
    cookies = _get_cookies(env)
    user_id = auth.is_logined(cookies)
    logineduid = user_id
    if user_id is not None:
        cond_f = 'id={}'
        cond = cond_f.format(cmp_id)
        rows = db.select('CMPS', cond)
        if rows:
            row = rows[0]
            qs = _get_query_data(env)
            is_cmp_author = False
            if 'uid' in qs:
                uid = int(qs['uid'][0])
                if (uid != user_id) and (row[3] == user_id):
                    user_id = uid
                    is_cmp_author = True
            if common.is_user_solve_cmp(cmp_id, user_id):
                username = db.username_by_id(logineduid)
                cond_f = 'cmp_id={}'
                cond = cond_f.format(cmp_id)
                tasks = db.select('questions', cond)
                answers = common.user_answers_for_cmp(cmp_id, user_id)
                restuple = solver.is_cmp_right(cmp_id, answers)
                results = [
                    (task[0], task[1], ans[0], ans[3], res)
                    for task, ans, res in zip(tasks, answers, restuple)]
                return ui.results_page({
                    'cmp_id': row[0],
                    'title': row[1],
                    'description': row[2],
                    'user_name': username,
                    'results': results,
                    'is_cmp_author': is_cmp_author})
            else:
                headers.append(('Location', '/quiz/{}'.format(cmp_id)))
                err_msg = "User ID {} tried to see result for non-solved cmp {}"
                err_msg = err_msg.format(str(user_id), str(cmp_id))
                common.dbg_log(err_msg)
        else:
            err_msg = "User ID {} tried to view result for non-existing cmp {}"
            err_msg = err_msg.format(str(user_id), str(cmp_id))
            common.dbg_log(err_msg)
            return (ui.error_page({'error_msg': '404: Competition not found'}), '404 Not Found')
    else:
        headers.append(('Location', '/'))
    return ''