fix: discussion tab when there are no messages

- fixed the issue of not showing discussion tab when there are no messages
- fixed the error when the course page is visited by a guest user
This commit is contained in:
Anand Chitipothu
2021-04-14 06:41:54 +05:30
parent d38c64650e
commit 88888903ab
2 changed files with 65 additions and 59 deletions

View File

@@ -27,7 +27,7 @@
<a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" <a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home"
aria-selected="true">Course Details</a> aria-selected="true">Course Details</a>
</li> </li>
{% if discussions %} {% if current_batch %}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" id="discussions-tab" data-toggle="tab" href="#discussions" role="tab" <a class="nav-link" id="discussions-tab" data-toggle="tab" href="#discussions" role="tab"
aria-controls="discussions" aria-selected="false">Discussions</a> aria-controls="discussions" aria-selected="false">Discussions</a>

View File

@@ -1,81 +1,87 @@
import frappe import frappe
def get_context(context): def get_context(context):
context.no_cache = 1 context.no_cache = 1
try: try:
course_id = frappe.form_dict['course'] course_id = frappe.form_dict['course']
except KeyError: except KeyError:
frappe.local.flags.redirect_location = '/courses' frappe.local.flags.redirect_location = '/courses'
raise frappe.Redirect raise frappe.Redirect
context.course = get_course(course_id) context.course = get_course(course_id)
#context.course_enrolled = has_enrolled(course_id) #context.course_enrolled = has_enrolled(course_id)
context.discussions, context.memberships = get_discussions(course_id) context.discussions, context.memberships = get_discussions(course_id)
context.member_type = context.memberships[0].member_type if context.memberships:
if context.member_type != "Student": context.member_type = context.memberships[0].member_type
context.batches = [membership.batch for membership in context.memberships] if context.member_type != "Student":
context.current_batch = context.memberships[0].batch context.batches = [membership.batch for membership in context.memberships]
context.author = context.memberships[0].member context.current_batch = context.memberships[0].batch
context.author = context.memberships[0].member
else:
context.membership_type = None
context.batches = []
context.current_batch = None
context.author = None
def get_course(slug): def get_course(slug):
course = frappe.db.get_value('LMS Course', {"slug": slug}, course = frappe.db.get_value('LMS Course', {"slug": slug},
['name', 'slug', 'title', 'description'], as_dict=1) ['name', 'slug', 'title', 'description'], as_dict=1)
course['topics'] = frappe.db.get_all('LMS Topic', course['topics'] = frappe.db.get_all('LMS Topic',
filters={ filters={
'course': course['name'] 'course': course['name']
}, },
fields=['name', 'slug', 'title', 'preview'], fields=['name', 'slug', 'title', 'preview'],
order_by='creation' order_by='creation'
) )
return course return course
def get_discussions(slug): def get_discussions(slug):
memberships = get_membership(slug) memberships = get_membership(slug)
messages = get_messages(memberships[0].batch) messages = get_messages(memberships[0].batch)
return messages, memberships return messages, memberships
def get_membership(slug): def get_membership(slug):
memberships = [] memberships = []
course = frappe.db.get_value("LMS Course", {"slug": slug}, "name") course = frappe.db.get_value("LMS Course", {"slug": slug}, "name")
member = frappe.db.get_value("Community Member", {"email": frappe.session.user}, "name") member = frappe.db.get_value("Community Member", {"email": frappe.session.user}, "name")
batches = frappe.get_all("LMS Batch", {"course": course}, ["name"]) batches = frappe.get_all("LMS Batch", {"course": course}, ["name"])
for batch in batches: for batch in batches:
membership = frappe.db.get_value("LMS Batch Membership", {"member": member, "batch": batch.name}, ["batch", "member", "member_type"], as_dict=1) membership = frappe.db.get_value("LMS Batch Membership", {"member": member, "batch": batch.name}, ["batch", "member", "member_type"], as_dict=1)
if membership: if membership:
memberships.append(membership) memberships.append(membership)
return memberships return memberships
@frappe.whitelist() @frappe.whitelist()
def get_messages(batch): def get_messages(batch):
messages = frappe.get_all("LMS Message", {"batch": batch}, ["*"], order_by="creation desc") messages = frappe.get_all("LMS Message", {"batch": batch}, ["*"], order_by="creation desc")
for message in messages: for message in messages:
message.message = frappe.utils.md_to_html(message.message) message.message = frappe.utils.md_to_html(message.message)
message.creation = frappe.utils.format_datetime(message.creation, "medium") message.creation = frappe.utils.format_datetime(message.creation, "medium")
member_email = frappe.db.get_value("Community Member", message.author, "email") member_email = frappe.db.get_value("Community Member", message.author, "email")
if member_email == frappe.session.user: if member_email == frappe.session.user:
message.author = "You" message.author = "You"
return messages return messages
@frappe.whitelist() @frappe.whitelist()
def has_enrolled(course): def has_enrolled(course):
return frappe.db.get_value("LMS Course Enrollment", {"course": course, "owner": frappe.session.user}) return frappe.db.get_value("LMS Course Enrollment", {"course": course, "owner": frappe.session.user})
@frappe.whitelist() @frappe.whitelist()
def enroll(course): def enroll(course):
return frappe.get_doc({ return frappe.get_doc({
"doctype": "LMS Course Enrollment", "doctype": "LMS Course Enrollment",
"course": course, "course": course,
"user": frappe.session.user "user": frappe.session.user
}).save() }).save()
@frappe.whitelist() @frappe.whitelist()
def save_message(message, author, batch): def save_message(message, author, batch):
doc = frappe.get_doc({ doc = frappe.get_doc({
"doctype": "LMS Message", "doctype": "LMS Message",
"author": author, "author": author,
"batch": batch, "batch": batch,
"message": message "message": message
}) })
doc.save(ignore_permissions=True) doc.save(ignore_permissions=True)
return doc return doc