mirror of
				https://gitlab.crans.org/mediatek/med.git
				synced 2025-11-04 10:22:13 +01:00 
			
		
		
		
	Django upgrade
This commit is contained in:
		
							
								
								
									
										15
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								README.md
									
									
									
									
									
								
							@@ -39,29 +39,44 @@ FLUSH PRIVILEGES;
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
bureau
 | 
			
		||||
    Can view borrowed item
 | 
			
		||||
    Can add borrowed item
 | 
			
		||||
    Can change borrowed item
 | 
			
		||||
    Can delete borrowed item
 | 
			
		||||
    Can view adhesion
 | 
			
		||||
    Can add adhesion
 | 
			
		||||
    Can change adhesion
 | 
			
		||||
    Can delete adhesion
 | 
			
		||||
    Can view clef
 | 
			
		||||
    Can add clef
 | 
			
		||||
    Can change clef
 | 
			
		||||
    Can delete clef
 | 
			
		||||
    Can view user
 | 
			
		||||
    Can add user
 | 
			
		||||
    Can change user
 | 
			
		||||
 | 
			
		||||
keyholder
 | 
			
		||||
    Can view auteur
 | 
			
		||||
    Can add auteur
 | 
			
		||||
    Can change auteur
 | 
			
		||||
    Can delete auteur
 | 
			
		||||
    Can view media
 | 
			
		||||
    Can add media
 | 
			
		||||
    Can change media
 | 
			
		||||
    Can delete media
 | 
			
		||||
    Can view jeu
 | 
			
		||||
    Can add jeu
 | 
			
		||||
    Can change jeu
 | 
			
		||||
    Can delete jeu
 | 
			
		||||
    Can view emprunt
 | 
			
		||||
    Can add emprunt
 | 
			
		||||
    Can change emprunt
 | 
			
		||||
    Can delete emprunt
 | 
			
		||||
    Can view user
 | 
			
		||||
    Can view clef
 | 
			
		||||
 | 
			
		||||
users
 | 
			
		||||
    Can view auteur
 | 
			
		||||
    Can view media
 | 
			
		||||
    Can view jeu
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ from django.conf.urls import url
 | 
			
		||||
 | 
			
		||||
from . import views
 | 
			
		||||
 | 
			
		||||
app_name = 'logs'
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
    url(r'^$', views.index, name='index'),
 | 
			
		||||
    url(r'^stats_actions/$', views.stats_actions, name='stats-actions'),
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								med/urls.py
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								med/urls.py
									
									
									
									
									
								
							@@ -2,28 +2,27 @@
 | 
			
		||||
# Copyright (C) 2017-2019 by BDE ENS Paris-Saclay
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
from django.conf.urls import include, url
 | 
			
		||||
from django.contrib.auth.views import password_reset
 | 
			
		||||
from django.contrib.auth.views import PasswordResetView
 | 
			
		||||
from django.urls import include, path
 | 
			
		||||
from django.views.generic import RedirectView
 | 
			
		||||
 | 
			
		||||
from media.views import index
 | 
			
		||||
from .admin import admin_site
 | 
			
		||||
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
    url(r'^$', index, name='index'),
 | 
			
		||||
    path('', index, name='index'),
 | 
			
		||||
 | 
			
		||||
    # Include project routers
 | 
			
		||||
    url(r'^users/', include('users.urls', namespace='users')),
 | 
			
		||||
    url(r'^media/', include('media.urls', namespace='media')),
 | 
			
		||||
    url(r'^logs/', include('logs.urls', namespace='logs')),
 | 
			
		||||
    path('users/', include('users.urls')),
 | 
			
		||||
    path('media/', include('media.urls')),
 | 
			
		||||
    path('logs/', include('logs.urls')),
 | 
			
		||||
 | 
			
		||||
    # Include Django Contrib and Core routers
 | 
			
		||||
    url(r'^accounts/password_reset/$',
 | 
			
		||||
        password_reset, name='admin_password_reset'),
 | 
			
		||||
    url(r'^i18n/', include('django.conf.urls.i18n')),
 | 
			
		||||
    url(r'^accounts/', include('django.contrib.auth.urls')),
 | 
			
		||||
    url(r'^accounts/profile/',
 | 
			
		||||
        RedirectView.as_view(pattern_name='index')),
 | 
			
		||||
    url(r'^database/doc/', include('django.contrib.admindocs.urls')),
 | 
			
		||||
    url(r'^database/', admin_site.urls),
 | 
			
		||||
    path('accounts/password_reset/', PasswordResetView.as_view(),
 | 
			
		||||
         name='admin_password_reset'),
 | 
			
		||||
    path('i18n/', include('django.conf.urls.i18n')),
 | 
			
		||||
    path('accounts/', include('django.contrib.auth.urls')),
 | 
			
		||||
    path('accounts/profile/', RedirectView.as_view(pattern_name='index')),
 | 
			
		||||
    path('database/doc/', include('django.contrib.admindocs.urls')),
 | 
			
		||||
    path('database/', admin_site.urls),
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
@@ -10,10 +10,12 @@ from .models import Auteur, Emprunt, Jeu, Media
 | 
			
		||||
 | 
			
		||||
