|
@@ -27,12 +27,13 @@ import json
|
|
|
# Django imports.
|
|
|
from django.contrib.auth.decorators import permission_required
|
|
|
from django.contrib import messages
|
|
|
from django.core.exceptions import ValidationError
|
|
|
from django.core.urlresolvers import reverse, reverse_lazy
|
|
|
from django.db.models import Q
|
|
|
from django.db.models.deletion import Collector
|
|
|
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, View
|
|
|
|
|
|
# Third-party application imports.
|
|
|
from braces.views import MultiplePermissionsRequiredMixin, SetHeadlineMixin
|
|
@@ -62,12 +63,49 @@ class RedirectToNextMixin(object):
|
|
|
Returns the success URL to which the user will be redirected.
|
|
|
"""
|
|
|
|
|
|
return self.request.GET.get(self.next_parameter, super(RedirectToNextMixin, self).get_success_url())
|
|
|
|
|
|
|
|
|
class RelatedItemsMixin(object):
|
|
|
"""
|
|
|
View mixin that adds related items of a referenced model object to context
|
|
|
data in form of a nested list, including the reference model object as the
|
|
|
first element of a list.
|
|
|
|
|
|
The context data will be passed using the "related_items" key.
|
|
|
|
|
|
This data can be used in the template by passing it through the
|
|
|
unordered_list template tag.
|
|
|
|
|
|
The reference object is accessed via "object" property of calling view
|
|
|
(i.e. self.object).
|
|
|
|
|
|
For more details on implementation, see:
|
|
|
|
|
|
RelatedCollectorMixin.get_dependant_objects_representation method
|
|
|
"""
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
"""
|
|
|
Adds the related items of a reference model object to context data.
|
|
|
|
|
|
Returns:
|
|
|
Context data.
|
|
|
"""
|
|
|
|
|
|
# Set the context using the parent class.
|
|
|
context = super(RelatedItemsMixin, self).get_context_data(**kwargs)
|
|
|
|
|
|
# Add to context the nested list of string representations of related
|
|
|
# items.
|
|
|
context["related_items"] = self.object.get_dependant_objects_representation()
|
|
|
|
|
|
return context
|
|
|
|
|
|
|
|
|
class IndexView(MultiplePermissionsRequiredMixin, TemplateView):
|
|
|
"""
|
|
|
Custom view used for rendering the index page.
|
|
|
"""
|
|
|
|
|
|
template_name = 'conntrackt/index.html'
|
|
@@ -334,13 +372,13 @@ class ProjectUpdateView(RedirectToNextMi
|
|
|
Set headline based on project name.
|
|
|
"""
|
|
|
|
|
|
return "Update project %s" % self.object.name
|
|
|
|
|
|
|
|
|
class ProjectDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
class ProjectDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
"""
|
|
|
View for deleting a project.
|
|
|
"""
|
|
|
|
|
|
model = Project
|
|
|
template_name = "conntrackt/delete_form.html"
|
|
@@ -418,13 +456,13 @@ class LocationUpdateView(RedirectToNextM
|
|
|
Set headline based on location name.
|
|
|
"""
|
|
|
|
|
|
return "Update location %s" % self.object.name
|
|
|
|
|
|
|
|
|
class LocationDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
class LocationDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
"""
|
|
|
View for deleting a location.
|
|
|
"""
|
|
|
|
|
|
model = Location
|
|
|
template_name = "conntrackt/delete_form.html"
|
|
@@ -535,13 +573,13 @@ class EntityUpdateView(RedirectToNextMix
|
|
|
Set headline based on entity name.
|
|
|
"""
|
|
|
|
|
|
return "Update entity %s" % self.object.name
|
|
|
|
|
|
|
|
|
class EntityDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
class EntityDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
"""
|
|
|
View for deleting an entity.
|
|
|
"""
|
|
|
|
|
|
model = Entity
|
|
|
template_name = "conntrackt/delete_form.html"
|
|
@@ -691,13 +729,13 @@ class InterfaceUpdateView(RedirectToNext
|
|
|
Set headline based on interface name.
|
|
|
"""
|
|
|
|
|
|
return "Update interface %s" % self.object.name
|
|
|
|
|
|
|
|
|
class InterfaceDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
class InterfaceDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
"""
|
|
|
View for deleting an interface.
|
|
|
"""
|
|
|
|
|
|
model = Interface
|
|
|
template_name = "conntrackt/delete_form.html"
|
|
@@ -884,13 +922,13 @@ class CommunicationUpdateView(RedirectTo
|
|
|
Set headline based on communication.
|
|
|
"""
|
|
|
|
|
|
return "Update communication %s" % self.object
|
|
|
|
|
|
|
|
|
class CommunicationDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
class CommunicationDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
"""
|
|
|
View for deleting an communication.
|
|
|
"""
|
|
|
|
|
|
model = Communication
|
|
|
template_name = "conntrackt/delete_form.html"
|