specialuserlogin.php

来自「php 开发的内容管理系统」· PHP 代码 · 共 691 行 · 第 1/2 页

PHP
691
字号
				if ( $wgAuth->authenticate( $u->getName(), $this->mPassword ) ) {					$u =& $this->initUser( $u );				} else {					$this->mainLoginForm( wfMsg( 'wrongpassword' ) );					return;				}			} else {				$this->mainLoginForm( wfMsg( 'nosuchuser', $u->getName() ) );				return;			}		} else {			$u->loadFromDatabase();		}		if (!$u->checkPassword( $this->mPassword )) {			$this->mainLoginForm( wfMsg( $this->mPassword == '' ? 'wrongpasswordempty' : 'wrongpassword' ) );			return;		}		# We've verified now, update the real record		#		if ( $this->mRemember ) {			$r = 1;		} else {			$r = 0;		}		$u->setOption( 'rememberpassword', $r );		$wgAuth->updateUser( $u );		$wgUser = $u;		$wgUser->setCookies();		$wgUser->saveSettings();		if( $this->hasSessionCookie() ) {			return $this->successfulLogin( wfMsg( 'loginsuccess', $wgUser->getName() ) );		} else {			return $this->cookieRedirectCheck( 'login' );		}	}	/**	 * @private	 */	function mailPassword() {		global $wgUser, $wgOut;				# Check against the rate limiter		if( $wgUser->pingLimiter( 'mailpassword' ) ) {			$wgOut->rateLimited();			return;		}			if ( '' == $this->mName ) {			$this->mainLoginForm( wfMsg( 'noname' ) );			return;		}		$u = User::newFromName( $this->mName );		if( is_null( $u ) ) {			$this->mainLoginForm( wfMsg( 'noname' ) );			return;		}		if ( 0 == $u->getID() ) {			$this->mainLoginForm( wfMsg( 'nosuchuser', $u->getName() ) );			return;		}		$u->loadFromDatabase();		$result = $this->mailPasswordInternal( $u );		if( WikiError::isError( $result ) ) {			$this->mainLoginForm( wfMsg( 'mailerror', $result->getMessage() ) );		} else {			$this->mainLoginForm( wfMsg( 'passwordsent', $u->getName() ), 'success' );		}	}	/**	 * @return mixed true on success, WikiError on failure	 * @private	 */	function mailPasswordInternal( $u ) {		global $wgCookiePath, $wgCookieDomain, $wgCookiePrefix, $wgCookieSecure;		global $wgServer, $wgScript;		if ( '' == $u->getEmail() ) {			return wfMsg( 'noemail', $u->getName() );		}		$np = $u->randomPassword();		$u->setNewpassword( $np );		setcookie( "{$wgCookiePrefix}Token", '', time() - 3600, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );		$u->saveSettings();		$ip = wfGetIP();		if ( '' == $ip ) { $ip = '(Unknown)'; }		$m = wfMsg( 'passwordremindertext', $ip, $u->getName(), $np, $wgServer . $wgScript );		$result = $u->sendMail( wfMsg( 'passwordremindertitle' ), $m );		return $result;	}	/**	 * @param string $msg Message that will be shown on success	 * @param bool $auto Toggle auto-redirect to main page; default true	 * @private	 */	function successfulLogin( $msg, $auto = true ) {		global $wgUser;		global $wgOut;		# Run any hooks; ignore results		wfRunHooks('UserLoginComplete', array(&$wgUser));		$wgOut->setPageTitle( wfMsg( 'loginsuccesstitle' ) );		$wgOut->setRobotpolicy( 'noindex,nofollow' );		$wgOut->setArticleRelated( false );		$wgOut->addWikiText( $msg );		if ( !empty( $this->mReturnTo ) ) {			$wgOut->returnToMain( $auto, $this->mReturnTo );		} else {			$wgOut->returnToMain( $auto );		}	}	/** */	function userNotPrivilegedMessage() {		global $wgOut;		$wgOut->setPageTitle( wfMsg( 'whitelistacctitle' ) );		$wgOut->setRobotpolicy( 'noindex,nofollow' );		$wgOut->setArticleRelated( false );		$wgOut->addWikiText( wfMsg( 'whitelistacctext' ) );		$wgOut->returnToMain( false );	}	/**	 * @private	 */	function mainLoginForm( $msg, $msgtype = 'error' ) {		global $wgUser, $wgOut, $wgAllowRealName, $wgEnableEmail;		global $wgCookiePrefix, $wgAuth, $wgLoginLanguageSelector;		if ( $this->mType == 'signup' && !$wgUser->isAllowedToCreateAccount() ) {			$this->userNotPrivilegedMessage();			return;		}		if ( '' == $this->mName ) {			if ( $wgUser->isLoggedIn() ) {				$this->mName = $wgUser->getName();			} else {				$this->mName = @$_COOKIE[$wgCookiePrefix.'UserName'];			}		}		$titleObj = Title::makeTitle( NS_SPECIAL, 'Userlogin' );		require_once( 'SkinTemplate.php' );		require_once( 'templates/Userlogin.php' );		if ( $this->mType == 'signup' ) {			$template =& new UsercreateTemplate();			$q = 'action=submitlogin&type=signup';			$linkq = 'type=login';			$linkmsg = 'gotaccount';		} else {			$template =& new UserloginTemplate();			$q = 'action=submitlogin&type=login';			$linkq = 'type=signup';			$linkmsg = 'nologin';		}		if ( !empty( $this->mReturnTo ) ) {			$returnto = '&returnto=' . wfUrlencode( $this->mReturnTo );			$q .= $returnto;			$linkq .= $returnto;		}				# Pass any language selection on to the mode switch link		if( $wgLoginLanguageSelector && $this->mLanguage )			$linkq .= '&uselang=' . $this->mLanguage;		$link = '<a href="' . htmlspecialchars ( $titleObj->getLocalUrl( $linkq ) ) . '">';		$link .= wfMsgHtml( $linkmsg . 'link' );		$link .= '</a>';		# Don't show a "create account" link if the user can't		if( $this->showCreateOrLoginLink( $wgUser ) )			$template->set( 'link', wfMsgHtml( $linkmsg, $link ) );		else			$template->set( 'link', '' );				$template->set( 'header', '' );		$template->set( 'name', $this->mName );		$template->set( 'password', $this->mPassword );		$template->set( 'retype', $this->mRetype );		$template->set( 'email', $this->mEmail );		$template->set( 'realname', $this->mRealName );		$template->set( 'domain', $this->mDomain );		$template->set( 'action', $titleObj->getLocalUrl( $q ) );		$template->set( 'message', $msg );		$template->set( 'messagetype', $msgtype );		$template->set( 'createemail', $wgEnableEmail && $wgUser->isLoggedIn() );		$template->set( 'userealname', $wgAllowRealName );		$template->set( 'useemail', $wgEnableEmail );		$template->set( 'remember', $wgUser->getOption( 'rememberpassword' ) or $this->mRemember  );						# Prepare language selection links as needed		if( $wgLoginLanguageSelector ) {			$template->set( 'languages', $this->makeLanguageSelector() );			if( $this->mLanguage )				$template->set( 'uselang', $this->mLanguage );		}				// Give authentication and captcha plugins a chance to modify the form		$wgAuth->modifyUITemplate( $template );		if ( $this->mType == 'signup' ) {			wfRunHooks( 'UserCreateForm', array( &$template ) );		} else {			wfRunHooks( 'UserLoginForm', array( &$template ) );		}		$wgOut->setPageTitle( wfMsg( 'userlogin' ) );		$wgOut->setRobotpolicy( 'noindex,nofollow' );		$wgOut->setArticleRelated( false );		$wgOut->addTemplate( $template );	}		/**	 * @private	 */	function showCreateOrLoginLink( &$user ) {		if( $this->mType == 'signup' ) {			return( true );		} elseif( $user->isAllowedToCreateAccount() ) {			return( true );		} else {			return( false );		}	}	/**	 * @private	 */	function hasSessionCookie() {		global $wgDisableCookieCheck;		return ( $wgDisableCookieCheck ) ? true : ( isset( $_COOKIE[session_name()] ) );	}	/**	 * @private	 */	function cookieRedirectCheck( $type ) {		global $wgOut;		$titleObj = Title::makeTitle( NS_SPECIAL, 'Userlogin' );		$check = $titleObj->getFullURL( 'wpCookieCheck='.$type );		return $wgOut->redirect( $check );	}	/**	 * @private	 */	function onCookieRedirectCheck( $type ) {		global $wgUser;		if ( !$this->hasSessionCookie() ) {			if ( $type == 'new' ) {				return $this->mainLoginForm( wfMsg( 'nocookiesnew' ) );			} else if ( $type == 'login' ) {				return $this->mainLoginForm( wfMsg( 'nocookieslogin' ) );			} else {				# shouldn't happen				return $this->mainLoginForm( wfMsg( 'error' ) );			}		} else {			return $this->successfulLogin( wfMsg( 'loginsuccess', $wgUser->getName() ) );		}	}	/**	 * @private	 */	function throttleHit( $limit ) {		global $wgOut;		$wgOut->addWikiText( wfMsg( 'acct_creation_throttle_hit', $limit ) );	}		/**	 * Produce a bar of links which allow the user to select another language	 * during login/registration but retain "returnto"	 *	 * @return string	 */	function makeLanguageSelector() {		$msg = wfMsgForContent( 'loginlanguagelinks' );		if( $msg != '' && $msg != '&lt;loginlanguagelinks&gt;' ) {			$langs = explode( "\n", $msg );			$links = array();			foreach( $langs as $lang ) {				$lang = trim( $lang, '* ' );				$parts = explode( '|', $lang );				$links[] = $this->makeLanguageSelectorLink( $parts[0], $parts[1] );			}			return count( $links ) > 0 ? wfMsgHtml( 'loginlanguagelabel', implode( ' | ', $links ) ) : '';		} else {			return '';		}	}		/**	 * Create a language selector link for a particular language	 * Links back to this page preserving type and returnto	 *	 * @param $text Link text	 * @param $lang Language code	 */	function makeLanguageSelectorLink( $text, $lang ) {		global $wgUser;		$self = Title::makeTitle( NS_SPECIAL, 'Userlogin' );		$attr[] = 'uselang=' . $lang;		if( $this->mType == 'signup' )			$attr[] = 'type=signup';		if( $this->mReturnTo )			$attr[] = 'returnto=' . $this->mReturnTo;		$skin =& $wgUser->getSkin();		return $skin->makeKnownLinkObj( $self, htmlspecialchars( $text ), implode( '&', $attr ) );	}	}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?