Files
mayan-edms/mayan/apps/dynamic_search/views.py
2018-04-01 18:38:53 -04:00

88 lines
2.6 KiB
Python

from __future__ import unicode_literals
import logging
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from django.views.generic.base import RedirectView
from common.generics import SimpleView, SingleObjectListView
from .forms import SearchForm, AdvancedSearchForm
from .mixins import SearchModelMixin
from .settings import setting_limit
logger = logging.getLogger(__name__)
class ResultsView(SearchModelMixin, SingleObjectListView):
def get_extra_context(self):
context = {
'hide_links': True,
'list_as_items': True,
'search_model': self.search_model,
'search_results_limit': setting_limit.value,
'title': _('Search results for: %s') % self.search_model.label,
}
return context
def get_object_list(self):
self.search_model = self.get_search_model()
if self.request.GET:
# Only do search if there is user input, otherwise just render
# the template with the extra_context
if self.request.GET.get('_match_all', 'off') == 'on':
global_and_search = True
else:
global_and_search = False
queryset, timedelta = self.search_model.search(
query_string=self.request.GET, user=self.request.user,
global_and_search=global_and_search
)
return queryset
class SearchView(SearchModelMixin, SimpleView):
template_name = 'appearance/generic_form.html'
title = _('Search')
def get_extra_context(self):
self.search_model = self.get_search_model()
return {
'form': self.get_form(),
'form_action': reverse(
'search:results', args=(self.search_model.get_full_name(),)
),
'search_model': self.search_model,
'submit_icon': 'fa fa-search',
'submit_label': _('Search'),
'submit_method': 'GET',
'title': _('Search for: %s') % self.search_model.label,
}
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()
class AdvancedSearchView(SearchView):
title = _('Advanced search')
def get_form(self):
return AdvancedSearchForm(
data=self.request.GET, search_model=self.get_search_model()
)
class SearchAgainView(RedirectView):
pattern_name = 'search:search_advanced'
query_string = True