Files
mayan-edms/mayan/apps/dynamic_search/views.py
2016-10-27 02:48:40 -04:00

94 lines
2.8 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 django.views.generic.base import RedirectView
from common.generics import SimpleView, SingleObjectListView
from .classes import SearchModel
from .forms import SearchForm, AdvancedSearchForm
from .settings import setting_limit
logger = logging.getLogger(__name__)
class ResultsView(SingleObjectListView):
def get_extra_context(self):
context = {
'hide_links': 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_queryset(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, ids, timedelta = self.search_model.search(
query_string=self.request.GET, user=self.request.user,
global_and_search=global_and_search
)
return queryset
def get_search_model(self):
return SearchModel.get(self.kwargs['search_model'])
class SearchView(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()
def get_search_model(self):
return SearchModel.get(self.kwargs['search_model'])
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