X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FArticle.php;h=732b1c20c9bd7d2a8ed84d60bed1d999546600a5;hb=5b04704d304968ca49b6190ed0dd1d5ad819db45;hp=4972d2bd8c05df4485166de7ae9785870cd2f9df;hpb=a492cf4c3498edbea090c5eccc2515b4d4a1724b;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Article.php b/includes/Article.php index 4972d2bd8c..732b1c20c9 100644 --- a/includes/Article.php +++ b/includes/Article.php @@ -1054,87 +1054,49 @@ class Article implements Page { * @return bool */ public function showPatrolFooter() { - global $wgUseRCPatrol, $wgUseNPPatrol, $wgRCMaxAge, $wgEnableAPI, $wgEnableWriteAPI; + global $wgUseNPPatrol, $wgUseRCPatrol, $wgEnableAPI, $wgEnableWriteAPI; - $request = $this->getContext()->getRequest(); $outputPage = $this->getContext()->getOutput(); $user = $this->getContext()->getUser(); $cache = wfGetMainCache(); + $rc = false; - // Conditions to potentially patrol the current revision - // patrolPage is set in case we want to patrol the first - // revision and not the current one (set in Special:NewPages) - $useRCPatrol = $wgUseRCPatrol && !$request->getBool( 'patrolpage' ); - - if ( !$this->getTitle()->quickUserCan( 'patrol', $user ) || ( !$wgUseNPPatrol && !$wgUseRCPatrol ) ) { - // Patrolling is fully disabled or the user isn't allowed to + if ( !$this->getTitle()->quickUserCan( 'patrol', $user ) || !( $wgUseRCPatrol || $wgUseNPPatrol ) ) { + // Patrolling is disabled or the user isn't allowed to return false; } wfProfileIn( __METHOD__ ); - if ( $useRCPatrol ) { - // Check for cached results - if ( $cache->get( wfMemcKey( 'NotPatrollableRevId', $this->getRevIdFetched() ) ) ) { - wfProfileOut( __METHOD__ ); - return false; - } + // New page patrol: Get the timestamp of the oldest revison which + // the revision table holds for the given page. Then we look + // whether it's within the RC lifespan and if it is, we try + // to get the recentchanges row belonging to that entry + // (with rc_new = 1). - // We make use of a little index trick over here: - // First we get the timestamp of the last revision and then - // we look up the RC row by that as the timestamp is indexed - // and usually very few rows exist for one timestamp - // (While several thousand can exists for a single page) - if ( !$this->mRevision ) { - $this->mRevision = Revision::newFromId( $this->getRevIdFetched() ); - } - - if ( !$this->mRevision || !RecentChange::isInRCLifespan( $this->mRevision->getTimestamp(), 21600 ) ) { - // The revision is more than 6 hours older than the Max RC age - // no need to torture the DB any further (6h because the RC might not be cleaned out regularly) - wfProfileOut( __METHOD__ ); - return false; - } - $rc = RecentChange::newFromConds( - array( - 'rc_this_oldid' => $this->getRevIdFetched(), - 'rc_timestamp' => $this->mRevision->getTimestamp(), - 'rc_cur_id' => $this->getTitle()->getArticleID(), - 'rc_patrolled' => 0 - ), - __METHOD__, - array( 'USE INDEX' => 'rc_timestamp' ) - ); - } else { - // RC patrol is disabled so we have to patrol the first - // revision (new page patrol) in case it's in the RC table. - // To achieve this we get the timestamp of the oldest revison - // the revision table holds for the given page. Then we look - // whether it's within the RC lifespan and if it is, we try - // to get the recentchanges row belonging to that entry - // (with rc_new = 1). - - // Check for cached results - if ( $cache->get( wfMemcKey( 'NotPatrollablePage', $this->getTitle()->getArticleID() ) ) ) { - wfProfileOut( __METHOD__ ); - return false; - } + // Check for cached results + if ( $cache->get( wfMemcKey( 'NotPatrollablePage', $this->getTitle()->getArticleID() ) ) ) { + wfProfileOut( __METHOD__ ); + return false; + } - $dbr = wfGetDB( DB_SLAVE ); - $oldestRevisionTimestamp = $dbr->selectField( - 'revision', - 'MIN( rev_timestamp )', - array( 'rev_page' => $this->getTitle()->getArticleID() ), - __METHOD__ - ); + if ( $this->mRevision && !RecentChange::isInRCLifespan( $this->mRevision->getTimestamp(), 21600 ) ) { + // The current revision is already older than what could be in the RC table + // 6h tolerance because the RC might not be cleaned out regularly + wfProfileOut( __METHOD__ ); + return false; + } - if ( !$oldestRevisionTimestamp || !RecentChange::isInRCLifespan( $oldestRevisionTimestamp, 21600 ) ) { - // We either didn't find the oldest revision for the given page - // or it's to old for the RC table (with 6h tolerance) - wfProfileOut( __METHOD__ ); - return false; - } + $dbr = wfGetDB( DB_SLAVE ); + $oldestRevisionTimestamp = $dbr->selectField( + 'revision', + 'MIN( rev_timestamp )', + array( 'rev_page' => $this->getTitle()->getArticleID() ), + __METHOD__ + ); + if ( $oldestRevisionTimestamp && RecentChange::isInRCLifespan( $oldestRevisionTimestamp, 21600 ) ) { + // 6h tolerance because the RC might not be cleaned out regularly $rc = RecentChange::newFromConds( array( 'rc_new' => 1, @@ -1148,19 +1110,14 @@ class Article implements Page { ); } - wfProfileOut( __METHOD__ ); - if ( !$rc ) { // No RC entry around // Cache the information we gathered above in case we can't patrol // Don't cache in case we can patrol as this could change - if( $useRCPatrol ) { - $cache->set( wfMemcKey( 'NotPatrollableRevId', $this->getRevIdFetched() ), '1', $wgRCMaxAge ); - } else { - $cache->set( wfMemcKey( 'NotPatrollablePage', $this->getTitle()->getArticleID() ), '1', $wgRCMaxAge ); - } + $cache->set( wfMemcKey( 'NotPatrollablePage', $this->getTitle()->getArticleID() ), '1' ); + wfProfileOut( __METHOD__ ); return false; } @@ -1190,6 +1147,7 @@ class Article implements Page { '' ); + wfProfileOut( __METHOD__ ); return true; } @@ -1588,13 +1546,7 @@ class Article implements Page { $this->doDelete( $reason, $suppress ); - if ( $user->isLoggedIn() && $request->getCheck( 'wpWatch' ) != $user->isWatched( $title ) ) { - if ( $request->getCheck( 'wpWatch' ) ) { - WatchAction::doWatch( $title, $user ); - } else { - WatchAction::doUnwatch( $title, $user ); - } - } + WatchAction::doWatchOrUnwatch( $request->getCheck( 'wpWatch' ), $title, $user ); return; }