Sfoglia il codice sorgente

[email] consistent email, website branding

version-14
Rushabh Mehta 10 anni fa
committed by Nabin Hait
parent
commit
ef0c6b44f7
10 ha cambiato i file con 249 aggiunte e 228 eliminazioni
  1. +3
    -3
      frappe/email/bulk.py
  2. +5
    -0
      frappe/email/email_body.py
  3. +1
    -0
      frappe/public/js/frappe/views/communication.js
  4. +1
    -1
      frappe/templates/emails/print_link.html
  5. +2
    -1
      frappe/templates/emails/standard.html
  6. +7
    -6
      frappe/templates/includes/footer/footer.html
  7. +2
    -1
      frappe/utils/data.py
  8. +5
    -0
      frappe/utils/verified_command.py
  9. +222
    -215
      frappe/website/doctype/website_settings/website_settings.json
  10. +1
    -1
      frappe/website/doctype/website_settings/website_settings.py

+ 3
- 3
frappe/email/bulk.py Vedi File

@@ -121,9 +121,9 @@ def check_bulk_limit(recipients):
BulkLimitCrossedError)

def add_unsubscribe_link(message, email, reference_doctype, reference_name, unsubscribe_url, unsubscribe_message):
unsubscribe_link = """<div style="padding: 7px; text-align: center;">
<a href="{unsubscribe_url}" style="color: #8D99A6; text-decoration: none;
target="_blank">{email}. {unsubscribe_message}.
unsubscribe_link = """<div style="padding: 7px; text-align: center; color: #8D99A6;">
{email} <a href="{unsubscribe_url}" style="color: #8D99A6; text-decoration: underline;
target="_blank">{unsubscribe_message}.
</a>
</div>""".format(unsubscribe_url = unsubscribe_url,
email= _("This email was sent to {0}").format(email),


+ 5
- 0
frappe/email/email_body.py Vedi File

@@ -235,6 +235,11 @@ def get_footer(footer=None):

footer += "<!--unsubscribe link here-->"

company_address = frappe.db.get_default("email_footer_address")

if company_address:
footer += '<div>{0}</div>'.format(company_address)

if not cint(frappe.db.get_default("disable_standard_email_footer")):
for default_mail_footer in frappe.get_hooks("default_mail_footer"):
footer += default_mail_footer


+ 1
- 0
frappe/public/js/frappe/views/communication.js Vedi File

@@ -395,6 +395,7 @@ frappe.views.CommunicationComposer = Class.extend({
$(this.dialog.fields_dict.recipients.input)
.bind( "keydown", function(event) {
if (event.keyCode === $.ui.keyCode.TAB &&
$(this).data( "autocomplete" ) &&
$(this).data( "autocomplete" ).menu.active ) {
event.preventDefault();
}


+ 1
- 1
frappe/templates/emails/print_link.html Vedi File

@@ -1,3 +1,3 @@
<p>
<a href="{{ url }}/{{ doctype }}/{{ name }}?format={{ print_format }}&key={{ key }}">{{ _("View this in your browser") }}</a>
<a href="{{ url }}/{{ doctype }}/{{ name }}?format={{ print_format|urlencode }}&key={{ key|urlencode }}">{{ _("View this in your browser") }}</a>
</p>

+ 2
- 1
frappe/templates/emails/standard.html Vedi File

@@ -12,7 +12,8 @@
</div>

<!-- footer -->
<div class="email-footer" style="margin-top: 30px; font-family: Helvetica, Arial, sans-serif; font-size: 11px;"
<div style="margin-top: 30px; font-family: Helvetica, Arial, sans-serif; font-size: 11px;
margin-bottom: 15px; border-top: 1px solid #d1d8dd;"
data-email-footer="true">
{{ footer }}
</div>


+ 7
- 6
frappe/templates/includes/footer/footer.html Vedi File

@@ -18,8 +18,9 @@
</div>
<div class="col-sm-4 text-right">
{% if facebook_share or google_plus_one or twitter_share or linked_in_share %}
<div class="social-icons">
<span>{{ share_text or "Share this page on: "}}</span>
<div class="social-icons text-muted small" style="margin-bottom: 15px;">
<span>
{{ share_text or "Share this page on: "}}</span>
{% if google_plus_one %}
<a href="https://plus.google.com/share?url={{ url }}"
target="_blank"><i class="icon-google-plus"></i></a>
@@ -38,13 +39,13 @@
{% endif %}
</div>
{% endif %}
{# powered #}
<p class="text-right footer-powered">
<div class="text-right footer-powered">
{% block powered %}
{% include "templates/includes/footer/footer_powered.html" %}
{% endblock %}
</p>
</div>
</div>
</div>
</div>
@@ -52,4 +53,4 @@
<section>
{% block extension %}{% include "templates/includes/footer/footer_extension.html" %}{% endblock %}
</section>
</footer>
</footer>

+ 2
- 1
frappe/utils/data.py Vedi File

@@ -578,7 +578,8 @@ def compare(val1, condition, val2):

def scrub_urls(html):
html = expand_relative_urls(html)
html = quote_urls(html)
# encoding should be responsibility of the composer
# html = quote_urls(html)
return html

def expand_relative_urls(html):


+ 5
- 0
frappe/utils/verified_command.py Vedi File

@@ -16,6 +16,8 @@ def get_signed_params(params):
if not isinstance(params, basestring):
params = urllib.urlencode(params)

print params

signature = hmac.new(params)
signature.update(get_secret())
return params + "&_signature=" + signature.hexdigest()
@@ -31,6 +33,9 @@ def verify_request():
params, signature = query_string.split("&_signature=")

given_signature = hmac.new(params.encode("utf-8"))

print params

given_signature.update(get_secret())
valid = signature == given_signature.hexdigest()



+ 222
- 215
frappe/website/doctype/website_settings/website_settings.json Vedi File

@@ -1,292 +1,299 @@
{
"creation": "2013-04-30 12:58:46",
"docstatus": 0,
"doctype": "DocType",
"document_type": "Other",
"creation": "2013-04-30 12:58:46",
"docstatus": 0,
"doctype": "DocType",
"document_type": "Other",
"fields": [
{
"fieldname": "sb0",
"fieldtype": "Section Break",
"label": "Landing Page",
"fieldname": "sb0",
"fieldtype": "Section Break",
"label": "Landing Page",
"permlevel": 0
},
{
"description": "Link that is the website home page. Standard Links (index, login, products, blog, about, contact)",
"fieldname": "home_page",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Home Page",
"options": "",
"permlevel": 0,
},
{
"description": "Link that is the website home page. Standard Links (index, login, products, blog, about, contact)",
"fieldname": "home_page",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Home Page",
"options": "",
"permlevel": 0,
"reqd": 0
},
},
{
"description": "If checked, the Home page will be the default Item Group for the website.",
"fieldname": "home_page_is_products",
"fieldtype": "Check",
"in_list_view": 1,
"label": "Home Page is Products",
"description": "If checked, the Home page will be the default Item Group for the website.",
"fieldname": "home_page_is_products",
"fieldtype": "Check",
"in_list_view": 1,
"label": "Home Page is Products",
"permlevel": 0
},
},
{
"fieldname": "cb4",
"fieldtype": "Column Break",
"fieldname": "cb4",
"fieldtype": "Column Break",
"permlevel": 0
},
},
{
"description": "Show title in browser window as \"Prefix - title\"",
"fieldname": "title_prefix",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Title Prefix",
"description": "Show title in browser window as \"Prefix - title\"",
"fieldname": "title_prefix",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Title Prefix",
"permlevel": 0
},
},
{
"fieldname": "section_break_6",
"fieldtype": "Section Break",
"permlevel": 0,
"fieldname": "section_break_6",
"fieldtype": "Section Break",
"permlevel": 0,
"precision": ""
},
{
"default": "Standard",
"fieldname": "website_theme",
"fieldtype": "Link",
"label": "Website Theme",
"options": "Website Theme",
"permlevel": 0,
},
{
"default": "Standard",
"fieldname": "website_theme",
"fieldtype": "Link",
"label": "Website Theme",
"options": "Website Theme",
"permlevel": 0,
"precision": ""
},
{
"fieldname": "website_theme_image",
"fieldtype": "Image",
"hidden": 1,
"label": "Website Theme Image",
"options": "website_theme_image_link",
"permlevel": 0,
},
{
"fieldname": "website_theme_image",
"fieldtype": "Image",
"hidden": 1,
"label": "Website Theme Image",
"options": "website_theme_image_link",
"permlevel": 0,
"precision": ""
},
},
{
"fieldname": "website_theme_image_link",
"fieldtype": "Small Text",
"hidden": 1,
"label": "Website Theme Image Link",
"permlevel": 0,
"fieldname": "website_theme_image_link",
"fieldtype": "Small Text",
"hidden": 1,
"label": "Website Theme Image Link",
"permlevel": 0,
"precision": ""
},
},
{
"description": "Add a banner to the site. (small banners are usually good)",
"fieldname": "banner",
"fieldtype": "Section Break",
"label": "Banner",
"description": "Add a banner to the site. (small banners are usually good)",
"fieldname": "banner",
"fieldtype": "Section Break",
"label": "Banner",
"permlevel": 0
},
},
{
"description": "Select an image of approx width 150px with a transparent background for best results.",
"fieldname": "banner_image",
"fieldtype": "Attach Image",
"label": "Banner Image",
"options": "",
"description": "Select an image of approx width 150px with a transparent background for best results.",
"fieldname": "banner_image",
"fieldtype": "Attach Image",
"label": "Banner Image",
"options": "",
"permlevel": 0
},
},
{
"fieldname": "set_banner_from_image",
"fieldtype": "Button",
"label": "Set Banner from Image",
"fieldname": "set_banner_from_image",
"fieldtype": "Button",
"label": "Set Banner from Image",
"permlevel": 0
},
},
{
"fieldname": "column_break_14",
"fieldtype": "Column Break",
"permlevel": 0,
"fieldname": "column_break_14",
"fieldtype": "Column Break",
"permlevel": 0,
"precision": ""
},
},
{
"description": "Banner is above the Top Menu Bar.",
"fieldname": "banner_html",
"fieldtype": "Small Text",
"label": "Banner HTML",
"description": "Banner is above the Top Menu Bar.",
"fieldname": "banner_html",
"fieldtype": "Small Text",
"label": "Banner HTML",
"permlevel": 0
},
},
{
"description": "Menu items in the Top Bar. For setting the color of the Top Bar, go to selected Website Theme.",
"fieldname": "top_bar",
"fieldtype": "Section Break",
"label": "Top Bar",
"description": "Menu items in the Top Bar. For setting the color of the Top Bar, go to selected Website Theme.",
"fieldname": "top_bar",
"fieldtype": "Section Break",
"label": "Top Bar",
"permlevel": 0
},
},
{
"description": "Brand is what appears on the top-left of the toolbar. If it is an image, make sure it\nhas a transparent background and use the &lt;img /&gt; tag. Keep size as 200px x 30px",
"fieldname": "brand_html",
"fieldtype": "Small Text",
"label": "Brand HTML",
"description": "Brand is what appears on the top-left of the toolbar. If it is an image, make sure it\nhas a transparent background and use the &lt;img /&gt; tag. Keep size as 200px x 30px",
"fieldname": "brand_html",
"fieldtype": "Small Text",
"label": "Brand HTML",
"permlevel": 0
},
},
{
"fieldname": "top_bar_items",
"fieldtype": "Table",
"label": "Top Bar Items",
"options": "Top Bar Item",
"fieldname": "top_bar_items",
"fieldtype": "Table",
"label": "Top Bar Items",
"options": "Top Bar Item",
"permlevel": 0
},
},
{
"description": "Sidebar Links for Home Page only",
"fieldname": "sidebar",
"fieldtype": "Section Break",
"label": "Sidebar",
"description": "Sidebar Links for Home Page only",
"fieldname": "sidebar",
"fieldtype": "Section Break",
"label": "Sidebar",
"permlevel": 0
},
},
{
"fieldname": "sidebar_items",
"fieldtype": "Table",
"label": "Sidebar Items",
"options": "Top Bar Item",
"fieldname": "sidebar_items",
"fieldtype": "Table",
"label": "Sidebar Items",
"options": "Top Bar Item",
"permlevel": 0
},
},
{
"fieldname": "footer",
"fieldtype": "Section Break",
"label": "Footer",
"fieldname": "footer",
"fieldtype": "Section Break",
"label": "Footer",
"permlevel": 0
},
},
{
"fieldname": "copyright",
"fieldtype": "Data",
"label": "Copyright",
"fieldname": "copyright",
"fieldtype": "Data",
"label": "Copyright",
"permlevel": 0
},
},
{
"description": "Address and other legal information you may want to put in the footer.",
"fieldname": "address",
"fieldtype": "Text Editor",
"label": "Address",
"description": "Address and other legal information you may want to put in the footer.",
"fieldname": "address",
"fieldtype": "Text Editor",
"label": "Address",
"permlevel": 0
},
},
{
"fieldname": "footer_items",
"fieldtype": "Table",
"label": "Footer Items",
"options": "Top Bar Item",
"fieldname": "footer_items",
"fieldtype": "Table",
"label": "Footer Items",
"options": "Top Bar Item",
"permlevel": 0
},
},
{
"fieldname": "integrations",
"fieldtype": "Section Break",
"label": "Integrations",
"fieldname": "hide_footer_signup",
"fieldtype": "Check",
"label": "Hide Footer Signup",
"permlevel": 0,
"precision": ""
},
{
"fieldname": "integrations",
"fieldtype": "Section Break",
"label": "Integrations",
"permlevel": 0
},
},
{
"description": "Add Google Analytics ID: eg. UA-89XXX57-1. Please search help on Google Analytics for more information.",
"fieldname": "google_analytics_id",
"fieldtype": "Data",
"label": "Google Analytics ID",
"description": "Add Google Analytics ID: eg. UA-89XXX57-1. Please search help on Google Analytics for more information.",
"fieldname": "google_analytics_id",
"fieldtype": "Data",
"label": "Google Analytics ID",
"permlevel": 0
},
},
{
"fieldname": "column_break_17",
"fieldtype": "Column Break",
"fieldname": "column_break_17",
"fieldtype": "Column Break",
"permlevel": 0
},
},
{
"fieldname": "google_plus_one",
"fieldtype": "Check",
"label": "Google Plus One",
"fieldname": "google_plus_one",
"fieldtype": "Check",
"label": "Google Plus One",
"permlevel": 0
},
},
{
"fieldname": "facebook_share",
"fieldtype": "Check",
"label": "Facebook Share",
"fieldname": "facebook_share",
"fieldtype": "Check",
"label": "Facebook Share",
"permlevel": 0
},
},
{
"fieldname": "linked_in_share",
"fieldtype": "Check",
"label": "Linked In Share",
"fieldname": "linked_in_share",
"fieldtype": "Check",
"label": "Linked In Share",
"permlevel": 0
},
},
{
"fieldname": "twitter_share",
"fieldtype": "Check",
"label": "Twitter Share",
"fieldname": "twitter_share",
"fieldtype": "Check",
"label": "Twitter Share",
"permlevel": 0
},
},
{
"description": "Tweet will be shared via your user account (if specified)",
"fieldname": "twitter_share_via",
"fieldtype": "Data",
"label": "Twitter Share via",
"description": "Tweet will be shared via your user account (if specified)",
"fieldname": "twitter_share_via",
"fieldtype": "Data",
"label": "Twitter Share via",
"permlevel": 0
},
},
{
"fieldname": "misc_section",
"fieldtype": "Section Break",
"label": "Misc",
"fieldname": "misc_section",
"fieldtype": "Section Break",
"label": "Misc",
"permlevel": 0
},
},
{
"description": "An icon file with .ico extension. Should be 16 x 16 px. Generated using a favicon generator. [<a href=\"http://favicon-generator.org/\" target=\"_blank\">favicon-generator.org</a>]",
"fieldname": "favicon",
"fieldtype": "Attach",
"label": "FavIcon",
"options": "",
"description": "An icon file with .ico extension. Should be 16 x 16 px. Generated using a favicon generator. [<a href=\"http://favicon-generator.org/\" target=\"_blank\">favicon-generator.org</a>]",
"fieldname": "favicon",
"fieldtype": "Attach",
"label": "FavIcon",
"options": "",
"permlevel": 0
},
{
"description": "Sub-domain provided by erpnext.com",
"fieldname": "subdomain",
"fieldtype": "Text",
"label": "Subdomain",
"permlevel": 0,
"read_only": 1,
},
{
"description": "Sub-domain provided by erpnext.com",
"fieldname": "subdomain",
"fieldtype": "Text",
"label": "Subdomain",
"permlevel": 0,
"read_only": 1,
"reqd": 0
},
},
{
"fieldname": "column_break_28",
"fieldtype": "Column Break",
"fieldname": "column_break_28",
"fieldtype": "Column Break",
"permlevel": 0
},
},
{
"description": "Disable Customer Signup link in Login page",
"fieldname": "disable_signup",
"fieldtype": "Check",
"label": "Disable Signup",
"description": "Disable Customer Signup link in Login page",
"fieldname": "disable_signup",
"fieldtype": "Check",
"label": "Disable Signup",
"permlevel": 0
}
],
"icon": "icon-cog",
"idx": 1,
"issingle": 1,
"max_attachments": 10,
"modified": "2015-02-21 08:48:35.438463",
"modified_by": "Administrator",
"module": "Website",
"name": "Website Settings",
"owner": "Administrator",
],
"icon": "icon-cog",
"idx": 1,
"issingle": 1,
"max_attachments": 10,
"modified": "2015-05-22 07:32:01.899112",
"modified_by": "Administrator",
"module": "Website",
"name": "Website Settings",
"owner": "Administrator",
"permissions": [
{
"cancel": 0,
"create": 1,
"delete": 0,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 0,
"role": "Website Manager",
"share": 1,
"submit": 0,
"cancel": 0,
"create": 1,
"delete": 0,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 0,
"role": "Website Manager",
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"delete": 0,
"permlevel": 1,
"read": 1,
"report": 0,
"role": "All",
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"delete": 0,
"permlevel": 1,
"read": 1,
"report": 0,
"role": "All",
"submit": 0
}
]
}
}

+ 1
- 1
frappe/website/doctype/website_settings/website_settings.py Vedi File

@@ -95,7 +95,7 @@ def get_website_settings():
settings = frappe.get_doc("Website Settings", "Website Settings")
for k in ["banner_html", "brand_html", "copyright", "twitter_share_via",
"favicon", "facebook_share", "google_plus_one", "twitter_share", "linked_in_share",
"disable_signup"]:
"disable_signup", "hide_footer_signup"]:
if hasattr(settings, k):
context[k] = settings.get(k)



Caricamento…
Annulla
Salva