Before this commit, the newsletter popup was using its own mechanism instead of the popup snippet, making a lot of extra code. Now, the newsletter popup snippet just use the behavior of both the popup snippet and the newsletter snippet. Community: https://github.com/odoo/odoo/pull/74667 Upgrade: https://github.com/odoo/upgrade/pull/2742 task-2246975
52 lines
2.3 KiB
Python
52 lines
2.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import _
|
|
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, **post):
|
|
email = None
|
|
if not request.env.user._is_public():
|
|
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['mailing.contact.subscription'].sudo().search_count([('list_id', 'in', [int(list_id)]), ('contact_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):
|
|
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.contact.subscription'].sudo()
|
|
Contacts = request.env['mailing.contact'].sudo()
|
|
name, email = Contacts.get_name_email(email)
|
|
|
|
subscription = ContactSubscription.search([('list_id', '=', int(list_id)), ('contact_id.email', '=', email)], limit=1)
|
|
if not subscription:
|
|
# inline add_to_list as we've already called half of it
|
|
contact_id = Contacts.search([('email', '=', email)], limit=1)
|
|
if not contact_id:
|
|
contact_id = Contacts.create({'name': name, 'email': email})
|
|
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['mass_mailing_email'] = email
|
|
return {
|
|
'toast_type': 'success',
|
|
'toast_content': _("Thanks for subscribing!"),
|
|
}
|