userFactory = $userFactory; } public function doesWrites() { return true; } public function execute( $code ) { // Ignore things like primary queries/connections on GET requests. // It's very convenient to just allow formless link usage. $trxProfiler = Profiler::instance()->getTransactionProfiler(); $this->setHeaders(); $this->checkReadOnly(); $this->checkPermissions(); $scope = $trxProfiler->silenceForScope( $trxProfiler::EXPECTATION_REPLICAS_ONLY ); $this->attemptInvalidate( $code ); ScopedCallback::consume( $scope ); } /** * Attempt to invalidate the user's email address and show success or failure * as needed; if successful, link to main page * * @param string $code Confirmation code */ private function attemptInvalidate( $code ) { $user = $this->userFactory->newFromConfirmationCode( (string)$code, IDBAccessObject::READ_LATEST ); if ( !is_object( $user ) ) { $this->getOutput()->addWikiMsg( 'confirmemail_invalid' ); return; } $user->invalidateEmail(); $user->saveSettings(); $this->getOutput()->addWikiMsg( 'confirmemail_invalidated' ); if ( !$this->getUser()->isRegistered() ) { $this->getOutput()->returnToMain(); } } } /** @deprecated class alias since 1.41 */ class_alias( SpecialEmailInvalidate::class, 'SpecialEmailInvalidate' );