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

Reply via email to