Merge "Simplify ResourceLoaderULSModule with content-based versioning"
This commit is contained in:
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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' );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user