working save/restore node positions with groups
This commit is contained in:
@@ -25,6 +25,19 @@ ajax '/ajax/data/device/netmappositions' => require_login sub {
|
||||
my $vlan = param('vlan');
|
||||
undef $vlan if (defined $vlan and $vlan !~ m/^\d+$/);
|
||||
|
||||
my $mapshow = param('mapshow');
|
||||
return if !defined $mapshow or $mapshow !~ m/^(?:all|only)$/;
|
||||
|
||||
# list of groups selected by user and passed in param
|
||||
my $devgrp = (ref [] eq ref param('devgrp') ? param('devgrp') : [param('devgrp')]);
|
||||
# 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;
|
||||
push(@hgrplist, '__ANY__') if 0 == scalar @hgrplist;
|
||||
|
||||
my %clean = ();
|
||||
POSITION: foreach my $pos (@$positions) {
|
||||
next unless ref {} eq ref $pos;
|
||||
@@ -34,24 +47,23 @@ ajax '/ajax/data/device/netmappositions' => require_login sub {
|
||||
}
|
||||
$clean{$pos->{ID}} = { x => $pos->{x}, y => $pos->{y} };
|
||||
}
|
||||
|
||||
return unless scalar keys %clean;
|
||||
|
||||
my $posrow = schema('netdisco')->resultset('NetmapPositions')->find({
|
||||
device_groups => \[ '= ?', [device_groups => [sort (List::MoreUtils::uniq( '__ANY__' )) ]] ],
|
||||
device_groups => \[ '= ?', [device_groups => [sort @hgrplist]] ],
|
||||
vlan => ($vlan || 0)});
|
||||
if ($posrow) {
|
||||
$posrow->update({ positions => to_json(\%clean) });
|
||||
}
|
||||
else {
|
||||
schema('netdisco')->resultset('NetmapPositions')->create({
|
||||
device_groups => [sort (List::MoreUtils::uniq( '__ANY__' )) ],
|
||||
device_groups => [sort @hgrplist],
|
||||
vlan => ($vlan || 0),
|
||||
positions => to_json(\%clean),
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
# colorgroups
|
||||
# dynamicsize
|
||||
|
||||
ajax '/ajax/data/device/netmap' => require_login sub {
|
||||
@@ -66,6 +78,14 @@ ajax '/ajax/data/device/netmap' => require_login sub {
|
||||
$mapshow = 'neighbors' if $mapshow !~ m/^(?:all|neighbors|only)$/;
|
||||
$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')]);
|
||||
# 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 };
|
||||
|
||||
my %id_for = ();
|
||||
my %ok_dev = ();
|
||||
my %v3data = ( nodes => {}, links => [] );
|
||||
@@ -109,7 +129,8 @@ ajax '/ajax/data/device/netmap' => require_login sub {
|
||||
# DEVICES (NODES)
|
||||
|
||||
my $posrow = schema('netdisco')->resultset('NetmapPositions')->find({
|
||||
device_groups => \[ '= ?', [device_groups => [sort (List::MoreUtils::uniq( '__ANY__' )) ]] ],
|
||||
device_groups => \[ '= ?',
|
||||
[device_groups => [$mapshow eq 'all' ? '__ANY__' : (sort @hgrplist)]] ],
|
||||
vlan => ($vlan || 0)});
|
||||
my $pos_for = from_json( $posrow ? $posrow->positions : '{}' );
|
||||
|
||||
@@ -118,13 +139,6 @@ ajax '/ajax/data/device/netmap' => require_login sub {
|
||||
'+select' => [\'row_number() over()'], '+as' => ['row_number'],
|
||||
});
|
||||
|
||||
# list of groups selected by user and passed in param
|
||||
my $devgrp = (ref [] eq ref param('devgrp') ? param('devgrp') : [param('devgrp')]);
|
||||
# list of groups validated as real host groups and named host groups
|
||||
my @hgrplist = grep { exists setting('host_group_displaynames')->{$_} }
|
||||
grep { exists setting('host_groups')->{$_} }
|
||||
grep { defined } @{ $devgrp };
|
||||
|
||||
DEVICE: while (my $device = $devices->next) {
|
||||
# if in neighbors or vlan mode then use %ok_dev to filter
|
||||
next DEVICE if (($mapshow eq 'neighbors') or $vlan)
|
||||
|
||||
@@ -70,12 +70,11 @@ $.getJSON('[% uri_for('/ajax/data/device/netmap') %]?[% my_query %]', function(m
|
||||
if (mapdata['v3']['newnodes']) {
|
||||
$.post(
|
||||
'[% uri_for('/ajax/data/device/netmappositions') %]'
|
||||
,'vlan=[% params.vlan %]&positions=' + JSON.stringify(graph.positions())
|
||||
,$("#nd_vlan-entry, #nd_devgrp-select, input[name='mapshow']").serialize()
|
||||
+ '&positions=' + JSON.stringify(graph.positions())
|
||||
);
|
||||
}
|
||||
// else {
|
||||
// graph.zoomToFit();
|
||||
// }
|
||||
// else { graph.zoomToFit() }
|
||||
|
||||
graph.inspect().main.nodes.on('mouseup.dragall', function(n) {
|
||||
graph['nd2']['dragging'] = false;
|
||||
|
||||
@@ -123,7 +123,8 @@
|
||||
// if user enters vlan but does not submit this will save wrong data
|
||||
$.post(
|
||||
'[% uri_for('/ajax/data/device/netmappositions') %]'
|
||||
,'vlan=' + $('#nd_vlan-entry').val() + '&positions=' + JSON.stringify(graph.positions())
|
||||
,$("#nd_vlan-entry, #nd_devgrp-select, input[name='mapshow']").serialize()
|
||||
+ '&positions=' + JSON.stringify(graph.positions())
|
||||
);
|
||||
});
|
||||
$('#nd_netmap-zoomtodevice').on('click', function(event) {
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
[% IF devgrp_list.size %]
|
||||
<div class="clearfix">
|
||||
<select class="nd_side-select" size="[% devgrp_list.size > 5 ? 5 : devgrp_list.size %]"
|
||||
multiple="on" name="devgrp"
|
||||
multiple="on" name="devgrp" id="nd_devgrp-select"
|
||||
rel="tooltip" data-placement="left" data-offset="5" data-title="Host Groups"/>
|
||||
[% FOREACH opt IN devgrp_list.pairs %]
|
||||
<option[% ' selected="selected"' IF devgrp_lkp.exists(opt.key) %]
|
||||
|
||||
Reference in New Issue
Block a user