make Admin UI more consistent, better show when provider has no application assigned

This commit is contained in:
Jens Langhammer 2019-02-27 14:47:11 +01:00
parent 95de6a14fd
commit 2db1738e4a
8 changed files with 30 additions and 10 deletions

View File

@ -21,6 +21,7 @@
<tr> <tr>
<th>{% trans 'Name' %}</th> <th>{% trans 'Name' %}</th>
<th>{% trans 'Provider' %}</th> <th>{% trans 'Provider' %}</th>
<th>{% trans 'Provider Type' %}</th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>
@ -28,7 +29,8 @@
{% for application in object_list %} {% for application in object_list %}
<tr> <tr>
<td>{{ application.name }}</td> <td>{{ application.name }}</td>
<td>{{ application.provider }}</td> <td>{{ application.get_provider }}</td>
<td>{{ application.get_provider|verbose_name }}</td>
<td> <td>
<a class="btn btn-default btn-sm" <a class="btn btn-default btn-sm"
href="{% url 'passbook_admin:application-update' pk=application.uuid %}?back={{ request.get_full_path }}">{% trans 'Edit' %}</a> href="{% url 'passbook_admin:application-update' pk=application.uuid %}?back={{ request.get_full_path }}">{% trans 'Edit' %}</a>

View File

@ -40,7 +40,7 @@
{% for factor in object_list %} {% for factor in object_list %}
<tr> <tr>
<td>{{ factor.name }} ({{ factor.slug }})</td> <td>{{ factor.name }} ({{ factor.slug }})</td>
<td>{{ factor.type }}</td> <td>{{ factor|verbose_name }}</td>
<td>{{ factor.order }}</td> <td>{{ factor.order }}</td>
<td>{{ factor.enabled }}</td> <td>{{ factor.enabled }}</td>
<td> <td>

View File

@ -29,7 +29,7 @@
<thead> <thead>
<tr> <tr>
<th>{% trans 'Name' %}</th> <th>{% trans 'Name' %}</th>
<th>{% trans 'Class' %}</th> <th>{% trans 'Type' %}</th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>
@ -37,7 +37,7 @@
{% for policy in object_list %} {% for policy in object_list %}
<tr> <tr>
<td>{{ policy.name }}</td> <td>{{ policy.name }}</td>
<td>{{ policy|fieldtype }}</td> <td>{{ policy|verbose_name }}</td>
<td> <td>
<a class="btn btn-default btn-sm" <a class="btn btn-default btn-sm"
href="{% url 'passbook_admin:policy-update' pk=policy.uuid %}?back={{ request.get_full_path }}">{% trans 'Edit' %}</a> href="{% url 'passbook_admin:policy-update' pk=policy.uuid %}?back={{ request.get_full_path }}">{% trans 'Edit' %}</a>

View File

@ -29,16 +29,24 @@
<table class="table table-striped table-bordered"> <table class="table table-striped table-bordered">
<thead> <thead>
<tr> <tr>
<th></th>
<th>{% trans 'Name' %}</th> <th>{% trans 'Name' %}</th>
<th>{% trans 'Class' %}</th> <th>{% trans 'Type' %}</th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for provider in object_list %} {% for provider in object_list %}
<tr> <tr {% if not provider.application %} class="warning" {% endif %}>
<th>
{% if not provider.application %}
<span class="pficon-warning-triangle-o" data-toggle="tooltip" data-placement="right" title="{% trans 'Warning: Provider has no application assigned.' %}"></span>
{% else %}
<span class="pficon-ok" data-toggle="tooltip" data-placement="right" title="{% blocktrans with app=provider.application %}Assigned to Application {{ app }}{% endblocktrans %}"></span>
{% endif %}
</th>
<td>{{ provider.name }}</td> <td>{{ provider.name }}</td>
<td>{{ provider|fieldtype }}</td> <td>{{ provider|verbose_name }}</td>
<td> <td>
<a class="btn btn-default btn-sm" <a class="btn btn-default btn-sm"
href="{% url 'passbook_admin:provider-update' pk=provider.pk %}?back={{ request.get_full_path }}">{% trans 'Edit' %}</a> href="{% url 'passbook_admin:provider-update' pk=provider.pk %}?back={{ request.get_full_path }}">{% trans 'Edit' %}</a>

View File

@ -14,6 +14,7 @@ class ApplicationListView(AdminRequiredMixin, ListView):
"""Show list of all applications""" """Show list of all applications"""
model = Application model = Application
ordering = 'name'
template_name = 'administration/application/list.html' template_name = 'administration/application/list.html'
def get_queryset(self): def get_queryset(self):

View File

@ -161,6 +161,10 @@ class Application(PolicyModel):
from passbook.core.policies import PolicyEngine from passbook.core.policies import PolicyEngine
return PolicyEngine(self.policies.all()).for_user(user).result return PolicyEngine(self.policies.all()).for_user(user).result
def get_provider(self):
"""Get casted provider instance"""
return Provider.objects.get_subclass(pk=self.provider.pk)
def __str__(self): def __str__(self):
return self.name return self.name

View File

@ -207,3 +207,8 @@ def gravatar(email, size=None, rating=None):
gravatar_url += '?' + urlencode(parameters, doseq=True) gravatar_url += '?' + urlencode(parameters, doseq=True)
return escape(gravatar_url) return escape(gravatar_url)
@register.filter
def verbose_name(obj):
"""Return Object's Verbose Name"""
return obj._meta.verbose_name

View File

@ -40,11 +40,11 @@ class SAMLProvider(Provider):
def link_download_metadata(self): def link_download_metadata(self):
"""Get link to download XML metadata for admin interface""" """Get link to download XML metadata for admin interface"""
# pylint: disable=no-member try:
if self.application:
# pylint: disable=no-member # pylint: disable=no-member
return reverse('passbook_saml_idp:metadata_xml', return reverse('passbook_saml_idp:metadata_xml',
kwargs={'application': self.application.slug}) kwargs={'application': self.application.slug})
except Provider.application.RelatedObjectDoesNotExist:
return None return None
class Meta: class Meta: