Merge "Rename autonym for 'no' from 'norsk bokmål' to 'norsk'"
[lhc/web/wiklou.git] / includes / deferred / MWCallableUpdate.php
1 <?php
2
3 use Wikimedia\Rdbms\IDatabase;
4
5 /**
6 * Deferrable Update for closure/callback
7 */
8 class MWCallableUpdate implements DeferrableUpdate, DeferrableCallback {
9 /** @var callable|null */
10 private $callback;
11 /** @var string */
12 private $fname;
13
14 /**
15 * @param callable $callback
16 * @param string $fname Calling method
17 * @param IDatabase|null $dbw Abort if this DB is rolled back [optional] (since 1.28)
18 */
19 public function __construct( callable $callback, $fname = 'unknown', IDatabase $dbw = null ) {
20 $this->callback = $callback;
21 $this->fname = $fname;
22
23 if ( $dbw && $dbw->trxLevel() ) {
24 $dbw->onTransactionResolution( [ $this, 'cancelOnRollback' ], $fname );
25 }
26 }
27
28 public function doUpdate() {
29 if ( $this->callback ) {
30 call_user_func( $this->callback );
31 }
32 }
33
34 public function cancelOnRollback( $trigger ) {
35 if ( $trigger === IDatabase::TRIGGER_ROLLBACK ) {
36 $this->callback = null;
37 }
38 }
39
40 public function getOrigin() {
41 return $this->fname;
42 }
43 }