diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py index 09c912cc61c..b727bbbafd5 100644 --- a/addons/website_blog/controllers/main.py +++ b/addons/website_blog/controllers/main.py @@ -38,12 +38,16 @@ class website_mail(http.Controller): '/blog//', '/blog///', '/blog//page//', - '/blog///page//' + '/blog///page//', + '/blog/tag/', + '/blog/tag//', ], type='http', auth="public") - def blog(self, category_id=None, blog_post_id=None, page=1, **post): + def blog(self, category_id=None, blog_post_id=None, tag_id=None, page=1, **post): """ Prepare all values to display the blog. :param integer category_id: id of the category currently browsed. + :param integer tag_id: id of the tag that is currently used to filter + blog posts :param integer blog_post_id: ID of the blog post currently browsed. If not set, the user is browsing the category and a post pager is calculated. If set the user @@ -64,12 +68,15 @@ class website_mail(http.Controller): - 'categories': list of browse records of categories - 'pager': the pager to display, posts pager in a category or comments pager in a blog post + - 'tag': current tag, if tag_id - 'nav_list': a dict [year][month] for archives navigation """ cr, uid, context = request.cr, request.uid, request.context blog_post_obj = request.registry['blog.post'] + tag_obj = request.registry['blog.tag'] category_obj = request.registry['blog.category'] + tag = None category = None blog_post = None blog_posts = None @@ -78,24 +85,40 @@ class website_mail(http.Controller): category_ids = category_obj.search(cr, uid, [], context=context) categories = category_obj.browse(cr, uid, category_ids, context=context) + + if tag_id: + tag = tag_obj.browse(cr, uid, tag_id, context=context) if category_id: category = category_obj.browse(cr, uid, category_id, context=context) - if not blog_post_id: - pager = request.website.pager( - url="/blog/%s/" % category_id, - total=len(category.blog_ids), - page=page, - step=self._category_post_per_page, - scope=7 - ) - pager_begin = (page - 1) * self._category_post_per_page - pager_end = page * self._category_post_per_page - blog_posts = category.blog_ids[pager_begin:pager_end] - if category_id and blog_post_id: + + if category and blog_post_id: blog_post = blog_post_obj.browse(cr, uid, blog_post_id, context=context) + blog_message_ids = blog_post.website_message_ids + else: + if category and tag: + blog_posts = [cat_post for cat_post in category.blog_post_ids + if tag_id in [post_tag.id for post_tag in cat_post.tag_ids]] + elif category: + blog_posts = category.blog_post_ids + elif tag: + blog_posts = tag.blog_post_ids + + if blog_posts: + pager = request.website.pager( + url="/blog/%s/" % category_id, + total=len(blog_posts), + page=page, + step=self._category_post_per_page, + scope=7 + ) + pager_begin = (page - 1) * self._category_post_per_page + pager_end = page * self._category_post_per_page + blog_posts = blog_posts[pager_begin:pager_end] + + if blog_post: pager = request.website.pager( url="/blog/%s/%s/" % (category_id, blog_post_id), - total=len(blog_post.website_message_ids), + total=len(blog_message_ids), page=page, step=self._post_comment_per_page, scope=7 @@ -112,10 +135,11 @@ class website_mail(http.Controller): nav[year]['months'].append(group) values = { - 'blog_post': blog_post, - 'blog_posts': blog_posts, 'categories': categories, 'category': category, + 'tag': tag, + 'blog_post': blog_post, + 'blog_posts': blog_posts, 'pager': pager, 'nav_list': nav, 'unable_editor': post.get('unable_editor') @@ -160,17 +184,17 @@ class website_mail(http.Controller): context=dict(context, mail_create_nosubcribe=True)) request.session.body = False - return self.blog(category_id=category_id, blog_post_id=blog_post_id) + return werkzeug.utils.redirect("/blog/%s/%s/?unable_editor=1" % (category_id, blog_post_id)) @website.route(['/blog//new'], type='http', auth="public") def create_blog_post(self, category_id=None, **post): cr, uid, context = request.cr, request.uid, request.context create_context = dict(context, mail_create_nosubscribe=True) - blog_id = request.registry['blog.post'].create( + blog_post_id = request.registry['blog.post'].create( request.cr, request.uid, { 'category_id': category_id, 'name': _("Blog title"), 'content': '', 'website_published': False, }, context=create_context) - return werkzeug.utils.redirect("/blog/%s/%s/?unable_editor=1" % (category_id, blog_id)) + return werkzeug.utils.redirect("/blog/%s/%s/?unable_editor=1" % (category_id, blog_post_id)) diff --git a/addons/website_blog/views/website_blog_templates.xml b/addons/website_blog/views/website_blog_templates.xml index 8edf269ab53..59d39252f77 100644 --- a/addons/website_blog/views/website_blog_templates.xml +++ b/addons/website_blog/views/website_blog_templates.xml @@ -41,6 +41,9 @@ on

+ + +

diff --git a/addons/website_blog/website_blog.py b/addons/website_blog/website_blog.py index 1df81ee98f6..e29a8a74a61 100644 --- a/addons/website_blog/website_blog.py +++ b/addons/website_blog/website_blog.py @@ -38,7 +38,7 @@ class BlogCategory(osv.Model): 'name': fields.char('Name', required=True), 'description': fields.text('Description'), 'template': fields.html('Template'), - 'blog_ids': fields.one2many( + 'blog_post_ids': fields.one2many( 'blog.post', 'category_id', 'Blogs', ), @@ -52,6 +52,11 @@ class BlogTag(osv.Model): _columns = { 'name': fields.char('Name', required=True), + 'blog_post_ids': fields.many2many( + 'blog.tag', 'blog_tag_rel', + 'tag_id', 'blog_post_id', + 'Posts', + ), } @@ -85,7 +90,7 @@ class BlogPost(osv.Model): 'name': fields.char('Title', required=True), 'category_id': fields.many2one( 'blog.category', 'Category', - ondelete='set null', + required=True, ondelete='cascade', ), 'tag_ids': fields.many2many( 'blog.tag', 'blog_tag_rel', @@ -121,10 +126,22 @@ class BlogPost(osv.Model): ), 'menu_id': fields.many2one('ir.ui.menu', "Menu", readonly=True), # creation / update stuff - 'create_date': fields.datetime("Created on", select=True, readonly=True), - 'create_uid': fields.many2one('res.users', 'Author', select=True, readonly=True), - 'write_date': fields.datetime("last Modified on", select=True, readonly=True), - 'write_uid': fields.many2one('res.users', "Last Contributor", select=True, readonly=True), + 'create_date': fields.datetime( + 'Created on', + select=True, readonly=True, + ), + 'create_uid': fields.many2one( + 'res.users', 'Author', + select=True, readonly=True, + ), + 'write_date': fields.datetime( + 'Last Modified on', + select=True, readonly=True, + ), + 'write_uid': fields.many2one( + 'res.users', 'Last Contributor', + select=True, readonly=True, + ), } def create_history(self, cr, uid, ids, vals, context=None): diff --git a/addons/website_blog/website_blog_demo.xml b/addons/website_blog/website_blog_demo.xml index 118b18c4ea0..8340990ebc4 100644 --- a/addons/website_blog/website_blog_demo.xml +++ b/addons/website_blog/website_blog_demo.xml @@ -41,6 +41,7 @@ company, with your clients and implement it now for your business.

Personalise Dashboards + You like OpenERP, but feel like you want to personalise it more? Now, OpenERP