[15.0-mail] [FIX] mail_debrand: text/plain issue + TypeError: object of type 'NoneType' has no len()

pull/939/head
Raf Ven 2022-07-19 12:29:02 +02:00
parent a3018b1a16
commit 67f0465818
4 changed files with 32 additions and 7 deletions

View File

@ -12,7 +12,7 @@
( for powerd by) form all the templates ( for powerd by) form all the templates
removes any 'odoo' that are in tempalte texts > 20characters removes any 'odoo' that are in tempalte texts > 20characters
""", """,
"version": "15.0.1.2.2", "version": "15.0.1.2.3",
"category": "Social Network", "category": "Social Network",
"website": "https://github.com/OCA/social", "website": "https://github.com/OCA/social",
"author": """Tecnativa, ForgeFlow, Onestein, Sodexis, Nexterp Romania, "author": """Tecnativa, ForgeFlow, Onestein, Sodexis, Nexterp Romania,

View File

@ -6,8 +6,9 @@
import re import re
from lxml import etree, html from lxml import etree, html
from markupsafe import Markup
from odoo import api, models from odoo import api, models, tools
class MailRenderMixin(models.AbstractModel): class MailRenderMixin(models.AbstractModel):
@ -20,9 +21,15 @@ class MailRenderMixin(models.AbstractModel):
return value return value
# value can be bytes type; ensure we get a proper string # value can be bytes type; ensure we get a proper string
if type(value) is bytes: if type(value) is bytes:
back_to_bytes = True
value = value.decode() value = value.decode()
else:
back_to_bytes = False
has_dev_odoo_link = re.search(
r"<a\s(.*)dev\.odoo\.com", value, flags=re.IGNORECASE
)
has_odoo_link = re.search(r"<a\s(.*)odoo\.com", value, flags=re.IGNORECASE) has_odoo_link = re.search(r"<a\s(.*)odoo\.com", value, flags=re.IGNORECASE)
if has_odoo_link: if has_odoo_link and not has_dev_odoo_link:
# We don't want to change what was explicitly added in the message body, # We don't want to change what was explicitly added in the message body,
# so we will only change what is before and after it. # so we will only change what is before and after it.
if to_keep: if to_keep:
@ -35,11 +42,12 @@ class MailRenderMixin(models.AbstractModel):
if remove_before and not remove_parent and previous is not None: if remove_before and not remove_parent and previous is not None:
# remove 'using' that is before <a and after </span> # remove 'using' that is before <a and after </span>
previous.tail = "" previous.tail = ""
if remove_parent and len(parent.getparent()): if remove_parent and parent.getparent() is not None:
# anchor <a href odoo has a parent powered by that must be removed # anchor <a href odoo has a parent powered by that must be removed
parent.getparent().remove(parent) parent.getparent().remove(parent)
else: else:
if parent.tag == "td": # also here can be powered by # also here can be powered by
if parent.tag == "td" and parent.getparent():
parent.getparent().remove(parent) parent.getparent().remove(parent)
else: else:
parent.remove(elem) parent.remove(elem)
@ -48,6 +56,8 @@ class MailRenderMixin(models.AbstractModel):
) )
if to_keep: if to_keep:
value = value.replace("<body_msg></body_msg>", to_keep) value = value.replace("<body_msg></body_msg>", to_keep)
if back_to_bytes:
value = value.encode()
return value return value
@api.model @api.model
@ -82,6 +92,7 @@ class MailRenderMixin(models.AbstractModel):
res_ids, res_ids,
engine=engine, engine=engine,
add_context=add_context, add_context=add_context,
options=options,
post_process=post_process, post_process=post_process,
) )
@ -91,8 +102,15 @@ class MailRenderMixin(models.AbstractModel):
return orginal_rendered return orginal_rendered
def _replace_local_links(self, html, base_url=None): def _replace_local_links(self, html, base_url=None):
message = super()._replace_local_links(html) message = super()._replace_local_links(html, base_url=base_url)
wrapper = Markup if isinstance(message, Markup) else str
message = tools.ustr(message)
if isinstance(message, Markup):
wrapper = Markup
message = re.sub( message = re.sub(
r"""(Powered by\s(.*)Odoo</a>)""", "<div>&nbsp;</div>", message r"""(Powered by\s(.*)Odoo</a>)""", "<div>&nbsp;</div>", message
) )
return message
return wrapper(message)

View File

@ -1,3 +1,9 @@
15.0.1.2.3 (2022-07-19)
~~~~~~~~~~~~~~~~~~~~~~~
* [FIX] https://github.com/OCA/social/issues/915
* [FIX] https://github.com/OCA/social/issues/936
12.0.1.0.0 (2018-11-06) 12.0.1.0.0 (2018-11-06)
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -68,3 +68,4 @@ class TestMailDebrandDigest(common.TransactionCase):
self.assertNotEqual(rendered_body, None) self.assertNotEqual(rendered_body, None)
self.assertNotEqual(rendered_body, False) self.assertNotEqual(rendered_body, False)
self.assertNotEqual(rendered_body, "") self.assertNotEqual(rendered_body, "")
self.assertNotIn("Powered by", rendered_body)