71 lines
3.4 KiB
Python
71 lines
3.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
|
|
|
|
from flectra.http import route, request
|
|
from flectra.addons.mass_mailing.controllers.main import MassMailController
|
|
|
|
|
|
class MassMailController(MassMailController):
|
|
|
|
@route('/mail/mailing/<int:mailing_id>/unsubscribe', type='http', website=True, auth='public')
|
|
def mailing(self, mailing_id, email=None, res_id=None, **post):
|
|
mailing = request.env['mail.mass_mailing'].sudo().browse(mailing_id)
|
|
if mailing.exists():
|
|
if mailing.mailing_model_name == 'mail.mass_mailing.contact':
|
|
contacts = request.env['mail.mass_mailing.contact'].sudo().search([('email', '=', email)])
|
|
return request.render('website_mass_mailing.page_unsubscribe', {
|
|
'contacts': contacts,
|
|
'email': email,
|
|
'mailing_id': mailing_id})
|
|
else:
|
|
super(MassMailController, self).mailing(mailing_id, email=email, res_id=res_id, **post)
|
|
return request.render('website_mass_mailing.page_unsubscribed')
|
|
|
|
@route('/mail/mailing/unsubscribe', type='json', auth='none')
|
|
def unsubscribe(self, mailing_id, opt_in_ids, opt_out_ids, email):
|
|
mailing = request.env['mail.mass_mailing'].sudo().browse(mailing_id)
|
|
if mailing.exists():
|
|
mailing.update_opt_out(email, opt_in_ids, False)
|
|
mailing.update_opt_out(email, opt_out_ids, True)
|
|
|
|
@route('/website_mass_mailing/is_subscriber', type='json', website=True, auth="public")
|
|
def is_subscriber(self, list_id, **post):
|
|
email = None
|
|
if request.uid != request.website.user_id.id:
|
|
email = request.env.user.email
|
|
elif request.session.get('mass_mailing_email'):
|
|
email = request.session['mass_mailing_email']
|
|
|
|
is_subscriber = False
|
|
if email:
|
|
contacts_count = request.env['mail.mass_mailing.contact'].sudo().search_count([('list_ids', 'in', [int(list_id)]), ('email', '=', email), ('opt_out', '=', False)])
|
|
is_subscriber = contacts_count > 0
|
|
|
|
return {'is_subscriber': is_subscriber, 'email': email}
|
|
|
|
@route('/website_mass_mailing/subscribe', type='json', website=True, auth="public")
|
|
def subscribe(self, list_id, email, **post):
|
|
Contacts = request.env['mail.mass_mailing.contact'].sudo()
|
|
name, email = Contacts.get_name_email(email)
|
|
|
|
contact_ids = Contacts.search([
|
|
('list_ids', 'in', [int(list_id)]),
|
|
('email', '=', email),
|
|
], limit=1)
|
|
if not contact_ids:
|
|
# inline add_to_list as we've already called half of it
|
|
Contacts.create({'name': name, 'email': email, 'list_ids': [(6,0,[int(list_id)])]})
|
|
elif contact_ids.opt_out:
|
|
contact_ids.opt_out = False
|
|
# add email to session
|
|
request.session['mass_mailing_email'] = email
|
|
return True
|
|
|
|
@route(['/website_mass_mailing/get_content'], type='json', website=True, auth="public")
|
|
def get_mass_mailing_content(self, newsletter_id, **post):
|
|
data = self.is_subscriber(newsletter_id, **post)
|
|
mass_mailing_list = request.env['mail.mass_mailing.list'].sudo().browse(int(newsletter_id))
|
|
data['content'] = mass_mailing_list.popup_content,
|
|
data['redirect_url'] = mass_mailing_list.popup_redirect_url
|
|
return data
|