From aa8bdfc7405763f918dea4b10e3d93b4ff38ff0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 18 Apr 2014 16:47:22 +0200 Subject: [PATCH] =?UTF-8?q?[IMP]=20website=5Fforum:=20controllers=20now=20?= =?UTF-8?q?check=20the=20karma=20in=20addition=20to=20the=20view=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bzr revid: tde@openerp.com-20140418144722-k2g2gespb3dwpio4 --- addons/website_forum/controllers/main.py | 50 ++++++++++++++++++++---- addons/website_forum/models/res_users.py | 2 +- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/addons/website_forum/controllers/main.py b/addons/website_forum/controllers/main.py index a56ece43305..639d69ae82e 100644 --- a/addons/website_forum/controllers/main.py +++ b/addons/website_forum/controllers/main.py @@ -54,6 +54,15 @@ class WebsiteForum(http.Controller): values.update(kwargs) return values + def _has_enough_karma(self, karma_name, uid=None): + Forum = request.registry['forum.forum'] + karma = hasattr(Forum, karma_name) and getattr(Forum, karma_name) or 0 + user = request.registry['res.users'].browse(request.cr, SUPERUSER_ID, uid or request.uid, context=request.context) + print karma_name, karma, user.karma + if user.karma < karma: + return False, {'error': 'not_enough_karma', 'karma': karma} + return True, {} + # Forum # -------------------------------------------------- @@ -210,6 +219,10 @@ class WebsiteForum(http.Controller): @http.route('/forum//question//ask_for_close', type='http', auth="user", multilang=True, website=True) def question_ask_for_close(self, forum, question, **post): + check_res = self._has_enough_karma(question.create_uid.id == request.uid and '_karma_modo_close_own' or '_karma_modo_close_all') + if not check_res[0]: + return werkzeug.utils.redirect("/forum/%s" % slug(forum)) + cr, uid, context = request.cr, request.uid, request.context Reason = request.registry['forum.post.reason'] reason_ids = Reason.search(cr, uid, [], context=context) @@ -233,6 +246,10 @@ class WebsiteForum(http.Controller): @http.route('/forum//question//close', type='http', auth="user", multilang=True, methods=['POST'], website=True) def question_close(self, forum, question, **post): + check_res = self._has_enough_karma(question.create_uid.id == request.uid and '_karma_modo_close_own' or '_karma_modo_close_all') + if not check_res[0]: + return werkzeug.utils.redirect("/forum/%s" % slug(forum)) + request.registry['forum.post'].write(request.cr, request.uid, [question.id], { 'state': 'close', 'closed_uid': request.uid, @@ -243,17 +260,28 @@ class WebsiteForum(http.Controller): @http.route('/forum//question//reopen', type='http', auth="user", multilang=True, website=True) def question_reopen(self, forum, question, **kwarg): + check_res = self._has_enough_karma(question.create_uid.id == request.uid and '_karma_modo_close_own' or '_karma_modo_close_all') + if not check_res[0]: + return werkzeug.utils.redirect("/forum/%s" % slug(forum)) + request.registry['forum.post'].write(request.cr, request.uid, [question.id], {'state': 'active'}, context=request.context) return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question))) @http.route('/forum//question//delete', type='http', auth="user", multilang=True, website=True) def question_delete(self, forum, question, **kwarg): - #instead of unlink record just change 'active' to false so user can undelete it. + check_res = self._has_enough_karma(question.create_uid.id == request.uid and '_karma_modo_unlink_own' or '_karma_modo_unlink_all') + if not check_res[0]: + return werkzeug.utils.redirect("/forum/%s" % slug(forum)) + request.registry['forum.post'].write(request.cr, request.uid, [question.id], {'active': False}, context=request.context) return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question))) @http.route('/forum//question//undelete', type='http', auth="user", multilang=True, website=True) def question_undelete(self, forum, question, **kwarg): + check_res = self._has_enough_karma(question.create_uid.id == request.uid and '_karma_modo_unlink_own' or '_karma_modo_unlink_all') + if not check_res[0]: + return werkzeug.utils.redirect("/forum/%s" % slug(forum)) + request.registry['forum.post'].write(request.cr, request.uid, [question.id], {'active': True}, context=request.context) return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question))) @@ -309,6 +337,10 @@ class WebsiteForum(http.Controller): @http.route('/forum//post//delete', type='http', auth="user", multilang=True, website=True) def post_delete(self, forum, post, **kwargs): + check_res = self._has_enough_karma(post.create_uid.id == request.uid and '_karma_modo_unlink_own' or '_karma_modo_unlink_all') + if not check_res[0]: + return werkzeug.utils.redirect("/forum/%s" % slug(forum)) + question = post.parent_id request.registry['forum.post'].unlink(request.cr, request.uid, [post.id], context=request.context) if question: @@ -317,6 +349,10 @@ class WebsiteForum(http.Controller): @http.route('/forum//post//edit', type='http', auth="user", website=True, multilang=True) def post_edit(self, forum, post, **kwargs): + check_res = self._has_enough_karma(post.create_uid.id == request.uid and '_karma_modo_edit_own' or '_karma_modo_edit_all') + if not check_res[0]: + return werkzeug.utils.redirect("/forum/%s" % slug(forum)) + tags = "" for tag_name in post.tag_ids: tags += tag_name.name + "," @@ -358,9 +394,9 @@ class WebsiteForum(http.Controller): return {'error': 'anonymous_user'} if request.uid == post.create_uid.id: return {'error': 'own_post'} - user = request.registry['res.users'].browse(request.cr, SUPERUSER_ID, request.uid, context=request.context) - if user.karma < request.registry['forum.forum']._karma_upvote: - return {'error': 'not_enough_karma', 'karma': request.registry['forum.forum']._karma_upvote} + check_res = self._has_enough_karma('_karma_upvote') + if not check_res[0]: + return check_res[1] upvote = True if not post.user_vote > 0 else False return request.registry['forum.post'].vote(request.cr, request.uid, [post.id], upvote=upvote, context=request.context) @@ -370,9 +406,9 @@ class WebsiteForum(http.Controller): return {'error': 'anonymous_user'} if request.uid == post.create_uid.id: return {'error': 'own_post'} - user = request.registry['res.users'].browse(request.cr, SUPERUSER_ID, request.uid, context=request.context) - if user.karma < request.registry['forum.forum']._karma_downvote: - return {'error': 'not_enough_karma', 'karma': request.registry['forum.forum']._karma_downvote} + check_res = self._has_enough_karma('_karma_downvote') + if not check_res[0]: + return check_res[1] upvote = True if post.user_vote < 0 else False return request.registry['forum.post'].vote(request.cr, request.uid, [post.id], upvote=upvote, context=request.context) diff --git a/addons/website_forum/models/res_users.py b/addons/website_forum/models/res_users.py index f3632f379c3..a9f2dfe0e93 100644 --- a/addons/website_forum/models/res_users.py +++ b/addons/website_forum/models/res_users.py @@ -42,4 +42,4 @@ class Users(osv.Model): excluded_categories.append('forum') else: excluded_categories = ['forum'] - return super(Users, self).get_serialised_gamification_summary(cr, uid, excluded_categories=excluded_categories, context=context) \ No newline at end of file + return super(Users, self).get_serialised_gamification_summary(cr, uid, excluded_categories=excluded_categories, context=context)