jenkins-bot has submitted this change and it was merged.

Change subject: Refactor backend logic out of special page
......................................................................


Refactor backend logic out of special page

Creates a MergeUser class which handles all the database
updates and page moves.

The output for the special page was also trimmed down, it
no longer spams a bunch of useless output.

Change-Id: I2bfcecad9994abaf8c58ec1ba0e02bc33309cf72
---
A IUserMergeLogger.php
A MergeUser.php
M SpecialUserMerge.php
M UserMerge.php
A UserMergeLogger.php
M i18n/en.json
6 files changed, 411 insertions(+), 403 deletions(-)

Approvals:
  CSteipp: Looks good to me, approved
  Siebrand: Looks good to me, but someone else must approve
  jenkins-bot: Verified



diff --git a/IUserMergeLogger.php b/IUserMergeLogger.php
new file mode 100644
index 0000000..f468b3e
--- /dev/null
+++ b/IUserMergeLogger.php
@@ -0,0 +1,21 @@
+<?php
+
+interface IUserMergeLogger {
+
+       /**
+        * Adds a merge log entry
+        *
+        * @param User $performer
+        * @param User $oldUser
+        * @param User $newUser
+        */
+       public function addMergeEntry( User $performer, User $oldUser, User 
$newUser );
+
+       /**
+        * Adds a user deletion log entry
+        *
+        * @param User $perfomer
+        * @param User $oldUser
+        */
+       public function addDeleteEntry( User $perfomer, User $oldUser );
+}
\ No newline at end of file
diff --git a/MergeUser.php b/MergeUser.php
new file mode 100644
index 0000000..a0a7c99
--- /dev/null
+++ b/MergeUser.php
@@ -0,0 +1,313 @@
+<?php
+
+/**
+ * Contains the actual database backend logic for merging users
+ *
+ */
+class MergeUser {
+
+       /**
+        * @var User
+        */
+       private $oldUser, $newUser;
+
+       /**
+        * @var IUserMergeLogger
+        */
+       private $logger;
+
+       public function __construct(
+               User $oldUser,
+               User $newUser,
+               IUserMergeLogger $logger
+       ) {
+               $this->newUser = $newUser;
+               $this->oldUser = $oldUser;
+               $this->logger = $logger;
+       }
+
+       public function merge( User $performer ) {
+               $this->mergeEditcount();
+               $this->mergeDatabaseTables();
+               $this->logger->addMergeEntry( $performer, $this->oldUser, 
$this->newUser );
+       }
+
+       /**
+        * @param User $performer
+        * @param callable $msg something that returns a Message object
+        *
+        * @return array Array of failed page moves, see MergeUser::movePages
+        */
+       public function delete( User $performer, /* callable */ $msg  ) {
+               $failed = $this->movePages( $performer, $msg );
+               $this->deleteUser();
+               $this->logger->addDeleteEntry( $performer, $this->oldUser );
+
+               return $failed;
+       }
+
+       /**
+        * Adds edit count of both users
+        */
+       private function mergeEditcount() {
+               $dbw = wfGetDB( DB_MASTER );
+
+               $totalEdits = $dbw->selectField(
+                       'user',
+                       'SUM(user_editcount)',
+                       array( 'user_id' => array( $this->newUser->getId(), 
$this->oldUser->getId() ) ),
+                       __METHOD__
+               );
+
+               $totalEdits = intval( $totalEdits );
+
+               # don't run queries if neither user has any edits
+               if ( $totalEdits > 0 ) {
+                       # update new user with total edits
+                       $dbw->update( 'user',
+                               array( 'user_editcount' => $totalEdits ),
+                               array( 'user_id' => $this->newUser->getId() ),
+                               __METHOD__
+                       );
+
+                       # clear old user's edits
+                       $dbw->update( 'user',
+                               array( 'user_editcount' => 0 ),
+                               array( 'user_id' => $this->oldUser->getId() ),
+                               __METHOD__
+                       );
+               }
+       }
+
+       /**
+        * Function to merge database references from one user to another user
+        *
+        * Merges database references from one user ID or username to another 
user ID or username
+        * to preserve referential integrity.
+        */
+       private function mergeDatabaseTables() {
+               // Fields to update with the format:
+               // array( tableName, idField, textField )
+               $updateFields = array(
+                       array( 'archive', 'ar_user', 'ar_user_text' ),
+                       array( 'revision', 'rev_user', 'rev_user_text' ),
+                       array( 'filearchive', 'fa_user', 'fa_user_text' ),
+                       array( 'image', 'img_user', 'img_user_text' ),
+                       array( 'oldimage', 'oi_user', 'oi_user_text' ),
+                       array( 'recentchanges', 'rc_user', 'rc_user_text' ),
+                       array( 'logging', 'log_user' ),
+                       array( 'ipblocks', 'ipb_user', 'ipb_address' ),
+                       array( 'ipblocks', 'ipb_by', 'ipb_by_text' ),
+                       array( 'watchlist', 'wl_user' ),
+               );
+
+               wfRunHooks( 'UserMergeAccountFields', array( &$updateFields ) );
+
+               $dbw = wfGetDB( DB_MASTER );
+
+               $this->deduplicateWatchlistEntries();
+
+               foreach ( $updateFields as $fieldInfo ) {
+                       $tableName = array_shift( $fieldInfo );
+                       $idField = array_shift( $fieldInfo );
+
+                       $dbw->update(
+                               $tableName,
+                               array( $idField => $this->newUser->getId() ) + 
array_fill_keys( $fieldInfo, $this->newUser->getName() ),
+                               array( $idField => $this->oldUser->getId() ),
+                               __METHOD__
+                       );
+               }
+
+               $dbw->delete( 'user_newtalk', array( 'user_id' => 
$this->oldUser->getId() ) );
+
+               wfRunHooks( 'MergeAccountFromTo', array( &$this->oldUser, 
&$this->newUser ) );
+       }
+
+       /**
+        * Deduplicate watchlist entries
+        * which old (merge-from) and new (merge-to) users are watching
+        */
+       private function deduplicateWatchlistEntries() {
+
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->begin( __METHOD__ );
+
+               $res = $dbw->select(
+                       array(
+                               'w1' => 'watchlist',
+                               'w2' => 'watchlist'
+                       ),
+                       array(
+                               'w2.wl_namespace',
+                               'w2.wl_title'
+                       ),
+                       array(
+                               'w1.wl_user' => $this->newUser->getID(),
+                               'w2.wl_user' => $this->oldUser->getID()
+                       ),
+                       __METHOD__,
+                       array( 'FOR UPDATE' ),
+                       array(
+                               'w2' => array(
+                                       'INNER JOIN',
+                                       array(
+                                               'w1.wl_namespace = 
w2.wl_namespace',
+                                               'w1.wl_title = w2.wl_title'
+                                       ),
+                               )
+                       )
+               );
+
+               # Construct an array to delete all watched pages of the old user
+               # which the new user already watches
+               $conds = array();
+
+               foreach ( $res as $result ) {
+                       $conds[] = $dbw->makeList(
+                               array(
+                                       'wl_user' => $this->oldUser->getID(),
+                                       'wl_namespace' => $result->wl_namespace,
+                                       'wl_title' => $result->wl_title
+                               ),
+                               LIST_AND
+                       );
+               }
+
+               if ( empty( $conds ) ) {
+                       $dbw->commit( __METHOD__ );
+                       return;
+               }
+
+               # Perform a multi-row delete
+               $dbw->delete(
+                       'watchlist',
+                       $dbw->makeList( $conds, LIST_OR ),
+                       __METHOD__
+               );
+
+               $dbw->commit( __METHOD__ );
+       }
+
+       /**
+        * Function to merge user pages
+        *
+        * Deletes all pages when merging to Anon
+        * Moves user page when the target user page does not exist or is empty
+        * Deletes redirect if nothing links to old page
+        * Deletes the old user page when the target user page exists
+        *
+        * @todo This code is a duplicate of Renameuser and GlobalRename
+        *
+        * @param User $performer
+        * @param callable $msg Function that returns a Message object
+        * @return array Array of old name (string) => new name (Title) where 
the move failed
+        */
+       private function movePages( User $performer, /* callable */ $msg ) {
+               global $wgContLang, $wgUser;
+
+               $oldusername = trim( str_replace( '_', ' ', 
$this->oldUser->getName() ) );
+               $oldusername = Title::makeTitle( NS_USER, $oldusername );
+               $newusername = Title::makeTitleSafe( NS_USER, 
$wgContLang->ucfirst( $this->newUser->getName() ) );
+
+               # select all user pages and sub-pages
+               $dbr = wfGetDB( DB_SLAVE );
+               $pages = $dbr->select( 'page',
+                       array( 'page_namespace', 'page_title' ),
+                       array(
+                               'page_namespace' => array( NS_USER, 
NS_USER_TALK ),
+                               $dbr->makeList( array(
+                                               'page_title' => 
$dbr->buildLike( $oldusername->getDBkey() . '/', $dbr->anyString() ),
+                                               'page_title' => 
$oldusername->getDBkey()
+                                       ),
+                                       LIST_OR
+                               )
+                       )
+               );
+
+               // Need to set $wgUser to attribute log properly.
+               $oldUser = $wgUser;
+               $wgUser = $performer;
+
+               $failedMoves = array();
+               foreach ( $pages as $row ) {
+
+                       $oldPage = Title::makeTitleSafe( $row->page_namespace, 
$row->page_title );
+                       $newPage = Title::makeTitleSafe( $row->page_namespace,
+                               preg_replace( '!^[^/]+!', 
$newusername->getDBkey(), $row->page_title ) );
+
+                       if ( $this->newUser->getName() === "Anonymous" ) { # 
delete ALL old pages
+                               if ( $oldPage->exists() ) {
+                                       $oldPageArticle = new Article( 
$oldPage, 0 );
+                                       $oldPageArticle->doDeleteArticle( $msg( 
'usermerge-autopagedelete' )->inContentLanguage()->text() );
+                               }
+                       } elseif ( $newPage->exists()
+                               && !$oldPage->isValidMoveTarget( $newPage )
+                               && $newPage->getLength() > 0 ) { # delete old 
pages that can't be moved
+
+                               $oldPageArticle = new Article( $oldPage, 0 );
+                               $oldPageArticle->doDeleteArticle( $msg( 
'usermerge-autopagedelete' )->inContentLanguage()->text() );
+
+                       } else { # move content to new page
+                               # delete target page if it exists and is blank
+                               if ( $newPage->exists() ) {
+                                       $newPageArticle = new Article( 
$newPage, 0 );
+                                       $newPageArticle->doDeleteArticle( $msg( 
'usermerge-autopagedelete' )->inContentLanguage()->text() );
+                               }
+
+                               # move to target location
+                               $errors = $oldPage->moveTo(
+                                       $newPage,
+                                       false,
+                                       $msg(
+                                               'usermerge-move-log',
+                                               $oldusername->getText(),
+                                               $newusername->getText() 
)->inContentLanguage()->text()
+                               );
+                               if ( $errors !== true ) {
+                                       
$failedMoves[$oldPage->getPrefixedText()] = $newPage;
+                               }
+
+                               # check if any pages link here
+                               $res = $dbr->selectField( 'pagelinks',
+                                       'pl_title',
+                                       array( 'pl_title' => 
$this->oldUser->getName() ),
+                                       __METHOD__
+                               );
+                               if ( !$dbr->numRows( $res ) ) {
+                                       # nothing links here, so delete unmoved 
page/redirect
+                                       $oldPageArticle = new Article( 
$oldPage, 0 );
+                                       $oldPageArticle->doDeleteArticle( $msg( 
'usermerge-autopagedelete' )->inContentLanguage()->text() );
+                               }
+                       }
+               }
+
+               $wgUser = $oldUser;
+
+               return $failedMoves;
+       }
+
+
+       /**
+        * Function to delete users following a successful mergeUser call
+        *
+        * Removes user entries from the user table and the user_groups table
+        */
+       private function deleteUser() {
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->delete(
+                       'user_groups',
+                       array( 'ug_user' => $this->oldUser->getId() )
+               );
+               $dbw->delete(
+                       'user',
+                       array( 'user_id' => $this->oldUser->getId() )
+               );
+
+               wfRunHooks( 'DeleteAccount', array( &$this->oldUser ) );
+
+               DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 
'users' => -1 ) ) );
+       }
+
+
+}
\ No newline at end of file
diff --git a/SpecialUserMerge.php b/SpecialUserMerge.php
index e0ea500..d601382 100644
--- a/SpecialUserMerge.php
+++ b/SpecialUserMerge.php
@@ -121,410 +121,44 @@
                        return Status::newFatal( 
'usermerge-same-old-and-new-user' );
                }
 
