$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;
    }
}