*/ class PasswordReset extends SpecialPage { function PasswordReset() { SpecialPage::SpecialPage("PasswordReset","passwordreset"); self::loadMessages(); } function execute( $par ) { global $wgRequest, $wgOut, $wgUser, $wgTitle; $this->setHeaders(); if ( !$wgUser->isAllowed( 'passwordreset' ) ) { $wgOut->permissionRequired( 'passwordreset' ); return; } $username = Title::newFromText( $wgRequest->getText( 'username' ) ); $username_text = is_object( $username ) ? $username->getText() : ''; if (strlen($wgRequest->getText('username').$wgRequest->getText('newpass').$wgRequest->getText('confirmpass'))>0) { //POST data found if (strlen($username_text)>0) { $objUser = User::newFromName( $username->getText() ); $userID = $objUser->idForName(); if ( !is_object( $objUser ) || $userID == 0 ) { $validUser = false; $wgOut->addHTML( "" . wfMsg('passwordreset-invalidusername') . "
\n" ); } else { $validUser = true; } } else { $validUser = false; $wgOut->addHTML( "" . wfMsg('passwordreset-emptyusername') . "
\n" ); } $newpass = $wgRequest->getText( 'newpass' ); $confirmpass = $wgRequest->getText( 'confirmpass' ); if ($newpass==$confirmpass && strlen($newpass.$oldpass)>0) { //Passwords match $passMatch = true; } else { //Passwords DO NOT match $passMatch = false; $wgOut->addHTML( "" . wfMsg('passwordreset-nopassmatch') . "
\n" ); } if (!$wgUser->matchEditToken( $wgRequest->getVal( 'token' ) ) ) { $validUser = false; $passMatch = false; $wgOut->addHTML( "" . wfMsg('passwordreset-badtoken') . "
\n" ); } } $action = $wgTitle->escapeLocalUrl(); $token = $wgUser->editToken(); $wgOut->addHTML( "
" . wfMsg('passwordreset-username') . "
" . wfMsg('passwordreset-newpass') . "
" . wfMsg('passwordreset-confirmpass') . "
 
"); if ($validUser && $passMatch) { $wgOut->addWikiText ( "
\n" ); $wgOut->addWikiText ( $this->resetPassword( $userID, $newpass ) ); } else { //Invalid user or passwords don't match - do nothing } } private function resetPassword( $userID, $newpass ) { $dbw =& wfGetDB( DB_MASTER ); $dbw->update( 'user', array( 'user_password' => wfEncryptPassword( $userID, $newpass ) ), array( 'user_id' => $userID ) ); return wfMsg('passwordreset-success', $userID); } function loadMessages() { static $messagesLoaded = false; global $wgMessageCache; if ( $messagesLoaded ) return true; $messagesLoaded = true; require( dirname( __FILE__ ) . '/PasswordReset.i18n.php' ); foreach ( $allMessages as $lang => $langMessages ) { $wgMessageCache->addMessages( $langMessages, $lang ); } return true; } }