62 lines
1.4 KiB
Perl
62 lines
1.4 KiB
Perl
package App::Netdisco::Util::CustomFields;
|
||
|
||
use App::Netdisco; # a no-op except needed for testing
|
||
|
||
use Dancer ':syntax';
|
||
use Dancer::Plugin::DBIC;
|
||
|
||
use App::Netdisco::DB::ResultSet::Device;
|
||
use App::Netdisco::DB::ResultSet::DevicePort;
|
||
|
||
my @inline_device_actions = ();
|
||
my @inline_device_port_actions = ();
|
||
|
||
foreach my $config (@{ setting('custom_fields')->{'device'} || [] }) {
|
||
next unless $config->{'name'};
|
||
push @inline_device_actions, $config->{'name'};
|
||
}
|
||
|
||
foreach my $config (@{ setting('custom_fields')->{'device_port'} || [] }) {
|
||
next unless $config->{'name'};
|
||
push @inline_device_port_actions, $config->{'name'};
|
||
}
|
||
|
||
{
|
||
package App::Netdisco::DB::ResultSet::Device;
|
||
|
||
sub with_custom_fields {
|
||
my ($rs, $cond, $attrs) = @_;
|
||
|
||
return $rs
|
||
->search_rs($cond, $attrs)
|
||
->search({},
|
||
{ '+columns' => {
|
||
map {( ('cf_'. $_) => \[ 'me.custom_fields ->> ?' => $_ ] )}
|
||
@inline_device_actions
|
||
}});
|
||
}
|
||
}
|
||
|
||
{
|
||
package App::Netdisco::DB::ResultSet::DevicePort;
|
||
|
||
sub with_custom_fields {
|
||
my ($rs, $cond, $attrs) = @_;
|
||
|
||
return $rs
|
||
->search_rs($cond, $attrs)
|
||
->search({},
|
||
{ '+columns' => {
|
||
map {( ('cf_'. $_) => \[ 'me.custom_fields ->> ?' => $_ ] )}
|
||
@inline_device_port_actions
|
||
}});
|
||
}
|
||
}
|
||
|
||
set('_inline_actions' => [
|
||
map {'cf_' . $_} (@inline_device_actions, @inline_device_port_actions)
|
||
]);
|
||
|
||
true;
|
||
|