Moved Backup Manager and Social Login keys to the new Integrations Module, prepared frappe for Mandrill Integration
This commit is contained in:
parent
4441a69b97
commit
c079e27d3f
28 changed files with 597 additions and 315 deletions
|
|
@ -239,7 +239,7 @@ def msgprint(msg, small=0, raise_exception=0, as_table=False):
|
|||
msg = '<table border="1px" style="border-collapse: collapse" cellpadding="2px">' + ''.join(['<tr>'+''.join(['<td>%s</td>' % c for c in r])+'</tr>' for r in msg]) + '</table>'
|
||||
|
||||
if flags.print_messages:
|
||||
print "Message: " + repr(msg)
|
||||
print "Message: " + repr(msg).encode("utf-8")
|
||||
|
||||
message_log.append((small and '__small:' or '')+cstr(msg or ''))
|
||||
_raise_exception()
|
||||
|
|
|
|||
1
frappe/change_log/current/integrations.md
Normal file
1
frappe/change_log/current/integrations.md
Normal file
|
|
@ -0,0 +1 @@
|
|||
- Moved Backup Manager and Social Login Keys to the new **Integrations** module
|
||||
|
|
@ -72,4 +72,10 @@ def get_data():
|
|||
"type": "module",
|
||||
"system_manager": 1
|
||||
},
|
||||
"Integrations": {
|
||||
"color": "#36414C",
|
||||
"icon": "octicon octicon-plug",
|
||||
"type": "module",
|
||||
"system_manager": 1
|
||||
}
|
||||
}
|
||||
|
|
|
|||
23
frappe/config/integrations.py
Normal file
23
frappe/config/integrations.py
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
from __future__ import unicode_literals
|
||||
from frappe import _
|
||||
|
||||
def get_data():
|
||||
return [
|
||||
{
|
||||
"label": _("Documents"),
|
||||
"icon": "icon-star",
|
||||
"items": [
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "Social Login Keys",
|
||||
"description": _("Enter keys to enable login via Facebook, Google, GitHub."),
|
||||
},
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "Backup Manager",
|
||||
"description": _("Manage cloud backups on Dropbox"),
|
||||
"hide_count": True
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -208,12 +208,6 @@ def get_data():
|
|||
"description": _("Install Applications."),
|
||||
"icon": "icon-download"
|
||||
},
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "Backup Manager",
|
||||
"description": _("Manage cloud backups on Dropbox"),
|
||||
"hide_count": True
|
||||
},
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "Scheduler Log",
|
||||
|
|
|
|||
|
|
@ -77,11 +77,6 @@ def get_data():
|
|||
"type": "doctype",
|
||||
"name": "Website Theme",
|
||||
"description": _("List of themes for Website."),
|
||||
},
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "Social Login Keys",
|
||||
"description": _("Enter keys to enable login via Facebook, Google, GitHub."),
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,251 +1,267 @@
|
|||
{
|
||||
"allow_import": 1,
|
||||
"autoname": "naming_series:",
|
||||
"creation": "2013-01-29 10:47:14",
|
||||
"description": "Keep a track of all communications",
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Master",
|
||||
"allow_import": 1,
|
||||
"autoname": "naming_series:",
|
||||
"creation": "2013-01-29 10:47:14",
|
||||
"description": "Keep a track of all communications",
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Master",
|
||||
"fields": [
|
||||
{
|
||||
"default": "COMM-",
|
||||
"fieldname": "naming_series",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 1,
|
||||
"label": "Series",
|
||||
"options": "COMM-",
|
||||
"default": "COMM-",
|
||||
"fieldname": "naming_series",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 1,
|
||||
"label": "Series",
|
||||
"options": "COMM-",
|
||||
"permlevel": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "sent_or_received",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Sent or Received",
|
||||
"options": "Sent\nReceived",
|
||||
"permlevel": 0,
|
||||
"fieldname": "sent_or_received",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Sent or Received",
|
||||
"options": "Sent\nReceived",
|
||||
"permlevel": 0,
|
||||
"reqd": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "status",
|
||||
"fieldtype": "Select",
|
||||
"label": "Status",
|
||||
"options": "Open\nReplied\nArchived",
|
||||
"permlevel": 0,
|
||||
"fieldname": "status",
|
||||
"fieldtype": "Select",
|
||||
"label": "Status",
|
||||
"options": "Open\nReplied\nArchived",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "subject",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 0,
|
||||
"label": "Subject",
|
||||
"permlevel": 0,
|
||||
"description": "Integrations can use this field to set email delivery status",
|
||||
"fieldname": "delivery_status",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 1,
|
||||
"label": "Delivery Status",
|
||||
"options": "\nSent\nBounced\nOpened\nMarked As Spam\nRejected\nDelayed\nSoft-Bounced\nClicked\nRecipient Unsubscribed",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
{
|
||||
"fieldname": "subject",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 0,
|
||||
"label": "Subject",
|
||||
"permlevel": 0,
|
||||
"reqd": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_5",
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0,
|
||||
"fieldname": "column_break_5",
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "reference_doctype",
|
||||
"fieldtype": "Link",
|
||||
"label": "Reference DocType",
|
||||
"options": "DocType",
|
||||
"permlevel": 0,
|
||||
"fieldname": "reference_doctype",
|
||||
"fieldtype": "Link",
|
||||
"label": "Reference DocType",
|
||||
"options": "DocType",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "reference_name",
|
||||
"fieldtype": "Dynamic Link",
|
||||
"label": "Reference Name",
|
||||
"options": "reference_doctype",
|
||||
"permlevel": 0,
|
||||
"fieldname": "reference_name",
|
||||
"fieldtype": "Dynamic Link",
|
||||
"label": "Reference Name",
|
||||
"options": "reference_doctype",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "section_break_8",
|
||||
"fieldtype": "Section Break",
|
||||
"permlevel": 0,
|
||||
"fieldname": "section_break_8",
|
||||
"fieldtype": "Section Break",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "content",
|
||||
"fieldtype": "Text Editor",
|
||||
"label": "Content",
|
||||
"permlevel": 0,
|
||||
"reqd": 0,
|
||||
"fieldname": "content",
|
||||
"fieldtype": "Text Editor",
|
||||
"label": "Content",
|
||||
"permlevel": 0,
|
||||
"reqd": 0,
|
||||
"width": "400"
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "additional_info",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Additional Info",
|
||||
"fieldname": "additional_info",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Additional Info",
|
||||
"permlevel": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "recipients",
|
||||
"fieldtype": "Data",
|
||||
"label": "Recipients",
|
||||
"fieldname": "recipients",
|
||||
"fieldtype": "Data",
|
||||
"label": "Recipients",
|
||||
"permlevel": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "sender",
|
||||
"fieldtype": "Data",
|
||||
"label": "Sender",
|
||||
"fieldname": "phone_no",
|
||||
"fieldtype": "Data",
|
||||
"label": "Phone No.",
|
||||
"permlevel": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "sender_full_name",
|
||||
"fieldtype": "Data",
|
||||
"label": "Sender Full Name",
|
||||
"permlevel": 0,
|
||||
"fieldname": "communication_medium",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Communication Medium",
|
||||
"options": "\nChat\nPhone\nEmail\nSMS\nVisit\nOther",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_14",
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "communication_medium",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Communication Medium",
|
||||
"options": "\nChat\nPhone\nEmail\nSMS\nVisit\nOther",
|
||||
"fieldname": "sender",
|
||||
"fieldtype": "Data",
|
||||
"label": "Sender",
|
||||
"permlevel": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "phone_no",
|
||||
"fieldtype": "Data",
|
||||
"label": "Phone No.",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "section_break2",
|
||||
"fieldtype": "Section Break",
|
||||
"options": "simple",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break4",
|
||||
"fieldtype": "Column Break",
|
||||
"label": "By",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "email_account",
|
||||
"fieldtype": "Link",
|
||||
"label": "Email Account",
|
||||
"options": "Email Account",
|
||||
"permlevel": 0,
|
||||
"fieldname": "sender_full_name",
|
||||
"fieldtype": "Data",
|
||||
"label": "Sender Full Name",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
},
|
||||
{
|
||||
"default": "__user",
|
||||
"fieldname": "user",
|
||||
"fieldtype": "Link",
|
||||
"ignore_user_permissions": 1,
|
||||
"label": "User",
|
||||
"options": "User",
|
||||
"permlevel": 0,
|
||||
"fieldname": "section_break2",
|
||||
"fieldtype": "Section Break",
|
||||
"options": "simple",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break4",
|
||||
"fieldtype": "Column Break",
|
||||
"label": "By",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "email_account",
|
||||
"fieldtype": "Link",
|
||||
"label": "Email Account",
|
||||
"options": "Email Account",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
{
|
||||
"default": "__user",
|
||||
"fieldname": "user",
|
||||
"fieldtype": "Link",
|
||||
"ignore_user_permissions": 1,
|
||||
"label": "User",
|
||||
"options": "User",
|
||||
"permlevel": 0,
|
||||
"read_only": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break5",
|
||||
"fieldtype": "Column Break",
|
||||
"label": "On",
|
||||
"fieldname": "column_break5",
|
||||
"fieldtype": "Column Break",
|
||||
"label": "On",
|
||||
"permlevel": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"default": "Today",
|
||||
"fieldname": "communication_date",
|
||||
"fieldtype": "Datetime",
|
||||
"label": "Date",
|
||||
"default": "Today",
|
||||
"fieldname": "communication_date",
|
||||
"fieldtype": "Datetime",
|
||||
"label": "Date",
|
||||
"permlevel": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "_user_tags",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 1,
|
||||
"label": "User Tags",
|
||||
"no_copy": 1,
|
||||
"permlevel": 0,
|
||||
"fieldname": "_user_tags",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 1,
|
||||
"label": "User Tags",
|
||||
"no_copy": 1,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "unread_notification_sent",
|
||||
"fieldtype": "Check",
|
||||
"label": "Unread Notification Sent",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"default": "0",
|
||||
"fieldname": "unread_notification_sent",
|
||||
"fieldtype": "Check",
|
||||
"label": "Unread Notification Sent",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"read_only": 1
|
||||
}
|
||||
],
|
||||
"icon": "icon-comment",
|
||||
"idx": 1,
|
||||
"in_dialog": 0,
|
||||
"issingle": 0,
|
||||
"modified": "2015-03-23 02:33:55.289739",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"name": "Communication",
|
||||
"owner": "Administrator",
|
||||
],
|
||||
"icon": "icon-comment",
|
||||
"idx": 1,
|
||||
"in_dialog": 0,
|
||||
"issingle": 0,
|
||||
"modified": "2015-07-28 07:28:11.457131",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"name": "Communication",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 1,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Support Team",
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 1,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Support Team",
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Sales Manager",
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"amend": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Sales Manager",
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 1,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Sales User",
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 1,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Sales User",
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"search_fields": "subject",
|
||||
],
|
||||
"search_fields": "subject",
|
||||
"title_field": "subject"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ def get_comments(dt, dn, limit=100):
|
|||
|
||||
communications = frappe.db.sql("""select name,
|
||||
content as comment, sender as comment_by, creation,
|
||||
communication_medium as comment_type, subject,
|
||||
communication_medium as comment_type, subject, delivery_status,
|
||||
"Communication" as doctype
|
||||
from tabCommunication
|
||||
where reference_doctype=%s and reference_name=%s
|
||||
|
|
|
|||
|
|
@ -60,6 +60,9 @@ def send(recipients=None, sender=None, subject=None, message=None, reference_doc
|
|||
if reference_doctype and reference_name:
|
||||
unsubscribed = [d.email for d in frappe.db.get_all("Email Unsubscribe", "email",
|
||||
{"reference_doctype": reference_doctype, "reference_name": reference_name})]
|
||||
|
||||
unsubscribed += [d.email for d in frappe.db.get_all("Email Unsubscribe", "email",
|
||||
{"global_unsubscribe": 1})]
|
||||
else:
|
||||
unsubscribed = []
|
||||
|
||||
|
|
@ -159,14 +162,19 @@ def unsubscribe(doctype, name, email):
|
|||
if not verify_request():
|
||||
return
|
||||
|
||||
frappe.get_doc({
|
||||
"doctype": "Email Unsubscribe",
|
||||
"email": email,
|
||||
"reference_doctype": doctype,
|
||||
"reference_name": name
|
||||
}).insert(ignore_permissions=True)
|
||||
try:
|
||||
frappe.get_doc({
|
||||
"doctype": "Email Unsubscribe",
|
||||
"email": email,
|
||||
"reference_doctype": doctype,
|
||||
"reference_name": name
|
||||
}).insert(ignore_permissions=True)
|
||||
|
||||
frappe.db.commit()
|
||||
except frappe.DuplicateEntryError:
|
||||
frappe.db.rollback()
|
||||
|
||||
else:
|
||||
frappe.db.commit()
|
||||
|
||||
return_unsubscribed_page(email, doctype, name)
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,8 @@
|
|||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
|
|
@ -43,9 +44,10 @@
|
|||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
|
|
@ -63,9 +65,30 @@
|
|||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"fieldname": "global_unsubscribe",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Global Unsubscribe",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
|
|
@ -75,7 +98,7 @@
|
|||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"modified": "2015-03-18 09:41:20.216319",
|
||||
"modified": "2015-08-05 06:02:12.805282",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Email",
|
||||
"name": "Email Unsubscribe",
|
||||
|
|
@ -90,6 +113,7 @@
|
|||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
|
|
|
|||
|
|
@ -8,6 +8,32 @@ from frappe.model.document import Document
|
|||
from frappe import _
|
||||
|
||||
class EmailUnsubscribe(Document):
|
||||
def validate(self):
|
||||
if not self.global_unsubscribe and not (self.reference_doctype and self.reference_name):
|
||||
frappe.throw(_("Reference DocType and Reference Name are required"), frappe.MandatoryError)
|
||||
|
||||
if not self.global_unsubscribe and frappe.db.get_value(self.doctype, self.name, "global_unsubscribe"):
|
||||
frappe.throw(_("Delete this record to allow sending to this email address"))
|
||||
|
||||
if self.global_unsubscribe:
|
||||
if frappe.get_all("Email Unsubscribe",
|
||||
filters={"email": self.email, "global_unsubscribe": 1, "name": ["!=", self.name]}):
|
||||
frappe.throw(_("{0} already unsubscribed").format(self.email), frappe.DuplicateEntryError)
|
||||
|
||||
else:
|
||||
if frappe.get_all("Email Unsubscribe",
|
||||
filters={
|
||||
"email": self.email,
|
||||
"reference_doctype": self.reference_doctype,
|
||||
"reference_name": self.reference_name,
|
||||
"name": ["!=", self.name]
|
||||
}):
|
||||
frappe.throw(_("{0} already unsubscribed for {1} {2}").format(
|
||||
self.email, self.reference_doctype, self.reference_name),
|
||||
frappe.DuplicateEntryError)
|
||||
|
||||
def on_update(self):
|
||||
doc = frappe.get_doc(self.reference_doctype, self.reference_name)
|
||||
doc.add_comment("Label", _("Left this conversation"), comment_by=self.email)
|
||||
if self.reference_doctype and self.reference_name:
|
||||
doc = frappe.get_doc(self.reference_doctype, self.reference_name)
|
||||
doc.add_comment("Label", _("Left this conversation"), comment_by=self.email)
|
||||
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ class EMail:
|
|||
"Date": email.utils.formatdate(),
|
||||
"Reply-To": self.reply_to.encode("utf-8") if self.reply_to else None,
|
||||
"CC": ', '.join(self.cc).encode("utf-8") if self.cc else None,
|
||||
b'X-Frappe-Site': get_url().encode('utf-8')
|
||||
b'X-Frappe-Site': get_url().encode('utf-8'),
|
||||
}
|
||||
|
||||
# reset headers as values may be changed.
|
||||
|
|
@ -201,6 +201,10 @@ class EMail:
|
|||
del self.msg_root[key]
|
||||
self.msg_root[key] = val
|
||||
|
||||
# call hook to enable apps to modify msg_root before sending
|
||||
for hook in frappe.get_hooks("make_email_body_message"):
|
||||
frappe.get_attr(hook)(self)
|
||||
|
||||
def as_string(self):
|
||||
"""validate, build message and convert to string"""
|
||||
self.validate()
|
||||
|
|
|
|||
|
|
@ -83,11 +83,11 @@ def execute_cmd(cmd):
|
|||
if frappe.session['user'] == 'Guest':
|
||||
if (method not in frappe.guest_methods):
|
||||
frappe.msgprint(_("Not permitted"))
|
||||
raise frappe.PermissionError('Not Allowed, %s' % str(method))
|
||||
raise frappe.PermissionError('Not Allowed, {0}'.format(method))
|
||||
else:
|
||||
if not method in frappe.whitelisted:
|
||||
frappe.msgprint(_("Not permitted"))
|
||||
raise frappe.PermissionError('Not Allowed, %s' % str(method))
|
||||
raise frappe.PermissionError('Not Allowed, {0}'.format(method))
|
||||
|
||||
ret = frappe.call(method, **frappe.form_dict)
|
||||
|
||||
|
|
|
|||
0
frappe/integrations/doctype/__init__.py
Normal file
0
frappe/integrations/doctype/__init__.py
Normal file
|
|
@ -0,0 +1,221 @@
|
|||
{
|
||||
"allow_copy": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"creation": "2014-03-04 08:29:52",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "System",
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"fieldname": "facebook",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Facebook",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"fieldname": "facebook_client_id",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Facebook Client ID",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"fieldname": "facebook_client_secret",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Facebook Client Secret",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"fieldname": "google",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Google",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"fieldname": "google_client_id",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Google Client ID",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"fieldname": "google_client_secret",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Google Client Secret",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"fieldname": "github",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "GitHub",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"fieldname": "github_client_id",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "GitHub Client ID",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"fieldname": "github_client_secret",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "GitHub Client Secret",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"icon": "icon-signin",
|
||||
"idx": 1,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 1,
|
||||
"istable": 0,
|
||||
"modified": "2015-08-05 08:14:52.667728",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Integrations",
|
||||
"name": "Social Login Keys",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 0,
|
||||
"email": 0,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 0,
|
||||
"read": 1,
|
||||
"report": 0,
|
||||
"role": "System Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0
|
||||
}
|
||||
|
|
@ -457,7 +457,7 @@ class Document(BaseDocument):
|
|||
msgprint(msg)
|
||||
|
||||
if frappe.flags.print_messages:
|
||||
print self.as_dict()
|
||||
print self.as_json().encode("utf-8")
|
||||
|
||||
raise frappe.MandatoryError(", ".join((each[0] for each in missing)))
|
||||
|
||||
|
|
|
|||
|
|
@ -6,3 +6,4 @@ Custom
|
|||
Geo
|
||||
Desk
|
||||
Print
|
||||
Integrations
|
||||
|
|
@ -157,3 +157,15 @@ select.form-control {
|
|||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
}
|
||||
.form-headline .alert {
|
||||
font-size: 12px;
|
||||
border-color: #d1d8dd;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.delivery-status-indicator {
|
||||
display: inline-block;
|
||||
margin-top: -3px;
|
||||
margin-left: 1px;
|
||||
font-weight: 500;
|
||||
color: #8d99a6;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ frappe.ui.form.Dashboard = Class.extend({
|
|||
},
|
||||
set_headline_alert: function(text, alert_class, icon) {
|
||||
this.set_headline(repl('<div class="alert %(alert_class)s">%(icon)s%(text)s</div>', {
|
||||
"alert_class": alert_class || "alert-info",
|
||||
"alert_class": alert_class || "",
|
||||
"icon": icon ? '<i class="'+icon+'" /> ' : "",
|
||||
"text": text
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -10,15 +10,28 @@
|
|||
</span>
|
||||
</div>
|
||||
{% if(data.doctype=="Communication" || data.comment_type=="Comment") { %}
|
||||
<h6>
|
||||
<h6>
|
||||
<i class="{%= data.icon %} icon-fixed-width"></i>
|
||||
<span title="{%= data.comment_by %}">{%= data.fullname %}</span>
|
||||
<span class="text-muted" style="font-weight: normal;">
|
||||
– {%= data.comment_on %}</span>
|
||||
{% if(data.doctype=="Communication") { %}
|
||||
<span class="text-muted">–</span>
|
||||
<a href="#Form/{%= data.doctype %}/{%= data.name %}"
|
||||
class="text-muted">{%= __("Details") %}</a>
|
||||
<span class="text-muted">–</span>
|
||||
<a href="#Form/{%= data.doctype %}/{%= data.name %}"
|
||||
class="text-muted">
|
||||
{% if (data.delivery_status) {
|
||||
if (in_list(["Sent", "Opened", "Clicked"], data.delivery_status)) {
|
||||
var indicator_class = "green";
|
||||
} else {
|
||||
var indicator_class = "red";
|
||||
}
|
||||
%}
|
||||
<span class="indicator-right {%= indicator_class %} delivery-status-indicator"
|
||||
title="{%= data.delivery_status %}">
|
||||
{%= data.delivery_status %}</span>
|
||||
|
||||
{% } else { %} {%= __("Details") %} {% } %}
|
||||
</a>
|
||||
<a class="text-muted reply-link pull-right"
|
||||
data-name="{%= data.name %}">{%= __("Reply") %}</a>
|
||||
{% } %}
|
||||
|
|
|
|||
|
|
@ -204,3 +204,18 @@ select.form-control {
|
|||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
}
|
||||
|
||||
.form-headline .alert {
|
||||
font-size: @text-medium;
|
||||
border-color: @border-color;
|
||||
// background-color: @light-bg;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.delivery-status-indicator {
|
||||
display: inline-block;
|
||||
margin-top: -3px;
|
||||
margin-left: 1px;
|
||||
font-weight: 500;
|
||||
color: @text-muted;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
@modal-backdrop-bg: #334143;
|
||||
@light-yellow: #fffce7;
|
||||
@text-extra-muted: @border-color;
|
||||
@text-regular: 14px;
|
||||
@text-medium: 12px;
|
||||
@text-small: 10px;
|
||||
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ def make_boilerplate(dest, app_name):
|
|||
with open(os.path.join(dest, hooks.app_name, hooks.app_name, "config", "desktop.py"), "w") as f:
|
||||
f.write(encode(desktop_template.format(**hooks)))
|
||||
|
||||
|
||||
print "'{app}' created at {path}".format(app=app_name, path=os.path.join(dest, app_name))
|
||||
|
||||
|
||||
manifest_template = """include MANIFEST.in
|
||||
|
|
|
|||
|
|
@ -1,80 +0,0 @@
|
|||
{
|
||||
"creation": "2014-03-04 08:29:52",
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "System",
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "facebook",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Facebook",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "facebook_client_id",
|
||||
"fieldtype": "Data",
|
||||
"label": "Facebook Client ID",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "facebook_client_secret",
|
||||
"fieldtype": "Data",
|
||||
"label": "Facebook Client Secret",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "google",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Google",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "google_client_id",
|
||||
"fieldtype": "Data",
|
||||
"label": "Google Client ID",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "google_client_secret",
|
||||
"fieldtype": "Data",
|
||||
"label": "Google Client Secret",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "github",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "GitHub",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "github_client_id",
|
||||
"fieldtype": "Data",
|
||||
"label": "GitHub Client ID",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "github_client_secret",
|
||||
"fieldtype": "Data",
|
||||
"label": "GitHub Client Secret",
|
||||
"permlevel": 0
|
||||
}
|
||||
],
|
||||
"icon": "icon-signin",
|
||||
"idx": 1,
|
||||
"issingle": 1,
|
||||
"modified": "2015-02-05 05:11:46.875246",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Website",
|
||||
"name": "Social Login Keys",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"permlevel": 0,
|
||||
"read": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -28,3 +28,5 @@ html2text
|
|||
email_reply_parser
|
||||
click
|
||||
num2words
|
||||
watchdog
|
||||
pyopenssl
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue