* @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 ] );
$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.
'4::oldtitle' => $this->oldTitle->getPrefixedText(),
] );
$logEntry->setRelations( [ 'pr_id' => $logRelationsValues ] );
+ $logEntry->setTags( $changeTags );
$logId = $logEntry->insert();
$logEntry->publish( $logId );
}
* 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';
$nt->getArticleID(),
/* $commit */ false,
$errs,
- $user
+ $user,
+ $changeTags,
+ 'delete_redir'
);
if ( !$status->isGood() ) {
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',
'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;