parent
ee906aa352
commit
8ff21f9516
|
@ -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 %}
|
|
@ -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']
|
||||
|
|
|
@ -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'),
|
||||
)
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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 %}
|
||||
|
|
|
@ -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()]
|
||||
|
|
Loading…
Reference in New Issue