58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
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
|