summaryrefslogtreecommitdiff
path: root/addons/link_tracker
diff options
context:
space:
mode:
authorstd-odoo <std@odoo.com>2020-04-17 07:37:45 +0000
committerDebauche Stéphane <std@odoo.com>2020-06-12 11:49:45 +0000
commitb16843230d9c62606550c061934f319fee23d3c5 (patch)
tree2b7608860889186fffa902ae2cf9cbb466d4281f /addons/link_tracker
parent5227f956da1b64293f3e1301ff03b4efb28db80b (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__.py2
-rw-r--r--addons/link_tracker/models/link_tracker.py20
-rw-r--r--addons/link_tracker/models/mail_render_mixin.py5
-rw-r--r--addons/link_tracker/tests/__init__.py1
-rw-r--r--addons/link_tracker/tests/test_mail_render_mixin.py52
-rw-r--r--addons/link_tracker/views/link_tracker_views.xml3
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 &lt; &gt; </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"/>