public $mLinkID;
public $mIncludeSizes, $mPPNodeCount, $mGeneratedPPNodeCount, $mHighestExpansionDepth;
public $mDefaultSort;
- public $mTplRedirCache, $mTplDomCache, $mHeadings, $mDoubleUnderscores;
+ public $mTplRedirCache, $mHeadings, $mDoubleUnderscores;
public $mExpensiveFunctionCount; # number of expensive parser function calls
public $mShowToc, $mForceTocPosition;
+ /** @var array */
+ public $mTplDomCache;
/**
* @var User
# The vary-revision flag must be set, because the magic word
# will have a different value once the page is saved.
$this->mOutput->setFlag( 'vary-revision' );
- wfDebug( __METHOD__ . ": {{PAGEID}} used in a new page, setting vary-revision...\n" );
+ wfDebug( __METHOD__ . ": {{PAGEID}} used in a new page, setting vary-revision" );
}
$value = $pageid ?: null;
break;
$value = '-';
} else {
$this->mOutput->setFlag( 'vary-revision-exists' );
+ wfDebug( __METHOD__ . ": {{REVISIONID}} used, setting vary-revision-exists" );
$value = '';
}
} else {
# Inform the edit saving system that getting the canonical output after
# revision insertion requires another parse using the actual revision ID
$this->mOutput->setFlag( 'vary-revision-id' );
- wfDebug( __METHOD__ . ": {{REVISIONID}} used, setting vary-revision-id...\n" );
+ wfDebug( __METHOD__ . ": {{REVISIONID}} used, setting vary-revision-id" );
$value = $this->getRevisionId();
if ( $value === 0 ) {
$rev = $this->getRevisionObject();
$value = $this->getRevisionTimestampSubstring( 0, 4, self::MAX_TTS, $index );
break;
case 'revisiontimestamp':
- # Let the edit saving system know we should parse the page
- # *after* a revision ID has been assigned. This is for null edits.
- $this->mOutput->setFlag( 'vary-revision' );
- wfDebug( __METHOD__ . ": {{REVISIONTIMESTAMP}} used, setting vary-revision...\n" );
- $value = $this->getRevisionTimestamp();
+ $value = $this->getRevisionTimestampSubstring( 0, 14, self::MAX_TTS, $index );
break;
case 'revisionuser':
- # Let the edit saving system know we should parse the page
- # *after* a revision ID has been assigned for null edits.
+ # Inform the edit saving system that getting the canonical output after
+ # revision insertion requires a parse that used the actual user ID
$this->mOutput->setFlag( 'vary-user' );
- wfDebug( __METHOD__ . ": {{REVISIONUSER}} used, setting vary-user...\n" );
+ wfDebug( __METHOD__ . ": {{REVISIONUSER}} used, setting vary-user" );
$value = $this->getRevisionUser();
break;
case 'revisionsize':
/**
* @param int $start
* @param int $len
- * @param int $mtts Max time-till-save; sets vary-revision if result might change by then
+ * @param int $mtts Max time-till-save; sets vary-revision-timestamp if result changes by then
* @param string $variable Parser variable name
* @return string
*/
$resNow = substr( $this->getRevisionTimestamp(), $start, $len );
# Possibly set vary-revision if there is not yet an associated revision
if ( !$this->getRevisionObject() ) {
- # Get the timezone-adjusted timestamp $mtts seconds in the future
+ # Get the timezone-adjusted timestamp $mtts seconds in the future.
+ # This future is relative to the current time and not that of the
+ # parser options. The rendered timestamp can be compared to that
+ # of the timestamp specified by the parser options.
$resThen = substr(
$this->contLang->userAdjust( wfTimestamp( TS_MW, time() + $mtts ), '' ),
$start,
);
if ( $resNow !== $resThen ) {
- # Let the edit saving system know we should parse the page
- # *after* a revision ID has been assigned. This is for null edits.
- $this->mOutput->setFlag( 'vary-revision' );
- wfDebug( __METHOD__ . ": $variable used, setting vary-revision...\n" );
+ # Inform the edit saving system that getting the canonical output after
+ # revision insertion requires a parse that used an actual revision timestamp
+ $this->mOutput->setFlag( 'vary-revision-timestamp' );
+ wfDebug( __METHOD__ . ": $variable used, setting vary-revision-timestamp" );
}
}
* self::OT_HTML: all templates and extension tags
*
* @param string $text The text to transform
- * @param bool|PPFrame $frame Object describing the arguments passed to the
+ * @param false|PPFrame|array $frame Object describing the arguments passed to the
* template. Arguments may also be provided as an associative array, as
* was the usual case before MW1.12. Providing arguments this way may be
* useful for extensions wishing to perform variable replacement
* $piece['lineStart']: whether the brace was at the start of a line
* @param PPFrame $frame The current frame, contains template arguments
* @throws Exception
- * @return string The text of the template
+ * @return string|array The text of the template
*/
public function braceSubstitution( $piece, $frame ) {
// Flags
// If we transclude ourselves, the final result
// will change based on the new version of the page
$this->mOutput->setFlag( 'vary-revision' );
+ wfDebug( __METHOD__ . ": self transclusion, setting vary-revision" );
}
}
}
'deps' => $deps ];
}
- /**
- * Fetch a file and its title and register a reference to it.
- * If 'broken' is a key in $options then the file will appear as a broken thumbnail.
- * @param Title $title
- * @param array $options Array of options to RepoGroup::findFile
- * @return File|bool
- * @deprecated since 1.32, use fetchFileAndTitle instead
- */
- public function fetchFile( $title, $options = [] ) {
- wfDeprecated( __METHOD__, '1.32' );
- return $this->fetchFileAndTitle( $title, $options )[0];
- }
-
/**
* Fetch a file and its title and register a reference to it.
* If 'broken' is a key in $options then the file will appear as a broken thumbnail.
*
* The return value will be either:
* - a) Positive, indicating a specific revision ID (current or old)
- * - b) Zero, meaning the revision ID specified by getCurrentRevisionCallback()
+ * - b) Zero, meaning the revision ID is specified by getCurrentRevisionCallback()
* - c) Null, meaning the parse is for preview mode and there is no revision
*
* @return int|null
/**
* Get the timestamp associated with the current revision, adjusted for
* the default server-local timestamp
- * @return string
+ * @return string TS_MW timestamp
*/
public function getRevisionTimestamp() {
- if ( is_null( $this->mRevisionTimestamp ) ) {
- $revObject = $this->getRevisionObject();
- $timestamp = $revObject ? $revObject->getTimestamp() : wfTimestampNow();
-
- # The cryptic '' timezone parameter tells to use the site-default
- # timezone offset instead of the user settings.
- # Since this value will be saved into the parser cache, served
- # to other users, and potentially even used inside links and such,
- # it needs to be consistent for all visitors.
- $this->mRevisionTimestamp = $this->contLang->userAdjust( $timestamp, '' );
+ if ( $this->mRevisionTimestamp !== null ) {
+ return $this->mRevisionTimestamp;
}
+
+ # Use specified revision timestamp, falling back to the current timestamp
+ $revObject = $this->getRevisionObject();
+ $timestamp = $revObject ? $revObject->getTimestamp() : $this->mOptions->getTimestamp();
+ $this->mOutput->setRevisionTimestampUsed( $timestamp ); // unadjusted time zone
+
+ # The cryptic '' timezone parameter tells to use the site-default
+ # timezone offset instead of the user settings.
+ # Since this value will be saved into the parser cache, served
+ # to other users, and potentially even used inside links and such,
+ # it needs to be consistent for all visitors.
+ $this->mRevisionTimestamp = $this->contLang->userAdjust( $timestamp, '' );
+
return $this->mRevisionTimestamp;
}