* custom device field web display and edit * make display work; relies on T::T calling dict slot or method with same syntax * add storing port custom fields * use resultset method instead, use cf_ prefix * update Pg min ver for jsonb * allow override of position and default for port custom fields * support hidden for custom fields * update description of Objects API class * allow left and mid position for custom fields * add custom fields in csv * change port control sidebar label * fix default missing bug on backend jobs
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
package App::Netdisco::Web::PortControl;
 | 
						|
 | 
						|
use Dancer ':syntax';
 | 
						|
use Dancer::Plugin::Ajax;
 | 
						|
use Dancer::Plugin::DBIC;
 | 
						|
use Dancer::Plugin::Auth::Extensible;
 | 
						|
 | 
						|
use App::Netdisco::JobQueue qw/jq_insert jq_userlog/;
 | 
						|
 | 
						|
ajax '/ajax/portcontrol' => require_any_role [qw(admin port_control)] => sub {
 | 
						|
    send_error('No device/port/field', 400)
 | 
						|
      unless param('device') and (param('port') or param('field'));
 | 
						|
 | 
						|
    my $log = sprintf 'd:[%s] p:[%s] f:[%s]. a:[%s] v[%s]',
 | 
						|
      param('device'), (param('port') || ''), param('field'),
 | 
						|
      (param('action') || ''), (param('value') || '');
 | 
						|
 | 
						|
    my %action_map = (
 | 
						|
      'location' => 'location',
 | 
						|
      'contact'  => 'contact',
 | 
						|
      'c_port'   => 'portcontrol',
 | 
						|
      'c_name'   => 'portname',
 | 
						|
      'c_pvid'   => 'vlan',
 | 
						|
      'c_power'  => 'power',
 | 
						|
    );
 | 
						|
 | 
						|
    my $action = ($action_map{ param('field') } || param('field') || '');
 | 
						|
    my $subaction = ($action =~ m/^(?:power|portcontrol)/
 | 
						|
      ? (param('action') ."-other")
 | 
						|
      : param('value'));
 | 
						|
 | 
						|
    schema(vars->{'tenant'})->txn_do(sub {
 | 
						|
      if (param('port')) {
 | 
						|
          my $act = "$action $subaction";
 | 
						|
          $act =~ s/-other$//;
 | 
						|
          $act =~ s/^portcontrol/port/;
 | 
						|
          $act =~ s/^device_port_custom_field_/custom_field: /;
 | 
						|
 | 
						|
          schema(vars->{'tenant'})->resultset('DevicePortLog')->create({
 | 
						|
            ip => param('device'),
 | 
						|
            port => param('port'),
 | 
						|
            action => $act,
 | 
						|
            username => session('logged_in_user'),
 | 
						|
            userip => request->remote_address,
 | 
						|
            reason => (param('reason') || 'other'),
 | 
						|
            log => param('log'),
 | 
						|
          });
 | 
						|
      }
 | 
						|
 | 
						|
      jq_insert({
 | 
						|
        device => param('device'),
 | 
						|
        port => param('port'),
 | 
						|
        action => $action,
 | 
						|
        subaction => $subaction,
 | 
						|
        username => session('logged_in_user'),
 | 
						|
        userip => request->remote_address,
 | 
						|
        log => $log,
 | 
						|
      });
 | 
						|
    });
 | 
						|
 | 
						|
    content_type('application/json');
 | 
						|
    to_json({});
 | 
						|
};
 | 
						|
 | 
						|
ajax '/ajax/userlog' => require_login sub {
 | 
						|
    my @jobs = jq_userlog( session('logged_in_user') );
 | 
						|
 | 
						|
    my %status = (
 | 
						|
      'done' => [
 | 
						|
        map  {s/\[\]/<empty>/; $_}
 | 
						|
        map  { $_->log }
 | 
						|
        grep { $_->status eq 'done' }
 | 
						|
        grep { defined }
 | 
						|
        @jobs
 | 
						|
      ],
 | 
						|
      'error' => [
 | 
						|
        map  {s/\[\]/<empty>/; $_}
 | 
						|
        map  { $_->log }
 | 
						|
        grep { $_->status eq 'error' }
 | 
						|
        grep { defined }
 | 
						|
        @jobs
 | 
						|
      ],
 | 
						|
    );
 | 
						|
 | 
						|
    content_type('application/json');
 | 
						|
    to_json(\%status);
 | 
						|
};
 | 
						|
 | 
						|
true;
 |