$log_answers[] = array('paper_type' => $type, 'id' => $id, 'answer_obj' => $answer_obj, 'mark' => strval($mark), 'user_id' => $user_id, 'distance' => $dist); } } } $result->close(); // Get any existing overrides $overrides = array(); $sql = 'SELECT log_id, new_mark_type, reason FROM marking_override WHERE q_id = ? AND paper_id = ?'; $result = $mysqli->prepare($sql); $result->bind_param('ii', $q_id, $paperID); $result->execute(); $result->bind_result($log_id, $new_mark_type, $reason); while ($result->fetch()) { $overrides[$log_id] = array('type' => $new_mark_type, 'reason' => $reason); } $question_obj = new enhancedcalc($configObject); $question_obj->set_settings($settings); $q_vars = $question_obj->get_question_vars(); $marks_arr = $question_obj->get_question_marks(); if ($marks_arr == false) { $marks_arr = array(); } $q_marks = array_flip($marks_arr); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="content-type" content="text/html;charset=<?php echo $configObject->get('cfg_page_charset'); ?>
$user_id = check_var('user_id', 'POST', true, false, true); $q_id = check_var('q_id', 'POST', true, false, true); $paper_id = check_var('paper_id', 'POST', true, false, true); $marker_id = check_var('marker_id', 'POST', true, false, true); $mark_type = check_var('mark_type', 'POST', true, false, true); $log = check_var('log', 'POST', true, false, true); $reason = isset($_POST['reason']) ? $_POST['reason'] : ''; $mysqli->autocommit(false); // Read question from database. $result = $mysqli->prepare("SELECT leadin, settings FROM questions WHERE q_id = ?"); $result->bind_param('i', $q_id); $result->execute(); $result->bind_result($leadin, $settings); $result->fetch(); $result->close(); $question_obj = new enhancedcalc($configObject); $question_obj->set_settings($settings); $q_marks = $question_obj->get_question_marks(); //$q_marks_rev = array_flip($q_marks); if ($q_marks !== false) { // Get user's current mark $sql = "SELECT mark FROM log{$log} WHERE id = ?"; $result = $mysqli->prepare($sql); $result->bind_param('i', $log_id); $result->execute(); $result->bind_result($orig_mark); $result->fetch(); $result->close(); $sql = <<<QUERY INSERT INTO marking_override (log_id, log_type, user_id, q_id, paper_id, marker_id, date_marked, new_mark_type, reason) VALUES (?, ?, ?, ?, ?, ?, NOW(), ?, ?) ON DUPLICATE KEY UPDATE
function storeData(&$log_array, $qID, $answer, $q_type, $display, $settings, $mark, $totalpos, $stop_words, $analysis_type) { $configObject = Config::get_instance(); if (!isset($log_array[$qID]['mark'])) { $log_array[$qID]['mark'] = 0; } if (!isset($log_array[$qID]['totalpos'])) { $log_array[$qID]['totalpos'] = 0; } switch ($q_type) { case 'area': if ($mark == $totalpos) { if (isset($log_array[$qID]['correct'])) { $log_array[$qID][1]['correct']++; } else { $log_array[$qID][1]['correct'] = 1; } } elseif ($mark < $totalpos and $mark > 0) { if (isset($log_array[$qID]['partial'])) { $log_array[$qID][1]['partial']++; } else { $log_array[$qID][1]['partial'] = 1; } } else { if (isset($log_array[$qID]['incorrect'])) { $log_array[$qID][1]['incorrect']++; } else { $log_array[$qID][1]['incorrect'] = 1; } } $log_array[$qID]['mark'] += $mark; $log_array[$qID]['totalpos'] += $totalpos; break; case 'blank': $tmp_answer_parts = array(); $tmp_answer_parts = explode('|', $answer); $i = 0; foreach ($tmp_answer_parts as $tmp_individual_answer) { $tmp_individual_answer = strtolower(trim($tmp_individual_answer)); $i++; if ($tmp_individual_answer == 'u') { if (isset($log_array[$qID][$i]['u'])) { $log_array[$qID][$i]['u']++; } else { $log_array[$qID][$i]['u'] = 1; } } else { if (isset($log_array[$qID][$i][$tmp_individual_answer])) { $log_array[$qID][$i][$tmp_individual_answer]++; } else { $log_array[$qID][$i][$tmp_individual_answer] = 1; } } } break; case 'enhancedcalc': $configObj = Config::get_instance(); $calc = new enhancedcalc($configObj); $calc->set_settings($settings); $calc->set_useranswer($answer); if ($calc->is_user_ans_correct() or $calc->is_user_ans_within_fullmark_tolerance()) { if (isset($log_array[$qID][1]['correct'])) { $log_array[$qID][1]['correct']++; } else { $log_array[$qID][1]['correct'] = 1; } } $log_array[$qID]['mark'] += $mark; $log_array[$qID]['totalpos'] += $totalpos; break; case 'dichotomous': case 'true_false': $count_answer = strlen($answer); for ($i = 0; $i < $count_answer; $i++) { $tmp_individual_answer = $answer[$i]; if (isset($log_array[$qID][$i + 1][$tmp_individual_answer])) { $log_array[$qID][$i + 1][$tmp_individual_answer]++; } else { $log_array[$qID][$i + 1][$tmp_individual_answer] = 1; } } break; case 'labelling': $tmp_first_split = explode(';', $answer); $tmp_second_split = explode('$', $tmp_first_split[1]); $count_tmp_second_split = count($tmp_second_split); for ($i = 2; $i <= $count_tmp_second_split; $i += 4) { $x_coord = $tmp_second_split[$i - 2]; $y_coord = $tmp_second_split[$i - 1]; $tmp_individual_answer = trim($tmp_second_split[$i]); $element = $x_coord . 'x' . $y_coord; if (isset($log_array[$qID][$element][$tmp_individual_answer])) { $log_array[$qID][$element][$tmp_individual_answer]++; } else { $log_array[$qID][$element][$tmp_individual_answer] = 1; } } break; case 'hotspot': $layer_answers = explode('|', $answer); $layer = 1; foreach ($layer_answers as $layer_answer) { if (substr($layer_answer, 0, 1) == '1') { if (isset($log_array[$qID][$layer]['1'])) { $log_array[$qID][$layer]['1']++; } else { $log_array[$qID][$layer]['1'] = 1; } } elseif (substr($layer_answer, 0, 1) == '0') { if (isset($log_array[$qID][$layer]['0'])) { $log_array[$qID][$layer]['0']++; } else { $log_array[$qID][$layer]['0'] = 1; } } else { if (isset($log_array[$qID][$layer]['u'])) { $log_array[$qID][$layer]['u']++; } else { $log_array[$qID][$layer]['u'] = 1; } } if (!isset($log_array[$qID][$layer]['coords'])) { $log_array[$qID][$layer]['coords'] = $layer_answer; } else { $log_array[$qID][$layer]['coords'] .= ';' . $layer_answer; } $layer++; } break; case 'mcq': if (isset($log_array[$qID][1][$answer])) { $log_array[$qID][1][$answer]++; } else { $log_array[$qID][1][$answer] = 1; } break; case 'mrq': if ($answer == 'a') { if (isset($log_array[$qID]['a'])) { $log_array[$qID]['a']++; } else { $log_array[$qID]['a'] = 1; } } else { $count_answer = strlen($answer); for ($i = 0; $i < $count_answer; $i++) { $tmp_individual_answer = $answer[$i]; if (isset($log_array[$qID][$i + 1][$tmp_individual_answer])) { $log_array[$qID][$i + 1][$tmp_individual_answer]++; } else { $log_array[$qID][$i + 1][$tmp_individual_answer] = 1; } } } $log_array[$qID]['mark'] += $mark; $log_array[$qID]['totalpos'] += $totalpos; break; case 'extmatch': $tmp_answer_parts = array(); $tmp_answer_parts = explode('|', $answer); $i = 0; foreach ($tmp_answer_parts as $tmp_individual_answer) { $i++; $tmp_sub_parts = array(); $tmp_sub_parts = explode('$', $tmp_individual_answer); foreach ($tmp_sub_parts as $tmp_individual_part) { if ($tmp_individual_answer == 'u') { if (isset($log_array[$qID][$i]['u'])) { $log_array[$qID][$i]['u']++; } else { $log_array[$qID][$i]['u'] = 1; } } else { if (isset($log_array[$qID][$i][$tmp_individual_part])) { $log_array[$qID][$i][$tmp_individual_part]++; } else { $log_array[$qID][$i][$tmp_individual_part] = 1; } } } } break; case 'matrix': $tmp_answer_parts = explode('|', $answer); $count_tmp_answer_parts = count($tmp_answer_parts); for ($i = 0; $i < $count_tmp_answer_parts; $i++) { $tmp_individual_answer = $tmp_answer_parts[$i]; if ($tmp_individual_answer == 'u' or $tmp_individual_answer == '') { if (isset($log_array[$qID][$i + 1]['u'])) { $log_array[$qID][$i + 1]['u']++; } else { $log_array[$qID][$i + 1]['u'] = 1; } } else { if (isset($log_array[$qID][$i + 1][$tmp_individual_answer])) { $log_array[$qID][$i + 1][$tmp_individual_answer]++; } else { $log_array[$qID][$i + 1][$tmp_individual_answer] = 1; } } } break; case 'rank': $tmp_answer_parts = array(); $tmp_answer_parts = explode(',', $answer); $i = 0; foreach ($tmp_answer_parts as $tmp_individual_answer) { if (isset($log_array[$qID][$i][$tmp_individual_answer])) { $log_array[$qID][$i][$tmp_individual_answer]++; } else { $log_array[$qID][$i][$tmp_individual_answer] = 1; } $i++; } if ($mark == $totalpos) { if (isset($log_array[$qID]['all_correct'])) { $log_array[$qID]['all_correct']++; } else { $log_array[$qID]['all_correct'] = 1; } } $log_array[$qID]['mark'] += $mark; $log_array[$qID]['totalpos'] += $totalpos; break; case 'sct': if (isset($log_array[$qID][1][$answer])) { $log_array[$qID][1][$answer]++; } else { $log_array[$qID][1][$answer] = 1; } $log_array[$qID]['mark'] += $mark; $log_array[$qID]['totalpos'] += $totalpos; break; case 'textbox': if ($analysis_type == 'top' or $analysis_type == 'bottom') { $user_words = str_word_count($answer, 1); foreach ($user_words as $word) { $word = strtolower($word); if (!isset($stop_words[$word])) { if (isset($log_array[$qID]['words'][$word])) { $log_array[$qID]['words'][$word]++; } else { $log_array[$qID]['words'][$word] = 1; } } } } if (isset($user_words)) { if (isset($log_array[$qID]['word_count'])) { $log_array[$qID]['word_count'] += count($user_words); } else { $log_array[$qID]['word_count'] = count($user_words); } } $log_array[$qID]['mark'] += $mark; if (is_null($mark)) { if (isset($log_array[$qID]['unmarked'])) { $log_array[$qID]['unmarked']++; } else { $log_array[$qID]['unmarked'] = 1; } } $log_array[$qID]['totalpos'] += $totalpos; break; case 'likert': if (isset($log_array[$qID][1][$answer])) { $log_array[$qID][1][$answer]++; } else { $log_array[$qID][1][$answer] = 1; } break; } }