Send new account and password reset emails post-commit
authorAaron Schulz <aschulz@wikimedia.org>
Thu, 18 Aug 2016 20:23:33 +0000 (13:23 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Thu, 18 Aug 2016 20:23:33 +0000 (13:23 -0700)
Change-Id: I8f1bd3e882e20fefa5ce0167202d511aa066cfe2

includes/auth/TemporaryPasswordPrimaryAuthenticationProvider.php

index 46cbab5..ed94c1a 100644 (file)
@@ -303,7 +303,11 @@ class TemporaryPasswordPrimaryAuthenticationProvider
                );
 
                if ( $sendMail ) {
-                       $this->sendPasswordResetEmail( $req );
+                       // Send email after DB commit
+                       $dbw->onTransactionIdle( function () use ( $req ) {
+                               /** @var TemporaryPasswordAuthenticationRequest $req */
+                               $this->sendPasswordResetEmail( $req );
+                       } );
                }
        }
 
@@ -370,7 +374,10 @@ class TemporaryPasswordPrimaryAuthenticationProvider
                $this->providerChangeAuthenticationData( $req );
 
                if ( $mailpassword ) {
-                       $this->sendNewAccountEmail( $user, $creator, $req->password );
+                       // Send email after DB commit
+                       wfGetDB( DB_MASTER )->onTransactionIdle( function () use ( $user, $creator, $req ) {
+                               $this->sendNewAccountEmail( $user, $creator, $req->password );
+                       } );
                }
 
                return $mailpassword ? 'byemail' : null;