2018-01-16 06:58:15 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
2018-01-16 11:34:37 +01:00
|
|
|
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
|
2018-01-16 06:58:15 +01:00
|
|
|
import base64
|
|
|
|
|
|
|
|
import werkzeug
|
|
|
|
|
2018-01-16 11:34:37 +01:00
|
|
|
from flectra import _, exceptions, http
|
|
|
|
from flectra.http import request
|
|
|
|
from flectra.tools import consteq
|
2018-01-16 06:58:15 +01:00
|
|
|
|
|
|
|
|
|
|
|
class MassMailController(http.Controller):
|
|
|
|
|
|
|
|
@http.route(['/mail/mailing/<int:mailing_id>/unsubscribe'], type='http', website=True, auth='public')
|
|
|
|
def mailing(self, mailing_id, email=None, res_id=None, token="", **post):
|
|
|
|
mailing = request.env['mail.mass_mailing'].sudo().browse(mailing_id)
|
|
|
|
if mailing.exists():
|
|
|
|
res_id = res_id and int(res_id)
|
|
|
|
res_ids = []
|
|
|
|
if mailing.mailing_model_name == 'mail.mass_mailing.list':
|
|
|
|
contacts = request.env['mail.mass_mailing.contact'].sudo().search([
|
|
|
|
('email', '=', email),
|
|
|
|
('list_ids', 'in', [mailing_list.id for mailing_list in mailing.contact_list_ids])
|
|
|
|
])
|
|
|
|
res_ids = contacts.ids
|
|
|
|
else:
|
|
|
|
res_ids = [res_id]
|
|
|
|
|
|
|
|
right_token = mailing._unsubscribe_token(res_id, email)
|
|
|
|
if not consteq(str(token), right_token):
|
|
|
|
raise exceptions.AccessDenied()
|
|
|
|
mailing.update_opt_out(email, res_ids, True)
|
|
|
|
return _('You have been unsubscribed successfully')
|
|
|
|
|
|
|
|
@http.route('/mail/track/<int:mail_id>/blank.gif', type='http', auth='none')
|
|
|
|
def track_mail_open(self, mail_id, **post):
|
|
|
|
""" Email tracking. """
|
|
|
|
request.env['mail.mail.statistics'].sudo().set_opened(mail_mail_ids=[mail_id])
|
|
|
|
response = werkzeug.wrappers.Response()
|
|
|
|
response.mimetype = 'image/gif'
|
|
|
|
response.data = base64.b64decode(b'R0lGODlhAQABAIAAANvf7wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==')
|
|
|
|
|
|
|
|
return response
|
|
|
|
|
|
|
|
@http.route('/r/<string:code>/m/<int:stat_id>', type='http', auth="none")
|
|
|
|
def full_url_redirect(self, code, stat_id, **post):
|
|
|
|
# don't assume geoip is set, it is part of the website module
|
|
|
|
# which mass_mailing doesn't depend on
|
|
|
|
country_code = request.session.get('geoip', False) and request.session.geoip.get('country_code', False)
|
|
|
|
|
|
|
|
request.env['link.tracker.click'].add_click(code, request.httprequest.remote_addr, country_code, stat_id=stat_id)
|
|
|
|
return werkzeug.utils.redirect(request.env['link.tracker'].get_url_from_code(code), 301)
|