fix: discussions template and time

This commit is contained in:
Jannat Patel 2021-09-16 12:36:24 +05:30
parent 5164b1627d
commit 8aa977c5f0
19 changed files with 387 additions and 198 deletions

View file

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.66659 9.77761C2.66659 10.0919 2.79145 10.3934 3.01372 10.6157C3.23598 10.8379 3.53744 10.9628 3.85177 10.9628H10.9629L13.3333 13.3332V3.85169C13.3333 3.53736 13.2084 3.2359 12.9861 3.01364C12.7639 2.79137 12.4624 2.6665 12.1481 2.6665H3.85177C3.53744 2.6665 3.23598 2.79137 3.01372 3.01364C2.79145 3.2359 2.66659 3.53736 2.66659 3.85169V9.77761Z" stroke="#4C5A67" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 529 B

View file

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 7.44462C3.5 5.26607 5.26607 3.5 7.44462 3.5C9.62318 3.5 11.3892 5.26607 11.3892 7.44462C11.3892 8.50829 10.9683 9.47362 10.2838 10.1831C10.265 10.1972 10.247 10.2128 10.2299 10.2299C10.2128 10.247 10.1972 10.265 10.1831 10.2838C9.47362 10.9683 8.50829 11.3892 7.44462 11.3892C5.26607 11.3892 3.5 9.62318 3.5 7.44462ZM10.5696 11.2767C9.71788 11.9722 8.62996 12.3892 7.44462 12.3892C4.71378 12.3892 2.5 10.1755 2.5 7.44462C2.5 4.71378 4.71378 2.5 7.44462 2.5C10.1755 2.5 12.3892 4.71378 12.3892 7.44462C12.3892 8.62996 11.9722 9.71788 11.2767 10.5696L13.3538 12.6467C13.549 12.8419 13.549 13.1585 13.3538 13.3538C13.1585 13.549 12.8419 13.549 12.6467 13.3538L10.5696 11.2767Z" fill="#4C5A67"/>
</svg>

After

Width:  |  Height:  |  Size: 853 B

View file

@ -10,6 +10,7 @@ import "./frappe/utils/common.js";
import "./frappe/ui/messages.js";
import "./frappe/translate.js";
import "./frappe/utils/pretty_date.js";
import "./frappe/utils/datetime.js";
import "./frappe/microtemplate.js";
import "./frappe/query_string.js";

View file

@ -9,6 +9,7 @@
@import "../common/buttons";
@import "../common/modal";
@import "../desk/toast";
@import "../desk/css_variables.scss";
@import "../common/indicator";
@import "../common/controls";
@import "../common/awesomeplete";

View file

@ -96,6 +96,18 @@
{% block base_scripts %}
<!-- js should be loaded in body! -->
<script>
frappe.boot = {
sysdefaults: {
float_precision: parseInt("{{ frappe.get_system_settings('float_precision') or 3 }}"),
date_format: "{{ frappe.get_system_settings('date_format') or 'yyyy-mm-dd' }}",
}
};
// for backward compatibility of some libs
frappe.sys_defaults = frappe.boot.sysdefaults;
</script>
<script type="text/javascript" src="/assets/frappe/node_modules/moment/min/moment-with-locales.min.js"></script>
<script type="text/javascript" src="/assets/frappe/node_modules/moment-timezone/builds/moment-timezone-with-data.min.js"></script>
{{ include_script('frappe-web.bundle.js') }}
{% endblock %}

View file

@ -1,7 +1,7 @@
{% if frappe.session.user != "Guest" and
(condition is not defined or (condition is defined and condition )) %}
<span class="button is-secondary reply">
{{ cta_title }}
<img src="/assets/community/icons/small-add-black.svg">
{{ cta_title }}
<svg class="icon icon-sm ml-1"><use href="#icon-add" style="stroke: #4C5A67;"></use></svg>
</span>
{% endif %}

View file

