fix: message from course page
This commit is contained in:
@@ -35,7 +35,7 @@ def create_member_from_user(doc, method):
|
|||||||
member = frappe.get_doc({
|
member = frappe.get_doc({
|
||||||
"doctype": "Community Member",
|
"doctype": "Community Member",
|
||||||
"full_name": doc.full_name,
|
"full_name": doc.full_name,
|
||||||
"username": doc.username if len(doc.username) > 3 else doc.username + "_community",
|
"username": doc.username if len(doc.username) > 3 else ("").join([ s for s in doc.full_name.split() ]),
|
||||||
"email": doc.email,
|
"email": doc.email,
|
||||||
"route": doc.username,
|
"route": doc.username,
|
||||||
"owner": doc.email
|
"owner": doc.email
|
||||||
|
|||||||
@@ -1 +1,18 @@
|
|||||||
import frappe
|
import frappe
|
||||||
|
|
||||||
|
def create_members_from_users():
|
||||||
|
users = frappe.get_all("User", ["email"])
|
||||||
|
for user in users:
|
||||||
|
if not frappe.db.get_value("Community Member", {"email": user.email}, "name"):
|
||||||
|
doc = frappe.get_doc("User", {"email": user.email})
|
||||||
|
username = doc.username if doc.username and len(doc.username) > 3 else ("").join([ s for s in doc.full_name.split() ])
|
||||||
|
if not frappe.db.exists("Community Member", username):
|
||||||
|
member = frappe.get_doc({
|
||||||
|
"doctype": "Community Member",
|
||||||
|
"full_name": doc.full_name,
|
||||||
|
"username": username,
|
||||||
|
"email": doc.email,
|
||||||
|
"route": doc.username,
|
||||||
|
"owner": doc.email
|
||||||
|
})
|
||||||
|
member.save(ignore_permissions=True)
|
||||||
@@ -14,18 +14,21 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "batch",
|
"fieldname": "batch",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
|
"in_list_view": 1,
|
||||||
"label": "Batch",
|
"label": "Batch",
|
||||||
"options": "LMS Batch"
|
"options": "LMS Batch"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "author",
|
"fieldname": "author",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
|
"in_list_view": 1,
|
||||||
"label": "Author",
|
"label": "Author",
|
||||||
"options": "Community Member"
|
"options": "Community Member"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "message",
|
"fieldname": "message",
|
||||||
"fieldtype": "Markdown Editor",
|
"fieldtype": "Markdown Editor",
|
||||||
|
"in_list_view": 1,
|
||||||
"label": "Message"
|
"label": "Message"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -37,7 +40,7 @@
|
|||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-03-22 13:57:50.500746",
|
"modified": "2021-03-23 18:06:25.086377",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "LMS",
|
"module": "LMS",
|
||||||
"name": "LMS Message",
|
"name": "LMS Message",
|
||||||
|
|||||||
@@ -19,13 +19,13 @@
|
|||||||
"is_standard": 1,
|
"is_standard": 1,
|
||||||
"login_required": 1,
|
"login_required": 1,
|
||||||
"max_attachment_size": 0,
|
"max_attachment_size": 0,
|
||||||
"modified": "2021-03-23 15:10:24.681090",
|
"modified": "2021-03-23 19:25:54.984968",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "LMS",
|
"module": "LMS",
|
||||||
"name": "add-messages",
|
"name": "add-messages",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"payment_button_label": "Buy Now",
|
"payment_button_label": "Buy Now",
|
||||||
"published": 1,
|
"published": 0,
|
||||||
"route": "add-messages",
|
"route": "add-messages",
|
||||||
"route_to_success_link": 0,
|
"route_to_success_link": 0,
|
||||||
"show_attachments": 0,
|
"show_attachments": 0,
|
||||||
|
|||||||
@@ -39,11 +39,21 @@
|
|||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div class="tab-pane fade py-4 show active" role="tabpanel" id="home">
|
<div class="tab-pane fade py-4 show active" role="tabpanel" id="home">
|
||||||
<div>{{ frappe.utils.md_to_html(course.description) }}</div>
|
<div>{{ frappe.utils.md_to_html(course.description) }}</div>
|
||||||
|
<div class='container'>
|
||||||
|
<div class="list-group">
|
||||||
|
{% for topic in course.topics %}
|
||||||
|
<div class="list-group-item">
|
||||||
|
<h5><a href="/courses/topic?course={{course.name}}&topic={{topic.name}}">{{topic.title}}</a></h5>
|
||||||
|
<div>{{topic.preview | markdown }}</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-pane fade py-4" role="tabpanel" id="discussions">
|
<div class="tab-pane fade py-4" role="tabpanel" id="discussions">
|
||||||
<div>
|
<div>
|
||||||
{% if batches %}
|
{% if batches %}
|
||||||
<div class="d-inline-block">
|
<div class="">
|
||||||
<select id="batches-dropdown" class="m-5">
|
<select id="batches-dropdown" class="m-5">
|
||||||
{% for batch in batches %}
|
{% for batch in batches %}
|
||||||
<option value="{{batch}}">{{ batch }}</option>
|
<option value="{{batch}}">{{ batch }}</option>
|
||||||
@@ -51,10 +61,11 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea class="form-control message-text" rows="3" placeholder="Enter your message here."></textarea>
|
||||||
|
<button class="btn btn-primary mt-5 send-message" data-author="{{ author | urlencode}}" data-batch="{{ current_batch | urlencode }}">Send</button>
|
||||||
|
</div>
|
||||||
{% if discussions %}
|
{% 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">
|
<div class="discussions">
|
||||||
{% for message in discussions %}
|
{% for message in discussions %}
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
@@ -68,15 +79,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='container'>
|
|
||||||
<div class="list-group">
|
|
||||||
{% for topic in course.topics %}
|
|
||||||
<div class="list-group-item">
|
|
||||||
<h5><a href="/courses/topic?course={{course.name}}&topic={{topic.name}}">{{topic.title}}</a></h5>
|
|
||||||
<div>{{topic.preview | markdown }}</div>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
</section>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,25 +1,48 @@
|
|||||||
frappe.ready(() => {
|
frappe.ready(() => {
|
||||||
var dropdown = document.getElementById("batches-dropdown")
|
var dropdown = document.getElementById("batches-dropdown");
|
||||||
if (dropdown) {
|
if (dropdown) {
|
||||||
dropdown.onchange = () => {
|
dropdown.onchange = () => {
|
||||||
frappe.call("community.www.courses.course.get_messages", {batch: dropdown.value}, (data) => {
|
$(".send-message").attr("data-batch", dropdown.value)
|
||||||
var href_params = new URLSearchParams($(".add-message").children("a")[0].href)
|
frappe.call("community.www.courses.course.get_messages", { batch: dropdown.value }, (data) => {
|
||||||
$(".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) {
|
||||||
if(data.message){
|
$(".discussions").children().remove();
|
||||||
$(".discussions").children().remove()
|
|
||||||
for (var i = 0; i < data.message.length; i++) {
|
for (var i = 0; i < data.message.length; i++) {
|
||||||
var message = data.message[i]
|
var element = add_message(data.message[i])
|
||||||
var element = `<div class="list-group-item">
|
$(".discussions").append(element);
|
||||||
<h6> ${message.author} </h6>
|
|
||||||
${ message.message }
|
|
||||||
<div class="small text-muted text-right"> ${ message.creation } </div>
|
|
||||||
</div>`
|
|
||||||
$(".discussions").append(element)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$(".send-message").click((e) => {
|
||||||
|
var message = $(".message-text").val().trim();
|
||||||
|
if (message) {
|
||||||
|
frappe.call({
|
||||||
|
"method": "community.www.courses.course.save_message",
|
||||||
|
"args": {
|
||||||
|
"batch": decodeURIComponent($(e.target).attr("data-batch")),
|
||||||
|
"author": decodeURIComponent($(e.target).attr("data-author")),
|
||||||
|
"message": message
|
||||||
|
},
|
||||||
|
"callback": (data) => {
|
||||||
|
$(".message-text").val("");
|
||||||
|
var element = add_message(data.message, true)
|
||||||
|
$(".discussions").prepend(element);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$(".message-text").val("");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
var add_message = (message, session_user=false) => {
|
||||||
|
var author = session_user ? "You" : message.author
|
||||||
|
return `<div class="list-group-item">
|
||||||
|
<h6> ${author} </h6>
|
||||||
|
${message.message}
|
||||||
|
<div class="small text-muted text-right"> ${message.creation} </div>
|
||||||
|
</div>`;
|
||||||
|
}
|
||||||
/* if(frappe.session.user != "Guest"){
|
/* if(frappe.session.user != "Guest"){
|
||||||
frappe.call('community.www.courses.course.has_enrolled', { course: get_search_params().get("course") }, (data) => {
|
frappe.call('community.www.courses.course.has_enrolled', { course: get_search_params().get("course") }, (data) => {
|
||||||
if (data.message) {
|
if (data.message) {
|
||||||
|
|||||||
@@ -66,3 +66,14 @@ def enroll(course):
|
|||||||
"user": frappe.session.user
|
"user": frappe.session.user
|
||||||
}).save()
|
}).save()
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def save_message(message, author, batch):
|
||||||
|
doc = frappe.get_doc({
|
||||||
|
"doctype": "LMS Message",
|
||||||
|
"author": author,
|
||||||
|
"batch": batch,
|
||||||
|
"message": message
|
||||||
|
})
|
||||||
|
doc.save(ignore_permissions=True)
|
||||||
|
return doc
|
||||||
|
|
||||||
|
|||||||
@@ -13,15 +13,17 @@ var set_likes = function (liked, likes) {
|
|||||||
|
|
||||||
// set initial likes
|
// set initial likes
|
||||||
frappe.ready(() => {
|
frappe.ready(() => {
|
||||||
var url_params = new URLSearchParams(window.location.search);
|
frappe.call('community.www.hackathons.project.like', { project: get_url_arg().get("project"), initial: true }, (data) => {
|
||||||
frappe.call('community.www.hackathons.project.like', { project: url_params.get("project"), initial: true }, (data) => {
|
|
||||||
set_likes(data.message.action == "Liked", data.message.likes)
|
set_likes(data.message.action == "Liked", data.message.likes)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
var get_url_arg = () => {
|
||||||
|
return new URLSearchParams(window.location.search);
|
||||||
|
}
|
||||||
// like - unlike
|
// like - unlike
|
||||||
$('.btn-like').on('click', (e) => {
|
$('.btn-like').on('click', (e) => {
|
||||||
frappe.call('community.www.hackathons.project.like', { project: $(e.target).attr("data-project") }, (data) => {
|
frappe.call('community.www.hackathons.project.like', { project: get_url_arg().get("project") }, (data) => {
|
||||||
set_likes(data.message.action == "Liked", data.message.likes);
|
set_likes(data.message.action == "Liked", data.message.likes);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user