X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FMovePage.php;h=ae12ba5e7d84616019dbca996fcd2d6eeeaea4f9;hb=e7b57d881a;hp=cbb465124012e8da02e070fd2fe9acd1bf6eec1d;hpb=f8eb417ac29e07fd2b1d4bbbc619f07629c0db07;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/MovePage.php b/includes/MovePage.php index cbb4651240..ae12ba5e7d 100644 --- a/includes/MovePage.php +++ b/includes/MovePage.php @@ -233,9 +233,11 @@ class MovePage { * @param User $user * @param string $reason * @param bool $createRedirect + * @param string[] $changeTags Change tags to apply to the entry in the move log. Caller + * should perform permission checks with ChangeTags::canAddTagsAccompanyingChange * @return Status */ - public function move( User $user, $reason, $createRedirect ) { + public function move( User $user, $reason, $createRedirect, array $changeTags = [] ) { global $wgCategoryCollation; Hooks::run( 'TitleMove', [ $this->oldTitle, $this->newTitle, $user ] ); @@ -265,7 +267,8 @@ class MovePage { $protected = $this->oldTitle->isProtected(); // Do the actual move; if this fails, it will throw an MWException(!) - $nullRevision = $this->moveToInternal( $user, $this->newTitle, $reason, $createRedirect ); + $nullRevision = $this->moveToInternal( $user, $this->newTitle, $reason, $createRedirect, + $changeTags ); // Refresh the sortkey for this row. Be careful to avoid resetting // cl_timestamp, which may disturb time-based lists on some sites. @@ -356,6 +359,7 @@ class MovePage { '4::oldtitle' => $this->oldTitle->getPrefixedText(), ] ); $logEntry->setRelations( [ 'pr_id' => $logRelationsValues ] ); + $logEntry->setTags( $changeTags ); $logId = $logEntry->insert(); $logEntry->publish( $logId ); } @@ -424,18 +428,21 @@ class MovePage { * Move page to a title which is either a redirect to the * source page or nonexistent * - * @fixme This was basically directly moved from Title, it should be split into smaller functions + * @todo This was basically directly moved from Title, it should be split into + * smaller functions * @param User $user the User doing the move * @param Title $nt The page to move to, which should be a redirect or non-existent * @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 + * @param string[] $changeTags Change tags to apply to the entry in the move log * @return Revision the revision created by the move * @throws MWException */ - private function moveToInternal( User $user, &$nt, $reason = '', $createRedirect = true ) { - global $wgContLang; + private function moveToInternal( User $user, &$nt, $reason = '', $createRedirect = true, + array $changeTags = [] ) { + global $wgContLang; if ( $nt->exists() ) { $moveOverRedirect = true; $logType = 'move_redir'; @@ -458,7 +465,7 @@ class MovePage { /* $commit */ false, $errs, $user, - [], + $changeTags, 'delete_redir' ); @@ -529,7 +536,8 @@ class MovePage { throw new MWException( 'No valid null revision produced in ' . __METHOD__ ); } - $nullRevision->insertOn( $dbw ); + $nullRevId = $nullRevision->insertOn( $dbw ); + $logEntry->setAssociatedRevId( $nullRevId ); # Change the name of the target page: $dbw->update( 'page', @@ -584,18 +592,22 @@ class MovePage { 'user' => $user->getId(), 'comment' => $comment, 'content' => $redirectContent ] ); - $redirectRevision->insertOn( $dbw ); + $redirectRevId = $redirectRevision->insertOn( $dbw ); $redirectArticle->updateRevisionOn( $dbw, $redirectRevision, 0 ); Hooks::run( 'NewRevisionFromEditComplete', [ $redirectArticle, $redirectRevision, false, $user ] ); $redirectArticle->doEditUpdates( $redirectRevision, $user, [ 'created' => true ] ); + + ChangeTags::addTags( $changeTags, null, $redirectRevId, null ); } } # Log the move $logid = $logEntry->insert(); + + $logEntry->setTags( $changeTags ); $logEntry->publish( $logid ); return $nullRevision;