diff options
| author | Christophe Matthieu <chm@openerp.com> | 2013-08-06 10:56:54 +0200 |
|---|---|---|
| committer | Christophe Matthieu <chm@openerp.com> | 2013-08-06 10:56:54 +0200 |
| commit | c0f75a59310540d93eec64f6cdfa577c803e5905 (patch) | |
| tree | 56d9150070c2f69d2cc799a198b5bc3327994be9 /addons | |
| parent | bf86ccf433f9c76d9467a9fdd18048f060f52774 (diff) | |
[IMP] website_mail: subscribe (add followers)
bzr revid: chm@openerp.com-20130806085654-n3z6f9u991k9wky3
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/website_mail/controllers/main.py | 50 | ||||
| -rw-r--r-- | addons/website_mail/views/website_mail.xml | 22 |
2 files changed, 61 insertions, 11 deletions
diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py index 2c67e3c6ba8..37178f05c7c 100644 --- a/addons/website_mail/controllers/main.py +++ b/addons/website_mail/controllers/main.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from openerp import SUPERUSER_ID from openerp.addons.web import http from openerp.addons.web.http import request import werkzeug @@ -12,11 +13,12 @@ _months = {1:_("January"), 2:_("February"), 3:_("March"), 4:_("April"), 5:_("May class website_mail(http.Controller): - @http.route(['/blog', '/blog/<int:mail_group_id>', '/blog/<int:mail_group_id>/<int:blog_id>'], type='http', auth="public") + @http.route(['/blog', '/blog/<int:mail_group_id>/', '/blog/<int:mail_group_id>/<int:blog_id>/'], type='http', auth="public") def blog(self, mail_group_id=None, blog_id=None, **post): website = request.registry['website'] group_obj = request.registry['mail.group'] message_obj = request.registry['mail.message'] + user_obj = request.registry['res.users'] values = website.get_rendering_context({ 'blog_ids': None, @@ -25,7 +27,14 @@ class website_mail(http.Controller): 'prev_date': None, 'next_date': None, 'mail_group_id': mail_group_id, + 'subscribe': post.get('subscribe'), }) + + if request.uid != request.public_uid and mail_group_id: + message_follower_ids = group_obj.read(request.cr, request.uid, [mail_group_id], ['message_follower_ids'])[0]['message_follower_ids'] + parent_id = user_obj.browse(request.cr, request.uid, request.uid).partner_id.id + values['subscribe'] = parent_id in message_follower_ids + domain = mail_group_id and [("res_id", "=", mail_group_id)] or [] for group in message_obj.read_group(request.cr, request.uid, domain + group_obj.get_public_blog(request.cr, request.uid), ['subject', 'date'], groupby="date", orderby="create_date asc"): @@ -88,9 +97,9 @@ class website_mail(http.Controller): request.session.body = False if post.get('body'): - return '%s/blog/%s/%s' % (url, mail_group_id, blog_id) + return '%s/blog/%s/%s/' % (url, mail_group_id, blog_id) else: - return werkzeug.utils.redirect("/blog/%s/%s" % (mail_group_id, blog_id)) + return werkzeug.utils.redirect("/blog/%s/%s/" % (mail_group_id, blog_id)) @http.route(['/blog/<int:mail_group_id>/new'], type='http', auth="public") def new_blog_post(self, mail_group_id=None, **post): @@ -102,4 +111,37 @@ class website_mail(http.Controller): subtype='mt_comment', context={'mail_create_nosubsrequest.cribe': True}, ) - return werkzeug.utils.redirect("/blog/%s/%s" % (mail_group_id, blog_id)) + return werkzeug.utils.redirect("/blog/%s/%s/" % (mail_group_id, blog_id)) + + @http.route(['/blog/<int:mail_group_id>/subscribe', '/blog/<int:mail_group_id>/<int:blog_id>/subscribe'], type='http', auth="public") + def subscribe(self, mail_group_id=None, blog_id=None, **post): + partner_obj = request.registry['res.partner'] + group_obj = request.registry['mail.group'] + user_obj = request.registry['res.users'] + + if mail_group_id and 'subscribe' in post and (post.get('email') or request.uid != request.public_uid): + if request.uid == request.public_uid: + partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))]) + if not partner_ids: + partner_ids = [partner_obj.create(request.cr, SUPERUSER_ID, {"email": post.get('email'), "name": "Subscribe: %s" % post.get('email')})] + else: + partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id] + group_obj.message_subscribe(request.cr, request.uid, [mail_group_id], partner_ids) + + return self.blog(mail_group_id=mail_group_id, blog_id=blog_id, subscribe=post.get('email')) + + @http.route(['/blog/<int:mail_group_id>/unsubscribe', '/blog/<int:mail_group_id>/<int:blog_id>/unsubscribe'], type='http', auth="public") + def unsubscribe(self, mail_group_id=None, blog_id=None, **post): + partner_obj = request.registry['res.partner'] + group_obj = request.registry['mail.group'] + user_obj = request.registry['res.users'] + + if mail_group_id and 'unsubscribe' in post and (post.get('email') or request.uid != request.public_uid): + if request.uid == request.public_uid: + partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))]) + else: + partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id] + group_obj.message_unsubscribe(request.cr, request.uid, [mail_group_id], partner_ids) + + return self.blog(mail_group_id=mail_group_id, blog_id=blog_id, subscribe=None) + diff --git a/addons/website_mail/views/website_mail.xml b/addons/website_mail/views/website_mail.xml index 687024210d2..92c0126a700 100644 --- a/addons/website_mail/views/website_mail.xml +++ b/addons/website_mail/views/website_mail.xml @@ -18,7 +18,7 @@ <field name="arch" type="xml"> <data> <xpath expr="//li[last()]" position="after"> - <li class="pull-right"><a href="/blog/%(website_mail.website_mail_blog)d">News</a></li> + <li class="pull-right"><a href="/blog/%(website_mail.website_mail_blog)d/">News</a></li> </xpath> </data> </field> @@ -29,7 +29,7 @@ <field name="arch" type="xml"> <data> <xpath expr="//a[@href='/page/website.news']" position="replace"> - <a href="/blog/%(website_mail.website_mail_blog)d">News</a> + <a href="/blog/%(website_mail.website_mail_blog)d/">News</a> </xpath> </data> </field> @@ -50,7 +50,7 @@ <div class="span4"> <ul class="nav nav-list"> <a t-if="mail_group_id and editable" t-att-href="'/blog/%%s/new' %% mail_group_id" class="btn">Add a new Blog</a> - <li class="nav-header"><a t-att-href="'/blog/%%s' %% mail_group_id">BLOG ARCHIVE</a></li> + <li class="nav-header"><a t-att-href="'/blog/%%s/' %% mail_group_id">BLOG ARCHIVE</a></li> <!-- TODO: check qweb iteration --> <li t-foreach="nav_list" t-as="year" class="js_nav_year"> <t t-set="year" t-value="nav_list[year]"/> @@ -63,6 +63,14 @@ </t> </ul> </li> + <form action="./subscribe" method="POST" class="form-inline" t-if="not subscribe"> + <input placeholder="Email Address" type="email" name="email" class="input-medium" t-if="request.uid == request.public_uid"/> + <button type="submit" class="btn btn-primary" name="subscribe">Subscribe</button> + </form> + <form action="./unsubscribe" method="POST" class="form-inline" t-if="subscribe"> + <input type="hidden" name="email" t-att-value="subscribe"/> + <button type="submit" class="btn" name="unsubscribe">Unsubscribe</button> + </form> </ul> </div> <div class="span8" t-if="blog_id"> @@ -79,7 +87,7 @@ <div t-field="blog_id.date"/> </small> </div> - <ul class="media-list"> + <ul class="media-list" id="comment"> <li t-foreach="blog_id.child_ids" t-as="comment" class="media"> <div class="media-body"> <a href="#" t-att-data-id="blog_id.id" class="pull-right" t-if="editable"> @@ -108,12 +116,12 @@ <span t-att-class="'label label-success js_unpublish %%s' %% (not blog.website_published and 'hidden' or '')">Click to Unpublish</span> <span t-att-class="'label label-important js_publish %%s' %% (blog.website_published and 'hidden' or '')">Click to Publish</span> </a> - <h4 class="media-heading" ><a t-att-href="'/blog/%%s/%%s' %% (blog.res_id, blog.id)" t-field="blog.subject"></a></h4> + <h4 class="media-heading" ><a t-att-href="'/blog/%%s/%%s#comment' %% (blog.res_id, blog.id)" t-field="blog.subject"></a></h4> <div class="media"> <div t-field="blog.body"/> <small class="pull-left muted text-right" t-if="len(blog.child_ids)"> - <a t-if="len(blog.child_ids) <= 1" t-att-href="'/blog/%%s/%%s' %% (blog.res_id, blog.id)"><t t-esc="len(blog.child_ids)"/> Message</a> - <a t-if="len(blog.child_ids) > 1" t-att-href="'/blog/%%s/%%s' %% (blog.res_id, blog.id)"><t t-esc="len(blog.child_ids)"/> Messages</a> + <a t-if="len(blog.child_ids) <= 1" t-att-href="'/blog/%%s/%%s#comment' %% (blog.res_id, blog.id)"><t t-esc="len(blog.child_ids)"/> Message</a> + <a t-if="len(blog.child_ids) > 1" t-att-href="'/blog/%%s/%%s#comment' %% (blog.res_id, blog.id)"><t t-esc="len(blog.child_ids)"/> Messages</a> </small> <small class="pull-right muted text-right"> <div t-field="blog.author_id"/> |
