2017-01-09 00:57:38 +01:00
|
|
|
"""
|
|
|
|
Administration minimaliste du site de l'Ernestophone.
|
|
|
|
Les chefs peuvent modifier les utilisateurs et les événements.
|
|
|
|
Les super-utilisateurs peuvent en plus ajouter ou supprimer ces objets et gérer
|
|
|
|
les permissions.
|
|
|
|
"""
|
|
|
|
|
2015-03-17 19:03:51 +01:00
|
|
|
from django.contrib import admin
|
2017-01-09 00:57:38 +01:00
|
|
|
from django.contrib.auth.models import User, Group, Permission
|
2015-03-17 19:03:51 +01:00
|
|
|
from django.contrib.auth.admin import UserAdmin
|
2017-01-09 00:57:38 +01:00
|
|
|
|
|
|
|
from gestion.models import ErnestoUser
|
2015-04-13 18:56:43 +02:00
|
|
|
from calendrier.models import Event
|
2015-03-17 19:03:51 +01:00
|
|
|
|
2016-07-14 01:58:52 +02:00
|
|
|
|
2015-03-17 19:03:51 +01:00
|
|
|
class UserProfileInline(admin.StackedInline):
|
2017-01-09 00:57:38 +01:00
|
|
|
"""Affichage du profil ernestophone dans la vue UserAdmin"""
|
2015-03-17 19:03:51 +01:00
|
|
|
model = ErnestoUser
|
2016-07-14 01:58:52 +02:00
|
|
|
|
|
|
|
|
2015-03-17 19:03:51 +01:00
|
|
|
def ProfileInfo(field, short_description, boolean=False):
|
|
|
|
def getter(self):
|
|
|
|
try:
|
|
|
|
return getattr(self.profile, field)
|
|
|
|
except ErnestoUser.DoesNotExist:
|
|
|
|
return ""
|
|
|
|
getter.short_description = short_description
|
|
|
|
getter.boolean = boolean
|
|
|
|
return getter
|
|
|
|
|
|
|
|
User.profile_phone = ProfileInfo("phone", "Telephone")
|
|
|
|
User.profile_instru = ProfileInfo("instru", "Instrument joué")
|
|
|
|
User.profile_is_ern = ProfileInfo("is_ernesto", "Ernestophoniste")
|
|
|
|
User.profile_is_chef = ProfileInfo("is_chef", "Chef Fanfare")
|
2016-06-21 00:33:32 +02:00
|
|
|
User.profile_get_mails = ProfileInfo("mails", "Recevoir les mails")
|
2015-03-17 19:03:51 +01:00
|
|
|
|
2016-07-14 01:58:52 +02:00
|
|
|
|
2015-03-17 19:03:51 +01:00
|
|
|
class UserProfileAdmin(UserAdmin):
|
2017-01-09 00:57:38 +01:00
|
|
|
"""
|
|
|
|
Management des utilisateurs de l'ernestosite.
|
|
|
|
Lors de la sauvegarde, les chefs se voient octroyées les permissions
|
|
|
|
d'édition des comptes et événements mais il ne peuvent pas en créer via
|
|
|
|
l'interface admin.
|
|
|
|
"""
|
|
|
|
list_display = ['username', 'first_name', 'last_name', 'email',
|
2016-07-14 01:58:52 +02:00
|
|
|
'profile_phone', 'profile_instru', 'profile_is_ern',
|
2017-01-09 00:57:38 +01:00
|
|
|
'profile_is_chef']
|
|
|
|
list_display_links = ['username', 'email', 'first_name', 'last_name']
|
|
|
|
list_filter = ['profile__instru']
|
|
|
|
ordering = ['username']
|
|
|
|
search_fields = ['username', 'first_name', 'last_name', 'profile__phone',
|
|
|
|
'profile__instru']
|
|
|
|
inlines = [UserProfileInline]
|
|
|
|
|
|
|
|
staff_fieldsets = [
|
|
|
|
('Général', {'fields': ['username', 'password', 'first_name',
|
|
|
|
'last_name']}),
|
|
|
|
('Permissions', {'fields': ['is_active']})
|
|
|
|
]
|
|
|
|
|
|
|
|
def get_fieldsets(self, request, user=None):
|
|
|
|
"""
|
|
|
|
Les super utilisateurs ont toutes les infos.
|
|
|
|
Les autres (e.g. les chefs) ne peuvent modifier qu'un nombre restreints
|
|
|
|
de choses.
|
|
|
|
"""
|
|
|
|
if not request.user.is_superuser:
|
|
|
|
return self.staff_fieldsets
|
|
|
|
return super(UserProfileAdmin, self).get_fieldsets(request, user)
|
|
|
|
|
|
|
|
def save_model(self, request, user, form, change):
|
|
|
|
"""
|
|
|
|
Ajoute le chef au group Chef.
|
|
|
|
Le groupe est créé si nécessaire.
|
|
|
|
"""
|
|
|
|
chef_group, created = Group.objects.get_or_create(name="Chef")
|
|
|
|
if created:
|
|
|
|
# Si le groupe vient d'être créé :
|
|
|
|
# On associe les bonnes permissions au groupe Chef
|
|
|
|
perms = [('change_user', 'auth', 'user'),
|
|
|
|
('change_event', 'calendrier', 'event'),
|
|
|
|
('change_ernestouser', 'gestion', 'ernestouser')]
|
|
|
|
for nat_key in perms:
|
|
|
|
perm = Permission.objects.get_by_natural_key(*nat_key)
|
|
|
|
chef_group.permissions.add(perm)
|
|
|
|
# On met tous les chef dans le groupe
|
|
|
|
chef_group.user_set = User.objects.filter(profile__is_chef=True)
|
|
|
|
# Les chefs sont dans le groupe Chef
|
|
|
|
if user.profile.is_chef:
|
|
|
|
print("J'aime la choucroute")
|
|
|
|
user.is_staff = True
|
|
|
|
user.groups.add(chef_group)
|
|
|
|
user.save()
|
2015-03-28 18:54:48 +01:00
|
|
|
|
2015-03-17 19:03:51 +01:00
|
|
|
|
|
|
|
admin.site.unregister(User)
|
|
|
|
admin.site.register(User, UserProfileAdmin)
|
2015-04-13 18:56:43 +02:00
|
|
|
admin.site.register(Event)
|