Merge "Simplify ResourceLoaderULSModule with content-based versioning"

This commit is contained in:
jenkins-bot
2016-08-25 15:03:09 +00:00
committed by Gerrit Code Review
2 changed files with 9 additions and 93 deletions

View File

@@ -1,6 +1,6 @@
<?php <?php
/** /**
* Resource loader module for UniversalLanguageSelector * ResourceLoader module for UniversalLanguageSelector
* *
* Copyright (C) 2012 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris, * Copyright (C) 2012 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris,
* Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other * Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other
@@ -20,7 +20,7 @@
*/ */
/** /**
* Resource loader module for providing MediaWiki language names. * ResourceLoader module for UniversalLanguageSelector
*/ */
class ResourceLoaderULSModule extends ResourceLoaderModule { class ResourceLoaderULSModule extends ResourceLoaderModule {
protected $targets = [ 'desktop', 'mobile' ]; protected $targets = [ 'desktop', 'mobile' ];
@@ -31,13 +31,12 @@ class ResourceLoaderULSModule extends ResourceLoaderModule {
* @param string $languageCode Language code * @param string $languageCode Language code
* @return array * @return array
*/ */
protected function getData( $languageCode ) { private function getData( $languageCode ) {
$vars = []; $vars = [];
$vars['wgULSLanguages'] = Language::fetchLanguageNames( $vars['wgULSLanguages'] = Language::fetchLanguageNames(
$languageCode, $languageCode,
'mwfile' 'mwfile'
); );
return $vars; return $vars;
} }
@@ -47,49 +46,15 @@ class ResourceLoaderULSModule extends ResourceLoaderModule {
*/ */
public function getScript( ResourceLoaderContext $context ) { public function getScript( ResourceLoaderContext $context ) {
$languageCode = $context->getLanguage(); $languageCode = $context->getLanguage();
$out = ''; return Xml::encodeJsCall( 'mw.config.set', [
foreach ( $this->getData( $languageCode ) as $key => $value ) { $this->getData( $languageCode )
$out .= Xml::encodeJsCall( 'mw.config.set', [ $key, $value ] ); ] );
}
return $out;
} }
/** /**
* Gets the last modified time for this module depending on the given * @return bool
* context.
*
* @param $context ResourceLoaderContext
* @return int Unix timestamp
*/ */
public function getModifiedTime( ResourceLoaderContext $context ) { public function enableModuleContentVersion() {
$languageCode = $context->getLanguage(); return true;
$cache = wfGetCache( CACHE_ANYTHING );
// Since we are updating the timestamp on hash change, we need to
// cache the hash per language to avoid updating the timestamp when
// different languages are being requested.
$key = wfMemcKey(
'uls',
'modulemodifiedhash',
$this->getName(),
$languageCode
);
$data = $this->getData( $languageCode );
$hash = md5( serialize( $data ) );
$result = $cache->get( $key );
if ( is_array( $result ) && $result['hash'] === $hash ) {
return $result['timestamp'];
}
$timestamp = wfTimestamp();
$cache->set( $key, [
'hash' => $hash,
'timestamp' => $timestamp,
] );
return $timestamp;
} }
} }

View File

@@ -1,49 +0,0 @@
<?php
/**
* PHP Unit tests for ResourceLoaderULSModule class.
*
* @file
* @ingroup Extensions
*
* @author Santhosh Thottingal
*/
/**
* @covers ResourceLoaderULSModule
*/
class ResourceLoaderULSModuleMemcachedTest extends MediaWikiTestCase {
/**
* Test whether the modified time of the RL module varies
* correctly with language code.
* @covers ResourceLoaderSchemaModule::getModifiedTime
*/
public function testModifiedTime() {
$request = new WebRequest();
$module = new ResourceLoaderULSModule();
$request->setVal( 'lang', 'he' );
$context = new ResourceLoaderContext(
new ResourceLoader(), $request );
$mtimeHebrew = $module->getModifiedTime( $context );
// sleep for 1 second
sleep( 1 );
$request->setVal( 'lang', 'hi' );
$context = new ResourceLoaderContext( new ResourceLoader(), $request );
$mtimeHindi = $module->getModifiedTime( $context );
$this->assertGreaterThan( $mtimeHebrew, $mtimeHindi, 'Hindi has recent timestamp than Hebrew' );
// sleep for 1 second
sleep( 1 );
$request->setVal( 'lang', 'he' );
$context = new ResourceLoaderContext( new ResourceLoader(), $request );
$mtimeHebrewNew = $module->getModifiedTime( $context );
$this->assertEquals( $mtimeHebrewNew, $mtimeHebrew, 'Hebrew timestamp remained same' );
// sleep for 1 second
sleep( 1 );
$request->setVal( 'lang', 'hi' );
$context = new ResourceLoaderContext( new ResourceLoader(), $request );
$mtimeHindiNew = $module->getModifiedTime( $context );
$this->assertEquals( $mtimeHindi, $mtimeHindiNew, 'Hindi timestamp remained same' );
}
}