'createtalk',
'delete',
'deletedhistory',
+ 'deletedtext',
'deleterevision',
'edit',
'editinterface',
'reupload',
'reupload-shared',
'rollback',
+ 'sendemail',
'siteadmin',
'suppressionlog',
'suppressredirect',
$validate = 'valid';
}
$name = self::getCanonicalName( $name, $validate );
- if ( $name === false ) {
- return null;
+ if ( WikiError::isError( $name ) ) {
+ return $name;
+ } elseif ( $name === false ) {
+ return false;
} else {
# Create unloaded user object
$u = new User;
# Illegal name
return null;
}
-
- if ( isset(self::$idCacheByName[$name]) ) {
+
+ if ( isset( self::$idCacheByName[$name] ) ) {
return self::$idCacheByName[$name];
}
-
+
$dbr = wfGetDB( DB_SLAVE );
$s = $dbr->selectRow( 'user', array( 'user_id' ), array( 'user_name' => $nt->getText() ), __METHOD__ );
if ( $s === false ) {
- $result = 0;
+ $result = null;
} else {
$result = $s->user_id;
}
-
+
self::$idCacheByName[$name] = $result;
-
- if ( count(self::$idCacheByName) > 1000 ) {
+
+ if ( count( self::$idCacheByName ) > 1000 ) {
self::$idCacheByName = array();
}
-
+
return $result;
}
* Is the input a valid password for this user?
*
* @param $password String Desired password
- * @return mixed: true on success, string of error message on failure
+ * @return bool True or false
*/
function isValidPassword( $password ) {
global $wgMinimalPasswordLength, $wgContLang;
if( !wfRunHooks( 'isValidPassword', array( $password, &$result, $this ) ) )
return $result;
+ if( $result === false )
+ return false;
+
+ // Password needs to be long enough, and can't be the same as the username
+ return strlen( $password ) >= $wgMinimalPasswordLength
+ && $wgContLang->lc( $password ) !== $wgContLang->lc( $this->mName );
+ }
- // Password needs to be long enough
- if( strlen( $password ) < $wgMinimalPasswordLength ) {
- return 'passwordtooshort';
- } elseif( $wgContLang->lc( $password ) == $wgContLang->lc( $this->mName ) ) {
- return 'password-name-match';
+ /**
+ * Given unvalidated password input, return error message on failure.
+ *
+ * @param $password String Desired password
+ * @return mixed: true on success, string of error message on failure
+ */
+ function getPasswordValidity( $password ) {
+ global $wgMinimalPasswordLength, $wgContLang;
+
+ if ( !$this->isValidPassword( $password ) ) {
+ if( strlen( $password ) < $wgMinimalPasswordLength ) {
+ return 'passwordtooshort';
+ } elseif ( $wgContLang->lc( $password ) == $wgContLang->lc( $this->mName ) ) {
+ return 'password-name-match';
+ }
} else {
return true;
}
* - 'creatable' Valid for batch processes, login and account creation
*/
static function getCanonicalName( $name, $validate = 'valid' ) {
- # Force usernames to capital
- global $wgContLang;
- $name = $wgContLang->ucfirst( $name );
+ # Maybe force usernames to capital
+ $name = Title::capitalize( $name, NS_USER );
# Reject names containing '#'; these will be cleaned up
# with title normalisation, but then it's too late to
# check elsewhere
if( strpos( $name, '#' ) !== false )
- return false;
+ return new WikiError( 'usernamehasherror' );
# Clean up name according to title rules
- $t = ($validate === 'valid') ?
+ $t = ( $validate === 'valid' ) ?
Title::newFromText( $name ) : Title::makeTitle( NS_USER, $name );
# Check for invalid titles
if( is_null( $t ) ) {
}
break;
default:
- throw new MWException( 'Invalid parameter value for $validate in '.__METHOD__ );
+ throw new MWException( 'Invalid parameter value for $validate in ' . __METHOD__ );
}
return $name;
}
$l = strlen( $pwchars ) - 1;
$pwlength = max( 7, $wgMinimalPasswordLength );
- $digit = mt_rand(0, $pwlength - 1);
+ $digit = mt_rand( 0, $pwlength - 1 );
$np = '';
for ( $i = 0; $i < $pwlength; $i++ ) {
- $np .= $i == $digit ? chr( mt_rand(48, 57) ) : $pwchars{ mt_rand(0, $l)};
+ $np .= $i == $digit ? chr( mt_rand( 48, 57 ) ) : $pwchars{ mt_rand( 0, $l ) };
}
return $np;
}
$variant = $wgContLang->getPreferredVariant( false );
$defOpt['variant'] = $variant;
$defOpt['language'] = $variant;
- foreach( SearchEngine::searchableNamespaces() as $nsnum => $nsname ) {
- $defOpt['searchNs'.$nsnum] = !empty($wgNamespacesToBeSearchedDefault[$nsnum]);
+ foreach( SearchEngine::searchableNamespaces() as $nsnum => $nsname ) {
+ $defOpt['searchNs'.$nsnum] = !empty( $wgNamespacesToBeSearchedDefault[$nsnum] );
}
$defOpt['skin'] = $wgDefaultSkin;
# Check if we are looking at an IP or a logged-in user
if ( $this->isIP( $this->getName() ) ) {
$ip = $this->getName();
- }
- else {
+ } else {
# Check if we are looking at the current user
# If we don't, and the user is logged in, we don't know about
# his IP / autoblock status, so ignore autoblock of current user's IP
if ( $this->getID() != $wgUser->getID() ) {
$ip = '';
- }
- else {
+ } else {
# Get IP of current user
$ip = wfGetIP();
}
$this->mBlock = new Block();
$this->mBlock->fromMaster( !$bFromSlave );
if ( $this->mBlock->load( $ip , $this->mId ) ) {
- wfDebug( __METHOD__.": Found block.\n" );
+ wfDebug( __METHOD__ . ": Found block.\n" );
$this->mBlockedby = $this->mBlock->mBy;
$this->mBlockreason = $this->mBlock->mReason;
$this->mHideName = $this->mBlock->mHideName;
$this->mAllowUsertalk = $this->mBlock->mAllowUsertalk;
- if ( $this->isLoggedIn() ) {
+ if ( $this->isLoggedIn() && $wgUser->getID() == $this->getID() ) {
$this->spreadBlock();
}
} else {
}
# Proxy blocking
- if ( !$this->isAllowed('proxyunbannable') && !in_array( $ip, $wgProxyWhitelist ) ) {
+ if ( !$this->isAllowed( 'proxyunbannable' ) && !in_array( $ip, $wgProxyWhitelist ) ) {
# Local list
if ( wfIsLocallyBlockedProxy( $ip ) ) {
$this->mBlockedby = wfMsg( 'proxyblocker' );
$found = false;
$host = '';
// FIXME: IPv6 ??? (http://bugs.php.net/bug.php?id=33170)
- if( IP::isIPv4($ip) ) {
+ if( IP::isIPv4( $ip ) ) {
# Make hostname
$host = "$ip.$base";
*/
public function isPingLimitable() {
global $wgRateLimitsExcludedGroups;
+ global $wgRateLimitsExcludedIPs;
if( array_intersect( $this->getEffectiveGroups(), $wgRateLimitsExcludedGroups ) ) {
// Deprecated, but kept for backwards-compatibility config
return false;
}
+ if( in_array( wfGetIP(), $wgRateLimitsExcludedIPs ) ) {
+ // No other good way currently to disable rate limits
+ // for specific IPs. :P
+ // But this is a crappy hack and should die.
+ return false;
+ }
return !$this->isAllowed('noratelimit');
}
* @param $action \string Action to enforce; 'edit' if unspecified
* @return \bool True if a rate limiter was tripped
*/
- function pingLimiter( $action='edit' ) {
-
+ function pingLimiter( $action = 'edit' ) {
# Call the 'PingLimiter' hook
$result = false;
if( !wfRunHooks( 'PingLimiter', array( &$this, $action, $result ) ) ) {
}
// Set the user limit key
if ( $userLimit !== false ) {
- wfDebug( __METHOD__.": effective user limit: $userLimit\n" );
+ wfDebug( __METHOD__ . ": effective user limit: $userLimit\n" );
$keys[ wfMemcKey( 'limiter', $action, 'user', $id ) ] = $userLimit;
}
list( $max, $period ) = $limit;
$summary = "(limit $max in {$period}s)";
$count = $wgMemc->get( $key );
+ // Already pinged?
if( $count ) {
if( $count > $max ) {
- wfDebug( __METHOD__.": tripped! $key at $count $summary\n" );
+ wfDebug( __METHOD__ . ": tripped! $key at $count $summary\n" );
if( $wgRateLimitLog ) {
@error_log( wfTimestamp( TS_MW ) . ' ' . wfWikiID() . ': ' . $this->getName() . " tripped $key at $count $summary\n", 3, $wgRateLimitLog );
}
$triggered = true;
} else {
- wfDebug( __METHOD__.": ok. $key at $count $summary\n" );
+ wfDebug( __METHOD__ . ": ok. $key at $count $summary\n" );
}
+ $wgMemc->incr( $key );
} else {
- wfDebug( __METHOD__.": adding record for $key $summary\n" );
- $wgMemc->add( $key, 1, intval( $period ) );
+ wfDebug( __METHOD__ . ": adding record for $key $summary\n" );
+ $wgMemc->set( $key, 1, intval( $period ) ); // first ping
}
- $wgMemc->incr( $key );
}
wfProfileOut( __METHOD__ );
function isBlockedFrom( $title, $bFromSlave = false ) {
global $wgBlockAllowsUTEdit;
wfProfileIn( __METHOD__ );
- wfDebug( __METHOD__.": enter\n" );
+ wfDebug( __METHOD__ . ": enter\n" );
- wfDebug( __METHOD__.": asking isBlocked()\n" );
+ wfDebug( __METHOD__ . ": asking isBlocked()\n" );
$blocked = $this->isBlocked( $bFromSlave );
- $allowUsertalk = ($wgBlockAllowsUTEdit ? $this->mAllowUsertalk : false);
+ $allowUsertalk = ( $wgBlockAllowsUTEdit ? $this->mAllowUsertalk : false );
# If a user's name is suppressed, they cannot make edits anywhere
if ( !$this->mHideName && $allowUsertalk && $title->getText() === $this->getName() &&
$title->getNamespace() == NS_USER_TALK ) {
$blocked = false;
- wfDebug( __METHOD__.": self-talk page, ignoring any blocks\n" );
+ wfDebug( __METHOD__ . ": self-talk page, ignoring any blocks\n" );
}
+
+ wfRunHooks( 'UserIsBlockedFrom', array( $this, $title, &$blocked, &$allowUsertalk ) );
+
wfProfileOut( __METHOD__ );
return $blocked;
}
*/
function getBlockId() {
$this->getBlockedStatus();
- return ($this->mBlock ? $this->mBlock->mId : false);
+ return ( $this->mBlock ? $this->mBlock->mId : false );
}
/**
*/
function getNewMessageLinks() {
$talks = array();
- if (!wfRunHooks('UserRetrieveNewTalks', array(&$this, &$talks)))
+ if( !wfRunHooks( 'UserRetrieveNewTalks', array( &$this, &$talks ) ) )
return $talks;
- if (!$this->getNewtalk())
+ if( !$this->getNewtalk() )
return array();
$up = $this->getUserPage();
$utp = $up->getTalkPage();
- return array(array("wiki" => wfWikiID(), "link" => $utp->getLocalURL()));
+ return array( array( 'wiki' => wfWikiID(), 'link' => $utp->getLocalURL() ) );
}
-
/**
* Internal uncached check for new messages
*
__METHOD__,
'IGNORE' );
if ( $dbw->affectedRows() ) {
- wfDebug( __METHOD__.": set on ($field, $id)\n" );
+ wfDebug( __METHOD__ . ": set on ($field, $id)\n" );
return true;
} else {
- wfDebug( __METHOD__." already set ($field, $id)\n" );
+ wfDebug( __METHOD__ . " already set ($field, $id)\n" );
return false;
}
}
array( $field => $id ),
__METHOD__ );
if ( $dbw->affectedRows() ) {
- wfDebug( __METHOD__.": killed on ($field, $id)\n" );
+ wfDebug( __METHOD__ . ": killed on ($field, $id)\n" );
return true;
} else {
- wfDebug( __METHOD__.": already gone ($field, $id)\n" );
+ wfDebug( __METHOD__ . ": already gone ($field, $id)\n" );
return false;
}
}
*/
function validateCache( $timestamp ) {
$this->load();
- return ($timestamp >= $this->mTouched);
+ return ( $timestamp >= $this->mTouched );
}
/**
if( !$wgAuth->allowPasswordChange() ) {
throw new PasswordError( wfMsg( 'password-change-forbidden' ) );
}
-
- $valid = $this->isValidPassword( $str );
- if( $valid !== true ) {
- global $wgMinimalPasswordLength;
+
+ if( !$this->isValidPassword( $str ) ) {
+ global $wgMinimalPasswordLength;
+ $valid = $this->getPasswordValidity( $str );
throw new PasswordError( wfMsgExt( $valid, array( 'parsemag' ),
$wgMinimalPasswordLength ) );
- }
+ }
}
if( !$wgAuth->setPassword( $this, $str ) ) {
function setOption( $oname, $val ) {
$this->load();
$this->loadOptions();
-
+
if ( $oname == 'skin' ) {
# Clear cached skin, so the new one displays immediately in Special:Preferences
unset( $this->mSkin );
}
-
+
// Explicitly NULL values should refer to defaults
global $wgDefaultUserOptions;
- if( is_null($val) && isset($wgDefaultUserOptions[$oname]) ) {
+ if( is_null( $val ) && isset( $wgDefaultUserOptions[$oname] ) ) {
$val = $wgDefaultUserOptions[$oname];
}
-
+
$this->mOptions[$oname] = $val;
}
*/
function getEffectiveGroups( $recache = false ) {
if ( $recache || is_null( $this->mEffectiveGroups ) ) {
+ wfProfileIn( __METHOD__ );
$this->mEffectiveGroups = $this->getGroups();
$this->mEffectiveGroups[] = '*';
if( $this->getId() ) {
# Hook for additional groups
wfRunHooks( 'UserEffectiveGroups', array( &$this, &$this->mEffectiveGroups ) );
}
+ wfProfileOut( __METHOD__ );
}
return $this->mEffectiveGroups;
}
* @return \int User'e edit count
*/
function getEditCount() {
- if ($this->getId()) {
+ if( $this->getId() ) {
if ( !isset( $this->mEditCount ) ) {
/* Populate the count, if it has not been populated yet */
- $this->mEditCount = User::edits($this->mId);
+ $this->mEditCount = User::edits( $this->mId );
}
return $this->mEditCount;
} else {
$this->invalidateCache();
}
-
/**
* Get whether the user is logged in
* @return \bool True or false
}
/**
- * Check whether to enable recent changes patrol features for this user
- * @return \bool True or false
- */
+ * Check whether to enable recent changes patrol features for this user
+ * @return \bool True or false
+ */
public function useRCPatrol() {
global $wgUseRCPatrol;
- return( $wgUseRCPatrol && ($this->isAllowed('patrol') || $this->isAllowed('patrolmarks')) );
+ return( $wgUseRCPatrol && ( $this->isAllowed( 'patrol' ) || $this->isAllowed( 'patrolmarks' ) ) );
}
/**
- * Check whether to enable new pages patrol features for this user
- * @return \bool True or false
- */
+ * Check whether to enable new pages patrol features for this user
+ * @return \bool True or false
+ */
public function useNPPatrol() {
global $wgUseRCPatrol, $wgUseNPPatrol;
- return( ($wgUseRCPatrol || $wgUseNPPatrol) && ($this->isAllowed('patrol') || $this->isAllowed('patrolmarks')) );
+ return( ( $wgUseRCPatrol || $wgUseNPPatrol ) && ( $this->isAllowed( 'patrol' ) || $this->isAllowed( 'patrolmarks' ) ) );
}
/**
* @todo FIXME : need to check the old failback system [AV]
*/
function &getSkin( $t = null ) {
- if ( ! isset( $this->mSkin ) ) {
+ if ( !isset( $this->mSkin ) ) {
wfProfileIn( __METHOD__ );
global $wgHiddenPrefs;
# get the user skin
global $wgRequest;
$userSkin = $this->getOption( 'skin' );
- $userSkin = $wgRequest->getVal('useskin', $userSkin);
+ $userSkin = $wgRequest->getVal( 'useskin', $userSkin );
} else {
# if we're not allowing users to override, then use the default
global $wgDefaultSkin;
return;
}
- if ($title->getNamespace() == NS_USER_TALK &&
+ if( $title->getNamespace() == NS_USER_TALK &&
$title->getText() == $this->getName() ) {
- if (!wfRunHooks('UserClearNewTalkNotification', array(&$this)))
+ if( !wfRunHooks( 'UserClearNewTalkNotification', array( &$this ) ) )
return;
$this->setNewtalk( false );
}
// The query to find out if it is watched is cached both in memcached and per-invocation,
// and when it does have to be executed, it can be on a slave
// If this is the user's newtalk page, we always update the timestamp
- if ($title->getNamespace() == NS_USER_TALK &&
- $title->getText() == $wgUser->getName())
+ if( $title->getNamespace() == NS_USER_TALK &&
+ $title->getText() == $wgUser->getName() )
{
$watched = true;
} elseif ( $this->getId() == $wgUser->getId() ) {
* @private
*/
function decodeOptions( $str ) {
- if (!$str)
+ if( !$str )
return;
-
+
$this->mOptionsLoaded = true;
$this->mOptionOverrides = array();
-
+
$this->mOptions = array();
$a = explode( "\n", $str );
foreach ( $a as $s ) {
* @param $exp \int Expiration time, as a UNIX time value;
* if 0 or not specified, use the default $wgCookieExpiration
*/
- protected function setCookie( $name, $value, $exp=0 ) {
+ protected function setCookie( $name, $value, $exp = 0 ) {
global $wgRequest;
$wgRequest->response()->setcookie( $name, $value, $exp );
}
* Log this user out.
*/
function logout() {
- if( wfRunHooks( 'UserLogout', array(&$this) ) ) {
+ if( wfRunHooks( 'UserLogout', array( &$this ) ) ) {
$this->doLogout();
}
}
'user_email' => $this->mEmail,
'user_email_authenticated' => $dbw->timestampOrNull( $this->mEmailAuthenticated ),
'user_options' => '',
- 'user_touched' => $dbw->timestamp($this->mTouched),
+ 'user_touched' => $dbw->timestamp( $this->mTouched ),
'user_token' => $this->mToken,
'user_email_token' => $this->mEmailToken,
'user_email_token_expires' => $dbw->timestampOrNull( $this->mEmailTokenExpires ),
* they've successfully logged in from.
*/
function spreadBlock() {
- wfDebug( __METHOD__."()\n" );
+ wfDebug( __METHOD__ . "()\n" );
$this->load();
if ( $this->mId == 0 ) {
return;
return;
}
- $userblock->doAutoblock( wfGetIp() );
-
+ $userblock->doAutoblock( wfGetIP() );
}
/**
if ( $wgUseDynamicDates ) {
$confstr .= '!' . $this->getDatePreference();
}
- $confstr .= '!' . ($this->getOption( 'numberheadings' ) ? '1' : '');
+ $confstr .= '!' . ( $this->getOption( 'numberheadings' ) ? '1' : '' );
$confstr .= '!' . $wgLang->getCode();
$confstr .= '!' . $this->getOption( 'thumbsize' );
// add in language specific options, if any
// to. Certain authentication plugins do NOT want to save
// domain passwords in a mysql database, so we should
// check this (incase $wgAuth->strict() is false).
- if( $this->isValidPassword( $password ) !== true ) {
+ if( !$this->isValidPassword( $password ) ) {
return false;
}
function confirmationTokenUrl( $token ) {
return $this->getTokenUrl( 'ConfirmEmail', $token );
}
+
/**
* Return a URL the user can use to invalidate their email address.
* @param $token \string Accepts the email confirmation token
*/
function confirmEmail() {
$this->setEmailAuthenticationTimestamp( wfTimestampNow() );
+ wfRunHooks( 'ConfirmEmailComplete', array( $this ) );
return true;
}
$this->mEmailToken = null;
$this->mEmailTokenExpires = null;
$this->setEmailAuthenticationTimestamp( null );
+ wfRunHooks( 'InvalidateEmailComplete', array( $this ) );
return true;
}
* @return \bool True if allowed
*/
function canSendEmail() {
- global $wgEnableEmail, $wgEnableUserEmail;
- if( !$wgEnableEmail || !$wgEnableUserEmail ) {
+ global $wgEnableEmail, $wgEnableUserEmail, $wgUser;
+ if( !$wgEnableEmail || !$wgEnableUserEmail || !$wgUser->isAllowed( 'sendemail' ) ) {
return false;
}
$canSend = $this->isEmailConfirmed();
array_keys( array_filter( $wgRevokePermissions[$group] ) ) );
}
}
- return array_unique($rights);
+ return array_unique( $rights );
}
/**
global $wgAddGroups, $wgRemoveGroups, $wgGroupsAddToSelf, $wgGroupsRemoveFromSelf;
$groups = array( 'add' => array(), 'remove' => array(), 'add-self' => array(), 'remove-self' => array() );
- if( empty($wgAddGroups[$group]) ) {
+ if( empty( $wgAddGroups[$group] ) ) {
// Don't add anything to $groups
} elseif( $wgAddGroups[$group] === true ) {
// You get everything
$groups['add'] = self::getAllGroups();
- } elseif( is_array($wgAddGroups[$group]) ) {
+ } elseif( is_array( $wgAddGroups[$group] ) ) {
$groups['add'] = $wgAddGroups[$group];
}
// Same thing for remove
- if( empty($wgRemoveGroups[$group]) ) {
- } elseif($wgRemoveGroups[$group] === true ) {
+ if( empty( $wgRemoveGroups[$group] ) ) {
+ } elseif( $wgRemoveGroups[$group] === true ) {
$groups['remove'] = self::getAllGroups();
- } elseif( is_array($wgRemoveGroups[$group]) ) {
+ } elseif( is_array( $wgRemoveGroups[$group] ) ) {
$groups['remove'] = $wgRemoveGroups[$group];
}
// Re-map numeric keys of AddToSelf/RemoveFromSelf to the 'user' key for backwards compatibility
- if( empty($wgGroupsAddToSelf['user']) || $wgGroupsAddToSelf['user'] !== true ) {
- foreach($wgGroupsAddToSelf as $key => $value) {
- if( is_int($key) ) {
+ if( empty( $wgGroupsAddToSelf['user']) || $wgGroupsAddToSelf['user'] !== true ) {
+ foreach( $wgGroupsAddToSelf as $key => $value ) {
+ if( is_int( $key ) ) {
$wgGroupsAddToSelf['user'][] = $value;
}
}
}
- if( empty($wgGroupsRemoveFromSelf['user']) || $wgGroupsRemoveFromSelf['user'] !== true ) {
- foreach($wgGroupsRemoveFromSelf as $key => $value) {
- if( is_int($key) ) {
+ if( empty( $wgGroupsRemoveFromSelf['user']) || $wgGroupsRemoveFromSelf['user'] !== true ) {
+ foreach( $wgGroupsRemoveFromSelf as $key => $value ) {
+ if( is_int( $key ) ) {
$wgGroupsRemoveFromSelf['user'][] = $value;
}
}
}
// Now figure out what groups the user can add to him/herself
- if( empty($wgGroupsAddToSelf[$group]) ) {
+ if( empty( $wgGroupsAddToSelf[$group] ) ) {
} elseif( $wgGroupsAddToSelf[$group] === true ) {
// No idea WHY this would be used, but it's there
$groups['add-self'] = User::getAllGroups();
- } elseif( is_array($wgGroupsAddToSelf[$group]) ) {
+ } elseif( is_array( $wgGroupsAddToSelf[$group] ) ) {
$groups['add-self'] = $wgGroupsAddToSelf[$group];
}
- if( empty($wgGroupsRemoveFromSelf[$group]) ) {
+ if( empty( $wgGroupsRemoveFromSelf[$group] ) ) {
} elseif( $wgGroupsRemoveFromSelf[$group] === true ) {
$groups['remove-self'] = User::getAllGroups();
- } elseif( is_array($wgGroupsRemoveFromSelf[$group]) ) {
+ } elseif( is_array( $wgGroupsRemoveFromSelf[$group] ) ) {
$groups['remove-self'] = $wgGroupsRemoveFromSelf[$group];
}
// Okay, it's not so simple, we will have to go through the arrays
$groups = array(
- 'add' => array(),
- 'remove' => array(),
- 'add-self' => array(),
- 'remove-self' => array() );
+ 'add' => array(),
+ 'remove' => array(),
+ 'add-self' => array(),
+ 'remove-self' => array()
+ );
$addergroups = $this->getEffectiveGroups();
- foreach ($addergroups as $addergroup) {
+ foreach( $addergroups as $addergroup ) {
$groups = array_merge_recursive(
- $groups, $this->changeableByGroup($addergroup)
+ $groups, $this->changeableByGroup( $addergroup )
);
$groups['add'] = array_unique( $groups['add'] );
$groups['remove'] = array_unique( $groups['remove'] );
*/
public function addNewUserLogEntry( $byEmail = false ) {
global $wgUser, $wgContLang, $wgNewUserLog;
- if( empty($wgNewUserLog) ) {
+ if( empty( $wgNewUserLog ) ) {
return true; // disabled
}
$talk = $wgContLang->getFormattedNsText( NS_TALK );
$message = '';
} else {
$action = 'create2';
- $message = $byEmail ? wfMsgForContent( 'newuserlog-byemail' ) : '';
+ $message = $byEmail
+ ? wfMsgForContent( 'newuserlog-byemail' )
+ : '';
}
$log = new LogPage( 'newusers' );
- $log->addEntry( $action, $this->getUserPage(), $message, array( $this->getId() ) );
+ $log->addEntry(
+ $action,
+ $this->getUserPage(),
+ $message,
+ array( $this->getId() )
+ );
return true;
}
*/
public function addNewUserLogEntryAutoCreate() {
global $wgNewUserLog;
- if( empty($wgNewUserLog) ) {
+ if( empty( $wgNewUserLog ) ) {
return true; // disabled
}
$log = new LogPage( 'newusers', false );
$log->addEntry( 'autocreate', $this->getUserPage(), '', array( $this->getId() ) );
return true;
}
-
+
protected function loadOptions() {
$this->load();
- if ($this->mOptionsLoaded || !$this->getId() )
+ if ( $this->mOptionsLoaded || !$this->getId() )
return;
-
+
$this->mOptions = self::getDefaultOptions();
-
+
// Maybe load from the object
-
- if ( !is_null($this->mOptionOverrides) ) {
- wfDebug( "Loading options for user ".$this->getId()." from override cache.\n" );
+ if ( !is_null( $this->mOptionOverrides ) ) {
+ wfDebug( "Loading options for user " . $this->getId() . " from override cache.\n" );
foreach( $this->mOptionOverrides as $key => $value ) {
$this->mOptions[$key] = $value;
}
} else {
- wfDebug( "Loading options for user ".$this->getId()." from database.\n" );
+ wfDebug( "Loading options for user " . $this->getId() . " from database.\n" );
// Load from database
$dbr = wfGetDB( DB_SLAVE );
-
- $res = $dbr->select( 'user_properties',
- '*',
- array('up_user' => $this->getId()),
- __METHOD__
- );
-
+
+ $res = $dbr->select(
+ 'user_properties',
+ '*',
+ array( 'up_user' => $this->getId() ),
+ __METHOD__
+ );
+
while( $row = $dbr->fetchObject( $res ) ) {
$this->mOptionOverrides[$row->up_property] = $row->up_value;
$this->mOptions[$row->up_property] = $row->up_value;
}
}
-
+
$this->mOptionsLoaded = true;
-
+
wfRunHooks( 'UserLoadOptions', array( $this, &$this->mOptions ) );
}
-
+
protected function saveOptions() {
global $wgAllowPrefChange;
// Allow hooks to abort, for instance to save to a global profile.
// Reset options to default state before saving.
- if (!wfRunHooks( 'UserSaveOptions', array($this, &$saveOptions) ) )
+ if( !wfRunHooks( 'UserSaveOptions', array( $this, &$saveOptions ) ) )
return;
-
+
foreach( $saveOptions as $key => $value ) {
# Don't bother storing default values
if ( ( is_null( self::getDefaultOption( $key ) ) &&
}
if ( $extuser && isset( $wgAllowPrefChange[$key] ) ) {
switch ( $wgAllowPrefChange[$key] ) {
- case 'local': case 'message':
+ case 'local':
+ case 'message':
break;
- case 'semiglobal': case 'global':
+ case 'semiglobal':
+ case 'global':
$extuser->setPref( $key, $value );
}
}
}
-
+
$dbw->begin();
$dbw->delete( 'user_properties', array( 'up_user' => $this->getId() ), __METHOD__ );
$dbw->insert( 'user_properties', $insert_rows, __METHOD__ );