Browse Source
[8.0][mail_debrand] Remove branding from mail footers.
[8.0][mail_debrand] Remove branding from mail footers.
Those mail footers odoo sends that say "Sent by YourCompany using Odoo" now say nothing of Odoo.pull/51/head
Jairo Llopis
9 years ago
9 changed files with 243 additions and 0 deletions
-
60mail_debrand/README.rst
-
5mail_debrand/__init__.py
-
17mail_debrand/__openerp__.py
-
29mail_debrand/i18n/es.po
-
5mail_debrand/models/__init__.py
-
51mail_debrand/models/mail.py
-
BINmail_debrand/static/description/icon.png
-
5mail_debrand/tests/__init__.py
-
71mail_debrand/tests/test_mail.py
@ -0,0 +1,60 @@ |
|||||
|
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg |
||||
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
||||
|
:alt: License: AGPL-3 |
||||
|
|
||||
|
============ |
||||
|
Mail Debrand |
||||
|
============ |
||||
|
|
||||
|
This module modifies the functionality of emails to remove the Odoo branding. |
||||
|
|
||||
|
It also allows some context options to remove user and company signatures too. |
||||
|
|
||||
|
Usage |
||||
|
===== |
||||
|
|
||||
|
To use this module, you need to: |
||||
|
|
||||
|
* Install it. |
||||
|
* Send an email. |
||||
|
* Nobody will know it comes from Odoo. |
||||
|
|
||||
|
.. 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 |
||||
|
|
||||
|
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**>`_. |
||||
|
|
||||
|
Credits |
||||
|
======= |
||||
|
|
||||
|
Contributors |
||||
|
------------ |
||||
|
|
||||
|
* Rafael Blasco <rafabn@antiun.com> |
||||
|
* Jairo Llopis <yajo.sk8@gmail.com> |
||||
|
|
||||
|
Maintainer |
||||
|
---------- |
||||
|
|
||||
|
.. image:: https://odoo-community.org/logo.png |
||||
|
:alt: Odoo Community Association |
||||
|
:target: https://odoo-community.org |
||||
|
|
||||
|
This module is maintained by the OCA. |
||||
|
|
||||
|
OCA, or the Odoo Community Association, is a nonprofit organization whose |
||||
|
mission is to support the collaborative development of Odoo features and |
||||
|
promote its widespread use. |
||||
|
|
||||
|
To contribute to this module, please visit https://odoo-community.org. |
@ -0,0 +1,5 @@ |
|||||
|
# -*- 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 |
@ -0,0 +1,17 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# © 2016 Antiun Ingeniería S.L. - Jairo Llopis |
||||
|
# 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", |
||||
|
"category": "Social Network", |
||||
|
"website": "http://www.antiun.com", |
||||
|
"author": "Antiun Ingeniería S.L., Odoo Community Association (OCA)", |
||||
|
"license": "AGPL-3", |
||||
|
"application": False, |
||||
|
"installable": True, |
||||
|
"depends": [ |
||||
|
"mail", |
||||
|
], |
||||
|
} |
@ -0,0 +1,29 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * mail_debrand |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 8.0\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2016-03-04 15:42+0000\n" |
||||
|
"PO-Revision-Date: 2016-03-04 16:44+0100\n" |
||||
|
"Last-Translator: <>\n" |
||||
|
"Language-Team: \n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
"Plural-Forms: \n" |
||||
|
"Language: es\n" |
||||
|
"X-Generator: Poedit 1.8.6\n" |
||||
|
|
||||
|
#. module: mail_debrand |
||||
|
#: model:ir.model,name:mail_debrand.model_mail_notification |
||||
|
msgid "Notifications" |
||||
|
msgstr "Notificaciones" |
||||
|
|
||||
|
#. module: mail_debrand |
||||
|
#: code:addons/mail_debrand/models/mail.py:51 |
||||
|
#, python-format |
||||
|
msgid "Sent by %s" |
||||
|
msgstr "Enviado por %s" |
@ -0,0 +1,5 @@ |
|||||
|
# -*- 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 |
@ -0,0 +1,51 @@ |
|||||
|
# -*- 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 |
After Width: 128 | Height: 128 | Size: 9.2 KiB |
@ -0,0 +1,5 @@ |
|||||
|
# -*- 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 |
@ -0,0 +1,71 @@ |
|||||
|
# -*- 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) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue