feat: course page redesign
This commit is contained in:
@@ -1,19 +1,27 @@
|
||||
import frappe
|
||||
from frappe.utils import nowdate, getdate
|
||||
|
||||
def get_context(context):
|
||||
context.no_cache = 1
|
||||
try:
|
||||
course_id = frappe.form_dict['course']
|
||||
course_id = frappe.form_dict["course"]
|
||||
except KeyError:
|
||||
frappe.local.flags.redirect_location = '/courses'
|
||||
frappe.local.flags.redirect_location = "/courses"
|
||||
raise frappe.Redirect
|
||||
context.course = get_course(course_id)
|
||||
context.batches = get_course_batches(context.course.name)
|
||||
context.upcoming_batches = get_upcoming_batches(context.course.name, context.batches)
|
||||
#context.course_enrolled = has_enrolled(course_id)
|
||||
context.discussions, context.memberships = get_discussions(course_id)
|
||||
context.discussions, context.memberships = get_discussions(context.batches)
|
||||
context.instructor = get_instructor(course_id)
|
||||
context.mentors = get_mentors(context.course.name)
|
||||
if context.memberships:
|
||||
context.member_type = context.memberships[0].member_type
|
||||
if context.member_type != "Student":
|
||||
context.batches = [membership.batch for membership in context.memberships]
|
||||
if context.member_type == "Mentor":
|
||||
context.is_mentor = True
|
||||
context.mentor_batches = get_mentor_batches(context.memberships)
|
||||
context.current_batch = context.memberships[0].batch
|
||||
context.author = context.memberships[0].member
|
||||
else:
|
||||
@@ -23,34 +31,87 @@ def get_context(context):
|
||||
context.author = None
|
||||
|
||||
def get_course(slug):
|
||||
course = frappe.db.get_value('LMS Course', {"slug": slug},
|
||||
['name', 'slug', 'title', 'description'], as_dict=1)
|
||||
course = frappe.db.get_value("LMS Course", {"slug": slug},
|
||||
["name", "slug", "title", "description", "short_introduction", "video_link"], as_dict=1)
|
||||
|
||||
course['topics'] = frappe.db.get_all('LMS Topic',
|
||||
course["topics"] = frappe.db.get_all("LMS Topic",
|
||||
filters={
|
||||
'course': course['name']
|
||||
"course": course["name"]
|
||||
},
|
||||
fields=['name', 'slug', 'title', 'preview'],
|
||||
order_by='creation'
|
||||
fields=["name", "slug", "title", "preview"],
|
||||
order_by="creation"
|
||||
)
|
||||
return course
|
||||
|
||||
def get_discussions(slug):
|
||||
memberships = get_membership(slug)
|
||||
messages = get_messages(memberships[0].batch)
|
||||
def get_upcoming_batches(course, all_batches):
|
||||
memberships = get_membership(all_batches)
|
||||
if not len(memberships):
|
||||
batches = frappe.get_all("LMS Batch", {"course": course, "start_date": [">", nowdate()]}, ["start_date", "start_time", "end_time", "sessions_on", "name"])
|
||||
batches = get_batch_mentors(batches)
|
||||
return batches
|
||||
return []
|
||||
|
||||
def get_batch_mentors(batches):
|
||||
for batch in batches:
|
||||
batch.mentors = []
|
||||
mentors = frappe.get_all("LMS Batch Membership", {"batch": batch.name, "member_type": "Mentor"}, ["member"])
|
||||
for mentor in mentors:
|
||||
member = frappe.db.get_value("Community Member", mentor.member, ["full_name", "photo", "abbr"], as_dict=1)
|
||||
batch.mentors.append(member)
|
||||
return batches
|
||||
|
||||
def get_discussions(batches):
|
||||
messages = []
|
||||
memberships = get_membership(batches)
|
||||
if len(memberships):
|
||||
messages = get_messages(memberships[0].batch)
|
||||
return messages, memberships
|
||||
|
||||
def get_membership(slug):
|
||||
def get_membership(batches):
|
||||
memberships = []
|
||||
course = frappe.db.get_value("LMS Course", {"slug": slug}, "name")
|
||||
member = frappe.db.get_value("Community Member", {"email": frappe.session.user}, "name")
|
||||
batches = frappe.get_all("LMS Batch", {"course": course}, ["name"])
|
||||
for batch in batches:
|
||||
membership = frappe.db.get_value("LMS Batch Membership", {"member": member, "batch": batch.name}, ["batch", "member", "member_type"], as_dict=1)
|
||||
if membership:
|
||||
memberships.append(membership)
|
||||
return memberships
|
||||
|
||||
def get_instructor(slug):
|
||||
owner = frappe.db.get_value("LMS Course", {"slug":slug}, ["owner"])
|
||||
instructor = frappe.get_doc("Community Member", {"email": owner})
|
||||
instructor.course_count = len(frappe.get_all("LMS Course", {"owner": owner}))
|
||||
return instructor
|
||||
|
||||
def get_mentors(course):
|
||||
course_mentors = []
|
||||
mentors = frappe.get_all("LMS Course Mentor Mapping", {"course": course}, ["member"])
|
||||
for mentor in mentors:
|
||||
member = frappe.get_doc("Community Member", mentor.member)
|
||||
member_in_list = list(filter(lambda x: x.name == member.name, course_mentors))
|
||||
if not member_in_list:
|
||||
member.batch_count = len(frappe.get_all("LMS Batch Membership", {"member": member.name, "member_type": "Mentor"}))
|
||||
course_mentors.append(member)
|
||||
return course_mentors
|
||||
|
||||
def get_course_batches(course):
|
||||
return frappe.get_all("LMS Batch", {"course": course}, ["name"])
|
||||
|
||||
def get_mentor_batches(memberships):
|
||||
mentor_batches = []
|
||||
memberships_as_mentor = list(filter(lambda x: x.member_type == "Mentor", memberships))
|
||||
for membership in memberships_as_mentor:
|
||||
batch = frappe.get_doc("LMS Batch", membership.batch)
|
||||
mentor_batches.append(batch)
|
||||
for batch in mentor_batches:
|
||||
if getdate(batch.start_date) < getdate():
|
||||
batch.status = "active"
|
||||
batch.badge_class = "green_badge"
|
||||
else:
|
||||
batch.status = "scheduled"
|
||||
batch.badge_class = "yellow_badge"
|
||||
mentor_batches = get_batch_mentors(mentor_batches)
|
||||
return mentor_batches
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_messages(batch):
|
||||
messages = frappe.get_all("LMS Message", {"batch": batch}, ["*"], order_by="creation desc")
|
||||
|
||||
Reference in New Issue
Block a user