@ -1,32 +1,32 @@
<form class="discussion-form">
<div class="form-group">
<div class="control-input-wrapper">
<div class="control-input">
<input type="text" autocomplete="off" class="input-with-feedback form-control topic-title" data-fieldtype="Data"
data-fieldname="feedback_comments" placeholder="Title" spellcheck="false"></input>
</div>
</div>
</div>
<div class="form-group">
<div class="control-input-wrapper">
<div class="control-input">
<input type="text" autocomplete="off" class="input-with-feedback form-control topic-title" data-fieldtype="Data"
data-fieldname="feedback_comments" placeholder="Title" spellcheck="false"></input>
</div>
</div>
</div>
<div class="form-group">
<div class="control-input-wrapper">
<div class="control-input">
<textarea type="text" autocomplete="off" class="input-with-feedback form-control comment-field"
data-fieldtype="Text" data-fieldname="feedback_comments" placeholder="Enter your comment here..."
spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="form-group">
<div class="control-input-wrapper">
<div class="control-input">
<textarea type="text" autocomplete="off" class="input-with-feedback form-control comment-field"
data-fieldtype="Text" data-fieldname="feedback_comments" placeholder="Enter your comment here..."
spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="comment-footer">
<div class="small flex-grow-1">
Press Cmd+Enter to post your comment
</div>
<div class="comment-footer">
<div class="small flex-grow-1">
Press Cmd+Enter to post your comment
</div>
<a class="dark-links cancel-comment hide"> Cancel </a>
<div class="button is-default submit-discussion pull-right" data-doctype="{{ doctype | urlencode }}"
data-docname="{{ docname | urlencode }}">
Post</div>
</div>
</form>
<a class="dark-links cancel-comment hide"> Cancel </a>
<div class="button is-default submit-discussion pull-right mb-1" data-doctype="{{ doctype | urlencode }}"
data-docname="{{ docname | urlencode }}">
Post</div>
</div>
</form>

View file

