diff --git a/docker/init.sh b/docker/init.sh index 178735c0..ed74f101 100644 --- a/docker/init.sh +++ b/docker/init.sh @@ -16,9 +16,9 @@ cd frappe-bench # Use containers instead of localhost bench set-mariadb-host mariadb -bench set-redis-cache-host redis:6379 -bench set-redis-queue-host redis:6379 -bench set-redis-socketio-host redis:6379 +bench set-redis-cache-host redis://redis:6379 +bench set-redis-queue-host redis://redis:6379 +bench set-redis-socketio-host redis://redis:6379 # Remove redis, watch from Procfile sed -i '/redis/d' ./Procfile diff --git a/frontend/src/components/Modals/EvaluationModal.vue b/frontend/src/components/Modals/EvaluationModal.vue index 93488fe5..8c48ccae 100644 --- a/frontend/src/components/Modals/EvaluationModal.vue +++ b/frontend/src/components/Modals/EvaluationModal.vue @@ -148,7 +148,7 @@ function submitEvaluation(close) { unavailabilityMessage = false } - toast.warn(__('Evaluator is unavailable')) + toast.warning(__('Evaluator is unavailable')) }, }) } diff --git a/frontend/src/components/Quiz.vue b/frontend/src/components/Quiz.vue index 4b81c6ec..c1b0f04a 100644 --- a/frontend/src/components/Quiz.vue +++ b/frontend/src/components/Quiz.vue @@ -494,7 +494,7 @@ const getAnswers = () => { const checkAnswer = () => { let answers = getAnswers() if (!answers.length) { - toast.warn(__('Please select an option')) + toast.warning(__('Please select an option')) return } diff --git a/frontend/src/pages/QuizSubmission.vue b/frontend/src/pages/QuizSubmission.vue index 4438f30b..8ce00bee 100644 --- a/frontend/src/pages/QuizSubmission.vue +++ b/frontend/src/pages/QuizSubmission.vue @@ -2,10 +2,10 @@
- +
-
-
- {{ submisisonDetails.doc.member_name }} +
+
+ {{ submissionDetails.doc.member_name }}
-
+
@@ -35,39 +35,39 @@
-
-
- - -
-
- {{ __('Answer') }}: - -
-
- - +
+
+
+ {{ __('Question') }}: + +
+
+ {{ __('Answer') }} + +
+
+ + +
@@ -119,7 +119,7 @@ const props = defineProps({ }, }) -const submisisonDetails = createDocumentResource({ +const submissionDetails = createDocumentResource({ doctype: 'LMS Quiz Submission', name: props.submission, auto: true, @@ -132,18 +132,18 @@ const breadcrumbs = computed(() => { route: { name: 'QuizSubmissionList', params: { - quizID: submisisonDetails.doc.quiz, + quizID: submissionDetails.doc.quiz, }, }, }, { - label: submisisonDetails.doc.quiz_title, + label: submissionDetails.doc.quiz_title, }, ] }) const saveSubmission = () => { - submisisonDetails.save.submit( + submissionDetails.save.submit( {}, { onError(err) { @@ -155,7 +155,7 @@ const saveSubmission = () => { usePageMeta(() => { return { - title: `${submisisonDetails.doc.quiz_title}`, + title: `${submissionDetails.doc?.quiz_title}`, icon: brand.favicon, } }) diff --git a/lms/lms/doctype/lms_quiz/lms_quiz.py b/lms/lms/doctype/lms_quiz/lms_quiz.py index f5acb29c..9936aa6e 100644 --- a/lms/lms/doctype/lms_quiz/lms_quiz.py +++ b/lms/lms/doctype/lms_quiz/lms_quiz.py @@ -96,9 +96,7 @@ def set_total_marks(questions): @frappe.whitelist() def quiz_summary(quiz, results): - score = 0 results = results and json.loads(results) - is_open_ended = False percentage = 0 quiz_details = frappe.db.get_value( @@ -108,7 +106,32 @@ def quiz_summary(quiz, results): as_dict=1, ) + data = process_results(results, quiz) + results = data["results"] + score = data["score"] + is_open_ended = data["is_open_ended"] + score_out_of = quiz_details.total_marks + percentage = (score / score_out_of) * 100 if score_out_of else 0 + submission = create_submission( + quiz, results, score_out_of, quiz_details.passing_percentage + ) + + save_progress_after_quiz(quiz_details, percentage) + + return { + "score": score, + "score_out_of": score_out_of, + "submission": submission.name, + "pass": percentage == quiz_details.passing_percentage, + "percentage": percentage, + "is_open_ended": is_open_ended, + } + + +def process_results(results, quiz): + score = 0 + is_open_ended = False for result in results: question_details = frappe.db.get_value( @@ -123,55 +146,28 @@ def quiz_summary(quiz, results): result["marks_out_of"] = question_details.marks if question_details.type != "Open Ended": - correct = result["is_correct"][0] - for point in result["is_correct"]: - correct = correct and point - result["is_correct"] = correct + if len(result["is_correct"]) > 0: + correct = result["is_correct"][0] + for point in result["is_correct"]: + correct = correct and point + result["is_correct"] = correct + else: + result["is_correct"] = 0 marks = question_details.marks if correct else 0 result["marks"] = marks score += marks else: - result["is_correct"] = 0 is_open_ended = True - - percentage = (score / score_out_of) * 100 - result["answer"] = re.sub( - r']*src\s*=\s*["\'](?=data:)(.*?)["\']', _save_file, result["answer"] - ) - - submission = frappe.new_doc("LMS Quiz Submission") - # Score and percentage are calculated by the controller function - submission.update( - { - "doctype": "LMS Quiz Submission", - "quiz": quiz, - "result": results, - "score": 0, - "score_out_of": score_out_of, - "member": frappe.session.user, - "percentage": 0, - "passing_percentage": quiz_details.passing_percentage, - } - ) - submission.save(ignore_permissions=True) - - if ( - percentage >= quiz_details.passing_percentage - and quiz_details.lesson - and quiz_details.course - ): - save_progress(quiz_details.lesson, quiz_details.course) - elif not quiz_details.passing_percentage: - save_progress(quiz_details.lesson, quiz_details.course) + result["is_correct"] = 0 + result["answer"] = re.sub( + r']*src\s*=\s*["\'](?=data:)(.*?)["\']', _save_file, result["answer"] + ) return { + "results": results, "score": score, - "score_out_of": score_out_of, - "submission": submission.name, - "pass": percentage == quiz_details.passing_percentage, - "percentage": percentage, "is_open_ended": is_open_ended, } @@ -219,6 +215,36 @@ def get_corrupted_image_msg(): return _("Image: Corrupted Data Stream") +def create_submission(quiz, results, score_out_of, passing_percentage): + submission = frappe.new_doc("LMS Quiz Submission") + # Score and percentage are calculated by the controller function + submission.update( + { + "doctype": "LMS Quiz Submission", + "quiz": quiz, + "result": results, + "score": 0, + "score_out_of": score_out_of, + "member": frappe.session.user, + "percentage": 0, + "passing_percentage": passing_percentage, + } + ) + submission.save(ignore_permissions=True) + return submission + + +def save_progress_after_quiz(quiz_details, percentage): + if ( + percentage >= quiz_details.passing_percentage + and quiz_details.lesson + and quiz_details.course + ): + save_progress(quiz_details.lesson, quiz_details.course) + elif not quiz_details.passing_percentage: + save_progress(quiz_details.lesson, quiz_details.course) + + @frappe.whitelist() def get_question_details(question): if frappe.db.exists("LMS Quiz Question", question):