From 7da5cfe40695ecf8780f86d4a8747e4999ac349a Mon Sep 17 00:00:00 2001
From: Jan Dittberner <jan@dittberner.info>
Date: Tue, 27 Jan 2015 16:26:10 +0100
Subject: [PATCH] implement website deletion

- implement websites.views.DeleteWebsite
- add URL pattern 'delete_website' to websites.urls
- add template website_confirm_delete.html
- add link from hostingpackage page to 'delete_website'
- add changelog entry
---
 docs/changelog.rst                            |  1 +
 .../customerhostingpackage_detail.html        |  2 +-
 .../websites/website_confirm_delete.html      | 34 +++++++++++++++++++
 gnuviechadmin/websites/urls.py                |  3 ++
 gnuviechadmin/websites/views.py               | 23 +++++++++++++
 5 files changed, 62 insertions(+), 1 deletion(-)
 create mode 100644 gnuviechadmin/templates/websites/website_confirm_delete.html

diff --git a/docs/changelog.rst b/docs/changelog.rst
index 12ea8c1..b98b466 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -1,6 +1,7 @@
 Changelog
 =========
 
+* :feature:`-` implement deletion of websites
 * :feature:`-` implement setup of websites
 * :support:`-` add webtasks interface
 * :support:`-` update to new fileservertasks interface (requires gvafile >=
diff --git a/gnuviechadmin/templates/hostingpackages/customerhostingpackage_detail.html b/gnuviechadmin/templates/hostingpackages/customerhostingpackage_detail.html
index f3c7634..e66ae9b 100644
--- a/gnuviechadmin/templates/hostingpackages/customerhostingpackage_detail.html
+++ b/gnuviechadmin/templates/hostingpackages/customerhostingpackage_detail.html
@@ -107,7 +107,7 @@
               {% with domain=domain.domain %}
               {% for website in domain.website_set.all %}{% spaceless %}
               {{ website }}
-              <a href="#" titel="{% trans "Delete website" %}"><i class="glyphicon glyphicon-trash"></i><span class="sr-only"> {% trans "Delete website" %}</span></a>
+              <a href="{% url 'delete_website' package=hostingpackage.id domain=domain.domain pk=website.id %}" titel="{% trans "Delete website" %}"><i class="glyphicon glyphicon-trash"></i><span class="sr-only"> {% trans "Delete website" %}</span></a>
               {% endspaceless %}{% if not forloop.last %}, {% endif %}{% endfor %}
               {% endwith %}
             </td>
diff --git a/gnuviechadmin/templates/websites/website_confirm_delete.html b/gnuviechadmin/templates/websites/website_confirm_delete.html
new file mode 100644
index 0000000..92cb0e9
--- /dev/null
+++ b/gnuviechadmin/templates/websites/website_confirm_delete.html
@@ -0,0 +1,34 @@
+{% extends "websites/base.html" %}
+{% load i18n %}
+
+{% block title %}{{ block.super }} - {% spaceless %}
+{% if user == customer %}
+{% blocktrans %}Delete Website {{ website }}{% endblocktrans %}
+{% else %}
+{% blocktrans with full_name=customer.get_full_name %}Delete Website {{ website }} of Customer {{ full_name }}{% endblocktrans %}
+{% endif %}
+{% endspaceless %}{% endblock title %}
+
+{% block page_title %}{% spaceless %}
+{% if user == customer %}
+{% blocktrans %}Delete Website <small>{{ website }}</small>{% endblocktrans %}
+{% else %}
+{% blocktrans with full_name=customer.get_full_name %}Delete Website <small>{{ website }} of Customer {{ full_name }}</small>{% endblocktrans %}
+{% endif %}
+{% endspaceless %}{% endblock page_title %}
+
+{% block content %}
+<div class="panel panel-warning">
+  <div class="panel-heading">
+    {% blocktrans %}Do you really want to delete the website {{ website }}?{% endblocktrans %}
+  </div>
+  <div class="panel-body">
+    <p>{% blocktrans %}Please be aware that the website directory is removed from the webserver and the webserver configuration is changed so that the website will not be reachable anymore. <strong>All data in the website directory will be lost!</strong>{% endblocktrans %}</p>
+    <form action="{% url 'delete_website' package=hostingpackage.id domain=website.domain.domain pk=website.id %}" method="post" class="form">
+      {% csrf_token %}
+      <input class="btn btn-warning" type="submit" value="{% trans "Yes, do it!" %}" />
+      <a class="btn btn-default" href="{{ hostingpackage.get_absolute_url }}">{% trans "Cancel" %}</a>
+    </form>
+  </div>
+</div>
+{% endblock content %}
diff --git a/gnuviechadmin/websites/urls.py b/gnuviechadmin/websites/urls.py
index c98a252..4bcd5e0 100644
--- a/gnuviechadmin/websites/urls.py
+++ b/gnuviechadmin/websites/urls.py
@@ -8,6 +8,7 @@ from django.conf.urls import patterns, url
 
 from .views import (
     AddWebsite,
+    DeleteWebsite,
 )
 
 
@@ -15,4 +16,6 @@ urlpatterns = patterns(
     '',
     url(r'^(?P<package>\d+)/(?P<domain>[\w0-9.-]+)/create$',
         AddWebsite.as_view(), name='add_website'),
+    url(r'^(?P<package>\d+)/(?P<domain>[\w0-9.-]+)/(?P<pk>\d+)/delete$',
+        DeleteWebsite.as_view(), name='delete_website'),
 )
diff --git a/gnuviechadmin/websites/views.py b/gnuviechadmin/websites/views.py
index 64a8fea..803386f 100644
--- a/gnuviechadmin/websites/views.py
+++ b/gnuviechadmin/websites/views.py
@@ -8,6 +8,7 @@ from django.shortcuts import get_object_or_404, redirect
 from django.utils.translation import ugettext as _
 from django.views.generic.edit import (
     CreateView,
+    DeleteView,
 )
 from django.contrib import messages
 
@@ -58,3 +59,25 @@ class AddWebsite(
             )
         )
         return redirect(self.get_hosting_package())
+
+
+class DeleteWebsite(
+    HostingPackageAndCustomerMixin, StaffOrSelfLoginRequiredMixin, DeleteView
+):
+    """
+    This view is used to delete websites in a customer hosting package.
+
+    """
+    context_object_name = 'website'
+    model = Website
+
+    def get_context_data(self, **kwargs):
+        context = super(DeleteWebsite, self).get_context_data(**kwargs)
+        context.update({
+            'customer': self.get_customer_object(),
+            'hostingpackage': self.get_hosting_package(),
+        })
+        return context
+
+    def get_success_url(self):
+        return self.get_hosting_package().get_absolute_url()