diff --git a/frappe/core/doctype/feedback/__init__.py b/frappe/core/doctype/feedback/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frappe/core/doctype/feedback/feedback.js b/frappe/core/doctype/feedback/feedback.js new file mode 100644 index 0000000000..131f0e19d8 --- /dev/null +++ b/frappe/core/doctype/feedback/feedback.js @@ -0,0 +1,8 @@ +// Copyright (c) 2021, Frappe Technologies and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Feedback', { + // refresh: function(frm) { + + // } +}); diff --git a/frappe/core/doctype/feedback/feedback.json b/frappe/core/doctype/feedback/feedback.json new file mode 100644 index 0000000000..cf8a180e27 --- /dev/null +++ b/frappe/core/doctype/feedback/feedback.json @@ -0,0 +1,86 @@ +{ + "actions": [], + "creation": "2021-06-03 19:02:55.328423", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "reference_doctype", + "reference_name", + "column_break_3", + "email", + "rating", + "section_break_6", + "feedback" + ], + "fields": [ + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fieldname": "email", + "fieldtype": "Data", + "label": "Email", + "reqd": 1 + }, + { + "fieldname": "rating", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Rating", + "precision": "1", + "reqd": 1 + }, + { + "fieldname": "section_break_6", + "fieldtype": "Section Break" + }, + { + "fieldname": "feedback", + "fieldtype": "Small Text", + "label": "Feedback", + "reqd": 1 + }, + { + "fieldname": "reference_doctype", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Reference Document Type", + "options": "\nBlog Post" + }, + { + "fieldname": "reference_name", + "fieldtype": "Dynamic Link", + "in_list_view": 1, + "label": "Reference Name", + "options": "reference_doctype", + "reqd": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-06-14 15:11:26.005805", + "modified_by": "Administrator", + "module": "Core", + "name": "Feedback", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "reference_name", + "track_changes": 1 +} \ No newline at end of file diff --git a/frappe/core/doctype/feedback/feedback.py b/frappe/core/doctype/feedback/feedback.py new file mode 100644 index 0000000000..655bed6eb1 --- /dev/null +++ b/frappe/core/doctype/feedback/feedback.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Frappe Technologies and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class Feedback(Document): + pass diff --git a/frappe/core/doctype/feedback/test_feedback.py b/frappe/core/doctype/feedback/test_feedback.py new file mode 100644 index 0000000000..31e5d751e7 --- /dev/null +++ b/frappe/core/doctype/feedback/test_feedback.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Frappe Technologies and Contributors +# See license.txt + +# import frappe +import unittest + +class TestFeedback(unittest.TestCase): + pass diff --git a/frappe/templates/includes/feedback/__init__.py b/frappe/templates/includes/feedback/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frappe/templates/includes/feedback/feedback.html b/frappe/templates/includes/feedback/feedback.html new file mode 100644 index 0000000000..a5282a9df4 --- /dev/null +++ b/frappe/templates/includes/feedback/feedback.html @@ -0,0 +1,173 @@ +
{0} ({1})
".format(feedback.feedback, feedback.rating) + + "".format(frappe.utils.get_request_site_address(), + feedback.name, + _("View Feedback"))) + + # notify creator + frappe.sendmail( + recipients=frappe.db.get_value('User', doc.owner, 'email') or doc.owner, + subject=subject, + message=message, + reference_doctype=doc.doctype, + reference_name=doc.name + ) diff --git a/frappe/website/doctype/blog_post/blog_post.json b/frappe/website/doctype/blog_post/blog_post.json index 909cecf867..c2491ee5a4 100644 --- a/frappe/website/doctype/blog_post/blog_post.json +++ b/frappe/website/doctype/blog_post/blog_post.json @@ -18,6 +18,7 @@ "featured", "hide_cta", "disable_comments", + "disable_feedback", "section_break_5", "blog_intro", "content_type", @@ -191,6 +192,13 @@ "fieldtype": "Data", "label": "Meta Title", "length": 60 + }, + { + "default": "0", + "description": "Feedback on this blog post will be disabled if checked.", + "fieldname": "disable_feedback", + "fieldtype": "Check", + "label": "Disable Feedback" } ], "has_web_view": 1, @@ -200,7 +208,7 @@ "is_published_field": "published", "links": [], "max_attachments": 5, - "modified": "2020-12-23 14:28:36.311389", + "modified": "2021-06-14 13:50:02.109719", "modified_by": "Administrator", "module": "Website", "name": "Blog Post", diff --git a/frappe/website/doctype/blog_post/blog_post.py b/frappe/website/doctype/blog_post/blog_post.py index bfccc0bbc7..4dde5521d7 100644 --- a/frappe/website/doctype/blog_post/blog_post.py +++ b/frappe/website/doctype/blog_post/blog_post.py @@ -104,6 +104,7 @@ class BlogPost(WebsiteGenerator): context.metatags["image"] = self.meta_image or image or None self.load_comments(context) + self.load_feedback(context) context.category = frappe.db.get_value("Blog Category", context.doc.blog_category, ["title", "route"], as_dict=1) @@ -151,6 +152,17 @@ class BlogPost(WebsiteGenerator): else: context.comment_text = _('{0} comments').format(len(context.comment_list)) + def load_feedback(self, context): + feedback = frappe.get_all('Feedback', + fields=['email', 'feedback', 'rating'], + filters=dict( + reference_doctype=self.doctype, + reference_name=self.name, + email=frappe.session.user + ) + ) + context.user_feedback = feedback[0] if feedback else '' + def set_read_time(self): content = self.content or self.content_html or '' if self.content_type == "Markdown": diff --git a/frappe/website/doctype/blog_post/templates/blog_post.html b/frappe/website/doctype/blog_post/templates/blog_post.html index dad8b97164..4678622062 100644 --- a/frappe/website/doctype/blog_post/templates/blog_post.html +++ b/frappe/website/doctype/blog_post/templates/blog_post.html @@ -65,6 +65,11 @@ {% include 'templates/includes/comments/comments.html' %} {% endif %} + {% if not disable_feedback %} +