mirror of https://gitlab.federez.net/re2o/re2o
17 changed files with 480 additions and 3 deletions
@ -0,0 +1,3 @@ |
|||
from django.contrib import admin |
|||
|
|||
# Register your models here. |
|||
@ -0,0 +1,5 @@ |
|||
from django.apps import AppConfig |
|||
|
|||
|
|||
class PreferencesConfig(AppConfig): |
|||
name = 'preferences' |
|||
@ -0,0 +1,59 @@ |
|||
# Re2o un logiciel d'administration développé initiallement au rezometz. Il |
|||
# se veut agnostique au réseau considéré, de manière à être installable en |
|||
# quelques clics. |
|||
# |
|||
# Copyright © 2017 Gabriel Détraz |
|||
# Copyright © 2017 Goulven Kermarec |
|||
# Copyright © 2017 Augustin Lemesle |
|||
# |
|||
# 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 |
|||
# the Free Software Foundation; either version 2 of the License, or |
|||
# (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# 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., |
|||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
|||
|
|||
from django.forms import ModelForm, Form, ValidationError |
|||
from django import forms |
|||
from .models import OptionalUser, OptionalMachine, GeneralOption |
|||
from django.db.models import Q |
|||
|
|||
class EditUserOptionsForm(ModelForm): |
|||
class Meta: |
|||
model = OptionalUser |
|||
fields = '__all__' |
|||
|
|||
def __init__(self, *args, **kwargs): |
|||
super(EditUserOptionsForm, self).__init__(*args, **kwargs) |
|||
self.fields['is_tel_mandatory'].label = 'Exiger un numéro de téléphone' |
|||
self.fields['user_solde'].label = 'Activation du solde pour les utilisateurs' |
|||
|
|||
class EditMachineOptionsForm(ModelForm): |
|||
class Meta: |
|||
model = OptionalMachine |
|||
fields = '__all__' |
|||
|
|||
def __init__(self, *args, **kwargs): |
|||
super(EditMachineOptionsForm, self).__init__(*args, **kwargs) |
|||
self.fields['password_machine'].label = "Possibilité d'attribuer un mot de passe par interface" |
|||
self.fields['max_lambdauser_interfaces'].label = "Maximum d'interfaces autorisées pour un user normal" |
|||
self.fields['max_lambdauser_aliases'].label = "Maximum d'alias dns autorisés pour un user normal" |
|||
|
|||
|
|||
class EditGeneralOptionsForm(ModelForm): |
|||
class Meta: |
|||
model = GeneralOption |
|||
fields = '__all__' |
|||
|
|||
def __init__(self, *args, **kwargs): |
|||
super(EditGeneralOptionsForm, self).__init__(*args, **kwargs) |
|||
self.fields['search_display_page'].label = 'Resultats affichés dans une recherche' |
|||
self.fields['pagination_number'].label = 'Items par page, taille normale (ex users)' |
|||
self.fields['pagination_large_number'].label = 'Items par page, taille élevée (machines)' |
|||
@ -0,0 +1,40 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.10.7 on 2017-06-25 02:19 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
initial = True |
|||
|
|||
dependencies = [ |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.CreateModel( |
|||
name='GeneralOption', |
|||
fields=[ |
|||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|||
('search_display_page', models.IntegerField(default=15)), |
|||
], |
|||
), |
|||
migrations.CreateModel( |
|||
name='OptionalMachine', |
|||
fields=[ |
|||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|||
('password_machine', models.BooleanField(default=True)), |
|||
('max_lambdauser_interfaces', models.IntegerField(default=10)), |
|||
('max_lambdauser_aliases', models.IntegerField(default=10)), |
|||
], |
|||
), |
|||
migrations.CreateModel( |
|||
name='OptionalUser', |
|||
fields=[ |
|||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|||
('is_tel_mandatory', models.BooleanField(default=True)), |
|||
('user_solde', models.BooleanField(default=True)), |
|||
], |
|||
), |
|||
] |
|||
@ -0,0 +1,40 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.10.7 on 2017-06-25 17:23 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('preferences', '0001_initial'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='generaloption', |
|||
name='pagination_large_number', |
|||
field=models.IntegerField(default=8), |
|||
), |
|||
migrations.AddField( |
|||
model_name='generaloption', |
|||
name='pagination_number', |
|||
field=models.IntegerField(default=25), |
|||
), |
|||
migrations.AddField( |
|||
model_name='optionaluser', |
|||
name='gpg_fingerprint', |
|||
field=models.BooleanField(default=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='optionalmachine', |
|||
name='password_machine', |
|||
field=models.BooleanField(default=False), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='optionaluser', |
|||
name='user_solde', |
|||
field=models.BooleanField(default=False), |
|||
), |
|||
] |
|||
@ -0,0 +1,44 @@ |
|||
# Re2o un logiciel d'administration développé initiallement au rezometz. Il |
|||
# se veut agnostique au réseau considéré, de manière à être installable en |
|||
# quelques clics. |
|||
# |
|||
# Copyright © 2017 Gabriel Détraz |
|||
# Copyright © 2017 Goulven Kermarec |
|||
# Copyright © 2017 Augustin Lemesle |
|||
# |
|||
# 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 |
|||
# the Free Software Foundation; either version 2 of the License, or |
|||
# (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# 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., |
|||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
|||
|
|||
|
|||
from django.db import models |
|||
|
|||
|
|||
class OptionalUser(models.Model): |
|||
is_tel_mandatory = models.BooleanField(default=True) |
|||
user_solde = models.BooleanField(default=False) |
|||
gpg_fingerprint = models.BooleanField(default=True) |
|||
|
|||
class OptionalMachine(models.Model): |
|||
password_machine = models.BooleanField(default=False) |
|||
max_lambdauser_interfaces = models.IntegerField(default=10) |
|||
max_lambdauser_aliases = models.IntegerField(default=10) |
|||
|
|||
#class OptionalTopologie(models.Model): |
|||
|
|||
|
|||
class GeneralOption(models.Model): |
|||
search_display_page = models.IntegerField(default=15) |
|||
pagination_number = models.IntegerField(default=25) |
|||
pagination_large_number = models.IntegerField(default=8) |
|||
|
|||
@ -0,0 +1,79 @@ |
|||
{% extends "preferences/sidebar.html" %} |
|||
{% comment %} |
|||
Re2o est un logiciel d'administration développé initiallement au rezometz. Il |
|||
se veut agnostique au réseau considéré, de manière à être installable en |
|||
quelques clics. |
|||
|
|||
Copyright © 2017 Gabriel Détraz |
|||
Copyright © 2017 Goulven Kermarec |
|||
Copyright © 2017 Augustin Lemesle |
|||
|
|||
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 |
|||
the Free Software Foundation; either version 2 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
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., |
|||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
|||
{% endcomment %} |
|||
|
|||
{% load bootstrap3 %} |
|||
|
|||
{% block title %}Création et modification des préférences{% endblock %} |
|||
|
|||
{% block content %} |
|||
{% if is_bureau %} |
|||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:edit-options' %}"> |
|||
<i class="glyphicon glyphicon-edit"></i> |
|||
Editer |
|||
</a> |
|||
{% endif %} |
|||
<h4>Préférences utilisateur</h4> |
|||
<table class="table table-striped"> |
|||
<tr> |
|||
<th>Téléphone obligatoirement requis</th> |
|||
<td>{{ useroptions.is_tel_mandatory }}</td> |
|||
<th>Activation du solde pour les utilisateurs</th> |
|||
<td>{{ useroptions.user_solde }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th>Champ gpg fingerprint</th> |
|||
<td>{{ useroptions.gpg_fingerprint }}</td> |
|||
</tr> |
|||
</table> |
|||
<h4>Préférences machines</h4> |
|||
<table class="table table-striped"> |
|||
<tr> |
|||
<th>Mot de passe par machine</th> |
|||
<td>{{ machineoptions.password_machine }}</td> |
|||
<th>Machines/interfaces autorisées par utilisateurs</th> |
|||
<td>{{ machineoptions.max_lambdauser_interfaces }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th>Alias dns autorisé par utilisateur</th> |
|||
<td>{{ machineoptions.max_lambdauser_aliases }}</td> |
|||
</tr> |
|||
</table> |
|||
<h4>Préférences generales</h4> |
|||
<table class="table table-striped"> |
|||
<tr> |
|||
<th>Affichage de résultats dans le champ de recherche</th> |
|||
<td>{{ generaloptions.search_display_page }}</td> |
|||
<th>Nombre d'items affichés en liste (taille normale)</th> |
|||
<td>{{ generaloptions.pagination_number }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th>Nombre d'items affichés en liste (taille élevée)</th> |
|||
<td>{{ generaloptions.pagination_large_number }}</td> |
|||
</tr> |
|||
</table> |
|||
<br /> |
|||
<br /> |
|||
<br /> |
|||
{% endblock %} |
|||
@ -0,0 +1,45 @@ |
|||
{% extends "preferences/sidebar.html" %} |
|||
{% comment %} |
|||
Re2o est un logiciel d'administration développé initiallement au rezometz. Il |
|||
se veut agnostique au réseau considéré, de manière à être installable en |
|||
quelques clics. |
|||
|
|||
Copyright © 2017 Gabriel Détraz |
|||
Copyright © 2017 Goulven Kermarec |
|||
Copyright © 2017 Augustin Lemesle |
|||
|
|||
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 |
|||
the Free Software Foundation; either version 2 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
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., |
|||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
|||
{% endcomment %} |
|||
|
|||
{% load bootstrap3 %} |
|||
|
|||
{% block title %}Création et modification des préférences{% endblock %} |
|||
|
|||
{% block content %} |
|||
{% bootstrap_form_errors useroptions %} |
|||
{% bootstrap_form_errors machineoptions %} |
|||
{% bootstrap_form_errors generaloptions %} |
|||
|
|||
<form class="form" method="post"> |
|||
{% csrf_token %} |
|||
{% bootstrap_form useroptions %} |
|||
{% bootstrap_form machineoptions %} |
|||
{% bootstrap_form generaloptions %} |
|||
{% bootstrap_button "Créer ou modifier" button_type="submit" icon="star" %} |
|||
</form> |
|||
<br /> |
|||
<br /> |
|||
<br /> |
|||
{% endblock %} |
|||
@ -0,0 +1,28 @@ |
|||
{% extends "base.html" %} |
|||
{% comment %} |
|||
Re2o est un logiciel d'administration développé initiallement au rezometz. Il |
|||
se veut agnostique au réseau considéré, de manière à être installable en |
|||
quelques clics. |
|||
|
|||
Copyright © 2017 Gabriel Détraz |
|||
Copyright © 2017 Goulven Kermarec |
|||
Copyright © 2017 Augustin Lemesle |
|||
|
|||
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 |
|||
the Free Software Foundation; either version 2 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
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., |
|||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
|||
{% endcomment %} |
|||
|
|||
|
|||
{% block sidebar %} |
|||
{% endblock %} |
|||
@ -0,0 +1,3 @@ |
|||
from django.test import TestCase |
|||
|
|||
# Create your tests here. |
|||
@ -0,0 +1,31 @@ |
|||
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il |
|||
# se veut agnostique au réseau considéré, de manière à être installable en |
|||
# quelques clics. |
|||
# |
|||
# Copyright © 2017 Gabriel Détraz |
|||
# Copyright © 2017 Goulven Kermarec |
|||
# Copyright © 2017 Augustin Lemesle |
|||
# |
|||
# 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 |
|||
# the Free Software Foundation; either version 2 of the License, or |
|||
# (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# 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., |
|||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
|||
|
|||
from django.conf.urls import url |
|||
|
|||
from . import views |
|||
|
|||
|
|||
urlpatterns = [ |
|||
url(r'^edit_options/$', views.edit_options, name='edit-options'), |
|||
url(r'^$', views.display_options, name='display-options'), |
|||
] |
|||
@ -0,0 +1,88 @@ |
|||
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il |
|||
# se veut agnostique au réseau considéré, de manière à être installable en |
|||
# quelques clics. |
|||
# |
|||
# Copyright © 2017 Gabriel Détraz |
|||
# Copyright © 2017 Goulven Kermarec |
|||
# Copyright © 2017 Augustin Lemesle |
|||
# |
|||
# 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 |
|||
# the Free Software Foundation; either version 2 of the License, or |
|||
# (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# 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., |
|||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
|||
|
|||
# App de gestion des machines pour re2o |
|||
# Gabriel Détraz, Augustin Lemesle |
|||
# Gplv2 |
|||
|
|||
|
|||
from django.shortcuts import render |
|||
from django.shortcuts import get_object_or_404, render, redirect |
|||
from django.template.context_processors import csrf |
|||
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger |
|||
from django.template import Context, RequestContext, loader |
|||
from django.contrib import messages |
|||
from django.contrib.auth.decorators import login_required, permission_required |
|||
from django.db.models import Max, ProtectedError |
|||
from django.db import IntegrityError |
|||
from django.core.mail import send_mail |
|||
from django.utils import timezone |
|||
from django.core.urlresolvers import reverse |
|||
from django.db import transaction |
|||
|
|||
from reversion.models import Version |
|||
from reversion import revisions as reversion |
|||
|
|||
from .forms import EditUserOptionsForm, EditMachineOptionsForm, EditGeneralOptionsForm |
|||
from .models import OptionalUser, OptionalMachine, GeneralOption |
|||
|
|||
def form(ctx, template, request): |
|||
c = ctx |
|||
c.update(csrf(request)) |
|||
return render(request, template, c) |
|||
|
|||
|
|||
@login_required |
|||
@permission_required('cableur') |
|||
def display_options(request): |
|||
useroptions, created = OptionalUser.objects.get_or_create() |
|||
machineoptions, created = OptionalMachine.objects.get_or_create() |
|||
generaloptions, created = GeneralOption.objects.get_or_create() |
|||
return form({'useroptions': useroptions, 'machineoptions': machineoptions, 'generaloptions': generaloptions}, 'preferences/display_preferences.html', request) |
|||
|
|||
@login_required |
|||
@permission_required('admin') |
|||
def edit_options(request): |
|||
""" Edition des préférences générales""" |
|||
useroptions_instance, created = OptionalUser.objects.get_or_create() |
|||
machineoptions_instance, created = OptionalMachine.objects.get_or_create() |
|||
generaloptions_instance, created = GeneralOption.objects.get_or_create() |
|||
useroptions = EditUserOptionsForm(request.POST or None, instance=useroptions_instance) |
|||
machineoptions = EditMachineOptionsForm(request.POST or None, instance=machineoptions_instance) |
|||
generaloptions = EditGeneralOptionsForm(request.POST or None, instance=generaloptions_instance) |
|||
if useroptions.is_valid(): |
|||
with transaction.atomic(), reversion.create_revision(): |
|||
useroptions.save() |
|||
reversion.set_user(request.user) |
|||
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in useroptions.changed_data)) |
|||
if machineoptions.is_valid(): |
|||
with transaction.atomic(), reversion.create_revision(): |
|||
machineoptions.save() |
|||
reversion.set_user(request.user) |
|||
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in machineoptions.changed_data)) |
|||
if generaloptions.is_valid(): |
|||
with transaction.atomic(), reversion.create_revision(): |
|||
generaloptions.save() |
|||
reversion.set_user(request.user) |
|||
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in generaloptions.changed_data)) |
|||
return form({'useroptions': useroptions, 'machineoptions': machineoptions, 'generaloptions': generaloptions}, 'preferences/edit_preferences.html', request) |
|||
|
|||
Loading…
Reference in new issue