-               $this->mergeEditcount( $newUser->getId(), $oldUser->getId() );
-               $this->mergeUser(
-                       $newUser, $newUser->getName(), $newUser->getId(),
-                       $oldUser, $oldUser->getName(), $oldUser->getId()
+               // Validation passed, let's merge the user now.
+               $um = new MergeUser( $oldUser, $newUser, new UserMergeLogger() 
);
+               $um->merge( $this->getUser() );
+
+               $out = $this->getOutput();
+
+               $out->addWikiMsg(
+                       'usermerge-success',
+                       $oldUser->getName(), $oldUser->getId(),
+                       $newUser->getName(), $newUser->getId()
                );
 
                if ( $data['delete'] ) {
-                       $this->movePages( $newUser->getName(), 
$oldUser->getName() );
-                       $this->deleteUser( $oldUser, $oldUser->getId(), 
$oldUser->getName() );
+                       $failed = $um->delete( $this->getUser(), array( $this, 
'msg' ) );
+                       $out->addWikiMsg(
+                               'usermerge-userdeleted', $oldUser->getName(), 
$oldUser->getId()
+                       );
+
+                       if ( $failed ) {
+                               // Output an error message for failed moves
+                               $out->addHTML( Html::openElement( 'ul' ) );
+                               foreach ( $failed as $oldTitleText => $newTitle 
) {
+                                       $oldTitle = Title::newFromText( 
$oldTitleText );
+                                       $out->addHTML(
+                                               Html::rawElement( 'li', array(),
+                                                       $this->msg( 
'usermerge-page-unmoved' )->rawParams(
+                                                               Linker::link( 
$oldTitle ),
+                                                               Linker::link( 
$newTitle )
+                                                       )->escaped()
+                                               )
+                                       );
+                               }
+                               $out->addHTML( Html::closeElement( 'ul' ) );
+                       }
                }
 
                return Status::newGood();
        }
