From 3624a3beb2c09aa0c014b991a326d1b90c459917 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Tue, 18 Mar 2014 11:15:05 +0100 Subject: [PATCH] [IMP] website_mail: refactor follow button; add partner_id in session for public user bzr revid: chm@openerp.com-20140318101505-4yivw8h5oujyhm9b --- addons/website_mail/controllers/main.py | 78 ++++++++++++------- .../static/src/css/website_mail.css | 1 - .../static/src/js/website_mail.js | 9 ++- addons/website_mail/views/snippets.xml | 4 +- 4 files changed, 60 insertions(+), 32 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 } diff --git a/addons/website_mail/static/src/css/website_mail.css b/addons/website_mail/static/src/css/website_mail.css index 25d88ebf191..5678442416c 100644 --- a/addons/website_mail/static/src/css/website_mail.css +++ b/addons/website_mail/static/src/css/website_mail.css @@ -1,5 +1,4 @@ .js_follow[data-follow='on'] .js_follow_btn , -.js_follow[data-follow='on'] .js_follow_email, .js_follow[data-follow='off'] .js_unfollow_btn { display: none; } \ No newline at end of file diff --git a/addons/website_mail/static/src/js/website_mail.js b/addons/website_mail/static/src/js/website_mail.js index 672a21324a8..bd34b526ddd 100644 --- a/addons/website_mail/static/src/js/website_mail.js +++ b/addons/website_mail/static/src/js/website_mail.js @@ -9,13 +9,14 @@ var self = this; // set value and display button - openerp.jsonRpc('/website_mail/is_follower/', 'call', { + self.$target.find("input").removeClass("hidden"); + openerp.jsonRpc('/website_mail/is_follower', 'call', { model: this.$target.data('object'), id: +this.$target.data('id'), }).always(function (data) { self.$target.find('input.js_follow_email') .val(data.email ? data.email : "") - .attr("disabled", data.email.length ? "disabled" : false); + .attr("disabled", data.is_follower && data.email.length ? "disabled" : false); self.$target.attr("data-follow", data.is_follower ? 'on' : 'off'); self.$target.removeClass("hidden"); }); @@ -47,8 +48,10 @@ 'email': $email.length ? $email.val() : false, }).then(function (follow) { if (follow) { - self.$target.find(" > *").toggleClass("hidden"); + self.$target.find(".js_follow_email, .input-group-btn").addClass("hidden"); + self.$target.find(".alert").removeClass("hidden"); } + self.$target.find('input.js_follow_email').attr("disabled", follow ? "disabled" : false); self.$target.attr("data-follow", follow ? 'on' : 'off'); }); }, diff --git a/addons/website_mail/views/snippets.xml b/addons/website_mail/views/snippets.xml index 196ad39dac8..a930f2852a1 100644 --- a/addons/website_mail/views/snippets.xml +++ b/addons/website_mail/views/snippets.xml @@ -509,8 +509,8 @@ class="js_follow_email form-control" placeholder="your email..."/> - unsubscribe - subscribe + Unsubscribe + Subscribe