mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-30 08:32:26 +00:00
Merge branch 'fix_65_history' into 'master'
fix #65, gestion propre de l'historique. Closes #65 See merge request federez/re2o!186
This commit is contained in:
commit
a84e8b5575
51 changed files with 1228 additions and 1283 deletions
|
@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -46,14 +47,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<td>{{ article.type_user }}</td>
|
<td>{{ article.type_user }}</td>
|
||||||
<td>{{ article.available_for_everyone }}</td>
|
<td>{{ article.available_for_everyone }}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
{% can_edit article %}
|
{% can_edit article %}
|
||||||
<a class="btn btn-primary btn-sm" role="button" title="{% trans "Edit" %}" href="{% url 'cotisations:edit-article' article.id %}">
|
<a class="btn btn-primary btn-sm" role="button" title="{% trans "Edit" %}" href="{% url 'cotisations:edit-article' article.id %}">
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
<a class="btn btn-info btn-sm" role="button" title="{% trans "Historique" %}" href="{% url 'cotisations:history' 'article' article.id %}">
|
{% history_button article %}
|
||||||
<i class="fa fa-history"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -36,14 +37,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ banque.name }}</td>
|
<td>{{ banque.name }}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
{% can_edit banque %}
|
{% can_edit banque %}
|
||||||
<a class="btn btn-primary btn-sm" role="button" title="{% trans "Edit" %}" href="{% url 'cotisations:edit-banque' banque.id %}">
|
<a class="btn btn-primary btn-sm" role="button" title="{% trans "Edit" %}" href="{% url 'cotisations:edit-banque' banque.id %}">
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
<a class="btn btn-info btn-sm" role="button" title="{% trans "Historique" %}" href="{% url 'cotisations:history' 'banque' banque.id %}">
|
{% history_button banque %}
|
||||||
<i class="fa fa-history"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
{% if facture_list.paginator %}
|
{% if facture_list.paginator %}
|
||||||
|
@ -86,9 +87,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
</li>
|
</li>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{% url 'cotisations:history' 'facture' facture.id %}">
|
{% history_button facture text=True html_class=False%}
|
||||||
<i class="fa fa-history"></i> {% trans "Historique" %}
|
|
||||||
</a>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -47,9 +48,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
<a class="btn btn-info btn-sm" role="button" title="{% trans "Historique" %}" href="{% url 'cotisations:history' 'paiement' paiement.id %}">
|
{% history_button paiement %}
|
||||||
<i class="fa fa-history"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -27,7 +27,6 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
|
||||||
import re2o
|
|
||||||
from . import views
|
from . import views
|
||||||
from . import payment_methods
|
from . import payment_methods
|
||||||
|
|
||||||
|
@ -122,12 +121,6 @@ urlpatterns = [
|
||||||
views.index_paiement,
|
views.index_paiement,
|
||||||
name='index-paiement'
|
name='index-paiement'
|
||||||
),
|
),
|
||||||
url(
|
|
||||||
r'history/(?P<object_name>\w+)/(?P<object_id>[0-9]+)$',
|
|
||||||
re2o.views.history,
|
|
||||||
name='history',
|
|
||||||
kwargs={'application': 'cotisations'},
|
|
||||||
),
|
|
||||||
url(
|
url(
|
||||||
r'^control/$',
|
r'^control/$',
|
||||||
views.control,
|
views.control,
|
||||||
|
|
|
@ -33,3 +33,23 @@ register = template.Library()
|
||||||
def classname(obj):
|
def classname(obj):
|
||||||
""" Returns the object class name """
|
""" Returns the object class name """
|
||||||
return obj.__class__.__name__
|
return obj.__class__.__name__
|
||||||
|
|
||||||
|
|
||||||
|
@register.inclusion_tag('buttons/history.html')
|
||||||
|
def history_button(instance, text=False, html_class=True):
|
||||||
|
"""Creates the correct history button for an instance.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
instance: The instance of which you want to get history buttons.
|
||||||
|
text: Flag stating if a 'History' text should be displayed.
|
||||||
|
html_class: Flag stating if the link should have the html classes
|
||||||
|
allowing it to be displayed as a button.
|
||||||
|
|
||||||
|
"""
|
||||||
|
return {
|
||||||
|
'application': instance._meta.app_label,
|
||||||
|
'name': instance._meta.model_name,
|
||||||
|
'id': instance.id,
|
||||||
|
'text': text,
|
||||||
|
'class': html_class,
|
||||||
|
}
|
||||||
|
|
|
@ -39,4 +39,9 @@ urlpatterns = [
|
||||||
url(r'^stats_models/$', views.stats_models, name='stats-models'),
|
url(r'^stats_models/$', views.stats_models, name='stats-models'),
|
||||||
url(r'^stats_users/$', views.stats_users, name='stats-users'),
|
url(r'^stats_users/$', views.stats_users, name='stats-users'),
|
||||||
url(r'^stats_actions/$', views.stats_actions, name='stats-actions'),
|
url(r'^stats_actions/$', views.stats_actions, name='stats-actions'),
|
||||||
|
url(
|
||||||
|
r'(?P<application>\w+)/(?P<object_name>\w+)/(?P<object_id>[0-9]+)$',
|
||||||
|
views.history,
|
||||||
|
name='history',
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,9 +2,10 @@
|
||||||
# se veut agnostique au réseau considéré, de manière à être installable en
|
# se veut agnostique au réseau considéré, de manière à être installable en
|
||||||
# quelques clics.
|
# quelques clics.
|
||||||
#
|
#
|
||||||
# Copyright © 2017 Gabriel Détraz
|
# Copyright © 2018 Gabriel Détraz
|
||||||
# Copyright © 2017 Goulven Kermarec
|
# Copyright © 2018 Goulven Kermarec
|
||||||
# Copyright © 2017 Augustin Lemesle
|
# Copyright © 2018 Augustin Lemesle
|
||||||
|
# Copyright © 2018 Hugo Levy-Falk
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -36,12 +37,16 @@ nombre d'objets par models, nombre d'actions par user, etc
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
from itertools import chain
|
||||||
|
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.shortcuts import render, redirect
|
from django.shortcuts import render, redirect
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.db.models import Count, Max, F
|
from django.http import Http404
|
||||||
|
from django.db.models import Count
|
||||||
|
from django.apps import apps
|
||||||
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from reversion.models import Revision
|
from reversion.models import Revision
|
||||||
from reversion.models import Version, ContentType
|
from reversion.models import Version, ContentType
|
||||||
|
@ -142,7 +147,7 @@ def index(request):
|
||||||
'comment': version.revision.comment,
|
'comment': version.revision.comment,
|
||||||
'datetime': version.revision.date_created.strftime(
|
'datetime': version.revision.date_created.strftime(
|
||||||
'%d/%m/%y %H:%M:%S'
|
'%d/%m/%y %H:%M:%S'
|
||||||
),
|
),
|
||||||
'username':
|
'username':
|
||||||
version.revision.user.get_username()
|
version.revision.user.get_username()
|
||||||
if version.revision.user else '?',
|
if version.revision.user else '?',
|
||||||
|
@ -173,7 +178,7 @@ def stats_logs(request):
|
||||||
revisions = re2o_paginator(request, revisions, pagination_number)
|
revisions = re2o_paginator(request, revisions, pagination_number)
|
||||||
return render(request, 'logs/stats_logs.html', {
|
return render(request, 'logs/stats_logs.html', {
|
||||||
'revisions_list': revisions
|
'revisions_list': revisions
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -191,7 +196,7 @@ def revert_action(request, revision_id):
|
||||||
return form({
|
return form({
|
||||||
'objet': revision,
|
'objet': revision,
|
||||||
'objet_name': revision.__class__.__name__
|
'objet_name': revision.__class__.__name__
|
||||||
}, 'logs/delete.html', request)
|
}, 'logs/delete.html', request)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -453,3 +458,58 @@ def stats_actions(request):
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return render(request, 'logs/stats_users.html', {'stats_list': stats})
|
return render(request, 'logs/stats_users.html', {'stats_list': stats})
|
||||||
|
|
||||||
|
|
||||||
|
def history(request, application, object_name, object_id):
|
||||||
|
"""Render history for a model.
|
||||||
|
|
||||||
|
The model is determined using the `HISTORY_BIND` dictionnary if none is
|
||||||
|
found, raises a Http404. The view checks if the user is allowed to see the
|
||||||
|
history using the `can_view` method of the model.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request: The request sent by the user.
|
||||||
|
application: Name of the application.
|
||||||
|
object_name: Name of the model.
|
||||||
|
object_id: Id of the object you want to acces history.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The rendered page of history if access is granted, else the user is
|
||||||
|
redirected to their profile page, with an error message.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
Http404: This kind of models doesn't have history.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
model = apps.get_model(application, object_name)
|
||||||
|
except LookupError:
|
||||||
|
raise Http404(_("No model found."))
|
||||||
|
object_name_id = object_name + 'id'
|
||||||
|
kwargs = {object_name_id: object_id}
|
||||||
|
try:
|
||||||
|
instance = model.get_instance(**kwargs)
|
||||||
|
except model.DoesNotExist:
|
||||||
|
messages.error(request, _("No entry found."))
|
||||||
|
return redirect(reverse(
|
||||||
|
'users:profil',
|
||||||
|
kwargs={'userid': str(request.user.id)}
|
||||||
|
))
|
||||||
|
can, msg = instance.can_view(request.user)
|
||||||
|
if not can:
|
||||||
|
messages.error(request, msg or _("You cannot acces to this menu"))
|
||||||
|
return redirect(reverse(
|
||||||
|
'users:profil',
|
||||||
|
kwargs={'userid': str(request.user.id)}
|
||||||
|
))
|
||||||
|
pagination_number = GeneralOption.get_cached_value('pagination_number')
|
||||||
|
reversions = Version.objects.get_for_object(instance)
|
||||||
|
if hasattr(instance, 'linked_objects'):
|
||||||
|
for related_object in chain(instance.linked_objects()):
|
||||||
|
reversions = (reversions |
|
||||||
|
Version.objects.get_for_object(related_object))
|
||||||
|
reversions = re2o_paginator(request, reversions, pagination_number)
|
||||||
|
return render(
|
||||||
|
request,
|
||||||
|
're2o/history.html',
|
||||||
|
{'reversions': reversions, 'object': instance}
|
||||||
|
)
|
||||||
|
|
|
@ -23,24 +23,25 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th>Alias</th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for alias in alias_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ alias }}</td>
|
<th>Alias</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
{% can_edit alias %}
|
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-alias' id=alias.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='domain' id=alias.id %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
</thead>
|
||||||
</table>
|
{% for alias in alias_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ alias }}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
{% can_edit alias %}
|
||||||
|
{% include 'buttons/edit.html' with href='machines:edit-alias' id=alias.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% history_button alias %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
|
@ -30,28 +31,28 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<tr>
|
<tr>
|
||||||
<th>Extension</th>
|
<th>Extension</th>
|
||||||
<th>Droit infra pour utiliser ?</th>
|
<th>Droit infra pour utiliser ?</th>
|
||||||
<th>Enregistrement SOA</th>
|
<th>Enregistrement SOA</th>
|
||||||
<th>Enregistrement A origin</th>
|
<th>Enregistrement A origin</th>
|
||||||
{% if ipv6_enabled %}
|
{% if ipv6_enabled %}
|
||||||
<th>Enregistrement AAAA origin</th>
|
<th>Enregistrement AAAA origin</th>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for extension in extension_list %}
|
{% for extension in extension_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ extension.name }}</td>
|
<td>{{ extension.name }}</td>
|
||||||
<td>{{ extension.need_infra }}</td>
|
<td>{{ extension.need_infra }}</td>
|
||||||
<td>{{ extension.soa}}</td>
|
<td>{{ extension.soa}}</td>
|
||||||
<td>{{ extension.origin }}</td>
|
<td>{{ extension.origin }}</td>
|
||||||
{% if ipv6_enabled %}
|
{% if ipv6_enabled %}
|
||||||
<td>{{ extension.origin_v6 }}</td>
|
<td>{{ extension.origin_v6 }}</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
{% can_edit extension %}
|
{% can_edit extension %}
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-extension' id=extension.id %}
|
{% include 'buttons/edit.html' with href='machines:edit-extension' id=extension.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='extension' id=extension.id %}
|
{% history_button extension %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -31,10 +32,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<th>Extension</th>
|
<th>Extension</th>
|
||||||
<th>Nécessite l'autorisation infra</th>
|
<th>Nécessite l'autorisation infra</th>
|
||||||
<th>Plage ipv4</th>
|
<th>Plage ipv4</th>
|
||||||
<th>Préfixe v6</th>
|
<th>Préfixe v6</th>
|
||||||
<th>Sur vlan</th>
|
<th>Sur vlan</th>
|
||||||
<th>Ouverture ports par défault</th>
|
<th>Ouverture ports par défault</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -43,15 +44,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<td>{{ type.type }}</td>
|
<td>{{ type.type }}</td>
|
||||||
<td>{{ type.extension }}</td>
|
<td>{{ type.extension }}</td>
|
||||||
<td>{{ type.need_infra }}</td>
|
<td>{{ type.need_infra }}</td>
|
||||||
<td>{{ type.domaine_ip_start }}-{{ type.domaine_ip_stop }}</td>
|
<td>{{ type.domaine_ip_start }}-{{ type.domaine_ip_stop }}</td>
|
||||||
<td>{{ type.prefix_v6 }}</td>
|
<td>{{ type.prefix_v6 }}</td>
|
||||||
<td>{{ type.vlan }}</td>
|
<td>{{ type.vlan }}</td>
|
||||||
<td>{{ type.ouverture_ports }}</td>
|
<td>{{ type.ouverture_ports }}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
{% can_edit type %}
|
{% can_edit type %}
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-iptype' id=type.id %}
|
{% include 'buttons/edit.html' with href='machines:edit-iptype' id=type.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='iptype' id=type.id %}
|
{% history_button type %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -23,29 +23,30 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th>Ipv6</th>
|
|
||||||
<th>Slaac</th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for ipv6 in ipv6_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ ipv6.ipv6 }}</td>
|
<th>Ipv6</th>
|
||||||
<td>{{ ipv6.slaac_ip }}</td>
|
<th>Slaac</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
{% can_edit ipv6 %}
|
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-ipv6list' id=ipv6.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% can_delete ipv6 %}
|
|
||||||
{% include 'buttons/suppr.html' with href='machines:del-ipv6list' id=ipv6.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='ipv6list' id=ipv6.id %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
</thead>
|
||||||
</table>
|
{% for ipv6 in ipv6_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ ipv6.ipv6 }}</td>
|
||||||
|
<td>{{ ipv6.slaac_ip }}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
{% can_edit ipv6 %}
|
||||||
|
{% include 'buttons/edit.html' with href='machines:edit-ipv6list' id=ipv6.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% can_delete ipv6 %}
|
||||||
|
{% include 'buttons/suppr.html' with href='machines:del-ipv6list' id=ipv6.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% history_button ipv6 %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -22,165 +22,166 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
{% if machines_list.paginator %}
|
{% if machines_list.paginator %}
|
||||||
{% include "pagination.html" with list=machines_list %}
|
{% include "pagination.html" with list=machines_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<table class="table" id="machines_table">
|
<table class="table" id="machines_table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col>
|
<col>
|
||||||
<col>
|
<col>
|
||||||
<col>
|
<col>
|
||||||
<col width="{% if ipv6_enabled %}300{% else %}150{% endif %}px">
|
<col width="{% if ipv6_enabled %}300{% else %}150{% endif %}px">
|
||||||
<col width="144px">
|
<col width="144px">
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead>
|
<thead>
|
||||||
<th>{% include "buttons/sort.html" with prefix='machine' col='name' text='Nom DNS' %}</th>
|
<th>{% include "buttons/sort.html" with prefix='machine' col='name' text='Nom DNS' %}</th>
|
||||||
<th>Type</th>
|
<th>Type</th>
|
||||||
<th>MAC</th>
|
<th>MAC</th>
|
||||||
<th>IP</th>
|
<th>IP</th>
|
||||||
<th>Actions</th>
|
<th>Actions</th>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for machine in machines_list %}
|
{% for machine in machines_list %}
|
||||||
<tr class="info">
|
<tr class="info">
|
||||||
<td colspan="4">
|
<td colspan="4">
|
||||||
<b>{{ machine.name|default:'<i>Pas de nom</i>' }}</b> <i class="fa-angle-right"></i>
|
<b>{{ machine.name|default:'<i>Pas de nom</i>' }}</b> <i class="fa-angle-right"></i>
|
||||||
<a href="{% url 'users:profil' userid=machine.user.id %}" title="Voir le profil">
|
<a href="{% url 'users:profil' userid=machine.user.id %}" title="Voir le profil">
|
||||||
<i class="fa fa-user"></i> {{ machine.user }}
|
<i class="fa fa-user"></i> {{ machine.user }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
{% can_create Interface machine.id %}
|
{% can_create Interface machine.id %}
|
||||||
{% include 'buttons/add.html' with href='machines:new-interface' id=machine.id desc='Ajouter une interface' %}
|
{% include 'buttons/add.html' with href='machines:new-interface' id=machine.id desc='Ajouter une interface' %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='machine' id=machine.id %}
|
{% history_button machine %}
|
||||||
{% can_delete machine %}
|
{% can_delete machine %}
|
||||||
{% include 'buttons/suppr.html' with href='machines:del-machine' id=machine.id %}
|
{% include 'buttons/suppr.html' with href='machines:del-machine' id=machine.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% for interface in machine.interface_set.all %}
|
{% for interface in machine.interface_set.all %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{% if interface.domain.related_domain.all %}
|
{% if interface.domain.related_domain.all %}
|
||||||
{{ interface.domain }}
|
{{ interface.domain }}
|
||||||
<button class="btn btn-default btn-xs" type="button" data-toggle="collapse" data-target="#collapseDomain_{{interface.id}}" aria-expanded="true" aria-controls="collapseDomain_{{interface.id}}">
|
<button class="btn btn-default btn-xs" type="button" data-toggle="collapse" data-target="#collapseDomain_{{interface.id}}" aria-expanded="true" aria-controls="collapseDomain_{{interface.id}}">
|
||||||
Afficher les alias
|
Afficher les alias
|
||||||
</button>
|
|
||||||
{% else %}
|
|
||||||
{{ interface.domain }}
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ interface.type }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ interface.mac_address }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<b>IPv4</b> {{ interface.ipv4 }}
|
|
||||||
<br>
|
|
||||||
{% if ipv6_enabled and interface.ipv6 != 'None'%}
|
|
||||||
<b>IPv6</b>
|
|
||||||
<button class="btn btn-default btn-xs" type="button" data-toggle="collapse" data-target="#collapseIpv6_{{interface.id}}" aria-expanded="true" aria-controls="collapseIpv6_{{interface.id}}">
|
|
||||||
Afficher l'IPV6
|
|
||||||
</button>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td class="text-right">
|
|
||||||
<div style="width: 128px;">
|
|
||||||
<div class="btn-group" role="group">
|
|
||||||
<button class="btn btn-primary btn-sm dropdown-toggle" type="button" id="editioninterface" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
|
||||||
<i class="fa fa-edit"></i> <span class="caret"></span>
|
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu pull-right" aria-labelledby="editioninterface">
|
{% else %}
|
||||||
{% can_edit interface %}
|
{{ interface.domain }}
|
||||||
<li>
|
{% endif %}
|
||||||
<a href="{% url 'machines:edit-interface' interface.id %}">
|
</td>
|
||||||
<i class="fa fa-edit"></i> Editer
|
<td>
|
||||||
</a>
|
{{ interface.type }}
|
||||||
</li>
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ interface.mac_address }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<b>IPv4</b> {{ interface.ipv4 }}
|
||||||
|
<br>
|
||||||
|
{% if ipv6_enabled and interface.ipv6 != 'None'%}
|
||||||
|
<b>IPv6</b>
|
||||||
|
<button class="btn btn-default btn-xs" type="button" data-toggle="collapse" data-target="#collapseIpv6_{{interface.id}}" aria-expanded="true" aria-controls="collapseIpv6_{{interface.id}}">
|
||||||
|
Afficher l'IPV6
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td class="text-right">
|
||||||
|
<div style="width: 128px;">
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<button class="btn btn-primary btn-sm dropdown-toggle" type="button" id="editioninterface" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||||
|
<i class="fa fa-edit"></i> <span class="caret"></span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu pull-right" aria-labelledby="editioninterface">
|
||||||
|
{% can_edit interface %}
|
||||||
|
<li>
|
||||||
|
<a href="{% url 'machines:edit-interface' interface.id %}">
|
||||||
|
<i class="fa fa-edit"></i> Editer
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% acl_end %}
|
||||||
|
{% can_create Domain interface.id %}
|
||||||
|
<li>
|
||||||
|
<a href="{% url 'machines:index-alias' interface.id %}">
|
||||||
|
<i class="fa fa-edit"></i> Gerer les alias
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% acl_end %}
|
||||||
|
{% can_create Ipv6List interface.id %}
|
||||||
|
<li>
|
||||||
|
<a href="{% url 'machines:index-ipv6' interface.id %}">
|
||||||
|
<i class="fa fa-edit"></i> Gerer les ipv6
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% acl_end %}
|
||||||
|
{% can_create OuverturePortList %}
|
||||||
|
<li>
|
||||||
|
<a href="{% url 'machines:port-config' interface.id%}">
|
||||||
|
<i class="fa fa-edit"></i> Gerer la configuration des ports
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% acl_end %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% history_button interface %}
|
||||||
|
{% can_delete interface %}
|
||||||
|
{% include 'buttons/suppr.html' with href='machines:del-interface' id=interface.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% can_create Domain interface.id %}
|
</div>
|
||||||
<li>
|
</td>
|
||||||
<a href="{% url 'machines:index-alias' interface.id %}">
|
</tr>
|
||||||
<i class="fa fa-edit"></i> Gerer les alias
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{% acl_end %}
|
|
||||||
{% can_create Ipv6List interface.id %}
|
|
||||||
<li>
|
|
||||||
<a href="{% url 'machines:index-ipv6' interface.id %}">
|
|
||||||
<i class="fa fa-edit"></i> Gerer les ipv6
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{% acl_end %}
|
|
||||||
{% can_create OuverturePortList %}
|
|
||||||
<li>
|
|
||||||
<a href="{% url 'machines:port-config' interface.id%}">
|
|
||||||
<i class="fa fa-edit"></i> Gerer la configuration des ports
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{% acl_end %}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='interface' id=interface.id %}
|
|
||||||
{% can_delete interface %}
|
|
||||||
{% include 'buttons/suppr.html' with href='machines:del-interface' id=interface.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
{% if ipv6_enabled and interface.ipv6 != 'None'%}
|
{% if ipv6_enabled and interface.ipv6 != 'None'%}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=5 style="border-top: none; padding: 1px;">
|
<td colspan=5 style="border-top: none; padding: 1px;">
|
||||||
<div class="collapse in" id="collapseIpv6_{{interface.id}}">
|
<div class="collapse in" id="collapseIpv6_{{interface.id}}">
|
||||||
<ul class="list-group" style="margin-bottom: 0px;">
|
<ul class="list-group" style="margin-bottom: 0px;">
|
||||||
{% for ipv6 in interface.ipv6.all %}
|
{% for ipv6 in interface.ipv6.all %}
|
||||||
<li class="list-group-item col-xs-6 col-sm-6 col-md-6" style="border: none;">
|
<li class="list-group-item col-xs-6 col-sm-6 col-md-6" style="border: none;">
|
||||||
{{ipv6}}
|
{{ipv6}}
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<tr>
|
<tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
{% if interface.domain.related_domain.all %}
|
{% if interface.domain.related_domain.all %}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=5 style="border-top: none; padding: 1px;">
|
<td colspan=5 style="border-top: none; padding: 1px;">
|
||||||
<div class="collapse in" id="collapseDomain_{{interface.id}}">
|
<div class="collapse in" id="collapseDomain_{{interface.id}}">
|
||||||
<ul class="list-group" style="margin-bottom: 0px;">
|
<ul class="list-group" style="margin-bottom: 0px;">
|
||||||
{% for al in interface.domain.related_domain.all %}
|
{% for al in interface.domain.related_domain.all %}
|
||||||
<li class="list-group-item col-xs-6 col-sm-4 col-md-3" style="border: none;">
|
<li class="list-group-item col-xs-6 col-sm-4 col-md-3" style="border: none;">
|
||||||
<a href="http://{{ al }}">
|
<a href="http://{{ al }}">
|
||||||
{{ al }}
|
{{ al }}
|
||||||
<i class="fa fa-share"></i>
|
<i class="fa fa-share"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<tr>
|
<tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="8"></td>
|
<td colspan="8"></td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$("#machines_table").ready( function() {
|
$("#machines_table").ready( function() {
|
||||||
var alias_div = [{% for machine in machines_list %}{% for interface in machine.interface_set.all %}{% if interface.domain.related_domain.all %}$("#collapseDomain_{{interface.id}}"), {% endif %}{% endfor %}{% endfor %}];
|
var alias_div = [{% for machine in machines_list %}{% for interface in machine.interface_set.all %}{% if interface.domain.related_domain.all %}$("#collapseDomain_{{interface.id}}"), {% endif %}{% endfor %}{% endfor %}];
|
||||||
for (var i=0 ; i<alias_div.length ; i++) {
|
for (var i=0 ; i<alias_div.length ; i++) {
|
||||||
|
@ -193,9 +194,9 @@ $("#machines_table").ready( function() {
|
||||||
ipv6_div[i].collapse('hide');
|
ipv6_div[i].collapse('hide');
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% if machines_list.paginator %}
|
{% if machines_list.paginator %}
|
||||||
{% include "pagination.html" with list=machines_list %}
|
{% include "pagination.html" with list=machines_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -23,26 +23,27 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th>Type de machine</th>
|
|
||||||
<th>Type d'ip correspondant</th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for type in machinetype_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ type.type }}</td>
|
<th>Type de machine</th>
|
||||||
<td>{{ type.ip_type }}</td>
|
<th>Type d'ip correspondant</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
{% can_edit type %}
|
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-machinetype' id=type.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='machinetype' id=type.id %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
</thead>
|
||||||
</table>
|
{% for type in machinetype_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ type.type }}</td>
|
||||||
|
<td>{{ type.ip_type }}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
{% can_edit type %}
|
||||||
|
{% include 'buttons/edit.html' with href='machines:edit-machinetype' id=type.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% history_button type %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -23,30 +23,31 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th>Zone concernée</th>
|
|
||||||
<th>Priorité</th>
|
|
||||||
<th>Enregistrement</th>
|
|
||||||
<th></th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for mx in mx_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ mx.zone }}</td>
|
<th>Zone concernée</th>
|
||||||
<td>{{ mx.priority }}</td>
|
<th>Priorité</th>
|
||||||
<td>{{ mx.name }}</td>
|
<th>Enregistrement</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for mx in mx_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ mx.zone }}</td>
|
||||||
|
<td>{{ mx.priority }}</td>
|
||||||
|
<td>{{ mx.name }}</td>
|
||||||
|
<td class="text-right">
|
||||||
{% can_edit mx %}
|
{% can_edit mx %}
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-mx' id=mx.id %}
|
{% include 'buttons/edit.html' with href='machines:edit-mx' id=mx.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='mx' id=mx.id %}
|
{% history_button mx %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -23,32 +23,33 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th>Nom</th>
|
|
||||||
<th>Type du nas</th>
|
|
||||||
<th>Type de machine reliées au nas</th>
|
|
||||||
<th>Mode d'accès</th>
|
|
||||||
<th>Autocapture mac</th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for nas in nas_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ nas.name }}</td>
|
<th>Nom</th>
|
||||||
<td>{{ nas.nas_type }}</td>
|
<th>Type du nas</th>
|
||||||
<td>{{ nas.machine_type }}</td>
|
<th>Type de machine reliées au nas</th>
|
||||||
<td>{{ nas.port_access_mode }}</td>
|
<th>Mode d'accès</th>
|
||||||
<td>{{ nas.autocapture_mac }}</td>
|
<th>Autocapture mac</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
{% can_edit nas %}
|
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-nas' id=nas.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='nas' id=nas.id %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
</thead>
|
||||||
</table>
|
{% for nas in nas_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ nas.name }}</td>
|
||||||
|
<td>{{ nas.nas_type }}</td>
|
||||||
|
<td>{{ nas.machine_type }}</td>
|
||||||
|
<td>{{ nas.port_access_mode }}</td>
|
||||||
|
<td>{{ nas.autocapture_mac }}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
{% can_edit nas %}
|
||||||
|
{% include 'buttons/edit.html' with href='machines:edit-nas' id=nas.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% history_button nas %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -23,28 +23,29 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th>Zone concernée</th>
|
|
||||||
<th>Interface autoritaire de la zone</th>
|
|
||||||
<th></th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for ns in ns_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ ns.zone }}</td>
|
<th>Zone concernée</th>
|
||||||
<td>{{ ns.ns }}</td>
|
<th>Interface autoritaire de la zone</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for ns in ns_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ ns.zone }}</td>
|
||||||
|
<td>{{ ns.ns }}</td>
|
||||||
|
<td class="text-right">
|
||||||
{% can_edit ns %}
|
{% can_edit ns %}
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-ns' id=ns.id %}
|
{% include 'buttons/edit.html' with href='machines:edit-ns' id=ns.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='ns' id=ns.id %}
|
{% history_button ns %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,26 +22,26 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th>Nom du service</th>
|
|
||||||
<th>Serveur</th>
|
|
||||||
<th>Dernière régénération</th>
|
|
||||||
<th>Régénération nécessaire</th>
|
|
||||||
<th>Régénération activée</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for server in servers_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ server.service }}</td>
|
<th>Nom du service</th>
|
||||||
<td>{{ server.server }}</td>
|
<th>Serveur</th>
|
||||||
<td>{{ server.last_regen }}</td>
|
<th>Dernière régénération</th>
|
||||||
<td>{{ server.asked_regen }}</td>
|
<th>Régénération nécessaire</th>
|
||||||
<td>{{ server.need_regen }}</td>
|
<th>Régénération activée</th>
|
||||||
<td class="text-right">
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
</thead>
|
||||||
</table>
|
{% for server in servers_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ server.service }}</td>
|
||||||
|
<td>{{ server.server }}</td>
|
||||||
|
<td>{{ server.last_regen }}</td>
|
||||||
|
<td>{{ server.asked_regen }}</td>
|
||||||
|
<td>{{ server.need_regen }}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -23,31 +23,32 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th>Nom du service</th>
|
|
||||||
<th>Temps minimum avant nouvelle régénération</th>
|
|
||||||
<th>Temps avant nouvelle génération obligatoire (max)</th>
|
|
||||||
<th>Serveurs inclus</th>
|
|
||||||
<th></th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for service in service_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ service.service_type }}</td>
|
<th>Nom du service</th>
|
||||||
<td>{{ service.min_time_regen }}</td>
|
<th>Temps minimum avant nouvelle régénération</th>
|
||||||
<td>{{ service.regular_time_regen }}</td>
|
<th>Temps avant nouvelle génération obligatoire (max)</th>
|
||||||
<td>{% for serv in service.servers.all %}{{ serv }}, {% endfor %}</td>
|
<th>Serveurs inclus</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
{% can_edit service %}
|
<th></th>
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-service' id=service.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='service' id=service.id %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
</thead>
|
||||||
</table>
|
{% for service in service_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ service.service_type }}</td>
|
||||||
|
<td>{{ service.min_time_regen }}</td>
|
||||||
|
<td>{{ service.regular_time_regen }}</td>
|
||||||
|
<td>{% for serv in service.servers.all %}{{ serv }}, {% endfor %}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
{% can_edit service %}
|
||||||
|
{% include 'buttons/edit.html' with href='machines:edit-service' id=service.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% history_button service %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -23,36 +23,37 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th>Nom</th>
|
|
||||||
<th>Mail</th>
|
|
||||||
<th>Refresh</th>
|
|
||||||
<th>Retry</th>
|
|
||||||
<th>Expire</th>
|
|
||||||
<th>TTL</th>
|
|
||||||
<th></th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for soa in soa_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ soa.name }}</td>
|
<th>Nom</th>
|
||||||
<td>{{ soa.mail }}</td>
|
<th>Mail</th>
|
||||||
<td>{{ soa.refresh }}</td>
|
<th>Refresh</th>
|
||||||
<td>{{ soa.retry }}</td>
|
<th>Retry</th>
|
||||||
<td>{{ soa.expire }}</td>
|
<th>Expire</th>
|
||||||
<td>{{ soa.ttl }}</td>
|
<th>TTL</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for soa in soa_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ soa.name }}</td>
|
||||||
|
<td>{{ soa.mail }}</td>
|
||||||
|
<td>{{ soa.refresh }}</td>
|
||||||
|
<td>{{ soa.retry }}</td>
|
||||||
|
<td>{{ soa.expire }}</td>
|
||||||
|
<td>{{ soa.ttl }}</td>
|
||||||
|
<td class="text-right">
|
||||||
{% can_edit soa %}
|
{% can_edit soa %}
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-soa' id=soa.id %}
|
{% include 'buttons/edit.html' with href='machines:edit-soa' id=soa.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='soa' id=soa.id %}
|
{% history_button soa %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -23,40 +23,41 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th>Service</th>
|
|
||||||
<th>Protocole</th>
|
|
||||||
<th>Extension</th>
|
|
||||||
<th>TTL</th>
|
|
||||||
<th>Priorité</th>
|
|
||||||
<th>Poids</th>
|
|
||||||
<th>Port</th>
|
|
||||||
<th>Cible</th>
|
|
||||||
<th></th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for srv in srv_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ srv.service }}</td>
|
<th>Service</th>
|
||||||
<td>{{ srv.protocole }}</td>
|
<th>Protocole</th>
|
||||||
<td>{{ srv.extension }}</td>
|
<th>Extension</th>
|
||||||
<td>{{ srv.ttl }}</td>
|
<th>TTL</th>
|
||||||
<td>{{ srv.priority }}</td>
|
<th>Priorité</th>
|
||||||
<td>{{ srv.weight }}</td>
|
<th>Poids</th>
|
||||||
<td>{{ srv.port }}</td>
|
<th>Port</th>
|
||||||
<td>{{ srv.target }}</td>
|
<th>Cible</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
{% can_edit srv %}
|
<th></th>
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-srv' id=srv.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='srv' id=srv.id %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
</thead>
|
||||||
</table>
|
{% for srv in srv_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ srv.service }}</td>
|
||||||
|
<td>{{ srv.protocole }}</td>
|
||||||
|
<td>{{ srv.extension }}</td>
|
||||||
|
<td>{{ srv.ttl }}</td>
|
||||||
|
<td>{{ srv.priority }}</td>
|
||||||
|
<td>{{ srv.weight }}</td>
|
||||||
|
<td>{{ srv.port }}</td>
|
||||||
|
<td>{{ srv.target }}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
{% can_edit srv %}
|
||||||
|
{% include 'buttons/edit.html' with href='machines:edit-srv' id=srv.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% history_button srv %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -23,28 +23,29 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th>Zone concernée</th>
|
|
||||||
<th>Enregistrement</th>
|
|
||||||
<th></th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for txt in txt_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ txt.zone }}</td>
|
<th>Zone concernée</th>
|
||||||
<td>{{ txt.dns_entry }}</td>
|
<th>Enregistrement</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for txt in txt_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ txt.zone }}</td>
|
||||||
|
<td>{{ txt.dns_entry }}</td>
|
||||||
|
<td class="text-right">
|
||||||
{% can_edit txt %}
|
{% can_edit txt %}
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-txt' id=txt.id %}
|
{% include 'buttons/edit.html' with href='machines:edit-txt' id=txt.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='txt' id=txt.id %}
|
{% history_button txt %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
|
@ -30,22 +31,22 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<tr>
|
<tr>
|
||||||
<th>Id</th>
|
<th>Id</th>
|
||||||
<th>Nom</th>
|
<th>Nom</th>
|
||||||
<th>Commentaire</th>
|
<th>Commentaire</th>
|
||||||
<th>Ranges ip</th>
|
<th>Ranges ip</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for vlan in vlan_list %}
|
{% for vlan in vlan_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ vlan.vlan_id }}</td>
|
<td>{{ vlan.vlan_id }}</td>
|
||||||
<td>{{ vlan.name }}</td>
|
<td>{{ vlan.name }}</td>
|
||||||
<td>{{ vlan.comment }}</td>
|
<td>{{ vlan.comment }}</td>
|
||||||
<td>{% for range in vlan.iptype_set.all %}{{ range }}, {% endfor%}</td>
|
<td>{% for range in vlan.iptype_set.all %}{{ range }}, {% endfor%}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
{% can_edit vlan %}
|
{% can_edit vlan %}
|
||||||
{% include 'buttons/edit.html' with href='machines:edit-vlan' id=vlan.id %}
|
{% include 'buttons/edit.html' with href='machines:edit-vlan' id=vlan.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='machines:history' name='vlan' id=vlan.id %}
|
{% history_button vlan %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -27,7 +27,6 @@ The defined URLs for the Cotisations app
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
import re2o
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
@ -119,10 +118,6 @@ urlpatterns = [
|
||||||
url(r'^edit_nas/(?P<nasid>[0-9]+)$', views.edit_nas, name='edit-nas'),
|
url(r'^edit_nas/(?P<nasid>[0-9]+)$', views.edit_nas, name='edit-nas'),
|
||||||
url(r'^del_nas/$', views.del_nas, name='del-nas'),
|
url(r'^del_nas/$', views.del_nas, name='del-nas'),
|
||||||
url(r'^index_nas/$', views.index_nas, name='index-nas'),
|
url(r'^index_nas/$', views.index_nas, name='index-nas'),
|
||||||
url(r'history/(?P<object_name>\w+)/(?P<object_id>[0-9]+)$',
|
|
||||||
re2o.views.history,
|
|
||||||
name='history',
|
|
||||||
kwargs={'application': 'machines'}),
|
|
||||||
url(r'^$', views.index, name='index'),
|
url(r'^$', views.index, name='index'),
|
||||||
url(r'^rest/mac-ip/$', views.mac_ip, name='mac-ip'),
|
url(r'^rest/mac-ip/$', views.mac_ip, name='mac-ip'),
|
||||||
url(r'^rest/regen-achieved/$',
|
url(r'^rest/regen-achieved/$',
|
||||||
|
|
|
@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -43,7 +44,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% can_edit service%}
|
{% can_edit service%}
|
||||||
{% include 'buttons/edit.html' with href='preferences:edit-service' id=service.id %}
|
{% include 'buttons/edit.html' with href='preferences:edit-service' id=service.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='preferences:history' name='service' id=service.id %}
|
{% history_button service %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -27,7 +27,6 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
|
||||||
import re2o
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,11 +73,5 @@ urlpatterns = [
|
||||||
name='edit-service'
|
name='edit-service'
|
||||||
),
|
),
|
||||||
url(r'^del_services/$', views.del_services, name='del-services'),
|
url(r'^del_services/$', views.del_services, name='del-services'),
|
||||||
url(
|
|
||||||
r'^history/(?P<object_name>\w+)/(?P<object_id>[0-9]+)$',
|
|
||||||
re2o.views.history,
|
|
||||||
name='history',
|
|
||||||
kwargs={'application': 'preferences'},
|
|
||||||
),
|
|
||||||
url(r'^$', views.display_options, name='display-options'),
|
url(r'^$', views.display_options, name='display-options'),
|
||||||
]
|
]
|
||||||
|
|
133
re2o/views.py
133
re2o/views.py
|
@ -26,33 +26,20 @@ les views
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from itertools import chain
|
|
||||||
import git
|
import git
|
||||||
from reversion.models import Version
|
|
||||||
|
|
||||||
from django.http import Http404
|
from django.shortcuts import render
|
||||||
from django.urls import reverse
|
|
||||||
from django.shortcuts import render, redirect
|
|
||||||
from django.template.context_processors import csrf
|
from django.template.context_processors import csrf
|
||||||
from django.contrib.auth.decorators import login_required
|
|
||||||
from django.contrib import messages
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.views.decorators.cache import cache_page
|
from django.views.decorators.cache import cache_page
|
||||||
|
|
||||||
import preferences
|
|
||||||
from preferences.models import (
|
from preferences.models import (
|
||||||
Service,
|
Service,
|
||||||
GeneralOption,
|
|
||||||
AssoOption,
|
AssoOption,
|
||||||
HomeOption
|
HomeOption
|
||||||
)
|
)
|
||||||
import users
|
|
||||||
import cotisations
|
|
||||||
import topologie
|
|
||||||
import machines
|
|
||||||
|
|
||||||
from .utils import re2o_paginator
|
|
||||||
from .contributors import CONTRIBUTORS
|
from .contributors import CONTRIBUTORS
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,118 +60,12 @@ def index(request):
|
||||||
twitter_account_name = HomeOption.get_cached_value('twitter_account_name')
|
twitter_account_name = HomeOption.get_cached_value('twitter_account_name')
|
||||||
asso_name = AssoOption.get_cached_value('pseudo')
|
asso_name = AssoOption.get_cached_value('pseudo')
|
||||||
return form({
|
return form({
|
||||||
'services_urls': services,
|
'services_urls': services,
|
||||||
'twitter_url': twitter_url,
|
'twitter_url': twitter_url,
|
||||||
'twitter_account_name' : twitter_account_name,
|
'twitter_account_name': twitter_account_name,
|
||||||
'facebook_url': facebook_url,
|
'facebook_url': facebook_url,
|
||||||
'asso_name': asso_name
|
'asso_name': asso_name
|
||||||
}, 're2o/index.html', request)
|
}, 're2o/index.html', request)
|
||||||
|
|
||||||
|
|
||||||
#: Binding the corresponding char sequence of history url to re2o models.
|
|
||||||
HISTORY_BIND = {
|
|
||||||
'users': {
|
|
||||||
'user': users.models.User,
|
|
||||||
'ban': users.models.Ban,
|
|
||||||
'whitelist': users.models.Whitelist,
|
|
||||||
'school': users.models.School,
|
|
||||||
'listright': users.models.ListRight,
|
|
||||||
'serviceuser': users.models.ServiceUser,
|
|
||||||
'listshell': users.models.ListShell,
|
|
||||||
},
|
|
||||||
'preferences': {
|
|
||||||
'service': preferences.models.Service,
|
|
||||||
},
|
|
||||||
'cotisations': {
|
|
||||||
'facture': cotisations.models.Facture,
|
|
||||||
'article': cotisations.models.Article,
|
|
||||||
'paiement': cotisations.models.Paiement,
|
|
||||||
'banque': cotisations.models.Banque,
|
|
||||||
},
|
|
||||||
'topologie': {
|
|
||||||
'switch': topologie.models.Switch,
|
|
||||||
'port': topologie.models.Port,
|
|
||||||
'room': topologie.models.Room,
|
|
||||||
'stack': topologie.models.Stack,
|
|
||||||
'modelswitch': topologie.models.ModelSwitch,
|
|
||||||
'constructorswitch': topologie.models.ConstructorSwitch,
|
|
||||||
'accesspoint': topologie.models.AccessPoint,
|
|
||||||
'switchbay': topologie.models.SwitchBay,
|
|
||||||
'building': topologie.models.Building,
|
|
||||||
},
|
|
||||||
'machines': {
|
|
||||||
'machine': machines.models.Machine,
|
|
||||||
'interface': machines.models.Interface,
|
|
||||||
'domain': machines.models.Domain,
|
|
||||||
'machinetype': machines.models.MachineType,
|
|
||||||
'iptype': machines.models.IpType,
|
|
||||||
'extension': machines.models.Extension,
|
|
||||||
'soa': machines.models.SOA,
|
|
||||||
'mx': machines.models.Mx,
|
|
||||||
'txt': machines.models.Txt,
|
|
||||||
'srv': machines.models.Srv,
|
|
||||||
'ns': machines.models.Ns,
|
|
||||||
'service': machines.models.Service,
|
|
||||||
'vlan': machines.models.Vlan,
|
|
||||||
'nas': machines.models.Nas,
|
|
||||||
'ipv6list': machines.models.Ipv6List,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
|
||||||
def history(request, application, object_name, object_id):
|
|
||||||
"""Render history for a model.
|
|
||||||
|
|
||||||
The model is determined using the `HISTORY_BIND` dictionnary if none is
|
|
||||||
found, raises a Http404. The view checks if the user is allowed to see the
|
|
||||||
history using the `can_view` method of the model.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
request: The request sent by the user.
|
|
||||||
object_name: Name of the model.
|
|
||||||
object_id: Id of the object you want to acces history.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
The rendered page of history if access is granted, else the user is
|
|
||||||
redirected to their profile page, with an error message.
|
|
||||||
|
|
||||||
Raises:
|
|
||||||
Http404: This kind of models doesn't have history.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
model = HISTORY_BIND[application][object_name]
|
|
||||||
except KeyError:
|
|
||||||
raise Http404(u"Il n'existe pas d'historique pour ce modèle.")
|
|
||||||
object_name_id = object_name + 'id'
|
|
||||||
kwargs = {object_name_id: object_id}
|
|
||||||
try:
|
|
||||||
instance = model.get_instance(**kwargs)
|
|
||||||
except model.DoesNotExist:
|
|
||||||
messages.error(request, u"Entrée inexistante")
|
|
||||||
return redirect(reverse(
|
|
||||||
'users:profil',
|
|
||||||
kwargs={'userid': str(request.user.id)}
|
|
||||||
))
|
|
||||||
can, msg = instance.can_view(request.user)
|
|
||||||
if not can:
|
|
||||||
messages.error(request, msg or "Vous ne pouvez pas accéder à ce menu")
|
|
||||||
return redirect(reverse(
|
|
||||||
'users:profil',
|
|
||||||
kwargs={'userid': str(request.user.id)}
|
|
||||||
))
|
|
||||||
pagination_number = GeneralOption.get_cached_value('pagination_number')
|
|
||||||
reversions = Version.objects.get_for_object(instance)
|
|
||||||
if hasattr(instance, 'linked_objects'):
|
|
||||||
for related_object in chain(instance.linked_objects()):
|
|
||||||
reversions = (reversions |
|
|
||||||
Version.objects.get_for_object(related_object))
|
|
||||||
reversions = re2o_paginator(request, reversions, pagination_number)
|
|
||||||
return render(
|
|
||||||
request,
|
|
||||||
're2o/history.html',
|
|
||||||
{'reversions': reversions, 'object': instance}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@cache_page(7 * 24 * 60 * 60)
|
@cache_page(7 * 24 * 60 * 60)
|
||||||
|
|
|
@ -21,7 +21,8 @@ You should have received a copy of the GNU General Public License along
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
<a class="btn btn-info btn-sm" role="button" title="Historique" href="{% url href name id %}">
|
{% load i18n %}
|
||||||
<i class="fa fa-history"></i>
|
<a {% if class%}class="btn btn-info btn-sm"{% endif %} role="button" title="{% trans 'History' %}" href="{% url 'logs:history' application name id %}">
|
||||||
|
<i class="fa fa-history"></i> {% if text %}{% trans 'History' %}{% endif %}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
|
@ -23,52 +23,51 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
{% if ap_list.paginator %}
|
{% if ap_list.paginator %}
|
||||||
{% include "pagination.html" with list=ap_list %}
|
{% include "pagination.html" with list=ap_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% include "buttons/sort.html" with prefix='ap' col='name' text='Borne' %}</th>
|
<th>{% include "buttons/sort.html" with prefix='ap' col='name' text='Borne' %}</th>
|
||||||
<th>{% include "buttons/sort.html" with prefix='ap' col='mac' text='Addresse mac' %}</th>
|
<th>{% include "buttons/sort.html" with prefix='ap' col='mac' text='Addresse mac' %}</th>
|
||||||
<th>{% include "buttons/sort.html" with prefix='ap' col='ip' text='Ipv4' %}</th>
|
<th>{% include "buttons/sort.html" with prefix='ap' col='ip' text='Ipv4' %}</th>
|
||||||
<th>Commentaire</th>
|
<th>Commentaire</th>
|
||||||
<th>Localisation</th>
|
<th>Localisation</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for ap in ap_list %}
|
{% for ap in ap_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ap.interface_set.first}}</td>
|
<td>{{ap.interface_set.first}}</td>
|
||||||
<td>{{ap.interface_set.first.mac_address}}</td>
|
<td>{{ap.interface_set.first.mac_address}}</td>
|
||||||
<td>{{ap.interface_set.first.ipv4}}</td>
|
<td>{{ap.interface_set.first.ipv4}}</td>
|
||||||
<td>{{ap.interface_set.first.details}}</td>
|
<td>{{ap.interface_set.first.details}}</td>
|
||||||
<td>{{ap.location}}</td>
|
<td>{{ap.location}}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<a class="btn btn-info btn-sm" role="button" title="Historique" href="{% url 'topologie:history' 'accesspoint' ap.pk %}">
|
{% history_button ap %}
|
||||||
<i class="fa fa-history"></i>
|
{% can_edit ap %}
|
||||||
</a>
|
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-ap' ap.id %}">
|
||||||
{% can_edit ap %}
|
<i class="fa fa-edit"></i>
|
||||||
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-ap' ap.id %}">
|
</a>
|
||||||
<i class="fa fa-edit"></i>
|
{% acl_end %}
|
||||||
</a>
|
{% can_delete ap %}
|
||||||
{% acl_end %}
|
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'machines:del-machine' ap.id %}">
|
||||||
{% can_delete ap %}
|
<i class="fa fa-trash"></i>
|
||||||
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'machines:del-machine' ap.id %}">
|
</a>
|
||||||
<i class="fa fa-trash"></i>
|
{% acl_end %}
|
||||||
</a>
|
</td>
|
||||||
{% acl_end %}
|
</tr>
|
||||||
</td>
|
{% endfor %}
|
||||||
</tr>
|
</table>
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
{% if ap_list.paginator %}
|
{% if ap_list.paginator %}
|
||||||
{% include "pagination.html" with list=ap_list %}
|
{% include "pagination.html" with list=ap_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
{% if building_list.paginator %}
|
{% if building_list.paginator %}
|
||||||
{% include "pagination.html" with list=building_list %}
|
{% include "pagination.html" with list=building_list %}
|
||||||
|
@ -34,27 +35,25 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<th>{% include "buttons/sort.html" with prefix='building' col='name' text='Bâtiment' %}</th>
|
<th>{% include "buttons/sort.html" with prefix='building' col='name' text='Bâtiment' %}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for building in building_list %}
|
{% for building in building_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{building.name}}</td>
|
<td>{{building.name}}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<a class="btn btn-info btn-sm" role="button" title="Historique" href="{% url 'topologie:history' 'building' building.pk %}">
|
{% history_button building %}
|
||||||
<i class="fa fa-history"></i>
|
{% can_edit building %}
|
||||||
</a>
|
|
||||||
{% can_edit building %}
|
|
||||||
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-building' building.id %}">
|
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-building' building.id %}">
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% can_delete building %}
|
{% can_delete building %}
|
||||||
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-building' building.id %}">
|
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-building' building.id %}">
|
||||||
<i class="fa fa-trash"></i>
|
<i class="fa fa-trash"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% if building_list.paginator %}
|
{% if building_list.paginator %}
|
||||||
|
|
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
{% if room_list.paginator %}
|
{% if room_list.paginator %}
|
||||||
{% include "pagination.html" with list=room_list %}
|
{% include "pagination.html" with list=room_list %}
|
||||||
|
@ -35,28 +36,26 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<th>Commentaire</th>
|
<th>Commentaire</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for room in room_list %}
|
{% for room in room_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{room.name}}</td>
|
<td>{{room.name}}</td>
|
||||||
<td>{{room.details}}</td>
|
<td>{{room.details}}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<a class="btn btn-info btn-sm" role="button" title="Historique" href="{% url 'topologie:history' 'room' room.pk %}">
|
{% history_button room %}
|
||||||
<i class="fa fa-history"></i>
|
{% can_edit room %}
|
||||||
</a>
|
|
||||||
{% can_edit room %}
|
|
||||||
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-room' room.id %}">
|
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-room' room.id %}">
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% can_delete room %}
|
{% can_delete room %}
|
||||||
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-room' room.id %}">
|
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-room' room.id %}">
|
||||||
<i class="fa fa-trash"></i>
|
<i class="fa fa-trash"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% if room_list.paginator %}
|
{% if room_list.paginator %}
|
||||||
|
|
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
{% if constructor_switch_list.paginator %}
|
{% if constructor_switch_list.paginator %}
|
||||||
{% include "pagination.html" with list=constructor_switch_list %}
|
{% include "pagination.html" with list=constructor_switch_list %}
|
||||||
|
@ -34,27 +35,25 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<th>{% include "buttons/sort.html" with prefix='constructor-switch' col='name' text='Constructeur' %}</th>
|
<th>{% include "buttons/sort.html" with prefix='constructor-switch' col='name' text='Constructeur' %}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for constructor_switch in constructor_switch_list %}
|
{% for constructor_switch in constructor_switch_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{constructor_switch}}</td>
|
<td>{{constructor_switch}}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<a class="btn btn-info btn-sm" role="button" title="Historique" href="{% url 'topologie:history' 'constructorswitch' constructor_switch.pk %}">
|
{% history_button constructor_switch %}
|
||||||
<i class="fa fa-history"></i>
|
{% can_edit constructor_switch %}
|
||||||
</a>
|
|
||||||
{% can_edit constructor_switch %}
|
|
||||||
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-constructor-switch' constructor_switch.id %}">
|
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-constructor-switch' constructor_switch.id %}">
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% can_delete constructor_switch %}
|
{% can_delete constructor_switch %}
|
||||||
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-constructor-switch' constructor_switch.id %}">
|
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-constructor-switch' constructor_switch.id %}">
|
||||||
<i class="fa fa-trash"></i>
|
<i class="fa fa-trash"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% if constructor_switch_list.paginator %}
|
{% if constructor_switch_list.paginator %}
|
||||||
|
|
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
{% if model_switch_list.paginator %}
|
{% if model_switch_list.paginator %}
|
||||||
{% include "pagination.html" with list=model_switch_list %}
|
{% include "pagination.html" with list=model_switch_list %}
|
||||||
|
@ -33,30 +34,28 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% include "buttons/sort.html" with prefix='model-switch' col='reference' text='Référence' %}</th>
|
<th>{% include "buttons/sort.html" with prefix='model-switch' col='reference' text='Référence' %}</th>
|
||||||
<th>{% include "buttons/sort.html" with prefix='model-switch' col='constructor' text='Constructeur' %}</th>
|
<th>{% include "buttons/sort.html" with prefix='model-switch' col='constructor' text='Constructeur' %}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for model_switch in model_switch_list %}
|
{% for model_switch in model_switch_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{model_switch.reference}}</td>
|
<td>{{model_switch.reference}}</td>
|
||||||
<td>{{model_switch.constructor}}</td>
|
<td>{{model_switch.constructor}}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<a class="btn btn-info btn-sm" role="button" title="Historique" href="{% url 'topologie:history' 'modelswitch' model_switch.pk %}">
|
{% history_button model_switch %}
|
||||||
<i class="fa fa-history"></i>
|
{% can_edit model_switch %}
|
||||||
</a>
|
|
||||||
{% can_edit model_switch %}
|
|
||||||
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-model-switch' model_switch.id %}">
|
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-model-switch' model_switch.id %}">
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% can_delete model_switch %}
|
{% can_delete model_switch %}
|
||||||
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-model-switch' model_switch.id %}">
|
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-model-switch' model_switch.id %}">
|
||||||
<i class="fa fa-trash"></i>
|
<i class="fa fa-trash"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% if model_switch_list.paginator %}
|
{% if model_switch_list.paginator %}
|
||||||
|
|
|
@ -23,68 +23,67 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>{% include "buttons/sort.html" with prefix='port' col='port' text='Port' %}</th>
|
||||||
|
<th>{% include "buttons/sort.html" with prefix='port' col='room' text='Room' %}</th>
|
||||||
|
<th>{% include "buttons/sort.html" with prefix='port' col='interface' text='Interface machine' %}</th>
|
||||||
|
<th>{% include "buttons/sort.html" with prefix='port' col='related' text='Related' %}</th>
|
||||||
|
<th>{% include "buttons/sort.html" with prefix='port' col='radius' text='Radius' %}</th>
|
||||||
|
<th>{% include "buttons/sort.html" with prefix='port' col='vlan' text='Vlan forcé' %}</th>
|
||||||
|
<th>Détails</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for port in port_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% include "buttons/sort.html" with prefix='port' col='port' text='Port' %}</th>
|
<td>{{ port.port }}</td>
|
||||||
<th>{% include "buttons/sort.html" with prefix='port' col='room' text='Room' %}</th>
|
<td>
|
||||||
<th>{% include "buttons/sort.html" with prefix='port' col='interface' text='Interface machine' %}</th>
|
{% if port.room %}{{ port.room }}{% endif %}
|
||||||
<th>{% include "buttons/sort.html" with prefix='port' col='related' text='Related' %}</th>
|
</td>
|
||||||
<th>{% include "buttons/sort.html" with prefix='port' col='radius' text='Radius' %}</th>
|
<td>
|
||||||
<th>{% include "buttons/sort.html" with prefix='port' col='vlan' text='Vlan forcé' %}</th>
|
{% if port.machine_interface %}
|
||||||
<th>Détails</th>
|
{% can_view port.machine_interface.machine.user %}
|
||||||
<th></th>
|
<a href="{% url 'users:profil' userid=port.machine_interface.machine.user.id %}">
|
||||||
</tr>
|
{{ port.machine_interface }}
|
||||||
</thead>
|
</a>
|
||||||
{% for port in port_list %}
|
{% acl_else %}
|
||||||
<tr>
|
|
||||||
<td>{{ port.port }}</td>
|
|
||||||
<td>
|
|
||||||
{% if port.room %}{{ port.room }}{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{% if port.machine_interface %}
|
|
||||||
{% can_view port.machine_interface.machine.user %}
|
|
||||||
<a href="{% url 'users:profil' userid=port.machine_interface.machine.user.id %}">
|
|
||||||
{{ port.machine_interface }}
|
{{ port.machine_interface }}
|
||||||
</a>
|
{% acl_end %}
|
||||||
{% acl_else %}
|
{% endif %}
|
||||||
{{ port.machine_interface }}
|
</td>
|
||||||
{% acl_end %}
|
<td>
|
||||||
{% endif %}
|
{% if port.related %}
|
||||||
</td>
|
{% can_view port.related.switch %}
|
||||||
<td>
|
<a href="{% url 'topologie:index-port' switchid=port.related.switch.id %}">
|
||||||
{% if port.related %}
|
{{ port.related }}
|
||||||
{% can_view port.related.switch %}
|
</a>
|
||||||
<a href="{% url 'topologie:index-port' switchid=port.related.switch.id %}">
|
{% acl_else %}
|
||||||
{{ port.related }}
|
{{ port.related }}
|
||||||
</a>
|
{% acl_end %}
|
||||||
{% acl_else %}
|
{% endif %}
|
||||||
{{ port.related }}
|
</td>
|
||||||
{% acl_end %}
|
<td>{{ port.radius }}</td>
|
||||||
{% endif %}
|
<td>{% if not port.vlan_force %}Aucun{% else %}{{ port.vlan_force }}{% endif %}</td>
|
||||||
</td>
|
<td>{{ port.details }}</td>
|
||||||
<td>{{ port.radius }}</td>
|
<td class="text-right">
|
||||||
<td>{% if not port.vlan_force %}Aucun{% else %}{{ port.vlan_force }}{% endif %}</td>
|
{% history_button port %}
|
||||||
<td>{{ port.details }}</td>
|
{% can_edit port %}
|
||||||
<td class="text-right">
|
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-port' port.id %}">
|
||||||
<a class="btn btn-info btn-sm" role="button" title="Historique" href="{% url 'topologie:history' 'port' port.pk %}">
|
<i class="fa fa-edit"></i>
|
||||||
<i class="fa fa-history"></i>
|
</a>
|
||||||
</a>
|
{% acl_end %}
|
||||||
{% can_edit port %}
|
{% can_delete port %}
|
||||||
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-port' port.id %}">
|
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-port' port.pk %}">
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-trash"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% can_delete port %}
|
</td>
|
||||||
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-port' port.pk %}">
|
</tr>
|
||||||
<i class="fa fa-trash"></i>
|
{% endfor %}
|
||||||
</a>
|
</table>
|
||||||
{% acl_end %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -27,90 +27,90 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<div class="table-responsive" style="font-size: 12px">
|
<div class="table-responsive" style="font-size: 12px">
|
||||||
<table class="table table-bordered text-center text-nowrap">
|
<table class="table table-bordered text-center text-nowrap">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
||||||
{% for port in port_list|slice:"::2" %}
|
{% for port in port_list|slice:"::2" %}
|
||||||
<td class="bg-primary text-white">{{ port.port }}</td>
|
<td class="bg-primary text-white">{{ port.port }}</td>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
||||||
{% for port in port_list|slice:"::2" %}
|
{% for port in port_list|slice:"::2" %}
|
||||||
{% if port.room %}
|
{% if port.room %}
|
||||||
<td class="p-3 mb-2 bg-success text-dark">
|
<td class="p-3 mb-2 bg-success text-dark">
|
||||||
{{ port.room }}
|
{{ port.room }}
|
||||||
</td>
|
</td>
|
||||||
{% elif port.machine_interface %}
|
{% elif port.machine_interface %}
|
||||||
<td class="p-3 mb-2 bg-warning text-dark">
|
<td class="p-3 mb-2 bg-warning text-dark">
|
||||||
{% can_view port.machine_interface.machine.user %}
|
{% can_view port.machine_interface.machine.user %}
|
||||||
<a href="{% url 'users:profil' userid=port.machine_interface.machine.user.id %}">
|
<a href="{% url 'users:profil' userid=port.machine_interface.machine.user.id %}">
|
||||||
|
{{ port.machine_interface }}
|
||||||
|
</a>
|
||||||
|
{% acl_else %}
|
||||||
{{ port.machine_interface }}
|
{{ port.machine_interface }}
|
||||||
</a>
|
{% acl_end %}
|
||||||
{% acl_else %}
|
</td>
|
||||||
{{ port.machine_interface }}
|
{% elif port.related%}
|
||||||
{% acl_end %}
|
<td class="p-3 mb-2 bg-danger text-dark">
|
||||||
</td>
|
{% can_view port.related.switch %}
|
||||||
{% elif port.related%}
|
<a href="{% url 'topologie:index-port' switchid=port.related.switch.id %}">
|
||||||
<td class="p-3 mb-2 bg-danger text-dark">
|
{{ port.related }}
|
||||||
{% can_view port.related.switch %}
|
</a>
|
||||||
<a href="{% url 'topologie:index-port' switchid=port.related.switch.id %}">
|
{% acl_else %}
|
||||||
{{ port.related }}
|
{{ port.related }}
|
||||||
</a>
|
{% acl_end %}
|
||||||
{% acl_else %}
|
</td>
|
||||||
{{ port.related }}
|
{% else %}
|
||||||
{% acl_end %}
|
<td class="p-3 mb-2 bg-info text-dark">
|
||||||
</td>
|
Vide
|
||||||
{% else %}
|
</td>
|
||||||
<td class="p-3 mb-2 bg-info text-dark">
|
{% endif %}
|
||||||
Vide
|
{% endfor %}
|
||||||
</td>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
</tr>
|
||||||
|
|
||||||
{% for port in port_list|slice:"1::2" %}
|
<tr>
|
||||||
<td class="bg-primary text-white">{{ port.port }}</td>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</tr>
|
{% for port in port_list|slice:"1::2" %}
|
||||||
<tr>
|
<td class="bg-primary text-white">{{ port.port }}</td>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
{% for port in port_list|slice:"1::2" %}
|
</tr>
|
||||||
{% if port.room %}
|
<tr>
|
||||||
<td class="p-3 mb-2 bg-success text-dark">
|
|
||||||
{{ port.room }}
|
{% for port in port_list|slice:"1::2" %}
|
||||||
</td>
|
{% if port.room %}
|
||||||
{% elif port.machine_interface %}
|
<td class="p-3 mb-2 bg-success text-dark">
|
||||||
<td class="p-3 mb-2 bg-warning text-dark">
|
{{ port.room }}
|
||||||
{% can_view port.machine_interface.machine.user %}
|
</td>
|
||||||
<a href="{% url 'users:profil' userid=port.machine_interface.machine.user.id %}">
|
{% elif port.machine_interface %}
|
||||||
|
<td class="p-3 mb-2 bg-warning text-dark">
|
||||||
|
{% can_view port.machine_interface.machine.user %}
|
||||||
|
<a href="{% url 'users:profil' userid=port.machine_interface.machine.user.id %}">
|
||||||
|
{{ port.machine_interface }}
|
||||||
|
</a>
|
||||||
|
{% acl_else %}
|
||||||
{{ port.machine_interface }}
|
{{ port.machine_interface }}
|
||||||
</a>
|
{% acl_end %}
|
||||||
{% acl_else %}
|
</td>
|
||||||
{{ port.machine_interface }}
|
{% elif port.related%}
|
||||||
{% acl_end %}
|
<td class="p-3 mb-2 bg-danger text-dark">
|
||||||
</td>
|
{% can_view port.related.switch %}
|
||||||
{% elif port.related%}
|
<a href="{% url 'topologie:index-port' switchid=port.related.switch.id %}">
|
||||||
<td class="p-3 mb-2 bg-danger text-dark">
|
{{ port.related }}
|
||||||
{% can_view port.related.switch %}
|
</a>
|
||||||
<a href="{% url 'topologie:index-port' switchid=port.related.switch.id %}">
|
{% acl_else %}
|
||||||
{{ port.related }}
|
{{ port.related }}
|
||||||
</a>
|
{% acl_end %}
|
||||||
{% acl_else %}
|
</td>
|
||||||
{{ port.related }}
|
{% else %}
|
||||||
{% acl_end %}
|
<td class="p-3 mb-2 bg-info text-dark">
|
||||||
</td>
|
Vide
|
||||||
{% else %}
|
</td>
|
||||||
<td class="p-3 mb-2 bg-info text-dark">
|
{% endif %}
|
||||||
Vide
|
{% endfor %}
|
||||||
</td>
|
|
||||||
{% endif %}
|
</tr>
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -33,29 +34,27 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<th>Membres</th>
|
<th>Membres</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for stack in stack_list %}
|
{% for stack in stack_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ stack.name }}</td>
|
<td>{{ stack.name }}</td>
|
||||||
<td>{{stack.stack_id}}</td>
|
<td>{{stack.stack_id}}</td>
|
||||||
<td>{{stack.details}}</td>
|
<td>{{stack.details}}</td>
|
||||||
<td>{% for switch in stack.switch_set.all %}<a href="{% url 'topologie:index-port' switch.pk %}">{{switch }} </a>{% endfor %}</td>
|
<td>{% for switch in stack.switch_set.all %}<a href="{% url 'topologie:index-port' switch.pk %}">{{switch }} </a>{% endfor %}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<a class="btn btn-info btn-sm" role="button" title="Historique" href="{% url 'topologie:history' 'stack' stack.pk %}">
|
{% history_button stack %}
|
||||||
<i class="fa fa-history"></i>
|
{% can_edit stack %}
|
||||||
</a>
|
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-stack' stack.id %}">
|
||||||
{% can_edit stack %}
|
<i class="fa fa-edit"></i>
|
||||||
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-stack' stack.id %}">
|
</a>
|
||||||
<i class="fa fa-edit"></i>
|
{% acl_end %}
|
||||||
</a>
|
{% can_delete stack %}
|
||||||
{% acl_end %}
|
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-stack' stack.pk %}">
|
||||||
{% can_delete stack %}
|
<i class="fa fa-trash"></i>
|
||||||
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-stack' stack.pk %}">
|
</a>
|
||||||
<i class="fa fa-trash"></i>
|
{% acl_end %}
|
||||||
</a>
|
|
||||||
{% acl_end %}
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -23,59 +23,60 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
{% if switch_list.paginator %}
|
{% if switch_list.paginator %}
|
||||||
{% include "pagination.html" with list=switch_list %}
|
{% include "pagination.html" with list=switch_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>{% include "buttons/sort.html" with prefix='switch' col='dns' text='Dns' %}</th>
|
||||||
|
<th>{% include "buttons/sort.html" with prefix='switch' col='ip' text='Ipv4' %}</th>
|
||||||
|
<th>{% include "buttons/sort.html" with prefix='switch' col='loc' text='Emplacement' %}</th>
|
||||||
|
<th>{% include "buttons/sort.html" with prefix='switch' col='ports' text='Ports' %}</th>
|
||||||
|
<th>{% include "buttons/sort.html" with prefix='switch' col='stack' text='Stack' %}</th>
|
||||||
|
<th>Id stack</th>
|
||||||
|
<th>Modèle</th>
|
||||||
|
<th>Détails</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for switch in switch_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% include "buttons/sort.html" with prefix='switch' col='dns' text='Dns' %}</th>
|
<td>
|
||||||
<th>{% include "buttons/sort.html" with prefix='switch' col='ip' text='Ipv4' %}</th>
|
<a title="Configuer" href="{% url 'topologie:index-port' switch.pk %}">
|
||||||
<th>{% include "buttons/sort.html" with prefix='switch' col='loc' text='Emplacement' %}</th>
|
{{switch}}
|
||||||
<th>{% include "buttons/sort.html" with prefix='switch' col='ports' text='Ports' %}</th>
|
</a>
|
||||||
<th>{% include "buttons/sort.html" with prefix='switch' col='stack' text='Stack' %}</th>
|
</td>
|
||||||
<th>Id stack</th>
|
<td>{{switch.interface_set.first.ipv4}}</td>
|
||||||
<th>Modèle</th>
|
<td>{{switch.switchbay}}</td>
|
||||||
<th>Détails</th>
|
<td>{{switch.number}}</td>
|
||||||
<th></th>
|
<td>{{switch.stack.name}}</td>
|
||||||
|
<td>{{switch.stack_member_id}}</td>
|
||||||
|
<td>{{switch.model}}</td>
|
||||||
|
<td>{{switch.interface_set.first.details}}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
{% history_button switch %}
|
||||||
|
{% can_edit switch %}
|
||||||
|
{% include 'buttons/edit.html' with href='topologie:edit-switch' id=switch.pk %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% can_delete switch %}
|
||||||
|
{% include 'buttons/suppr.html' with href='machines:del-machine' id=switch.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% can_create Port %}
|
||||||
|
{% include 'buttons/add.html' with href='topologie:create-ports' id=switch.pk desc='Création de ports'%}
|
||||||
|
{% acl_end %}
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
{% endfor %}
|
||||||
{% for switch in switch_list %}
|
</table>
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<a title="Configuer" href="{% url 'topologie:index-port' switch.pk %}">
|
|
||||||
{{switch}}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>{{switch.interface_set.first.ipv4}}</td>
|
|
||||||
<td>{{switch.switchbay}}</td>
|
|
||||||
<td>{{switch.number}}</td>
|
|
||||||
<td>{{switch.stack.name}}</td>
|
|
||||||
<td>{{switch.stack_member_id}}</td>
|
|
||||||
<td>{{switch.model}}</td>
|
|
||||||
<td>{{switch.interface_set.first.details}}</td>
|
|
||||||
<td class="text-right">
|
|
||||||
{% include 'buttons/history.html' with href='topologie:history' name='switch' id=switch.pk%}
|
|
||||||
{% can_edit switch %}
|
|
||||||
{% include 'buttons/edit.html' with href='topologie:edit-switch' id=switch.pk %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% can_delete switch %}
|
|
||||||
{% include 'buttons/suppr.html' with href='machines:del-machine' id=switch.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% can_create Port %}
|
|
||||||
{% include 'buttons/add.html' with href='topologie:create-ports' id=switch.pk desc='Création de ports'%}
|
|
||||||
{% acl_end %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
|
|
||||||
{% if switch_list.paginator %}
|
{% if switch_list.paginator %}
|
||||||
{% include "pagination.html" with list=switch_list %}
|
{% include "pagination.html" with list=switch_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
{% if switch_bay_list.paginator %}
|
{% if switch_bay_list.paginator %}
|
||||||
{% include "pagination.html" with list=switch_bay_list %}
|
{% include "pagination.html" with list=switch_bay_list %}
|
||||||
|
@ -32,35 +33,33 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% include "buttons/sort.html" with prefix='switch-bay' col='name' text='Baie' %}</th>
|
<th>{% include "buttons/sort.html" with prefix='switch-bay' col='name' text='Baie' %}</th>
|
||||||
<th>{% include "buttons/sort.html" with prefix='switch-bay' col='building' text='Bâtiment' %}</th>
|
<th>{% include "buttons/sort.html" with prefix='switch-bay' col='building' text='Bâtiment' %}</th>
|
||||||
<th>Info particulières</th>
|
<th>Info particulières</th>
|
||||||
<th>Switchs de la baie</th>
|
<th>Switchs de la baie</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for switch_bay in switch_bay_list %}
|
{% for switch_bay in switch_bay_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{switch_bay.name}}</td>
|
<td>{{switch_bay.name}}</td>
|
||||||
<td>{{switch_bay.building}}</td>
|
<td>{{switch_bay.building}}</td>
|
||||||
<td>{{switch_bay.info}}</td>
|
<td>{{switch_bay.info}}</td>
|
||||||
<td>{% for switch in switch_bay.switch_set.all %}<a href="{% url 'topologie:index-port' switch.pk %}">{{switch }} </a>{% endfor %}</td>
|
<td>{% for switch in switch_bay.switch_set.all %}<a href="{% url 'topologie:index-port' switch.pk %}">{{switch }} </a>{% endfor %}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<a class="btn btn-info btn-sm" role="button" title="Historique" href="{% url 'topologie:history' 'switchbay' switch_bay.pk %}">
|
{% history_button switch_bay %}
|
||||||
<i class="fa fa-history"></i>
|
{% can_edit switch_bay %}
|
||||||
</a>
|
|
||||||
{% can_edit switch_bay %}
|
|
||||||
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-switch-bay' switch_bay.id %}">
|
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-switch-bay' switch_bay.id %}">
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% can_delete switch_bay %}
|
{% can_delete switch_bay %}
|
||||||
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-switch-bay' switch_bay.id %}">
|
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-switch-bay' switch_bay.id %}">
|
||||||
<i class="fa fa-trash"></i>
|
<i class="fa fa-trash"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% if switch_bay_list.paginator %}
|
{% if switch_bay_list.paginator %}
|
||||||
|
|
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -31,27 +32,25 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<th>ID</th>
|
<th>ID</th>
|
||||||
<th>Details</th>
|
<th>Details</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for stack in stack_list %}
|
{% for stack in stack_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{stack.name}}</td>
|
<td>{{stack.name}}</td>
|
||||||
<td>{{stack.stack_id}}</td>
|
<td>{{stack.stack_id}}</td>
|
||||||
<td>{{stack.details}}</td>
|
<td>{{stack.details}}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<a class="btn btn-info btn-sm" role="button" title="Historique" href="{% url 'topologie:history' 'stack' stack.pk %}">
|
{% history_button stack %}
|
||||||
<i class="fa fa-history"></i>
|
{% can_edit stack %}
|
||||||
</a>
|
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-stack' stack.id %}">
|
||||||
{% can_edit stack %}
|
|
||||||
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-stack' stack.id %}">
|
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% can_delete stack %}
|
{% can_delete stack %}
|
||||||
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-stack' stack.pk %}">
|
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-stack' stack.pk %}">
|
||||||
<i class="fa fa-trash"></i>
|
<i class="fa fa-trash"></i>
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -30,7 +30,6 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
|
||||||
import re2o
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
@ -51,10 +50,6 @@ urlpatterns = [
|
||||||
url(r'^switch/(?P<switchid>[0-9]+)$',
|
url(r'^switch/(?P<switchid>[0-9]+)$',
|
||||||
views.index_port,
|
views.index_port,
|
||||||
name='index-port'),
|
name='index-port'),
|
||||||
url(r'^history/(?P<object_name>\w+)/(?P<object_id>[0-9]+)$',
|
|
||||||
re2o.views.history,
|
|
||||||
name='history',
|
|
||||||
kwargs={'application': 'topologie'}),
|
|
||||||
url(r'^edit_port/(?P<portid>[0-9]+)$', views.edit_port, name='edit-port'),
|
url(r'^edit_port/(?P<portid>[0-9]+)$', views.edit_port, name='edit-port'),
|
||||||
url(r'^new_port/(?P<switchid>[0-9]+)$', views.new_port, name='new-port'),
|
url(r'^new_port/(?P<switchid>[0-9]+)$', views.new_port, name='new-port'),
|
||||||
url(r'^del_port/(?P<portid>[0-9]+)$', views.del_port, name='del-port'),
|
url(r'^del_port/(?P<portid>[0-9]+)$', views.del_port, name='del-port'),
|
||||||
|
|
|
@ -22,42 +22,43 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
{% if ban_list.paginator %}
|
{% if ban_list.paginator %}
|
||||||
{% include "pagination.html" with list=ban_list %}
|
{% include "pagination.html" with list=ban_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% include "buttons/sort.html" with prefix='ban' col="user" text="Utilisateur" %}</th>
|
<th>{% include "buttons/sort.html" with prefix='ban' col="user" text="Utilisateur" %}</th>
|
||||||
<th>Raison</th>
|
<th>Raison</th>
|
||||||
<th>{% include "buttons/sort.html" with prefix='ban' col="start" text="Date de début" %}</th>
|
<th>{% include "buttons/sort.html" with prefix='ban' col="start" text="Date de début" %}</th>
|
||||||
<th>{% include "buttons/sort.html" with prefix='ban' col="end" text="Date de fin" %}</th>
|
<th>{% include "buttons/sort.html" with prefix='ban' col="end" text="Date de fin" %}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for ban in ban_list %}
|
{% for ban in ban_list %}
|
||||||
{% if ban.is_active %}
|
{% if ban.is_active %}
|
||||||
<tr class="danger">
|
<tr class="danger">
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr>
|
<tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<td>{{ ban.user }}</td>
|
<td>{{ ban.user }}</td>
|
||||||
<td>{{ ban.raison }}</td>
|
<td>{{ ban.raison }}</td>
|
||||||
<td>{{ ban.date_start }}</td>
|
<td>{{ ban.date_start }}</td>
|
||||||
<td>{{ ban.date_end }}</td>
|
<td>{{ ban.date_end }}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
{% can_delete ban %}
|
{% can_delete ban %}
|
||||||
{% include 'buttons/suppr.html' with href='users:del-ban' id=ban.id %}
|
{% include 'buttons/suppr.html' with href='users:del-ban' id=ban.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% can_edit ban %}
|
{% can_edit ban %}
|
||||||
{% include 'buttons/edit.html' with href='users:edit-ban' id=ban.id %}
|
{% include 'buttons/edit.html' with href='users:edit-ban' id=ban.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='users:history' name='ban' id=ban.id %}
|
{% history_button ban %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% if ban_list.paginator %}
|
{% if ban_list.paginator %}
|
||||||
{% include "pagination.html" with list=ban_list %}
|
{% include "pagination.html" with list=ban_list %}
|
||||||
|
|
|
@ -28,36 +28,36 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% include "buttons/sort.html" with prefix='club' col="surname" text="Nom" %}</th>
|
<th>{% include "buttons/sort.html" with prefix='club' col="surname" text="Nom" %}</th>
|
||||||
<th>{% include "buttons/sort.html" with prefix='club' col="pseudo" text="Pseudo" %}</th>
|
<th>{% include "buttons/sort.html" with prefix='club' col="pseudo" text="Pseudo" %}</th>
|
||||||
<th>{% include "buttons/sort.html" with prefix='club' col="room" text="Chambre" %}</th>
|
<th>{% include "buttons/sort.html" with prefix='club' col="room" text="Chambre" %}</th>
|
||||||
<th>Fin de cotisation le</th>
|
<th>Fin de cotisation le</th>
|
||||||
<th>Connexion</th>
|
<th>Connexion</th>
|
||||||
<th>Profil</th>
|
<th>Profil</th>
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for club in clubs_list %}
|
|
||||||
{% can_view club %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ club.surname }}</td>
|
|
||||||
<td>{{ club.pseudo }}</td>
|
|
||||||
<td>{{ club.room }}</td>
|
|
||||||
<td>{% if club.is_adherent %}{{ club.end_adhesion }}{% else %}Non adhérent{% endif %}</td>
|
|
||||||
<td>{% if club.has_access == True %}
|
|
||||||
<i class="text-success">Active</i>
|
|
||||||
{% else %}
|
|
||||||
<i class="text-danger">Désactivée</i>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td><a href="{% url "users:profil" club.id%}" class="btn btn-primary btn-sm" role="button"><i class="fa fa-user"></i></a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% acl_end %}
|
</thead>
|
||||||
{% endfor %}
|
{% for club in clubs_list %}
|
||||||
</table>
|
{% can_view club %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ club.surname }}</td>
|
||||||
|
<td>{{ club.pseudo }}</td>
|
||||||
|
<td>{{ club.room }}</td>
|
||||||
|
<td>{% if club.is_adherent %}{{ club.end_adhesion }}{% else %}Non adhérent{% endif %}</td>
|
||||||
|
<td>{% if club.has_access == True %}
|
||||||
|
<i class="text-success">Active</i>
|
||||||
|
{% else %}
|
||||||
|
<i class="text-danger">Désactivée</i>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td><a href="{% url "users:profil" club.id%}" class="btn btn-primary btn-sm" role="button"><i class="fa fa-user"></i></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% acl_end %}
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
{% if clubs_list.paginator %}
|
{% if clubs_list.paginator %}
|
||||||
{% include "pagination.html" with list=clubs_list %}
|
{% include "pagination.html" with list=clubs_list %}
|
||||||
|
|
|
@ -23,20 +23,21 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
{% if superusers.count %}
|
{% if superusers.count %}
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading clearfix" data-toggle="collapse" data-target="#collapse_superuser">
|
<div class="panel-heading clearfix" data-toggle="collapse" data-target="#collapse_superuser">
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
<a type="button" class="btn btn-sm btn-default" data-toggle="modal" data-target="#modal_superuser">
|
<a type="button" class="btn btn-sm btn-default" data-toggle="modal" data-target="#modal_superuser">
|
||||||
{{superusers.count}} <i class="fa fa-user"></i>
|
{{superusers.count}} <i class="fa fa-user"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="text-danger">
|
<h4 class="text-danger">
|
||||||
<i class="fa fa-address-book"></i>
|
<i class="fa fa-address-book"></i>
|
||||||
{% trans "Superuser" %}
|
{% trans "Superuser" %}
|
||||||
</h4>
|
</h4>
|
||||||
{% trans "Django's specific pre-defined right that supersed any other rights." %}
|
{% trans "Django's specific pre-defined right that supersed any other rights." %}
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-collapse collapse" id="collapse_superuser">
|
<div class="panel-collapse collapse" id="collapse_superuser">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
@ -106,24 +107,24 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% for right, users in rights.items %}
|
{% for right, users in rights.items %}
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading clearfix" data-toggle="collapse" data-target="#collapse_{{right.id}}">
|
<div class="panel-heading clearfix" data-toggle="collapse" data-target="#collapse_{{right.id}}">
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
{% if users %}
|
{% if users %}
|
||||||
<a type="button" class="btn btn-sm btn-default" data-toggle="modal" data-target="#modal_{{right.id}}">
|
<a type="button" class="btn btn-sm btn-default" data-toggle="modal" data-target="#modal_{{right.id}}">
|
||||||
{% else %}
|
{% else %}
|
||||||
<a type="button" class="btn btn-sm btn-default" disabled="disabled">
|
<a type="button" class="btn btn-sm btn-default" disabled="disabled">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{{users.count}} <i class="fa fa-user"></i>
|
{{users.count}} <i class="fa fa-user"></i>
|
||||||
</a>
|
</a>
|
||||||
{% include 'buttons/edit.html' with href='users:edit-listright' id=right.id %}
|
{% include 'buttons/edit.html' with href='users:edit-listright' id=right.id %}
|
||||||
{% include 'buttons/history.html' with href='users:history' name='listright' id=right.id %}
|
{% history_button right %}
|
||||||
</div>
|
</div>
|
||||||
<h4 class="{% if right.critical %}text-danger{% endif %}">
|
<h4 class="{% if right.critical %}text-danger{% endif %}">
|
||||||
<i class="fa fa-address-book"></i>
|
<i class="fa fa-address-book"></i>
|
||||||
{% blocktrans trimmed with right.name as right_name and right.gid as right_gid %}
|
{% blocktrans trimmed with right.name as right_name and right.gid as right_gid %}
|
||||||
{{ right_name }} (gid: {{ right_gid }})
|
{{ right_name }} (gid: {{ right_gid }})
|
||||||
{% endblocktrans %}
|
{% endblocktrans %}
|
||||||
</h4>
|
</h4>
|
||||||
{{ right.details }}
|
{{ right.details }}
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-collapse collapse" id="collapse_{{right.id}}">
|
<div class="panel-collapse collapse" id="collapse_{{right.id}}">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
|
|
@ -22,20 +22,20 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
{% for right in right_list %}
|
|
||||||
<th>{{ right }}</th>
|
|
||||||
<th></th>
|
|
||||||
{% endfor %}
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for user_right in user_right_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td> {{ user_right }}</td>
|
{% for right in right_list %}
|
||||||
|
<th>{{ right }}</th>
|
||||||
|
<th></th>
|
||||||
|
{% endfor %}
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
</thead>
|
||||||
</table>
|
{% for user_right in user_right_list %}
|
||||||
|
<tr>
|
||||||
|
<td> {{ user_right }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,18 +22,19 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
|
|
||||||
{% if school_list.paginator %}
|
{% if school_list.paginator %}
|
||||||
{% include "pagination.html" with list=school_list %}
|
{% include "pagination.html" with list=school_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% include "buttons/sort.html" with prefix='school' col='name' text='Etablissement' %}</th>
|
<th>{% include "buttons/sort.html" with prefix='school' col='name' text='Etablissement' %}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -44,14 +45,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% can_edit school %}
|
{% can_edit school %}
|
||||||
{% include 'buttons/edit.html' with href='users:edit-school' id=school.id %}
|
{% include 'buttons/edit.html' with href='users:edit-school' id=school.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='users:history' name='school' id=school.id %}
|
{% history_button school %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% if school_list.paginator %}
|
{% if school_list.paginator %}
|
||||||
{% include "pagination.html" with list=school_list %}
|
{% include "pagination.html" with list=school_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -22,30 +22,31 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
<table class="table table-striped">
|
{% load logs_extra %}
|
||||||
<thead>
|
<table class="table table-striped">
|
||||||
<tr>
|
<thead>
|
||||||
<th>Nom</th>
|
|
||||||
<th>Rôle</th>
|
|
||||||
<th>Commentaire</th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for serviceuser in serviceusers_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ serviceuser.pseudo }}</td>
|
<th>Nom</th>
|
||||||
<td>{{ serviceuser.access_group }}</td>
|
<th>Rôle</th>
|
||||||
<td>{{ serviceuser.comment }}</td>
|
<th>Commentaire</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
{% can_delete serviceuser %}
|
|
||||||
{% include 'buttons/suppr.html' with href='users:del-serviceuser' id=serviceuser.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% can_edit serviceuser %}
|
|
||||||
{% include 'buttons/edit.html' with href='users:edit-serviceuser' id=serviceuser.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% include 'buttons/history.html' with href='users:history' name='serviceuser' id=serviceuser.id %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
</thead>
|
||||||
</table>
|
{% for serviceuser in serviceusers_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ serviceuser.pseudo }}</td>
|
||||||
|
<td>{{ serviceuser.access_group }}</td>
|
||||||
|
<td>{{ serviceuser.comment }}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
{% can_delete serviceuser %}
|
||||||
|
{% include 'buttons/suppr.html' with href='users:del-serviceuser' id=serviceuser.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% can_edit serviceuser %}
|
||||||
|
{% include 'buttons/edit.html' with href='users:edit-serviceuser' id=serviceuser.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% history_button serviceuser %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -22,26 +22,27 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
<table class="table table-striped">
|
{% load logs_extra %}
|
||||||
<thead>
|
<table class="table table-striped">
|
||||||
<tr>
|
<thead>
|
||||||
<th>Shell</th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for shell in shell_list %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ shell.shell }}</td>
|
<th>Shell</th>
|
||||||
<td class="text-right">
|
<th></th>
|
||||||
{% can_delete shell %}
|
|
||||||
{% include 'buttons/suppr.html' with href='users:del-shell' id=shell.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% can_edit shell %}
|
|
||||||
{% include 'buttons/edit.html' with href='users:edit-shell' id=shell.id %}
|
|
||||||
{% acl_end %}
|
|
||||||
{% include 'buttons/history.html' with href='users:history' name='listshell' id=shell.id %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
</thead>
|
||||||
</table>
|
{% for shell in shell_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ shell.shell }}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
{% can_delete shell %}
|
||||||
|
{% include 'buttons/suppr.html' with href='users:del-shell' id=shell.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% can_edit shell %}
|
||||||
|
{% include 'buttons/edit.html' with href='users:edit-shell' id=shell.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% history_button shell %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
{% if users_list.paginator %}
|
{% if users_list.paginator %}
|
||||||
{% include "pagination.html" with list=users_list %}
|
{% include "pagination.html" with list=users_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -57,7 +57,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% if users_list.paginator %}
|
{% if users_list.paginator %}
|
||||||
{% include "pagination.html" with list=users_list %}
|
{% include "pagination.html" with list=users_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -26,38 +26,39 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% include "pagination.html" with list=white_list %}
|
{% include "pagination.html" with list=white_list %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
<table class="table table-striped">
|
{% load logs_extra %}
|
||||||
<thead>
|
<table class="table table-striped">
|
||||||
<tr>
|
<thead>
|
||||||
<th>{% include "buttons/sort.html" with prefix='white' col="user" text="Utilisateur" %}</th>
|
<tr>
|
||||||
<th>Raison</th>
|
<th>{% include "buttons/sort.html" with prefix='white' col="user" text="Utilisateur" %}</th>
|
||||||
<th>{% include "buttons/sort.html" with prefix='white' col="start" text="Date de début" %}</th>
|
<th>Raison</th>
|
||||||
<th>{% include "buttons/sort.html" with prefix='white' col="end" text="Date de fin" %}</th>
|
<th>{% include "buttons/sort.html" with prefix='white' col="start" text="Date de début" %}</th>
|
||||||
<th></th>
|
<th>{% include "buttons/sort.html" with prefix='white' col="end" text="Date de fin" %}</th>
|
||||||
</tr>
|
<th></th>
|
||||||
</thead>
|
</tr>
|
||||||
{% for whitelist in white_list %}
|
</thead>
|
||||||
{% if whitelist.is_active %}
|
{% for whitelist in white_list %}
|
||||||
<tr class="success">
|
{% if whitelist.is_active %}
|
||||||
|
<tr class="success">
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr>
|
<tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<td>{{ whitelist.user }}</td>
|
<td>{{ whitelist.user }}</td>
|
||||||
<td>{{ whitelist.raison }}</td>
|
<td>{{ whitelist.raison }}</td>
|
||||||
<td>{{ whitelist.date_start }}</td>
|
<td>{{ whitelist.date_start }}</td>
|
||||||
<td>{{ whitelist.date_end }}</td>
|
<td>{{ whitelist.date_end }}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
{% can_delete whitelist %}
|
{% can_delete whitelist %}
|
||||||
{% include 'buttons/suppr.html' with href='users:del-whitelist' id=whitelist.id %}
|
{% include 'buttons/suppr.html' with href='users:del-whitelist' id=whitelist.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% can_edit whitelist %}
|
{% can_edit whitelist %}
|
||||||
{% include 'buttons/edit.html' with href='users:edit-whitelist' id=whitelist.id %}
|
{% include 'buttons/edit.html' with href='users:edit-whitelist' id=whitelist.id %}
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% include 'buttons/history.html' with href='users:history' name='whitelist' id=whitelist.id %}
|
{% history_button whitelist %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% if white_list.paginator %}
|
{% if white_list.paginator %}
|
||||||
{% include "pagination.html" with list=white_list %}
|
{% include "pagination.html" with list=white_list %}
|
||||||
|
|
|
@ -25,12 +25,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
|
||||||
{% load bootstrap3 %}
|
{% load bootstrap3 %}
|
||||||
{% load acl %}
|
{% load acl %}
|
||||||
|
{% load logs_extra %}
|
||||||
{% block title %}Profil{% endblock %}
|
{% block title %}Profil{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>{{ users.surname }} {{users.name}}</h2>
|
<h2>{{ users.surname }} {{users.name}}</h2>
|
||||||
<p>Vous êtes {% if users.end_adhesion != None %}<span class="label label-success">
|
<p>Vous êtes {% if users.end_adhesion != None %}<span class="label label-success">
|
||||||
un {{ users.class_name | lower}}</span>{% else %}<span class="label label-danger">
|
un {{ users.class_name | lower}}</span>{% else %}<span class="label label-danger">
|
||||||
non adhérent</span>{% endif %} et votre connexion est {% if users.has_access %}
|
non adhérent</span>{% endif %} et votre connexion est {% if users.has_access %}
|
||||||
<span class="label label-success">active</span>{% else %}<span class="label label-danger">désactivée</span>{% endif %}.</p>
|
<span class="label label-success">active</span>{% else %}<span class="label label-danger">désactivée</span>{% endif %}.</p>
|
||||||
{% if user_solde %}
|
{% if user_solde %}
|
||||||
<p>Votre solde est de <span class="badge">{{ users.solde }}€</span>.
|
<p>Votre solde est de <span class="badge">{{ users.solde }}€</span>.
|
||||||
|
@ -49,134 +50,131 @@ non adhérent</span>{% endif %} et votre connexion est {% if users.has_access %}
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-collapse collapse in" id="collapse1">
|
<div class="panel-collapse collapse in" id="collapse1">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:edit-info' users.id %}">
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:edit-info' users.id %}">
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
Editer
|
Editer
|
||||||
</a>
|
</a>
|
||||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:password' users.id %}">
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:password' users.id %}">
|
||||||
<i class="fa fa-lock"></i>
|
<i class="fa fa-lock"></i>
|
||||||
Changer le mot de passe
|
Changer le mot de passe
|
||||||
</a>
|
</a>
|
||||||
{% can_change User state %}
|
{% can_change User state %}
|
||||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:state' users.id %}">
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:state' users.id %}">
|
||||||
<i class="fa fa-id-badge"></i>
|
<i class="fa fa-id-badge"></i>
|
||||||
Changer le statut
|
Changer le statut
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
{% can_change User groups %}
|
{% can_change User groups %}
|
||||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:groups' users.id %}">
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:groups' users.id %}">
|
||||||
<i class="fa fa-check"></i>
|
<i class="fa fa-check"></i>
|
||||||
Gérer les groupes
|
Gérer les groupes
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:history' 'user' users.id %}">
|
{% history_button users text=True %}
|
||||||
<i class="fa fa-history"></i>
|
|
||||||
Historique
|
|
||||||
</a>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<tr>
|
<tr>
|
||||||
{% if users.is_class_club %}
|
{% if users.is_class_club %}
|
||||||
<th>Mailing</th>
|
<th>Mailing</th>
|
||||||
{% if users.club.mailing %}
|
{% if users.club.mailing %}
|
||||||
<td>{{ users.pseudo }}(-admin)</td>
|
<td>{{ users.pseudo }}(-admin)</td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td>Mailing désactivée</td>
|
<td>Mailing désactivée</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<th>Prénom</th>
|
<th>Prénom</th>
|
||||||
<td>{{ users.name }}</td>
|
<td>{{ users.name }}</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<th>Nom</th>
|
<th>Nom</th>
|
||||||
<td>{{ users.surname }}</td>
|
<td>{{ users.surname }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Pseudo</th>
|
<th>Pseudo</th>
|
||||||
<td>{{ users.pseudo }}</td>
|
<td>{{ users.pseudo }}</td>
|
||||||
<th>E-mail</th>
|
<th>E-mail</th>
|
||||||
<td>{{ users.email }}</td>
|
<td>{{ users.email }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Chambre</th>
|
<th>Chambre</th>
|
||||||
<td>{{ users.room }}</td>
|
<td>{{ users.room }}</td>
|
||||||
<th>Téléphone</th>
|
<th>Téléphone</th>
|
||||||
<td>{{ users.telephone }}</td>
|
<td>{{ users.telephone }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>École</th>
|
<th>École</th>
|
||||||
<td>{{ users.school }}</td>
|
<td>{{ users.school }}</td>
|
||||||
<th>Commentaire</th>
|
<th>Commentaire</th>
|
||||||
<td>{{ users.comment }}</td>
|
<td>{{ users.comment }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Date d'inscription</th>
|
<th>Date d'inscription</th>
|
||||||
<td>{{ users.registered }}</td>
|
<td>{{ users.registered }}</td>
|
||||||
<th>Dernière connexion</th>
|
<th>Dernière connexion</th>
|
||||||
<td>{{ users.last_login }}</td>
|
<td>{{ users.last_login }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Fin d'adhésion</th>
|
<th>Fin d'adhésion</th>
|
||||||
{% if users.end_adhesion != None %}
|
{% if users.end_adhesion != None %}
|
||||||
<td><i class="text-success">{{ users.end_adhesion }}</i></td>
|
<td><i class="text-success">{{ users.end_adhesion }}</i></td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td><i class="text-danger">Non adhérent</i></td>
|
<td><i class="text-danger">Non adhérent</i></td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<th>Accès gracieux</th>
|
<th>Accès gracieux</th>
|
||||||
{% if users.end_whitelist != None %}
|
{% if users.end_whitelist != None %}
|
||||||
<td><i class="text-success">{{ users.end_whitelist }}</i></td>
|
<td><i class="text-success">{{ users.end_whitelist }}</i></td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td><i class="text-warning">Aucun</i></td>
|
<td><i class="text-warning">Aucun</i></td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>Bannissement</th>
|
<th>Bannissement</th>
|
||||||
{% if users.end_ban != None %}
|
{% if users.end_ban != None %}
|
||||||
<td><i class="text-danger">{{ users.end_ban }}</i></td>
|
<td><i class="text-danger">{{ users.end_ban }}</i></td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td><i class="text-success">Non banni</i></td>
|
<td><i class="text-success">Non banni</i></td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<th>Statut</th>
|
<th>Statut</th>
|
||||||
{% if users.state == 0 %}
|
{% if users.state == 0 %}
|
||||||
<td><i class="text-success">Actif</i></td>
|
<td><i class="text-success">Actif</i></td>
|
||||||
{% elif users.state == 1 %}
|
{% elif users.state == 1 %}
|
||||||
<td><i class="text-danger">Désactivé</i></td>
|
<td><i class="text-danger">Désactivé</i></td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td><i class="text-warning">Archivé</i></td>
|
<td><i class="text-warning">Archivé</i></td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Accès internet</th>
|
<th>Accès internet</th>
|
||||||
{% if users.has_access == True %}
|
{% if users.has_access == True %}
|
||||||
<td><i class="text-success">Actif (jusqu'au {{ users.end_access }})</i></td>
|
<td><i class="text-success">Actif (jusqu'au {{ users.end_access }})</i></td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td><i class="text-danger">Désactivé</i></td>
|
<td><i class="text-danger">Désactivé</i></td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<th>Groupes</th>
|
<th>Groupes</th>
|
||||||
{% if users.groups.all %}
|
{% if users.groups.all %}
|
||||||
<td>{{ users.groups.all|join:", "}}</td>
|
<td>{{ users.groups.all|join:", "}}</td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td>Aucun</td>
|
<td>Aucun</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Solde</th>
|
<th>Solde</th>
|
||||||
<td>{{ users.solde }} €
|
<td>{{ users.solde }} €
|
||||||
{% if user_solde %}
|
{% if user_solde %}
|
||||||
<a class="btn btn-primary btn-sm" style='float:right' role="button" href="{% url 'cotisations:credit-solde' users.pk%}">
|
<a class="btn btn-primary btn-sm" style='float:right' role="button" href="{% url 'cotisations:credit-solde' users.pk%}">
|
||||||
<i class="fa fa-euro-sign"></i>
|
<i class="fa fa-euro-sign"></i>
|
||||||
Recharger
|
Recharger
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
{% if users.shell %}
|
{% if users.shell %}
|
||||||
<th>Shell</th>
|
<th>Shell</th>
|
||||||
<td>{{ users.shell }}</td>
|
<td>{{ users.shell }}</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -193,46 +191,46 @@ non adhérent</span>{% endif %} et votre connexion est {% if users.has_access %}
|
||||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:edit-club-admin-members' users.club.id %}">
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:edit-club-admin-members' users.club.id %}">
|
||||||
<i class="fa fa-lock"></i>
|
<i class="fa fa-lock"></i>
|
||||||
Gérer admin et membres
|
Gérer admin et membres
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<h4>Administrateurs du club</h4>
|
<h4>Administrateurs du club</h4>
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Nom</th>
|
||||||
|
<th>Prenom</th>
|
||||||
|
<th>Pseudo</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for admin in users.club.administrators.all %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>Nom</th>
|
<td>{{ admin.surname }}</td>
|
||||||
<th>Prenom</th>
|
<td>{{ admin.name }}</td>
|
||||||
<th>Pseudo</th>
|
<td>{{ admin.pseudo }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
{% endfor %}
|
||||||
{% for admin in users.club.administrators.all %}
|
</table>
|
||||||
<tr>
|
|
||||||
<td>{{ admin.surname }}</td>
|
|
||||||
<td>{{ admin.name }}</td>
|
|
||||||
<td>{{ admin.pseudo }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
<h4>Membres</h4>
|
<h4>Membres</h4>
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Nom</th>
|
||||||
|
<th>Prenom</th>
|
||||||
|
<th>Pseudo</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for admin in users.club.members.all %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>Nom</th>
|
<td>{{ admin.surname }}</td>
|
||||||
<th>Prenom</th>
|
<td>{{ admin.name }}</td>
|
||||||
<th>Pseudo</th>
|
<td>{{ admin.pseudo }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
{% endfor %}
|
||||||
{% for admin in users.club.members.all %}
|
</table>
|
||||||
<tr>
|
|
||||||
<td>{{ admin.surname }}</td>
|
|
||||||
<td>{{ admin.name }}</td>
|
|
||||||
<td>{{ admin.pseudo }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -245,12 +243,12 @@ non adhérent</span>{% endif %} et votre connexion est {% if users.has_access %}
|
||||||
Machines
|
Machines
|
||||||
<span class="badge">{{nb_machines}}</span>
|
<span class="badge">{{nb_machines}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse3" class="panel-collapse collapse">
|
<div id="collapse3" class="panel-collapse collapse">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:new-machine' users.id %}">
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:new-machine' users.id %}">
|
||||||
<i class="fa fa-desktop"></i>
|
<i class="fa fa-desktop"></i>
|
||||||
Ajouter une machine
|
Ajouter une machine
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
@ -299,12 +297,12 @@ non adhérent</span>{% endif %} et votre connexion est {% if users.has_access %}
|
||||||
<i class="fa fa-ban"></i>
|
<i class="fa fa-ban"></i>
|
||||||
Bannissements
|
Bannissements
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse5" class="panel-collapse collapse">
|
<div id="collapse5" class="panel-collapse collapse">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
{% can_create Ban %}
|
{% can_create Ban %}
|
||||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:add-ban' users.id %}">
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:add-ban' users.id %}">
|
||||||
<i class="fa fa-ban"></i>
|
<i class="fa fa-ban"></i>
|
||||||
Ajouter un bannissement
|
Ajouter un bannissement
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
|
@ -326,12 +324,12 @@ non adhérent</span>{% endif %} et votre connexion est {% if users.has_access %}
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapse6" class="panel-collapse collapse">
|
<div id="collapse6" class="panel-collapse collapse">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
{% can_create Whitelist %}
|
{% can_create Whitelist %}
|
||||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:add-whitelist' users.id %}">
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'users:add-whitelist' users.id %}">
|
||||||
<i class="fa fa-check-circle"></i>
|
<i class="fa fa-check-circle"></i>
|
||||||
Accorder un accès à titre gracieux
|
Accorder un accès à titre gracieux
|
||||||
</a>
|
</a>
|
||||||
{% acl_end %}
|
{% acl_end %}
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
|
|
@ -27,7 +27,6 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
|
||||||
import re2o
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
@ -95,10 +94,6 @@ urlpatterns = [
|
||||||
url(r'^process/(?P<token>[a-z0-9]{32})/$', views.process, name='process'),
|
url(r'^process/(?P<token>[a-z0-9]{32})/$', views.process, name='process'),
|
||||||
url(r'^reset_password/$', views.reset_password, name='reset-password'),
|
url(r'^reset_password/$', views.reset_password, name='reset-password'),
|
||||||
url(r'^mass_archive/$', views.mass_archive, name='mass-archive'),
|
url(r'^mass_archive/$', views.mass_archive, name='mass-archive'),
|
||||||
url(r'^history/(?P<object_name>\w+)/(?P<object_id>[0-9]+)$',
|
|
||||||
re2o.views.history,
|
|
||||||
name='history',
|
|
||||||
kwargs={'application': 'users'}),
|
|
||||||
url(r'^$', views.index, name='index'),
|
url(r'^$', views.index, name='index'),
|
||||||
url(r'^index_clubs/$', views.index_clubs, name='index-clubs'),
|
url(r'^index_clubs/$', views.index_clubs, name='index-clubs'),
|
||||||
url(r'^rest/ml/std/$',
|
url(r'^rest/ml/std/$',
|
||||||
|
|
Loading…
Reference in a new issue