-
-       /**
-        * Function to delete users following a successful mergeUser call
-        *
-        * Removes user entries from the user table and the user_groups table
-        *
-        * @param $objOldUser User
-        * @param $olduserID int ID of user to delete
-        * @param $olduser_text string Username of user to delete
-        *
-        * @return bool Always returns true - throws exceptions on failure.
-        */
-       private function deleteUser( $objOldUser, $olduserID, $olduser_text ) {
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete(
-                       'user_groups',
-                       array( 'ug_user' => $olduserID )
-               );
-               $dbw->delete(
-                       'user',
-                       array( 'user_id' => $olduserID )
-               );
-               $this->getOutput()->addHTML(
-                       $this->msg( 'usermerge-userdeleted', $olduser_text, 
$olduserID )->escaped() .
-                       Html::element( 'br' ) . "\n"
-               );
-
-               $log = new LogPage( 'usermerge' );
-               $log->addEntry( 'deleteuser', $this->getUser()->getUserPage(), 
'', array( $olduser_text, $olduserID ) );
-
-               wfRunHooks( 'DeleteAccount', array( &$objOldUser ) );
-
-               DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 
'users' => -1 ) ) );
-
-               return true;
-       }
-
-       /**
-        * Deduplicate watchlist entries
-        * which old (merge-from) and new (merge-to) users are watching
-        *
-        * @param $oldUser User
-        * @param $newUser User
-        *
-        * @return bool
-        */
-       private function deduplicateWatchlistEntries( $oldUser, $newUser ) {
-
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->begin( __METHOD__ );
-
-               $res = $dbw->select(
-                       array(
-                               'w1' => 'watchlist',
-                               'w2' => 'watchlist'
-                       ),
-                       array(
-                               'w2.wl_namespace',
-                               'w2.wl_title'
-                       ),
-                       array(
-                               'w1.wl_user' => $newUser->getID(),
-                               'w2.wl_user' => $oldUser->getID()
-                       ),
-                       __METHOD__,
-                       array( 'FOR UPDATE' ),
-                       array(
-                               'w2' => array(
-                                       'INNER JOIN',
-                                       array(
-                                               'w1.wl_namespace = 
w2.wl_namespace',
-                                               'w1.wl_title = w2.wl_title'
-                                       ),
-                               )
-                       )
-               );
-
-               # Construct an array to delete all watched pages of the old user
-               # which the new user already watches
-               $conds = array();
-
-               foreach ( $res as $result ) {
-                       $conds[] = $dbw->makeList(
-                               array(
-                                       'wl_user' => $oldUser->getID(),
-                                       'wl_namespace' => $result->wl_namespace,
-                                       'wl_title' => $result->wl_title
-                               ),
-                               LIST_AND
-                       );
-               }
-
-               if ( empty( $conds ) ) {
-                       $dbw->commit( __METHOD__ );
-                       return true;
-               }
-
-               # Perform a multi-row delete
-
-               # requires
-               # MediaWiki database function with fixed 
https://bugzilla.wikimedia.org/50078
-               # i.e. MediaWiki core after 
505dbb331e16a03d87cb4511ee86df12ea295c40 (20130625)
-               $dbw->delete(
-                       'watchlist',
-                       $dbw->makeList( $conds, LIST_OR ),
-                       __METHOD__
-               );
-
-               $dbw->commit( __METHOD__ );
-
-               return true;
-       }
-
-
-       /**
-        * Function to merge database references from one user to another user
-        *
-        * Merges database references from one user ID or username to another 
user ID or username
-        * to preserve referential integrity.
-        *
-        * @param $objNewUser User
-        * @param $newuser_text string Username to merge references TO
-        * @param $newuserID int ID of user to merge references TO
-        * @param $objOldUser User
-        * @param $olduser_text string Username of user to remove references 
FROM
-        * @param $olduserID int ID of user to remove references FROM
-        *
-        * @return bool Always returns true - throws exceptions on failure.
-        */
-       private function mergeUser( $objNewUser, $newuser_text, $newuserID, 
$objOldUser, $olduser_text, $olduserID ) {
-               // Fields to update with the format:
-               // array( tableName, idField, textField )
-               $updateFields = array(
-                       array( 'archive', 'ar_user', 'ar_user_text' ),
-                       array( 'revision', 'rev_user', 'rev_user_text' ),
-                       array( 'filearchive', 'fa_user', 'fa_user_text' ),
-                       array( 'image', 'img_user', 'img_user_text' ),
-                       array( 'oldimage', 'oi_user', 'oi_user_text' ),
-                       array( 'recentchanges', 'rc_user', 'rc_user_text' ),
-                       array( 'logging', 'log_user' ),
-                       array( 'ipblocks', 'ipb_user', 'ipb_address' ),
-                       array( 'ipblocks', 'ipb_by', 'ipb_by_text' ),
-                       array( 'watchlist', 'wl_user' ),
-               );
-
-               wfRunHooks( 'UserMergeAccountFields', array( &$updateFields ) );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $out = $this->getOutput();
-
-               $this->deduplicateWatchlistEntries( $objOldUser, $objNewUser );
-
-               foreach ( $updateFields as $fieldInfo ) {
-                       $tableName = array_shift( $fieldInfo );
-                       $idField = array_shift( $fieldInfo );
-
-                       $dbw->update(
-                               $tableName,
-                               array( $idField => $newuserID ) + 
array_fill_keys( $fieldInfo, $newuser_text ),
-                               array( $idField => $olduserID ),
-                               __METHOD__
-                       );
-
-                       $out->addHTML(
-                               $this->msg(
-                                       'usermerge-updating',
-                                       $tableName,
-                                       $olduserID,
-                                       $newuserID
-                               )->escaped() .
-                               Html::element( 'br' ) . "\n"
-                       );
-
-                       foreach ( $fieldInfo as $textField ) {
-                               $out->addHTML(
-                                       $this->msg(
-                                               'usermerge-updating',
-                                               $tableName,
-                                               $olduser_text,
-                                               $newuser_text
-                                       )->escaped() .
-                                       Html::element( 'br' ) . "\n"
-                               );
-                       }
-               }
-
-               $dbw->delete( 'user_newtalk', array( 'user_id' => $olduserID ) 
);
-
-               $out->addHTML(
-                       Html::element( 'hr' ) . "\n" .
-                       $this->msg( 'usermerge-success', $olduser_text, 
$olduserID, $newuser_text, $newuserID )->escaped() .
-                       Html::element( 'br' ) . "\n"
-               );
-
-               $log = new LogPage( 'usermerge' );
-               $log->addEntry(
-                       'mergeuser',
-                       $this->getUser()->getUserPage(),
-                       '',
-                       array( $olduser_text, $olduserID, $newuser_text, 
$newuserID )
-               );
-
-               wfRunHooks( 'MergeAccountFromTo', array( &$objOldUser, 
&$objNewUser ) );
-
-               return true;
-       }
-
-
-       /**
-        * Adds edit count of both users
-        *
-        * @param $newuserID int ID of user we're merging into
-        * @param $olduserID int ID of user we're merging from
-        *
-        * @return bool
-        */
-       private function mergeEditcount( $newuserID, $olduserID ) {
-               $dbw = wfGetDB( DB_MASTER );
-
-               $totalEdits = $dbw->selectField(
-                       'user',
-                       'SUM(user_editcount)',
-                       array( 'user_id' => array( $newuserID, $olduserID ) ),
-                       __METHOD__
-               );
-
-               $totalEdits = intval( $totalEdits );
-
-               # don't run queries if neither user has any edits
-               if ( $totalEdits > 0 ) {
-                       # update new user with total edits
-                       $dbw->update( 'user',
-                               array( 'user_editcount' => $totalEdits ),
-                               array( 'user_id' => $newuserID ),
-                               __METHOD__
-                       );
-
-                       # clear old user's edits
-                       $dbw->update( 'user',
-                               array( 'user_editcount' => 0 ),
-                               array( 'user_id' => $olduserID ),
-                               __METHOD__
-                       );
-               }
-
-               $this->getOutput()->addHTML(
-                       $this->msg(
-                               'usermerge-editcount-merge-success2',
-                               $olduserID, $newuserID, Message::numParam( 
$totalEdits )
-                       )->escaped() .
-                       Html::element( 'br' ) . "\n"
-               );
-
-               return true;
-       }
-
-       /**
-        * Function to merge user pages
-        *
-        * Deletes all pages when merging to Anon
-        * Moves user page when the target user page does not exist or is empty
-        * Deletes redirect if nothing links to old page
-        * Deletes the old user page when the target user page exists
-        *
-        * @param $newuser_text string Username to merge pages TO
-        * @param $olduser_text string Username of user to remove pages FROM
-        *
-        * @return bool True on completion
-        *
-        * @author Matthew April <matthew.ap...@tbs-sct.gc.ca>
-        */
-       private function movePages( $newuser_text, $olduser_text ) {
-               global $wgContLang;
-
-               $oldusername = trim( str_replace( '_', ' ', $olduser_text ) );
-               $oldusername = Title::makeTitle( NS_USER, $oldusername );
-               $newusername = Title::makeTitleSafe( NS_USER, 
$wgContLang->ucfirst( $newuser_text ) );
-
-               # select all user pages and sub-pages
-               $dbr = wfGetDB( DB_SLAVE );
-               $pages = $dbr->select( 'page',
-                       array( 'page_namespace', 'page_title' ),
-                       array(
-                               'page_namespace' => array( NS_USER, 
NS_USER_TALK ),
-                               $dbr->makeList( array(
-                                       'page_title' => $dbr->buildLike( 
$oldusername->getDBkey() . '/', $dbr->anyString() ),
-                                       'page_title' => $oldusername->getDBkey()
-                                       ),
-                                       LIST_OR
-                               )
-                       )
-                );
-
-               $output = '';
-
-               foreach ( $pages as $row ) {
-
-                       $oldPage = Title::makeTitleSafe( $row->page_namespace, 
$row->page_title );
-                       $newPage = Title::makeTitleSafe( $row->page_namespace,
-                               preg_replace( '!^[^/]+!', 
$newusername->getDBkey(), $row->page_title ) );
-
-                       if ( $newuser_text === "Anonymous" ) { # delete ALL old 
pages
-                               if ( $oldPage->exists() ) {
-                                       $oldPageArticle = new Article( 
$oldPage, 0 );
-                                       $oldPageArticle->doDeleteArticle( 
$this->msg( 'usermerge-autopagedelete' )->inContentLanguage()->text() );
-
-                                       $oldLink = Linker::linkKnown( $oldPage 
);
-                                       $output .= Html::rawElement( 'li',
-                                               array( 'class' => 
'mw-renameuser-pe' ),
-                                               $this->msg( 
'usermerge-page-deleted' )->rawParams( $oldLink )->escaped()
-                                       );
-
-                               }
-                       } elseif ( $newPage->exists()
-                               && !$oldPage->isValidMoveTarget( $newPage )
-                               && $newPage->getLength() > 0 ) { # delete old 
pages that can't be moved
-
-                               $oldPageArticle = new Article( $oldPage, 0 );
-                               $oldPageArticle->doDeleteArticle( $this->msg( 
'usermerge-autopagedelete' )->text() );
-
-                               $link = Linker::linkKnown( $oldPage );
-                               $output .= Html::rawElement( 'li',
-                                       array( 'class' => 'mw-renameuser-pe' ),
-                                       $this->msg( 'usermerge-page-deleted' 
)->rawParams( $link )->escaped()
-                               );
-
-                       } else { # move content to new page
-                               # delete target page if it exists and is blank
-                               if ( $newPage->exists() ) {
-                                       $newPageArticle = new Article( 
$newPage, 0 );
-                                       $newPageArticle->doDeleteArticle( 
$this->msg( 'usermerge-autopagedelete' )->inContentLanguage()->text() );
-                               }
-
-                               # move to target location
-                               $success = $oldPage->moveTo(
-                                       $newPage,
-                                       false,
-                                       $this->msg(
-                                               'usermerge-move-log',
-                                               $oldusername->getText(),
-                                               $newusername->getText() 
)->inContentLanguage()->text()
-                               );
-
-                               if ( $success === true ) {
-                                       $oldLink = Linker::linkKnown(
-                                               $oldPage,
-                                               null,
-                                               array(),
-                                               array( 'redirect' => 'no' )
-                                       );
-                                       $newLink = Linker::linkKnown( $newPage 
);
-                                       $output .= Html::rawElement( 'li',
-                                               array( 'class' => 
'mw-renameuser-pm' ),
-                                               $this->msg( 
'usermerge-page-moved' )->rawParams( $oldLink, $newLink )->escaped()
-                                       );
-                               } else {
-                                       $oldLink = Linker::linkKnown( $oldPage 
);
-                                       $newLink = Linker::linkKnown( $newPage 
);
-                                       $output .= Html::rawElement( 'li',
-                                               array( 'class' => 
'mw-renameuser-pu' ),
-                                               $this->msg( 
'usermerge-page-unmoved' )->rawParams( $oldLink, $newLink )->escaped()
-                                       );
-                               }
-
-                               # check if any pages link here
-                               $res = $dbr->selectField( 'pagelinks',
-                                       'pl_title',
-                                       array( 'pl_title' => $olduser_text ),
-                                       __METHOD__
-                               );
-                               if ( !$dbr->numRows( $res ) ) {
-                                       # nothing links here, so delete unmoved 
page/redirect
-                                       $oldPageArticle = new Article( 
$oldPage, 0 );
-                                       $oldPageArticle->doDeleteArticle( 
$this->msg( 'usermerge-autopagedelete' )->inContentLanguage()->text() );
-                               }
-                       }
-
-               }
-
-               if ( $output ) {
-                       $this->getOutput()->addHTML(
-                               Html::rawElement( 'ul',
-                                       array(),
-                                       $output
-                               )
-                       );
-               }
-
-               return true;
-       }
-
 }
 
 /**
diff --git a/UserMerge.php b/UserMerge.php
index 8b76dd4..b8596e4 100644
--- a/UserMerge.php
+++ b/UserMerge.php
@@ -58,6 +58,9 @@
 $dir = __DIR__ . '/';
 $wgAutoloadClasses['SpecialUserMerge'] = $dir . 'SpecialUserMerge.php';
 $wgAutoloadClasses['UserMerge'] = $dir . 'SpecialUserMerge.php'; // back-compat
+$wgAutoloadClasses['MergeUser'] = $dir . 'MergeUser.php';
+$wgAutoloadClasses['IUserMergeLogger'] = $dir . 'IUserMergeLogger.php';
+$wgAutoloadClasses['UserMergeLogger'] = $dir . 'UserMergeLogger.php';
 
 
 $wgMessagesDirs['UserMerge'] = __DIR__ . '/i18n';
diff --git a/UserMergeLogger.php b/UserMergeLogger.php
new file mode 100644
index 0000000..6e050bf
--- /dev/null
+++ b/UserMergeLogger.php
@@ -0,0 +1,42 @@
+<?php
+
+class UserMergeLogger implements IUserMergeLogger {
+
+       /**
+        * Adds a merge log entry
+        *
+        * @todo Stop using this deprecated format
+        * @param User $performer
+        * @param User $oldUser
+        * @param User $newUser
+        */
+       public function addMergeEntry( User $performer, User $oldUser, User 
$newUser ) {
+               $log = new LogPage( 'usermerge' );
+               $log->addEntry(
+                       'mergeuser',
+                       $performer->getUserPage(),
+                       '',
+                       array(
+                               $oldUser->getName(), $oldUser->getId(),
+                               $newUser->getName(), $newUser->getId()
+                       )
+               );
+       }
+
+       /**
+        * Adds a user deletion log entry
+        *
+        * @todo Stop using this deprecated format
+        * @param User $perfomer
+        * @param User $oldUser
+        */
+       public function addDeleteEntry( User $perfomer, User $oldUser ) {
+               $log = new LogPage( 'usermerge' );
+               $log->addEntry(
+                       'deleteuser',
+                       $perfomer->getUserPage(),
+                       '',
+                       array( $oldUser->getName(), $oldUser->getId() )
+               );
+       }
+}
diff --git a/i18n/en.json b/i18n/en.json
index 2222e45..4e6eb70 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -17,20 +17,15 @@
     "usermerge-badtoken": "Invalid edit token.",
     "usermerge-userdeleted": "$1 ($2) has been deleted.",
     "usermerge-userdeleted-log": "Deleted user: $2 ($3)",
