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');
|
my $vlan = param('vlan');
|
||||||
undef $vlan if (defined $vlan and $vlan !~ m/^\d+$/);
|
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 = ();
|
my %clean = ();
|
||||||
POSITION: foreach my $pos (@$positions) {
|
POSITION: foreach my $pos (@$positions) {
|
||||||
next unless ref {} eq ref $pos;
|
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} };
|
$clean{$pos->{ID}} = { x => $pos->{x}, y => $pos->{y} };
|
||||||
}
|
}
|
||||||
|
|
||||||
return unless scalar keys %clean;
|
return unless scalar keys %clean;
|
||||||
|
|
||||||
my $posrow = schema('netdisco')->resultset('NetmapPositions')->find({
|
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)});
|
vlan => ($vlan || 0)});
|
||||||
if ($posrow) {
|
if ($posrow) {
|
||||||
$posrow->update({ positions => to_json(\%clean) });
|
$posrow->update({ positions => to_json(\%clean) });
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
schema('netdisco')->resultset('NetmapPositions')->create({
|
schema('netdisco')->resultset('NetmapPositions')->create({
|
||||||
device_groups => [sort (List::MoreUtils::uniq( '__ANY__' )) ],
|
device_groups => [sort @hgrplist],
|
||||||
vlan => ($vlan || 0),
|
vlan => ($vlan || 0),
|
||||||
positions => to_json(\%clean),
|
positions => to_json(\%clean),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
# colorgroups
|
|
||||||
# dynamicsize
|
# dynamicsize
|
||||||
|
|
||||||
ajax '/ajax/data/device/netmap' => require_login sub {
|
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 = 'neighbors' if $mapshow !~ m/^(?:all|neighbors|only)$/;
|
||||||
$mapshow = 'all' unless $qdev->in_storage;
|
$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 %id_for = ();
|
||||||
my %ok_dev = ();
|
my %ok_dev = ();
|
||||||
my %v3data = ( nodes => {}, links => [] );
|
my %v3data = ( nodes => {}, links => [] );
|
||||||
@@ -109,7 +129,8 @@ ajax '/ajax/data/device/netmap' => require_login sub {
|
|||||||
# DEVICES (NODES)
|
# DEVICES (NODES)
|
||||||
|
|
||||||
my $posrow = schema('netdisco')->resultset('NetmapPositions')->find({
|
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)});
|
vlan => ($vlan || 0)});
|
||||||
my $pos_for = from_json( $posrow ? $posrow->positions : '{}' );
|
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'],
|
'+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) {
|
DEVICE: while (my $device = $devices->next) {
|
||||||
# if in neighbors or vlan mode then use %ok_dev to filter
|
# if in neighbors or vlan mode then use %ok_dev to filter
|
||||||
next DEVICE if (($mapshow eq 'neighbors') or $vlan)
|
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']) {
|
if (mapdata['v3']['newnodes']) {
|
||||||
$.post(
|
$.post(
|
||||||
'[% uri_for('/ajax/data/device/netmappositions') %]'
|
'[% 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 {
|
// else { graph.zoomToFit() }
|
||||||
// graph.zoomToFit();
|
|
||||||
// }
|
|
||||||
|
|
||||||
graph.inspect().main.nodes.on('mouseup.dragall', function(n) {
|
graph.inspect().main.nodes.on('mouseup.dragall', function(n) {
|
||||||
graph['nd2']['dragging'] = false;
|
graph['nd2']['dragging'] = false;
|
||||||
|
|||||||
@@ -123,7 +123,8 @@
|
|||||||
// if user enters vlan but does not submit this will save wrong data
|
// if user enters vlan but does not submit this will save wrong data
|
||||||
$.post(
|
$.post(
|
||||||
'[% uri_for('/ajax/data/device/netmappositions') %]'
|
'[% 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) {
|
$('#nd_netmap-zoomtodevice').on('click', function(event) {
|
||||||
|
|||||||
@@ -70,7 +70,7 @@
|
|||||||
[% IF devgrp_list.size %]
|
[% IF devgrp_list.size %]
|
||||||
<div class="clearfix">
|
<div class="clearfix">
|
||||||
<select class="nd_side-select" size="[% devgrp_list.size > 5 ? 5 : devgrp_list.size %]"
|
<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"/>
|
rel="tooltip" data-placement="left" data-offset="5" data-title="Host Groups"/>
|
||||||
[% FOREACH opt IN devgrp_list.pairs %]
|
[% FOREACH opt IN devgrp_list.pairs %]
|
||||||
<option[% ' selected="selected"' IF devgrp_lkp.exists(opt.key) %]
|
<option[% ' selected="selected"' IF devgrp_lkp.exists(opt.key) %]
|
||||||
|
|||||||
Reference in New Issue
Block a user