diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 3eb269327..4387cae36 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -67,6 +67,7 @@ class ProviderBulkImportView(PermissionRequiredMixin, BulkImportView): class ProviderBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'circuits.change_provider' cls = Provider + filter = filters.ProviderFilter form = forms.ProviderBulkEditForm template_name = 'circuits/provider_bulk_edit.html' default_redirect_url = 'circuits:provider_list' @@ -75,6 +76,7 @@ class ProviderBulkEditView(PermissionRequiredMixin, BulkEditView): class ProviderBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'circuits.delete_provider' cls = Provider + filter = filters.ProviderFilter default_redirect_url = 'circuits:provider_list' @@ -156,6 +158,7 @@ class CircuitBulkImportView(PermissionRequiredMixin, BulkImportView): class CircuitBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'circuits.change_circuit' cls = Circuit + filter = filters.CircuitFilter form = forms.CircuitBulkEditForm template_name = 'circuits/circuit_bulk_edit.html' default_redirect_url = 'circuits:circuit_list' @@ -164,6 +167,7 @@ class CircuitBulkEditView(PermissionRequiredMixin, BulkEditView): class CircuitBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'circuits.delete_circuit' cls = Circuit + filter = filters.CircuitFilter default_redirect_url = 'circuits:circuit_list' diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 6b01c7bb8..aedffc8fd 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -177,6 +177,7 @@ class SiteBulkImportView(PermissionRequiredMixin, BulkImportView): class SiteBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'dcim.change_site' cls = Site + filter = filters.SiteFilter form = forms.SiteBulkEditForm template_name = 'dcim/site_bulk_edit.html' default_redirect_url = 'dcim:site_list' @@ -207,6 +208,7 @@ class RackGroupEditView(PermissionRequiredMixin, ObjectEditView): class RackGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_rackgroup' cls = RackGroup + filter = filters.RackGroupFilter default_redirect_url = 'dcim:rackgroup_list' @@ -294,6 +296,7 @@ class RackBulkImportView(PermissionRequiredMixin, BulkImportView): class RackBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'dcim.change_rack' cls = Rack + filter = filters.RackFilter form = forms.RackBulkEditForm template_name = 'dcim/rack_bulk_edit.html' default_redirect_url = 'dcim:rack_list' @@ -302,6 +305,7 @@ class RackBulkEditView(PermissionRequiredMixin, BulkEditView): class RackBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_rack' cls = Rack + filter = filters.RackFilter default_redirect_url = 'dcim:rack_list' @@ -410,6 +414,7 @@ class DeviceTypeDeleteView(PermissionRequiredMixin, ObjectDeleteView): class DeviceTypeBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'dcim.change_devicetype' cls = DeviceType + filter = filters.DeviceTypeFilter form = forms.DeviceTypeBulkEditForm template_name = 'dcim/devicetype_bulk_edit.html' default_redirect_url = 'dcim:devicetype_list' @@ -418,6 +423,7 @@ class DeviceTypeBulkEditView(PermissionRequiredMixin, BulkEditView): class DeviceTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_devicetype' cls = DeviceType + filter = filters.DeviceTypeFilter default_redirect_url = 'dcim:devicetype_list' @@ -703,6 +709,7 @@ class ChildDeviceBulkImportView(PermissionRequiredMixin, BulkImportView): class DeviceBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'dcim.change_device' cls = Device + filter = filters.DeviceFilter form = forms.DeviceBulkEditForm template_name = 'dcim/device_bulk_edit.html' default_redirect_url = 'dcim:device_list' @@ -711,6 +718,7 @@ class DeviceBulkEditView(PermissionRequiredMixin, BulkEditView): class DeviceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_device' cls = Device + filter = filters.DeviceFilter default_redirect_url = 'dcim:device_list' @@ -1245,7 +1253,7 @@ class DeviceBulkAddComponentView(View): # Are we editing *all* objects in the queryset or just a selected subset? if request.POST.get('_all'): - pk_list = [int(pk) for pk in request.POST.get('pk_all').split(',') if pk] + pk_list = [obj.pk for obj in filters.DeviceFilter(request.GET, Device.objects.all())] else: pk_list = [int(pk) for pk in request.POST.getlist('pk')] diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 4182532ab..32f7cea30 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -138,6 +138,7 @@ class VRFBulkImportView(PermissionRequiredMixin, BulkImportView): class VRFBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'ipam.change_vrf' cls = VRF + filter = filters.VRFFilter form = forms.VRFBulkEditForm template_name = 'ipam/vrf_bulk_edit.html' default_redirect_url = 'ipam:vrf_list' @@ -146,6 +147,7 @@ class VRFBulkEditView(PermissionRequiredMixin, BulkEditView): class VRFBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'ipam.delete_vrf' cls = VRF + filter = filters.VRFFilter default_redirect_url = 'ipam:vrf_list' @@ -250,6 +252,7 @@ class RIREditView(PermissionRequiredMixin, ObjectEditView): class RIRBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'ipam.delete_rir' cls = RIR + filter = filters.RIRFilter default_redirect_url = 'ipam:rir_list' @@ -328,6 +331,7 @@ class AggregateBulkImportView(PermissionRequiredMixin, BulkImportView): class AggregateBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'ipam.change_aggregate' cls = Aggregate + filter = filters.AggregateFilter form = forms.AggregateBulkEditForm template_name = 'ipam/aggregate_bulk_edit.html' default_redirect_url = 'ipam:aggregate_list' @@ -336,6 +340,7 @@ class AggregateBulkEditView(PermissionRequiredMixin, BulkEditView): class AggregateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'ipam.delete_aggregate' cls = Aggregate + filter = filters.AggregateFilter default_redirect_url = 'ipam:aggregate_list' @@ -460,6 +465,7 @@ class PrefixBulkImportView(PermissionRequiredMixin, BulkImportView): class PrefixBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'ipam.change_prefix' cls = Prefix + filter = filters.PrefixFilter form = forms.PrefixBulkEditForm template_name = 'ipam/prefix_bulk_edit.html' default_redirect_url = 'ipam:prefix_list' @@ -468,6 +474,7 @@ class PrefixBulkEditView(PermissionRequiredMixin, BulkEditView): class PrefixBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'ipam.delete_prefix' cls = Prefix + filter = filters.PrefixFilter default_redirect_url = 'ipam:prefix_list' @@ -648,6 +655,7 @@ class IPAddressBulkImportView(PermissionRequiredMixin, BulkImportView): class IPAddressBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'ipam.change_ipaddress' cls = IPAddress + filter = filters.IPAddressFilter form = forms.IPAddressBulkEditForm template_name = 'ipam/ipaddress_bulk_edit.html' default_redirect_url = 'ipam:ipaddress_list' @@ -656,6 +664,7 @@ class IPAddressBulkEditView(PermissionRequiredMixin, BulkEditView): class IPAddressBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'ipam.delete_ipaddress' cls = IPAddress + filter = filters.IPAddressFilter default_redirect_url = 'ipam:ipaddress_list' @@ -684,6 +693,7 @@ class VLANGroupEditView(PermissionRequiredMixin, ObjectEditView): class VLANGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'ipam.delete_vlangroup' cls = VLANGroup + filter = filters.VLANGroupFilter default_redirect_url = 'ipam:vlangroup_list' @@ -737,6 +747,7 @@ class VLANBulkImportView(PermissionRequiredMixin, BulkImportView): class VLANBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'ipam.change_vlan' cls = VLAN + filter = filters.VLANFilter form = forms.VLANBulkEditForm template_name = 'ipam/vlan_bulk_edit.html' default_redirect_url = 'ipam:vlan_list' @@ -745,6 +756,7 @@ class VLANBulkEditView(PermissionRequiredMixin, BulkEditView): class VLANBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'ipam.delete_vlan' cls = VLAN + filter = filters.VLANFilter default_redirect_url = 'ipam:vlan_list' diff --git a/netbox/project-static/js/forms.js b/netbox/project-static/js/forms.js index 3adc9c13f..3a5ad2b83 100644 --- a/netbox/project-static/js/forms.js +++ b/netbox/project-static/js/forms.js @@ -9,6 +9,14 @@ $(document).ready(function() { $('#select_all').prop('checked', false); } }); + // Enable hidden buttons when "select all" is checked + $('#select_all').click(function (event) { + if ($(this).is(':checked')) { + $('#select_all_box').find('button').prop('disabled', ''); + } else { + $('#select_all_box').find('button').prop('disabled', 'disabled'); + } + }); // Uncheck the "toggle all" checkbox if an item is unchecked $('input:checkbox[name=pk]').click(function (event) { if (!$(this).attr('checked')) { diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py index 7fd3b4380..9f3bd6c41 100644 --- a/netbox/secrets/views.py +++ b/netbox/secrets/views.py @@ -202,6 +202,7 @@ def secret_import(request): class SecretBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'secrets.change_secret' cls = Secret + filter = filters.SecretFilter form = forms.SecretBulkEditForm template_name = 'secrets/secret_bulk_edit.html' default_redirect_url = 'secrets:secret_list' @@ -210,4 +211,5 @@ class SecretBulkEditView(PermissionRequiredMixin, BulkEditView): class SecretBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'secrets.delete_secret' cls = Secret + filter = filters.SecretFilter default_redirect_url = 'secrets:secret_list' diff --git a/netbox/templates/dcim/inc/device_table.html b/netbox/templates/dcim/inc/device_table.html index b11527748..33f7e93aa 100644 --- a/netbox/templates/dcim/inc/device_table.html +++ b/netbox/templates/dcim/inc/device_table.html @@ -7,12 +7,12 @@ Add Components {% endif %} diff --git a/netbox/templates/utilities/confirm_bulk_delete.html b/netbox/templates/utilities/confirm_bulk_delete.html index 97b9cd277..6f3100cba 100644 --- a/netbox/templates/utilities/confirm_bulk_delete.html +++ b/netbox/templates/utilities/confirm_bulk_delete.html @@ -5,7 +5,7 @@ {% block message %}

- Are you sure you want to delete these {{ obj_type_plural|default:"objects" }}{% if parent_obj %} from {{ parent_obj }}{% endif %}? + Are you sure you want to delete these {{ selected_objects|length }} {{ obj_type_plural|default:"objects" }}{% if parent_obj %} from {{ parent_obj }}{% endif %}?