[#4] Allow comment on device port in the log, for any user
This commit is contained in:
		@@ -160,6 +160,16 @@ __PACKAGE__->has_many( active_nodes_with_age => 'App::Netdisco::DB::Result::Virt
 | 
			
		||||
    cascade_copy => 0, cascade_update => 0, cascade_delete => 0 },
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
=head2 logs
 | 
			
		||||
 | 
			
		||||
Returns the set of C<device_port_log> entries associated with this Port.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 | 
			
		||||
__PACKAGE__->has_many( logs => 'App::Netdisco::DB::Result::DevicePortLog',
 | 
			
		||||
  { 'foreign.ip' => 'self.ip', 'foreign.port' => 'self.port' },
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
=head2 power
 | 
			
		||||
 | 
			
		||||
Returns a row from the C<device_port_power> table if one refers to this
 | 
			
		||||
@@ -345,4 +355,16 @@ Returns the C<mac> column instantiated into a L<NetAddr::MAC> object.
 | 
			
		||||
 | 
			
		||||
sub net_mac { return NetAddr::MAC->new(mac => (shift)->mac) }
 | 
			
		||||
 | 
			
		||||
=head2 last_comment
 | 
			
		||||
 | 
			
		||||
Returns the most recent comment from the logs for this device port.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 | 
			
		||||
sub last_comment {
 | 
			
		||||
  my $row = (shift)->logs->search(undef,
 | 
			
		||||
    { order_by => { -desc => 'creation' }, rows => 1 })->first;
 | 
			
		||||
  return ($row ? $row->log : '');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 
 | 
			
		||||
@@ -157,6 +157,7 @@ sub delete {
 | 
			
		||||
    DevicePortVlan
 | 
			
		||||
    DevicePortWireless
 | 
			
		||||
    DevicePortSsid
 | 
			
		||||
    DevicePortLog
 | 
			
		||||
  /) {
 | 
			
		||||
      $schema->resultset($set)->search(
 | 
			
		||||
        { ip => { '-in' => $ports->as_query }},
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@ hook 'before' => sub {
 | 
			
		||||
 | 
			
		||||
  my @default_port_columns_right = (
 | 
			
		||||
    { name => 'c_descr',       label => 'Description',       default => ''   },
 | 
			
		||||
    { name => 'c_comment',     label => 'Last Comment',      default => ''   },
 | 
			
		||||
    { name => 'c_type',        label => 'Type',              default => ''   },
 | 
			
		||||
    { name => 'c_duplex',      label => 'Duplex',            default => ''   },
 | 
			
		||||
    { name => 'c_lastchange',  label => 'Last Change',       default => ''   },
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,32 @@ register_report({
 | 
			
		||||
  hidden => true,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
sub _sanity_ok {
 | 
			
		||||
    return 0 unless
 | 
			
		||||
      param('ip') =~ m/^[[:print:]]+$/
 | 
			
		||||
      and param('port') =~ m/^[[:print:]]+$/
 | 
			
		||||
      and param('log') =~ m/^[[:print:]]+$/;
 | 
			
		||||
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ajax '/ajax/control/report/portlog/add' => require_login sub {
 | 
			
		||||
    send_error('Bad Request', 400) unless _sanity_ok();
 | 
			
		||||
 | 
			
		||||
    schema('netdisco')->txn_do(sub {
 | 
			
		||||
      my $user = schema('netdisco')->resultset('DevicePortLog')
 | 
			
		||||
        ->create({
 | 
			
		||||
          ip => param('ip'),
 | 
			
		||||
          port => param('port'),
 | 
			
		||||
          reason => 'other',
 | 
			
		||||
          log => param('log'),
 | 
			
		||||
          username => session('logged_in_user'),
 | 
			
		||||
          userip => request->remote_address,
 | 
			
		||||
          action => 'comment',
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
ajax '/ajax/content/report/portlog' => require_role port_control => sub {
 | 
			
		||||
    my $device = param('q');
 | 
			
		||||
    my $port = param('f');
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user