-    "usermerge-updating": "Updating $1 table ($2 to $3)",
     "usermerge-success": "Merge from $1 ($2) to {{GENDER:$3|$3}} ($4) is 
complete.",
     "usermerge-success-log": "User $2 ($3) merged to {{GENDER:$4|$4}} ($5)",
     "usermerge-logpage": "User merge log",
     "usermerge-logpagetext": "This is a log of user merge actions.",
     "usermerge-noselfdelete": "You cannot delete or merge from yourself!",
-    "usermerge-unmergable": "Unable to merge from user: ID or name has been 
defined as unmergable.",
     "usermerge-protectedgroup": "Unable to merge from user: User is in a 
protected group.",
     "right-usermerge": "Merge users",
     "action-usermerge": "merge users",
-    "usermerge-editcount-merge-success2": "Merged edit counts of $1 and $2 for 
a new total of $3 {{PLURAL:$3|edit|edits}}",
     "usermerge-autopagedelete": "Automatically deleted when merging users",
     "usermerge-page-unmoved": "The page $1 could not be moved to $2.",
-    "usermerge-page-moved": "The page $1 has been moved to $2.",
-    "usermerge-move-log": "Automatically moved page while merging the user 
\"[[User:$1|$1]]\" to \"[[User:$2|{{GENDER:$2|$2}}]]\"",
-    "usermerge-page-deleted": "Deleted page $1"
+    "usermerge-move-log": "Automatically moved page while merging the user 
\"[[User:$1|$1]]\" to \"[[User:$2|{{GENDER:$2|$2}}]]\""
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/150128
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I2bfcecad9994abaf8c58ec1ba0e02bc33309cf72
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/UserMerge
Gerrit-Branch: master
Gerrit-Owner: Legoktm <legoktm.wikipe...@gmail.com>
Gerrit-Reviewer: BryanDavis <bda...@wikimedia.org>
Gerrit-Reviewer: CSteipp <cste...@wikimedia.org>
Gerrit-Reviewer: Legoktm <legoktm.wikipe...@gmail.com>
Gerrit-Reviewer: Reedy <re...@wikimedia.org>
Gerrit-Reviewer: Siebrand <siebr...@kitano.nl>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to