import * as helper from "./helpers.js"; /** * Submits answers */ export function submitAnswers(exam_details, db, config) { getJsonAnswers(exam_details, db) .then((a) => { let json = { eid: exam_details.eid, answers: JSON.stringify(a), }; postAnswers(json, config, exam_details); }) .catch((e) => { console.log(e) alert("No answers to submit"); }); } /** * Gets a json representation of answers * @return {JSON} - answers */ export function getJsonAnswers(exam_details, db) { console.log(exam_details) console.log({ aid: exam_details.aid, cid: exam_details.cid, eid: exam_details.eid, }) return db.answers .where({ aid: exam_details.aid, cid: exam_details.cid, eid: exam_details.eid, }) .toArray(); } /** * Posts answers to url * @param {*} ans - json representation of answers */ export function postAnswers(ans, config, exam_details) { $("#progress").html("Submitting answers..."); $.post(config.exam_submit_url, ans, null, "json") .done((data) => { console.log("returned data", data); if (data.success) { $("#submit-error-overlay").remove(); if (data.question_count == exam_details.number_of_questions) { let ret = confirm( `${data.question_count} answers sucessfully submitted. Click OK to finish the exam.` ); if (ret) { $( document ).trigger( "saveSessionEvent", [ true ] ); if (config.exam_results_url != "") { let url = config.exam_results_url; if (exam_details.cid != "") { url = url + exam_details.cid; } $("#options-link") .empty() .append( `` ); } $("#options-panel").show(); } else { } } else { alert(`${data.question_count} answers sucessfully submitted.`); } } else { submissionError(data, ans, exam_details); } }) .fail((e) => { // Will occur with server error such as 500 console.log("error", e); submissionError(e, ans, exam_details); }); // $.post( "http://localhost:8000/submit_answers", JSON.stringify(ans)); } function submissionError(data, answer_json, exam_details) { // error will not be defined with server errors if (data.error != undefined) { alert(`Error submitting answers: ${data.error}`); } else { alert(`Error submitting answers`); } var docHeight = $(document).height(); let answers = JSON.parse(answer_json.answers) let answer_map = {} answers.forEach((ans, n) => { if (!answer_map.hasOwnProperty(ans.qid)) { answer_map[ans.qid] = []; } answer_map[ans.qid].push(ans); }); let html = $("
An error has occured when submit your answers. A copy of your answers are displayed below, you may wish to save a copy. Please try submitting again or refresh this page to continue.
${html.get(0).innerHTML}
${JSON.stringify( answer_json )}