from __future__ import unicode_literals import frappe import erpnext.education.utils as utils 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.content_type, 'content':item.content} for item in topic.topic_content] # 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