summaryrefslogtreecommitdiff
path: root/addons/website_mail
diff options
context:
space:
mode:
authorDharmraj Jhala (OpenERP) <dizzy.zala@gmail.com>2014-03-21 13:03:01 +0530
committerDharmraj Jhala (OpenERP) <dizzy.zala@gmail.com>2014-03-21 13:03:01 +0530
commit8bb5bfa241df9bcfa5a9bf3dbad4eaab59d54fec (patch)
treeb78959d4806327445b6b77181749be2301fe13dd /addons/website_mail
parent9f51a6d45353f3a1c87a3a95eaf29476b61fd4a6 (diff)
parent54d8cd1e866d1a6dc0b594588a6d900d6404728c (diff)
[MERGE] with latest trunk addons
bzr revid: dizzy.zala@gmail.com-20140320063836-xzno2dwuaxt1y033 bzr revid: dizzy.zala@gmail.com-20140321073301-hvfqqnch7jfktinb
Diffstat (limited to 'addons/website_mail')
-rw-r--r--addons/website_mail/controllers/main.py76
-rw-r--r--addons/website_mail/static/src/css/website_mail.css1
-rw-r--r--addons/website_mail/static/src/js/website_mail.js9
-rw-r--r--addons/website_mail/views/snippets.xml4
4 files changed, 58 insertions, 32 deletions
diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py
index 601e1387f0a..a6b400ec4a1 100644
--- a/addons/website_mail/controllers/main.py
+++ b/addons/website_mail/controllers/main.py
@@ -26,43 +26,67 @@ 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
+ # 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)
+ @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..."/>
<span class="input-group-btn">
- <a href="#" class="btn btn-default js_unfollow_btn">unsubscribe</a>
- <a href="#" class="btn btn-primary js_follow_btn">subscribe</a>
+ <a href="#" class="btn btn-default js_unfollow_btn">Unsubscribe</a>
+ <a href="#" class="btn btn-primary js_follow_btn">Subscribe</a>
</span>
<div class="alert alert-success hidden">thanks for your subscription!</div>
</div>