class CustomSearchView(SearchView): def __init__(self, *args, **kwargs): kwargs["form_class"] = SpeechForm super(CustomSearchView, self).__init__(*args, **kwargs) def build_form(self, *args, **kwargs): self.searchqueryset = RelatedSearchQuerySet() if self.request.GET.get("sort") == "newest": self.searchqueryset = self.searchqueryset.order_by("-start_date") return super(CustomSearchView, self).build_form(*args, **kwargs) def extra_context(self): if not self.query: return {} self.form_class = SpeakerForm person_form = self.build_form() return {"speaker_results": person_form.search()}
class CustomSearchView(SearchView): def __init__(self, *args, **kwargs): kwargs['form_class'] = SpeechForm super(CustomSearchView, self).__init__(*args, **kwargs) def build_form(self, *args, **kwargs): self.searchqueryset = RelatedSearchQuerySet() if self.request.GET.get('sort') == 'newest': self.searchqueryset = self.searchqueryset.order_by('-start_date') return super(CustomSearchView, self).build_form(*args, **kwargs) def extra_context(self): if not self.query: return {} self.form_class = SpeakerForm person_form = self.build_form() return { 'speaker_results': person_form.search(), }
class CustomSearchView(SearchView): def __init__(self, *args, **kwargs): kwargs['form_class'] = SpeechForm super(CustomSearchView, self).__init__(*args, **kwargs) def build_form(self, *args, **kwargs): self.searchqueryset = RelatedSearchQuerySet() if self.request.GET.get('sort') != 'relevance': self.searchqueryset = self.searchqueryset.order_by('-start_date') return super(CustomSearchView, self).build_form(*args, **kwargs) def extra_context(self): if not self.query: return {} self.form_class = SpeakerForm person_form = self.build_form() return { 'speaker_results': person_form.search(), }
def search(request): """ Returns messages corresponding to a query """ mlist_fqdn = request.GET.get("mlist") if mlist_fqdn is None: mlist = None else: try: mlist = MailingList.objects.get(name=mlist_fqdn) except MailingList.DoesNotExist: raise Http404("No archived mailing-list by that name.") if not is_mlist_authorized(request, mlist): return render(request, "hyperkitty/errors/private.html", { "mlist": mlist, }, status=403) query = '' results = EmptySearchQuerySet() sqs = RelatedSearchQuerySet() # Remove private non-subscribed lists if mlist is not None: sqs = sqs.filter(mailinglist__exact=mlist.name) else: excluded_mlists = MailingList.objects.filter( archive_policy=ArchivePolicy.private.value) if request.user.is_authenticated(): subscriptions = request.user.hyperkitty_profile.get_subscriptions() excluded_mlists = excluded_mlists.exclude( list_id__in=subscriptions.keys()) excluded_mlists = excluded_mlists.values_list("name", flat=True) sqs = sqs.exclude(mailinglist__in=excluded_mlists) # Sorting sort_mode = request.GET.get('sort') if sort_mode == "date-asc": sqs = sqs.order_by("date") elif sort_mode == "date-desc": sqs = sqs.order_by("-date") # Handle data if request.GET.get('q'): form = SearchForm( request.GET, searchqueryset=sqs, load_all=True) if form.is_valid(): query = form.cleaned_data['q'] results = form.search() else: form = SearchForm(searchqueryset=sqs, load_all=True) emails = paginate(results, page_num=request.GET.get('page')) for email in emails: if request.user.is_authenticated(): email.object.myvote = email.object.votes.filter(user=request.user).first() else: email.object.myvote = None context = { 'mlist' : mlist, 'form': form, 'emails': emails, 'query': query, 'sort_mode': sort_mode, 'suggestion': None, } if results.query.backend.include_spelling: context['suggestion'] = form.get_suggestion() return render(request, "hyperkitty/search_results.html", context)
def search(request): """ Returns messages corresponding to a query """ mlist_fqdn = request.GET.get("mlist") if mlist_fqdn is None: mlist = None else: try: mlist = MailingList.objects.get(name=mlist_fqdn) except MailingList.DoesNotExist: raise Http404("No archived mailing-list by that name.") if not is_mlist_authorized(request, mlist): return render(request, "hyperkitty/errors/private.html", { "mlist": mlist, }, status=403) query = '' results = EmptySearchQuerySet() sqs = RelatedSearchQuerySet() # Remove private non-subscribed lists if mlist is not None: sqs = sqs.filter(mailinglist__exact=mlist.name) else: excluded_mlists = MailingList.objects.filter( archive_policy=ArchivePolicy.private.value) if request.user.is_authenticated: subscriptions = get_subscriptions(request.user) excluded_mlists = excluded_mlists.exclude( list_id__in=subscriptions.keys()) excluded_mlists = excluded_mlists.values_list("name", flat=True) sqs = sqs.exclude(mailinglist__in=excluded_mlists) # Sorting sort_mode = request.GET.get('sort') if sort_mode == "date-asc": sqs = sqs.order_by("date") elif sort_mode == "date-desc": sqs = sqs.order_by("-date") # Handle data if request.GET.get('q'): form = SearchForm(request.GET, searchqueryset=sqs, load_all=True) if form.is_valid(): query = form.cleaned_data['q'] results = form.search() else: form = SearchForm(searchqueryset=sqs, load_all=True) try: emails = paginate( results, request.GET.get('page'), request.GET.get('count'), ) except Exception as e: backend = settings.HAYSTACK_CONNECTIONS[DEFAULT_ALIAS]["ENGINE"] if backend == "haystack.backends.whoosh_backend.WhooshEngine": from whoosh.qparser.common import QueryParserError search_exception = QueryParserError if backend == "xapian_backend.XapianEngine": from xapian import QueryParserError search_exception = QueryParserError if not isinstance(e, search_exception): raise emails = paginate([]) form.add_error( "q", ValidationError( _('Parsing error: %(error)s'), params={"error": e}, code="parse", )) for email in emails: if request.user.is_authenticated: email.object.myvote = email.object.votes.filter( user=request.user).first() else: email.object.myvote = None context = { 'mlist': mlist, 'form': form, 'emails': emails, 'query': query, 'sort_mode': sort_mode, 'suggestion': None, } if results.query.backend.include_spelling: context['suggestion'] = form.get_suggestion() return render(request, "hyperkitty/search_results.html", context)
def search(request): """ Returns messages corresponding to a query """ mlist_fqdn = request.GET.get("mlist") if mlist_fqdn is None: mlist = None else: try: mlist = MailingList.objects.get(name=mlist_fqdn) except MailingList.DoesNotExist: raise Http404("No archived mailing-list by that name.") if not is_mlist_authorized(request, mlist): return render(request, "hyperkitty/errors/private.html", { "mlist": mlist, }, status=403) query = '' results = EmptySearchQuerySet() sqs = RelatedSearchQuerySet() # Remove private non-subscribed lists if mlist is not None: sqs = sqs.filter(mailinglist__exact=mlist.name) else: excluded_mlists = MailingList.objects.filter( archive_policy=ArchivePolicy.private.value) if request.user.is_authenticated(): subscriptions = request.user.hyperkitty_profile.get_subscriptions() excluded_mlists = excluded_mlists.exclude( name__in=subscriptions.keys()) excluded_mlists = excluded_mlists.values_list("name", flat=True) sqs = sqs.exclude(mailinglist__in=excluded_mlists) # Sorting sort_mode = request.GET.get('sort') if sort_mode == "date-asc": sqs = sqs.order_by("date") elif sort_mode == "date-desc": sqs = sqs.order_by("-date") # Handle data if request.GET.get('q'): form = SearchForm( request.GET, searchqueryset=sqs, load_all=True) if form.is_valid(): query = form.cleaned_data['q'] results = form.search() else: form = SearchForm(searchqueryset=sqs, load_all=True) messages = paginate(results, page_num=request.GET.get('page')) for message in messages: if request.user.is_authenticated(): message.object.myvote = message.object.votes.filter(user=request.user).first() else: message.object.myvote = None context = { 'mlist' : mlist, 'form': form, 'messages': messages, 'query': query, 'sort_mode': sort_mode, 'suggestion': None, } if results.query.backend.include_spelling: context['suggestion'] = form.get_suggestion() return render(request, "hyperkitty/search_results.html", context)