825 lines
40 KiB
Text
825 lines
40 KiB
Text
= MediaWiki 1.37 =
|
||
|
||
== MediaWiki 1.37.0-PRERELEASE ==
|
||
|
||
THIS IS NOT A RELEASE YET
|
||
|
||
MediaWiki 1.37 is an alpha-quality development branch, and is not recommended
|
||
for use in production.
|
||
|
||
== Upgrading notes for 1.37 ==
|
||
Don't forget to always back up your database before upgrading!
|
||
|
||
See the file UPGRADE for more detailed per-version upgrade instructions from the
|
||
oldest supported upgrading version, MediaWiki 1.27.
|
||
|
||
Some specific notes for MediaWiki 1.37 upgrades are below:
|
||
* …
|
||
|
||
For notes on 1.36.x and older releases, see HISTORY.
|
||
|
||
=== Configuration changes for system administrators in 1.37 ===
|
||
* (T242768) The PasswordCannotMatchUsername password policy has been removed,
|
||
please use PasswordCannotBeSubstringInUsername instead. If you have not
|
||
customised your password policies, there will be nothing to do here.
|
||
* …
|
||
|
||
==== New configuration ====
|
||
* $wgBrowserFormatDetection - This setting allows the enabling or disabling
|
||
of automatic detection of possible phone numbers in a webpage in Safari on iOS.
|
||
* …
|
||
|
||
==== Changed configuration ====
|
||
* $wgContentHandlerTextFallback - This setting, which defines how to
|
||
react if a plain text version of a non-text Content object is
|
||
requested using ContentHandler::getContentText(), is deprecated.
|
||
* $wgActions was reworked to support injecting dependencies into
|
||
Action subclasses. Previously, $wgActions was an array where the
|
||
keys were the names of actions, and the values had the following
|
||
impacts (for a given key 'Foo')
|
||
- `true`: use the class 'FooAction' unless for a specific page
|
||
WikiPage::getActionOverrides() wants to override that action
|
||
- a string: use the class with that name, and do not allow overriding
|
||
on a per-page basis
|
||
- `false`: the action is disabled
|
||
- a callable: use the Action instance returned by invoking that
|
||
callback, and do not allow overriding on a per-page basis
|
||
- an object: use that specific Action instance, and do not allow
|
||
overriding on a per-page basis.
|
||
As part of T253078, values can now be arrays that are not callables,
|
||
which are treated as ObjectFactory specs, allowing for services to
|
||
be injected. Additionally, the distinction between values that allow
|
||
per-page overrides and those that do not was removed - all actions
|
||
can now be overridden on a per-page basis using
|
||
WikiPage::getActionOverrides().
|
||
* $wgShellboxUrl is deprecated, use $wgShellboxUrls as a mapping of
|
||
service => URL instead.
|
||
* $wgIncludejQueryMigrate Default value for this configuration has changed
|
||
from true to false. This may break gadgets that depended on methods removed
|
||
in jQuery 3. See T280944 for more information.
|
||
* $wgMimeTypeBlacklist - This configuration array now prohibits the RFC 4329
|
||
form of JavaScript, 'application/javascript', as well as previous MIME types.
|
||
* A number of settings have been renamed. The former configuration variable
|
||
names are deprecated, but will be used as the fall back if they are still set,
|
||
and remain temporarily available for extensions which try to read them:
|
||
- $wgFileBlacklist is now $wgProhibitedFileExtensions
|
||
- $wgMimeTypeBlacklist is now $wgMimeTypeExclusions
|
||
- $wgEnableUserEmailBlacklist is now $wgEnableUserEmailMuteList
|
||
- $wgShortPagesNamespaceBlacklist is now $wgShortPagesNamespaceExclusions
|
||
* …
|
||
|
||
==== Removed configuration ====
|
||
* $wgLegacyJavaScriptGlobals, deprecated in 1.36.
|
||
* $wgShowDBErrorBacktrace, deprecated and non-functional since 1.32.
|
||
* $wgShowSQLErrors, deprecated and non-functional since 1.32.
|
||
* $wgLangObjCacheSize - The LanguageFactory service now always retains
|
||
at most 10 objects in its LRU-cache.
|
||
* (T274695) $wgAjaxEditStash, deprecated in 1.36.
|
||
* …
|
||
|
||
=== New user-facing features in 1.37 ===
|
||
* (T161934) MediaWiki now supports JPEG2000 files, to a limited extent.
|
||
* Media files uploaded server side using the importImages.php maintenance
|
||
script now have the "mw-server-side-upload" change tag.
|
||
* …
|
||
|
||
=== New developer features in 1.37 ===
|
||
* …
|
||
|
||
=== External library changes in 1.37 ===
|
||
* …
|
||
|
||
==== New external libraries ====
|
||
* Added whatwg-fetch 3.6.2.
|
||
* Added wikimedia/normalized-exception 1.0.1.
|
||
* …
|
||
|
||
===== New development-only external libraries =====
|
||
* …
|
||
|
||
==== Changed external libraries ====
|
||
* Updated OOjs from v5.0.0 to v6.0.0
|
||
* Updated OOUI from v0.41.3 to v0.42.0
|
||
* Updated WVUI from v0.1.0 to v0.3.0
|
||
* Updated cssjanus/cssjanus from v1.3.0 to v2.0.0.
|
||
* Updated psr/container from v1.0.0 to v1.1.1.
|
||
* Updated wikimedia/minify from v2.2.2 to v2.2.4.
|
||
* Updated wikimedia/object-factory from v3.0.0 to v3.0.2.
|
||
* Updated wikimedia/parsoid from v0.13.0-a20 to v0.14.0-a1.
|
||
* Updated wikimedia/relpath from v2.1.1 to v3.0.0.
|
||
* Updated wikimedia/remex-html from v2.3.1 to v2.3.2.
|
||
* Updated wikimedia/shellbox from v1.0.4 to v2.0.0.
|
||
* Updated wikimedia/wait-condition-loop from v2.0.1 to v2.0.2.
|
||
* …
|
||
|
||
===== Changed development-only external libraries =====
|
||
* Updated qunit from 2.10.0 to 2.16.0.
|
||
* …
|
||
|
||
==== Removed external libraries ====
|
||
* The pimple/pimple development-only library has been removed.
|
||
* …
|
||
|
||
=== Bug fixes in 1.37 ===
|
||
* …
|
||
|
||
=== Action API changes in 1.37 ===
|
||
* …
|
||
|
||
=== Action API internal changes in 1.37 ===
|
||
* …
|
||
|
||
=== Languages updated in 1.37 ===
|
||
MediaWiki supports over 350 languages. Many localisations are updated regularly.
|
||
Below only new and removed languages are listed, as well as changes to languages
|
||
because of Phabricator reports.
|
||
|
||
* (T280435) LRM and RLM characters were removed from names of languages with
|
||
parentheses in Names.php
|
||
* (T283422) Add namespace name translations and change the autonym of
|
||
the Kinyarwanda language to "Ikinyarwanda".
|
||
* (T283423) Change the autonym of the Lombard language from "lumbaart"
|
||
to "lombard".
|
||
* (T279619) Added language support for Dagbani (dag).
|
||
* (T282085) Added language support for Malay in Arabic (Jawi) script (ms-arab).
|
||
* (T283053) Added language support for Ojibwe (ojb).
|
||
* (T283480) Added language support for Wallisian (wls, Fakaʻuvea).
|
||
* (T284002) Added language support for Paiwan (pwn).
|
||
* (T284044) Added language support for Carpathian Romani (rmc).
|
||
* (T286460) Added language support for Gun (guw, Gungbe).
|
||
* (T287345) Added language support for Baoulé (bci).
|
||
* (T25216) Started the renaming of the language code for Norman from nrm to
|
||
nrf.
|
||
|
||
=== Breaking changes in 1.37 ===
|
||
* The Revision class, hard deprecated in 1.35, was removed entirely. As
|
||
part of this, the following hooks that included a Revision object
|
||
were removed:
|
||
- ArticleRevisionUndeleted - use RevisionUndeleted
|
||
- ArticleRollbackComplete - use RollbackComplete
|
||
- DiffRevisionTools - use DiffTools
|
||
- DiffViewHeader - use DifferenceEngineViewHeader
|
||
- HistoryRevisionTools - use HistoryTools
|
||
- NewRevisionFromEditComplete - use RevisionFromEditComplete
|
||
- PageContentInsertComplete - use PageSaveComplete
|
||
- PageContentSaveComplete - use PageSaveComplete
|
||
- ParserFetchTemplate - use BeforeParserFetchTemplateRevisionRecord
|
||
- RevisionInsertComplete - use RevisionRecordInserted
|
||
- TitleMoveComplete - use PageMoveComplete
|
||
- TitleMoveCompleting - use PageMoveCompleting
|
||
- UndeleteShowRevision - no replacement
|
||
- UserRetrieveNewTalks - no replacement
|
||
and the following methods and variables have been removed
|
||
- Article::$mRevision
|
||
- Article::getRevisionFetched()
|
||
- ContribsPager::tryToCreateValidRevision()
|
||
- EditPage::$mBaseRevision
|
||
- EditPage::getBaseRevision()
|
||
- LinksUpdate::getRevision()
|
||
- LinksUpdate::setRevision()
|
||
- PageArchive::getArchivedRevision()
|
||
- PageArchive::getPreviousRevision()
|
||
- PageArchive::getRevision()
|
||
- Parser::$mRevisionObject
|
||
- Parser::fetchCurrentRevisionOfTitle()
|
||
- Parser::getRevisionObject()
|
||
- Parser::statelessFetchRevision()
|
||
- ParserOptions::getCurrentRevisionCallback()
|
||
- ParserOptions::setCurrentRevisionCallback()
|
||
- Title::countAuthorsBetween()
|
||
- Title::getFirstRevision()
|
||
- User::getNewMessageLinks()
|
||
- User::getNewMessageRevisionId()
|
||
- User::setNewtalk()
|
||
- WikiPage::getOldestRevision()
|
||
- WikiPage::getRevision()
|
||
- WikiPage::getUndoContent()
|
||
- WikiPage::updateIfNewerOn()
|
||
and the following methods no longer accept Revision objects as parameters:
|
||
- CategoryMembershipChange::__construct()
|
||
- ContentHandler::getUndoContent()
|
||
- DerivedPageDataUpdater::prepareUpdate()
|
||
- DifferenceEngine::getRevisionHeader()
|
||
- Linker::buildRollbackLink()
|
||
- Linker::generateRollback()
|
||
- Linker::getRevDeleteLink()
|
||
- Linker::getRollbackEditCount()
|
||
- Linker::revComment()
|
||
- Linker::revUserLink()
|
||
- Linker::revUserTools()
|
||
- WikiPage::doDeleteUpdates()
|
||
- WikiPage::doEditUpdates()
|
||
- WikiPage::hasDifferencesOutsideMainSlot()
|
||
- WikiPage::onArticleEdit()
|
||
- WikiPage::prepareContentForEdit()
|
||
- WikiPage::updateRevisionOn()
|
||
The following methods return arrays that formerly included a 'revision'
|
||
key that would emit deprecation warnings when accessed and return a
|
||
Revision object. The Revision object has been removed from the arrays,
|
||
and the 'revision-record' key should be used to get the relevant
|
||
RevisionRecord instead:
|
||
- PageUpdater::doCreate()
|
||
- PageUpdater::doModify()
|
||
- Parser::statelessFetchTemplate()
|
||
- WikiPage::doEditContent()
|
||
The ParserOptions `templateCallback` option is a callback that is called
|
||
in Parser::fetchTemplateAndTitle() and should return an array - the
|
||
'revision' key to that array used to be a Revision object and was used if
|
||
no 'revision-record' was returned - it is now ignored.
|
||
* Previously, the classes RevisionTestModifyableContent and
|
||
RevisionTestModifyableContentHandler were loaded for use in tests, but
|
||
were only used within the tests for the since-removed Revision class. This
|
||
content and content handler class were removed without deprecation.
|
||
* WANObjectCache::HOLDOFF_NONE, deprecated since 1.35, was removed.
|
||
Use HOLDOFF_TTL_NONE instead.
|
||
* ResourceLoader::makeVersionQuery without $modules parameter, deprecated
|
||
since 1.34, is no longer supported.
|
||
* LocalFile::recordUpload2(), deprecated since 1.35, was removed.
|
||
* The following methods and fields in the Language class, deprecated since
|
||
1.35, have been removed:
|
||
- classFromCode()
|
||
- clearCaches()
|
||
- convertTitle()
|
||
- findVariantLink()
|
||
- mConverter
|
||
- updateConversionTable()
|
||
* The following methods in the Parser class have been removed after having
|
||
been deprecated in 1.35:
|
||
- fetchTemplate()
|
||
- Title()
|
||
* (T273354) When an edit is prevented by an 'EditFilterMergedContent' hook
|
||
handler without changing the status, the edit form will now be displayed.
|
||
* User::clearNotification() which had been deprecated in 1.35 has been removed.
|
||
Use WatchlistManager::clearTitleUserNotification() instead.
|
||
* User::getNewtalk() which had been deprecated in 1.35 has been removed. Use
|
||
TalkPageNotificationManager::userHasNewMessages() instead.
|
||
* Autopromote class, deprecated since 1.35, was removed. Use
|
||
UserGroupManager instead.
|
||
* The following classes, hard-deprecated since 1.36, have been removed:
|
||
CachedAction, SpecialCachedPage, CacheHelper, ICacheHelper.
|
||
* The hooks BeforeHttpsRedirect, CanIPUseHTTPS and UserRequiresHTTPS, deprecated
|
||
in 1.35, were removed.
|
||
* The TitleArrayFromResult hook, deprecated in 1.36, was removed.
|
||
* The deprecated "es6-promise" alias ResourceLoader module has been removed. Use
|
||
"es6-polyfills" directly intead.
|
||
* The deprecated "mediawiki.legacy.protect" ResourceLoader module, deprecated
|
||
since 1.36, has been removed. Use "mediawiki.action.protect" instead.
|
||
* AuthenticationProvider interface doesn't extend LoggerAwareInterface.
|
||
So AuthenticationProvider can't be typehinted as LoggerAwareInterface.
|
||
* User::getGrantName(), hard deprecated since 1.36, has been removed.
|
||
Use MWGrants::grantName instead.
|
||
* SessionProvider class doesn't extend LoggerAwareInterface.
|
||
So SessionProvider can't be typehinted as LoggerAwareInterface.
|
||
* The following ApiBase methods, deprecated since 1.35, have been removed:
|
||
- ApiBase::explodeMultiValue
|
||
- ApiBase::parseMultiValue
|
||
- ApiBase::validateLimit
|
||
- ApiBase::validateTimestamp
|
||
* User::idCacheByName public static field was removed without deprecation.
|
||
instead of using it, get a UserIdentity by name from UserIdentityLookup.
|
||
* IDatabase::upsert() and IDatabase::replace() only accept a single unique key.
|
||
Previously, a warning was issued if there were multiple unique keys provided.
|
||
* The MediaWiki:Autoblock_whitelist block exemption control was moved in 1.36 to
|
||
MediaWiki:Block-autoblock-exemptionlist. The backward-compatibility of reading
|
||
the old MediaWiki:Autoblock_whitelist page has now been dropped.
|
||
* The following overridable methods in File hierarchy has changed signatures:
|
||
- File::deleteFile - now accepts UserIdentity instead of User
|
||
- File::getDescription - now accepts Authority instead of User
|
||
- File::userCan - now accepts Authority instead of User
|
||
- LocalFile::deleteOldFile - now accepts UserIdentity instead of User
|
||
* The following global methods, each deprecated since 1.36, have been removed:
|
||
- wfAppendToArrayIfNotDefault
|
||
- wfAcceptToPrefs
|
||
- wfConfiguredReadOnlyReason
|
||
- wfDebugMem
|
||
- wfGetPrecompiledData
|
||
- wfNegotiateType
|
||
* The following deprecated methods of Title class have been removed:
|
||
- nameOf, deprecated in 1.36
|
||
- getPreviousRevisionID, deprecated in 1.34
|
||
- getNextRevisionID, deprecated in 1.34
|
||
- getEarliestRevTime, deprecated in 1.35
|
||
* UploadBase::stashFile, deprecated since 1.28, was removed.
|
||
* wfGetRusage(), deprecated since 1.35, has been removed.
|
||
* The following CLI options were removed from tests/phpunit.php:
|
||
- use-filebackend
|
||
- use-jobqueue
|
||
- use-bagostuff
|
||
The following options (inherited from Maintenance) were also removed:
|
||
- conf
|
||
- dbuser
|
||
- dbpass
|
||
- dbdefaultgroup
|
||
- globals
|
||
- memory-limit
|
||
- profiler
|
||
- server
|
||
The following options were changed to environment variables:
|
||
- wiki => PHPUNIT_WIKI
|
||
- use-normal-tables => PHPUNIT_USE_NORMAL_TABLES
|
||
- use-filebackend => PHPUNIT_USE_FILEBACKEND
|
||
- use-bagostuff => PHPUNIT_USE_BAGOSTUFF
|
||
- use-jobqueue => PHPUNIT_USE_JOBQUEUE
|
||
This is so that we can use the default PHPUnit entry point (T90875).
|
||
* The PHPUNIT_REUSE_DB / --reuse-db option was removed from the phpunit.php
|
||
runner. It had been broken for at least three years already. The original use
|
||
case was speeding up tests on Oracle, but Oracle support was dropped several
|
||
releases ago.
|
||
* The MediaWikiPHPUnitTest__endTestHook and MediaWikiPHPUnitTest__startTestHook
|
||
PHPUnit hooks were removed. MediaWikiHooksPHPUnitExtension was also removed.
|
||
* EntryPoint::getTextFormatters() was made private without a deprecation period;
|
||
it had no known external callers.
|
||
* DatabaseBlock::chooseBlock, deprecated since 1.35, was removed.
|
||
* SpecialPageFactory::getRestrictedPages, deprecated since 1.36, was removed.
|
||
* SpecialBlock::validateTarget, deprecated since 1.36, was removed.
|
||
* The PatchFileLocation trait was removed without deprecation.
|
||
* ActorMigrationBase::getExistingActorId and ::getNewActorId, hard deprecated
|
||
since 1.36, were removed.
|
||
* Hook handlers implementing MediaWikiServicesHook are prohibited from having
|
||
services injected. This is because by definition, this hook runs before the
|
||
service container is fully initialized.
|
||
* The protected property LocalFile::$metadata was removed without deprecation.
|
||
* WatchedItem::getUser, hard deprecated since 1.36, has been removed.
|
||
* AuthManager::singleton, hard deprecated since 1.36, has been removed.
|
||
* The AugmentPageProps class was removed without deprecation. It had no known
|
||
uses.
|
||
* Html::infobox, deprecated since 1.36, was removed.
|
||
* ParserOptions::__construct() now requires that the first parameter is a
|
||
UserIdentity object - passing `null` used to fallback to the global
|
||
$wgUser but was deprecated since 1.36.
|
||
* ParserOptions::newCanonical() no longer supports the first parameter being
|
||
null (or omitted entirely), which would fallback to the global $wgUser but
|
||
was deprecated since 1.35.
|
||
* The SkinTemplatePreventOtherActiveTabs hook, deprecated in 1.35, was removed
|
||
entirely.
|
||
* The SkinTemplateTabAction hook, deprecated in 1.35, was removed entirely.
|
||
* The SkinTemplateBuildNavUrlsNav_urlsAfterPermalink hook, deprecated in 1.35,
|
||
was removed entirely.
|
||
* The SkinTemplateToolboxEndHook, deprecated in 1.35, was removed entirely.
|
||
* The following methods of RevisionStore class, formerly hard deprecated,
|
||
were removed:
|
||
- ::newMutableRevisionFromArray,
|
||
- ::loadRevisionFromPageId,
|
||
- ::loadRevisionFromTitle,
|
||
- ::loadRevisionFromTimestamp,
|
||
- ::listRevisionSizes
|
||
* LogEntry::getPerformer, deprecated since 1.36, was removed along with methods
|
||
in subclasses: DatabaseLogEntry, ManualLogEntry, RCDatabaseLogEntry.
|
||
* Skin::getRelevantUser now returns an instance of UserIdentity, not necessarily
|
||
a User object. There is no known usages in MediaWiki ecosystem that were not
|
||
satisfied with UserIdentity.
|
||
* Direct construction of MergeHistory class, deprecated since 1.35, is no longer
|
||
supported. Use MergeHistoryFactory instead. MergeHistory::checkPermissions,
|
||
deprecated since 1.36, was removed.
|
||
* Skin::generateDebugHTML(), deprecated since 1.35, was removed. Call
|
||
MWDebug::getHTMLDebugLog() directly.
|
||
* The ApiTestCase class no longer interacts with the global $wgUser.
|
||
Previously, the global variable was set at the start of each test, and in
|
||
ApiTestCase::doApiRequest() if a performer was specified $wgUser was
|
||
updated to match, and if no performer was specified $wgUser was used
|
||
instead. Now, $wgUser is not updated, and if no performer is specified
|
||
the reusable TestUser object for the sysop is relied on. Extensions
|
||
or skins that rely on the global $wgUser variable (which has been
|
||
deprecated since 1.35) should instead retrieve the acting user from the
|
||
relevant context source.
|
||
* SkinTemplate::makeArticleUrlDetails, deprecated since 1.35, was removed.
|
||
* Skin::makeNSUrl, deprecated since 1.35, was removed.
|
||
* Skin::getRevisionId(), deprecated since 1.34, was removed. Use
|
||
OutputPage::getRevisionId() instead.
|
||
* Skin::isRevisionCurrent(), deprecated since 1.34, was removed. Use
|
||
OutputPage::isRevisionCurrent() instead.
|
||
* AbstractBlock::parseTarget(), deprecated since 1.36, was removed.
|
||
* ArticleEditUpdates hook, deprecated since 1.35, was removed.
|
||
* @stable to extend class CentralIdLookup has following changes:
|
||
- Protected ::checkAudience method now returns Authority instead of User.
|
||
- A number of it's @stable to override methods now accept Authority instead
|
||
of User as $audience parameter.
|
||
- A number of methods now accept UserIdentity instead of User parameter.
|
||
- ::localUserFromCentralId method now returns UserIdentity and not necessarily
|
||
a User object.
|
||
All extensions that extend this class or use this method were updated to be
|
||
ready to the new behavior.
|
||
* WatchedItemStoreInterface::enqueueWatchlistExpiryJob, deprecated since 1.36,
|
||
was removed.
|
||
* ResultWrapper is now abstract. It cannot be directly constructed (T286694).
|
||
* The SecondaryDataUpdates hook, deprecated in 1.32, was removed entirely.
|
||
* Content::getDeletionUpdates(), was removed. Use
|
||
ContentHandler::getDeletionUpdates() instead.
|
||
* Content::getSecondaryDataUpdates(), was removed. Use
|
||
ContentHandler::getSecondaryDataUpdates() instead.
|
||
* wfDiff(), deprecated since 1.25, has been removed.
|
||
* Language::$mLangObjCache, deprecated since 1.35, was removed.
|
||
* Language::$transformData, deprecated since 1.35, was removed.
|
||
* Language::transformUsingPairFile() was marked @internal. Its deprecated
|
||
parameters are no longer supported.
|
||
* SpecialMute::getTarget(), unused outside of the SpecialMute class, was
|
||
made private.
|
||
* The Skin::setupSkinUserCss method deprecated in 1.32, was removed. Please use
|
||
skin registration instead.
|
||
* The ResourceLoaderSkinModule `legacy`, `content` and `content-thumbnails`
|
||
features were deprecated. Skins should instead select from the features
|
||
listed on [[mw:Manual:ResourceLoaderSkinModule]].
|
||
* ParserCache::getKey and ::getEtag, deprecated since 1.36, were removed.
|
||
* The BaseTemplateToolbox hook, deprecated since 1.35, was removed.
|
||
* Previously a capitalize-all-nouns class was added to the body element of
|
||
languages where nouns must be capitalized. This class is no longer added to
|
||
the body tag and must be provided by skins.
|
||
* The SkinTemplateOutputPageBeforeExec hook, deprecated since 1.35, was removed.
|
||
* Calling Message::toString() without a parameter, hard-deprecated since 1.36,
|
||
is not longer supported. You can instead use the explicit formatting methods
|
||
directly, such as Message::text() and Message::escaped().
|
||
* Article::getContentObject, deprecated since 1.32, was removed.
|
||
* Article::delete(), Article::confirmDelete() and ImagePage::delete() were
|
||
hard-deprecated. The logic responsible for building the form is being moved to
|
||
DeleteAction, while the actual deletion logic will be moved to a separate
|
||
service.
|
||
* WikiImporter::debugRevisionHandler, unused and for debug only, was removed.
|
||
* Content::preloadTransform was hard-deprecated since 1.37,
|
||
use ContentTransformer::preloadTransform instead. Extensions defining
|
||
a content model should override ContentHandler::preloadTransform.
|
||
* Constructing WikiPage objects from Title instances that cannot exist,
|
||
hard-deprecated in 1.36, now throws an exception. Additionally, WikiPage
|
||
now implements ProperPageIdentity, rather than just PageIdentity.
|
||
* Content::preSaveTransform was hard-deprecated since 1.37,
|
||
use ContentTransformer::preSaveTransform instead. Extensions defining
|
||
a content model should override ContentHandler::preSaveTransform.
|
||
* Skin::bottomScripts is deprecated. Use OutputPage::getBottomScripts instead.
|
||
* …
|
||
|
||
=== Deprecations in 1.37 ===
|
||
* JobQueue::getWiki, deprecated in 1.33, now emits deprecation warnings.
|
||
* In AbstractBlock, the getTargetAndType() and getTarget() methods are
|
||
hard deprecated. Instead use getTargetName() and getTargetUserIdentity()
|
||
together with getType().
|
||
* Deprecated passing UserIdentity to
|
||
WatchlistManager::clearAllUserNotifications() and
|
||
WatchlistManager::clearTitleUserNotifications(). Pass Authority instead.
|
||
* Deprecated passing LinkTarget to
|
||
WatchlistManager::clearTitleUserNotifications() and
|
||
WatchlistManager::getTitleNotificationTimestamp(). Pass PageIdentity instead.
|
||
* Deprecated User::isWatched(), User::isTempWatched(), User::addWatch(), and
|
||
User::removeWatch(). Use corresponding methods in WatchlistManager instead.
|
||
* Deprecated WatchAction::doWatchOrUnwatch(). Use WatchlistManager::setWatch()
|
||
instead.
|
||
* Deprecated WatchAction::doWatch() and WatchAction::doUnwatch(). Use
|
||
WatchlistManager::addWatch() or WatchlistManager::removeWatch(), instead.
|
||
* WatchAction::getWatchToken is hard deprecated. Instead use
|
||
CsrfTokenSet::getToken
|
||
* Action::getHookContainer() has been marked as internal. Actions that require
|
||
access to a hook container should have one injected instead.
|
||
* The getTitle() and setTitle() methods in Parser have been deprecated.
|
||
Use getPage() and setPage() instead.
|
||
* Title::isWatchable() has been deprecated. Use WatchlistManager::isWatchable()
|
||
instead.
|
||
* Methods and classes related to the primary database, previously referred to as
|
||
'master', have been deprecated, with the new ones replacing them as follows:
|
||
- The DBMasterPos and MySQLMasterPos classes have been respectively renamed to
|
||
DBPrimaryPos and MySQLPrimaryPos.
|
||
- LocalRepo::getMasterDB() -> ::getPrimaryDB()
|
||
- ForeignDBRepo::getMasterDB() -> ::getPrimaryDB()
|
||
- JobQueueDB::getMasterDB() -> ::getPrimaryDB()
|
||
- ForeignDBViaLBRepo::getMasterDB() -> ::getPrimaryDB()
|
||
- DBFileJournal::getMasterDB() -> ::getPrimaryDB()
|
||
- ILoadBalancer::getMasterPos() -> ::getPrimaryPos()
|
||
- IDatabase::getMasterPos() -> ::getPrimaryPos()
|
||
- ILoadBalancer::finalizeMasterChanges() -> ::finalizePrimaryChanges()
|
||
- ILoadBalancer::approveMasterChanges() -> ::approvePrimaryChanges()
|
||
- ILoadBalancer::beginMasterChanges() -> ::beginPrimaryChanges()
|
||
- ILBFactory::beginMasterChanges() -> ::beginPrimaryChanges()
|
||
- ILoadBalancer::commitMasterChanges() -> ::commitPrimaryChanges()
|
||
- ILBFactory::commitMasterChanges() -> ::commitPrimaryChanges()
|
||
- IDatabase::getTopologyRootMaster() -> ::getTopologyRootPrimary()
|
||
- IDatabase::masterPosWait() -> ::primaryPosWait()
|
||
- ILoadBalancer::runMasterTransactionIdleCallbacks() ->
|
||
::runPrimaryTransactionIdleCallbacks()
|
||
- ILoadBalancer::runMasterTransactionListenerCallbacks() ->
|
||
::runPrimaryTransactionListenerCallbacks()
|
||
- ILoadBalancer::rollbackMasterChanges() -> ::rollbackPrimaryChanges()
|
||
- ILBFactory::rollbackMasterChanges() -> ::rollbackPrimaryChanges()
|
||
- ILoadBalancer::flushMasterSnapshots() -> ::flushPrimarySnapshots()
|
||
- ILoadBalancer::hasMasterConnection() -> ::hasPrimaryConnection()
|
||
- ILoadBalancer::hasMasterChanges() -> ::hasPrimaryChanges()
|
||
- ILBFactory::hasMasterChanges() -> ::hasPrimaryChanges()
|
||
- ILoadBalancer::lastMasterChangeTimestamp() -> ::lastPrimaryChangeTimestamp()
|
||
- ILoadBalancer::hasOrMadeRecentMasterChanges() ->
|
||
::hasOrMadeRecentPrimaryChanges()
|
||
- ILBFactory::hasOrMadeRecentMasterChanges() ->
|
||
::hasOrMadeRecentPrimaryChanges()
|
||
- ILoadBalancer::pendingMasterChangeCallers() ->
|
||
::pendingPrimaryChangeCallers()
|
||
- ILoadBalancer::forEachOpenMasterConnection() ->
|
||
::forEachOpenPrimaryConnection()
|
||
- ILoadBalancer::waitForMasterPos() -> ::waitForPrimaryPos()
|
||
- Database::assertIsWritableMaster() -> ::assertIsWritablePrimary()
|
||
- RevDelList::reloadFromMaster -> ::reloadFromPrimary()
|
||
- ExternalStoreDB::getMaster -> ::getPrimary()
|
||
- DatabaseMysqlBase::getMasterServerInfo() -> ::getPrimaryServerInfo()
|
||
- MWExceptionHandler::rollbackMasterChangesAndLog() ->
|
||
::rollbackPrimaryChangesAndLog()
|
||
* wfIncrStats(), deprecated in 1.36, now emits deprecation warnings.
|
||
* wfCanIPUseHTTPS() is now deprecated, and always returns true.
|
||
* The UserLoadFromDatabase hook has been deprecated. It had no known uses.
|
||
* AbstractAuthenticationProvider ::setLogger(), ::setManager(), ::setConfig(),
|
||
::setHookContainer() were soft deprecated. Use ::init() to inject
|
||
dependencies or override ::postInitSetup() to do any custom
|
||
post-initialization configuration.
|
||
* The following methods in ApiPageSet have been deprecated:
|
||
- getTitles(), use getTargets() instead.
|
||
- getGoodTitles(), use getGoodPages() instead.
|
||
- getMissingTitles(), use getMissingPages() instead.
|
||
- getGoodAndMissingTitles(), use getGoodAndMissingPages() instead.
|
||
- getRedirectTitles(), use getRedirectTargets() instead.
|
||
- getSpecialTitles(), use getSpecialPages() instead.
|
||
* The following functions from the User class, deprecated in 1.35, now emit
|
||
deprecation warnings:
|
||
- getOptions
|
||
- isIP
|
||
- isUsableName
|
||
- isCreatableName
|
||
- getCanonicalName
|
||
- addAutopromoteOnceGroups
|
||
- getEffectiveGroups
|
||
- getAutomaticGroups
|
||
- getFormerGroups
|
||
- getIntOption
|
||
- getBoolOption
|
||
* The following methods in User were deprecated:
|
||
- ::idFromName - use UserIdentityLookup::getUserIdentityByName instead.
|
||
- ::resetIdByNameCache - in tests, reset service container. No replacement
|
||
needed in production code.
|
||
* Use of ActorMigration for any table except revision, deprecated in 1.34, now
|
||
emits deprecation warnings. Instead of getInsertValues(), use
|
||
ActorNormalization::acquireActorId(). Instead of getWhere() and getJoin(),
|
||
do your own join on the actor table.
|
||
* DatabasePostgres::remappedTableName() and its dependent constructor parameter
|
||
'keywordTableMap' are deprecated. Reserved identifiers that are used as table
|
||
names should be quoted where necessary.
|
||
* LinkCache::singleton(), deprecated since 1.28, now emits deprecation warnings.
|
||
* MessageCache::singleton(), deprecated since 1.34, now emits deprecation
|
||
warnings.
|
||
* LockManagerGroup::singleton() and ::destroySingletons(), deprecated since
|
||
1.34, now emit deprecation warnings.
|
||
* HtmlFileCacheUpdate::newFromTitles() is now deprecated and emitting warnings.
|
||
Use newFromPages() instead.
|
||
* SessionProvider ::setLogger(), ::setManager(), ::setConfig(),
|
||
::setHookContainer() were soft deprecated. Use ::init() to inject
|
||
dependencies or override ::postInitSetup() to do any custom
|
||
post-initialization configuration.
|
||
* User->isLoggedIn(), deprecated since 1.36, now emits deprecation warnings. Use
|
||
the method it wraps, User->isRegistered(), instead.
|
||
* FileBackendGroup::singleton() and ::destroySingletons(), deprecated since
|
||
1.35, now emit deprecation warnings.
|
||
* The first parameter of User::getBlock should now be an integer using the
|
||
Authority::FOR_XXX constants. Providing a boolean is deprecated.
|
||
* ApiBase::addBlockInfoToStatus() is deprecated for use by extensions. It is now
|
||
marked as @internal and may be deleted in the future.
|
||
It should not be necessary to call this method, Authority should be providing
|
||
all relevant information via a PermissionStatus object.
|
||
* JobQueueGroup::singleton was deprecated - use
|
||
MediaWikiServices::getJobQueueGroup instead.
|
||
* JobQueueGroup::destroySingletons was deprecated. JobQueueGroups are now
|
||
automatically destroyed after tests.
|
||
* SessionProvider ::setLogger(), ::setManager(), ::setConfig(),
|
||
::setHookContainer() were hard deprecated. Use ::init() to inject
|
||
dependencies or override ::postInitSetup() to do any custom
|
||
post-initialization configuration.
|
||
* ContentHandler::getContentText() is now soft deprecated.
|
||
Use Content::getText() instead.
|
||
* MediaWiki\User\UserNamePrefixSearch::search() previously accepted as
|
||
its first parameter either the string 'public' or a UserIdentity object,
|
||
to filter results for. It now expects an Authority object instead of
|
||
UserIdentity, and providing just a UserIdentity is hard deprecated.
|
||
* wfLocalFile(), deprecated since 1.34, now emits deprecation warnings.
|
||
* wfFindFile(), deprecated since 1.34, now emits deprecation warnings.
|
||
* User::getRights(), deprecated since 1.34, now emits deprecation warnings.
|
||
* User::changeableGroups and ::changeableByGroup were hard deprecated, use
|
||
corresponding methods in UserGroupManager instead.
|
||
* User::incEditCount() was deprecated in favor of the new method
|
||
UserEditTracker::incrementUserEditCount().
|
||
* RepoGroup::singleton(), ::destroySingleton() and ::setSingleton(),
|
||
deprecated since 1.34, now emit deprecation warnings.
|
||
* AbstractAuthenticationProvider ::setLogger(), ::setManager(), ::setConfig(),
|
||
::setHookContainer() were hard deprecated. Use ::init() to inject
|
||
dependencies or override ::postInitSetup() to do any custom
|
||
post-initialization configuration.
|
||
* RecentChange::getPerformer(), hard-deprecated since 1.37,
|
||
use getPerformerIdentity() instead.
|
||
* ContentHandler::cleanupHandlersCache(), deprecated since 1.35, now emits
|
||
deprecation warnings.
|
||
* File::getUser method was hard deprecated, along with overrides in LocalFile
|
||
and ForeignApiFile in favor of ::getUploader.
|
||
* SpecialBlock::checkUnblockSelf(), deprecated in 1.36, now emits deprecation
|
||
warnings.
|
||
* (T284179) The mediawiki.viewport ResourceLoader module is deprecated. You can
|
||
now just use MutationObserver or InterSectionObserver directly, which are
|
||
widely available in all supported JavaScript browsers.
|
||
* The following constructor options of DatabaseBlock class,
|
||
hard deprecated since 1.37:
|
||
- 'byText' property with blocker's name,
|
||
use 'by' property with UserIdentity value instead.
|
||
- 'by' property with blocker's ID,
|
||
use 'by' property with UserIdentity value instead.
|
||
* The BeforeResetNotificationTimestamp hook was deprecated.
|
||
* ArchivedFile::getUser, ::getRawUser, ::getRawUserText were deprecated in
|
||
favor of ::getUploader. ::getRawDescription was deprecated in favor of
|
||
::getDescription with RAW audience parameter.
|
||
* When calling LocalFile::newFromRow() or LocalFile::loadFromRow(), passing
|
||
extra fields not requested by ::getQueryInfo() is hard deprecated. This is
|
||
to warn callers that deprefixing and automatic assignment of such fields will
|
||
not be done in a future version.
|
||
* JobSpecification::getTitle was deprecated without providing a replacement.
|
||
It wasn't used and job given the purpose of JobSpecification class it's
|
||
not needed.
|
||
* The protected method File::getImageSize() is deprecated.
|
||
* BacklinkCache::get() was deprecated, use
|
||
BacklinkCacheFactory::getBacklinkCache() instead.
|
||
* MediaHandler::getImageSize(), ::getMetadata() and ::isMetadataValid were
|
||
deprecated and should no longer be overridden. Instead, subclasses should
|
||
override getSizeAndMetadata().
|
||
* Deprecated File::getMetadata(). Instead use ::getMetadataArray(),
|
||
::getMetadataItem() and ::getMetadataItems().
|
||
* Message::title was deprecated, use Message::page instead.
|
||
* BaseTemplate::getAfterPortlet, BaseTemplate::renderAfterPortlet and the
|
||
BaseTemplateAfterPortlet hook, which were deprecated in 1.35,
|
||
now emit deprecation warnings.
|
||
* LocalFile::getHistory hook is deprecated.
|
||
* Calling WikiPage::prepareContentForEdit() without a UserIdentity is now
|
||
deprecated.
|
||
* User::getEditTokenObject, ::getEditToken, ::matchEditToken were deprecated.
|
||
Use CsrfTokenRepository, which is available via IContextSource, instead.
|
||
::matchEditTokenNoSuffix was deprecated without replacement.
|
||
It was introduced to be able to provide custom error message if the token
|
||
was submitted, but ending slashes were stripped by some ASCII mangling proxy.
|
||
Use matchToken instead, such proxies are much less common now and there's
|
||
not much benefit in customising the error message.
|
||
* ContentHandler::getForTitle(), deprecated since 1.35, now emits
|
||
deprecation warnings.
|
||
* User::listOptionKinds(), deprecated since 1.35, now emits deprecation
|
||
warnings.
|
||
* WikiPage::doEditContent(), deprecated since 1.32, now emits deprecation
|
||
warnings.
|
||
* CentralIdLookup::factory and ::factoryNonLocal were hard-deprecated,
|
||
obtain an instance from MediaWikiServices instead.
|
||
* The class RandomPage was renamed to SpecialRandomPage. The class RandomPage
|
||
is now deprecated.
|
||
* BotPassword::invalidateAllPasswordsForCentralId() was deprecated.
|
||
* BotPassword::removeAllPasswordsForCentralId() was deprecated.
|
||
* The Title class members: $mTextform, $mUrlform, $mDbkeyform, $mNamespace,
|
||
$mInterwiki, and $mFragment have been deprecated to not be used directly.
|
||
Instead, their corresponding accessor methods should be used.
|
||
* IDatabase::fetchObject(), ::fetchRow(), ::numRows(), ::numFields(),
|
||
::fieldName(), ::freeResult() and ::dataSeek() are deprecated. Use the
|
||
corresponding methods in IResultWrapper instead.
|
||
* ResultWrapper::unwrap(), DatabaseMysqlBase::fieldType() and
|
||
DatabasePostgres::fieldType() are hard-deprecated.
|
||
* Subclasses implementing Database::doQuery() should return either boolean or
|
||
an IResultWrapper. To do otherwise is hard-deprecated.
|
||
* User::getOptionKinds() and ::resetOptions(), both deprecated since 1.35,
|
||
now emit deprecation warnings.
|
||
* wfGetLB(), deprecated since 1.27, now emits deprecation warnings.
|
||
* The following methods in MWNamespace, all deprecated since 1.34, now emit
|
||
deprecation warnings:
|
||
- isMovable()
|
||
- isSubject()
|
||
- getTalk()
|
||
- getSubject()
|
||
- getAssociated()
|
||
- equals()
|
||
- subjectEquals()
|
||
- hasTalkNamespace()
|
||
- wantSignatures()
|
||
- isWatchable()
|
||
- getSubjectNamespaces()
|
||
- getTalkNamespaces()
|
||
- isCapitalized()
|
||
- hasGenderDistinction()
|
||
- isNonincludable()
|
||
- getNamespaceContentModel()
|
||
- getRestrictionLevels()
|
||
- getCategoryLinkType()
|
||
* LogFormatter::styleRestricedElement() has been deprecated in favor of
|
||
LogFormatter::styleRestrictedElement()
|
||
* The following hooks were deprecated:
|
||
- UserLoadOptions: use LoadUserOptions instead.
|
||
- UserSaveOptions: use SaveUserOptions instead.
|
||
- UserResetAllOptions: no replacement was provided, the hook is not used.
|
||
* Title::isNamespaceProtected, deprecated in 1.34, is now hard-deprecated.
|
||
* UserSelectQueryBuilder::userIds(), ::userNames(), and ::userNamePrefix()
|
||
has been deprecated in favor of ::whereUserIds(), ::whereUserNames(),
|
||
and ::whereUserNamePrefix()
|
||
* Manually constructing a MovePage object, deprecated in 1.34,
|
||
is now hard deprecated. Use MovePageFactory instead.
|
||
* userCan hook has been deprecated. Use getUserPermissionsErrors or
|
||
getUserPermissionsErrorsExpensive instead.
|
||
* Parser::mUser public access, Parser::getUser and ParserOptions::getUser were
|
||
hard deprecated.
|
||
* The following methods in the Title class have been deprecated in favor of the
|
||
corresponding methods in the new RestrictionStore service (with different
|
||
names where indicated):
|
||
- areCascadeProtectionSourcesLoaded()
|
||
- areRestrictionsCascading()
|
||
- areRestrictionsLoaded()
|
||
- getAllRestrictions()
|
||
- getCascadeProtectionSources()
|
||
- getFilteredRestrictionTypes()
|
||
-> listAllRestrictionTypes()
|
||
- getRestrictionExpiry()
|
||
- getRestrictionTypes()
|
||
-> listApplicableRestrictionTypes()
|
||
- getRestrictions()
|
||
- isCascadeProtected()
|
||
- isProtected()
|
||
- isSemiProtected()
|
||
- loadRestrictionsFromRows()
|
||
* The following Title methods have been deprecated with no direct public
|
||
replacement:
|
||
- deleteTitleProtection()
|
||
- getTitleProtection()
|
||
- flushRestrictions()
|
||
- loadRestrictions()
|
||
* User::isAllowUsertalk was hard deprecated. Use User::getBlock and
|
||
AbstractBlock::isUsertalkEditAllowed instead.
|
||
* Classes used by Preprocessor_DOM have been merged with classes used by
|
||
Preprocessor_Hash, as Preprocessor_DOM was removed in 1.35.
|
||
- PPDPart has been merged into PPDPart_Hash
|
||
- PPDStack has been merged into PPDStack_Hash
|
||
- PPDStackElement has been merged into PPDStackElement_Hash
|
||
* Collation::singleton and ::factory were deprecated, obtain an CollationFactory
|
||
instance from MediaWikiServices instead.
|
||
* …
|
||
|
||
=== Other changes in 1.37 ===
|
||
* WatchlistManager::addWatch and WatchlistManager::addWatchIgnoringRights(),
|
||
which replace User::addWatch(), now call the WatchArticle and
|
||
WatchArticleComplete hooks.
|
||
* WatchlistManager::removeWatch and
|
||
WatchlistManager::removeWatchIgnoringRights(), which replace
|
||
User::removeWatch(), now call the UnwatchArticle and UnwatchArticleComplete
|
||
hooks.
|
||
* The overridable postInitSetup() method was added to the
|
||
AbstractAuthenticationProvider class. A provider can override postInitSetup()
|
||
to do any custom post-initialization configuration.
|
||
* The overridable postInitSetup() method was added to the SessionProvider
|
||
class. A provider can override postInitSetup() to do any custom
|
||
post-initialization configuration.
|
||
* The protected getConfig() method was added to the SessionProvider class.
|
||
Use SessionProvider::getConfig to get a config.
|
||
* The DBAccessBase class is deprecated. Classes that used to extend it
|
||
should get a load balancer (factory) injected in the constructor instead.
|
||
* ActorNormalization::acquireActorId now requires IDatabase parameter.
|
||
Not providing one emitted deprecation warnings since 1.36.
|
||
* Anti-lock constants ALF_PRELOAD_LINK, ALF_NO_BLOCK_LOCK, ALF_NO_LINK_LOCK
|
||
and ALF_PRELOAD_EXISTENCE have been removed. They're unused since 1.25.
|
||
* CSS class 'mw-htmlform-field-autoinfuse' used by some forms has been
|
||
renamed to 'mw-htmlform-autoinfuse'. (T278036)
|
||
* User::newFromRow does not accept pre-loaded user preferences under
|
||
$data['user_properties'] anymore. This optimization was not used.
|
||
* The following files change the letter case of the file names:
|
||
- SpecialRandompage.php -> SpecialRandomPage.php
|
||
- SpecialRandomredirect.php -> SpecialRandomRedirect.php
|
||
- SpecialRandomrootpage.php -> SpecialRandomRootPage.php
|
||
* …
|
||
|
||
== Compatibility ==
|
||
|
||
MediaWiki 1.37 requires PHP 7.3.19 or later and the following PHP extensions:
|
||
|
||
* ctype
|
||
* dom
|
||
* fileinfo
|
||
* iconv
|
||
* intl
|
||
* json
|
||
* mbstring
|
||
* xml
|
||
|
||
MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used,
|
||
but support for them is somewhat less mature.
|
||
|
||
The supported versions are:
|
||
|
||
* MySQL 5.5.8 or later
|
||
* PostgreSQL 9.4 or later
|
||
* SQLite 3.8.0 or later
|
||
|
||
== Online documentation ==
|
||
Documentation for both end-users and site administrators is available on
|
||
MediaWiki.org, and is covered under the GNU Free Documentation License (except
|
||
for pages that explicitly state that their contents are in the public domain):
|
||
|
||
https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation
|
||
|
||
== Mailing list ==
|
||
A mailing list is available for MediaWiki user support and discussion:
|
||
|
||
https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
|
||
|
||
A low-traffic announcements-only list is also available:
|
||
|
||
https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
|
||
|
||
It's highly recommended that you sign up for one of these lists if you're
|
||
going to run a public MediaWiki, so you can be notified of security fixes.
|
||
|
||
== IRC help ==
|
||
There's usually someone online in #mediawiki on irc.libera.chat.
|