'clear_on_error' => [ 'form_field1', 'form_field2', ... ],
+ ## message will be returned to redirect page as cookie and read by header.html
+ ## append =status, =warning, =error to change color of message box. Default is status
+ ## status is green, warning is yellow, and error is red
+ 'message' => [ 'My message=status', 'Please restart=warning' ],
+
#pass an arrayref of hashrefs for multiple m2ms or m2names
#be certain you incorporate m2m_Common if you see error: param
'precheck_callback' => sub { my( $cgi ) = @_; },
#after the new object is created
+ #return an error string or empty for no error
'post_new_object_callback' => sub { my( $cgi, $object ) = @_; },
+ #run right before replacing (not run for inserts)
+ 'edit_callback' => sub { my( $new, $old ) = @_; },
+
#after everything's inserted
'noerror_callback' => sub { my( $cgi, $object ) = @_; },
# for use with tables that are FS::option_Common (among other things)
'args_callback' => sub { my( $cgi, $object ) = @_; },
+ # if no errors after package insert or replace will update services attached to package.
+ 'update_svc' => sub { my( $cgi, $object ) = @_; },
+
'debug' => 1, #turns on debugging output
#agent virtualization
</%doc>
%if ( $error ) {
+% ## flatten any array refs so multi selects are sticky on error
+% for my $param ($cgi->param) {
+% if (ref($cgi->param($param)) eq "ARRAY") {
+% $cgi->param($param, (join ",", @{$cgi->param($param)}));
+% }
+% }
%
% #my $query = $m->scomp('/elements/create_uri_query');
% #$cgi->redirect("$url?$query");
</HTML>
%} else {
-<% $cgi->redirect($redirect) %>
+% my $cookie;
+% $cookie = CGI::Cookie->new(
+% -name => 'freeside_status',
+% -value => $messages,
+% -expires => '+5m',
+% ) if $messages;
+ <% $cgi->redirect( -uri => $redirect,
+ -cookie => $cookie,
+ )
+ %>
%}
<%init>
}
if ( $opt{'post_new_object_callback'} ) {
- &{ $opt{'post_new_object_callback'} }( $cgi, $new );
+ $error ||= &{ $opt{'post_new_object_callback'} }( $cgi, $new );
}
if ( $opt{'agent_virt'} ) {
}
}
+ if ( !$error and $opt{'update_svc'} ) {
+ my @args = ();
+ @args = &{ $opt{'args_callback'} }( $cgi, $new ) if $opt{'args_callback'};
+ $error = &{ $opt{'update_svc'} }( $cgi, $new, @args );
+ }
+
if ( $error ) {
- $cgi->param('error', $error);
+ if ($opt{'update_svc'}) {
+ my $encoded_error = encode_base64($error);
+ $cgi->param('error_link', $encoded_error);
+ } else {
+ $cgi->param('error', $error);
+ }
+
if ( $opt{'clear_on_error'} && scalar(@{$opt{'clear_on_error'}}) ) {
foreach my $field (@{$opt{'clear_on_error'}}) {
$cgi->param($field, '')
}
+if ($class eq "FS::tower" && !$error) {
+ foreach my $part_svc_broadband_export ( FS::tower_sector->part_export_svc_broadband ) {
+ if ($part_svc_broadband_export and $part_svc_broadband_export->can('export_tower_sector')) {
+ my $export_tower = $part_svc_broadband_export->export_tower_sector($new);
+ $error = $export_tower->{'error'} if $export_tower;
+ }
+ }
+ if ($error) {
+ my $encoded_error = encode_base64($error);
+ $cgi->param('error_link', $encoded_error) if $error;
+
+ }
+}
+
# set up redirect URLs
my $redirect;
}
}
+my $messages = $opt{'message'} ? $opt{'message'} : '';
+
my $edit_ext = $opt{'edit_ext'} || 'html';
my $error_redirect = $opt{'error_redirect'}
|| popurl(2)."$table.$edit_ext";