diff options
| author | std-odoo <std@odoo.com> | 2020-04-17 07:37:45 +0000 |
|---|---|---|
| committer | Debauche Stéphane <std@odoo.com> | 2020-06-12 11:49:45 +0000 |
| commit | b16843230d9c62606550c061934f319fee23d3c5 (patch) | |
| tree | 2b7608860889186fffa902ae2cf9cbb466d4281f /addons/link_tracker | |
| parent | 5227f956da1b64293f3e1301ff03b4efb28db80b (diff) | |
[IMP] mass_mailing: send a statistics email to the mailing responsible
Purpose
=======
Provide a follow-up/overview of the Mailing 24 hours after its been sent.
Specifications
==============
Send an email to the responsible of the mailing 24 hours the last email
of the mass mailing.
During the link trackers creation, extract the button label if exists
(so we can display them in the statistics email).
Technical remarks
=================
The statistics email is sent to the responsible of each mailing in the
CRON of mass mailing.
Task-2227411
closes odoo/odoo#49836
Related: odoo/upgrade#1094
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Diffstat (limited to 'addons/link_tracker')
| -rw-r--r-- | addons/link_tracker/__manifest__.py | 2 | ||||
| -rw-r--r-- | addons/link_tracker/models/link_tracker.py | 20 | ||||
| -rw-r--r-- | addons/link_tracker/models/mail_render_mixin.py | 5 | ||||
| -rw-r--r-- | addons/link_tracker/tests/__init__.py | 1 | ||||
| -rw-r--r-- | addons/link_tracker/tests/test_mail_render_mixin.py | 52 | ||||
| -rw-r--r-- | addons/link_tracker/views/link_tracker_views.xml | 3 |
6 files changed, 77 insertions, 6 deletions
diff --git a/addons/link_tracker/__manifest__.py b/addons/link_tracker/__manifest__.py index 038fe807173..73bb6a78b1a 100644 --- a/addons/link_tracker/__manifest__.py +++ b/addons/link_tracker/__manifest__.py @@ -7,7 +7,7 @@ 'description': """ Shorten URLs and use them to track clicks and UTMs """, - 'version': '1.0', + 'version': '1.1', 'depends': ['utm', 'mail'], 'data': [ 'views/link_tracker_views.xml', diff --git a/addons/link_tracker/models/link_tracker.py b/addons/link_tracker/models/link_tracker.py index 925c613c0c6..2ee2fad31ab 100644 --- a/addons/link_tracker/models/link_tracker.py +++ b/addons/link_tracker/models/link_tracker.py @@ -27,16 +27,28 @@ class LinkTracker(models.Model): # URL info url = fields.Char(string='Target URL', required=True) + absolute_url = fields.Char("Absolute URL", compute="_compute_absolute_url") short_url = fields.Char(string='Tracked URL', compute='_compute_short_url') redirected_url = fields.Char(string='Redirected URL', compute='_compute_redirected_url') short_url_host = fields.Char(string='Host of the short URL', compute='_compute_short_url_host') title = fields.Char(string='Page Title', store=True) + label = fields.Char(string='Button label') # Tracking link_code_ids = fields.One2many('link.tracker.code', 'link_id', string='Codes') code = fields.Char(string='Short URL code', compute='_compute_code') link_click_ids = fields.One2many('link.tracker.click', 'link_id', string='Clicks') count = fields.Integer(string='Number of Clicks', compute='_compute_count', store=True) + @api.depends("url") + def _compute_absolute_url(self): + web_base_url = urls.url_parse(self.env['ir.config_parameter'].sudo().get_param('web.base.url')) + for tracker in self: + url = urls.url_parse(tracker.url) + if url.scheme: + tracker.absolute_url = tracker.url + else: + tracker.absolute_url = web_base_url.join(url).to_url() + @api.depends('link_click_ids.link_id') def _compute_count(self): if self.ids: @@ -99,9 +111,11 @@ class LinkTracker(models.Model): else: create_vals['url'] = tools.validate_url(vals['url']) - search_domain = [] - for fname, value in create_vals.items(): - search_domain.append((fname, '=', value)) + search_domain = [ + (fname, '=', value) + for fname, value in create_vals.items() + if fname in ['url', 'campaign_id', 'medium_id', 'source_id'] + ] result = self.search(search_domain, limit=1) diff --git a/addons/link_tracker/models/mail_render_mixin.py b/addons/link_tracker/models/mail_render_mixin.py index 0bc30de960b..c848f3979e1 100644 --- a/addons/link_tracker/models/mail_render_mixin.py +++ b/addons/link_tracker/models/mail_render_mixin.py @@ -27,12 +27,13 @@ class MailRenderMixin(models.AbstractModel): """ base_url = base_url or self.env['ir.config_parameter'].sudo().get_param('web.base.url') short_schema = base_url + '/r/' - for match in re.findall(tools.URL_REGEX, html): + for match in re.findall(tools.HTML_TAG_URL_REGEX, html): href = match[0] long_url = match[1] + label = (match[3] or '').strip() if not blacklist or not [s for s in blacklist if s in long_url] and not long_url.startswith(short_schema): - create_vals = dict(link_tracker_vals, url=utils.unescape(long_url)) + create_vals = dict(link_tracker_vals, url=utils.unescape(long_url), label=utils.unescape(label)) link = self.env['link.tracker'].create(create_vals) if link.short_url: new_href = href.replace(long_url, link.short_url) diff --git a/addons/link_tracker/tests/__init__.py b/addons/link_tracker/tests/__init__.py index 511e649c9e2..e8c7d8453ad 100644 --- a/addons/link_tracker/tests/__init__.py +++ b/addons/link_tracker/tests/__init__.py @@ -2,3 +2,4 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import common +from . import test_mail_render_mixin diff --git a/addons/link_tracker/tests/test_mail_render_mixin.py b/addons/link_tracker/tests/test_mail_render_mixin.py new file mode 100644 index 00000000000..23a74b5aae0 --- /dev/null +++ b/addons/link_tracker/tests/test_mail_render_mixin.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests import common + + +class TestMailRenderMixin(common.TransactionCase): + def test_shorten_links(self): + test_links = [ + '<a href="https://gitlab.com" title="title" fake="fake">test_label</a>', + '<a href="https://test_542152qsdqsd.com"/>', + """<a href="https://third_test_54212.com"> + <img src="imagesrc"/> + </a> + """, + """<a + href="https://test_strange_html.com" title="title" + fake='fake' + > test_strange_html_label + </a> + """, + '<a href="https://test_escaped.com" title="title" fake="fake"> test_escaped < > </a>', + '<a href="https://url_with_params.com?a=b&c=d">label</a>', + ] + + self.env["mail.render.mixin"]._shorten_links("".join(test_links), {}) + + trackers_to_find = [ + [("url", "=", "https://gitlab.com"), ("label", "=", "test_label")], + [("url", "=", "https://test_542152qsdqsd.com")], + [ + ("url", "=", "https://test_strange_html.com"), + ("label", "=", "test_strange_html_label"), + ], + [ + ("url", "=", "https://test_escaped.com"), + ("label", "=", "test_escaped < >"), + ], + [ + ("url", "=", "https://url_with_params.com?a=b&c=d"), + ("label", "=", "label"), + ], + ] + trackers_to_fail = [ + [("url", "=", "https://test_542152qsdqsd.com"), ("label", "ilike", "_")] + ] + + for tracker_to_find in trackers_to_find: + self.assertTrue(self.env["link.tracker"].search(tracker_to_find)) + + for tracker_to_fail in trackers_to_fail: + self.assertFalse(self.env["link.tracker"].search(tracker_to_fail)) diff --git a/addons/link_tracker/views/link_tracker_views.xml b/addons/link_tracker/views/link_tracker_views.xml index 40c4d75d593..f4d1273d5de 100644 --- a/addons/link_tracker/views/link_tracker_views.xml +++ b/addons/link_tracker/views/link_tracker_views.xml @@ -9,6 +9,7 @@ <search string="Links"> <field name="url" string="Title and URL" filter_domain="['|', ('title', 'ilike', self), ('url', 'ilike', self)]"/> <field name="title"/> + <field name="label"/> <field name="campaign_id"/> <field name="medium_id"/> <field name="source_id"/> @@ -38,6 +39,7 @@ <group> <group name="url" string="URL"> <field name="title"/> + <field name="label"/> <field name="url"/> <field name="short_url"/> </group> @@ -59,6 +61,7 @@ <tree string="Links"> <field name="create_date"/> <field name="title"/> + <field name="label"/> <field name="url"/> <field name="short_url" optional="hide"/> <field name="count"/> |