class AuteurAdmin(VersionAdmin):
 | 
			
		||||
    list_display = ('nom',)
 | 
			
		||||
    search_fields = ('nom',)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MediaAdmin(VersionAdmin):
 | 
			
		||||
    list_display = ('titre', 'authors', 'cote')
 | 
			
		||||
    search_fields = ('titre', 'authors', 'cote')
 | 
			
		||||
 | 
			
		||||
    def authors(self, obj):
 | 
			
		||||
        return ", ".join([a.nom for a in obj.auteur.all()])
 | 
			
		||||
@@ -22,11 +24,14 @@ class MediaAdmin(VersionAdmin):
 | 
			
		||||
class EmpruntAdmin(VersionAdmin):
 | 
			
		||||
    list_display = ('media', 'user', 'date_emprunt', 'date_rendu',
 | 
			
		||||
                    'permanencier_emprunt', 'permanencier_rendu')
 | 
			
		||||
    search_fields = ('media', 'user', 'date_emprunt', 'date_rendu')
 | 
			
		||||
    date_hierarchy = 'date_emprunt'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class JeuAdmin(VersionAdmin):
 | 
			
		||||
    list_display = ('nom', 'proprietaire', 'duree', 'nombre_joueurs_min',
 | 
			
		||||
                    'nombre_joueurs_max', 'comment')
 | 
			
		||||
    search_fields = ('nom', 'proprietaire', 'duree', 'comment')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
admin_site.register(Auteur, AuteurAdmin)
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2019-08-09 22:25+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2019-08-10 10:24+0200\n"
 | 
			
		||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
			
		||||
@@ -45,78 +45,10 @@ msgstr "jeu"
 | 
			
		||||
msgid "games"
 | 
			
		||||
msgstr "jeux"
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:41
 | 
			
		||||
msgid "My profile"
 | 
			
		||||
msgstr "Mon profil"
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:43
 | 
			
		||||
msgid "Edit"
 | 
			
		||||
msgstr "Éditer"
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:47
 | 
			
		||||
msgid "username"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:48
 | 
			
		||||
msgid "email"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:49
 | 
			
		||||
msgid "comment"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:50
 | 
			
		||||
msgid "date joined"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:51
 | 
			
		||||
msgid "last login"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:52
 | 
			
		||||
msgid "address"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:53
 | 
			
		||||
msgid "phone number"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:54
 | 
			
		||||
msgid "groups"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:55
 | 
			
		||||
msgid "maximum borrowed"
 | 
			
		||||
msgstr "emprunts maximal"
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:57
 | 
			
		||||
msgid "membership for current year"
 | 
			
		||||
msgstr "membre pour cette année"
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:59
 | 
			
		||||
msgid "yes"
 | 
			
		||||
msgstr "oui"
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:61
 | 
			
		||||
msgid "no"
 | 
			
		||||
msgstr "non"
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:66
 | 
			
		||||
msgid "Current borrowed items"
 | 
			
		||||
msgstr "Emprunts en cours"
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:70
 | 
			
		||||
msgid "since"
 | 
			
		||||
msgstr "depuis"
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:74
 | 
			
		||||
msgid "No current borrowed items."
 | 
			
		||||
msgstr "Pas d'emprunts en cours."
 | 
			
		||||
 | 
			
		||||
#: templates/media/index.html:77
 | 
			
		||||
msgid "You are not logged in."
 | 
			
		||||
msgstr "Vous n'êtes pas identifié."
 | 
			
		||||
 | 
			
		||||
#: templates/media/media.html:37
 | 
			
		||||
msgid "Save"
 | 
			
		||||
msgstr "Enregistrer"
 | 
			
		||||
 | 
			
		||||
#: views.py:80
 | 
			
		||||
