2019-05-21 06:34:50 +00:00
|
|
|
from __future__ import unicode_literals
|
|
|
|
import erpnext.education.utils as utils
|
|
|
|
import frappe
|
|
|
|
|
|
|
|
no_cache = 1
|
|
|
|
|
|
|
|
def get_context(context):
|
2019-05-30 12:35:00 +00:00
|
|
|
# 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
|
|
|
|
|
2019-05-30 11:07:15 +00:00
|
|
|
|
2019-05-30 12:35:00 +00:00
|
|
|
# Check if user has access to the content
|
2019-05-30 11:07:15 +00:00
|
|
|
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:
|
2019-05-29 07:41:34 +00:00
|
|
|
frappe.local.flags.redirect_location = '/lms'
|
|
|
|
raise frappe.Redirect
|
|
|
|
|
2019-05-30 12:35:00 +00:00
|
|
|
|
|
|
|
# Set context for content to be displayer
|
2019-05-30 11:49:11 +00:00
|
|
|
context.content = frappe.get_doc(content_type, content)
|
2019-05-30 11:07:15 +00:00
|
|
|
context.content_type = content_type
|
2019-05-30 12:35:00 +00:00
|
|
|
context.program = program
|
|
|
|
context.course = course
|
|
|
|
context.topic = topic
|
2019-05-30 11:07:15 +00:00
|
|
|
|
2019-05-30 12:35:00 +00:00
|
|
|
topic = frappe.get_doc("Topic", topic)
|
|
|
|
content_list = [{'content_type':item.doctype, 'content':item.name} for item in topic.get_contents()]
|
2019-05-21 06:34:50 +00:00
|
|
|
|
2019-05-30 12:35:00 +00:00
|
|
|
# Set context for progress numbers
|
|
|
|
context.position = content_list.index({'content': content, 'content_type': content_type})
|
|
|
|
context.length = len(content_list)
|
2019-05-21 06:34:50 +00:00
|
|
|
|
2019-05-30 12:35:00 +00:00
|
|
|
# Set context for navigation
|
|
|
|
context.previous = get_previous_content(content_list, context.position)
|
|
|
|
context.next = get_next_content(content_list, context.position)
|
2019-05-30 11:07:15 +00:00
|
|
|
|
2019-05-30 12:35:00 +00:00
|
|
|
def get_next_content(content_list, current_index):
|
2019-05-21 06:34:50 +00:00
|
|
|
try:
|
|
|
|
return content_list[current_index + 1]
|
|
|
|
except IndexError:
|
|
|
|
return None
|
|
|
|
|
2019-05-30 12:35:00 +00:00
|
|
|
def get_previous_content(content_list, current_index):
|
2019-05-21 06:34:50 +00:00
|
|
|
if current_index == 0:
|
|
|
|
return None
|
|
|
|
else:
|
2019-05-30 11:07:15 +00:00
|
|
|
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 = '{0}'""".format(program))
|
|
|
|
|
|
|
|
return (content, content_type) in contents_of_program
|