Browse Source

[MIG] mail_debrand v9

pull/155/head
darshan-serpent 7 years ago
committed by Pedro M. Baeza
parent
commit
847e873e42
  1. 14
      mail_debrand/README.rst
  2. 3
      mail_debrand/__init__.py
  3. 14
      mail_debrand/__openerp__.py
  4. 109
      mail_debrand/data/mail_data.xml
  5. 5
      mail_debrand/models/__init__.py
  6. 51
      mail_debrand/models/mail.py
  7. 5
      mail_debrand/tests/__init__.py
  8. 71
      mail_debrand/tests/test_mail.py

14
mail_debrand/README.rst

@ -21,7 +21,7 @@ To use this module, you need to:
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/205/8.0
:target: https://runbot.odoo-community.org/runbot/205/9.0
Bug Tracker
===========
@ -29,11 +29,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/social/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smashing it by providing a detailed and welcomed `feedback
<https://github.com/OCA/
social/issues/new?body=module:%20
mail_debrand%0Aversion:%20
8.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
help us smashing it by providing a detailed and welcomed feedback.
Credits
=======
@ -41,8 +37,10 @@ Credits
Contributors
------------
* Rafael Blasco <rafabn@antiun.com>
* Jairo Llopis <yajo.sk8@gmail.com>
* Rafael Blasco <rafabn@tecnativa.com>
* Jairo Llopis <jairo.llopis@tecnativa.com>
* Jordi Ballester Alomar <jordi.ballester@eficent.com>
* Darshan Patel <darshan.patel.serpentcs@gmail.com>
Maintainer
----------

3
mail_debrand/__init__.py

@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# © 2016 Antiun Ingeniería S.L. - Jairo Llopis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models

14
mail_debrand/__openerp__.py

@ -1,16 +1,20 @@
# -*- coding: utf-8 -*-
# © 2016 Antiun Ingeniería S.L. - Jairo Llopis
# Copyright 2016 Tecnativa - Jairo Llopis
# Copyright 2017 SerpentCS - Darshan Patel
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Mail Debrand",
"summary": "Remove Odoo branding from email footers",
"version": "8.0.1.0.0",
"summary": "Remove Odoo branding in sent emails",
"version": "9.0.1.0.0",
"category": "Social Network",
"website": "http://www.antiun.com",
"author": "Antiun Ingeniería S.L., Odoo Community Association (OCA)",
"website": "https://www.tecnativa.com",
"author": "Tecnativa, "
"Eficent, "
"Odoo Community Association (OCA)",
"license": "AGPL-3",
"application": False,
"installable": True,
"data": ["data/mail_data.xml"],
"depends": [
"mail",
],

109
mail_debrand/data/mail_data.xml

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2017 Eficent Business and IT Consulting Services S.L.
Serpent Consulting Services Pvt. Ltd.
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl-3.0) -->
<odoo>
<!--Default Notification Email template -->
<record id="mail.mail_template_data_notification_email_default" model="mail.template">
<field name="body_html"><![CDATA[
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="potentialAction" itemscope itemtype="http://schema.org/ViewAction">
% if ctx.get('button_access'):
<link itemprop="target" href="${ctx['button_access']['url']}"/>
<link itemprop="url" href="${ctx['button_access']['url']}"/>
% endif
<meta itemprop="name" content="View ${ctx['model_name']}"/>
</div>
</div>
<div summary="o_mail_notification" style="padding:0px; width:600px; margin:0 auto; background: #FFFFFF repeat top /100%; color:#777777">
<table cellspacing="0" cellpadding="0" style="width:600px; border-collapse:collapse; background:inherit; color:inherit">
<tbody><tr>
<td valign="center" width="270" style="padding:5px 10px 5px 5px;font-size: 30px">
% if ctx.get('button_access'):
<a href="${ctx['button_access']['url']}" style="-webkit-user-select: none; padding: 5px 10px; font-size: 12px; line-height: 18px; color: #FFFFFF; border-color:#a24689; text-decoration: none; display: inline-block; margin-bottom: 0px; font-weight: 400; text-align: center; vertical-align: middle; cursor: pointer; white-space: nowrap; background-image: none; background-color: #a24689; border: 1px solid #a24689; border-radius:3px" class="o_default_snippet_text">${ctx['button_access']['title']}</a>
% endif
% if ctx.get('button_follow'):
<a href="${ctx['button_follow']['url']}" style="-webkit-user-select: none; padding: 5px 10px; font-size: 12px; line-height: 18px; color: #FFFFFF; border-color:#a24689; text-decoration: none; display: inline-block; margin-bottom: 0px; font-weight: 400; text-align: center; vertical-align: middle; cursor: pointer; white-space: nowrap; background-image: none; background-color: #a24689; border: 1px solid #a24689; border-radius:3px" class="o_default_snippet_text">${ctx['button_follow']['title']}</a>
% elif ctx.get('button_unfollow'):
<a href="${ctx['button_unfollow']['url']}" style="-webkit-user-select: none; padding: 5px 10px; font-size: 12px; line-height: 18px; color: #FFFFFF; border-color:#a24689; text-decoration: none; display: inline-block; margin-bottom: 0px; font-weight: 400; text-align: center; vertical-align: middle; cursor: pointer; white-space: nowrap; background-image: none; background-color: #a24689; border: 1px solid #a24689; border-radius:3px" class="o_default_snippet_text">${ctx['button_unfollow']['title']}</a>
% endif
% if not ctx.get('button_access') and not ctx.get('button_follow') and not ctx.get('button_unfollow') and ctx.get('model_name'):
<p style="padding: 5px 10px; font-size: 12px;">
About <strong>${ctx['model_name']}
% if ctx.get('record_name'):
: ${ctx['record_name']}
% endif
</strong>
</p>
% endif
</td>
<td valign="center" align="right" width="270" style="padding:5px 15px 5px 10px; font-size: 12px;">
<p>
% if ctx.get('actions'):
% for action in ctx['actions']:
<a href="${action['url']}" style="text-decoration:none; color: #a24689;"><strong>${action['title']}</strong></a>
%if cmp(len(ctx['actions']), 1) == 1 and cmp(len(ctx['actions']), loop.index) == 1:
|
% endif
% endfor
% else:
<strong>Sent by</strong>
% if ctx.get('website_url'):
<a href="${ctx['website_url']}" style="text-decoration:none; color: #a24689;">
% endif
<strong>${ctx.get('company_name')}</strong>
% if ctx.get('website_url'):
</a>
% endif
% endif
</p>
</td>
</tr>
</tbody></table>
</div>
<div style="padding:0px; width:600px; margin:0 auto; background: #FFFFFF repeat top /100%; color:#777777">
<table cellspacing="0" cellpadding="0" style="vertical-align:top; padding:0px; border-collapse:collapse; background:inherit; color:inherit">
<tbody><tr>
<td valign="top" style="width:600px; padding:5px 10px 5px 5px;">
<div>
<hr width="100%" style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0;margin:15px auto;padding:0">
</div>
</td>
</tr></tbody>
</table>
</div>
<div style="padding:0px; width:600px; margin:0 auto; background: #FFFFFF repeat top /100%;color:#777777">
<table cellspacing="0" cellpadding="0" border="0" style="margin: 0 auto; width:600px; border-collapse:collapse; background:inherit; color:inherit">
<tbody><tr>
<td style="padding:5px 10px 5px 5px;font-size: 14px;">
${object.body | safe}
% if ctx.get('tracking'):
<ul>
% for tracking in ctx['tracking']
<li>${tracking[0]} : ${tracking[1]} -&gt; ${tracking[2]}</li>
% endfor
</ul>
% endif
</td>
</tr></tbody>
</table>
</div>
% if ctx.get('signature'):
<div style="padding:0px; width:600px;margin:0 auto; background: #FFFFFF repeat top /100%;color:#777777">
<table cellspacing="0" cellpadding="0" border="0" style="margin: 0 auto; width:600px; border-collapse:collapse; background:inherit; color:inherit">
<tbody><tr>
<td style="padding:5px 10px 5px 5px;font-size: 14px; text-align: left;">
${ctx['signature'] | safe}
</td>
</tr></tbody>
</table>
</div>
% endif
]]>
</field>
</record>
</odoo>

5
mail_debrand/models/__init__.py

@ -1,5 +0,0 @@
# -*- coding: utf-8 -*-
# © 2016 Antiun Ingeniería S.L. - Jairo Llopis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import mail

51
mail_debrand/models/mail.py

@ -1,51 +0,0 @@
# -*- coding: utf-8 -*-
# © 2016 Antiun Ingeniería S.L. - Jairo Llopis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import _, api, models, tools
class MailNotification(models.Model):
_inherit = "mail.notification"
@api.model
def _get_signature_footer(self, user_id, res_model=None, res_id=None,
user_signature=True):
"""Generate signature footer only with the chosen parts.
Now, you can set ``skip_signature_user=True`` in the context to remove
the user signature (it's the same as ``user_signature=False``), and
``skip_signature_company=True`` to remove the company's.
"""
user = self.env["res.users"].browse(user_id)
parts = list()
if user_signature and not self.env.context.get("skip_signature_user"):
parts.append(self._get_signature_footer_user(user))
if not self.env.context.get("skip_signature_company"):
parts.append(self._get_signature_footer_company(user))
footer = ""
for part in parts:
footer = tools.append_content_to_html(
footer, part, plaintext=False)
return footer
@api.model
def _get_signature_footer_user(self, user):
"""User part of the signature."""
return user.signature if user.signature else "--<br />%s" % user.name
def _get_signature_footer_company(self, user):
"""Company part of the signature."""
website = user.company_id.website
if website:
if not website.startswith(('http:', 'https:')):
website = "http://" + website
company = ("<a href='%s'>%s</a>" %
(website, user.company_id.name))
else:
company = user.company_id.name
return _('Sent by %s') % company

5
mail_debrand/tests/__init__.py

@ -1,5 +0,0 @@
# -*- coding: utf-8 -*-
# © 2016 Antiun Ingeniería S.L. - Jairo Llopis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import test_mail

71
mail_debrand/tests/test_mail.py

@ -1,71 +0,0 @@
# -*- coding: utf-8 -*-
# © 2016 Antiun Ingeniería S.L. - Jairo Llopis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp.tests.common import TransactionCase
class SignatureCase(TransactionCase):
def setUp(self):
super(SignatureCase, self).setUp()
self.user = self.env.ref("base.user_demo").with_context(lang="en_US")
self.mail_notification = self.env["mail.notification"].with_context(
lang="en_US")
def signature(self, **context):
"""Get user's signature."""
return (self.mail_notification.with_context(**context)
._get_signature_footer(self.user.id))
def test_signature_user_custom(self):
"""User name does not appear in signature when it is custom."""
self.user.signature = u"¡Cüstom!"
signature = self.signature()
self.assertNotIn(self.user.name, signature)
def test_signature_user_empty(self):
"""User name appears in signature by default."""
self.user.signature = False
signature = self.signature()
self.assertIn(self.user.name, signature)
def test_signature_user_skip(self):
"""User signature is skipped."""
self.user.signature = "Skip me."
signature = self.signature(skip_signature_user=True)
self.assertNotIn(self.user.signature, signature)
def test_signature_company_website_custom(self):
"""Company website link appears in signature."""
sites = (
"HTTP://EXAMPLE.COM",
"http://example.com",
"https://example.com",
"HTTPS://example.com,"
)
for site in sites:
for url in (site, site[8:]):
self.user.company_id.website = url
signature = self.signature()
self.assertIn(url, signature)
self.assertIn(self.user.company_id.name, signature)
def test_signature_company_website_empty(self):
"""Company website link does not appear in signature."""
self.user.company_id.website = False
signature = self.signature()
self.assertNotIn("<a href", signature)
self.assertIn(self.user.company_id.name, signature)
def test_signature_company_skip(self):
"""Company signature is skipped."""
self.user.company_id.website = "http://example.com"
signature = self.signature(skip_signature_company=True)
self.assertNotIn(self.user.company_id.website, signature)
def test_unbranded(self):
"""No Odoo branding found."""
signature = self.signature()
self.assertNotIn("using", signature)
self.assertNotIn("odoo.com", signature)
self.assertNotIn("Odoo", signature)
Loading…
Cancel
Save