67 lines
2.9 KiB
Python
67 lines
2.9 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import tools, _
|
||
|
from odoo.http import route, request
|
||
|
from odoo.addons.mass_mailing.controllers import main
|
||
|
|
||
|
|
||
|
class MassMailController(main.MassMailController):
|
||
|
|
||
|
@route('/website_mass_mailing/is_subscriber', type='json', website=True, auth='public')
|
||
|
def is_subscriber(self, list_id, subscription_type, **post):
|
||
|
value = self._get_value(subscription_type)
|
||
|
fname = self._get_fname(subscription_type)
|
||
|
is_subscriber = False
|
||
|
if value and fname:
|
||
|
contacts_count = request.env['mailing.subscription'].sudo().search_count(
|
||
|
[('list_id', 'in', [int(list_id)]), (f'contact_id.{fname}', '=', value), ('opt_out', '=', False)])
|
||
|
is_subscriber = contacts_count > 0
|
||
|
|
||
|
return {'is_subscriber': is_subscriber, 'value': value}
|
||
|
|
||
|
def _get_value(self, subscription_type):
|
||
|
value = None
|
||
|
if subscription_type == 'email':
|
||
|
if not request.env.user._is_public():
|
||
|
value = request.env.user.email
|
||
|
elif request.session.get('mass_mailing_email'):
|
||
|
value = request.session['mass_mailing_email']
|
||
|
return value
|
||
|
|
||
|
def _get_fname(self, subscription_type):
|
||
|
return 'email' if subscription_type == 'email' else ''
|
||
|
|
||
|
@route('/website_mass_mailing/subscribe', type='json', website=True, auth='public')
|
||
|
def subscribe(self, list_id, value, subscription_type, **post):
|
||
|
if not request.env['ir.http']._verify_request_recaptcha_token('website_mass_mailing_subscribe'):
|
||
|
return {
|
||
|
'toast_type': 'danger',
|
||
|
'toast_content': _("Suspicious activity detected by Google reCaptcha."),
|
||
|
}
|
||
|
|
||
|
ContactSubscription = request.env['mailing.subscription'].sudo()
|
||
|
Contacts = request.env['mailing.contact'].sudo()
|
||
|
if subscription_type == 'email':
|
||
|
name, value = tools.parse_contact_from_email(value)
|
||
|
elif subscription_type == 'mobile':
|
||
|
name = value
|
||
|
|
||
|
fname = self._get_fname(subscription_type)
|
||
|
subscription = ContactSubscription.search(
|
||
|
[('list_id', '=', int(list_id)), (f'contact_id.{fname}', '=', value)], limit=1)
|
||
|
if not subscription:
|
||
|
# inline add_to_list as we've already called half of it
|
||
|
contact_id = Contacts.search([(fname, '=', value)], limit=1)
|
||
|
if not contact_id:
|
||
|
contact_id = Contacts.create({'name': name, fname: value})
|
||
|
ContactSubscription.create({'contact_id': contact_id.id, 'list_id': int(list_id)})
|
||
|
elif subscription.opt_out:
|
||
|
subscription.opt_out = False
|
||
|
# add email to session
|
||
|
request.session[f'mass_mailing_{fname}'] = value
|
||
|
return {
|
||
|
'toast_type': 'success',
|
||
|
'toast_content': _("Thanks for subscribing!"),
|
||
|
}
|