diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Device/Ports.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Device/Ports.pm index dafb43df..69c9ba4b 100644 --- a/Netdisco/lib/App/Netdisco/Web/Plugin/Device/Ports.pm +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Device/Ports.pm @@ -55,12 +55,37 @@ ajax '/ajax/content/device/ports' => require_login sub { } } - # filter for free ports if asked - my $free_filter = (param('free') ? 'only_free_ports' : 'with_is_free'); - $set = $set->$free_filter({ - age_num => (param('age_num') || 3), - age_unit => (param('age_unit') || 'months') - }); + # filter for port status if asked + my %port_state = map {$_ => 1} (param('port_state') || ()); + + if (exists $port_state{free}) { + if (scalar keys %port_state == 1) { + $set = $set->only_free_ports({ + age_num => (param('age_num') || 3), + age_unit => (param('age_unit') || 'months') + }); + } + else { + $set = $set->with_is_free({ + age_num => (param('age_num') || 3), + age_unit => (param('age_unit') || 'months') + }); + } + delete $port_state{free}; + } + + if (scalar keys %port_state < 3) { + my @combi = (); + + push @combi, {'me.up' => 'up'} + if exists $port_state{up}; + push @combi, {'me.up_admin' => 'up', 'me.up' => { '!=' => 'up'}} + if exists $port_state{down}; + push @combi, {'me.up_admin' => { '!=' => 'up'}} + if exists $port_state{shut}; + + $set = $set->search({-or => \@combi}); + } # make sure query asks for formatted timestamps when needed $set = $set->with_times if param('c_lastchange'); diff --git a/Netdisco/share/views/ajax/device/ports.tt b/Netdisco/share/views/ajax/device/ports.tt index 82eee0d1..e562755c 100644 --- a/Netdisco/share/views/ajax/device/ports.tt +++ b/Netdisco/share/views/ajax/device/ports.tt @@ -22,7 +22,7 @@ [% ELSIF row.stp == 'blocking' %] - [% ELSIF params.free OR row.is_free %] + [% ELSIF row.has_column('is_free') AND row.is_free %] [% ELSIF row.up_admin == 'up' AND row.up == 'down' %] diff --git a/Netdisco/share/views/sidebar/device/ports.tt b/Netdisco/share/views/sidebar/device/ports.tt index 40b7eddd..9af7a4c5 100644 --- a/Netdisco/share/views/sidebar/device/ports.tt +++ b/Netdisco/share/views/sidebar/device/ports.tt @@ -75,11 +75,15 @@