X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/exercices/modifier.php?a=blobdiff_plain;f=includes%2FUser.php;h=7c3fb2f95c18d2202ba26cd0e71749173bb25ac1;hb=fae0d1392935202675dc909e37087f392083269e;hp=686963c9fdaf2390dff69486736f7dd7f5c3a2fb;hpb=3a91f49fcd2ae987bb05802345be920d26b6a397;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/User.php b/includes/User.php index 686963c9fd..7c3fb2f95c 100644 --- a/includes/User.php +++ b/includes/User.php @@ -1,7 +1,7 @@ loadDefaults(); } # Static factory method # - function newFromName( $name ) - { + function newFromName( $name ) { $u = new User(); # Clean up name according to title rules @@ -31,32 +30,30 @@ class User { return $u; } - /* static */ function whoIs( $id ) - { - return wfGetSQL( "user", "user_name", "user_id=$id" ); + /* static */ function whoIs( $id ) { + $dbr =& wfGetDB( DB_SLAVE ); + return $dbr->getField( 'user', 'user_name', array( 'user_id' => $id ) ); } - /* static */ function whoIsReal( $id ) - { - return wfGetSQL( "user", "user_real_name", "user_id=$id" ); + /* static */ function whoIsReal( $id ) { + $dbr =& wfGetDB( DB_SLAVE ); + return $dbr->getField( 'user', 'user_real_name', array( 'user_id' => $id ) ); } - /* static */ function idFromName( $name ) - { + /* static */ function idFromName( $name ) { + $fname = "User::idFromName"; + $nt = Title::newFromText( $name ); if( is_null( $nt ) ) { # Illegal name return null; } - $sql = "SELECT user_id FROM user WHERE user_name='" . - wfStrencode( $nt->getText() ) . "'"; - $res = wfQuery( $sql, DB_READ, "User::idFromName" ); + $dbr =& wfGetDB( DB_SLAVE ); + $s = $dbr->getArray( 'user', array( 'user_id' ), array( 'user_name' => $nt->getText() ), $fname ); - if ( 0 == wfNumRows( $res ) ) { + if ( $s === false ) { return 0; } else { - $s = wfFetchObject( $res ); - wfFreeResult( $res ); return $s->user_id; } } @@ -67,12 +64,10 @@ class User { } - /* static */ function randomPassword() - { - $pwchars = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz"; + /* static */ function randomPassword() { + $pwchars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz'; $l = strlen( $pwchars ) - 1; - wfSeedRandom(); $np = $pwchars{mt_rand( 0, $l )} . $pwchars{mt_rand( 0, $l )} . $pwchars{mt_rand( 0, $l )} . chr( mt_rand(48, 57) ) . $pwchars{mt_rand( 0, $l )} . $pwchars{mt_rand( 0, $l )} . @@ -80,40 +75,40 @@ class User { return $np; } - function loadDefaults() - { + function loadDefaults() { global $wgLang, $wgIP; global $wgNamespacesToBeSearchedDefault; $this->mId = $this->mNewtalk = 0; $this->mName = $wgIP; - $this->mEmail = ""; - $this->mPassword = $this->mNewpassword = ""; + $this->mRealName = $this->mEmail = ''; + $this->mPassword = $this->mNewpassword = ''; $this->mRights = array(); $defOpt = $wgLang->getDefaultUserOptions() ; foreach ( $defOpt as $oname => $val ) { $this->mOptions[$oname] = $val; } foreach ($wgNamespacesToBeSearchedDefault as $nsnum => $val) { - $this->mOptions["searchNs".$nsnum] = $val; + $this->mOptions['searchNs'.$nsnum] = $val; } unset( $this->mSkin ); $this->mDataLoaded = false; $this->mBlockedby = -1; # Unset $this->mTouched = '0'; # Allow any pages to be cached - $this->cookiePassword = ""; + $this->cookiePassword = ''; + $this->mHash = false; } /* private */ function getBlockedStatus() { - global $wgIP, $wgBlockCache; + global $wgIP, $wgBlockCache, $wgProxyList; if ( -1 != $this->mBlockedby ) { return; } - + $this->mBlockedby = 0; - + # User blocking - if ( $this->mId ) { + if ( $this->mId ) { $block = new Block(); if ( $block->load( $wgIP , $this->mId ) ) { $this->mBlockedby = $block->mBy; @@ -129,12 +124,20 @@ class User { $this->mBlockreason = $block->mReason; } } + + # Proxy blocking + if ( !$this->mBlockedby ) { + if ( array_key_exists( $wgIP, $wgProxyList ) ) { + $this->mBlockreason = wfMsg( 'proxyblockreason' ); + $this->mBlockedby = "Proxy blocker"; + } + } } function isBlocked() { $this->getBlockedStatus(); - if ( 0 == $this->mBlockedby ) { return false; } + if ( 0 === $this->mBlockedby ) { return false; } return true; } @@ -151,10 +154,14 @@ class User { function SetupSession() { global $wgSessionsInMemcached, $wgCookiePath, $wgCookieDomain; if( $wgSessionsInMemcached ) { - require_once( "MemcachedSessions.php" ); + require_once( 'MemcachedSessions.php' ); + } elseif( 'files' != ini_get( 'session.save_handler' ) ) { + # If it's left on 'user' or another setting from another + # application, it will end up failing. Try to recover. + ini_set ( 'session.save_handler', 'files' ); } session_set_cookie_params( 0, $wgCookiePath, $wgCookieDomain ); - session_cache_limiter( "private, must-revalidate" ); + session_cache_limiter( 'private, must-revalidate' ); @session_start(); } @@ -220,6 +227,7 @@ class User { function loadFromDatabase() { global $wgCommandLineMode; + $fname = "User::loadFromDatabase"; if ( $this->mDataLoaded || $wgCommandLineMode ) { return; } @@ -229,24 +237,23 @@ class User { # check in separate table if there are changes to the talk page $this->mNewtalk=0; # reset talk page status + $dbr =& wfGetDB( DB_SLAVE ); if($this->mId) { - $sql = "SELECT 1 FROM user_newtalk WHERE user_id={$this->mId}"; - $res = wfQuery ($sql, DB_READ, "User::loadFromDatabase" ); + $res = $dbr->select( 'user_newtalk', 1, array( 'user_id' => $this->mId ), $fname ); - if (wfNumRows($res)>0) { + if ( $dbr->numRows($res)>0 ) { $this->mNewtalk= 1; } - wfFreeResult( $res ); + $dbr->freeResult( $res ); } else { global $wgDBname, $wgMemc; $key = "$wgDBname:newtalk:ip:{$this->mName}"; $newtalk = $wgMemc->get( $key ); if( ! is_integer( $newtalk ) ){ - $sql = "SELECT 1 FROM user_newtalk WHERE user_ip='{$this->mName}'"; - $res = wfQuery ($sql, DB_READ, "User::loadFromDatabase" ); + $res = $dbr->select( 'user_newtalk', 1, array( 'user_ip' => $this->mName ), $fname ); - $this->mNewtalk = (wfNumRows($res)>0) ? 1 : 0; - wfFreeResult( $res ); + $this->mNewtalk = $dbr->numRows( $res ) > 0 ? 1 : 0; + $dbr->freeResult( $res ); $wgMemc->set( $key, $this->mNewtalk, time() ); // + 1800 ); } else { @@ -258,24 +265,23 @@ class User { return; } # the following stuff is for non-anonymous users only - $sql = "SELECT user_name,user_password,user_newpassword,user_email," . - "user_real_name,user_options,user_rights,user_touched " . - " FROM user WHERE user_id=" . $this->mId; - $res = wfQuery( $sql, DB_READ, "User::loadFromDatabase" ); + $s = $dbr->getArray( 'user', array( 'user_name','user_password','user_newpassword','user_email', + 'user_real_name','user_options','user_touched' ), + array( 'user_id' => $this->mId ), $fname ); - if ( wfNumRows( $res ) > 0 ) { - $s = wfFetchObject( $res ); + if ( $s !== false ) { $this->mName = $s->user_name; $this->mEmail = $s->user_email; $this->mRealName = $s->user_real_name; $this->mPassword = $s->user_password; $this->mNewpassword = $s->user_newpassword; $this->decodeOptions( $s->user_options ); - $this->mRights = explode( ",", strtolower( $s->user_rights ) ); - $this->mTouched = $s->user_touched; + $this->mTouched = wfTimestamp(TS_MW,$s->user_touched); + $this->mRights = explode( ",", strtolower( + $dbr->getField( 'user_rights', 'user_rights', array( 'user_id' => $this->mId ) ) + ) ); } - wfFreeResult( $res ); $this->mDataLoaded = true; } @@ -290,14 +296,12 @@ class User { return $this->mName; } - function setName( $str ) - { + function setName( $str ) { $this->loadFromDatabase(); $this->mName = $str; } - function getNewtalk() - { + function getNewtalk() { $this->loadFromDatabase(); return ( 0 != $this->mNewtalk ); } @@ -321,20 +325,7 @@ class User { return ($timestamp >= $this->mTouched); } - function getPassword() - { - $this->loadFromDatabase(); - return $this->mPassword; - } - - function getNewpassword() - { - $this->loadFromDatabase(); - return $this->mNewpassword; - } - - function addSalt( $p ) - { + function addSalt( $p ) { global $wgPasswordSalt; if($wgPasswordSalt) return md5( "{$this->mId}-{$p}" ); @@ -342,67 +333,57 @@ class User { return $p; } - function encryptPassword( $p ) - { + function encryptPassword( $p ) { return $this->addSalt( md5( $p ) ); } - function setPassword( $str ) - { + function setPassword( $str ) { $this->loadFromDatabase(); $this->setCookiePassword( $str ); $this->mPassword = $this->encryptPassword( $str ); - $this->mNewpassword = ""; + $this->mNewpassword = ''; } - function setCookiePassword( $str ) - { + function setCookiePassword( $str ) { $this->loadFromDatabase(); $this->mCookiePassword = md5( $str ); } - function setNewpassword( $str ) - { + function setNewpassword( $str ) { $this->loadFromDatabase(); $this->mNewpassword = $this->encryptPassword( $str ); } - function getEmail() - { + function getEmail() { $this->loadFromDatabase(); return $this->mEmail; } - function setEmail( $str ) - { + function setEmail( $str ) { $this->loadFromDatabase(); $this->mEmail = $str; } - function getRealName() - { + function getRealName() { $this->loadFromDatabase(); return $this->mRealName; } - function setRealName( $str ) - { + function setRealName( $str ) { $this->loadFromDatabase(); $this->mRealName = $str; } - function getOption( $oname ) - { + function getOption( $oname ) { $this->loadFromDatabase(); if ( array_key_exists( $oname, $this->mOptions ) ) { return $this->mOptions[$oname]; } else { - return ""; + return ''; } } - function setOption( $oname, $val ) - { + function setOption( $oname, $val ) { $this->loadFromDatabase(); if ( $oname == 'skin' ) { # Clear cached skin, so the new one displays immediately in Special:Preferences @@ -412,77 +393,93 @@ class User { $this->invalidateCache(); } - function getRights() - { + function getRights() { $this->loadFromDatabase(); return $this->mRights; } - function addRight( $rname ) - { + function addRight( $rname ) { $this->loadFromDatabase(); array_push( $this->mRights, $rname ); $this->invalidateCache(); } - function isSysop() - { + function isSysop() { $this->loadFromDatabase(); if ( 0 == $this->mId ) { return false; } - return in_array( "sysop", $this->mRights ); + return in_array( 'sysop', $this->mRights ); } - function isDeveloper() - { + function isDeveloper() { $this->loadFromDatabase(); if ( 0 == $this->mId ) { return false; } - return in_array( "developer", $this->mRights ); + return in_array( 'developer', $this->mRights ); } - function isBureaucrat() - { + function isBureaucrat() { $this->loadFromDatabase(); if ( 0 == $this->mId ) { return false; } - return in_array( "bureaucrat", $this->mRights ); + return in_array( 'bureaucrat', $this->mRights ); } - function isBot() - { + function isBot() { $this->loadFromDatabase(); # Why was this here? I need a UID=0 conversion script [TS] # if ( 0 == $this->mId ) { return false; } - return in_array( "bot", $this->mRights ); + return in_array( 'bot', $this->mRights ); } - function &getSkin() - { + function &getSkin() { if ( ! isset( $this->mSkin ) ) { + # get all skin names available from SkinNames.php $skinNames = Skin::getSkinNames(); - $s = $this->getOption( "skin" ); - if ( "" == $s ) { $s = 'standard'; } + # get the user skin + $userSkin = $this->getOption( 'skin' ); + if ( $userSkin == '' ) { $userSkin = 'standard'; } - if ( !isset( $skinNames[$s] ) ) { + if ( !isset( $skinNames[$userSkin] ) ) { + # in case the user skin could not be found find a replacement $fallback = array( - 0 => "SkinStandard", - 1 => "SkinNostalgia", - 2 => "SkinCologneBlue"); + 0 => 'SkinStandard', + 1 => 'SkinNostalgia', + 2 => 'SkinCologneBlue'); + # if phptal is enabled we should have monobook skin that superseed + # the good old SkinStandard. if ( isset( $skinNames['monobook'] ) ) { - $fallback[0] = "SkinMonoBook"; + $fallback[0] = 'SkinMonoBook'; } - - if(is_numeric($s) && isset( $fallback[$s]) ){ - $sn = $fallback[$s]; + + if(is_numeric($userSkin) && isset( $fallback[$userSkin]) ){ + $sn = $fallback[$userSkin]; } else { - $sn = "SkinStandard"; + $sn = 'SkinStandard'; } } else { - $sn = "Skin" . $skinNames[$s]; + # The user skin is available + $sn = 'Skin' . $skinNames[$userSkin]; + } + + # only require the needed stuff + switch($sn) { + case 'SkinMonoBook': + require_once( 'SkinPHPTal.php' ); + break; + case 'SkinStandard': + require_once( 'SkinStandard.php' ); + break; + case 'SkinNostalgia': + require_once( 'SkinNostalgia.php' ); + break; + case 'SkinCologneBlue': + require_once( 'SkinCologneBlue.php' ); + break; } + # now we can create the skin object $this->mSkin = new $sn; } return $this->mSkin; @@ -492,13 +489,13 @@ class User { $wl = WatchedItem::fromUserTitle( $this, $title ); return $wl->isWatched(); } - + function addWatch( $title ) { $wl = WatchedItem::fromUserTitle( $this, $title ); $wl->addWatch(); $this->invalidateCache(); } - + function removeWatch( $title ) { $wl = WatchedItem::fromUserTitle( $this, $title ); $wl->removeWatch(); @@ -506,18 +503,16 @@ class User { } - /* private */ function encodeOptions() - { + /* private */ function encodeOptions() { $a = array(); foreach ( $this->mOptions as $oname => $oval ) { - array_push( $a, "{$oname}={$oval}" ); + array_push( $a, $oname.'='.$oval ); } $s = implode( "\n", $a ); - return wfStrencode( $s ); + return $s; } - /* private */ function decodeOptions( $str ) - { + /* private */ function decodeOptions( $str ) { $a = explode( "\n", $str ); foreach ( $a as $s ) { if ( preg_match( "/^(.[^=]*)=(.*)$/", $s, $m ) ) { @@ -526,121 +521,129 @@ class User { } } - function setCookies() - { + function setCookies() { global $wgCookieExpiration, $wgCookiePath, $wgCookieDomain, $wgDBname; if ( 0 == $this->mId ) return; $this->loadFromDatabase(); $exp = time() + $wgCookieExpiration; $_SESSION['wsUserID'] = $this->mId; - setcookie( "{$wgDBname}UserID", $this->mId, $exp, $wgCookiePath, $wgCookieDomain ); + setcookie( $wgDBname.'UserID', $this->mId, $exp, $wgCookiePath, $wgCookieDomain ); $_SESSION['wsUserName'] = $this->mName; - setcookie( "{$wgDBname}UserName", $this->mName, $exp, $wgCookiePath, $wgCookieDomain ); + setcookie( $wgDBname.'UserName', $this->mName, $exp, $wgCookiePath, $wgCookieDomain ); $_SESSION['wsUserPassword'] = $this->mPassword; - if ( 1 == $this->getOption( "rememberpassword" ) ) { - setcookie( "{$wgDBname}Password", $this->mCookiePassword, $exp, $wgCookiePath, $wgCookieDomain ); + if ( 1 == $this->getOption( 'rememberpassword' ) ) { + setcookie( $wgDBname.'Password', $this->mCookiePassword, $exp, $wgCookiePath, $wgCookieDomain ); } else { - setcookie( "{$wgDBname}Password", "", time() - 3600 ); + setcookie( $wgDBname.'Password', '', time() - 3600 ); } } - function logout() - { + function logout() { global $wgCookiePath, $wgCookieDomain, $wgDBname; $this->mId = 0; $_SESSION['wsUserID'] = 0; - setcookie( "{$wgDBname}UserID", "", time() - 3600, $wgCookiePath, $wgCookieDomain ); - setcookie( "{$wgDBname}Password", "", time() - 3600, $wgCookiePath, $wgCookieDomain ); + setcookie( $wgDBname.'UserID', '', time() - 3600, $wgCookiePath, $wgCookieDomain ); + setcookie( $wgDBname.'Password', '', time() - 3600, $wgCookiePath, $wgCookieDomain ); } - function saveSettings() - { + function saveSettings() { global $wgMemc, $wgDBname; + $fname = 'User::saveSettings'; + $dbw =& wfGetDB( DB_MASTER ); if ( ! $this->mNewtalk ) { + # Delete user_newtalk row if( $this->mId ) { - $sql="DELETE FROM user_newtalk WHERE user_id={$this->mId}"; - wfQuery ($sql, DB_WRITE, "User::saveSettings"); + $dbw->delete( 'user_newtalk', array( 'user_id' => $this->mId ), $fname ); } else { - $sql="DELETE FROM user_newtalk WHERE user_ip='{$this->mName}'"; - wfQuery ($sql, DB_WRITE, "User::saveSettings"); + $dbw->delete( 'user_newtalk', array( 'user_ip' => $this->mName ), $fname ); $wgMemc->delete( "$wgDBname:newtalk:ip:{$this->mName}" ); } } if ( 0 == $this->mId ) { return; } - $sql = "UPDATE user SET " . - "user_name= '" . wfStrencode( $this->mName ) . "', " . - "user_password= '" . wfStrencode( $this->mPassword ) . "', " . - "user_newpassword= '" . wfStrencode( $this->mNewpassword ) . "', " . - "user_real_name= '" . wfStrencode( $this->mRealName ) . "', " . - "user_email= '" . wfStrencode( $this->mEmail ) . "', " . - "user_options= '" . $this->encodeOptions() . "', " . - "user_rights= '" . wfStrencode( implode( ",", $this->mRights ) ) . "', " . - "user_touched= '" . wfStrencode( $this->mTouched ) . - "' WHERE user_id={$this->mId}"; - wfQuery( $sql, DB_WRITE, "User::saveSettings" ); + $dbw->update( 'user', + array( /* SET */ + 'user_name' => $this->mName, + 'user_password' => $this->mPassword, + 'user_newpassword' => $this->mNewpassword, + 'user_real_name' => $this->mRealName, + 'user_email' => $this->mEmail, + 'user_options' => $this->encodeOptions(), + 'user_touched' => $dbw->timestamp($this->mTouched) + ), array( /* WHERE */ + 'user_id' => $this->mId + ), $fname + ); + $dbw->set( 'user_rights', 'user_rights', implode( ",", $this->mRights ), + 'user_id='. $this->mId, $fname ); $wgMemc->delete( "$wgDBname:user:id:$this->mId" ); } - # Checks if a user with the given name exists + # Checks if a user with the given name exists, returns the ID # - function idForName() - { + function idForName() { + $fname = 'User::idForName'; + $gotid = 0; $s = trim( $this->mName ); - if ( 0 == strcmp( "", $s ) ) return 0; + if ( 0 == strcmp( '', $s ) ) return 0; - $sql = "SELECT user_id FROM user WHERE user_name='" . - wfStrencode( $s ) . "'"; - $res = wfQuery( $sql, DB_READ, "User::idForName" ); - if ( 0 == wfNumRows( $res ) ) { return 0; } - - $s = wfFetchObject( $res ); - if ( "" == $s ) return 0; - - $gotid = $s->user_id; - wfFreeResult( $res ); - return $gotid; - } - - function addToDatabase() - { - $sql = "INSERT INTO user (user_name,user_password,user_newpassword," . - "user_email, user_real_name, user_rights, user_options) " . - " VALUES ('" . wfStrencode( $this->mName ) . "', '" . - wfStrencode( $this->mPassword ) . "', '" . - wfStrencode( $this->mNewpassword ) . "', '" . - wfStrencode( $this->mEmail ) . "', '" . - wfStrencode( $this->mRealName ) . "', '" . - wfStrencode( implode( ",", $this->mRights ) ) . "', '" . - $this->encodeOptions() . "')"; - wfQuery( $sql, DB_WRITE, "User::addToDatabase" ); - $this->mId = $this->idForName(); + $dbr =& wfGetDB( DB_SLAVE ); + $id = $dbr->selectField( 'user', 'user_id', array( 'user_name' => $s ), $fname ); + if ( $id === false ) { + $id = 0; + } + return $id; + } + + function addToDatabase() { + $fname = 'User::addToDatabase'; + $dbw =& wfGetDB( DB_MASTER ); + $seqVal = $dbw->nextSequenceValue( 'user_user_id_seq' ); + $dbw->insert( 'user', + array( + 'user_id' => $seqVal, + 'user_name' => $this->mName, + 'user_password' => $this->mPassword, + 'user_newpassword' => $this->mNewpassword, + 'user_email' => $this->mEmail, + 'user_real_name' => $this->mRealName, + 'user_options' => $this->encodeOptions() + ), $fname + ); + $this->mId = $dbw->insertId(); + $dbw->insert( 'user_rights', + array( + 'user_id' => $this->mId, + 'user_rights' => implode( ',', $this->mRights ) + ), $fname + ); + } function spreadBlock() { - global $wgIP; + global $wgIP; # If the (non-anonymous) user is blocked, this function will block any IP address # that they successfully log on from. - $fname = "User::spreadBlock"; - + $fname = 'User::spreadBlock'; + wfDebug( "User:spreadBlock()\n" ); if ( $this->mId == 0 ) { return; } - - $userblock = Block::newFromDB( "", $this->mId ); + + $userblock = Block::newFromDB( '', $this->mId ); if ( !$userblock->isValid() ) { return; } - + # Check if this IP address is already blocked $ipblock = Block::newFromDB( $wgIP ); if ( $ipblock->isValid() ) { @@ -648,16 +651,16 @@ class User { $ipblock->updateTimestamp(); return; } - + # Make a new block object with the desired properties wfDebug( "Autoblocking {$this->mName}@{$wgIP}\n" ); $ipblock->mAddress = $wgIP; $ipblock->mUser = 0; $ipblock->mBy = $userblock->mBy; - $ipblock->mReason = wfMsg( "autoblocker", $this->getName(), $userblock->mReason ); + $ipblock->mReason = wfMsg( 'autoblocker', $this->getName(), $userblock->mReason ); $ipblock->mTimestamp = wfTimestampNow(); $ipblock->mAuto = 1; - # If the user is already blocked with an expiry date, we don't + # If the user is already blocked with an expiry date, we don't # want to pile on top of that! if($userblock->mExpiry) { $ipblock->mExpiry = min ( $userblock->mExpiry, Block::getAutoblockExpiry( $ipblock->mTimestamp )); @@ -667,45 +670,37 @@ class User { # Insert it $ipblock->insert(); - + } function getPageRenderingHash(){ - static $hash = false; - if( $hash ){ - return $hash; + if( $this->mHash ){ + return $this->mHash; } - // stubthreshold is only included below for completeness, + // stubthreshold is only included below for completeness, // it will always be 0 when this function is called by parsercache. - $confstr = $this->getOption( "quickbar" ); - $confstr .= "!" . $this->getOption( "underline" ); - $confstr .= "!" . $this->getOption( "hover" ); - $confstr .= "!" . $this->getOption( "skin" ); - $confstr .= "!" . $this->getOption( "math" ); - $confstr .= "!" . $this->getOption( "highlightbroken" ); - $confstr .= "!" . $this->getOption( "stubthreshold" ); - $confstr .= "!" . $this->getOption( "editsection" ); - $confstr .= "!" . $this->getOption( "editsectiononrightclick" ); - $confstr .= "!" . $this->getOption( "showtoc" ); - $confstr .= "!" . $this->getOption( "date" ); - - if(strlen($confstr) > 32) - $hash = md5($confstr); - else - $hash = $confstr; - return $hash; + $confstr = $this->getOption( 'math' ); + $confstr .= '!' . $this->getOption( 'highlightbroken' ); + $confstr .= '!' . $this->getOption( 'stubthreshold' ); + $confstr .= '!' . $this->getOption( 'editsection' ); + $confstr .= '!' . $this->getOption( 'editsectiononrightclick' ); + $confstr .= '!' . $this->getOption( 'showtoc' ); + $confstr .= '!' . $this->getOption( 'date' ); + $confstr .= '!' . $this->getOption( 'numberheadings' ); + + $this->mHash = $confstr; + return $confstr ; } - function isAllowedToCreateAccount() - { + function isAllowedToCreateAccount() { global $wgWhitelistAccount; $allowed = false; - + if (!$wgWhitelistAccount) { return 1; }; // default behaviour foreach ($wgWhitelistAccount as $right => $ok) { - $userHasRight = (!strcmp($right, "user") || in_array($right, $this->getRights())); + $userHasRight = (!strcmp($right, 'user') || in_array($right, $this->getRights())); $allowed |= ($ok && $userHasRight); } return $allowed; @@ -713,14 +708,42 @@ class User { # Set mDataLoaded, return previous value # Use this to prevent DB access in command-line scripts or similar situations - function setLoaded( $loaded ) + function setLoaded( $loaded ) { - wfSetVar( $this->mDataLoaded, $loaded ); + return wfSetVar( $this->mDataLoaded, $loaded ); } - + function getUserPage() { return Title::makeTitle( NS_USER, $this->mName ); } + + /* static */ function getMaxID() { + $dbr =& wfGetDB( DB_SLAVE ); + return $dbr->selectField( 'user', 'max(user_id)', false ); + } + + function isNewbie() { + return $this->mId > User::getMaxID() * 0.99 && !$this->isSysop() && !$this->isBot() || $this->getID() == 0; + } + + # Check to see if the given clear-text password is one of the accepted passwords + function checkPassword( $password ) { + $this->loadFromDatabase(); + $ep = $this->encryptPassword( $password ); + if ( 0 == strcmp( $ep, $this->mPassword ) ) { + return true; + } elseif ( 0 == strcmp( $ep, $this->mNewpassword ) ) { + return true; + } elseif ( function_exists( 'iconv' ) ) { + # Some wikis were converted from ISO 8859-1 to UTF-8, the passwords can't be converted + # Check for this with iconv +/* $cp1252hash = $this->encryptPassword( iconv( 'UTF-8', 'WINDOWS-1252', $password ) ); + if ( 0 == strcmp( $cp1252hash, $this->mPassword ) ) { + return true; + }*/ + } + return false; + } } ?>