summaryrefslogtreecommitdiff
path: root/addons/website_mail/controllers/main.py
diff options
context:
space:
mode:
authorchm@openerp.com <>2014-03-18 11:15:05 +0100
committerchm@openerp.com <>2014-03-18 11:15:05 +0100
commit3624a3beb2c09aa0c014b991a326d1b90c459917 (patch)
tree1ee3dd05d3e3b31b5c577045cdde1fdf1b4dcb93 /addons/website_mail/controllers/main.py
parent5196cd6e8c577d35c5788df70c7c59d8e7176183 (diff)
[IMP] website_mail: refactor follow button; add partner_id in session for public user
bzr revid: chm@openerp.com-20140318101505-4yivw8h5oujyhm9b
Diffstat (limited to 'addons/website_mail/controllers/main.py')
-rw-r--r--addons/website_mail/controllers/main.py78
1 files changed, 52 insertions, 26 deletions
diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py
index 601e1387f0a..2eba9022dba 100644
--- a/addons/website_mail/controllers/main.py
+++ b/addons/website_mail/controllers/main.py
@@ -26,43 +26,69 @@ from openerp.addons.web.http import request
class WebsiteMail(http.Controller):
- def _find_or_create_partner(self, email, context=None):
- # TDE TODO: FIXME: use mail_thread method
+ @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):
+ cr, uid, context = request.cr, request.uid, request.context
+
partner_obj = request.registry['res.partner']
user_obj = request.registry['res.users']
- partner_ids = []
- if email and email != u'false': # post contains stringified booleans
- partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", email)], context=request.context)
- if not partner_ids:
- partner_ids = [partner_obj.name_create(request.cr, SUPERUSER_ID, email, request.context)[0]]
- else:
- partner_ids = [user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id.id]
- return partner_ids
+ website = request.registry['website']
- @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):
_id = int(id)
_message_is_follower = message_is_follower == 'on'
_object = request.registry[object]
- partner_ids = self._find_or_create_partner(email, request.context)
- if _message_is_follower:
- _object.check_access_rule(request.cr, request.uid, [_id], 'read', request.context)
- _object.message_unsubscribe(request.cr, SUPERUSER_ID, [_id], partner_ids, context=request.context)
+ # search partner_id
+ public_id = website.get_public_user(cr, uid, context)
+ if uid != public_id:
+ partner_ids = [user_obj.browse(cr, uid, uid, context).partner_id.id]
else:
- _object.check_access_rule(request.cr, request.uid, [_id], 'read', request.context)
- _object.message_subscribe(request.cr, SUPERUSER_ID, [_id], partner_ids, context=request.context)
- obj = _object.browse(request.cr, request.uid, _id)
- follower_ids = [p.id for p in obj.message_follower_ids]
+ # mail_thread method
+ partner_ids = _object._find_partner_from_emails(
+ cr, SUPERUSER_ID, _id, [email], context=context, check_followers=True)
+ if not partner_ids or not partner_ids[0]:
+ partner_ids = [partner_obj.create(cr, SUPERUSER_ID, {'name': email, 'email': email}, context=context)]
- return partner_ids[0] in follower_ids and 1 or 0
+ print partner_ids
- @http.route(['/website_mail/is_follower/'], type='json', auth="public", website=True)
+ # add or remove follower
+ if _message_is_follower:
+ _object.check_access_rule(cr, uid, [_id], 'read', context)
+ _object.message_unsubscribe(cr, SUPERUSER_ID, [_id], partner_ids, context=context)
+ return False
+ else:
+ _object.check_access_rule(cr, uid, [_id], 'read', context)
+ # add partner to session
+ request.session['partner_id'] = partner_ids[0]
+ _object.message_subscribe(cr, SUPERUSER_ID, [_id], partner_ids, context=context)
+ return True
+
+ @http.route(['/website_mail/is_follower'], type='json', auth="public", website=True)
def call(self, model, id, **post):
- email = request.registry['res.users'].browse(request.cr, request.uid, request.uid, request.context).partner_id.email
- value = request.registry.get(model).read(request.cr, request.uid, [id], ['message_is_follower'], request.context)
+ cr, uid, context = request.cr, request.uid, request.context
+
+ partner_obj = request.registry.get('res.partner')
+ users_obj = request.registry.get('res.users')
+ obj = request.registry.get(model)
+ website = request.registry['website']
+
+ partner_id = None
+ public_id = website.get_public_user(cr, uid, context)
+ if uid != public_id:
+ partner_id = users_obj.browse(cr, SUPERUSER_ID, uid, context).partner_id
+ elif request.session.get('partner_id'):
+ partner_id = partner_obj.browse(cr, SUPERUSER_ID, request.session.get('partner_id'), context)
+
+ email = ""
+ is_follower = False
+ if partner_id:
+ email = partner_id and partner_id.email
+ is_follower = partner_id.id in [
+ fol.id for fol in obj.browse(cr, SUPERUSER_ID, id, context).message_follower_ids]
+
return {
- 'email': email,
- 'is_follower': value and value[0]['message_is_follower'] or False
+ 'is_user': uid != public_id,
+ 'email': email,
+ 'is_follower': is_follower
}