Wikia code/includes/specials/SpecialUserlogin.php
This page is obsolete. It is being retained for archival purposes. It may document extensions or features that are obsolete and/or no longer supported. Do not rely on the information here being up-to-date. The information shown below refers to the now unmaintained 1.16 MediaWiki release. The current stable release number is 1.42.1. |
Removed one silly (probably accidental) change in Wikia code. Still many diffs below...
--- D:\Programming\SVN\mediawiki\branches\REL1_16\phase3\includes\specials\SpecialUserlogin.php 2011-07-18 22:31:17.701171900 +0100
+++ D:\Programming\SVN\wikia\trunk\includes\specials\SpecialUserlogin.php 2011-08-17 15:28:16.346679700 +0100
@@ -42,6 +42,7 @@
var $mAction, $mCreateaccount, $mCreateaccountMail, $mMailmypassword;
var $mLoginattempt, $mRemember, $mEmail, $mDomain, $mLanguage;
var $mSkipCookieCheck, $mReturnToQuery, $mToken;
+ var $mMarketingOptIn, $wpBirthYear, $wpBirthMonth, $wpBirthDay;
private $mExtUser = null;
@@ -70,10 +72,15 @@
$this->mLoginattempt = $request->getCheck( 'wpLoginattempt' );
$this->mAction = $request->getVal( 'action' );
$this->mRemember = $request->getCheck( 'wpRemember' );
+ $this->mMarketingOptIn = $request->getCheck( 'wpMarketingOptIn' );
$this->mLanguage = $request->getText( 'uselang' );
$this->mSkipCookieCheck = $request->getCheck( 'wpSkipCookieCheck' );
$this->mToken = ($this->mType == 'signup' ) ? $request->getVal( 'wpCreateaccountToken' ) : $request->getVal( 'wpLoginToken' );
+ $this->wpBirthYear = $request->getVal( 'wpBirthYear' );
+ $this->wpBirthMonth = $request->getVal( 'wpBirthMonth' );
+ $this->wpBirthDay = $request->getVal( 'wpBirthDay' );
+
if ( $wgRedirectOnLogin ) {
$this->mReturnTo = $wgRedirectOnLogin;
$this->mReturnToQuery = '';
@@ -95,14 +102,21 @@
}
$wgAuth->setDomain( $this->mDomain );
- # When switching accounts, it sucks to get automatically logged out
- $returnToTitle = Title::newFromText( $this->mReturnTo );
- if( is_object( $returnToTitle ) && $returnToTitle->isSpecial( 'Userlogout' ) ) {
+
+ $title = Title::newFromText($this->mReturnTo);
+ if (!empty($title))
+ {
+ $this->mResolvedReturnTo = strtolower(SpecialPage::resolveAlias($title->getDBKey()));
+ if(in_array($this->mResolvedReturnTo,array('userlogout','signup','connect')))
+ {
$this->mReturnTo = '';
$this->mReturnToQuery = '';
}
}
+
+ }
+
function execute() {
if ( !is_null( $this->mCookieCheck ) ) {
$this->onCookieRedirectCheck( $this->mCookieCheck );
@@ -131,9 +145,7 @@
$this->mainLoginForm( wfMsg( 'noemail', htmlspecialchars( $this->mName ) ) );
return;
}
-
- $u = $this->addNewaccountInternal();
-
+ $u = $this->addNewAccountInternal();
if ($u == null) {
return;
}
@@ -200,7 +212,9 @@
wfRunHooks( 'AddNewAccount', array( $wgUser, false ) );
$wgUser->addNewUserLogEntry();
if( $this->hasSessionCookie() ) {
- return $this->successfulCreation();
+ $ret = $this->successfulCreation();
+ wfRunHooks( 'AddNewAccount2', array( $wgUser ) );
+ return $ret;
} else {
return $this->cookieRedirectCheck( 'new' );
}
@@ -228,9 +242,34 @@
global $wgAuth, $wgMinimalPasswordLength;
global $wgEmailConfirmToEdit;
+ /* wikia change start */
+ //new registration - start [Marooned [at] wikia-inc.com]
+ //check if the date has been choosen
+ if ($this->wpBirthYear == -1 || $this->wpBirthMonth == -1 || $this->wpBirthDay == -1) {
+ $this->mainLoginForm( wfMsg( 'userlogin-bad-birthday' ) );
+ return null;
+ }
+
+ $userBirthDay = strtotime($this->wpBirthYear . '-' . $this->wpBirthMonth . '-' . $this->wpBirthDay);
+ if($userBirthDay > strtotime('-5 years')) {
+ $wgOut->setPageTitle( wfMsg('userlogin-unable-title') );
+ $wgOut->setRobotpolicy( 'noindex,nofollow' );
+ $wgOut->setArticleRelated( false );
+ $wgOut->addScript('<script type="text/javascript">WET.byStr(\'signupActions/signup/createaccount/failure\');</script>');
+ $wgOut->addWikiText( wfMsg('userlogin-unable-info') );
+ if ( !empty( $this->mReturnTo ) ) {
+ $wgOut->returnToMain( true, $this->mReturnTo );
+ } else {
+ $wgOut->returnToMain( true );
+ }
+ return null;
+ }
+ //new registration - end
+ /* wikia change end */
+
// If the user passes an invalid domain, something is fishy
if( !$wgAuth->validDomain( $this->mDomain ) ) {
- $this->mainLoginForm( wfMsg( 'wrongpassword' ) );
+ $this->mainLoginForm( wfMsg( 'wrongpassword' ) ); // TODO: Misleading message.
return false;
}
@@ -293,7 +332,12 @@
return false;
}
- if ( 0 != $u->idForName() ) {
+ $this->mExtUser = ExternalUser::newFromName( $this->mName );
+
+ if ( is_object( $this->mExtUser ) && ( 0 != $this->mExtUser->getId() ) ) {
+ $this->mainLoginForm( wfMsg( 'userexists' ) );
+ return false;
+ } elseif ( 0 != $u->idForName() ) {
$this->mainLoginForm( wfMsg( 'userexists' ) );
return false;
}
@@ -360,7 +404,19 @@
}
self::clearCreateaccountToken();
- return $this->initUser( $u, false );
+ $u->mBirthDate = date('Y-m-d', $userBirthDay);
+ $u = $this->initUser( $u, false );
+ $user_id = $u->getID();
+ if(!empty($user_id)) {
+ $dbw = wfGetDB(DB_MASTER);
+ $dbw->update(
+ 'user',
+ array( 'user_birthdate' => date('Y-m-d', $userBirthDay) ),
+ array( 'user_id' => $user_id ),
+ __METHOD__
+ );
+ }
+ return $u;
}
/**
@@ -373,9 +429,16 @@
* @private
*/
function initUser( $u, $autocreate ) {
- global $wgAuth;
+ global $wgAuth, $wgExternalAuthType;
+ if ( $wgExternalAuthType ) {
+ $u = ExternalUser::addUser( $u, $this->mPassword, $this->mEmail, $this->mRealName );
+ if ( is_object( $u ) ) {
+ $this->mExtUser = ExternalUser::newFromName( $this->mName );
+ }
+ } else{
$u->addToDatabase();
+ }
if ( $wgAuth->allowPasswordChange() ) {
$u->setPassword( $this->mPassword );
@@ -387,7 +450,7 @@
$wgAuth->initUser( $u, $autocreate );
- if ( $this->mExtUser ) {
+ if ( is_object( $this->mExtUser ) ) {
$this->mExtUser->linkToLocal( $u->getId() );
$email = $this->mExtUser->getPref( 'emailaddress' );
if ( $email && !$this->mEmail ) {
@@ -396,6 +459,8 @@
}
$u->setOption( 'rememberpassword', $this->mRemember ? 1 : 0 );
+ $u->setOption( 'marketingallowed', $this->mMarketingOptIn ? 1 : 0 );
+ $u->setOption('skinoverwrite', 1);
$u->saveSettings();
# Update user count
@@ -423,7 +488,6 @@
// token-less login attempts don't count towards the throttle
// but wrong-token attempts do.
- // If the user doesn't have a login token yet, set one.
if ( !self::getLoginToken() ) {
self::setLoginToken();
return self::NEED_TOKEN;
@@ -470,6 +534,15 @@
$this->mExtUser = ExternalUser::newFromName( $this->mName );
+ global $wgExternalAuthType, $wgAutocreatePolicy;
+ if ( $wgExternalAuthType && $wgAutocreatePolicy != 'never'
+ && is_object( $this->mExtUser )
+ && $this->mExtUser->authenticate( $this->mPassword ) ) {
+ # The external user and local user have the same name and
+ # password, so we assume they're the same.
+ $this->mExtUser->linkToLocal( $this->mExtUser->getId() );
+ }
+
# TODO: Allow some magic here for invalid external names, e.g., let the
# user choose a different wiki name.
$u = User::newFromName( $this->mName );
@@ -485,17 +558,6 @@
} else {
$isAutoCreated = true;
}
- } else {
- global $wgExternalAuthType, $wgAutocreatePolicy;
- if ( $wgExternalAuthType && $wgAutocreatePolicy != 'never'
- && is_object( $this->mExtUser )
- && $this->mExtUser->authenticate( $this->mPassword ) ) {
- # The external user and local user have the same name and
- # password, so we assume they're the same.
- $this->mExtUser->linkToLocal( $u->getID() );
- }
-
- $u->load();
}
// Give general extensions, such as a captcha, a chance to abort logins
@@ -785,7 +847,7 @@
* @private
*/
function mailPasswordInternal( $u, $throttle = true, $emailTitle = 'passwordremindertitle', $emailText = 'passwordremindertext' ) {
- global $wgServer, $wgScript, $wgUser, $wgNewPasswordExpiry;
+ global $wgServer, $wgScript, $wgUser, $wgNewPasswordExpiry, $wgNoReplyAddress;
if ( $u->getEmail() == '' ) {
return new WikiError( wfMsg( 'noemail', $u->getName() ) );
@@ -800,10 +862,27 @@
$np = $u->randomPassword();
$u->setNewpassword( $np, $throttle );
$u->saveSettings();
+ /* Wikia change begin - @author: Uberfuzzy */
+ /* use noReply address (if available) */
+ $nr = null;
+ if( !empty($wgNoReplyAddress) ) {
+ $nr = new MailAddress($wgNoReplyAddress, 'No Reply');
+ }
+ /* Wikia change begin - @author: Marooned */
+ /* HTML e-mails functionality */
+ global $wgEnableRichEmails;
+ $priority = 1; // Password emails are higher than default priority of 0
+ if (empty($wgEnableRichEmails)) {
$userLanguage = $u->getOption( 'language' );
$m = wfMsgExt( $emailText, array( 'parsemag', 'language' => $userLanguage ), $ip, $u->getName(), $np,
$wgServer . $wgScript, round( $wgNewPasswordExpiry / 86400 ) );
- $result = $u->sendMail( wfMsgExt( $emailTitle, array( 'parsemag', 'language' => $userLanguage ) ), $m );
+ $result = $u->sendMail( wfMsgExt( $emailTitle, array( 'parsemag', 'language' => $userLanguage ) ), $m, null, $nr, 'TemporaryPassword', $priority );
+ }
+ else {
+ $wantHTML = $u->isAnon() || $u->getOption('htmlemails');
+ list($m, $mHTML) = wfMsgHTMLwithLanguage($emailText, $u->getOption('language'), array( 'parsemag' ), array($ip, $u->getName(), $np, $wgServer . $wgScript, round( $wgNewPasswordExpiry / 86400 )), $wantHTML);
+ $result = $u->sendMail( wfMsg( $emailTitle ), $m, null, $nr, 'TemporaryPassword', $mHTML, $priority );
+ }
return $result;
}
@@ -830,10 +909,12 @@
$this->displaySuccessfulLogin( 'loginsuccess', $injected_html );
} else {
$titleObj = Title::newFromText( $this->mReturnTo );
- if ( !$titleObj instanceof Title ) {
+ if ( ( !$titleObj instanceof Title ) || ( $titleObj->isSpecial("Userlogout") ) || ( $titleObj->isSpecial("Signup") ) ) {
$titleObj = Title::newMainPage();
+ $wgOut->redirect( $titleObj->getFullURL( "cb=".rand(1,10000) ) );
+ return true;
}
- $wgOut->redirect( $titleObj->getFullURL( $this->mReturnToQuery ) );
+ $wgOut->redirect( $titleObj->getFullURL( $this->mReturnToQuery . "&cb=".rand(1,10000) ) );
}
}
@@ -925,6 +1006,10 @@
$titleObj = SpecialPage::getTitleFor( 'Userlogin' );
+ if ( ('' != $msg) && ('error' == $msgtype) && ('signup' == $this->mType) ) {
+ $wgOut->addScript('<script type="text/javascript">WET.byStr(\'signupActions/signup/createaccount/failure\');</script>');
+ }
+
if ( $this->mType == 'signup' ) {
// Block signup here if in readonly. Keeps user from
// going through the process (filling out data, etc)
@@ -954,11 +1039,16 @@
if ( $this->mType == 'signup' ) {
$template = new UsercreateTemplate();
$q = 'action=submitlogin&type=signup';
+ $q2 = 'action=submitlogin&type=login';
$linkq = 'type=login';
$linkmsg = 'gotaccount';
+
+ // ADi: marketing opt-in/out checkbox added
+ $template->addInputItem( 'wpMarketingOptIn', 1, 'checkbox', 'tog-marketingallowed');
} else {
$template = new UserloginTemplate();
$q = 'action=submitlogin&type=login';
+ $q2 = 'action=submitlogin&type=login';
$linkq = 'type=signup';
$linkmsg = 'nologin';
}
@@ -970,6 +1060,8 @@
wfUrlencode( $this->mReturnToQuery );
$q .= $returnto;
$linkq .= $returnto;
+ $q2 .= $returnto;
+ //$linkq2 .= $returnto; // not used anywhere else... FIXME: REMOVE
}
# Pass any language selection on to the mode switch link
@@ -994,7 +1086,9 @@
$template->set( 'realname', $this->mRealName );
$template->set( 'domain', $this->mDomain );
- $template->set( 'action', $titleObj->getLocalUrl( $q ) );
+ $template->set( 'actioncreate', $titleObj->getLocalUrl( $q ) );
+ $template->set( 'actionlogin', $titleObj->getLocalUrl( $q2 ) );
+
$template->set( 'message', $msg );
$template->set( 'messagetype', $msgtype );
$template->set( 'createemail', $wgEnableEmail && $wgUser->isLoggedIn() );
@@ -1005,6 +1099,10 @@
$template->set( 'canremember', ( $wgCookieExpiration > 0 ) );
$template->set( 'remember', $wgUser->getOption( 'rememberpassword' ) or $this->mRemember );
+ $template->set( 'birthyear', $this->wpBirthYear );
+ $template->set( 'birthmonth', $this->wpBirthMonth );
+ $template->set( 'birthday', $this->wpBirthDay );
+
if ( $this->mType == 'signup' ) {
if ( !self::getCreateaccountToken() ) {
self::setCreateaccountToken();