From 377447d23bd9c7c82eb9408bb7bcb25347e4a9ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Kervella?= Date: Wed, 7 Mar 2018 16:02:31 +0000 Subject: [PATCH 1/2] Club : Add option to specify if a mailing should be generated for --- users/forms.py | 2 ++ users/migrations/0069_club_mailing.py | 20 ++++++++++++++++++++ users/models.py | 3 +++ users/templates/users/profil.html | 9 +++++++++ 4 files changed, 34 insertions(+) create mode 100644 users/migrations/0069_club_mailing.py diff --git a/users/forms.py b/users/forms.py index 861fd292..20121540 100644 --- a/users/forms.py +++ b/users/forms.py @@ -343,6 +343,7 @@ class ClubForm(FieldPermissionFormMixin, ModelForm): self.fields['room'].label = 'Local' self.fields['room'].empty_label = "Pas de chambre" self.fields['school'].empty_label = "Séléctionner un établissement" + self.fields['mailing'].label = 'Utiliser une mailing' class Meta: model = Club @@ -355,6 +356,7 @@ class ClubForm(FieldPermissionFormMixin, ModelForm): 'room', 'telephone', 'shell', + 'mailing' ] def clean_telephone(self): diff --git a/users/migrations/0069_club_mailing.py b/users/migrations/0069_club_mailing.py new file mode 100644 index 00000000..17970494 --- /dev/null +++ b/users/migrations/0069_club_mailing.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2018-03-07 15:34 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0068_auto_20180107_2245'), + ] + + operations = [ + migrations.AddField( + model_name='club', + name='mailing', + field=models.BooleanField(default=False), + ), + ] diff --git a/users/models.py b/users/models.py index 785f853f..c15365de 100644 --- a/users/models.py +++ b/users/models.py @@ -850,6 +850,9 @@ class Club(User): to='users.Adherent', related_name='club_members' ) + mailing = models.BooleanField( + default = False + ) def can_create(user_request, *args, **kwargs): """Check if an user can create an user object. diff --git a/users/templates/users/profil.html b/users/templates/users/profil.html index 53056e95..89296218 100644 --- a/users/templates/users/profil.html +++ b/users/templates/users/profil.html @@ -60,8 +60,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,

+ {% if users.is_class_club %} + + {% if users.club.mailing %} + + {% else %} + + {% endif %} + {% else %} + {% endif %} From 8c2f6349018709d10101476f2f51660ff2536a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Kervella?= Date: Wed, 7 Mar 2018 16:04:43 +0000 Subject: [PATCH 2/2] REST : Add API for mailing for club and other Access /users/rest/ml/std/ for list of standard mailings Access /users/rest/ml/std/member// for list of members of specific standard mailing Access /users/rest/ml/club/ for list of club mailings Access /users/rest/ml/club/member// for list of members of specific club mailing Access /users/rest/ml/club/admin// for list of admins of specific club mailing --- users/serializers.py | 13 +++++++-- users/urls.py | 26 ++++++++++++++++- users/views.py | 67 ++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 96 insertions(+), 10 deletions(-) diff --git a/users/serializers.py b/users/serializers.py index 8f4c050d..95388d41 100644 --- a/users/serializers.py +++ b/users/serializers.py @@ -23,9 +23,16 @@ #Maël Kervella from rest_framework import serializers -from users.models import User +from users.models import Club, Adherent + +class MailingSerializer(serializers.ModelSerializer): + name = serializers.CharField(source='pseudo') -class MailSerializer(serializers.ModelSerializer): class Meta: - model = User + model = Club + fields = ('name',) + +class MailingMemberSerializer(serializers.ModelSerializer): + class Meta: + model = Adherent fields = ('email',) diff --git a/users/urls.py b/users/urls.py index 425f9618..f15208d5 100644 --- a/users/urls.py +++ b/users/urls.py @@ -102,5 +102,29 @@ urlpatterns = [ ), url(r'^$', views.index, name='index'), url(r'^index_clubs/$', views.index_clubs, name='index-clubs'), - url(r'^rest/mailing/$', views.mailing, name='mailing'), + url( + r'^rest/ml/std/$', + views.ml_std_list, + name='ml-std-list' + ), + url( + r'^rest/ml/std/member/(?P\w+)/$', + views.ml_std_members, + name='ml-std-members' + ), + url( + r'^rest/ml/club/$', + views.ml_club_list, + name='ml-club-list' + ), + url( + r'^rest/ml/club/admin/(?P\w+)/$', + views.ml_club_admins, + name='ml-club-admins' + ), + url( + r'^rest/ml/club/member/(?P\w+)/$', + views.ml_club_members, + name='ml-club-members' + ), ] diff --git a/users/views.py b/users/views.py index 8d9ec603..5d0e31a6 100644 --- a/users/views.py +++ b/users/views.py @@ -52,7 +52,7 @@ from rest_framework.renderers import JSONRenderer from reversion.models import Version from reversion import revisions as reversion -from users.serializers import MailSerializer +from users.serializers import MailingSerializer, MailingMemberSerializer from users.models import ( User, Ban, @@ -843,9 +843,64 @@ class JSONResponse(HttpResponse): @csrf_exempt @login_required @permission_required('machines.serveur') -def mailing(request): - """ Fonction de serialisation des addresses mail de tous les users - Pour generation de ml all users""" - mails = all_has_access().values('email').distinct() - seria = MailSerializer(mails, many=True) +def ml_std_list(request): + """ API view sending all the available standard mailings""" + return JSONResponse([ + {'name': 'adherents'} + ]) + + +@csrf_exempt +@login_required +@permission_required('machines.serveur') +def ml_std_members(request, ml_name): + """ API view sending all the members for a standard mailing""" + # All with active connextion + if ml_name == 'adherents': + members = all_has_access().values('email').distinct() + # Unknown mailing + else: + messages.error(request, "Cette mailing n'existe pas") + return redirect(reverse('index')) + seria = MailingMemberSerializer(members, many=True) + return JSONResponse(seria.data) + + +@csrf_exempt +@login_required +@permission_required('machines.serveur') +def ml_club_list(request): + """ API view sending all the available club mailings""" + clubs = Club.objects.filter(mailing=True).values('pseudo') + seria = MailingSerializer(clubs, many=True) + return JSONResponse(seria.data) + + +@csrf_exempt +@login_required +@permission_required('machines.serveur') +def ml_club_admins(request, ml_name): + """ API view sending all the administrators for a specific club mailing""" + try: + club = Club.objects.get(mailing=True, pseudo=ml_name) + except Club.DoesNotExist: + messages.error(request, "Cette mailing n'existe pas") + return redirect(reverse('index')) + members = club.administrators.all().values('email').distinct() + seria = MailingMemberSerializer(members, many=True) + return JSONResponse(seria.data) + + +@csrf_exempt +@login_required +@permission_required('machines.serveur') +def ml_club_members(request, ml_name): + """ API view sending all the members for a specific club mailing""" + try: + club = Club.objects.get(mailing=True, pseudo=ml_name) + except Club.DoesNotExist: + messages.error(request, "Cette mailing n'existe pas") + return redirect(reverse('index')) + members = club.administrators.all().values('email').distinct() | club.members.all().values('email').distinct() + seria = MailingMemberSerializer(members, many=True) return JSONResponse(seria.data)
Mailing{{ users.pseudo }}(-admin)Mailing désactivéePrénom {{ users.name }}Nom {{ users.surname }}