X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fedit%2Fprocess%2Fpart_export.cgi;h=bcb9c0df1d0b0151afea30994da4d0f787d7901c;hb=a72a10f754f7465121d6137bb3dcee0a21ea6443;hp=0dd9eabaef613d29aa46b92e215f73c0b6e4a2f6;hpb=3ce7691203a7737406bf2d4442f7fd84b81f847e;p=freeside.git diff --git a/httemplate/edit/process/part_export.cgi b/httemplate/edit/process/part_export.cgi index 0dd9eabae..bcb9c0df1 100644 --- a/httemplate/edit/process/part_export.cgi +++ b/httemplate/edit/process/part_export.cgi @@ -1,40 +1,82 @@ -% -% -%my $exportnum = $cgi->param('exportnum'); -% -%my $old = qsearchs('part_export', { 'exportnum'=>$exportnum } ) if $exportnum; -% -%#fixup options -%#warn join('-', split(',',$cgi->param('options'))); -%my %options = map { -% my $value = $cgi->param($_); -% $value =~ s/\r\n/\n/g; #browsers? (textarea) -% $_ => $value; -%} split(',', $cgi->param('options')); -% -%my $new = new FS::part_export ( { -% map { -% $_, scalar($cgi->param($_)); -% } fields('part_export') -%} ); -% -%my $error; -%if ( $exportnum ) { -% #warn $old; -% #warn $exportnum; -% #warn $new->machine; -% $error = $new->replace($old,\%options); -%} else { -% $error = $new->insert(\%options); -%# $exportnum = $new->exportnum; -%} -% %if ( $error ) { % $cgi->param('error', $error ); -% print $cgi->redirect(popurl(2). "part_export.cgi?". $cgi->query_string ); +<% $cgi->redirect(popurl(2). "part_export.cgi?". $cgi->query_string ) %> %} else { -% print $cgi->redirect(popurl(3). "browse/part_export.cgi"); +<% $cgi->redirect(popurl(3). "browse/part_export.cgi") %> %} -% -% +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); + +my $exportnum = $cgi->param('exportnum'); + +my $old = qsearchs('part_export', { 'exportnum'=>$exportnum } ) if $exportnum; + +my %vars = $cgi->Vars; +#fixup options +#warn join('-', split(',',$cgi->param('options'))); +my %options = map { + my $value = $vars{$_}; + $value =~ s/\0/ /g; # deal with multivalued options + $value =~ s/\r\n/\n/g; #browsers? (textarea) + $_ => $value; +} split(',', $cgi->param('options')); + +# deal with multiline options +# %vars should never contain incomplete rows, but just in case it does, +# we make a list of all the row indices that contain values, and +# then write a line in each option for each row, even if it's empty. +# This ensures that all values with the same row index line up. +my %optionrows; +foreach my $option (split(',', $cgi->param('multi_options'))) { + $optionrows{$option} = {}; + my %values; # bear with me + for (keys %vars) { + /^$option(\d+)/ or next; + $optionrows{$option}{$1} = $vars{$option.$1}; + $optionrows{_ALL_}{$1} = 1 if length($vars{$option.$1}); + } +} +foreach my $option (split(',', $cgi->param('multi_options'))) { + my $value = ''; + foreach my $row (sort keys %{$optionrows{_ALL_}}) { + $value .= ($optionrows{$option}{$row} || '') . "\n"; + } + chomp($value); + $options{$option} = $value; +} + +my $new = new FS::part_export ( { + map { + $_, scalar($cgi->param($_)); + } fields('part_export') +} ); + +if ( $cgi->param('svc_machine') eq 'Y' ) { + $new->machine('_SVC_MACHINE'); + $new->part_export_machine_textarea( $cgi->param('part_export_machine') ); +} + +my $error; +if ( $exportnum ) { + #warn $old; + #warn $exportnum; + #warn $new->machine; + $error = $new->replace($old,\%options); +} else { + $error = $new->insert(\%options); +# $exportnum = $new->exportnum; +} + +my $info = FS::part_export::export_info()->{$new->exporttype}; +if ( $info->{nas} ) { + my @nasnums = map { /^nasnum(\d+)$/ ? $1 : () } keys %{ $cgi->Vars }; + $error ||= $new->process_m2m( + link_table => 'export_nas', + target_table => 'nas', + params => \@nasnums + ); +} +