editing and removing hobo tenants

Closes #5036
This commit is contained in:
Serghei Mihai 2014-07-01 19:03:27 +02:00
parent ee906aa352
commit 8ff21f9516
6 changed files with 150 additions and 12 deletions

View File

@ -0,0 +1,17 @@
{% extends "hobo/base.html" %}
{% load i18n %}
{% block content %}
<form action="{% url 'delete-tenant' object.id %}" method="post">
{% csrf_token %}
<p>
{% blocktrans with name=object.schema_name %}
Are you sure you want to delete "{{ name }}"?
{% endblocktrans %}
</p>
<div class="right">
<button type="button" class="cancel">{% trans 'Cancel' %}</button>
<input type="submit" value="{% trans 'Delete' %}" />
</div>
</form>
{% endblock %}

View File

@ -1,7 +1,32 @@
from django.forms import ModelForm
from tenant_schemas.utils import get_tenant_model
try:
from tenant_schemas.utils import get_tenant_model
except ImportError:
get_tenant_model = lambda: None
class HoboForm(ModelForm):
required_css_class = 'required'
def __init__(self, *args, **kwargs):
super(HoboForm, self).__init__(*args, **kwargs)
self.fields['schema_name'].required = False
def clean(self):
from django.template.defaultfilters import slugify
cleaned_data = super(HoboForm, self).clean()
if not cleaned_data.get('schema_name') and cleaned_data.get('domain_url'):
cleaned_data['schema_name'] = slugify(cleaned_data['domain_url'])
return cleaned_data
class Meta:
model = get_tenant_model()
fields = ['schema_name', 'domain_url']
fields = ['domain_url', 'schema_name']
class HoboUpdateForm(ModelForm):
class Meta:
model = get_tenant_model()
fields = ['domain_url']

View File

@ -1,6 +1,8 @@
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^$', 'hobo.views.manager_home'),
url(r'^$', 'hobo.views.manager_home', name='manager-home'),
url(r'^update/(?P<pk>\d+)$', 'hobo.views.update_tenant', name='update-tenant'),
url(r'^delete/(?P<pk>\d+)$', 'hobo.views.delete_tenant', name='delete-tenant'),
url(r'^hobos.json$', 'hobo.views.hobos', name='hobos'),
)

View File

@ -15,13 +15,27 @@ p.being-deployed {
padding-left: 2em;
}
a.delete-service, a.delete-variable {
a.delete-service, a.delete-variable, a.delete-tenant {
float: right;
text-decoration: none;
}
a.delete-service:after, a.delete-variable:after {
a.delete-service:after, a.delete-variable:after, a.delete-tenant:after {
font: normal 1.5em FontAwesome;
content:"\f057";
}
.right {
float: right;
}
.required {
position: relative;
}
.required label:after {
content: '*';
color: #f00;
position: absolute;
top: 0;
}

View File

@ -13,4 +13,39 @@
<button>{% trans 'Add' %}</button>
</form>
<h2>{% trans 'Tenants' %}</h2>
{% for tenant in tenants_list %}
<div>
<a href="{% url 'delete-tenant' tenant.object.id %}" class="delete-tenant" title="{% trans 'Delete tenant' %}"></a>
<h3>{{ tenant.object }}</h3>
<form class="small" method="post" action="{% url 'update-tenant' tenant.object.pk %}" >
{% csrf_token %}
{{ tenant.form.as_p }}
<button class="enable-on-change" disabled="disabled">{% trans 'Save' %}</button>
</form>
</div>
{% endfor %}
{% endblock %}
{% block page-end %}
<script>
$(function() {
$('a.delete-tenant').click(function() {
var url = $(this).attr('href');
$.get($(this).attr('href'), function(data) {
var form = $(data).find('form');
$(form).dialog({modal: true, title: '{% trans "Tenant deletion" %}', width: 'auto'});
$('.cancel', form).click(function() {$(form).dialog('close')});
});
event.preventDefault();
});
$('button.enable-on-change').each(function(index, element) {
var button = $(element);
$(element).parent('form').find('input').on('change keydown',
function() {$(button).prop('disabled', null);});
});
})
</script>
{% endblock %}

View File

@ -3,9 +3,17 @@ import json
from django.http import HttpResponse
from django.utils.translation import ugettext as _
from django.views.generic.base import TemplateView
from django.views.generic.edit import CreateView
from django.views.generic import edit
from django.core.urlresolvers import reverse
from .environment.utils import Zone, get_operational_services
from .forms import HoboForm, HoboUpdateForm
try:
from tenant_schemas.utils import get_tenant_model, get_public_schema_name
except ImportError:
get_tenant_model = lambda: None
get_public_schema_name = lambda: ''
class Home(TemplateView):
template_name = 'hobo/home.html'
@ -22,18 +30,55 @@ class Home(TemplateView):
home = Home.as_view()
class ManagerHome(CreateView):
class ManagerHome(edit.CreateView):
template_name = 'hobo/manager_home.html'
success_url = '.'
form_class = HoboForm
def get_form_class(self):
from .forms import HoboForm
return HoboForm
def get_success_url(self):
return reverse('manager-home')
def get_context_data(self, **kwargs):
from tenant_schemas.utils import get_tenant_model
context = super(ManagerHome, self).get_context_data(**kwargs)
tenants_list = ()
for obj in get_tenant_model().objects.exclude(schema_name=get_public_schema_name()):
f = HoboUpdateForm(instance=obj, auto_id='%s_%%s' % obj.pk)
tenants_list += ({'object': obj, 'form': f},)
context['tenants_list'] = tenants_list
return context
def form_valid(self, form):
response = super(ManagerHome, self).form_valid(form)
self.object.create_schema(True)
return response
manager_home = ManagerHome.as_view()
class ManagerUpdateTenant(edit.UpdateView):
model = get_tenant_model()
template_name = 'hobo/manager_home.html'
form_class = HoboUpdateForm
def get_success_url(self):
return reverse('manager-home')
def form_valid(self, form):
response = super(ManagerUpdateTenant, self).form_valid(form)
self.object.create_schema(True)
return response
update_tenant = ManagerUpdateTenant.as_view()
class ManagerDeleteTenant(edit.DeleteView):
template_name = 'environment/tenant_confirm_delete.html'
model = get_tenant_model()
def get_success_url(self):
return reverse('manager-home', self.object.id)
delete_tenant = ManagerDeleteTenant.as_view()
def hobos(request, *args, **kwargs):
from tenant_schemas.utils import get_tenant_model, get_public_schema_name
response = HttpResponse(content_type='application/json')
tenants = [{'name': tenant.schema_name, 'url': tenant.domain_url} \
for tenant in get_tenant_model().objects.all()]