'AjaxDispatcher' => 'includes/AjaxDispatcher.php',
'AjaxResponse' => 'includes/AjaxResponse.php',
'AlphabeticPager' => 'includes/Pager.php',
- 'ArrayUtils' => 'includes/ArrayUtils.php',
'Article' => 'includes/Article.php',
'AtomFeed' => 'includes/Feed.php',
'AuthPlugin' => 'includes/AuthPlugin.php',
'Categoryfinder' => 'includes/Categoryfinder.php',
'CategoryPage' => 'includes/CategoryPage.php',
'CategoryViewer' => 'includes/CategoryViewer.php',
- 'CdbFunctions' => 'includes/Cdb_PHP.php',
- 'CdbReader' => 'includes/Cdb.php',
- 'CdbReader_DBA' => 'includes/Cdb.php',
- 'CdbReader_PHP' => 'includes/Cdb_PHP.php',
- 'CdbWriter' => 'includes/Cdb.php',
- 'CdbWriter_DBA' => 'includes/Cdb.php',
- 'CdbWriter_PHP' => 'includes/Cdb_PHP.php',
'ChangesFeed' => 'includes/ChangesFeed.php',
'ChangeTags' => 'includes/ChangeTags.php',
'ChannelFeed' => 'includes/Feed.php',
'Collation' => 'includes/Collation.php',
'ConcatenatedGzipHistoryBlob' => 'includes/HistoryBlob.php',
- 'ConfEditor' => 'includes/ConfEditor.php',
- 'ConfEditorParseError' => 'includes/ConfEditor.php',
- 'ConfEditorToken' => 'includes/ConfEditor.php',
'Cookie' => 'includes/Cookie.php',
'CookieJar' => 'includes/Cookie.php',
'CurlHttpRequest' => 'includes/HttpFunctions.php',
- 'DeferrableUpdate' => 'includes/DeferredUpdates.php',
- 'DeferredUpdates' => 'includes/DeferredUpdates.php',
- 'MWCallableUpdate' => 'includes/CallableUpdate.php',
'DeprecatedGlobal' => 'includes/DeprecatedGlobal.php',
'DerivativeRequest' => 'includes/WebRequest.php',
'DiffHistoryBlob' => 'includes/HistoryBlob.php',
- 'DoubleReplacer' => 'includes/StringUtils.php',
'DummyLinker' => 'includes/Linker.php',
'Dump7ZipOutput' => 'includes/Export.php',
'DumpBZip2Output' => 'includes/Export.php',
'EditPage' => 'includes/EditPage.php',
'EmailNotification' => 'includes/UserMailer.php',
'ErrorPageError' => 'includes/Exception.php',
- 'ExplodeIterator' => 'includes/StringUtils.php',
'FakeTitle' => 'includes/FakeTitle.php',
'Fallback' => 'includes/Fallback.php',
'FatalError' => 'includes/Exception.php',
'FormOptions' => 'includes/FormOptions.php',
'FormSpecialPage' => 'includes/SpecialPage.php',
'GitInfo' => 'includes/GitInfo.php',
- 'HashRing' => 'includes/HashRing.php',
- 'HashtableReplacer' => 'includes/StringUtils.php',
'HistoryBlob' => 'includes/HistoryBlob.php',
'HistoryBlobCurStub' => 'includes/HistoryBlob.php',
'HistoryBlobStub' => 'includes/HistoryBlob.php',
'IncludableSpecialPage' => 'includes/SpecialPage.php',
'IndexPager' => 'includes/Pager.php',
'Interwiki' => 'includes/interwiki/Interwiki.php',
- 'IP' => 'includes/IP.php',
'LCStore' => 'includes/cache/LocalisationCache.php',
'LCStore_Accel' => 'includes/cache/LocalisationCache.php',
'LCStore_CDB' => 'includes/cache/LocalisationCache.php',
'Licenses' => 'includes/Licenses.php',
'Linker' => 'includes/Linker.php',
'LinkFilter' => 'includes/LinkFilter.php',
- 'LinksUpdate' => 'includes/LinksUpdate.php',
- 'LinksDeletionUpdate' => 'includes/LinksUpdate.php',
'LocalisationCache' => 'includes/cache/LocalisationCache.php',
'LocalisationCache_BulkLoad' => 'includes/cache/LocalisationCache.php',
'MagicWord' => 'includes/MagicWord.php',
'MagicWordArray' => 'includes/MagicWord.php',
'MailAddress' => 'includes/UserMailer.php',
- 'MappedIterator' => 'includes/MappedIterator.php',
'MediaWiki' => 'includes/Wiki.php',
'MediaWiki_I18N' => 'includes/SkinTemplate.php',
'Message' => 'includes/Message.php',
'MessageBlobStore' => 'includes/MessageBlobStore.php',
'MimeMagic' => 'includes/MimeMagic.php',
- 'MWCryptRand' => 'includes/MWCryptRand.php',
'MWException' => 'includes/Exception.php',
'MWExceptionHandler' => 'includes/Exception.php',
- 'MWFunction' => 'includes/MWFunction.php',
'MWHookException' => 'includes/Hooks.php',
'MWHttpRequest' => 'includes/HttpFunctions.php',
'MWInit' => 'includes/Init.php',
'ReadOnlyError' => 'includes/Exception.php',
'RedirectSpecialArticle' => 'includes/SpecialPage.php',
'RedirectSpecialPage' => 'includes/SpecialPage.php',
- 'RegexlikeReplacer' => 'includes/StringUtils.php',
- 'ReplacementArray' => 'includes/StringUtils.php',
- 'Replacer' => 'includes/StringUtils.php',
'ReverseChronologicalPager' => 'includes/Pager.php',
'RevisionItem' => 'includes/RevisionList.php',
'RevisionItemBase' => 'includes/RevisionList.php',
'RevisionList' => 'includes/RevisionList.php',
'RSSFeed' => 'includes/Feed.php',
'Sanitizer' => 'includes/Sanitizer.php',
- 'DataUpdate' => 'includes/DataUpdate.php',
- 'SqlDataUpdate' => 'includes/SqlDataUpdate.php',
- 'ScopedCallback' => 'includes/ScopedCallback.php',
- 'ScopedPHPTimeout' => 'includes/ScopedPHPTimeout.php',
'SiteConfiguration' => 'includes/SiteConfiguration.php',
'SiteStats' => 'includes/SiteStats.php',
'SiteStatsInit' => 'includes/SiteStats.php',
- 'SiteStatsUpdate' => 'includes/SiteStats.php',
'Skin' => 'includes/Skin.php',
'SkinTemplate' => 'includes/SkinTemplate.php',
'SpecialCreateAccount' => 'includes/SpecialPage.php',
'StatCounter' => 'includes/StatCounter.php',
'Status' => 'includes/Status.php',
'StreamFile' => 'includes/StreamFile.php',
- 'StringUtils' => 'includes/StringUtils.php',
'StubContLang' => 'includes/StubObject.php',
'StubObject' => 'includes/StubObject.php',
'StubUserLang' => 'includes/StubObject.php',
'TitleArray' => 'includes/TitleArray.php',
'TitleArrayFromResult' => 'includes/TitleArray.php',
'ThrottledError' => 'includes/Exception.php',
- 'UIDGenerator' => 'includes/UIDGenerator.php',
'UnlistedSpecialPage' => 'includes/SpecialPage.php',
'UploadSourceAdapter' => 'includes/Import.php',
'UppercaseCollation' => 'includes/Collation.php',
'UserCache' => 'includes/cache/UserCache.php',
'UserMailer' => 'includes/UserMailer.php',
'UserRightsProxy' => 'includes/UserRightsProxy.php',
- 'ViewCountUpdate' => 'includes/ViewCountUpdate.php',
'WantedQueryPage' => 'includes/QueryPage.php',
'WatchedItem' => 'includes/WatchedItem.php',
'WebRequest' => 'includes/WebRequest.php',
'XmlJsCode' => 'includes/Xml.php',
'XMLReader2' => 'includes/Import.php',
'XmlSelect' => 'includes/Xml.php',
- 'XmlTypeCheck' => 'includes/XmlTypeCheck.php',
'ZhClient' => 'includes/ZhClient.php',
- 'ZipDirectoryReader' => 'includes/ZipDirectoryReader.php',
- 'ZipDirectoryReaderError' => 'includes/ZipDirectoryReader.php',
-
- # content handler
- 'AbstractContent' => 'includes/content/AbstractContent.php',
- 'ContentHandler' => 'includes/content/ContentHandler.php',
- 'Content' => 'includes/content/Content.php',
- 'CssContentHandler' => 'includes/content/CssContentHandler.php',
- 'CssContent' => 'includes/content/CssContent.php',
- 'JavaScriptContentHandler' => 'includes/content/JavaScriptContentHandler.php',
- 'JavaScriptContent' => 'includes/content/JavaScriptContent.php',
- 'MessageContent' => 'includes/content/MessageContent.php',
- 'MWContentSerializationException' => 'includes/content/ContentHandler.php',
- 'TextContentHandler' => 'includes/content/TextContentHandler.php',
- 'TextContent' => 'includes/content/TextContent.php',
- 'WikitextContentHandler' => 'includes/content/WikitextContentHandler.php',
- 'WikitextContent' => 'includes/content/WikitextContent.php',
# includes/actions
'CachedAction' => 'includes/actions/CachedAction.php',
'FileDependency' => 'includes/cache/CacheDependency.php',
'GenderCache' => 'includes/cache/GenderCache.php',
'GlobalDependency' => 'includes/cache/CacheDependency.php',
- 'HTMLCacheUpdate' => 'includes/cache/HTMLCacheUpdate.php',
'HTMLFileCache' => 'includes/cache/HTMLFileCache.php',
'LinkBatch' => 'includes/cache/LinkBatch.php',
'LinkCache' => 'includes/cache/LinkCache.php',
'ObjectFileCache' => 'includes/cache/ObjectFileCache.php',
'ProcessCacheLRU' => 'includes/cache/ProcessCacheLRU.php',
'ResourceFileCache' => 'includes/cache/ResourceFileCache.php',
- 'SquidUpdate' => 'includes/cache/SquidUpdate.php',
'TitleDependency' => 'includes/cache/CacheDependency.php',
'TitleListDependency' => 'includes/cache/CacheDependency.php',
'RedisConnectionPool' => 'includes/clientpool/RedisConnectionPool.php',
'RedisConnRef' => 'includes/clientpool/RedisConnectionPool.php',
+ # includes/content
+ 'AbstractContent' => 'includes/content/AbstractContent.php',
+ 'ContentHandler' => 'includes/content/ContentHandler.php',
+ 'Content' => 'includes/content/Content.php',
+ 'CssContentHandler' => 'includes/content/CssContentHandler.php',
+ 'CssContent' => 'includes/content/CssContent.php',
+ 'JavaScriptContentHandler' => 'includes/content/JavaScriptContentHandler.php',
+ 'JavaScriptContent' => 'includes/content/JavaScriptContent.php',
+ 'MessageContent' => 'includes/content/MessageContent.php',
+ 'MWContentSerializationException' => 'includes/content/ContentHandler.php',
+ 'TextContentHandler' => 'includes/content/TextContentHandler.php',
+ 'TextContent' => 'includes/content/TextContent.php',
+ 'WikitextContentHandler' => 'includes/content/WikitextContentHandler.php',
+ 'WikitextContent' => 'includes/content/WikitextContent.php',
+
# includes/context
'ContextSource' => 'includes/context/ContextSource.php',
'DerivativeContext' => 'includes/context/DerivativeContext.php',
# includes/debug
'MWDebug' => 'includes/debug/Debug.php',
+ # includes/deferred
+ 'DataUpdate' => 'includes/deferred/DataUpdate.php',
+ 'DeferrableUpdate' => 'includes/deferred/DeferredUpdates.php',
+ 'DeferredUpdates' => 'includes/deferred/DeferredUpdates.php',
+ 'HTMLCacheUpdate' => 'includes/deferred/HTMLCacheUpdate.php',
+ 'LinksDeletionUpdate' => 'includes/deferred/LinksUpdate.php',
+ 'LinksUpdate' => 'includes/deferred/LinksUpdate.php',
+ 'MWCallableUpdate' => 'includes/deferred/CallableUpdate.php',
+ 'SearchUpdate' => 'includes/deferred/SearchUpdate.php',
+ 'SiteStatsUpdate' => 'includes/deferred/SiteStatsUpdate.php',
+ 'SqlDataUpdate' => 'includes/deferred/SqlDataUpdate.php',
+ 'SquidUpdate' => 'includes/deferred/SquidUpdate.php',
+ 'ViewCountUpdate' => 'includes/deferred/ViewCountUpdate.php',
+
# includes/diff
- '_DiffEngine' => 'includes/diff/DairikiDiff.php',
- '_DiffOp' => 'includes/diff/DairikiDiff.php',
- '_DiffOp_Add' => 'includes/diff/DairikiDiff.php',
- '_DiffOp_Change' => 'includes/diff/DairikiDiff.php',
- '_DiffOp_Copy' => 'includes/diff/DairikiDiff.php',
- '_DiffOp_Delete' => 'includes/diff/DairikiDiff.php',
- '_HWLDF_WordAccumulator' => 'includes/diff/DairikiDiff.php',
- 'ArrayDiffFormatter' => 'includes/diff/DairikiDiff.php',
+ 'DiffEngine' => 'includes/diff/DairikiDiff.php',
+ 'DiffOp' => 'includes/diff/DairikiDiff.php',
+ 'DiffOp_Add' => 'includes/diff/DairikiDiff.php',
+ 'DiffOp_Change' => 'includes/diff/DairikiDiff.php',
+ 'DiffOp_Copy' => 'includes/diff/DairikiDiff.php',
+ 'DiffOp_Delete' => 'includes/diff/DairikiDiff.php',
+ 'HWLDF_WordAccumulator' => 'includes/diff/DairikiDiff.php',
+ 'ArrayDiffFormatter' => 'includes/diff/ArrayDiffFormatter.php',
'Diff' => 'includes/diff/DairikiDiff.php',
'DifferenceEngine' => 'includes/diff/DifferenceEngine.php',
- 'DiffFormatter' => 'includes/diff/DairikiDiff.php',
+ 'DiffFormatter' => 'includes/diff/DiffFormatter.php',
'MappedDiff' => 'includes/diff/DairikiDiff.php',
'RangeDifference' => 'includes/diff/WikiDiff3.php',
- 'TableDiffFormatter' => 'includes/diff/DairikiDiff.php',
- 'UnifiedDiffFormatter' => 'includes/diff/DairikiDiff.php',
+ 'TableDiffFormatter' => 'includes/diff/TableDiffFormatter.php',
+ 'UnifiedDiffFormatter' => 'includes/diff/UnifiedDiffFormatter.php',
'WikiDiff3' => 'includes/diff/WikiDiff3.php',
'WordLevelDiff' => 'includes/diff/DairikiDiff.php',
'JSParser' => 'includes/libs/jsminplus.php',
'JSToken' => 'includes/libs/jsminplus.php',
'JSTokenizer' => 'includes/libs/jsminplus.php',
+ 'ScopedPHPTimeout' => 'includes/libs/ScopedPHPTimeout.php',
+ 'XmlTypeCheck' => 'includes/libs/XmlTypeCheck.php',
# includes/libs/lessphp
'lessc' => 'includes/libs/lessc.inc.php',
'ResourceLoaderNoscriptModule' => 'includes/resourceloader/ResourceLoaderNoscriptModule.php',
'ResourceLoaderSiteModule' => 'includes/resourceloader/ResourceLoaderSiteModule.php',
'ResourceLoaderStartUpModule' => 'includes/resourceloader/ResourceLoaderStartUpModule.php',
- 'ResourceLoaderUserCSSPrefsModule' => 'includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php',
+ 'ResourceLoaderUserCSSPrefsModule' =>
+ 'includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php',
'ResourceLoaderUserGroupsModule' => 'includes/resourceloader/ResourceLoaderUserGroupsModule.php',
'ResourceLoaderUserModule' => 'includes/resourceloader/ResourceLoaderUserModule.php',
'ResourceLoaderUserOptionsModule' => 'includes/resourceloader/ResourceLoaderUserOptionsModule.php',
'ResourceLoaderUserTokensModule' => 'includes/resourceloader/ResourceLoaderUserTokensModule.php',
- 'ResourceLoaderLanguageDataModule' => 'includes/resourceloader/ResourceLoaderLanguageDataModule.php',
+ 'ResourceLoaderLanguageDataModule' =>
+ 'includes/resourceloader/ResourceLoaderLanguageDataModule.php',
'ResourceLoaderWikiModule' => 'includes/resourceloader/ResourceLoaderWikiModule.php',
# includes/revisiondelete
'SearchResultSet' => 'includes/search/SearchEngine.php',
'SearchResultTooMany' => 'includes/search/SearchEngine.php',
'SearchSqlite' => 'includes/search/SearchSqlite.php',
- 'SearchUpdate' => 'includes/search/SearchUpdate.php',
'SqliteSearchResultSet' => 'includes/search/SearchSqlite.php',
'SqlSearchResultSet' => 'includes/search/SearchEngine.php',
'UploadStashWrongOwnerException' => 'includes/upload/UploadStash.php',
'UploadStashNoSuchKeyException' => 'includes/upload/UploadStash.php',
+ # includes/utils
+ 'ArrayUtils' => 'includes/utils/ArrayUtils.php',
+ 'CdbException' => 'includes/utils/Cdb.php',
+ 'CdbFunctions' => 'includes/utils/CdbPHP.php',
+ 'CdbReader' => 'includes/utils/Cdb.php',
+ 'CdbReaderDBA' => 'includes/utils/CdbDBA.php',
+ 'CdbReaderPHP' => 'includes/utils/CdbPHP.php',
+ 'CdbWriter' => 'includes/utils/Cdb.php',
+ 'CdbWriterDBA' => 'includes/utils/CdbDBA.php',
+ 'CdbWriterPHP' => 'includes/utils/CdbPHP.php',
+ 'ConfEditor' => 'includes/utils/ConfEditor.php',
+ 'ConfEditorParseError' => 'includes/utils/ConfEditor.php',
+ 'ConfEditorToken' => 'includes/utils/ConfEditor.php',
+ 'DoubleReplacer' => 'includes/utils/StringUtils.php',
+ 'ExplodeIterator' => 'includes/utils/StringUtils.php',
+ 'HashRing' => 'includes/utils/HashRing.php',
+ 'HashtableReplacer' => 'includes/utils/StringUtils.php',
+ 'IP' => 'includes/utils/IP.php',
+ 'MWCryptRand' => 'includes/utils/MWCryptRand.php',
+ 'MWFunction' => 'includes/utils/MWFunction.php',
+ 'MappedIterator' => 'includes/utils/MappedIterator.php',
+ 'RegexlikeReplacer' => 'includes/utils/StringUtils.php',
+ 'ReplacementArray' => 'includes/utils/StringUtils.php',
+ 'Replacer' => 'includes/utils/StringUtils.php',
+ 'ScopedCallback' => 'includes/utils/ScopedCallback.php',
+ 'StringUtils' => 'includes/utils/StringUtils.php',
+ 'UIDGenerator' => 'includes/utils/UIDGenerator.php',
+ 'ZipDirectoryReader' => 'includes/utils/ZipDirectoryReader.php',
+ 'ZipDirectoryReaderError' => 'includes/utils/ZipDirectoryReader.php',
+
# languages
'ConverterRule' => 'languages/LanguageConverter.php',
'FakeConverter' => 'languages/Language.php',
'UserDupes' => 'maintenance/userDupes.inc',
# maintenance/language
- 'csvStatsOutput' => 'maintenance/language/StatOutputs.php',
- 'extensionLanguages' => 'maintenance/language/languages.inc',
- 'languages' => 'maintenance/language/languages.inc',
+ 'CsvStatsOutput' => 'maintenance/language/StatOutputs.php',
+ 'ExtensionLanguages' => 'maintenance/language/languages.inc',
+ 'Languages' => 'maintenance/language/languages.inc',
'MessageWriter' => 'maintenance/language/writeMessagesArray.inc',
- 'statsOutput' => 'maintenance/language/StatOutputs.php',
- 'textStatsOutput' => 'maintenance/language/StatOutputs.php',
- 'wikiStatsOutput' => 'maintenance/language/StatOutputs.php',
+ 'StatsOutput' => 'maintenance/language/StatOutputs.php',
+ 'TextStatsOutput' => 'maintenance/language/StatOutputs.php',
+ 'WikiStatsOutput' => 'maintenance/language/StatOutputs.php',
# maintenance/term
'AnsiTermColorer' => 'maintenance/term/MWTerm.php',
);
class AutoLoader {
+ static protected $autoloadLocalClassesLower = null;
+
/**
* autoload - take a class name and attempt to load it
*
* as well.
*/
static function autoload( $className ) {
- global $wgAutoloadClasses, $wgAutoloadLocalClasses;
+ global $wgAutoloadClasses, $wgAutoloadLocalClasses,
+ $wgAutoloadAttemptLowercase;
// Workaround for PHP bug <https://bugs.php.net/bug.php?id=49143> (5.3.2. is broken, it's
// fixed in 5.3.6). Strip leading backslashes from class names. When namespaces are used,
// do not strip the leading backlash in this case, causing autoloading to fail.
$className = ltrim( $className, '\\' );
+ $filename = false;
+
if ( isset( $wgAutoloadLocalClasses[$className] ) ) {
$filename = $wgAutoloadLocalClasses[$className];
} elseif ( isset( $wgAutoloadClasses[$className] ) ) {
$filename = $wgAutoloadClasses[$className];
- } else {
- # Try a different capitalisation
- # The case can sometimes be wrong when unserializing PHP 4 objects
- $filename = false;
+ } elseif ( $wgAutoloadAttemptLowercase ) {
+ /*
+ * Try a different capitalisation.
+ *
+ * PHP 4 objects are always serialized with the classname coerced to lowercase,
+ * and we are plagued with several legacy uses created by MediaWiki < 1.5, see
+ * https://wikitech.wikimedia.org/wiki/Text_storage_data
+ */
$lowerClass = strtolower( $className );
- foreach ( $wgAutoloadLocalClasses as $class2 => $file2 ) {
- if ( strtolower( $class2 ) == $lowerClass ) {
- $filename = $file2;
- }
+ if ( self::$autoloadLocalClassesLower === null ) {
+ self::$autoloadLocalClassesLower = array_change_key_case( $wgAutoloadLocalClasses, CASE_LOWER );
}
- if ( !$filename ) {
+ if ( isset( self::$autoloadLocalClassesLower[$lowerClass] ) ) {
if ( function_exists( 'wfDebug' ) ) {
- wfDebug( "Class {$className} not found; skipped loading\n" );
+ wfDebug( "Class {$className} was loaded using incorrect case.\n" );
}
+ $filename = self::$autoloadLocalClassesLower[$lowerClass];
+ }
+ }
- # Give up
- return false;
+ if ( !$filename ) {
+ if ( function_exists( 'wfDebug' ) ) {
+ # FIXME: This is not very polite. Assume we do not manage the class.
+ wfDebug( "Class {$className} not found; skipped loading\n" );
}
+
+ # Give up
+ return false;
}
# Make an absolute path, this improves performance by avoiding some stat calls
static function loadClass( $class ) {
return class_exists( $class );
}
+
+ /**
+ * Method to clear the protected class property $autoloadLocalClassesLower.
+ * Used in tests.
+ */
+ static function resetAutoloadLocalClassesLower() {
+ self::$autoloadLocalClassesLower = null;
+ }
}
spl_autoload_register( array( 'AutoLoader', 'autoload' ) );