feat(submissions): auto-replace player in scopes, cancel sync + info about the sync
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from django.contrib import admin
|
||||
from django.urls import reverse
|
||||
from .models import Submission, SubmissionFile, ImageCrop, Scope
|
||||
from .signals import broadcast_scope_updates
|
||||
|
||||
|
||||
class ImageCropInline(admin.TabularInline):
|
||||
@@ -77,6 +78,45 @@ class ScopeAdmin(admin.ModelAdmin):
|
||||
},
|
||||
)
|
||||
|
||||
# Players on a scope edited here get moved like with the AAndT sync (see
|
||||
# broadcast_scope_updates): state before the save is kept on the instance,
|
||||
# compared once the assigned users (m2m) are saved too in save_related.
|
||||
def save_model(self, request, obj, form, change):
|
||||
previous = Scope.objects.filter(pk=obj.pk).first() if change else None
|
||||
obj._state_before_save = (
|
||||
(
|
||||
previous.is_active,
|
||||
set(previous.assigned_users.values_list("id", flat=True)),
|
||||
)
|
||||
if previous
|
||||
else (False, set())
|
||||
)
|
||||
super().save_model(request, obj, form, change)
|
||||
|
||||
def save_related(self, request, form, formsets, change):
|
||||
super().save_related(request, form, formsets, change)
|
||||
|
||||
scope = form.instance
|
||||
was_active, previous_user_ids = scope._state_before_save
|
||||
user_ids = set(scope.assigned_users.values_list("id", flat=True))
|
||||
|
||||
if scope.is_active != was_active or user_ids != previous_user_ids:
|
||||
broadcast_scope_updates({scope: user_ids | previous_user_ids})
|
||||
|
||||
def delete_model(self, request, obj):
|
||||
self.delete_queryset(request, Scope.objects.filter(pk=obj.pk))
|
||||
|
||||
def delete_queryset(self, request, queryset):
|
||||
changes = {
|
||||
scope: {user.id for user in scope.assigned_users.all()}
|
||||
for scope in queryset.prefetch_related("assigned_users")
|
||||
}
|
||||
for scope in changes:
|
||||
scope.is_active = False
|
||||
|
||||
super().delete_queryset(request, queryset)
|
||||
broadcast_scope_updates(changes)
|
||||
|
||||
|
||||
@admin.register(Submission)
|
||||
class SubmissionAdmin(admin.ModelAdmin):
|
||||
|
||||
Reference in New Issue
Block a user