protected $mCategoryLinks = [];
/** @var array */
- protected $mCategories = [];
+ protected $mCategories = [
+ 'hidden' => [],
+ 'normal' => [],
+ ];
/** @var array */
protected $mIndicators = [];
*/
private $copyrightUrl;
- /** @var array Profiling data */
- private $limitReportData = [];
-
/**
* Constructor for OutputPage. This should not be called directly.
* Instead a new RequestContext should be created and it will implicitly create
/**
* Add new language links
*
- * @param array $newLinkArray Associative array mapping language code to the page
- * name
+ * @param string[] $newLinkArray Array of interwiki-prefixed (non DB key) titles
+ * (e.g. 'fr:Test page')
*/
public function addLanguageLinks( array $newLinkArray ) {
$this->mLanguageLinks += $newLinkArray;
/**
* Reset the language links and add new language links
*
- * @param array $newLinkArray Associative array mapping language code to the page
- * name
+ * @param string[] $newLinkArray Array of interwiki-prefixed (non DB key) titles
+ * (e.g. 'fr:Test page')
*/
public function setLanguageLinks( array $newLinkArray ) {
$this->mLanguageLinks = $newLinkArray;
/**
* Get the list of language links
*
- * @return array Array of Interwiki Prefixed (non DB key) Titles (e.g. 'fr:Test page')
+ * @return string[] Array of interwiki-prefixed (non DB key) titles (e.g. 'fr:Test page')
*/
public function getLanguageLinks() {
return $this->mLanguageLinks;
return;
}
- # Add the links to a LinkBatch
- $arr = [ NS_CATEGORY => $categories ];
- $lb = new LinkBatch;
- $lb->setArray( $arr );
-
- # Fetch existence plus the hiddencat property
- $dbr = wfGetDB( DB_REPLICA );
- $fields = array_merge(
- LinkCache::getSelectFields(),
- [ 'page_namespace', 'page_title', 'pp_value' ]
- );
-
- $res = $dbr->select( [ 'page', 'page_props' ],
- $fields,
- $lb->constructSet( 'page', $dbr ),
- __METHOD__,
- [],
- [ 'page_props' => [ 'LEFT JOIN', [
- 'pp_propname' => 'hiddencat',
- 'pp_page = page_id'
- ] ] ]
- );
-
- # Add the results to the link cache
- $lb->addResultToCache( LinkCache::singleton(), $res );
+ $res = $this->addCategoryLinksToLBAndGetResult( $categories );
# Set all the values to 'normal'.
$categories = array_fill_keys( array_keys( $categories ), 'normal' );
continue;
}
$text = $wgContLang->convertHtml( $title->getText() );
- $this->mCategories[] = $title->getText();
+ $this->mCategories[$type][] = $title->getText();
$this->mCategoryLinks[$type][] = Linker::link( $title, $text );
}
}
}
+ /**
+ * @param array $categories
+ * @return bool|ResultWrapper
+ */
+ protected function addCategoryLinksToLBAndGetResult( array $categories ) {
+ # Add the links to a LinkBatch
+ $arr = [ NS_CATEGORY => $categories ];
+ $lb = new LinkBatch;
+ $lb->setArray( $arr );
+
+ # Fetch existence plus the hiddencat property
+ $dbr = wfGetDB( DB_REPLICA );
+ $fields = array_merge(
+ LinkCache::getSelectFields(),
+ [ 'page_namespace', 'page_title', 'pp_value' ]
+ );
+
+ $res = $dbr->select( [ 'page', 'page_props' ],
+ $fields,
+ $lb->constructSet( 'page', $dbr ),
+ __METHOD__,
+ [],
+ [ 'page_props' => [ 'LEFT JOIN', [
+ 'pp_propname' => 'hiddencat',
+ 'pp_page = page_id'
+ ] ] ]
+ );
+
+ # Add the results to the link cache
+ $lb->addResultToCache( LinkCache::singleton(), $res );
+
+ return $res;
+ }
+
/**
* Reset the category links (but not the category list) and add $categories
*
}
/**
- * Get the list of category names this page belongs to
+ * Get the list of category names this page belongs to.
*
+ * @param string $type The type of categories which should be returned. Possible values:
+ * * all: all categories of all types
+ * * hidden: only the hidden categories
+ * * normal: all categories, except hidden categories
* @return array Array of strings
*/
- public function getCategories() {
- return $this->mCategories;
+ public function getCategories( $type = 'all' ) {
+ if ( $type === 'all' ) {
+ $allCategories = [];
+ foreach ( $this->mCategories as $categories ) {
+ $allCategories = array_merge( $allCategories, $categories );
+ }
+ return $allCategories;
+ }
+ if ( !isset( $this->mCategories[$type] ) ) {
+ throw new InvalidArgumentException( 'Invalid category type given: ' . $type );
+ }
+ return $this->mCategories[$type];
}
/**
$popts->setTidy( $oldTidy );
$this->addParserOutput( $parserOutput );
-
}
/**
}
}
- // Enable OOUI if requested via ParserOutput
+ // enable OOUI if requested via ParserOutput
if ( $parserOutput->getEnableOOUI() ) {
$this->enableOOUI();
}
- // Include profiling data
- if ( !$this->limitReportData ) {
- $this->setLimitReportData( $parserOutput->getLimitReportData() );
- }
-
// Link flags are ignored for now, but may in the future be
// used to mark individual language links.
$linkFlags = [];
# 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
- wfDebug( __METHOD__ . ": proxy caching with ESI; {$this->mLastModified} **", 'private' );
+ wfDebug( __METHOD__ .
+ ": proxy caching with ESI; {$this->mLastModified} **", 'private' );
# start with a shorter timeout for initial testing
# header( 'Surrogate-Control: max-age=2678400+2678400, content="ESI/1.0"');
- $response->header( 'Surrogate-Control: max-age=' . $config->get( 'SquidMaxage' )
- . '+' . $this->mCdnMaxage . ', content="ESI/1.0"' );
+ $response->header(
+ "Surrogate-Control: max-age={$config->get( 'SquidMaxage' )}" .
+ "+{$this->mCdnMaxage}, content=\"ESI/1.0\""
+ );
$response->header( 'Cache-Control: s-maxage=0, must-revalidate, max-age=0' );
} else {
# We'll purge the proxy cache for anons explicitly, but require end user agents
# to revalidate against the proxy on each visit.
# IMPORTANT! The CDN needs to replace the Cache-Control header with
# Cache-Control: s-maxage=0, must-revalidate, max-age=0
- wfDebug( __METHOD__ . ": local proxy caching; {$this->mLastModified} **", 'private' );
+ wfDebug( __METHOD__ .
+ ": local proxy caching; {$this->mLastModified} **", 'private' );
# start with a shorter timeout for initial testing
# header( "Cache-Control: s-maxage=2678400, must-revalidate, max-age=0" );
- $response->header( 'Cache-Control: s-maxage=' . $this->mCdnMaxage
- . ', must-revalidate, max-age=0' );
+ $response->header( "Cache-Control: " .
+ "s-maxage={$this->mCdnMaxage}, must-revalidate, max-age=0" );
}
} else {
# We do want clients to cache if they can, but they *must* check for updates
// The spec recommends defining XHTML5's charset using the XML declaration
// instead of meta.
// Our XML declaration is output by Html::htmlHeader.
- // http://www.whatwg.org/html/semantics.html#attr-meta-http-equiv-content-type
- // http://www.whatwg.org/html/semantics.html#charset
+ // https://html.spec.whatwg.org/multipage/semantics.html#attr-meta-http-equiv-content-type
+ // https://html.spec.whatwg.org/multipage/semantics.html#charset
$pieces[] = Html::element( 'meta', [ 'charset' => 'UTF-8' ] );
}
}
}
- if ( $this->limitReportData ) {
- $chunks[] = ResourceLoader::makeInlineScript(
- ResourceLoader::makeConfigSetScript(
- [ 'wgPageParseReport' => $this->limitReportData ],
- true
- )
- );
- }
-
return self::combineWrappedStrings( $chunks );
}
public static function transformCssMedia( $media ) {
global $wgRequest;
- // http://www.w3.org/TR/css3-mediaqueries/#syntax
+ // https://www.w3.org/TR/css3-mediaqueries/#syntax
$screenMediaQueryRegex = '/^(?:only\s+)?screen\b/i';
// Switch in on-screen display for media testing
'mediawiki.widgets.styles',
] );
}
-
- /**
- * @param array $data Data from ParserOutput::getLimitReportData()
- * @since 1.28
- */
- public function setLimitReportData( array $data ) {
- $this->limitReportData = $data;
- }
}