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 %]