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 ''
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 ''