Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Wikipedia: Mediawiki-CVS

SVN: [34632] trunk/extensions/FlaggedRevs

 

 

Wikipedia mediawiki-cvs RSS feed   Index | Next | Previous | View Threaded


aaron at svn

May 11, 2008, 2:31 PM

Post #1 of 1 (18 views)
Permalink
SVN: [34632] trunk/extensions/FlaggedRevs

Revision: 34632
Author: aaron
Date: 2008-05-11 21:31:04 +0000 (Sun, 11 May 2008)

Log Message:
-----------
Scap done already - bring back commits reverted in r34615

Modified Paths:
--------------
trunk/extensions/FlaggedRevs/FlaggedArticle.php
trunk/extensions/FlaggedRevs/FlaggedRevision.php
trunk/extensions/FlaggedRevs/FlaggedRevs.php
trunk/extensions/FlaggedRevs/FlaggedRevsPage.i18n.php
trunk/extensions/FlaggedRevs/FlaggedRevsPage.php
trunk/extensions/FlaggedRevs/FlaggedRevsXML.php
trunk/extensions/FlaggedRevs/README.txt

Modified: trunk/extensions/FlaggedRevs/FlaggedArticle.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedArticle.php 2008-05-11 21:07:33 UTC (rev 34631)
+++ trunk/extensions/FlaggedRevs/FlaggedArticle.php 2008-05-11 21:31:04 UTC (rev 34632)
@@ -1,9 +1,8 @@
<?php

