Mandrill integration editsversion-14
@@ -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() | |||
@@ -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 | |||
} | |||
} |
@@ -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, | |||
"precision": "" | |||
}, | |||
{ | |||
"fieldname": "status", | |||
"fieldtype": "Select", | |||
"label": "Status", | |||
"options": "Open\nReplied\nArchived", | |||
"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, | |||
"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": "sender_full_name", | |||
"fieldtype": "Data", | |||
"label": "Sender Full Name", | |||
"permlevel": 0, | |||
"precision": "" | |||
}, | |||
{ | |||
"fieldname": "section_break2", | |||
"fieldtype": "Section Break", | |||
"options": "simple", | |||
"fieldname": "section_break2", | |||
"fieldtype": "Section Break", | |||
"options": "simple", | |||
"permlevel": 0 | |||
}, | |||
}, | |||
{ | |||
"fieldname": "column_break4", | |||
"fieldtype": "Column Break", | |||
"label": "By", | |||
"fieldname": "column_break4", | |||
"fieldtype": "Column Break", | |||
"label": "By", | |||
"permlevel": 0 | |||
}, | |||
}, | |||
{ | |||
"fieldname": "email_account", | |||
"fieldtype": "Link", | |||
"label": "Email Account", | |||
"options": "Email Account", | |||
"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, | |||
}, | |||
{ | |||
"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) | |||
except frappe.DuplicateEntryError: | |||
frappe.db.rollback() | |||
frappe.db.commit() | |||
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, | |||
"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 | |||
"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,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 | |||
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 |