sort( $pageNames );
$key = implode( '|', $pageNames );
if ( !isset( $this->titleInfo[$key] ) ) {
- $this->titleInfo[$key] = self::fetchTitleInfo( $dbr, $pageNames, __METHOD__ );
+ $this->titleInfo[$key] = static::fetchTitleInfo( $dbr, $pageNames, __METHOD__ );
}
return $this->titleInfo[$key];
}
- private static function fetchTitleInfo( IDatabase $db, array $pages, $fname = __METHOD__ ) {
+ protected static function fetchTitleInfo( IDatabase $db, array $pages, $fname = __METHOD__ ) {
$titleInfo = [];
$batch = new LinkBatch;
foreach ( $pages as $titleText ) {
- $batch->addObj( Title::newFromText( $titleText ) );
+ $title = Title::newFromText( $titleText );
+ if ( $title ) {
+ // Page name may be invalid if user-provided (e.g. gadgets)
+ $batch->addObj( $title );
+ }
}
if ( !$batch->isEmpty() ) {
$res = $db->select( 'page',
}
}
}
- $allInfo = self::fetchTitleInfo( $db, array_keys( $allPages ), __METHOD__ );
+ $allInfo = static::fetchTitleInfo( $db, array_keys( $allPages ), __METHOD__ );
foreach ( $wikiModules as $module ) {
$pages = $module->getPages( $context );
- $info = array_intersect_key( $allInfo, $pages );
+ // Before we intersect, map the names to canonical form (T145673).
+ $intersect = [];
+ foreach ( $pages as $page => $unused ) {
+ $title = Title::newFromText( $page );
+ if ( $title ) {
+ $intersect[ $title->getPrefixedText() ] = 1;
+ } else {
+ // Page name may be invalid if user-provided (e.g. gadgets)
+ $rl->getLogger()->info(
+ 'Invalid wiki page title "{title}" in ' . __METHOD__,
+ [ 'title' => $page ]
+ );
+ }
+ }
+ $info = array_intersect_key( $allInfo, $intersect );
+
$pageNames = array_keys( $pages );
sort( $pageNames );
$key = implode( '|', $pageNames );