feat: #27 discussion message publish realtime
This commit is contained in:
@@ -94,7 +94,10 @@ web_include_css = "/assets/css/community.css"
|
|||||||
doc_events = {
|
doc_events = {
|
||||||
"User": {
|
"User": {
|
||||||
"after_insert": "community.community.doctype.community_member.community_member.create_member_from_user"
|
"after_insert": "community.community.doctype.community_member.community_member.create_member_from_user"
|
||||||
}
|
},
|
||||||
|
"LMS Message": {
|
||||||
|
"after_insert": "community.lms.doctype.lms_message.lms_message.publish_message"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Scheduled Tasks
|
# Scheduled Tasks
|
||||||
|
|||||||
@@ -37,4 +37,3 @@ def save_message(message, batch):
|
|||||||
"message": message
|
"message": message
|
||||||
})
|
})
|
||||||
doc.save(ignore_permissions=True)
|
doc.save(ignore_permissions=True)
|
||||||
return doc
|
|
||||||
@@ -7,9 +7,9 @@ import frappe
|
|||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.utils import add_days, nowdate
|
from frappe.utils import add_days, nowdate
|
||||||
|
|
||||||
class LMSMessage(Document):
|
class LMSMessage(Document):
|
||||||
def after_insert(self):
|
def after_insert(self):
|
||||||
frappe.publish_realtime("new_lms_message", {"message":"JJannat"}, user="Administrator")
|
|
||||||
self.send_email()
|
self.send_email()
|
||||||
|
|
||||||
def send_email(self):
|
def send_email(self):
|
||||||
@@ -61,3 +61,40 @@ def send_daily_digest():
|
|||||||
},
|
},
|
||||||
delayed = False
|
delayed = False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def publish_message(doc, method):
|
||||||
|
print(frappe.session.user)
|
||||||
|
email = frappe.db.get_value("Community Member", doc.author, "email")
|
||||||
|
session_user = True if email == frappe.session.user else False
|
||||||
|
message = get_message_template(doc, session_user)
|
||||||
|
|
||||||
|
js = """
|
||||||
|
$(".msger-input").val("");
|
||||||
|
$(".message-section").append(`{0}`);
|
||||||
|
""".format(message)
|
||||||
|
|
||||||
|
frappe.publish_realtime(event="eval_js", message=js, after_commit=True)
|
||||||
|
|
||||||
|
def get_message_template(message, session_user):
|
||||||
|
if session_user:
|
||||||
|
message.author_name = "You"
|
||||||
|
message.is_author = True
|
||||||
|
|
||||||
|
message.message_time = frappe.utils.pretty_date(message.creation)
|
||||||
|
template = """ <div class="discussion {% if message.is_author %} is-author {% endif %}">
|
||||||
|
<div class="d-flex justify-content-between">
|
||||||
|
<div class="font-weight-bold">
|
||||||
|
{{ message.author_name }}
|
||||||
|
</div>
|
||||||
|
<div class="text-muted">
|
||||||
|
{{ message.message_time }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt-5">
|
||||||
|
{{ message.message }}
|
||||||
|
</div>
|
||||||
|
</div>"""
|
||||||
|
template = frappe.render_template(template, {
|
||||||
|
"message": message
|
||||||
|
})
|
||||||
|
return template
|
||||||
@@ -290,4 +290,5 @@ nav.navbar {
|
|||||||
|
|
||||||
.message-section {
|
.message-section {
|
||||||
margin-left: 5%;
|
margin-left: 5%;
|
||||||
|
display: inline-block;
|
||||||
}
|
}
|
||||||
@@ -1,15 +1,4 @@
|
|||||||
frappe.ready(() => {
|
frappe.ready(() => {
|
||||||
frappe.require("/assets/frappe/js/lib/socket.io.min.js");
|
|
||||||
frappe.require("/assets/frappe/js/frappe/socketio_client.js");
|
|
||||||
if (window.dev_server) {
|
|
||||||
frappe.boot.socketio_port = "9000" //use socketio port shown when bench starts
|
|
||||||
}
|
|
||||||
frappe.socketio.init();
|
|
||||||
console.log(frappe.socketio)
|
|
||||||
//frappe.socketio.emittedDemo("mydata");
|
|
||||||
frappe.realtime.on("new_lms_message", (data) => {
|
|
||||||
console.log(data)
|
|
||||||
})
|
|
||||||
if (frappe.session.user != "Guest") {
|
if (frappe.session.user != "Guest") {
|
||||||
frappe.call({
|
frappe.call({
|
||||||
'method': 'community.lms.doctype.lms_mentor_request.lms_mentor_request.has_requested',
|
'method': 'community.lms.doctype.lms_mentor_request.lms_mentor_request.has_requested',
|
||||||
@@ -25,21 +14,6 @@ frappe.ready(() => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
$(".list-batch").click((e) => {
|
|
||||||
var batch = decodeURIComponent($(e.currentTarget).attr("data-label"))
|
|
||||||
$(".current-batch").text(batch)
|
|
||||||
$(".send-message").attr("data-batch", batch)
|
|
||||||
frappe.call("community.www.courses.course.get_messages", { batch: batch }, (data) => {
|
|
||||||
if (data.message) {
|
|
||||||
$(".discussions").children().remove();
|
|
||||||
for (var i = 0; i < data.message.length; i++) {
|
|
||||||
var element = add_message(data.message[i])
|
|
||||||
$(".discussions").append(element);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
$(".apply-now").click((e) => {
|
$(".apply-now").click((e) => {
|
||||||
if (frappe.session.user == "Guest") {
|
if (frappe.session.user == "Guest") {
|
||||||
window.location.href = "/login";
|
window.location.href = "/login";
|
||||||
@@ -94,19 +68,4 @@ frappe.ready(() => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
/*
|
|
||||||
var show_enrollment_badge = () => {
|
|
||||||
$(".btn-enroll").addClass("hide");
|
|
||||||
$(".enrollment-badge").removeClass("hide");
|
|
||||||
}
|
|
||||||
|
|
||||||
var get_search_params = () => {
|
|
||||||
return new URLSearchParams(window.location.search)
|
|
||||||
}
|
|
||||||
|
|
||||||
$('.btn-enroll').on('click', (e) => {
|
|
||||||
frappe.call('community.www.courses.course.enroll', { course: get_search_params().get("course") }, (data) => {
|
|
||||||
show_enrollment_badge()
|
|
||||||
});
|
|
||||||
}); */
|
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,6 @@
|
|||||||
<div class="mt-5">
|
<div class="mt-5">
|
||||||
{{ message.message }}
|
{{ message.message }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|||||||
@@ -1,22 +1,18 @@
|
|||||||
frappe.ready(() => {
|
frappe.ready(() => {
|
||||||
const assets = [
|
const assets = [
|
||||||
"/assets/frappe/js/lib/socket.io.min.js",
|
"/assets/frappe/js/lib/socket.io.min.js",
|
||||||
"/assets/frappe/js/frappe/socketio_client.js"
|
"/assets/frappe/js/frappe/socketio_client.js",
|
||||||
]
|
]
|
||||||
frappe.require(assets, () => {
|
frappe.require(assets, () => {
|
||||||
if (window.dev_server) {
|
if (window.dev_server) {
|
||||||
frappe.boot.socketio_port = "9000" //use socketio port shown when bench starts
|
frappe.boot.socketio_port = "9000" //use socketio port shown when bench starts
|
||||||
}
|
}
|
||||||
frappe.socketio.init(9000);
|
frappe.socketio.init(9000);
|
||||||
console.log(frappe.socketio)
|
|
||||||
})
|
|
||||||
frappe.realtime.on("new_lms_message", (data) => {
|
|
||||||
console.log(data)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.scrollTo(0, document.body.scrollHeight);
|
window.scrollTo(0, document.body.scrollHeight);
|
||||||
}, 0);
|
}, 300);
|
||||||
|
|
||||||
$(".msger-send-btn").click((e) => {
|
$(".msger-send-btn").click((e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@@ -27,10 +23,6 @@ frappe.ready(() => {
|
|||||||
"args": {
|
"args": {
|
||||||
"batch": decodeURIComponent($(e.target).attr("data-batch")),
|
"batch": decodeURIComponent($(e.target).attr("data-batch")),
|
||||||
"message": message
|
"message": message
|
||||||
},
|
|
||||||
"callback": (data) => {
|
|
||||||
$(".msger-input").val("");
|
|
||||||
frappe.realtime.publish("new_lms_message", {"message":"JJK"})
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user