From c3fa15bbd10516240d142f116f2eea335f3b5023 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 13 Aug 2015 22:31:22 -0400 Subject: [PATCH] Update search views to CBV. Remove unused template. --- mayan/apps/dynamic_search/forms.py | 13 +- .../dynamic_search/search_results.html | 21 --- mayan/apps/dynamic_search/urls.py | 7 +- mayan/apps/dynamic_search/views.py | 139 ++++++++---------- 4 files changed, 72 insertions(+), 108 deletions(-) delete mode 100644 mayan/apps/dynamic_search/templates/dynamic_search/search_results.html diff --git a/mayan/apps/dynamic_search/forms.py b/mayan/apps/dynamic_search/forms.py index c5da1eb4e5..7fbb43f87b 100644 --- a/mayan/apps/dynamic_search/forms.py +++ b/mayan/apps/dynamic_search/forms.py @@ -4,15 +4,6 @@ from django import forms from django.utils.translation import ugettext_lazy as _ -class SearchForm(forms.Form): - q = forms.CharField(max_length=128, label=_('Search terms')) - source = forms.CharField( - max_length=32, - required=False, - widget=forms.widgets.HiddenInput() - ) - - class AdvancedSearchForm(forms.Form): def __init__(self, *args, **kwargs): self.search_model = kwargs.pop('search_model') @@ -23,3 +14,7 @@ class AdvancedSearchForm(forms.Form): label=label, required=False ) + + +class SearchForm(forms.Form): + q = forms.CharField(max_length=128, label=_('Search terms'), required=False) diff --git a/mayan/apps/dynamic_search/templates/dynamic_search/search_results.html b/mayan/apps/dynamic_search/templates/dynamic_search/search_results.html deleted file mode 100644 index 82b0347d4a..0000000000 --- a/mayan/apps/dynamic_search/templates/dynamic_search/search_results.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends 'appearance/base.html' %} - -{% load i18n %} - -{% block title %}{{ title }}{% endblock %} - -{% block content %} - {% if form %} - {% with 'get' as submit_method %} - {% with form_title as title %} - {% include 'appearance/generic_form_subtemplate.html' %} - {% endwith %} - {% endwith %} - {% endif %} - {% if query_string %} - {% include 'appearance/generic_list_subtemplate.html' %} - {% endif %} - {% if not form and not query_string %} - {% include 'appearance/generic_list_subtemplate.html' %} - {% endif %} -{% endblock %} diff --git a/mayan/apps/dynamic_search/urls.py b/mayan/apps/dynamic_search/urls.py index 2565e396b5..720b04cadb 100644 --- a/mayan/apps/dynamic_search/urls.py +++ b/mayan/apps/dynamic_search/urls.py @@ -5,13 +5,14 @@ from django.conf.urls import patterns, url from .api_views import ( APIRecentSearchListView, APIRecentSearchView, APISearchView ) +from .views import AdvancedSearchView, ResultsView, SearchView urlpatterns = patterns( 'dynamic_search.views', - url(r'^$', 'search', name='search'), - url(r'^advanced/$', 'search', {'advanced': True}, 'search_advanced'), + url(r'^$', SearchView.as_view(), name='search'), + url(r'^advanced/$', AdvancedSearchView.as_view(), name='search_advanced'), url(r'^again/$', 'search_again', name='search_again'), - url(r'^results/$', 'results', name='results'), + url(r'^results/$', ResultsView.as_view(), name='results'), ) api_urls = patterns( diff --git a/mayan/apps/dynamic_search/views.py b/mayan/apps/dynamic_search/views.py index 779f922917..d5202a16e6 100644 --- a/mayan/apps/dynamic_search/views.py +++ b/mayan/apps/dynamic_search/views.py @@ -10,6 +10,8 @@ from django.shortcuts import render_to_response from django.template import RequestContext 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 @@ -17,82 +19,69 @@ from .settings import setting_limit, setting_show_object_type logger = logging.getLogger(__name__) -def results(request, extra_context=None): - document_search = SearchModel.get('documents.Document') - - context = { - 'query_string': request.GET, - 'hide_links': True, - 'search_results_limit': setting_limit.value, - } - - if 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(request.GET, request.user) - - # Update the context with the search results - context.update({ - 'object_list': queryset, - 'time_delta': timedelta, - 'title': _('Results'), - }) - - if extra_context: - context.update(extra_context) - - 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 render_to_response( - 'dynamic_search/search_results.html', context, - context_instance=RequestContext(request) - ) - - -def search(request, advanced=False): - document_search = SearchModel.get('documents.Document') - - if advanced: - form = AdvancedSearchForm( - data=request.GET, search_model=document_search - ) - return render_to_response( - 'appearance/generic_form.html', - { - 'form': form, - 'title': _('Advanced search'), - 'form_action': reverse('search:results'), - 'submit_method': 'GET', - 'search_results_limit': setting_limit.value, - 'submit_label': _('Search'), - 'submit_icon': 'fa fa-search', - }, context_instance=RequestContext(request) - ) - else: - extra_context = { - 'submit_label': _('Search'), - 'submit_icon': 'fa fa-search', - 'form_title': _('Search'), - 'form_hide_required_text': True, +class ResultsView(SingleObjectListView): + def get_extra_context(self): + context = { + 'hide_links': True, + 'search_results_limit': setting_limit.value, + 'title': _('Search results'), } - if ('q' in request.GET) and request.GET['q'].strip(): - query_string = request.GET['q'] - form = SearchForm(initial={'q': query_string}) - extra_context.update({'form': form}) - return results(request, extra_context=extra_context) + + 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: - form = SearchForm() - extra_context.update({'form': form}) - return results(request, extra_context=extra_context) + 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): @@ -100,5 +89,5 @@ def search_again(request): request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)) ).query return HttpResponseRedirect( - '%s?%s' % (reverse('search:search_advanced'), query) + '{}?{}'.format(reverse('search:search_advanced'), query) )