From a42d020a3470a871a5da031e1bf7d41460c8874b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?=
Date: Mon, 23 Sep 2013 17:40:39 +0200
Subject: [PATCH] [CLEAN] [IMP] website_blog: cleaned blog.post,
blog.post.category and blog.tag models; added basic appearance of tags and
base routing method in controllers. Will have to be improved in a future
branch.
bzr revid: tde@openerp.com-20130923154039-ppn1loy002tcppun
---
addons/website_blog/controllers/main.py | 64 +++++++++++++------
.../views/website_blog_templates.xml | 3 +
addons/website_blog/website_blog.py | 29 +++++++--
addons/website_blog/website_blog_demo.xml | 1 +
4 files changed, 71 insertions(+), 26 deletions(-)
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