feat: discussions tab and web form for messages
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<section class="top-section" style="padding: 1rem 0rem;">
|
||||
<section class="top-section container" style="padding: 1rem 0rem;">
|
||||
<div class='container pb-5'>
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
@@ -18,15 +18,56 @@
|
||||
</nav>
|
||||
<div class="badge badge-info enrollment-badge hide">Enrolled</div>
|
||||
<div>
|
||||
{% if not course_enrolled and frappe.session.user != "Guest" %}
|
||||
<!-- {% if not course_enrolled and frappe.session.user != "Guest" %}
|
||||
<button class="btn btn-dark btn-enroll float-right" data-course="{{ course.name }}">Enroll</button>
|
||||
{% endif %}
|
||||
{% endif %} -->
|
||||
<h1>{{ course.title }}</h1>
|
||||
</div>
|
||||
<div>{{ frappe.utils.md_to_html(course.description) }}</div>
|
||||
|
||||
<ul class="nav nav-tabs mt-4" id="myTab" role="tablist">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home"
|
||||
aria-selected="true">Course Details</a>
|
||||
</li>
|
||||
{% if discussions %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="discussions-tab" data-toggle="tab" href="#discussions" role="tab" aria-controls="discussions"
|
||||
aria-selected="false">Discussions</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade py-4 show active" role="tabpanel" id="home">
|
||||
<div>{{ frappe.utils.md_to_html(course.description) }}</div>
|
||||
</div>
|
||||
<div class="tab-pane fade py-4" role="tabpanel" id="discussions">
|
||||
<div>
|
||||
{% if batches %}
|
||||
<div class="d-inline-block">
|
||||
<select id="batches-dropdown" class="m-5">
|
||||
{% for batch in batches %}
|
||||
<option value="{{batch}}">{{ batch }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if discussions %}
|
||||
<p class="d-inline-block float-right add-message">
|
||||
<a href="/add-messages?new=1&batch={{ current_batch }}&author={{ author }}&course={{ course.title }}" class="btn btn-secondary btn-sm">Add Message</a>
|
||||
</p>
|
||||
<div class="discussions">
|
||||
{% for message in discussions %}
|
||||
<div class="list-group-item">
|
||||
<h6>{{ message.author }}</h6>
|
||||
{{ message.message }}
|
||||
<div class="small text-muted text-right">{{ message.creation }}</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='container'>
|
||||
<div class="list-group">
|
||||
{% for topic in course.topics %}
|
||||
|
||||
@@ -1,13 +1,34 @@
|
||||
frappe.ready(() => {
|
||||
if(frappe.session.user != "Guest"){
|
||||
var dropdown = document.getElementById("batches-dropdown")
|
||||
if (dropdown) {
|
||||
dropdown.onchange = () => {
|
||||
frappe.call("community.www.courses.course.get_messages", {batch: dropdown.value}, (data) => {
|
||||
var href_params = new URLSearchParams($(".add-message").children("a")[0].href)
|
||||
$(".add-message").children("a")[0].href = `/add-messages?new=1&batch=${dropdown.value}&author=${href_params.get("author")}&course=${href_params.get("course")}`
|
||||
if(data.message){
|
||||
$(".discussions").children().remove()
|
||||
for (var i = 0; i < data.message.length; i++) {
|
||||
var message = data.message[i]
|
||||
var element = `<div class="list-group-item">
|
||||
<h6> ${message.author} </h6>
|
||||
${ message.message }
|
||||
<div class="small text-muted text-right"> ${ message.creation } </div>
|
||||
</div>`
|
||||
$(".discussions").append(element)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
/* if(frappe.session.user != "Guest"){
|
||||
frappe.call('community.www.courses.course.has_enrolled', { course: get_search_params().get("course") }, (data) => {
|
||||
if (data.message) {
|
||||
show_enrollment_badge()
|
||||
}
|
||||
})
|
||||
}
|
||||
} */
|
||||
})
|
||||
|
||||
/*
|
||||
var show_enrollment_badge = () => {
|
||||
$(".btn-enroll").addClass("hide");
|
||||
$(".enrollment-badge").removeClass("hide");
|
||||
@@ -21,5 +42,5 @@ $('.btn-enroll').on('click', (e) => {
|
||||
frappe.call('community.www.courses.course.enroll', { course: get_search_params().get("course") }, (data) => {
|
||||
show_enrollment_badge()
|
||||
});
|
||||
});
|
||||
}); */
|
||||
|
||||
|
||||
@@ -8,7 +8,13 @@ def get_context(context):
|
||||
frappe.local.flags.redirect_location = '/courses'
|
||||
raise frappe.Redirect
|
||||
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.member_type = context.memberships[0].member_type
|
||||
if context.member_type != "Student":
|
||||
context.batches = [membership.batch for membership in context.memberships]
|
||||
context.current_batch = context.memberships[0].batch
|
||||
context.author = context.memberships[0].member
|
||||
|
||||
def get_course(name):
|
||||
course = frappe.db.get_value('LMS Course', name,
|
||||
@@ -22,9 +28,34 @@ def get_course(name):
|
||||
)
|
||||
return course
|
||||
|
||||
def get_discussions(course):
|
||||
memberships = get_membership(course)
|
||||
messages = get_messages(memberships[0].batch)
|
||||
return messages, memberships
|
||||
|
||||
def get_membership(course):
|
||||
memberships = []
|
||||
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
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_messages(batch):
|
||||
messages = frappe.get_all("LMS Message", {"batch": batch}, ["*"], order_by="creation desc")
|
||||
for message in messages:
|
||||
message.message = frappe.utils.md_to_html(message.message)
|
||||
message.creation = frappe.utils.format_datetime(message.creation, "medium")
|
||||
member_email = frappe.db.get_value("Community Member", message.author, "email")
|
||||
if member_email == frappe.session.user:
|
||||
message.author = "You"
|
||||
return messages
|
||||
|
||||
@frappe.whitelist()
|
||||
def has_enrolled(course):
|
||||
print(frappe.db)
|
||||
return frappe.db.get_value("LMS Course Enrollment", {"course": course, "owner": frappe.session.user})
|
||||
|
||||
@frappe.whitelist()
|
||||
|
||||
Reference in New Issue
Block a user