summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2015-12-30 18:51:09 -0800
committerMark Wells <mark@freeside.biz>2015-12-30 18:52:11 -0800
commitc565f9d78ae95bf3a4dc051e3bfbd356d9f4ff38 (patch)
tree9358435232a6d61372f6c362198cbd8bc5c93794
parent8d41520e7b5f1b54ae321d8c2de25249a2856833 (diff)
add option for exports to avoid suspending services, #20739
-rw-r--r--FS/FS/Schema.pm2
-rw-r--r--FS/FS/part_export.pm7
-rw-r--r--FS/FS/svc_Common.pm3
-rwxr-xr-xhttemplate/browse/part_export.cgi5
-rw-r--r--httemplate/edit/part_export.cgi5
5 files changed, 22 insertions, 0 deletions
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index a10b5c0..56bdfc3 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -4487,6 +4487,8 @@ sub tables_hashref {
'exporttype', 'varchar', '', $char_d, '', '',
'nodomain', 'char', 'NULL', 1, '', '',
'default_machine','int', 'NULL', '', '', '',
+ 'no_suspend', 'char', 'NULL', 1, '', '',
+ # could also have 'no_insert', 'no_replace', etc.
],
'primary_key' => 'exportnum',
'unique' => [],
diff --git a/FS/FS/part_export.pm b/FS/FS/part_export.pm
index f3d9774..d6357fd 100644
--- a/FS/FS/part_export.pm
+++ b/FS/FS/part_export.pm
@@ -58,6 +58,12 @@ fields are currently supported:
=item nodomain - blank or "Y" : usernames are exported to this service with no domain
+=item default_machine - For exports that require a machine to be selected for
+each service (see L<FS::svc_export_machine>), the one to use as the default.
+
+=item no_suspend - Don't export service suspensions. In the future there may
+be "no_*" options for the other service actions.
+
=back
=head1 METHODS
@@ -337,6 +343,7 @@ sub check {
|| $self->ut_textn('exportname')
|| $self->ut_domainn('machine')
|| $self->ut_alpha('exporttype')
+ || $self->ut_flag('no_suspend')
;
if ( $self->machine eq '_SVC_MACHINE' ) {
diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm
index 35415a2..73658f6 100644
--- a/FS/FS/svc_Common.pm
+++ b/FS/FS/svc_Common.pm
@@ -1154,7 +1154,9 @@ Runs the provided export hook (i.e. "suspend", "unsuspend") for this service.
sub export {
my( $self, $method ) = ( shift, shift );
+ # $method must start with export_, $action must be the part after that
$method = "export_$method" unless $method =~ /^export_/;
+ my ($action) = $method =~ /^export_(\w+)/;
local $SIG{HUP} = 'IGNORE';
local $SIG{INT} = 'IGNORE';
@@ -1171,6 +1173,7 @@ sub export {
unless ( $noexport_hack ) {
foreach my $part_export ( $self->cust_svc->part_svc->part_export ) {
next unless $part_export->can($method);
+ next if $part_export->get("no_$action"); # currently only 'no_suspend'
my $error = $part_export->$method($self, @_);
if ( $error ) {
$dbh->rollback if $oldAutoCommit;
diff --git a/httemplate/browse/part_export.cgi b/httemplate/browse/part_export.cgi
index af988d3..bbb723d 100755
--- a/httemplate/browse/part_export.cgi
+++ b/httemplate/browse/part_export.cgi
@@ -38,6 +38,11 @@ function part_export_areyousure(href) {
<TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
<% $part_export->label_html %>
(<A HREF="<% $p %>edit/part_export.cgi?<% $part_export->exportnum %>">edit</A>&nbsp;|&nbsp;<A HREF="javascript:part_export_areyousure('<% $p %>misc/delete-part_export.cgi?<% $part_export->exportnum %>')">delete</A>)
+% if ( $part_export->no_suspend ) {
+ <P STYLE="position: absolute">
+ This export will not suspend services.
+ </P>
+% }
% if ( my @actions = $part_export->actions ) {
<P STYLE="position: absolute">
Management:
diff --git a/httemplate/edit/part_export.cgi b/httemplate/edit/part_export.cgi
index 3820931..5411feb 100644
--- a/httemplate/edit/part_export.cgi
+++ b/httemplate/edit/part_export.cgi
@@ -285,6 +285,11 @@ my $widget = new HTML::Widgets::SelectLayers(
$html .= '</TD></TR>';
}
+ $html .= '<TR><TD ALIGN="right">Do not suspend services</TD>' .
+ '<TD><INPUT TYPE="checkbox" NAME="no_suspend" VALUE="Y"';
+ $html .= ' CHECKED' if $part_export->no_suspend eq 'Y';
+ $html .= '></TD></TR>';
+
$html .= '</TABLE>';
# false laziness with config_element above