http://www.mediawiki.org/wiki/Special:Code/MediaWiki/89124
Revision: 89124
Author: aaron
Date: 2011-05-29 18:44:37 +0000 (Sun, 29 May 2011)
Log Message:
-----------
* Moved *RevIncludes functions to new FRInclusionCache class
* Doc tweaks
Modified Paths:
--------------
trunk/extensions/FlaggedRevs/api/actions/ApiReview.php
trunk/extensions/FlaggedRevs/dataclasses/FRInclusionManager.php
trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php
trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php
trunk/extensions/FlaggedRevs/presentation/RevisionReviewFormUI.php
Added Paths:
-----------
trunk/extensions/FlaggedRevs/dataclasses/FRInclusionCache.php
Modified: trunk/extensions/FlaggedRevs/api/actions/ApiReview.php
===================================================================
--- trunk/extensions/FlaggedRevs/api/actions/ApiReview.php 2011-05-29
18:32:30 UTC (rev 89123)
+++ trunk/extensions/FlaggedRevs/api/actions/ApiReview.php 2011-05-29
18:44:37 UTC (rev 89124)
@@ -69,7 +69,7 @@
$article = new FlaggedPage( $title );
// Now get the template and image parameters needed
list( $templateIds, $fileTimeKeys ) =
- RevisionReviewForm::getRevIncludes( $article,
$rev, $wgUser );
+ FRInclusionCache::getRevIncludes( $article,
$rev, $wgUser );
// Get version parameters for review submission (flat
strings)
list( $templateParams, $imageParams, $fileVersion ) =
RevisionReviewForm::getIncludeParams( $article,
$templateIds, $fileTimeKeys );
Added: trunk/extensions/FlaggedRevs/dataclasses/FRInclusionCache.php
===================================================================
--- trunk/extensions/FlaggedRevs/dataclasses/FRInclusionCache.php
(rev 0)
+++ trunk/extensions/FlaggedRevs/dataclasses/FRInclusionCache.php
2011-05-29 18:44:37 UTC (rev 89124)
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Class containing draft template/file version usage for
+ * Parser based on the source text of a revision ID & title.
+ */
+class FRInclusionCache {
+ /**
+ * Get template and image versions from parsing a revision
+ * @param Article $article
+ * @param Revision $rev
+ * @param User $user
+ * @param string $regen use 'regen' to force regeneration
+ * @return array( templateIds, fileSHA1Keys )
+ * templateIds like ParserOutput->mTemplateIds
+ * fileSHA1Keys like ParserOutput->mImageTimeKeys
+ */
+ public static function getRevIncludes(
+ Article $article, Revision $rev, User $user, $regen = ''
+ ) {
+ global $wgParser, $wgMemc;
+ wfProfileIn( __METHOD__ );
+ $versions = false;
+ $hash = md5( $article->getTitle()->getPrefixedDBkey() );
+ $key = wfMemcKey( 'flaggedrevs', 'revIncludes', $rev->getId(),
$hash );
+ if ( $regen !== 'regen' ) { // check cache
+ $versions = FlaggedRevs::getMemcValue( $wgMemc->get(
$key ), $article, 'allowStale' );
+ }
+ if ( !is_array( $versions ) ) { // cache miss
+ $pOut = false;
+ if ( $rev->isCurrent() ) {
+ $parserCache = ParserCache::singleton();
+ # Try current version parser cache (as anon)...
+ $pOut = $parserCache->get( $article,
$article->makeParserOptions( $user ) );
+ if ( $pOut == false && $rev->getUser() ) { //
try the user who saved the change
+ $author = User::newFromId(
$rev->getUser() );
+ $pOut = $parserCache->get( $article,
$article->makeParserOptions( $author ) );
+ }
+ }
+ if ( $pOut == false ) {
+ $title = $article->getTitle();
+ $pOpts = ParserOptions::newFromUser( $user );
// Note: tidy off
+ # Disable slow crap that doesn't matter for
getting templates/files...
+ $parser = clone $wgParser;
+ $parser->clearTagHook( 'ref' );
+ $parser->clearTagHook( 'references' );
+ $pOut = $parser->parse(
+ $rev->getText(), $title, $pOpts, true,
true, $rev->getId() );
+ }
+ # Get the template/file versions used...
+ $versions = array( $pOut->getTemplateIds(),
$pOut->getImageTimeKeys() );
+ # Save to cache...
+ $data = FlaggedRevs::makeMemcObj( $versions );
+ $wgMemc->set( $key, $data, 24*3600 ); // inclusions may
be dynamic
+ } else {
+ # Do a link batch query for page_latest...
+ $lb = new LinkBatch();
+ foreach ( $versions as $ns => $tmps ) {
+ foreach ( $tmps as $dbKey => $revIdDraft ) {
+ $lb->add( $ns, $dbKey );
+ }
+ }
+ $lb->execute();
+ # Update array with the current page_latest values.
+ # This kludge is there since $newTemplates (thus
$revIdDraft) is cached.
+ foreach ( $versions as $ns => $tmps ) {
+ foreach ( $tmps as $dbKey => &$revIdDraft ) {
+ $title = new Title( $ns, $dbKey );
+ $revIdDraft =
(int)$title->getLatestRevID();
+ }
+ }
+ }
+ wfProfileOut( __METHOD__ );
+ return $versions;
+ }
+
+ /**
+ * Set template and image versions from parsing a revision
+ * @param Title $title
+ * @param int $revId
+ * @param ParserOutput $rev
+ * @return void
+ */
+ public static function setRevIncludes( Title $title, $revId,
ParserOutput $pOut ) {
+ global $wgMemc;
+ $hash = md5( $title->getPrefixedDBkey() );
+ $key = wfMemcKey( 'flaggedrevs', 'revIncludes', $revId, $hash );
+ # Get the template/file versions used...
+ $versions = array( $pOut->getTemplateIds(),
$pOut->getImageTimeKeys() );
+ # Save to cache...
+ $data = FlaggedRevs::makeMemcObj( $versions );
+ $wgMemc->set( $key, $data, 24*3600 ); // inclusions may be
dynamic
+ }
+}
Property changes on:
trunk/extensions/FlaggedRevs/dataclasses/FRInclusionCache.php
___________________________________________________________________
Added: svn:eol-style
+ native
Modified: trunk/extensions/FlaggedRevs/dataclasses/FRInclusionManager.php
===================================================================
--- trunk/extensions/FlaggedRevs/dataclasses/FRInclusionManager.php
2011-05-29 18:32:30 UTC (rev 89123)
+++ trunk/extensions/FlaggedRevs/dataclasses/FRInclusionManager.php
2011-05-29 18:44:37 UTC (rev 89124)
@@ -2,9 +2,9 @@
/**
* Class containing template/file version usage requirements for
* Parser based on the source text (being parsed) revision ID.
- * If no requirements are set, the page is parsed as normal.
*
* Parser hooks check this to determine what template/file version to use.
+ * If no requirements are set, the page is parsed as normal.
*/
class FRInclusionManager {
protected $reviewedVersions = null; // files/templates at review time
Modified: trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php
===================================================================
--- trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php
2011-05-29 18:32:30 UTC (rev 89123)
+++ trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php
2011-05-29 18:44:37 UTC (rev 89124)
@@ -397,7 +397,7 @@
*/
public static function diffOnlyCGI() {
$val = trim( wfMsgForContent( 'flaggedrevs-diffonly' ) );
- if ( $val === '' || $val === '&diffonly=1' || $val ===
'&diffonly=0' ) {
+ if ( $val === '&diffonly=1' || $val === '&diffonly=0' ) {
return $val;
}
return '';
@@ -629,7 +629,7 @@
}
# Update template/file version cache...
if ( $sv->getRevId() != $editInfo->revid ) {
- RevisionReviewForm::setRevIncludes( $title,
$editInfo->revid, $editInfo->output );
+ FRInclusionCache::setRevIncludes( $title,
$editInfo->revid, $editInfo->output );
}
}
# Lazily rebuild dependancies on next parse (we invalidate
below)
Modified: trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php
===================================================================
--- trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php
2011-05-29 18:32:30 UTC (rev 89123)
+++ trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php
2011-05-29 18:44:37 UTC (rev 89124)
@@ -1370,7 +1370,7 @@
}
# Otherwise, check for includes pending on top of edits
pending...
} else {
- $incs = RevisionReviewForm::getRevIncludes(
$this->article, $newRev, $wgUser );
+ $incs = FRInclusionCache::getRevIncludes(
$this->article, $newRev, $wgUser );
# Add a list of links to each changed
template...
$changeList = self::fetchTemplateChanges(
$srev, $incs[0] );
# Add a list of links to each changed file...
Modified: trunk/extensions/FlaggedRevs/presentation/RevisionReviewFormUI.php
===================================================================
--- trunk/extensions/FlaggedRevs/presentation/RevisionReviewFormUI.php
2011-05-29 18:32:30 UTC (rev 89123)
+++ trunk/extensions/FlaggedRevs/presentation/RevisionReviewFormUI.php
2011-05-29 18:44:37 UTC (rev 89124)
@@ -386,7 +386,7 @@
# Do we need to get inclusion IDs from parser output?
if ( $this->templateIDs === null || $this->imageSHA1Keys ===
null ) {
list( $this->templateIDs, $this->imageSHA1Keys ) =
- RevisionReviewForm::getRevIncludes(
$this->article, $this->rev, $this->user );
+ FRInclusionCache::getRevIncludes(
$this->article, $this->rev, $this->user );
}
return array( $this->templateIDs, $this->imageSHA1Keys );
}
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs