diff --git a/Netdisco/lib/Netdisco/Web/Device.pm b/Netdisco/lib/Netdisco/Web/Device.pm
index 43e6b218..4d85b8a1 100644
--- a/Netdisco/lib/Netdisco/Web/Device.pm
+++ b/Netdisco/lib/Netdisco/Web/Device.pm
@@ -98,6 +98,20 @@ ajax '/ajax/content/device/ports' => sub {
}
return unless $set->count;
+ # retrieve related data for additonal table columns, if asked for
+ $set = $set->search_rs({}, {prefetch => {nodes => 'ips'}})
+ if param('c_connected');
+ $set = $set->search_rs({}, {prefetch => {port_vlans_tagged => 'vlan'}})
+ if param('c_vmember');
+
+ # if active or not, control the join to Node table
+ if (param('n_archived')) {
+ $set = $set->search_rs({-or => [{'nodes.active' => 1}, {'nodes.active' => 0}]});
+ }
+ else {
+ $set = $set->search_rs({'nodes.active' => 1});
+ }
+
# sort, and filter by free ports
# the filter could be in the template but here allows a 'no records' msg
my $results = [ sort { &netdisco::sort_port($a->port, $b->port) }
@@ -105,14 +119,10 @@ ajax '/ajax/content/device/ports' => sub {
or $_->is_free(param('age_num'), param('age_unit')) } $set->all ];
return unless scalar @$results;
- my @active = (param('n_archived')
- ? (-or => [{'me.active' => 1}, {'me.active' => 0}])
- : ('me.active' => 1));
content_type('text/html');
template 'ajax/device/ports.tt', {
results => $results,
- archive_filter => {@active},
}, { layout => undef };
};
diff --git a/Netdisco/views/ajax/device/ports.tt b/Netdisco/views/ajax/device/ports.tt
index f130fae6..e47e9073 100644
--- a/Netdisco/views/ajax/device/ports.tt
+++ b/Netdisco/views/ajax/device/ports.tt
@@ -94,7 +94,7 @@
([% row.remote_type %]) / ([% row.remote_id %])
[% END %]
[% END %]
- [% FOREACH node IN row.nodes(archive_filter) %]
+ [% FOREACH node IN row.nodes %]
[% '
' IF row.remote_ip OR NOT loop.first %]
[% 'a ' IF NOT node.active %]
[% node.mac %]