diff --git a/frontend/src/pages/Batches/BatchForm.vue b/frontend/src/pages/Batches/BatchForm.vue index 61cb428e..273a6bef 100644 --- a/frontend/src/pages/Batches/BatchForm.vue +++ b/frontend/src/pages/Batches/BatchForm.vue @@ -323,7 +323,6 @@ import { createLMSCategory, getMetaInfo, openSettings, - sanitizeHTML, updateMetaInfo, } from '@/utils' import { useRouter } from 'vue-router' @@ -458,16 +457,7 @@ const formatTime = (timeStr) => { return `${hours}:${minutes}` } -const validateFields = () => { - Object.keys(batchDetail.doc).forEach((key) => { - if (typeof batchDetail.doc[key] === 'string') { - batchDetail.doc[key] = sanitizeHTML(batchDetail.doc[key]) - } - }) -} - const submitBatch = () => { - validateFields() updateBatch() } diff --git a/frontend/src/pages/Courses/CourseForm.vue b/frontend/src/pages/Courses/CourseForm.vue index 35bea904..cbd5aef8 100644 --- a/frontend/src/pages/Courses/CourseForm.vue +++ b/frontend/src/pages/Courses/CourseForm.vue @@ -354,12 +354,7 @@ import { watch, getCurrentInstance, } from 'vue' -import { - getMetaInfo, - sanitizeHTML, - updateMetaInfo, - createLMSCategory, -} from '@/utils' +import { getMetaInfo, updateMetaInfo, createLMSCategory } from '@/utils' import { X } from 'lucide-vue-next' import { useRouter } from 'vue-router' import Link from '@/components/Controls/Link.vue' @@ -457,7 +452,6 @@ const updateCourseData = () => { } const submitCourse = () => { - validateFields() updateCourse() } @@ -471,14 +465,6 @@ const onMemberCreated = (user) => { } } -const validateFields = () => { - Object.keys(courseResource.doc).forEach((key) => { - if (typeof courseResource.doc[key] === 'string') { - courseResource.doc[key] = sanitizeHTML(courseResource.doc[key]) - } - }) -} - const updateCourse = () => { courseResource.setValue.submit( { diff --git a/lms/lms/doctype/course_lesson/course_lesson.py b/lms/lms/doctype/course_lesson/course_lesson.py index 5c0ebd6e..2b23a3af 100644 --- a/lms/lms/doctype/course_lesson/course_lesson.py +++ b/lms/lms/doctype/course_lesson/course_lesson.py @@ -125,7 +125,18 @@ def save_progress(lesson: str, course: str, scorm_details: dict = None): "scorm_content": "" if scorm_details.is_complete else scorm_details.scorm_content, }, ) - + if (not progress_already_exists and quiz_completed and assignment_completed and not scorm_details) or ( + scorm_details and scorm_details.is_complete and not lesson_already_completed + ): + next_lesson = get_next_lesson(course, lesson) + if next_lesson: + frappe.db.set_value( + "LMS Enrollment", + membership, + "current_lesson", + next_lesson, + update_modified=False, + ) progress = get_course_progress(course) if not is_demo_course(course): capture("course_progress", "lms") @@ -147,6 +158,33 @@ def save_progress(lesson: str, course: str, scorm_details: dict = None): return progress +def get_next_lesson(course: str, lesson: str): + lesson_reference = frappe.db.get_value( + "Lesson Reference", {"lesson": lesson}, ["idx", "parent"], as_dict=1 + ) + if not lesson_reference: + return None + + total_lessons = frappe.db.count("Lesson Reference", {"parent": lesson_reference.parent}) + if lesson_reference.idx < total_lessons: + return frappe.db.get_value( + "Lesson Reference", {"parent": lesson_reference.parent, "idx": lesson_reference.idx + 1}, "lesson" + ) + + total_chapters = frappe.db.count("Chapter Reference", {"parent": course}) + current_chapter_reference = frappe.db.get_value( + "Chapter Reference", {"parent": course, "chapter": lesson_reference.parent}, ["idx"], as_dict=1 + ) + + if current_chapter_reference.idx >= total_chapters: + return None + + next_chapter = frappe.db.get_value( + "Chapter Reference", {"parent": course, "idx": current_chapter_reference.idx + 1}, "chapter" + ) + return frappe.db.get_value("Lesson Reference", {"parent": next_chapter, "idx": 1}, "lesson") + + def get_quiz_progress(lesson): lesson_details = frappe.db.get_value("Course Lesson", lesson, ["body", "content"], as_dict=1) quizzes = []