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