function getTestResultSubjectsData($resultid) { global $g_db, $G_SESSION, $srv_settings; $arrResult = array(); $i_rSet1 = $g_db->Execute("SELECT questionid, result_answer_points, result_answer_iscorrect FROM " . $srv_settings['table_prefix'] . "results_answers WHERE resultid=" . $resultid); if (!$i_rSet1) { showDBError('getTestResultSubjectsData', 1); } else { while (!$i_rSet1->EOF) { $arrQuestion = getRecordItems($srv_settings['table_prefix'] . 'questions', array('subjectid', 'question_points'), 'questionid=' . $i_rSet1->fields['questionid']); if (!isset($arrResult[$arrQuestion['subjectid']])) { $arrResult[$arrQuestion['subjectid']]['got_answers'] = 0; $arrResult[$arrQuestion['subjectid']]['total_answers'] = 0; $arrResult[$arrQuestion['subjectid']]['got_points'] = 0; $arrResult[$arrQuestion['subjectid']]['total_points'] = 0; } $arrResult[$arrQuestion['subjectid']]['got_answers'] += $i_rSet1->fields['result_answer_iscorrect'] == IGT_ANSWER_IS_CORRECT ? 1 : 0; $arrResult[$arrQuestion['subjectid']]['total_answers'] += 1; $arrResult[$arrQuestion['subjectid']]['got_points'] += $i_rSet1->fields['result_answer_points']; $arrResult[$arrQuestion['subjectid']]['total_points'] += $arrQuestion['question_points']; $i_rSet1->MoveNext(); } $i_rSet1->Close(); } return $arrResult; }
function checkTestAnswer($i_questionno, $i_questionid, $i_answers) { global $g_db, $G_SESSION, $lngstr, $srv_settings; $i_rSet1 = $g_db->Execute("SELECT * FROM " . $srv_settings['table_prefix'] . "questions WHERE questionid=" . $i_questionid); if (!$i_rSet1) { showDBError('checkTestAnswer', 1); } else { if (!$i_rSet1->EOF) { $i_subjectid = $i_rSet1->fields['subjectid']; $i_questiontype = $i_rSet1->fields['question_type']; $i_question_type2 = $i_rSet1->fields['question_type2']; $i_questionpoints = $i_rSet1->fields['question_points']; } else { die(sprintf($lngstr['err_no_question_n_in_db'], $i_questionno)); } $i_rSet1->Close(); } if ($G_SESSION['yt_state'] == TEST_STATE_QREVIEW) { $arrAnswerOld = getRecordItems($srv_settings['table_prefix'] . 'results_answers', array('result_answer_points', 'result_answer_iscorrect', 'result_answer_timespent'), 'result_answerid=' . $i_questionno . ' AND resultid=' . $G_SESSION['resultid'] . ' AND questionid=' . $i_questionid); $arrAnswerOld['total_answers'] = 1; $arrAnswerOld['question_points'] = $i_questionpoints; } else { $arrAnswerOld = array('result_answer_points' => 0, 'result_answer_iscorrect' => 0, 'result_answer_timespent' => 0, 'total_answers' => 0, 'question_points' => 0); } $i_answer_correct = 0; $i_answer_points = 0; $i_answer_text = ''; switch ($i_questiontype) { case QUESTION_TYPE_ESSAY: $i_answer_text = trim($i_answers[0]); $i_answer_points = 0; $i_answer_correct = 3; if ($G_SESSION['yt_state'] != TEST_STATE_QREVIEW) { $G_SESSION['yt_points_pending'] += $i_questionpoints; } break; case QUESTION_TYPE_FILLINTHEBLANK: $i_answer_text = trim($i_answers[0]); $i_rSet2 = $g_db->Execute("SELECT answer_text, isregexp, iscasesensitive FROM " . $srv_settings['table_prefix'] . "answers WHERE questionid=" . $i_questionid . " AND answerid=1"); if (!$i_rSet2) { showDBError('checkTestAnswer', 4); } else { if (!$i_rSet2->EOF) { if ($i_rSet2->fields['answer_text'] == $i_answer_text || !$i_rSet2->fields['iscasesensitive'] && strtolower($i_rSet2->fields['answer_text']) == strtolower($i_answer_text)) { $i_answer_correct = 2; $i_answer_points = $i_questionpoints; } } else { die(sprintf($lngstr['err_no_answers_in_question'], $i_questionid)); } $i_rSet2->Close(); } break; case QUESTION_TYPE_MULTIPLECHOICE: case QUESTION_TYPE_TRUEFALSE: $i_answerno = $G_SESSION['yt_answers'][$i_questionno][(int) $i_answers - 1]; $i_answer_text = $i_answerno; $i_rSet2 = $g_db->Execute("SELECT answer_correct, answer_percents FROM " . $srv_settings['table_prefix'] . "answers WHERE questionid=" . $i_questionid . " AND answerid=" . $i_answerno); if (!$i_rSet2) { showDBError('checkTestAnswer', 2); } else { if (!$i_rSet2->EOF) { $i_answer_correct = $i_rSet2->fields['answer_correct'] > 0 ? 2 : 0; $i_answer_points = $i_rSet2->fields['answer_percents'] == 100 ? $i_questionpoints : round($i_questionpoints * $i_rSet2->fields['answer_percents'] / 100, 5); } else { die(sprintf($lngstr['err_no_answers_in_question'], $i_questionid)); } $i_rSet2->Close(); } break; case QUESTION_TYPE_MULTIPLEANSWER: $i_answer_set_count = 0; foreach ($i_answers as $val) { $i_answerno[] = $G_SESSION['yt_answers'][$i_questionno][(int) $val - 1]; $i_answer_set_count++; } sort($i_answerno, SORT_NUMERIC); $i_answer_set_correct = 0; $i_answer_set_correct_count = 0; $i_answer_set_percents = 0; $i_answer_set_incorrect = 0; $i_rSet2 = $g_db->Execute("SELECT answerid, answer_correct, answer_percents FROM " . $srv_settings['table_prefix'] . "answers WHERE questionid=" . $i_questionid); if (!$i_rSet2) { showDBError('checkTestAnswer', 3); } else { if (!$i_rSet2->EOF) { while (!$i_rSet2->EOF) { if ($i_rSet2->fields['answer_correct']) { $i_answer_set_correct_count++; } if (in_array($i_rSet2->fields['answerid'], $i_answerno)) { if ($i_rSet2->fields['answer_correct']) { $i_answer_set_correct++; } else { $i_answer_set_incorrect++; } $i_answer_set_percents += $i_rSet2->fields['answer_percents']; } $i_rSet2->MoveNext(); } } else { die(sprintf($lngstr['err_no_answers_in_question'], $i_questionid)); } $i_rSet2->Close(); } if ($i_question_type2) { if ($i_answer_set_percents >= 100) { $i_answer_correct = 2; $i_answer_points = $i_questionpoints; } else { if ($i_answer_set_percents <= 0) { $i_answer_correct = 0; $i_answer_points = 0; } else { $i_answer_correct = 1; $i_answer_points = round($i_questionpoints * $i_answer_set_percents / 100, 5); } } } else { if ($i_answer_set_correct == $i_answer_set_correct_count && !$i_answer_set_incorrect) { $i_answer_correct = 2; $i_answer_points = $i_questionpoints; } } $i_answer_text = implode(QUESTION_TYPE_MULTIPLEANSWER_BREAK, $i_answerno); break; } $i_iscorrect = $i_answer_correct == 2 ? 1 : 0; $i_iscorrect_old = $arrAnswerOld['result_answer_iscorrect'] == 2 ? 1 : 0; $G_SESSION['yt_got_answers'] += $i_iscorrect - $i_iscorrect_old; $G_SESSION['yt_got_points'] += $i_answer_points - $arrAnswerOld['result_answer_points']; if (!isset($G_SESSION['yt_subjects'][$i_subjectid])) { $G_SESSION['yt_subjects'][$i_subjectid]['got_answers'] = 0; $G_SESSION['yt_subjects'][$i_subjectid]['total_answers'] = 0; $G_SESSION['yt_subjects'][$i_subjectid]['got_points'] = 0; $G_SESSION['yt_subjects'][$i_subjectid]['total_points'] = 0; } $G_SESSION['yt_subjects'][$i_subjectid]['got_answers'] += $i_iscorrect - $i_iscorrect_old; $G_SESSION['yt_subjects'][$i_subjectid]['total_answers'] += 1 - $arrAnswerOld['total_answers']; $G_SESSION['yt_subjects'][$i_subjectid]['got_points'] += $i_answer_points - $arrAnswerOld['result_answer_points']; $G_SESSION['yt_subjects'][$i_subjectid]['total_points'] += $i_questionpoints - $arrAnswerOld['question_points']; $i_now = time(); $i_timespent = isset($G_SESSION['yt_questionstart']) && $G_SESSION['yt_questionstart'] > 0 ? $i_now - $G_SESSION['yt_questionstart'] : 0; $i_questionno_real = $G_SESSION['yt_questions'][$i_questionno - 1]; $i_timeexceeded = $G_SESSION['yt_teststop'] > 0 && $G_SESSION['yt_teststop'] < $i_now ? 1 : 0; if ($G_SESSION['yt_state'] == TEST_STATE_QREVIEW) { $qry_str = "UPDATE " . $srv_settings['table_prefix'] . "results_answers SET test_questionid=" . $i_questionno_real . ", result_answer_text=" . $g_db->qstr($i_answer_text, get_magic_quotes_gpc()) . ", result_answer_points=" . $i_answer_points . ", result_answer_iscorrect=" . $i_answer_correct . ", result_answer_timespent=" . $i_timespent . ", result_answer_timeexceeded=" . $i_timeexceeded . " WHERE result_answerid=" . $i_questionno . " AND resultid=" . $G_SESSION['resultid'] . " AND questionid=" . $i_questionid; } else { $qry_str = "INSERT INTO " . $srv_settings['table_prefix'] . "results_answers (result_answerid, resultid, questionid, test_questionid, result_answer_text, result_answer_points, result_answer_iscorrect, result_answer_feedback, result_answer_timespent, result_answer_timeexceeded) VALUES (" . $i_questionno . ", " . $G_SESSION['resultid'] . ", " . $i_questionid . ", " . $i_questionno_real . ", " . $g_db->qstr($i_answer_text, get_magic_quotes_gpc()) . ", " . $i_answer_points . ", " . $i_answer_correct . ", '', " . $i_timespent . ", " . $i_timeexceeded . ")"; } $g_db->Execute($qry_str); eventOnAfterFunction(array('function_name' => 'checkTestAnswer', 'questionno' => $i_questionno, 'questionid' => $i_questionid, 'answers' => $i_answers)); }