msgid "Welcome to the Mediatek database"
 | 
			
		||||
msgstr "Bienvenue sur la base de données de la Mediatek"
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ from django.conf.urls import url
 | 
			
		||||
 | 
			
		||||
from . import views
 | 
			
		||||
 | 
			
		||||
app_name = 'media'
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
    url(r'^add_emprunt/(?P<userid>[0-9]+)$', views.add_emprunt,
 | 
			
		||||
        name='add-emprunt'),
 | 
			
		||||
 
 | 
			
		||||
@@ -29,14 +29,14 @@ def add_emprunt(request, userid):
 | 
			
		||||
        user = User.objects.get(pk=userid)
 | 
			
		||||
    except User.DoesNotExist:
 | 
			
		||||
        messages.error(request, u"Entrée inexistante")
 | 
			
		||||
        return redirect("/")
 | 
			
		||||
        return redirect("admin:media_emprunt_changelist")
 | 
			
		||||
    emprunts_en_cours = Emprunt.objects.filter(date_rendu=None,
 | 
			
		||||
                                               user=user).count()
 | 
			
		||||
    if emprunts_en_cours >= user.maxemprunt:
 | 
			
		||||
        messages.error(request,
 | 
			
		||||
                       "Maximum d'emprunts atteint de "
 | 
			
		||||
                       "l'user %s" % user.maxemprunt)
 | 
			
		||||
        return redirect("/")
 | 
			
		||||
        return redirect("admin:media_emprunt_changelist")
 | 
			
		||||
    emprunt = EmpruntForm(request.POST or None)
 | 
			
		||||
    if emprunt.is_valid():
 | 
			
		||||
        emprunt = emprunt.save(commit=False)
 | 
			
		||||
@@ -48,7 +48,7 @@ def add_emprunt(request, userid):
 | 
			
		||||
            reversion.set_user(request.user)
 | 
			
		||||
            reversion.set_comment("Création")
 | 
			
		||||
        messages.success(request, "Le emprunt a été ajouté")
 | 
			
		||||
        return redirect("/")
 | 
			
		||||
        return redirect("admin:media_emprunt_changelist")
 | 
			
		||||
    return form({'form': emprunt}, 'media/media.html', request)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -59,14 +59,14 @@ def retour_emprunt(request, empruntid):
 | 
			
		||||
        emprunt_instance = Emprunt.objects.get(pk=empruntid)
 | 
			
		||||
    except Emprunt.DoesNotExist:
 | 
			
		||||
        messages.error(request, u"Entrée inexistante")
 | 
			
		||||
        return redirect("/")
 | 
			
		||||
        return redirect("admin:media_emprunt_changelist")
 | 
			
		||||
    with transaction.atomic(), reversion.create_revision():
 | 
			
		||||
        emprunt_instance.permanencier_rendu = request.user
 | 
			
		||||
        emprunt_instance.date_rendu = timezone.now()
 | 
			
		||||
        emprunt_instance.save()
 | 
			
		||||
        reversion.set_user(request.user)
 | 
			
		||||
        messages.success(request, "Retour enregistré")
 | 
			
		||||
    return redirect("/")
 | 
			
		||||
    return redirect("admin:media_emprunt_changelist")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def index(request):
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
Django==1.11.22
 | 
			
		||||
Django==2.2.4
 | 
			
		||||
docutils==0.14
 | 
			
		||||
Pillow==5.4.1
 | 
			
		||||
pytz==2019.1
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2019-08-09 22:14+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2019-08-10 10:24+0200\n"
 | 
			
		||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
			
		||||
@@ -17,26 +17,119 @@ msgstr ""
 | 
			
		||||
msgid "Welcome,"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/base_site.html:30
 | 
			
		||||
msgid "Explore the library"
 | 
			
		||||
msgstr "Explorer la médiatèque"
 | 
			
		||||
 | 
			
		||||
#: templates/admin/base_site.html:50 templates/admin/base_site.html:69
 | 
			
		||||
#: templates/admin/base_site.html:31 templates/admin/base_site.html:51
 | 
			
		||||
msgid "Explore database"
 | 
			
		||||
msgstr "Explorer la base de données"
 | 
			
		||||
 | 
			
		||||
#: templates/admin/base_site.html:62
 | 
			
		||||
#: templates/admin/base_site.html:44
 | 
			
		||||
msgid "Documentation"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/base_site.html:71
 | 
			
		||||
#: templates/admin/base_site.html:54
 | 
			
		||||
