taiga-back/greenmine/search/views.py

58 lines
1.6 KiB
Python

# -*- coding: utf-8 -*-
from haystack.query import EmptySearchQuerySet
from django.core.paginator import Paginator, InvalidPage
from django.conf import settings
from django.http import Http404
from django.utils.translation import ugettext as _
from greenmine.base.decorators import login_required
from greenmine.base.generic import GenericView
from greenmine.scrum.models import Project
from greenmine.search.forms import SearchForm
SEARCH_RESULTS_PER_PAGE = getattr(settings, 'SEARCH_RESULTS_PER_PAGE', 20)
class SearchView(GenericView):
template_path = 'search-results.html'
@login_required
def get(self, request):
query = ''
results = EmptySearchQuerySet()
if request.user.is_staff:
projects = Project.objects.all()
else:
projects = request.user.projects.all() | \
request.user.projects_participant.all()
projects = projects.order_by('name').distinct()
if request.GET.get('q'):
form = SearchForm(request.GET)
if form.is_valid():
query = form.cleaned_data['q']
results = form.search().filter(project__in=projects)
else:
form = SearchForm()
paginator = Paginator(results, SEARCH_RESULTS_PER_PAGE)
try:
page = paginator.page(int(request.GET.get('page', 1)))
except InvalidPage:
raise Http404(_(u'No such page of results!'))
context = {
'form': form,
'page': page,
'paginator': paginator,
'query': query,
}
return self.render_to_response(self.template_path, context)