diff --git a/lib/App/Netdisco/Web/Device.pm b/lib/App/Netdisco/Web/Device.pm index d19259f4..97012464 100644 --- a/lib/App/Netdisco/Web/Device.pm +++ b/lib/App/Netdisco/Web/Device.pm @@ -41,7 +41,7 @@ hook 'before_template' => sub { } # used in the device search sidebar template to set selected items - foreach my $opt (qw/devgrp/) { + foreach my $opt (qw/hgroup location/) { my $p = (ref [] eq ref param($opt) ? param($opt) : (param($opt) ? [param($opt)] : [])); $tokens->{"${opt}_lkp"} = { map { $_ => 1 } @$p }; @@ -82,7 +82,7 @@ get '/device' => require_login sub { params->{'tab'} ||= 'details'; template 'device', { display_name => ($others ? $first->ip : ($first->dns || $first->ip)), - devgrp_list => setting('host_group_displaynames'), + hgroup_list => setting('host_group_displaynames'), device => params->{'tab'}, }; }; diff --git a/lib/App/Netdisco/Web/Plugin/Device/Neighbors.pm b/lib/App/Netdisco/Web/Plugin/Device/Neighbors.pm index a7a2d9fe..03800b3a 100644 --- a/lib/App/Netdisco/Web/Plugin/Device/Neighbors.pm +++ b/lib/App/Netdisco/Web/Plugin/Device/Neighbors.pm @@ -27,16 +27,16 @@ ajax '/ajax/data/device/netmappositions' => require_login sub { undef $vlan if (defined $vlan and $vlan !~ m/^\d+$/); my $mapshow = param('mapshow'); - return if !defined $mapshow or $mapshow !~ m/^(?:all|only)$/; + return if !defined $mapshow or $mapshow !~ m/^(?:all|hgroup)$/; # list of groups selected by user and passed in param - my $devgrp = (ref [] eq ref param('devgrp') ? param('devgrp') : [param('devgrp')]); + my $hgroup = (ref [] eq ref param('hgroup') ? param('hgroup') : [param('hgroup')]); # list of groups validated as real host groups and named host groups my @hgrplist = List::MoreUtils::uniq grep { exists setting('host_group_displaynames')->{$_} } grep { exists setting('host_groups')->{$_} } - grep { defined } @{ $devgrp }; - return if $mapshow eq 'only' and 0 == scalar @hgrplist; + grep { defined } @{ $hgroup }; + return if $mapshow eq 'hgroup' and 0 == scalar @hgrplist; push(@hgrplist, '__ANY__') if 0 == scalar @hgrplist; my %clean = (); @@ -110,16 +110,20 @@ ajax '/ajax/data/device/netmap' => require_login sub { undef $vlan if (defined $vlan and $vlan !~ m/^\d+$/); my $mapshow = (param('mapshow') || 'neighbors'); - $mapshow = 'neighbors' if $mapshow !~ m/^(?:all|neighbors|only)$/; + $mapshow = 'neighbors' if $mapshow !~ m/^(?:all|neighbors|location|hgroup)$/; $mapshow = 'all' unless $qdev->in_storage; # list of groups selected by user and passed in param - my $devgrp = (ref [] eq ref param('devgrp') ? param('devgrp') : [param('devgrp')]); + my $hgroup = (ref [] eq ref param('hgroup') ? param('hgroup') : [param('hgroup')]); # list of groups validated as real host groups and named host groups my @hgrplist = List::MoreUtils::uniq grep { exists setting('host_group_displaynames')->{$_} } grep { exists setting('host_groups')->{$_} } - grep { defined } @{ $devgrp }; + grep { defined } @{ $hgroup }; + + # list of locations selected by user and passed in param + my $locgrp = (ref [] eq ref param('locgrp') ? param('locgrp') : [param('locgrp')]); + my @lgrplist = List::MoreUtils::uniq grep { defined } @{ $locgrp }; my %ok_dev = (); my %logvals = (); @@ -177,10 +181,14 @@ ajax '/ajax/data/device/netmap' => require_login sub { next DEVICE if (($mapshow eq 'neighbors') or $vlan) and (not $ok_dev{$device->ip}); - # if in only mode then use ACLs to filter + # if in locations mode then filter + next DEVICE if $mapshow eq 'location' and ((!defined $device->location) + or (0 == scalar grep {$_ eq $device->location} @lgrplist)); + + # if in host group mode then use ACLs to filter my $first_hgrp = first { check_acl_only($device, setting('host_groups')->{$_}) } @hgrplist; - next DEVICE if $mapshow eq 'only' and not $first_hgrp; + next DEVICE if $mapshow eq 'hgroup' and not $first_hgrp; ++$logvals{ $device->get_column('log') || 1 }; (my $name = lc($device->dns || $device->name || $device->ip)) =~ s/$domain$//; diff --git a/share/views/ajax/device/netmap.tt b/share/views/ajax/device/netmap.tt index 1b8fbbeb..1bc1d00f 100644 --- a/share/views/ajax/device/netmap.tt +++ b/share/views/ajax/device/netmap.tt @@ -161,7 +161,7 @@ $.getJSON('[% uri_for('/ajax/data/device/netmap') %]?[% my_query %]', function(m if (mapdata['newnodes'] && ('[% params.mapshow %]' != 'neighbors')) { $.post( '[% uri_for('/ajax/data/device/netmappositions') %]' - ,$("#nd_vlan-entry, #nd_devgrp-select, input[name='mapshow']").serialize() + ,$("#nd_vlan-entry, #nd_hgroup-select, input[name='mapshow']").serialize() + '&positions=' + JSON.stringify(graph.positions()) ); } diff --git a/share/views/js/device.js b/share/views/js/device.js index f6a92cda..579a51fa 100644 --- a/share/views/js/device.js +++ b/share/views/js/device.js @@ -152,7 +152,7 @@ // if user enters vlan but does not submit this will save wrong data $.post( '[% uri_for('/ajax/data/device/netmappositions') %]' - ,$("#nd_vlan-entry, #nd_devgrp-select, input[name='mapshow']").serialize() + ,$("#nd_vlan-entry, #nd_hgroup-select, input[name='mapshow']").serialize() + '&positions=' + JSON.stringify(graph.positions()) ); }); diff --git a/share/views/sidebar/device/netmap.tt b/share/views/sidebar/device/netmap.tt index d6ca2c8e..10d650a8 100644 --- a/share/views/sidebar/device/netmap.tt +++ b/share/views/sidebar/device/netmap.tt @@ -63,25 +63,25 @@ - [% IF devgrp_list.size %] + [% IF hgroup_list.size %]
[% ELSE %]
[% END %] - - + +
- [% IF devgrp_list.size %] + [% IF hgroup_list.size %]
- @@ -99,7 +99,7 @@
- [% IF devgrp_list.size %] + [% IF hgroup_list.size %]