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_mail/controllers/main.py | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website_mail/controllers/main.py')
| -rw-r--r-- | addons/website_mail/controllers/main.py | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py new file mode 100644 index 00000000..cd0bd09b --- /dev/null +++ b/addons/website_mail/controllers/main.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. +from odoo import http +from odoo.http import request + + +class WebsiteMail(http.Controller): + + @http.route(['/website_mail/follow'], type='json', auth="public", website=True) + def website_message_subscribe(self, id=0, object=None, message_is_follower="on", email=False, **post): + # TDE FIXME: check this method with new followers + res_id = int(id) + is_follower = message_is_follower == 'on' + record = request.env[object].browse(res_id).exists() + if not record: + return False + + record.check_access_rights('read') + record.check_access_rule('read') + + # search partner_id + if request.env.user != request.website.user_id: + partner_ids = request.env.user.partner_id.ids + else: + # mail_thread method + partner_ids = [p.id for p in request.env['mail.thread'].sudo()._mail_find_partner_from_emails([email], records=record.sudo()) if p] + if not partner_ids or not partner_ids[0]: + name = email.split('@')[0] + partner_ids = request.env['res.partner'].sudo().create({'name': name, 'email': email}).ids + # add or remove follower + if is_follower: + record.sudo().message_unsubscribe(partner_ids) + return False + else: + # add partner to session + request.session['partner_id'] = partner_ids[0] + record.sudo().message_subscribe(partner_ids) + return True + + @http.route(['/website_mail/is_follower'], type='json', auth="public", website=True) + def is_follower(self, records, **post): + """ Given a list of `models` containing a list of res_ids, return + the res_ids for which the user is follower and some practical info. + + :param records: dict of models containing record IDS, eg: { + 'res.model': [1, 2, 3..], + 'res.model2': [1, 2, 3..], + .. + } + + :returns: [ + {'is_user': True/False, 'email': 'admin@yourcompany.example.com'}, + {'res.model': [1, 2], 'res.model2': [1]} + ] + """ + user = request.env.user + partner = None + public_user = request.website.user_id + if user != public_user: + partner = request.env.user.partner_id + elif request.session.get('partner_id'): + partner = request.env['res.partner'].sudo().browse(request.session.get('partner_id')) + + res = {} + if partner: + for model in records: + mail_followers_ids = request.env['mail.followers'].sudo().read_group([ + ('res_model', '=', model), + ('res_id', 'in', records[model]), + ('partner_id', '=', partner.id) + ], ['res_id', 'follow_count:count(id)'], ['res_id']) + # `read_group` will filter out the ones without count result + for m in mail_followers_ids: + res.setdefault(model, []).append(m['res_id']) + + return [{ + 'is_user': user != public_user, + 'email': partner.email if partner else "", + }, res] |
