<% include('/elements/header.html', "$action Export", '', ' onLoad="visualize()"') %> <% include('/elements/error.html') %>
<% ntable("#cccccc",2) %> Export name Export <% $widget->html %> <% include('/elements/footer.html') %> <%init> die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); #if ( $cgi->param('clone') && $cgi->param('clone') =~ /^(\d+)$/ ) { # $cgi->param('clone', $1); #} else { # $cgi->param('clone', ''); #} my($query) = $cgi->keywords; my $action = ''; my $part_export = ''; if ( $cgi->param('error') ) { $part_export = new FS::part_export ( { map { $_, scalar($cgi->param($_)) } fields('part_export') } ); } elsif ( $cgi->param('exportnum') ) { $part_export = qsearchs('part_export', { 'exportnum' => $cgi->param('exportnum') } ); } elsif ( $query =~ /^(\d+)$/ ) { $part_export = qsearchs('part_export', { 'exportnum' => $1 } ); } else { $part_export = new FS::part_export; } $action ||= $part_export->exportnum ? 'Edit' : 'Add'; #my $exports = FS::part_export::export_info($svcdb); my $exports = FS::part_export::export_info(); tie my %layers, 'Tie::IxHash', '' => '', map { $_ => "$_ - ". $exports->{$_}{desc} } sort { $a cmp $b } keys %$exports; ; my $widget = new HTML::Widgets::SelectLayers( 'selected_layer' => $part_export->exporttype, 'options' => \%layers, 'form_name' => 'dummy', 'form_action' => 'process/part_export.cgi', 'form_text' => [qw( exportnum exportname )], 'html_between' => "\n", 'layer_callback' => sub { my $layer = shift; # create 'config_element' to generate the whole layer with a Mason component if ( my $include = $exports->{$layer}{config_element} ) { # might need to adjust the scope of this at some point return $m->scomp($include, part_export => $part_export, layer => $layer, export_info => $exports->{$layer} ); } my $html = qq!!. ntable("#cccccc",2); if ( $layer ) { $html .= 'Description'. $exports->{$layer}{notes}. ''; if ( $exports->{$layer}{no_machine} ) { $html .= ''. ''; } else { $html .= 'Hostname or IP'; my $machine = $part_export->machine; if ( $exports->{$layer}{svc_machine} ) { my( $N_CHK, $Y_CHK) = ( 'CHECKED', '' ); my( $machine_DISABLED, $pem_DISABLED) = ( '', 'DISABLED' ); my @part_export_machine; my $default_machine = ''; if ( $cgi->param('svc_machine') eq 'Y' || $machine eq '_SVC_MACHINE' ) { $Y_CHK = 'CHECKED'; $N_CHK = 'CHECKED'; $machine_DISABLED = 'DISABLED'; $pem_DISABLED = ''; $machine = ''; @part_export_machine = $cgi->param('part_export_machine'); if (!@part_export_machine) { @part_export_machine = map $_->machine, grep ! $_->disabled, $part_export->part_export_machine; } $default_machine = $cgi->param('default_machine_name') || $part_export->default_export_machine; } my $oc = qq(onChange="svc_machine_changed(this, '$layer')"); $html .= qq[
Selected in each customer service from these choices:
Default: ' } else { $html .= qq(). ''; } $html .= ""; } } foreach my $option ( keys %{$exports->{$layer}{options}} ) { my $optinfo = $exports->{$layer}{options}{$option}; die "Retreived non-ref export info option from $layer export: $optinfo" unless ref($optinfo); my $label = $optinfo->{label}; my $type = defined($optinfo->{type}) ? $optinfo->{type} : 'text'; my $value = $cgi->param($option) || ( $part_export->exportnum && $part_export->option($option) ) || ( (exists $optinfo->{default} && !$part_export->exportnum) ? $optinfo->{default} : '' ); #handle these with post_config_element next if $type eq 'custom'; if ( $type eq 'title' ) { $html .= qq!! . $label . ''; next; } # 'freeform': disables table formatting of options. Instead, each # option can define "before" and "after" strings which are inserted # around the selector. my $freeform = $optinfo->{freeform}; if ( $freeform ) { $html .= $optinfo->{before} || ''; } else { $html .= qq!$label!; } if ( $type eq 'select' ) { # 'select' options can specify options one of two ways: # the "preferred" way: # options: arrayref of allowed option values # option_labels: hashref of option value => label # OR the weird and semi-deprecated way: # option_values: coderef to return a list of allowed option values # option_label: coderef to take an option value and return its label my $size = defined($optinfo->{size}) ? " SIZE=" . $optinfo->{size} : ''; my $multi = ($optinfo->{multi} || $optinfo->{multiple}) ? ' MULTIPLE' : ''; $html .= qq!'; } elsif ( $type eq 'textarea' ) { $html .= qq!'; } elsif ( $type eq 'text' ) { $html .= qq!'; } elsif ( $type eq 'checkbox' ) { $html .= qq!{after} || ''; } else { $html .= ''; } } if ( $exports->{$layer}{nas} and qsearch('nas',{}) ) { # show NAS checkboxes $html .= 'Export RADIUS clients'; $html .= include('/elements/checkboxes-table.html', 'source_obj' => $part_export, 'link_table' => 'export_nas', 'target_table' => 'nas', #hashref => {}, 'name_callback' => sub { $_[0]->shortname . ' (' . $_[0]->nasname . ')', }, 'default' => 'yes', 'target_link' => $p.'edit/nas.html?', ); $html .= ''; } $html .= 'Do not suspend services' . 'no_suspend eq 'Y'; $html .= '>'; foreach my $script ( keys %{$exports->{$layer}{scripts}} ) { $html .= '' . include('/elements/progress-init.html', $part_export->exporttype, [ $script.'_exportnum' ], rooturl().'view/svc_export/run_script.cgi', { 'error_url' => rooturl().$exports->{$layer}{scripts}{$script}->{error_url}."exportnum=".$part_export->{Hash}->{exportnum}, 'reload_with_error' => '1', 'url' => rooturl().'edit/part_export.cgi?'.$part_export->{Hash}->{exportnum}, 'message' => $exports->{$layer}{scripts}{$script}->{success_message}, }, $script, ) . ' '.$exports->{$layer}{scripts}{$script}->{html_label}.''; } $html .= ''; # false laziness with config_element above # create 'post_config_element' to generate the whole layer with a Mason component if ( my $include = $exports->{$layer}{post_config_element} ) { # might need to adjust the scope of this at some point $html .= $m->scomp($include, part_export => $part_export, layer => $layer, export_info => $exports->{$layer} ); } $html .= ''; $html .= ''; $html .= ''; $html; }, );