* getPages.
*/
public function __construct( array $options = null ) {
- if ( is_null( $options ) ) {
+ if ( $options === null ) {
return;
}
}
/**
- * Get the Database object used in getTitleInfo().
+ * Get the Database handle used for computing the module version.
*
- * Defaults to the local replica DB. Subclasses may want to override this to return a foreign
- * database object, or null if getTitleInfo() shouldn't access the database.
+ * Subclasses may override this to return a foreign database, which would
+ * allow them to register a module on wiki A that fetches wiki pages from
+ * wiki B.
*
- * NOTE: This ONLY works for getTitleInfo() and isKnownEmpty(), NOT FOR ANYTHING ELSE.
- * In particular, it doesn't work for getContent() or getScript() etc.
+ * The way this works is that the local module is a placeholder that can
+ * only computer a module version hash. The 'source' of the module must
+ * be set to the foreign wiki directly. Methods getScript() and getContent()
+ * will not use this handle and are not valid on the local wiki.
*
- * @return IDatabase|null
+ * @return IDatabase
*/
protected function getDB() {
return wfGetDB( DB_REPLICA );
*/
protected function getTitleInfo( ResourceLoaderContext $context ) {
$dbr = $this->getDB();
- if ( !$dbr ) {
- // We're dealing with a subclass that doesn't have a DB
- return [];
- }
$pageNames = array_keys( $this->getPages( $context ) );
sort( $pageNames );
$module = $rl->getModule( $name );
if ( $module instanceof self ) {
$mDB = $module->getDB();
- // Subclasses may disable getDB and implement getTitleInfo differently
- if ( $mDB && $mDB->getDomainID() === $db->getDomainID() ) {
+ // Subclasses may implement getDB differently
+ if ( $mDB->getDomainID() === $db->getDomainID() ) {
$wikiModules[] = $module;
$allPages += $module->getPages( $context );
}
$cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
$allInfo = $cache->getWithSetCallback(
- $cache->makeGlobalKey( 'resourceloader', 'titleinfo', $db->getDomainID(), $hash ),
+ $cache->makeGlobalKey( 'resourceloader-titleinfo', $db->getDomainID(), $hash ),
$cache::TTL_HOUR,
function ( $curVal, &$ttl, array &$setOpts ) use ( $func, $pageNames, $db, $fname ) {
$setOpts += Database::getCacheSetOptions( $db );
},
[
'checkKeys' => [
- $cache->makeGlobalKey( 'resourceloader', 'titleinfo', $db->getDomainID() ) ]
+ $cache->makeGlobalKey( 'resourceloader-titleinfo', $db->getDomainID() ) ]
]
);
if ( $purge ) {
$cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
- $key = $cache->makeGlobalKey( 'resourceloader', 'titleinfo', $domain );
+ $key = $cache->makeGlobalKey( 'resourceloader-titleinfo', $domain );
$cache->touchCheckKey( $key );
}
}