summaryrefslogtreecommitdiff
path: root/addons/website_links/models
diff options
context:
space:
mode:
authorChristophe Matthieu <chm@odoo.com>2015-02-06 11:04:02 +0100
committerJulien De Coster <jdc@odoo.com>2015-02-12 11:58:13 +0100
commite2f19f0ed5238f677a9ca8e0f1b628cbaa806e9b (patch)
treeb09abad1d7a24c92405093c44f8f5df396cbf0dc /addons/website_links/models
parent70c30fe5b1dbc12142fdac74819fe0e71817e5e3 (diff)
[IMP] Unsubscribe links in themes
Diffstat (limited to 'addons/website_links/models')
-rw-r--r--addons/website_links/models/website_links.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/addons/website_links/models/website_links.py b/addons/website_links/models/website_links.py
index e44ab7c3400..e254e8fb74c 100644
--- a/addons/website_links/models/website_links.py
+++ b/addons/website_links/models/website_links.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import datetime
import random
+import re
import string
from lxml.html import parse
@@ -11,6 +12,7 @@ from urlparse import urlparse
from openerp import models, fields, api, _
+URL_REGEX = r'(\bhref=[\'"]([^\'"]+)[\'"])'
def VALIDATE_URL(url):
if urlparse(url).scheme not in ('http', 'https', 'ftp', 'ftps'):
@@ -41,6 +43,33 @@ class website_links(models.Model):
short_url_host = fields.Char(string='Host of the short URL', compute='_compute_short_url_host')
icon_src = fields.Char(string='Favicon Source', compute='_compute_icon_src')
+ # List of link's href that will not be converted by the shortener
+ links_backlist = ['/unsubscribe_from_list']
+
+ @api.model
+ def convert_links(self, html, utm_mixin):
+ for match in re.findall(URL_REGEX, html):
+ href = match[0]
+ long_url = match[1]
+
+ if not [s for s in self.links_backlist if s in long_url]:
+ vals = {'url': long_url}
+
+ if utm_mixin.campaign_id:
+ vals['campaign_id'] = utm_mixin.campaign_id.id
+ if utm_mixin.source_id:
+ vals['source_id'] = utm_mixin.source_id.id
+ if utm_mixin.medium_id:
+ vals['medium_id'] = utm_mixin.medium_id.id
+
+ link = self.create(vals)
+ shorten_url = self.browse(link.id)[0].short_url
+
+ if shorten_url:
+ new_href = href.replace(long_url, shorten_url)
+ html = html.replace(href, new_href)
+ return html
+
@api.one
@api.depends('link_click_ids.link_id')
def _compute_count(self):