92 lines
2.6 KiB
Python
92 lines
2.6 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import logging
|
|
import urlparse
|
|
|
|
from django.conf import settings
|
|
from django.core.urlresolvers import reverse
|
|
from django.http import HttpResponseRedirect
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from common.generics import SimpleView, SingleObjectListView
|
|
|
|
from .classes import SearchModel
|
|
from .forms import SearchForm, AdvancedSearchForm
|
|
from .settings import setting_limit, setting_show_object_type
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class ResultsView(SingleObjectListView):
|
|
def get_extra_context(self):
|
|
context = {
|
|
'hide_links': True,
|
|
'search_results_limit': setting_limit.value,
|
|
'title': _('Search results'),
|
|
}
|
|
|
|
if setting_show_object_type.value:
|
|
context.update({
|
|
'extra_columns': (
|
|
{
|
|
'name': _('Type'),
|
|
'attribute': lambda x: x._meta.verbose_name[0].upper() + x._meta.verbose_name[1:]
|
|
},
|
|
)
|
|
})
|
|
|
|
return context
|
|
|
|
def get_queryset(self):
|
|
document_search = SearchModel.get('documents.Document')
|
|
|
|
if self.request.GET:
|
|
# Only do search if there is user input, otherwise just render
|
|
# the template with the extra_context
|
|
|
|
queryset, ids, timedelta = document_search.search(self.request.GET, self.request.user)
|
|
|
|
return queryset
|
|
|
|
|
|
class SearchView(SimpleView):
|
|
template_name = 'appearance/generic_form.html'
|
|
title = _('Search')
|
|
|
|
def get_form(self):
|
|
if ('q' in self.request.GET) and self.request.GET['q'].strip():
|
|
query_string = self.request.GET['q']
|
|
return SearchForm(initial={'q': query_string})
|
|
else:
|
|
return SearchForm()
|
|
|
|
def get_extra_context(self):
|
|
return {
|
|
'form': self.get_form(),
|
|
'form_action': reverse('search:results'),
|
|
'submit_icon': 'fa fa-search',
|
|
'submit_label': _('Search'),
|
|
'submit_method': 'GET',
|
|
'title': self.title,
|
|
}
|
|
|
|
|
|
class AdvancedSearchView(SearchView):
|
|
title = _('Advanced search')
|
|
|
|
def get_form(self):
|
|
document_search = SearchModel.get('documents.Document')
|
|
|
|
return AdvancedSearchForm(
|
|
data=self.request.GET, search_model=document_search
|
|
)
|
|
|
|
|
|
def search_again(request):
|
|
query = urlparse.urlparse(
|
|
request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))
|
|
).query
|
|
return HttpResponseRedirect(
|
|
'{}?{}'.format(reverse('search:search_advanced'), query)
|
|
)
|