From a2d7f911cc282a57f97a6d08defb0ee574d6c14e Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 8 Aug 2023 15:08:41 -0400 Subject: [PATCH] Refactor template blocks for bulk operation buttons --- netbox/dcim/views.py | 13 ++++++ .../templates/dcim/device/consoleports.html | 18 +++++++- .../dcim/device/consoleserverports.html | 18 +++++++- netbox/templates/dcim/device/devicebays.html | 4 +- netbox/templates/dcim/device/frontports.html | 18 +++++++- netbox/templates/dcim/device/interfaces.html | 18 +++++++- netbox/templates/dcim/device/inventory.html | 4 +- netbox/templates/dcim/device/modulebays.html | 4 +- .../templates/dcim/device/poweroutlets.html | 18 +++++++- netbox/templates/dcim/device/powerports.html | 18 +++++++- netbox/templates/dcim/device/rearports.html | 18 +++++++- .../dcim/rack/non_racked_devices.html | 3 +- netbox/templates/dcim/rack/reservations.html | 3 +- .../generic/objectchildren_list.html | 46 +++++++++---------- netbox/templates/ipam/aggregate/prefixes.html | 3 +- .../templates/ipam/iprange/ip_addresses.html | 5 +- .../templates/ipam/prefix/ip_addresses.html | 3 +- netbox/templates/ipam/prefix/ip_ranges.html | 3 +- netbox/templates/ipam/prefix/prefixes.html | 4 +- 19 files changed, 160 insertions(+), 61 deletions(-) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 5b93e5f0b..fca222f47 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1,4 +1,5 @@ import traceback +from collections import defaultdict from django.contrib import messages from django.contrib.contenttypes.models import ContentType @@ -45,6 +46,15 @@ CABLE_TERMINATION_TYPES = { class DeviceComponentsView(generic.ObjectChildrenView): + actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename', 'bulk_disconnect') + action_perms = defaultdict(set, **{ + 'add': {'add'}, + 'import': {'add'}, + 'bulk_edit': {'change'}, + 'bulk_delete': {'delete'}, + 'bulk_rename': {'change'}, + 'bulk_disconnect': {'change'}, + }) queryset = Device.objects.all() def get_children(self, request, parent): @@ -1997,6 +2007,7 @@ class DeviceModuleBaysView(DeviceComponentsView): table = tables.DeviceModuleBayTable filterset = filtersets.ModuleBayFilterSet template_name = 'dcim/device/modulebays.html' + actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename') tab = ViewTab( label=_('Module Bays'), badge=lambda obj: obj.modulebays.count(), @@ -2012,6 +2023,7 @@ class DeviceDeviceBaysView(DeviceComponentsView): table = tables.DeviceDeviceBayTable filterset = filtersets.DeviceBayFilterSet template_name = 'dcim/device/devicebays.html' + actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename') tab = ViewTab( label=_('Device Bays'), badge=lambda obj: obj.devicebays.count(), @@ -2023,6 +2035,7 @@ class DeviceDeviceBaysView(DeviceComponentsView): @register_model_view(Device, 'inventory') class DeviceInventoryView(DeviceComponentsView): + actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename') child_model = InventoryItem table = tables.DeviceInventoryItemTable filterset = filtersets.InventoryItemFilterSet diff --git a/netbox/templates/dcim/device/consoleports.html b/netbox/templates/dcim/device/consoleports.html index 247d66732..a79f5af4f 100644 --- a/netbox/templates/dcim/device/consoleports.html +++ b/netbox/templates/dcim/device/consoleports.html @@ -1,6 +1,20 @@ {% extends 'generic/objectchildren_list.html' %} +{% load helpers %} -{% block bulk_controls %} +{% block bulk_delete_controls %} + {{ block.super }} + {% with bulk_disconnect_view=child_model|validated_viewname:"bulk_disconnect" %} + {% if 'bulk_disconnect' in actions and bulk_disconnect_view %} + + {% endif %} + {% endwith %} +{% endblock bulk_delete_controls %} + +{% block bulk_extra_controls %} {{ block.super }} {% if perms.dcim.add_consoleport %}
@@ -10,4 +24,4 @@
{% endif %} -{% endblock %} +{% endblock bulk_extra_controls %} diff --git a/netbox/templates/dcim/device/consoleserverports.html b/netbox/templates/dcim/device/consoleserverports.html index 1387fb690..3d7c444d6 100644 --- a/netbox/templates/dcim/device/consoleserverports.html +++ b/netbox/templates/dcim/device/consoleserverports.html @@ -1,6 +1,20 @@ {% extends 'generic/objectchildren_list.html' %} +{% load helpers %} -{% block bulk_controls %} +{% block bulk_delete_controls %} + {{ block.super }} + {% with bulk_disconnect_view=child_model|validated_viewname:"bulk_disconnect" %} + {% if 'bulk_disconnect' in actions and bulk_disconnect_view %} + + {% endif %} + {% endwith %} +{% endblock bulk_delete_controls %} + +{% block bulk_extra_controls %} {{ block.super }} {% if perms.dcim.add_consoleserverport %}
@@ -10,4 +24,4 @@
{% endif %} -{% endblock %} \ No newline at end of file +{% endblock bulk_extra_controls %} \ No newline at end of file diff --git a/netbox/templates/dcim/device/devicebays.html b/netbox/templates/dcim/device/devicebays.html index cf28e139b..f996278f6 100644 --- a/netbox/templates/dcim/device/devicebays.html +++ b/netbox/templates/dcim/device/devicebays.html @@ -1,6 +1,6 @@ {% extends 'generic/objectchildren_list.html' %} -{% block bulk_controls %} +{% block bulk_extra_controls %} {{ block.super }} {% if perms.dcim.add_devicebay %}
@@ -10,4 +10,4 @@
{% endif %} -{% endblock %} +{% endblock bulk_extra_controls %} diff --git a/netbox/templates/dcim/device/frontports.html b/netbox/templates/dcim/device/frontports.html index 9985e4389..e2502ce10 100644 --- a/netbox/templates/dcim/device/frontports.html +++ b/netbox/templates/dcim/device/frontports.html @@ -1,6 +1,20 @@ {% extends 'generic/objectchildren_list.html' %} +{% load helpers %} -{% block bulk_controls %} +{% block bulk_delete_controls %} + {{ block.super }} + {% with bulk_disconnect_view=child_model|validated_viewname:"bulk_disconnect" %} + {% if 'bulk_disconnect' in actions and bulk_disconnect_view %} + + {% endif %} + {% endwith %} +{% endblock bulk_delete_controls %} + +{% block bulk_extra_controls %} {{ block.super }} {% if perms.dcim.add_frontport %}
@@ -10,4 +24,4 @@
{% endif %} -{% endblock %} \ No newline at end of file +{% endblock bulk_extra_controls %} \ No newline at end of file diff --git a/netbox/templates/dcim/device/interfaces.html b/netbox/templates/dcim/device/interfaces.html index 92a9cfdbb..38167fe63 100644 --- a/netbox/templates/dcim/device/interfaces.html +++ b/netbox/templates/dcim/device/interfaces.html @@ -1,6 +1,20 @@ {% extends 'generic/objectchildren_list.html' %} +{% load helpers %} -{% block bulk_controls %} +{% block bulk_delete_controls %} + {{ block.super }} + {% with bulk_disconnect_view=child_model|validated_viewname:"bulk_disconnect" %} + {% if 'bulk_disconnect' in actions and bulk_disconnect_view %} + + {% endif %} + {% endwith %} +{% endblock bulk_delete_controls %} + +{% block bulk_extra_controls %} {{ block.super }} {% if perms.dcim.add_interface %}
@@ -10,4 +24,4 @@
{% endif %} -{% endblock %} \ No newline at end of file +{% endblock bulk_extra_controls %} diff --git a/netbox/templates/dcim/device/inventory.html b/netbox/templates/dcim/device/inventory.html index bcce09db4..73e64b14b 100644 --- a/netbox/templates/dcim/device/inventory.html +++ b/netbox/templates/dcim/device/inventory.html @@ -1,6 +1,6 @@ {% extends 'generic/objectchildren_list.html' %} -{% block bulk_controls %} +{% block bulk_extra_controls %} {{ block.super }} {% if perms.dcim.add_inventoryitem %}
@@ -10,4 +10,4 @@
{% endif %} -{% endblock %} +{% endblock bulk_extra_controls %} diff --git a/netbox/templates/dcim/device/modulebays.html b/netbox/templates/dcim/device/modulebays.html index 583d64da4..69a9539bf 100644 --- a/netbox/templates/dcim/device/modulebays.html +++ b/netbox/templates/dcim/device/modulebays.html @@ -1,6 +1,6 @@ {% extends 'generic/objectchildren_list.html' %} -{% block bulk_controls %} +{% block bulk_extra_controls %} {{ block.super }} {% if perms.dcim.add_modulebay %}
@@ -10,4 +10,4 @@
{% endif %} -{% endblock %} \ No newline at end of file +{% endblock bulk_extra_controls %} \ No newline at end of file diff --git a/netbox/templates/dcim/device/poweroutlets.html b/netbox/templates/dcim/device/poweroutlets.html index 9d7ac35f4..af076b23d 100644 --- a/netbox/templates/dcim/device/poweroutlets.html +++ b/netbox/templates/dcim/device/poweroutlets.html @@ -1,6 +1,20 @@ {% extends 'generic/objectchildren_list.html' %} +{% load helpers %} -{% block bulk_controls %} +{% block bulk_delete_controls %} + {{ block.super }} + {% with bulk_disconnect_view=child_model|validated_viewname:"bulk_disconnect" %} + {% if 'bulk_disconnect' in actions and bulk_disconnect_view %} + + {% endif %} + {% endwith %} +{% endblock bulk_delete_controls %} + +{% block bulk_extra_controls %} {{ block.super }} {% if perms.dcim.add_poweroutlet %}
@@ -10,4 +24,4 @@
{% endif %} -{% endblock %} +{% endblock bulk_extra_controls %} diff --git a/netbox/templates/dcim/device/powerports.html b/netbox/templates/dcim/device/powerports.html index 60c1aaf64..01ee6fa62 100644 --- a/netbox/templates/dcim/device/powerports.html +++ b/netbox/templates/dcim/device/powerports.html @@ -1,6 +1,20 @@ {% extends 'generic/objectchildren_list.html' %} +{% load helpers %} -{% block bulk_controls %} +{% block bulk_delete_controls %} + {{ block.super }} + {% with bulk_disconnect_view=child_model|validated_viewname:"bulk_disconnect" %} + {% if 'bulk_disconnect' in actions and bulk_disconnect_view %} + + {% endif %} + {% endwith %} +{% endblock bulk_delete_controls %} + +{% block bulk_extra_controls %} {{ block.super }} {% if perms.dcim.add_powerport %}
@@ -10,4 +24,4 @@
{% endif %} -{% endblock %} \ No newline at end of file +{% endblock bulk_extra_controls %} diff --git a/netbox/templates/dcim/device/rearports.html b/netbox/templates/dcim/device/rearports.html index f0ea500d8..d72515d25 100644 --- a/netbox/templates/dcim/device/rearports.html +++ b/netbox/templates/dcim/device/rearports.html @@ -1,6 +1,20 @@ {% extends 'generic/objectchildren_list.html' %} +{% load helpers %} -{% block bulk_controls %} +{% block bulk_delete_controls %} + {{ block.super }} + {% with bulk_disconnect_view=child_model|validated_viewname:"bulk_disconnect" %} + {% if 'bulk_disconnect' in actions and bulk_disconnect_view %} + + {% endif %} + {% endwith %} +{% endblock bulk_delete_controls %} + +{% block bulk_extra_controls %} {{ block.super }} {% if perms.dcim.add_rearport %}
@@ -10,4 +24,4 @@
{% endif %} -{% endblock %} \ No newline at end of file +{% endblock bulk_extra_controls %} \ No newline at end of file diff --git a/netbox/templates/dcim/rack/non_racked_devices.html b/netbox/templates/dcim/rack/non_racked_devices.html index 923699c42..0850eef8d 100644 --- a/netbox/templates/dcim/rack/non_racked_devices.html +++ b/netbox/templates/dcim/rack/non_racked_devices.html @@ -1,5 +1,4 @@ {% extends 'generic/objectchildren_list.html' %} -{% load helpers %} {% block extra_controls %} {% if perms.dcim.add_device %} @@ -10,4 +9,4 @@ {% endif %} -{% endblock %} +{% endblock extra_controls %} diff --git a/netbox/templates/dcim/rack/reservations.html b/netbox/templates/dcim/rack/reservations.html index f0989d016..21de66cf6 100644 --- a/netbox/templates/dcim/rack/reservations.html +++ b/netbox/templates/dcim/rack/reservations.html @@ -1,5 +1,4 @@ {% extends 'generic/objectchildren_list.html' %} -{% load helpers %} {% block extra_controls %} {% if perms.dcim.add_rackreservation %} @@ -10,4 +9,4 @@ {% endif %} -{% endblock %} +{% endblock extra_controls %} diff --git a/netbox/templates/generic/objectchildren_list.html b/netbox/templates/generic/objectchildren_list.html index ed2c91c6b..d0d96ac83 100644 --- a/netbox/templates/generic/objectchildren_list.html +++ b/netbox/templates/generic/objectchildren_list.html @@ -10,14 +10,14 @@ {% include 'htmx/table.html' %} -
{% block bulk_controls %}
- {% if 'bulk_edit' in actions %} -
+
+ {# Bulk edit buttons #} + {% block bulk_edit_controls %} {% with bulk_edit_view=child_model|validated_viewname:"bulk_edit" %} - {% if bulk_edit_view %} + {% if 'bulk_edit' in actions and bulk_edit_view %} {% endif %} {% endwith %} -
- {% endif %} + {% endblock bulk_edit_controls %} +
- {% with bulk_delete_view=child_model|validated_viewname:"bulk_delete" %} - {% if 'bulk_delete' in actions and bulk_delete_view %} - - {% endif %} - {% endwith %} - {% if 'bulk_edit' in actions %} - {% with bulk_disconnect_view=child_model|validated_viewname:"bulk_disconnect" %} - {% if bulk_disconnect_view %} - {% endif %} {% endwith %} - {% endif %} + {% endblock bulk_delete_controls %}
- {% endblock %} +
+ {# Other bulk action buttons #} + {% block bulk_extra_controls %}{% endblock %} +
+ {% endblock bulk_controls %}
{% endblock content %} diff --git a/netbox/templates/ipam/aggregate/prefixes.html b/netbox/templates/ipam/aggregate/prefixes.html index 5fc12de85..e8f1dcf33 100644 --- a/netbox/templates/ipam/aggregate/prefixes.html +++ b/netbox/templates/ipam/aggregate/prefixes.html @@ -1,5 +1,4 @@ {% extends 'generic/objectchildren_list.html' %} -{% load helpers %} {% block extra_controls %} {% include 'ipam/inc/toggle_available.html' %} @@ -9,4 +8,4 @@ {% endif %} {{ block.super }} -{% endblock %} +{% endblock extra_controls %} diff --git a/netbox/templates/ipam/iprange/ip_addresses.html b/netbox/templates/ipam/iprange/ip_addresses.html index 414201b28..9f6503753 100644 --- a/netbox/templates/ipam/iprange/ip_addresses.html +++ b/netbox/templates/ipam/iprange/ip_addresses.html @@ -1,10 +1,9 @@ {% extends 'generic/objectchildren_list.html' %} -{% load helpers %} {% block extra_controls %} - {% if perms.ipam.add_ipaddress and active_tab == 'ip-addresses' and object.first_available_ip %} + {% if perms.ipam.add_ipaddress and object.first_available_ip %} Add IP Address {% endif %} -{% endblock %} +{% endblock extra_controls %} diff --git a/netbox/templates/ipam/prefix/ip_addresses.html b/netbox/templates/ipam/prefix/ip_addresses.html index 73af33c64..2fa33e4c2 100644 --- a/netbox/templates/ipam/prefix/ip_addresses.html +++ b/netbox/templates/ipam/prefix/ip_addresses.html @@ -1,5 +1,4 @@ {% extends 'generic/objectchildren_list.html' %} -{% load helpers %} {% block extra_controls %} {% if perms.ipam.add_ipaddress and first_available_ip %} @@ -7,4 +6,4 @@ Add IP Address {% endif %} -{% endblock %} +{% endblock extra_controls %} diff --git a/netbox/templates/ipam/prefix/ip_ranges.html b/netbox/templates/ipam/prefix/ip_ranges.html index 65ca3e51b..acd3f86b2 100644 --- a/netbox/templates/ipam/prefix/ip_ranges.html +++ b/netbox/templates/ipam/prefix/ip_ranges.html @@ -1,5 +1,4 @@ {% extends 'generic/objectchildren_list.html' %} -{% load helpers %} {% block extra_controls %} {% if perms.ipam.add_iprange and first_available_ip %} @@ -7,4 +6,4 @@ Add IP Range {% endif %} -{% endblock %} +{% endblock extra_controls %} diff --git a/netbox/templates/ipam/prefix/prefixes.html b/netbox/templates/ipam/prefix/prefixes.html index 9dacf55d0..100c514ae 100644 --- a/netbox/templates/ipam/prefix/prefixes.html +++ b/netbox/templates/ipam/prefix/prefixes.html @@ -1,5 +1,4 @@ {% extends 'generic/objectchildren_list.html' %} -{% load helpers %} {% block extra_controls %} {% include 'ipam/inc/toggle_available.html' %} @@ -8,5 +7,4 @@ Add Prefix {% endif %} - {{ block.super }} -{% endblock %} +{% endblock extra_controls %}