Browse Source

Merge branch 'moamoak/mailing_API' into 'master'

Improve the API for multiple mailings

See merge request federez/re2o!94
squash_migration
klafyvel 8 years ago
parent
commit
ab79b2c919
  1. 2
      users/forms.py
  2. 20
      users/migrations/0069_club_mailing.py
  3. 3
      users/models.py
  4. 13
      users/serializers.py
  5. 9
      users/templates/users/profil.html
  6. 26
      users/urls.py
  7. 67
      users/views.py

2
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):

20
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),
),
]

3
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.

13
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 MailSerializer(serializers.ModelSerializer):
class MailingSerializer(serializers.ModelSerializer):
name = serializers.CharField(source='pseudo')
class Meta:
model = Club
fields = ('name',)
class MailingMemberSerializer(serializers.ModelSerializer):
class Meta:
model = User
model = Adherent
fields = ('email',)

9
users/templates/users/profil.html

@ -60,8 +60,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</p>
<table class="table table-striped">
<tr>
{% if users.is_class_club %}
<th>Mailing</th>
{% if users.club.mailing %}
<td>{{ users.pseudo }}(-admin)</td>
{% else %}
<td>Mailing désactivée</td>
{% endif %}
{% else %}
<th>Prénom</th>
<td>{{ users.name }}</td>
{% endif %}
<th>Nom</th>
<td>{{ users.surname }}</td>
</tr>

26
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<ml_name>\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<ml_name>\w+)/$',
views.ml_club_admins,
name='ml-club-admins'
),
url(
r'^rest/ml/club/member/(?P<ml_name>\w+)/$',
views.ml_club_members,
name='ml-club-members'
),
]

67
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)

Loading…
Cancel
Save