msgid "Log out"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/base_site.html:73 templates/registration/login.html:8
 | 
			
		||||
#: templates/admin/base_site.html:56 templates/registration/login.html:8
 | 
			
		||||
msgid "Log in"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:23
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid "Models in the %(name)s application"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:34
 | 
			
		||||
msgid "Add"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:40
 | 
			
		||||
msgid "Change"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:63
 | 
			
		||||
msgid "My profile"
 | 
			
		||||
msgstr "Mon profil"
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:65
 | 
			
		||||
msgid "Edit"
 | 
			
		||||
msgstr "Éditer"
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:69
 | 
			
		||||
msgid "username"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:70
 | 
			
		||||
msgid "email"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:71
 | 
			
		||||
msgid "comment"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:72
 | 
			
		||||
msgid "date joined"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:73
 | 
			
		||||
msgid "last login"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:74
 | 
			
		||||
msgid "address"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:75
 | 
			
		||||
msgid "phone number"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:76
 | 
			
		||||
msgid "groups"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:78
 | 
			
		||||
msgid "maximum borrowed"
 | 
			
		||||
msgstr "emprunts maximal"
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:80
 | 
			
		||||
msgid "membership for current year"
 | 
			
		||||
msgstr "membre pour cette année"
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:82
 | 
			
		||||
msgid "yes"
 | 
			
		||||
msgstr "oui"
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:84
 | 
			
		||||
msgid "no"
 | 
			
		||||
msgstr "non"
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:89
 | 
			
		||||
msgid "Current borrowed items"
 | 
			
		||||
msgstr "Emprunts en cours"
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:93
 | 
			
		||||
msgid "since"
 | 
			
		||||
msgstr "depuis"
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:97
 | 
			
		||||
msgid "No current borrowed items."
 | 
			
		||||
msgstr "Pas d'emprunts en cours."
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:100
 | 
			
		||||
msgid "My actions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:104
 | 
			
		||||
msgid "None available"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:119
 | 
			
		||||
msgid "Unknown content"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: templates/admin/index.html:126
 | 
			
		||||
msgid "You are not logged in."
 | 
			
		||||
msgstr "Vous n'êtes pas identifié."
 | 
			
		||||
 | 
			
		||||
#: templates/base.html:10 templates/registration/logged_out.html:9
 | 
			
		||||
#: templates/registration/password_change_done.html:9
 | 
			
		||||
#: templates/registration/password_change_form.html:9
 | 
			
		||||
@@ -89,6 +182,3 @@ msgstr ""
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid "The %(site_name)s team"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "View admin"
 | 
			
		||||
#~ msgstr "Administration"
 | 
			
		||||
 
 | 
			
		||||
