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
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
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
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.3.
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
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.
225 - Skin::getCopyrightIcon(), ::getPoweredBy(), deprecated in 1.37 have been
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
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
241 - The following SkinTemplate template data, deprecated in 1.37,
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
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
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,
291 * The $context parameter to `new HTMLForm( … )` and `HTMLForm::factory( … )`
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
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
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
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()
367 - ::buildStringCast()
368 - ::buildIntegerCast()
370 - ::addIdentifierQuotes()
373 - ::unionSupportsOrderAndLimit()
379 - ::setTableAliases()
380 - ::setIndexAliases()
381 - ::buildGroupConcatField()
382 * SpecialUnblock::processUnblock(), deprecated in 1.36, has been removed. Use
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
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
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
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
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
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
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()
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:
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
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
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
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
534 * ManualLogEntry::setTags(), deprecated in 1.33, now emits deprecation warnings.
535 * WikiRevision::downloadSource(), deprecated in 1.31, now emits deprecation
537 * DifferenceEngine::textDiff(), deprecated in 1.32, now emits deprecation
539 * FormatMetadata::flattenArrayContentLang(), deprecated in 1.36, now emits
540 deprecation warnings.
541 * SkinTemplate::getNameSpaceKey(), deprecated in 1.35, now emits deprecation
543 * EnqueueJob::newFromJobsByWiki(), deprecated in 1.33, now emits deprecation
545 * The following methods of the MWGrants class, all deprecated since 1.38,
546 are now emitting deprecation warnings:
557 * DataUpdate::runUpdates(), deprecated in 1.28, now emits deprecation warnings.
558 * CdnCacheUpdate::newFromTitles(), deprecated in 1.35, now emits deprecation
560 * Instantiating HTMLCacheUpdate class, deprecated in 1.34, now emits deprecation
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.
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.
592 MediaWiki 1.39 requires PHP 7.4.3 or later and the following PHP extensions:
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
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.
633 There's usually someone online in #mediawiki on irc.libera.chat.