summaryrefslogtreecommitdiff
path: root/addons/website_mail/controllers
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_mail/controllers
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_mail/controllers')
-rw-r--r--addons/website_mail/controllers/__init__.py4
-rw-r--r--addons/website_mail/controllers/main.py79
2 files changed, 83 insertions, 0 deletions
diff --git a/addons/website_mail/controllers/__init__.py b/addons/website_mail/controllers/__init__.py
new file mode 100644
index 00000000..5d4b25db
--- /dev/null
+++ b/addons/website_mail/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_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]