From 1fbd15f88c52c8514b7a81bc8e5399764ddadc62 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Mon, 15 May 2017 16:52:27 +0200 Subject: [PATCH] [MIG] mail_debrand There's no commits preservation, as the module doesn't serve as is on v9. --- mail_debrand/README.rst | 73 +++++++ mail_debrand/__init__.py | 4 + mail_debrand/__openerp__.py | 21 ++ mail_debrand/i18n/es.po | 34 ++++ mail_debrand/models/__init__.py | 4 + mail_debrand/models/mail_template.py | 43 ++++ mail_debrand/static/description/icon.png | Bin 0 -> 5367 bytes mail_debrand/static/description/icon.svg | 248 +++++++++++++++++++++++ mail_debrand/tests/__init__.py | 4 + mail_debrand/tests/test_mail_debrand.py | 26 +++ 10 files changed, 457 insertions(+) create mode 100644 mail_debrand/README.rst create mode 100644 mail_debrand/__init__.py create mode 100644 mail_debrand/__openerp__.py create mode 100644 mail_debrand/i18n/es.po create mode 100644 mail_debrand/models/__init__.py create mode 100644 mail_debrand/models/mail_template.py create mode 100644 mail_debrand/static/description/icon.png create mode 100644 mail_debrand/static/description/icon.svg create mode 100644 mail_debrand/tests/__init__.py create mode 100644 mail_debrand/tests/test_mail_debrand.py diff --git a/mail_debrand/README.rst b/mail_debrand/README.rst new file mode 100644 index 00000000..d9f21516 --- /dev/null +++ b/mail_debrand/README.rst @@ -0,0 +1,73 @@ +.. 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/10.0 + + +Known issues / Roadmap +====================== + +* This module relies on the translation of the strings here in this module that + must match the mail notification template translation on Odoo core, + specifically the words "using" and "Odoo". + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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. + +Credits +======= + +Contributors +------------ + +* Rafael Blasco +* Jairo Llopis +* Jordi Ballester Alomar +* Darshan Patel +* Pedro M. Baeza + +Images +------ + +* https://openclipart.org/detail/29117/unread-mail-icon +* https://openclipart.org/detail/147961/panneau-interdit-forbidden-road-sign-basic + +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. diff --git a/mail_debrand/__init__.py b/mail_debrand/__init__.py new file mode 100644 index 00000000..a77a6fcb --- /dev/null +++ b/mail_debrand/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/mail_debrand/__openerp__.py b/mail_debrand/__openerp__.py new file mode 100644 index 00000000..9445ac5d --- /dev/null +++ b/mail_debrand/__openerp__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Tecnativa - Jairo Llopis +# Copyright 2017 SerpentCS - Darshan Patel +# Copyright 2017 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Mail Debrand", + "summary": "Remove Odoo branding in sent emails", + "version": "10.0.1.0.0", + "category": "Social Network", + "website": "https://www.tecnativa.com", + "author": "Tecnativa, " + "Eficent, " + "Odoo Community Association (OCA)", + "license": "AGPL-3", + "installable": True, + "depends": [ + "mail", + ], +} diff --git a/mail_debrand/i18n/es.po b/mail_debrand/i18n/es.po new file mode 100644 index 00000000..d0eb1d65 --- /dev/null +++ b/mail_debrand/i18n/es.po @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_debrand +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-15 14:50+0000\n" +"PO-Revision-Date: 2017-05-15 14:50+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mail_debrand +#: model:ir.model,name:mail_debrand.model_mail_template +msgid "Email Templates" +msgstr "Plantillas de correo electrónico" + +#. module: mail_debrand +#: code:addons/mail_debrand/models/mail_template.py:26 +#, python-format +msgid "Odoo" +msgstr "Odoo" + +#. module: mail_debrand +#: code:addons/mail_debrand/models/mail_template.py:25 +#, python-format +msgid "using" +msgstr "usando" + diff --git a/mail_debrand/models/__init__.py b/mail_debrand/models/__init__.py new file mode 100644 index 00000000..c290298c --- /dev/null +++ b/mail_debrand/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import mail_template diff --git a/mail_debrand/models/mail_template.py b/mail_debrand/models/mail_template.py new file mode 100644 index 00000000..d4b984db --- /dev/null +++ b/mail_debrand/models/mail_template.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import re +from odoo import _, api, models + + +class MailTemplate(models.Model): + _inherit = 'mail.template' + + @api.multi + def generate_email(self, res_ids, fields=None): + mail_template = self.env.ref( + 'mail.mail_template_data_notification_email_default' + ) + if self == mail_template: + obj = self.with_context(mail_debrand=True) + else: + obj = self + return super(MailTemplate, obj).generate_email(res_ids, fields=fields) + + @api.model + def _debrand_body(self, body): + using_word = _('using') + odoo_word = _('Odoo') + return re.sub( + using_word + "(.*)[\r\n]*(.*)>" + odoo_word + r"", "", body, + ) + + @api.model + def render_template(self, template_txt, model, res_ids, + post_process=False): + res = super(MailTemplate, self).render_template( + template_txt, model, res_ids, post_process=post_process, + ) + if post_process and self.env.context.get('mail_debrand'): + if isinstance(res, basestring): + res = self._debrand_body(res) + else: + for res_id, body in res.iteritems(): + res[res_id] = self._debrand_body(body) + return res diff --git a/mail_debrand/static/description/icon.png b/mail_debrand/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..06a30af91980c5ae9d1dd04fb396e0bb723cdfc3 GIT binary patch literal 5367 zcmWky2Q=JG5dYulqMYFLE{IM-ba$K{T|_SlqW9?Jj))K?2_gEOC`pLUi4v#xD2d)n zIP&SjCECZnH#=|kw>$IO*|)RrZM>0z7BwX+B>(`_I@$=6D~-Gsa?-25L&b66N)ZRB z>6npUwFq*jmsd80ueN2t)%?k80jUXPhg=P^1Zr3Wn)t@?pbi3V7Lv1_8yd*);9HL>RsmJ{93X{jK*>mA{n~7eK|Js_c%o)b{&2cw$rx=t}w9+Dfz{yzJNQ~pjU&?_CV3Lrxf#(Zc zSbBAQdE@wau9?EQe2D>fB({Io8vFZVr=_*jR}=IE{1B7@^niK*OYy&B{BhC_OqC=S z6oX_F{H4`OOX{$(hvaX<2v+at$=wP%26;(q4nt0ib$yCJEazZ;VJY;-ZQ zI6k^BwUtJW@;%4uAy!{lVaW&{i~|>cy~{sO&ky|}*s9OpA_0HP1{ACYe$rPwpcb@ks(tpJr+UXJTQ5^)cBJRVb?6;Kw?KJN+>48Fx*V<>S zTw8F!K|GpGpLJAQ=lL}%%pn|n^9o&xL$Gjd83V7Oa3%h+YmbaHNs@HeNGyVl3(S2L z3-{cKnJa=4J%^F9BL>{)4>C$<=JaeRov|3^<-R%`U!cW&(Y(D#S)t z9zj2ou0!>+vuBpVki8sL^eK!{gk z3_)iMd;!%YSG1Tj)`B|KjS^|8Er1b84G8}=DmSlfOAfH6lSjKmXoEno4hS4_?at^X zUx4imAX+RM&B|q>ea$8NccngD_L|-|=FH!E07R6Ic>X#!;g6ll4ME81@-?SdIH!yq ztEhz{Yx_bQTBBGULv9>_|K~j9>V!%bGPiZ4D!r!la&jQ3hLwF$MPz|4!N|G3XqlJJMDFV;WtWMZ^34k~Mz!kXk zjA~16kN{4{>4U?G96U=r>hVMcXb>g$bazF&K5<>rqJaY(Nc0Gcl<<`Yy`o#wv}I|f zBsud*Q*dW%&BwLUyP=i2v*8ml5#)@{dr3G0lsZLOPabK$GXVm#JqGrZ56>Tgh9^Hh zmXYcH3w}&2e9pWAiI8VJrY4i8=U4pKvJDu}^+NChk`_yLDCd=cz^bcT$qqKcb8_G5 z-cTO-o{Cr+@5rDMhlQ`FqgVNO8^6b&MZ73rnjq4^d6F!GbCHZgcd8BK%ALuQy+ZGP z$#(f6T|=U;mic^J^4(4G?Wbng5=9rRJxjIpH)fT~;|jj*UN9->!^nJCEjChXf$W9v zRC|2zNXfSz1m+S_Wz!yi6BpBiE?gTnau}8D@+iC8QVGDsOmN44Rx#{ zi%lEvQV(4O^bk&M-;8QPSD}fD{4;eCcN9Dgk~6v^QODN1BbPEaVYjMssp26pqoil| z_K-cEB1lz{$ZqL7;@N?D94=J4)EcMf=La#k#6(}hr)51sPpH?K;wZ0|yH&52YiR~C z41mjAFfUmSHl63Xb_|2x=iPJTP6#J{>i0Iw0;O#{RV|ooC+Ap-|BLFwuR0`IP}tCv z(rj4{zZW_R1yxOu{-e8!y-0gbv$SUQrBB+SAv#xLU3rGjX?mFZ$k6VF2RD1?+f&-8 z#ebu06UkqQcVH)0nl%j-9p6haF{W8g6x<)XeNv83xK`6;+Yw9O-bLOh^RgV;F)k2* z^bBPBJpVK0zujB3s>;*=389vokvwrNdT6Glfho~^{4{o-{AxKCNrF!u(Ro5I?`82di?{?h7dt?CNAC%%Bj7oMc`ZSCX*BQbUqWo z9?hnJ9U_p>f}e?Qe`8OCBWHeh;WMHpBk=M`AMHaamCNE|GdQ^`yHf(s?a`4yp3tyo zcmEHqsv57dF4!MruPGmNG4#gA)sf%4iY#l5#+yui9olBJ5Q|lIWXdXl|J+kBJ5MvLHl-cjkh1G+ENIZt@7P_Ll1!@2Ta6+C?c7g_hr4KrD<_;XboGS}pN7E73Gu7iXz z4R4%LR}^&04h51E*t^Jh%LLkH`-uM#YT>aPs-*8shpH2ya`o#H(j%p&kH4S>o(hTX zbu-D4G_-SX1~b!8H+k8sAI5}-ZXD5>Ik7M2&=-Xa*N19g%$sefdS!FnBIdJ!048eu4$B1CyP-lB6L# z{kudy5x^+D44=*0FTe{<&#acu)0p$_n*8wU6vxor%N3Y84U*cuSU+TJ7dl_prpMNE z^iO~Be(5ILMj*jCNW1Gqx8DDhwb(o49UY!62*ZH?80Y|D2s_>^Vvf%UC_JsgFt;-P z>kG0vm4NMLW+>NXCcI6GRLPyi9MYs#m<|~Z%~T#FE_(fwYUI1%_tnChy^9k;AIq~p!o!*G zOsIbQkwkMQvlz{bn76Pi!~cu?10K{cywk)%%E7S8*XXhP`|W?xUx_#`%0!*Kin=AM zdL~QdJXV#`m}y`4kBU!P?$_3lUX`bqreo#hnN;zUoWG-W5|vRWniE9Ixv7-C1<@6s ziGA#vXy@xv@%cCA8+IaMd{}MsiBA! zN!(&ULyi+CXIsxkD0?{;Rv)efAFm_N{CCZFo;{N$sr;jYUwM0GPV%fY>%k0(&5gmH zi1ad9o=3a6rKaND=K^^@QWXSqCYO&s=KFXozUs1kyoue>sP3P~?%ZB7a1CIn{j2Pf z$0BIAKoID861Tqa{&X&uYn*`c3kT$&%&1xU?cRwt#*c8{L^ zwHX<3ZK~Tr#6h4Wh>zV^K*XzO&Df+weL84T;1`u0j!;S+ONhxkNK*dO*p>R{ zqUV>mjszX~IA<^e_(ObIhQ~)aaTMH;GU7(g)7sPIo%5lTN6TODRhQ~Bt^PYiKEU~P z%Rl;QYuDc_<{hMzV<46yuXr$AB(4*H{PBTWsRXn^Z@D`$LXLS-ne*{q>ak?bl6=~9 zPHaoX#xBoc5l~W~;alyOj2E3h=2T7JK73m=aC8>eh_R2J$FmF^Rzh3$mL_p*chQ`f zJ2UgYI#p3FES7<8&KHSMd+JgT;|4-I)vX)RtuN=p_yzkr7)38#>ah23Zl%}}{BgIO zgG-7uqU}NtSR0%0vCu%s%Bu5CzO-2gfns+x*S!xD zk@FBedPo{T<%M*HL;>rIOplFUux0Cg>(gkpV=gc-4KrL72z$Tgj!fOBG6N{qP%<>`wAuub<^rw!f|%-dX4{S ziU7CDmmNy0(h@f3O|96O(DwiI`-sfrGu{+DdKGt2y5rUQ_%j0|()z@T!a>AYsklai zT??)&am4&G&+6VUvs&^*&4l#o;4mS@$KPcF)bR3@g3_kOfa=$Xg_|%QZ}q~gT3Mg+c&~7f4czH;dnuI8RI*au zYlziJO#2TM)DW>ij0aB$9P$=9PcMi)32{Rd#Kr4&#;6-V*#6~fy>e_TOo?;i(+hS! zEXq)O*HzIh%WvG#SFyar%`8UFFfNKx=-%TQ5zc zQeQe2SR4x}iF#o>?Kmtiw(C)~a=(Zn6wS@^w=7#R0XOo5Hd>GUSp2@V8n`eURARg7e%zyp#cmnjz<_pM_ar81<6uV>A{x*wMz)3BrzLwPT2 z<+1!~OFZvjVl#p!NT<=fZJ}EjK)&IF>Q5D>l~jO`;l&$Fjpu$G`wI7K|C79a7k|i# z`RQ5ZP5;bFQlVXbnS`#hprPKFk~0)izB#q^*0U0(i12y6hrHFB=$4@hHMF^OZ>FV> zHEp$8X}D*6TPA#}c{Z4ckDAg3d|Mbv?(K1u4Xo1q_dSz3PrwSWD)kK+9Ym$PN8n%T zD0Ost&rXg!+cuLHp&h>v^0c0aDJY4q@V~vjh=|rMt_F%(3R!|XW~#)}_I%lY1yfiz zD=Pbp;p7g?>4zovr??XO?C)f*%S=!T7r7*6J+qby3rL>zefnZd0`*A*D9RVco`-!w zDk`LNy{GJtFkKq1r7waS3`j(TeMiPAlLVH5;<&PeUywIy4dZ#a+xz` z3!DmzeHD?eajhQw5_Ze1UyPzu$0^#mSg+cDskQ(f>y_3kyz)#aia3udE+pvaOmTj0 z6u2)RpzC7Z^p;203G7>+46nqQawi-NxSsLy<*zD&Oz$qaq{4@{21 zf*QOkEJ>+ES&w@8bZzdnHX2iuL2l`(RhG|v7xKQ@KX<~%-ajNXEUt>!cwHT?xxz>z z(EnUNC!9XNCvsN+-&HpLp)d^!m}!wje&^mKJQ>b8K-A2=eaFqj|JAZQWIo%q*S*MI zq125E>>8bnS(TMC0Ue339uUkQ82=Rydj)TK+vJnIzknbjZZI1^cvIL60K6jJ=1Wnn zO(+$O3{?SPcDvZqh_JCfl|7>KN&TV+pEk?<@4E;ShG$wm8NdLfh3g1Qs)GfXzBivO z+cb??ArD%*hVNPaDmt=0;r)6#XCB&9NGxZ$xqs<+R{+Ewb0I7l`uQIC?+-F1(dT6( zcn8xzy1nIV1%@u^9IXK{v){3G%Hwxqk?3M!$Kl-yTS|z)^Kno|91Q&nfhS z1EJGVueMvZ6KZ=ea70gHFy1-B6`>4cEKr}CbAEruEosnp_~TH3nyHAhM@cuhK#1fb zYy9)TsISc#F>P6<`+^vk!flFmhaYty7?XqshWZSFgn_ij*i?b{tq_%%TVGfr&VU=3kA>F z_A0vuU+W_5NPeTIy;{h zq0Ex0aE&U$J)NS0vFtLGCsCJ?$cTKXjySG#el~r3CR`r0JsX_x$240~(rnY~y!@^e z2zaSt;0%H&o21=g8`+t(qzoGRT8!>PwG0i@SdNi7=TeOgK^ukVXKRzqLLeHq+k=G? zj3YjIhA#HkE^=N>JXbED&P}0N2$fkN3VMf0!AeO-u?8ZHQH(b)F-eTz8zkQJcri{b zb8rtO6;lZO=u^Rd{o{&0XwA&sElxD$s8+Q;Ts1UG9+{UQuGyn63ilZo)@qelL$^j5 zs2MH_JTlwAwda9l`gT{GJduIW*JEnIHR-V;fqRmb^-^W_BnDufC>&_Te7m%}9gk$( zqz)p(jf|Fuf)_dxO7>sC!cl!-XOLv$%LVZX?6*ttBpTEQ5=!FZ@ej-T1}ZwK_lf;^ z?Wy$;JfR2U%qFl`(`hWfz8}k4F literal 0 HcmV?d00001 diff --git a/mail_debrand/static/description/icon.svg b/mail_debrand/static/description/icon.svg new file mode 100644 index 00000000..6609694d --- /dev/null +++ b/mail_debrand/static/description/icon.svg @@ -0,0 +1,248 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mail_debrand/tests/__init__.py b/mail_debrand/tests/__init__.py new file mode 100644 index 00000000..62fe23ea --- /dev/null +++ b/mail_debrand/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_mail_debrand diff --git a/mail_debrand/tests/test_mail_debrand.py b/mail_debrand/tests/test_mail_debrand.py new file mode 100644 index 00000000..4878adf9 --- /dev/null +++ b/mail_debrand/tests/test_mail_debrand.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests import common + + +class TestMailDebrand(common.SavepointCase): + @classmethod + def setUpClass(cls): + super(TestMailDebrand, cls).setUpClass() + cls.template = cls.env.ref( + 'mail.mail_template_data_notification_email_default' + ) + + def test_generate_email_simple(self): + res = self.template.generate_email( + self.env.user.id, fields=['body_html'], + ) + self.assertNotIn('using', res) + + def test_generate_email_multi(self): + res = self.template.generate_email( + self.env.user.ids, fields=['body_html'], + ) + self.assertNotIn('using', res[res.keys()[0]])