X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FUser.php;h=4289b2ad2db538d1afa038d3b5ff22e688346841;hb=f7e4fc02c10b5c6a5ab60666b0431d6c09ed77c6;hp=9fee089c4c96e1f4c07bb61c4ea08cce71767e6c;hpb=c6a91a002dae685f8c9dbfe510ec47c0d8e5e104;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/User.php b/includes/User.php index 9fee089c4c..4289b2ad2d 100644 --- a/includes/User.php +++ b/includes/User.php @@ -141,9 +141,11 @@ class User { 'createtalk', 'delete', 'deletedhistory', + 'deleterevision', 'edit', 'editinterface', 'editusercssjs', + 'hideuser', 'import', 'importupload', 'ipblock-exempt', @@ -160,17 +162,22 @@ class User { 'proxyunbannable', 'purge', 'read', + 'reset-passwords', 'reupload', 'reupload-shared', 'rollback', 'siteadmin', + 'suppressionlog', 'suppressredirect', + 'suppressrevision', 'trackback', 'undelete', 'unwatchedpages', 'upload', 'upload_by_url', 'userrights', + 'userrights-interwiki', + 'writeapi', ); /** * \string Cached results of getAllRights() @@ -886,6 +893,8 @@ class User { $dbr = wfGetDB( DB_MASTER ); $s = $dbr->selectRow( 'user', '*', array( 'user_id' => $this->mId ), __METHOD__ ); + wfRunHooks( 'UserLoadFromDatabase', array( $this, &$s ) ); + if ( $s !== false ) { # Initialise user table data $this->loadFromRow( $s ); @@ -909,7 +918,7 @@ class User { $this->mDataLoaded = true; if ( isset( $row->user_id ) ) { - $this->mId = $row->user_id; + $this->mId = intval( $row->user_id ); } $this->mName = $row->user_name; $this->mRealName = $row->user_real_name; @@ -1013,9 +1022,14 @@ class User { * @return \type{\arrayof{\string}} Array of user toggle names */ static function getToggles() { - global $wgContLang; + global $wgContLang, $wgUseRCPatrol; $extraToggles = array(); wfRunHooks( 'UserToggles', array( &$extraToggles ) ); + if( $wgUseRCPatrol ) { + $extraToggles[] = 'hidepatrolled'; + $extraToggles[] = 'newpageshidepatrolled'; + $extraToggles[] = 'watchlisthidepatrolled'; + } return array_merge( self::$mToggles, $extraToggles, $wgContLang->getExtraUserToggles() ); } @@ -1149,10 +1163,17 @@ class User { */ 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'); } @@ -1308,6 +1329,15 @@ class User { return $this->mBlockreason; } + /** + * If user is blocked, return the ID for the block + * @return \int Block ID + */ + function getBlockId() { + $this->getBlockedStatus(); + return ($this->mBlock ? $this->mBlock->mId : false); + } + /** * Check if user is blocked on all wikis. * Do not use for actual edit permission checks! @@ -1909,6 +1939,13 @@ class User { } $this->mOptions[$oname] = $val; } + + /** + * Reset all options to the site defaults + */ + function restoreOptions() { + $this->mOptions = User::getDefaultOptions(); + } /** * Get the user's preferred date format. @@ -1983,7 +2020,7 @@ class User { * @return \int User'e edit count */ function getEditCount() { - if ($this->mId) { + if ($this->getId()) { if ( !isset( $this->mEditCount ) ) { /* Populate the count, if it has not been populated yet */ $this->mEditCount = User::edits($this->mId); @@ -2073,11 +2110,15 @@ class User { * @param $action \string action to be checked * @return \bool True if action is allowed, else false */ - function isAllowed($action='') { + function isAllowed( $action = '' ) { if ( $action === '' ) - // In the spirit of DWIM - return true; - + return true; // In the spirit of DWIM + # Patrolling may not be enabled + if( $action === 'patrol' || $action === 'autopatrol' ) { + global $wgUseRCPatrol, $wgUseNPPatrol; + if( !$wgUseRCPatrol && !$wgUseNPPatrol ) + return false; + } # Use strict parameter to avoid matching numeric 0 accidentally inserted # by misconfiguration: 0 == 'foo' return in_array( $action, $this->getRights(), true ); @@ -2705,7 +2746,14 @@ class User { * @return \bool True if matches, false otherwise */ function checkTemporaryPassword( $plaintext ) { - return self::comparePasswords( $this->mNewpassword, $plaintext, $this->getId() ); + global $wgNewPasswordExpiry; + if( self::comparePasswords( $this->mNewpassword, $plaintext, $this->getId() ) ) { + $this->load(); + $expiry = wfTimestamp( TS_UNIX, $this->mNewpassTime ) + $wgNewPasswordExpiry; + return ( time() < $expiry ); + } else { + return false; + } } /**