from __future__ import unicode_literals import erpnext.education.utils as utils import frappe no_cache = 1 def get_context(context): # Load Query Parameters try: program = frappe.form_dict['program'] content = frappe.form_dict['content'] content_type = frappe.form_dict['type'] course = frappe.form_dict['course'] topic = frappe.form_dict['topic'] except KeyError: frappe.local.flags.redirect_location = '/lms' raise frappe.Redirect # Check if user has access to the content has_program_access = utils.allowed_program_access(program) has_content_access = allowed_content_access(program, content, content_type) if frappe.session.user == "Guest" or not has_program_access or not has_content_access: frappe.local.flags.redirect_location = '/lms' raise frappe.Redirect # Set context for content to be displayer context.content = frappe.get_doc(content_type, content).as_dict() context.content_type = content_type context.program = program context.course = course context.topic = topic topic = frappe.get_doc("Topic", topic) content_list = [{'content_type':item.doctype, 'content':item.name} for item in topic.get_contents()] # Set context for progress numbers context.position = content_list.index({'content': content, 'content_type': content_type}) context.length = len(content_list) # Set context for navigation context.previous = get_previous_content(content_list, context.position) context.next = get_next_content(content_list, context.position) def get_next_content(content_list, current_index): try: return content_list[current_index + 1] except IndexError: return None def get_previous_content(content_list, current_index): if current_index == 0: return None else: return content_list[current_index - 1] def allowed_content_access(program, content, content_type): contents_of_program = frappe.db.sql("""select `tabtopic content`.content, `tabtopic content`.content_type from `tabcourse topic`, `tabprogram course`, `tabtopic content` where `tabcourse topic`.parent = `tabprogram course`.course and `tabtopic content`.parent = `tabcourse topic`.topic and `tabprogram course`.parent = %(program)s""", {'program': program}) return (content, content_type) in contents_of_program