diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/website_mass_mailing/controllers | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website_mass_mailing/controllers')
| -rw-r--r-- | addons/website_mass_mailing/controllers/__init__.py | 4 | ||||
| -rw-r--r-- | addons/website_mass_mailing/controllers/main.py | 85 |
2 files changed, 89 insertions, 0 deletions
diff --git a/addons/website_mass_mailing/controllers/__init__.py b/addons/website_mass_mailing/controllers/__init__.py new file mode 100644 index 00000000..5d4b25db --- /dev/null +++ b/addons/website_mass_mailing/controllers/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import main diff --git a/addons/website_mass_mailing/controllers/main.py b/addons/website_mass_mailing/controllers/main.py new file mode 100644 index 00000000..ff25f92c --- /dev/null +++ b/addons/website_mass_mailing/controllers/main.py @@ -0,0 +1,85 @@ +# -*- 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.osv import expression +from odoo.addons.mass_mailing.controllers.main import MassMailController + + +class MassMailController(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): + # FIXME the 14.0 was released with this but without the google_recaptcha + # module being added as a dependency of the website_mass_mailing module. + # This is to be fixed in master of course but in stable, we'll have to + # use this workaround. + if hasattr(request.env['ir.http'], '_verify_request_recaptcha_token') \ + and 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 + mass_mailing_list = request.env['mailing.list'].sudo().browse(list_id) + return { + 'toast_type': 'success', + 'toast_content': mass_mailing_list.toast_content + } + + @route(['/website_mass_mailing/get_content'], type='json', website=True, auth="public") + def get_mass_mailing_content(self, newsletter_id, **post): + PopupModel = request.env['website.mass_mailing.popup'].sudo() + data = self.is_subscriber(newsletter_id, **post) + domain = expression.AND([request.website.website_domain(), [('mailing_list_id', '=', newsletter_id)]]) + mass_mailing_popup = PopupModel.search(domain, limit=1) + if mass_mailing_popup: + data['popup_content'] = mass_mailing_popup.popup_content + else: + data.update(PopupModel.default_get(['popup_content'])) + return data + + @route(['/website_mass_mailing/set_content'], type='json', website=True, auth="user") + def set_mass_mailing_content(self, newsletter_id, content, **post): + PopupModel = request.env['website.mass_mailing.popup'] + domain = expression.AND([request.website.website_domain(), [('mailing_list_id', '=', newsletter_id)]]) + mass_mailing_popup = PopupModel.search(domain, limit=1) + if mass_mailing_popup: + mass_mailing_popup.write({'popup_content': content}) + else: + PopupModel.create({ + 'mailing_list_id': newsletter_id, + 'popup_content': content, + 'website_id': request.website.id, + }) + return True |