-class FlaggedArticle {
+class FlaggedArticle extends Article {
public $isDiffFromStable = false;
public $skipReviewDiff = false;
- public $skipAutoReview = false;
public $stableRev = null;
public $pageconfig = null;
public $flags = null;
@@ -75,9 +74,7 @@
* Is this article reviewable?
*/
public function isReviewable() {
- global $wgTitle;
-
- return FlaggedRevs::isPageReviewable( $wgTitle );
+ return FlaggedRevs::isPageReviewable( $this->getTitle() );
}

/**
@@ -85,12 +82,7 @@
*/
private function displayTag() {
global $wgOut;
-
- if( !$this->reviewNotice ) {
- return false;
- }
$wgOut->appendSubtitle( $this->reviewNotice );
-
return true;
}

@@ -176,13 +168,7 @@
// behavior below, since it is the same as ("&stable=1").
if( $old ) {
$revs_since = FlaggedRevs::getRevCountSince( $article, $frev->getRevId() );
- global $wgUseStableTemplates;
- if( $wgUseStableTemplates ) {
- $rev = Revision::newFromId( $frev->getRevId() );
- $text = $rev->getText();
- } else {
- $text = $frev->getExpandedText();
- }
+ $text = $frev->getTextForParse();
$parserOut = FlaggedRevs::parseStableText( $article, $text, $frev->getRevId() );
# Construct some tagging for non-printable outputs. Note that the pending
# notice has all this info already, so don't do this if we added that already.
@@ -286,13 +272,7 @@
# Get parsed stable version
$parserOut = FlaggedRevs::getPageCache( $article );
if( $parserOut==false ) {
- global $wgUseStableTemplates;
- if( $wgUseStableTemplates ) {
- $rev = Revision::newFromId( $frev->getRevId() );
- $text = $rev->getText();
- } else {
- $text = $frev->getExpandedText();
- }
+ $text = $frev->getTextForParse();
$parserOut = FlaggedRevs::parseStableText( $article, $text, $frev->getRevId() );
# Update the stable version cache
FlaggedRevs::updatePageCache( $article, $parserOut );
@@ -314,6 +294,7 @@
// Standard UI
} else {
$msg = $quality ? 'revreview-quality' : 'revreview-basic';
+ $msg .= ($revs_since == 0) ? '-i' : '';
$msg = $synced ? "{$msg}-same" : $msg;

$tag = "<span class='{$css} plainlinks' title=\"{$tooltip}\"></span>" .
@@ -405,7 +386,7 @@
* Adds latest stable version tag to page when editing
*/
public function addToEditView( $editform ) {
- global $wgRequest, $wgTitle, $wgOut;
+ global $wgRequest, $wgOut;
# Talk pages cannot be validated
if( !$editform->mArticle || !$this->isReviewable() )
return false;
@@ -422,7 +403,7 @@
$tag = $warning = '';
# Check the newest stable version
$frev = $this->getStableRev();
- if( !is_null($frev) && $frev->getRevId() != $revid ) {
+ if( !is_null($frev) ) {
global $wgLang, $wgUser, $wgFlaggedRevsAutoReview;

$time = $wgLang->date( $frev->getTimestamp(), true );
@@ -441,26 +422,28 @@
wfMsgExt($msg,array('parseinline')) . "</div>";
}
}
- # Streamlined UI
- if( FlaggedRevs::useSimpleUI() ) {
- $msg = $quality ? 'revreview-newest-quality' : 'revreview-newest-basic';
- $tag = "<span class='fr-checkbox'></span>" .
- wfMsgExt( $msg, array('parseinline'), $frev->getRevId(), $time, $revs_since );
- $tag = "<div id='mw-revisiontag-edit' class='flaggedrevs_editnotice plainlinks'>$tag</div>";
- # Standard UI
- } else {
- $msg = $quality ? 'revreview-newest-quality' : 'revreview-newest-basic';
- $tag = "<span class='fr-checkbox'></span>" .
- wfMsgExt( $msg, array('parseinline'), $frev->getRevId(), $time, $revs_since );
- # Hide clutter
- if( !empty($flags) ) {
- $tag .= " <span id='mw-revisiontoggle' class='flaggedrevs_toggle' style='display:none;'" .
- " onclick='toggleRevRatings()' title='" . wfMsgHtml('revreview-toggle-title') . "' >" .
- wfMsg( 'revreview-toggle' ) . "</span>";
- $tag .= '<span id="mw-revisionratings" style="display:block;">' .
- wfMsg('revreview-oldrating') . FlaggedRevsXML::addTagRatings( $flags ) . '</span>';
+ if( $frev->getRevId() != $revid ) {
+ # Streamlined UI
+ if( FlaggedRevs::useSimpleUI() ) {
+ $msg = $quality ? 'revreview-newest-quality' : 'revreview-newest-basic';
+ $tag = "<span class='fr-checkbox'></span>" .
+ wfMsgExt( $msg, array('parseinline'), $frev->getRevId(), $time, $revs_since );
+ $tag = "<div id='mw-revisiontag-edit' class='flaggedrevs_editnotice plainlinks'>$tag</div>";
+ # Standard UI
+ } else {
+ $msg = $quality ? 'revreview-newest-quality' : 'revreview-newest-basic';
+ $tag = "<span class='fr-checkbox'></span>" .
+ wfMsgExt( $msg, array('parseinline'), $frev->getRevId(), $time, $revs_since );
+ # Hide clutter
+ if( !empty($flags) ) {
+ $tag .= " <span id='mw-revisiontoggle' class='flaggedrevs_toggle' style='display:none;'" .
+ " onclick='toggleRevRatings()' title='" . wfMsgHtml('revreview-toggle-title') . "' >" .
+ wfMsg( 'revreview-toggle' ) . "</span>";
+ $tag .= '<span id="mw-revisionratings" style="display:block;">' .
+ wfMsg('revreview-oldrating') . FlaggedRevsXML::addTagRatings( $flags ) . '</span>';
+ }
+ $tag = "<div id='mw-revisiontag-edit' class='flaggedrevs_editnotice plainlinks'>$tag</div>";
}
- $tag = "<div id='mw-revisiontag-edit' class='flaggedrevs_editnotice plainlinks'>$tag</div>";
}
$wgOut->addHTML( $tag . $warning );
# Show diff to stable, to make things less confusing
@@ -536,7 +519,7 @@
* Add link to stable version setting to protection form
*/
public function addVisibilityLink( $out ) {
- global $wgUser, $wgRequest, $wgTitle;
+ global $wgUser, $wgRequest;

if( !$this->isReviewable() )
return true;
@@ -906,108 +889,6 @@

return true;
}
-
- /**
- * When a new page is made by a reviwer, try to automatically review it.
- */
- public function maybeMakeNewPageReviewed( $article, $user, $text, $c, $flags, $a, $b, $flags, $rev ) {
- global $wgFlaggedRevsAutoReviewNew;
-
- if( $this->skipAutoReview || !$wgFlaggedRevsAutoReviewNew || !$user->isAllowed('autoreview') )
- return true;
- # Must be in reviewable namespace
- if( !FlaggedRevs::isPageReviewable( $article->getTitle() ) )
- return true;
- # Revision will be null for null edits
- if( !$rev ) {
- $this->skipReviewDiff = true; // Don't jump to diff...
- return true;
- }
- # Assume basic flagging level
- $flags = array();
- foreach( FlaggedRevs::$dimensions as $tag => $minQL ) {
- $flags[$tag] = 1;
- }
- FlaggedRevs::autoReviewEdit( $article, $user, $text, $rev, $flags );
-
- $this->skipReviewDiff = true; // Don't jump to diff...
- $this->skipAutoReview = true; // Be sure not to do stuff twice
-
- return true;
- }
-
- /**
- * When an edit is made by a reviewer, if the current revision is the stable
- * version, try to automatically review it.
- */
- public function maybeMakeEditReviewed( $article, $user, $text, $c, $m, $a, $b, $flags, $rev ) {
- global $wgFlaggedRevsAutoReview, $wgRequest;
-
- if( $this->skipAutoReview || !$wgFlaggedRevsAutoReview || !$user->isAllowed('autoreview') )
- return true;
- # Must be in reviewable namespace
- if( !FlaggedRevs::isPageReviewable( $article->getTitle() ) )
- return true;
- # Revision will be null for null edits
- if( !$rev ) {
- $this->skipReviewDiff = true; // Don't jump to diff...
- return true;
- }
- # Get the revision the incoming one was based off
- $baseRevID = $wgRequest->getVal('baseRevId');
- $frev = FlaggedRevs::getFlaggedRev( $article->getTitle(), $baseRevID );
- # Is this an edit directly to the stable version?
- if( is_null($frev) )
- return true;
- # Assume basic flagging level
- $flags = array();
- foreach( FlaggedRevs::$dimensions as $tag => $minQL ) {
- $flags[$tag] = 1;
- }
- FlaggedRevs::autoReviewEdit( $article, $user, $text, $rev, $flags );
-
- $this->skipReviewDiff = true; // Don't jump to diff...
- $this->skipAutoReview = true; // Be sure not to do stuff twice
-
- return true;
- }
-
- /**
- * When a rollback is made by a reviwer, try to automatically review it.
- */
- public function maybeMakeRollbackReviewed( $article, $user, $rev ) {
- global $wgFlaggedRevsAutoReview;
-
- if( $this->skipAutoReview || !$wgFlaggedRevsAutoReview || !$user->isAllowed('autoreview') )
- return true;
- # Must be in reviewable namespace
- if( !FlaggedRevs::isPageReviewable( $article->getTitle() ) )
- return true;
- # Was this revision flagged?
- $frev = FlaggedRevs::getFlaggedRev( $article->getTitle(), $rev->getId() );
- if( is_null($frev) )
- return true;
- # Grab the flags for this revision
- $flags = FlaggedRevs::getRevisionTags( $article->getTitle(), $rev->getID() );
- # Check if user is allowed to renew the stable version.
- if( !RevisionReview::userCanSetFlags( $flags ) ) {
- # Assume basic flagging level
- $flags = array();
- foreach( FlaggedRevs::$dimensions as $tag => $minQL ) {
- $flags[$tag] = 1;
- }
- }
- # Select the version that is now current. Create a new article object
- # to avoid using one with outdated field data.
- $article = new Article( $article->getTitle() );
- $newRev = Revision::newFromId( $article->getLatest() );
- FlaggedRevs::autoReviewEdit( $article, $user, $rev->getText(), $newRev, $flags );
-
- $this->skipReviewDiff = true; // Don't jump to diff...
- $this->skipAutoReview = true; // Be sure not to do stuff twice
-
- return true;
- }

/**
* Add a hidden revision ID field to edit form.
@@ -1047,8 +928,7 @@
return $this->stableRev;
}
# Get the content page, skip talk
- global $wgTitle;
- $title = $wgTitle->getSubjectPage();
+ $title = $this->getTitle()->getSubjectPage();
# Do we have one?
$srev = FlaggedRevs::getStablePageRev( $title, $getText, $forUpdate );
if( $srev ) {
@@ -1066,13 +946,12 @@
* @returns Array (select,override)
*/
public function getVisibilitySettings( $forUpdate=false ) {
- global $wgTitle;
# Cached results available?
if( !is_null($this->pageconfig) ) {
return $this->pageconfig;
}
# Get the content page, skip talk
- $title = $wgTitle->getSubjectPage();
+ $title = $this->getTitle()->getSubjectPage();

$config = FlaggedRevs::getPageVisibilitySettings( $title, $forUpdate );
$this->pageconfig = $config;
@@ -1085,12 +964,12 @@
* @eturns Array, output of the flags for a given revision
*/
public function getFlagsForRevision( $rev_id ) {
- global $wgFlaggedRevTags, $wgTitle;
+ global $wgFlaggedRevTags;
# Cached results?
if( isset($this->flags[$rev_id]) && $this->flags[$rev_id] )
return $this->flags[$rev_id];
# Get the flags
- $flags = FlaggedRevs::getRevisionTags( $wgTitle, $rev_id );
+ $flags = FlaggedRevs::getRevisionTags( $this->getTitle(), $rev_id );
# Try to cache results
$this->flags[$rev_id] = $flags;

@@ -1104,7 +983,7 @@
* @param bool $top, should this form always go on top?
*/
public function addQuickReview( $out, $top = false ) {
- global $wgOut, $wgTitle, $wgUser, $wgRequest, $wgFlaggedRevComments, $wgFlaggedRevsOverride;
+ global $wgOut, $wgUser, $wgRequest, $wgFlaggedRevComments, $wgFlaggedRevsOverride;
# User must have review rights
if( !$wgUser->isAllowed( 'review' ) ) {
return;
@@ -1233,16 +1112,16 @@
}
}
# For image pages, note the current image version
- if( $wgTitle->getNamespace() == NS_IMAGE ) {
- $file = wfFindFile( $wgTitle );
+ if( $this->getTitle()->getNamespace() == NS_IMAGE ) {
+ $file = wfFindFile( $this->getTitle() );
if( $file ) {
- $imageParams .= $wgTitle->getDBkey() . "|" . $file->getTimestamp() . "|" . $file->getSha1() . "#";
+ $imageParams .= $this->getTitle()->getDBkey() . "|" . $file->getTimestamp() . "|" . $file->getSha1() . "#";
}
}

# Hidden params
$form .= Xml::hidden( 'title', $reviewtitle->getPrefixedText() ) . "\n";
- $form .= Xml::hidden( 'target', $wgTitle->getPrefixedText() ) . "\n";
+ $form .= Xml::hidden( 'target', $this->getTitle()->getPrefixedText() ) . "\n";
$form .= Xml::hidden( 'oldid', $id ) . "\n";
$form .= Xml::hidden( 'action', 'submit') . "\n";
$form .= Xml::hidden( 'wpEditToken', $wgUser->editToken() ) . "\n";
@@ -1310,11 +1189,18 @@
* If viewing a stable version, adjust the last modified header
*/
public function setLastModified( $sktmp, &$tpl ) {
- global $wgArticle, $wgLang;
+ global $wgArticle, $wgLang, $wgRequest;
# Non-content pages cannot be validated
- if( !$this->pageOverride() )
+ if( !$this->isReviewable() )
return true;
+ # Old stable versions
+ if( $wgRequest->getIntOrNull('stableid') ) {
+ $tpl->set('lastmod', false);
+ return true;
+ }
# Check for an overridabe revision
+ if( !$this->pageOverride() )
+ return true;
$frev = $this->getStableRev( true );
if( !$frev || $frev->getRevId() == $wgArticle->getLatest() )
return true;
@@ -1359,5 +1245,3 @@
return true;
}
}
-
-

Modified: trunk/extensions/FlaggedRevs/FlaggedRevision.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevision.php 2008-05-11 21:07:33 UTC (rev 34631)
+++ trunk/extensions/FlaggedRevs/FlaggedRevision.php 2008-05-11 21:31:04 UTC (rev 34632)
@@ -101,6 +101,13 @@
public function getComment() {
return $this->mComment;
}
+
+ /**
+ * @returns Integer the user ID of the reviewer
+ */
+ public function getUser() {
+ return $this->mUser;
+ }

/**
* @returns Integer revision timestamp in MW format
@@ -123,12 +130,20 @@
$this->loadText(); // load if not loaded
return $this->mText;
}
-
+
/**
- * @returns Integer the user ID of the reviewer
+ * @returns mixed (string/false) expanded text or revision text.
+ * Depends on whether $wgUseStableTemplates is on or not.
*/
- public function getUser() {
- return $this->mUser;
+ public function getTextForParse() {
+ global $wgUseStableTemplates;
+ if( $wgUseStableTemplates ) {
+ $rev = Revision::newFromId( $this->getRevId() );
+ $text = $rev->getText();
+ } else {
+ $text = $this->getExpandedText();
+ }
+ return $text;
}

/**

Modified: trunk/extensions/FlaggedRevs/FlaggedRevs.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevs.php 2008-05-11 21:07:33 UTC (rev 34631)
+++ trunk/extensions/FlaggedRevs/FlaggedRevs.php 2008-05-11 21:31:04 UTC (rev 34632)
@@ -14,7 +14,7 @@
$wgExtensionCredits['specialpage'][] = array(
'name' => 'Flagged Revisions',
'author' => array( 'Aaron Schulz', 'Joerg Baach' ),
- 'version' => '1.041',
+ 'version' => '1.042',
'url' => 'http://www.mediawiki.org/wiki/Extension:FlaggedRevs',
'descriptionmsg' => 'flaggedrevs-desc',
);
@@ -223,7 +223,7 @@
global $wgOut, $wgHooks, $wgLang, $wgFlaggedArticle, $wgUseRCPatrol;
# Initialize
FlaggedRevs::load();
- $wgFlaggedArticle = new FlaggedArticle();
+ $wgFlaggedArticle = null;

wfLoadExtensionMessages( 'FlaggedRevsPage' );

@@ -238,28 +238,8 @@
define( 'FLAGGED_JS', $wgScriptPath . '/extensions/FlaggedRevs/flaggedrevs.js?' . $wgFlaggedRevStyleVersion );

######### Hook attachments #########
- $wgHooks['OutputPageParserOutput'][] = 'FlaggedRevs::InjectStyleAndJS';
- $wgHooks['EditPage::showEditForm:initial'][] = 'FlaggedRevs::InjectStyleAndJS';
- $wgHooks['PageHistoryBeforeList'][] = 'FlaggedRevs::InjectStyleAndJS';
- # Main hooks, overrides pages content, adds tags, sets tabs and permalink
- $wgHooks['SkinTemplateTabs'][] = array( $wgFlaggedArticle, 'setActionTabs' );
- # Change last-modified footer
- $wgHooks['SkinTemplateOutputPageBeforeExec'][] = array( $wgFlaggedArticle, 'setLastModified' );
- # Update older, incomplete, page caches (ones that lack template Ids/image timestamps)
- $wgHooks['ArticleViewHeader'][] = array( $wgFlaggedArticle, 'maybeUpdateMainCache' );
- $wgHooks['ArticleViewHeader'][] = array( $wgFlaggedArticle, 'setPageContent' );
- $wgHooks['ArticleViewHeader'][] = array( $wgFlaggedArticle, 'addPatrolLink' );
- # Set image version
- $wgHooks['ArticleFromTitle'][] = array( $wgFlaggedArticle, 'setImageVersion' );
- # Add page notice
- $wgHooks['SkinTemplateBuildNavUrlsNav_urlsAfterPermalink'][] = array( $wgFlaggedArticle, 'setPermaLink' );
- # Add tags do edit view
- $wgHooks['EditPage::showEditForm:initial'][] = array( $wgFlaggedArticle, 'addToEditView' );
- # Add review form
- $wgHooks['BeforePageDisplay'][] = array( $wgFlaggedArticle, 'addReviewForm' );
- $wgHooks['BeforePageDisplay'][] = array( $wgFlaggedArticle, 'addVisibilityLink' );
- # Mark of items in page history
- $wgHooks['PageHistoryLineEnding'][] = array( $wgFlaggedArticle, 'addToHistLine' );
+ # Set $wgFlaggedArticle
+ $wgHooks['ArticleFromTitle'][] = 'wfInitFlaggedArticle';
# Autopromote Editors
$wgHooks['ArticleSaveComplete'][] = 'FlaggedRevs::autoPromoteUser';
# Adds table link references to include ones from the stable version
@@ -281,17 +261,10 @@
# Additional parser versioning
$wgHooks['ParserAfterTidy'][] = 'FlaggedRevs::parserInjectTimestamps';
$wgHooks['OutputPageParserOutput'][] = 'FlaggedRevs::outputInjectTimestamps';
- # Page review on edit
- $wgHooks['ArticleUpdateBeforeRedirect'][] = array( $wgFlaggedArticle, 'injectReviewDiffURLParams' );
- $wgHooks['DiffViewHeader'][] = array( $wgFlaggedArticle, 'addPatrolAndDiffLink' );
- $wgHooks['DiffViewHeader'][] = array( $wgFlaggedArticle, 'addDiffNoticeAndIncludes' );
- # Autoreview stuff
- $wgHooks['EditPage::showEditForm:fields'][] = array( $wgFlaggedArticle, 'addRevisionIDField' );
- $wgHooks['ArticleInsertComplete'][] = array( $wgFlaggedArticle, 'maybeMakeNewPageReviewed' );
- $wgHooks['ArticleSaveComplete'][] = array( $wgFlaggedArticle, 'maybeMakeEditReviewed' );
- $wgHooks['ArticleRollbackComplete'][] = array( $wgFlaggedArticle, 'maybeMakeRollbackReviewed' );
+ # Auto-reviewing
$wgHooks['ArticleSaveComplete'][] = 'FlaggedRevs::autoMarkPatrolled';
- $wgHooks['RevisionInsertComplete'][] = 'FlaggedRevs::maybeMakeNullEditReviewed';
+ $wgHooks['RevisionInsertComplete'][] = 'FlaggedRevs::maybeMakeEditReviewed';
+ $wgHooks['ArticleRollbackComplete'][] = 'FlaggedRevs::maybeMakeRollbackReviewed';
# Disallow moves of stable pages
$wgHooks['userCan'][] = 'FlaggedRevs::userCanMove';
$wgHooks['userCan'][] = 'FlaggedRevs::userCanView';
@@ -307,6 +280,44 @@
#########
}

+function wfInitFlaggedArticle( $title, $article ) {
+ global $wgFlaggedArticle, $wgHooks;
+ if( !FlaggedRevs::isPageReviewable( $title ) )
+ return true;
+ # Initialize and set article hooks
+ $wgFlaggedArticle = new FlaggedArticle( $title );
+ # Main hooks, overrides pages content, adds tags, sets tabs and permalink
+ $wgHooks['SkinTemplateTabs'][] = array( $wgFlaggedArticle, 'setActionTabs' );
+ # Change last-modified footer
+ $wgHooks['SkinTemplateOutputPageBeforeExec'][] = array( $wgFlaggedArticle, 'setLastModified' );
+ # Update older, incomplete, page caches (ones that lack template Ids/image timestamps)
+ $wgHooks['ArticleViewHeader'][] = array( $wgFlaggedArticle, 'maybeUpdateMainCache' );
+ $wgHooks['ArticleViewHeader'][] = array( $wgFlaggedArticle, 'setPageContent' );
+ $wgHooks['ArticleViewHeader'][] = array( $wgFlaggedArticle, 'addPatrolLink' );
+ # Set image version
+ $wgHooks['ArticleFromTitle'][] = array( $wgFlaggedArticle, 'setImageVersion' );
+ # Add page notice
+ $wgHooks['SkinTemplateBuildNavUrlsNav_urlsAfterPermalink'][] = array( $wgFlaggedArticle, 'setPermaLink' );
+ # Add tags do edit view
+ $wgHooks['EditPage::showEditForm:initial'][] = array( $wgFlaggedArticle, 'addToEditView' );
+ # Add review form
+ $wgHooks['BeforePageDisplay'][] = array( $wgFlaggedArticle, 'addReviewForm' );
+ $wgHooks['BeforePageDisplay'][] = array( $wgFlaggedArticle, 'addVisibilityLink' );
+ # Mark of items in page history
+ $wgHooks['PageHistoryLineEnding'][] = array( $wgFlaggedArticle, 'addToHistLine' );
+ # Page review on edit
+ $wgHooks['ArticleUpdateBeforeRedirect'][] = array( $wgFlaggedArticle, 'injectReviewDiffURLParams' );
+ $wgHooks['DiffViewHeader'][] = array( $wgFlaggedArticle, 'addPatrolAndDiffLink' );
+ $wgHooks['DiffViewHeader'][] = array( $wgFlaggedArticle, 'addDiffNoticeAndIncludes' );
+ # Autoreview stuff
+ $wgHooks['EditPage::showEditForm:fields'][] = array( $wgFlaggedArticle, 'addRevisionIDField' );
+ # Add CSS/JS
+ $wgHooks['OutputPageParserOutput'][] = 'FlaggedRevs::InjectStyleAndJS';
+ $wgHooks['EditPage::showEditForm:initial'][] = 'FlaggedRevs::InjectStyleAndJS';
+ $wgHooks['PageHistoryBeforeList'][] = 'FlaggedRevs::InjectStyleAndJS';
+ return true;
+}
+
# Add review log and such
$wgLogTypes[] = 'review';
$wgLogNames['review'] = 'review-logpage';
@@ -326,25 +337,6 @@

$wgHooks['LoadExtensionSchemaUpdates'][] = 'efFlaggedRevsSchemaUpdates';

-function efFlaggedRevsSchemaUpdates() {
- global $wgDBtype, $wgExtNewFields, $wgExtPGNewFields, $wgExtNewIndexes, $wgExtNewTables;
-
- $base = dirname(__FILE__);
- if( $wgDBtype == 'mysql' ) {
- $wgExtNewFields[] = array( 'flaggedpage_config', 'fpc_expiry', "$base/archives/patch-fpc_expiry.sql" );
- $wgExtNewIndexes[] = array('flaggedpage_config', 'fpc_expiry', "$base/archives/patch-expiry-index.sql" );
- $wgExtNewTables[] = array( 'flaggedrevs_promote', "$base/archives/patch-flaggedrevs_promote.sql" );
- $wgExtNewTables[] = array( 'flaggedpages', "$base/archives/patch-flaggedpages.sql" );
- } else if( $wgDBtype == 'postgres' ) {
- $wgExtPGNewFields[] = array('flaggedpage_config', 'fpc_expiry', "TIMESTAMPTZ NULL" );
- $wgExtNewIndexes[] = array('flaggedpage_config', 'fpc_expiry', "$base/postgres/patch-expiry-index.sql" );
- $wgExtNewTables[] = array( 'flaggedrevs_promote', "$base/postgres/patch-flaggedrevs_promote.sql" );
- $wgExtNewTables[] = array( 'flaggedpages', "$base/postgres/patch-flaggedpages.sql" );
- }
-
- return true;
-}
-
class FlaggedRevs {
public static $dimensions = array();
public static $styleLoaded = false;
@@ -434,14 +426,14 @@
*/
public static function parseStableText( $article, $text='', $id, $reparsed = true ) {
global $wgParser;
+ $title = $article->getTitle(); // avoid pass-by-reference error
# Make our hooks to trigger
$wgParser->fr_isStable = true;
$wgParser->fr_includesMatched = true;
# Don't show section-edit links, they can be old and misleading
$options = self::makeParserOptions();
- $options->setEditSection( $id==$article->getLatest() );
+ $options->setEditSection( $id == $title->getLatestRevID(GAID_FOR_UPDATE) );
# Parse the new body, wikitext -> html
- $title = $article->getTitle(); // avoid pass-by-reference error
$parserOut = $wgParser->parse( $text, $title, $options, true, true, $id );
$parserOut->fr_includesMatched = $wgParser->fr_includesMatched;
# Done with parser!
@@ -490,14 +482,14 @@
/**
* @param FlaggedRevision $frev
* @param Article $article
- * @param ParserOutput $flaggedOutput, will fetch if not given
+ * @param ParserOutput $stableOutput, will fetch if not given
* @param ParserOutput $currentOutput, will fetch if not given
* @return bool
* See if a flagged revision is synced with the current
*/
- public static function flaggedRevIsSynced( $frev, $article, $flaggedOutput=null, $currentOutput=null ) {
+ public static function flaggedRevIsSynced( $frev, $article, $stableOutput=null, $currentOutput=null ) {
# Must be the same revision
- if( $frev->getRevId() != $article->getLatest() ) {
+ if( $frev->getRevId() != $article->getTitle()->getLatestRevID(GAID_FOR_UPDATE) ) {
return false;
}
global $wgMemc;
@@ -513,20 +505,14 @@
}
}
# If parseroutputs not given, fetch them...
- if( is_null($flaggedOutput) || !isset($flaggedOutput->fr_newestTemplateID) ) {
+ if( is_null($stableOutput) || !isset($stableOutput->fr_newestTemplateID) ) {
# Get parsed stable version
- $flaggedOutput = FlaggedRevs::getPageCache( $article );
- if( $flaggedOutput==false ) {
- global $wgUseStableTemplates;
- if( $wgUseStableTemplates ) {
- $rev = Revision::newFromId( $frev->getRevId() );
- $text = $rev->getText();
- } else {
- $text = $frev->getExpandedText();
- }
- $flaggedOutput = FlaggedRevs::parseStableText( $article, $text, $frev->getRevId() );
+ $stableOutput = self::getPageCache( $article );
+ if( $stableOutput==false ) {
+ $text = $frev->getTextForParse();
+ $stableOutput = self::parseStableText( $article, $text, $frev->getRevId() );
# Update the stable version cache
- FlaggedRevs::updatePageCache( $article, $flaggedOutput );
+ self::updatePageCache( $article, $stableOutput );
}
}
if( is_null($currentOutput) || !isset($currentOutput->fr_newestTemplateID) ) {
@@ -540,15 +526,17 @@
$options = self::makeParserOptions( $wgUser );
$currentOutput = $wgParser->parse( $text, $title, $options );
# Might as well save the cache while we're at it
- $parserCache->save( $currentOutput, $article, $wgUser );
+ global $wgEnableParserCache;
+ if( $wgEnableParserCache )
+ $parserCache->save( $currentOutput, $article, $wgUser );
}
}
# Only current of revisions of inclusions can be reviewed. Since the stable and current revisions
# have the same text, the only thing that can make them different is updating a template or image.
# If this is the case, the current revision will have a newer template or image version used somewhere.
- if( $currentOutput->fr_newestImageTime > $flaggedOutput->fr_newestImageTime ) {
+ if( $currentOutput->fr_newestImageTime > $stableOutput->fr_newestImageTime ) {
$synced = false;
- } else if( $currentOutput->fr_newestTemplateID > $flaggedOutput->fr_newestTemplateID ) {
+ } else if( $currentOutput->fr_newestTemplateID > $stableOutput->fr_newestTemplateID ) {
$synced = false;
} else {
$synced = true;
@@ -558,7 +546,7 @@
global $wgParserCacheExpireTime;
$syncData = $synced ? "true" : "false";
$wgMemc->set( $key, $syncData, $wgParserCacheExpireTime );
-
+
return $synced;
}

@@ -658,7 +646,6 @@
if( $row ) {
return new FlaggedRevision( $title, $row );
}
-
return null;
}

@@ -670,11 +657,13 @@
*/
public static function getRevQuality( $title, $rev_id, $db = NULL ) {
$db = $db ? $db : wfGetDB( DB_SLAVE );
- $quality = $db->selectField( 'flaggedrevs', 'fr_quality',
+ $quality = $db->selectField( 'flaggedrevs',
+ 'fr_quality',
array( 'fr_page_id' => $title->getArticleID(),
'fr_rev_id' => $rev_id ),
__METHOD__,
- array( 'FORCE INDEX' => 'PRIMARY' ) );
+ array( 'FORCE INDEX' => 'PRIMARY' )
+ );
return $quality;
}

@@ -765,7 +754,7 @@
# Check if the count is zero by using $article->getLatest().
# I don't trust using memcache and PHP for values like '0'
# as it may confuse "expired" with "0". -aaron
- if( $article->getLatest()==$from_rev ) {
+ if( $article->getTitle()->getLatestRevID(GAID_FOR_UPDATE) == $from_rev ) {
return 0;
}
global $wgMemc;
@@ -873,7 +862,7 @@
public static function getRevisionTags( $title, $rev_id ) {
$dbr = wfGetDB( DB_SLAVE );
$tags = $dbr->selectField( 'flaggedrevs', 'fr_tags',
- array('fr_rev_id' => $rev_id,
+ array( 'fr_rev_id' => $rev_id,
'fr_page_id' => $title->getArticleId() ),
__METHOD__ );
if( !$tags )
@@ -1045,10 +1034,10 @@
/**
* Add FlaggedRevs css/js. Attached to two different hooks, neglect inputs.
*/
- public static function InjectStyleAndJS( $a=false, $b=false ) {
+ public static function InjectStyleAndJS() {
global $wgOut, $wgJsMimeType, $wgFlaggedArticle;
# Don't double-load
- if( self::$styleLoaded )
+ if( self::$styleLoaded || !$wgFlaggedArticle )
return true;
# UI CSS
$wgOut->addLink( array(
@@ -1104,19 +1093,18 @@
$quality = self::isPristine($flags) ? 2 : 1;
}
$tmpset = $imgset = array();
+ $poutput = false;
# Try the parser cache, should be set on the edit before this is called.
# If not set or up to date, then parse it. Use master to avoid lag issues.
- $poutput = false;
$latestID = $article->getTitle()->getLatestRevID(GAID_FOR_UPDATE);
- if( $latestID == $rev->getId() ) {
- $parserCache = ParserCache::singleton();
- $poutput = $parserCache->get( $article, $user );
- }
- if( $poutput==false ) {
+ if( $poutput == false ) {
$options = self::makeParserOptions( $user );
- $poutput = $wgParser->parse( $text, $article->getTitle(), $options, true, true, $rev->getId() );
+ $title = $article->getTitle(); // avoid pass-by-ref error
+ $poutput = $wgParser->parse( $text, $title, $options, true, true, $latestID );
# Might as well save the cache while we're at it
- if( $latestID == $rev->getId() ) {
+ global $wgEnableParserCache;
+ if( $wgEnableParserCache && $latestID == $rev->getId() ) {
+ $parserCache = ParserCache::singleton();
$parserCache->save( $poutput, $article, $user );
}
}
@@ -1163,7 +1151,7 @@
$textFlags = self::compressText( $fulltext );

# Write to external storage if required
- $storage = FlaggedRevs::getExternalStorage();
+ $storage = self::getExternalStorage();
if( $storage ) {
if( is_array($storage) ) {
# Distribute storage across multiple clusters
@@ -1219,7 +1207,7 @@
$sv = self::getStablePageRev( $article->getTitle(), false, true );
if( $sv && $sv->getRevId() == $rev->getId() ) {
# Update stable cache
- FlaggedRevs::updatePageCache( $article, $poutput );
+ self::updatePageCache( $article, $poutput );
# Update page fields
self::updateArticleOn( $article, $rev->getId(), $rev->getId() );
# Purge squid for this page only
@@ -1353,7 +1341,9 @@
$options = self::makeParserOptions( $wgUser );
$poutput = $wgParser->parse($text, $article->getTitle(), $options);
# Might as well save the cache while we're at it
- $parserCache->save( $poutput, $article, $wgUser );
+ global $wgEnableParserCache;
+ if( $wgEnableParserCache )
+ $parserCache->save( $poutput, $article, $wgUser );
}
$u = new LinksUpdate( $article->getTitle(), $poutput );
$u->doUpdate(); // this will trigger our hook to add stable links too...
@@ -1390,12 +1380,7 @@
# Try stable version cache. This should be updated before this is called.
$parserOut = self::getPageCache( $article );
if( $parserOut==false ) {
- if( $wgUseStableTemplates ) {
- $rev = Revision::newFromId( $sv->getRevId() );
- $text = $rev->getText();
- } else {
- $text = $sv->getExpandedText();
- }
+ $text = $sv->getTextForParse();
# Parse the text
$parserOut = self::parseStableText( $article, $text, $sv->getRevId() );
}
@@ -1714,13 +1699,12 @@
* Don't let users vandalize pages by moving them.
*/
public static function userCanMove( $title, $user, $action, $result ) {
- global $wgTitle;
+ global $wgTitle, $wgFlaggedArticle;

if( $action != 'move' || !self::isPageReviewable( $title ) )
return true;
# See if there is a stable version
- if( $wgTitle && $wgTitle->equals( $title ) ) {
- global $wgFlaggedArticle;
+ if( $wgFlaggedArticle && $wgTitle && $wgTitle->equals( $title ) ) {
// Cache stable version while we are at it.
$frev = $wgFlaggedArticle->getStableRev( true );
} else {
@@ -1741,7 +1725,7 @@
* Allow users to view reviewed pages.
*/
public static function userCanView( $title, $user, $action, $result ) {
- global $wgFlaggedRevsVisible, $wgFlaggedRevsTalkVisible, $wgTitle;
+ global $wgFlaggedRevsVisible, $wgFlaggedRevsTalkVisible, $wgTitle, $wgFlaggedArticle;
# Assume $action may still not be set, in which case, treat it as 'view'...
if( $action != 'read' )
return true;
@@ -1757,7 +1741,7 @@
}
# See if there is a stable version. Also, see if, given the page
# config and URL params, the page can be overriden.
- if( $wgTitle && $wgTitle->equals( $title ) ) {
+ if( $wgFlaggedArticle && $wgTitle && $wgTitle->equals( $title ) ) {
global $wgFlaggedArticle;
// Cache stable version while we are at it.
if( $wgFlaggedArticle->pageOverride() && $wgFlaggedArticle->getStableRev( true ) ) {
@@ -1772,42 +1756,89 @@
}

/**
- * When a null edit is made, autoreview if necessary
+ * When an edit is made by a reviewer, if the current revision is the stable
+ * version, try to automatically review it.
*/
- public static function maybeMakeNullEditReviewed( $rev ) {
- $title = $rev->getTitle();
+ public static function maybeMakeEditReviewed( $rev ) {
+ global $wgFlaggedRevsAutoReview, $wgFlaggedRevsAutoReviewNew, $wgFlaggedArticle, $wgRequest;
+ # Get the user
+ $user = User::newFromId( $rev->getUser() );
+ if( !$wgFlaggedRevsAutoReview || !$user->isAllowed('autoreview') )
+ return true;
# GetTitle() for revisions uses slaves and wants page_id,rev_id to
# match...this is bad if we *just* added it.
- $title = $title ? $title : Title::newFromID( $rev->getPage() );
+ $title = $rev->getTitle() ? $rev->getTitle() : Title::newFromID( $rev->getPage(), GAID_FOR_UPDATE );
+ # Must be in reviewable namespace
if( !$title || !self::isPageReviewable( $title ) ) {
return true;
}
- $prevRevID = $title->getPreviousRevisionId( $rev->getId() );
- if( !$prevRevID )
- return true;
- $prevRev = Revision::newFromID( $prevRevID );
- # Check for null edits
- if( $prevRev && $prevRev->getTextId() == $rev->getTextId() ) {
- $frev = FlaggedRevs::getFlaggedRev( $title, $prevRev->getId() );
- if( !is_null($frev) ) {
- $article = new Article( $title );
- $flags = $frev->getTags();
- # Check if user is allowed to renew the stable version.
- if( !RevisionReview::userCanSetFlags( $flags ) ) {
- # Assume basic flagging level
- $flags = array();
- foreach( FlaggedRevs::$dimensions as $tag => $minQL ) {
- $flags[$tag] = 1;
- }
+ $article = new Article( $title );
+ # Revision will be null for null edits
+ if( $rev ) {
+ $frev = null;
+ $reviewableNewPage = false;
+ # Get the revision the incoming one was based off
+ $baseRevID = $wgRequest->getVal('baseRevId');
+ if( $baseRevID ) {
+ $frev = self::getFlaggedRev( $article->getTitle(), $baseRevID );
+ } else {
+ $prevRevID = $article->getTitle()->getPreviousRevisionId( $rev->getId() );
+ $prevRev = $prevRevID ? Revision::newFromID( $prevRevID ) : null;
+ # Check for null edits
+ if( $prevRev && $prevRev->getTextId() == $rev->getTextId() ) {
+ $frev = self::getFlaggedRev( $title, $prevRev->getId() );
+ # Check for new pages
+ } else if( !$prevRev ) {
+ $reviewableNewPage = $wgFlaggedRevsAutoReviewNew;
}
- $user = User::newFromId( $rev->getUser() );
- FlaggedRevs::autoReviewEdit( $article, $user, $rev->getText(), $rev, $flags );
}
+ # Is this an edit directly to the stable version?
+ if( $reviewableNewPage || !is_null($frev) ) {
+ # Assume basic flagging level
+ $flags = array();
+ foreach( self::$dimensions as $tag => $minQL ) {
+ $flags[$tag] = 1;
+ }
+ self::autoReviewEdit( $article, $user, $rev->getText(), $rev, $flags );
+ }
}
+ if( $wgFlaggedArticle ) {
+ $wgFlaggedArticle->skipReviewDiff = true; // Don't jump to diff...
+ }
return true;
}

/**
+ * When a rollback is made by a reviwer, try to automatically review it.
+ */
+ public static function maybeMakeRollbackReviewed( $article, $user, $rev ) {
+ global $wgFlaggedRevsAutoReview, $wgFlaggedArticle;
+ if( !$wgFlaggedRevsAutoReview || !$user->isAllowed('autoreview') )
+ return true;
+ # Must be in reviewable namespace
+ if( !self::isPageReviewable( $article->getTitle() ) )
+ return true;
+ # Was this revision flagged?
+ $frev = self::getFlaggedRev( $article->getTitle(), $rev->getId() );
+ if( !is_null($frev) ) {
+ # Assume basic flagging level
+ $flags = array();
+ foreach( self::$dimensions as $tag => $minQL ) {
+ $flags[$tag] = 1;
+ }
+ $newRev = Revision::newFromId( $article->getTitle()->getLatestRevID(GAID_FOR_UPDATE) );
+ if( $newRev ) {
+ self::autoReviewEdit( $article, $user, $rev->getText(), $newRev, $flags );
+ self::articleLinksUpdate( $article ); // lame...
+ }
+ }
+ if( $wgFlaggedArticle ) {
+ $wgFlaggedArticle->skipReviewDiff = true; // Don't jump to diff...
+ }
+ return true;
+ }
+
+ /**
* When an edit is made to a page that can't be reviewed, autopatrol if allowed.
* This is not loggged for perfomance reasons and no one cares if talk pages and such
* are autopatrolled.
@@ -2114,46 +2145,8 @@
* Add user preference to form HTML
*/
public static function injectPreferences( $form, $out ) {
- global $wgUser;
-
- $out->addHTML(
- Xml::openElement( 'fieldset' ) .
- Xml::element( 'legend', null, wfMsgHtml('flaggedrevs-prefs') ) .
- Xml::openElement( 'table' ) .
- Xml::openElement( 'tr' ) .
- '<td>' . wfCheck( 'wpFlaggedRevsStable', $form->mFlaggedRevsStable,
- array('id' => 'wpFlaggedRevsStable') ) . '</td><td> ' .
- wfLabel( wfMsg( 'flaggedrevs-prefs-stable' ), 'wpFlaggedRevsStable' ) . '</td>' .
- Xml::closeElement( 'tr' ) .
- Xml::openElement( 'tr' ) .
- '<td>' .
- Xml::radio( 'wpFlaggedRevsSUI', 0, $form->mFlaggedRevsSUI==0, array('id' => 'standardUI') ) .
- '</td><td> ' .
- Xml::label( wfMsgHtml('flaggedrevs-pref-UI-0'), 'standardUI' ) .
- '</td>' .
- Xml::closeElement( 'tr' ) .
- Xml::openElement( 'tr' ) .
- '<td>' .
- Xml::radio( 'wpFlaggedRevsSUI', 1, $form->mFlaggedRevsSUI==1, array('id' => 'simpleUI') ) .
- '</td><td> ' .
- Xml::label( wfMsgHtml('flaggedrevs-pref-UI-1'), 'simpleUI' ) .
- '</td>'
- );
- if( $wgUser->isAllowed( 'review' ) ) {
- $out->addHTML(
- Xml::closeElement( 'tr' ) .
- Xml::openElement( 'tr' ) . '<td><br/></td>' . Xml::closeElement( 'tr' ) .
- Xml::openElement( 'tr' ) .
- '<td>' . wfCheck( 'wpFlaggedRevsWatch', $form->mFlaggedRevsWatch, array('id' => 'wpFlaggedRevsWatch') ) .
- '</td><td> ' . wfLabel( wfMsg( 'flaggedrevs-prefs-watch' ), 'wpFlaggedRevsWatch' ) . '</td>'
- );
- }
- $out->addHTML(
- Xml::closeElement( 'tr' ) .
- Xml::closeElement( 'table' ) .
- Xml::closeElement( 'fieldset' )
- );
-
+ $prefsHtml = FlaggedRevsXML::stabilityPreferences( $form );
+ $out->addHTML( $prefsHtml );
return true;
}

@@ -2213,4 +2206,21 @@
}
}

+function efFlaggedRevsSchemaUpdates() {
+ global $wgDBtype, $wgExtNewFields, $wgExtPGNewFields, $wgExtNewIndexes, $wgExtNewTables;

+ $base = dirname(__FILE__);
+ if( $wgDBtype == 'mysql' ) {
+ $wgExtNewFields[] = array( 'flaggedpage_config', 'fpc_expiry', "$base/archives/patch-fpc_expiry.sql" );
+ $wgExtNewIndexes[] = array('flaggedpage_config', 'fpc_expiry', "$base/archives/patch-expiry-index.sql" );
+ $wgExtNewTables[] = array( 'flaggedrevs_promote', "$base/archives/patch-flaggedrevs_promote.sql" );
+ $wgExtNewTables[] = array( 'flaggedpages', "$base/archives/patch-flaggedpages.sql" );
+ } else if( $wgDBtype == 'postgres' ) {
+ $wgExtPGNewFields[] = array('flaggedpage_config', 'fpc_expiry', "TIMESTAMPTZ NULL" );
+ $wgExtNewIndexes[] = array('flaggedpage_config', 'fpc_expiry', "$base/postgres/patch-expiry-index.sql" );
+ $wgExtNewTables[] = array( 'flaggedrevs_promote', "$base/postgres/patch-flaggedrevs_promote.sql" );
+ $wgExtNewTables[] = array( 'flaggedpages', "$base/postgres/patch-flaggedpages.sql" );
+ }
+
+ return true;
+}

Modified: trunk/extensions/FlaggedRevs/FlaggedRevsPage.i18n.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevsPage.i18n.php 2008-05-11 21:07:33 UTC (rev 34631)
+++ trunk/extensions/FlaggedRevs/FlaggedRevsPage.i18n.php 2008-05-11 21:31:04 UTC (rev 34632)
@@ -41,7 +41,7 @@
'tooltip-ca-default' => 'Quality assurance settings',

'revreview-edited' => "'''Edits will be incorporated into the [[{{MediaWiki:Validationpage}}|stable version]] once an established user reviews them.
-The ''draft'' is shown below.''' [{{fullurl:{{FULLPAGENAMEE}}|oldid=$1&diff=cur}} $2 {{plural:$2|change|changes}}] await review.",
+The ''draft'' is shown below.''' [{{fullurl:{{FULLPAGENAMEE}}|oldid=$1&diff=cur}} $2 {{plural:$2|change awaits|changes await}}] review.",

'validationpage' => '{{ns:help}}:Article validation',

@@ -66,6 +66,10 @@
The [{{fullurl:{{FULLPAGENAMEE}}|stable=0}} draft] has [{{fullurl:{{FULLPAGENAMEE}}|oldid=$1&diff=cur}} $3 {{plural:$3|change|changes}}] awaiting review.',
'revreview-quality' => 'This is the latest [[{{MediaWiki:Validationpage}}|quality]] revision, [{{fullurl:Special:Log|type=review&page={{FULLPAGENAMEE}}}} approved] on <i>$2</i>.
The [{{fullurl:{{FULLPAGENAMEE}}|stable=0}} draft] has [{{fullurl:{{FULLPAGENAMEE}}|oldid=$1&diff=cur}} $3 {{plural:$3|change|changes}}] awaiting review.',
+ 'revreview-basic-i' => 'This is the latest [[{{MediaWiki:Validationpage}}|sighted]] revision, [{{fullurl:Special:Log|type=review&page={{FULLPAGENAMEE}}}} approved] on <i>$2</i>.
+The [{{fullurl:{{FULLPAGENAMEE}}|stable=0}} draft] has [{{fullurl:{{FULLPAGENAMEE}}|oldid=$1&diff=cur}} template/image changes] awaiting review.',
+ 'revreview-quality-i' => 'This is the latest [[{{MediaWiki:Validationpage}}|quality]] revision, [{{fullurl:Special:Log|type=review&page={{FULLPAGENAMEE}}}} approved] on <i>$2</i>.
+The [{{fullurl:{{FULLPAGENAMEE}}|stable=0}} draft] has [{{fullurl:{{FULLPAGENAMEE}}|oldid=$1&diff=cur}} template/image changes] awaiting review.',
'revreview-basic-same' => 'This is the latest [[{{MediaWiki:Validationpage}}|sighted]] revision ([{{fullurl:Special:Stableversions|page={{FULLPAGENAMEE}}}} list all]), [{{fullurl:Special:Log|type=review&page={{FULLPAGENAMEE}}}} approved] on <i>$2</i>.',
'revreview-quality-same' => 'This is the latest [[{{MediaWiki:Validationpage}}|quality]] revision ([{{fullurl:Special:Stableversions|page={{FULLPAGENAMEE}}}} list all]), [{{fullurl:Special:Log|type=review&page={{FULLPAGENAMEE}}}} approved] on <i>$2</i>.',
'revreview-basic-old' => 'This is a [[{{MediaWiki:Validationpage}}|sighted]] revision ([{{fullurl:Special:Stableversions|page={{FULLPAGENAMEE}}}} list all]), [{{fullurl:Special:Log|type=review&page={{FULLPAGENAMEE}}}} approved] on <i>$2</i>.

Modified: trunk/extensions/FlaggedRevs/FlaggedRevsPage.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevsPage.php 2008-05-11 21:07:33 UTC (rev 34631)
+++ trunk/extensions/FlaggedRevs/FlaggedRevsPage.php 2008-05-11 21:31:04 UTC (rev 34632)
@@ -594,7 +594,9 @@
$u = new LinksUpdate( $this->page, $poutput );
$u->doUpdate(); // Will trigger our hook to add stable links too...
# Might as well save the cache, since it should be the same
- $parserCache->save( $poutput, $article, $wgUser );
+ global $wgEnableParserCache;
+ if( $wgEnableParserCache )
+ $parserCache->save( $poutput, $article, $wgUser );
# Purge squid for this page only
$article->getTitle()->purgeSquid();

@@ -646,7 +648,9 @@
# Clear the cache...
$this->page->invalidateCache();
# Might as well save the cache
- $parserCache->save( $poutput, $article, $wgUser );
+ global $wgEnableParserCache;
+ if( $wgEnableParserCache )
+ $parserCache->save( $poutput, $article, $wgUser );
# Purge squid for this page only
$this->page->purgeSquid();

@@ -897,15 +901,17 @@
'&nbsp;&nbsp;' . Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "</p>\n" .
"</fieldset></form>"
);
-
- $pager = new UnreviewedPagesPager( $this, $namespace, $category );
- if( $pager->getNumRows() ) {
- $wgOut->addHTML( wfMsgExt('unreviewed-list', array('parse') ) );
- $wgOut->addHTML( $pager->getNavigationBar() );
- $wgOut->addHTML( "<ul>" . $pager->getBody() . "</ul>" );
- $wgOut->addHTML( $pager->getNavigationBar() );
- } else {
- $wgOut->addHTML( wfMsgExt('unreviewed-none', array('parse') ) );
+ # This will start to get slower...
+ if( $category || self::generalQueryOK() ) {
+ $pager = new UnreviewedPagesPager( $this, $namespace, $category );
+ if( $pager->getNumRows() ) {
+ $wgOut->addHTML( wfMsgExt('unreviewed-list', array('parse') ) );
+ $wgOut->addHTML( $pager->getNavigationBar() );
+ $wgOut->addHTML( "<ul>" . $pager->getBody() . "</ul>" );
+ $wgOut->addHTML( $pager->getNavigationBar() );
+ } else {
+ $wgOut->addHTML( wfMsgExt('unreviewed-none', array('parse') ) );
+ }
}
}

@@ -945,6 +951,22 @@
array( 'LIMIT' => 5 ) );
return $res->numRows();
}
+
+ /**
+ * There may be many pages, most of which are reviewed
+ */
+ public static function generalQueryOK() {
+ global $wgFlaggedRevsNamespaces;
+ if( !wfQueriesMustScale() )
+ return true;
+ # Get est. of fraction of pages that are reviewed
+ $dbr = wfGetDB( DB_SLAVE );
+ $reviewedpages = $dbr->estimateRowCount( 'flaggedpages', '*', array(), __METHOD__ );
+ $pages = $dbr->estimateRowCount( 'page', '*', array('page_namespace' => $wgFlaggedRevsNamespaces), __METHOD__ );
+ $ratio = $pages/($pages - $reviewedpages);
+ # If dist. is normalized, # of rows scanned = $ratio * LIMIT (or until list runs out)
+ return ($ratio <= 100);
+ }
}

/**
@@ -977,7 +999,6 @@

function getQueryInfo() {
$conds = $this->mConds;
- $tables = array( 'page', 'flaggedpages' );
$fields = array('page_namespace','page_title','page_len','fp_stable');
$conds[] = 'fp_reviewed IS NULL';
# Reviewable pages only
@@ -986,69 +1007,26 @@
$conds['page_is_redirect'] = 0;
# Filter by category
if( $this->category ) {
- $tables[] = 'categorylinks';
+ $tables = array( 'categorylinks', 'page', 'flaggedpages' );
$fields[] = 'cl_sortkey';
$conds['cl_to'] = $this->category;
$conds[] = 'cl_from = page_id';
$this->mIndexField = 'cl_sortkey';
+ $useIndex = array( 'categorylinks' => 'cl_sortkey' );
} else {
+ $tables = array( 'page', 'flaggedpages' );
$fields[] = 'page_id';
$this->mIndexField = 'page_title';
+ $useIndex = array( 'page' => 'name_title' );
}
return array(
'tables' => $tables,
'fields' => $fields,
'conds' => $conds,
- 'options' => array()
+ 'options' => array( 'USE INDEX' => $useIndex ),
+ 'join_conds' => array( 'flaggedpages' => array('LEFT JOIN','fp_page_id=page_id') )
);
}
-
- /**
- * Do a query with specified parameters, rather than using the object
- * context
- *
- * @param string $offset Index offset, inclusive
- * @param integer $limit Exact query limit
- * @param boolean $descending Query direction, false for ascending, true for descending
- * @return ResultWrapper
- */
- function reallyDoQuery( $offset, $limit, $descending ) {
- $fname = __METHOD__ . ' (' . get_class( $this ) . ')';
- $info = $this->getQueryInfo();
- $tables = $info['tables'];
- $fields = $info['fields'];
- $conds = isset( $info['conds'] ) ? $info['conds'] : array();
- $options = isset( $info['options'] ) ? $info['options'] : array();
- if ( $descending ) {
- $options['ORDER BY'] = $this->mIndexField;
- $operator = '>';
- } else {
- $options['ORDER BY'] = $this->mIndexField . ' DESC';
- $operator = '<';
- }
- if ( $offset != '' ) {
- $conds[] = $this->mIndexField . $operator . $this->mDb->addQuotes( $offset );
- }
- $options['LIMIT'] = intval( $limit );
- # Get table names
- list($flaggedpages,$page,$categorylinks) = $this->mDb->tableNamesN('flaggedpages','page','categorylinks');
- # Are we filtering via category?
- if( in_array('categorylinks',$tables) ) {
- $index = $this->mDb->useIndexClause('cl_sortkey'); // *sigh*...
- $fromClause = "$categorylinks $index, $page";
- } else {
- $index = $this->mDb->useIndexClause('name_title'); // *sigh*...
- $fromClause = "$page $index";
- }
- $sql = "SELECT ".implode(',',$fields).
- " FROM $fromClause".
- " LEFT JOIN $flaggedpages ON (fp_page_id=page_id)".
- " WHERE ".$this->mDb->makeList($conds,LIST_AND).
- " ORDER BY ".$options['ORDER BY']." LIMIT ".$options['LIMIT'];
- # Do query!
- $res = $this->mDb->query( $sql );
- return new ResultWrapper( $this->mDb, $res );
- }

function getIndexField() {
return $this->mIndexField;

Modified: trunk/extensions/FlaggedRevs/FlaggedRevsXML.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevsXML.php 2008-05-11 21:07:33 UTC (rev 34631)
+++ trunk/extensions/FlaggedRevs/FlaggedRevsXML.php 2008-05-11 21:31:04 UTC (rev 34632)
@@ -28,7 +28,7 @@

$name = $index !== 0 ? $name : wfMsg('blanknamespace');

- if($index === $selected) {
+ if( $index === $selected ) {
$s .= "\t" . Xml::element("option", array("value" => $index, "selected" => "selected"), $name) . "\n";
} else {
$s .= "\t" . Xml::element("option", array("value" => $index), $name) . "\n";
@@ -117,8 +117,12 @@
$msg = $quality ? 'revreview-quality-old' : 'revreview-basic-old';
$html = wfMsgExt($msg, array('parseinline'), $frev->getRevId(), $time );
} else {
- $msg = $stable ? 'revreview-' : 'revreview-newest-';
- $msg .= $quality ? 'quality' : 'basic';
+ if( $stable ) {
+ $msg = $quality ? 'revreview-quality' : 'revreview-basic';
+ $msg .= ($revs_since == 0) ? '-i' : '';
+ } else {
+ $msg = $quality ? 'revreview-newest-quality' : 'revreview-newest-basic';
+ }
$html = wfMsgExt($msg, array('parseinline'), $frev->getRevId(), $time, $revs_since );
}
# Make fancy box...
@@ -137,4 +141,45 @@

return $box;
}
+
+ /**
+ * Add user preference to form HTML
+ */
+ public static function stabilityPreferences( $form ) {
+ global $wgUser;
+
+ $html = Xml::openElement( 'fieldset' ) .
+ Xml::element( 'legend', null, wfMsgHtml('flaggedrevs-prefs') ) .
+ Xml::openElement( 'table' ) .
+ Xml::openElement( 'tr' ) .
+ '<td>' . wfCheck( 'wpFlaggedRevsStable', $form->mFlaggedRevsStable,
+ array('id' => 'wpFlaggedRevsStable') ) . '</td><td> ' .
+ wfLabel( wfMsg( 'flaggedrevs-prefs-stable' ), 'wpFlaggedRevsStable' ) . '</td>' .
+ Xml::closeElement( 'tr' ) .
+ Xml::openElement( 'tr' ) .
+ '<td>' .
+ Xml::radio( 'wpFlaggedRevsSUI', 0, $form->mFlaggedRevsSUI==0, array('id' => 'standardUI') ) .
+ '</td><td> ' .
+ Xml::label( wfMsgHtml('flaggedrevs-pref-UI-0'), 'standardUI' ) .
+ '</td>' .
+ Xml::closeElement( 'tr' ) .
+ Xml::openElement( 'tr' ) .
+ '<td>' .
+ Xml::radio( 'wpFlaggedRevsSUI', 1, $form->mFlaggedRevsSUI==1, array('id' => 'simpleUI') ) .
+ '</td><td> ' .
+ Xml::label( wfMsgHtml('flaggedrevs-pref-UI-1'), 'simpleUI' ) .
+ '</td>';
+ if( $wgUser->isAllowed( 'review' ) ) {
+ $html .= Xml::closeElement( 'tr' ) .
+ Xml::openElement( 'tr' ) . '<td><br/></td>' . Xml::closeElement( 'tr' ) .
+ Xml::openElement( 'tr' ) .
+ '<td>' . wfCheck( 'wpFlaggedRevsWatch', $form->mFlaggedRevsWatch, array('id' => 'wpFlaggedRevsWatch') ) .
+ '</td><td> ' . wfLabel( wfMsg( 'flaggedrevs-prefs-watch' ), 'wpFlaggedRevsWatch' ) . '</td>';
+ }
+ $html .= Xml::closeElement( 'tr' ) .
+ Xml::closeElement( 'table' ) .
+ Xml::closeElement( 'fieldset' );
+
+ return $html;
+ }
}

Modified: trunk/extensions/FlaggedRevs/README.txt
===================================================================
--- trunk/extensions/FlaggedRevs/README.txt 2008-05-11 21:07:33 UTC (rev 34631)
+++ trunk/extensions/FlaggedRevs/README.txt 2008-05-11 21:31:04 UTC (rev 34632)
@@ -5,7 +5,7 @@
* Download the extension from SVN
* (MySQL) Run the 'FlaggedRevs.sql' query, substituting in your wiki's table prefix.
* (PostgreSQL) Use 'FlaggedRevs.pg.sql' instead.
-* Upgrade to MediaWiki 1.12+
+* Upgrade to MediaWiki 1.13+
* Run 'maintenance/update.php'
* Run 'maintenance/archives/populateSha1.php'.
* Add the following line to 'LocalSettings.php':



_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS[at]lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Wikipedia mediawiki-cvs RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact lists@gossamer-threads.com
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.