]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - includes/deferred/MWCallableUpdate.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / includes / deferred / MWCallableUpdate.php
diff --git a/includes/deferred/MWCallableUpdate.php b/includes/deferred/MWCallableUpdate.php
new file mode 100644 (file)
index 0000000..5b822af
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * Deferrable Update for closure/callback
+ */
+class MWCallableUpdate implements DeferrableUpdate, DeferrableCallback {
+       /** @var callable|null */
+       private $callback;
+       /** @var string */
+       private $fname;
+
+       /**
+        * @param callable $callback
+        * @param string $fname Calling method
+        * @param IDatabase|null $dbw Abort if this DB is rolled back [optional] (since 1.28)
+        */
+       public function __construct( callable $callback, $fname = 'unknown', IDatabase $dbw = null ) {
+               $this->callback = $callback;
+               $this->fname = $fname;
+
+               if ( $dbw && $dbw->trxLevel() ) {
+                       $dbw->onTransactionResolution( [ $this, 'cancelOnRollback' ], $fname );
+               }
+       }
+
+       public function doUpdate() {
+               if ( $this->callback ) {
+                       call_user_func( $this->callback );
+               }
+       }
+
+       public function cancelOnRollback( $trigger ) {
+               if ( $trigger === IDatabase::TRIGGER_ROLLBACK ) {
+                       $this->callback = null;
+               }
+       }
+
+       public function getOrigin() {
+               return $this->fname;
+       }
+}