
aaron at svn
May 10, 2008, 5:29 PM
Post #1 of 1
(34 views)
Permalink
|
|
SVN: [34606] trunk/extensions/FlaggedRevs
|
|
Revision: 34606 Author: aaron Date: 2008-05-11 00:29:07 +0000 (Sun, 11 May 2008) Log Message: ----------- * Refactor autoreview code * Improve "0 changes" message * Check $wgEnableParserCache * Tweak variable names Modified Paths: -------------- trunk/extensions/FlaggedRevs/FlaggedArticle.php trunk/extensions/FlaggedRevs/FlaggedRevs.php trunk/extensions/FlaggedRevs/FlaggedRevsPage.i18n.php trunk/extensions/FlaggedRevs/FlaggedRevsPage.php trunk/extensions/FlaggedRevs/FlaggedRevsXML.php Modified: trunk/extensions/FlaggedRevs/FlaggedArticle.php =================================================================== --- trunk/extensions/FlaggedRevs/FlaggedArticle.php 2008-05-10 23:59:04 UTC (rev 34605) +++ trunk/extensions/FlaggedRevs/FlaggedArticle.php 2008-05-11 00:29:07 UTC (rev 34606) @@ -3,7 +3,6 @@ class FlaggedArticle extends Article { public $isDiffFromStable = false; public $skipReviewDiff = false; - public $skipAutoReview = false; public $stableRev = null; public $pageconfig = null; public $flags = null; @@ -83,12 +82,7 @@ */ private function displayTag() { global $wgOut; - - if( !$this->reviewNotice ) { - return false; - } $wgOut->appendSubtitle( $this->reviewNotice ); - return true; } @@ -300,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>" . @@ -894,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( $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. @@ -1352,5 +1245,3 @@ return true; } } - - Modified: trunk/extensions/FlaggedRevs/FlaggedRevs.php =================================================================== --- trunk/extensions/FlaggedRevs/FlaggedRevs.php 2008-05-10 23:59:04 UTC (rev 34605) +++ trunk/extensions/FlaggedRevs/FlaggedRevs.php 2008-05-11 00:29:07 UTC (rev 34606) @@ -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', ); @@ -261,8 +261,10 @@ # Additional parser versioning $wgHooks['ParserAfterTidy'][] = 'FlaggedRevs::parserInjectTimestamps'; $wgHooks['OutputPageParserOutput'][] = 'FlaggedRevs::outputInjectTimestamps'; + # 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'; @@ -309,9 +311,6 @@ $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' ); # Add CSS/JS $wgHooks['OutputPageParserOutput'][] = 'FlaggedRevs::InjectStyleAndJS'; $wgHooks['EditPage::showEditForm:initial'][] = 'FlaggedRevs::InjectStyleAndJS'; @@ -483,12 +482,12 @@ /** * @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->getTitle()->getLatestRevID(GAID_FOR_UPDATE) ) { return false; @@ -506,14 +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 ) { + $stableOutput = self::getPageCache( $article ); + if( $stableOutput==false ) { $text = $frev->getTextForParse(); - $flaggedOutput = FlaggedRevs::parseStableText( $article, $text, $frev->getRevId() ); + $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) ) { @@ -527,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; @@ -1090,19 +1091,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 ); } } @@ -1149,7 +1149,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 @@ -1205,7 +1205,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 @@ -1339,7 +1339,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... @@ -1752,42 +1754,90 @@ } /** - * 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(), 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; + } + # 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() ); + 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. Modified: trunk/extensions/FlaggedRevs/FlaggedRevsPage.i18n.php =================================================================== --- trunk/extensions/FlaggedRevs/FlaggedRevsPage.i18n.php 2008-05-10 23:59:04 UTC (rev 34605) +++ trunk/extensions/FlaggedRevs/FlaggedRevsPage.i18n.php 2008-05-11 00:29:07 UTC (rev 34606) @@ -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-10 23:59:04 UTC (rev 34605) +++ trunk/extensions/FlaggedRevs/FlaggedRevsPage.php 2008-05-11 00:29:07 UTC (rev 34606) @@ -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(); Modified: trunk/extensions/FlaggedRevs/FlaggedRevsXML.php =================================================================== --- trunk/extensions/FlaggedRevs/FlaggedRevsXML.php 2008-05-10 23:59:04 UTC (rev 34605) +++ trunk/extensions/FlaggedRevs/FlaggedRevsXML.php 2008-05-11 00:29:07 UTC (rev 34606) @@ -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... _______________________________________________ MediaWiki-CVS mailing list MediaWiki-CVS[at]lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs
|