Compare commits
3 Commits
a97004ddc7
...
c0db8cf71c
Author | SHA1 | Date |
---|---|---|
Ales (Shagi) Zabala Alava | c0db8cf71c | |
Ales (Shagi) Zabala Alava | 3a89537a0c | |
Ales (Shagi) Zabala Alava | 40946be0e6 |
|
@ -1,6 +1,11 @@
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
0.8.6
|
||||||
|
-----
|
||||||
|
|
||||||
|
* Allow overriding home url
|
||||||
|
|
||||||
0.8.5
|
0.8.5
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
{% if not is_popup %}
|
{% if not is_popup %}
|
||||||
<nav id="navbar-main" role="navigation">
|
<nav id="navbar-main" role="navigation">
|
||||||
<div class="navbar-header">
|
<div class="navbar-header">
|
||||||
<a class="navbar-brand" href="{% url "gas:index" %}"><img id="logo" src="{% static logo_static_url %}"></a>
|
<a class="navbar-brand" href="{{ home_url }}"><img id="logo" src="{% static logo_static_url %}"></a>
|
||||||
</div>
|
</div>
|
||||||
<ul id="main-navigation">
|
<ul id="main-navigation">
|
||||||
<li>{{ user }}</li>
|
<li>{{ user }}</li>
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
{% if not is_popup %}
|
{% if not is_popup %}
|
||||||
<nav class="breadcrumb">
|
<nav class="breadcrumb">
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="{% url "gas:index" %}" title="{% trans "Home" %}"><i class="fas fa-home fa-fw"></i></a></li>
|
<li><a href="{{ home_url }}" title="{% trans "Home" %}"><i class="fas fa-home fa-fw"></i></a></li>
|
||||||
{% for bc_url, bc_label in breadcrumbs %}
|
{% for bc_url, bc_label in breadcrumbs %}
|
||||||
{% if bc_url %}
|
{% if bc_url %}
|
||||||
<li><a href="{{ bc_url }}">{{ bc_label }}</a></li>
|
<li><a href="{{ bc_url }}">{{ bc_label }}</a></li>
|
||||||
|
|
|
@ -228,10 +228,14 @@ class GASMixinTestCase(TestCase):
|
||||||
]
|
]
|
||||||
template_name = 'gas/base.html'
|
template_name = 'gas/base.html'
|
||||||
|
|
||||||
|
def get_home_url(self):
|
||||||
|
return 'home_url'
|
||||||
|
|
||||||
view = SampleView.as_view()
|
view = SampleView.as_view()
|
||||||
request = self.request_factory.get('some_url')
|
request = self.request_factory.get('some_url')
|
||||||
request.user = self.admin_user
|
request.user = self.admin_user
|
||||||
response = view(request)
|
response = view(request)
|
||||||
|
self.assertEqual(response.context_data['home_url'], 'home_url')
|
||||||
self.assertEqual(response.context_data['title'], SampleView.title)
|
self.assertEqual(response.context_data['title'], SampleView.title)
|
||||||
self.assertEqual(response.context_data['header_title'], SampleView.header_title)
|
self.assertEqual(response.context_data['header_title'], SampleView.header_title)
|
||||||
self.assertEqual(response.context_data['help_text'], SampleView.help_text)
|
self.assertEqual(response.context_data['help_text'], SampleView.help_text)
|
||||||
|
@ -428,7 +432,7 @@ class GASDeleteTestCase(TestCase):
|
||||||
success_url = 'success'
|
success_url = 'success'
|
||||||
confirmation_text = 'delete {object.username}'
|
confirmation_text = 'delete {object.username}'
|
||||||
deleted_text = '{object.username} deleted'
|
deleted_text = '{object.username} deleted'
|
||||||
|
|
||||||
view = SampleDeleteView.as_view()
|
view = SampleDeleteView.as_view()
|
||||||
|
|
||||||
request = request_factory.get('some_url')
|
request = request_factory.get('some_url')
|
||||||
|
|
12
gas/views.py
12
gas/views.py
|
@ -83,7 +83,7 @@ class GASMixin:
|
||||||
breadcrumbs = []
|
breadcrumbs = []
|
||||||
actions = None
|
actions = None
|
||||||
|
|
||||||
def dispatch(self, *args, **kwargs):
|
def check_user_forbidden(self):
|
||||||
user = self.request.user
|
user = self.request.user
|
||||||
roles = set(self.roles)
|
roles = set(self.roles)
|
||||||
roles.add(self.base_role)
|
roles.add(self.base_role)
|
||||||
|
@ -93,7 +93,10 @@ class GASMixin:
|
||||||
and user.user_roles.filter(role__in=roles).count() == 0
|
and user.user_roles.filter(role__in=roles).count() == 0
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if access_denied:
|
return access_denied
|
||||||
|
|
||||||
|
def dispatch(self, *args, **kwargs):
|
||||||
|
if self.check_user_forbidden():
|
||||||
return HttpResponseRedirect(reverse('gas:login') + '?next={}'.format(self.request.path))
|
return HttpResponseRedirect(reverse('gas:login') + '?next={}'.format(self.request.path))
|
||||||
return super().dispatch(*args, **kwargs)
|
return super().dispatch(*args, **kwargs)
|
||||||
|
|
||||||
|
@ -107,6 +110,10 @@ class GASMixin:
|
||||||
def get_success_message(self):
|
def get_success_message(self):
|
||||||
return self.success_message
|
return self.success_message
|
||||||
|
|
||||||
|
def get_home_url(self):
|
||||||
|
""" Url for the home of the control panel """
|
||||||
|
return reverse('gas:index')
|
||||||
|
|
||||||
def get_cancel_url(self):
|
def get_cancel_url(self):
|
||||||
if self.cancel_url:
|
if self.cancel_url:
|
||||||
# Forcing possible reverse_lazy evaluation
|
# Forcing possible reverse_lazy evaluation
|
||||||
|
@ -151,6 +158,7 @@ class GASMixin:
|
||||||
js = js + gas_settings.EXTRA_MEDIA.get('js', [])
|
js = js + gas_settings.EXTRA_MEDIA.get('js', [])
|
||||||
ctx.update({
|
ctx.update({
|
||||||
'base_template': self.base_template,
|
'base_template': self.base_template,
|
||||||
|
'home_url': self.get_home_url(),
|
||||||
'header_title': self.get_header_title(),
|
'header_title': self.get_header_title(),
|
||||||
'title': self.get_title(),
|
'title': self.get_title(),
|
||||||
'help_text': self.get_help_text(),
|
'help_text': self.get_help_text(),
|
||||||
|
|
|
@ -10,6 +10,7 @@ def runtests():
|
||||||
if not settings.configured:
|
if not settings.configured:
|
||||||
# Configure test environment
|
# Configure test environment
|
||||||
settings.configure(
|
settings.configure(
|
||||||
|
SECRET_KEY="test-secret",
|
||||||
DATABASES={
|
DATABASES={
|
||||||
'default': {
|
'default': {
|
||||||
'ENGINE': 'django.db.backends.sqlite3',
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[metadata]
|
[metadata]
|
||||||
name = django-gas
|
name = django-gas
|
||||||
version = 0.8.5
|
version = 0.8.6
|
||||||
description = An alternative to django admin
|
description = An alternative to django admin
|
||||||
long_description = file: readme.md, changelog.md, collaborators.md
|
long_description = file: readme.md, changelog.md, collaborators.md
|
||||||
long_description_content_type = text/markdown
|
long_description_content_type = text/markdown
|
||||||
|
|
Loading…
Reference in New Issue