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