X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FMovePage.php;h=936b94a1ebb8a5ae60783e0ad52add125355425a;hb=b5a6c4852f6f779bc860d635332783d7829b51a5;hp=964fbffff65aeaadb4d407b3f083fd9ce5431e3f;hpb=d2278d1c2ae98e2c177acdab400614f29ac54591;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/MovePage.php b/includes/MovePage.php index 964fbffff6..936b94a1eb 100644 --- a/includes/MovePage.php +++ b/includes/MovePage.php @@ -247,12 +247,12 @@ class MovePage { RepoGroup::singleton()->clearCache( $this->newTitle ); # clear false negative cache } - $dbw->begin( __METHOD__ ); # If $file was a LocalFile, its transaction would have closed our own. + $dbw->startAtomic( __METHOD__ ); $pageid = $this->oldTitle->getArticleID( Title::GAID_FOR_UPDATE ); $protected = $this->oldTitle->isProtected(); // Do the actual move - $this->moveToInternal( $user, $this->newTitle, $reason, $createRedirect ); + $nullRevision = $this->moveToInternal( $user, $this->newTitle, $reason, $createRedirect ); // Refresh the sortkey for this row. Be careful to avoid resetting // cl_timestamp, which may disturb time-based lists on some sites. @@ -305,8 +305,8 @@ class MovePage { __METHOD__, array( 'IGNORE' ) ); - # Update the protection log - $log = new LogPage( 'protect' ); + + // Build comment for log $comment = wfMessage( 'prot_1movedto2', $this->oldTitle->getPrefixedText(), @@ -315,14 +315,6 @@ class MovePage { if ( $reason ) { $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason; } - // @todo FIXME: $params? - $logId = $log->addEntry( - 'move_prot', - $this->newTitle, - $comment, - array( $this->oldTitle->getPrefixedText() ), - $user - ); // reread inserted pr_ids for log relation $insertedPrIds = $dbw->select( @@ -335,7 +327,18 @@ class MovePage { foreach ( $insertedPrIds as $prid ) { $logRelationsValues[] = $prid->pr_id; } - $log->addRelations( 'pr_id', $logRelationsValues, $logId ); + + // Update the protection log + $logEntry = new ManualLogEntry( 'protect', 'move_prot' ); + $logEntry->setTarget( $this->newTitle ); + $logEntry->setComment( $comment ); + $logEntry->setPerformer( $user ); + $logEntry->setParameters( array( + '4::oldtitle' => $this->oldTitle->getPrefixedText(), + ) ); + $logEntry->setRelations( array( 'pr_id' => $logRelationsValues ) ); + $logId = $logEntry->insert(); + $logEntry->publish( $logId ); } // Update *_from_namespace fields as needed @@ -366,12 +369,28 @@ class MovePage { WatchedItem::duplicateEntries( $this->oldTitle, $this->newTitle ); } - $dbw->commit( __METHOD__ ); - Hooks::run( - 'TitleMoveComplete', - array( &$this->oldTitle, &$this->newTitle, &$user, $pageid, $redirid, $reason ) + 'TitleMoveCompleting', + array( $this->oldTitle, $this->newTitle, $user, $pageid, $redirid, $reason ) ); + + $dbw->endAtomic( __METHOD__ ); + + $params = array( + &$this->oldTitle, + &$this->newTitle, + &$user, + $pageid, + $redirid, + $reason, + $nullRevision + ); + $dbw->onTransactionIdle( function () use ( $params, $dbw ) { + // Keep each single hook handler atomic + $dbw->setFlag( DBO_TRX ); // flag is automatically reset by DB layer + Hooks::run( 'TitleMoveComplete', $params ); + } ); + return Status::newGood(); } @@ -385,6 +404,7 @@ class MovePage { * @param string $reason The reason for the move * @param bool $createRedirect Whether to leave a redirect at the old title. Does not check * if the user has the suppressredirect right + * @return Revision the revision created by the move * @throws MWException */ private function moveToInternal( User $user, &$nt, $reason = '', $createRedirect = true ) { @@ -541,5 +561,7 @@ class MovePage { # Log the move $logid = $logEntry->insert(); $logEntry->publish( $logid ); + + return $nullRevision; } }