Buttons in user admin

This commit is contained in:
Alexandre Iooss 2019-08-08 21:51:37 +02:00
parent 0c504e85fc
commit c225f5045e
No known key found for this signature in database
GPG Key ID: 6C79278F3FCDCC02
6 changed files with 113 additions and 32 deletions

View File

@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
{% if users_list %}
<h2>Résultats dans les utilisateurs</h2>
{% include "users/aff_users.html" with users_list=users_list %}
{% include "search/aff_users.html" with users_list=users_list %}
{% endif%}
{% if emprunts_list %}
<h2>Résultats dans les emprunt : </h2>

View File

@ -4,6 +4,8 @@
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.core.urlresolvers import reverse
from django.utils.html import format_html
from django.utils.translation import ugettext_lazy as _
from reversion.admin import VersionAdmin
@ -54,7 +56,7 @@ class UserAdmin(VersionAdmin, BaseUserAdmin):
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
list_display = ('username', 'email', 'first_name', 'last_name',
'maxemprunt', 'is_adherent', 'is_staff')
'maxemprunt', 'is_adherent', 'is_staff', 'actions_btn')
list_filter = (IsAdherentFilter, 'is_staff', 'is_superuser', 'is_active',
'groups')
@ -64,15 +66,33 @@ class UserAdmin(VersionAdmin, BaseUserAdmin):
"""
last_adh_year = Adhesion.objects.all().order_by('annee_debut') \
.reverse().first()
return last_adh_year and obj in last_adh_year.adherent.all()
is_member = last_adh_year and obj in last_adh_year.adherent.all()
if is_member:
return format_html(
'<img src="/static/admin/img/icon-yes.svg" alt="True">'
)
else:
# TODO permit adhere only if perms.users.add_user
return format_html(
'<img src="/static/admin/img/icon-no.svg" alt="False"> '
'<a class="button" href="{}">{}</a>',
reverse('users:adherer', args=[obj.pk]),
_('Adhere')
)
is_adherent.boolean = True
is_adherent.short_description = _('is adherent')
is_adherent.allow_tags = True
# TODO {% if not user.is_adherent and perms.users.add_user %}
# {% url 'users:adherer' user.id %}
# TODO {% if perms.media.add_emprunt %}
# {% url 'media:add-emprunt' user.id %}">
def actions_btn(self, obj):
# TODO permit adhere only if perms.media.add_emprunt
return format_html(
'<a class="button" href="{}">{}</a>',
reverse('media:add-emprunt', args=[obj.pk]),
_('Register borrowed item')
)
actions_btn.short_description = _('actions')
actions_btn.allow_tags = True
admin.site.register(User, UserAdmin)

View File

@ -28,10 +28,10 @@ class BaseInfoForm(ModelForm):
class Meta:
model = User
fields = [
'first_name',
'username',
'last_name',
'email',
'telephone',
'first_name',
'last_name',
'address',
'telephone',
]

View File

@ -1,21 +1,72 @@
{% extends "base.html" %}
{% extends "admin/base_site.html" %}
{% comment %}
SPDX-License-Identifier: GPL-3.0-or-later
{% endcomment %}
{% load bootstrap3 %}
{% load i18n static %}
{% block title %}Création et modification d'utilisateur{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'index' %}">{% trans 'Home' %}</a>
{% if title %} &rsaquo; {{ title }}{% endif %}
</div>
{% endblock %}
{% block extrahead %}{{ block.super }}
{# Load Django Admin widgets #}
<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/core.js' %}"></script>
{{ form.media }}
{% endblock %}
{% block extrastyle %}{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">
{% endblock %}
{% block content %}
{% bootstrap_form_errors userform %}
<a href="{% url 'users:password' %}">
<form method="post" onsubmit="window.onbeforeunload=null">{% csrf_token %}
{% if form.non_field_errors %}
<p class="errornote">
{% for error in form.non_field_errors %}
{{ error }}
{% endfor %}
</p>
{% endif %}
<fieldset class="module aligned">
{% for field in form %}
<div class="form-row{% if field.errors %} errors{% endif %}">
{{ field.errors }}
<div>
{{ field.label_tag }}
{% if field.is_readonly %}
<div class="readonly">{{ field.contents }}</div>
{% else %}
{{ field }}
{% endif %}
{% if field.field.help_text %}
<div class="help">{{ field.field.help_text|safe }}</div>
{% endif %}
</div>
</div>
{% endfor %}
{% if password_change %}
<div class="form-row">
<div>
<label>Mot de passe</label>
<div class="readonly">
<a class="button" href="{% url 'users:password' %}">
Changer le mot de passe
</a>
<form class="form" method="post">
{% csrf_token %}
{% bootstrap_form userform %}
{% bootstrap_button "Créer ou modifier" button_type="submit" icon="star" %}
</div>
</div>
</div>
{% endif %}
</fieldset>
<div class="submit-row">
<input class="default" type="submit" value="{% trans 'Create or edit' %}">
</div>
</form>
{% endblock %}

View File

@ -11,14 +11,14 @@ from django.shortcuts import get_object_or_404, redirect, render
from django.template import loader
from django.template.context_processors import csrf
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from reversion import revisions as reversion
from med.settings import ASSO_EMAIL, ASSO_NAME, EMAIL_FROM, \
REQ_EXPIRE_STR, SITE_NAME
from media.models import Emprunt
from users.forms import BaseInfoForm
from users.forms import PassForm
from users.models import Adhesion, Request, Right, User
from users.models import Adhesion, Request, User
def form(ctx, template, request):
@ -40,7 +40,7 @@ def password_change_action(u_form, user, request, req=False):
if req:
req.delete()
return redirect("/")
return redirect("/users/profil/" + str(user.id))
return redirect("/")
def reset_passwd_mail(req, request):
@ -83,8 +83,11 @@ def new_user(request):
"L'utilisateur %s a été crée, un mail pour "
"l'initialisation du mot de passe a été "
"envoyé" % user.username)
return redirect("/users/profil/" + str(user.id))
return form({'userform': user}, 'users/user.html', request)
return redirect("/")
return form({
'form': user,
'title': _('New user'),
}, 'users/user.html', request)
@login_required
@ -100,8 +103,12 @@ 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("/users/profil/")
return form({'userform': user}, 'users/user.html', request)
return redirect("/")
return form({
'form': user,
'password_change': True,
'title': _('Edit user profile'),
}, 'users/user.html', request)
@login_required
@ -112,7 +119,10 @@ def password(request):
u_form = PassForm(request.POST or None)
if u_form.is_valid():
return password_change_action(u_form, request.user, request)
return form({'userform': u_form}, 'users/user.html', request)
return form({
'form': u_form,
'title': _('Change password'),
}, 'users/user.html', request)
@login_required
@ -122,7 +132,7 @@ def adherer(request, userid):
users = User.objects.get(pk=userid)
except User.DoesNotExist:
messages.error(request, "Utilisateur inexistant")
return redirect("/users/")
return redirect("/")
adh_year = Adhesion.objects.all().order_by('annee_debut').reverse().first()
with transaction.atomic(), reversion.create_revision():
reversion.set_user(request.user)
@ -130,7 +140,7 @@ def adherer(request, userid):
adh_year.save()
reversion.set_comment("Adhesion de %s" % users)
messages.success(request, "Adhesion effectuee")
return redirect("/users/profil/" + userid)
return redirect("/")
def process(request, token):