1= MediaWiki 1.37 = 2 3== MediaWiki 1.37.1 == 4 5This is a security and maintenance release of the MediaWiki 1.37 branch. 6 7=== Changes since MediaWiki 1.37.0 === 8* (T296112) Allow inserting new sections named '0'. 9* Fix path for ZhConversion.php. 10* nukeNS: don't run purgeRedundantText() after every change. 11* (T286779, T297031) installer: Fix Postgres mistakes in using changeField 12 method. 13* (T225888) RollbackAction: fix missing pagetitle. 14* (T297322, CVE-2021-44858, CVE-2021-44857) SECURITY: Fix permissions checks in 15 undo actions. 16* (T297574, CVE-2021-45038) SECURITY: Fix permissions check in action=rollback. 17* (T34716, T297416) SECURITY: Require 'read' right for most actions. 18* (T271037, CVE-2021-44856) SECURITY: Fix use of EditFilterMergedContent hook when 19 changing content model. 20 21== MediaWiki 1.37.0 == 22 23=== Changes since MediaWiki 1.37.0-rc.2 === 24* Remove justinrainbow/json-schema from vendor. 25* Updated pear/mail_mime from 1.10.9 to 1.10.11. 26* Update deprecated Guzzle Psr7 function calls. 27* (T281972) UserIdentityValue: Correct @since tags. 28* Updated wikimedia/parsoid from v0.14.0-a19 to v0.14.0. 29* Localisation updates. 30* Tweak error message for missing composer dependencies. 31 32== MediaWiki 1.37.0-rc.2 == 33 34=== Changes since MediaWiki 1.37.0-rc.1 === 35* (T295173) Re-add wikimedia/normalized-exception to vendor. 36* Remove wikimedia/testing-access-wrapper, psr/simple-cache, psr/http-factory 37 from vendor. 38* (T295191) ApiQuerySiteinfo: Fix "rightsinfo"/"url" when $wgRightsPage is set. 39* (T212428) Allow populateContentTables to continue when there are bad blobs. 40 41== MediaWiki 1.37.0-rc.1 == 42 43=== Changes since MediaWiki 1.37.0-rc.0 === 44* (T294043) checkStorage: pass no parameters to WikiRevision::getContent(). 45* (T292763, CVE-2021-44856) SECURITY: Do not cache private wiki completion results. 46* (T293783) ApiQueryImageInfo: don't show empty comments as deleted. 47* (T294316) Revert "Mark ApiClientLogin/ApiLogin as requiring write mode". 48* (T294796) JobQueueRedis: Replace deprecated zSize with zCard. 49* Remove duplicate settings from DefaultSettings. 50* (T278037) NoLocalSettings: Pass an EmptyBagOStuff to TemplateParser. 51 52== MediaWiki 1.37.0-rc.0 == 53 54== Upgrading notes for 1.37 == 55Don't forget to always back up your database before upgrading! 56 57See the file UPGRADE for more detailed per-version upgrade instructions from the 58oldest supported upgrading version, MediaWiki 1.27. 59 60Some specific notes for MediaWiki 1.37 upgrades are below: 61* (T280806) Deprecated methods of fetching API tokens have been removed. This 62 may cause older bots and scripts to fail. Most queries are trivially 63 updateable to using new methods. See the Action API changes section below 64 for more information. 65 66For notes on 1.36.x and older releases, see HISTORY. 67 68=== Configuration changes for system administrators in 1.37 === 69* (T242768) The PasswordCannotMatchUsername password policy has been removed, 70 please use PasswordCannotBeSubstringInUsername instead. If you have not 71 customised your password policies, there will be nothing to do here. 72 73==== New configuration ==== 74* $wgBrowserFormatDetection - This setting allows the enabling or disabling 75 of automatic detection of possible phone numbers in a webpage in iOS Safari. 76* $wgParserEnableLegacyMediaDOM - This setting defaults to true, and enables 77 the legacy media HTML structure in the output from the Parser. The 78 alternative modern HTML structure for media is described at 79 https://www.mediawiki.org/wiki/Parsing/Media_structure 80 In a future release of MediaWiki this option will default to false, 81 so it's a good idea to test this setting on your wiki early and report 82 any issues. 83 84==== Changed configuration ==== 85* $wgContentHandlerTextFallback - This migration setting, which defines how to 86 react if a plain text version of a non-text Content object is requested using 87 ContentHandler::getContentText(), is deprecated. 88* $wgActions – This setting lets sysadmins over-ride which actions can be used. 89 It has been re-worked to support injecting dependencies into Action sub- 90 classes as part of wider work on dependency injection. Previously, $wgActions 91 was an array where the keys were the names of actions, and the values had the 92 following impacts (for a given key 'Foo'): 93 - `true`: use the class 'FooAction' unless for a specific page 94 WikiPage::getActionOverrides() wants to override that action 95 - a string: use the class with that name, and do not allow over-riding on a 96 per-page basis 97 - `false`: the action is disabled 98 - a callable: use the Action instance returned by invoking that callback, and 99 do not allow overriding on a per-page basis 100 - an object: use that specific Action instance, and do not allow overr-iding 101 on a per-page basis. 102 As part of T253078, values can now be arrays that are not callables, which are 103 treated as ObjectFactory specs, allowing for services to be injected. 104 Additionally, the distinction between values that allow per-page overrides and 105 those that do not was removed - all actions can now be overridden on a per- 106 page basis using WikiPage::getActionOverrides(). 107* $wgShellboxUrl – This setting, new in 1.36 to configure the novel Shellbox 108 encapsulation system, is now deprecated; use $wgShellboxUrls as a mapping of 109 service => URL instead. 110* $wgIncludejQueryMigrate – This setting, introduced in 1.29 to on whether to 111 provide a migration layer for jQuery, has now switched its default value from 112 true to false. This may break gadgets that depended on methods that were 113 removed in jQuery 3 in 2017. See T280944 for more information. 114* A number of settings have been renamed. The former configuration variable 115 names are deprecated, but will be used as the fall back if they are still set, 116 and remain temporarily available for extensions which might try to read them: 117 - $wgFileBlacklist is now $wgProhibitedFileExtensions 118 - $wgMimeTypeBlacklist is now $wgMimeTypeExclusions 119 - $wgEnableUserEmailBlacklist is now $wgEnableUserEmailMuteList 120 - $wgShortPagesNamespaceBlacklist is now $wgShortPagesNamespaceExclusions 121* $wgMimeTypeExclusions - As well as being renamed, this configuration array now 122 also prohibits the RFC 4329 form of JavaScript, 'application/javascript', as 123 well as previous MIME types. 124* $wgFragmentMode - This setting, which determines the encoding of section IDs, 125 has now switched its default value from legacy-first to html5-first: both the 126 HTML5 anchor and the legacy percent-encoding-style anchor will still be 127 generated for section titles, but references to them will use the HTML5 128 version, resulting in human-readable fragments. 129 130==== Removed configuration ==== 131* $wgLegacyJavaScriptGlobals, deprecated in 1.36. 132* (T274695) $wgAjaxEditStash, deprecated in 1.36. 133* $wgShowDBErrorBacktrace, deprecated and non-functional since 1.32. 134* $wgShowSQLErrors, deprecated and non-functional since 1.32. 135* $wgLangObjCacheSize, without deprecation; the LanguageFactory service now 136 always retains at most 10 objects in its LRU-cache. 137* $wgDjvuToXML, without deprecation; the tool it enables is obsolete and 138 abandoned upstream. Use $wgDjvuDump to use that tool instead. 139 140=== New user-facing features in 1.37 === 141* (T161934) MediaWiki now supports JPEG2000 files, to a limited extent. 142 143=== External library changes in 1.37 === 144 145==== New external libraries ==== 146* Added symfony/polyfill-php80 1.23.1. 147* Added whatwg-fetch 3.6.2. 148* Added wikimedia/normalized-exception 1.0.1. 149 150==== Changed external libraries ==== 151* Updated OOjs from v5.0.0 to v6.0.0 152* Updated OOjs-Router from v0.2.0 to v0.3.0 153* Updated OOUI from v0.41.3 to v0.42.0 154* Updated WVUI from v0.1.0 to v0.3.0 155* Updated cssjanus/cssjanus from v1.3.0 to v2.1.0. 156* Updated pear/mail_mime from 1.10.9 to 1.10.11. 157* Updated psr/container from v1.0.0 to v1.1.1. 158* Updated wikimedia/minify from v2.2.2 to v2.2.4. 159* Updated wikimedia/object-factory from v3.0.0 to v3.0.2. 160* Updated wikimedia/parsoid from v0.13.1 to v0.14.0. 161* Updated wikimedia/relpath from v2.1.1 to v3.0.0. 162* Updated wikimedia/remex-html from v2.3.1 to v2.3.2. 163* Updated wikimedia/shellbox from v1.0.4 to v2.0.0. 164* Updated wikimedia/wait-condition-loop from v2.0.1 to v2.0.2. 165* Updated zordius/lightncandy from v1.2.5 to v1.2.6. 166 167===== Changed development-only external libraries ===== 168* Updated qunit from 2.10.0 to 2.16.0. 169 170==== Removed external libraries ==== 171* The pimple/pimple development-only library has been removed. 172 173=== Action API changes in 1.37 === 174* (T280806) The API methods for fetching tokens which were deprecated in 175 MediaWiki 1.24 have been removed. action=query&meta=tokens&type= should be 176 used instead. Please note some token types no longer exist, and you should 177 just use type=csrf for those instead. 178 - action=query&prop=info&intoken -> 179 action=query&meta=tokens&type=csrf 180 - action=tokens&type= -> 181 action=query&meta=tokens&type= 182 - action=query&list=recentchanges&rctoken -> 183 action=query&meta=tokens&type=csrf 184 - action=query&prop=revisions&rvtoken=rollback -> 185 action=query&meta=tokens&type=rollback 186 - action=query&meta=userinfo&uiprop=preferencestoken -> 187 action=query&meta=tokens&type=csrf 188 - action=query&list=users&ustoken=userrights -> 189 action=query&meta=tokens&type=userrights 190 191=== Languages updated in 1.37 === 192MediaWiki supports over 350 languages. Many localisations are updated regularly. 193Below only new and removed languages are listed, as well as changes to languages 194because of Phabricator reports. 195 196* (T280435) LRM and RLM characters were removed from names of languages with 197 parentheses in Names.php 198* (T283422) Add namespace name translations and change the autonym of 199 the Kinyarwanda language to "Ikinyarwanda". 200* (T283423) Change the autonym of the Lombard language from "lumbaart" 201 to "lombard". 202* (T279619) Added language support for Dagbani (dag). 203* (T282085) Added language support for Malay in Arabic (Jawi) script (ms-arab). 204* (T283053) Added language support for Ojibwe (ojb). 205* (T283480) Added language support for Wallisian (wls, Fakaʻuvea). 206* (T284002) Added language support for Paiwan (pwn). 207* (T284044) Added language support for Carpathian Romani (rmc). 208* (T286460) Added language support for Gun (guw, Gungbe). 209* (T287345) Added language support for Baoulé (bci). 210* (T290126) Added language support for Kildin Sami (sjd). 211* (T290408) Added language support for Pite Sami (sje). 212* (T25216) Started the renaming of the language code for Norman from nrm to 213 nrf. 214 215=== Breaking changes in 1.37 === 216* The Revision class, emitting deprecation warnings since 1.35, was removed 217 entirely. As part of this, the following hooks that included a Revision object 218 were removed: 219 - ArticleRevisionUndeleted - use RevisionUndeleted 220 - ArticleRollbackComplete - use RollbackComplete 221 - DiffRevisionTools - use DiffTools 222 - DiffViewHeader - use DifferenceEngineViewHeader 223 - HistoryRevisionTools - use HistoryTools 224 - NewRevisionFromEditComplete - use RevisionFromEditComplete 225 - PageContentInsertComplete - use PageSaveComplete 226 - PageContentSaveComplete - use PageSaveComplete 227 - ParserFetchTemplate - use BeforeParserFetchTemplateRevisionRecord 228 - RevisionInsertComplete - use RevisionRecordInserted 229 - TitleMoveComplete - use PageMoveComplete 230 - TitleMoveCompleting - use PageMoveCompleting 231 - UndeleteShowRevision - no replacement 232 - UserRetrieveNewTalks - no replacement 233 … the following methods and variables have been removed: 234 - Article::$mRevision 235 - Article::getRevisionFetched() 236 - ContribsPager::tryToCreateValidRevision() 237 - EditPage::$mBaseRevision 238 - EditPage::getBaseRevision() 239 - LinksUpdate::getRevision() 240 - LinksUpdate::setRevision() 241 - PageArchive::getArchivedRevision() 242 - PageArchive::getPreviousRevision() 243 - PageArchive::getRevision() 244 - Parser::$mRevisionObject 245 - Parser::fetchCurrentRevisionOfTitle() 246 - Parser::getRevisionObject() 247 - Parser::statelessFetchRevision() 248 - ParserOptions::getCurrentRevisionCallback() 249 - ParserOptions::setCurrentRevisionCallback() 250 - Title::countAuthorsBetween() 251 - Title::getFirstRevision() 252 - User::getNewMessageLinks() 253 - User::getNewMessageRevisionId() 254 - User::setNewtalk() 255 - WikiPage::getOldestRevision() 256 - WikiPage::getRevision() 257 - WikiPage::getUndoContent() 258 - WikiPage::updateIfNewerOn() 259 … and the following methods no longer accept Revision objects as parameters: 260 - CategoryMembershipChange::__construct() 261 - ContentHandler::getUndoContent() 262 - DerivedPageDataUpdater::prepareUpdate() 263 - DifferenceEngine::getRevisionHeader() 264 - Linker::buildRollbackLink() 265 - Linker::generateRollback() 266 - Linker::getRevDeleteLink() 267 - Linker::getRollbackEditCount() 268 - Linker::revComment() 269 - Linker::revUserLink() 270 - Linker::revUserTools() 271 - WikiPage::doDeleteUpdates() 272 - WikiPage::doEditUpdates() 273 - WikiPage::hasDifferencesOutsideMainSlot() 274 - WikiPage::onArticleEdit() 275 - WikiPage::prepareContentForEdit() 276 - WikiPage::updateRevisionOn() 277 The following methods return arrays that formerly included a 'revision' 278 key that would emit deprecation warnings when accessed and return a 279 Revision object. The Revision object has been removed from the arrays, 280 and the 'revision-record' key should be used to get the relevant 281 RevisionRecord instead: 282 - PageUpdater::doCreate() 283 - PageUpdater::doModify() 284 - Parser::statelessFetchTemplate() 285 - WikiPage::doEditContent() 286 Finally, the ParserOptions `templateCallback` option is a callback that is 287 called in Parser::fetchTemplateAndTitle() and should return an array - the 288 'revision' key to that array used to be a Revision object and was used if 289 no 'revision-record' was returned - is now ignored. 290* Previously, the classes RevisionTestModifyableContent and 291 RevisionTestModifyableContentHandler were loaded for use in tests, but were 292 only used within the tests for the since-removed Revision class. This content 293 and content handler class were removed without deprecation. 294* WANObjectCache::HOLDOFF_NONE, deprecated since 1.35, was removed. Use 295 WANObjectCache::HOLDOFF_TTL_NONE instead. 296* Calling ResourceLoader::makeVersionQuery() without $modules parameter, 297 deprecated since MediaWiki 1.34, is no longer supported. 298* LocalFile::recordUpload2(), deprecated since 1.35, was removed. 299* The following methods and fields in the Language class, deprecated since 1.35, 300 have been removed: 301 - ::classFromCode() 302 - ::clearCaches() 303 - ::convertTitle() 304 - ::findVariantLink() 305 - ::$mConverter 306 - ::updateConversionTable() 307* The following methods in the Parser class have been removed after having been 308 deprecated in 1.35: 309 - fetchTemplate() 310 - Title() 311* (T273354) When an edit is prevented by an 'EditFilterMergedContent' hook 312 handler without changing the status, the edit form will now be displayed. 313* User::clearNotification() which had been deprecated in 1.35 has been removed. 314 Use WatchlistManager::clearTitleUserNotification() instead. 315* User::getNewtalk() which had been deprecated in 1.35 has been removed. Use 316 TalkPageNotificationManager::userHasNewMessages() instead. 317* The Autopromote class, deprecated since 1.35, was removed. Use 318 UserGroupManager instead. 319* The CachedAction, SpecialCachedPage, CacheHelper, and ICacheHelper classes, 320 all emitting deprecation warnings since 1.36, have been removed. 321* The hooks BeforeHttpsRedirect, CanIPUseHTTPS and UserRequiresHTTPS, deprecated 322 in 1.35, were removed. 323* The TitleArrayFromResult hook, deprecated in 1.36, was removed. 324* The deprecated "es6-promise" alias ResourceLoader module has been removed. Use 325 the "es6-polyfills" module directly intead. 326* The deprecated "mediawiki.legacy.protect" ResourceLoader module, deprecated 327 since 1.36, has been removed. Use "mediawiki.action.protect" instead. 328* The JavaScript alias $j for references to jQuery, deprecated since 1.23, has 329 been removed. Use $ instead. 330* The AuthenticationProvider interface and the SessionProvider class no longer 331 extend the PSR LoggerAwareInterface concept, so they can't be typehinted as 332 LoggerAwareInterface. 333* User::getGrantName(), emitting deprecation warnings since 1.36, has been 334 removed. Use MWGrants::grantName() instead. 335* The following ApiBase methods, deprecated since 1.35, have been removed: 336 - ApiBase::explodeMultiValue 337 - ApiBase::parseMultiValue 338 - ApiBase::validateLimit 339 - ApiBase::validateTimestamp 340* The User::idCacheByName() public static field was removed without deprecation. 341 Instead of using it, get a UserIdentity by name from the UserIdentityLookup 342 service. 343* IDatabase::upsert() and IDatabase::replace() now only accept a single unique 344 key. Previously, a warning was issued if there were multiple unique keys 345 provided. 346* The MediaWiki:Autoblock_whitelist block exemption control was moved in 1.36 to 347 MediaWiki:Block-autoblock-exemptionlist. The backward-compatibility of reading 348 the old MediaWiki:Autoblock_whitelist page has now been dropped. 349* The following overridable methods in File hierarchy have changed signatures: 350 - File::deleteFile() - now accepts UserIdentity instead of User 351 - File::getDescription() - now accepts Authority instead of User 352 - File::userCan() - now accepts Authority instead of User 353 - LocalFile::deleteOldFile() - now accepts UserIdentity instead of User 354* The following global methods, each deprecated since 1.36, have been removed: 355 - wfAppendToArrayIfNotDefault() 356 - wfAcceptToPrefs() 357 - wfConfiguredReadOnlyReason() 358 - wfDebugMem() 359 - wfGetPrecompiledData() 360 - wfNegotiateType() 361* The following deprecated methods of the Title class have been removed: 362 - ::nameOf(), deprecated in 1.36 363 - ::getPreviousRevisionID(), deprecated in 1.34 364 - ::getNextRevisionID(), deprecated in 1.34 365 - ::getEarliestRevTime(), deprecated in 1.35 366* UploadBase::stashFile(), deprecated since 1.28, was removed. 367* wfGetRusage(), deprecated since 1.35, has been removed. 368* The following CLI options were removed from tests/phpunit.php: 369 - use-filebackend 370 - use-jobqueue 371 - use-bagostuff 372 The following options (inherited from Maintenance) were also removed: 373 - conf 374 - dbuser 375 - dbpass 376 - dbdefaultgroup 377 - globals 378 - memory-limit 379 - profiler 380 - server 381 The following options were changed to environment variables: 382 - wiki => PHPUNIT_WIKI 383 - use-normal-tables => PHPUNIT_USE_NORMAL_TABLES 384 - use-filebackend => PHPUNIT_USE_FILEBACKEND 385 - use-bagostuff => PHPUNIT_USE_BAGOSTUFF 386 - use-jobqueue => PHPUNIT_USE_JOBQUEUE 387 This is so that we can use the default PHPUnit entry point (T90875). 388* The PHPUNIT_REUSE_DB / --reuse-db option was removed from the phpunit.php 389 runner. It had been broken for at least three years already. The original use 390 case was speeding up tests on Oracle, but Oracle support was dropped several 391 releases ago. 392* The MediaWikiPHPUnitTest__endTestHook and MediaWikiPHPUnitTest__startTestHook 393 PHPUnit hooks were removed. MediaWikiHooksPHPUnitExtension was also removed. 394* EntryPoint::getTextFormatters() was made private without a deprecation period; 395 it had no known external callers. 396* DatabaseBlock::chooseBlock(), deprecated since 1.35, was removed. 397* SpecialPageFactory::getRestrictedPages(), deprecated since 1.36, was removed. 398* SpecialBlock::validateTarget(), deprecated since 1.36, was removed. 399* The PatchFileLocation trait was removed without deprecation. 400* ActorMigrationBase::getExistingActorId() and ::getNewActorId(), emitting 401 deprecation warnings since 1.36, were removed. 402* Hook handlers implementing the MediaWikiServicesHook hook are now prohibited 403 from having services injected. This is because by definition, this hook runs 404 before the service container is fully initialized. 405* The protected property LocalFile::$metadata was removed without deprecation. 406* WatchedItem::getUser(), emitting deprecation warnings since 1.36, has been 407 removed. 408* AuthManager::singleton(), emitting deprecation warnings since 1.36, has been 409 removed. 410* The AugmentPageProps class was removed without deprecation. It had no known 411 uses. 412* Html::infobox(), deprecated since 1.36, was removed. 413* ParserOptions::__construct() now requires that the first parameter is a 414 UserIdentity object - passing `null` used to fallback to the global 415 $wgUser but was deprecated since 1.36. 416* ParserOptions::newCanonical() no longer supports the first parameter being 417 null (or omitted entirely), which would fallback to the global $wgUser but 418 was deprecated since 1.35. 419* The SkinTemplatePreventOtherActiveTabs hook, deprecated in 1.35, was removed 420 entirely. 421* The SkinTemplateTabAction hook, deprecated in 1.35, was removed entirely. 422* The SkinTemplateBuildNavUrlsNav_urlsAfterPermalink hook, deprecated in 1.35, 423 was removed entirely. 424* The SkinTemplateToolboxEndHook, deprecated in 1.35, was removed entirely. 425* The following methods of RevisionStore class, formerly emitting deprecation 426 warnings, were removed: 427 - ::newMutableRevisionFromArray() 428 - ::loadRevisionFromPageId() 429 - ::loadRevisionFromTitle() 430 - ::loadRevisionFromTimestamp() 431 - ::listRevisionSizes() 432* LogEntry::getPerformer(), deprecated since 1.36, was removed along with 433 methods in sub-classes: DatabaseLogEntry, ManualLogEntry, RCDatabaseLogEntry. 434* Skin::getRelevantUser() now returns an instance of UserIdentity, and not 435 necessarily a User object. There is no known usages in MediaWiki ecosystem 436 that were not satisfied with UserIdentity. 437* Direct construction of MergeHistory class, deprecated since 1.35, is no longer 438 supported. Use MergeHistoryFactory instead. MergeHistory::checkPermissions, 439 deprecated since 1.36, was removed. 440* Skin::generateDebugHTML(), deprecated since 1.35, was removed. Call 441 MWDebug::getHTMLDebugLog() directly. 442* The ApiTestCase class no longer interacts with the global $wgUser. 443 Previously, the global variable was set at the start of each test, and in 444 ApiTestCase::doApiRequest() if a performer was specified $wgUser was 445 updated to match, and if no performer was specified $wgUser was used 446 instead. Now, $wgUser is not updated, and if no performer is specified 447 the reusable TestUser object for the sysop is relied on. Extensions 448 or skins that rely on the global $wgUser variable (which has been 449 deprecated since 1.35) should instead retrieve the acting user from the 450 relevant context source. 451* SkinTemplate::makeArticleUrlDetails(), deprecated since 1.35, was removed. 452* Skin::makeNSUrl(), deprecated since 1.35, was removed. 453* Skin::getRevisionId(), deprecated since 1.34, was removed. Use 454 OutputPage::getRevisionId() instead. 455* Skin::isRevisionCurrent(), deprecated since 1.34, was removed. Use 456 OutputPage::isRevisionCurrent() instead. 457* AbstractBlock::parseTarget(), deprecated since 1.36, was removed. 458* The ArticleEditUpdates hook, deprecated since 1.35, was removed. 459* The `@stable to extend` class CentralIdLookup has following changes: 460 - The protected ::checkAudience() method now returns an Authority instead of a 461 User instance. 462 - A number of its `@stable to override` methods now accept an Authority 463 instead of a User instance as the $audience parameter. 464 - A number of methods now accept a UserIdentity instead of their User 465 parameter. 466 - The ::localUserFromCentralId() method now returns UserIdentity and not 467 necessarily a User object. 468 All extensions that extend this class or use this method were updated to be 469 ready to the new behavior. 470* WatchedItemStoreInterface::enqueueWatchlistExpiryJob(), deprecated since 1.36, 471 was removed. 472* ResultWrapper is now abstract. It cannot be directly constructed (T286694). 473* The SecondaryDataUpdates hook, deprecated in 1.32, was removed entirely. 474* Content::getDeletionUpdates(), was removed. Use 475 ContentHandler::getDeletionUpdates() instead. 476* Content::getSecondaryDataUpdates(), was removed. Use 477 ContentHandler::getSecondaryDataUpdates() instead. 478* wfDiff(), deprecated since 1.25, has been removed. 479* Language::$mLangObjCache, deprecated since 1.35, was removed. 480* Language::$transformData, deprecated since 1.35, was removed. 481* Language::transformUsingPairFile() was marked @internal. Its deprecated 482 parameters are no longer supported. 483* SpecialMute::getTarget(), unused outside of the SpecialMute class, was 484 made private. 485* The Skin::setupSkinUserCss() method, deprecated in 1.32, was removed. Please 486 use skin registration instead. 487* The ResourceLoaderSkinModule `legacy`, `content` and `content-thumbnails` 488 features were deprecated. Skins should instead select from the features 489 listed on [[mw:Manual:ResourceLoaderSkinModule]]. 490* ParserCache::getKey() and ::getEtag(), deprecated since 1.36, were removed. 491* The BaseTemplateToolbox hook, deprecated since 1.35, was removed. 492* Previously a capitalize-all-nouns class was added to the body element of 493 languages where nouns must be capitalized. This class is no longer added to 494 the body tag and must be provided by skins. 495* The SkinTemplateOutputPageBeforeExec hook, deprecated since 1.35, was removed. 496* Calling Message::toString() without a parameter, which triggered deprecation 497 warnings since 1.36, is no longer supported. You can instead use the explicit 498 formatting methods directly, such as Message::text() and Message::escaped(). 499* Article::getContentObject(), deprecated since 1.32, was removed. 500* Article::delete(), Article::confirmDelete() and ImagePage::delete() were 501 removed. The logic responsible for building the form is being 502 moved to DeleteAction, while the actual deletion logic will be moved to a 503 separate service. 504* WikiImporter::debugRevisionHandler(), unused and for debug only, was removed. 505* Content::preloadTransform() now emits deprecation warnings. Instead, please 506 use ContentTransformer::preloadTransform(). Extensions defining a content 507 model should override ContentHandler::preloadTransform(). 508* Content::preSaveTransform() now emits deprecation warnings. Instead, please 509 use ContentTransformer::preSaveTransform() instead. Extensions defining 510 a content model should override ContentHandler::preSaveTransform(). 511* Constructing WikiPage objects from Title instances that cannot exist, emitting 512 deprecation warnings since 1.36, now throws an exception. Additionally, 513 WikiPage now implements ProperPageIdentity, rather than just PageIdentity. 514* The Skin::bottomScripts() method is deprecated. Please instead use 515 OutputPage::getBottomScripts(). 516* LinksUpdate::getTriggeringUser() now returns ?UserIdentity instead of ?User. 517* The LESS mixin `.box-shadow()` (from mediawiki.mixins.less), deprecated since 518 1.36, was removed. Use CSS property `box-shadow` unprefixed for all basic 519 supported browsers instead. 520* The LESS mixin `.flex()` now no longer tries to support the 2009 version of 521 the Flexbox specification; support for the 2012 and modern standard versions 522 remains unchanged. 523* The StorageAwareness::ATTR_SYNCWRITES, StorageAwareness::QOS_SYNCWRITES_*, 524 StorageAwareness::ATTR_LOCALITY, and StorageAwareness::QOS_LOCALITY_* 525 constants were removed. 526 527=== Deprecations in 1.37 === 528* JobQueue::getWiki(), deprecated in 1.33, now emits deprecation warnings. 529* AbstractBlock::getTargetAndType() and ::getTarget() now emit deprecation 530 warnings. Use ::getTargetName() and ::getTargetUserIdentity() together with 531 ::getType(). 532* Passing a UserIdentity to WatchlistManager::clearAllUserNotifications() and 533 WatchlistManager::clearTitleUserNotifications() is now deprecated. Pass an 534 Authority instead. 535* Passing LinkTarget to WatchlistManager::clearTitleUserNotifications() and 536 WatchlistManager::getTitleNotificationTimestamp(). Pass PageIdentity instead. 537* The User class methods ::isWatched(), ::isTempWatched(), ::removeWatch(), and 538 ::addWatch() have been deprecated. Use corresponding methods in 539 WatchlistManager instead. 540* Multiple WatchAction methods have been deprecated in lieu of WatchlistManager: 541 - ::doWatchOrUnwatch() use WatchlistManager::setWatch() 542 - ::doWatch() -> WatchlistManager::addWatch() 543 - ::doUnwatch() -> WatchlistManager::removeWatch() 544* WatchAction::getWatchToken() now emits deprecation warnings. Instead use 545 CsrfTokenSet::getToken(). 546* Action::getHookContainer() has been marked as internal. Actions that require 547 access to a hook container should have one injected instead. 548* The ::getTitle() and ::setTitle() methods in Parser have been deprecated. 549 Use ::getPage() and ::setPage() instead. 550* Title::isWatchable() has been deprecated. Use WatchlistManager::isWatchable() 551 instead. 552* Methods and classes related to the primary database, previously referred to as 553 'master', have been deprecated, with the new ones replacing them as follows: 554 - The DBMasterPos and MySQLMasterPos classes have been respectively renamed to 555 DBPrimaryPos and MySQLPrimaryPos. 556 - LocalRepo::getMasterDB() -> ::getPrimaryDB() 557 - ForeignDBRepo::getMasterDB() -> ::getPrimaryDB() 558 - JobQueueDB::getMasterDB() -> ::getPrimaryDB() 559 - ForeignDBViaLBRepo::getMasterDB() -> ::getPrimaryDB() 560 - DBFileJournal::getMasterDB() -> ::getPrimaryDB() 561 - ILoadBalancer::getMasterPos() -> ::getPrimaryPos() 562 - IDatabase::getMasterPos() -> ::getPrimaryPos() 563 - ILoadBalancer::finalizeMasterChanges() -> ::finalizePrimaryChanges() 564 - ILoadBalancer::approveMasterChanges() -> ::approvePrimaryChanges() 565 - ILoadBalancer::beginMasterChanges() -> ::beginPrimaryChanges() 566 - ILBFactory::beginMasterChanges() -> ::beginPrimaryChanges() 567 - ILoadBalancer::commitMasterChanges() -> ::commitPrimaryChanges() 568 - ILBFactory::commitMasterChanges() -> ::commitPrimaryChanges() 569 - IDatabase::getTopologyRootMaster() -> ::getTopologyRootPrimary() 570 - IDatabase::masterPosWait() -> ::primaryPosWait() 571 - ILoadBalancer::runMasterTransactionIdleCallbacks() -> 572 ::runPrimaryTransactionIdleCallbacks() 573 - ILoadBalancer::runMasterTransactionListenerCallbacks() -> 574 ::runPrimaryTransactionListenerCallbacks() 575 - ILoadBalancer::rollbackMasterChanges() -> ::rollbackPrimaryChanges() 576 - ILBFactory::rollbackMasterChanges() -> ::rollbackPrimaryChanges() 577 - ILoadBalancer::flushMasterSnapshots() -> ::flushPrimarySnapshots() 578 - ILoadBalancer::hasMasterConnection() -> ::hasPrimaryConnection() 579 - ILoadBalancer::hasMasterChanges() -> ::hasPrimaryChanges() 580 - ILBFactory::hasMasterChanges() -> ::hasPrimaryChanges() 581 - ILoadBalancer::lastMasterChangeTimestamp() -> ::lastPrimaryChangeTimestamp() 582 - ILoadBalancer::hasOrMadeRecentMasterChanges() -> 583 ::hasOrMadeRecentPrimaryChanges() 584 - ILBFactory::hasOrMadeRecentMasterChanges() -> 585 ::hasOrMadeRecentPrimaryChanges() 586 - ILoadBalancer::pendingMasterChangeCallers() -> 587 ::pendingPrimaryChangeCallers() 588 - ILoadBalancer::forEachOpenMasterConnection() -> 589 ::forEachOpenPrimaryConnection() 590 - ILoadBalancer::waitForMasterPos() -> ::waitForPrimaryPos() 591 - Database::assertIsWritableMaster() -> ::assertIsWritablePrimary() 592 - RevDelList::reloadFromMaster() -> ::reloadFromPrimary() 593 - ExternalStoreDB::getMaster() -> ::getPrimary() 594 - DatabaseMysqlBase::getMasterServerInfo() -> ::getPrimaryServerInfo() 595 - MWExceptionHandler::rollbackMasterChangesAndLog() -> 596 ::rollbackPrimaryChangesAndLog() 597* wfGetLB(), deprecated since 1.27, now emits deprecation warnings. 598* wfLocalFile(), deprecated since 1.34, now emits deprecation warnings. 599* wfFindFile(), deprecated since 1.34, now emits deprecation warnings. 600* wfIncrStats(), deprecated in 1.36, now emits deprecation warnings. 601* wfCanIPUseHTTPS() is now deprecated, and always returns true. 602* The UserLoadFromDatabase hook has been deprecated. It had no known uses. 603* The following methods in ApiPageSet have been deprecated: 604 - ::getTitles(), use ::getTargets() instead. 605 - ::getGoodTitles(), use ::getGoodPages() instead. 606 - ::getMissingTitles(), use ::getMissingPages() instead. 607 - ::getGoodAndMissingTitles(), use ::getGoodAndMissingPages() instead. 608 - ::getRedirectTitles(), use ::getRedirectTargets() instead. 609 - ::getSpecialTitles(), use ::getSpecialPages() instead. 610* The following methods from the User class, deprecated in 1.35, now each emit 611 deprecation warnings: 612 - ::getOptions() 613 - ::isIP() 614 - ::isUsableName() 615 - ::isCreatableName() 616 - ::getCanonicalName() 617 - ::addAutopromoteOnceGroups() 618 - ::getEffectiveGroups() 619 - ::getAutomaticGroups() 620 - ::getFormerGroups() 621 - ::getIntOption() 622 - ::getBoolOption() 623* The following methods in User were deprecated: 624 - ::idFromName() - use UserIdentityLookup::getUserIdentityByName() instead. 625 - ::resetIdByNameCache() - in tests, reset service container. No replacement 626 needed in production code. 627* Use of ActorMigration for any table except revision, deprecated in 1.34, now 628 emits deprecation warnings. Instead of getInsertValues(), use 629 ActorNormalization::acquireActorId(). Instead of getWhere() and getJoin(), 630 do your own join on the actor table. 631* DatabasePostgres::remappedTableName() and its dependent constructor parameter 632 'keywordTableMap' are deprecated. Reserved identifiers that are used as table 633 names should be quoted where necessary. 634* LinkCache::singleton(), deprecated since 1.28, now emits deprecation warnings. 635* MessageCache::singleton(), deprecated since 1.34, now emits deprecation 636 warnings. 637* LockManagerGroup::singleton() and ::destroySingletons(), deprecated since 638 1.34, now emit deprecation warnings. 639* HtmlFileCacheUpdate::newFromTitles() is now deprecated and emitting warnings. 640 Use newFromPages() instead. 641* SessionProvider ::setLogger(), ::setManager(), ::setConfig(), and 642 ::setHookContainer() were deprecated. Use ::init() to inject dependencies, or 643 override ::postInitSetup() to do any custom post-initialization configuration. 644* AbstractAuthenticationProvider ::setLogger(), ::setManager(), ::setConfig(), 645 and ::setHookContainer() now emit deprecation warnings. Use ::init() to inject 646 dependencies, or override ::postInitSetup() to do any custom post- 647 initialization configuration. 648* User::isLoggedIn(), deprecated since 1.36, now emits deprecation warnings. Use 649 the method it wraps, User::isRegistered(), instead. 650* FileBackendGroup::singleton() and ::destroySingletons(), deprecated since 651 1.35, now emit deprecation warnings. 652* The first parameter of User::getBlock() should now be an integer using the 653 Authority::FOR_XXX constants. Providing a boolean is deprecated. 654* ApiBase::addBlockInfoToStatus() is deprecated for use by extensions. It is now 655 marked as @internal and may be deleted in the future. 656 It should not be necessary to call this method, Authority should be providing 657 all relevant information via a PermissionStatus object. 658* JobQueueGroup::singleton() was deprecated - use 659 MediaWikiServices::getJobQueueGroup() instead. 660* JobQueueGroup::destroySingletons() was deprecated. JobQueueGroups are now 661 automatically destroyed after tests. 662* LinkCache::addGoodLinkObj() has been deprecated, since it is prone to 663 corrupting the cache with invalid information. Use addGoodLinkObjFromRow() 664 instead. PHPUnit tests must use LinkCacheTestTrait::addGoodLinkObject(). 665* ContentHandler::getContentText() is now deprecated. Use Content::getText() 666 instead. 667* LinkCache::addLinkObj() has been deprecated, use PageStore::getPageForLink() 668 instead. 669* MediaWiki\User\UserNamePrefixSearch::search() previously accepted as its first 670 parameter either the string 'public' or a UserIdentity object, to filter 671 results for. It now expects an Authority object instead of UserIdentity, and 672 providing just a UserIdentity will now trigger a deprecation warning. 673* User::getRights(), deprecated since 1.34, now emits deprecation warnings. 674* User::changeableGroups() and ::changeableByGroup() now emit deprecation 675 warnings, use corresponding methods in UserGroupManager instead. 676* User::incEditCount() was deprecated in favor of the new method 677 UserEditTracker::incrementUserEditCount(). 678* RepoGroup::singleton(), ::destroySingleton() and ::setSingleton(), deprecated 679 since 1.34, now emit deprecation warnings. 680* RecentChange::getPerformer(), deprecated since 1.36, now emits deprecation 681 warnings. Use ::getPerformerIdentity() instead. 682* ContentHandler::cleanupHandlersCache(), deprecated since 1.35, now emits 683 deprecation warnings. 684* Category::getTitle() was deprecated in favor of Category::getPage() 685* File::getUser() method now emits deprecation warnings, along with its over- 686 rides in LocalFile and ForeignApiFile in favor of ::getUploader(). 687* SpecialBlock::checkUnblockSelf(), deprecated in 1.36, now emits deprecation 688 warnings. 689* (T284179) The mediawiki.viewport ResourceLoader module is deprecated. You can 690 now just use MutationObserver or InterSectionObserver directly, which are 691 widely available in all supported JavaScript browsers. 692* The following constructor options of DatabaseBlock class will now trigger 693 deprecation warnings: 694 - the 'byText' property with blocker's name, 695 - the 'by' property with blocker's ID, 696 For both of these, use the 'by' property with UserIdentity value instead. 697* The BeforeResetNotificationTimestamp hook was deprecated. 698* ArchivedFile::getUser() ::getRawUser() ::getRawUserText() were deprecated in 699 favor of ::getUploader.() ::getRawDescription() was deprecated in favor of 700 ::getDescription() with RAW audience parameter. 701* When calling LocalFile::newFromRow() or LocalFile::loadFromRow(), passing 702 extra fields not requested by ::getQueryInfo() will now trigger deprecation 703 warnings. This is to warn callers that deprefixing and automatic assignment of 704 such fields will not be done in a future version. 705* JobSpecification::getTitle() was deprecated without providing a replacement. 706 It wasn't used and job given the purpose of JobSpecification class it is not 707 needed. 708* The protected method File::getImageSize() is now deprecated. 709* BacklinkCache::get() was deprecated, use 710 BacklinkCacheFactory::getBacklinkCache() instead. 711* Title::getBacklinkCache() now emits deprecation warnings. Instead, use the 712 ::getBacklinkCache() method in the BacklinkCacheFactory service. 713* MediaHandler::getImageSize(), ::getMetadata(), and ::isMetadataValid() were 714 deprecated and should no longer be overridden. Instead, sub-classes should 715 override getSizeAndMetadata(). 716* Deprecated File::getMetadata(). Instead use ::getMetadataArray(), 717 ::getMetadataItem() and ::getMetadataItems(). 718* Message::title() has been deprecated; use Message::page() instead. 719* BaseTemplate::getAfterPortlet(), BaseTemplate::renderAfterPortlet(), and the 720 BaseTemplateAfterPortlet hook, which were deprecated in 1.35, 721 now emit deprecation warnings. 722* The LocalFile::getHistory() hook is deprecated. 723* Previously the Skin templateDirectory option inside skin.json had to be 724 relative to MediaWiki core. This should now be relative to the skin. 725* Calling WikiPage::prepareContentForEdit() without a UserIdentity is now 726 deprecated. 727* User::getEditTokenObject(), ::getEditToken(), and ::matchEditToken() were each 728 deprecated. Use CsrfTokenRepository, which is available via IContextSource, 729 instead. ::matchEditTokenNoSuffix() was deprecated without replacement. 730 It was introduced to be able to provide custom error message if the token 731 was submitted, but ending slashes were stripped by some ASCII mangling proxy. 732 Use ::matchToken() instead, such proxies are much less common now and there's 733 not much benefit in customising the error message. 734* ContentHandler::getForTitle(), deprecated since 1.35, now emits deprecation 735 warnings. 736* User::listOptionKinds(), deprecated since 1.35, now emits deprecation 737 warnings. 738* WikiPage::doEditContent(), deprecated since 1.32, now emits deprecation 739 warnings. 740* CentralIdLookup::factory() and ::factoryNonLocal() now emit deprecation 741 warnings; obtain an instance from MediaWikiServices instead. 742* The class RandomPage was renamed to SpecialRandomPage. The class RandomPage 743 is now deprecated. 744* BotPassword::invalidateAllPasswordsForCentralId() was deprecated. 745* BotPassword::removeAllPasswordsForCentralId() was deprecated. 746* The Title class members: $mTextform, $mUrlform, $mDbkeyform, $mNamespace, 747 $mInterwiki, and $mFragment have been deprecated to not be used directly. 748 Instead, their corresponding accessor methods should be used. 749* IDatabase::fetchObject(), ::fetchRow(), ::numRows(), ::numFields(), 750 ::fieldName(), ::freeResult() and ::dataSeek() are deprecated. Use the 751 corresponding methods in IResultWrapper instead. 752* ResultWrapper::unwrap(), DatabaseMysqlBase::fieldType() and 753 DatabasePostgres::fieldType() each now emit deprecation warnings. 754* Sub-classes implementing Database::doQuery() should return either boolean or 755 an IResultWrapper. To do otherwise will now trigger a deprecation warning. 756* User::getOptionKinds() and ::resetOptions(), both deprecated since 1.35, 757 now emit deprecation warnings. 758* The following methods in MWNamespace, all deprecated since 1.34, now emit 759 deprecation warnings: 760 - ::isMovable() 761 - ::isSubject() 762 - ::getTalk() 763 - ::getSubject() 764 - ::getAssociated() 765 - ::equals() 766 - ::subjectEquals() 767 - ::hasTalkNamespace() 768 - ::wantSignatures() 769 - ::isWatchable() 770 - ::getSubjectNamespaces() 771 - ::getTalkNamespaces() 772 - ::isCapitalized() 773 - ::hasGenderDistinction() 774 - ::isNonincludable() 775 - ::getNamespaceContentModel() 776 - ::getRestrictionLevels() 777 - ::getCategoryLinkType() 778* LogFormatter::styleRestricedElement() has been deprecated in favor of 779 LogFormatter::styleRestrictedElement() 780* The following hooks related to user preferences were deprecated: 781 - UserLoadOptions: use LoadUserOptions instead. 782 - UserSaveOptions: use SaveUserOptions instead. 783 - UserResetAllOptions: no replacement was provided, the hook is not used. 784* Title::isNamespaceProtected(), deprecated in 1.34, now emits deprecation 785 warnings. 786* UserSelectQueryBuilder::userIds(), ::userNames(), and ::userNamePrefix() has 787 been deprecated in favor of ::whereUserIds(), ::whereUserNames(), and 788 ::whereUserNamePrefix(). 789* Manually constructing a MovePage object, deprecated in 1.34, now emits 790 deprecation warnings. Use MovePageFactory instead. 791* The following deletion-related methods were deprecated: 792 - WikiPage::doDeleteArticleReal() (soft) - use DeletePage 793 - WikiPage::doDeleteArticleBatched() (soft) - no replacement 794 - WikiPage::isBatchedDelete() (soft) - use DeletePage 795 - WikiPage::doDeleteUpdates() (hard) - no replacement 796 - WikiPage::getDeletionUpdates() (hard) - no replacement 797 - Title::isBigDeletion (soft) - no replacement 798* Relying on PermissionManager or Authority to check for big deletions 799 was deprecated. This is now automatically checked if you use 800 DeletePage::deleteIfAllowed(). (T288759) 801* The userCan hook now emits deprecation warnings. Use the 802 getUserPermissionsErrors or getUserPermissionsErrorsExpensive hooks instead. 803* Parser::$mUser public access, and the methods ParserOptions::getUser() and 804 Parser::getUser() each now emit deprecation warnings. 805* The following methods in the Title class have been deprecated in favor of the 806 corresponding methods in the new RestrictionStore service (with different 807 names where indicated): 808 - ::areCascadeProtectionSourcesLoaded() 809 - ::areRestrictionsCascading() 810 - ::areRestrictionsLoaded() 811 - ::getAllRestrictions() 812 - ::getCascadeProtectionSources() 813 - ::getFilteredRestrictionTypes() 814 -> ::listAllRestrictionTypes() 815 - ::getRestrictionExpiry() 816 - ::getRestrictionTypes() 817 -> ::listApplicableRestrictionTypes() 818 - ::getRestrictions() 819 - ::isCascadeProtected() 820 - ::isProtected() 821 - ::isSemiProtected() 822 - ::loadRestrictionsFromRows() 823* The following Title methods have been deprecated with no direct public 824 replacement: 825 - ::deleteTitleProtection() 826 - ::getTitleProtection() 827 - ::flushRestrictions() 828 - ::loadRestrictions() 829* User::isAllowUsertalk() now emits deprecation warnings. Use User::getBlock() 830 and AbstractBlock::isUsertalkEditAllowed() instead. 831* Classes used by Preprocessor_DOM have been merged with classes used by 832 Preprocessor_Hash, as Preprocessor_DOM was removed in 1.35. 833 - PPDPart has been merged into PPDPart_Hash 834 - PPDStack has been merged into PPDStack_Hash 835 - PPDStackElement has been merged into PPDStackElement_Hash 836* By default, the global variable $wgUser is now an instance of the new class 837 StubGlobalUser rather than User, and the first time it is used it will emit 838 deprecation warnings (the $wgUser variable was deprecated in 1.35). For 839 extensions that read from this variable, please use a relevant ContextSource 840 instead, falling back to RequestContext::getMain() if none is available. 841* Collation::singleton() and ::factory() were deprecated; obtain an instance of 842 the CollationFactory from MediaWikiServices instead. 843* Title::getDefaultNamespace() has been deprecated to be removed because there 844 are no known callers/consumers. 845* With removal of the stub threshold feature, the following methods now emit 846 deprecation warnings: 847 - LinkRenderer::setStubThreshold() and ::getStubThreshold() - no replacement. 848 - LinkRendererFactory::createForUser() - calling ::create() is now sufficient 849 - ParserOptions::setStubThreshold() and ::getStubThreshold() - no replacement. 850 - User::getStubThreshold() - no replacement. 851* The ArticleDelete and ArticleDeleteComplete hooks were deprecated. Use 852 PageDelete and PageDeleteComplete instead. 853* The ArticleUndeleteLogEntry hook was deprecated without replacement. 854* The following LESS mediawiki.mixins have been deprecated: 855 - .box-sizing() 856 - .transform() 857 - .transform-origin() 858 - .transition() 859 - .transition-transform() 860* The `UndeleteForm::undelete` hook was deprecated. A new hook was 861 introduced, `PageUndelete`, that provides handlers with more information and 862 is also called for non-UI requests. The capability of replacing the 863 PageArchive object has been removed, as that violates the laws of nature. 864 865=== Other changes in 1.37 === 866* WatchlistManager::addWatch() and WatchlistManager::addWatchIgnoringRights(), 867 which replace User::addWatch(), now call the WatchArticle and 868 WatchArticleComplete hooks. 869* WatchlistManager::removeWatch() and 870 WatchlistManager::removeWatchIgnoringRights(), which replace 871 User::removeWatch(), now call the UnwatchArticle and UnwatchArticleComplete 872 hooks. 873* The overridable postInitSetup() method was added to the 874 AbstractAuthenticationProvider class. A provider can override postInitSetup() 875 to do any custom post-initialization configuration. 876* The overridable postInitSetup() method was added to the SessionProvider 877 class. A provider can override postInitSetup() to do any custom 878 post-initialization configuration. 879* The protected getConfig() method was added to the SessionProvider class. 880 Use SessionProvider::getConfig() to get a config. 881* The DBAccessBase class is deprecated. Classes that used to extend it 882 should get a load balancer (factory) injected in the constructor instead. 883* ActorNormalization::acquireActorId() now requires IDatabase parameter. 884 Not providing one emitted deprecation warnings since 1.36. 885* Anti-lock constants ALF_PRELOAD_LINK, ALF_NO_BLOCK_LOCK, ALF_NO_LINK_LOCK 886 and ALF_PRELOAD_EXISTENCE have been removed. They're unused since 1.25. 887* (T278036) CSS class 'mw-htmlform-field-autoinfuse' used by some forms has been 888 renamed to 'mw-htmlform-autoinfuse'. 889* User::newFromRow() does not accept pre-loaded user preferences under 890 $data['user_properties'] anymore. This optimization was not used. 891* The following files change the letter case of the file names: 892 - SpecialRandompage.php -> SpecialRandomPage.php 893 - SpecialRandomredirect.php -> SpecialRandomRedirect.php 894 - SpecialRandomrootpage.php -> SpecialRandomRootPage.php 895* Media files which are uploaded server side using the importImages.php 896 maintenance script will now have the "mw-server-side-upload" change tag. 897* (T284917) The stub threshold feature has been removed. 898* Skin::getPoweredBy() and Skin::getCopyrightIcon() have been deprecated as they 899 are only designed for use by skins extended BaseTemplate. You can move calls 900 to instead use BaseTemplate::getPoweredByHTML() and ::getCopyrightIconHTML() 901 respectively. 902* The SkinGetPoweredBy hook is deprecated. No replacement is provided. 903* HTMLTitleTextField didn't support interwiki titles well previously. 904 Starting with 1.37, HTMLTitleTextField has a new parameter, 'interwiki', 905 which can be used to control acceptance of interwiki titles. To provide 906 a transitional period, the default value ('interwiki' => null) ensures 907 MW will have the same behavior as before (logging a deprecation warning). 908 In 1.38, the default behavior will change to "interwiki links aren't allowed". 909 910== Compatibility == 911 912MediaWiki 1.37 requires PHP 7.3.19 or later, or PHP 7.4.3 or later, and the 913following PHP extensions: 914 915* ctype 916* dom 917* fileinfo 918* iconv 919* intl 920* json 921* mbstring 922* xml 923 924Support for PHP 8.0 is not yet complete. 925 926MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used, 927but support for them is somewhat less mature. 928 929The supported versions are: 930 931* MySQL 5.5.8 or later 932* PostgreSQL 9.4 or later 933* SQLite 3.8.0 or later 934 935== Online documentation == 936Documentation for both end-users and site administrators is available on 937MediaWiki.org, and is covered under the GNU Free Documentation License (except 938for pages that explicitly state that their contents are in the public domain): 939 940 https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation 941 942== Mailing list == 943A mailing list is available for MediaWiki user support and discussion: 944 945 https://lists.wikimedia.org/mailman/listinfo/mediawiki-l 946 947A low-traffic announcements-only list is also available: 948 949 https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 950 951It's highly recommended that you sign up for one of these lists if you're 952going to run a public MediaWiki, so you can be notified of security fixes. 953 954== IRC help == 955There's usually someone online in #mediawiki on irc.libera.chat. 956