& /edit/elements/edit.html,
    'post_url'         => $fsurl.'edit/process/msg_template.html', 
    'name_singular'    => 'message interface',
    'table'            => 'msg_template',
    'viewall_dir'      => 'browse',
    'agent_virt'       => 1,
    'agent_null'       => 1,
    'agent_null_right' => [ 'View global templates', 'Edit global templates' ],
    'fields'           => [], # callback takes care of this
    'new_callback'     => $edit_callback,
    'edit_callback'    => $edit_callback,
    'error_callback'   => $edit_callback,
    'labels'           => \%labels,
    'no_submit'        => $no_submit,
&>
<%init>
my $curuser = $FS::CurrentUser::CurrentUser;
die "access denied"
  unless $curuser->access_right([ 'View templates', 'View global templates',
                                  'Edit templates', 'Edit global templates',
                               ]);
my %labels = (
  'msgnum'      => 'Template', # it's still a template number
  'agentnum'    => 'Agent',
  'msgname'     => 'Interface name',
  'prepare_url' => 'Prepare URL',
  'send_url'    => 'Send URL',
  'username'    => 'HTTP username',
  'password'    => 'HTTP password',
  'content'     => 'Additional POST content',
);
my $no_submit = 0;
my $edit_callback = sub {
  my ($cgi, $msg_template, $fields, $opt) = @_;
  if ( $curuser->access_right('Edit global templates') 
     || (    $curuser->access_right('Edit templates')
          && $msg_template
          && $msg_template->agentnum
          && $curuser->agentnums_href->{$msg_template->agentnum}
        )
  ) {
    @$fields = (
        { field => 'msgclass',
          type  => 'hidden',
          value => 'http',
        },
        { field => 'agentnum',
          type  => 'select-agent',
        },
        { field => 'msgname',   size=>60, required => 1 },
        { field => 'prepare_url', size=>60, required => 1 },
        { field => 'send_url',  size=>60, required => 1 },
        { field => 'username', size=>20 },
        { field => 'password', size=>20 },
        { field => 'content', type => 'textarea' },
    );
  } else { #readonly
    $no_submit = 1;
    @$fields = (
        { field => 'agentnum',
          type  => 'select-agent',
          fixed => 1,
        },
        { field => 'msgname',   type => 'fixed', },
        { field => 'prepare_url', type => 'fixed', },
        { field => 'send_url',  type => 'fixed', },
        { field => 'username',  type => 'fixed', },
        { field => 'password',  type => 'fixed', },
        { field => 'content', type => 'fixed' },
    );
  }
};
%init>