= MediaWiki 1.39 = == MediaWiki 1.39.0-PRERELEASE == THIS IS NOT A RELEASE YET MediaWiki 1.39 is an alpha-quality development branch, and is not recommended for use in production. == Upgrading notes for 1.39 == Don't forget to always back up your database before upgrading! See the file UPGRADE for more detailed per-version upgrade instructions from the oldest supported upgrading version, MediaWiki 1.31. Some specific notes for MediaWiki 1.39 upgrades are below: * … For notes on 1.38.x and older releases, see HISTORY. === Configuration changes for system administrators in 1.39 === * The default serialization method for file meta-data has been changed to JSON. You can revert it to PHP by setting the 'useJsonMetadata' property to false in $wgLocalFileRepo. * The DBO_SSL flag in $wgDBservers and $wgLBFactoryConf has been deprecated in favour of a boolean "ssl" parameter. * … ==== New configuration ==== * $wgAutoCreateTempUser – configures automatic user creation on page save. * $wgCopyUploadAllowOnWikiDomainConfig – Configures if administrators can use the MediaWiki:Copyupload-allowed-domains system message to define which domains can be used with the upload-by-url tool. * … ==== Changed configuration ==== * $wgInvalidUsernameCharacters now contains the char '>', reserved delimiter for external user names. * … ==== Removed configuration ==== * $wgMultiContentRevisionSchemaMigrationStage - Migration is over, was deprecated since 1.35. * $wgWikiFarmSiteDetector – experimental setting removed without replacement. Use the MW_WIKI_NAME environment variable to specifiy the name of the site to load configuration for. Using the WIKI_NAME environment variable for this purpose is deprecated. * $wgParserCacheUseJson - the ParserCache now always uses JSON serialization. Reading old non-JSON cache entries is still supported. The setting had been deprecated since 1.36. * $wgAllowJavaUploads - To allow uploads of JAR files, remove application/java from $wgMimeTypeExclusions. * $wgMaxRedirects has been removed. This feature never worked as intended, see T296430. * $wgElementTiming has been removed. This feature was experimental, and disabled by default. * $wgPriorityHints and $wgPriorityHintsRatio have been removed. This feature was experimental, and disabled by default. * $wgActorTableSchemaMigrationStage has been removed. Migration is over. * In $wgObjectCaches, globalKeyLB and localKeyLB are no longer supported. * $wgLegacySchemaConversion - This global configuration has been removed because it was unused. * $wgInterwikiPrefixDisplayTypes - This global configuration has been removed because it was unused. * … === New user-facing features in 1.39 === * Optional automatic user creation on page save ($wgAutoCreateTempUser) * Administrators now have the option to delete/undelete the associated "Talk" page when they are (un)deleting a given page. `deletetalk` and `undeletetalk` options were added to the 'delete' and 'undelete' action APIs in MW 1.38. * `{{=}}` is now a wikitext built-in magic word, expanding to `=`. This is conventionally used as an escape mechanism to allow the use of `=` in unnamed template arguments. Defining [[Template:=]] to expand to something other than `=` has been deprecated since 1.36, with affected pages put into a special tracking category for migration. * … === New developer features in 1.39 === * … === External library changes in 1.39 === ==== New external libraries ==== * Added Codex v0.1.0-alpha.7 * … ===== New development-only external libraries ===== * Updated QUnit from 2.18.0 to 2.18.2. * … ==== Changed external libraries ==== * Updated OOUI from v0.43.2 to v0.44.0. * Updated composer/semver from 3.2.6 to 3.3.2. * Updated vue/compat from 3.2.23 to 3.2.31. * Updated wikimedia/minify from 2.2.6 to 2.3.0. * Updated wikimedia/ip-set from 3.0.0 to 3.1.0. * … ===== Changed development-only external libraries ===== * Updated composer/spdx-licenses from 1.5.5 to 1.5.6. * … ==== Removed external libraries ==== * … === Bug fixes in 1.39 === * … === Action API changes in 1.39 === * New `undeletetalk` parameter on action=undelete that allows you to restore all revisions of the associated talk page. * … === Action API internal changes in 1.39 === * … === Languages updated in 1.39 === MediaWiki supports over 350 languages. Many localisations are updated regularly. Below only new and removed languages are listed, as well as changes to languages because of Phabricator reports. * (T307080) Added language support for Okinawan (ryu). * (T307887) Added language support for Mooré (mos). * (T308813) Added language support for Nigerian Pidgin (pcm). * (T309763) Added language support for Tai Nüa (tdd). * (T310040) Added language support for Fante (fat). * (T304920) In Swahili, The "Media" namespace is now "Media", as in English, and the "File" namespace is now "Faili". The old name of the "File" namespace was "Picha", and it's kept for backwards compatibility. If you manage a wiki in Swahili, and you use "Faili:" as a namespace anywhere in wikitext, and you mean to use it as "Media:", these need to be replaced to "Media:". * (T309866) Some namespace translations were updated for Kyrgyz (ky). The old ones are retained as aliases for backwards compatibility. === Breaking changes in 1.39 === * Basic non-JavaScript (Grade C) support has been dropped for Internet Explorer 9-10, Firefox 27-38, and Android 4.3-4.4. * The following methods, deprecated since 1.37, have been removed from IDatabase - ::fetchObject() - ::fetchRow() - ::numRows() - ::freeResult() * Title::getDefaultNamespace(), deprecated since 1.37, has been removed. * The DBPrimaryPos class alias 'DBMasterPos' has been removed. * The global function wfGetLB(), deprecated since 1.27, has been removed. * Passing a db to BlockRestrictionStore::loadByBlockId() is no longer supported. BlockRestrictionStoreFactory should be used to fetch a correct BlockRestrictionStore instead. This was deprecated since 1.38. * The global function wfGetCache(), deprecated since 1.32, has been removed. You can use ObjectCache::getInstance() instead. * The global function wfGetMainCache(), deprecated since 1.32, has been removed. You can use ObjectCache::getLocalClusterInstance() instead. * MovePage::__construct() now requires that all parameters be passed. The fallback to MediaWikiServices emitted deprecation notices since 1.37. * WikiPage::doEditContent(), deprecated since 1.32, was removed. * WikiPage::prepareContentForEdit() now requires a UserIdentity parameter to be provided. Not providing one has been deprecated since 1.37. * EventRelayerKafka, deprecated in 1.38, was removed. * MediaWiki\Logger\Monolog\KafkaHandler, deprecated in 1.38, was removed. * The "trace" option of SectionProfiler, deprecated in 1.38, was removed. * The global function wfWikiID(), deprecated since 1.35, has been removed. * Database::wasKnownStatementRollbackError() was removed. Subclasses should override isKnownStatementRollbackError() instead. * Database::wasQueryTimeoutError() was removed. Subclasses should override isQueryTimeoutError() instead. * Database::buildSuperlative() has been removed without deprecation. * The following methods, deprecated in 1.37, have been removed: - Linker::setStubThreshold(), ::getStubThreshold(). - LinkRendererFactory::createForUser(). - ParserOptions::getStubThreshold(), ::setStubThreshold(). * Changes to ResourceLoader modules: - The mediawiki.viewport module, deprecated in 1.37 has been removed. Use IntersectionObserver instead. * If you manage a wiki in Swahili, and you use "Faili:" as a namespace anywhere, and you mean to use it as "Media:", replace it with "Media:". See T304920. * Changes to skins: - Skin::getCopyrightIcon(), ::getPoweredBy(), deprecated in 1.37 have been removed. - Skin::bottomScripts soft deprecated in 1.37, was hard deprecated. Skins using SkinTemplate must set bodyOnly as a skin option and remove lines of code generating html, body and head elements. - Skin::makeSearchButton and Skin::makeSearchInput were deprecated in 1.38. Use SkinTemplate methods with the same name or Skin::getTemplateData instead. - Styles for the HTML classes `warningbox`, `errorbox` and `successbox` have been removed in favor of Html class methods. - The feature `legacy` used inside ResourceLoaderSkinModule, deprecated in 1.37, will no longer ship any styles. - Skin::getSkinStylePath, deprecated since 1.36, has been removed. - Skin::getPortletData has been made private. - SkinTemplate::getPersonalToolsList(), deprecated in 1.35 has been removed. * Experimental wiki farm support: Automatic detection of the requested site within a wiki farm based on the requested domain has been removed. Use the MW_WIKI_NAME environment variable to specifiy the name of the site to load configuration for. Using the WIKI_NAME environment variable for this purpose is deprecated. This is only relevant if you have been using $wgWikiFarmSettingsDirectory to load wiki farm config. * MWExceptionHandler::installHandler was marked @internal and had required arguments added. This method is intended for use in bootstrap code and is unused in known extensions. * MWException::useOutputPage was made private without deprecation. This method was apparently only public for testing and is unused in known extensions. * Calling getId() on a User or UserIdentityValue from the wrong wiki, deprecated since 1.36, now throws an exception. * The following methods have been removed from ExtensionRegistry without deprecation and without replacement. They had been introduced in 1.35 for use in the testing framework, and were not in use by any known extension: - exportAutoloadClassesAndNamespaces - exportTestAutoloadClassesAndNamespaces * The MWNamespace class, deprecated since 1.34, has been removed. Use the NamespaceInfo service instead. * The UnknownContent and UnknownContentHandler class aliases have been removed, use FallbackContent and FallbackContentHandler instead. * IResultWrapper::next() now returns void, to match the Iterator interface that it implements. fetchObject() has the same behavior as next() used to. * In HTMLForm HTMLAutoCompleteSelectFields, the parameters 'autocomplete' and 'autocomplete-messages', which were deprecated in MediaWiki 1.29, were removed. Instead, use 'autocomplete-data' and 'autocomplete-data-messages'. * ParserOutput::setText will now set the ParserOutput's text to null if given null. Previously it did nothing if given null. * The default value for the first argument to the ParserOutput constructor is now null instead of ''. * IDatabase::lockTables() and IDatabase::unlockTables(), deprecated since 1.38, have been removed. * The $context parameter to `new HTMLForm( … )` and `HTMLForm::factory( … )` is now required. * The class alias for revision related classes in namespace MediaWiki\Storage has been removed. Classes are IncompleteRevisionException, MutableRevisionRecord, MutableRevisionSlots, RevisionAccessException, RevisionArchiveRecord, RevisionFactory, RevisionLookup, RevisionRecord, RevisionSlots, RevisionStore, RevisionStoreRecord, SlotRecord, and SuppressedDataException. * Passing a MediaWiki\Linker\LinkTarget to EditPage::makeTemplatesOnThisPageList or TemplatesOnThisPageFormatter::format is no longer supported, a MediaWiki\Page\PageIdentity is required. * The deprecated class alias FakeConverter has been removed, use TrivialLanguageConverter instead. * The deprecated ApiQueryContributions class alias has been removed, use ApiQueryUserContribs instead. * The deprecated MediaWiki\Special\SpecialPageFactory class alias has been removed, use MediaWiki\SpecialPage\SpecialPageFactory instead. * The following skin modules, deprecated in 1.37, have been removed: - mediawiki.skinning.elements - mediawiki.skinning.content - mediawiki.toc.styles - mediawiki.legacy.config - mediawiki.legacy.shared - mediawiki.legacy.commonPrint * … === Deprecations in 1.39 === * PageProps::getInstance(), deprecated since 1.38, emits deprecations warnings. * The global function wfGetDB() has been deprecated. Use LoadBalancer::getConnection() instead. * SpecialRedirectWithAction::__construct without SearchEngineFactory argument is hard deprecated. * Use of the SiteStatsUpdate constructor has been deprecated in favor of the ::factory() method. * AuthManager::checkAccountCreatePermissions has been deprecated. Use AuthManager::authorizeCreateAccount or AuthManager::probablyCanCreateAccount instead. * Title::getSelectFields() has been deprecated in favor of PageStore::newSelectQueryBuilder() * Title::newFromTitleValue(), deprecated since in 1.34, now emits deprecation warnings. Use ::newFromLinkTarget() instead. * ExtensionRegistry::readFromQueue() has been marked @internal. Extensions should use ExtensionProcessor instead. * Processor::getExtraAutoloaderPaths() and ExtensionProcessor::getExtraAutoloaderPaths() have been deprecated, use get getExtractedAutoloadInfo() instead. * The following global functions are deprecated in favor of the listed UrlUtils methods. - wfExpandUrl -> UrlUtils::expand - wfGetServerUrl -> UrlUtils::getServer - wfAssembleUrl -> UrlUtils::assemble - wfRemoveDotSegments -> UrlUtils::removeDotSegments - wfUrlProtocols -> UrlUtils::validProtocols - wfUrlProtocolsWithoutProtRel -> UrlUtils::validAbsoluteProtocols - wfParseUrl -> UrlUtils::parse - wfExpandIRI -> UrlUtils::expandIRI - wfMatchesDomainList -> UrlUtils::matchesDomainList These methods are exact replacements except that 1) they return null instead of false or empty string on error (where applicable); 2) UrlUtils::validProtocols does not take a parameter (documentation said not to pass one to wfUrlProtocols anyway); 3) they use type hints (don't try passing null instead of string, etc.). * MaintainableDBConnRef is deprecated, use DBConnRef instead. * Loading DefaultSettings.php is deprecated. To get default values of main config settings, use MainConfigSchema::listDefaultValues() or MainConfigSchema::getDefaultValue(). * AbstractContent::getRedirectChain() and AbstractContent::getUltimateRedirectTarget() are now emitting deprecation warnings (T296430). * Passing an array of targets to Article::getRedirectHeaderHtml() is deprecated. Supply a single redirect target instead (T296430). * The following Less mediawiki.mixins have been deprecated: - .animation() - .animation-delay() - .transform-rotate() * Skin::getAction is deprecated. Use IContextSource::getActionName instead. * ILBFactory::forEachLB() is deprecated. Use ::getAllLBs(). * LoadBalancer::forEachOpenConnection() and ::forEachOpenPrimaryConnection() are deprecated without replacement. * The following classes were moved from the root namespace to the MediaWiki\ResourceLoader namespace, the old names becoming deprecated aliases: ResourceLoader, MessageBlobStore, VueComponentParser. * The following classes had the "ResourceLoader" prefix stripped while being moved to the MediaWiki\ResourceLoader namespace, the old names becoming deprecated aliases: DerivativeResourceLoaderContext, ResourceLoaderCircularDependencyError, ResourceLoaderClientHtml, ResourceLoaderCodexModule, ResourceLoaderContext, ResourceLoaderFileModule, ResourceLoaderFilePath, ResourceLoaderForeignApiModule, ResourceLoaderImage, ResourceLoaderImageModule, ResourceLoaderLanguageDataModule, ResourceLoaderLessVarFileModule, ResourceLoaderModule, ResourceLoaderMwUrlModule, ResourceLoaderOOUIFileModule, ResourceLoaderOOUIIconPackModule, ResourceLoaderOOUIImageModule, ResourceLoaderOOUIModule, ResourceLoaderSiteModule, ResourceLoaderSiteStylesModule, ResourceLoaderSkinModule, ResourceLoaderStartUpModule, ResourceLoaderUserModule, ResourceLoaderUserOptionsModule, ResourceLoaderUserStylesModule, ResourceLoaderWikiModule. * The following methods in WikiRevision and their interfaces ImportableUploadRevision and ImportableOldRevision are deprecated: - ::getUserObj() → ::getUser() - ::setUserObj() → ::setUsername() - ::setUserIP() → ::setUsername() * ObjectCache::addBusyCallback() is deprecated and non-functional. * … === Other changes in 1.39 === * … == Compatibility == MediaWiki 1.39 requires PHP 7.3.19 or later and the following PHP extensions: * ctype * dom * fileinfo * iconv * intl * json * mbstring * xml MariaDB is the recommended database software. MySQL, PostgreSQL, or SQLite can be used instead, but support for them is somewhat less mature. The supported versions are: * MariaDB 10.3 or higher * MySQL 5.7.0 or higher * PostgreSQL 9.4 or later * SQLite 3.8.0 or later == Online documentation == Documentation for both end-users and site administrators is available on MediaWiki.org, and is covered under the GNU Free Documentation License (except for pages that explicitly state that their contents are in the public domain): https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation == Mailing list == A mailing list is available for MediaWiki user support and discussion: https://lists.wikimedia.org/mailman/listinfo/mediawiki-l A low-traffic announcements-only list is also available: https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce It's highly recommended that you sign up for one of these lists if you're going to run a public MediaWiki, so you can be notified of security fixes. == IRC help == There's usually someone online in #mediawiki on irc.libera.chat.