1= MediaWiki 1.35 = 2 3MediaWiki 1.35 should mostly work on the recently released PHP 8.0, however 4it is not currently actively supported. Testing (on a development wiki!) is 5appreciated, and bugs with PHP 8.0 on MediaWiki 1.35 will be accepted. 6 7It is anticipated that in a later MediaWiki 1.35 point release, we can 8declare 1.35 as supporting PHP 8.0. 9 10PHP 8.0 workboard: https://phabricator.wikimedia.org/tag/php_8.0_support/ 11 12== MediaWiki 1.35.5 == 13 14This is a security and maintenance release of the MediaWiki 1.35 branch. 15 16=== Changes since MediaWiki 1.35.4 === 17* (T290697) Add symfony/polyfill-php80. 18* IcuCollation: Add some more icu to unicode version mappings. 19* ApiBase: Annotate deprecated constants individually. 20* PHPVersionCheck: Mark PHP 7.4.0 - 7.4.2 as buggy. 21* (T293044) installer: Fix 5th param to sourceFile() in DatabaseUpdater. 22* (T291127) Always encode spaces in cookie values as "%20". 23* Use LocalFile::getHookRunner instead of LocalFile::hookRunner. 24* HistoryBlobStub: add getLocation() to get $mOldId. 25* Fix checkStorage.php. 26* checkStorage: pass no parameters to WikiRevision::getContent(). 27* (T292763, CVE-2021-44854) SECURITY: Do not cache private wiki completion results. 28* (T294316) Revert "Mark ApiClientLogin/ApiLogin as requiring write mode". 29* (T250068) resources: Upgrade jQuery from 3.4.1 to 3.6.0. 30* (T250068) resources: Upgrade jquery-migrate from 3.1.0 (patched) to 3.3.2 31 (patched). 32* (T294796) JobQueueRedis: Replace deprecated zSize with zCard. 33* (T212428, T267468) Allow populateContentTables to continue when there are 34 bad blobs. 35* (T295191) ApiQuerySiteinfo: Fix "rightsinfo"/"url" when $wgRightsPage is 36 set. 37* Update pear/mail_mime to 1.10.11. 38* Update deprecated Guzzle Psr7 function calls. 39* Tweak error message for missing composer dependencies. 40* (T296112) Allow inserting new sections named '0'. 41* nukeNS: don't run purgeRedundantText() after every change. 42* (T225888) RollbackAction: fix missing pagetitle. 43* (T297322, CVE-2021-44858, CVE-2021-44857) SECURITY: Fix permissions checks in 44 undo actions. 45* (T297574, CVE-2021-45038) SECURITY: Fix permissions check in action=rollback. 46* (T34716, T297416) SECURITY: Require 'read' right for most actions. 47* (T271037, CVE-2021-44856) SECURITY: Fix use of EditFilterMergedContent hook when 48 changing content model. 49 50== MediaWiki 1.35.4 == 51 52This is a security and maintenance release of the MediaWiki 1.35 branch. 53 54=== Changes since MediaWiki 1.35.3 === 55* (T283394) Mark ApiClientLogin/ApiLogin as requiring write mode. 56* (T283273) Make postgres IRC channel point to libera.chat. 57* (T289108) ExtensionProcessor: Remove loaderScripts from extension.json 58 schemas. 59* (T281549) Installer: Fix mediawiki-announce auto subscription code. 60* FormatJson: Optimize encode() for supported PHP versions. 61* (T290398) renameRestrictions.php: Update protected_titles as well. 62* $wgMimeTypeBlacklist - This configuration array now prohibits the RFC 4329 63 form of JavaScript, 'application/javascript', as well as previous MIME types. 64* (T51097, T290273) resourceloader: Call getStyleFiles from 65 FileModule::getFileHashes. 66* (T277788) parser: Avoid calling ParserOptions::getOption() too many times. 67* (T285515, CVE-2021-41798) SECURITY: XSS vulnerability in Special:Search. 68* (T290379, CVE-2021-41799) SECURITY: ApiQueryBacklinks can cause a full 69 table scan. 70* (T284419, CVE-2021-41800) SECURITY: fix PoolCounter protection of 71 Special:Contributions. 72 73== MediaWiki 1.35.3 == 74 75This is a security and maintenance release of the MediaWiki 1.35 branch. 76 77=== Changes since MediaWiki 1.35.2 === 78* (T259685) SQLite compatibility with ZeroConf VisualEditor was fixed in 1.35.2. 79* (T196906, T242751) Fix the test MonologSpiTest::testDefaultChannel. 80* (T279964) Parser: Trim trailing whitespace as the last step in pre-save 81 transform. 82* (T278026) rdbms: Add DB_PRIMARY to replace DB_MASTER. 83* (T252853) Update updateSearchIndex.php to 2006+ standards. 84* (T276945) Define a batch size in maintenance/manageJobs.php. 85* (T276945) Implement JobQueueDB::getAllAbandonedJobs. 86* (T269676) authevents: strval() variables passed to status when logging. 87* (T280944) $wgIncludejQueryMigrate - This setting allows the jQuery Migrate 88 plugin to be disabled. It has been enabled by default since MediaWiki 1.27. 89* (T281584) apihelp-query+iwlinks-param-prop: s/interlanguage/interwiki/. 90* (T281635) Delete maintenance/cleanupAncientTables.php. 91* (T282133) RedisConnectionPool: Suppress phan issue. 92* (T281549) WebInstaller: Don't show the announce-l subscribe 93 checkbox temporarily. 94* (T278266) Fix annoying E_NOTICE about undefined 'alt' index in 95 Skin#makeFooterIcon. 96* (T264214) UserRightsProxy::addGroup has to be allowed to update the 97 old group as well, which is used for granting interwiki rights. 98* (T269776, T278266) getFooterIcons should not return empty arrays. 99* (T274966) Skip AvroFormatterTest::testSchemaNotAvailable on PHP 8.0. 100* phpunit: fail on warnings. 101* (T283247) Freenode -> Libera per wikimedia moving from 102 freenode to libera. 103* (T243124) Make phpunit:unit accept extension*.json to populate the classes. 104* (T142663) Add extension.json merge strategy "provide_default". 105* (T283540) HookContainer: Fix normalization of callback for static handler. 106* (T283464) Fix array order for array_replace_recursive merge strategy. 107* (T247223) Optimise MessageCache::isMainCacheable() for the single-message 108 case. 109* (T278579) Don't send headers on ob_end_clean(). 110* (T280226, CVE-2021-35197) SECURITY: Prevent blocked users from purging 111 pages. 112 113== MediaWiki 1.35.2 == 114 115This is a security and maintenance release of the MediaWiki 1.35 branch. 116 117MediaWiki 1.35.2 supports Composer 2.0. It is recommended to make sure your 118libraries are up to date on Composer 1.x, before running Composer 2.x. 119 120While normally running update.php isn't required for point releases, 121it is recommended to run it for 1.35.2 so that iwlinks.iwl_prefix is 122updated to take 32 characters. 123 124=== Changes since MediaWiki 1.35.1 === 125* (T270450) The confusingly-named User->isLoggedIn() method has been deprecated 126 in favour of the method it wraps, User->isRegistered(). 127* Upgrade pimple/pimple from 3.3.0 to 3.3.1 for PHP 8.0 support. 128* Upgrade seld/jsonlint from 1.7.1 to 1.8.3 for PHP 8.0 support. 129* Upgrade doctrine/dbal from 2.10.4 to 3.0.0 for PHP 8.0 support. 130* (T270734) Fix display of Special:Preferences URL in password reset email. 131* (T252774, T271441) resourceloader: Give SkinModule 'features' option an 132 extensible default. 133* (T271441) Unknown features shouldn't break style output. 134* (T264986) Make use of CURLMOPT_MAX_HOST_CONNECTIONS conditional on having 135 curl >= 7.30.0. 136* DefaultSettings.php: Update $wgPingback documentation. 137* Fix docs for LanguageConverter::translate. 138* (T272250) Don't rely on implicit string->int cast in comparison. 139* (T272327) Exif::isSlong: Cast input to float so PHP 8.0 abs() doesn't whine. 140* (T272328) UploadBase: Don't call MimeAnalyzer if mTempPath is null. 141* Remove nonfunctional default sampling for WANObjectCache metrics. 142* (T258851) Prevent service injection to LoadExtensionSchemaUpdates hook. 143* (T270852) Hooks: Map dash character to underscore when generating hook names. 144* (T271551, T270145) Fix fetching ipblock-exempt within 145 BlockManager::getUserBlock. 146* PHPVersionCheck: The PHP Group only supports PHP >= 7.3.0. 147* (T248925) Set empty closures in DatabaseTest to fix PHP 8 tests. 148* (T34217) rdbms: Remove outdated MySQL 4 references and fix doc URLs. 149* (T248925) Special:Contributions reports negative namespace error on PHP 8. 150* (T248925) objectcache: Fix non-numeric string check in HashBagOStuff for 151 PHP 8. 152* (T248925) Fix CacheTime::getCacheExpiry for PHP 8. 153* (T259685) Allow REST API POST handlers to opt out of mandatory SQLite locking. 154* (T91820, T259685) MWLBFactory: rename magic HTTP header for opting out of 155 SQLite write lock. 156* (T272326) Fix DeprecationHelperTest on PHP 8. 157* Upgrade wikimedia/less.php from 3.0.0 to 3.1.0 for PHP 8.0 support. 158* (T236639) OutputPage: Make $wgDebugRedirects work again. 159* (T274648) registration: Allow reusing cached metadata between wikis. 160* CdnCacheUpdate: Send full URL instead of path to Curl for purge. 161* Upgrade monolog/monolog from 1.25.3 to 2.2.0 for PHP 8.0 support. 162* FileBackend: Do not use SOCKET_ENOENT on windows. 163* (T275441) ApiQueryUserInfo: Allow all uiprops to be requested at once. 164* (T275261) Escape wikitext in the title in invalid title error messages. 165* (T275242) Extend iwlinks.iwl_prefix to VARBINARY(32) on MySQL. 166* (T246594, T270228) PHPVersionCheck: Complain about known-bad versions above 167 minimum. 168* (T275824) Upgrade wikimedia/composer-merge-plugin from 1.4.1 to 2.0.1 for 169 Composer 2.0 support. 170* (T269293) Record all used options in metadata. 171* Allow usage of Composer 2.0 to install MediaWiki's dependencies. 172* (T259872) skins: Call headElement() after getTemplateData() in SkinMustache. 173* (T277009, CVE-2021-30158) SECURITY: Allow blocked users to access 174 Special:ResetTokens. 175* (T272412) Add "Account data" section to user preferences. 176* (T268310) Add list of thumbnail urls to LocalFilePurgeThumbnails hook. 177* (T277520) registration: Allow specifying immovable namespaces in 178 extension.json. 179* (T275619) Maintenance::hasOption and Maintenance::getOption now behave as 180 documented and are not altered by previous calls to these methods. 181* (T254688) Remove page inner join from subquery in SpecialWhatLinksHere. 182* (T122124) signup: added help message for security. 183* (T278014, CVE-2021-30154) SECURITY: Escape mediastatistics-header-* messages 184 on Special:NewFiles. 185* (T278058, CVE-2021-30157) SECURITY: Escape rcfilters-filter-* messages on 186 ChangesList pages. 187* (T277414) HTMLFormField: Use non namespaced class name rather than 188 static::class. 189* (T268673) maintenance: Don't create SearchUpdate in rebuildtextindex.php 190 for page_namespace below 0. 191* (T246594, T270228) Mark ParserOptionsTests skipped on PHP 7.4.0-7.4.8. 192* (T268230) Switch to new MediaWiki logo by Serhio Magpie. 193* (T271735) Expand config-pingback-help, link to privacy policy in 194 config-pingback. 195* Fix documentation of user-global in $wgRateLimits. 196* BackupDumper: Add -o as shortcode for --output. 197* (T235554) Disable DEFER_SET_LENGTH_AND_FLUSH headers to avoid HTTP errors. 198* (T270713, CVE-2021-30152) SECURITY: Allow user to only apply protection they 199 have right to do so via action=protect. 200* (T272386, CVE-2021-30159) SECURITY: Non-admin deleted enwiki page in fast 201 double move. 202* (T270988, CVE-2021-30155) SECURITY: ContentModelChange: Check that user can 203 create pages. 204* (T279451, CVE-2021-30458) SECURITY: Parsoid comment fostering allows for 205 inserting mostly arbitrary <meta> tags. 206 207== MediaWiki 1.35.1 == 208 209This is a security and maintenance release of the MediaWiki 1.35 branch. 210 211While normally running update.php isn't required for point releases, 212it is recommended to run it for 1.35.1 so that sites.site_language is 213updated to take 35 characters. 214 215Watchlist Expiry is no longer considered experimental, but is off by default. 216To enable it, set $wgWatchlistExpiry = true; in your LocalSettings.php. 217 218=== Changes since MediaWiki 1.35.0 === 219* (T263929) purgeList.php Fix all-namespaces option to match one used in code. 220* (T248719) ParserCache::get - fix wfDeprecated call. 221* (T261430) WatchlistExpiryWidget: Move focus to expiry dropdown after hitting 222 Tab. 223* Preload mediawiki.watchstar.widgets before api request. 224* (T261030) ApiEditPage: Show existing watchlist expiry if status is not being 225 changed. 226* (T264502) Fix PHP 8 compat with strcspn() $length parameter exceeding string. 227* (T248925) Remove final modifier on private function. 228* (T264683) Remove ipb_anon_only from ipb_address_unique index addition. 229* (T261415) Add days left messages to changes-lists' clock icons. 230* Fix order of wfDeprecated parameters in ExternalStoreDB::getSlave. 231* (T261260) Preload class used in HeaderCallback. 232* (T260868, T260009) Normalize WatchedItem expiry field. 233* (T264683) Remove doTable check from (Mysql|Sqlite)Updater::indexHasFields. 234* (T264534) ApiPageSet: Avoid infinite loop when merging redirects. 235* (T196906) Empty Monolog loggers are now real blackholes. 236* (T258649) WatchAction: avoid UPDATE when old and new watch period is 237 indefinite. 238* Parser: Adjust typehint to show that getTitle can return null. 239* (T263592) media: Fix case of FlashPixVersion in 240 FormatMetadata::makeFormattedData(). 241* (T265223) BaseTemplate: Guard against passing zero arg to array_merge(). 242* (T264965) Fix base path handling for MessagePosterModule registration. 243* (T252183) Fix Database::getTempTableWrites for multi table DDLs. 244* (T182546) Fix switch/case indentation per mediawiki coding conventions. 245* Flip Yoda conditionals. 246* (T263213) Move SkinTemplate::getFooterLinks() to Skin. 247* build: Updating mediawiki/mediawiki-codesniffer to 33.0.0. 248* (T267105) Make ImageBuilder::checkMissingImage public. 249* Updating guzzlehttp/guzzle (6.5.4 => 6.5.5). 250* (T266681) Support new style hook registration on install and update. 251* (T266980) Fix unsetting of copyright icon in FooterIcons. 252* upload.js: Don't assume that warnings array will include 'code' key. 253* upload.js: Fix typo in upload API. 254* (T264333, T190988, T266903) Pass along ignorewarnings param to all 255 individual chunks being uploaded. 256* (T267558) importTextFiles.php: Replace deprecated WikiRevision:setText(). 257* (T266418) composer.json: add requirement for composer-plugin-api ^1.1. 258* (T261431) Add ARIA attributes to watchlink and its notification. 259* (T258877) Change invalid 'Content-Encoding: none' header. 260* Fix trailing ; in patch-sites-site_language-35.sql. 261* (T248852) wfAssembleUrl: Handle empty query field in URL bits. 262* (T268846) Updating wikimedia/testing-access-wrapper (1.0.0 => 2.0.0). 263* (T268887) migrateComments: Cast array keys back to string before passing 264 to the DB. 265* (T266619) Introduce new $wgThumbPath config. 266* (T269178) MemcachedClient: Cast Resource to integer. 267* (T263925) Use the old HookContainer to set up the post-reset services. 268* Change "site cache" to just "cache" in the right-purge message. 269* [UploadedFileStreamTest] Skip test with chmod. 270* (T269710) Updating composer/semver (1.5.1 => 1.7.2). 271* (T269710) Updating mediawiki/mediawiki-codesniffer (33.0.0 => 34.0.0). 272* (T260631, T260633), BotPassword::save() now returns a Status object for the 273 result rather than a bool. The length of the bot password grants and 274 restriction fields are now validated, and an error will be thrown if it 275 would be truncated by the database. 276* (T265778) Fix English/*nix specific error messages in FSFileBackend. 277* (T267543) Split dropping of image.img_user_timestamp. 278* [FileTest] Do not assume /tmp exists on windows. 279* Clean up temp files correctly after unit tests. 280* Skip undo related phpunit tests when diff3 is missing. 281* (T269964) rdbms: Remove outer parentheses in insert query for Postgres. 282* (T263911) In MWExceptionHandler::report(), catch all throwables. 283* (T268894, CVE-2020-35474) SECURITY: Use Html::element in 284 ChangeListSpecialPage for sanity. 285* (T268917) Use Xml::element in SpecialUserrights for sanity. 286* (T268938, CVE-2020-35478, CVE-2020-35479) SECURITY: Pass escaped html 287 to LogFormatter::makePageLink for sanity. 288* (T268938) Fixed mixed escaping in Language::translateBlockExpiry. 289* (T263911) UserOptionsManager: don't differentiate anons caches. 290* (T261260) HeaderCallback: pre-cache request ID. 291* Parsoid updated to v0.12.1. 292* (T205908, CVE-2020-35477) SECURITY: Unable to change visibility of log 293 entries when MediaWiki:Mainpage uses Special:MyLanguage. 294* (T120883, CVE-2020-35480) SECURITY: Divergent behavior for contributions 295 and user pages of hidden users and missing users. 296* (T270145) Fix condition that can lead to using APCOND_BLOCKED in 297 $wgAutopromote to cause an OOM in PHP. 298 299== MediaWiki 1.35.0 == 300 301=== Changes since MediaWiki 1.35.0-rc.3 === 302* (T261258) Remove checks for ancient ImageMagick versions in BitmapHandler. 303* (T260232) Don't include null page ids in query list for category dumps. 304* (T260009) Check existing watchitem when saving action=watch. 305* (T259055) Correct success messages for action=watch. 306* mediawiki.page.ready: Simpler tablesorter/makeCollapsible call. 307* mediawiki.page.ready: Fix skin override config flags, wrong way round. 308* (T262175, T248512) Remove requirement for ApiWatchlistTrait to be in ApiBase. 309* (T259053, T260434) Watchlist: Fix updateWatchLink removing css class when 310 action=watch. 311* (T261901, T261476) mediawiki.notification: Don't close notif when clicking 312 <select> element. 313* (T251506) Sanitizer: Truncate IDs to a reasonable length. 314* (T259452) Parsoid updated to v0.12.0. 315* (T261970) watch.ajax: Add expiry support to watchpage.mw event. 316* (T262900) Fix failure of rebuildLocalisationCache.php due to ResourceLoader 317 hook. 318* (T263014) Hard deprecate File::userCan() with $user=null. 319* (T262547) Use localized success message after watching via action=watch. 320* (T201491) Fix typo 'Watchlst' in `apihelp-edit-param-watchlistexpiry`. 321* (T261081) Installer: consistently reset Language objects. 322* (T250449, T250450) Installer: consistently reset Language objects. 323* Explicitly wrap some XML calls in libxml_disable_entity_loader(). 324* (T262934) Ensure dropdown label is always on its own line. 325* (T246855) resourceloader: Use a local HookRunner. 326* (T263604) Have findBadBlobs.php require Maintenance.php rather than 327 cleanupTable.inc. 328* (T263606) Set fake time, to avoid flaky tests. 329* (T261325) Add FindMissingActors script. 330* (T262364) shell: Don't blacklist /run/firejail. 331* (T263655) NewPagesPager: Ignore nonexistent namespaces. 332* Update specialPageAliases and magicWords for Egyptian Arabic (arz). 333* (T261347) ParserOutput: don't throw on bad editsection. 334* (T232568, CVE-2020-25813) SpecialUserrights: If a viewer lacks `hideuser`, 335 ignore hidden users. 336* (T255918, CVE-2020-25812) SECURITY: Unescaped message used in HTML on 337 Special:Contributions. 338* (T256171, CVE-2020-25815) SECURITY: Unescaped message used in HTML within 339 LogEventsList. 340* (T258763, CVE-2020-17367, CVE-2020-17368) SECURITY: Prevent invoking 341 firejail's --output functionality. 342* (T86738, CVE-2020-25814) SECURITY: mediawiki.jqueryMsg: Sanitize URLs and 343 'style' attribute. 344* (T115888, CVE-2020-25828) SECURITY: mediawiki.js: Escape HTML in 345 mw.message( ... ).parse(). 346* (T260485, CVE-2020-25869) SECURITY: ActorMigration: Load user from the correct 347 database. 348* (T260485, CVE-2020-25869) SECURITY: ensure actor ID from correct wiki is used. 349* Add Finnish special page aliases. 350* Fix GuzzleHttpRequest request headers. 351* Fix description for pruneFileCache.php. 352* emptyUserGroup.php: handle more than 5000 users. 353* Make ApiSandbox copyable URL absolute. 354* (T261087) Add a link from a deleted page to that page's logs. 355 356== MediaWiki 1.35.0-rc.3 == 357 358=== Changes since MediaWiki 1.35.0-rc.2 === 359* (T258662) mediawiki.visibleTimeout: Update the nextVisibleTimeoutId value. 360* Ensure Parsoid doesn't throw when <ref> is used w/o Cite installed. 361* Remove maintenance/createCommonPasswordCdb.php. 362* (T260468) Increase "sites.site_global_key" to varbinary(64). 363* (T183759) Fix shell edge-cases in Windows. 364* (T257879) Drop PHP 7.2 support; require 7.3.19. 365* (T251661, CVE-2020-25827) SECURITY: User::pingLimiter: add user-global 366 rate limit type. 367* (T246991) User: enforce pingLimiter() expiry time. 368* (T256831) Rest: Handle Uri constructor exception. 369* (T259094) Fix RequestFromGlobalsTest failing in Travis CI. 370* (T256831, T261344) Rest: Use try/catch to handle URIs with embedded colon. 371 372== MediaWiki 1.35.0-rc.2 == 373 374=== Changes since MediaWiki 1.35.0-rc.1 === 375* (T259693) uuid: Fix filenames on Windows. 376* Remove Gruntfile.js and package-lock.json from the tarball. 377* firejail: Strengthen by copying from Wikimedia's profile. 378* (T260059) ResourceLoaderOOUIImageModule: loadOOUIDefinition() may return 379 false. 380* (T30162, T245387) The installer supports using a Postgres server running 381 on a custom port other than 5432. 382* (T260201) Support private wikis in Parsoid zero configuration mode. 383* Fix bad use of `|=` PHP bit operation where `= … ||` bool is intended. 384* (T259212) SpecialBlock: Show error if a block could not be inserted or found. 385* (T255842) UserOptionsManager: fix options reset. 386* (T258649) WatchAction: avoid unnecessary UPDATEs when expiry is unchanged. 387* (T250851) Allow skins to override mediawiki.page.ready initialisation. 388* (T250851) mediawiki.page.ready: Allow skins to disable search lazy load. 389* (T253135, T255632) Update language in watchlist expiry. 390* Use IPset in MWRestrictions::checkIP. 391* (T259564) Fix race condition on edit page. 392* (T260759) Hide watchlist expiry label in edit form. 393* mime: Fix docs of MIME_EXTENSIONS, they're arrays, not space-seperated. 394* (T260031) Add application/font-sfnt to MimeMap for ttf files. 395* (T259379) WatchedItemStore: Cache single WatchedItems with preexisting expiry. 396* Add a maintenance script to create bot passwords. 397* (T201269) Add Traditional Chinese zh-hant as fallback for Amis (ami). 398* Improve wfParseUrl docs. 399* (T251038) Add multi index fields in ImageListPager for unique paginate. 400* (T259916) Guard against 'Widget not found' error. 401 402== MediaWiki 1.35.0-rc.1 == 403 404=== Changes since MediaWiki 1.35.0-rc.0 === 405* (T252136) Fix RecentChanges watchlist filters when WatchlistExpiry is off. 406* (T258662) Update time period for watchlist expiry pop-up. 407* (T258443) Fix expiry dropdown not getting disabled on edit page. 408* (T259398) Add license information for promise-polyfill. 409* Remove executable bit from scripts without shebang. 410* (T256526) Fix bold of watched items on Special:RecentChangesLinked. 411* (T259060) Edit page expiry dropdown should keep state after 412 disabling/enabling. 413* (T259009) Translate expiry period in pop-up message for watchlist expiry. 414* (T258310) Add watchlist clock icon to RecentChanges. 415* (T259362) Permit temporary table writes on replica DB connections. 416* (T250214) Add UI support in Special:EditWatchlist for watchlist expiry. 417* (T72470) Disable wgLegacyJavaScriptGlobals by default. 418* (T130906) Add Edge to MediaWiki:Clearyourcache. 419* (T257279) Add mediawiki.ui Less variable deprecation note. 420* (T249521) Fixed reassignEdits.php to work with anonymous users. 421* (T259448) Fix Circular dependency when creating service in 422 DBLoadBalancerFactory. 423* (T257259) Default to using watchlist expiry of old page when moving pages. 424 425== MediaWiki 1.35.0-rc.0 == 426 427== Upgrading notes for 1.35 == 4281.35 requires PHP 7.3.19 or above (up from 7.2.9). (T257879) 429 4301.35 has several database changes since 1.34, and will not work without schema 431updates. Note that due to changes to some very large tables like the revision 432table, the schema update may take quite long (minutes on a medium sized site, 433many hours on a large site). 434 435Don't forget to always back up your database before upgrading! 436 437MediaWiki 1.35 is the next LTS after 1.31, and will be supported for around 3 438years. 439 440MediaWiki has a lot of both soft and hard deprecations, and code removed. As 441always, make sure your versions of extensions match the MediaWiki version, 442and updates may be required to any custom extensions. 443 444See the file UPGRADE for more detailed upgrade instructions, including 445important information when upgrading from versions prior to 1.11. 446 447Some specific notes for MediaWiki 1.35 upgrades are below: 448* (T259685) When using SQLite as the database backend for MediaWiki, 449 Zeroconf (zero-configuration) VisualEditor/Parsoid only works with 450 MediaWiki 1.35.2 and above. It is still recommended to use 451 MySQL/MariaDB rather than SQLite when using VisualEditor. 452 453For notes on 1.34.x and older releases, see HISTORY. 454 455=== Configuration changes for system administrators in 1.35 === 456 457* (T72470) $wgLegacyJavaScriptGlobals is now false by default. This feature 458 will be completely removed in a later MediaWiki release. 459 460==== New configuration ==== 461* $wgDiffEngine — This can be used to specify the difference engine to use, 462 rather than MediaWiki choosing the first of $wgExternalDiffEngine, wikidiff2, 463 or php that is usable. 464* $wgSearchMatchRedirectPreference — This configuration setting controls whether 465 users can set a new preference, search-match-redirect, which decides if search 466 should redirect them to exact matches is available. By default, this is set to 467 false, which maintains the previous behaviour without preference bloat. Change 468 your site's default by setting $wgDefaultUserOptions['search-match-redirect']. 469* $wgPoolCounterConf['SpecialContributions'] — Per-user concurrency in the use 470 of SpecialContributions can now be limited by setting this appropriately. 471* $wgPasswordPolicy — PasswordCannotBeSubstringInUsername is a new password 472 policy check. Similar to the existing PasswordCannotMatchUsername check, this 473 check ensures that a user's (case-insensitive) password cannot be a part of 474 their username. e.g. password = MyPass, username = ThisUsersPasswordIsMyPass. 475* $wgLogos — This new configuration setting combines the now-deprecated $wgLogo 476 and $wgLogoHD settings into a single, associative array. It provides support 477 for a new key, 'wordmark', for setting a horizontal wordmark to show next to 478 the graphical logo. To do this, set 'wordmark' to an array with 'src' set to 479 the path of the wordmark image, and 'width' and 'height' for its dimensions 480 in pixels. $wgLogos inherits the existing support provided by its predecessor 481 settings: '1x' mapping to the path of the logo as a 135x135px raster image 482 (equivalent to $wgLogo), and '1.5x', '2x', and 'svg' operating as before for 483 $wgLogoHD. If $wgLogos is unset, $wgLogo and $wgLogoHD values are read for 484 temporary backwards compatibility. (T232140) 485* $wgWatchlistExpiry — (EXPERIMENTAL) This enables the new watchlist expiry 486 feature. The database table (watchlist_expiry) for this is created regardless 487 of this setting, but all other aspects of the expiry feature are controlled 488 by it. Enabling in production is discouraged for the time being. A future 489 MediaWiki 1.35 release will advertise this feature once it is stable. 490* $wgWatchlistPurgeRate — This sets the chance of expired watchlist items being 491 purged on each page edit. Only has effect if $wgWatchlistExpiry is true. 492* $wgWatchlistExpiryMaxDuration — This is the maximum definite relative duration 493 for watchlist expiries. Only has effect if $wgWatchlistExpiry is true. 494* $wgImgAuthPath – This can be used to override the path prefix used when 495 handling img_auth.php requests. (T235357) 496* $wgAllowedCorsHeaders — This is a list of headers which can be used in a 497 cross-site API request. 498* $wgHTTPMaxTimeout and $wgHTTPMaxConnectTimeout — These allow site 499 administrators to limit the timeouts used by the HTTP client libraries. 500 This only affects callers using HttpRequestFactory and the deprecated 501 wrappers in the Http class. 502* $wgCdnMaxageStale — This controls the Cache-Control s-maxage header for page 503 views when PoolCounter lock contention indicates that a stale cache entry 504 should be sent. 505* $wgForceHTTPS — This makes the HTTP to HTTPS redirect be unconditional and 506 suppresses various hacks needed to support mixed HTTP/HTTPS wikis. We 507 recommend this be set to true on pure HTTPS wikis. 508* $wgCookieSameSite — This setting allows login cookies to be sent with 509 SameSite=None. This is required for cross-site CentralAuth auto-login after 510 Chrome 84. 511* $wgUseSameSiteLegacyCookies — This adds a compatibility hack to 512 SameSite=None cookies for browsers which implemented an incompatible draft 513 version of the specification. 514 515==== Changed configuration ==== 516* $wgResourceLoaderMaxage (T235314) — This configuration array controls the 517 max-age for HTTP caching through the Cache-Control header. It has uses the 518 "versioned" key for urls that do have a version parameter, and the 519 "unversioned" key for urls without a version parameter. The sub keys for 520 "client" and "server" are no longer supported in MediaWiki 1.35. 521* $wgEnableOpenSearchSuggest — This boolean variable is deprecated and no longer 522 used. The OpenSearch API is now always enabled. 523* $wgAuthManagerConfig and $wgAuthManagerAutoConfig — These can now use the 524 'services' option in provider specifications. 525* $wgVirtualRestConfig['modules']['parsoid'] — 526 - The defaults have been updated. If you were relying on the default values, 527 you may need to update your configuration. 528 - The 'URL' parameter, previously allowed for backwards-compatibility, has 529 been deprecated. Use 'url' instead. 530* $wgXmlDumpSchemaVersion — Default is now set to XML_DUMP_SCHEMA_VERSION_11, so 531 dumps use the new dump format per default. Consumers of XML dumps should not 532 be affected if they ignore any unknown tags they encounter. Also, the format 533 is effectively unchanged for revisions that only contain the main slot. The 534 --schema-version option can be used with the dumpBackup.php script to set the 535 dump format. (T238921) 536* $wgParserConf — This configuration is now deprecated. It has been 537 effectively constant since 2008, and is ignored by core code. 538 Configure the ParserFactory service in order to customize the Parser used. 539* $wgAutoloadAttemptLowercase — This has been deprecated, and the default value 540 changed to false. 541* $wgAllowImageMoving — This configuration setting is now deprecated. Instead, 542 use $wgGroupPermissions; e.g., to revoke sysops' ability to move images use 543 $wgGroupPermissions['sysop']['movefile'] = false. 544* $wgAllowImageTag — This configuration is now deprecated; future parsers will 545 not support direct use of the HTML <img> tag in wikitext. 546* $wgUseTwoButtonsSearchForm — This has been deprecated. If you maintain a skin 547 that relies on this and wishes to let system administrators change it, you 548 should convert it to a config variable specific to your skin. If you're using 549 it to configure your wiki, you should check individual skins to see whether 550 they have local skin config for the feature and use that. 551* $wgPasswordPolicy — The deprecated policy 'PasswordCannotBePopular' has been 552 removed. Use PasswordNotInCommonList instead which covers many more passwords. 553* Backwards compatibility for using an associative array 554 (e.g. [ '127.0.0.1' => 'bad-ip' ]) for $wgProxyList has been removed. This 555 was deprecated since 1.30. Please convert these arrays to indexed/sequential 556 ones (e.g. [ '127.0.0.1' ]). 557* $wgShellRestrictionMethod — This now defaults to 'autodetect', which will 558 enable sandboxing for shell commands using firejail, if it's installed. To 559 disable restrictions, set it to false. 560* $wgLegacyJavaScriptGlobals – This deprecated setting now default to false, 561 instead of true, ahead of its planned removal. 562 563==== Removed configuration ==== 564* $wgSysopEmailBans — This setting, deprecated in 1.34, was removed. To let 565 sysops block email access, use $wgGroupPermissions['sysop']['blockemail']. 566* $wgDBWindowsAuthentication — This setting had no effect anymore after support 567 for SQL Server was removed in 1.34. (T230418) 568* $wgProfileOnly — This setting, deprecated in 1.23, was removed. The profiler 569 output should instead be configured via $wgProfiler['output']. 570* $wgProfileLimit — This setting, deprecated in 1.25, was removed. 571 Set $wgProfiler['threshold'] instead. 572* $wgDebugTimestamps — This setting was removed. It affected the text output 573 produced via $wgDebugComments, if enabled. 574* $wgSkipSkin — This setting, deprecated in 1.23, was removed. To disable a 575 skin from being shown, use $wgSkipSkins. 576* $wgUseSquid, $wgSquidServers, $wgSquidServersNoPurge, and $wgSquidMaxage — 577 These, deprecated in 1.34, have been removed. Use $wgUseCdn, $wgCdnServers, 578 $wgCdnServersNoPurge, or $wgCdnMaxAge instead. 579* $wgDisableCounters — This, deprecated in 1.25, was removed. The feature that 580 it controlled was already removed in 1.26, but the variable remained existent 581 with a value of `false` for backward-compatibility. 582* $wgMaxGeneratedPPNodeCount — This setting was removed. It only affected 583 Preprocessor_DOM, which was deprecated in 1.34 and removed in this release. 584* $wgFixArabicUnicode and $wgFixMalayalamUnicode — These, deprecated in 1.33, 585 were removed. The fixes are now always enabled for their respective languages. 586* $wgAllowTitlesInSVG — This, unused and deprecated since 1.34, was removed. 587* $wgEnablePartialBlocks — This setting, deprecated when it was added in 1.33, 588 was removed. Partial blocks are now always enabled. 589* $wgLocalInterwiki — This setting, deprecated in 1.23, has been removed. 590* $wgContentHandlerUseDB — This setting, deprecated in 1.34, has been removed. 591* $wgMultiContentRevisionSchemaMigrationStage — This setting must no longer 592 be set locally. If the migration stage was set to anything other than 593 SCHEMA_COMPAT_NEW locally, update.php must be run after removing the setting. 594 Usage of the setting in code is deprecated. The setting will be removed 595 completely in 1.36. 596* $wgEnableRestAPI — This setting is no longer obeyed by MediaWiki core, and 597 should not be set set locally. Usage of the setting in code is deprecated; it 598 is now set true by default. The setting will be removed completely in 1.36. 599* $wgObjectCaches — The 'slaveOnly' option for SqlBagOStuff, deprecated in 1.34, 600 was removed. Use 'replicaOnly' instead. 601 602=== New user-facing features in 1.35 === 603* (T204618) Whitelisted the aria-hidden HTML attribute for all elements in 604 wikitext. 605* (T13456) Special:EditPage, Special:PageHistory, Special:PageInfo, and 606 Special:Purge have been created as shortcuts for each action. 607 Special:EditPage/Foo redirects to title=foo&action=edit, with PageHistory, 608 PageInfo, and Purge corresponding to action= history, info, and purge 609 respectively. When linked to, its subpage is used as the target. Otherwise, 610 it displays a basic interface to allow the end user to specify the target 611 manually. 612* (T139221) The generated table of contents is now a navigation landmark role 613 for assistive technologies. 614* (T245931) interwiki map API doesn't report foreign language if 615 $wgInterwikiMagic=false 616* The form at ?action=watch has a new dropdown list to support expiry dates for 617 watchlist items (if $wgWatchlistExpiry is true). 618 619=== New developer features in 1.35 === 620* A Docker based local development develpoment environment configuration is 621 included (T238224) and DEVELOPERS.md has been added with usage documentation 622 and links to further help. 623* If CSP is enabled, extensions can now add additional sources using the 624 ContentSecurityPolicy::addDefaultSource, ::addStyleSrc and ::addScriptSrc 625 methods (e.g. $context->getOutput()->getCSP()->addDefaultSrc( 'example.com' )) 626* Extensions can now specify classes and namespaces to be autoloaded by the 627 test autoloader, by setting the "TestAutoloadNamespaces" and 628 "TestAutoloadClasses" properties in extension.json. (T196090) 629* (T250977) extension.json now allows "SearchMappings" which maps the canonical 630 name of the search engine (used in wgSearchType and wgSearchTypeAlternatives) 631 to a specification using the ObjectFactory specification. This allows 632 extensions to register Search Engines using namespaced classes. 633* Added getters for OutputPage's robot, index and follow policies; 634 getRobotPolicy() returns the entire policy as a string in the form 635 <index policy>,<follow policy> while getIndexPolicy() and getFollowPolicy() 636 return their respective policies as a string. 637* The ResourceLoaderSiteModulePages and ResourceLoaderSiteStylesModulePages 638 hooks were added to allow changing which wiki pages these modules contain. 639* The SkinFactory now allows skins to be specified as an ObjectFactory spec, 640 allowing the construction of skins with services injected. 641* ContentHandlerFactory for most ContentHandler static methods. It has been 642 added to the constructors for many classes to improve SOLID / GRASP. 643* FileDeleteForm's constructor now accepts a user as the second parameter. 644 Support for not passing a user has also been hard-deprecated and will be 645 removed in 1.36. 646* The ParserPreSaveTransformComplete hook was added. 647* The ParserBeforePreprocess hook was added. 648* The ResourceLoaderSkinModule class now has a "legacy" feature that loads 649 the stylesheets previously part of the "mediawiki.legacy.shared" and 650 "mediawiki.legacy.commonPrint" module. 651 Those modules are now deprecated and no longer loaded by skins. 652 For skins needing to retain these styles, you will need to load these 653 styles via a module using the ResourceLoaderSkinModule class. 654 See Vector and Monobook for examples. 655* ParserOutput now has methods addExtraCSPStyleSrc, addExtraCSPDefaultSrc 656 addExtraCSPScriptSrc for parser tags/functions to be able to add sources 657 to the Content Security Policy. 658* The HtmlCacheUpdater service was added to unify the logic of purging CDN cache 659 and HTML file cache to simplify callers and make them more consistent. 660* The MultiHttpClient code will fallover to non-curl if curl_multi* is blocked. 661* Preferences which use HTMLTitlesMultiselectField can make use of 662 MultiTitleFilter class for saving title text to/from article IDs in user 663 preferences. 664* OutputPage::addHtmlClasses() was added to allow injecting CSS classes on 665 to the <html> element on page load. 666* The SkinAddFooterLinks hook is added to allow extensions to add items to skin 667 footers. Previously this had to be done via SkinTemplateOutputPageBeforeExec. 668 Doing so using that hook is now hard deprecated. 669* A new BlockPermissionChecker service was introduced for checking 670 block-related permissions. 671* The support of 'database' type of extensions has been added to allow 3d party 672 databases like Percona be used as storage. See T226857, T253248. 673* Three new return parameters have been added to the 674 EditPageGetCheckboxesDefinition hook. Handlers of this hook are no longer 675 restricted to defining checkboxes. See the documentation of 676 EditPage::getCheckboxesDefinition() for more details. 677* New flag File::RENDER_TMP was added in order to allow 678 File::generateAndSaveThumb and File::trasform to render a thumbnail without 679 saving it to the storage. 680 681=== External library changes in 1.35 === 682 683==== New external libraries ==== 684* Added wikimedia/ip-utils 1.0.0. 685* Added wikimedia/parsoid 0.12.2. 686* Added wikimedia/services 2.0.1. 687* Added taylorhakes/promise-polyfill v8.1.3. 688* Added vuejs v2.6.11. 689* Added vuex v3.1.3. 690* Added symfony/symfony/polyfill-php80 1.23.1. 691 692===== New development-only external libraries ===== 693* Added doctrine/dbal 3.0.0. 694* Added doctrine/sql-formatter 1.1.0. 695* Added pimple/pimple 3.3.1. 696 697==== Changed external libraries ==== 698* pear/mail_mime was upgraded from 1.10.2 to 1.10.11. 699* wikimedia/less.php was upgraded from 1.8.0 to 3.1.0. 700* Updated oojs from 3.0.0 to 5.0.0. 701* Updated OOUI from 0.35.1 to 0.39.3. 702* zordius/lightncandy was upgraded from 0.23.0 to 1.2.5. 703* Updated jQuery from v3.3.1 to v3.6.0. 704* Updated jQuery Migrate from v3.0.1 to v3.3.2. 705* Updated wikimedia/assert from 0.2.2 to 0.5.0. 706* Updated pear/net_smtp from 1.8.1 from to 1.9.1. 707* Updated psr/log from 1.0.2 to 1.1.3. 708* Updated jquery.i18n from 1.0.5 to 1.0.7. 709* Updated guzzlehttp/guzzle from 6.3.3 to 6.5.5. 710* Updated wikimedia/xmp-reader from 0.6.3 to 0.7.0. 711 Fixes error log spam with too-large XMP data, and adds support for GPano tags. 712* Updated wikimedia/base-convert from v2.0.0 to v2.0.1. 713* Updated composer/semver from 1.5.0 to 1.7.2. 714* Updated wikimedia/remex-html from 2.1.0 to 2.2.0. 715* Replaced wikimedia/password-blacklist 0.1.4 with wikimedia/common-passwords 716 0.2.0. 717* Updated wikimedia/composer-merge-plugin from 1.4.1 to 2.0.1. 718 719===== Changed development-only external libraries ===== 720* Updated symfony/yaml from 3.4.28 to 5.0.5. 721* Updated nikic/php-parser from 3.1.5 to 4.4.0. 722* Updated php-parallel-lint/php-console-highlighter from v0.3.2 to v0.5. 723* Updated php-parallel-lint/php-parallel-lint from v0.9.2 to v1.2.0. 724* Updated psy/psysh from 0.9.9 to 0.10.4. 725* Updated monolog/monolog from 1.24.0 to 2.2.0. 726* Upgrade mediawiki-codesniffer from 28.0.0 to 34.0.0. 727* Updated composer/spdx-licenses from 1.5.1 to 1.5.3. 728* Updated monolog/monolog from 1.25.2 to 1.25.3. 729* Updated qunit from 2.9.1 to 2.10.0. 730* Updating wikimedia/testing-access-wrapper from 1.0.0 to 2.0.0. 731* Updated seld/jsonlint from 1.7.1 to 1.8.3. 732 733==== Removed external libraries ==== 734* phpunit/php-invoker (dev-only). 735 Removing this unbreaks development on Windows systems, in exchange for losing 736 time limits in running unit tests. 737* The jquery.getAttrs module was removed. 738 739=== Action API changes in 1.35 === 740* The 'suggest' parameter of action=opensearch has been deprecated. 741 The API behaves the same with and without this parameter. 742 It was previously used by $wgEnableOpenSearchSuggest to partially 743 disable the API if set to false. Specifically, it would deny internal 744 frontend requests carrying this parameter, whilst accepting other requests. 745* Integer-type parameters are now validated for syntax rather than being 746 interpreted in surprising ways. For example, the following will now return a 747 badinteger error: 748 - "1.9" (formerly interpreted as "1") 749 - " 1" (formerly interpreted as "1") 750 - "1e1" (formerly interpreted as "1" or "10", depending on the PHP version) 751 - "1foobar" (formerly interpreted as "1") 752 - "foobar" (formerly intepreted as "0") 753 parameters. Ranges should be assumed to be enforced. 754* Many user-type parameters now accept a user ID, formatted like "#12345". 755* The 'assert' parameter used by all API modules now supports the value 'anon'. 756 When specified, the API will return the 'assertanonfailed' error if the user 757 is logged in. 758* action=edit now supports the 'baserevid' parameter for edit conflict 759 detection, as an alternative to 'basetimestamp'. Note that self-conflicts 760 will continue to be ignored if 'basetimestamp' is set, but not if only 761 'baserevid' is set. 762* A new module was added to change the content model of existing pages. 763 Use action=changecontentmodel. Unlike Special:ChangeContentModel, the api 764 module does not work for pages that do not already exist. 765* If $wgWatchlistExpiry is true, the following API changes are made: 766 - action=watch accepts a new 'expiry' parameter analagous to the expiry 767 accepted by action=userrights, action=block, etc., except it must be no 768 greater than $wgWatchlistExpiryMaxDuration, or an infinity value. 769 - action=query&list=watchlistraw returns pages' watchlist expiry dates. 770* (T249526) action=login will now return Failed rather than NeedToken on 771 session loss. 772 773=== Action API internal changes in 1.35 === 774* The Action API now uses the Wikimedia\ParamValidator library for parameter 775 validation, which brings some new features and changes. For the most part 776 existing module code should work as it did before, but see subsequent notes 777 for changes. 778 - The values for all ApiBase PARAM_* constants have changed. Code should have 779 been using the constants rather than hard-coding the values. 780 - Several ApiBase PARAM_* constants have been deprecated, see the in-class 781 documentation for details. Use the equivalent ParamValidator constants 782 instead. 783 - The value returned for 'upload'-type parameters has changed from 784 WebRequestUpload to Psr\Http\Message\UploadedFileInterface. 785* Validation of 'user'-type parameters is more flexible. PARAM constants exist 786 to specify the type of "user" allowed and to request UserIdentity objects 787 rather than name strings. The default is to accept all types (name, IP, 788 range, and interwiki) that were formerly accepted. 789* Maximum limits are no longer ignored in "internal mode". 790* The $paramName to ApiBase::handleParamNormalization() should now include the 791 prefix. 792* (T245931) meta=siteinfo&siprop=interwikimap no longer reports language or 793 extralanglink when $wgInterwikiMagic is false. 794 795=== Languages updated in 1.35 === 796MediaWiki supports over 350 languages. Many localisations are updated regularly. 797Below only new and removed languages are listed, as well as changes to languages 798because of Phabricator reports. 799 800* The default targets for the ISBN search from Special:BookSources in English 801 have been updated for better international suppport. They will now be 802 BetterWorldBooks.com, OpenLibrary.org and Worldcat.org. 803* (T237672) Changed the Moroccan Arabic language (ary) to the Arabic script. 804* (T201269) Added language support for Amis (ami). 805* (T248299) Added language support for Inari Sami (smn). 806* (T251369) Added language support for Ladin (lld). 807* (T251369) Added language support for Seediq (trv), also known as Taroko. 808* (T254854) Added language support for Southern Altay (alt). 809 810=== Breaking changes in 1.35 === 811* MediaWiki no longer supports PHP 7.2; use PHP 7.3.19+ (T228346, T257879). 812* ResourceLoader::getLessVars(), deprecated in 1.32, was removed. 813 Use ResourceLoaderModule::getLessVars() instead. 814* The jquery.tabIndex module, deprecated in 1.34, has been removed. 815* The mediawiki.RegExp module alias, deprecated in 1.34, was removed. 816 Use the mediawiki.util module instead. 817* The easy-deflate.inflate module, unused since 1.32, was removed. 818* The easy-deflate.deflate module was removed. Use the mediawiki.deflate 819 module instead. 820* The mediawiki.notify module was removed. The mw.notify() shortcut is now 821 available by default, without any dependency. 822* (T219604) The "jquery.ui.*" and "jquery.effects.*" module aliases, 823 deprecated in 1.34, have been removed. Use "jquery.ui" instead. 824* (T235457) The "user.tokens" module has been removed. 825 Use "user.options" instead. 826* (T251855) The mw.Map#exists method in JavaScript no longer supports checking 827 multiple keys. This affects mw.config.exists() and mw.user.tokens.exists(). 828* The internal variable $constructorOptions for the Parser & SpecialPageFactory, 829 exposed only for integration purposes, are now each replaced by a const called 830 CONSTRUCTOR_OPTIONS. This was a breaking change made without deprecation. 831* ObjectCache::getWANInstance, deprecated in 1.34, was removed. 832 Use MediaWikiServices::getMainWANObjectCache instead. 833* ObjectCache::newWANCacheFromParams, deprecated in 1.34, was removed. 834 Construct WANObjectCache directly instead, or use MediaWikiServices. 835* (T231366) The ProfilerOutputDb class and profileinfo.php entry point, 836 deprecated in 1.34, was removed. 837* SiteConfiguration->localVHosts, deprecated in 1.25, was removed. 838 Use $wgLocalVirtualHosts instead. 839* The $wgContLanguageCode read-only variable was removed. 840 It has been a non-configurable copy of $wgLanguageCode since MW 1.8 (2006). 841 Use $wgLanguageCode directly instead. 842* ApiQueryUserInfo::getBlockInfo, deprecated in 1.34, was removed. Use 843 ApiBlockInfoTrait::getBlockDetails instead. 844* Password::equals(), deprecated in 1.33, was removed. Use Password::verify(). 845* QuickTemplate::setRef(), deprecated in 1.31, was removed. Use set(). 846* The mediawiki.ui.text module, deprecated in 1.28 and unused, was removed. 847* AbstractBlock::mReason, deprecated in 1.34, is no longer public. 848* The GetBlockedStatus and UserIsHidden, deprecated in 1.34, has been removed. 849 Instead, use the GetUserBlock hook. 850* As part of work to replace the Parser, a large number of breaking changes have 851 been made, principally in related methods and properties being removed or made 852 private: 853 - disableCache(), deprecated in 1.28. 854 - serializeHalfParsedText() and the helpers unserializeHalfParsedText(), 855 isValidHalfParsedText(), and StripState::getSubState() and 856 StripState::merge(), all deprecated in 1.31. The helper functions 857 LinkHolderArray::mergeForeign() and LinkHolderArray::getSubArray() 858 were also removed. 859 - getConverterLanguage(), deprecated in 1.32. Use getTargetLanguage() instead. 860 - A large set of methods exposed only for historical reasons, deprecated in 861 1.34, have now been removed or made private: 862 - areSubpagesAllowed() 863 - armorLinks() 864 - createAssocArgs() 865 - doAllQuotes() 866 - doDoubleUnderscore() 867 - doHeadings() 868 - doMagicLinks() 869 - formatHeadings() 870 - getImageParams() 871 - getVariableValue() 872 - initialiseVariables() 873 - makeKnownLinkHolder() 874 - maybeDoSubpageLink() 875 - parseLinkParameter() 876 - replaceExternalLinks() 877 - replaceInternalLinks() 878 - replaceInternalLinks2() 879 - replaceLinkHoldersText(). 880 - splitWhitespace() 881 - stripAltText() 882 - testPreprocess() 883 - testPst() 884 - testSrvus() 885 - incrementIncludeSize(), setTransparentTagHook(), replaceTransparentTags(), 886 and $mTransparentTagHooks have been removed without deprecation. 887 - The following constants have been made private without deprecation: 888 - ::EXT_LINK_ADDR 889 - ::EXT_IMAGE_REGEX 890 - ::SPACE_NOT_NL 891 - The following properties have been removed without deprecation: 892 - ::$mDefaultStripList 893 - ::$mIncludeCount 894 - ::$mRevIdForTs 895 - The following properties have been made private without deprecation: 896 - ::$mFunctionSynonyms 897 - ::$mFunctionTagHooks 898 - ::$mStripList 899 - ::$mVarCache 900 - ::$mImageParams 901 - ::$mImageParamsMagicArray 902 - ::$mSubstWords 903 - ::$mVariables 904 - ::$mConf (deprecated in 1.34) 905 - ::$mExtLinkBracketedRegex 906 - ::$mUrlProtocols 907 - ::$mAutonumber 908 - ::$mLinkHolders 909 - ::$mDefaultSort 910 - ::$mTplRedirCache 911 - ::$mForceTocPosition 912 - ::$mTplDomCache 913 - ::$mOutputType 914 - ::$mLangLinkLanguages 915 - ::$currentRevisionCache 916 - ::$mProfiler 917 - ::$mLinkRenderer 918 - Parser::getTitle() will now throw a TypeError if $mTitle is uninitialized. 919 This use pattern was deprecated in 1.34. 920 - ContentHandler::makeParserOptions(), deprecated in 1.32, was removed. Use 921 WikiPage::makeParserOptions() or ParserOptions::newCanonical() instead. 922 - The ParserAfterUnstrip hook, believed to be unused, was removed without 923 deprecation. 924 - Preprocessor_DOM and related classes, deprecated in 1.34, have been removed. 925 Consequently, the related ParserOptions::getMaxGeneratedPPNodeCount() and 926 ::setMaxGeneratedPPNodeCount() have been removed without deprecation. 927 - The support for the old signature for ParserFactory::__construct, which was 928 deprecated in 1.34, has been removed. 929 - Parser::getDefaultPreprocessorClass(), deprecated in 1.34, has been removed. 930* MediaWikiTestCase::prepareServices(), deprecated in 1.32, has been removed 931* The method ContentHandler::getSlotDiffRendererInternal is replaced with 932 ContentHandler::getSlotDiffRendererWithOptions. This breaks consumers which 933 call parent::getSlotDiffRendererInternal (no instances of which are known). 934* TextContent::getHighlightHtml, deprecated since 1.24, has been removed. Use 935 TextContent::getHtml instead. 936* ExtensionRegistry::load(), deprecated in 1.34, was removed. Instead, use 937 ExtensionRegistry::queue(). 938* MWMessagePack class, deprecated in 1.34, was removed. 939* The cdb.php maintenance script was removed. Use the 'cdb' command from the 940 wikimedia/cdb library instead. 941* User::addNewUserLogEntryAutoCreate, deprecated in 1.27, was removed. 942* FileBasedSiteLookup class, deprecated in 1.33, was removed. 943* The wfGlobalCacheKey global function, deprecated in 1.30, was removed. 944* The APCBagOStuff class was removed. MediaWiki requires PHP 7.2+ (support 945 for HHVM was dropped) and these versions of PHP only support apcu. The default 946 "apc" entry in $wgObjectCaches now refers to APCUBagOStuff. 947* Database::bufferResults(), deprecated in 1.34, has been removed. 948* CannotReplaceActiveServiceException, ContainerDisabledException, 949 DestructibleService, NoSuchServiceException, SalvageableService, 950 ServiceAlreadyDefinedException, ServiceContainer and ServiceDisabledException 951 in the global namespace, deprecated in 1.33, were removed. Use the classes in 952 the MediaWiki\\Services namespace instead. 953* The following methods in the Interwiki class were removed: ::fetch(), 954 ::isValidInterwiki(), ::invalidateCache(), and ::getAllPrefixes(). 955* The UsersMultiselectWidget config 'allowArbitrary' is now false by default. To 956 accept arbitrary entries, pass in true for this config. 957* OutputPage::parse() and OutputPage::parseInline(), deprecated in 1.32, have 958 been removed. Use ::parseAsContent() or ::parseAsInterface(), as 959 appropriate. 960* WikiPage::selectFields, deprecated in 1.31, was removed. Use ::getQueryInfo. 961* The remaining static methods for MagicWord, deprecated in 1.32, were removed. 962 These were MagicWord::get(), ::getSubstIDs(), ::getDoubleUnderscoreArray(), 963 ::getVariableIDs(), and ::getCacheTTL(). Instead, use MagicWordFactory (via 964 MediaWikiServices). 965* ApiBase::checkTitleUserPermissions no longer accepts a User as the third 966 parameter. Passing a user was deprecated in 1.33. 967* Sanitizer::setupAttributeWhitelist() and Sanitizer::attributeWhitelist(), 968 deprecated in 1.34, have been removed. They should not have been public. 969* Passing a sequential array as the second parameter to 970 Sanitizer::validateAttributes() has been deprecated; use an associative 971 array where keys are the allowed attributes. 972* The $warnCallback parameter to Sanitizer::removeHTMLtags, deprecated since 973 its introduction in 1.28, has been removed. 974* SpecialRecentChanges::filterByCategories(), deprecated in 1.31, was removed. 975* The `ArticleContentViewCustom` hook, deprecated in 1.32, was removed. 976* AuthManager::callLegacyAuthPlugin, deprecated in 1.33, was removed. 977* wfGetMessageCacheStorage was removed without deprecation. 978* Title::moveSubpages, deprecated in 1.34, was removed. Use the MovePage class 979 and MovePage::moveSubpages instead. 980* Article::doEditContent, deprecated in 1.29, was removed. Instead, use 981 WikiPage::doEditContent. 982* CommentStore::newKey, deprecated in 1.31, was removed. 983* EditPage::$hookError was changed from public to private. 984* Title::isValidMoveOperation, ::moveTo, and ::isValidMoveTarget, deprecated 985 in 1.25, were removed. Use the MovePage class and its methods instead. 986* Title::getUserCaseDBKey(), deprecated in 1.33, was removed. Use ::getDBkey(). 987* StringUtils::explodeMarkup() was removed without deprecation. 988* AjaxResponse methods that were unused have been removed without deprecation: 989 - checkLastModified 990 - loadFromMemcached 991 - storeInMemcached 992 - setCacheDuration 993 - setVary 994* ApiDelete::delete and ::deleteFile, both of which were protected methods, 995 have been made private to allow a signature change. 996* HistoryPager::revLink, ::curLink, ::lastLink, and ::diffButtons, which had 997 no visibilities defined, have been made private to allow signature changes. 998* SpecialNewpages::revisionFromRcResult, which previously was protected, has 999 been made private to allow a signature change. 1000* DifferenceEngine::$mOldRev and $mNewRev, deprecated for public access in 1001 1.32, have been removed. 1002* DifferenceEngine::revisionDeleteLink, which was previosuly protected, has 1003 been made private to allow a signature change. 1004* DifferenceEngine::getParserOutput, which is protected, has had a breaking 1005 signature change: the second parameter must be a RevisionRecord object, 1006 rather than a Revision object. 1007* WikiPage::setLastEdit, which was previously protected, has been made 1008 private to allow a signature change. 1009* Skin::getSkinNameMessages() deprecated in 1.34, has been removed. 1010* Skin::escapeSearchLink() deprecated in 1.34, has been removed, use 1011 Skin::getSearchLink() instead. 1012* Skin::shouldPreloadLogo() deprecated in 1.32, has been removed. 1013* Revision::loadFromId and RevisionStore::loadRevisionFromId have been 1014 removed. 1015* OutputPage::parserOptions doesn't accept an $options parameter anymore. 1016* MessageCache::getParserOptions previously did not have a visibility set. 1017 It has been made private. 1018* SpecialUndelete::showDiff previously did not have a visibilty set. It 1019 hav been made private to allow a signature change. 1020* The Skin no longer loads the "mediawiki.legacy.shared" or 1021 "mediawiki.legacy.commonPrint" modules. The legacy shared styles must now 1022 be loaded by the skin explicitly, either inherited via the 1023 "mediawiki.skinning.*" modules, or by making your skin's main styles 1024 module use the ResourceLoaderSkinModule class with the "legacy" attribute. 1025 See Vector and Monobook for examples. 1026* Passing an ApiMain to the constructor of ApiResult is no longer supported. 1027 This was deprecated in 1.25. 1028* ResourceLoaderWikiModule::invalidateModuleCache has been declared to 1029 be @internal as part of a signature change. No known uses exist outside 1030 of MediaWiki core. 1031* The ArticleAfterFetchContentObject hook, deprecated in 1.32, was removed. 1032 Use ArticleRevisionViewCustom to control output. 1033* DatabaseBlock::isValid, deprecated in 1.33, was removed. 1034* HTMLUserTextField and HTMLUsersMultiselectField previously implied 1035 required=true when exists=true. Form fields that use exists=true should also 1036 set required=true if they are required. 1037* In DatabaseUpdater, the following methods are no longer public: dropTable(), 1038 modifyTable(), modifyField(), runMaintenance(), copyFile(), appendLine(). 1039 In PostgresUpdater, the following methods are no longer public: 1040 addPgEnumValue(), addPgIndex(), addPgExtIndex(). This change was made without 1041 deprecation due to immediate danger of data corruption and loss, see T157651. 1042 Extensions should instead use dropExtensionTable(), 1043 modifyExtensionExtensionTable(), modifyExtensionField(), addExtensionUpdate(). 1044 The addExtensionUpdate() method can still be used to access any of the 1045 protected methods on DatabaseUpdater. 1046* ResourceLoader no longer provides the (always-true) variables for wgEnableAPI 1047 and wgEnableWriteAPI; they were deprecated in MediaWiki 1.31 and removed from 1048 the PHP environment in MediaWiki 1.32. 1049* The wfSetupSession global function, deprecated in 1.27, was removed. Use the 1050 persist() method of the right MediaWiki\Session\SessionManager object instead. 1051* The wfIsHHVM global function, deprecated in 1.34, was removed. 1052* GenderCache::doTitlesArray no longer accepts string values in its $titles 1053 array parameter. Use Title objects (or other LinkTarget) instead. 1054* Unused CommentStore::MAX_COMMENT_LENGTH has been removed. 1055* User::checkTemporaryPassword() and User::checkPassword(), deprecated in 1.27, 1056 were removed. Use AuthManager instead. 1057* All constants and class functions now have explicit visibility modifiers. This 1058 means, per [[mw:Stable interface policy]], that these should now be considered 1059 stable. This also helps MW align with PSR 2 and PSR 12. This was done based on 1060 audits of the corpus of skins and extensions hosted in Gerrit. If you find any 1061 that you need to be less restrictive (i.e. public or protected), please report 1062 these so that we can re-evaluate or suggest workarounds. 1063* BaseTemplate::msgWiki(), deprecated in 1.33, was removed. Use ->msg() or 1064 ->getMsg() instead. 1065* QuickTemplate::msgWiki(), deprecated in 1.33, was removed. Use ->msg() 1066 instead. 1067* WebInstaller::getErrorBox() and ::getWarningBox(), deprecated in 1.34, 1068 were removed. Use Html::errorBox() or ::warningBox() instead. 1069* SpecialVersion::getExtensionCredits() and SpecialVersion::getSkinCredits() 1070 have become private without deprecation. 1071* As part of the migration to a new hook system (T240307), the following classes 1072 now require an additional HookContainer constructor parameter: 1073 - AuthManager 1074 - BadFileLookup 1075 - BlockManager 1076 - ClassicInterwikiLookup 1077 - ContentHandlerFactory 1078 - ContentSecurityPolicy 1079 - DefaultOptionsManager 1080 - DerivedPageDataUpdater 1081 - FullSearchResultWidget 1082 - HtmlCacheUpdater 1083 - LanguageFactory 1084 - LanguageNameUtils 1085 - LinkRenderer 1086 - LinkRendererFactory 1087 - LocalisationCache 1088 - MagicWordFactory 1089 - MessageCache 1090 - NamespaceInfo 1091 - PageEditStash 1092 - PageHandlerFactory 1093 - PageUpdater 1094 - ParserFactory 1095 - PermissionManager 1096 - RevisionStore 1097 - RevisionStoreFactory 1098 - Router 1099 - SearchEngineConfig 1100 - SearchEngineFactory 1101 - SearchFormWidget 1102 - SearchNearMatcher 1103 - SessionBackend 1104 - SpecialPageFactory 1105 - UserNameUtils 1106 - UserOptionsManager 1107 - WatchedItemQueryService 1108 - WatchedItemStore 1109* The following classes now require setHookContainer() to be called after 1110 construction: 1111 - AuthenticationProvider 1112 - ResourceLoaderModule 1113 - SearchEngine 1114* The parameters to ChronologyProtector::getTouched() and 1115 ILBFactory::getChronologyProtectorTouched() were changed without backwards 1116 compatibility. 1117* The deprecated $blacklist parameter to wfIsBadImage() has been removed. 1118* SpecialBlock::checkUnblockSelf no longer accepts an integer representing 1119 an user ID as part of ongoing refactoring of SpecialBlock class. 1120* User::setInternalPassword() and User::setPassword(), deprecated in 1.27, have 1121 been removed. Use User::changeAuthenticationData() instead. 1122* User::selectFields(), deprecated in 1.31, has been removed. Use 1123 User::getQueryInfo() instead. 1124* The "legacy" serialization type in RESTBagOStuff, deprecated in 1.34, 1125 has been removed. 1126* The populateContentModel.php maintenance script was removed. It has 1127 been replaced by the populateContentTables.php script. 1128* The findHooks.php maintenance script, for the old hooks system, was removed. 1129* (T257278) Calling MediaWiki\Shell\Command::restrict() will now overwrite 1130 any previous restrictions rather than adding to them, making it possible to 1131 disable the default restrictions. 1132 1133=== Deprecations in 1.35 === 1134* The PHPUnit4And6Compat class, used to provide compatibility with PHPUnit 4, is 1135 now deprecated. MediaWiki support for PHPUnit 4 ended with the removal of HHVM 1136 support. 1137* LockManagerGroup::getDefault() and LockManagerGroup::getAny() are deprecated. 1138 They seem to be unused. Just use get() directly, and catch any exception. 1139* AbstractBlock::getPermissionsError and AbstractBlock::getBlockErrorParams are 1140 deprecated. Use BlockErrorFormatter::getMessage instead. 1141* The IP class is deprecated. Please instead use the Wikimedia\IPUtils class 1142 from the new wikimedia/ip-utils library instead. Additionally, the RE_IP_* 1143 constants are also deprecated. RE_IP_BYTE can be replaced with a class 1144 constant on the IPUtils class, while the others will eventually be made 1145 private. 1146* The following Language methods are deprecated: getFallbackFor, 1147 getFallbacksFor, getFallbacksIncludingSiteLanguage. Use the corresponding new 1148 methods on the LanguageFallback class: getFirst, getAll, and 1149 getAllIncludingSiteLanguage. 1150* FileJournal::factory is deprecated. Use the constructor directly instead. 1151* AbstractBlock methods setBlocker(), getBlocker() are deprecated and will 1152 become internal implementation of DatabaseBlock. 1153* Title::countRevisionsBetween has been deprecated and moved into RevisionStore. 1154* FileBackendGroup::singleton() is deprecated. Use MediaWikiServices instead. 1155* FileBackendGroup::destroySingleton() is deprecated. Test frameworks should 1156 instead reset MediaWikiServices between test runs. 1157 (MediaWikiIntegrationTestCase does this automatically.) 1158* GenderCache::singleton(), deprecated in 1.28, is hard deprecated. Use 1159 MediaWikiServices::getGenderCache() instead. 1160* MediaWikiIntegrationTest::setContentLang() has been deprecated. Use 1161 setMwGlobals( 'wgLanguageCode', 'xxx' ) to set a different site language 1162 code, or setService( 'ContentLanguage', $myObj ) to set a specific Language 1163 object. Service resets and $wgContLang will be handled automatically. 1164* MediaWikiIntegrationTest::assertType() has been deprecated, as part of the 1165 work to move to PHPUnit 8; PHPUnit's assertInternalType() was deprecated, and 1166 will be removed in PHPUnit 9. MediaWikiIntegrationTest::assertTypeOrValue(), 1167 a wrapper for assertType(), has been removed immediately, without deprecation. 1168* AbstractBlock::getReason is deprecated, since reasons are actually stored as 1169 CommentStoreComments, and getReason returns a string with no caller control 1170 over language or formatting. Instead use AbstractBlock::getReasonComment, 1171 which returns the CommentStoreComment. 1172* The global function wfGetRusage() is deprecated and will now always call the 1173 getrusage() function without checking for its existence. 1174* The properties User::mBlock, User::mBlockedby and User::mHideName are 1175 deprecated. Instead, use User::getBlock to get the block, then use 1176 AbstractBlock::getByName or AbstractBlock::getHideName.Use the GetUserBlock 1177 hook to set, unset or modify a block, including hiding or unhiding a user. 1178* Directly calling the MergeHistory constructor is deprecated. Instead, use the 1179 new MergeHistoryFactory class. 1180* Language::factory() and Language::getParentLanguage() are deprecated, and so 1181 is directly calling the Language constructor. Use the new LanguageFactory 1182 class instead. 1183* Language::classFromCode() is deprecated. There is no reason it should be used 1184 outside the Language class itself. 1185* Language::clearCaches() is deprecated. Instead, reset all services and set 1186 Language::$mLangObjCache = []. 1187* The following functions from Language class are deprecated in favour of 1188 respective functions in LanguageConverter: 1189 - autoConvert 1190 - autoConvertToAllVariants 1191 - convert 1192 - convertTitle 1193 - convertNamespace 1194 - hasVariants 1195 - hasVariant 1196 - convertHtml 1197 - convertCategoryKey 1198 - getVariants 1199 - getPreferredVariant 1200 - getURLVariant 1201 - findVariantLink 1202 - getExtraHashOptions 1203 - updateConversionTable 1204* Language::classFromCode() is hard deprecated and should be removed in 1.36 1205* Language::getConverter() is deprecated and should be removed in 1.36 1206* Language::MESSAGES_FALLBACKS, Language::STRICT_FALLBACKS were deprecated. 1207 Use LanguageFallback::MESSAGES and LanguageFallback::STRICT respectively 1208* Language::$mLangObjCache is deprecated and should be removed in 1.36. Use 1209 MediaWikiServices instead to get a LanguageFactory. 1210* Language::getMessagesFor(), getMessageFor(), and getMessageKeysFor() are 1211 deprecated. Use LocalisationCache's getItem(), getSubitem(), and 1212 getSubitemList() methods directly. 1213* OutputPage::getCSPNonce() is deprecated, use OutputPage::getCSP()->getNonce() 1214 instead. 1215* DerivedPageDataUpdater::prepareUpdate accepted as its second parameter an 1216 optional array of options. Specifying the value of the `oldrevision` key of 1217 the array to be a Revision object, rather than a RevisionRecord object, is 1218 hard deprecated. The same applies to the options parameter in 1219 WikiPage::doEditUpdates. 1220* Skin::makeI18nUrl() and makeNSUrl() have been deprecated, no longer used. 1221* Title::countAuthorsBetween and Title::getAuthorsBetween were hard deprecated. 1222 Use respective methods in RevisionStore instead. 1223* Remove deprecated SkinCopyrightFooter &$forContent parameter 1224* The following Language class static variables have been replaced with 1225 constants and deprecated: $mWeekdayMsgs, $mWeekdayAbbrevMsgs, $mMonthMsgs, 1226 $mMonthGenMsgs, $mMonthAbbrevMsgs, $mIranianCalendarMonthMsgs, 1227 $mHebrewCalendarMonthMsgs, $mHebrewCalendarMonthGenMsgs, 1228 $mHijriCalendarMonthMsgs and $durationIntervals. 1229* As part of dropping security support for IE 6 and IE 7, 1230 WebRequest::checkUrlExtension() has been deprecated, and now always returns 1231 true. 1232* The following ApiBase::PARAM_* constants have been deprecated in favor of 1233 equivalent ParamValidator constants: PARAM_DFLT, PARAM_ISMULTI, PARAM_TYPE, 1234 PARAM_MAX, PARAM_MAX2, PARAM_MIN, PARAM_ALLOW_DUPLICATES, PARAM_DEPRECATED, 1235 PARAM_REQUIRED, PARAM_SUBMODULE_MAP, PARAM_SUBMODULE_PARAM_PREFIX, PARAM_ALL, 1236 PARAM_EXTRA_NAMESPACES, PARAM_SENSITIVE, PARAM_DEPRECATED_VALUES, 1237 PARAM_ISMULTI_LIMIT1, PARAM_ISMULTI_LIMIT2, PARAM_MAX_BYTES, PARAM_MAX_CHARS. 1238* ApiBase::explodeMultiValue() is deprecated. Use 1239 ParamValidator::explodeMultiValue() instead. 1240* ApiBase::parseMultiValue() is deprecated. No replacement is provided; 1241 generally this sort of thing should be handled by fully validating the 1242 parameter. 1243* ApiBase::validateLimit() and ApiBase::validateTimestamp() are deprecated. 1244 Use ApiParamValidator::validateValue() with an appropriate settings array 1245 instead. 1246* ContentHandler (use ContentHandlerFactory): 1247 - getForTitle 1248 - getForContent 1249 - getForModelID 1250 - getContentModels 1251 - getAllContentFormats 1252 - protected $handler (not need anymore) 1253 - cleanupHandlersCache (not need anymore) 1254* (T212738) The $wgVersion global is deprecated; instead, use MW_VERSION. 1255* $wgMemc is deprecated, use MediaWikiServices::getLocalServerObjectCache() 1256 instead. 1257* ObjectCache::detectLocalServerCache() is deprecated, instead use 1258 MediaWikiServices::getLocalServerObjectCache() or 1259 ObjectCache::makeLocalServerCache(). 1260* ImagePage::getImageLimitsFromOptions() is deprecated. Use static function 1261 MediaFileTrait::getImageLimitsFromOptions() instead. 1262* As part of work to replace the Parser, alongside the breaking changes listed 1263 above, a large number of deprecations changes been made, to simplify the API 1264 or because they will not be supported in replacement: 1265 - Parser::doBlockLevels() (and BlockLevelPass class has been marked @internal) 1266 - Parser::setFunctionTagHook() 1267 - Parser::attributeStripCallback() 1268 - Parser::fetchTemplate() - use Parser::fetchTemplateAndTitle() instead. 1269 - Parser::enableOOUI() - use $parser->getOutput()->enableOOUI() instead. 1270 - LinkHolderArray has been deprecated for public usage and will be 1271 internal part of parser. 1272 - The following parser-related hooks have been deprecated: 1273 - InternalParseBeforeSanitize 1274 Use an alternative hook which doesn't expose internal half-parsed state, 1275 like ParserBeforeInternalParse or ParserAfterTidy 1276 - ParserFetchTemplate 1277 Use BeforeParserFetchTemplateAndTitle 1278 - ParserSectionCreate 1279 No replacement; <section> tag wrapping will be done by core in future. 1280 - BeforeParserrenderImageGallery 1281 No replacement; MediaHandler provides for customizable media rendering 1282 - ParserBeforeTidy 1283 Use ParserAfterTidy instead to avoid exposing internal half-parsed state 1284 - ParserBeforeStrip 1285 No replacement; stripping is no longer supported. 1286 - ParserAfterStrip 1287 No replacement; stripping is no longer supported. 1288 - The accessor/mutator methods Parser::Options(), Parser::OutputType(), and 1289 Parser::Title() have been deprecated; use the appropriate Parser::get* or 1290 Parser::set* methods instead. 1291 - Parser::firstCallInit() has been deprecated. The parser is initialized 1292 fully on construction and so ::firstCallInit() no longer has any effect 1293 when manually invoked. 1294 - ParserOptions::setAllowExternalImages(), ::setAllowExternalImagesFrom(), 1295 and ::setEnableImageWhitelist() have been deprecated. Future parsers 1296 will not allow per-parser configuration of image filtering; use 1297 site configuration instead. 1298 - ParserOptions::getTidy() and ParserOptions::setTidy() have been deprecated. 1299 These options no longer have any effect. 1300 - Most methods of MWTidy, except for MWTidy::tidy(), have been deprecated; 1301 tidiness is always enabled and not configurable. 1302 - Version 1 of the parserTests file format has been deprecated. You'll need to 1303 update your parser tests to version 2, which uses Remex tidy on all test 1304 output by default. Support for parser tests with Remex tidy off will later 1305 be removed entirely. 1306 - $wgParser — This global variable, soft deprecated in 1.32, has now been hard 1307 deprecated. Use MediaWikiServices::getInstance()->getParser() instead. 1308 (T160811) 1309* The signature of DefaultPreferencesFactory::__construct has been changed: 1310 - LanguageConverter $languageConverter has been added. 1311 and its usage with old arguments is hard deprecated. 1312* The public usage of the following properties of LanguageConverter have been 1313 deprecated as there is no reason they should be used outside the 1314 LanguageConverter class and will be changed from public to private: 1315 - mLangObj 1316 - mUcfirst 1317 - mConvRuleTitle 1318 - mURLVariant 1319 - mUserVariant 1320 - mHeaderVariant 1321 - mMaxDepth 1322 - mVarSeparatorPattern 1323 changed from public to protected: 1324 - mTables 1325* The ArticleEditUpdatesDeleteFromRecentchanges hook has been deprecated. Please 1326 use the RecentChange_save hook or similar instead. 1327* The ArticleEditUpdates hook has been deprecated. Please 1328 use the RevisionDataUpdates hook or similar instead. 1329* The SkinTemplatePreventOtherActiveTabs and SkinTemplateTabAction hooks have 1330 been hard deprecated. Please use the SkinTemplateNavigation__Universal hook 1331 instead. 1332* ResourceLoaderFileModule::compileLessFile() has been deprecated, use 1333 ResourceLoaderFileModule::compileLessString() instead 1334* The SquidPurgeClient and SquidPurgeClientPool classes have been deprecated. 1335 Use MultiHttpClient or HtmlCacheUpdater instead. 1336* MimeAnalyzer::getExtensionsForType() and ::getTypesForExtensions() were 1337 deprecated in favor of MimeAnalyzer::getExtensionsFromMimeType() and 1338 ::getMimeTypesFromExtension(), respectively. The new methods return arrays 1339 rather than strings. 1340* Calling Action::factory and Action constructor with WikiPage has been 1341 hard deprecated. Caller must provide an Article instance. 1342* ApiTestCase::doLogin, soft deprecated in 1.31, was hard deprecated. 1343* WebRequest::getLimitOffset is hard deprecated. Instead, use 1344 ::getLimitOffsetForUser and pass a User object. 1345* PageArchive::getPreviousRevision is hard deprecated. Instead, use the new 1346 ::getPreviousRevisionRecord method. 1347* PageArchive::getArchivedRevision is hard deprecated. Instead, use the new 1348 ::getArchivedRevisionRecord method. 1349* PageArchive::undelete is hard deprecated. Instead, use ::undeleteAsUser 1350 and pass a User object. 1351* PageArchive::getRevision is hard deprecated. 1352* EditPage::getBaseRevision was hard deprecated. Instead, use the new 1353 ::getExpectedParentRevision method. 1354* The public variable EditPage::$mBaseRevision was hard deprecated. 1355* FileDeleteForm previously did not accept a user parameter in its constructor, 1356 instead relying on the global $wgUser. A user parameter has been added, 1357 and //not// providing a user is deprecated. There are no known callers 1358 outside of mediawiki core. 1359* AuthManager::singleton() has been deprecated. Use 1360 MediaWikiServices::getInstance()->getAuthManager() instead. 1361* ContribsPager::tryToCreateValidRevision is hard deprecated. Instead, use 1362 ContribsPager::tryCreatingRevisionRecord. 1363* The following functions all accept an optional user parameter. Not passing a 1364 user is hard deprecated, and support for calling them without passing a user 1365 will be removed in 1.36: 1366 - Title::getNotificationTimestamp (note however that the method is deprecated 1367 in its entirely in favor of the new WatchlistNotificationManager service) 1368 - PatrolLog::record 1369 - LogEventsList::userCan 1370 - LogEventsList::userCanBitfield 1371 - LogEventsList::userCanViewLogType 1372 - LogPage::addEntry 1373 - FileDeleteForm::doDelete 1374 - OldLocalFile::userCan 1375 - ArchivedFile::userCan 1376 - File::userCan 1377* The following functions all accept an optional audience parameter and 1378 an optional user parameter. If the audience is FOR_THIS_USER and no 1379 user is passed, they fallback to $wgUser. Not passing a user when 1380 one is needed is deprecated 1381 - LogEventsList::getExcludeClause 1382 - WikiPage::getComment 1383 - WikiPage::getCreator 1384 - WikiPage::getUser 1385 - WikiPage::getUserText 1386* UploadBase::checkWarnings now accepts a User parameter; not providing a 1387 user is soft deprecated. 1388* Article::insertProtectNullRevision and WikiPage::insertProtectNullRevision 1389 were hard deprecated. Instead, use WikiPage::insertNullProtectionRevision. 1390* Article::doDeleteArticle, Article::doDeleteArticleReal, and 1391 WikiPage::doDeleteArticle are all deprecated. Instead, use 1392 WikiPage::doDeleteArticleReal. 1393* Article::getComment is deprecated. Instead, use WikiPage::getComment. 1394* Article::getCreator is deprecated. Instead, use WikiPage::getCreator. 1395* Article::updateRevisionOn() and ::updateIfNewerOn(), and 1396 WikiPage::updateIfNewerOn() are deprecated. Instead, use 1397 WikiPage::updateRevisionOn(). 1398* Article::getUser is deprecated. Instead, use WikiPage::getUser. 1399* Article::getUserText is deprecated. Instead, use WikiPage::getUserText. 1400* Article::prepareContentForEdit is hard deprecated. Instead, use 1401 WikiPage::prepareContentForEdit. 1402* WikiPage::prepareContentForEdit previously accepted either a Revision or a 1403 RevisionRecord object as its optional second parameter. Passing a Revision 1404 is now hard deprecated. 1405* Article::getUndoContent and WikiPage::getUndoContent are hard deprecated. 1406 Instead, use ContentHandler::getUndoContent. 1407* Passing Revision objects to ContentHandler::getUndoContent is hard deprecated. 1408 Instead, pass the associated Content objects, as well as whether the undo is 1409 from the current revision. 1410* Article::doDeleteUpdates and ::doEditUpdates are deprecated. Instead, 1411 use WikiPage::doDeleteUpdates and ::doEditUpdates. 1412* WikiPage::doEditUpdates previously accepted a Revision object as its first 1413 parameter. It now accepts RevisionRecord objects, and passing Revision 1414 objects is deprecated. 1415* Article::getRevisionFetched is deprecated. Instead, use the 1416 fetchRevisionRecord method, which has been converted from protected to 1417 public. 1418* LocalFileDeleteBatch was migrated to a new constructor signature with the 1419 user as the second parameter. Support for the old signature is hard 1420 deprecated, and once removed the user parameter will be required. At the 1421 same time, a number of file-deletion related methods were updated 1422 - File::delete is hard deprecated in favor of the new ::deleteFile 1423 - LocalFile::delete is hard deprecated in favor of the new ::deleteFile 1424 - LocalFile::deleteOld is hard deprecated in favor of the new ::deleteOldFile 1425 - ForeignDBFile::delete is hard deprecated in favor of the new ::deleteFile 1426* File::recordUpload (along with the respective methods in the LocalFile and 1427 ForeignDBFile classes) is hard deprecated, and LocalFile::recordUpload2 is 1428 soft deprecated. Use the new LocalFile::recordUpload3, which has a different 1429 signature and requires that a User parameter is passed. 1430* The SpecialPageFactory class was moved from the MediaWiki\Special namespace 1431 to the MediaWiki\SpecialPage namespace. The old location remains as a 1432 deprecated alias. 1433* Title::userCan, ::quickUserCan, and ::getUserPermissionsErrors, which 1434 were deprecated in 1.33, were hard deprecated. Instead, use 1435 PermissionManager::userCan, ::quickUserCan, and ::getPermissionErrors. 1436* All methods of the old SpecialPageFactory, deprecated in 1.32, were hard 1437 deprecated. Instead, get a SpecialPageFactory from MediaWikiServices and 1438 use its methods. 1439* User::updateNewtalk now accepts as its optional third parameter a 1440 RevisionRecord object; passing a Revision is hard deprecated. 1441* User::getNewMessageRevisionId and ::getNewMessageLinks were hard deprecated. 1442* DifferenceEngine::getRevisionHeader now accepts a RevisionRecord as its 1443 first parameter; passing a Revision is hard deprecated. 1444* WikiPage::doDeleteUpdates now accepts as its optional third parameter 1445 a RevisionRecord object; passing a Revision is hard deprecated. 1446* WikiPage::onArticleEdit now accepts as its optional second parameter 1447 a RevisionRecord object; passing a Revision is hard deprecated. 1448* Global $wgUser variable was soft deprecated. 1449* The Revision class was soft deprecated entirely in 1.31. All methods 1450 have now been individually hard deprecated: 1451 - ::__construct - create MutableRevisionRecord objects instead 1452 - ::newFromId - use RevisionLookup::getRevisionById instead 1453 - ::newFromTitle - use RevisionLookup::getRevisionByTitle instead 1454 - ::newFromPageId - use RevisionStore::getRevisionByPageId instead 1455 - ::newFromArchiveRow - use RevisionFactory::newRevisionFromArchiveRow 1456 - ::newFromRow - use RevisionStore::newRevisionFromRow instead 1457 - ::loadFromPageId - use RevisionStore::getRevisionByPageId instead 1458 - ::loadFromTitle - use RevisionStore::getRevisionByTitle instead 1459 - ::loadFromTimestamp - use RevisionStore::getRevisionByTimestamp instead 1460 - ::getQueryInfo - use RevisionStore::getQueryInfo instead 1461 - ::getArchiveQueryInfo - use RevisionStore::getArchiveQueryInfo instead 1462 - ::getParentLengths - use RevisionStore::getRevisionSizes instead 1463 - ::getRevisionRecord - no replacement 1464 - ::getId - use RevisionRecord::getId instead 1465 - ::setId - use MutableRevisionRecord::setId instead 1466 - ::setUserIdAndName - use MutableRevisionRecord::setUser instead 1467 - ::getTextId - use SlotRecord::getContentAddress for retrieving an actual 1468 content address, or RevisionRecord::hasSameContent to compare content 1469 - ::getParentId - use RevisionRecord::getParentId instead 1470 - ::getSize - use RevisionRecord::getSize instead 1471 - ::getSha1 - use RevisionRecord::getSha1 instead 1472 - ::getTitle - use RevisionRecord::getPageAsLinkTarget instead 1473 - ::setTitle - the method was previously a no-op 1474 - ::getPage - use RevisionRecord::getPageId instead 1475 - ::getUser - use RevisionRecord::getUser and then User::getId instead 1476 - ::getUserText - use RevisionRecord::getUser and then User::getName instead 1477 - ::getComment - use RevisionRecord::getComment instead 1478 - ::isMinor - use RevisionRecord::isMinor instead 1479 - ::isUnpatrolled - use RevisionStore::getRcIdIfUnpatrolled instead 1480 - ::getRecentChange - use RevisionStore::getRecentChange instead 1481 - ::isDeleted - use RevisionRecord::isDeleted instead 1482 - ::getVisibility - use RevisionRecord::getVisibility instead 1483 - ::getContent - use RevisionRecord::getContent instead 1484 - ::getSerializedData - use SlotRecord::getContent for retrieving a 1485 content object, and Content::serialize for the serialized form 1486 - ::getContentModel - use SlotRecord::getModel instead 1487 - ::getContentFormat - use SlotRecord::getFormat instead, with a fallback 1488 to ContentHandler::getDefaultFormat 1489 - ::getContentHandler - use ContentHandlerFactory::getContentHandler instead 1490 - ::getTimestamp - use RevisionRecord::getTimestamp instead 1491 - ::isCurrent - use RevisionRecord::isCurrent instead 1492 - ::getPrevious - use RevisionLookup::getPreviousRevision instead 1493 - ::getNext - use RevisionLookup::getNextRevision instead 1494 - ::getRevisionText - use RevisionRecord::getContent instead 1495 - ::compressRevisionText - use SqlBlobStore::compressData instead 1496 - ::decompressRevisionText - use SqlBlobStore::decompressData instead 1497 - ::insertOn - use RevisionStore::insertRevisionOn instead 1498 - ::base36Sha1 - use SlotRecord::base36Sha1 instead 1499 - ::newNullRevision - use RevisionStore::newNullRevision 1500 - ::userCan - use RevisionRecord::userCanBitfield instead 1501 - ::userCanBitfield - use RevisionRecord::userCanBitfield instead 1502 - ::getTimestampFromId - use RevisionStore::getTimestampFromId instead 1503 - ::countByPageId - use RevisionStore::countRevisionsByPageId instead 1504 - ::countByTitle - use RevisionStore::countRevisionsByTitle instead 1505 - ::userWasLastToEdit - use RevisionStore::userWasLastToEdit instead 1506 - ::newKnownCurrent - use RevisionStore::getKnownCurrentRevision instead 1507* The Revision method had a few methods that were previously protected and 1508 have been made private. They were: 1509 - ::getRevisionStore 1510 - ::getRevisionLookup 1511 - ::getRevisionFactory 1512 - ::getBlobStore 1513 The $mRecord variable was also changed from protected to private. 1514* Multiple hooks that include Revision objects were deprecated. The hooks, as 1515 well as suitable replacements, are noted below: 1516 - ArticleRevisionUndeleted (hard deprecated, use the RevisionUndeleted hook) 1517 - ArticleRollbackComplete (hard deprecated, use the RollbackComplete hook) 1518 - DiffRevisionTools (hard deprecated, use the DiffTools hook) 1519 - DiffViewHeader (hard deprecated, use the DifferenceEngineViewHeader hook) 1520 - HistoryRevisionTools (hard deprecated, use the HistoryTools hook) 1521 - NewRevisionFromEditComplete (hard deprecated, use the 1522 RevisionFromEditComplete hook). 1523 - PageContentInsertComplete (hard deprecated, use the PageSaveComplete hook) 1524 - PageContentSaveComplete (hard deprecated, use the PageSaveComplete hook) 1525 - RevisionInsertComplete (soft deprecated in 1.31, now hard deprecated) 1526 - TitleMoveCompleting (hard deprecated, use the PageMoveCompleting hook) 1527 - TitleMoveComplete (hard deprecated, use the PageMoveComplete hook) 1528 - UndeleteShowRevision (hard deprecated) 1529* The following RevisionStore methods were deprecated: 1530 - ::loadRevisionFromTitle 1531 - ::loadRevisionFromTimestamp 1532 - ::loadRevisionFromPageId 1533 - ::listRevisionSizes 1534* WikiPage::$mLastRevision was changed from protected to private. 1535* RecentChange::markPatrolled was deprecated. Use ::doMarkPatrolled instead. 1536* The JobRunner class has been converted to a service class. 1537 Direct construction is deprecated, use MediaWikiServices::getJobRunner. 1538* JobRunner::setLogger has been deprecated, thus using JobRunner as a 1539 LoggerAwareInterface is deprecated as well. Rely on the logger passed in the 1540 constructor instead. 1541* LogEventsList::typeAction accepts an optional right to check against as 1542 the fourth parameter. Specifying such a right is deprecated. 1543* SkinTemplate::makeArticleUrlDetails has been deprecated, no longer used. 1544* Passing a Revision object into CategoryMembershipChange constructor is 1545 deprecated. Pass a RevisionRecord instead. 1546* The "mediawiki.legacy.oldshared" module has been deprecated. 1547 Skins and extensions that are using this should copy its necessary CSS rules 1548 to their own styles module. CologneBlue and Nostalgia skins serve as examples. 1549* The "mediawiki.legacy.shared" module has been deprecated. 1550 Use the "mediawiki.skinning.*" modules, or ResourceLoaderSkinModule instead. 1551* The following hooks, soft deprecated in 1.24, have been hard deprecated: 1552 - APIQueryInfoTokens 1553 - APIQueryRecentChangesTokens 1554 - APIQueryRevisionsTokens 1555 - APIQueryUsersTokens 1556 - ApiTokensGetTokenTypes 1557* Calling Action::factory and Action constructor with any Page implementations 1558 other than Article is deprecated. 1559* Action::page property is deprecated for direct access. 1560 Use Action::getArticle or Action::getWikiPage instead. 1561* LESS `.background-image-svg()` mixin from 'mediawiki.mixins.less' is 1562 deprecated and should be removed in 1.36. 1563* LESS `.background-image-svg-quick()` mixin from 'mediawiki.mixins.less' is 1564 deprecated and should be removed in 1.36. 1565* The following methods were deprecated: 1566 - Title::getFirstRevision (hard deprecated) 1567 - Title::getEarliestRevTime 1568 - WikiPage::getOldestRevision (hard deprecated) 1569 - Article::getOldestRevision (hard deprecated) 1570 Use RevisionStore::getFirstRevision instead. 1571* WikiPage::commitRollback and ::doRollback are declared to be internal 1572 in preparation for breaking changes. Neither method has any known 1573 callers outside of MediaWiki core. Both methods modify an array passed 1574 by reference ($resultDetails) - accessing the Revision objects added to 1575 that array (using the keys `current` and `target`) is also deprecated. 1576* The following Linker methods previously accepted Revision objects as 1577 parameters. They now accept either Revision or RevisionRecord objects. 1578 Passing a Revision object is hard deprecated. 1579 - ::revUserLink 1580 - ::revUserTools 1581 - ::revComment 1582 - ::generateRollback 1583 - ::getRollbackEditCount 1584 - ::buildRollbackLink 1585 - ::getRevDeleteLink 1586* WikiPage::hasDifferencesOutsideMainSlot previously accepted Revision 1587 objects for its two parameters. It now accepts RevisionRecord objects, 1588 and passing Revision objects is hard deprecated. 1589* WikiPage::updateRevisionOn previously accepted Revision objects for its 1590 second parameter. It now accepts RevisionRecord objects, and passing 1591 Revision objects is hard deprecated. 1592* The ParserGetVariableValueVarCache hook has been deprecated. 1593* When using the ParserGetVariableValueSwitch hook, the following unusual 1594 uses have been deprecated: modifying the passed $magicWordId or failing to 1595 cache the returned value in $variableCache. The related 1596 MagicWordwgVariableIDs hook has been deprecated and renamed; use 1597 the GetMagicVariableIDs hook instead. 1598* The following Parser properties have been deprecated: 1599 - ::$mTagHooks 1600 - ::$mFunctionHooks 1601 - ::$mMarkerIndex 1602 - ::$mFirstCall 1603 - ::$mPreprocessor 1604 - ::$mOutput 1605 - ::$mStripState 1606 - ::$mLinkID 1607 - ::$mIncludeSizes 1608 - ::$mPPNodeCount 1609 - ::$mGeneratedPPNodeCount 1610 - ::$mHighestExpansionDepth 1611 - ::$mDoubleUnderscores 1612 - ::$mExpensiveFunctionCount 1613 - ::$mShowToc 1614 - ::$mUser 1615 - ::$mOptions 1616 - ::$mTitle 1617 - ::$ot 1618 - ::$mRevisionObject 1619 - ::$mRevisionId 1620 - ::$mRevisionTimestamp 1621 - ::$mRevisionUser 1622 - ::$mRevisionSize 1623 - ::$mInputSize 1624 - ::$mInParse 1625* LinksUpdate::getRevision and ::setRevision are hard deprecated in favor 1626 of the new ::getRevisionRecord and ::setRevisionRecord methods. 1627* A large number of exposed variables and methods of Article were deprecated as 1628 part of its planned removal: 1629 - Article::$mContext is deprecated; use getContext()/setContext() instead. 1630 - Article::__get(), ::__set() are hard deprecated, use the WikiPage properties 1631 instead. 1632 - These Article methods were hard deprecated; use their WikiPage equivalents: 1633 - ::checkFlags, 1634 - ::checkTouched, 1635 - ::clearPreparedEdit, 1636 - ::commitRollback, 1637 - ::doDeleteArticleReal, 1638 - ::doEditContent, 1639 - ::doPurge, 1640 - ::doRollback, 1641 - ::doUpdateRestrictions, 1642 - ::doViewUpdates, 1643 - ::exists, 1644 - ::followRedirect, 1645 - ::getContentHandler, 1646 - ::getContentModel, 1647 - ::getContributors, 1648 - ::getDeletionUpdates, 1649 - ::getHiddenCategories, 1650 - ::getId, 1651 - ::getLatest, 1652 - ::getLinksTimestamp, 1653 - ::getMinorEdit, 1654 - ::getRedirectTarget, 1655 - ::getRedirectURL, 1656 - ::getTimestamp, 1657 - ::getTouched, 1658 - ::hasViewableContent, 1659 - ::insertOn, 1660 - ::insertRedirect, 1661 - ::insertRedirectEntry, 1662 - ::isCountable, 1663 - ::isRedirect, 1664 - ::loadFromRow, 1665 - ::loadPageData, 1666 - ::lockAndGetLatest, 1667 - ::makeParserOptions, 1668 - ::pageDataFromId, 1669 - ::pageDataFromTitle, 1670 - ::prepareContentForEdit, 1671 - ::protectDescription, 1672 - ::protectDescriptionLog, 1673 - ::replaceSectionAtRev, 1674 - ::setTimestamp, 1675 - ::shouldCheckParserCache, 1676 - ::supportsSections, 1677 - ::triggerOpportunisticLinksUpdate, 1678 - ::updateCategoryCounts, and 1679 - ::updateRedirectOn. 1680 - Article::generateReason() was hard deprecated; instead, please use 1681 WikiPage::getAutoDeleteReason(). 1682 - Article::replaceSectionContent() was hard deprecated, use 1683 Article::replaceSectionAtRev() instead. 1684 - Article::getRevision and WikiPage::getRevision were hard deprecated in favor 1685 of the new WikiPage::getRevisionRecord method. 1686* A new UserNameUtils service was introduced. The following User methods 1687 were deprecated in favor of using the new service: 1688 - isIP 1689 - isIPRange 1690 - isValidUserName 1691 - isUsableName 1692 - isCreatableName 1693 - getCanonicalName 1694* The signature of WikiPage::doDeleteArticleReal was changed to make the user 1695 the second parameter, and the suppression option the third parameter. 1696 Previously, the third parameter was unused. Using the old signature is 1697 hard deprecated. 1698* ApiQueryRevisions::getRollbackToken, which has been soft deprecated since 1699 1.24, accepted as its third parameter a Revision object. It now accepts 1700 a RevisionRecord, and passing a Revision is hard deprecated. 1701* Passing Article to ParserCache::get() was deprecated 1702* ParserOptions::newCanonical() with no first parameter, or null as the first 1703 parameter, which falls back to using global $wgUser, is hard deprecated. 1704* Parser::fetchCurrentRevisionOfTitle, ::statelessFetchRevision, and 1705 ::getRevisionObject were hard deprecated in favor of the new 1706 ::fetchCurrentRevisionRecordOfTitle, ::statelessFetchRevisionRecord, 1707 and ::getRevisionRecordObject methods respectively. 1708* ParserOptions::getCurrentRevisionCallback and ::setCurrentRevisionCallback 1709 were hard deprecated in favor of the new ::getCurrentRevisionRecordCallback 1710 and ::setCurrentRevisionRecordCallback methods respectively. 1711* Parser::statelessFetchTemplate returns an array; accessing the Revision 1712 object returned (via the `revision` key to the array) is deprecated. Instead, 1713 use `revision-record` to retrieve the equivalent RevisionRecord. 1714* WikiPage::doEditContent returns an array, and PageUpdater::getStatus returns 1715 a Status object with an array value. For both of those arrays, accessing the 1716 Revision object returned (via the `revision` key to the array) is deprecated. 1717 Instead, use `revision-record` to retrieve the equivalent RevisionRecord. 1718* Page interface was deprecated. Use Article or WikiPage instead. 1719* The following DatabaseBlock methods are deprecated because they are no longer 1720 needed in core: chooseBlock, fromMaster, deleteIfExpired. 1721* wfGetScriptUrl() was deprecated. The script URL should be configured rather 1722 than detected. wfScript() can be used to get a configured script URL. 1723* Action::factory() with null $action argument is hard deprecated 1724* The following methods of the User class were deprecated: getDefaultOptions, 1725 getDefaultOption, getOptions, getOption, getBoolOption, getIntOption, 1726 setOption, listOptionKinds, getOptionKinds, resetOptions. Use corresponding 1727 methods in UserOptionsLookup or UserOptionsManager service classes instead. 1728* UserRetrieveNewTalks hook was deprecated without replacement. 1729* User::getNewtalk and ::setNewtalk were hard deprecated. Use service 1730 TalkPageNotificationManager instead. 1731* EditPage::matchSpamRegex and ::matchSummarySpamRegex were hard deprecated in 1732 favor of the new SpamChecker service. 1733* Title::getNotificationTimestamp, User::clearNotification, and 1734 User::clearAllNotifications were deprecated in favor of the new 1735 WatchlistNotificationManager service. 1736* SpecialPage::setListed() and SpecialPage::listed() were deprecated. Subclass 1737 UnlistedSpecialPage to set listed as false, and use SpecialPage::isListed() 1738 to get the value. 1739* CategoryPage::getCategoryViewerClass() and ::setCategoryViewerClass() were 1740 deprecated. 1741* MWHttpRequest and its subclasses PhpHttpRequest, CurlHttpRequest and 1742 GuzzleHttpRequest now require the timeout and connectTimeout options to 1743 always be specified, otherwise a deprecation warning will be raised. Most 1744 callers should use HttpRequestFactory which always sets these options. 1745* Linker::normaliseSpecialPage() has been deprecated, instead make use of 1746 LinkRenderer::normalizeTarget(). 1747* SkinTemplate::getPersonalToolsList() was soft deprecated. 1748* ChangeTags::truncateTagDescription() has been deprecated. 1749* The following methods of the User class are deprecated: getGroups, 1750 getGroupMemberships, getEffectiveGroups, getAutomaticGroups, 1751 addGroup, removeGroup, getFormerGroups, getAllGroups, getImplicitGroups, 1752 addAutopromoteOnceGroups. Use the new UserGroupManager service instead. 1753* The following methods of the UserGroupMembership class were deprecated: 1754 selectFields, getMembershipsForUser, getMembership, insert, delete, 1755 newFromRow, initFromRow, purgeExpired. 1756 Use the new UserGroupManager service instead. 1757* wfWaitForSlaves() has been hard deprecated. Use LBFactory::waitForReplication 1758 instead. It was soft deprecated in 1.27. 1759* BaseTemplate::getAfterPortlet and ::renderAfterPortlet have been deprecated in 1760 favor of the Skin::getAfterPortlet method. Skin::getAfterPortlet does not wrap 1761 the result in a div, callers are responsible for that. 1762 The hook BaseTemplateAfterPortlet, called by both methods has been deprecated 1763 as well and is replaced by SkinAfterPortlet. 1764* Autopromote class has been soft deprecated and it's methods moved into 1765 UserGroupManager. 1766* SkinTemplateBuildNavUrlsNav_urlsAfterPermalink hook has been deprecated. 1767 Use SidebarBeforeOutput hook and get the revision id from the OutputPage 1768 object. 1769* BaseTemplate::getToolbox() method has been soft deprecated. The toolbox data 1770 is now available in a sidebar data array which you can get from any class 1771 that's extending QuickTemplate class. The hook associated with this method, 1772 BaseTemplateToolbox, has been hard deprecated. To add items to the toolbox, 1773 use SidebarBeforeOutput hook instead. 1774* The SkinTemplateOutputPageBeforeExec hook is deprecated. 1775 The page [[mw:Manual:Hooks/SkinTemplateOutputPageBeforeExec]] and T60137 1776 for recommendations for alternative approaches based on how developers 1777 previously used this hook. 1778* SkinTemplateToolboxEnd hook has been deprecated. Use SidebarBeforeOutput hook 1779 instead. 1780* Using Skin::addToBodyAttributes() method to add body attributes has been 1781 deprecated. Use OutputPageBodyAttributes hook instead. 1782* Installer::getDBTypes has been hard deprecated in favor of 1783 InstallerDBSupport::getDatabases 1784* The hooks BeforeHttpsRedirect, CanIPUseHTTPS and UserRequiresHTTPS were 1785 deprecated, as part of a long-term plan to remove support for mixed 1786 HTTP/HTTPS wikis. 1787* Skin::generateDebugHTML() has been hard deprecated. Call 1788 MWDebug::getHTMLDebugLog() directly. 1789* ExternalStoreDB::getSlave(), soft deprecated in 1.34, was hard deprecated. 1790 Use ExternalStoreDB::getReplica() instead. 1791* Less variables in mediawiki.ui/variables.less file that don't follow the 1792 standard variable naming scheme (compare WikimediaUI Base) including 1793 `@colorGray* variables have been deprecated. New variables are in place and 1794 aliases have been set. Replace occurrences and use the new variables instead. 1795 1796=== Other changes in 1.35 === 1797* A new maintenance script is added (purgeExpiredWatchlistItems.php) with which 1798 to delete expired watchlist items. These items will also be deleted during 1799 wiki editing if $wgWatchlistPurgeRate is > 0. This maintenance script only 1800 has effect if $wgWatchlistExpiry is true. It is recommended that a cronjob or 1801 similar be set up to run it at least daily. 1802* Title::purgeSquid is deprecated. Use MediaWikiServices::getHtmlCacheUpdater. 1803* SpecialVersion::getExtLicenseFileName() has been deprecated, use 1804 MediaWiki\ExtensionInfo::getLicenseFileNames() instead. 1805* SpecialVersion::getExtAuthorsFileName() has been deprecated, use 1806 MediaWiki\ExtensionInfo::getAuthorsFileName() instead. 1807* Migration to the new content storage schema is complete, all backwards 1808 compatibility code and duplication in the database have been removed. 1809 The old schema was a 1:1 relationship modeled by 1810 revision.text_id -> text.old_id. The new schema is a n:m relationship, 1811 revision.rev_id <- slots.slot_revision_id|slots.slot_content_id -> 1812 content.content_id|content.content_address -> text.old_id. The same applies 1813 to the archive table. 1814 The following fields were removed: 1815 - revision.rev_text_id, replaced by content.content_address 1816 - revision.rev_content_model, replaced by content.content_model, 1817 referencing content_models.model_id 1818 - revision.rev_content_format, replaced by automatic detecting in 1819 ContentHandler 1820 - archive.ar_text_id, replaced by content.content_address 1821 - archive.ar_content_model, replaced by content.content_model, 1822 referencing content_models.model_id 1823 - archive.ar_content_format, replaced by automatic detecting in 1824 ContentHandler 1825* Migration to normalized storage of edit comments and user names is 1826 progressing. The following fields were unused and have been removed: 1827 - revision.rev_comment, 1828 replaced by rev_comment_id referencing comment.comment_id. 1829 - revision.rev_user and rev_user_text, 1830 replaced by rev_actor referencing actor.actor_id. 1831 Note that archive.ar_user, archive.ar_user_text, and archive.ar_comment 1832 had already been removed in previous releases. 1833* The printableversion has been marked as deprecated per T167956. 1834* (T30162, T245387) The installer supports using a Postgres server running 1835 on a custom port other than 5432. 1836 1837== Compatibility == 1838MediaWiki 1.35 requires PHP 7.3.19 or later, and the following PHP extensions: 1839 1840* ctype 1841* dom 1842* fileinfo 1843* iconv 1844* json 1845* mbstring 1846* xml 1847 1848MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used, 1849but support for them is somewhat less mature. 1850 1851The supported versions are: 1852 1853* MySQL 5.5.8 or later 1854* PostgreSQL 9.2 or later 1855* SQLite 3.8.0 or later 1856 1857== Online documentation == 1858Documentation for both end-users and site administrators is available on 1859MediaWiki.org, and is covered under the GNU Free Documentation License (except 1860for pages that explicitly state that their contents are in the public domain): 1861 1862 https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation 1863 1864== Mailing list == 1865A mailing list is available for MediaWiki user support and discussion: 1866 1867 https://lists.wikimedia.org/mailman/listinfo/mediawiki-l 1868 1869A low-traffic announcements-only list is also available: 1870 1871 https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 1872 1873It's highly recommended that you sign up for one of these lists if you're 1874going to run a public MediaWiki, so you can be notified of security fixes. 1875 1876== IRC help == 1877There's usually someone online in #mediawiki on irc.libera.chat. 1878