diff --git a/settings/forms.py b/settings/forms.py
new file mode 100644
index 0000000..1fc815e
--- /dev/null
+++ b/settings/forms.py
@@ -0,0 +1,19 @@
+from django import forms
+from django.contrib.auth.models import User, Group
+from django.shortcuts import get_object_or_404
+
+class SelectUserForm(forms.Form):
+ pk = forms.ChoiceField(
+ label="Utilisateur",
+ help_text="Sera ajouté aux administrateurs du site.",
+ validators=[],
+ )
+
+ def get_user(self):
+ pk = self.cleaned_data['pk']
+ return get_object_or_404(User, pk=pk)
+
+ def populate(self):
+ admins,_ = Group.objects.get_or_create(name='admins')
+ choices = [(u.pk, u.first_name + ' ' + u.last_name + '(' + u.username + ')') for u in User.objects.all()]
+ self.fields['pk'].choices = choices
diff --git a/settings/templates/settings/settings.html b/settings/templates/settings/settings.html
index e32510e..e85d7c9 100644
--- a/settings/templates/settings/settings.html
+++ b/settings/templates/settings/settings.html
@@ -1,6 +1,40 @@
{% extends "base.html" %}
{% block content %}
Page d'administration du site
+Administrateurs du site
+
+
+ Ajouter un administrateur
+
+
+
+
+
+
+ | Prénom |
+ Nom |
+ Pseudo |
+ |
+
+
+
+ {% for admin in administrators %}
+
+ | {{admin.first_name}} |
+ {{admin.last_name}} |
+ {{admin.username}} |
+
+
+
+ Enlever le privilège Administrateur
+
+ |
+
+ {% endfor %}
+
+
+
+
Liste des catégories
diff --git a/settings/urls.py b/settings/urls.py
index 2504f22..9293762 100644
--- a/settings/urls.py
+++ b/settings/urls.py
@@ -1,5 +1,5 @@
from django.urls import path
-from .views import SettingsView, EditSiteSettingsView
+from .views import SettingsView, EditSiteSettingsView, degrade_user, promote_user
app_name = 'settings'
urlpatterns = [
@@ -13,4 +13,15 @@ urlpatterns = [
EditSiteSettingsView.as_view(),
name='site-settings'
),
+ path(
+ 'degrade_user/',
+ degrade_user,
+ name='degrade-user',
+ ),
+ path(
+ 'promote_user',
+ promote_user,
+ name='promote-user',
+ )
+
]
diff --git a/settings/views.py b/settings/views.py
index 4f63b6c..bd54782 100644
--- a/settings/views.py
+++ b/settings/views.py
@@ -1,9 +1,15 @@
from django.views.generic import TemplateView, UpdateView
-from django.urls import reverse_lazy
+from django.urls import reverse_lazy, reverse
from django.contrib.auth.mixins import PermissionRequiredMixin, LoginRequiredMixin
+from django.contrib.auth.decorators import permission_required
+from django.contrib.auth.models import Group, User
+from django.shortcuts import get_object_or_404, redirect, render
+from django.contrib import messages
+
from content.models import Category
from users.models import SchoolProfile
from .models import SiteSettings
+from .forms import SelectUserForm
class SettingsView(LoginRequiredMixin, PermissionRequiredMixin, TemplateView):
@@ -16,6 +22,7 @@ class SettingsView(LoginRequiredMixin, PermissionRequiredMixin, TemplateView):
context['site_settings'], _ = SiteSettings.objects.get_or_create()
context['schools'] = SchoolProfile.objects.all()
context['settings'] = True
+ context['administrators'] = Group.objects.get(name='admins').user_set.all()
return context
class EditSiteSettingsView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView):
@@ -35,3 +42,29 @@ class EditSiteSettingsView(LoginRequiredMixin, PermissionRequiredMixin, UpdateVi
return context
+@permission_required('auth.change_user')
+def degrade_user(request, pk):
+ user = get_object_or_404(User, pk=pk)
+ admins,_ = Group.objects.get_or_create(name='admins')
+ user.groups.remove(admins)
+ user.save()
+ messages.success(request, user.username + ' a été enlevé des administrateurs du site')
+ return redirect(reverse('settings:index'))
+
+
+@permission_required('auth.change_user')
+def promote_user(request):
+ user_form = SelectUserForm(request.POST or None)
+ user_form.populate()
+ if user_form.is_valid():
+ user=user_form.get_user()
+ admins,_ = Group.objects.get_or_create(name='admins')
+ user.groups.add(admins)
+ user.save()
+ messages.success(request, user.username + ' a été ajouté des administrateurs du site')
+ return redirect(reverse('settings:index'))
+ return render(request, 'edit.html', {
+ 'form' : user_form,
+ 'title' : "Ajout d'un administrateur",
+ 'validate' : "Ajouter"
+ })