@ -2,8 +2,6 @@ frappe.ready(() => {
setup_socket_io();
set_docname_if_missing();
add_color_to_avatars();
expand_first_discussion();
@ -52,14 +50,23 @@ frappe.ready(() => {
$(document).on("click", ".cancel-comment", (e) => {
clear_comment_box(e);
})
if ($(document).width() <= 550) {
$(document).on("click", ".sidebar-parent", (e) => {
hide_sidebar();
})
}
$(document).on("click", ".back", (e) => {
back_to_sidebar(e);
})
})
var show_new_topic_modal = (e) => {
e.preventDefault();
$("#discussion-modal").modal("show");
var topic = $(e.currentTarget).attr("data-topic");
$(".modal-headings").text(topic ? "Reply" : "Start a Discussion");
topic ? $(".topic-title").addClass("hide") : $(".topic-title").removeClass("hide");
$("#submit-discussion").attr("data-topic", topic ? topic : "");
}
@ -87,8 +94,8 @@ var publish_message = (data) => {
$(data.template).insertBefore(`.discussion-on-page[data-topic=${data.topic_info.name}] .discussion-form`);
}
else if ((decodeURIComponent($(".discussions-parent .course-content-parent").attr("data-doctype")) == data.topic_info.reference_doctype
&& decodeURIComponent($(".discussions-parent .course-content-parent").attr("data-docname")) == data.topic_info.reference_docname)) {
else if ((decodeURIComponent($(".discussions-parent .discussions-card").attr("data-doctype")) == data.topic_info.reference_doctype
&& decodeURIComponent($(".discussions-parent .discussions-card").attr("data-docname")) == data.topic_info.reference_docname)) {
post_message_cleanup();
data.new_topic_template = style_avatar_frame(data.new_topic_template)
@ -114,6 +121,7 @@ var post_message_cleanup = () => {
$(".comment-field").css("height", "48px");
$("#discussion-modal").modal("hide");
$("#no-discussions").addClass("hide");
$(".cancel-comment").addClass("hide");
}
var update_reply_count = (topic) => {
@ -122,23 +130,15 @@ var update_reply_count = (topic) => {
$(`[data-target='#t${topic}']`).find(".reply-count").text(reply_count);
}
var set_docname_if_missing = () => {
if ($("[data-docname='None']").length) {
frappe.call({
method: "frappe.website.doctype.discussion_topic.discussion_topic.get_docname",
args: {
"route": window.location.href.split("/").slice(-1)[0]
},
callback: (data) => {
$("[data-docname='None']").attr("data-docname", data.message);
}
})
}
}
var expand_first_discussion = () => {
$($(".discussions-parent .collapse")[0]).addClass("show");
$($(".discussions-sidebar [data-toggle='collapse']")[0]).attr("aria-expanded", true);
if ($(document).width() > 550) {
$($(".discussions-parent .collapse")[0]).addClass("show");
$($(".discussions-sidebar [data-toggle='collapse']")[0]).attr("aria-expanded", true);
}
else {
$("#discussion-group").addClass("hide");
}
}
var search_topic = (e) => {
@ -217,6 +217,7 @@ var submit_discussion = (e) => {
}
var login_from_discussion = (e) => {
e.preventDefault();
var redirect = $(e.currentTarget).attr("data-redirect") || window.location.href;
window.location.href = `/login?redirect-to=${redirect}`;
}
@ -249,3 +250,14 @@ var clear_comment_box = (e) => {
$(".discussion-on-page .comment-field").val("");
}
}
var hide_sidebar = () => {
$(".discussions-sidebar").addClass("hide");
$("#discussion-group").removeClass("hide");
}
var back_to_sidebar = () => {
$(".discussions-sidebar").removeClass("hide");
$("#discussion-group").addClass("hide");
$(".discussion-on-page").collapse("hide");
}

View file

@ -4,55 +4,55 @@
{% include "frappe/templates/discussions/topic_modal.html" %}
<div class="discussions-parent">
<div class="discussions-header">
<span class="course-home-headings">{{ _(title) }}</span>
{% if topics %}
{% include "frappe/templates/discussions/button.html" %}
{% endif %}
</div>
<div class="discussions-header">
<span class="course-home-headings">{{ _(title) }}</span>
{% if topics %}
{% include "frappe/templates/discussions/button.html" %}
{% endif %}
</div>
{% if topics %}
<div class="common-card-style thread-card course-content-parent" data-doctype="{{ doctype }}"
data-docname="{{ docname }}">
{% if topics %}
<div class="common-card-style thread-card discussions-card" data-doctype="{{ doctype }}"
data-docname="{{ docname }}">
<div class="discussions-sidebar">
{% include "frappe/templates/discussions/search.html" %}
{% for topic in topics %}
{% set replies = frappe.get_all("Discussion Reply", {"topic": topic.name})%}
{% include "frappe/templates/discussions/sidebar.html" %}
{% endfor %}
</div>
<div class="discussions-sidebar">
{% include "frappe/templates/discussions/search.html" %}
{% for topic in topics %}
{% set replies = frappe.get_all("Discussion Reply", {"topic": topic.name})%}
{% include "frappe/templates/discussions/sidebar.html" %}
{% endfor %}
</div>
<div class="mr-2" id="discussion-group">
{% include "frappe/templates/discussions/reply_section.html" %}
</div>
</div>
{% else %}
<div class="mr-2" id="discussion-group">
{% include "frappe/templates/discussions/reply_section.html" %}
</div>
</div>
{% else %}
<div id="no-discussions" class="common-card-style thread-card">
<div class="no-discussions">
<div class="font-weight-bold">No Discussions</div>
<div class="muted-text mt-3 mb-3">There are no discussions for this {{ doctype | lower }}, why don't you start
one! </div>
{% if frappe.session.user == "Guest" %}
<div class="button is-primary mt-3" id="login-from-discussion">Log In</div>
{% elif not condition %}
<div class="button is-primary mt-3" id="login-from-discussion" data-redirect="{{ redirect_to }}">
{{ button_name }}
</div>
{% else %}
{% include "frappe/templates/discussions/button.html" %}
{% endif %}
</div>
</div>
<div id="no-discussions" class="common-card-style thread-card">
<div class="no-discussions">
<div class="font-weight-bold">No {{ title }}</div>
<div class="small mt-3 mb-3">There are no {{ title | lower }} for this {{ doctype | lower }}, why don't you start
one! </div>
{% if frappe.session.user == "Guest" %}
<div class="button is-primary mt-3" id="login-from-discussion">Log In</div>
{% elif condition is defined and not condition %}
<a class="button is-primary mt-3" id="login-from-discussion" href="" data-redirect="{{ redirect_to }}">
{{ button_name }}
</a>
{% else %}
{% include "frappe/templates/discussions/button.html" %}
{% endif %}
</div>
</div>
</div>
{% endif %}
</div>
{% block script %}
<script> {% include "frappe/templates/discussions/discussions.js" %}</script>
<script> {% include "frappe/templates/discussions/discussions.js" %}</script>
{% endblock %}
{% block style %}
<style> {% include "frappe/templates/styles/discussion_style.css" %} </style>
<style> {% include "frappe/templates/styles/discussion_style.css" %} </style>
{% endblock %}

View file

@ -1,19 +1,19 @@
{% from "frappe/templates/includes/avatar_macro.html" import avatar %}
<div class="reply-card">
{% set member = frappe.db.get_value("User", reply.owner, ["name", "full_name", "username"], as_dict=True) %}
<div class="d-flex align-items-center muted-text">
{% if loop.index == 1 %}
{{ avatar(reply.owner) }}
{% endif %}
<a class="button-links {% if loop.index == 1 %} ml-2 {% endif %}" href="{{ get_profile_url(member.username) }}">
{{ member.full_name }}
</a>
<div class="ml-3 frappe-timestamp" data-timestamp="{{ reply.creation }}"> just now </div>
</div>
{% if loop.index == 1 %}
<div class="card-divider mt-3"></div>
{% else %}
<div class="mb-2"></div>
{% endif %}
<div class="reply-text">{{ frappe.utils.md_to_html(reply.reply) }}</div>
{% set member = frappe.db.get_value("User", reply.owner, ["name", "full_name", "username"], as_dict=True) %}
<div class="d-flex align-items-center small">
{% if loop.index == 1 %}
{{ avatar(reply.owner) }}
{% endif %}
<a class="button-links {% if loop.index == 1 %} ml-2 {% endif %}" {% if get_profile_url %} href="{{ get_profile_url(member.username) }}" {% endif %}>
{{ member.full_name }}
</a>
<div class="ml-3 frappe-timestamp" data-timestamp="{{ reply.creation }}"> {{ frappe.utils.pretty_date(reply.creation) }} </div>
</div>
{% if loop.index == 1 %}
<div class="card-divider mt-3"></div>
{% else %}
<div class="mb-2"></div>
{% endif %}
<div class="reply-text">{{ frappe.utils.md_to_html(reply.reply) }}</div>
</div>

View file

@ -2,32 +2,36 @@
{% set replies = frappe.get_all("Discussion Reply", {"topic": topic.name},
["reply", "owner", "creation"], order_by="creation")%}
{% if replies %}
<div class="collapse discussion-on-page" id="t{{ topic.name }}" data-topic="{{ topic.name }}"
data-parent="#discussion-group">
<div class="course-home-headings p-0">{{ topic.title }}</div>
{% for reply in replies %}
{% include "frappe/templates/discussions/reply_card.html" %}
data-parent="#discussion-group">
{% if loop.index == 1 %}
<div class="card-divider-dark mb-8"></div>
{% endif %}
{% endfor %}
<div class="button is-default back">
Back
</div>
{% if frappe.session.user == "Guest" or (condition is defined and not condition) %}
<div class="d-flex flex-column align-items-center muted-text">
Want to join the discussion?
{% if frappe.session.user == "Guest" %}
<div class="button is-primary mt-3 mb-3" id="login-from-discussion">Log In</div>
{% elif not condition %}
<div class="button is-primary mt-3 mb-3" id="login-from-discussion" data-redirect="{{ redirect_to }}">{{ button_name }}
</div>
{% endif %}
</div>
{% else %}
{% include "frappe/templates/discussions/comment_box.html" %}
{% endif %}
<div class="course-home-headings p-0">{{ topic.title }}</div>
{% for reply in replies %}
{% include "frappe/templates/discussions/reply_card.html" %}
{% if loop.index == 1 %}
<div class="card-divider-dark mb-8"></div>
{% endif %}
{% endfor %}
{% if frappe.session.user == "Guest" or (condition is defined and not condition) %}
<div class="d-flex flex-column align-items-center small">
Want to join the discussion?
{% if frappe.session.user == "Guest" %}
<div class="button is-primary mt-3 mb-3" id="login-from-discussion">Log In</div>
{% elif not condition %}
<div class="button is-primary mt-3 mb-3" id="login-from-discussion" data-redirect="{{ redirect_to }}">{{ button_name }}
</div>
{% endif %}
</div>
{% else %}
{% include "frappe/templates/discussions/comment_box.html" %}
{% endif %}
</div>
{% endif %}

View file

@ -1,9 +1,9 @@
<div class="form-group">
<div class="control-input-wrapper">
<div class="control-input">
<textarea type="text" autocomplete="off" class="input-with-feedback form-control search-field"
data-fieldtype="Text" data-fieldname="feedback_comments" placeholder="Search {{ title }}"
spellcheck="false"></textarea>
</div>
</div>
<div class="control-input-wrapper">
<div class="control-input">
<input type="text" autocomplete="off" class="input-with-feedback form-control search-field"
data-fieldtype="Text" data-fieldname="feedback_comments" placeholder="Search {{ title }}"
spellcheck="false"></input>
</div>
</div>
</div>

View file

@ -1,19 +1,19 @@
<div class="sidebar-parent">
<div class="sidebar-topic" data-target="#t{{ topic.name }}" data-toggle="collapse" aria-expanded="false">
<div class="discussion-topic-title">{{ topic.title }}</div>
<div class="mt-2 mb-3">
{% set creator = frappe.get_doc("User", topic.owner) %}
<span class="course-instructor ml-0">
{{ creator.full_name }}
</span>
<span class="muted-text pull-right">
<span class="mr-2">
<img src="/assets/community/icons/message.svg">
<span class="reply-count">{{ replies | length }}</span>
</span>
<span> {{ frappe.utils.format_date(topic.creation, "dd MMM YYYY") }} </span>
</span>
</div>
</div>
<div class="card-divider"></div>
<div class="sidebar-topic" data-target="#t{{ topic.name }}" data-toggle="collapse" aria-expanded="false">
<div class="discussion-topic-title">{{ topic.title }}</div>
<div class="sidebar-info">
{% set creator = frappe.get_doc("User", topic.owner) %}
<span class="course-instructor ml-0">
{{ creator.full_name }}
</span>
<span class="small">
<span class="mr-2">
<img src="/assets/frappe/icons/timeless/message.svg">
<span class="reply-count">{{ replies | length }}</span>
</span>
<span> {{ frappe.utils.format_date(topic.creation, "dd MMM YYYY") }} </span>
</span>
</div>
</div>
<div class="card-divider"></div>
</div>

View file

@ -1,15 +1,15 @@
<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 pl-0"> {{ cta_title }} Jan </div>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
{% include "frappe/templates/discussions/comment_box.html" %}
</div>
</div>
</div>
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<div class="modal-headings font-weight-bold"> {{ cta_title }} </div>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
{% include "frappe/templates/discussions/comment_box.html" %}
</div>
</div>
</div>
</div>

View file

@ -1,4 +1,3 @@
.thread-card {
flex-direction: column;
padding: 1rem;
@ -9,18 +8,18 @@
font-size: inherit;
color: inherit;
padding: 0.75rem 1rem;
border-radius: 4px;
resize: none;
}
.modal .comment-field {
height: 300px;
resize: none;
}
.discussion-on-page .comment-field {
height: 48px;
box-shadow: inset 0px 0px 4px rgba(0, 0, 0, 0.2);
border-radius: 4px;
}
.modal .comment-field {
height: 300px;
resize: none;
}
.modal .cancel-comment {
@ -57,7 +56,7 @@
.discussions-parent .search-field {
background-color: #E2E6E9;
background-image: url(/assets/community/icons/search.svg);
background-image: url(/assets/frappe/icons/timeless/search.svg);
background-repeat: no-repeat;
text-indent: 1.5rem;
background-position: 1rem 0.7rem;
@ -70,6 +69,19 @@
background-color: #F4F5F6;
padding: 0.75rem;
border-radius: 4px;
max-height: 700px;
overflow-y: auto;
}
@media (max-width: 550px) {
.discussions-sidebar {
padding: 1rem;
}
}
#discussion-group {
max-height: 700px;
overflow-y: auto;
}
.sidebar-topic {
@ -124,3 +136,123 @@
.reply-text h4 {
font-size: 1rem;
}
.sidebar-info {
margin-top: 0.5rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.course-home-headings {
font-weight: 600;
font-size: 22px;
line-height: 146%;
letter-spacing: -0.0175em;
color: #192734;
margin-bottom: 1rem;
padding: 0 1rem;
}
.common-card-style {
display: flex;
background: #FFFFFF;
border-radius: 8px;
position: relative;
border: 1px solid #EEF0F2;
box-shadow: 0 0px 4px 2px #19273405;
}
.button {
box-shadow: var(--btn-shadow);
border-radius: 4px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
width: fit-content;
padding: 8px 12px 8px;
font-size: 12px;
line-height: 135%;
letter-spacing: -0.011em;
border: none;
}
.is-primary {
background: var(--primary-color);
color: #FFFFFF;
}
.is-primary:hover {
text-decoration: none;
color: #FFFFFF;
}
.is-secondary {
background: #FFFFFF;
}
.is-secondary:hover {
text-decoration: none;
color: inherit;
}
.is-default {
background: #F4F5F6;
color: #1F272E;
}
.discussions-card {
display: grid;
grid-gap: 2rem;
grid-template-columns: 2fr minmax(600px, 5fr);
}
@media (max-width: 1024px) {
.discussions-card {
grid-template-columns: 3fr minmax(400px, 5fr);
}
}
@media (max-width: 768px) {
.discussions-card {
grid-template-columns: 4fr minmax(400px, 5fr);
}
}
@media (max-width: 550px) {
.discussions-card {
display: flex;
}
}
@media (max-width: 550px) {
.back {
margin-top: 0.5rem;
margin-bottom: 1rem;
}
}
@media (min-width: 550px) {
.back {
display: none;
}
}
.course-instructor {
margin: 0px 8px;
font-size: 12px;
line-height: 135%;
color: var(--text-color);
}
.card-divider {
border: 1px solid #EEF0F2;
margin-bottom: 1rem;
}
.card-divider-dark {
border: 1px solid #C8CFD5;
margin-bottom: 16px;
}

View file

@ -213,7 +213,6 @@ def today():
return nowdate()
def get_abbr(string, max_len=2):
print(string)
abbr=''
for part in string.split(' '):
if len(abbr) < max_len and part:

View file

@ -5,31 +5,34 @@ import frappe
from frappe.model.document import Document
class DiscussionTopic(Document):
pass
pass
@frappe.whitelist()
def submit_discussion(doctype, docname, reply, title, topic_name=None):
if topic_name:
save_message(reply, topic_name)
return topic_name
if topic_name:
save_message(reply, topic_name)
return topic_name
topic = frappe.get_doc({
"doctype": "Discussion Topic",
"title": title,
"reference_doctype": doctype,
"reference_docname": docname
})
topic.save(ignore_permissions=True)
save_message(reply, topic.name)
return topic.name
topic = frappe.get_doc({
"doctype": "Discussion Topic",
"title": title,
"reference_doctype": doctype,
"reference_docname": docname
})
topic.save(ignore_permissions=True)
save_message(reply, topic.name)
return topic.name
def save_message(reply, topic):
frappe.get_doc({
"doctype": "Discussion Reply",
"reply": reply,
"topic": topic
}).save(ignore_permissions=True)
frappe.get_doc({
"doctype": "Discussion Reply",
"reply": reply,
"topic": topic
}).save(ignore_permissions=True)
@frappe.whitelist()
@frappe.whitelist(allow_guest=True)
def get_docname(route):
return frappe.db.get_value("Web Page", {"route": route}, ["name"])
if not route:
route = frappe.db.get_single_value("Website Settings", "home_page")
return frappe.db.get_value("Web Page", {"route": route}, ["name"])

View file

@ -1,3 +1,3 @@
{% set docname = frappe.db.get_value("Web Page", {"route": ""}, ["name"])%}
{% set doctype = "Web Page" %}
{% include "frappe/templates/discussions/discussions_section.html" %}

View file

@ -1,12 +1,31 @@
{
"__islocal": true,
"__unsaved": 1,
"creation": "2021-08-30 12:42:31.550200",
"docstatus": 0,
"doctype": "Web Template",
"fields": [],
"fields": [
{
"fieldname": "title",
"fieldtype": "Data",
"label": "Title",
"reqd": 1
},
{
"fieldname": "cta_title",
"fieldtype": "Data",
"label": "CTA Title",
"reqd": 1
},
{
"fieldname": "docname",
"fieldtype": "Link",
"label": "Reference Docname",
"options": "Web Page",
"reqd": 1
}
],
"idx": 0,
"modified": "2021-08-30 12:42:31.550201",
"modified": "2021-09-16 12:11:56.140616",
"modified_by": "Administrator",
"module": "Website",
"name": "Discussions",