[FIX] website_forum: decrease indexed pages which will return 404
Add filter in domain converter to remove some posts in sitemap. Avoid to add in sitemap some pages that could not be read by public user due to a karma restriction.
This commit is contained in:
@@ -220,9 +220,8 @@ class WebsiteForum(http.Controller):
|
|||||||
except URLError:
|
except URLError:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@http.route(['''/forum/<model("forum.forum"):forum>/question/<model("forum.post", "[('forum_id','=',forum[0]),('parent_id','=',False)]"):question>'''], type='http', auth="public", website=True)
|
@http.route(['''/forum/<model("forum.forum"):forum>/question/<model("forum.post", "[('forum_id','=',forum[0]),('parent_id','=',False),('can_view', '=', True)]"):question>'''], type='http', auth="public", website=True)
|
||||||
def question(self, forum, question, **post):
|
def question(self, forum, question, **post):
|
||||||
|
|
||||||
# Hide posts from abusers (negative karma), except for moderators
|
# Hide posts from abusers (negative karma), except for moderators
|
||||||
if not question.can_view:
|
if not question.can_view:
|
||||||
raise werkzeug.exceptions.NotFound()
|
raise werkzeug.exceptions.NotFound()
|
||||||
|
|||||||
@@ -265,12 +265,34 @@ class Post(models.Model):
|
|||||||
can_downvote = fields.Boolean('Can Downvote', compute='_get_post_karma_rights')
|
can_downvote = fields.Boolean('Can Downvote', compute='_get_post_karma_rights')
|
||||||
can_comment = fields.Boolean('Can Comment', compute='_get_post_karma_rights')
|
can_comment = fields.Boolean('Can Comment', compute='_get_post_karma_rights')
|
||||||
can_comment_convert = fields.Boolean('Can Convert to Comment', compute='_get_post_karma_rights')
|
can_comment_convert = fields.Boolean('Can Convert to Comment', compute='_get_post_karma_rights')
|
||||||
can_view = fields.Boolean('Can View', compute='_get_post_karma_rights')
|
can_view = fields.Boolean('Can View', compute='_get_post_karma_rights', search='_search_can_view')
|
||||||
can_display_biography = fields.Boolean("Is the author's biography visible from his post", compute='_get_post_karma_rights')
|
can_display_biography = fields.Boolean("Is the author's biography visible from his post", compute='_get_post_karma_rights')
|
||||||
can_post = fields.Boolean('Can Automatically be Validated', compute='_get_post_karma_rights')
|
can_post = fields.Boolean('Can Automatically be Validated', compute='_get_post_karma_rights')
|
||||||
can_flag = fields.Boolean('Can Flag', compute='_get_post_karma_rights')
|
can_flag = fields.Boolean('Can Flag', compute='_get_post_karma_rights')
|
||||||
can_moderate = fields.Boolean('Can Moderate', compute='_get_post_karma_rights')
|
can_moderate = fields.Boolean('Can Moderate', compute='_get_post_karma_rights')
|
||||||
|
|
||||||
|
def _search_can_view(self, operator, value):
|
||||||
|
if operator not in ('=', '!=', '<>'):
|
||||||
|
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.one
|
||||||
@api.depends('content')
|
@api.depends('content')
|
||||||
def _get_plain_content(self):
|
def _get_plain_content(self):
|
||||||
|
|||||||
@@ -907,7 +907,7 @@ class expression(object):
|
|||||||
push(leaf)
|
push(leaf)
|
||||||
else:
|
else:
|
||||||
for elem in reversed(domain):
|
for elem in reversed(domain):
|
||||||
push(create_substitution_leaf(leaf, elem, model))
|
push(create_substitution_leaf(leaf, elem, model, internal=True))
|
||||||
|
|
||||||
# -------------------------------------------------
|
# -------------------------------------------------
|
||||||
# FUNCTION FIELD
|
# FUNCTION FIELD
|
||||||
|
|||||||
Reference in New Issue
Block a user