Sbisson has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/404988 )
Change subject: Trying to make Opt in/out atomic ...................................................................... Trying to make Opt in/out atomic Opting in or out of the Flow beta feature requires several page moves and edits. When one of them fails, it can leave the user talk page in an inconsistent state. This patch executes the OptInController enable() or disable() function in an AtomicSectionUpdate instead of a regular DeferredUpdate (was encapsulated in OptInUpdate.php, which has been removed). Bug: T184670 Change-Id: Icbea8194121606cd36fd7f2ab31373b703246459 --- M Hooks.php M extension.json D includes/Import/OptInUpdate.php 3 files changed, 15 insertions(+), 64 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Flow refs/changes/88/404988/1 diff --git a/Hooks.php b/Hooks.php index de887c1..20ebf98 100644 --- a/Hooks.php +++ b/Hooks.php @@ -1752,22 +1752,32 @@ $userClone = User::newFromId( $user->getId() ); $before = BetaFeatures::isFeatureEnabled( $userClone, BETA_FEATURE_FLOW_USER_TALK_PAGE ); $after = $user->getBoolOption( BETA_FEATURE_FLOW_USER_TALK_PAGE ); + $controller = new Flow\Import\OptInController(); $action = null; if ( !$before && $after ) { - $action = OptInUpdate::$ENABLE; + $action = 'enable'; // Check if the user had a flow board - $c = new Flow\Import\OptInController(); - if ( !$c->hasFlowBoardArchive( $user ) ) { + if ( !$controller->hasFlowBoardArchive( $user ) ) { // Enable the guided tour by setting the cookie RequestContext::getMain()->getRequest()->response()->setCookie( 'Flow_optIn_guidedTour', '1' ); } } elseif ( $before && !$after ) { - $action = OptInUpdate::$DISABLE; + $action = 'disable'; } if ( $action ) { - DeferredUpdates::addUpdate( new OptInUpdate( $action, $user->getTalkPage(), $user ) ); + DeferredUpdates::addUpdate( new AtomicSectionUpdate( + wfGetDB( DB_MASTER ), + __METHOD__, + function () use ( $controller, $action, $user ) { + if ( $action === 'enable' ) { + $controller->enable( $user->getTalkPage(), $user ); + } elseif ( $action === 'disable' ) { + $controller->disable( $user->getTalkPage() ); + } + } + ) ); } return true; diff --git a/extension.json b/extension.json index ce0ab2d..e766273 100644 --- a/extension.json +++ b/extension.json @@ -1109,7 +1109,6 @@ "Flow\\Import\\LiquidThreadsApi\\ScriptedImportRevision": "includes/Import/LiquidThreadsApi/Objects.php", "Flow\\Import\\LiquidThreadsApi\\TopicIterator": "includes/Import/LiquidThreadsApi/Iterators.php", "Flow\\Import\\OptInController": "includes/Import/OptInController.php", - "Flow\\Import\\OptInUpdate": "includes/Import/OptInUpdate.php", "Flow\\Import\\PageImportState": "includes/Import/Importer.php", "Flow\\Import\\Plain\\ImportHeader": "includes/Import/Plain/ImportHeader.php", "Flow\\Import\\Plain\\ObjectRevision": "includes/Import/Plain/ObjectRevision.php", diff --git a/includes/Import/OptInUpdate.php b/includes/Import/OptInUpdate.php deleted file mode 100644 index 3c1a0f7..0000000 --- a/includes/Import/OptInUpdate.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php - -namespace Flow\Import; - -use DeferrableUpdate; -use MWExceptionHandler; -use Title; -use User; - -class OptInUpdate implements DeferrableUpdate { - - public static $ENABLE = 'enable'; - public static $DISABLE = 'disable'; - - /** - * @var string - */ - protected $action; - - /** - * @var Title - */ - protected $talkpage; - - /** - * @var User - */ - protected $user; - - /** - * @param string $action - * @param Title $talkpage - * @param User $user - */ - public function __construct( $action, Title $talkpage, User $user ) { - $this->action = $action; - $this->talkpage = $talkpage; - $this->user = $user; - } - - /** - * Enable or disable Flow on a talk page - */ - function doUpdate() { - $c = new OptInController(); - try { - if ( $this->action === self::$ENABLE ) { - $c->enable( $this->talkpage, $this->user ); - } elseif ( $this->action === self::$DISABLE ) { - $c->disable( $this->talkpage ); - } else { - wfLogWarning( 'OptInUpdate: unrecognized action: ' . $this->action ); - } - } catch ( \Exception $e ) { - MWExceptionHandler::logException( $e ); - } - } -} -- To view, visit https://gerrit.wikimedia.org/r/404988 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Icbea8194121606cd36fd7f2ab31373b703246459 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Flow Gerrit-Branch: master Gerrit-Owner: Sbisson <sbis...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits