diff --git a/addons/website_forum/controllers/main.py b/addons/website_forum/controllers/main.py index 449ce6a758d..5d697e18e68 100644 --- a/addons/website_forum/controllers/main.py +++ b/addons/website_forum/controllers/main.py @@ -220,9 +220,8 @@ class WebsiteForum(http.Controller): except URLError: return False - @http.route(['''/forum//question//question/'): + raise ValueError('Invalid operator: %s' % (operator,)) + + is_admin = self._uid == SUPERUSER_ID + if is_admin: + return [(1, '=', 1)] + + user = self.env['res.users'].browse(self._uid) + req = """ + SELECT p.id + FROM forum_post p + LEFT JOIN res_users u ON p.create_uid = u.id + LEFT JOIN forum_forum f ON p.forum_id = f.id + WHERE + u.karma > 0 + or (p.create_uid = %s and f.karma_close_own <= %s) + or (p.create_uid != %s and f.karma_close_all <= %s) + """ + # don't use param named because orm will add other param (test_active, ...) + return [('id', '%sselect' % (operator == "=" and "in" or "not in"), (req, (user.id, user.karma, user.id, user.karma)))] + @api.one @api.depends('content') def _get_plain_content(self): diff --git a/openerp/osv/expression.py b/openerp/osv/expression.py index d30b6a943cd..47b941485b2 100644 --- a/openerp/osv/expression.py +++ b/openerp/osv/expression.py @@ -907,7 +907,7 @@ class expression(object): push(leaf) else: for elem in reversed(domain): - push(create_substitution_leaf(leaf, elem, model)) + push(create_substitution_leaf(leaf, elem, model, internal=True)) # ------------------------------------------------- # FUNCTION FIELD