* @param $modules Array: List of module names to preload information for
* @param $context ResourceLoaderContext: Context to load the information within
*/
- protected function preloadModuleInfo( array $modules, ResourceLoaderContext $context ) {
+ public function preloadModuleInfo( array $modules, ResourceLoaderContext $context ) {
if ( !count( $modules ) ) {
return; // or else Database*::select() will explode, plus it's cheaper!
}
// Get message blob mtimes. Only do this for modules with messages
$modulesWithMessages = array();
- $modulesWithoutMessages = array();
foreach ( $modules as $name ) {
if ( count( $this->getModule( $name )->getMessages() ) ) {
$modulesWithMessages[] = $name;
- } else {
- $modulesWithoutMessages[] = $name;
}
}
+ $modulesWithoutMessages = array_flip( $modules ); // Will be trimmed down by the loop below
if ( count( $modulesWithMessages ) ) {
$res = $dbr->select( 'msg_resource', array( 'mr_resource', 'mr_timestamp' ), array(
'mr_resource' => $modulesWithMessages,
);
foreach ( $res as $row ) {
$this->getModule( $row->mr_resource )->setMsgBlobMtime( $lang, $row->mr_timestamp );
+ unset( $modulesWithoutMessages[$row->mr_resource] );
}
- }
- foreach ( $modulesWithoutMessages as $name ) {
+ }
+ foreach ( array_keys( $modulesWithoutMessages ) as $name ) {
$this->getModule( $name )->setMsgBlobMtime( $lang, 0 );
}
}
if ( isset( $this->modifiedTime[$hash] ) ) {
return $this->modifiedTime[$hash];
}
- $this->modifiedTime[$hash] = filemtime( "$IP/resources/startup.js" );
- // ATTENTION!: Because of the line above, this is not going to cause
+ // Call preloadModuleInfo() on ALL modules as we're about
+ // to call getModifiedTime() on all of them
+ $loader = $context->getResourceLoader();
+ $loader->preloadModuleInfo( $loader->getModuleNames(), $context );
+
+ $this->modifiedTime[$hash] = filemtime( "$IP/resources/startup.js" );
+ // ATTENTION!: Because of the line above, this is not going to cause
// infinite recursion - think carefully before making changes to this
// code!
$time = wfTimestamp( TS_UNIX, $wgCacheEpoch );
- $loader = $context->getResourceLoader();
foreach ( $loader->getModuleNames() as $name ) {
$module = $loader->getModule( $name );
$time = max( $time, $module->getModifiedTime( $context ) );