http://www.mediawiki.org/wiki/Special:Code/MediaWiki/96164

Revision: 96164
Author:   aaron
Date:     2011-09-02 23:19:03 +0000 (Fri, 02 Sep 2011)
Log Message:
-----------
Follow-up r96163: changed r84610 et al FlaggedRevs code to deal with parser 
output objects that lack mImageTimeKeys

Modified Paths:
--------------
    trunk/extensions/FlaggedRevs/FlaggedRevs.php
    trunk/extensions/FlaggedRevs/dataclasses/FRInclusionCache.php
    trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php
    trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.hooks.php
    trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php

Modified: trunk/extensions/FlaggedRevs/FlaggedRevs.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevs.php        2011-09-02 23:14:08 UTC 
(rev 96163)
+++ trunk/extensions/FlaggedRevs/FlaggedRevs.php        2011-09-02 23:19:03 UTC 
(rev 96164)
@@ -461,6 +461,8 @@
 # Parser hooks, selects the desired images/templates
 $wgHooks['BeforeParserFetchTemplateAndtitle'][] = 
'FlaggedRevsHooks::parserFetchStableTemplate';
 $wgHooks['BeforeParserFetchFileAndTitle'][] = 
'FlaggedRevsHooks::parserFetchStableFile';
+# B/C for before ParserOutput::mImageTimeKeys
+$wgHooks['OutputPageParserOutput'][] = 
'FlaggedRevsHooks::outputSetVersioningFlag';
 # ########
 
 # ######## DB write operations #########

Modified: trunk/extensions/FlaggedRevs/dataclasses/FRInclusionCache.php
===================================================================
--- trunk/extensions/FlaggedRevs/dataclasses/FRInclusionCache.php       
2011-09-02 23:14:08 UTC (rev 96163)
+++ trunk/extensions/FlaggedRevs/dataclasses/FRInclusionCache.php       
2011-09-02 23:19:03 UTC (rev 96164)
@@ -35,7 +35,8 @@
                                        $pOut = $parserCache->get( $article, 
$article->makeParserOptions( $author ) );
                                }
                        }
-                       if ( $pOut == false ) {
+                       // ParserOutput::mImageTimeKeys wasn't always there
+                       if ( $pOut == false || 
!FlaggedRevs::parserOutputIsVersioned( $pOut ) ) {
                                $title = $article->getTitle();
                                $pOpts = ParserOptions::newFromUser( $user ); 
// Note: tidy off
                                # Disable slow crap that doesn't matter for 
getting templates/files...

Modified: trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php
===================================================================
--- trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php      
2011-09-02 23:14:08 UTC (rev 96163)
+++ trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php      
2011-09-02 23:19:03 UTC (rev 96164)
@@ -589,6 +589,15 @@
                return $parserOut;
        }
 
+       /**
+        * Check that ParserOutput object has file/template versions
+        * Note that ParserOutput::mImageTimeKeys wasn't always there
+        * @return bool
+        */
+       public static function parserOutputIsVersioned( ParserOutput $pOut ) {
+               return ( $pOut->getTemplateIds() !== null && 
$pOut->getImageTimeKeys() !== null );
+       }
+
        # ################ Tracking/cache update update functions 
#################
 
        /**

Modified: trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.hooks.php
===================================================================
--- trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.hooks.php      
2011-09-02 23:14:08 UTC (rev 96163)
+++ trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.hooks.php      
2011-09-02 23:19:03 UTC (rev 96164)
@@ -282,6 +282,17 @@
        }
 
        /**
+       * Detect if a ParserOutput object was added without mImageTimeKeys set.
+       * This is needed for older, cached, ParserOutput objects.
+       */
+       public static function outputSetVersioningFlag( OutputPage $out, 
ParserOutput $parserOut ) {
+               if ( !FlaggedRevs::parserOutputIsVersioned( $parserOut ) ) {
+                       $out->fr_unversionedIncludes = true;
+               }
+               return true;
+       }
+
+       /**
        * Check page move and patrol permissions for FlaggedRevs
        */
        public static function onUserCan( Title $title, $user, $action, 
&$result ) {

Modified: trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php
===================================================================
--- trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php       
2011-09-02 23:14:08 UTC (rev 96163)
+++ trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php       
2011-09-02 23:19:03 UTC (rev 96164)
@@ -677,7 +677,11 @@
                $pOpts = $this->article->makeParserOptions( $wgUser );
                $parserCache = FRParserCacheStable::singleton();
                $parserOut = $parserCache->get( $this->article, $pOpts );
-               if ( $parserOut ) {
+
+               # Do not use the parser cache if it lacks mImageTimeKeys and 
there is a
+               # chance that a review form will be added to this page (which 
requires the versions).
+               $canReview = $this->article->getTitle()->userCan( 'review' );
+               if ( $parserOut && ( !$canReview || 
FlaggedRevs::parserOutputIsVersioned( $parserOut ) ) ) {
                        # Cache hit. Note that redirects are not cached.
                        $this->addParserOutput( $parserOut );
                } else {
@@ -1085,13 +1089,18 @@
                        # Set the file version we are viewing (for File: pages)
                        $form->setFileVersion( $this->out->getFileVersion() );
                        # $wgOut may not already have the inclusion IDs, such 
as for diffonly=1.
-                       # RevisionReviewForm will fetch them as needed however.
-                       if ( $this->out->getRevisionId() == $rev->getId() ) {
+                       # fr_unversionedIncludes indicates that ParserOutput 
added to $wgOut lacked inclusion IDs.
+                       # If they're lacking, then we use getRevIncludes() to 
get the draft inclusion versions.
+                       # Note: showStableVersion() already makes sure that 
$wgOut has the stable inclusion versions.
+                       if ( $this->out->getRevisionId() == $rev->getId() && 
empty( $this->out->fr_unversionedIncludes ) ) {
                                $tmpVers = $this->out->getTemplateIds();
                                $fileVers = $this->out->getImageTimeKeys();
                        } elseif ( $this->oldRevIncludes ) { // e.g. 
diffonly=1, stable diff
-                               list( $tmpVers, $fileVers ) = 
$this->oldRevIncludes;
+                               # We may have already fetched the inclusion IDs 
to get the template/file changes.
+                               list( $tmpVers, $fileVers ) = 
$this->oldRevIncludes; // reuse
                        } else { // e.g. diffonly=1, other diffs
+                               # $wgOut may not already have the inclusion 
IDs, such as for diffonly=1.
+                               # RevisionReviewForm will fetch them as needed 
however. 
                                list( $tmpVers, $fileVers ) =
                                        FRInclusionCache::getRevIncludes( 
$this->article, $rev, $wgUser );
                        }


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

Reply via email to