|
@@ -8,7 +8,35 @@ from django.contrib import admin
|
|
|
from django.contrib import messages
|
|
|
from django.http import HttpResponseRedirect
|
|
|
|
|
|
-from .models import MaillingList, SyncCommandError
|
|
|
+from .models import MaillingList, MaillingListSubscription, SyncCommandError
|
|
|
+import coin.members.admin
|
|
|
+
|
|
|
+
|
|
|
+class AddMaillingListSubscriptionInline(admin.StackedInline):
|
|
|
+ model = MaillingListSubscription
|
|
|
+ extra = 1
|
|
|
+ max_num = 1
|
|
|
+ fields = ('member', 'maillinglist')
|
|
|
+ verbose_name_plural = "Ajouter un abonnement à la liste mail"
|
|
|
+ verbose_name = "Ajouter un abonnement"
|
|
|
+
|
|
|
+ form = autocomplete_light.modelform_factory(MaillingListSubscription, fields='__all__')
|
|
|
+
|
|
|
+ def get_queryset(self, request):
|
|
|
+ qs = super(AddMaillingListSubscriptionInline, self).get_queryset(request)
|
|
|
+ return qs.none()
|
|
|
+
|
|
|
+ def has_delete_permission(self, request, obj=None):
|
|
|
+ return False
|
|
|
+
|
|
|
+
|
|
|
+class MaillingListSubscriptionInline(admin.TabularInline):
|
|
|
+ model = MaillingListSubscription
|
|
|
+
|
|
|
+ readonly_fields = ('member', 'maillinglist',)
|
|
|
+
|
|
|
+ def has_add_permission(self, request, obj=None):
|
|
|
+ return False
|
|
|
|
|
|
|
|
|
class MaillingListAdmin(admin.ModelAdmin):
|
|
@@ -32,29 +60,42 @@ class MaillingListAdmin(admin.ModelAdmin):
|
|
|
sync_to_server.short_description = (
|
|
|
'Synchroniser les listes sélectionnées vers le serveur')
|
|
|
|
|
|
- form = autocomplete_light.modelform_factory(
|
|
|
- MaillingList,
|
|
|
- fields='__all__',
|
|
|
- )
|
|
|
+ inlines = [AddMaillingListSubscriptionInline, MaillingListSubscriptionInline,]
|
|
|
|
|
|
- def change_view(self, request, object_id, form_url='', extra_context=None):
|
|
|
+ def change_view(self, request, object_id, *args, **kwargs):
|
|
|
try:
|
|
|
return super(MaillingListAdmin, self).change_view(
|
|
|
- request, object_id, form_url, extra_context)
|
|
|
-
|
|
|
+ request, object_id, *args, **kwargs)
|
|
|
except SyncCommandError as e:
|
|
|
try:
|
|
|
ml = MaillingList.objects.get(pk=object_id)
|
|
|
ml_name = "La liste mail « {} »".format(ml.short_name)
|
|
|
except MaillingList.DoesNotExist:
|
|
|
ml_name = "La nouvelle liste mail"
|
|
|
-
|
|
|
messages.error(
|
|
|
request,
|
|
|
"{} n'a pas pu être synchronisée".format(ml_name) +
|
|
|
- " vers le serveur de listes : « {} ». Vous pouvez".format(e) +
|
|
|
- " relancer la synchro depuis la liste des listes mail.")
|
|
|
+ " vers le serveur de listes : « {} ».".format(e))
|
|
|
return HttpResponseRedirect(request.path)
|
|
|
|
|
|
|
|
|
admin.site.register(MaillingList, MaillingListAdmin)
|
|
|
+
|
|
|
+
|
|
|
+class MemberAdmin(coin.members.admin.MemberAdmin):
|
|
|
+ inlines = coin.members.admin.MemberAdmin.inlines + [AddMaillingListSubscriptionInline, MaillingListSubscriptionInline]
|
|
|
+
|
|
|
+ def change_view(self, request, *args, **kwargs):
|
|
|
+ try:
|
|
|
+ return super(MemberAdmin, self).change_view(
|
|
|
+ request, *args, **kwargs)
|
|
|
+ except SyncCommandError as e:
|
|
|
+ messages.error(
|
|
|
+ request,
|
|
|
+ "Les listes mails n'ont pas pu être synchronisées" +
|
|
|
+ " vers le serveur de listes : « {} ».".format(e))
|
|
|
+ return HttpResponseRedirect(request.path)
|
|
|
+
|
|
|
+
|
|
|
+admin.site.unregister(coin.members.admin.Member)
|
|
|
+admin.site.register(coin.members.admin.Member, MemberAdmin)
|