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;
 | ||
| 
 |