set(
'connected_properties'
=> [
sort
{
$a
->{idx} <=>
$b
->{idx} }
map
{{
name
=>
$_
, %{ setting(
'sidebar_defaults'
)->{
'device_ports'
}->{
$_
} } }}
grep
{
$_
=~ m/^n_/ }
keys
%{ setting(
'sidebar_defaults'
)->{
'device_ports'
} }
]);
set(
'port_display_properties'
=> [
sort
{
$a
->{idx} <=>
$b
->{idx} }
map
{{
name
=>
$_
, %{ setting(
'sidebar_defaults'
)->{
'device_ports'
}->{
$_
} } }}
grep
{
$_
=~ m/^p_/ }
keys
%{ setting(
'sidebar_defaults'
)->{
'device_ports'
} }
]);
hook
'before_template'
=>
sub
{
my
$tokens
=
shift
;
my
$defaults
= var(
'sidebar_defaults'
)->{
'device_ports'
}
or
return
;
if
(param(
'reset'
)) {
cookie(
'nd_ports-form'
=>
''
,
expires
=>
'-1 day'
);
}
elsif
(
my
$cookie
= cookie(
'nd_ports-form'
)) {
my
$cdata
= url_params_mixed(
$cookie
);
if
(
$cdata
and (
ref
{} eq
ref
$cdata
)) {
foreach
my
$key
(
keys
%{
$defaults
}) {
$defaults
->{
$key
} =
$cdata
->{
$key
};
}
}
}
foreach
my
$opt
(
qw/hgroup lgroup/
) {
my
$p
= (
ref
[] eq
ref
param(
$opt
) ? param(
$opt
)
: (param(
$opt
) ? [param(
$opt
)] : []));
$tokens
->{
"${opt}_lkp"
} = {
map
{
$_
=> 1 }
@$p
};
}
return
if
param(
'reset'
)
or not var(
'sidebar_key'
) or (var(
'sidebar_key'
) ne
'device_ports'
);
my
$uri
= URI->new();
foreach
my
$key
(
keys
%{
$defaults
}) {
$uri
->query_param(
$key
=> param(
$key
));
}
cookie(
'nd_ports-form'
=>
$uri
->query(),
expires
=>
'365 days'
);
};
get
'/device'
=> require_login
sub
{
my
$q
= param(
'q'
);
my
$devices
= schema(vars->{
'tenant'
})->resultset(
'Device'
);
my
$dev
=
$devices
->search({
-or
=> [
\[
'host(me.ip) = ?'
=> [
bind_value
=>
$q
] ],
'me.dns'
=>
$q
,
],
});
if
(
$dev
->count == 0) {
return
redirect uri_for(
'/'
, {
nosuchdevice
=> 1,
device
=>
$q
})->path_query;
}
my
$first
=
$dev
->first;
my
$others
= (
$devices
->search({
dns
=>
$first
->dns})->count() - 1);
params->{
'tab'
} ||=
'details'
;
template
'device'
, {
netdisco_device
=>
$first
,
display_name
=> (
$others
?
$first
->ip : (
$first
->dns ||
$first
->ip)),
device_count
=> schema(vars->{
'tenant'
})->resultset(
'Device'
)->count(),
lgroup_list
=> [ schema(vars->{
'tenant'
})->resultset(
'Device'
)->get_distinct_col(
'location'
) ],
hgroup_list
=> setting(
'host_group_displaynames'
),
device
=> params->{
'tab'
},
}, {
layout
=>
'main'
};
};
true;