diff --git a/conntrackt/views.py b/conntrackt/views.py --- a/conntrackt/views.py +++ b/conntrackt/views.py @@ -323,3 +323,97 @@ class ProjectDeleteView(MultiplePermissi messages.success(self.request, "Project %s has been removed." % self.get_object().name, extra_tags="alert alert-success") return super(ProjectDeleteView, self).post(*args, **kwargs) + + +class LocationCreateView(MultiplePermissionsRequiredMixin, CreateView): + """ + View for creating a new location. + """ + + model = Location + template_name_suffix = "_create_form" + + # Required permissions. + permissions = { + "all": ("conntrackt.add_location",), + } + + # Raise authorisation denied exception for unmet permissions. + raise_exception = True + + success_url = reverse_lazy("index") + + def get_form(self, form_class): + """ + Implements an override for the default form constructed for the create + view that includes some better styling of input widgets. + """ + + form = super(LocationCreateView, self).get_form(form_class) + form.fields["name"].widget.attrs["class"] = "span6" + form.fields["name"].widget.attrs["placeholder"] = "New Location" + form.fields["description"].widget.attrs["class"] = "span6" + form.fields["description"].widget.attrs["placeholder"] = "Description for new location." + + return form + + +class LocationUpdateView(MultiplePermissionsRequiredMixin, UpdateView): + """ + View for modifying an existing location. + """ + + model = Location + template_name_suffix = "_update_form" + + # Required permissions. + permissions = { + "all": ("conntrackt.change_location",), + } + + # Raise authorisation denied exception for unmet permissions. + raise_exception = True + + success_url = reverse_lazy("index") + + def get_form(self, form_class): + """ + Implements an override for the default form constructed for the create + view that includes some better styling of input widgets. + """ + + form = super(LocationUpdateView, self).get_form(form_class) + form.fields["name"].widget.attrs["class"] = "span6" + form.fields["name"].widget.attrs["placeholder"] = "Location name" + form.fields["description"].widget.attrs["class"] = "span6" + form.fields["description"].widget.attrs["placeholder"] = "Description for location." + + return form + + +class LocationDeleteView(MultiplePermissionsRequiredMixin, DeleteView): + """ + View for deleting a location. + """ + + model = Location + + # Required permissions. + permissions = { + "all": ("conntrackt.delete_location",), + } + + # Raise authorisation denied exception for unmet permissions. + raise_exception = True + + success_url = reverse_lazy("index") + + def post(self, *args, **kwargs): + """ + Add a success message that will be displayed to the user to confirm the + location deletion. + """ + + messages.success(self.request, "Location %s has been removed." % self.get_object().name, extra_tags="alert alert-success") + + return super(LocationDeleteView, self).post(*args, **kwargs)