X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fedit%2Fpart_export.cgi;h=30e4218e2e2837499b761444830153bc9d7b4c64;hp=3d867f50acac81d9203d7fb1089e1548e4d0c52d;hb=ac3296dc4d9c1c7ff3646df6496a4f49d9e07b9b;hpb=b159f42fa3f48cc2ca3b43773e7661e17d2fb072 diff --git a/httemplate/edit/part_export.cgi b/httemplate/edit/part_export.cgi index 3d867f50a..30e4218e2 100644 --- a/httemplate/edit/part_export.cgi +++ b/httemplate/edit/part_export.cgi @@ -1,140 +1,333 @@ - -<% +<% 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', ''); #} -#if ( $cgi->param('svcpart') && $cgi->param('svcpart') =~ /^(\d+)$/ ) { -# $cgi->param('svcpart', $1); -#} else { -# $cgi->param('svcpart', ''); -#} my($query) = $cgi->keywords; my $action = ''; my $part_export = ''; -my $options = {}; if ( $cgi->param('error') ) { $part_export = new FS::part_export ( { map { $_, scalar($cgi->param($_)) } fields('part_export') } ); -} - -#warn "***$query***"; -if ( $cgi->param('clone') && $cgi->param('clone') =~ /^(\d+)$/ ) { - $action = 'Add'; - my $old_part_export = qsearchs('part_export', { 'exportnum' => $1 } ); - unless ( $part_export ) { - ($part_export, $options) = $old_part_export->clone($cgi->param('svcpart')); - } -} elsif ( $cgi->param('new_with_svcpart') - && $cgi->param('new_with_svcpart') =~ /^(\d+)$/ ) { - $part_export ||= new FS::part_export ( { 'svcpart' => $1 } ); +} elsif ( $cgi->param('exportnum') ) { + $part_export = qsearchs('part_export', { 'exportnum' => $cgi->param('exportnum') } ); } elsif ( $query =~ /^(\d+)$/ ) { - $part_export ||= qsearchs('part_export', { 'exportnum' => $1 } ); + $part_export = qsearchs('part_export', { 'exportnum' => $1 } ); +} else { + $part_export = new FS::part_export; } $action ||= $part_export->exportnum ? 'Edit' : 'Add'; -my %exports = ( - 'svc_acct' => { - 'sysvshell' => { - 'desc' => - 'Batch export of /etc/passwd and /etc/shadow files (Linux/SysV)', - 'options' => {}, - }, - 'bsdshell' => { - 'desc' => - 'Batch export of /etc/passwd and /etc/master.passwd files (BSD)', - 'options' => {}, - }, -# 'nis' => { -# 'desc' => -# 'Batch export of /etc/global/passwd and /etc/global/shadow for NIS ', -# 'options' => {}, -# }, - 'bsdshell' => { - 'desc' => - 'Batch export of /etc/passwd and /etc/master.passwd files (BSD)', - 'options' => {}, - }, - 'textradius' => { - 'desc' => 'Batch export of a text /etc/raddb/users file (Livingston, Cistron)', - }, - 'sqlradius' => { - 'desc' => 'Real-time export to SQL-backed RADIUS (ICRADIUS, FreeRADIUS)', - 'options' => { - 'datasrc' => { label=>'DBI data source' }, - 'username' => { label=>'Database username' }, - 'password' => { label=>'Database password' }, - }, - 'nodomain' => 'Y', - 'notes' => 'Not specifying datasrc will export to the freeside database? (no... notes on MySQL replication, DBI::Proxy, etc., from Conf.pm && export.html etc.', - }, - 'cyrus' => { - 'desc' => 'Real-time export to Cyrus IMAP server', - }, - 'cp' => { - 'desc' => 'Real-time export to Critical Path Account Provisioning Protocol', - }, - 'infostreet' => { - 'desc' => 'Real-time export to InfoStreet streetSmartAPI', - 'options' => { - 'url' => { label=>'XML-RPC Access URL', }, - 'login' => { label=>'InfoStreet login', }, - 'password' => { label=>'InfoStreet password', }, - 'groupID' => { label=>'InfoStreet groupID', }, - }, - 'nodomain' => 'Y', - 'notes' => 'http://www.infostreet.com/ .... install Frontier::Client', - } - }, - - 'svc_domain' => {}, +#my $exports = FS::part_export::export_info($svcdb); +my $exports = FS::part_export::export_info(); - 'svc_acct_sm' => {}, - - 'svc_forward' => {}, - - 'svc_www' => {}, - -); - -my $svcdb = $part_export->part_svc->svcdb; -my %layers = map { $_ => "$_ - ". $exports{$svcdb}{$_}{desc} } - keys %{$exports{$svcdb}}; -$layers{''}=''; +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, - 'selected_layer' => $part_export->exporttype, 'options' => \%layers, 'form_name' => 'dummy', 'form_action' => 'process/part_export.cgi', - 'form_text' => [qw( exportnum svcpart machine )], -# 'form_checkbox' => [qw()], + '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); - foreach my $option ( keys %{$exports{$svcdb}->{$layer}{options}} ) { -# foreach my $option ( qw(url login password groupID ) ) { - my $optinfo = $exports{$svcdb}->{$layer}{options}{$option}; + + 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 $value = $part_export->option($option); - $html .= qq!$label!. - qq!!. - ''; + 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 .= ''; + join(',', keys %{$exports->{$layer}{options}} ). '">'; $html .= ''; + $exports->{$layer}{nodomain}. '">'; $html .= ' -<%= header("$action Export", menubar( - 'Main Menu' => popurl(2), -), ' onLoad="visualize()"') -%> - -<% if ( $cgi->param('error') ) { %> - Error: <%= $cgi->param('error') %> -

-<% } %> - - - - -<%= ntable("#cccccc",2) %> - - Service - - <%= $part_export->svcpart %> - <%= $part_export->part_svc->svc %> - - - - - Export host - - - - - - Export - <%= $widget->html %> - - - +