summaryrefslogtreecommitdiff
path: root/addons/link_tracker/models
diff options
context:
space:
mode:
Diffstat (limited to 'addons/link_tracker/models')
-rw-r--r--addons/link_tracker/models/link_tracker.py22
-rw-r--r--addons/link_tracker/models/utm.py18
2 files changed, 30 insertions, 10 deletions
diff --git a/addons/link_tracker/models/link_tracker.py b/addons/link_tracker/models/link_tracker.py
index ed12d1e0f01..bf4d25fe465 100644
--- a/addons/link_tracker/models/link_tracker.py
+++ b/addons/link_tracker/models/link_tracker.py
@@ -15,6 +15,7 @@ from odoo import models, fields, api, _
URL_REGEX = r'(\bhref=[\'"](?!mailto:|tel:|sms:)([^\'"]+)[\'"])'
+TEXT_URL_REGEX = r'(https?:\/\/(www\.)?[a-zA-Z0-9@:%._\+~#=/-]{1,64})'
def VALIDATE_URL(url):
@@ -164,6 +165,27 @@ class LinkTracker(models.Model):
return html
+ def _convert_links_text(self, body, vals, blacklist=None):
+ shortened_schema = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + '/r/'
+ unsubscribe_schema = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + '/sms/'
+ for match in re.findall(TEXT_URL_REGEX, body):
+ original_url = match[0]
+ # don't shorten already-shortened links or links towards unsubscribe page
+ if original_url.startswith(shortened_schema) or original_url.startswith(unsubscribe_schema):
+ continue
+ # support blacklist items in path, like /u/
+ parsed = urls.url_parse(original_url, scheme='http')
+ if blacklist and any(item in parsed.path for item in blacklist):
+ continue
+
+ vals['url'] = utils.unescape(original_url)
+ link = self.create(vals)
+ shortened_url = link.short_url
+ if shortened_url:
+ body = body.replace(original_url, shortened_url, 1)
+
+ return body
+
def action_view_statistics(self):
action = self.env['ir.actions.act_window'].for_xml_id('link_tracker', 'link_tracker_click_action_statistics')
action['domain'] = [('link_id', '=', self.id)]
diff --git a/addons/link_tracker/models/utm.py b/addons/link_tracker/models/utm.py
index 71c94ba4eb6..ebb343472e7 100644
--- a/addons/link_tracker/models/utm.py
+++ b/addons/link_tracker/models/utm.py
@@ -8,16 +8,14 @@ class UtmCampaign(models.Model):
_inherit = ['utm.campaign']
_description = 'UTM Campaign'
- items_total = fields.Integer(string="Number of items that are part of the campaign", compute="_compute_items_total")
- clicked_total = fields.Integer(string="Number of items that are part of the campaign who generated a click", compute="_compute_items_total")
- clicks_ratio = fields.Integer(string="Global Clicks Ratio for the campaign", compute="_compute_clicks_ratio")
+ click_count = fields.Integer(string="Number of clicks generated by the campaign", compute="_compute_clicks_count")
- def _compute_items_total(self):
- """Empty method that will be implemented by inheriting classes"""
- self.clicked_total = False
- self.items_total = False
+ def _compute_clicks_count(self):
+ click_data = self.env['link.tracker.click'].read_group(
+ [('campaign_id', 'in', self.ids)],
+ ['campaign_id'], ['campaign_id'])
+
+ mapped_data = {datum['campaign_id'][0]: datum['campaign_id_count'] for datum in click_data}
- @api.depends('items_total', 'clicked_total')
- def _compute_clicks_ratio(self):
for campaign in self:
- campaign.clicks_ratio = campaign.clicked_total / campaign.items_total * 100 if campaign.items_total > 0 else 0
+ campaign.click_count = mapped_data.get(campaign.id, 0)