& elements/edit.html,
'post_url' => popurl(1).'process/upload_target.html',
'name' => 'Upload target',
'table' => 'upload_target',
'viewall_url' => "${p}browse/upload_target.html",
'labels' => { targetnum => 'Target',
protocol => 'Protocol',
handling => 'Special handling',
},
'fields' => [
{ field => 'protocol',
type => 'selectlayers',
options => [ '', 'sftp', 'ftp', 'email' ],
labels => { '' => '',
'email' => 'Email',
'sftp' => 'SFTP',
'ftp' => 'FTP',
},
layer_fields => \%protocol_fields,
layer_values_callback => \&values_callback,
},
{ field => 'handling',
type => 'select',
options => [ FS::upload_target->handling_types ],
},
],
'menubar' => \@menubar,
'edit_callback' => $edit_callback,
&>
<%init>
my $curuser = $FS::CurrentUser::CurrentUser;
die "access denied"
unless $curuser->access_right('Configuration');
my @menubar = ('View all FTP targets' => $p.'browse/upload_target.html');
my $edit_callback = sub {
my ($cgi, $object) = @_;
if ( $object->targetnum ) {
push @menubar, 'Delete this target',
$p.'misc/delete-upload_target.html?'.$object->targetnum;
}
};
my %protocol_fields = (
'' => [],
'sftp' => [
'hostname' => { label => 'Server' },
'username' => { label => 'Username' },
'password' => { label => 'Password' },
'port' => { label => 'Port', size => 8 },
'path' => { label => 'Path', size => 30 },
],
'email' => [
'username' => { label => 'To:' },
'hostname' => { label => '@' },
'subject' => { label => 'Subject:' },
],
);
$protocol_fields{'ftp'} = [ @{ $protocol_fields{'sftp'} } ];
foreach my $k (keys %protocol_fields) {
# disambiguate the field names
foreach (@{ $protocol_fields{$k} }) {
$_ = $k.'_'.$_ unless ref $_;
}
}
sub values_callback {
my ($cgi, $object) = @_;
my $layer_values;
# really simple, the interpretation of the fields is the same for all
# three layers
foreach my $l (qw(email ftp sftp)) {
$layer_values->{$l} = { map { $l.'_'.$_ => ($cgi->param($l.'_'.$_) ||
$object->get($_) ) }
$object->fields };
}
$layer_values;
}
%init>