def mx_admin_add_answer(): postfail = False frm = MxForm() rqm = mx_request_method() sid = mx_get_cookie('session_id') n_answers = int(model.q_s_session_value(sid, 'n_answers')[3]) question_id = int(model.q_s_session_value(sid, 'question_id')[3]) quiz_id = int(model.q_s_session_value(sid, 'quiz_id')[3]) edit = int(model.q_s_session_value(sid, 'quiz_edit')[3]) == 1 q_n = int(model.q_s_session_value(sid, 'q_n')[3]) q_text = model.q_s_session_value(sid, 'q_text')[3] q_answers = [] if edit: q_answers = model.q_s_answers_for_question(question_id) if rqm == 'POST': def proc(t_i, c_i): t_s = 'text-%s' % str(t_i) c_s = 'correct-%s' % str(c_i) frm.add_field(t_s, 'Answer is required',\ lambda x: x != None and len(x) < 1024) frm.add_field(c_s, 'Correct is required',\ lambda x: x != None and x.isdigit() and int(x) < 2, int) return (frm.get(t_s), frm.get(c_s)) st = range(1, n_answers + 1) fs = map(proc, st, st) if frm.is_valid(): for tfs, cfs in fs: model.q_i_answer(question_id, tfs, cfs == 1) q_n = int(model.q_s_session_value(sid, 'q_n')[3]) quiz_id = int(model.q_s_session_value(sid, 'quiz_id')[3]) quiz_ln = model.q_s_quiz(quiz_id)[2] model.q_d_session_value(sid, 'q_text') model.q_d_session_value(sid, 'question_id') model.q_d_session_value(sid, 'n_answers') if (q_n + 1) > quiz_ln: mx_redirect('/admin/add_quiz_summary') else: model.q_u_session_value(sid, 'q_n', q_n + 1) mx_redirect('/admin/add_question') else: postfail = True if postfail or rqm == 'GET': quiz_name = model.q_s_quiz(quiz_id)[1] return mx_template('admin_add_quiz_C.tpl',\ quiz_name = quiz_name, n_answers=n_answers,\ q_answers=q_answers, q_n=q_n,\ q_text=q_text, errors=frm.errors,\ edit=edit, values=frm.values)
def mx_quiz_mark(quiz_id, n=None): p_sid = mx_get_cookie('player_session_id') frm = MxForm() frm.add_field('select_answer', 'Select answer required',\ lambda x: x != None and x.isdigit(), int) postfail = False rqm = mx_request_method() if rqm == 'POST': correct = 0; value = 0; answer_id = 0; question_id = 0; i_r = False a = frm.get('select_answer') if frm.is_valid(): rqu = model.q_s_quiz(quiz_id) quiz_length = rqu[2] ra = model.q_s_answer(a) rq = model.q_s_quiz_question(quiz_id, n) answer_id = ra[0] question_id = rq[0] correct = ra[3] value = rq[3] aa = model.q_s_already_answered(p_sid, quiz_id, answer_id) if aa == []: model.q_i_result(quiz_id, question_id,\ answer_id, p_sid, correct, value) if (n + 1) <= quiz_length: mx_redirect('/quiz/%d/%d' % (quiz_id, n + 1)) else: mx_redirect('/quiz/%d/end' % (quiz_id)) else: postfail = True if postfail or rqm == 'GET': r = model.q_s_quiz(quiz_id) if n == None or p_sid == None: sid = mx_make_session_id() model.q_i_session(sid) mx_set_cookie('player_session_id', sid, max_age=3600) return mx_template('quiz_start.tpl', name=r[1], quiz_id=r[0],\ errors=frm.errors) else: rqq = model.q_s_quiz_question(quiz_id, n) question = {'id':rqq[0], 'content':rqq[1], 'position':rqq[2], 'value':rqq[3], 'image':rqq[4]} ras = model.q_s_answers_for_question(question['id']) return mx_template('quiz_play.tpl',\ question=question,\ answers=ras, quiz_id=quiz_id,\ errors=frm.errors)
def mx_admin_add_quiz(quiz_id=None): edit = False; name = ''; length = '' frm = MxForm() rqm = mx_request_method() postfail = False frm.add_field('name', 'Name is required',\ lambda x: x != None and len(x) < 255) frm.add_field('length', 'Length is required',\ lambda x: x != None and x.isdigit() and int(x) < 100, int) if quiz_id != None: quiz_id, name, length = model.q_s_quiz(quiz_id) edit = True if rqm == 'POST': name = frm.get('name') length = frm.get('length') if frm.is_valid(): sid = mx_get_cookie('session_id') model.q_i_session_value(sid, 'quiz_id', quiz_id) model.q_i_session_value(sid, 'q_n', 1) if edit: model.q_u_quiz(quiz_id, name, length) model.q_i_session_value(sid, 'quiz_edit', 1) mx_redirect('/admin/edit_question') else: quiz_id = model.q_i_quiz(name, length) model.q_i_session_value(sid, 'quiz_edit', 0) mx_redirect('/admin/add_question') else: postfail = True if postfail or rqm == 'GET': return mx_template('admin_add_quiz_A.tpl', errors=frm.errors, name = name, length = length, quiz_id = quiz_id)
def mx_admin_add_question(): sid = mx_get_cookie('session_id') q_n = model.q_s_session_value(sid, 'q_n')[3] quiz_id = model.q_s_session_value(sid, 'quiz_id')[3] edit = int(model.q_s_session_value(sid, 'quiz_edit')[3]) == 1 postfail = False q_text = ''; n_answers = ''; q_value = '' question_id = 0 frm = MxForm() frm.add_field('text', 'Question is required',\ lambda x: x != None and len(x) < 1024) frm.add_field('n_answers', 'Number of answers is required',\ lambda x: x != None and int(x) < 256, int) frm.add_field('value', 'Value is required',\ lambda x: x != None and int(x) < 100, int) if edit: q_id, q_text, n_answers, q_value, q_image, qq_quiz_id\ = model.q_s_quiz_question(quiz_id, q_n) rqm = mx_request_method() if rqm == 'POST': q_text = frm.get('text') n_answers = frm.get('n_answers') q_value = frm.get('value') if frm.is_valid(): model.q_i_session_value(sid, 'n_answers', n_answers) model.q_i_session_value(sid, 'q_text', q_text) if edit: model.q_u_question(\ question_id, q_text, q_n, q_value, None) model.q_i_session_value(sid, 'question_id',\ question_id) mx_redirect('/admin/edit_answer') else: question_id = model.q_i_question(\ quiz_id, q_text, q_n, q_value, None) model.q_i_session_value(sid, 'question_id',\ question_id) mx_redirect('/admin/add_answer') else: postfail = True if postfail or rqm == 'GET': quiz_name = model.q_s_quiz(quiz_id)[1] return mx_template('admin_add_quiz_B.tpl',\ quiz_name=quiz_name, q_n=q_n,\ errors=frm.errors,\ q_text=q_text,\ n_answers=n_answers,\ q_value=q_value, edit=edit)