[IMP] website_forum: controllers now check the karma in addition to the viewé
bzr revid: tde@openerp.com-20140418144722-k2g2gespb3dwpio4
This commit is contained in:
parent
b153fcd35e
commit
aa8bdfc740
|
@ -54,6 +54,15 @@ class WebsiteForum(http.Controller):
|
||||||
values.update(kwargs)
|
values.update(kwargs)
|
||||||
return values
|
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
|
# Forum
|
||||||
# --------------------------------------------------
|
# --------------------------------------------------
|
||||||
|
|
||||||
|
@ -210,6 +219,10 @@ class WebsiteForum(http.Controller):
|
||||||
|
|
||||||
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/ask_for_close', type='http', auth="user", multilang=True, website=True)
|
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/ask_for_close', type='http', auth="user", multilang=True, website=True)
|
||||||
def question_ask_for_close(self, forum, question, **post):
|
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
|
cr, uid, context = request.cr, request.uid, request.context
|
||||||
Reason = request.registry['forum.post.reason']
|
Reason = request.registry['forum.post.reason']
|
||||||
reason_ids = Reason.search(cr, uid, [], context=context)
|
reason_ids = Reason.search(cr, uid, [], context=context)
|
||||||
|
@ -233,6 +246,10 @@ class WebsiteForum(http.Controller):
|
||||||
|
|
||||||
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/close', type='http', auth="user", multilang=True, methods=['POST'], website=True)
|
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/close', type='http', auth="user", multilang=True, methods=['POST'], website=True)
|
||||||
def question_close(self, forum, question, **post):
|
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], {
|
request.registry['forum.post'].write(request.cr, request.uid, [question.id], {
|
||||||
'state': 'close',
|
'state': 'close',
|
||||||
'closed_uid': request.uid,
|
'closed_uid': request.uid,
|
||||||
|
@ -243,17 +260,28 @@ class WebsiteForum(http.Controller):
|
||||||
|
|
||||||
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/reopen', type='http', auth="user", multilang=True, website=True)
|
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/reopen', type='http', auth="user", multilang=True, website=True)
|
||||||
def question_reopen(self, forum, question, **kwarg):
|
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)
|
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)))
|
return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question)))
|
||||||
|
|
||||||
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/delete', type='http', auth="user", multilang=True, website=True)
|
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/delete', type='http', auth="user", multilang=True, website=True)
|
||||||
def question_delete(self, forum, question, **kwarg):
|
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)
|
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)))
|
return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question)))
|
||||||
|
|
||||||
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/undelete', type='http', auth="user", multilang=True, website=True)
|
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/undelete', type='http', auth="user", multilang=True, website=True)
|
||||||
def question_undelete(self, forum, question, **kwarg):
|
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)
|
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)))
|
return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question)))
|
||||||
|
|
||||||
|
@ -309,6 +337,10 @@ class WebsiteForum(http.Controller):
|
||||||
|
|
||||||
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/delete', type='http', auth="user", multilang=True, website=True)
|
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/delete', type='http', auth="user", multilang=True, website=True)
|
||||||
def post_delete(self, forum, post, **kwargs):
|
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
|
question = post.parent_id
|
||||||
request.registry['forum.post'].unlink(request.cr, request.uid, [post.id], context=request.context)
|
request.registry['forum.post'].unlink(request.cr, request.uid, [post.id], context=request.context)
|
||||||
if question:
|
if question:
|
||||||
|
@ -317,6 +349,10 @@ class WebsiteForum(http.Controller):
|
||||||
|
|
||||||
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/edit', type='http', auth="user", website=True, multilang=True)
|
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/edit', type='http', auth="user", website=True, multilang=True)
|
||||||
def post_edit(self, forum, post, **kwargs):
|
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 = ""
|
tags = ""
|
||||||
for tag_name in post.tag_ids:
|
for tag_name in post.tag_ids:
|
||||||
tags += tag_name.name + ","
|
tags += tag_name.name + ","
|
||||||
|
@ -358,9 +394,9 @@ class WebsiteForum(http.Controller):
|
||||||
return {'error': 'anonymous_user'}
|
return {'error': 'anonymous_user'}
|
||||||
if request.uid == post.create_uid.id:
|
if request.uid == post.create_uid.id:
|
||||||
return {'error': 'own_post'}
|
return {'error': 'own_post'}
|
||||||
user = request.registry['res.users'].browse(request.cr, SUPERUSER_ID, request.uid, context=request.context)
|
check_res = self._has_enough_karma('_karma_upvote')
|
||||||
if user.karma < request.registry['forum.forum']._karma_upvote:
|
if not check_res[0]:
|
||||||
return {'error': 'not_enough_karma', 'karma': request.registry['forum.forum']._karma_upvote}
|
return check_res[1]
|
||||||
upvote = True if not post.user_vote > 0 else False
|
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)
|
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'}
|
return {'error': 'anonymous_user'}
|
||||||
if request.uid == post.create_uid.id:
|
if request.uid == post.create_uid.id:
|
||||||
return {'error': 'own_post'}
|
return {'error': 'own_post'}
|
||||||
user = request.registry['res.users'].browse(request.cr, SUPERUSER_ID, request.uid, context=request.context)
|
check_res = self._has_enough_karma('_karma_downvote')
|
||||||
if user.karma < request.registry['forum.forum']._karma_downvote:
|
if not check_res[0]:
|
||||||
return {'error': 'not_enough_karma', 'karma': request.registry['forum.forum']._karma_downvote}
|
return check_res[1]
|
||||||
upvote = True if post.user_vote < 0 else False
|
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)
|
return request.registry['forum.post'].vote(request.cr, request.uid, [post.id], upvote=upvote, context=request.context)
|
||||||
|
|
||||||
|
|
|
@ -42,4 +42,4 @@ class Users(osv.Model):
|
||||||
excluded_categories.append('forum')
|
excluded_categories.append('forum')
|
||||||
else:
|
else:
|
||||||
excluded_categories = ['forum']
|
excluded_categories = ['forum']
|
||||||
return super(Users, self).get_serialised_gamification_summary(cr, uid, excluded_categories=excluded_categories, context=context)
|
return super(Users, self).get_serialised_gamification_summary(cr, uid, excluded_categories=excluded_categories, context=context)
|
||||||
|
|
Loading…
Reference in New Issue