@@ -128,12 +128,6 @@ input[type=button]:focus, .button:hover, input[type=submit]:hover, input[type=bu
 | 
			
		||||
    min-height: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Recenter login button */
 | 
			
		||||
.login .submit-row {
 | 
			
		||||
    padding: 1em 0 0 0 !important;
 | 
			
		||||
    text-align: center !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Branding logo */
 | 
			
		||||
#branding img {
 | 
			
		||||
    vertical-align: middle;
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ Test that every themed page still works
 | 
			
		||||
 | 
			
		||||
class TemplateLoggedOutTests(TestCase):
 | 
			
		||||
    def test_login_page(self):
 | 
			
		||||
        response = self.client.get('/admin/login/')
 | 
			
		||||
        response = self.client.get('/database/login/')
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -28,11 +28,11 @@ class TemplateLoggedInTests(TestCase):
 | 
			
		||||
        """
 | 
			
		||||
        Login page should redirect
 | 
			
		||||
        """
 | 
			
		||||
        response = self.client.get('/admin/login/')
 | 
			
		||||
        response = self.client.get('/database/login/')
 | 
			
		||||
        self.assertEqual(response.status_code, 302)
 | 
			
		||||
 | 
			
		||||
    def test_admin_index(self):
 | 
			
		||||
        response = self.client.get('/admin/')
 | 
			
		||||
        response = self.client.get('/database/')
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
 | 
			
		||||
    def test_accounts_password_reset(self):
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,5 @@
 | 
			
		||||
# -*- mode: python; coding: utf-8 -*-
 | 
			
		||||
# Copyright (C) 2017-2019 by BDE ENS Paris-Saclay
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
default_app_config = 'users.apps.UsersConfig'
 | 
			
		||||
 
 | 
			
		||||
@@ -6,19 +6,20 @@ from django.contrib import admin
 | 
			
		||||
from django.contrib import messages
 | 
			
		||||
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
 | 
			
		||||
from django.contrib.auth.forms import PasswordResetForm
 | 
			
		||||
from django.core.urlresolvers import reverse
 | 
			
		||||
from django.urls import reverse
 | 
			
		||||
from django.utils.html import format_html
 | 
			
		||||
from django.utils.translation import ugettext_lazy as _
 | 
			
		||||
from reversion.admin import VersionAdmin
 | 
			
		||||
 | 
			
		||||
from med.admin import admin_site
 | 
			
		||||
from .forms import UserCreationAdminForm
 | 
			
		||||
from .models import Adhesion, Clef, User
 | 
			
		||||
from med.admin import admin_site
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ClefAdmin(VersionAdmin):
 | 
			
		||||
    list_display = ('nom', 'proprio', 'commentaire')
 | 
			
		||||
    ordering = ('nom',)
 | 
			
		||||
    search_fields = ('nom', 'proprio', 'commentaire')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AdhesionAdmin(VersionAdmin):
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								users/apps.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								users/apps.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
# -*- mode: python; coding: utf-8 -*-
 | 
			
		||||
# Copyright (C) 2017-2019 by BDE ENS Paris-Saclay
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
from django.apps import AppConfig
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
from django.db.models.signals import post_save
 | 
			
		||||
from django.utils.translation import ugettext_lazy as _
 | 
			
		||||
 | 
			
		||||
from .signals import add_to_default_group
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UsersConfig(AppConfig):
 | 
			
		||||
    name = 'users'
 | 
			
		||||
    verbose_name = _('users')
 | 
			
		||||
 | 
			
		||||
    def ready(self):
 | 
			
		||||
        post_save.connect(add_to_default_group,
 | 
			
		||||
                          sender=settings.AUTH_USER_MODEL)
 | 
			
		||||
@@ -44,6 +44,12 @@ class UserCreationAdminForm(ModelForm):
 | 
			
		||||
    from the given information.
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def __init__(self, *args, **kwargs):
 | 
			
		||||
        super().__init__(*args, **kwargs)
 | 
			
		||||
        self.fields['email'].required = True
 | 
			
		||||
        self.fields['first_name'].required = True
 | 
			
		||||
        self.fields['last_name'].required = True
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = User
 | 
			
		||||
        fields = ("username", "email", "first_name", "last_name", "address",
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2019-08-09 23:09+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2019-08-10 10:21+0200\n"
 | 
			
		||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
			
		||||
@@ -13,71 +13,71 @@ msgstr ""
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 | 
			
		||||
 | 
			
		||||
#: admin.py:32
 | 
			
		||||
#: admin.py:29
 | 
			
		||||
msgid "adherent status"
 | 
			
		||||
msgstr "statut adhérent"
 | 
			
		||||
 | 
			
		||||
#: admin.py:37
 | 
			
		||||
#: admin.py:34
 | 
			
		||||
msgid "Yes"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: admin.py:54
 | 
			
		||||
#: admin.py:51
 | 
			
		||||
msgid "Personal info"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: admin.py:56
 | 
			
		||||
#: admin.py:53
 | 
			
		||||
msgid "Permissions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: admin.py:59
 | 
			
		||||
#: admin.py:56
 | 
			
		||||
msgid "Important dates"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: admin.py:89
 | 
			
		||||
#: admin.py:86
 | 
			
		||||
msgid "An email to set the password was sent."
 | 
			
		||||
msgstr "Un mail pour initialiser le mot de passe a été envoyé."
 | 
			
		||||
 | 
			
		||||
#: admin.py:92
 | 
			
		||||
#: admin.py:89
 | 
			
		||||
msgid "The email is invalid."
 | 
			
		||||
msgstr "L'adresse mail est invalide."
 | 
			
		||||
 | 
			
		||||
#: admin.py:111
 | 
			
		||||
#: admin.py:108
 | 
			
		||||
msgid "Adhere"
 | 
			
		||||
msgstr "Adhérer"
 | 
			
		||||
 | 
			
		||||
#: admin.py:114
 | 
			
		||||
#: admin.py:111
 | 
			
		||||
msgid "is adherent"
 | 
			
		||||
msgstr "statut adhérent"
 | 
			
		||||
 | 
			
		||||
#: admin.py:122
 | 
			
		||||
#: admin.py:119
 | 
			
		||||
msgid "Register borrowed item"
 | 
			
		||||
msgstr "Enregistrer emprunt"
 | 
			
		||||
 | 
			
		||||
#: admin.py:125
 | 
			
		||||
#: admin.py:122
 | 
			
		||||
msgid "actions"
 | 
			
		||||
msgstr "actions"
 | 
			
		||||
 | 
			
		||||
#: models.py:18
 | 
			
		||||
#: models.py:14
 | 
			
		||||
msgid "phone number"
 | 
			
		||||
msgstr "numéro de téléphone"
 | 
			
		||||
 | 
			
		||||
#: models.py:24
 | 
			
		||||
#: models.py:20
 | 
			
		||||
msgid "address"
 | 
			
		||||
msgstr "adresse"
 | 
			
		||||
 | 
			
		||||
#: models.py:30
 | 
			
		||||
#: models.py:26
 | 
			
		||||
msgid "maximum borrowed"
 | 
			
		||||
msgstr "emprunts maximal"
 | 
			
		||||
 | 
			
		||||
#: models.py:31
 | 
			
		||||
#: models.py:27
 | 
			
		||||
msgid "Maximal amount of simultaneous borrowed item authorized."
 | 
			
		||||
msgstr "Nombre maximal d'objets empruntés en même temps."
 | 
			
		||||
 | 
			
		||||
#: models.py:36
 | 
			
		||||
#: models.py:32
 | 
			
		||||
msgid "comment"
 | 
			
		||||
msgstr "commentaire"
 | 
			
		||||
 | 
			
		||||
#: models.py:37
 | 
			
		||||
#: models.py:33
 | 
			
		||||
msgid "Promotion..."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								users/migrations/0028_auto_20190810_1003.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								users/migrations/0028_auto_20190810_1003.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
# Generated by Django 2.2.4 on 2019-08-10 08:03
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('users', '0027_auto_20190809_2317'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='user',
 | 
			
		||||
            name='last_name',
 | 
			
		||||
            field=models.CharField(blank=True, max_length=150, verbose_name='last name'),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										14
									
								
								users/signals.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								users/signals.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
# -*- mode: python; coding: utf-8 -*-
 | 
			
		||||
# Copyright (C) 2017-2019 by BDE ENS Paris-Saclay
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def add_to_default_group(sender, **kwargs):
 | 
			
		||||
    """
 | 
			
		||||
    When creating a new user, add it to users group
 | 
			
		||||
    """
 | 
			
		||||
    user = kwargs["instance"]
 | 
			
		||||
    if kwargs["created"]:
 | 
			
		||||
        from django.contrib.auth.models import Group
 | 
			
		||||
        group, group_created = Group.objects.get_or_create(name='users')
 | 
			
		||||
        user.groups.add(group)
 | 
			
		||||
@@ -33,7 +33,7 @@ def edit_info(request):
 | 
			
		||||
            reversion.set_comment("Champs modifié(s) : %s" % ', '.join(
 | 
			
		||||
                field for field in user.changed_data))
 | 
			
		||||
        messages.success(request, "L'user a bien été modifié")
 | 
			
		||||
        return redirect("/")
 | 
			
		||||
        return redirect("index")
 | 
			
		||||
    return form({
 | 
			
		||||
        'form': user,
 | 
			
		||||
        'password_change': True,
 | 
			
		||||
@@ -48,12 +48,15 @@ def adherer(request, userid):
 | 
			
		||||
        users = User.objects.get(pk=userid)
 | 
			
		||||
    except User.DoesNotExist:
 | 
			
		||||
        messages.error(request, "Utilisateur inexistant")
 | 
			
		||||
        return redirect("/")
 | 
			
		||||
        return redirect("admin:users_user_changelist")
 | 
			
		||||
    adh_year = Adhesion.objects.all().order_by('annee_debut').reverse().first()
 | 
			
		||||
    if not adh_year:
 | 
			
		||||
        messages.error(request, "Année d'adhésion non définie")
 | 
			
		||||
        return redirect("admin:users_user_changelist")
 | 
			
		||||
    with transaction.atomic(), reversion.create_revision():
 | 
			
		||||
        reversion.set_user(request.user)
 | 
			
		||||
        adh_year.adherent.add(users)
 | 
			
		||||
        adh_year.save()
 | 
			
		||||
        reversion.set_comment("Adhesion de %s" % users)
 | 
			
		||||
    messages.success(request, "Adhesion effectuee")
 | 
			
		||||
    return redirect("/")
 | 
			
		||||
    return redirect("admin:users_user_changelist")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user