Browse Source

VPN admin: allow to bulk activate/deactivate

Baptiste Jonglez 11 years ago
parent
commit
b1c8e3fbef
1 changed files with 23 additions and 1 deletions
  1. 23 1
      coin/vpn/admin.py

+ 23 - 1
coin/vpn/admin.py

@@ -13,7 +13,7 @@ class VPNAdmin(admin.ModelAdmin):
                      'administrative_subscription__member__last_name',
                      'administrative_subscription__member__email')
     actions = ("generate_endpoints", "generate_endpoints_v4",
-               "generate_endpoints_v6")
+               "generate_endpoints_v6", "activate", "deactivate")
 
     def get_readonly_fields(self, request, obj=None):
         if obj:
@@ -21,6 +21,28 @@ class VPNAdmin(admin.ModelAdmin):
         else:
             return []
 
+    def set_activation(self, request, queryset, value):
+        count = 0
+        # We must update each object individually, because we want to run
+        # the save() method to update the backend.
+        for vpn in queryset:
+            if vpn.activated != value:
+                vpn.activated = value
+                vpn.full_clean()
+                vpn.save()
+                count += 1
+        action = "activated" if value else "deactivated"
+        msg = "{} VPN subscription(s) {}.".format(count, action)
+        self.message_user(request, msg)
+
+    def activate(self, request, queryset):
+        self.set_activation(request, queryset, True)
+    activate.short_description = "Activate selected VPNs"
+
+    def deactivate(self, request, queryset):
+        self.set_activation(request, queryset, False)
+    deactivate.short_description = "Deactivate selected VPNs"
+
     def generate_endpoints_generic(self, request, queryset, v4=True, v6=True):
         count = 0
         for vpn in queryset: