Commit 884855c1 authored by Sli's avatar Sli Committed by Skia
Browse files

forum and core: remove CanViewSearchMixin and use specialized view instead

parent 1de77f2f
...@@ -201,29 +201,6 @@ class CanViewMixin(View): ...@@ -201,29 +201,6 @@ class CanViewMixin(View):
return super(CanViewMixin, self).dispatch(request, *arg, **kwargs) return super(CanViewMixin, self).dispatch(request, *arg, **kwargs)
class CanViewSearchMixin(View):
"""
This view removes all forbidden content from a SearchQuerySet
"""
def dispatch(self, request, *arg, **kwargs):
queryset = self.get_queryset()
excluded = [
o.object.id for o in queryset if not can_view(o.object, request.user)
]
self._queryset = queryset
def get_qs(self2):
q = self2._queryset.exclude(id__in=excluded)
resp = [r.object for r in q]
return resp
self.get_queryset = types.MethodType(get_qs, self)
return super(CanViewSearchMixin, self).dispatch(request, *arg, **kwargs)
class FormerSubscriberMixin(View): class FormerSubscriberMixin(View):
""" """
This view check if the user was at least an old subscriber This view check if the user was at least an old subscriber
......
...@@ -331,9 +331,9 @@ class ForumMessage(models.Model): ...@@ -331,9 +331,9 @@ class ForumMessage(models.Model):
return user.can_edit(self.topic.forum) return user.can_edit(self.topic.forum)
def can_be_viewed_by(self, user): def can_be_viewed_by(self, user):
return not self._deleted and self.topic.can_be_viewed_by( # No need to check the real rights since it's already done by the Topic view
user # and it impacts performances too much
) # Useful in search engine return not self._deleted
def can_be_moderated_by(self, user): def can_be_moderated_by(self, user):
return self.topic.forum.is_owned_by(user) or user.id == self.author.id return self.topic.forum.is_owned_by(user) or user.id == self.author.id
......
...@@ -42,19 +42,26 @@ from core.views import ( ...@@ -42,19 +42,26 @@ from core.views import (
CanEditMixin, CanEditMixin,
CanEditPropMixin, CanEditPropMixin,
CanCreateMixin, CanCreateMixin,
CanViewSearchMixin, can_view,
) )
from core.views.forms import MarkdownInput from core.views.forms import MarkdownInput
from forum.models import Forum, ForumMessage, ForumTopic, ForumMessageMeta from forum.models import Forum, ForumMessage, ForumTopic, ForumMessageMeta
from haystack.query import SearchQuerySet from haystack.query import SearchQuerySet
class ForumSearchView(CanViewSearchMixin, ListView): class ForumSearchView(ListView):
template_name = "forum/search.jinja" template_name = "forum/search.jinja"
def get_queryset(self): def get_queryset(self):
query = self.request.GET.get("query", "") query = self.request.GET.get("query", "")
return SearchQuerySet().models(ForumMessage).autocomplete(auto=query) queryset = SearchQuerySet().models(ForumMessage).autocomplete(auto=query)
excluded = [
o.object.id
for o in queryset
if not can_view(o.object.topic, self.request.user)
]
queryset.exclude(id__in=excluded)
return [r.object for r in queryset]
class ForumMainView(ListView): class ForumMainView(ListView):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment