78 $block = $performer->getBlock();
84 $out->addWikiMsg(
'renameuser-summary' );
91 $userNames = $par !==
null ? explode(
'/', $par, 2 ) : [];
94 $oldName = $request->getText(
'oldusername', $userNames[0] ??
'' );
95 $oldName = trim( str_replace(
'_',
' ', $oldName ) );
96 $oldTitle = $this->titleFactory->makeTitle(
NS_USER, $oldName );
99 $origNewName = $request->getText(
'newusername', $userNames[1] ??
'' );
100 $origNewName = trim( str_replace(
'_',
' ', $origNewName ) );
104 $newName = $newTitle ? $newTitle->getText() :
'';
106 $reason = $request->getText(
'reason' );
107 $moveChecked = $request->getBool(
'movepages', !$request->wasPosted() );
108 $suppressChecked = $request->getCheck(
'suppressredirect' );
109 $confirmAction = $request->getCheck(
'confirmaction' );
111 if ( $oldName !==
'' && $newName !==
'' && !$confirmAction ) {
112 $warnings = $this->getWarnings( $oldName, $newName );
117 $this->showForm( $oldName, $newName, $warnings, $reason, $moveChecked, $suppressChecked );
119 if ( $request->getText(
'wpEditToken' ) ===
'' ) {
120 # They probably haven't even submitted the form, so don't go further.
124 # Let user read warnings
128 !$request->wasPosted() ||
129 !$performer->matchEditToken( $request->getVal(
'wpEditToken' ) )
131 $out->addHTML( Html::errorBox( $out->msg(
'renameuser-error-request' )->parse() ) );
136 $out->addHTML( Html::errorBox(
137 $out->msg(
'renameusererrorinvalid', $request->getText(
'newusername' ) )->parse()
142 if ( $oldName === $newName ) {
143 $out->addHTML( Html::errorBox( $out->msg(
'renameuser-error-same-user' )->parse() ) );
149 $oldUser = $this->userFactory->newFromName( $oldName, $this->userFactory::RIGOR_NONE );
150 $newUser = $this->userFactory->newFromName( $newName, $this->userFactory::RIGOR_CREATABLE );
154 $out->addHTML( Html::errorBox(
155 $out->msg(
'renameusererrorinvalid', $oldTitle->getText() )->parse()
161 $out->addHTML( Html::errorBox(
162 $out->msg(
'renameusererrorinvalid', $newTitle->getText() )->parse()
172 $dbr = $this->dbConns->getReplicaDatabase();
173 $uid = $dbr->newSelectQueryBuilder()
174 ->select(
'user_id' )
176 ->where( [
'user_name' => $oldName ] )
177 ->caller( __METHOD__ )
179 if ( $uid ===
false ) {
184 $uid = $oldUser->idForName();
185 $oldTitle = $this->titleFactory->makeTitleSafe(
NS_USER, $oldUser->getName() );
187 $out->addHTML( Html::errorBox(
188 $out->msg(
'renameusererrorinvalid', $oldName )->parse()
192 $oldName = $oldTitle->getText();
197 $uid = $oldUser->idForName();
201 $out->addHTML( Html::errorBox(
202 $out->msg(
'renameusererrordoesnotexist', $oldName )->parse()
208 if ( $newUser->idForName() !== 0 ) {
209 $out->addHTML( Html::errorBox(
210 $out->msg(
'renameusererrorexists', $newName )->parse()
220 if ( !$this->permissionManager->userHasRight( $performer,
'renameuser' ) ) {
223 if ( $this->userFactory->isUserTableShared()
224 && !$this->permissionManager->userHasRight( $performer,
'renameuser-global' ) ) {
225 $out->addHTML( Html::errorBox( $out->msg(
'renameuser-error-global-rights' )->parse() ) );
230 if ( !$this->
getHookRunner()->onRenameUserAbort( $uid, $oldName, $newName ) ) {
234 $forceGlobalDetach = $confirmAction && $request->getBool(
'forceglobaldetach' );
236 $rename = $this->renameUserFactory->newRenameUser( $performer, $oldUser, $newName, $reason, [
237 'movePages' => $moveChecked,
238 'suppressRedirect' => $suppressChecked,
239 'forceGlobalDetach' => $forceGlobalDetach,
241 $status = $rename->rename();
243 if ( $status->isGood() ) {
247 $out->msg(
'renameusersuccess', $oldTitle->getText(), $newTitle->getText() )
254 foreach ( $status->getMessages() as $msg ) {
255 $outHtml = $outHtml . $out->msg( $msg )->parse() .
'<br/>';
257 if ( $status->isOK() ) {
258 $out->addHTML( Html::warningBox( $outHtml ) );
260 $out->addHTML( Html::errorBox( $outHtml ) );