[Rt-commit] rtir branch 5.0/atomic-changes-on-edit-page created. 5.0.1-60-ga3df4d9b
BPS Git Server
git at git.bestpractical.com
Thu Feb 17 20:49:55 UTC 2022
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "rtir".
The branch, 5.0/atomic-changes-on-edit-page has been created
at a3df4d9bbebe0aac6551d38cd9cab7abb8c70270 (commit)
- Log -----------------------------------------------------------------
commit a3df4d9bbebe0aac6551d38cd9cab7abb8c70270
Author: sunnavy <sunnavy at bestpractical.com>
Date: Fri Feb 18 03:24:48 2022 +0800
Make ticket updates atomic on edit page
This is consistent with RT, besides the atomic benefit, this also tweaks
the run order of batch scrips, so they can run after all other changes,
which is useful to make some final updates. E.g. a batch scrip can set a
custom field on owner change without worrying about it getting reset by
empty inputs.
diff --git a/html/RTIR/Edit.html b/html/RTIR/Edit.html
index 4c8e5324..6fe3cb5b 100644
--- a/html/RTIR/Edit.html
+++ b/html/RTIR/Edit.html
@@ -254,44 +254,48 @@ if ( $SaveChanges ) {
);
}
-# XXX: process even if checks failed as EditPeople doesn't preserve state
if ( $SaveChanges && !$skip_update && !$OnlySearchForPeople ) {
-
- # XXX: ProcessTicketWatchers doesn't like WatcherTypeEmailX with
- # empty WatcherAddressEmailX
- delete $ARGS{"WatcherTypeEmail$_"} foreach
- grep !$ARGS{"WatcherAddressEmail$_"} && $ARGS{"WatcherTypeEmail$_"},
- 1..3
- ;
-
- push @results, ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS );
-}
-
-if ( $SaveChanges && !$skip_update && !$checks_failure && !$OnlySearchForPeople ) {
- my $strict_acl = RT->Config->Set( StrictLinkACL => 0 );
- push @results, ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS );
- RT->Config->Set( StrictLinkACL => $strict_acl );
-
- push @results, ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS );
-
- push @results, ProcessUpdateMessage( TicketObj => $Ticket, ARGSRef=>\%ARGS );
- push @results, ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS );
-
- push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS );
-
- $m->callback(
- CallbackName => 'AfterProcessing',
- ARGSRef => \%ARGS, Ticket => $Ticket, results => \@results,
- );
-
- MaybeRedirectForResults(
- Actions => \@results,
- Path => RT->Config->Get('DisplayAfterEdit', $session{'CurrentUser'})
- ? RT::IR->HREFTo("Display.html", IncludeWebPath => 0)
- : RT::IR->HREFTo("Edit.html", IncludeWebPath => 0)
- ,
- Arguments => { id => $id },
+ $Ticket->Atomic(
+ sub {
+ # XXX: process even if checks failed as EditPeople doesn't preserve state
+ # XXX: ProcessTicketWatchers doesn't like WatcherTypeEmailX with
+ # empty WatcherAddressEmailX
+ delete $ARGS{"WatcherTypeEmail$_"} foreach
+ grep !$ARGS{"WatcherAddressEmail$_"} && $ARGS{"WatcherTypeEmail$_"},
+ 1 .. 3;
+
+ push @results, ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS );
+
+ if ( !$checks_failure ) {
+ my $strict_acl = RT->Config->Set( StrictLinkACL => 0 );
+ push @results, ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS );
+ RT->Config->Set( StrictLinkACL => $strict_acl );
+
+ push @results, ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS );
+
+ push @results, ProcessUpdateMessage( TicketObj => $Ticket, ARGSRef => \%ARGS );
+ push @results, ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS );
+
+ push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS );
+
+ $m->callback(
+ CallbackName => 'AfterProcessing',
+ ARGSRef => \%ARGS,
+ Ticket => $Ticket,
+ results => \@results,
+ );
+ }
+ }
);
+ if ( !$checks_failure ) {
+ MaybeRedirectForResults(
+ Actions => \@results,
+ Path => RT->Config->Get( 'DisplayAfterEdit', $session{'CurrentUser'} )
+ ? RT::IR->HREFTo( "Display.html", IncludeWebPath => 0 )
+ : RT::IR->HREFTo( "Edit.html", IncludeWebPath => 0 ),
+ Arguments => { id => $id },
+ );
+ }
}
my $name = RT::IR::TicketType( Ticket => $Ticket );
-----------------------------------------------------------------------
hooks/post-receive
--
rtir
More information about the rt-commit
mailing list