| import frappe |
| |
| import erpnext.education.utils as utils |
| |
| no_cache = 1 |
| |
| |
| def get_context(context): |
| try: |
| course = frappe.form_dict["course"] |
| program = frappe.form_dict["program"] |
| topic = frappe.form_dict["topic"] |
| except KeyError: |
| frappe.local.flags.redirect_location = "/lms" |
| raise frappe.Redirect |
| |
| context.program = program |
| context.course = course |
| context.topic = frappe.get_doc("Topic", topic) |
| context.contents = get_contents(context.topic, course, program) |
| context.has_access = utils.allowed_program_access(program) |
| |
| |
| def get_contents(topic, course, program): |
| student = utils.get_current_student() |
| if student: |
| course_enrollment = utils.get_or_create_course_enrollment(course, program) |
| contents = topic.get_contents() |
| progress = [] |
| if contents: |
| for content in contents: |
| if content.doctype in ("Article", "Video"): |
| if student: |
| status = utils.check_content_completion(content.name, content.doctype, course_enrollment.name) |
| else: |
| status = True |
| progress.append({"content": content, "content_type": content.doctype, "completed": status}) |
| elif content.doctype == "Quiz": |
| if student: |
| status, score, result, time_taken = utils.check_quiz_completion( |
| content, course_enrollment.name |
| ) |
| else: |
| status = False |
| score = None |
| result = None |
| progress.append( |
| { |
| "content": content, |
| "content_type": content.doctype, |
| "completed": status, |
| "score": score, |
| "result": result, |
| } |
| ) |
| |
| return progress |