/** * @param array $data * @return Status */ public function onSubmit(array $data) { $wiki = $this->isGlobalUser() ? null : wfWikiID(); $reason = isset($data['reason']) ? $data['reason'] : null; $safeName = User::getCanonicalName($data['newname'], 'creatable'); $request = new GlobalRenameRequest(); $request->setName($this->getUser()->getName()); $request->setWiki($wiki); $request->setNewName($safeName); $request->setReason($reason); if ($request->save()) { $status = Status::newGood(); if (isset($data['email'])) { $user = $this->getUser(); $user->setEmail($data['email']); $user->saveSettings(); $status = $user->sendConfirmationMail('set'); } } else { $status = Status::newFatal($this->msg('globalrenamerequest-save-error')); } return $status; }
protected function doResolveRequest($approved, $data) { $request = GlobalRenameRequest::newFromId($data['rid']); $oldUser = User::newFromName($request->getName()); if ($request->userIsGlobal() || $request->getWiki() === wfWikiId()) { $notifyEmail = MailAddress::newFromUser($oldUser); } else { $notifyEmail = $this->getRemoteUserMailAddress($request->getWiki(), $request->getName()); } $newUser = User::newFromName($request->getNewName(), 'creatable'); $status = new Status(); $session = $this->getContext()->exportSession(); if ($approved) { if ($request->userIsGlobal()) { // Trigger a global rename job $globalRenameUser = new GlobalRenameUser($this->getUser(), $oldUser, CentralAuthUser::getInstance($oldUser), $newUser, CentralAuthUser::getInstance($newUser), new GlobalRenameUserStatus($newUser->getName()), 'JobQueueGroup::singleton', new GlobalRenameUserDatabaseUpdates(), new GlobalRenameUserLogger($this->getUser()), $session); $status = $globalRenameUser->rename($data); } else { // If the user is local-only: // * rename the local user using LocalRenameUserJob // * create a global user attached only to the local wiki $job = new LocalRenameUserJob(Title::newFromText('Global rename job'), array('from' => $oldUser->getName(), 'to' => $newUser->getName(), 'renamer' => $this->getUser()->getName(), 'movepages' => true, 'suppressredirects' => true, 'promotetoglobal' => true, 'reason' => $data['reason'], 'session' => $session)); JobQueueGroup::singleton($request->getWiki())->push($job); // Now log it $this->logPromotionRename($oldUser->getName(), $request->getWiki(), $newUser->getName(), $data['reason']); $status = Status::newGood(); } } if ($status->isGood()) { $request->setStatus($approved ? GlobalRenameRequest::APPROVED : GlobalRenameRequest::REJECTED); $request->setCompleted(wfTimestampNow()); $request->setPerformer(CentralAuthUser::getInstance($this->getUser())->getId()); $request->setComments($data['comments']); if ($request->save()) { // Send email to the user about the change in status. if ($approved) { $subject = $this->msg('globalrenamequeue-email-subject-approved')->inContentLanguage()->text(); $body = $this->msg('globalrenamequeue-email-body-approved', array($oldUser->getName(), $newUser->getName()))->inContentLanguage()->text(); } else { $subject = $this->msg('globalrenamequeue-email-subject-rejected')->inContentLanguage()->text(); $body = $this->msg('globalrenamequeue-email-body-rejected', array($oldUser->getName(), $newUser->getName(), $request->getComments()))->inContentLanguage()->text(); } if ($notifyEmail !== null && $notifyEmail->address) { $type = $approved ? 'approval' : 'rejection'; wfDebugLog('CentralAuthRename', "Sending {$type} email to User:{$oldUser->getName()}/{$notifyEmail->address}"); $this->sendNotificationEmail($notifyEmail, $subject, $body); } } else { $status->fatal('globalrenamequeue-request-savefailed'); } } return $status; }
/** * @param $user User * @param $abortError * @return bool */ static function onAbortNewAccount($user, &$abortError) { global $wgCentralAuthPreventUnattached; global $wgCentralAuthEnableGlobalRenameRequest; $centralUser = CentralAuthUser::getInstance($user); if ($centralUser->exists() || $centralUser->renameInProgressOn(wfWikiID())) { $abortError = wfMessage('centralauth-account-exists')->text(); return false; } if ($wgCentralAuthPreventUnattached && !$centralUser->exists() && $centralUser->listUnattached()) { // If no global account exists and there are unattached accounts, // don't let a new unattached account get created. We'll pretend // that the name is already taken, because someone will eventually // get it. See bug 67901. $abortError = wfMessage('centralauth-account-unattached-exists')->text(); return false; } // Block account creation if name is a pending rename request if ($wgCentralAuthEnableGlobalRenameRequest && GlobalRenameRequest::nameHasPendingRequest($user->getName())) { $abortError = wfMessage('centralauth-account-rename-exists')->text(); return false; } return true; }