#!/usr/local/bin/perl
#
# postfix-module by Guillaume Cottenceau <gc@mandrakesoft.com>,
# for webmin by Jamie Cameron
# 
# Edit a mapping

require './postfix-lib.pl';    ## no critic
use strict;
use warnings;
our ($nfunc, $vfunc, $virtual_maps, %in, %text);
&ReadParse();

&ui_print_header(undef, $text{'edit_map_title'}, "");

my $new_one = 0;
my $num;
## added to split main_parameter:sub_parameter
my ($mainparm,$subparm)=split /:/,$in{'map_name'};

if (!exists($in{'num'}))
{
    $num = &init_new_mapping($in{'map_name'});
    $new_one = 1;
}
else
{
    $num = $in{'num'};
}

my $maps = &get_maps($in{'map_name'});
my %map;

foreach my $trans (@{$maps})
{
    if ($trans->{'number'} == $num) { %map = %{$trans}; }
}    

print &ui_form_start("save_map.cgi");
print &ui_hidden("num", $num),"\n";
print &ui_hidden("map_name", $in{'map_name'}),"\n";
print &ui_table_start($text{'edit_map_title'}, "width=100%", 2);

# Show map comment
if (&can_map_comments($in{'map_name'})) {
	print &ui_table_row($text{'mapping_cmt'},
			    &ui_textbox("cmt", $map{'cmt'}, 50));
	}

##$nfunc = "edit_name_".$in{'map_name'};
## modified to capture subparameters
$nfunc="edit_name_"; $nfunc.=($subparm)? $subparm : $mainparm;
if (defined(&$nfunc)) {
	print &$nfunc(\%map);
	}
else {
	print &ui_table_row($text{'mapping_name'},
			    &ui_textbox("name", $map{'name'}, 40));
	}

##$vfunc = "edit_value_".$in{'map_name'};
## modified to capture subparameters
$vfunc="edit_value_"; $vfunc.=($subparm)? $subparm : $mainparm;
if (defined(&$vfunc)) {
	print &$vfunc(\%map);
	}
else {
	print &ui_table_row($text{'mapping_value'},
			    &ui_textbox("value", $map{'value'}, 40));
	}

print &ui_table_end();
print &ui_form_end([ [ "save", $text{'map_save'} ],
	     $new_one ? ( ) : ( [ "delete", $text{'delete_map'} ] )
	     ]);

if ($in{'map_name'} eq $virtual_maps) {
	&ui_print_footer("virtual.cgi", $text{'virtual_return'});
	}
elsif ($in{'map_name'} eq 'canonical_maps') {
	&ui_print_footer($ENV{'HTTP_REFERER'},
			 $text{'canonical_return'});
	}
elsif ($in{'map_name'} eq 'sender_canonical_maps') {
	&ui_print_footer($ENV{'HTTP_REFERER'},
			 $text{'canonical_return_sender'});
	}
elsif ($in{'map_name'} eq 'recipient_canonical_maps') {
	&ui_print_footer($ENV{'HTTP_REFERER'},
			 $text{'canonical_return_recipient'});
	}
elsif ($in{'map_name'} eq 'transport_maps') {
	&ui_print_footer("transport.cgi", $text{'transport_return'});
	}
elsif ($in{'map_name'} eq 'relocated_maps') {
	&ui_print_footer("relocated.cgi", $text{'relocated_return'});
	}
elsif ($in{'map_name'} eq 'header_checks') {
	&ui_print_footer("header.cgi", $text{'header_return'});
	}
elsif ($in{'map_name'} eq 'body_checks') {
	&ui_print_footer("body.cgi", $text{'body_return'});
	}
elsif ($in{'map_name'} =~ /^smtpd_client_restrictions:/) {
	&ui_print_footer("client.cgi", $text{'client_return'});
	}
else {
	&ui_print_footer("", $text{'index_return'});
	}

