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=f31c81bfa70ffafff97144bca513bbf5ce1e0eda;hpb=fe15e23107fbda54a3f856c55189d64900b2e5de;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/User.php b/includes/User.php index f31c81bfa7..7c3fb2f95c 100644 --- a/includes/User.php +++ b/includes/User.php @@ -104,11 +104,11 @@ class User { 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; @@ -155,6 +155,10 @@ class User { global $wgSessionsInMemcached, $wgCookiePath, $wgCookieDomain; if( $wgSessionsInMemcached ) { 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' ); @@ -262,7 +266,7 @@ class User { } # the following stuff is for non-anonymous users only $s = $dbr->getArray( 'user', array( 'user_name','user_password','user_newpassword','user_email', - 'user_real_name','user_options','user_rights','user_touched' ), + 'user_real_name','user_options','user_touched' ), array( 'user_id' => $this->mId ), $fname ); if ( $s !== false ) { @@ -272,8 +276,10 @@ class User { $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 ) ) + ) ); } $this->mDataLoaded = true; @@ -319,16 +325,6 @@ class User { return ($timestamp >= $this->mTouched); } - function getPassword() { - $this->loadFromDatabase(); - return $this->mPassword; - } - - function getNewpassword() { - $this->loadFromDatabase(); - return $this->mNewpassword; - } - function addSalt( $p ) { global $wgPasswordSalt; if($wgPasswordSalt) @@ -445,7 +441,7 @@ class User { # get the user skin $userSkin = $this->getOption( 'skin' ); if ( $userSkin == '' ) { $userSkin = 'standard'; } - + if ( !isset( $skinNames[$userSkin] ) ) { # in case the user skin could not be found find a replacement $fallback = array( @@ -457,7 +453,7 @@ class User { if ( isset( $skinNames['monobook'] ) ) { $fallback[0] = 'SkinMonoBook'; } - + if(is_numeric($userSkin) && isset( $fallback[$userSkin]) ){ $sn = $fallback[$userSkin]; } else { @@ -467,7 +463,7 @@ class User { # The user skin is available $sn = 'Skin' . $skinNames[$userSkin]; } - + # only require the needed stuff switch($sn) { case 'SkinMonoBook': @@ -493,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(); @@ -571,7 +567,7 @@ class User { } if ( 0 == $this->mId ) { return; } - $dbw->update( 'user', + $dbw->update( 'user', array( /* SET */ 'user_name' => $this->mName, 'user_password' => $this->mPassword, @@ -579,12 +575,13 @@ class User { 'user_real_name' => $this->mRealName, 'user_email' => $this->mEmail, 'user_options' => $this->encodeOptions(), - 'user_rights' => implode( ",", $this->mRights ), - 'user_touched' => $this->mTouched + '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" ); } @@ -596,7 +593,7 @@ class User { $gotid = 0; $s = trim( $this->mName ); if ( 0 == strcmp( '', $s ) ) return 0; - + $dbr =& wfGetDB( DB_SLAVE ); $id = $dbr->selectField( 'user', 'user_id', array( 'user_name' => $s ), $fname ); if ( $id === false ) { @@ -609,7 +606,7 @@ class User { $fname = 'User::addToDatabase'; $dbw =& wfGetDB( DB_MASTER ); $seqVal = $dbw->nextSequenceValue( 'user_user_id_seq' ); - $dbw->insert( 'user', + $dbw->insert( 'user', array( 'user_id' => $seqVal, 'user_name' => $this->mName, @@ -617,30 +614,36 @@ class User { 'user_newpassword' => $this->mNewpassword, 'user_email' => $this->mEmail, 'user_real_name' => $this->mRealName, - 'user_rights' => implode( ',', $this->mRights ), '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'; - + wfDebug( "User:spreadBlock()\n" ); if ( $this->mId == 0 ) { return; } - + $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,7 +651,7 @@ class User { $ipblock->updateTimestamp(); return; } - + # Make a new block object with the desired properties wfDebug( "Autoblocking {$this->mName}@{$wgIP}\n" ); $ipblock->mAddress = $wgIP; @@ -657,7 +660,7 @@ class User { $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,7 +670,7 @@ class User { # Insert it $ipblock->insert(); - + } function getPageRenderingHash(){ @@ -675,16 +678,17 @@ class User { 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( 'math' ); $confstr .= '!' . $this->getOption( 'highlightbroken' ); - $confstr .= '!' . $this->getOption( 'stubthreshold' ); + $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 ; @@ -693,7 +697,7 @@ class User { 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())); @@ -704,11 +708,11 @@ 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 ) { return wfSetVar( $this->mDataLoaded, $loaded ); } - + function getUserPage() { return Title::makeTitle( NS_USER, $this->mName ); } @@ -721,6 +725,25 @@ class User { 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; + } } ?>