Purpose of this commit is to improve model of followers, notably management
code and its use in routes. Indeed it is quite an old model and code had
to be cleaned a bit to improve code readability and maintenance.
In this commit we
* remove unnecessary code examples in gamification about followers: using
that model as example of code for goals is probably not a good idea as it
is technical;
* rewrite routes called by JS are simplified to better match JS
implementation;
* introduce computed fields to fetch related partner or channel name,
email (partner only) and active status;
LINKS
Task 1933771
Task 2078313
closes odoo/odoo#39808
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Co-authored-by: Remy Voet <ryv@odoo.com>
Co-authored-by: jgi-odoo <jgi@odoo.com>
Co-authored-by: Xavier-Do <xdo@odoo.com>
64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
# -*- 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, model, res_id, **post):
|
|
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'))
|
|
|
|
values = {
|
|
'is_user': user != public_user,
|
|
'email': partner.email if partner else "",
|
|
'is_follower': False,
|
|
}
|
|
|
|
record_sudo = request.env[model].sudo().browse(int(res_id))
|
|
if partner and record_sudo.exists():
|
|
values['is_follower'] = bool(request.env['mail.followers'].sudo().search_count([
|
|
('res_model', '=', model),
|
|
('res_id', '=', record_sudo.id),
|
|
('partner_id', '=', partner.id)
|
|
]))
|
|
return values
|