ソースを参照

[minor] minor fixes, feedback request url template

version-14
mbauskar 8年前
コミット
ebadc3f073
8個のファイルの変更146行の追加40行の削除
  1. +1
    -1
      frappe/core/doctype/feedback_request/feedback_request.py
  2. +61
    -1
      frappe/core/doctype/feedback_trigger/feedback_trigger.json
  3. +12
    -8
      frappe/core/doctype/feedback_trigger/feedback_trigger.py
  4. バイナリ
      frappe/public/images/star.png
  5. +1
    -1
      frappe/public/js/frappe/form/templates/form_sidebar.html
  6. +25
    -0
      frappe/templates/emails/feedback_request_url.html
  7. +18
    -6
      frappe/www/feedback.html
  8. +28
    -23
      frappe/www/feedback.py

+ 1
- 1
frappe/core/doctype/feedback_request/feedback_request.py ファイルの表示

@@ -27,7 +27,7 @@ def is_valid_feedback_request(key=None):
if not key: if not key:
return False return False


is_feedback_submitted = frappe.db.get_value("Feedback Request", {"key": key}, "is_feedback_submitted")
is_feedback_submitted = frappe.db.get_value("Feedback Request", { "key": key }, "is_feedback_submitted")
if is_feedback_submitted: if is_feedback_submitted:
return False return False
else: else:


+ 61
- 1
frappe/core/doctype/feedback_trigger/feedback_trigger.json ファイルの表示

@@ -22,6 +22,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Enabled", "label": "Enabled",
@@ -49,6 +51,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"length": 0, "length": 0,
@@ -75,6 +79,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Document Type", "label": "Document Type",
@@ -104,6 +110,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Email Field", "label": "Email Field",
@@ -131,6 +139,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Email Fieldname", "label": "Email Fieldname",
@@ -158,6 +168,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"length": 0, "length": 0,
@@ -185,6 +197,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Subject", "label": "Subject",
@@ -212,6 +226,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"length": 0, "length": 0,
@@ -228,6 +244,37 @@
"set_only_once": 0, "set_only_once": 0,
"unique": 0 "unique": 0
}, },
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "1",
"description": "Send Feedback Request only if there is at least one communication is available for the document.",
"fieldname": "check_communication",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Check Communication",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{ {
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
@@ -239,6 +286,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Condition", "label": "Condition",
@@ -266,6 +315,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"length": 0, "length": 0,
@@ -292,6 +343,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"length": 0, "length": 0,
@@ -319,6 +372,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Message", "label": "Message",
@@ -346,6 +401,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Message", "label": "Message",
@@ -373,6 +430,8 @@
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Example", "label": "Example",
@@ -402,7 +461,7 @@
"issingle": 0, "issingle": 0,
"istable": 0, "istable": 0,
"max_attachments": 0, "max_attachments": 0,
"modified": "2017-02-10 11:25:41.643832",
"modified": "2017-02-17 05:19:08.819230",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Core", "module": "Core",
"name": "Feedback Trigger", "name": "Feedback Trigger",
@@ -433,6 +492,7 @@
"quick_entry": 0, "quick_entry": 0,
"read_only": 0, "read_only": 0,
"read_only_onload": 0, "read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC", "sort_order": "DESC",
"title_field": "document_type", "title_field": "document_type",


+ 12
- 8
frappe/core/doctype/feedback_trigger/feedback_trigger.py ファイルの表示

