mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-06-21 18:08:21 +02:00
Compare commits
30 Commits
New_permis
...
238ba78f4f
Author | SHA1 | Date | |
---|---|---|---|
238ba78f4f | |||
0ec771b5ee | |||
c841fb6068 | |||
f6649f155a | |||
5707abf9e2 | |||
056c4029f8 | |||
bfd865b3e3 | |||
6ceb43cb66 | |||
9635004520 | |||
05e21ed229 | |||
b2ccc4aede | |||
6229652dea | |||
eee87dcf13 | |||
bcf21507e5 | |||
6127ced143 | |||
f63e5dcb5a | |||
73aa0098bf | |||
694a5c7bd8 | |||
a4480258d7 | |||
821efbf78b | |||
a209e0d366 | |||
ef485e0628 | |||
1481aa0635 | |||
867bf9fd25 | |||
47fda0ea36 | |||
623290827a | |||
a87ce625f3 | |||
3559787fa7 | |||
787005e60d | |||
414e103686 |
@ -15,6 +15,7 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
from note.models import NoteSpecial, Alias
|
from note.models import NoteSpecial, Alias
|
||||||
from note_kfet.inputs import Autocomplete, AmountInput
|
from note_kfet.inputs import Autocomplete, AmountInput
|
||||||
from permission.models import PermissionMask, Role
|
from permission.models import PermissionMask, Role
|
||||||
|
from permission.backends import PermissionBackend
|
||||||
from PIL import Image, ImageSequence
|
from PIL import Image, ImageSequence
|
||||||
|
|
||||||
from .models import Profile, Club, Membership
|
from .models import Profile, Club, Membership
|
||||||
@ -44,9 +45,10 @@ class ProfileForm(forms.ModelForm):
|
|||||||
"""
|
"""
|
||||||
A form for the extras field provided by the :model:`member.Profile` model.
|
A form for the extras field provided by the :model:`member.Profile` model.
|
||||||
"""
|
"""
|
||||||
report_frequency = forms.IntegerField(required=False, initial=0, label=_("Report frequency"))
|
|
||||||
|
|
||||||
last_report = forms.DateTimeField(required=False, disabled=True, label=_("Last report date"))
|
report_frequency = forms.IntegerField(required=False, initial=0, label=_("Statement frequency (in days)"))
|
||||||
|
|
||||||
|
last_report = forms.DateTimeField(required=False, disabled=True, label=_("Last statement date"))
|
||||||
|
|
||||||
VSS_charter_read = forms.BooleanField(
|
VSS_charter_read = forms.BooleanField(
|
||||||
required=True,
|
required=True,
|
||||||
@ -65,6 +67,14 @@ class ProfileForm(forms.ModelForm):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.fields['address'].widget.attrs.update({"placeholder": "4 avenue des Sciences, 91190 GIF-SUR-YVETTE"})
|
self.fields['address'].widget.attrs.update({"placeholder": "4 avenue des Sciences, 91190 GIF-SUR-YVETTE"})
|
||||||
self.fields['promotion'].widget.attrs.update({"max": timezone.now().year})
|
self.fields['promotion'].widget.attrs.update({"max": timezone.now().year})
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
"""Force the values of fields that the user does not have permission to modify.."""
|
||||||
|
cleaned_data = super().clean()
|
||||||
|
for field_name in self.fields.keys():
|
||||||
|
if not PermissionBackend.check_perm(self.request, f"member.change_profile_{field_name}", self.instance):
|
||||||
|
cleaned_data[field_name] = getattr(self.instance, field_name) # Force the old value
|
||||||
|
return cleaned_data
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def save(self, commit=True):
|
def save(self, commit=True):
|
||||||
@ -76,7 +86,8 @@ class ProfileForm(forms.ModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Profile
|
model = Profile
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
exclude = ('user', 'email_confirmed', 'registration_valid', )
|
# Remove ml_[asso]_registration from exclude if the concerned association uses nk20 to manage its mailing list.
|
||||||
|
exclude = ('user', 'email_confirmed', 'registration_valid', 'ml_sport_registration', )
|
||||||
|
|
||||||
|
|
||||||
class ImageForm(forms.Form):
|
class ImageForm(forms.Form):
|
||||||
|
@ -114,12 +114,12 @@ class Profile(models.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
report_frequency = models.PositiveSmallIntegerField(
|
report_frequency = models.PositiveSmallIntegerField(
|
||||||
verbose_name=_("report frequency (in days)"),
|
verbose_name=_("Statement frequency (in days)"),
|
||||||
default=0,
|
default=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
last_report = models.DateTimeField(
|
last_report = models.DateTimeField(
|
||||||
verbose_name=_("last report date"),
|
verbose_name=_("Last statement date"),
|
||||||
default=timezone.now,
|
default=timezone.now,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ from note_kfet.middlewares import _set_current_request
|
|||||||
from permission.backends import PermissionBackend
|
from permission.backends import PermissionBackend
|
||||||
from permission.models import Role
|
from permission.models import Role
|
||||||
from permission.views import ProtectQuerysetMixin, ProtectedCreateView
|
from permission.views import ProtectQuerysetMixin, ProtectedCreateView
|
||||||
|
from django import forms
|
||||||
|
|
||||||
from .forms import UserForm, ProfileForm, ImageForm, ClubForm, MembershipForm, \
|
from .forms import UserForm, ProfileForm, ImageForm, ClubForm, MembershipForm, \
|
||||||
CustomAuthenticationForm, MembershipRolesForm
|
CustomAuthenticationForm, MembershipRolesForm
|
||||||
@ -72,11 +73,19 @@ class UserUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
|
|||||||
form.fields['email'].required = True
|
form.fields['email'].required = True
|
||||||
form.fields['email'].help_text = _("This address must be valid.")
|
form.fields['email'].help_text = _("This address must be valid.")
|
||||||
|
|
||||||
if PermissionBackend.check_perm(self.request, "member.change_profile", context['user_object'].profile):
|
profile_form = self.profile_form(instance=context['user_object'].profile,
|
||||||
context['profile_form'] = self.profile_form(instance=context['user_object'].profile,
|
data=self.request.POST if self.request.POST else None)
|
||||||
data=self.request.POST if self.request.POST else None)
|
if not self.object.profile.report_frequency:
|
||||||
if not self.object.profile.report_frequency:
|
del profile_form.fields["last_report"]
|
||||||
del context['profile_form'].fields["last_report"]
|
|
||||||
|
fields_to_check = list(profile_form.fields.keys())
|
||||||
|
|
||||||
|
# Delete the fields for which the user does not have the permission to modify
|
||||||
|
for field_name in fields_to_check:
|
||||||
|
if not PermissionBackend.check_perm(self.request, f"member.change_profile_{field_name}", context['user_object'].profile):
|
||||||
|
profile_form.fields[field_name].widget = forms.HiddenInput()
|
||||||
|
|
||||||
|
context['profile_form'] = profile_form
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@ -3832,6 +3832,74 @@
|
|||||||
"description": "Voir les profils des membres du club"
|
"description": "Voir les profils des membres du club"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 244,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"member",
|
||||||
|
"profile"
|
||||||
|
],
|
||||||
|
"query": "{}",
|
||||||
|
"type": "change",
|
||||||
|
"mask": 3,
|
||||||
|
"field": "ml_events_registration",
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Modifier l'abonnement à la Newsletter BDE pour n'importe quel profil"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 245,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"member",
|
||||||
|
"profile"
|
||||||
|
],
|
||||||
|
"query": "{}",
|
||||||
|
"type": "change",
|
||||||
|
"mask": 3,
|
||||||
|
"field": "ml_art_registration",
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Modifier l'abonnement à la Newsletter Art pour n'importe quel profil"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 246,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"member",
|
||||||
|
"profile"
|
||||||
|
],
|
||||||
|
"query": "{}",
|
||||||
|
"type": "change",
|
||||||
|
"mask": 3,
|
||||||
|
"field": "ml_sport_registration",
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Modifier l'abonnement à la Newsletter Sport pour n'importe quel profil"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 247,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"member",
|
||||||
|
"profile"
|
||||||
|
],
|
||||||
|
"query": "{}",
|
||||||
|
"type": "view",
|
||||||
|
"mask": 3,
|
||||||
|
"field": [
|
||||||
|
"ml_events_registration",
|
||||||
|
"ml_art_registration",
|
||||||
|
"ml_sport_registration"
|
||||||
|
],
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Voir les abonnements aux Newsletters de n'importe quel profil"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model": "permission.role",
|
"model": "permission.role",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
|
@ -794,12 +794,12 @@ msgid "Permission mask"
|
|||||||
msgstr "Masque de permissions"
|
msgstr "Masque de permissions"
|
||||||
|
|
||||||
#: apps/member/forms.py:46
|
#: apps/member/forms.py:46
|
||||||
msgid "Report frequency"
|
msgid "Statement frequency (in days)"
|
||||||
msgstr "Fréquence des rapports (en jours)"
|
msgstr "Fréquence des relevés (en jours)"
|
||||||
|
|
||||||
#: apps/member/forms.py:48
|
#: apps/member/forms.py:48
|
||||||
msgid "Last report date"
|
msgid "Last statement date"
|
||||||
msgstr "Date de dernier rapport"
|
msgstr "Date de dernier relevé"
|
||||||
|
|
||||||
#: apps/member/forms.py:52
|
#: apps/member/forms.py:52
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -1044,12 +1044,12 @@ msgstr ""
|
|||||||
"artistiques sur le campus (1 mail par semaine)"
|
"artistiques sur le campus (1 mail par semaine)"
|
||||||
|
|
||||||
#: apps/member/models.py:117
|
#: apps/member/models.py:117
|
||||||
msgid "report frequency (in days)"
|
msgid "Statement frequency (in days)"
|
||||||
msgstr "fréquence des rapports (en jours)"
|
msgstr "Fréquence des relevés (en jours)"
|
||||||
|
|
||||||
#: apps/member/models.py:122
|
#: apps/member/models.py:122
|
||||||
msgid "last report date"
|
msgid "Last statement date"
|
||||||
msgstr "date de dernier rapport"
|
msgstr "Date de dernier relevé"
|
||||||
|
|
||||||
#: apps/member/models.py:127
|
#: apps/member/models.py:127
|
||||||
msgid "email confirmed"
|
msgid "email confirmed"
|
||||||
|
@ -26,3 +26,5 @@ MAILTO=notekfet2020@lists.crans.org
|
|||||||
00 9 * * * root cd /var/www/note_kfet && env/bin/python manage.py refresh_highlighted_buttons -v 0
|
00 9 * * * root cd /var/www/note_kfet && env/bin/python manage.py refresh_highlighted_buttons -v 0
|
||||||
# Vider les tokens Oauth2
|
# Vider les tokens Oauth2
|
||||||
00 6 * * * root cd /var/www/note_kfet && env/bin/python manage.py cleartokens -v 0
|
00 6 * * * root cd /var/www/note_kfet && env/bin/python manage.py cleartokens -v 0
|
||||||
|
# Envoyer la liste des abonnés à la NL BDA
|
||||||
|
00 8 * * 0 root cd /var/www/note_kfet && env/bin/python manage.py extract_ml_registrations -t art -v 0
|
@ -159,11 +159,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
</nav>
|
</nav>
|
||||||
<div class="{% block containertype %}container{% endblock %} my-3">
|
<div class="{% block containertype %}container{% endblock %} my-3">
|
||||||
<div id="messages">
|
<div id="messages">
|
||||||
{% if user.is_authenticated %}
|
|
||||||
<div class="alert alert-info">
|
|
||||||
Venez au festival des Sens de l'Art du 2 au 7 décembre 🐘 !
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
{% if not user|is_member:"BDE" %}
|
{% if not user|is_member:"BDE" %}
|
||||||
<div class="alert alert-danger">
|
<div class="alert alert-danger">
|
||||||
|
Reference in New Issue
Block a user