* @return bool
*/
public function showPatrolFooter() {
- global $wgUseRCPatrol, $wgUseNPPatrol, $wgRCMaxAge, $wgEnableAPI, $wgEnableWriteAPI;
+ global $wgUseNPPatrol, $wgEnableAPI, $wgEnableWriteAPI;
- $request = $this->getContext()->getRequest();
$outputPage = $this->getContext()->getOutput();
$user = $this->getContext()->getUser();
$cache = wfGetMainCache();
+ $rc = false;
- // Normally this makes a link to patrol the revision being viewed.
- // Sometimes, the 'patrolpage' flag is set in case we want to patrol the first
- // revision and not the one being viewed by the user (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 ) || !$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;
- }
-
- // 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() );
- }
+ // 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).
- 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,
);
}
- 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;
}
'</div>'
);
+ wfProfileOut( __METHOD__ );
return true;
}
* @return String
*/
protected function markPatrolledLink() {
- global $wgUseRCPatrol, $wgRCMaxAge, $wgEnableAPI, $wgEnableWriteAPI;
- $cache = wfGetMainCache();
+ global $wgUseRCPatrol, $wgEnableAPI, $wgEnableWriteAPI;
if ( $this->mMarkPatrolledLink === null ) {
// Prepare a change patrol link, if applicable
$wgUseRCPatrol && $this->mNewPage->quickUserCan( 'patrol', $this->getUser() ) &&
// Only do this if the revision isn't more than 6 hours older
// than the Max RC age (6h because the RC might not be cleaned out regularly)
- RecentChange::isInRCLifespan( $this->mNewRev->getTimestamp(), 21600 ) &&
- // Maybe the result is cached
- !$cache->get( wfMemcKey( 'NotPatrollableRevId', $this->mNewid ) )
+ RecentChange::isInRCLifespan( $this->mNewRev->getTimestamp(), 21600 )
) {
// Look for an unpatrolled change corresponding to this diff
)
) . ']</span>';
} else {
- $cache->set( wfMemcKey( 'NotPatrollableRevId', $this->mNewid ), '1', $wgRCMaxAge );
$this->mMarkPatrolledLink = '';
}
} else {