@@ -36,7 +36,7 @@ def send_feedback_request(reference_doctype, reference_name, trigger=None, detai
feedback_request, url = get_feedback_request_url(reference_doctype, feedback_request, url = get_feedback_request_url(reference_doctype,
reference_name, details.get("recipients"), trigger) reference_name, details.get("recipients"), trigger)


feedback_url = "Please click <a href='{url}'>here</a> to submit your feedback.".format(url=url)
feedback_url = frappe.render_template("templates/emails/feedback_request_url.html", { "url": url })


# appending feedback url to message body # appending feedback url to message body
details.update({ "message": "{message}<br>{feedback_url}".format( details.update({ "message": "{message}<br>{feedback_url}".format(
@@ -80,13 +80,17 @@ def get_feedback_request_details(reference_doctype, reference_name, trigger=None
context = get_context(doc) context = get_context(doc)


recipients = doc.get(feedback_trigger.email_fieldname, None) recipients = doc.get(feedback_trigger.email_fieldname, None)
communications = frappe.get_all("Communication", filters={
"reference_doctype": reference_doctype,
"reference_name": reference_name,
"communication_type": "Communication"
}, fields=["name"])
if feedback_trigger.check_communication:
communications = frappe.get_all("Communication", filters={
"reference_doctype": reference_doctype,
"reference_name": reference_name,
"communication_type": "Communication"
}, fields=["name"])

if len(communications) < 1:
frappe.throw(_("No communication found for the document"))


if recipients and eval(feedback_trigger.condition, context) and len(communications) >= 1:
if recipients and eval(feedback_trigger.condition, context):
subject = feedback_trigger.subject subject = feedback_trigger.subject
context.update({ "feedback_trigger": feedback_trigger }) context.update({ "feedback_trigger": feedback_trigger })


@@ -118,7 +122,7 @@ def get_feedback_request_url(reference_doctype, reference_name, recipients, trig
doctype=reference_doctype, doctype=reference_doctype,
docname=reference_name, docname=reference_name,
email_id=recipients, email_id=recipients,
nonce=feedback_request.name
nonce=feedback_request.key
) )


return [ feedback_request.name, feedback_url ] return [ feedback_request.name, feedback_url ]


バイナリ
frappe/public/images/star.png ファイルの表示

変更前 変更後
幅: 27  |  高さ: 26  |  サイズ: 462 B

+ 1
- 1
frappe/public/js/frappe/form/templates/form_sidebar.html ファイルの表示

@@ -16,7 +16,7 @@
<li class="divider"></li> <li class="divider"></li>
<li style="position: relative;"> <li style="position: relative;">
<a class="strong badge-hover"> <a class="strong badge-hover">
<span>{%= __("Feedback Rating") %}</span>
<span>{%= __("Feedback") %}</span>
</a> </a>
</li> </li>
<li class="rating-icons"></li> <li class="rating-icons"></li>


+ 25
- 0
frappe/templates/emails/feedback_request_url.html ファイルの表示

@@ -0,0 +1,25 @@
<html>
<body>
<div align="center">
Please take a few minute to leave a feedback - we would really appreciate it!<br>
Rating (select a star)
<div class="user-ratings">
<a class="rating" style="text-decoration: none; color: black" href="{{url}}&rating=1">
<img src="/assets/frappe/images/star.png">
</a>
<a class="rating" style="text-decoration: none; color: black" href="{{url}}&rating=2">
<img src="/assets/frappe/images/star.png">
</a>
<a class="rating" style="text-decoration: none; color: black" href="{{url}}&rating=3">
<img src="/assets/frappe/images/star.png">
</a>
<a class="rating" style="text-decoration: none; color: black" href="{{url}}&rating=4">
<img src="/assets/frappe/images/star.png">
</a>
<a class="rating" style="text-decoration: none; color: black" href="{{url}}&rating=5">
<img src="/assets/frappe/images/star.png">
</a>
</div>
</div>
</body>
</html>

+ 18
- 6
frappe/www/feedback.html ファイルの表示

@@ -49,22 +49,31 @@
this.key = get_url_arg("key"); this.key = get_url_arg("key");
this.reference_name = get_url_arg("reference_name"); this.reference_name = get_url_arg("reference_name");
this.reference_doctype = get_url_arg("reference_doctype"); this.reference_doctype = get_url_arg("reference_doctype");
this.sender = get_url_arg("email")
this.sender = get_url_arg("email");
this.rating = get_url_arg("rating") || 0;


me.bind_events();
// set ratings
console.log(this.rating)
this.set_ratings_icon(this.rating)

this.bind_events();
$("#feedback-msg").empty().html(__("Please share your feedback for {0}", [me.reference_name])); $("#feedback-msg").empty().html(__("Please share your feedback for {0}", [me.reference_name]));
}, },


set_ratings_icon: function(idx) {
$('.star-icon.fa-star').removeClass('fa-star').addClass('fa-star-o');
for(var i=0; i<parseInt(idx); i++) {
$($('.star-icon').get(i)).removeClass('fa-star-o').addClass('fa-star');
}
},

bind_events: function() { bind_events: function() {
// bind ratings on hover // bind ratings on hover
var me = this; var me = this;


$('.star-icon').hover(function() { $('.star-icon').hover(function() {
var idx = $(this).attr('data-idx'); var idx = $(this).attr('data-idx');
$('.star-icon.fa-star').removeClass('fa-star').addClass('fa-star-o');
for(var i=0; i<parseInt(idx); i++) {
$($('.star-icon').get(i)).removeClass('fa-star-o').addClass('fa-star');
}
me.set_ratings_icon(idx);
}); });


// bind submit button // bind submit button
@@ -72,6 +81,9 @@
if(!$('.star-icon.fa-star').length) { if(!$('.star-icon.fa-star').length) {
frappe.msgprint(__("Please give a rating.")); frappe.msgprint(__("Please give a rating."));
return; return;
} else if(!$('.feedback-text').val().length){
frappe.msgprint(__("Please give a detailed feebdack."));
return;
} }


frappe.call({ frappe.call({


+ 28
- 23
frappe/www/feedback.py ファイルの表示

@@ -25,29 +25,34 @@ def accept(key, sender, reference_doctype, reference_name, feedback, rating):
if not reference_doctype and not reference_name: if not reference_doctype and not reference_name:
frappe.throw("Invalid Reference Doctype, Reference Name") frappe.throw("Invalid Reference Doctype, Reference Name")


if not rating or not feedback:
frappe.throw("Please give both Rating and Detailed Feedback")

if not is_valid_feedback_request(key): if not is_valid_feedback_request(key):
frappe.throw("Link is expired") frappe.throw("Link is expired")


feedback_request = frappe.db.get_value("Feedback Request", {"key": key})

communication = frappe.get_doc({
"rating": rating,
"sender": sender,
"status": "Closed",
"feedback": feedback,
"doctype": "Communication",
"sent_or_received": "Received",
"communication_type": "Feedback",
"reference_name": reference_name,
"feedback_request": feedback_request,
"reference_doctype": reference_doctype,
"subject": "Feedback for {0} {1}".format(reference_doctype, reference_name),
}).insert(ignore_permissions=True)

doc = frappe.get_doc("Feedback Request", feedback_request)
doc.is_feedback_submitted = 1
doc.rating = rating
doc.reference_communication = communication.name
doc.save(ignore_permissions=True)

return True
try:
feedback_request = frappe.db.get_value("Feedback Request", {"key": key})

communication = frappe.get_doc({
"rating": rating,
"sender": sender,
"status": "Closed",
"feedback": feedback,
"doctype": "Communication",
"sent_or_received": "Received",
"communication_type": "Feedback",
"reference_name": reference_name,
"feedback_request": feedback_request,
"reference_doctype": reference_doctype,
"subject": "Feedback for {0} {1}".format(reference_doctype, reference_name),
}).insert(ignore_permissions=True)

doc = frappe.get_doc("Feedback Request", feedback_request)
doc.is_feedback_submitted = 1
doc.rating = rating
doc.reference_communication = communication.name
doc.save(ignore_permissions=True)
return True
except Exception as e:
frappe.throw("Can not submit feedback, Please try again later")

読み込み中…
キャンセル
保存