Exif: Minor cleanup
[mediawiki.git] / RELEASE-NOTES-1.39
blob8125154c55922075a4898d91e97d620f4b358442
1 = MediaWiki 1.39 =
3 == MediaWiki 1.39.0-PRERELEASE ==
5 THIS IS NOT A RELEASE YET
7 MediaWiki 1.39 is an alpha-quality development branch, and is not recommended
8 for use in production.
10 == Upgrading notes for 1.39 ==
11 Don't forget to always back up your database before upgrading!
13 See the file UPGRADE for more detailed per-version upgrade instructions from the
14 oldest supported upgrading version, MediaWiki 1.31.
16 Some specific notes for MediaWiki 1.39 upgrades are below:
17 * (T278139) Drop PHP 7.3 support in MediaWiki 1.39; require 7.4.3 or higher.
18 * …
20 For notes on 1.38.x and older releases, see HISTORY.
22 === Configuration changes for system administrators in 1.39 ===
23 * The default serialization method for file meta-data has been changed to JSON.
24   You can revert it to PHP by setting the 'useJsonMetadata' property to false in
25   $wgLocalFileRepo.
26 * The DBO_SSL flag in $wgDBservers and $wgLBFactoryConf has been deprecated in
27   favour of a boolean "ssl" parameter.
28 * $wgMangleFlashPolicy is deprecated and is no longer functional. Users who are
29   somehow still using Flash as a browser extension will be exposed to CSRF
30   vulnerabilities.
31 * …
33 ==== New configuration ====
34 * $wgAutoCreateTempUser – configures automatic user creation on page save.
35 * $wgCopyUploadAllowOnWikiDomainConfig – Configures if administrators can use
36   the MediaWiki:Copyupload-allowed-domains system message to define which
37   domains can be used with the upload-by-url tool.
38 * $wgLBFactoryConf['configCallback'] can be set to a callback function that
39   returns an array with keys to update in $wgLBFactoryConf. This can be used
40   to update the database configuration on the fly, e.g. to take replica hosts
41   out of rotation.
42 * $wgCdnMatchParameterOrder can be set to false if MediaWiki is behind a CDN
43   that re-orders query parameters. This will make the code that matches request
44   URLs to canonical CDN URLs insensitive to parameter order.
45 * $wgMultiShardSiteStats – split site_stats across multiple rows.
46   Only useful for very large, heavily edited wikis. (T306589)
47 * …
49 ==== Changed configuration ====
50 * $wgInvalidUsernameCharacters now contains the char '>',
51   reserved delimiter for external user names.
52 * …
54 ==== Removed configuration ====
55 * $wgMultiContentRevisionSchemaMigrationStage - Migration is over, was
56   deprecated since 1.35.
57 * $wgWikiFarmSiteDetector – experimental setting removed without replacement.
58   Use the MW_WIKI_NAME environment variable to specifiy the name of the site
59   to load configuration for. Using the WIKI_NAME environment variable for this
60   purpose is deprecated.
61 * $wgParserCacheUseJson - the ParserCache now always uses JSON serialization.
62   Reading old non-JSON cache entries is still supported. The setting had been
63   deprecated since 1.36.
64 * $wgAllowJavaUploads - To allow uploads of JAR files, remove application/java
65   from $wgMimeTypeExclusions.
66 * $wgMaxRedirects has been removed. This feature never worked as intended,
67   see T296430.
68 * $wgElementTiming has been removed. This feature was experimental,
69   and disabled by default.
70 * $wgPriorityHints and $wgPriorityHintsRatio have been removed.
71   This feature was experimental, and disabled by default.
72 * $wgActorTableSchemaMigrationStage has been removed. Migration is over.
73 * In $wgObjectCaches, globalKeyLB and localKeyLB are no longer supported.
74 * $wgLegacySchemaConversion - This global configuration has been
75   removed because it was unused.
76 * $wgInterwikiPrefixDisplayTypes - This global configuration has been
77   removed because it was unused.
78 * …
80 === New user-facing features in 1.39 ===
81 * Optional automatic user creation on page save ($wgAutoCreateTempUser)
82 * Administrators now have the option to delete/undelete the associated "Talk"
83   page when they are (un)deleting a given page. `deletetalk` and `undeletetalk`
84   options were added to the 'delete' and 'undelete' action APIs in MW 1.38.
85 * `{{=}}` is now a wikitext built-in magic word, expanding to `=`.  This is
86   conventionally used as an escape mechanism to allow the use of `=` in
87   unnamed template arguments.  Defining [[Template:=]] to expand to something
88   other than `=` has been deprecated since 1.36, with affected pages put into
89   a special tracking category for migration.
90 * (T284020) Bot passwords are now supported when using the REST API.
91 * …
93 === New developer features in 1.39 ===
94 * …
96 === External library changes in 1.39 ===
98 ==== New external libraries ====
99 * Added Codex v0.1.0-alpha.9
100 * …
102 ===== New development-only external libraries =====
103 * Updated QUnit from 2.18.0 to 2.18.2.
104 * …
106 ==== Changed external libraries ====
107 * Updated OOUI from v0.43.2 to v0.44.2.
108 * Updated composer/semver from 3.2.6 to 3.3.2.
109 * Updated vue/compat from 3.2.23 to 3.2.37.
110 * Updated wikimedia/minify from 2.2.6 to 2.3.0.
111 * Updated wikimedia/ip-set from 3.0.0 to 3.1.0.
112 * Updated wikimedia/xmp-reader from 0.8.1 to 0.8.3.
113 * Updated wikimedia/timestamp from 3.0.0 to 4.0.0.
114 * Updated symfony/polyfill-php73 from 1.25.0 to 1.26.0.
115 * Updated symfony/polyfill-php80 from 1.25.0 to 1.26.0.
116 * Updated symfony/yaml from 5.4.3 to 5.4.10.
117 * Updated wikimedia/base-convert from 2.0.1 to 2.0.2.
118 * Updated wikimedia/php-session-serializer from 2.0.0 to 2.0.1.
119 * Updated wikimedia/running-stat from 1.2.1 to 2.1.0.
120 * Updated wikimedia/scoped-callback from 3.0.0 to 4.0.0.
121 * Updated wikimedia/services from 2.0.1 to 3.0.0.
122 * …
124 ===== Changed development-only external libraries =====
125 * Updated composer/spdx-licenses from 1.5.5 to 1.5.6.
126 * …
128 ==== Removed external libraries ====
129 * …
131 === Bug fixes in 1.39 ===
132 * (T314013) $wgExtraNamespaces no longer overrides canonical namespace names
133   specified in extension.json files. While this setting can still be used to
134   rename extension-defined namespaces, system administrators may need to run
135   namespaceDupes.php after upgrading.
136 * …
138 === Action API changes in 1.39 ===
139 * New `undeletetalk` parameter on action=undelete that allows you to restore
140   all revisions of the associated talk page.
141 * …
143 === Action API internal changes in 1.39 ===
144 * …
146 === Languages updated in 1.39 ===
147 MediaWiki supports over 350 languages. Many localisations are updated regularly.
148 Below only new and removed languages are listed, as well as changes to languages
149 because of Phabricator reports.
151 * Actual localization was added for several languages, which were already
152   in Names.php and even used for a Wikipedia:
153 ** (T313200) Added language support for Rundi (Kirundi, rn).
154 ** (T310976) Added language support for Tumbuka (ChiTumbuka, tum).
155 ** (T314270) Added language support for Kanuri (kr).
156 * (T313199) Added language support for Sylheti (syl).
157 * (T311975) Added language support for Ghanaian Pidgin (gpe).
158 * (T307080) Added language support for Okinawan (ryu).
159 * (T307887) Added language support for Mooré (mos).
160 * (T308813) Added language support for Nigerian Pidgin (pcm).
161 * (T309763) Added language support for Tai Nüa (tdd).
162 * (T310040) Added language support for Fante (fat).
163 * (T311034) Added language support for Campidanese Sardinian (sro).
164 * (T304920) In Swahili, The "Media" namespace is now "Media", as in English,
165   and the "File" namespace is now "Faili". The old name of the "File" namespace
166   was "Picha", and it's kept for backwards compatibility. If you manage a wiki
167   in Swahili, and you use "Faili:" as a namespace anywhere in wikitext, and
168   you mean to use it as "Media:", these need to be replaced to "Media:".
169 * (T309866) Some namespace translations were updated for Kyrgyz (ky). The old
170   ones are retained as aliases for backwards compatibility.
171 * (T117845) Started the renaming of the language codes for Serbian from sr-ec
172   and sr-el to sr-cyrl and sr-latn.
173 * …
175 === Breaking changes in 1.39 ===
176 * Basic non-JavaScript (Grade C) support has been dropped for Internet Explorer
177   9-10, Firefox 27-38, and Android 4.3-4.4.
178 * The following methods, deprecated since 1.37, have been removed from IDatabase
179   - ::fetchObject()
180   - ::fetchRow()
181   - ::numRows()
182   - ::freeResult()
183 * Title::getDefaultNamespace(), deprecated since 1.37, has been removed.
184 * The DBPrimaryPos class alias 'DBMasterPos' has been removed.
185 * The global function wfGetLB(), deprecated since 1.27, has been removed.
186 * Passing a db to BlockRestrictionStore::loadByBlockId() is no longer supported.
187   BlockRestrictionStoreFactory should be used to fetch a correct
188   BlockRestrictionStore instead. This was deprecated since 1.38.
189 * The global function wfGetCache(), deprecated since 1.32, has been removed. You
190   can use ObjectCache::getInstance() instead.
191 * The global function wfGetMainCache(), deprecated since 1.32, has been removed.
192   You can use ObjectCache::getLocalClusterInstance() instead.
193 * MovePage::__construct() now requires that all parameters be passed. The
194   fallback to MediaWikiServices emitted deprecation notices since 1.37.
195 * WikiPage::doEditContent(), deprecated since 1.32, was removed.
196 * WikiPage::prepareContentForEdit() now requires a UserIdentity parameter to be
197   provided. Not providing one has been deprecated since 1.37.
198 * EventRelayerKafka, deprecated in 1.38, was removed.
199 * MediaWiki\Logger\Monolog\KafkaHandler, deprecated in 1.38, was removed.
200 * The "trace" option of SectionProfiler, deprecated in 1.38, was removed.
201 * The global function wfWikiID(), deprecated since 1.35, has been removed.
202 * Database::wasKnownStatementRollbackError() was removed. Subclasses should
203   override isKnownStatementRollbackError() instead.
204 * Database::wasQueryTimeoutError() was removed. Subclasses should
205   override isQueryTimeoutError() instead.
206 * Database::buildSuperlative() has been removed without deprecation.
207 * The following methods, deprecated in 1.37, have been removed:
208   - Linker::setStubThreshold(), ::getStubThreshold().
209   - LinkRendererFactory::createForUser().
210   - ParserOptions::getStubThreshold(), ::setStubThreshold().
211 * Changes to ResourceLoader modules:
212   - The mediawiki.viewport module, deprecated in 1.37 has been
213      removed. Use IntersectionObserver instead.
214 * If you manage a wiki in Swahili, and you use "Faili:" as a namespace anywhere,
215   and you mean to use it as "Media:", replace it with "Media:". See T304920.
216 * Changes to skins:
217   - Skin::getCopyrightIcon(), ::getPoweredBy(), deprecated in 1.37 have been
218     removed.
219   - Skin::bottomScripts soft deprecated in 1.37, was hard deprecated.
220     Skins using SkinTemplate must set bodyOnly as a skin option and
221     remove lines of code generating html, body and head elements.
222   - Skin::makeSearchButton and Skin::makeSearchInput were deprecated in 1.38.
223     Use SkinTemplate methods with the same name or Skin::getTemplateData
224     instead.
225   - Styles for the HTML classes `warningbox`, `errorbox` and `successbox` have
226     been removed in favor of Html class methods.
227   - The feature `legacy` used inside ResourceLoaderSkinModule,
228     deprecated in 1.37, will no longer ship any styles.
229   - Skin::getSkinStylePath, deprecated since 1.36, has been removed.
230   - Skin::getPortletData has been made private.
231   - SkinTemplate::getPersonalToolsList(), deprecated in 1.35 has been
232     removed.
233   - The following SkinTemplate template data, deprecated in 1.37,
234     have been removed:
235      - poweredbyico
236      - copyrightico
237   - The following hooks, deprecated in 1.37, have been removed:
238      - SkinGetPoweredBy: SkinGetPoweredByHook
239   - The following hooks are deprecated and replaced with
240     SkinTemplateNavigation::Universal:
241      - SkinTemplateNavigation::SpecialPage
242      - SkinTemplateNavigation
243   - The mediawiki.skinning.content.externallinks module, which was
244     deprecated in 1.36 has been removed. Skins that still rely on it
245     will lose the icon styling of external links by type.
246 * Experimental wiki farm support: Automatic detection of the requested site
247   within a wiki farm based on the requested domain has been removed.
248   Use the MW_WIKI_NAME environment variable to specify the name of the site
249   to load configuration for. Using the WIKI_NAME environment variable for this
250   purpose is deprecated. This is only relevant if you have been using
251   $wgWikiFarmSettingsDirectory to load wiki farm config.
252 * MWExceptionHandler::installHandler was marked @internal and had required
253   arguments added. This method is intended for use in bootstrap code and is
254   unused in known extensions.
255 * MWException::useOutputPage was made private without deprecation.
256   This method was apparently only public for testing and is unused in known
257   extensions.
258 * Calling getId() on a User or UserIdentityValue from the wrong wiki, deprecated
259   since 1.36, now throws an exception.
260 * The following methods have been removed from ExtensionRegistry without
261   deprecation and without replacement. They had been introduced in 1.35 for use
262   in the testing framework, and were not in use by any known extension:
263   - exportAutoloadClassesAndNamespaces
264   - exportTestAutoloadClassesAndNamespaces
265 * The MWNamespace class, deprecated since 1.34, has been removed. Use the
266   NamespaceInfo service instead.
267 * The UnknownContent and UnknownContentHandler class aliases have been removed,
268   use FallbackContent and FallbackContentHandler instead.
269 * IResultWrapper::next() now returns void, to match the Iterator interface that
270   it implements. fetchObject() has the same behavior as next() used to.
271 * In HTMLForm HTMLAutoCompleteSelectFields, the parameters 'autocomplete' and
272   'autocomplete-messages', which were deprecated in MediaWiki 1.29, were
273   removed. Instead, use 'autocomplete-data' and 'autocomplete-data-messages'.
274 * The global $wgParser, deprecated in 1.32, was removed. Use
275   MediaWikiServices::getInstance()->getParser() instead.
276 * ParserOutput::setText will now set the ParserOutput's text to null if
277   given null. Previously it did nothing if given null.
278 * The default value for the first argument to the ParserOutput constructor
279   is now null instead of ''.
280 * IDatabase::lockTables() and IDatabase::unlockTables(), deprecated since 1.38,
281   have been removed.
282 * The $context parameter to `new HTMLForm( … )` and `HTMLForm::factory( … )`
283   is now required.
284 * The class alias for revision related classes in namespace MediaWiki\Storage
285   has been removed. Classes are IncompleteRevisionException,
286   MutableRevisionRecord, MutableRevisionSlots, RevisionAccessException,
287   RevisionArchiveRecord, RevisionFactory, RevisionLookup, RevisionRecord,
288   RevisionSlots, RevisionStore, RevisionStoreRecord, SlotRecord, and
289   SuppressedDataException.
290 * Calling getBy() on an AbstractBlock from the wrong wiki, deprecated since
291   1.38, now throws an exception.
292 * Passing a MediaWiki\Linker\LinkTarget to EditPage::makeTemplatesOnThisPageList
293   or TemplatesOnThisPageFormatter::format is no longer supported,
294   a MediaWiki\Page\PageIdentity is required.
295 * The deprecated class alias FakeConverter has been removed, use
296   TrivialLanguageConverter instead.
297 * The deprecated ApiQueryContributions class alias has been removed, use
298   ApiQueryUserContribs instead.
299 * The deprecated MediaWiki\Special\SpecialPageFactory class alias has been
300   removed, use MediaWiki\SpecialPage\SpecialPageFactory instead.
301 * The following skin modules, deprecated in 1.37, have been removed:
302         - mediawiki.skinning.elements
303         - mediawiki.skinning.content
304         - mediawiki.toc.styles
305         - mediawiki.legacy.config
306         - mediawiki.legacy.shared
307         - mediawiki.legacy.commonPrint
308 * FileModule::compileLessFile(), deprecated since 1.35, has been removed. Use
309   ::compileLessString() instead.
310 * LogFormatter::styleRestricedElement(), deprecated since 1.37, has been
311   removed. Use ::styleRestrictedElement() instead.
312 * Title::isNamespaceProtected(), deprecated in 1.34, has been removed.
313 * ApiStashEdit::parseAndStash(), deprecated in 1.34, has been removed.
314 * LinkCache::forUpdate(), deprecated in 1.34, has been removed.
315 * Passing null instead of a NamespaceInfo instance to LinkCache::__construct()
316   is not supported anymore. It is recommended to request an instance from the
317   service container.
318 * ApiQueryBase::showHiddenUsersAddBlockInfo(), deprecated in 1.34, has been
319   removed. Use ApiQueryBlockInfoTrait instead.
320 * ApiQueryBase::prefixedTitlePartToKey(), deprecated in 1.35, has been removed.
321   Use ::parsePrefixedTitlePart() instead.
322 * ExternalStoreDB::getSlave(), deprecated in 1.34, has been removed. Use
323   ExternalStoreDB::getReplica() instead.
324 * ChangesListSpecialPage::checkStructuredFilterUiEnabled() and
325   SpecialWatchlist::checkStructuredFilterUiEnabled() now support UserIdentity
326   as the only argument. Passing Config argument was deprecated in 1.34.
327 * DatabaseUpdater::ifNoActorTable(), deprecated in 1.35, has been removed. Use
328   ::ifTableNotExists() instead.
329 * MediaWiki\Revision\RevisionStoreFactory::getRevisionStore was documented
330   to allow passing bool true as a dbDomain, this is no longer possible,
331   because that is an invalid value for a dbDomain.
332 * LinkHolderArray::__construct() had its signature changed. The class was marked
333   internal in 1.35.
334 * SpecialMute::isTargetBlacklisted(), deprecated in 1.35, has been removed. Use
335   ::isTargetMuted() instead.
336 * WebRequest::checkUrlExtension(), deprecated in 1.35, has been removed.
337 * ContentHandler::cleanupHandlersCache(), deprecated in 1.35, has been removed.
338 * SpecialVersion::getExtAuthorsFileName, deprecated in 1.35, has been removed.
339   Use MediaWiki\ExtensionInfo::getAuthorsFileName.
340 * SpecialVersion::getExtLicenseFileName, deprecated in 1.35, has been removed.
341   Use MediaWiki\ExtensionInfo::getLicenseFileNames.
342 * CategoryPage::getCategoryViewerClass and ::setCategoryViewerClass, deprecated
343   in 1.35, have been removed.
344 * SqlBlobStore::getLegacyEncodingConversionLang(), deprecated in 1.34, has been
345   removed.
346 * wfCanIPUseHTTPS(), deprecated in 1.37, has been removed.
347 * wfGetScriptUrl(), deprecated in 1.35, has been removed.
348 * The following methods of Database class, are no longer stable to override:
349   - ::implicitOrderby()
350   - ::selectSQLText()
351   - ::bitNot()
352   - ::bitAnd()
353   - ::bitOr()
354   - ::buildConcat()
355   - ::buildGreatest()
356   - ::buildLeast()
357   - ::buildSubstring()
358   - ::buildStringCast()
359   - ::buildIntegerCast()
360   - ::tableName()
361   - ::addIdentifierQuotes()
362   - ::buildLike()
363   - ::limitResult()
364   - ::unionSupportsOrderAndLimit()
365   - ::unionQueries()
366   - ::conditional()
367   - ::strreplace()
368   - ::timestamp()
369   - ::getInfinity()
370   - ::setTableAliases()
371   - ::setIndexAliases()
372   - ::buildGroupConcatField()
373 * SpecialUnblock::processUnblock(), deprecated in 1.36, has been removed. Use
374   UnblockUser instead.
375 * wfLocalFile() and wfFindFile(), deprecated in 1.34, have been removed.
376 * Maintenance script resetUserTokens.php, deprecated in 1.27, has been removed.
377 * These methods in Database have been removed without deprecation as they are
378   not used outside core. Users should override corresponding methods in
379   SQLPlatform instead:
380   - Database::doInsert -> SQLPlatform::insertSqlText
381   - Database::doDropTable -> SQLPlatform::dropTableSqlText
382   - Database::doRollback -> SQLPlatform::rollbackSqlText
383   - Database::doSavepoint -> SQLPlatform::savepointSqlText
384   - Database::doReleaseSavepoint -> SQLPlatform::releaseSavepointSqlText
385   - Database::doRollbackToSavepoint -> SQLPlatform::rollbackToSavepointSqlText
386 * The following protected methods of Database class have been removed without
387   deprecation as they are not used outside core. Users should call
388   corresponding methods in SQLPlatform:
389   - Database::makeInsertLists -> SQLPlatform::makeInsertLists
390   - Database::isFlagInOptions -> SQLPlatform::isFlagInOptions
391   - Database::normalizeOptions -> SQLPlatform::normalizeOptions
392   - Database::fieldNameWithAlias -> SQLPlatform::fieldNameWithAlias
393   - Database::isTransactableQuery -> SQLPlatform::isTransactableQuery
394 * $wgCanonicalNamespaceNames no longer includes custom namespaces defined using
395   $wgExtraNamespaces. Extensions should use the NamespaceInfo service instead
396   of accessing this configuration setting directly.
397 * These methods have been moved from IDatabase to IMaintainableDatabase:
398   - IDatabase::fieldExists -> IMaintainableDatabase::fieldExists
399   - IDatabase::indexExists -> IMaintainableDatabase::indexExists
400   - IDatabase::tableExists -> IMaintainableDatabase::tableExists
401 * DBConnRef doesn't accept live connection in constructor anymore.
402   Only parameters for getting connection should be provided.
403 * …
405 === Deprecations in 1.39 ===
406 * PageProps::getInstance(), deprecated since 1.38, emits deprecations warnings.
407 * The global function wfGetDB() has been deprecated. Use
408   LoadBalancer::getConnection() instead.
409 * SpecialRedirectWithAction::__construct without SearchEngineFactory argument
410   is hard deprecated.
411 * Use of the SiteStatsUpdate constructor has been deprecated in favor of
412   the ::factory() method.
413 * AuthManager::checkAccountCreatePermissions has been deprecated. Use
414   AuthManager::authorizeCreateAccount or AuthManager::probablyCanCreateAccount
415   instead.
416 * Title::getSelectFields() has been deprecated in favor of
417   PageStore::newSelectQueryBuilder()
418 * Title::newFromTitleValue(), deprecated since in 1.34, now emits deprecation
419   warnings. Use ::newFromLinkTarget() instead.
420 * ExtensionRegistry::readFromQueue() has been marked @internal. Extensions
421   should use ExtensionProcessor instead.
422 * Processor::getExtraAutoloaderPaths() and
423   ExtensionProcessor::getExtraAutoloaderPaths() have been deprecated, use get
424   getExtractedAutoloadInfo() instead.
425 * The following global functions are deprecated in favor of the listed UrlUtils
426   methods.
427   - wfExpandUrl -> UrlUtils::expand
428   - wfGetServerUrl -> UrlUtils::getServer
429   - wfAssembleUrl -> UrlUtils::assemble
430   - wfRemoveDotSegments -> UrlUtils::removeDotSegments
431   - wfUrlProtocols -> UrlUtils::validProtocols
432   - wfUrlProtocolsWithoutProtRel -> UrlUtils::validAbsoluteProtocols
433   - wfParseUrl -> UrlUtils::parse
434   - wfExpandIRI -> UrlUtils::expandIRI
435   - wfMatchesDomainList -> UrlUtils::matchesDomainList
436   These methods are exact replacements except that
437   1) they return null instead of false or empty string on error (where
438      applicable);
439   2) UrlUtils::validProtocols does not take a parameter (documentation said not
440      to pass one to wfUrlProtocols anyway);
441   3) they use type hints (don't try passing null instead of string, etc.).
442 * MaintainableDBConnRef is deprecated, use DBConnRef instead.
443 * Loading DefaultSettings.php is deprecated. To get default values of main
444   config settings, use MainConfigSchema::listDefaultValues() or
445   MainConfigSchema::getDefaultValue().
446 * AbstractContent::getRedirectChain() and
447   AbstractContent::getUltimateRedirectTarget() are now emitting deprecation
448   warnings (T296430).
449 * (T244138) QueryPage::getSQL() is deprecated. Instead QueryPage::getQueryInfo()
450   should be overridden.
451 * Calling new JobRunner() directly without $serviceOptions now emits
452   deprecation warnings. Use MediaWikiServices::getInstance()->getJobRunner()
453   instead.
454 * Passing an array of targets to Article::getRedirectHeaderHtml() is
455   deprecated. Supply a single redirect target instead (T296430).
456 * The following Less mediawiki.mixins have been deprecated:
457   - .animation()
458   - .animation-delay()
459   - .transform-rotate()
460 * Skin::getAction is deprecated. Use IContextSource::getActionName instead.
461 * ILBFactory::forEachLB() is deprecated. Use ::getAllLBs().
462 * LoadBalancer::forEachOpenConnection() and ::forEachOpenPrimaryConnection()
463   are deprecated without replacement.
464 * The following classes were moved from the root namespace to the
465   MediaWiki\ResourceLoader namespace, the old names becoming deprecated aliases:
466   ResourceLoader, MessageBlobStore, VueComponentParser.
467 * The following classes had the "ResourceLoader" prefix stripped while being
468   moved to the MediaWiki\ResourceLoader namespace, the old names becoming
469   deprecated aliases: DerivativeResourceLoaderContext,
470   ResourceLoaderCircularDependencyError, ResourceLoaderClientHtml,
471   ResourceLoaderCodexModule, ResourceLoaderContext, ResourceLoaderFileModule,
472   ResourceLoaderFilePath, ResourceLoaderForeignApiModule, ResourceLoaderImage,
473   ResourceLoaderImageModule, ResourceLoaderLanguageDataModule,
474   ResourceLoaderLessVarFileModule, ResourceLoaderModule,
475   ResourceLoaderMwUrlModule, ResourceLoaderOOUIFileModule,
476   ResourceLoaderOOUIIconPackModule, ResourceLoaderOOUIImageModule,
477   ResourceLoaderOOUIModule, ResourceLoaderSiteModule,
478   ResourceLoaderSiteStylesModule, ResourceLoaderSkinModule,
479   ResourceLoaderStartUpModule, ResourceLoaderUserModule,
480   ResourceLoaderUserOptionsModule, ResourceLoaderUserStylesModule,
481   ResourceLoaderWikiModule.
482 * The following methods in WikiRevision and their interfaces
483   ImportableUploadRevision and ImportableOldRevision are deprecated:
484   - ::getUserObj() → ::getUser()
485   - ::setUserObj() → ::setUsername()
486   - ::setUserIP() → ::setUsername()
487 * ObjectCache::addBusyCallback() is deprecated and non-functional.
488 * MWTimestamp::getHumanTimestamp(), deprecated in 1.26, now emits deprecation
489   warnings.
490 * Article::viewRedirect(), deprecated in 1.30, now emits deprecation warnings.
491 * Parser::getFreshParser() is deprecated, use ParserFactory::getInstance().
492 * CoreParserFunctions::mwnamespace() is deprecated and emits deprecation
493   warnings, use CoreParserFunctions::namespace() instead.
494 * User::blockedFor(), deprecated in 1.35, now emits deprecation warnings.
495 * Access to previously public properties AbstractBlock::$mExpiry,
496   AbstractBlock::$mHideName, AbstractBlock::$mTimestamp, DatabaseBlock::$mAuto,
497   and DatabaseBlock::$mParentBlockId, deprecated in 1.34, now emits deprecation
498   warnings.
499 * Access to previously public properties User::$mBlock, User::$mBlockedby, and
500   User::$mHideName, deprecated in 1.35, now emits deprecation warnings.
501 * JobQueueGroup::singleton() and ::destroySingletons(), deprecated in 1.37, now
502   emit deprecation warnings.
503 * Title::getNotificationTimestamp(), deprecated in 1.35, now emits deprecation
504   warnings.
505 * Global functions wfReadOnly and wfReadOnlyReason, deprecated in 1.38, now
506   emit deprecation warnings.
507 * Overriding or calling DifferenceEngine::getDiffBodyCacheKey(), deprecated in
508   1.31, now emits deprecation warnings.
509 * Access to previously public property WikiRevision::$fileIsTemp, deprecated in
510   1.29, now emits deprecation warnings.
511 * wfQueriesMustScale() has been deprecated and emits deprecation warnings.
512 * ContextSource::getStats(), RequestContext::getStats(), and
513   DerivativeContext::getStats(), deprecated in 1.27, now emit deprecation
514   warnings.
515 * ManualLogEntry::setTags(), deprecated in 1.33, now emits deprecation warnings.
516 * WikiRevision::downloadSource(), deprecated in 1.31, now emits deprecation
517   warnings.
518 * DifferenceEngine::textDiff(), deprecated in 1.32, now emits deprecation
519   warnings.
520 * FormatMetadata::flattenArrayContentLang(), deprecated in 1.36, now emits
521   deprecation warnings.
522 * SkinTemplate::getNameSpaceKey(), deprecated in 1.35, now emits deprecation
523   warnings.
524 * EnqueueJob::newFromJobsByWiki(), deprecated in 1.33, now emits deprecation
525   warnings.
526 * The following methods of the MWGrants class, all deprecated since 1.38,
527   are now emitting deprecation warnings:
528   - getValidGrants
529   - getRightsByGrant
530   - grantName
531   - grantNames
532   - getGrantRights
533   - grantsAreValid
534   - getGrantGroups
535   - getHiddenGrants
536   - getGrantsLink
537   - getGrantsWikiText
538 * DataUpdate::runUpdates(), deprecated in 1.28, now emits deprecation warnings.
539 * CdnCacheUpdate::newFromTitles(), deprecated in 1.35, now emits deprecation
540   warnings.
541 * Instantiating HTMLCacheUpdate class, deprecated in 1.34, now emits deprecation
542   warnings.
543 * …
545 === Other changes in 1.39 ===
546 * Dynamic default values are now applied before extension registration callbacks
547   are run. This way, extensions have a complete view of config variables, with
548   all defaults applied. For example, when the default value of X used to be
549   static but becomes dynamic, and an extension reads the value of X in the
550   registration callback, it will now continue to function as expected. In some
551   cases however, this may cause an undesired change in behavior: if the dynamic
552   default of setting X depends on the value of setting Y, and an extension
553   changes Y, the changed value of Y will no longer affect the value of X.
554 * …
556 == Compatibility ==
558 MediaWiki 1.39 requires PHP 7.4.3 or later and the following PHP extensions:
560 * ctype
561 * dom
562 * fileinfo
563 * iconv
564 * intl
565 * json
566 * mbstring
567 * xml
569 MariaDB is the recommended database software. MySQL, PostgreSQL, or SQLite can
570 be used instead, but support for them is somewhat less mature.
572 The supported versions are:
574 * MariaDB 10.3 or higher
575 * MySQL 5.7.0 or higher
576 * PostgreSQL 10 or later
577 * SQLite 3.8.0 or later
579 == Online documentation ==
580 Documentation for both end-users and site administrators is available on
581 MediaWiki.org, and is covered under the GNU Free Documentation License (except
582 for pages that explicitly state that their contents are in the public domain):
584        https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation
586 == Mailing list ==
587 A mailing list is available for MediaWiki user support and discussion:
589        https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
591 A low-traffic announcements-only list is also available:
593        https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
595 It's highly recommended that you sign up for one of these lists if you're
596 going to run a public MediaWiki, so you can be notified of security fixes.
598 == IRC help ==
599 There's usually someone online in #mediawiki on irc.libera.chat.