*/
private $CSPNonce;
+ /**
+ * @var array A cache of the names of the cookies that will influence the cache
+ */
+ private static $cacheVaryCookies = null;
+
/**
* Constructor for OutputPage. This should not be called directly.
* Instead a new RequestContext should be created and it will implicitly create
* or else addWikiTextAsContent() if $interface is false.
*/
public function addWikiText( $text, $linestart = true, $interface = true ) {
+ wfDeprecated( __METHOD__, '1.32' );
$title = $this->getTitle();
if ( !$title ) {
throw new MWException( 'Title is null' );
$this->addWikiTextTitleInternal( $text, $title, $linestart, /*tidy*/true, /*interface*/true );
}
+ /**
+ * Convert wikitext *in the user interface language* to HTML and
+ * add it to the buffer with a `<div class="$wrapperClass">`
+ * wrapper. The result will not be language-converted, as user
+ * interface messages as already localized into a specific
+ * variant. The $text will be parsed in start-of-line context.
+ * Output will be tidy.
+ *
+ * @param string $wrapperClass The class attribute value for the <div>
+ * wrapper in the output HTML
+ * @param string $text Wikitext in the user interface language
+ * @since 1.32
+ */
+ public function wrapWikiTextAsInterface(
+ $wrapperClass, $text
+ ) {
+ $this->addWikiTextTitleInternal(
+ $text, $this->getTitle(),
+ /*linestart*/true, /*tidy*/true, /*interface*/true,
+ $wrapperClass
+ );
+ }
+
/**
* Convert wikitext *in the page content language* to HTML and add
* it to the buffer. The result with be language-converted to the
* since 1.32; all wikitext should be tidied.
* @param bool $interface Whether it is an interface message
* (for example disables conversion)
+ * @param string $wrapperClass if not empty, wraps the output in
+ * a `<div class="$wrapperClass">`
* @private
*/
private function addWikiTextTitleInternal(
- $text, Title $title, $linestart, $tidy, $interface
+ $text, Title $title, $linestart, $tidy, $interface, $wrapperClass = null
) {
global $wgParser;
+ if ( !$tidy ) {
+ wfDeprecated( 'disabling tidy', '1.32' );
+ }
+
$popts = $this->parserOptions();
$oldTidy = $popts->setTidy( $tidy );
$popts->setInterfaceMessage( (bool)$interface );
$this->addParserOutput( $parserOutput, [
'enableSectionEditLinks' => false,
- 'wrapperDivClass' => '',
+ 'wrapperDivClass' => $wrapperClass ?? '',
] );
}
/**
* Parse wikitext, strip paragraphs, and return the HTML.
*
+ * @todo This doesn't work as expected at all. If $interface is false, there's always a
+ * wrapping <div>, so stripOuterParagraph() does nothing.
+ *
* @param string $text
* @param bool $linestart Is this the start of a line?
* @param bool $interface Use interface language (instead of content language) while parsing
* @param string|int|float|bool|null $mtime Last-Modified timestamp
* @param int $minTTL Minimum TTL in seconds [default: 1 minute]
* @param int $maxTTL Maximum TTL in seconds [default: $wgSquidMaxage]
- * @return int TTL in seconds passed to lowerCdnMaxage() (may not be the same as the new
- * s-maxage)
* @since 1.28
*/
public function adaptCdnTTL( $mtime, $minTTL = 0, $maxTTL = 0 ) {
return $minTTL; // entity does not exist
}
- $age = time() - wfTimestamp( TS_UNIX, $mtime );
+ $age = MWTimestamp::time() - wfTimestamp( TS_UNIX, $mtime );
$adaptiveTTL = max( 0.9 * $age, $minTTL );
$adaptiveTTL = min( $adaptiveTTL, $maxTTL );
$this->lowerCdnMaxage( (int)$adaptiveTTL );
-
- return $adaptiveTTL;
}
/**
* @return array
*/
function getCacheVaryCookies() {
- static $cookies;
- if ( $cookies === null ) {
+ if ( self::$cacheVaryCookies === null ) {
$config = $this->getConfig();
- $cookies = array_merge(
+ self::$cacheVaryCookies = array_values( array_unique( array_merge(
SessionManager::singleton()->getVaryCookies(),
[
'forceHTTPS',
],
$config->get( 'CacheVaryCookies' )
- );
- Hooks::run( 'GetCacheVaryCookies', [ $this, &$cookies ] );
+ ) ) );
+ Hooks::run( 'GetCacheVaryCookies', [ $this, &self::$cacheVaryCookies ] );
}
- return $cookies;
+ return self::$cacheVaryCookies;
}
/**
* Get a complete Key header
*
* @return string
+ * @deprecated in 1.32; the IETF spec for this header expired w/o becoming
+ * a standard.
*/
public function getKeyHeader() {
+ wfDeprecated( '$wgUseKeyHeader', '1.32' );
+
$cvCookies = $this->getCacheVaryCookies();
$cookiesOption = [];
continue;
}
+ // XXX Note that this code is not strictly correct: we
+ // do a case-insensitive match in
+ // LanguageConverter::getHeaderVariant() while the
+ // (abandoned, draft) spec for the `Key` header only
+ // allows case-sensitive matches. To match the logic
+ // in LanguageConverter::getHeaderVariant() we should
+ // also be looking at fallback variants and deprecated
+ // mediawiki-internal codes, as well as BCP 47
+ // normalized forms.
+
$aloption[] = "substr=$variant";
// IE and some other browsers use BCP 47 standards in their Accept-Language header,
!$this->haveCacheVaryCookies()
) {
if ( $config->get( 'UseESI' ) ) {
+ wfDeprecated( '$wgUseESI = true', '1.33' );
# We'll purge the proxy cache explicitly, but require end user agents
# to revalidate against the proxy on each visit.
# Surrogate-Control controls our CDN, Cache-Control downstream caches
}
} else {
$this->prepareErrorPage( $this->msg( 'permissionserrors' ) );
- $this->addWikiText( $this->formatPermissionsErrorMessage( $errors, $action ) );
+ $this->addWikiTextAsInterface( $this->formatPermissionsErrorMessage( $errors, $action ) );
}
}
*
* Is equivalent to:
*
- * $wgOut->addWikiText( "<div class='error'>\n"
+ * $wgOut->addWikiTextAsInterface( "<div class='error'>\n"
* . wfMessage( 'some-error' )->plain() . "\n</div>" );
*
* The newline after the opening div is needed in some wikitext. See T21226.
}
$s = str_replace( '$' . ( $n + 1 ), $this->msg( $name, $args )->plain(), $s );
}
- $this->addWikiText( $s );
+ $this->addWikiTextAsInterface( $s );
}
/**
* Helper function to setup the PHP implementation of OOUI to use in this request.
*
* @since 1.26
- * @param String $skinName The Skin name to determine the correct OOUI theme
- * @param String $dir Language direction
+ * @param string $skinName The Skin name to determine the correct OOUI theme
+ * @param string $dir Language direction
*/
public static function setupOOUI( $skinName = 'default', $dir = 'ltr' ) {
$themes = ResourceLoaderOOUIModule::getSkinThemeMap();