File diff d59dce512865 → 843dbaebdae4
conntrackt/views.py
Show inline comments
 
@@ -27,6 +27,7 @@ from zipfile import ZipFile, ZIP_DEFLATE
 
from django.contrib.auth.decorators import permission_required
 
from django.contrib import messages
 
from django.core.urlresolvers import reverse, reverse_lazy
 
from django.db.models import Q
 
from django.http import HttpResponse
 
from django.shortcuts import render_to_response, get_object_or_404
 
from django.views.generic import TemplateView, DetailView, CreateView, UpdateView, DeleteView
 
@@ -965,3 +966,54 @@ def project_diagram(request, pk):
 

	
 
    # Return the response object.
 
    return response
 

	
 

	
 
class SearchView(MultiplePermissionsRequiredMixin, TemplateView):
 
    """
 
    Custom view used for rendering the search (results) page.
 
    """
 

	
 
    template_name = 'conntrackt/search.html'
 

	
 
    # Required permissions.
 
    permissions = {
 
        "all": ("conntrackt.view",),
 
        }
 

	
 
    # Raise authorisation denied exception for unmet permissions.
 
    raise_exception = True
 

	
 
    def get_context_data(self, **kwargs):
 
        """
 
        Returns the context data that should be used for rendering of the
 
        template.
 

	
 
        Adds context objects:
 
          - 'entities', which is a list of entities that had the search term in
 
            their name or description.
 
          - 'projects', which is a list of entities that had the search term in
 
            their name or description.
 
          - 'search_term', which is a string of previous query that brought the
 
            user to page (if any). The term will be stripped from leading and
 
            trailing spaces/tabs.
 
        """
 

	
 
        # Set the context using the parent aclass.
 
        context = super(SearchView, self).get_context_data(**kwargs)
 

	
 
        # Retrieve the search term, and strip it if it was provided.
 
        search_term = self.request.GET.get("q", None)
 
        if search_term:
 
            search_term = search_term.strip()
 

	
 
        # Do not allow empty searches.
 
        if search_term == "":
 
            messages.error(self.request, "Search query is not allowed to be empty.", extra_tags="alert alert-error")
 
        # Set-up the context objects if search was sent. Otherwise empty search
 
        # page will be shown.
 
        elif search_term is not None:
 
            context['search_term'] = search_term
 
            context['entities'] = Entity.objects.search(search_term)
 
            context['projects'] = Project.objects.search(search_term)
 

	
 
        return context