David
7 years ago
27 changed files with 181 additions and 198 deletions
-
97mass_mailing_custom_unsubscribe/README.rst
-
3mass_mailing_custom_unsubscribe/__init__.py
-
14mass_mailing_custom_unsubscribe/__manifest__.py
-
1mass_mailing_custom_unsubscribe/controllers/__init__.py
-
27mass_mailing_custom_unsubscribe/controllers/main.py
-
3mass_mailing_custom_unsubscribe/exceptions.py
-
17mass_mailing_custom_unsubscribe/hooks.py
-
3mass_mailing_custom_unsubscribe/models/__init__.py
-
14mass_mailing_custom_unsubscribe/models/mail_mail.py
-
41mass_mailing_custom_unsubscribe/models/mail_mass_mailing.py
-
30mass_mailing_custom_unsubscribe/models/mail_mass_mailing_contact.py
-
3mass_mailing_custom_unsubscribe/models/mail_mass_mailing_list.py
-
25mass_mailing_custom_unsubscribe/models/mail_unsubscription.py
-
10mass_mailing_custom_unsubscribe/readme/CONFIGURE.rst
-
4mass_mailing_custom_unsubscribe/readme/CONTRIBUTORS.rst
-
8mass_mailing_custom_unsubscribe/readme/DESCRIPTION.rst
-
11mass_mailing_custom_unsubscribe/readme/ROADMAP.rst
-
8mass_mailing_custom_unsubscribe/readme/USAGE.rst
-
2mass_mailing_custom_unsubscribe/static/src/js/partner.tour.js
-
2mass_mailing_custom_unsubscribe/static/src/js/require_details.js
-
4mass_mailing_custom_unsubscribe/static/src/js/unsubscribe.js
-
2mass_mailing_custom_unsubscribe/templates/mass_mailing_contact_reason.xml
-
1mass_mailing_custom_unsubscribe/tests/__init__.py
-
10mass_mailing_custom_unsubscribe/tests/test_ui.py
-
3mass_mailing_custom_unsubscribe/tests/test_unsubscription.py
-
30mass_mailing_custom_unsubscribe/views/mail_mass_mailing_contact_view.xml
-
4mass_mailing_custom_unsubscribe/views/mail_unsubscription_view.xml
@ -1,96 +1 @@ |
|||||
.. 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 |
|
||||
|
|
||||
========================================================== |
|
||||
Customizable unsubscription process on mass mailing emails |
|
||||
========================================================== |
|
||||
|
|
||||
This addon extends the unsubscription form to let you: |
|
||||
|
|
||||
- Choose which mailing lists are not cross-unsubscriptable when unsubscribing |
|
||||
from a different one. |
|
||||
- Know why and when a contact has been subscribed or unsubscribed from a |
|
||||
mass mailing. |
|
||||
- Provide proof on why you are sending mass mailings to a given contact, as |
|
||||
required by the GDPR in Europe. |
|
||||
|
|
||||
Configuration |
|
||||
============= |
|
||||
|
|
||||
Unsubscription Reasons |
|
||||
---------------------- |
|
||||
|
|
||||
You can customize what reasons will be displayed to your unsubscriptors when |
|
||||
they are going to unsubscribe. To do it: |
|
||||
|
|
||||
#. Go to *Mass Mailing > Configuration > Unsubscription Reasons*. |
|
||||
#. Create / edit / remove / sort as usual. |
|
||||
#. If *Details required* is enabled, they will have to fill a text area to |
|
||||
continue. |
|
||||
|
|
||||
Usage |
|
||||
===== |
|
||||
|
|
||||
Once configured: |
|
||||
|
|
||||
#. Go to *Mass Mailing > Mailings > Mass Mailings > Create*. |
|
||||
#. Edit your mass mailing at wish, but remember to add a snippet from |
|
||||
*Footers*, so people have an *Unsubscribe* link. |
|
||||
#. Send it. |
|
||||
#. If somebody gets unsubscribed, you will see logs about that under |
|
||||
*Mass Mailing > Mailings > Unsubscriptions*. |
|
||||
|
|
||||
.. 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 adds a security hash for mass mailing unsubscription URLs, which |
|
||||
disables insecure URLs from mass mailing messages sent before its |
|
||||
installation. This can be a problem, but anyway you'd get that problem in |
|
||||
Odoo 11.0, where https://github.com/odoo/odoo/pull/12040 was merged, so at |
|
||||
least this addon will be forward-compatible with it. So, **this feature must |
|
||||
be removed from here when migrating to v11**. |
|
||||
* This module replaces AJAX submission core implementation from the mailing |
|
||||
list management form, because it is impossible to extend it. When |
|
||||
https://github.com/odoo/odoo/pull/14386 gets merged (which upstreams most |
|
||||
needed changes), this addon will need a refactoring (mostly removing |
|
||||
duplicated functionality and depending on it instead of replacing it). In the |
|
||||
mean time, there is a little chance that this introduces some |
|
||||
incompatibilities with other addons that depend on ``website_mass_mailing``. |
|
||||
|
|
||||
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. |
|
||||
|
|
||||
Credits |
|
||||
======= |
|
||||
|
|
||||
Contributors |
|
||||
------------ |
|
||||
|
|
||||
* Rafael Blasco <rafael.blasco@tecnativa.com> |
|
||||
* Antonio Espinosa <antonio.espinosa@tecnativa.com> |
|
||||
* Jairo Llopis <jairo.llopis@tecnativa.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. |
|
||||
|
**This file is going to be generated by oca-gen-addon-readme.** |
@ -1,5 +1,4 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
# Copyright 2016 Jairo Llopis <jairo.llopis@tecnativa.com> |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
||||
|
|
||||
from . import controllers, models |
from . import controllers, models |
||||
|
from .hooks import post_init_hook |
@ -1,4 +1,3 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
# Copyright 2016 Jairo Llopis <jairo.llopis@tecnativa.com> |
# Copyright 2016 Jairo Llopis <jairo.llopis@tecnativa.com> |
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
||||
|
|
||||
|
@ -0,0 +1,17 @@ |
|||||
|
# Copyright 2018 David Vidal <david.vidal@tecnativa.com> |
||||
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). |
||||
|
|
||||
|
from odoo import api, SUPERUSER_ID |
||||
|
|
||||
|
|
||||
|
def post_init_hook(cr, registry): |
||||
|
"""Ensure all existing contacts are going to work as v10""" |
||||
|
env = api.Environment(cr, SUPERUSER_ID, {}) |
||||
|
contacts = env['mail.mass_mailing.contact'].search([]) |
||||
|
for contact in contacts: |
||||
|
if len(contact.list_ids) <= 1: |
||||
|
continue |
||||
|
list_1 = contact.list_ids[0] |
||||
|
for list_ in contact.list_ids - list_1: |
||||
|
contact.copy({"list_ids": [(6, 0, list_.ids)]}) |
||||
|
contact.list_ids = list_1 |
@ -1,7 +1,6 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
from . import mail_mail |
|
||||
from . import mail_mass_mailing |
from . import mail_mass_mailing |
||||
|
from . import mail_mass_mailing_contact |
||||
from . import mail_mass_mailing_list |
from . import mail_mass_mailing_list |
||||
from . import mail_unsubscription |
from . import mail_unsubscription |
@ -1,14 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
# Copyright 2016 Jairo Llopis <jairo.llopis@tecnativa.com> |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from openerp import models |
|
||||
|
|
||||
|
|
||||
class MailMail(models.Model): |
|
||||
_inherit = 'mail.mail' |
|
||||
|
|
||||
def _get_unsubscribe_url(self, email_to): |
|
||||
result = super(MailMail, self)._get_unsubscribe_url(email_to) |
|
||||
token = self.mailing_id._unsubscribe_token(self.res_id) |
|
||||
return "%s&token=%s" % (result, token) |
|
@ -0,0 +1,30 @@ |
|||||
|
# Copyright 2018 David Vidal <david.vidal@tecnativa.com> |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
||||
|
|
||||
|
from odoo import api, fields, models |
||||
|
|
||||
|
|
||||
|
class MailMassMailing(models.Model): |
||||
|
_inherit = "mail.mass_mailing.contact" |
||||
|
|
||||
|
# Recover the old Many2one field so we can set a contact by list |
||||
|
mailing_list_id = fields.Many2one( |
||||
|
'mail.mass_mailing.list', |
||||
|
string='Mailing List', |
||||
|
ondelete='cascade', |
||||
|
compute="_compute_mailing_list_id", |
||||
|
inverse="_inverse_mailing_list_id", |
||||
|
search="_search_mailing_list_id", |
||||
|
) |
||||
|
|
||||
|
@api.depends('list_ids') |
||||
|
def _compute_mailing_list_id(self): |
||||
|
for contact in self: |
||||
|
contact.mailing_list_id = contact.list_ids[:1] |
||||
|
|
||||
|
def _inverse_mailing_list_id(self): |
||||
|
for contact in self: |
||||
|
contact.list_ids = contact.mailing_list_id |
||||
|
|
||||
|
def _search_mailing_list_id(self, operator, value): |
||||
|
return [('list_ids', operator, value)] |
@ -0,0 +1,10 @@ |
|||||
|
Unsubscription Reasons |
||||
|
---------------------- |
||||
|
|
||||
|
You can customize what reasons will be displayed to your unsubscriptors when |
||||
|
they are going to unsubscribe. To do it: |
||||
|
|
||||
|
#. Go to *Mass Mailing > Configuration > Unsubscription Reasons*. |
||||
|
#. Create / edit / remove / sort as usual. |
||||
|
#. If *Details required* is enabled, they will have to fill a text area to |
||||
|
continue. |
@ -0,0 +1,4 @@ |
|||||
|
* Rafael Blasco <rafael.blasco@tecnativa.com> |
||||
|
* Antonio Espinosa <antonio.espinosa@tecnativa.com> |
||||
|
* Jairo Llopis <jairo.llopis@tecnativa.com> |
||||
|
* David Vidal <david.vidal@tecnativa.com> |
@ -0,0 +1,8 @@ |
|||||
|
This addon extends the unsubscription form to let you: |
||||
|
|
||||
|
- Choose which mailing lists are not cross-unsubscriptable when unsubscribing |
||||
|
from a different one. |
||||
|
- Know why and when a contact has been subscribed or unsubscribed from a |
||||
|
mass mailing. |
||||
|
- Provide proof on why you are sending mass mailings to a given contact, as |
||||
|
required by the GDPR in Europe. |
@ -0,0 +1,11 @@ |
|||||
|
* As version 11 has introduced a new relation type between mailing lists and |
||||
|
contacts that has multiple usability issues that are being reworked by Odoo |
||||
|
to land in version 12, this module falls back to the version 10 behaviour in |
||||
|
which one contact belonged to just one list. |
||||
|
* This module replaces AJAX submission core implementation from the mailing |
||||
|
list management form, because it is impossible to extend it. When |
||||
|
https://github.com/odoo/odoo/pull/14386 gets merged (which upstreams most |
||||
|
needed changes), this addon will need a refactoring (mostly removing |
||||
|
duplicated functionality and depending on it instead of replacing it). In the |
||||
|
mean time, there is a little chance that this introduces some |
||||
|
incompatibilities with other addons that depend on ``website_mass_mailing``. |
@ -0,0 +1,8 @@ |
|||||
|
Once configured: |
||||
|
|
||||
|
#. Go to *Mass Mailing > Mailings > Mass Mailings > Create*. |
||||
|
#. Edit your mass mailing at wish, but remember to add a snippet from |
||||
|
*Footers*, so people have an *Unsubscribe* link. |
||||
|
#. Send it. |
||||
|
#. If somebody gets unsubscribed, you will see logs about that under |
||||
|
*Mass Mailing > Mailings > Unsubscriptions*. |
@ -0,0 +1,30 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<!-- Copyright 2018 David Vidal <david.vidal@tecnativa.com> |
||||
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
||||
|
|
||||
|
<odoo> |
||||
|
|
||||
|
<record id="view_mail_mass_mailing_contact_form" model="ir.ui.view"> |
||||
|
<field name="model">mail.mass_mailing.contact</field> |
||||
|
<field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_contact_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<field name="list_ids" position="attributes"> |
||||
|
<attribute name="invisible">1</attribute> |
||||
|
</field> |
||||
|
<field name="email" position="after"> |
||||
|
<field name="mailing_list_id"/> |
||||
|
</field> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="view_mail_mass_mailing_contact_tree" model="ir.ui.view"> |
||||
|
<field name="model">mail.mass_mailing.contact</field> |
||||
|
<field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_contact_tree"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<field name="email" position="before"> |
||||
|
<field name="mailing_list_id"/> |
||||
|
</field> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
</odoo> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue