feat: discussions
This commit is contained in:
16
community/www/discussions/discussion.html
Normal file
16
community/www/discussions/discussion.html
Normal file
@@ -0,0 +1,16 @@
|
||||
{% extends "templates/base.html" %}
|
||||
{% block title %}{{ thread.title }}{% endblock %}
|
||||
{% block head_include %}
|
||||
<style>
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="common-page-style">
|
||||
<div class="container">
|
||||
{{ widgets.BreadCrumb(thread=thread) }}
|
||||
<div class="course-home-headings">{{ thread.title }}</div>
|
||||
{{ widgets.DiscussionMessage(thread=thread.name) }}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
18
community/www/discussions/discussion.py
Normal file
18
community/www/discussions/discussion.py
Normal file
@@ -0,0 +1,18 @@
|
||||
import frappe
|
||||
|
||||
def get_context(context):
|
||||
context.no_cache = 1
|
||||
|
||||
try:
|
||||
thread_name = frappe.form_dict["discussion"]
|
||||
except KeyError:
|
||||
redirect_to_discussions()
|
||||
|
||||
context.thread = frappe.db.get_value("Discussion Thread", thread_name, ["name", "title"], as_dict=True)
|
||||
|
||||
if not len(context.thread):
|
||||
redirect_to_discussions
|
||||
|
||||
def redirect_to_discussions():
|
||||
frappe.local.flags.redirect_location = "/discussions"
|
||||
raise frappe.Redirect
|
||||
65
community/www/discussions/index.html
Normal file
65
community/www/discussions/index.html
Normal file
@@ -0,0 +1,65 @@
|
||||
{% extends "templates/base.html" %}
|
||||
{% block title %}{{ 'Discussions' }}{% endblock %}
|
||||
{% block head_include %}
|
||||
<style>
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="common-page-style">
|
||||
<div class="container">
|
||||
<div class="courses-header">
|
||||
<span>{{_('Discussions')}}</span>
|
||||
<div id="new-topic" class="button is-primary pull-right">
|
||||
<img src="/assets/community/icons/small-add.svg">
|
||||
Start a Discussion</div>
|
||||
</div>
|
||||
<div class="card-divider-dark"></div>
|
||||
{% if threads | length %}
|
||||
<div class="cards-parent">
|
||||
{% for thread in threads %}
|
||||
<div class="common-card-style thread-card">
|
||||
<div class="course-card-title">{{ thread.title }}</div>
|
||||
<div class="card-divider"></div>
|
||||
<div>
|
||||
<span class="course-student-count">
|
||||
<span class="mr-4">
|
||||
<img class="icon-background" src="/assets/community/icons/message.svg" />
|
||||
{{ thread.message_count }}
|
||||
</span>
|
||||
<span class="mr-4">
|
||||
<img class="icon-background" src="/assets/community/icons/user.svg" />
|
||||
{{ thread.member_count }}
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<a class="stretched-link" href="/discussions/{{ thread.name }}"></a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="text-center font-weight-bold mt-5">
|
||||
No discussions yet.
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- New Topic Modal -->
|
||||
<div class="modal fade discussion-modal" id="discussion-modal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<div class="course-home-headings modal-headings">Start a Discussion</div>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
{{ widgets.DiscussionComment() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
14
community/www/discussions/index.js
Normal file
14
community/www/discussions/index.js
Normal file
@@ -0,0 +1,14 @@
|
||||
frappe.ready(() => {
|
||||
$("#new-topic").click((e) => {
|
||||
show_new_topic_modal(e);
|
||||
})
|
||||
})
|
||||
|
||||
var show_new_topic_modal = (e) => {
|
||||
e.preventDefault();
|
||||
if (frappe.session.user == "Guest") {
|
||||
window.location.href = `/login?redirect-to=/discussions/`;
|
||||
return;
|
||||
}
|
||||
$("#discussion-modal").modal("show");
|
||||
}
|
||||
17
community/www/discussions/index.py
Normal file
17
community/www/discussions/index.py
Normal file
@@ -0,0 +1,17 @@
|
||||
import frappe
|
||||
|
||||
def get_context(context):
|
||||
context.threads = get_threads()
|
||||
|
||||
def get_threads():
|
||||
threads = frappe.get_all("Discussion Thread", fields=["name", "title"])
|
||||
for thread in threads:
|
||||
messages = frappe.get_all("Discussion Message",
|
||||
{
|
||||
"thread": thread.name
|
||||
},
|
||||
["owner"],
|
||||
as_list=True)
|
||||
thread.message_count = len(messages)
|
||||
thread.member_count = len(set(messages))
|
||||
return threads
|
||||
Reference in New Issue
Block a user