Change notes from older releases. For current info, see RELEASE-NOTES-1.37.
= MediaWiki 1.36 =
== MediaWiki 1.36.1 ==
This is a security and maintenance release of the MediaWiki 1.36 branch.
=== Changes since MediaWiki 1.36.0 ===
* (T283942) DatabaseInstaller.php: Only run core schema file if specified table
doesn't already exist.
* (T247223) Optimise MessageCache::isMainCacheable() for the single-message
case.
* (T283244) JavaScriptMinifer: Fix handling of "delete" as object property.
* (T284391) Fix SkinModule to correctly prepend remote path on document root
installs.
* (T235554) Disable DEFER_SET_LENGTH_AND_FLUSH headers to avoid HTTP errors.
* (T278579) Don't send headers on ob_end_clean().
* (T285287) MultiHttpClient: Replace PHP version check with defined().
* (T280226, CVE-2021-35197) SECURITY: Prevent blocked users from purging pages.
== MediaWiki 1.36.0 ==
=== Changes since MediaWiki 1.36.0-rc.0 ===
* (T248481) rdbms: Use server time in
DatabaseMysqlBase::getLagFromPtHeartbeat().
* (T281549) WebInstaller: Don't show the announce-l subscribe checkbox for now.
* (T264214) Follow-ups for UserGroupManager.
* (T282280) resourceloader: Fix path-only URLs in wiki modules when script path
is docroot.
* (T281972) UserIdentityValue: Introduce convenience static factory methods.
* (T230428) Make page_is_redirect and page_is_new unsigned.
* (T280292) Legacy feature should not load thumbnail style rules (only layout).
* (T283247) Freenode -> Libera per wikimedia moving from freenode to libera.
* (T280270) composer: Lock Parsoid version to specific 0.13.0 release.
* (T142663) Add extension.json merge strategy "provide_default".
* (T283540) HookContainer: Fix normalization of callback for static handler.
* (T283464) registration: Fix array order for array_replace_recursive merge
strategy.
* (T283539) Interwiki: Fix calling "onInterwikiLoadPrefix" hook.
* (T282594) Timeless: Re-branch to 40eb3dad1for REL1_36.
== MediaWiki 1.36.0-rc.0 ==
== Upgrading notes for 1.36 ==
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.36 upgrades are below:
* MediaWiki 1.36 now requires the PHP internationalization extension (commonly
referred to as Intl, ext-intl, or php-intl).
* The MediaWiki:Autoblock_whitelist block exemption control has been moved to
MediaWiki:Block-autoblock-exemptionlist. If you use this feature, please move
the MediaWiki:Autoblock_whitelist page.
* (T275334) $wgExtensionFunctions is sometimes used to change configuration
settings. This is not safe; extension functions are run relatively late, some
services are already initialized by that point and so they use the old
configuration. Changes in 1.36 make this kind of breakage even more common.
You can use the MediaWikiServices hook instead. (In the future there might be
a dedicated hook for configuration changes.)
For notes on 1.35.x and older releases, see HISTORY.
=== Configuration changes for system administrators in 1.36 ===
The MediaWiki update script, maintenance/update.php, used to accept `--nopurge`
as an option to prevent clearing caches stored in the database during upgrade.
This is no longer encouraged, and the option has been removed.
==== New configuration ====
* (T256001) $wgManualRevertSearchRadius – This setting controls a new feature
that marks edits as reverts if they restore the page to an exact previous
state. This configuration variable sets the maximum number of revisions of a
page that will be checked against every new edit. Set this to 0 to disable the
feature entirely.
* (T244058) $wgOldRevisionParserCacheExpireTime — This setting was added to
control caching of ParserOutput for old (non-current) revisions.
* (T265263) $wgRememberMe - This setting configures the "remember me" checkbox
on account log-in systems via RememberMeAuthenticationRequest.
* (T157145) $wgSkinMetaTags – This setting lets sysadmins configure skins that
support meta tags. These tags make sharing of MediaWiki pages on a variety of
social platforms more contentful and thus useful.
* (T280944) $wgIncludejQueryMigrate - This setting lets sysadmins disable the
jQuery Migrate plugin. It has been enabled by default since MediaWiki 1.27.
In future releases it will be disabled by default.
==== Changed configuration ====
* $wgLogos – This setting selects the logo shown on the site. The default value
for the site logo, which is shown in an install if you have not set one, will
now be the new logo of MediaWiki.
* (T274695) $wgAjaxEditStash — This setting, to disable the edit stashing
feature when users start writing an edit summary, has been deprecated. In
future releases, this feature will always be enabled.
* $wgUploadStashScalerBaseUrl – This setting, to enable remote on-demand media
scaling, was deprecated. Use the `thumbProxyUrl` setting in $wgLocalFileRepo
instead.
* $wgSlaveLagWarning and $wgSlaveLagCritical – These settings have been renamed,
to $wgDatabaseReplicaLagWarning & $wgDatabaseReplicaLagCritical respectively.
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.
* $wgWANObjectCaches - The "coalesceKeys" option was removed without deprecation
and replaced by a new "coalesceScheme" option, set to "hash_stop" by default.
If you use Dynomite, then set the new "coalesceKeys" option to "hash_tag". The
"cluster" and "mcrouterAware" options were also removed without deprecation.
Use "broadcastRoutingPrefix" instead.
==== Removed configuration ====
* $wgUseTwoButtonsSearchForm — This setting, deprecated in 1.35, has been
removed.
* $wgAllowImageMoving — This setting, deprecated in 1.35, has been removed. Use
group permission settings instead. For example, to prevent sysops from
moving files, set `$wgGroupPermissions['sysop']['movefile'] = false;`
* $wgExtNewTables, $wgExtNewFields, $wgExtNewIndexes, $wgExtPGNewFields,
$wgExtPGAlteredFields, $wgExtModifiedFields — These settings were removed.
They became obsolete after 1.17 overhauled the database updater, but were kept
for backwards compatibility. The LoadExtensionSchemaUpdates hook should be
used instead.
* $wgParserConf - This setting, deprecated in 1.35, has been removed. The last
use of this setting was for pre-processor configuration, which was deprecated
in 1.34 and removed in 1.35.
* $wgEnableRestAPI - This setting, ignored since 1.35, has been removed.
* $wgPagePropsHaveSortkey – This temporary setting has been removed, along with
the schema change upgrade path it controlled. If your site is still using it,
meaning you have not yet applied the `pp_sortkey` schema change from 1.24, you
must now apply it before upgrading.
* The deprecated password policies PasswordCannotMatchBlacklist and
PasswordNotInLargeBlacklist were removed. Please use
PasswordCannotMatchDefaults and PasswordNotInCommonList respectively instead.
=== New user-facing features in 1.36 ===
* The logo of MediaWiki has changed. This means that the "Powered By MediaWiki"
button shown in the skin footer will be different.
* All HTML5 named entities are now accepted in wikitext.
* (T106263) The file description page's alternate sizes now include 2048px.
=== New developer features in 1.36 ===
* Parser test files can now declare a dependency on a specific extension being
loaded, not just on the presence of a certain extension tag hook. This is a
better fit for extensions like TimedMediaHandler, which affect the output but
don't register parser hooks. Use `extension:Foo` in the `!! hooks` section of
your parser test file to declare a dependency on the `Foo` extension being
loaded.
* To expose code previously present in SpecialBlock/SpecialUnblock to other
parts of the code, or to extensions, the new BlockUser and UnblockUser command
objects were added. Use the BlockUserFactory and UnblockUserFactory services
to create them.
* The hook UsersPagerDoBatchLookupsHook takes now a \Wikimedia\Rdbms\IDatabase,
instead of \Wikimedia\Rdbms\DBConnRef, as the first parameter.
* MediaHandlers can now customize the formatting of the metadata they emit by
over-riding MediaHandler::formatTag( $key, $value ). The default for unknown
tags is numeric formatting; non-EXIF tags which are non-numeric should always
use this method to specify the desired formatting.
* The new 'title' type can be used to validate action API and REST API inputs.
* The new ArticleParserOptions hook allows customizing the parser options used
to parse wikitext for an article, based on user preferences, title, etc.
* The new 'raw' type can be used to validate action API inputs. It bypasses the
Unicode NFC normalization done on inputs of type 'string', so it more suitable
when the input is binary or may contain deprecated Unicode sequences or
characters (such as U+2001) that should be passed unmodified.
* (T260330) A new abstraction for running shell commands has been introduced,
called BoxedCommand. A BoxedCommand object can be obtained with
MediaWikiServices::getInstance()->getCommandFactory()->createBoxed().
* ResourceLoader modules can now mark themselves as ES6-only by setting
`'es6' => true` in their module definition. ES6-only modules will not be
executed in browsers that don't support ES6, such as IE11.
=== External library changes in 1.36 ===
==== New external libraries ====
* Added wikimedia/minify 2.2.2.
* Added wikimedia/request-timeout 1.1.0.
* Added wikimedia/shellbox 1.0.4.
* Added WVUI 0.1.0.
==== Changed external libraries ====
* Updated composer/semver from 1.5.1 to 3.2.4.
* Updated guzzlehttp/guzzle from 6.5.4 to 7.2.0.
* Updated jQuery from v3.4.1 to v3.6.0.
* Updated jQuery Migrate from v3.1.0 to v3.3.2.
* Updated jquery.client from 2.0.2 to 3.0.0.
* Updated OOUI from 0.39.3 to 0.41.3.
* Updated pear/mail_mime from 1.10.8 to 1.10.9.
* Updated pear/net_smtp from 1.9.1 to 1.9.2.
* Updated pimple/pimple from 3.3.0 to 3.3.1.
* Updated wikimedia/at-ease from 2.0.0 to 2.1.0.
* Updated wikimedia/cldr-plural-rule-parser from 1.0.0 to 2.0.0.
* Updated wikimedia/common-passwords from 0.2.0 to 0.3.0.
* Updated wikimedia/composer-merge-plugin from 1.4.1 to 2.0.1.
* Updated wikimedia/html-formatter from 1.0.2 to 3.0.1.
* Updated wikimedia/ip-set from 2.1.0 to 3.0.0.
* Updated wikimedia/ip-utils from 1.0.0 to 3.0.2.
* Updated wikimedia/less.php from 3.0.0 to 3.1.0.
* Updated wikimedia/object-factory from 2.1.0 to 3.0.0.
* Updated wikimedia/php-session-serializer from 1.0.7 to 2.0.0.
* Updated wikimedia/remex-html from 2.2.0 to 2.2.2.
* Updated wikimedia/utfnormal from 2.0.0 to 3.0.2.
* Updated wikimedia/wait-condition-loop from 1.0.1 to 2.0.1.
* Updated wikimedia/xmp-reader from 0.7.0 to 0.8.1.
===== Changed development-only external libraries =====
* Updated composer/spdx-licenses from 1.5.3 to 1.5.4.
* Updated doctrine/dbal from 2.10.2 to 3.0.0.
* Updated doctrine/sql-formatter from 1.1.0 to 1.1.1.
* Updated mediawiki/mediawiki-phan-config from 0.10.2 to 0.10.6.
* Updated monolog/monolog from 1.25.3 to 2.2.0.
* Updated nikic/php-parser from 4.4.0 to 4.10.2.
* Updated psy/psysh from 0.10.4 to 0.10.5.
* Updated seld/jsonlint from 1.7.1 to 1.8.3.
* Updated symfony/yaml from ~3.4|~4.3|~5.0.5 to ~3.4|~5.1.
* Updated wikimedia/testing-access-wrapper from 1.0.0 to 2.0.0.
==== Removed external libraries ====
* The html5shiv library has been removed, as support for Internet Explorer 8 has
been dropped.
* The wikimedia/avro suggested development-only library has been removed, as the
support for logging in Avro format has been dropped.
=== Bug fixes in 1.36 ===
* (T190285) ApiEditPage module used to switch 'undo' and 'undoafter' parameters,
if it founds you reversed them (based on assumption that higher revision ID
indicates a later revision). The assumption is not always true, and is
hindering proper edit undoing in some cases, hence the logic has been removed.
Reversing the parameters will now lead to edit conflict or undefined behavior.
* (T263340) In history merging, pages with a content model that does not support
redirects will now be recorded as deleted if no revision is being left in the
source page (that's if all revisions of the page have been merged to another).
=== Action API changes in 1.36 ===
* (T269636) `Access-Control-Max-Age` was added to the default list of headers
allowed for cross-origin API requests ($wgAllowedCorsHeaders).
* (T258108) Accounts with the 'bot' right no longer have pages automatically
added to the watchlist when making API edits, regardless of their preferences.
This is to reduce the size of the watchlist data in the database. To add API
bot edits to the watchlist, explicitly set the 'watch' option.
=== Languages updated in 1.36 ===
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.
* (T258975) Added a Latin/Cyrillic script converter for the Talysh language.
* (T245359) Split Bali script locale from "ban" (Balinese) (ban-bali).
* (T264582) Added language support for Madurese (mad).
* (T259330) Added language support for Mara (mrh).
* (T263968) Added language support for Nias (nia).
* (T270365) Added language support for Tyap (kcg).
* (T276745) Added language support for Wayuu (guc).
=== Breaking changes in 1.36 ===
* Grade C (non-JavaScript) support for Internet Explorer 8 has been dropped.
* (T249459) wfIsBadImage(), deprecated in 1.34, has been removed.
* (T176526) EditPage::getContextTitle() will now throw an exception if a context
title was not set using setContextTitle(). Previously, this mis-use would only
cause a deprecation warning to be emitted.
* The DeferredStringifier class, deprecated since 1.31, was removed.
* Multiple methods that fell back to the $wgUser global variable were
individually hard deprecated previously. The following have now been removed:
- ApiTestCase::doLogin
- Article::doDeleteArticle
- Article::doDeleteArticleReal
- Article::getComment
- Article::getCreator
- Article::getUser
- Article::getUserText
- Article::insertProtectNullRevision
- File::delete
- File::recordUpload
- ForeignDBFile::delete
- ForeignDBFile::recordUpload
- LocalFile::delete
- LocalFile::deleteOld
- LocalFile::recordUpload
- PageArchive::undelete
- RecentChange::markPatrolled
- Title::getUserPermissionsErrors
- Title::quickUserCan
- Title::userCan
- WebRequest::getLimitOffset
- WikiPage::doDeleteArticle
- WikiPage::insertProtectNullRevision
* The SpecialPageFactory class, deprecated in 1.32, has been removed. Use the
SpecialPageFactory service instead.
* Multiple methods previously had optional User parameters, with fallbacks
to the $wgUser global variable. Not passing a User to those methods was
previously hard deprecated, and support for not passing a User has now
been removed:
- ArchivedFile::userCan
- File::userCan
- FileDeleteForm::__construct
- FileDeleteForm::doDelete
- LocalFileDeleteBatch::__construct
- LogEventsList::getExcludeClause (only needed for the 'user' audience)
- LogEventsList::userCan
- LogEventsList::userCanBitfield
- LogEventsList::userCanViewLogType
- LogPage::addEntry (also accepts user id instead)
- OldLocalFile::userCan
- PatrolLog::record
- Title::getNotificationTimestamp (though the entire method is deprecated)
- WikiPage::getComment (only needed for the FOR_THIS_USER audience)
- WikiPage::getCreator (only needed for the FOR_THIS_USER audience)
- WikiPage::getUser (only needed for the FOR_THIS_USER audience)
- WikiPage::getUserText (only needed for the FOR_THIS_USER audience)
* The following hooks have been removed:
- APIQueryInfoTokens
- APIQueryRecentChangesTokens
- APIQueryRevisionsTokens
- APIQueryUsersTokens
- ApiTokensGetTokenTypes
* LogEventsList::typeAction previously accepted an optional right parameter, and
checked if the context user ($wgUser) had that right. Passing a right was hard
deprecated in 1.35, and support for passing a right has now been removed.
* WikiPage::doDeleteArticleReal previously accepted an optional user as its
fifth parameter, and fell back to $wgUser if not user was provided. The
signature changed to have the user as the second parameter, and the old
signature was hard deprecated in 1.35. Support for the old signature has now
been removed.
* User::addNewUserLogEntry, deprecated since 1.27, was removed.
* As part of refactoring the EditPage class, EditPage::setPreloadedContent,
which had no known callers was removed entirely. Additionally, the following
public methods were made private:
- ::extractSectionTitle
- ::getSummaryInputWidget
- ::noSuchSectionPage
- ::initialiseForm
* EditPage::matchSpamRegex and ::matchSummarySpamRegex, deprecated in 1.35,
were removed. Use the SpamChecker service instead.
* The global function `wfWaitForSlaves`, deprecated in 1.27 and hard-deprecated
in 1.35, has been removed. Use LBFactory::waitForReplication() instead.
* Calling Action::factory() with null as the first parameter, rather than a
string, was deprecated in 1.35 and support was now removed.
* Calling Action::factory() with an object that wasn't an Article as the second
parameter was deprecated in 1.35 and support was now removed.
* The global variable $wgMemc, deprecated since 1.35, has been removed. Usage
should generally be migrated to WANObjectCache, or if you really need the
internal object, use ObjectCache::getLocalClusterInstance instead.
* The preprocessDump.php maintenance script was removed.
* CategoryFinder, which was deprecated in 1.31 and hard-deprecated in 1.35,
has been removed.
* GenderCache::singleton(), which was deprecated in 1.28 and hard-deprecated
in 1.35, has been removed.
* Sanitizer::escapeId(), deprecated in 1.30, has been removed.
* Direct invocation of Parser::__construct() (instead of via a ParserFactory)
now throws an exception; support has also been removed for several
deprecated variants on the arguments passed to Parser::__construct.
Direct invocation of Parser::__construct was deprecated in 1.34.
* Parser::setFunctionTagHook(), deprecated in 1.35, has been removed.
* The following properties of Parser, deprecated in 1.35, have been made
private:
- $mTagHooks - use Parser::getTags()
- $mFunctionHooks - use Parser::getFunctionHooks()
- $mOutput - use Parser::getOutput()
- $mPreprocessor - use Parser::getPreprocessor()
* The ParserBeforeTidy hook, deprecated in 1.35, has been removed.
* The ParserBeforeTidy, ParserBeforeStrip, and ParserAfterStrip hooks,
deprecated in 1.35, have been removed.
* All methods of MWTidy except for MW::tidy() have been removed. These were each
either marked as @internal or deprecated in 1.35.
* (T248062) Mixins `.background-image-svg()` and `.background-image-svg-quick()`
(provided by mediawiki.mixins.less), which have been deprecated since 1.35,
have now been removed. MediaWiki no longer supports any browser which would
require this SVG-fallback PNG support, so you can simply use the regular CSS
`background-image:` declaration instead.
* The ResourceLoader module `mediawiki.legacy.oldshared` and its file
'oldshared.css', deprecated since 1.35 has been removed (T248357).
* `ResourceLoader::__construct` now requires a Config parameter. The optional
nature of this parameter was deprecated in 1.34.
* The LinkBegin and LinkEnd hooks, deprecated in 1.28, have been removed. You
can instead use the HtmlPageLinkRendererBegin and HtmlPageLinkRendererEnd
hooks, respectively.
* The EmailUser hook passes its fifth param, $error, by reference, to allow
hook handlers to add error messages, indicate that they have sent the email
instead of core, etc. Setting the parameter to something other than a
Status object, true, false, an empty string, an array, or a MessageSpecifier,
object, which had been deprecated in 1.29, is no longer supported, and now
results in an MWException being thrown.
* Skin::getDynamicStylesheetQuery(), deprecated in 1.32, has been removed. You
should use action=raw&ctype=text/css directly.
* Skin::makeI18nUrl(), deprecated in 1.35, has been removed.
* The following User methods, deprecated and moved to BlockManager in 1.34, were
removed:
- ::isDnsBlacklisted
- ::inDnsBlacklist
- ::isLocallyBlockedProxy
- ::trackBlockWithCookie
* Support for v1 of the parser tests file format has been removed; it was
deprecated in 1.35. (T174199)
* SpecialUnblockUser::processUIUnblock() now returns a Status object instead of
an array of messages or a boolean value. This function was also marked as
@internal and is no longer safe to call it publicly.
* mw.Title.getDotExtension() from the 'mediawiki.Title' module was removed
without deprecation. You should use mw.Title.getExtension() and prepend the
dot if need be.
* Profiler::getTemplated and Profiler::setTemplated, deprecated in 1.34, have
been removed.
* DatabaseMysqlBase now requires MySQL version 5.6.4+ when "lagDetectionMethod"
is set to "pt-heartbeat".
* Removed HookContainer::getOriginalHooksForTest() without deprecation. This
method was introduced in 1.35 for internal use, and appears unused outside of
MediaWiki core.
* ParserCache::__construct() now requires three parameters.
* Message->getFormat(), deprecated in 1.29, has been removed.
* Support for passing Article to ParserCache::get, deprecated in 1.35, has been
removed.
* ParserCache::singleton(), deprecated in 1.30, has been removed.
* DatabaseBlock::deleteIfExpired and ::fromMaster, deprecated in 1.35, have been
removed.
* Some deprecated AbstractBlock methods have been removed:
- ::prevents, deprecated in 1.33
- ::shouldTrackWithCookie, deprecated in 1.34
- ::getBlocker, deprecated in 1.35
- ::setBlocker, deprecated in 1.35
- ::getBlockErrorParams, deprecated in 1.35
* Multiple DatabaseBlock methods dealing with cookies, deprecated in 1.34,
have been removed:
- ::setCookie
- ::clearCookie
- ::getCookieValue
- ::getIdFromCookieValue
- ::shouldTrackWithCookie
* The public static callback function SpecialUnblock::processUIUnblock has been
removed. This method was for internal use only, and appears unused outside of
MediaWiki core.
* ChangeTags::truncateTagDescription, deprecated in 1.35, has been removed.
* Deprecated null fallbacks in PasswordReset constructor have been removed.
* User::isEveryoneAllowed and User::getAllRights, deprecated in 1.34, has been
removed.
* The following methods of the UserGroupMembership class, deprecated in 1.35,
has been removed:
- ::initFromRow
- ::newFromRow - use UserGroupManager::newGroupMembershipFromRow
- ::selectFields - use UserGroupManager::getQueryInfo
- ::delete - use UserGroupManager::removeUserFromGroup
- ::insert - use UserGroupManager::addUserToGroup
- ::purgeExpired - use UserGroupManager::purgeExpired
- ::getMembershipsForUser - use UserGroupManager::getUserGroupMemberships
- ::getMembership - use UserGroupManager::getUserGroupMemberships
* The public static callback function SpecialBlock::validateTargetField has been
removed. This method was for internal use only, and appears unused outside of
MediaWiki core.
* The public static callback function SpecialUploadStash::tryClearStashedUploads
has been removed. This method was for internal use only, and appears unused
outside of MediaWiki core.
* SpecialComparePages::showDiff() ::revOrTitle(), ::checkExistingTitle(), and
::checkExistingRevision() were marked as @internal to allow for breaking
changes. They are no longer safe to call. The methods were unused outside of
MediaWiki core.
* Each special page within core now uses service injection via it constructor.
When extending these special pages, a call to the grandparent constructor
(`SpecialPage::__construct()`) in the sub-class would now break the derived
special page, as the fallback code in the parent constructor cannot set the
services as needed. Be sure to call the parent constructor when extending
core special pages. Extending core's special pages is not part of the stable
interface, and should generally be avoided.
* Language::getExtraUserToggles and ::viewPrevNext, deprecated in 1.34, have
been removed.
* StreamFile::send404Message and ::parseRange, deprecated in 1.34, have been
removed.
* SVGMetadataExtractor class, deprecated in 1.34, has been removed.
* ProcessCacheLRU class, deprecated in 1.32, has been removed.
* wfForeignMemcKey(), deprecated in 1.35, has been removed.
* LoadBalancer::safeWaitForMasterPos(), deprecated in 1.34, has been removed.
* JobQueue::factory() now requires its `idGenerator` option. The optional
nature of this option was deprecated in 1.35.
* ApiFeedRecentChanges::getFeedObject has been changed to private, and appears
unused outside of MediaWiki core.
* Skin::subPageSubtitle() has been changed to private method. Callers should
use Skin::prepareSubtitle().
* RevisionDeleter::checkRevisionExistence was removed without deprecation.
It had no known callers.
* wfForeignMemcKey() and wfMemcKey(), deprecated in 1.35, have been removed.
* MediaWiki now also requires the php-intl extension.
* BotPassword::save() now returns a Status object for the result rather than
a bool.
* The methods in CoreTagHooks have been marked @internal and type hints have
been added. The methods appeared to be unused outside of MediaWiki core.
* SquidPurgeClient and SquidPurgeClientPool, deprecated since 1.35, have been
removed.
* Several methods on WikiPage will now throw an exception when called on a
WikiPage instance that where constructed on a title that does not refer to a
proper page (but rather a special page or interwiki link). The behavior was
previously undefined and could in some cases lead to data corruption. Affected
methods are: getId(), insertOn(), newPageUpdater(), doUpdateRestrictions(),
doDeleteArticleReal(), doRollback(), and doEditContent().
* The ParserTestRunner no longer invokes the ParserTestTables hook. Instead, it
clones all database tables before running tests, like MediaWikiIntegrationTest
does. If an extension was mis-using the hook to *exclude* tables from the
clone, that will no longer occur, and tests may fail.
* The following classes, which were only loaded for tests and had no uses found
in public MediaWiki-related git, were removed:
- MockWebRequest
- UserWrapper
* Passing Title as a second parameter to RevisionStore::getPreviousRevision and
getNextRevision, hard deprecated since 1.31, was prohibited.
* (T275619) Maintenance::hasOption and Maintenance::getOption now behave as
documented and are not altered by previous calls to these methods.
* The internal class FirejailCommand was removed.
* Command::execute() now returns a Shellbox\Command\UnboxedResult instead of a
MediaWiki\Shell\Result. Any type hints should be updated.
* WikiPage::$mIsRedirect was removed.
* ObjectCache::detectLocalServerCache(), deprecated in 1.35, was removed.
* The following functions from the Title class have been removed:
- countRevisionsBetween
- getAuthorsBetween
* The PageProps class was converted to a service. PageProps::overrideInstance
was removed, and MediaWikiServices::redefineService should be used
instead.
* Support for creating a MediaWikiTitleCodec object without the InterwikiLookup
and NamespaceInfo services, deprecated in 1.34, was removed. Note that the
MediaWikiTitleCodec class is not @newable or @stable to create, and should
be retrieved from MediaWikiServices instead.
* The $wgContLang variable, deprecated in 1.32, was removed. You can instead use
MediaWikiServices::getInstance()->getContentLanguage().
* User::clearAllNotifications(), hard deprecated in 1.35, was removed. Use
WatchlistManager::clearAllUserNotifications() instead.
* DatabaseBlock::getBlocker can return any UserIdentity instance, not just User.
* MediaWiki::triggerJobs(), deprecated in 1.34, was removed.
* The following Article methods, deprecated in 1.35, were removed:
- checkFlags
- checkTouched
- clearPreparedEdit
- doDeleteUpdates
- doEditUpdates
- doPurge
- doViewUpdates
- exists
- followRedirect
- getAutoDeleteReason
- getCategories
- getContentHandler
- getContentModel
- getContributors
- getDeletionUpdates
- getHiddenCategories
- getId
- getLatest
- getLinksTimestamp
- getMinorEdit
- getOldestRevision
- getRedirectTarget
- getRedirectURL
- getRevision
- getTouched
- getUndoContent
- hasViewableContent
- insertOn
- insertRedirect
- insertRedirectEntry
- isCountable
- isRedirect
- loadFromRow
- loadPageData
- lockAndGetLatest
- makeParserOptions
- pageDataFromId
- pageDataFromTitle
- prepareContentForEdit
- protectDescription
- protectDescriptionLog
- replaceSectionAtRev
- replaceSectionContent
- setTimestamp
- shouldCheckParserCache
- supportsSections
- triggerOpportunisticLinksUpdate
- updateCategoryCounts
- updateIfNewerOn
- updateRedirectOn
- updateRevisionOn
- doUpdateRestrictions
- updateRestrictions
- doRollback
- commitRollback
- generateReason
* The monolog-based logging system has dropped the Avro format. Because of this,
the AvroFormatter class and the AvroValidator utility class have been removed
without deprecation.
* AbstractBlock::$mReason, deprecated in 1.34, was removed.
Use AbstractBlock::getReasonComment and AbstractBlock::setReason instead.
=== Deprecations in 1.36 ===
* (T278026) The DB_MASTER constant has been deprecated in favour of DB_PRIMARY.
* (T245963) User::getGrantName() is now hard deprecated and will be removed in
a subsequent release. Use MWGrants::grantName() instead.
* wfIncrStats() is now deprecated. Use MediaWikiServices::getInstance()
->getStatsdDataFactory()->updateCount() instead.
* WikiPage::doEditContent() is now deprecated. Use
WikiPage::doUserEditContent() instead. Note that doEditContent() was also
deprecated in 1.32 for unrelated reasons and doUserEditContent() is
deprecated for other reasons, however, using doUserEditContent() is
recommended over using doEditContent().
* WikiPage::doUserEditContent() is now deprecated. Use
PageUpdater::saveRevision instead. Note that the new method expects callers
to take care of checking EDIT_MINOR against the minoredit right, and to apply
the autopatrol right as appropriate.
* LocalFile::recordUpload2, soft deprecated in 1.35, now emits deprecation
warnings. Use ::recordUpload3 instead.
* Constructing a new instance of the ParserOptions class without providing
a User object, which falls back to the global $wgUser, is now deprecated.
* The User class, which was marked as @newable in 1.35, is no longer newable,
meaning that it is no longer safe to manually call the constructor via
`new User`. Instead, use the UserFactory service. Additionally, the
following static constructor methods were deprecated in favor of using the
UserFactory service:
- User::newFromName
- User::newFromId
- User::newFromActorId
- User::newFromIdentity
- User::newFromAnyId
- User::newFromConfirmationCode
* The following User methods have been hard deprecated in favor of the new
UserEditTracker service:
- User::getFirstEditTimestamp
- User::getLatestEditTimestamp
* The confusingly-named User->isLoggedIn() method has been deprecated in favour
of the method it wraps, User->isRegistered().
* Use of the `preprocessor=Preprocessor_DOM` option in parser test files has
been deprecated. Preprocessor_DOM was removed in 1.35.
* ParserOptions::setTidy() has been deprecated. It has had no effect since
1.35.
* Sanitizer::escapeIdReferenceList() has been deprecated; it will eventually
be made private to the class, as it appears to have no uses outside the
Sanitizer class.
* Sanitizer::hackDocType() is deprecated; it will eventually be made private.
* Skin::getIndicatorsHTML() is deprecated. The functionality can be retained
by reimplementing the method using the raw indicators data from
OutputPage::getIndicators.
* Skin::makeVariablesScript() has been deprecated. Use
ResourceLoader::makeInlineScript() instead.
* SpecialPageFactory::getRestrictedPages() has been deprecated.
Use SpecialPageFactory::getUsablePages() instead.
* Title::nameOf() is deprecated; use Title::newFromID()->getPrefixedDBkey()
instead.
* DatabaseBlock::insert, DatabaseBlock::update, DatabaseBlock::purgeExpired and
DatabaseBlock::delete are deprecated. Use DatabaseBlockStore::insertBlock,
DatabaseBlockStore::updateBlock, DatabaseBlockStore::purgeExpiredBlocks and
DatabaseBlockStore::deleteBlock instead.
* SpecialBlock::getTargetAndType and AbstractBlock::parseTarget are deprecated.
Call BlockUtils::parseBlockTarget instead.
* SpecialUnblock::processUnblock was deprecated - use UnblockUserFactory
service instead.
* Deprecated MediaWikiIntegrationtestCase::removeTemporaryHook() in favor of
MediaWikiIntegrationtestCase::clearHook().
* Skin::getSearchLink(), also exposed as 'searchaction' option in SkinTemplate,
has been deprecated. Use Title or SpecialPage methods directly.
* Skin::getAllowedSkins and ::getSkinNames have been deprecated. Use their
respective equivalents in SkinFactory instead.
* The RollbackComplete hook has been deprecated, use the PageSaveComplete hook
instead.
* Skin::makeUrl() has been deprecated. Title methods should be used instead.
* Skin::privacyLink(), Skin::disclaimerLink() and Skin::aboutLink() have been
deprecated. Please use Skin::footerLink() instead.
* Skin::getLogo() has been deprecated. Use ResourceLoaderSkinModule instead.
* The module `mediawiki.toc.styles` has been replaced by
ResourceLoaderSkinModule. If you are having problems styling table of contents
ensure you have an updated skin.
* Skin::mainPageLink() has been deprecated. Use LinkRenderer service instead.
* BaseTemplate::getToolbox() method has been hard deprecated. The toolbox data
is now available in a sidebar data array which you can get from any class
that's extending QuickTemplate class.
* Constructing a DefaultPreferencesFactory, LinkHolderArray or PasswordReset
without a $hookContainer parameter is deprecated.
* Autopromote class, soft deprecated since 1.35, now emits deprecation warnings.
Use UserGroupManager instead.
* SpecialBlock::canBlockEmail has been deprecated. Please use
BlockPermissionChecker::checkEmailPermissions instead.
* SpecialBlock::checkUnblockSelf has been deprecated. Please use
BlockPermissionChecker::checkBlockPermissions instead.
* SpecialBlock::parseExpiryInput was deprecated - use
BlockUser::parseExpiryInput instead.
* SpecialBlock::validateTarget has been deprecated, use BlockUtils instead.
* SpecialBlock::validateTargetField has been deprecated for external use,
use BlockUtils instead.
* SpecialPage::getLanguageConverter has been deprecated, use
LanguageConverterFactory::getLanguageConverter() directly.
* ParserCache::getKey has been deprecated. Use ParserCache::getMetadata and
ParserCache::makeParserOutputKey instead.
* The PHPUnit4And6Compat class, used to provide compatibility with PHPUnit 4,
was removed. MediaWiki support for PHPUnit 4 ended with the removal of HHVM
support.
* The PHPUnit6And8Compat class, used to provide compatibility with PHPUnit 6,
was removed without deprecation. This class was introduced during the
upgrade to PHPUnit 8, but never used.
* MediaWikiIntegrationTestCase::assertType, hard-deprecated in 1.35 due to
incompatibility with PHPUnit 8, was removed.
* ParserCache::getETag has been deprecated, instead build suitable etag
explicitly.
* The following functions from the Language class have been hard deprecated
and will be removed in a subsequent release:
- findVariantLink
- convertTitle
- updateConversionTable
- commafy
* The following functions from the Title class have been hard deprecated:
- getPreviousRevisionID
- getNextRevisionID
- getEarliestRevTime
* The following functions from the User class have been hard deprecated:
- getDefaultOptions
- getDefaultOption
* The mw.language.commafy client-side method has been deprecated, to match
the deprecation of Language::commafy. Use mw.language.convertNumber
instead.
* The "es6-promise" module has been deprecated. Use "es6-polyfills" instead.
* Title::isDeleted() and Title::isDeletedQuick() have been deprecated. Please
use Title::getDeletedEditsCount() and Title::hasDeletedEdits() instead.
* Article::getContentObject, soft-deprecated since 1.32, was hard-deprecated.
* WikiRevision::importUpload, soft-deprecated since 1.31, was hard-deprecated.
* Html::infoBox() has been deprecated. There's no replacement.
* Message::toString() without a $format parameter, soft-deprecated since 1.28,
was hard-deprecated. Use explicit formatting methods instead, such as
Message::text() and Message::escaped().
* BagOStuff::makeKeyInternal() usage outside of BagOStuff has been deprecated.
* BagOStuff::setDebug() is deprecated and calls to it are ignored. Debug logs
are now unconditionally enabled.
* The following global functions have been hard deprecated:
- wfAppendToArrayIfNotDefault
- wfAcceptToPrefs
- wfClearOutputBuffers
- wfConfiguredReadOnlyReason
- wfDebugMem
- wfGetPrecompiledData
- wfNegotiateType
* BeforeParserFetchTemplateAndtitleHook has been deprecated; replace
with the new BeforeParserFetchTemplateRevisionRecord hook. (The
similar ParserFetchTemplateHook was deprecated in 1.35; the new hook
replaces both.)
* The InterwikiLoadPrefix hook has been deprecated; it is not compatible
with future wikitext parsers (which need to enumerate all interwiki
prefixes). In test cases please use $wgInterwikiCache instead.
* WikiPage instances should no longer be constructed for titles that do not
represent editable pages (e.g. special pages). WikiPages were always
documented to represent "MediaWiki article and history".
* Skin::getSkinStylePath() has been deprecated. Please replace usages with
the direct path to the resources.
* The second argument of EnhancedChangesList::getDiffHistLinks, $query, has
been deprecated.
* The ParserTestTables hook has been deprecated; it is no longer necessary
after a ParserTestRunner refactoring.
* The following classes have been hard deprecated: CachedAction,
SpecialCachedPage, CacheHelper, ICacheHelper. They were unused in MediaWiki
ecosystem, so no replacement was provided.
* The ProtectionForm::buildForm hook has been deprecated. Please use the
ProtectionFormAddFormFields hook instead.
* RevisionStore::newMutableRevisionFromArray has been hard deprecated. Instead,
MutableRevisionRecord should be constructed directly via constructor.
* UserIdentity::getActorId() is deprecated. The actor ID should not be exposed
to application logic. Storage layer code should use the ActorNormalization
service for normalizing and denormalizing user names.
* Constructing a UserIdentityValue with an actor ID as the third parameter is
deprecated. The parameter should be omitted. Storage layer code should use
the ActorNormalization service for normalizing and denormalizing user names.
* Command::cgroup() is deprecated and no longer functional. $wgShellCgroup is
now implemented as an Executor option.
* Command::restrict() is deprecated. Instead use the new separate accessors.
* MWTidy::tidy() is deprecated. Use MediaWikiServices::getTidy()-tidy() instead.
* TidyDriverBase::supportsValidate() is deprecated; it has always returned
false since 1.33.
* WatchedItem::getUser hard-deprecated in favor of ::getUserIdentity.
* WatchedItemStoreInterface::enqueueWatchlistExpiryJob was hard deprecated in
favor of the new method maybeEnqueueWatchlistExpiryJob that takes care of
relevant configuration checks.
* LogEntry::getPerformer() and its implementations have been hard-deprecated, in
favor of ::getPerformerIdentity().
* AuthManager::singleton(), deprecated in 1.35, is hard deprecated. Use
MediaWikiServices::getAuthManager() instead.
* User::clearNotification(), deprecated in 1.35, is hard deprecated. Use
WatchlistManager::clearTitleUserNotification() instead.
* Passing string to DatabaseBlock::setBlocker was deprecated. Only UserIdentity
is now allowed.
* DatabaseBlock constructor 'byText' option was deprecated in favour of 'by'
option, which now accepts UserIdentity. Passing user ID is deprecated.
* Parser::getUser was deprecated. Use Parser::getUserIdentity instead.
* DatabaseBlock::isWhitelistedFromAutoblocks was deprecated. Use
DatabaseBlock::isExemptedFromAutoblocks instead.
* User::isIPRange(), deprecated in 1.35, is hard deprecated.
Use the UserNameUtils service or IPUtils directly.
* BaseTemplate::getFooterIcons(), deprecated in 1.35, is hard deprecated. Read
footer icons from template data requested via $this->get('footericons').
* `box-shadow()` LESS mixin from mediawiki.mixins is deprecated due to updated
basic browser support. Use unprefixed property `box-shadow:` instead.
* MergeHistory::checkPermissions was deprecated. Use ::probablyCanMerge or
::authorizeMerge instead.
* User::isValidUserName(), deprecated in 1.35, is hard deprecated.
Use the UserNameUtils service instead.
* The TitleArrayFromResult hook has been deprecated.
* The EditPageBeforeEditToolbar hook has been deprecated; it has become
defunct after the classic edit toolbar was removed. Use one of the many
other EditPage hooks instead.
* Deprecated the class name MediaWiki\User\WatchlistNotificationManager; use
MediaWiki\Watchlist\WatchlistManager instead. Deprecated the method
MediaWikiServices->getWatchlistNotificationManager(); use
MediaWikiServices->getWatchlistManager() instead.
* The "ArticleEditUpdatesDeleteFromRecentchanges" hook, deprecated in 1.35, has
been removed. Other hooks like "RecentChange_save" can be used instead.
=== Other changes in 1.36 ===
* The 'tidy' key in ParserOptions (used in the parser cache) has been removed.
It has had no effect since 1.35.
* A future release of MediaWiki will make `{{=}}` a built-in parser function,
for use when automatically escaping the `=` character in template arguments.
A tracking category and parser warning have been added to this release when
`{{=}}` is used and it expands to something other than `=`.
* The implementation of TestFileReader::read has been changed to use Parsoid's
parser test file parser. This should be compatible with existing code, but it
only supports version 2 of the test file specification and may be more strict
when parsing invalid input, including duplicate tests.
* BeforeParserFetchTemplateRevisionRecord, a new hook, unifies and replaces the
old BeforeParserFetchTemplateAndtitleHook and ParserFetchTemplateHook.
* The SkinLessImportPaths attribute was added, allowing skins to add a directory
to the import path for LESS stylesheets. Skins can use this to provide a
custom version of mediawiki.skin.variables.less, setting skin-specific values
for certain LESS variables.
* The interaction between ContentHandler::getParserOutputForIndexing() and
ContentHandler::getDataForSearchIndex() has been clarified (the latter should
only be called with the result of the former). Extensions may override
getParserOutputForIndexing() to skip generating HTML, which may improve
indexing performance. (The default implementation still generates HTML, and
getDataForSearchIndex() implementations can still rely on it if they do not
over-ride getParserOutputForIndexing().)
* Article::fetchContentObject, ::mContentObject, ::mContentLoaded,
::mRevIdFetched, all deprecated since 1.32, were removed.
* Article::mParserOptions and ::setParserOptions were removed.
* Article and ImagePage::getEmptyPageParserOutput, unused, were removed.
* ParserCache's default serialization format was changed from PHP serialization
to JSON serialization. In case some installed extension do not support JSON
yet, $wgParserCacheUseJson can be used to revert back to PHP serialization.
* PermissionManager::groupHasPermission, ::getGroupPermissions and
::getGroupsWithPermission were deprecated, use GroupPermissionsLookup
service instead.
* WatchedItemStoreInterface now accepts PageIdentity where it accepted
LinkTarget, calling with LinkTarget was deprecated.
* 'movable' attribute has been added to the 'namespaces' property of
extension.json schema. Extensions that define namespaces can set it to
`false` to disallow moving pages in the specified namespace. Extensions
should either use this or NamespaceIsMovableHook, but not both. The hook
overrides the attribute.
== Compatibility ==
MediaWiki 1.36 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.
= MediaWiki 1.35 =
== MediaWiki 1.35.3 ==
This is a security and maintenance release of the MediaWiki 1.35 branch.
=== Changes since MediaWiki 1.35.2 ===
* (T259685) SQLite compatibility with ZeroConf VisualEditor was fixed in 1.35.2.
* (T196906, T242751) Fix the test MonologSpiTest::testDefaultChannel.
* (T279964) Parser: Trim trailing whitespace as the last step in pre-save
transform.
* (T278026) rdbms: Add DB_PRIMARY to replace DB_MASTER.
* (T252853) Update updateSearchIndex.php to 2006+ standards.
* (T276945) Define a batch size in maintenance/manageJobs.php.
* (T276945) Implement JobQueueDB::getAllAbandonedJobs.
* (T269676) authevents: strval() variables passed to status when logging.
* (T280944) $wgIncludejQueryMigrate - This setting allows the jQuery Migrate
plugin to be disabled. It has been enabled by default since MediaWiki 1.27.
* (T281584) apihelp-query+iwlinks-param-prop: s/interlanguage/interwiki/.
* (T281635) Delete maintenance/cleanupAncientTables.php.
* (T282133) RedisConnectionPool: Suppress phan issue.
* (T281549) WebInstaller: Don't show the announce-l subscribe
checkbox temporarily.
* (T278266) Fix annoying E_NOTICE about undefined 'alt' index in
Skin#makeFooterIcon.
* (T264214) UserRightsProxy::addGroup has to be allowed to update the
old group as well, which is used for granting interwiki rights.
* (T269776, T278266) getFooterIcons should not return empty arrays.
* (T274966) Skip AvroFormatterTest::testSchemaNotAvailable on PHP 8.0.
* phpunit: fail on warnings.
* (T283247) Freenode -> Libera per wikimedia moving from
freenode to libera.
* (T243124) Make phpunit:unit accept extension*.json to populate the classes.
* (T142663) Add extension.json merge strategy "provide_default".
* (T283540) HookContainer: Fix normalization of callback for static handler.
* (T283464) Fix array order for array_replace_recursive merge strategy.
* (T247223) Optimise MessageCache::isMainCacheable() for the single-message
case.
* (T278579) Don't send headers on ob_end_clean().
* (T280226, CVE-2021-35197) SECURITY: Prevent blocked users from purging
pages.
== MediaWiki 1.35.2 ==
This is a security and maintenance release of the MediaWiki 1.35 branch.
MediaWiki 1.35.2 supports Composer 2.0. It is reccommended to make sure your
libraries are up to date on Composer 1.x, before running Composer 2.x.
While normally running update.php isn't required for point releases,
it is recommended to run it for 1.35.2 so that iwlinks.iwl_prefix is
updated to take 32 characters.
=== Changes since MediaWiki 1.35.1 ===
* (T270450) The confusingly-named User->isLoggedIn() method has been deprecated
in favour of the method it wraps, User->isRegistered().
* Upgrade pimple/pimple from 3.3.0 to 3.3.1 for PHP 8.0 support.
* Upgrade seld/jsonlint from 1.7.1 to 1.8.3 for PHP 8.0 support.
* Upgrade doctrine/dbal from 2.10.4 to 3.0.0 for PHP 8.0 support.
* (T270734) Fix display of Special:Preferences URL in password reset email.
* (T252774, T271441) resourceloader: Give SkinModule 'features' option an
extensible default.
* (T271441) Unknown features shouldn't break style output.
* (T264986) Make use of CURLMOPT_MAX_HOST_CONNECTIONS conditional on having
curl >= 7.30.0.
* DefaultSettings.php: Update $wgPingback documentation.
* Fix docs for LanguageConverter::translate.
* (T272250) Don't rely on implicit string->int cast in comparison.
* (T272327) Exif::isSlong: Cast input to float so PHP 8.0 abs() doesn't whine.
* (T272328) UploadBase: Don't call MimeAnalyzer if mTempPath is null.
* Remove nonfunctional default sampling for WANObjectCache metrics.
* (T258851) Prevent service injection to LoadExtensionSchemaUpdates hook.
* (T270852) Hooks: Map dash character to underscore when generating hook names.
* (T271551, T270145) Fix fetching ipblock-exempt within
BlockManager::getUserBlock.
* PHPVersionCheck: The PHP Group only supports PHP >= 7.3.0.
* (T248925) Set empty closures in DatabaseTest to fix PHP 8 tests.
* (T34217) rdbms: Remove outdated MySQL 4 references and fix doc URLs.
* (T248925) Special:Contributions reports negative namespace error on PHP 8.
* (T248925) objectcache: Fix non-numeric string check in HashBagOStuff for
PHP 8.
* (T248925) Fix CacheTime::getCacheExpiry for PHP 8.
* (T259685) Allow REST API POST handlers to opt out of mandatory SQLite locking.
* (T91820, T259685) MWLBFactory: rename magic HTTP header for opting out of
SQLite write lock.
* (T272326) Fix DeprecationHelperTest on PHP 8.
* Upgrade wikimedia/less.php from 3.0.0 to 3.1.0 for PHP 8.0 support.
* (T236639) OutputPage: Make $wgDebugRedirects work again.
* (T274648) registration: Allow reusing cached metadata between wikis.
* CdnCacheUpdate: Send full URL instead of path to Curl for purge.
* Upgrade monolog/monolog from 1.25.3 to 2.2.0 for PHP 8.0 support.
* FileBackend: Do not use SOCKET_ENOENT on windows.
* (T275441) ApiQueryUserInfo: Allow all uiprops to be requested at once.
* (T275261) Escape wikitext in the title in invalid title error messages.
* (T275242) Extend iwlinks.iwl_prefix to VARBINARY(32) on MySQL.
* (T246594, T270228) PHPVersionCheck: Complain about known-bad versions above
minimum.
* (T275824) Upgrade wikimedia/composer-merge-plugin from 1.4.1 to 2.0.1 for
Composer 2.0 support.
* (T269293) Record all used options in metadata.
* Allow usage of Composer 2.0 to install MediaWiki's dependencies.
* (T259872) skins: Call headElement() after getTemplateData() in SkinMustache.
* (T277009, CVE-2021-30158) SECURITY: Allow blocked users to access
Special:ResetTokens.
* (T272412) Add "Account data" section to user preferences.
* (T268310) Add list of thumbnail urls to LocalFilePurgeThumbnails hook.
* (T277520) registration: Allow specifying immovable namespaces in
extension.json.
* (T275619) Maintenance::hasOption and Maintenance::getOption now behave as
documented and are not altered by previous calls to these methods.
* (T254688) Remove page inner join from subquery in SpecialWhatLinksHere.
* (T122124) signup: added help message for security.
* (T278014, CVE-2021-30154) SECURITY: Escape mediastatistics-header-* messages
on Special:NewFiles.
* (T278058, CVE-2021-30157) SECURITY: Escape rcfilters-filter-* messages on
ChangesList pages.
* (T277414) HTMLFormField: Use non namespaced class name rather than
static::class.
* (T268673) maintenance: Don't create SearchUpdate in rebuildtextindex.php
for page_namespace below 0.
* (T246594, T270228) Mark ParserOptionsTests skipped on PHP 7.4.0-7.4.8.
* (T268230) Switch to new MediaWiki logo by Serhio Magpie.
* (T271735) Expand config-pingback-help, link to privacy policy in
config-pingback.
* Fix documentation of user-global in $wgRateLimits.
* BackupDumper: Add -o as shortcode for --output.
* (T235554) Disable DEFER_SET_LENGTH_AND_FLUSH headers to avoid HTTP errors.
* (T270713, CVE-2021-30152) SECURITY: Allow user to only apply protection they
have right to do so via action=protect.
* (T272386, CVE-2021-30159) SECURITY: Non-admin deleted enwiki page in fast
double move.
* (T270988, CVE-2021-30155) SECURITY: ContentModelChange: Check that user can
create pages.
* (T279451, CVE-2021-30458) SECURITY: Parsoid comment fostering allows for
inserting mostly arbitrary tags.
== MediaWiki 1.35.1 ==
This is a security and maintenance release of the MediaWiki 1.35 branch.
While normally running update.php isn't required for point releases,
it is recommended to run it for 1.35.1 so that sites.site_language is
updated to take 35 characters.
Watchlist Expiry is no longer considered experimental, but is off by default.
To enable it, set $wgWatchlistExpiry = true; in your LocalSettings.php.
=== Changes since MediaWiki 1.35.0 ===
* (T263929) purgeList.php Fix all-namespaces option to match one used in code.
* (T248719) ParserCache::get - fix wfDeprecated call.
* (T261430) WatchlistExpiryWidget: Move focus to expiry dropdown after hitting
Tab.
* Preload mediawiki.watchstar.widgets before api request.
* (T261030) ApiEditPage: Show existing watchlist expiry if status is not being
changed.
* (T264502) Fix PHP 8 compat with strcspn() $length parameter exceeding string.
* (T248925) Remove final modifier on private function.
* (T264683) Remove ipb_anon_only from ipb_address_unique index addition.
* (T261415) Add days left messages to changes-lists' clock icons.
* Fix order of wfDeprecated parameters in ExternalStoreDB::getSlave.
* (T261260) Preload class used in HeaderCallback.
* (T260868, T260009) Normalize WatchedItem expiry field.
* (T264683) Remove doTable check from (Mysql|Sqlite)Updater::indexHasFields.
* (T264534) ApiPageSet: Avoid infinite loop when merging redirects.
* (T196906) Empty Monolog loggers are now real blackholes.
* (T258649) WatchAction: avoid UPDATE when old and new watch period is
indefinite.
* Parser: Adjust typehint to show that getTitle can return null.
* (T263592) media: Fix case of FlashPixVersion in
FormatMetadata::makeFormattedData().
* (T265223) BaseTemplate: Guard against passing zero arg to array_merge().
* (T264965) Fix base path handling for MessagePosterModule registration.
* (T252183) Fix Database::getTempTableWrites for multi table DDLs.
* (T182546) Fix switch/case indentation per mediawiki coding conventions.
* Flip Yoda conditionals.
* (T263213) Move SkinTemplate::getFooterLinks() to Skin.
* build: Updating mediawiki/mediawiki-codesniffer to 33.0.0.
* (T267105) Make ImageBuilder::checkMissingImage public.
* Updating guzzlehttp/guzzle (6.5.4 => 6.5.5).
* (T266681) Support new style hook registration on install and update.
* (T266980) Fix unsetting of copyright icon in FooterIcons.
* upload.js: Don't assume that warnings array will include 'code' key.
* upload.js: Fix typo in upload API.
* (T264333, T190988, T266903) Pass along ignorewarnings param to all
individual chunks being uploaded.
* (T267558) importTextFiles.php: Replace deprecated WikiRevision:setText().
* (T266418) composer.json: add requirement for composer-plugin-api ^1.1.
* (T261431) Add ARIA attributes to watchlink and its notification.
* (T258877) Change invalid 'Content-Encoding: none' header.
* Fix trailing ; in patch-sites-site_language-35.sql.
* (T248852) wfAssembleUrl: Handle empty query field in URL bits.
* (T268846) Updating wikimedia/testing-access-wrapper (1.0.0 => 2.0.0).
* (T268887) migrateComments: Cast array keys back to string before passing
to the DB.
* (T266619) Introduce new $wgThumbPath config.
* (T269178) MemcachedClient: Cast Resource to integer.
* (T263925) Use the old HookContainer to set up the post-reset services.
* Change "site cache" to just "cache" in the right-purge message.
* [UploadedFileStreamTest] Skip test with chmod.
* (T269710) Updating composer/semver (1.5.1 => 1.7.2).
* (T269710) Updating mediawiki/mediawiki-codesniffer (33.0.0 => 34.0.0).
* (T260631, T260633), BotPassword::save() now returns a Status object for the
result rather than a bool. The length of the bot password grants and
restriction fields are now validated, and an error will be thrown if it
would be truncated by the database.
* (T265778) Fix English/*nix specific error messages in FSFileBackend.
* (T267543) Split dropping of image.img_user_timestamp.
* [FileTest] Do not assume /tmp exists on windows.
* Clean up temp files correctly after unit tests.
* Skip undo related phpunit tests when diff3 is missing.
* (T269964) rdbms: Remove outer parentheses in insert query for Postgres.
* (T263911) In MWExceptionHandler::report(), catch all throwables.
* (T268894, CVE-2020-35474) SECURITY: Use Html::element in
ChangeListSpecialPage for sanity.
* (T268917) Use Xml::element in SpecialUserrights for sanity.
* (T268938, CVE-2020-35478, CVE-2020-35479) SECURITY: Pass escaped html
to LogFormatter::makePageLink for sanity.
* (T268938) Fixed mixed escaping in Language::translateBlockExpiry.
* (T263911) UserOptionsManager: don't differentiate anons caches.
* (T261260) HeaderCallback: pre-cache request ID.
* Parsoid updated to v0.12.1.
* (T205908, CVE-2020-35477) SECURITY: Unable to change visibility of log
entries when MediaWiki:Mainpage uses Special:MyLanguage.
* (T120883, CVE-2020-35480) SECURITY: Divergent behavior for contributions
and user pages of hidden users and missing users.
* (T270145) Fix condition that can lead to using APCOND_BLOCKED in
$wgAutopromote to cause an OOM in PHP.
== MediaWiki 1.35.0 ==
=== Changes since MediaWiki 1.35.0-rc.3 ===
* (T261258) Remove checks for ancient ImageMagick versions in BitmapHandler.
* (T260232) Don't include null page ids in query list for category dumps.
* (T260009) Check existing watchitem when saving action=watch.
* (T259055) Correct success messages for action=watch.
* mediawiki.page.ready: Simpler tablesorter/makeCollapsible call.
* mediawiki.page.ready: Fix skin override config flags, wrong way round.
* (T262175, T248512) Remove requirement for ApiWatchlistTrait to be in ApiBase.
* (T259053, T260434) Watchlist: Fix updateWatchLink removing css class when
action=watch.
* (T261901, T261476) mediawiki.notification: Don't close notif when clicking
element.
* (T251506) Sanitizer: Truncate IDs to a reasonable length.
* (T259452) Parsoid updated to v0.12.0.
* (T261970) watch.ajax: Add expiry support to watchpage.mw event.
* (T262900) Fix failure of rebuildLocalisationCache.php due to ResourceLoader
hook.
* (T263014) Hard deprecate File::userCan() with $user=null.
* (T262547) Use localized success message after watching via action=watch.
* (T201491) Fix typo 'Watchlst' in `apihelp-edit-param-watchlistexpiry`.
* (T261081) Installer: consistently reset Language objects.
* (T250449, T250450) Installer: consistently reset Language objects.
* Explicitly wrap some XML calls in libxml_disable_entity_loader().
* (T262934) Ensure dropdown label is always on its own line.
* (T246855) resourceloader: Use a local HookRunner.
* (T263604) Have findBadBlobs.php require Maintenance.php rather than
cleanupTable.inc.
* (T263606) Set fake time, to avoid flaky tests.
* (T261325) Add FindMissingActors script.
* (T262364) shell: Don't blacklist /run/firejail.
* (T263655) NewPagesPager: Ignore nonexistent namespaces.
* Update specialPageAliases and magicWords for Egyptian Arabic (arz).
* (T261347) ParserOutput: don't throw on bad editsection.
* (T232568, CVE-2020-25813) SpecialUserrights: If a viewer lacks `hideuser`,
ignore hidden users.
* (T255918, CVE-2020-25812) SECURITY: Unescaped message used in HTML on
Special:Contributions.
* (T256171, CVE-2020-25815) SECURITY: Unescaped message used in HTML within
LogEventsList.
* (T258763, CVE-2020-17367, CVE-2020-17368) SECURITY: Prevent invoking
firejail's --output functionality.
* (T86738, CVE-2020-25814) SECURITY: mediawiki.jqueryMsg: Sanitize URLs and
'style' attribute.
* (T115888, CVE-2020-25828) SECURITY: mediawiki.js: Escape HTML in
mw.message( ... ).parse().
* (T260485, CVE-2020-25869) SECURITY: ActorMigration: Load user from the correct
database.
* (T260485, CVE-2020-25869) SECURITY: ensure actor ID from correct wiki is used.
* Add Finnish special page aliases.
* Fix GuzzleHttpRequest request headers.
* Fix description for pruneFileCache.php.
* emptyUserGroup.php: handle more than 5000 users.
* Make ApiSandbox copyable URL absolute.
* (T261087) Add a link from a deleted page to that page's logs.
== MediaWiki 1.35.0-rc.3 ==
=== Changes since MediaWiki 1.35.0-rc.2 ===
* (T258662) mediawiki.visibleTimeout: Update the nextVisibleTimeoutId value.
* Ensure Parsoid doesn't throw when [ is used w/o Cite installed.
* Remove maintenance/createCommonPasswordCdb.php.
* (T260468) Increase "sites.site_global_key" to varbinary(64).
* (T183759) Fix shell edge-cases in Windows.
* (T257879) Drop PHP 7.2 support; require 7.3.19.
* (T251661, CVE-2020-25827) SECURITY: User::pingLimiter: add user-global
rate limit type.
* (T246991) User: enforce pingLimiter() expiry time.
* (T256831) Rest: Handle Uri constructor exception.
* (T259094) Fix RequestFromGlobalsTest failing in Travis CI.
* (T256831, T261344) Rest: Use try/catch to handle URIs with embedded colon.
== MediaWiki 1.35.0-rc.2 ==
=== Changes since MediaWiki 1.35.0-rc.1 ===
* (T259693) uuid: Fix filenames on Windows.
* Remove Gruntfile.js and package-lock.json from the tarball.
* firejail: Strengthen by copying from Wikimedia's profile.
* (T260059) ResourceLoaderOOUIImageModule: loadOOUIDefinition() may return
false.
* (T30162, T245387) The installer supports using a Postgres server running
on a custom port other than 5432.
* (T260201) Support private wikis in Parsoid zero configuration mode.
* Fix bad use of `|=` PHP bit operation where `= … ||` bool is intended.
* (T259212) SpecialBlock: Show error if a block could not be inserted or found.
* (T255842) UserOptionsManager: fix options reset.
* (T258649) WatchAction: avoid unnecessary UPDATEs when expiry is unchanged.
* (T250851) Allow skins to override mediawiki.page.ready initialisation.
* (T250851) mediawiki.page.ready: Allow skins to disable search lazy load.
* (T253135, T255632) Update language in watchlist expiry.
* Use IPset in MWRestrictions::checkIP.
* (T259564) Fix race condition on edit page.
* (T260759) Hide watchlist expiry label in edit form.
* mime: Fix docs of MIME_EXTENSIONS, they're arrays, not space-seperated.
* (T260031) Add application/font-sfnt to MimeMap for ttf files.
* (T259379) WatchedItemStore: Cache single WatchedItems with preexisting expiry.
* Add a maintenance script to create bot passwords.
* (T201269) Add Traditional Chinese zh-hant as fallback for Amis (ami).
* Improve wfParseUrl docs.
* (T251038) Add multi index fields in ImageListPager for unique paginate.
* (T259916) Guard against 'Widget not found' error.
== MediaWiki 1.35.0-rc.1 ==
=== Changes since MediaWiki 1.35.0-rc.0 ===
* (T252136) Fix RecentChanges watchlist filters when WatchlistExpiry is off.
* (T258662) Update time period for watchlist expiry pop-up.
* (T258443) Fix expiry dropdown not getting disabled on edit page.
* (T259398) Add license information for promise-polyfill.
* Remove executable bit from scripts without shebang.
* (T256526) Fix bold of watched items on Special:RecentChangesLinked.
* (T259060) Edit page expiry dropdown should keep state after
disabling/enabling.
* (T259009) Translate expiry period in pop-up message for watchlist expiry.
* (T258310) Add watchlist clock icon to RecentChanges.
* (T259362) Permit temporary table writes on replica DB connections.
* (T250214) Add UI support in Special:EditWatchlist for watchlist expiry.
* (T72470) Disable wgLegacyJavaScriptGlobals by default.
* (T130906) Add Edge to MediaWiki:Clearyourcache.
* (T257279) Add mediawiki.ui Less variable deprecation note.
* (T249521) Fixed reassignEdits.php to work with anonymous users.
* (T259448) Fix Circular dependency when creating service in
DBLoadBalancerFactory.
* (T257259) Default to using watchlist expiry of old page when moving pages.
== MediaWiki 1.35.0-rc.0 ==
== Upgrading notes for 1.35 ==
1.35 requires PHP 7.3.19 or above (up from 7.2.9). (T257879)
1.35 has several database changes since 1.34, and will not work without schema
updates. Note that due to changes to some very large tables like the revision
table, the schema update may take quite long (minutes on a medium sized site,
many hours on a large site).
Don't forget to always back up your database before upgrading!
MediaWiki 1.35 is the next LTS after 1.31, and will be supported for around 3
years.
MediaWiki has a lot of both soft and hard deprecations, and code removed. As
always, make sure your versions of extensions match the MediaWiki version,
and updates may be required to any custom extensions.
See the file UPGRADE for more detailed upgrade instructions, including
important information when upgrading from versions prior to 1.11.
Some specific notes for MediaWiki 1.35 upgrades are below:
* (T259685) Zeroconf (zero-configuration) VisualEditor/Parsoid doesn't work
using SQLite as the database backend for MediaWiki. This is due to the lack
of write concurrency in SQLite. If you wish to use this feature, it is
recommended to use MySQL/MariaDB rather than SQLite.
For notes on 1.34.x and older releases, see HISTORY.
=== Configuration changes for system administrators in 1.35 ===
* (T72470) $wgLegacyJavaScriptGlobals is now false by default. This feature
will be completely removed in a later MediaWiki release.
==== New configuration ====
* $wgDiffEngine — This can be used to specify the difference engine to use,
rather than MediaWiki choosing the first of $wgExternalDiffEngine, wikidiff2,
or php that is usable.
* $wgSearchMatchRedirectPreference — This configuration setting controls whether
users can set a new preference, search-match-redirect, which decides if search
should redirect them to exact matches is available. By default, this is set to
false, which maintains the previous behaviour without preference bloat. Change
your site's default by setting $wgDefaultUserOptions['search-match-redirect'].
* $wgPoolCounterConf['SpecialContributions'] — Per-user concurrency in the use
of SpecialContributions can now be limited by setting this appropriately.
* $wgPasswordPolicy — PasswordCannotBeSubstringInUsername is a new password
policy check. Similar to the existing PasswordCannotMatchUsername check, this
check ensures that a user's (case-insensitive) password cannot be a part of
their username. e.g. password = MyPass, username = ThisUsersPasswordIsMyPass.
* $wgLogos — This new configuration setting combines the now-deprecated $wgLogo
and $wgLogoHD settings into a single, associative array. It provides support
for a new key, 'wordmark', for setting a horizontal wordmark to show next to
the graphical logo. To do this, set 'wordmark' to an array with 'src' set to
the path of the wordmark image, and 'width' and 'height' for its dimensions
in pixels. $wgLogos inherits the existing support provided by its predecessor
settings: '1x' mapping to the path of the logo as a 135x135px raster image
(equivalent to $wgLogo), and '1.5x', '2x', and 'svg' operating as before for
$wgLogoHD. If $wgLogos is unset, $wgLogo and $wgLogoHD values are read for
temporary backwards compatibility. (T232140)
* $wgWatchlistExpiry — (EXPERIMENTAL) This enables the new watchlist expiry
feature. The database table (watchlist_expiry) for this is created regardless
of this setting, but all other aspects of the expiry feature are controlled
by it. Enabling in production is discouraged for the time being. A future
MediaWiki 1.35 release will advertise this feature once it is stable.
* $wgWatchlistPurgeRate — This sets the chance of expired watchlist items being
purged on each page edit. Only has effect if $wgWatchlistExpiry is true.
* $wgWatchlistExpiryMaxDuration — This is the maximum definite relative duration
for watchlist expiries. Only has effect if $wgWatchlistExpiry is true.
* $wgImgAuthPath – This can be used to override the path prefix used when
handling img_auth.php requests. (T235357)
* $wgAllowedCorsHeaders — This is a list of headers which can be used in a
cross-site API request.
* $wgHTTPMaxTimeout and $wgHTTPMaxConnectTimeout — These allow site
administrators to limit the timeouts used by the HTTP client libraries.
This only affects callers using HttpRequestFactory and the deprecated
wrappers in the Http class.
* $wgCdnMaxageStale — This controls the Cache-Control s-maxage header for page
views when PoolCounter lock contention indicates that a stale cache entry
should be sent.
* $wgForceHTTPS — This makes the HTTP to HTTPS redirect be unconditional and
suppresses various hacks needed to support mixed HTTP/HTTPS wikis. We
recommend this be set to true on pure HTTPS wikis.
* $wgCookieSameSite — This setting allows login cookies to be sent with
SameSite=None. This is required for cross-site CentralAuth auto-login after
Chrome 84.
* $wgUseSameSiteLegacyCookies — This adds a compatibility hack to
SameSite=None cookies for browsers which implemented an incompatible draft
version of the specification.
==== Changed configuration ====
* $wgResourceLoaderMaxage (T235314) — This configuration array controls the
max-age for HTTP caching through the Cache-Control header. It has uses the
"versioned" key for urls that do have a version parameter, and the
"unversioned" key for urls without a version parameter. The sub keys for
"client" and "server" are no longer supported in MediaWiki 1.35.
* $wgEnableOpenSearchSuggest — This boolean variable is deprecated and no longer
used. The OpenSearch API is now always enabled.
* $wgAuthManagerConfig and $wgAuthManagerAutoConfig — These can now use the
'services' option in provider specifications.
* $wgVirtualRestConfig['modules']['parsoid'] —
- The defaults have been updated. If you were relying on the default values,
you may need to update your configuration.
- The 'URL' parameter, previously allowed for backwards-compatibility, has
been deprecated. Use 'url' instead.
* $wgXmlDumpSchemaVersion — Default is now set to XML_DUMP_SCHEMA_VERSION_11, so
dumps use the new dump format per default. Consumers of XML dumps should not
be affected if they ignore any unknown tags they encounter. Also, the format
is effectively unchanged for revisions that only contain the main slot. The
--schema-version option can be used with the dumpBackup.php script to set the
dump format. (T238921)
* $wgParserConf — This configuration is now deprecated. It has been
effectively constant since 2008, and is ignored by core code.
Configure the ParserFactory service in order to customize the Parser used.
* $wgAutoloadAttemptLowercase — This has been deprecated, and the default value
changed to false.
* $wgAllowImageMoving — This configuration setting is now deprecated. Instead,
use $wgGroupPermissions; e.g., to revoke sysops' ability to move images use
$wgGroupPermissions['sysop']['movefile'] = false.
* $wgAllowImageTag — This configuration is now deprecated; future parsers will
not support direct use of the HTML ] tag in wikitext.
* $wgUseTwoButtonsSearchForm — This has been deprecated. If you maintain a skin
that relies on this and wishes to let system administrators change it, you
should convert it to a config variable specific to your skin. If you're using
it to configure your wiki, you should check individual skins to see whether
they have local skin config for the feature and use that.
* $wgPasswordPolicy — The deprecated policy 'PasswordCannotBePopular' has been
removed. Use PasswordNotInCommonList instead which covers many more passwords.
* Backwards compatibility for using an associative array
(e.g. [ '127.0.0.1' => 'bad-ip' ]) for $wgProxyList has been removed. This
was deprecated since 1.30. Please convert these arrays to indexed/sequential
ones (e.g. [ '127.0.0.1' ]).
* $wgShellRestrictionMethod — This now defaults to 'autodetect', which will
enable sandboxing for shell commands using firejail, if it's installed. To
disable restrictions, set it to false.
* $wgLegacyJavaScriptGlobals – This deprecated setting now default to false,
instead of true, ahead of its planned removal.
==== Removed configuration ====
* $wgSysopEmailBans — This setting, deprecated in 1.34, was removed. To let
sysops block email access, use $wgGroupPermissions['sysop']['blockemail'].
* $wgDBWindowsAuthentication — This setting had no effect anymore after support
for SQL Server was removed in 1.34. (T230418)
* $wgProfileOnly — This setting, deprecated in 1.23, was removed. The profiler
output should instead be configured via $wgProfiler['output'].
* $wgProfileLimit — This setting, deprecated in 1.25, was removed.
Set $wgProfiler['threshold'] instead.
* $wgDebugTimestamps — This setting was removed. It affected the text output
produced via $wgDebugComments, if enabled.
* $wgSkipSkin — This setting, deprecated in 1.23, was removed. To disable a
skin from being shown, use $wgSkipSkins.
* $wgUseSquid, $wgSquidServers, $wgSquidServersNoPurge, and $wgSquidMaxage —
These, deprecated in 1.34, have been removed. Use $wgUseCdn, $wgCdnServers,
$wgCdnServersNoPurge, or $wgCdnMaxAge instead.
* $wgDisableCounters — This, deprecated in 1.25, was removed. The feature that
it controlled was already removed in 1.26, but the variable remained existent
with a value of `false` for backward-compatibility.
* $wgMaxGeneratedPPNodeCount — This setting was removed. It only affected
Preprocessor_DOM, which was deprecated in 1.34 and removed in this release.
* $wgFixArabicUnicode and $wgFixMalayalamUnicode — These, deprecated in 1.33,
were removed. The fixes are now always enabled for their respective languages.
* $wgAllowTitlesInSVG — This, unused and deprecated since 1.34, was removed.
* $wgEnablePartialBlocks — This setting, deprecated when it was added in 1.33,
was removed. Partial blocks are now always enabled.
* $wgLocalInterwiki — This setting, deprecated in 1.23, has been removed.
* $wgContentHandlerUseDB — This setting, deprecated in 1.34, has been removed.
* $wgMultiContentRevisionSchemaMigrationStage — This setting must no longer
be set locally. If the migration stage was set to anything other than
SCHEMA_COMPAT_NEW locally, update.php must be run after removing the setting.
Usage of the setting in code is deprecated. The setting will be removed
completely in 1.36.
* $wgEnableRestAPI — This setting is no longer obeyed by MediaWiki core, and
should not be set set locally. Usage of the setting in code is deprecated; it
is now set true by default. The setting will be removed completely in 1.36.
* $wgObjectCaches — The 'slaveOnly' option for SqlBagOStuff, deprecated in 1.34,
was removed. Use 'replicaOnly' instead.
=== New user-facing features in 1.35 ===
* (T204618) Whitelisted the aria-hidden HTML attribute for all elements in
wikitext.
* (T13456) Special:EditPage, Special:PageHistory, Special:PageInfo, and
Special:Purge have been created as shortcuts for each action.
Special:EditPage/Foo redirects to title=foo&action=edit, with PageHistory,
PageInfo, and Purge corresponding to action= history, info, and purge
respectively. When linked to, its subpage is used as the target. Otherwise,
it displays a basic interface to allow the end user to specify the target
manually.
* (T139221) The generated table of contents is now a navigation landmark role
for assistive technologies.
* (T245931) interwiki map API doesn't report foreign language if
$wgInterwikiMagic=false
* The form at ?action=watch has a new dropdown list to support expiry dates for
watchlist items (if $wgWatchlistExpiry is true).
=== New developer features in 1.35 ===
* A Docker based local development develpoment environment configuration is
included (T238224) and DEVELOPERS.md has been added with usage documentation
and links to further help.
* If CSP is enabled, extensions can now add additional sources using the
ContentSecurityPolicy::addDefaultSource, ::addStyleSrc and ::addScriptSrc
methods (e.g. $context->getOutput()->getCSP()->addDefaultSrc( 'example.com' ))
* Extensions can now specify classes and namespaces to be autoloaded by the
test autoloader, by setting the "TestAutoloadNamespaces" and
"TestAutoloadClasses" properties in extension.json. (T196090)
* (T250977) extension.json now allows "SearchMappings" which maps the canonical
name of the search engine (used in wgSearchType and wgSearchTypeAlternatives)
to a specification using the ObjectFactory specification. This allows
extensions to register Search Engines using namespaced classes.
* Added getters for OutputPage's robot, index and follow policies;
getRobotPolicy() returns the entire policy as a string in the form
, while getIndexPolicy() and getFollowPolicy()
return their respective policies as a string.
* The ResourceLoaderSiteModulePages and ResourceLoaderSiteStylesModulePages
hooks were added to allow changing which wiki pages these modules contain.
* The SkinFactory now allows skins to be specified as an ObjectFactory spec,
allowing the construction of skins with services injected.
* ContentHandlerFactory for most ContentHandler static methods. It has been
added to the constructors for many classes to improve SOLID / GRASP.
* FileDeleteForm's constructor now accepts a user as the second parameter.
Support for not passing a user has also been hard-deprecated and will be
removed in 1.36.
* The ParserPreSaveTransformComplete hook was added.
* The ParserBeforePreprocess hook was added.
* The ResourceLoaderSkinModule class now has a "legacy" feature that loads
the stylesheets previously part of the "mediawiki.legacy.shared" and
"mediawiki.legacy.commonPrint" module.
Those modules are now deprecated and no longer loaded by skins.
For skins needing to retain these styles, you will need to load these
styles via a module using the ResourceLoaderSkinModule class.
See Vector and Monobook for examples.
* ParserOutput now has methods addExtraCSPStyleSrc, addExtraCSPDefaultSrc
addExtraCSPScriptSrc for parser tags/functions to be able to add sources
to the Content Security Policy.
* The HtmlCacheUpdater service was added to unify the logic of purging CDN cache
and HTML file cache to simplify callers and make them more consistent.
* The MultiHttpClient code will fallover to non-curl if curl_multi* is blocked.
* Preferences which use HTMLTitlesMultiselectField can make use of
MultiTitleFilter class for saving title text to/from article IDs in user
preferences.
* OutputPage::addHtmlClasses() was added to allow injecting CSS classes on
to the element on page load.
* The SkinAddFooterLinks hook is added to allow extensions to add items to skin
footers. Previously this had to be done via SkinTemplateOutputPageBeforeExec.
Doing so using that hook is now hard deprecated.
* A new BlockPermissionChecker service was introduced for checking
block-related permissions.
* The support of 'database' type of extensions has been added to allow 3d party
databases like Percona be used as storage. See T226857, T253248.
* Three new return parameters have been added to the
EditPageGetCheckboxesDefinition hook. Handlers of this hook are no longer
restricted to defining checkboxes. See the documentation of
EditPage::getCheckboxesDefinition() for more details.
* New flag File::RENDER_TMP was added in order to allow
File::generateAndSaveThumb and File::trasform to render a thumbnail without
saving it to the storage.
=== External library changes in 1.35 ===
==== New external libraries ====
* Added wikimedia/ip-utils 1.0.0.
* Added wikimedia/parsoid 0.12.0.
* Added wikimedia/services 2.0.1.
* Added taylorhakes/promise-polyfill v8.1.3.
* Added vuejs v2.6.11.
* Added vuex v3.1.3.
===== New development-only external libraries =====
* Added doctrine/dbal 2.10.2.
* Added doctrine/sql-formatter 1.1.0.
* Added pimple/pimple 3.3.0.
==== Changed external libraries ====
* pear/mail_mime was upgraded from 1.10.2 to 1.10.8.
* wikimedia/less.php was upgraded from 1.8.0 to 3.0.0.
* Updated oojs from 3.0.0 to 5.0.0.
* Updated OOUI from 0.35.1 to 0.39.3.
* zordius/lightncandy was upgraded from 0.23.0 to 1.2.5.
* Updated jQuery from v3.3.1 to v3.4.1.
* Updated jQuery Migrate from v3.0.1 to v3.1.0.
* Updated wikimedia/assert from 0.2.2 to 0.5.0.
* Updated pear/net_smtp from 1.8.1 from to 1.9.1.
* Updated psr/log from 1.0.2 to 1.1.3.
* Updated jquery.i18n from 1.0.5 to 1.0.7.
* Updated guzzlehttp/guzzle from 6.3.3 to 6.5.4.
* Updated wikimedia/xmp-reader from 0.6.3 to 0.7.0.
Fixes error log spam with too-large XMP data, and adds support for GPano tags.
* Updated wikimedia/base-convert from v2.0.0 to v2.0.1.
* Updated composer/semver from 1.5.0 to 1.5.1.
* Updated wikimedia/remex-html from 2.1.0 to 2.2.0.
* Replaced wikimedia/password-blacklist 0.1.4 with wikimedia/common-passwords
0.2.0.
===== Changed development-only external libraries =====
* Updated symfony/yaml from 3.4.28 to 5.0.5.
* Updated nikic/php-parser from 3.1.5 to 4.4.0.
* Updated php-parallel-lint/php-console-highlighter from v0.3.2 to v0.5.
* Updated php-parallel-lint/php-parallel-lint from v0.9.2 to v1.2.0.
* Updated psy/psysh from 0.9.9 to 0.10.4.
* Updated monolog/monolog from 1.24.0 to 1.25.2.
* Upgrade mediawiki-codesniffer from 28.0.0 to 30.0.0.
* Updated composer/spdx-licenses from 1.5.1 to 1.5.3.
* Updated monolog/monolog from 1.25.2 to 1.25.3.
* Updated qunit from 2.9.1 to 2.10.0.
==== Removed external libraries ====
* phpunit/php-invoker (dev-only).
Removing this unbreaks development on Windows systems, in exchange for losing
time limits in running unit tests.
* The jquery.getAttrs module was removed.
=== Action API changes in 1.35 ===
* The 'suggest' parameter of action=opensearch has been deprecated.
The API behaves the same with and without this parameter.
It was previously used by $wgEnableOpenSearchSuggest to partially
disable the API if set to false. Specifically, it would deny internal
frontend requests carrying this parameter, whilst accepting other requests.
* Integer-type parameters are now validated for syntax rather than being
interpreted in surprising ways. For example, the following will now return a
badinteger error:
- "1.9" (formerly interpreted as "1")
- " 1" (formerly interpreted as "1")
- "1e1" (formerly interpreted as "1" or "10", depending on the PHP version)
- "1foobar" (formerly interpreted as "1")
- "foobar" (formerly intepreted as "0")
parameters. Ranges should be assumed to be enforced.
* Many user-type parameters now accept a user ID, formatted like "#12345".
* The 'assert' parameter used by all API modules now supports the value 'anon'.
When specified, the API will return the 'assertanonfailed' error if the user
is logged in.
* action=edit now supports the 'baserevid' parameter for edit conflict
detection, as an alternative to 'basetimestamp'. Note that self-conflicts
will continue to be ignored if 'basetimestamp' is set, but not if only
'baserevid' is set.
* A new module was added to change the content model of existing pages.
Use action=changecontentmodel. Unlike Special:ChangeContentModel, the api
module does not work for pages that do not already exist.
* If $wgWatchlistExpiry is true, the following API changes are made:
- action=watch accepts a new 'expiry' parameter analagous to the expiry
accepted by action=userrights, action=block, etc., except it must be no
greater than $wgWatchlistExpiryMaxDuration, or an infinity value.
- action=query&list=watchlistraw returns pages' watchlist expiry dates.
* (T249526) action=login will now return Failed rather than NeedToken on
session loss.
=== Action API internal changes in 1.35 ===
* The Action API now uses the Wikimedia\ParamValidator library for parameter
validation, which brings some new features and changes. For the most part
existing module code should work as it did before, but see subsequent notes
for changes.
- The values for all ApiBase PARAM_* constants have changed. Code should have
been using the constants rather than hard-coding the values.
- Several ApiBase PARAM_* constants have been deprecated, see the in-class
documentation for details. Use the equivalent ParamValidator constants
instead.
- The value returned for 'upload'-type parameters has changed from
WebRequestUpload to Psr\Http\Message\UploadedFileInterface.
* Validation of 'user'-type parameters is more flexible. PARAM constants exist
to specify the type of "user" allowed and to request UserIdentity objects
rather than name strings. The default is to accept all types (name, IP,
range, and interwiki) that were formerly accepted.
* Maximum limits are no longer ignored in "internal mode".
* The $paramName to ApiBase::handleParamNormalization() should now include the
prefix.
* (T245931) meta=siteinfo&siprop=interwikimap no longer reports language or
extralanglink when $wgInterwikiMagic is false.
=== Languages updated in 1.35 ===
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.
* The default targets for the ISBN search from Special:BookSources in English
have been updated for better international suppport. They will now be
BetterWorldBooks.com, OpenLibrary.org and Worldcat.org.
* (T237672) Changed the Moroccan Arabic language (ary) to the Arabic script.
* (T201269) Added language support for Amis (ami).
* (T248299) Added language support for Inari Sami (smn).
* (T251369) Added language support for Ladin (lld).
* (T251369) Added language support for Seediq (trv), also known as Taroko.
=== Breaking changes in 1.35 ===
* MediaWiki no longer supports PHP 7.2; use PHP 7.3.19+ (T228346, T257879).
* ResourceLoader::getLessVars(), deprecated in 1.32, was removed.
Use ResourceLoaderModule::getLessVars() instead.
* The jquery.tabIndex module, deprecated in 1.34, has been removed.
* The mediawiki.RegExp module alias, deprecated in 1.34, was removed.
Use the mediawiki.util module instead.
* The easy-deflate.inflate module, unused since 1.32, was removed.
* The easy-deflate.deflate module was removed. Use the mediawiki.deflate
module instead.
* The mediawiki.notify module was removed. The mw.notify() shortcut is now
available by default, without any dependency.
* (T219604) The "jquery.ui.*" and "jquery.effects.*" module aliases,
deprecated in 1.34, have been removed. Use "jquery.ui" instead.
* (T235457) The "user.tokens" module has been removed.
Use "user.options" instead.
* (T251855) The mw.Map#exists method in JavaScript no longer supports checking
multiple keys. This affects mw.config.exists() and mw.user.tokens.exists().
* The internal variable $constructorOptions for the Parser & SpecialPageFactory,
exposed only for integration purposes, are now each replaced by a const called
CONSTRUCTOR_OPTIONS. This was a breaking change made without deprecation.
* ObjectCache::getWANInstance, deprecated in 1.34, was removed.
Use MediaWikiServices::getMainWANObjectCache instead.
* ObjectCache::newWANCacheFromParams, deprecated in 1.34, was removed.
Construct WANObjectCache directly instead, or use MediaWikiServices.
* (T231366) The ProfilerOutputDb class and profileinfo.php entry point,
deprecated in 1.34, was removed.
* SiteConfiguration->localVHosts, deprecated in 1.25, was removed.
Use $wgLocalVirtualHosts instead.
* The $wgContLanguageCode read-only variable was removed.
It has been a non-configurable copy of $wgLanguageCode since MW 1.8 (2006).
Use $wgLanguageCode directly instead.
* ApiQueryUserInfo::getBlockInfo, deprecated in 1.34, was removed. Use
ApiBlockInfoTrait::getBlockDetails instead.
* Password::equals(), deprecated in 1.33, was removed. Use Password::verify().
* QuickTemplate::setRef(), deprecated in 1.31, was removed. Use set().
* The mediawiki.ui.text module, deprecated in 1.28 and unused, was removed.
* AbstractBlock::mReason, deprecated in 1.34, is no longer public.
* The GetBlockedStatus and UserIsHidden, deprecated in 1.34, has been removed.
Instead, use the GetUserBlock hook.
* As part of work to replace the Parser, a large number of breaking changes have
been made, principally in related methods and properties being removed or made
private:
- disableCache(), deprecated in 1.28.
- serializeHalfParsedText() and the helpers unserializeHalfParsedText(),
isValidHalfParsedText(), and StripState::getSubState() and
StripState::merge(), all deprecated in 1.31. The helper functions
LinkHolderArray::mergeForeign() and LinkHolderArray::getSubArray()
were also removed.
- getConverterLanguage(), deprecated in 1.32. Use getTargetLanguage() instead.
- A large set of methods exposed only for historical reasons, deprecated in
1.34, have now been removed or made private:
- areSubpagesAllowed()
- armorLinks()
- createAssocArgs()
- doAllQuotes()
- doDoubleUnderscore()
- doHeadings()
- doMagicLinks()
- formatHeadings()
- getImageParams()
- getVariableValue()
- initialiseVariables()
- makeKnownLinkHolder()
- maybeDoSubpageLink()
- parseLinkParameter()
- replaceExternalLinks()
- replaceInternalLinks()
- replaceInternalLinks2()
- replaceLinkHoldersText().
- splitWhitespace()
- stripAltText()
- testPreprocess()
- testPst()
- testSrvus()
- incrementIncludeSize(), setTransparentTagHook(), replaceTransparentTags(),
and $mTransparentTagHooks have been removed without deprecation.
- The following constants have been made private without deprecation:
- ::EXT_LINK_ADDR
- ::EXT_IMAGE_REGEX
- ::SPACE_NOT_NL
- The following properties have been removed without deprecation:
- ::$mDefaultStripList
- ::$mIncludeCount
- ::$mRevIdForTs
- The following properties have been made private without deprecation:
- ::$mFunctionSynonyms
- ::$mFunctionTagHooks
- ::$mStripList
- ::$mVarCache
- ::$mImageParams
- ::$mImageParamsMagicArray
- ::$mSubstWords
- ::$mVariables
- ::$mConf (deprecated in 1.34)
- ::$mExtLinkBracketedRegex
- ::$mUrlProtocols
- ::$mAutonumber
- ::$mLinkHolders
- ::$mDefaultSort
- ::$mTplRedirCache
- ::$mForceTocPosition
- ::$mTplDomCache
- ::$mOutputType
- ::$mLangLinkLanguages
- ::$currentRevisionCache
- ::$mProfiler
- ::$mLinkRenderer
- Parser::getTitle() will now throw a TypeError if $mTitle is uninitialized.
This use pattern was deprecated in 1.34.
- ContentHandler::makeParserOptions(), deprecated in 1.32, was removed. Use
WikiPage::makeParserOptions() or ParserOptions::newCanonical() instead.
- The ParserAfterUnstrip hook, believed to be unused, was removed without
deprecation.
- Preprocessor_DOM and related classes, deprecated in 1.34, have been removed.
Consequently, the related ParserOptions::getMaxGeneratedPPNodeCount() and
::setMaxGeneratedPPNodeCount() have been removed without deprecation.
- The support for the old signature for ParserFactory::__construct, which was
deprecated in 1.34, has been removed.
- Parser::getDefaultPreprocessorClass(), deprecated in 1.34, has been removed.
* MediaWikiTestCase::prepareServices(), deprecated in 1.32, has been removed
* The method ContentHandler::getSlotDiffRendererInternal is replaced with
ContentHandler::getSlotDiffRendererWithOptions. This breaks consumers which
call parent::getSlotDiffRendererInternal (no instances of which are known).
* TextContent::getHighlightHtml, deprecated since 1.24, has been removed. Use
TextContent::getHtml instead.
* ExtensionRegistry::load(), deprecated in 1.34, was removed. Instead, use
ExtensionRegistry::queue().
* MWMessagePack class, deprecated in 1.34, was removed.
* The cdb.php maintenance script was removed. Use the 'cdb' command from the
wikimedia/cdb library instead.
* User::addNewUserLogEntryAutoCreate, deprecated in 1.27, was removed.
* FileBasedSiteLookup class, deprecated in 1.33, was removed.
* The wfGlobalCacheKey global function, deprecated in 1.30, was removed.
* The APCBagOStuff class was removed. MediaWiki requires PHP 7.2+ (support
for HHVM was dropped) and these versions of PHP only support apcu. The default
"apc" entry in $wgObjectCaches now refers to APCUBagOStuff.
* Database::bufferResults(), deprecated in 1.34, has been removed.
* CannotReplaceActiveServiceException, ContainerDisabledException,
DestructibleService, NoSuchServiceException, SalvageableService,
ServiceAlreadyDefinedException, ServiceContainer and ServiceDisabledException
in the global namespace, deprecated in 1.33, were removed. Use the classes in
the MediaWiki\\Services namespace instead.
* The following methods in the Interwiki class were removed: ::fetch(),
::isValidInterwiki(), ::invalidateCache(), and ::getAllPrefixes().
* The UsersMultiselectWidget config 'allowArbitrary' is now false by default. To
accept arbitrary entries, pass in true for this config.
* OutputPage::parse() and OutputPage::parseInline(), deprecated in 1.32, have
been removed. Use ::parseAsContent() or ::parseAsInterface(), as
appropriate.
* WikiPage::selectFields, deprecated in 1.31, was removed. Use ::getQueryInfo.
* The remaining static methods for MagicWord, deprecated in 1.32, were removed.
These were MagicWord::get(), ::getSubstIDs(), ::getDoubleUnderscoreArray(),
::getVariableIDs(), and ::getCacheTTL(). Instead, use MagicWordFactory (via
MediaWikiServices).
* ApiBase::checkTitleUserPermissions no longer accepts a User as the third
parameter. Passing a user was deprecated in 1.33.
* Sanitizer::setupAttributeWhitelist() and Sanitizer::attributeWhitelist(),
deprecated in 1.34, have been removed. They should not have been public.
* Passing a sequential array as the second parameter to
Sanitizer::validateAttributes() has been deprecated; use an associative
array where keys are the allowed attributes.
* The $warnCallback parameter to Sanitizer::removeHTMLtags, deprecated since
its introduction in 1.28, has been removed.
* SpecialRecentChanges::filterByCategories(), deprecated in 1.31, was removed.
* The `ArticleContentViewCustom` hook, deprecated in 1.32, was removed.
* AuthManager::callLegacyAuthPlugin, deprecated in 1.33, was removed.
* wfGetMessageCacheStorage was removed without deprecation.
* Title::moveSubpages, deprecated in 1.34, was removed. Use the MovePage class
and MovePage::moveSubpages instead.
* Article::doEditContent, deprecated in 1.29, was removed. Instead, use
WikiPage::doEditContent.
* CommentStore::newKey, deprecated in 1.31, was removed.
* EditPage::$hookError was changed from public to private.
* Title::isValidMoveOperation, ::moveTo, and ::isValidMoveTarget, deprecated
in 1.25, were removed. Use the MovePage class and its methods instead.
* Title::getUserCaseDBKey(), deprecated in 1.33, was removed. Use ::getDBkey().
* StringUtils::explodeMarkup() was removed without deprecation.
* AjaxResponse methods that were unused have been removed without deprecation:
- checkLastModified
- loadFromMemcached
- storeInMemcached
- setCacheDuration
- setVary
* ApiDelete::delete and ::deleteFile, both of which were protected methods,
have been made private to allow a signature change.
* HistoryPager::revLink, ::curLink, ::lastLink, and ::diffButtons, which had
no visibilities defined, have been made private to allow signature changes.
* SpecialNewpages::revisionFromRcResult, which previously was protected, has
been made private to allow a signature change.
* DifferenceEngine::$mOldRev and $mNewRev, deprecated for public access in
1.32, have been removed.
* DifferenceEngine::revisionDeleteLink, which was previosuly protected, has
been made private to allow a signature change.
* DifferenceEngine::getParserOutput, which is protected, has had a breaking
signature change: the second parameter must be a RevisionRecord object,
rather than a Revision object.
* WikiPage::setLastEdit, which was previously protected, has been made
private to allow a signature change.
* Skin::getSkinNameMessages() deprecated in 1.34, has been removed.
* Skin::escapeSearchLink() deprecated in 1.34, has been removed, use
Skin::getSearchLink() instead.
* Skin::shouldPreloadLogo() deprecated in 1.32, has been removed.
* Revision::loadFromId and RevisionStore::loadRevisionFromId have been
removed.
* OutputPage::parserOptions doesn't accept an $options parameter anymore.
* MessageCache::getParserOptions previously did not have a visibility set.
It has been made private.
* SpecialUndelete::showDiff previously did not have a visibilty set. It
hav been made private to allow a signature change.
* The Skin no longer loads the "mediawiki.legacy.shared" or
"mediawiki.legacy.commonPrint" modules. The legacy shared styles must now
be loaded by the skin explicitly, either inherited via the
"mediawiki.skinning.*" modules, or by making your skin's main styles
module use the ResourceLoaderSkinModule class with the "legacy" attribute.
See Vector and Monobook for examples.
* Passing an ApiMain to the constructor of ApiResult is no longer supported.
This was deprecated in 1.25.
* ResourceLoaderWikiModule::invalidateModuleCache has been declared to
be @internal as part of a signature change. No known uses exist outside
of MediaWiki core.
* The ArticleAfterFetchContentObject hook, deprecated in 1.32, was removed.
Use ArticleRevisionViewCustom to control output.
* DatabaseBlock::isValid, deprecated in 1.33, was removed.
* HTMLUserTextField and HTMLUsersMultiselectField previously implied
required=true when exists=true. Form fields that use exists=true should also
set required=true if they are required.
* In DatabaseUpdater, the following methods are no longer public: dropTable(),
modifyTable(), modifyField(), runMaintenance(), copyFile(), appendLine().
In PostgresUpdater, the following methods are no longer public:
addPgEnumValue(), addPgIndex(), addPgExtIndex(). This change was made without
deprecation due to immediate danger of data corruption and loss, see T157651.
Extensions should instead use dropExtensionTable(),
modifyExtensionExtensionTable(), modifyExtensionField(), addExtensionUpdate().
The addExtensionUpdate() method can still be used to access any of the
protected methods on DatabaseUpdater.
* ResourceLoader no longer provides the (always-true) variables for wgEnableAPI
and wgEnableWriteAPI; they were deprecated in MediaWiki 1.31 and removed from
the PHP environment in MediaWiki 1.32.
* The wfSetupSession global function, deprecated in 1.27, was removed. Use the
persist() method of the right MediaWiki\Session\SessionManager object instead.
* The wfIsHHVM global function, deprecated in 1.34, was removed.
* GenderCache::doTitlesArray no longer accepts string values in its $titles
array parameter. Use Title objects (or other LinkTarget) instead.
* Unused CommentStore::MAX_COMMENT_LENGTH has been removed.
* User::checkTemporaryPassword() and User::checkPassword(), deprecated in 1.27,
were removed. Use AuthManager instead.
* All constants and class functions now have explicit visibility modifiers. This
means, per [[mw:Stable interface policy]], that these should now be considered
stable. This also helps MW align with PSR 2 and PSR 12. This was done based on
audits of the corpus of skins and extensions hosted in Gerrit. If you find any
that you need to be less restrictive (i.e. public or protected), please report
these so that we can re-evaluate or suggest workarounds.
* BaseTemplate::msgWiki(), deprecated in 1.33, was removed. Use ->msg() or
->getMsg() instead.
* QuickTemplate::msgWiki(), deprecated in 1.33, was removed. Use ->msg()
instead.
* WebInstaller::getErrorBox() and ::getWarningBox(), deprecated in 1.34,
were removed. Use Html::errorBox() or ::warningBox() instead.
* SpecialVersion::getExtensionCredits() and SpecialVersion::getSkinCredits()
have become private without deprecation.
* As part of the migration to a new hook system (T240307), the following classes
now require an additional HookContainer constructor parameter:
- AuthManager
- BadFileLookup
- BlockManager
- ClassicInterwikiLookup
- ContentHandlerFactory
- ContentSecurityPolicy
- DefaultOptionsManager
- DerivedPageDataUpdater
- FullSearchResultWidget
- HtmlCacheUpdater
- LanguageFactory
- LanguageNameUtils
- LinkRenderer
- LinkRendererFactory
- LocalisationCache
- MagicWordFactory
- MessageCache
- NamespaceInfo
- PageEditStash
- PageHandlerFactory
- PageUpdater
- ParserFactory
- PermissionManager
- RevisionStore
- RevisionStoreFactory
- Router
- SearchEngineConfig
- SearchEngineFactory
- SearchFormWidget
- SearchNearMatcher
- SessionBackend
- SpecialPageFactory
- UserNameUtils
- UserOptionsManager
- WatchedItemQueryService
- WatchedItemStore
* The following classes now require setHookContainer() to be called after
construction:
- AuthenticationProvider
- ResourceLoaderModule
- SearchEngine
* The parameters to ChronologyProtector::getTouched() and
ILBFactory::getChronologyProtectorTouched() were changed without backwards
compatibility.
* The deprecated $blacklist parameter to wfIsBadImage() has been removed.
* SpecialBlock::checkUnblockSelf no longer accepts an integer representing
an user ID as part of ongoing refactoring of SpecialBlock class.
* User::setInternalPassword() and User::setPassword(), deprecated in 1.27, have
been removed. Use User::changeAuthenticationData() instead.
* User::selectFields(), deprecated in 1.31, has been removed. Use
User::getQueryInfo() instead.
* The "legacy" serialization type in RESTBagOStuff, deprecated in 1.34,
has been removed.
* The populateContentModel.php maintenance script was removed. It has
been replaced by the populateContentTables.php script.
* The findHooks.php maintenance script, for the old hooks system, was removed.
* (T257278) Calling MediaWiki\Shell\Command::restrict() will now overwrite
any previous restrictions rather than adding to them, making it possible to
disable the default restrictions.
=== Deprecations in 1.35 ===
* The PHPUnit4And6Compat class, used to provide compatibility with PHPUnit 4, is
now deprecated. MediaWiki support for PHPUnit 4 ended with the removal of HHVM
support.
* LockManagerGroup::getDefault() and LockManagerGroup::getAny() are deprecated.
They seem to be unused. Just use get() directly, and catch any exception.
* AbstractBlock::getPermissionsError and AbstractBlock::getBlockErrorParams are
deprecated. Use BlockErrorFormatter::getMessage instead.
* The IP class is deprecated. Please instead use the Wikimedia\IPUtils class
from the new wikimedia/ip-utils library instead. Additionally, the RE_IP_*
constants are also deprecated. RE_IP_BYTE can be replaced with a class
constant on the IPUtils class, while the others will eventually be made
private.
* The following Language methods are deprecated: getFallbackFor,
getFallbacksFor, getFallbacksIncludingSiteLanguage. Use the corresponding new
methods on the LanguageFallback class: getFirst, getAll, and
getAllIncludingSiteLanguage.
* FileJournal::factory is deprecated. Use the constructor directly instead.
* AbstractBlock methods setBlocker(), getBlocker() are deprecated and will
become internal implementation of DatabaseBlock.
* Title::countRevisionsBetween has been deprecated and moved into RevisionStore.
* FileBackendGroup::singleton() is deprecated. Use MediaWikiServices instead.
* FileBackendGroup::destroySingleton() is deprecated. Test frameworks should
instead reset MediaWikiServices between test runs.
(MediaWikiIntegrationTestCase does this automatically.)
* GenderCache::singleton(), deprecated in 1.28, is hard deprecated. Use
MediaWikiServices::getGenderCache() instead.
* MediaWikiIntegrationTest::setContentLang() has been deprecated. Use
setMwGlobals( 'wgLanguageCode', 'xxx' ) to set a different site language
code, or setService( 'ContentLanguage', $myObj ) to set a specific Language
object. Service resets and $wgContLang will be handled automatically.
* MediaWikiIntegrationTest::assertType() has been deprecated, as part of the
work to move to PHPUnit 8; PHPUnit's assertInternalType() was deprecated, and
will be removed in PHPUnit 9. MediaWikiIntegrationTest::assertTypeOrValue(),
a wrapper for assertType(), has been removed immediately, without deprecation.
* AbstractBlock::getReason is deprecated, since reasons are actually stored as
CommentStoreComments, and getReason returns a string with no caller control
over language or formatting. Instead use AbstractBlock::getReasonComment,
which returns the CommentStoreComment.
* The global function wfGetRusage() is deprecated and will now always call the
getrusage() function without checking for its existence.
* The properties User::mBlock, User::mBlockedby and User::mHideName are
deprecated. Instead, use User::getBlock to get the block, then use
AbstractBlock::getByName or AbstractBlock::getHideName.Use the GetUserBlock
hook to set, unset or modify a block, including hiding or unhiding a user.
* Directly calling the MergeHistory constructor is deprecated. Instead, use the
new MergeHistoryFactory class.
* Language::factory() and Language::getParentLanguage() are deprecated, and so
is directly calling the Language constructor. Use the new LanguageFactory
class instead.
* Language::classFromCode() is deprecated. There is no reason it should be used
outside the Language class itself.
* Language::clearCaches() is deprecated. Instead, reset all services and set
Language::$mLangObjCache = [].
* The following functions from Language class are deprecated in favour of
respective functions in LanguageConverter:
- autoConvert
- autoConvertToAllVariants
- convert
- convertTitle
- convertNamespace
- hasVariants
- hasVariant
- convertHtml
- convertCategoryKey
- getVariants
- getPreferredVariant
- getURLVariant
- findVariantLink
- getExtraHashOptions
- updateConversionTable
* Language::classFromCode() is hard deprecated and should be removed in 1.36
* Language::getConverter() is deprecated and should be removed in 1.36
* Language::MESSAGES_FALLBACKS, Language::STRICT_FALLBACKS were deprecated.
Use LanguageFallback::MESSAGES and LanguageFallback::STRICT respectively
* Language::$mLangObjCache is deprecated and should be removed in 1.36. Use
MediaWikiServices instead to get a LanguageFactory.
* Language::getMessagesFor(), getMessageFor(), and getMessageKeysFor() are
deprecated. Use LocalisationCache's getItem(), getSubitem(), and
getSubitemList() methods directly.
* OutputPage::getCSPNonce() is deprecated, use OutputPage::getCSP()->getNonce()
instead.
* DerivedPageDataUpdater::prepareUpdate accepted as its second parameter an
optional array of options. Specifying the value of the `oldrevision` key of
the array to be a Revision object, rather than a RevisionRecord object, is
hard deprecated. The same applies to the options parameter in
WikiPage::doEditUpdates.
* Skin::makeI18nUrl() and makeNSUrl() have been deprecated, no longer used.
* Title::countAuthorsBetween and Title::getAuthorsBetween were hard deprecated.
Use respective methods in RevisionStore instead.
* Remove deprecated SkinCopyrightFooter &$forContent parameter
* The following Language class static variables have been replaced with
constants and deprecated: $mWeekdayMsgs, $mWeekdayAbbrevMsgs, $mMonthMsgs,
$mMonthGenMsgs, $mMonthAbbrevMsgs, $mIranianCalendarMonthMsgs,
$mHebrewCalendarMonthMsgs, $mHebrewCalendarMonthGenMsgs,
$mHijriCalendarMonthMsgs and $durationIntervals.
* As part of dropping security support for IE 6 and IE 7,
WebRequest::checkUrlExtension() has been deprecated, and now always returns
true.
* The following ApiBase::PARAM_* constants have been deprecated in favor of
equivalent ParamValidator constants: PARAM_DFLT, PARAM_ISMULTI, PARAM_TYPE,
PARAM_MAX, PARAM_MAX2, PARAM_MIN, PARAM_ALLOW_DUPLICATES, PARAM_DEPRECATED,
PARAM_REQUIRED, PARAM_SUBMODULE_MAP, PARAM_SUBMODULE_PARAM_PREFIX, PARAM_ALL,
PARAM_EXTRA_NAMESPACES, PARAM_SENSITIVE, PARAM_DEPRECATED_VALUES,
PARAM_ISMULTI_LIMIT1, PARAM_ISMULTI_LIMIT2, PARAM_MAX_BYTES, PARAM_MAX_CHARS.
* ApiBase::explodeMultiValue() is deprecated. Use
ParamValidator::explodeMultiValue() instead.
* ApiBase::parseMultiValue() is deprecated. No replacement is provided;
generally this sort of thing should be handled by fully validating the
parameter.
* ApiBase::validateLimit() and ApiBase::validateTimestamp() are deprecated.
Use ApiParamValidator::validateValue() with an appropriate settings array
instead.
* ContentHandler (use ContentHandlerFactory):
- getForTitle
- getForContent
- getForModelID
- getContentModels
- getAllContentFormats
- protected $handler (not need anymore)
- cleanupHandlersCache (not need anymore)
* (T212738) The $wgVersion global is deprecated; instead, use MW_VERSION.
* $wgMemc is deprecated, use MediaWikiServices::getLocalServerObjectCache()
instead.
* ObjectCache::detectLocalServerCache() is deprecated, instead use
MediaWikiServices::getLocalServerObjectCache() or
ObjectCache::makeLocalServerCache().
* ImagePage::getImageLimitsFromOptions() is deprecated. Use static function
MediaFileTrait::getImageLimitsFromOptions() instead.
* As part of work to replace the Parser, alongside the breaking changes listed
above, a large number of deprecations changes been made, to simplify the API
or because they will not be supported in replacement:
- Parser::doBlockLevels() (and BlockLevelPass class has been marked @internal)
- Parser::setFunctionTagHook()
- Parser::attributeStripCallback()
- Parser::fetchTemplate() - use Parser::fetchTemplateAndTitle() instead.
- Parser::enableOOUI() - use $parser->getOutput()->enableOOUI() instead.
- LinkHolderArray has been deprecated for public usage and will be
internal part of parser.
- The following parser-related hooks have been deprecated:
- InternalParseBeforeSanitize
Use an alternative hook which doesn't expose internal half-parsed state,
like ParserBeforeInternalParse or ParserAfterTidy
- ParserFetchTemplate
Use BeforeParserFetchTemplateAndTitle
- ParserSectionCreate
No replacement; tag wrapping will be done by core in future.
- BeforeParserrenderImageGallery
No replacement; MediaHandler provides for customizable media rendering
- ParserBeforeTidy
Use ParserAfterTidy instead to avoid exposing internal half-parsed state
- ParserBeforeStrip
No replacement; stripping is no longer supported.
- ParserAfterStrip
No replacement; stripping is no longer supported.
- The accessor/mutator methods Parser::Options(), Parser::OutputType(), and
Parser::Title() have been deprecated; use the appropriate Parser::get* or
Parser::set* methods instead.
- Parser::firstCallInit() has been deprecated. The parser is initialized
fully on construction and so ::firstCallInit() no longer has any effect
when manually invoked.
- ParserOptions::setAllowExternalImages(), ::setAllowExternalImagesFrom(),
and ::setEnableImageWhitelist() have been deprecated. Future parsers
will not allow per-parser configuration of image filtering; use
site configuration instead.
- ParserOptions::getTidy() and ParserOptions::setTidy() have been deprecated.
These options no longer have any effect.
- Most methods of MWTidy, except for MWTidy::tidy(), have been deprecated;
tidiness is always enabled and not configurable.
- Version 1 of the parserTests file format has been deprecated. You'll need to
update your parser tests to version 2, which uses Remex tidy on all test
output by default. Support for parser tests with Remex tidy off will later
be removed entirely.
- $wgParser — This global variable, soft deprecated in 1.32, has now been hard
deprecated. Use MediaWikiServices::getInstance()->getParser() instead.
(T160811)
* The signature of DefaultPreferencesFactory::__construct has been changed:
- LanguageConverter $languageConverter has been added.
and its usage with old arguments is hard deprecated.
* The public usage of the following properties of LanguageConverter have been
deprecated as there is no reason they should be used outside the
LanguageConverter class and will be changed from public to private:
- mLangObj
- mUcfirst
- mConvRuleTitle
- mURLVariant
- mUserVariant
- mHeaderVariant
- mMaxDepth
- mVarSeparatorPattern
changed from public to protected:
- mTables
* The ArticleEditUpdatesDeleteFromRecentchanges hook has been deprecated. Please
use the RecentChange_save hook or similar instead.
* The ArticleEditUpdates hook has been deprecated. Please
use the RevisionDataUpdates hook or similar instead.
* The SkinTemplatePreventOtherActiveTabs and SkinTemplateTabAction hooks have
been hard deprecated. Please use the SkinTemplateNavigation__Universal hook
instead.
* ResourceLoaderFileModule::compileLessFile() has been deprecated, use
ResourceLoaderFileModule::compileLessString() instead
* The SquidPurgeClient and SquidPurgeClientPool classes have been deprecated.
Use MultiHttpClient or HtmlCacheUpdater instead.
* MimeAnalyzer::getExtensionsForType() and ::getTypesForExtensions() were
deprecated in favor of MimeAnalyzer::getExtensionsFromMimeType() and
::getMimeTypesFromExtension(), respectively. The new methods return arrays
rather than strings.
* Calling Action::factory and Action constructor with WikiPage has been
hard deprecated. Caller must provide an Article instance.
* ApiTestCase::doLogin, soft deprecated in 1.31, was hard deprecated.
* WebRequest::getLimitOffset is hard deprecated. Instead, use
::getLimitOffsetForUser and pass a User object.
* PageArchive::getPreviousRevision is hard deprecated. Instead, use the new
::getPreviousRevisionRecord method.
* PageArchive::getArchivedRevision is hard deprecated. Instead, use the new
::getArchivedRevisionRecord method.
* PageArchive::undelete is hard deprecated. Instead, use ::undeleteAsUser
and pass a User object.
* PageArchive::getRevision is hard deprecated.
* EditPage::getBaseRevision was hard deprecated. Instead, use the new
::getExpectedParentRevision method.
* The public variable EditPage::$mBaseRevision was hard deprecated.
* FileDeleteForm previously did not accept a user parameter in its constructor,
instead relying on the global $wgUser. A user parameter has been added,
and //not// providing a user is deprecated. There are no known callers
outside of mediawiki core.
* AuthManager::singleton() has been deprecated. Use
MediaWikiServices::getInstance()->getAuthManager() instead.
* ContribsPager::tryToCreateValidRevision is hard deprecated. Instead, use
ContribsPager::tryCreatingRevisionRecord.
* The following functions all accept an optional user parameter. Not passing a
user is hard deprecated, and support for calling them without passing a user
will be removed in 1.36:
- Title::getNotificationTimestamp (note however that the method is deprecated
in its entirely in favor of the new WatchlistNotificationManager service)
- PatrolLog::record
- LogEventsList::userCan
- LogEventsList::userCanBitfield
- LogEventsList::userCanViewLogType
- LogPage::addEntry
- FileDeleteForm::doDelete
- OldLocalFile::userCan
- ArchivedFile::userCan
- File::userCan
* The following functions all accept an optional audience parameter and
an optional user parameter. If the audience is FOR_THIS_USER and no
user is passed, they fallback to $wgUser. Not passing a user when
one is needed is deprecated
- LogEventsList::getExcludeClause
- WikiPage::getComment
- WikiPage::getCreator
- WikiPage::getUser
- WikiPage::getUserText
* UploadBase::checkWarnings now accepts a User parameter; not providing a
user is soft deprecated.
* Article::insertProtectNullRevision and WikiPage::insertProtectNullRevision
were hard deprecated. Instead, use WikiPage::insertNullProtectionRevision.
* Article::doDeleteArticle, Article::doDeleteArticleReal, and
WikiPage::doDeleteArticle are all deprecated. Instead, use
WikiPage::doDeleteArticleReal.
* Article::getComment is deprecated. Instead, use WikiPage::getComment.
* Article::getCreator is deprecated. Instead, use WikiPage::getCreator.
* Article::updateRevisionOn() and ::updateIfNewerOn(), and
WikiPage::updateIfNewerOn() are deprecated. Instead, use
WikiPage::updateRevisionOn().
* Article::getUser is deprecated. Instead, use WikiPage::getUser.
* Article::getUserText is deprecated. Instead, use WikiPage::getUserText.
* Article::prepareContentForEdit is hard deprecated. Instead, use
WikiPage::prepareContentForEdit.
* WikiPage::prepareContentForEdit previously accepted either a Revision or a
RevisionRecord object as its optional second parameter. Passing a Revision
is now hard deprecated.
* Article::getUndoContent and WikiPage::getUndoContent are hard deprecated.
Instead, use ContentHandler::getUndoContent.
* Passing Revision objects to ContentHandler::getUndoContent is hard deprecated.
Instead, pass the associated Content objects, as well as whether the undo is
from the current revision.
* Article::doDeleteUpdates and ::doEditUpdates are deprecated. Instead,
use WikiPage::doDeleteUpdates and ::doEditUpdates.
* WikiPage::doEditUpdates previously accepted a Revision object as its first
parameter. It now accepts RevisionRecord objects, and passing Revision
objects is deprecated.
* Article::getRevisionFetched is deprecated. Instead, use the
fetchRevisionRecord method, which has been converted from protected to
public.
* LocalFileDeleteBatch was migrated to a new constructor signature with the
user as the second parameter. Support for the old signature is hard
deprecated, and once removed the user parameter will be required. At the
same time, a number of file-deletion related methods were updated
- File::delete is hard deprecated in favor of the new ::deleteFile
- LocalFile::delete is hard deprecated in favor of the new ::deleteFile
- LocalFile::deleteOld is hard deprecated in favor of the new ::deleteOldFile
- ForeignDBFile::delete is hard deprecated in favor of the new ::deleteFile
* File::recordUpload (along with the respective methods in the LocalFile and
ForeignDBFile classes) is hard deprecated, and LocalFile::recordUpload2 is
soft deprecated. Use the new LocalFile::recordUpload3, which has a different
signature and requires that a User parameter is passed.
* The SpecialPageFactory class was moved from the MediaWiki\Special namespace
to the MediaWiki\SpecialPage namespace. The old location remains as a
deprecated alias.
* Title::userCan, ::quickUserCan, and ::getUserPermissionsErrors, which
were deprecated in 1.33, were hard deprecated. Instead, use
PermissionManager::userCan, ::quickUserCan, and ::getPermissionErrors.
* All methods of the old SpecialPageFactory, deprecated in 1.32, were hard
deprecated. Instead, get a SpecialPageFactory from MediaWikiServices and
use its methods.
* User::updateNewtalk now accepts as its optional third parameter a
RevisionRecord object; passing a Revision is hard deprecated.
* User::getNewMessageRevisionId and ::getNewMessageLinks were hard deprecated.
* DifferenceEngine::getRevisionHeader now accepts a RevisionRecord as its
first parameter; passing a Revision is hard deprecated.
* WikiPage::doDeleteUpdates now accepts as its optional third parameter
a RevisionRecord object; passing a Revision is hard deprecated.
* WikiPage::onArticleEdit now accepts as its optional second parameter
a RevisionRecord object; passing a Revision is hard deprecated.
* Global $wgUser variable was soft deprecated.
* The Revision class was soft deprecated entirely in 1.31. All methods
have now been individually hard deprecated:
- ::__construct - create MutableRevisionRecord objects instead
- ::newFromId - use RevisionLookup::getRevisionById instead
- ::newFromTitle - use RevisionLookup::getRevisionByTitle instead
- ::newFromPageId - use RevisionStore::getRevisionByPageId instead
- ::newFromArchiveRow - use RevisionFactory::newRevisionFromArchiveRow
- ::newFromRow - use RevisionStore::newRevisionFromRow instead
- ::loadFromPageId - use RevisionStore::getRevisionByPageId instead
- ::loadFromTitle - use RevisionStore::getRevisionByTitle instead
- ::loadFromTimestamp - use RevisionStore::getRevisionByTimestamp instead
- ::getQueryInfo - use RevisionStore::getQueryInfo instead
- ::getArchiveQueryInfo - use RevisionStore::getArchiveQueryInfo instead
- ::getParentLengths - use RevisionStore::getRevisionSizes instead
- ::getRevisionRecord - no replacement
- ::getId - use RevisionRecord::getId instead
- ::setId - use MutableRevisionRecord::setId instead
- ::setUserIdAndName - use MutableRevisionRecord::setUser instead
- ::getTextId - use SlotRecord::getContentAddress for retrieving an actual
content address, or RevisionRecord::hasSameContent to compare content
- ::getParentId - use RevisionRecord::getParentId instead
- ::getSize - use RevisionRecord::getSize instead
- ::getSha1 - use RevisionRecord::getSha1 instead
- ::getTitle - use RevisionRecord::getPageAsLinkTarget instead
- ::setTitle - the method was previously a no-op
- ::getPage - use RevisionRecord::getPageId instead
- ::getUser - use RevisionRecord::getUser and then User::getId instead
- ::getUserText - use RevisionRecord::getUser and then User::getName instead
- ::getComment - use RevisionRecord::getComment instead
- ::isMinor - use RevisionRecord::isMinor instead
- ::isUnpatrolled - use RevisionStore::getRcIdIfUnpatrolled instead
- ::getRecentChange - use RevisionStore::getRecentChange instead
- ::isDeleted - use RevisionRecord::isDeleted instead
- ::getVisibility - use RevisionRecord::getVisibility instead
- ::getContent - use RevisionRecord::getContent instead
- ::getSerializedData - use SlotRecord::getContent for retrieving a
content object, and Content::serialize for the serialized form
- ::getContentModel - use SlotRecord::getModel instead
- ::getContentFormat - use SlotRecord::getFormat instead, with a fallback
to ContentHandler::getDefaultFormat
- ::getContentHandler - use ContentHandlerFactory::getContentHandler instead
- ::getTimestamp - use RevisionRecord::getTimestamp instead
- ::isCurrent - use RevisionRecord::isCurrent instead
- ::getPrevious - use RevisionLookup::getPreviousRevision instead
- ::getNext - use RevisionLookup::getNextRevision instead
- ::getRevisionText - use RevisionRecord::getContent instead
- ::compressRevisionText - use SqlBlobStore::compressData instead
- ::decompressRevisionText - use SqlBlobStore::decompressData instead
- ::insertOn - use RevisionStore::insertRevisionOn instead
- ::base36Sha1 - use SlotRecord::base36Sha1 instead
- ::newNullRevision - use RevisionStore::newNullRevision
- ::userCan - use RevisionRecord::userCanBitfield instead
- ::userCanBitfield - use RevisionRecord::userCanBitfield instead
- ::getTimestampFromId - use RevisionStore::getTimestampFromId instead
- ::countByPageId - use RevisionStore::countRevisionsByPageId instead
- ::countByTitle - use RevisionStore::countRevisionsByTitle instead
- ::userWasLastToEdit - use RevisionStore::userWasLastToEdit instead
- ::newKnownCurrent - use RevisionStore::getKnownCurrentRevision instead
* The Revision method had a few methods that were previously protected and
have been made private. They were:
- ::getRevisionStore
- ::getRevisionLookup
- ::getRevisionFactory
- ::getBlobStore
The $mRecord variable was also changed from protected to private.
* Multiple hooks that include Revision objects were deprecated. The hooks, as
well as suitable replacements, are noted below:
- ArticleRevisionUndeleted (hard deprecated, use the RevisionUndeleted hook)
- ArticleRollbackComplete (hard deprecated, use the RollbackComplete hook)
- DiffRevisionTools (hard deprecated, use the DiffTools hook)
- DiffViewHeader (hard deprecated, use the DifferenceEngineViewHeader hook)
- HistoryRevisionTools (hard deprecated, use the HistoryTools hook)
- NewRevisionFromEditComplete (hard deprecated, use the
RevisionFromEditComplete hook).
- PageContentInsertComplete (hard deprecated, use the PageSaveComplete hook)
- PageContentSaveComplete (hard deprecated, use the PageSaveComplete hook)
- RevisionInsertComplete (soft deprecated in 1.31, now hard deprecated)
- TitleMoveCompleting (hard deprecated, use the PageMoveCompleting hook)
- TitleMoveComplete (hard deprecated, use the PageMoveComplete hook)
- UndeleteShowRevision (hard deprecated)
* The following RevisionStore methods were deprecated:
- ::loadRevisionFromTitle
- ::loadRevisionFromTimestamp
- ::loadRevisionFromPageId
- ::listRevisionSizes
* WikiPage::$mLastRevision was changed from protected to private.
* RecentChange::markPatrolled was deprecated. Use ::doMarkPatrolled instead.
* The JobRunner class has been converted to a service class.
Direct construction is deprecated, use MediaWikiServices::getJobRunner.
* JobRunner::setLogger has been deprecated, thus using JobRunner as a
LoggerAwareInterface is deprecated as well. Rely on the logger passed in the
constructor instead.
* LogEventsList::typeAction accepts an optional right to check against as
the fourth parameter. Specifying such a right is deprecated.
* SkinTemplate::makeArticleUrlDetails has been deprecated, no longer used.
* Passing a Revision object into CategoryMembershipChange constructor is
deprecated. Pass a RevisionRecord instead.
* The "mediawiki.legacy.oldshared" module has been deprecated.
Skins and extensions that are using this should copy its necessary CSS rules
to their own styles module. CologneBlue and Nostalgia skins serve as examples.
* The "mediawiki.legacy.shared" module has been deprecated.
Use the "mediawiki.skinning.*" modules, or ResourceLoaderSkinModule instead.
* The following hooks, soft deprecated in 1.24, have been hard deprecated:
- APIQueryInfoTokens
- APIQueryRecentChangesTokens
- APIQueryRevisionsTokens
- APIQueryUsersTokens
- ApiTokensGetTokenTypes
* Calling Action::factory and Action constructor with any Page implementations
other than Article is deprecated.
* Action::page property is deprecated for direct access.
Use Action::getArticle or Action::getWikiPage instead.
* LESS `.background-image-svg()` mixin from 'mediawiki.mixins.less' is
deprecated and should be removed in 1.36.
* LESS `.background-image-svg-quick()` mixin from 'mediawiki.mixins.less' is
deprecated and should be removed in 1.36.
* The following methods were deprecated:
- Title::getFirstRevision (hard deprecated)
- Title::getEarliestRevTime
- WikiPage::getOldestRevision (hard deprecated)
- Article::getOldestRevision (hard deprecated)
Use RevisionStore::getFirstRevision instead.
* WikiPage::commitRollback and ::doRollback are declared to be internal
in preparation for breaking changes. Neither method has any known
callers outside of MediaWiki core. Both methods modify an array passed
by reference ($resultDetails) - accessing the Revision objects added to
that array (using the keys `current` and `target`) is also deprecated.
* The following Linker methods previously accepted Revision objects as
parameters. They now accept either Revision or RevisionRecord objects.
Passing a Revision object is hard deprecated.
- ::revUserLink
- ::revUserTools
- ::revComment
- ::generateRollback
- ::getRollbackEditCount
- ::buildRollbackLink
- ::getRevDeleteLink
* WikiPage::hasDifferencesOutsideMainSlot previously accepted Revision
objects for its two parameters. It now accepts RevisionRecord objects,
and passing Revision objects is hard deprecated.
* WikiPage::updateRevisionOn previously accepted Revision objects for its
second parameter. It now accepts RevisionRecord objects, and passing
Revision objects is hard deprecated.
* The ParserGetVariableValueVarCache hook has been deprecated.
* When using the ParserGetVariableValueSwitch hook, the following unusual
uses have been deprecated: modifying the passed $magicWordId or failing to
cache the returned value in $variableCache. The related
MagicWordwgVariableIDs hook has been deprecated and renamed; use
the GetMagicVariableIDs hook instead.
* The following Parser properties have been deprecated:
- ::$mTagHooks
- ::$mFunctionHooks
- ::$mMarkerIndex
- ::$mFirstCall
- ::$mPreprocessor
- ::$mOutput
- ::$mStripState
- ::$mLinkID
- ::$mIncludeSizes
- ::$mPPNodeCount
- ::$mGeneratedPPNodeCount
- ::$mHighestExpansionDepth
- ::$mDoubleUnderscores
- ::$mExpensiveFunctionCount
- ::$mShowToc
- ::$mUser
- ::$mOptions
- ::$mTitle
- ::$ot
- ::$mRevisionObject
- ::$mRevisionId
- ::$mRevisionTimestamp
- ::$mRevisionUser
- ::$mRevisionSize
- ::$mInputSize
- ::$mInParse
* LinksUpdate::getRevision and ::setRevision are hard deprecated in favor
of the new ::getRevisionRecord and ::setRevisionRecord methods.
* A large number of exposed variables and methods of Article were deprecated as
part of its planned removal:
- Article::$mContext is deprecated; use getContext()/setContext() instead.
- Article::__get(), ::__set() are hard deprecated, use the WikiPage properties
instead.
- These Article methods were hard deprecated; use their WikiPage equivalents:
- ::checkFlags,
- ::checkTouched,
- ::clearPreparedEdit,
- ::commitRollback,
- ::doDeleteArticleReal,
- ::doEditContent,
- ::doPurge,
- ::doRollback,
- ::doUpdateRestrictions,
- ::doViewUpdates,
- ::exists,
- ::followRedirect,
- ::getContentHandler,
- ::getContentModel,
- ::getContributors,
- ::getDeletionUpdates,
- ::getHiddenCategories,
- ::getId,
- ::getLatest,
- ::getLinksTimestamp,
- ::getMinorEdit,
- ::getRedirectTarget,
- ::getRedirectURL,
- ::getTimestamp,
- ::getTouched,
- ::hasViewableContent,
- ::insertOn,
- ::insertRedirect,
- ::insertRedirectEntry,
- ::isCountable,
- ::isRedirect,
- ::loadFromRow,
- ::loadPageData,
- ::lockAndGetLatest,
- ::makeParserOptions,
- ::pageDataFromId,
- ::pageDataFromTitle,
- ::prepareContentForEdit,
- ::protectDescription,
- ::protectDescriptionLog,
- ::replaceSectionAtRev,
- ::setTimestamp,
- ::shouldCheckParserCache,
- ::supportsSections,
- ::triggerOpportunisticLinksUpdate,
- ::updateCategoryCounts, and
- ::updateRedirectOn.
- Article::generateReason() was hard deprecated; instead, please use
WikiPage::getAutoDeleteReason().
- Article::replaceSectionContent() was hard deprecated, use
Article::replaceSectionAtRev() instead.
- Article::getRevision and WikiPage::getRevision were hard deprecated in favor
of the new WikiPage::getRevisionRecord method.
* A new UserNameUtils service was introduced. The following User methods
were deprecated in favor of using the new service:
- isIP
- isIPRange
- isValidUserName
- isUsableName
- isCreatableName
- getCanonicalName
* The signature of WikiPage::doDeleteArticleReal was changed to make the user
the second parameter, and the suppression option the third parameter.
Previously, the third parameter was unused. Using the old signature is
hard deprecated.
* ApiQueryRevisions::getRollbackToken, which has been soft deprecated since
1.24, accepted as its third parameter a Revision object. It now accepts
a RevisionRecord, and passing a Revision is hard deprecated.
* Passing Article to ParserCache::get() was deprecated
* ParserOptions::newCanonical() with no first parameter, or null as the first
parameter, which falls back to using global $wgUser, is hard deprecated.
* Parser::fetchCurrentRevisionOfTitle, ::statelessFetchRevision, and
::getRevisionObject were hard deprecated in favor of the new
::fetchCurrentRevisionRecordOfTitle, ::statelessFetchRevisionRecord,
and ::getRevisionRecordObject methods respectively.
* ParserOptions::getCurrentRevisionCallback and ::setCurrentRevisionCallback
were hard deprecated in favor of the new ::getCurrentRevisionRecordCallback
and ::setCurrentRevisionRecordCallback methods respectively.
* Parser::statelessFetchTemplate returns an array; accessing the Revision
object returned (via the `revision` key to the array) is deprecated. Instead,
use `revision-record` to retrieve the equivalent RevisionRecord.
* WikiPage::doEditContent returns an array, and PageUpdater::getStatus returns
a Status object with an array value. For both of those arrays, accessing the
Revision object returned (via the `revision` key to the array) is deprecated.
Instead, use `revision-record` to retrieve the equivalent RevisionRecord.
* Page interface was deprecated. Use Article or WikiPage instead.
* The following DatabaseBlock methods are deprecated because they are no longer
needed in core: chooseBlock, fromMaster, deleteIfExpired.
* wfGetScriptUrl() was deprecated. The script URL should be configured rather
than detected. wfScript() can be used to get a configured script URL.
* Action::factory() with null $action argument is hard deprecated
* The following methods of the User class were deprecated: getDefaultOptions,
getDefaultOption, getOptions, getOption, getBoolOption, getIntOption,
setOption, listOptionKinds, getOptionKinds, resetOptions. Use corresponding
methods in UserOptionsLookup or UserOptionsManager service classes instead.
* UserRetrieveNewTalks hook was deprecated without replacement.
* User::getNewtalk and ::setNewtalk were hard deprecated. Use service
TalkPageNotificationManager instead.
* EditPage::matchSpamRegex and ::matchSummarySpamRegex were hard deprecated in
favor of the new SpamChecker service.
* Title::getNotificationTimestamp, User::clearNotification, and
User::clearAllNotifications were deprecated in favor of the new
WatchlistNotificationManager service.
* SpecialPage::setListed() and SpecialPage::listed() were deprecated. Subclass
UnlistedSpecialPage to set listed as false, and use SpecialPage::isListed()
to get the value.
* CategoryPage::getCategoryViewerClass() and ::setCategoryViewerClass() were
deprecated.
* MWHttpRequest and its subclasses PhpHttpRequest, CurlHttpRequest and
GuzzleHttpRequest now require the timeout and connectTimeout options to
always be specified, otherwise a deprecation warning will be raised. Most
callers should use HttpRequestFactory which always sets these options.
* Linker::normaliseSpecialPage() has been deprecated, instead make use of
LinkRenderer::normalizeTarget().
* SkinTemplate::getPersonalToolsList() was soft deprecated.
* ChangeTags::truncateTagDescription() has been deprecated.
* The following methods of the User class are deprecated: getGroups,
getGroupMemberships, getEffectiveGroups, getAutomaticGroups,
addGroup, removeGroup, getFormerGroups, getAllGroups, getImplicitGroups,
addAutopromoteOnceGroups. Use the new UserGroupManager service instead.
* The following methods of the UserGroupMembership class were deprecated:
selectFields, getMembershipsForUser, getMembership, insert, delete,
newFromRow, initFromRow, purgeExpired.
Use the new UserGroupManager service instead.
* wfWaitForSlaves() has been hard deprecated. Use LBFactory::waitForReplication
instead. It was soft deprecated in 1.27.
* BaseTemplate::getAfterPortlet and ::renderAfterPortlet have been deprecated in
favor of the Skin::getAfterPortlet method. Skin::getAfterPortlet does not wrap
the result in a div, callers are responsible for that.
The hook BaseTemplateAfterPortlet, called by both methods has been deprecated
as well and is replaced by SkinAfterPortlet.
* Autopromote class has been soft deprecated and it's methods moved into
UserGroupManager.
* SkinTemplateBuildNavUrlsNav_urlsAfterPermalink hook has been deprecated.
Use SidebarBeforeOutput hook and get the revision id from the OutputPage
object.
* BaseTemplate::getToolbox() method has been soft deprecated. The toolbox data
is now available in a sidebar data array which you can get from any class
that's extending QuickTemplate class. The hook associated with this method,
BaseTemplateToolbox, has been hard deprecated. To add items to the toolbox,
use SidebarBeforeOutput hook instead.
* The SkinTemplateOutputPageBeforeExec hook is deprecated.
The page [[mw:Manual:Hooks/SkinTemplateOutputPageBeforeExec]] and T60137
for recommendations for alternative approaches based on how developers
previously used this hook.
* SkinTemplateToolboxEnd hook has been deprecated. Use SidebarBeforeOutput hook
instead.
* Using Skin::addToBodyAttributes() method to add body attributes has been
deprecated. Use OutputPageBodyAttributes hook instead.
* Installer::getDBTypes has been hard deprecated in favor of
InstallerDBSupport::getDatabases
* The hooks BeforeHttpsRedirect, CanIPUseHTTPS and UserRequiresHTTPS were
deprecated, as part of a long-term plan to remove support for mixed
HTTP/HTTPS wikis.
* Skin::generateDebugHTML() has been hard deprecated. Call
MWDebug::getHTMLDebugLog() directly.
* ExternalStoreDB::getSlave(), soft deprecated in 1.34, was hard deprecated.
Use ExternalStoreDB::getReplica() instead.
* Less variables in mediawiki.ui/variables.less file that don't follow the
standard variable naming scheme (compare WikimediaUI Base) including
`@colorGray* variables have been deprecated. New variables are in place and
aliases have been set. Replace occurrences and use the new variables instead.
=== Other changes in 1.35 ===
* A new maintenance script is added (purgeExpiredWatchlistItems.php) with which
to delete expired watchlist items. These items will also be deleted during
wiki editing if $wgWatchlistPurgeRate is > 0. This maintenance script only
has effect if $wgWatchlistExpiry is true. It is recommended that a cronjob or
similar be set up to run it at least daily.
* Title::purgeSquid is deprecated. Use MediaWikiServices::getHtmlCacheUpdater.
* SpecialVersion::getExtLicenseFileName() has been deprecated, use
MediaWiki\ExtensionInfo::getLicenseFileNames() instead.
* SpecialVersion::getExtAuthorsFileName() has been deprecated, use
MediaWiki\ExtensionInfo::getAuthorsFileName() instead.
* Migration to the new content storage schema is complete, all backwards
compatibility code and duplication in the database have been removed.
The old schema was a 1:1 relationship modeled by
revision.text_id -> text.old_id. The new schema is a n:m relationship,
revision.rev_id <- slots.slot_revision_id|slots.slot_content_id ->
content.content_id|content.content_address -> text.old_id. The same applies
to the archive table.
The following fields were removed:
- revision.rev_text_id, replaced by content.content_address
- revision.rev_content_model, replaced by content.content_model,
referencing content_models.model_id
- revision.rev_content_format, replaced by automatic detecting in
ContentHandler
- archive.ar_text_id, replaced by content.content_address
- archive.ar_content_model, replaced by content.content_model,
referencing content_models.model_id
- archive.ar_content_format, replaced by automatic detecting in
ContentHandler
* Migration to normalized storage of edit comments and user names is
progressing. The following fields were unused and have been removed:
- revision.rev_comment,
replaced by rev_comment_id referencing comment.comment_id.
- revision.rev_user and rev_user_text,
replaced by rev_actor referencing actor.actor_id.
Note that archive.ar_user, archive.ar_user_text, and archive.ar_comment
had already been removed in previous releases.
* The printableversion has been marked as deprecated per T167956.
* (T30162, T245387) The installer supports using a Postgres server running
on a custom port other than 5432.
= MediaWiki 1.34 =
== MediaWiki 1.34.4 ==
This is a maintenance release of the Mediawiki 1.34 branch.
=== Changes since MediaWiki 1.34.3 ===
* Fixed issue relating to backporting of changes for T260485.
== MediaWiki 1.34.3 ==
This is a security and maintenance release of the MediaWiki 1.34 branch.
=== Changes since MediaWiki 1.34.2 ===
* In the web installer, use secure session cookies.
* Make UsersPager::requestedGroup public.
* (T257407) Split patch-drop-user-fields.sql into patch per table.
* (T257356) Split patch-drop-comment-fields.sql into patch per table.
* (T257997) Undeprecate WebInstaller::getInfoBox().
* Added $wgForceHTTPS, which makes the HTTP to HTTPS redirect be unconditional
and suppresses various hacks needed to support mixed HTTP/HTTPS wikis. We
recommend this be set to true on pure HTTPS wikis.
* Added $wgCookieSameSite, which allows login cookies to be sent with
SameSite=None. This is required for cross-site CentralAuth autologin after
Chrome 84.
* Added $wgUseSameSiteLegacyCookies, which adds a compatibility hack to
SameSite=None cookies for browsers which implemented an incompatible draft
version of the specification.
* (T257207) shell: Expand documentation in firejail.profile.
* (T246135) Give the "remember me" checkbox a specific CSS class so skins
like Minerva can only hide that checkbox.
* (T256287) rdbms: improve DBConnRef domain selection exception message.
* (T248191, T259123) phpunit: Acknowledge known dberror from
SpecialPageFatalTest.
* (T256394, T259123) Cleanup up excess commit() call in LocalRepoTest.
* Fix runBatchedQuery.php for no result from select.
* (T130906) Add Edge to MediaWiki:Clearyourcache.
* (T249521) reassignEdits: Update script to use User::newFromName for anon
users.
* (T172060) GlobalFunctions: Use php_uname instead of posix_uname.
* Use IPset in MWRestrictions::checkIP.
* (T260031) Add application/font-sfnt to MimeMap for ttf files.
* shell: Make ->restrict( RESTRICT_NONE ) actually work.
* (T183759) Fixes shell edge-cases in Windows.
* (T258390) Add CentralIdLookup::factoryNonLocal().
* (T246991) User: Fix pingLimiter() to use makeGlobalKey() for global rate
limits.
* (T232568, CVE-2020-25813) SECURITY: Special:UserRights exposes the existence
of hidden users.
* (T251661, CVE-2020-25827) SECURITY: User::pingLimiter: add user-global rate
limit type.
* (T246991) User: enforce pingLimiter() expiry time.
* (T260232) don't include null page ids in query list for category dumps.
* (T251506) Sanitizer: Truncate IDs to a reasonable length.
* (T262900) Fix failure of rebuildLocalisationCache.php due to RL hook.
* Explicitly wrap some XML calls in libxml_disable_entity_loader().
* (T263455 T247285) Set EnableJavaScriptTest to true in
includes/DevelopmentSettings.php.
* (T232568, CVE-2020-25813) SECURITY: SpecialUserrights: If a viewer lacks
`hideuser`, ignore hidden users.
* (T255918, CVE-2020-25812) SECURITY: Unescaped message used in HTML on
Special:Contributions.
* (T256171, CVE-2020-25815) SECURITY: Unescaped message used in HTML within
LogEventsList.
* (T258763, CVE-2020-17367, CVE-2020-17368) SECURITY: Prevent invoking
firejail's --output functionality.
* (T86738, CVE-2020-25814) SECURITY: mediawiki.jqueryMsg: Sanitize URLs and
'style' attribute.
* (T115888, CVE-2020-25828) SECURITY: mediawiki.js: Escape HTML in
mw.message( ... ).parse().
* (T260485, CVE-2020-25869) SECURITY: ActorMigration: Load user from the correct
database.
* (T260485, CVE-2020-25869) SECURITY: ensure actor ID from correct wiki is used.
== MediaWiki 1.34.2 ==
This is a security and maintenance release of the MediaWiki 1.34 branch.
=== Changes since MediaWiki 1.34.1 ===
* (T247017) PasswordReset performance improvements.
* The MultiHttpClient code will fallover to non-curl if curl_multi* is blocked.
* (T250568) Work around change in SimpleXMLElement behavior introduced in PHP
7.3.17.
* (T251789) Let $wgResourceLoaderMaxQueryLength=-1 fallback to default.
* Remove some rotten and out of date documentation.
* (T252311) Improvements to some older SQLite update patches.
* (T240307) Minor fixes to extension.schema.v2.json and
extension.schema.v1.json.
* (T238043) cleanupUsersWithNoId.php: Handle missing fields.
* (T199474) Set rc_patrolled to 2 for autopatrolled changes in
rebuildrecentchanges.php.
* (T229461) Update the change_tag table in rebuildrecentchanges.php.
* (T249730) Password Reset Updates.
* (T234450) Per-user concurrency in SpecialContributions can now be limited by
setting $wgPoolCounterConf['SpecialContributions'] appropriately.
* (T248947) SECURITY: img_auth.php may leak private extension images into the
public cache.
== MediaWiki 1.34.1 ==
This is a security and maintenance release of the MediaWiki 1.34 branch.
=== Changes since MediaWiki 1.34.0 ===
* (T211450) User: better error message when getActorId fails.
* (T241340) Don't redefine MW_ENTRY_POINT in thumb.php if already defined.
* (T236444) User: Allow newSystemUser() to create over anonymous actors.
* (T238483) Fix NewPagesPager "hide registered users" option.
* (T245072) mediawiki.language: Rename languageData back to languageNames.
* Use proper SemVer comparison in CheckComposerLockUpToDate.
* (T212738) Add the MW_VERSION constant, global $wgVersion is soft deprecated.
* (T246127) Fix error when initialising updateCollation.php.
* Update comment about PHP versions supported by The PHP Group.
* (T247215) Fix output of RecountCategories::doWork().
* Add check for page existence to view.php maintenance script.
* (T245149) Fix fetching login token from action=query&meta=tokens on private
wikis.
* (T236509) SECURITY: Fix HTML escaping in UserGroupMembership::getLink().
* (T232932) SECURITY: User content can redirect the logout button to different
URL.
* (T246602) SECURITY: jquery.makeCollapsible allows applying event handler to
any CSS selector.
== MediaWiki 1.34.0 ==
=== Changes since MediaWiki 1.34.0-rc.1 ===
* $wgDiffEngine (T237049) – This configuration can be used to specify which
difference engine to use. MediaWiki continues to default to automatically
choosing the first of $wgExternalDiffEngine, wikidiff2, or php that is
usable.
* (T231866) SqlBlobStore no longer needs Language object.
* (T236735) WikiExporter: Remove unnecessary check for SCHEMA_COMPAT_WRITE_OLD
flag.
* (T231673) Set MCR migration stage to SCHEMA_COMPAT_NEW.
* (T229601) Make sure DBLoadBalancerFactory service is not disabled.
* (T232866) Fix support for HTTP/2 in MultiHttpClient.
* (T231866) LocalisationCache: Don't instantiate ResourceLoader.
* (T227461) Stop calling deprecated Redis delete functions.
* (T239561) Mark options as requiring parameters in addSite.php.
* (T232866) Mimic CURLOPT_POST in GuzzleHttpRequest.
* (T239734) Replace deprecated lSize with lLen in Redis code.
* (T192134) SECURITY: Do not allow user scripts on Special:PasswordReset.
* (T239428) ApiEditPage: Test for bad redirect targets.
* (T233342) rdbms: Log debug message traces as 'exception.trace' instead of
'trace'.
* (T226751) media: Log and fail gracefully on invalid EXIF coordinates.
* (T240924) NewPagesPager: Fix namespace query conditions.
* (T212067) Tests for an old PHP bug in parse_url.
== MediaWiki 1.34.0-rc.1 ==
=== Changes since MediaWiki 1.34.0-rc.0 ===
* (T231742) rdbms: Restore debug toolbar "Queries" feature.
* (T231366) The ProfilerOutputDb class, 'profiling' table, and profileinfo.php
entry point had been deprecated.
* (T234361) localisation: Add debug message for backend of MessageCache.
* (T234361) session: Add debug message for the used store class.
* (T235559) Fix example Kask configuration in RESTBagOStuff class comment.
* (T235137) Don't apply styling for Special:Contributions on other pages.
* Upgrade mediawiki-codesniffer from 26.0.0 to 28.0.0 (dev-only).
* (T219604) The "jquery.ui.*" and "jquery.effects.*" modules are now
deprecated as aliases for the "jquery.ui" module.
* (T235392) Deprecate setting Parser::mTitle to null.
* Supporting commits for T235392 were also backported to prevent divergence
from master (MediaWiki 1.35).
* (T234581) The 'jquery.tabIndex' module is deprecated.
* Fix docs for GetUserBlock hooks.
* Parser: Hard deprecate getConverterLanguage.
* (T236810) A number of public methods of Parser were exposed only for
historical reasons and have been deprecated: doMagicLinks,
doDoubleUnderscore, doHeadings, doAllQuotes, replaceExternalLinks,
replaceInternalLinks, replaceInternalLinks2, getVariableValue,
initialiseVariables, formatHeadings, testPst, testPreprocess, testSrvus,
areSubpagesAllowed, maybeDoSubpageLink, splitWhitespace, createAssocArgs,
armorLinks, makeKnownLinkHolder, getImageParams, parseLinkParameter,
stripAltText, replaceLinkHolders, replaceLinkHoldersText, armorLinks,
makeKnownLinkHolder, getImageParams, parseLinkParameter, stripAltText.
* (T30798) $wgServer must now always be set in LocalSettings.php. This is most
likely the case already for any wiki installed after 1.18. The autodetection
system was informally deprecated since 1.18 and vulnerable to cache poisoning
attacks. Older wikis may need to update their LocalSettings.php file.
* (T232169) Hard deprecate $wgSysopEmailBans.
* (T236628) Fix for ArticleRevisionViewCustom hook in DifferenceEngine.php.
* (T181658) Do not insert page titles into querycache.qc_value.
* ParamValidator has been flagged as unstable.
* Hard deprecate Parser::disableCache().
== MediaWiki 1.34.0-rc.0 ==
== Upgrading notes for 1.34 ==
1.34 has several database changes since 1.33, and will not work without schema
updates. Note that due to changes to some very large tables like the revision
table, the schema update may take quite long (minutes on a medium sized site,
many hours on a large site).
Don't forget to always back up your database before upgrading!
See the file UPGRADE for more detailed upgrade instructions, including
important information when upgrading from versions prior to 1.11.
Some specific notes for MediaWiki 1.34 upgrades are below:
* MediaWiki now requires PHP 7.2.9 or above.
* MediaWiki no longer supports HHVM.
For notes on 1.33.x and older releases, see HISTORY.
=== Configuration changes for system administrators in 1.34 ===
In an effort to enforce best practices for passwords, MediaWiki will now warn
users, and suggest that they change their password, if it is in the list of
100,000 commonly used passwords that are considered bad passwords. If you want
to disable this for your users, please add the following to your local settings:
$wgPasswordPolicy['policies']['default']['PasswordNotInLargeBlacklist'] = false;
==== New configuration ====
* $wgAllowExternalReqID (T201409) - This configuration setting controls whether
Mediawiki accepts the request ID set by the incoming request via the
`X-Request-Id` header. If set to `true`, that value will be used throughout
the code as the request identificator. Otherwise, the sent header will be
ignored and the request ID will either be taken from Apache's mod_unique
module or will be generated by Mediawiki itself (depending on the set-up).
* $wgEnableSpecialMute (T218265) - This configuration controls whether
Special:Mute is available and whether to include a link to it on emails
originating from Special:Email.
* editmyuserjsredirect user right – users without this right now cannot edit JS
redirects in their userspace unless the target of the redirect is also in
their userspace. By default, this right is given to everyone.
* (T226733) Add rate limiter to Special:ConfirmEmail.
* $wgDiffEngine (T237049) – This configuration can be used to specify which
difference engine to use. MediaWiki continues to default to automatically
choosing the first of $wgExternalDiffEngine, wikidiff2, or php that is
usable.
==== Changed configuration ====
* $wgUseCdn, $wgCdnServers, $wgCdnServersNoPurge, and $wgCdnMaxAge – These four
CDN-related config variables have been renamed from being specific to Squid –
they were previously $wgUseSquid, $wgSquidServers, $wgSquidServersNoPurge, and
$wgSquidMaxage respectively. This aligns them with the related existing
variable $wgCdnMaxageLagged. The previous configuration variable names are
deprecated, but will be used as the fall back if they are still set.
Note that wgSquidPurgeUseHostHeader has not been renamed, as it is deprecated.
* (T27707) File type checks for image uploads have been relaxed to allow files
containing some HTML markup in metadata. As a result, the $wgAllowTitlesInSVG
setting is no longer applied and is now always true. Note that MSIE 7 may
still be able to misinterpret certain malformed PNG files as HTML.
* (T30798) $wgServer must now always be set in LocalSettings.php. This is most
likely the case already for any wiki installed after 1.18. The autodetection
system was informally deprecated since 1.18 and vulnerable to cache poisoning
attacks. Older wikis may need to update their LocalSettings.php file.
* Introduced $wgVerifyMimeTypeIE to allow disabling the MSIE 6/7 file type
detection heuristic on upload, which is more conservative than the checks
that were changed above.
* $wgExternalDiffEngine — Setting this to a string value of 'wikidiff',
'wikidiff2', or 'wikidiff3' will no longer work. This legacy behaviour was
deprecated in MediaWiki 1.27, 1.32, and 1.27, respectively.
* $wgSkipSkin — Setting this instead of $wgSkipSkins, deprecated in 1.23, is now
hard-deprecated.
* $wgLocalInterwiki — Setting this instead of $wgLocalInterwikis, deprecated in
1.23, is now hard-deprecated.
* $wgProfileOnly — Setting this, deprecated in 1.23, is now hard-deprecated.
Instead, set the log file in $wgDebugLogGroups['profileoutput'].
* $wgProxyList — Setting this to an array with IP addresses in the array keys,
which was deprecated in 1.30, no longer works. Instead, $wgProxyList should be
an array with IP addresses as the values, or a string path to a file
containing one IP address per line.
* $wgCookieSetOnAutoblock and $wgCookieSetOnIpBlock are now enabled by default.
==== Removed configuration ====
* $wgWikiDiff2MovedParagraphDetectionCutoff — If you still want a custom change
size threshold, please specify in php.ini, using the configuration variable
wikidiff2.moved_paragraph_detection_cutoff.
* $wgUseESI - This experimental setting, deprecated in 1.33, is now removed.
* $wgDebugPrintHttpHeaders - The default of including HTTP headers in the
debug log channel is no longer configurable. The debug log itself remains
configurable via $wgDebugLogFile.
* $wgMsgCacheExpiry - The MessageCache uses 24 hours as the expiry for values
stored in WANObjectCache. This is no longer configurable.
* $wgPasswordSalt – This setting, used for migrating exceptionally old, insecure
password setups and deprecated since 1.24, is now removed.
* $wgDBOracleDRCP - If you must use persistent connections, set DBO_PERSISTENT
in the 'flags' field for servers in $wgDBServers (or $wgLBFactoryConf).
* $wgMemCachedDebug - Set the cache "debug" field in $wgObjectCaches instead.
* $wgActorTableSchemaMigrationStage has been removed. Extension code for
MediaWiki 1.31+ finding it unset should treat it as being SCHEMA_COMPAT_NEW.
=== New user-facing features in 1.34 ===
* Special:Mute has been added as a quick way for users to block unwanted emails
from other users originating from Special:EmailUser.
* (T207577) Special:NewSection has been created as a shortcut to creating a new
section on a page. When linked to, its subpage is used as the target
([[Special:NewSection/Test]] redirects to creating a new section in "Test").
Otherwise, it displays a basic interface to allow the end user to specify
the target manually.
* (T220447) Special:Contributions/newbies has been removed for performance and
usefulness reasons. Use Special:RecentChanges?userExpLevel=newcomer instead.
* Special:NewFiles/newbies has been removed for performance and usefulness
reasons. Use Special:RecentChanges?userExpLevel=newcomer&namespace=6 instead.
=== New developer features in 1.34 ===
* The ImgAuthModifyHeaders hook was added to img_auth.php to allow modification
of headers in private wikis.
* Language::formatTimePeriod now supports the new 'avoidhours' option to output
strings like "5 days ago" instead of "5 days 13 hours ago".
* (T220163) Added SpecialMuteModifyFormFields hook to allow extensions
to add fields to Special:Mute.
* (T100896) Skin authors can define custom OOUI themes using OOUIThemePaths.
See for details.
* (T229035) The GetUserBlock hook was added. Use this instead of
GetBlockedStatus.
* ObjectFactory is available as a service. When used as a service, the object
specs can now specify needed DI services.
* (T222388) Special pages can now be specified as an ObjectFactory spec,
allowing the construction of special pages that require services to be
injected in their constructor.
* (T222388) API modules can now be specified as an ObjectFactory spec,
allowing the construction of modules that require services to be injected
in their constructor.
* (T117736) The function signature of SpecialContributions::getForm::filters
has changed. It now expects definitions of additional filter fields as array
rather than string.
=== External library changes in 1.34 ===
==== Changed external libraries ====
* Updated Mustache from 1.0.0 to v3.0.1.
* Updated OOUI from v0.31.3 to v0.34.0.
* Updated OOjs from v2.2.2 to v3.0.0.
* Updated composer/semver from 1.4.2 to 1.5.0.
* Updated composer/spdx-licenses from 1.4.0 to 1.5.1 (dev-only).
* Updated mediawiki/codesniffer from 25.0.0 to 28.0.0 (dev-only).
* Updated cssjanus/cssjanus from 1.2.1 to 1.3.0.
* Updated wikimedia/at-ease from 1.2.0 to 2.0.0.
* Updated wikimedia/remex-html from 2.0.1 to 2.1.0.
* Updated monolog/monolog from 1.22.1 to 1.24.0 (dev-only).
* Updated wikimedia/object-factory from 1.0.0 to 2.1.0.
* Updated wikimedia/timestamp from 2.2.0 to 3.0.0.
* Updated wikimedia/xmp-reader from 0.6.2 to 0.6.3.
* Updated mediawiki/mediawiki-phan-config from 0.6.0 to 0.6.1 (dev-only).
* Updated wikimedia/avro from 1.8.0 to 1.9.0 (dev-only).
==== Removed external libraries ====
* The jquery.async module, deprecated in 1.33, was removed.
=== Bug fixes in 1.34 ===
* (T222529) If a log entry or page revision is recorded in the database with an
empty username, attempting to display it will log an error and return a "no
username available" to the user instead of silently displaying nothing or
invalid links.
=== Action API changes in 1.34 ===
* The 'recenteditcount' response property from action=query list=allusers,
deprecated in 1.25, has been removed.
* (T60993) action=query list=filearchive, list=alldeletedrevisions and
prop=deletedrevisions no longer require the 'deletedhistory' user right.
* In the response to queries that use 'prop=imageinfo', entries for
non-existing files (indicated by the 'filemissing' field) now omit the
following fields, since they are meaningless in this context:
'timestamp', 'userhidden', 'user', 'userid', 'anon', 'size', 'width',
'height', 'pagecount', 'duration', 'commenthidden', 'parsedcomment',
'comment', 'thumburl', 'thumbwidth', 'thumbheight', 'thumbmime',
'thumberror', 'url', 'sha1', 'metadata', 'extmetadata', 'commonmetadata',
'mime', 'mediadtype', 'bitdepth'.
Clients that process these fields should first check if 'filemissing' is
set. Fields that are supported even if the file is missing include:
'canonicaltitle', 'archivename' (deleted files only), 'descriptionurl',
'descriptionshorturl'.
* The 'blockexpiry' result property in list=users and list=allusers will now be
returned in the same format used by the rest of the API: ISO 8601 for
expiring blocks, and "infinite" for non-expiring blocks.
=== Action API internal changes in 1.34 ===
* The exception thrown in ApiModuleManager::getModule has been changed
from an MWException to an UnexpectedValueException, thrown by ObjectFactory.
ApiModuleManager::getModule now also throws InvalidArgumentExceptions when
ObjectFactory is presented with an invalid spec or incorrectly constructed
objects.
* Added ApiQueryBlockInfoTrait.
=== Languages updated in 1.34 ===
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.
* (T152908) Added language support for N'Ko (nqo).
=== Breaking changes in 1.34 ===
* The global functions wfSuppressWarnings and wfRestoreWarnings, deprecated in
1.26, have been removed. Use Wikimedia\AtEase\AtEase::suppressWarnings() and
Wikimedia\AtEase\AtEase::restoreWarnings() directly.
* Preferences class, deprecated in 1.31, has been removed.
* The following parts of code, deprecated in 1.32, were removed in favor of
built-in PHP functions:
* CryptRand class
* CryptRand service
* Functions of the MWCryptRand class: singleton(), wasStrong() and generate().
* Various Special Page PHP Classes were renamed (mostly casing changes):
* SpecialAncientpages => SpecialAncientPages
* SpecialConfirmemail => SpecialConfirmEmail
* SpecialDeadendpages => SpecialDeadendPages
* SpecialFewestrevisions => SpecialFewestRevisions
* SpecialListredirects => SpecialListRedirects
* SpecialLonelypages => SpecialLonelyPages
* SpecialLongpages => SpecialLongPages
* SpecialMIMEsearch => SpecialMIMESearch
* SpecialMostcategories => SpecialMostCategories
* SpecialMostinterwikis => SpecialMostInterwikis
* SpecialMostlinked => SpecialMostLinked
* SpecialMostlinkedcategories => SpecialMostLinkedCategories
* SpecialMostlinkedtemplates => SpecialMostLinkedTemplates
* SpecialMostrevisions => SpecialMostRevisions
* SpecialNewimages => SpecialNewFiles
* SpecialShortpages => SpecialShortPages
* SpecialUncategorizedcategories => SpecialUncategorizedCategories
* SpecialUncategorizedimages => SpecialUncategorizedImages
* SpecialUncategorizedpages => SpecialUncategorizedPages
* SpecialUncategorizedtemplates => SpecialUncategorizedTemplates
* SpecialUnusedcategories => SpecialUnusedCategories
* SpecialUnusedimages => SpecialUnusedImages
* SpecialUnusedtemplates => SpecialUnusedTemplates
* SpecialUnwatchedpages => SpecialUnwatchedPages
* SpecialWantedcategories => SpecialWantedCategories
* SpecialWantedtemplates => SpecialWantedTemplates
* SpecialWithoutinterwiki => SpecialWithoutInterwiki
* Language::setCode, deprecated in 1.32, was removed. Use Language::factory to
create a new Language object with a different language code.
* MWNamespace::clearCaches() has been removed. So has the $rebuild parameter
to MWNamespace::getCanonicalNamespaces(), which was deprecated since 1.31.
Instead, reset services, such as by calling $this->overrideMwServices() (if
your test extends MediaWikiTestCase). Services will generally not pick up
configuration changes from after they were created, so you must reset
services after any configuration change. Even if your code works now, it is
likely to break in future versions as more code is moved to services.
* The ill-defined "DatabaseOraclePostInit" hook has been removed.
* PreferencesFormLegacy and PreferencesForm classes, deprecated in 1.32, have
been removed.
* ObjectFactory class, deprecated in 1.31, has been removed.
* HWLDFWordAccumudlator class, deprecated in 1.28, has been removed.
* XMPInfo, XMPReader and XMPValidate, deprecated in 1.32, have been removed.
* The RedirectSpecialPage::execute method could sometimes return a Title object.
This behavior was removed, and the method now matches the parent signature
(SpecialPage::execute) which is to return HTML string or void.
To obtain the destination title, use RedirectSpecialPage::getRedirect.
* The 'recenteditcount' response property from action API action=query
list=allusers, deprecated in 1.25, has been removed.
* SearchEngine::userNamespaces(), SearchEngine::namespacesAsText(),
SearchEngine::create(), SearchEngine::getSearchTypes() and
SearchEngine::getNearMatch(), methods deprecated in 1.27, have been removed.
* FileRepo::streamFile(), deprecated in 1.26, has been removed.
* User::randomPassword() method, deprecated in 1.27, have been removed.
* MWNamespace::canTalk(), deprecated in 1.30, have been removed.
* Parser class property $mUniqPrefix, deprecated in 1.26, has been removed.
* wfArrayFilter() and wfArrayFilterByKey(), deprecated in 1.32, have been
removed.
* wfMakeUrlIndexes() function, deprecated in 1.33, have been removed.
* Method signatures in WatchedItemQueryServiceExtension have changed from taking
User objects to taking UserIdentity objects. Extensions implementing this
interface need to be changed accordingly.
* User::getGroupPage() and ::makeGroupLinkHTML(), deprecated in 1.29, have been
removed. Use UserGroupMembership::getGroupPage and ::getLink instead.
* User::makeGroupLinkWiki(), deprecated in 1.29, has been removed. Use
UserGroupMembership::getLink() instead.
* SavepointPostgres, deprecated in 1.31, has been removed.
* OutputPage::enableSectionEditLinks(), OutputPage::sectionEditLinksEnabled(),
ParserOptions::getEditSection(), ParserOptions::setEditSection(), and
ParserOutput::getEditSectionTokens, ::getTOCEnabled, ::setEditSectionTokens,
and ::setTOCEnabled, deprecated in 1.31, have been removed.
* EditPage::safeUnicodeInput() and ::safeUnicodeOutput(), deprecated in 1.30,
have been removed.
* Four methods in OutputPage, deprecated in 1.32, have been removed. You should
use OutputPage::showFatalError or throw a FatalError instead. The methods are
::showFileCopyError(), ::showFileRenameError(), ::showFileDeleteError(), and
::showFileNotFoundError().
* ApiBase::truncateArray(), deprecated in 1.32, has been removed.
* IcuCollation::getICUVersion(), deprecated in 1.32, has been removed. Use PHP's
INTL_ICU_VERSION constant directly.
* HTMLForm::setSubmitProgressive(), deprecated in 1.32, has been removed.
* ResourceLoaderStartUpModules::getStartupModules() and ::getLegacyModules(),
both deprecated in 1.32, have been removed.
* BaseTemplate::msgHtml() and QuickTemplate::msgHtml(), deprecated in 1.32, have
been removed. Use ->msg() or ->getMsg() instead.
* WatchAction::getUnwatchToken(), deprecated in 1.32, has been removed. Instead,
use WatchAction::getWatchToken() with action 'unwatch' directly.
* Language::initEncoding(), ::recodeForEdit(), and recodeInput(), deprecated in
1.28, have been removed.
* PageArchive::getTextFromRow(), ::listAllPages(), and ::getLastRevisionText(),
deprecated in 1.32, have been removed.
* OutputPage::getModuleScripts(), ParserOutput::getModuleScripts(), deprecated
in 1.33, have been removed.
* User::getPasswordValidity(), deprecated in 1.33, has been removed.
* ApiQueryBase::prepareUrlQuerySearchString(), deprecated in 1.33, has been
removed.
* ChangeTags::purgeTagUsageCache(), deprecated in 1.33, has been removed.
* JobQueueGroup::pushLazyJobs(), deprecated in 1.33, has been removed.
* MediaWikiTestCase::stashMwGlobals(), deprecated in 1.32, has been removed.
* SearchEngine::transformSearchTerm(), deprecated in 1.32, has been removed.
* The Block typehint only refers to blocks stored in the database. It should be
updated to AbstractBlock in cases where any type of block could be expected.
* FileRepoStatus, deprecated in 1.25, has been removed.
* The LegacyHookPreAuthenticationProvider class, deprecated since its creation
in 1.27, has been removed.
* IP::isValidBlock(), deprecated in 1.30, has been removed.
* WikiPage::prepareContentForEdit now doesn't accept an integer for $revision,
was deprecated in 1.25.
* The jquery.byteLength module, deprecated in 1.31, was removed.
Use the mediawiki.String module instead.
* mw.language.specialCharacters, deprecated in 1.33, has been removed.
Use require( 'mediawiki.language.specialCharacters' ) instead.
* The jquery.colorUtil module was removed. Use jquery.color instead.
* The jquery.checkboxShiftClick module was removed. The functionality
is provided by mediawiki.page.ready instead (T232688).
* The 'jquery.accessKeyLabel' module has been removed. This jQuery
plugin now ships as part of the 'mediawiki.util' module bundle.
* EditPage::submit(), deprecated in 1.29, has been removed. Use $this->edit()
directly.
* HTMLForm::getErrors(), deprecated in 1.28, has been removed. Use
getErrorsOrWarnings() instead.
* SpecialPage::getTitle(), deprecated in 1.23, has been removed. Use
SpecialPage::getPageTitle() instead.
* jquery.ui.effect-bounce, jquery.ui.effect-explode, jquery.ui.effect-fold
jquery.ui.effect-pulsate, jquery.ui.effect-slide, jquery.ui.effect-transfer,
which are no longer used, have now been removed.
* SpecialEmailUser::validateTarget(), ::getTarget() without a sender/user
specified, deprecated in 1.30, have been removed.
* BufferingStatsdDataFactory::getBuffer(), deprecated in 1.30, has been removed.
* The constant DB_SLAVE, deprecated in 1.28, has been removed. Use DB_REPLICA.
* The constants NS_IMAGE and NS_IMAGE_TALK, deprecated in 1.14, have been
removed. Use NS_FILE and NS_FILE_TALK respectively.
* Replacer, DoubleReplacer, HashtableReplacer and RegexlikeReplacer
(deprecated in 1.32) have been removed. Closures should be used instead.
* OutputPage::addWikiText(), ::addWikiTextWithTitle(), ::addWikiTextTitleTidy(),
::addWikiTextTidy(), ::addWikiTextTitle(), deprecated in 1.32, have been
removed.
* The $wgUseKeyHeader configuration option and the OutputPage::getKeyHeader()
method, deprecated in 1.32, have been removed.
* WebInstallerOutput::addWikiText(), deprecated in 1.32, has been removed.
* Parser::fetchFile(), deprecated in 1.32, has been removed. Use the method
Parser::fetchFileAndTitle() instead.
* The global function wfBCP47, deprecated in 1.31, has been removed.
* wfCountDown() function, deprecated in 1.31, has been removed. Use
\Maintenance::countDown() method instead.
* OutputPage::wrapWikiMsg() no longer accepts an options parameter. This was
deprecated since 1.20.
* Skin::outputPage() no longer accepts a context. This was deprecated in 1.20.
* Linker::link() no longer accepts a string for the query array, as was
deprecated in 1.20.
* PrefixSearch::titleSearch(), deprecated in 1.23, has been removed. Use the
SearchEngine::defaultPrefixSearch or ::completionSearch() methods instead.
* The UserRights hook, deprecated in 1.26, has been removed. Instead, use the
UserGroupsChanged hook.
* Skin::getDefaultInstance(), deprecated in 1.27, has been removed. Get the
instance from MediaWikiServices instead.
* The UserLoadFromSession hook, deprecated in 1.27, has been removed.
* The wfResetSessionID global function, deprecated in 1.27, has been removed.
Use MediaWiki\Session\SessionManager instead.
* The wfGetLBFactory global function, deprecated in 1.27, has been removed.
Use MediaWikiServices::getInstance()->getDBLoadBalancerFactory().
* The internal method OutputPage->addScriptFile() will no longer silently drop
calls that use an invalid path (i.e., something other than an absolute path,
protocol-relative URL, or full scheme URL), and will instead pass them to the
client where they will likely 404. This usage was deprecated in 1.24.
* Database::reportConnectionError, deprecated in 1.32, has been removed.
* APIEditBeforeSave hook, deprecated in 1.28, has been removed. Please see
EditFilterMergedContent hook for an alternative way to use this feature.
* API module methods getDescription(), getParamDescription(), & getExamples(),
all deprecated in 1.25 and ignored, have been removed.
* The API module method getDescriptionMessage(), deprecated in 1.30, has been
removed.
* The JavaScript global variable wgLoadScript has been removed. Use
mw.util.wikiScript( 'load' ) instead.
* ResourceLoader no longer creates the 'mw.legacy' placeholder object. It has
been unused since 1.16 and was deprecated in 1.22. To deprecate a property
in JavaScript, use mw.log.deprecate() instead.
* The 'user.groups' module, deprecated in 1.28, was removed.
Use the 'user' module instead.
* The ResourceLoaderContext::expandModuleNames method, deprecated in 1.33, was
removed. Use ResourceLoader::expandModuleNames instead.
* The ability to override User::$mRights has been removed. Use
PermissionManager::addTemporaryUserRights() instead.
* Previously, when iterating ResultWrapper with foreach() or a similar
construct, the range of the index was 1..numRows. This has been fixed to be
0..(numRows-1).
* The ChangePasswordForm hook, deprecated in 1.27, has been removed. Use the
AuthChangeFormFields hook or security levels instead.
* WikiMap::getWikiIdFromDomain(), deprecated in 1.33, has been removed.
Use WikiMap::getWikiIdFromDbDomain() instead.
* The config variables $wgHtml5, $wgJsMimeType, and $wgXhtmlDefaultNamespace,
which were deprecated and ignored by core since 1.22, are no longer set to any
value, and SkinTemplate no longer emits a 'jsmimetype' key. Any extensions not
updated since 2013 to cope with this deprecation may now break.
* (T222637) Passing ResourceLoaderModule objects to ResourceLoader::register()
or $wgResourceModules is no longer supported.
Use the 'class' or 'factory' option of the array format instead.
* The parameter $lang of the functions generateTOC and tocList in Linker and
DummyLinker must be in type Language when present. Other types are
deprecated since 1.33.
* The static properties mw.Api.errors and mw.Api.warnings, deprecated in 1.29,
have been removed.
* ParserOption::getSpeculativeRevIdCallback(), deprecated in 1.28, has been
removed.
* The UploadVerification hook, deprecated in 1.28, has been removed. Instead,
use the UploadVerifyFile hook.
* UploadBase:: and UploadFromChunks::stashFileGetKey() and stashSession(),
deprecated in 1.28, have been removed. Instead, please use the getFileKey()
method on the response from doStashFile().
* LBFactory::setDomainPrefix() and LoadBalancer::setDomainPrefix(), deprecated
in 1.33, have been removed. Use setLocalDomainPrefix() instead.
* IDatabase::implicitGroupby(), deprecated in 1.30, has been removed.
* IDatabase::doneWrites(), deprecated in 1.31, has been removed.
Use IDatabase::lastDoneWrites() instead.
* Database::reportConnectionError(), deprecated in 1.32, has been removed.
* LoadBalancer::laggedSlaveUsed(), deprecated in 1.28, has been removed.
Use LoadBalancer::laggedReplicaUsed() instead.
* Database::getProperty(), deprecated in 1.28, has been removed.
* IDatabase::getWikiId(), deprecated in 1.30, has been removed.
Use IDatabase::getDomainID() instead.
* (T191231) Support for using Oracle or MSSQL as database backends has been
dropped.
* MessageCache::destroyInstance() has been removed. Instead, call
MediaWikiTestCase::resetServices().
* SearchResult protected field $searchEngine is removed and no longer
initialized after calling SearchResult::initFromTitle().
* The UserIsBlockedFrom hook is only called if a block is found first, and
should only be used to unblock a blocked user.
* Parameters for index.php from PATH_INFO, such as the title, are no longer
written to $_GET.
* The selectFields() methods on classes LocalFile, ArchivedFile, OldLocalFile,
DatabaseBlock, and RecentChange, deprecated in 1.31, have been removed. Use
the corresponding getQueryInfo() methods instead.
* The following methods on Revision, deprecated since 1.31, have been removed.
Use RevisionStore::getQueryInfo() or RevisionStore::getArchiveQueryInfo()
instead.
* Revision::userJoinCond()
* Revision::pageJoinCond()
* Revision::selectFields()
* Revision::selectArchiveFields()
* Revision::selectTextFields()
* Revision::selectPageFields()
* Revision::selectUserFields()
* User::setNewpassword(), deprecated in 1.27 has been removed.
* The ObjectCache::getMainWANInstance and ObjectCache::getMainStashInstance
functions, deprecated since 1.28, have been removed.
* Language::$dataCache has been removed (without prior deprecation, for
practical reasons). Use MediaWikiServices instead to get a LocalisationCache.
=== Deprecations in 1.34 ===
* The MWNamespace class is deprecated. Use NamespaceInfo.
* ExtensionRegistry->load() is deprecated, as it breaks dependency checking.
Instead, use ->queue().
* User::isBlocked() is deprecated since it does not tell you if the user is
blocked from editing a particular page. Use User::getBlock() or
PermissionManager::isBlockedFrom() or PermissionManager::userCan() instead.
* User::isLocallyBlockedProxy and User::inDnsBlacklist are deprecated and moved
to the BlockManager as private helper methods.
* User::isDnsBlacklisted is deprecated. Use BlockManager::isDnsBlacklisted
instead.
* The Config argument to ChangesListSpecialPage::checkStructuredFilterUiEnabled
is deprecated. Pass only the User argument.
* WatchedItem::getUser is deprecated. Use getUserIdentity.
* Passing a Title as the first parameter to the getTimestampById method of
RevisionStore is deprecated. Omit it, passing only the remaining parameters.
* Title::getPreviousRevisionId and Title::getNextRevisionId are deprecated. Use
RevisionLookup::getPreviousRevision and RevisionLookup::getNextRevision.
* The Title parameter to RevisionLookup::getPreviousRevision and
RevisionLookup::getNextRevision is deprecated and should be omitted.
* MWHttpRequest::factory is deprecated. Use HttpRequestFactory.
* The Http class is deprecated. For the request, get, and post methods, use
HttpRequestFactory. For isValidURI, use MWHttpRequest::isValidURI. For
getProxy, use (string)$wgHTTPProxy. For createMultiClient, construct a
MultiHttpClient directly.
* Http::$httpEngine is deprecated and has no replacement. The default 'guzzle'
engine will eventually be made the only engine for HTTP requests.
* RepoGroup::singleton(), RepoGroup::destroySingleton(),
RepoGroup::setSingleton(), wfFindFile(), and wfLocalFile() are all
deprecated. Use MediaWikiServices instead.
* The getSubjectPage, getTalkPage, and getOtherPage of Title are deprecated.
Use NamespaceInfo's getSubjectPage, getTalkPage, and getAssociatedPage.
* MWMessagePack class, no longer used, has been deprecated in 1.34.
* The Block class is separated into DatabaseBlock (for blocks stored in the
database), and SystemBlock (for temporary blocks created by the system).
SystemBlock should be used when creating any temporary blocks. Block is
a deprecated alias for DatabaseBlock.
* Parser::$mConf is deprecated. It will be removed entirely in a later version.
Some context can be found at T224165.
* Constructing Parser directly is deprecated. Obtain one from ParserFactory.
* Title::moveSubpages is deprecated. Use MovePage::moveSubpages or
MovePage::moveSubpagesIfAllowed.
* The MWNamespace class is deprecated. Use MediaWikiServices::getNamespaceInfo.
* (T62260) Hard deprecate Language::getExtraUserToggles() method.
* Language::viewPrevNext function is deprecated, use
PrevNextNavigationRenderer::buildPrevNextNavigation instead
* User::trackBlockWithCookie and DatabaseBlock::clearCookie are deprecated. Use
BlockManager::trackBlockWithCookie and BlockManager::clearCookie instead.
* DatabaseBlock::setCookie, DatabaseBlock::getCookieValue,
DatabaseBlock::getIdFromCookieValue and AbstractBlock::shouldTrackWithCookie
are moved to internal helper methods for BlockManager::trackBlockWithCookie.
* ResourceLoaderContext::getConfig and ResourceLoaderContext::getLogger have
been deprecated. Inside ResourceLoaderModule subclasses, use the local methods
instead. Elsewhere, use the methods from the ResourceLoader class.
* The Profiler::setTemplated and Profiler::getTemplated methods have been
deprecated. Use Profiler::setAllowOutput and Profiler::getAllowOutput
instead.
* The ProfilerOutputDb class, 'profiling' table, and profileinfo.php entry
point had been deprecated (T231366).
* The Preprocessor_DOM implementation has been deprecated. It will be
removed in a future release. Use the Preprocessor_Hash implementation
instead.
* Sanitizer::attributeWhitelist() and Sanitizer::setupAttributeWhitelist()
have been deprecated; they will be made private in the future.
* SearchResult::termMatches() method is deprecated. It was unreliable because
only populated by few search engine implementations. Use
SqlSearchResult::getTermMatches() if really needed.
* SearchResult::getTextSnippet( $terms ) the $terms param is being deprecated
and should no longer be passed. Search engine implemenations should be
responsible for carrying relevant information needed for highlighting with
their own SearchResultSet/SearchResult sub-classes.
* SearchResultSet::free() method is deprecated.
* SearchEngine::$searchTerms protected field is deprecated. Moved to
SearchDatabase.
* The use of the $terms param in the ShowSearchHit and ShowSearchHitTitle
hooks is highly discouraged as it's only populated by SearchDatabase search
engines.
* Skin::escapeSearchLink() is deprecated. Use Skin::getSearchLink() or the skin
template option 'searchaction' instead.
* Skin::getRevisionId() and Skin::isRevisionCurrent() have been deprecated.
Use OutputPage::getRevisionId() and OutputPage::isRevisionCurrent() instead.
* LoadBalancer::haveIndex() and LoadBalancer::isNonZeroLoad() have
been deprecated.
* FileBackend::getWikiId() has been deprecated.
Use FileBackend::getDomainId() instead.
* User::getRights() and User::$mRights have been deprecated. Use
PermissionManager::getUserPermissions() instead.
* The LocalisationCacheRecache hook no longer allows purging of message blobs
to be prevented. Modifying the $purgeBlobs parameter now has no effect.
* SVGMetadataExtractor::getMetadata has been deprecated. Instead, you should
use SVGReader->getMetadata() directly.
* The following public properties on AbstractBlock are deprecated: $mReason,
$mTimestamp, $mExpiry, $mHideName. Use the getters/setters instead.
* The following public properties on DatabaseBlock are deprecated: $mAuto,
$mParentBlockId. To check for an autoblock use DatabaseBlock::getType; to
check for the parent ID, use DatabaseBlock::getParentBlockId.
* SearchEngine::userHighlightPrefs() is deprecated, simply stop passing
$contextlines and $contextchars to the SearchHighlighter methods, they will
use proper defaults defined in SearchHighlighter::DEFAULT_CONTEXT_LINES and
DEFAULT_CONTEXT_CHARS.
* SearchUpdate constructor: passing a string as the title param and or a boolean
or a string as the content will produce a deprecation warning.
* SearchEngine::getTextFromContent() is deprecated, use getTextForSearchIndex()
directly from the Content object.
* SearchEngine::textAlreadyUpdatedForIndex() is deprecated, given the
deprecation above this method is no longer needed/called and should not be
implemented by SearchEngine implementation.
* IDatabase::bufferResults() has been deprecated. Use query batching instead.
* MessageCache::singleton() is deprecated. Use
MediaWikiServices::getMessageCache().
* ObjectCache::getWANInstance() is deprecated. Use
MediaWikiServices::getMainWANObjectCache() instead.
* ObjectCache::newWANCacheFromParams() is deprecated. Use
MediaWikiServices::getMainWANObjectCache() instead.
* Constructing MovePage directly is deprecated. Use MovePageFactory.
* TempFSFile::factory() has been deprecated. Use TempFSFileFactory instead.
* wfIsBadImage() is deprecated. Use the BadFileLookup service instead.
* Building a new SearchResult is hard-deprecated, always call
SearchResult::newFromTitle(). This class is being refactored into an abstract
class. If you extend this class please be sure to override all its methods
or extend RevisionSearchResult.
* Skin::getSkinNameMessages() is deprecated and no longer used.
* The mediawiki.RegExp module is deprecated; use mw.util.escapeRegExp() instead.
* Specifying a SpecialPage object for the list of special pages (either through
the SpecialPage_initList hook or by adding to $wgSpecialPages) is now
deprecated.
* The 'jquery.tabIndex' module is deprecated.
* WebInstaller::getWarningBox() and getErrorBox() are deprecated.
Use Html::errorBox() or Html::warningBox() instead.
* Use of ActorMigration with 'ar_user', 'img_user', 'oi_user', 'fa_user',
'rc_user', 'log_user', and 'ipb_by' is deprecated. Queries should be adjusted
to use the corresponding actor fields directly. Note that use with
'rev_user' is *not* deprecated at this time.
* Specifying both the class and factory parameters for
ApiModuleManager::addModule is now deprecated. The ObjectFactory spec should
be used instead.
* The UserIsHidden hook is deprecated. Use GetUserBlock instead, and add a
system block that hides the user.
* The GetBlockedStatus hook is deprecated. Use GetUserBlock instead, to add or
remove a block.
* $wgContentHandlerUseDB is deprecated and should always be true.
* StreamFile::send404Message() and StreamFile::parseRange() are now deprecated.
Use HTTPFileStreamer::send404Message() and HTTPFileStreamer::parseRange()
respectively instead.
* Global variable $wgSysopEmailBans is deprecated; to allow sysops to ban
users from sending emails, use
$wgGroupPermissions['sysop']['blockemail'] = true;
* ApiQueryBase::showHiddenUsersAddBlockInfo() is deprecated. Use
ApiQueryBlockInfoTrait instead.
* PasswordReset is now a service, its direct instantiation is deprecated.
* RESTBagOStuff users should specify either "JSON" or "PHP" serialization type.
* The global function wfIsHHVM() is deprecated and will now always return false
regardless of the runtime environment. This is part of the continuing work to
remove HHVM support from MediaWiki, which started in MediaWiki 1.31.
* Language::getLocalisationCache() is deprecated. Use MediaWikiServices
instead.
* The following Language methods are deprecated: isSupportedLanguage,
isValidCode, isValidBuiltInCode, isKnownLanguageTag, fetchLanguageNames,
fetchLanguageName, getFileName, getMessagesFileName, getJsonMessagesFileName.
Use the new LanguageNameUtils class instead. (Note that fetchLanguageName(s)
are called getLanguageName(s) in the new class.)
* Using the Parser without initializing its $mTitle property to non-null has
been deprecated. In a future release Parser::getTitle() will throw a
TypeError if $mTitle is uninitialized.
* A number of public methods of Parser were exposed only for historical
reasons and have been deprecated: doMagicLinks, doDoubleUnderscore,
doHeadings, doAllQuotes, replaceExternalLinks, replaceInternalLinks,
replaceInternalLinks2, getVariableValue, initialiseVariables, formatHeadings,
testPst, testPreprocess, testSrvus, areSubpagesAllowed, maybeDoSubpageLink,
splitWhitespace, createAssocArgs, armorLinks, makeKnownLinkHolder,
getImageParams, parseLinkParameter, stripAltText, replaceLinkHolders,
replaceLinkHoldersText, armorLinks, makeKnownLinkHolder, getImageParams,
parseLinkParameter, stripAltText.
=== Other changes in 1.34 ===
* Added option to specify "Various authors" as author in extension credits using
"..." as the only author name. If the "author" array contains more than one
entry and "..." is one of the entries in the array, "..." will be parsed as
"others" (version-poweredby-others i18n message) like previously.
* (T232563) Browser support ("Grade C") for Internet Explorer 6 and 7
was discontinued. Basic content and security features may no longer
work correctly in these browsers.
= MediaWiki 1.33 =
== MediaWiki 1.33.4 ==
This is a security and maintenance release of the MediaWiki 1.33 branch.
=== Changes since MediaWiki 1.33.3 ===
* (T247017) PasswordReset performance improvements.
* The MultiHttpClient code will fallover to non-curl if curl_multi* is blocked.
* (T250568) Work around change in SimpleXMLElement behavior introduced in PHP
7.3.17.
* Remove some rotten and out of date documentation.
* (T252311) Improvements to some older SQLite update patches.
* (T240307) Minor fixes to extension.schema.v2.json and
extension.schema.v1.json.
* rdbms: Add callback for atomic section cancellation.
* (T191668) NameTableStoreTest::getCallCheckingDb simplification.
* Make NameTableStore use LoadBalancer::getConnectionRef().
* (T224949) NameTableStore: ensure consistency upon rollback.
* (T199474) Set rc_patrolled to 2 for autopatrolled changes in
rebuildrecentchanges.php.
* (T229461) Update the change_tag table in rebuildrecentchanges.php.
* (T234450) Per-user concurrency in SpecialContributions can now be limited by
setting $wgPoolCounterConf['SpecialContributions'] appropriately.
* (T248947) SECURITY: img_auth.php may leak private extension images into the
public cache.
== MediaWiki 1.33.3 ==
This is a security and maintenance release of the MediaWiki 1.33 branch.
=== Changes since MediaWiki 1.33.2 ===
* (T245072) mediawiki.language: Rename languageData back to languageNames.
* Use proper SemVer comparison in CheckComposerLockUpToDate.
* (T212738) Add the MW_VERSION constant, global $wgVersion is soft deprecated.
* Update comment about PHP versions supported by The PHP Group.
* (T247215) Fix output of RecountCategories::doWork().
* Add check for page existence to view.php maintenance script.
* (T236509) SECURITY: Fix HTML escaping in UserGroupMembership::getLink().
* (T246602) SECURITY: jquery.makeCollapsible allows applying event handler to
any CSS selector.
== MediaWiki 1.33.2 ==
This is a security and maintenance release of the MediaWiki 1.33 branch.
=== Changes since MediaWiki 1.33.1 ===
* (T217831) (T200653) PopulateContentTables: compute sha1 and length if needed.
* Fix extra newlines in the installer.
* (T236628) Fix for ArticleRevisionViewCustom hook in DifferenceEngine.php.
* (T181658) Do not insert page titles into querycache.qc_value.
* (T206013) Suppress errors when reading invalid XML file properties.
* (T237931) Remove references to pg_attrdef.adsrc in Postgres code.
* Use correct value for 'sslmode' in DatabasePostgres.
* (T232866) Fix support for HTTP/2 in MultiHttpClient.
* (T227461) Stop calling deprecated Redis delete functions.
* (T239561) Mark options as requiring parameters in addSite.php.
* (T219440) Skip flaky rollback test.
* (T232866) Mimic CURLOPT_POST in GuzzleHttpRequest.
* (T239734) Replace deprecated lSize with lLen in Redis code.
* (T192134) SECURITY: Do not allow user scripts on Special:PasswordReset.
* (T239428) ApiEditPage: Test for bad redirect targets.
* (T233342) rdbms: Log debug message traces as 'exception.trace' instead of
'trace'.
* (T226751) media: Log and fail gracefully on invalid EXIF coordinates.
* (T212067) SECURITY: Work around PHP bug in parse_url.
== MediaWiki 1.33.1 ==
This is a security and maintenance release of the MediaWiki 1.33 branch.
=== Changes since MediaWiki 1.33.0 ===
* A change that kept people with a database table prefix that didn't
end with an underscore from updating was reverted.
* (T207100) Updated LanguageTr for dotted and dotless I in PHP 7.3.
* The ImgAuthModifyHeaders hook was added to img_auth.php to allow modification
of headers in private wikis.
* (T230317) Allow upgrading from MediaWiki before 1.15 where the valid_tag table
doesn't yet exist.
* (T208897) MessageCache: Restore 'loadedLanguages' tracking for load().
* (T228555) MessageCache: Fix isMainCacheable() logic for non-content languages.
* (T200088) Remove title protection correctly for undeletions and imports.
* (T230402) SECURITY: Add permission check for suppressed account to
Special:Redirect.
* Add helper for HTTPFileStreamer header syntax.
* (T227461) ObjectCache: avoid using deprecated phpredis::delete() alias.
* (T231386) SpecialRedirect::dispatchUser() should use a 302 http status code.
* (T118799) Fix XMP parser errors due to trailing nullchar.
* (T230618) Fix GROUP BY in ActiveUsersPager and RecentChangesUpdateJob for
PostgreSQL.
* (T230487) Handle changed defaults in Argon2PasswordTest::testPartialConfig().
* (T233119) Improve documentation for the MinimumPasswordLengthToLogin policy.
* (T227662) Split down patch-comment-table.sql and patch-actor-table.sql into
separate files to help allieviate potential migration problems.
=== Upgrading notes for 1.33 ===
1.33 has several database changes since 1.32, and will not work without schema
updates. Note that due to changes to some very large tables like the revision
table, the schema update may take quite long (minutes on a medium sized site,
many hours on a large site).
Don't forget to always back up your database before upgrading!
See the file UPGRADE for more detailed upgrade instructions, including
important information when upgrading from versions prior to 1.11.
Some specific notes for MediaWiki 1.33 upgrades are below:
* Some external link searches will not work correctly until update.php (or
refreshExternallinksIndex.php) is run. These include searches for links using
IP addresses, internationalized domain names, and possibly mailto links.
* If you ran migrateActors.php using an older version of MediaWiki and want to
run your wiki with $wgActorTableSchemaMigrationStage SCHEMA_COMPAT_READ_OLD,
note that log_search rows needed to find revision deletions by target user
were incorrectly deleted. See T215464 for details.
* If revision deletions were performed when the wiki was configured with
$wgActorTableSchemaMigrationStage SCHEMA_COMPAT_WRITE_BOTH and without
migrateActors.php having been run, the log_search table may contain rows with
empty values for "target_author_actor" which will prevent log searches for
revision deletions by target user from finding those log entries. These rows
may be corrected by (re-)running migrateActors.php.
For notes on 1.32.x and older releases, see HISTORY.
== MediaWiki 1.33.0 ==
=== Changes since MediaWiki 1.33.0-rc.0 ===
* (T225558) Update installer link to PHP intl.
* (T225901) Only attempt to deduplicate if there is data in archive and revision
tables.
* (T225564) Fetch tag ID before calling undefineTag().
* (T225496) Detect APC for MainCacheType in CLI installer.
* Call unpack() with correct parameters in MimeAnalyzer.php for PHP 7.0 support.
* (T212613) Style change tags correctly on Special:Newpages.
* (T202211) Fix SQLite patch-(page|template)links-fix-pk.sql column order.
== MediaWiki 1.33.0-rc.0 ==
=== Configuration changes for system administrators in 1.33 ===
==== New configuration ====
* $wgEnablePartialBlocks – This enables the Partial Blocks feature, which gives
accounts with block permissions the ability to block users, IPs, and IP ranges
from editing specific pages, while allowing them to edit the rest of the wiki.
It is a temporary setting for gradual enablement, current default to `false`,
and will be set to `true` and then removed once initial development completes.
==== Changed configuration ====
* $wgChangeTagsSchemaMigrationStage (T193868) — This temporary setting, added in
MediaWiki 1.32, now defaults to MIGRATION_NEW instead of MIGRATION_WRITE_BOTH.
* $wgPasswordPolicy – There is a new password policy to check that the account's
password is not in the large blacklist. This is enabled by default for the
built-in user groups bureaucrat, sysop, interface-admin, and bot. To configure
this for other user groups, set the `PasswordNotInLargeBlacklist` flag `true`.
* $wgPasswordDefault – There is a new password type configuration using Argon2
password hashing (which requires PHP 7.2 and above). It's designed to resist
timing attacks, and (on systems with PHP 7.3+) GPU hacking; if you configure
argon2 to be used, by default, it will automatically choose the best available
algorithm depending on which version of PHP you have available. To use this,
you can set `$wgPasswordDefault = 'argon2';`.
* $wgActorTableSchemaMigrationStage now defaults to reading the new schema.
update.php will back-populate the new database fields due to the changed
setting, which may take some time on large wikis. You can avoid downtime by
following a process like that described in T188327.
==== Removed configuration ====
* $wgTagStatisticsNewTable (T199334) — This temporary setting, added in
MediaWiki 1.32, has now been removed. When loading Special:Tags, MediaWiki
will now always use the `change_tag_def` instead of the `change_tag` table.
* $wgUseTidy, $wgTidyBin, $wgTidyConf, $wgTidyOpts, $wgTidyInternal, and
$wgDebugTidy – These options, all deprecated since 1.26, have now all been
removed, as MediaWiki now always tidies user output. The $wgTidyConfig setting
remains only for experimental features and debugging, and should not be used.
* $wgEnableParserCache – This setting has been deprecated since 1.26, has now
been removed. If you still desire to disable the parser cache, instead you can
set `$wgParserCacheType = CACHE_NONE;`.
* $wgCommentTableSchemaMigrationStage – This temporary migration setting has now
been removed. Code finding it unset should treat it as being MIGRATION_NEW.
* $wgAuth – This old setting, deprecated in 1.27, has been removed as part of
the removal of AuthPlugin.
* $wgSitesCacheFile – This configuration was introduced in 1.25 with the intent
to allow sites to configure a file in which to cache the SiteStore database
table, but it was never used. SiteStore already caches its information by
default using BagOStuff (e.g. Memcached or APC).
* $wgClockSkewFudge – This setting was used by User.php to let sites adjust by
how much MediaWiki would fudge when trying to minimize the chances of a
user.user_touched database update to the "current" timestamp being before the
value already there (e.g. due to clock skew between different servers). This
is no longer a problem, because the code now ensures the timestamp is always
higher than the previous one. The writes are guarded with CAS logic (check
and set), which prevents updates that would overlap.
* $wgDBmysql5 (T196185) - This experimental setting, deprecated in 1.31, has
been removed.
=== New user-facing features in 1.33 ===
* (T96041) __EXPECTUNUSEDCATEGORY__ on a category page causes the category
to be hidden on Special:UnusedCategories.
* (T210814) SVGs are now by default displayed in wiki language on image
pages.
* Special:CreateAccount now warns the user if their chosen username has to be
normalized.
* (T205040) Multilingual images are now be displayed in the current parse
language where available.
* Special:ActiveUsers will no longer filter out users who became inactive since
the last time the active users query cache was updated.
* (T215675) RecentChange and ManualLogEntry implement new Taggable interface.
* (T215675) Added a hook, ManualLogEntryBeforePublish, to allow extensions
to modify (example: add tags) log entries.
=== New developer features in 1.33 ===
* The AuthManagerLoginAuthenticateAudit hook has a new parameter for
additional information about the authentication event.
* TextContent::getText() was introduced as a replacement for
Content::getNativeData() for text-based content models.
* (T214706) LinksUpdate::getAddedExternalLinks() and
LinksUpdate::getRemovedExternalLinks() were introduced.
* (T213893) Added 'MaintenanceUpdateAddParams' hook
* (T219655) The MarkPatrolled hook has a new parameter for the tags
associated with this entry in the patrol log.
* (T212472) Extensions can now specify platform abilities they require to work,
limited to shell access for now.
=== External library changes in 1.33 ===
==== New external libraries ====
* Added wikimedia/password-blacklist 0.1.4.
* Added guzzlehttp/guzzle 6.3.3.
==== Changed external libraries ====
* Updated OOUI from v0.29.2 to v0.31.3.
* Updated OOjs Router from pre-release to v0.2.0.
* Updated moment from v2.19.3 to v2.24.0.
* Updated wikimedia/xmp-reader from 0.6.0 to 0.6.2.
* Updated wikimedia/scoped-callback from 2.0.0 to 3.0.0.
* Updated jquery-client from 2.0.1 to 2.0.2.
* Updated pear/net_smtp from 1.8.0 to 1.8.1.
* Updated cssjanus/cssjanus from 1.2.0 to 1.3.0.
* Updated wikimedia/php-session-serializer from 1.0.6 to 1.0.7.
==== Removed external libraries ====
* (T219403) jquery.ui.spinner, deprecated since 1.31, was removed.
=== Developer library changes in 1.33 ===
==== New developer libraries ====
* Added jakub-onderka/php-console-highlighter 0.3.2 explicitly (dev-only).
* Added mediawiki/mediawiki-phan-config 0.5.0 (dev-only).
==== Changed developer libraries ====
* Updated wikimedia/ip-set from 1.3.0 to 2.0.1.
* The deprecated IPSet\IPSet alias was removed, Wikimedia\IPSet must be
used instead.
* Updated psy/psysh from 0.9.6 to 0.9.9 (dev-only).
* Updated nikic/php-parser from 3.1.3 to 3.1.5 (dev-only).
* Updated mediawiki/mediawiki-codesniffer from 22.0.0 to 25.0.0 (dev-only).
* Updated qunitjs from 2.6.2 to 2.9.1.
==== Removed developer libraries ====
* The jetbrains/phpstorm-stubs repository was removed in favour of the minimal
stubs we need, which are kept in the new `.phan/internal_stubs` directory
(dev-only).
=== Bug fixes in 1.33 ===
* (T164211) Special:UserRights could sometimes fail with a
"conflict detected" error when there weren't any conflicts.
* (T216029) Chrome redirects to Special:BadTitle after editing a section with
a non-Latin name on a page with non-Latin characters in title.
* (T222385) resourceloader: Use AND instead of OR for upsert conds in
saveFileDependencies().
=== Action API changes in 1.33 ===
* (T198913) Added 'ApiOptions' hook.
* The JSON formatversion=2 is no longer experimental.
* Internal API errors (those with code beginning "internal_api_error") will
include the exception class name in a data field named "errorclass".
* Class names are not guaranteed to remain stable, and in particular database
exceptions will now include the "Wikimedia\Rdbms\" prefix in the class name.
* The code including an exception class name is deprecated. In the future,
all internal errors will use code "internal_api_error".
* (T212356) When using action=delete on pages with many revisions, the module
may return a boolean-true 'scheduled' and no 'logid'. This signifies that the
deletion will be processed via the job queue.
* action=setnotificationtimestamp will now update the watchlist asynchronously
if entirewatchlist is set, so updates may not be visible immediately
* Block info will be added to "blocked" errors from more modules.
* (T216245) Autoblocks will now be spread by action=edit and action=move.
* action=query&meta=userinfo has a new uiprop, 'latestcontrib', that returns
the date of user's latest contribution.
* (T25227) action=logout now requires to be posted and have a csrf token.
=== Action API internal changes in 1.33 ===
* A number of deprecated methods for API documentation, intended for overriding
by extensions, are no longer called by MediaWiki, and will emit deprecation
notices if your extension attempts to use them:
* ApiBase::getDescription() (deprecated in 1.25)
* ApiBase::getParamDescription() (deprecated in 1.25)
* ApiBase::getExamples() (deprecated in 1.25)
* ApiBase::getDescriptionMessage() (deprecated in 1.30)
Additionally, the 'APIGetDescription' and 'APIGetParamDescription' hooks have
been removed, as their only use was to let extensions override values returned
by getDescription() and getParamDescription(), respectively.
* API error codes may only contain ASCII letters, numbers, underscore, and
hyphen. Methods such as ApiBase::dieWithError() and
ApiMessageTrait::setApiCode() will throw an InvalidArgumentException if
passed a bad code.
* ApiBase::checkTitleUserPermissions() now takes an options array as its third
parameter. Passing a User object or null is deprecated.
* The api-feature-usage log channel now has log context. The text message is
deprecated and will be removed in the future.
=== Languages updated in 1.33 ===
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.
* (T203908) Added language support for Eastern Pwo (kjp).
* (T213717) Fixed a translation error on Goan Konkani (gom-deva) translations
for NS_TEMPLATE.
* (T212221) Added $digitTransformTable for Santali (sat).
* (T216479) Added language support for Saisiyat (xsy).
* (T219728) Added support for new Japanese era name "Reiwa"
=== Breaking changes in 1.33 ===
* The parameteter $lang in DifferenceEngine::setTextLanguage must be of type
Language. Other types are deprecated since 1.32.
* Skin::doEditSectionLink requires type Language for the parameter $lang.
The parameters $tooltip and $lang are mandatory. Omitting the parameters is
deprecated since 1.32.
* Language::truncate(), deprecated in 1.31, has been removed.
* UtfNormal, deprecated in 1.25, was removed. Use UtfNormal\Validator directly
instead.
* (T197179) In OOUI HTMLForm fields, the parameters 'notice', 'notice-messages',
and 'notice-message', which were deprecated in 1.32, were removed. Instead,
use 'help', 'help-message', and 'help-messages'.
* (T197179) HTMLFormField::getNotices(), deprecated in 1.32, was removed.
* The "Parsoid v1" compatibility mappings in ParsoidVirtualRESTService and
RestbaseVirtualRESTService, deprecated since 1.26, have been removed.
Use the RESTBase v1 or Parsoid v3 API instead.
* ParserOptions defaults 'tidy' to true now, since the untidy modes of the
parser are being deprecated and ParserOptions::getCanonicalOverrides()
has always been true at any rate.
* Support for disabling tidy and external tidy implementations has been removed.
This was deprecated in 1.32. The pure PHP Remex tidy implementation is now
used and no configuration is necessary.
* A number of deprecated methods for API documentation, intended for overriding
by extensions, are no longer called by MediaWiki, and will emit deprecation
notices if your extension attempts to use them:
* ApiBase::getDescription() (deprecated in 1.25)
* ApiBase::getParamDescription() (deprecated in 1.25)
* ApiBase::getExamples() (deprecated in 1.25)
* ApiBase::getDescriptionMessage() (deprecated in 1.30)
Additionally, the 'APIGetDescription' and 'APIGetParamDescription' hooks have
been removed, as their only use was to let extensions override values returned
by getDescription() and getParamDescription(), respectively.
* The authentication hooks 'AbortAutoAccount' 'AbortNewAccount', 'AbortLogin',
'LoginUserMigrated', 'UserCreateForm', and 'UserLoginForm', all deprecated by
the creation of AuthManager in 1.27, have been removed. This also means that
the FakeAuthTemplate and LoginForm classes are removed, that FakeAuthTemplate
is no longer passed into LoginSignupSpecialPage->getFieldDefinitions(), and
that LoginSignupSpecialPage->getBCFieldDefinitions() is removed.
* The 'jquery.localize' module, deprecated in 1.32, has been removed. Instead,
use 'jquery.i18n'.
* The hooks LanguageGetSpecialPageAliases and LanguageGetMagic, deprecated since
1.16, have now been removed. Instead, use $specialPageAliases or $magicWords
respectively in a $wgExtensionMessagesFiles file.
* The following methods of the Preferences class, deprecated in 1.31, have been
removed:
* getSaveBlacklist()
* loadPreferenceValues()
* getOptionFromUser()
* profilePreferences()
* skinPreferences()
* filesPreferences()
* datetimePreferences()
* renderingPreferences()
* editingPreferences()
* rcPreferences()
* watchlistPreferences()
* searchPreferences()
* miscPreferences()
* generateSkinOptions()
* getDateOptions()
* getImageSizes()
* getThumbSizes()
* validateSignature()
* cleanSignature()
* getTimezoneOptions()
* filterIntval()
* filterTimezoneInput()
* getTimeZoneList()
* mw.util.jsMessage(), deprecated in 1.20, was removed. Use mw.notify instead.
* (T61113) User::EDIT_TOKEN_SUFFIX was removed. It was deprecated since 1.27.
* The 'mediawiki.api' module aliases, deprecated in 1.32, have been removed.
Specifically: mediawiki.api.category, mediawiki.api.edit,
mediawiki.api.login, mediawiki.api.options, mediawiki.api.parse,
mediawiki.api.upload, mediawiki.api.user, mediawiki.api.watch,
mediawiki.api.messages, and mediawiki.api.rollback.
* The 'jquery.byteLimit' module alias for 'jquery.lengthLimit',
deprecated in 1.31, was removed.
* Revision::fetchRevision(), deprecated in 1.28, was removed.
* Class SquidUpdate, deprecated in 1.27, was removed.
* Title->getSquidURLs(), deprecated in 1.27, was removed. Instead, use
Title->getCdnUrls().
* Title::escapeFragmentForURL(), deprecated in 1.30, was removed. Use
Sanitizer::escapeIdForLink() or escapeIdForExternalInterwiki() instead.
* Title->canTalk(), deprecated in 1.30, was removed. Instead, use
Title->canHaveTalkPage().
* Title's methods for site and user page related to CSS and JS, deprecated in
1.31, were removed:
* Title->isCssOrJsPage() — Use Title->isSiteConfigPage()
* Title->isCssJsSubpage() – Use Title->isUserConfigPage()
* Title->getSkinFromCssJsSubpage() – Use Title->getSkinFromConfigSubpage()
* Title->isCssSubpage() – Use Title->isUserCssConfigPage()
* Title->isJsSubpage() – Use Title->isUserJsConfigPage()
* SiteSQLStore, deprecated in 1.27 and whose only method, ::newInstance(),
would return the global SiteStore instance, has been removed. You can get to
this via MediaWiki\MediaWikiServices::getInstance()->getSiteStore() directly.
* Linker::formatSize, deprecated in 1.28, has been removed (with DummyLinker's).
Instead, use Language->formatSize() with the relevant Language object.
* Linker::formatTemplates, deprecated in 1.28, has been removed (along with the
version in DummyLinker). You can use TemplatesOnThisPageFormatter directly.
* EventRelayerGroup::singleton(), deprecated in 1.27, has been removed. You can
use MediaWikiServices::getInstance()->getEventRelayerGroup() directly.
* LinkCache->addLink(), deprecated in 1.27, has been removed. It is thought to
be unused, and is distinct from OutputPage->addLink(), which remains.
* JsonContent->getJsonData(), deprecated in 1.25, has been removed. Instead, use
JsonContent->getData().
* MWExceptionHandler::getLogId(), deprecated in 1.27, has been removed, as the
exception ID is the same as the request ID, from WebRequest::getRequestId().
* SearchEngine::getNearMatchResultSet(), deprecated in 1.27, has been removed.
You can use SearchEngine::getNearMatcher() instead.
* EmailNotification::updateWatchlistTimestamp, deprecated in 1.27, has been
removed. Instead, use WatchedItemStore::updateNotificationTimestamp directly.
* User::getGroupName() and ::getGroupMember(), both deprecated in 1.29, have
been removed. Instead, please use UserGroupMembership::getGroupName() and
UserGroupMembership::getGroupMemberName().
* Backwards compatibility for setting wgSessionsInObjectCache to false or using
wgSessionHandler, both of which were deprecated in 1.27 with the introduction
of SessionManager, has been removed.
* SessionManager::autoCreateUser, deprecated in 1.27, has been removed. Use
MediaWiki\Auth\AuthManager::autoCreateUser instead.
* The mw.libs.jpegmeta property, deprecated in 1.31, was removed.
Use require( 'mediawiki.libs.jpegmeta' ) instead.
* The mw.user.stickyRandomId() method, deprecated in 1.32, was removed.
Use mw.user.getPageviewToken() instead.
* Removed deprecated class property WikiRevision::$importer.
* ResourceLoaderFileModule::readStyleFiles() now requires its $context
parameter.
* The ChangeList::insertArticleLink() method, that was deprecated in 1.27, has
been removed.
* MessageBlobStore::__construct() now requires its $rl parameter.
* Second parameter to Sanitizer::escapeIdReferenceList() (deprecated in 1.31)
has been removed.
* The 'jquery.xmldom' module has been removed.
* The 'jquery.mockjax' module has been removed.
* The 'jquery.hidpi' module, deprecated in 1.32, has been removed.
* AuthPlugin and related code, deprecated in 1.27, has been removed. Extensions
should instead use AuthManager. The following no longer exist:
* The AuthPlugin class itself and the related AuthPluginUser class and i18n
* The AuthPluginSetup and AuthPluginAutoCreate hooks
* The transitional wrapper classes AuthPluginPrimaryAuthenticationProvider,
AuthManagerAuthPlugin, and AuthManagerAuthPluginUser.
* The $wgAuth configuration setting and its use in Setup.php and unit tests
* (T217772) The 'wgAvailableSkins' mw.config key in JavaScript, was removed.
* Language::markNoConversion, deprecated in 1.32, has been removed. Use
LanguageConverter::markNoConversion instead.
* BagOStuff::modifySimpleRelayEvent() method has been removed.
* ParserOutput::getLegacyOptions, deprecated in 1.30, has been removed.
Use ParserOutput::allCacheVaryingOptions instead.
* CdnCacheUpdate::newSimplePurge, deprecated in 1.27, has been removed.
Use CdnCacheUpdate::newFromTitles() instead.
* Handling of multiple arguments by the Block constructor, deprecated in 1.26,
has been removed.
* The translation of main page in Sardinian (sc) was changed from "Pàgina Base"
to "Pàgina printzipale". Existing wikis using this content language need to
move the main page or change the name through MediaWiki:Mainpage page.
* wfSplitWikiID(), deprecated in 1.32, has been removed.
* MessageBlobStore::getBlob(), deprecated in 1.27, has been removed.
Use ::getBlobs() instead.
* The .background-size() LESS mixin, deprecated in 1.27, has been removed.
* ReadOnlyMode::clearCache() and ConfiguredReadOnlyMode::clearCache() have been
removed. Use MediaWikiTestCase::overrideMwServices() instead.
* Support for the 'aggregator' option of JobQueue (and thus $wgJobTypeConf) was
removed. The JobQueueAggregator interface and JobQueueAggregatorRedis class
have also been removed. They were experimentally developed for use by the
Wikimedia Foundation, but were never used, with no known use cases. (Note that
this does not affect JobQueueRedis which is still supported.)
=== Deprecations in 1.33 ===
* The configuration option $wgUseESI has been deprecated, and is expected
to be removed in a future release.
* The configuration option $wgSquidPurgeUseHostHeader has been deprecated,
and is expected to be removed in a future release.
* The configuration options $wgFixArabicUnicode and $wgFixMalayalamUnicode,
introduced in MW 1.17, have been deprecated. These fixes will always be
applied for Arabic and Malayalam in the future. Please enable these on
your local wiki (if you have them explicitly set to false) and run
maintenance/cleanupTitles.php to fix any existing page titles.
* The LegacyHookPreAuthenticationProvider class, deprecated since its creation
in 1.27 as part of the AuthManager re-write, now emits deprecation warnings.
This will help identify the issue if you added it to $wgAuthManagerConfig.
* wfSplitWikiId() is now deprecated. Cache key generation should have the wiki
domain ID as a key component and use makeGlobalKey().
* (T202094) Title::getUserCaseDBKey() is deprecated; instead, please use
Title::getDBkey(), which doesn't vary case.
* User::getPasswordValidity() is now deprecated. User::checkPasswordValidity()
returns the same information in a more useful format.
* For Linker::generateTOC() and Linker::tocList(), passing strings or booleans
as the $lang parameter was deprecated. The same applies to DummyLinker.
* The PasswordPolicy 'PasswordCannotBePopular' has been deprecated. To
follow best practices, it is reccommended to use 'PasswordNotInLargeBlacklist'
instead which blacklists 100,000 commonly used passwords.
* (T208862) Action::requiresUnblock() is now called from
Title::getUserPermissionsErrors() and Title::userCan(). Previously, the method
was only called in Action::checkCanExecute(). Actions should ensure that their
requiresUnblock() returns the proper result (the default is `true`).
* (T211608) The MediaWiki\Services namespace has been renamed to
Wikimedia\Services. The old name is still supported, but deprecated.
* (T155582) Content::getNativeData has been deprecated. Please use model-
specific getters, such as TextContent::getText().
* The class WebInstallerOutput is now marked as @private.
* (T209699) The jquery.async module has been deprecated. JavaScript code that
needs asynchronous behaviour should use Promises.
* Password::equals() is deprecated, use verify().
* BaseTemplate::msgWiki() and QuickTemplate::msgWiki() will be removed. Use
other means to fetch a properly escaped message string or Message object.
* (T126091) The 'ResourceLoaderTestModules' hook, which lets you declare QUnit
testing code for your JavaScript modules, is deprecated. Instead, you can now
use the new extension registration key 'QUnitTestModule'.
* (T213426) The jquery.throttle-debounce module has been deprecated. JavaScript
code that needs this behaviour should use OO.ui.debounce/throttle.
* The mw.language.specialCharacters property from the
'mediawiki.language.specialCharacters' module has been deprecated.
Use require( 'mediawiki.language.specialCharacters' ) instead.
* ChangeTags::purgeTagUsageCache() has been deprecated, and is expected to be
removed in a future release.
* Passing a User object or null as the third parameter to
ApiBase::checkTitleUserPermissions() has been deprecated. Pass an array
[ 'user' => $user ] instead.
* (T211578) Block::prevents is deprecated. Use Block::isEmailBlocked,
Block::isCreateAccountBlocked and Block::isUsertalkEditAllowed to get and set
block properties; use Block::appliesToRight and Block::appliesToUsertalk to
check block behaviour.
* The api-feature-usage log channel now has log context. The text message is
deprecated and will be removed in the future.
* The FileBasedSiteLookup class has been deprecated. For a cacheable SiteLookup
implementation, use CachingSiteStore instead.
* Language::viewPrevNext function is deprecated, use
SpecialPage::buildPrevNextNavigation instead
* ManualLogEntry::setTags() is deprecated, use ManualLogEntry::addTags()
instead. The setTags() method was overriding the tags, addTags() doesn't
override, only adds new tags.
* Block::isValid is deprecated, since it is no longer needed in core.
* Calling Maintenance::hasArg() as well as Maintenance::getArg() with no
parameter has been deprecated. Please pass the argument number 0.
* ResourceLoaderContext::expandModuleNames has been deprecated.
Use ResourceLoader::expandModuleNames instead.
=== Other changes in 1.33 ===
* (T201747) Html::openElement() warns if given an element name with a space
in it.
* The implementation of buildStringCast() in Wikimedia\Rdbms\Database has
changed to explicitly cast. Subclasses relying on the base-class
implementation should check whether they need to override it now.
* BagOStuff::add is now abstract and must explicitly be defined in subclasses.
* LinksDeletionUpdate is now a subclass of LinksUpdate. As a consequence,
the following hooks will now be triggered upon page deletion in addition
to page updates: LinksUpdateConstructed, LinksUpdate, LinksUpdateComplete.
LinksUpdateAfterInsert is not triggered since deletions do not cause
insertions into links tables.
* Category::newFromID( $id )->getID() will now return $id without any
validation, to avoid a mostly unnecessary DB query.
* On Special:Version, the name for an extension can no longer be arbitrary
html when no link is specified.
= MediaWiki 1.32 =
== MediaWiki 1.32.6 ==
This is a security and maintenance release of the MediaWiki 1.32 branch.
=== Changes since MediaWiki 1.32.5 ===
* (T236628) Fix for ArticleRevisionViewCustom hook in DifferenceEngine.php.
* (T181658) Do not insert page titles into querycache.qc_value.
* (T206013) Suppress errors when reading invalid XML file properties.
* (T237931) Remove references to pg_attrdef.adsrc in Postgres code.
* Use correct value for 'sslmode' in DatabasePostgres.
* (T232866) Fix support for HTTP/2 in MultiHttpClient.
* (T227461) Stop calling deprecated Redis delete functions.
* (T239561) Mark options as requiring parameters in addSite.php.
* (T239734) Replace deprecated lSize with lLen in Redis code.
* (T192134) SECURITY: Do not allow user scripts on Special:PasswordReset.
* (T239428) ApiEditPage: Test for bad redirect targets.
* (T233342) rdbms: Log debug message traces as 'exception.trace' instead of
'trace'.
* (T226751) media: Log and fail gracefully on invalid EXIF coordinates.
* (T212067) SECURITY: Work around PHP bug in parse_url.
== MediaWiki 1.32.5 ==
This is a maintenance release of the MediaWiki 1.32 branch.
=== Changes since MediaWiki 1.32.4 ===
* Compute sha1 and length if needed in maintenance/populateContentTables.php.
* Fix extra newlines in the installer.
* Followup T230402, PermissionManager doesn't exist until 1.33, so fix the
backported patches to use User::isAllowed() instead.
== MediaWiki 1.32.4 ==
This is a security and maintenance release of the MediaWiki 1.32 branch.
=== Changes since MediaWiki 1.32.3 ===
* (T207100) Updated LanguageTr for dotted and dotless I in PHP 7.3.
* The ImgAuthModifyHeaders hook was added to img_auth.php to allow modification
of headers in private wikis.
* (T230402) SECURITY: Add permission check for suppressed account to
Special:Redirect.
* (T208897) MessageCache: Restore 'loadedLanguages' tracking for load().
* (T200088) Remove title protection correctly for undeletions and imports.
* Add helper for HTTPFileStreamer header syntax.
* (T118799) Fix XMP parser errors due to trailing nullchar.
* (T233119) Improve documentation for the MinimumPasswordLengthToLogin policy.
* Cache redirects from Special:Redirect.
* (T231386) dispatchUser() should use a 302 http status code.
* (T227662) Split down patch-comment-table.sql and patch-actor-table.sql into
separate files to help allieviate potential migration problems.
* Make SQLite's patch-add-3d.sql a no-op to prevent clobbering other database
updates.
== MediaWiki 1.32.3 ==
This is a maintenance release of the MediaWiki 1.32 branch.
=== Changes since MediaWiki 1.32.2 ===
* (T225558) Update installer link to PHP intl.
* (T225496) Detect APC for MainCacheType in CLI installer.
* (T226766) Remove jetbrains/phpstorm-stubs from composer dev dependencies.
* (T202211) Fix SQLite patch-(image|page|template)links-fix-pk.sql column order.
== MediaWiki 1.32.2 ==
This is a security and maintenance release of the MediaWiki 1.32 branch.
=== Changes since MediaWiki 1.32.1 ===
* (T204423) Backport support for hyphenated DB names in JobQueueGroup.
* (T216968) Return pageid as int in both list=iwbacklinks and
list=langbacklinks.
* (T215169) Fix for Database::update() with IGNORE option fails on PostgreSQL.
* (T199474) Fix typo in rebuildrecentchanges.php resulting in rogue flags.
* (T218608) SECURITY: Fix an issue that prevents Extension:OAuth working when
$wgBlockDisablesLogin is true.
* (T216029) Chrome redirects to Special:BadTitle after editing a section with
a non-Latin name on a page with non-Latin characters in title.
* Unbreak language related maintenance scripts that use StaticArrayWriter.
* (T219728) Added support for new Japanese era name "Reiwa".
* (T25227) SECURITY: action=logout now requires to be posted and have a csrf
token.
* Updated cssjanus/cssjanus from 1.2.0 to 1.3.0.
* (T221045) Remove orphaned code from ConfigRepository.
* (T222385) resourceloader: Use AND instead of OR for upsert conds in
saveFileDependencies().
* (T224374) Fix message parameters so that the message that says SQLite is
out of date makes sense.
* (T200471) Prevent LBFactorySimple breaking ExternalStorage, when trying to
connect to external server with local database name.
* (T197279) SECURITY: Fix reauth in Special:ChangeEmail.
* (T208881) SECURITY: blacklist CSS var().
* (T209794) SECURITY: rate-limit and prevent blocked users from changing email.
* (T199540) SECURITY: API: Respect $wgBlockCIDRLimit in action=block.
* (T212118) SECURITY: Fix cache mode for (un)patrolled recent changes query.
* (T222036, T222038) SECURITY: Add permission check for user is permitted to
view the log type.
* (T221739) SECURITY: resources: Patch jQuery 3.3.1 for CVE-2019-11358.
== MediaWiki 1.32.1 ==
=== Changes since MediaWiki 1.32.0 ===
* (T213577) rdbms: avoid transaction status errors from ping() in rollback().
* rdbms: Pass required parameter.
* rdbms: do not treat SAVEPOINT and RELEASE SAVEPOINT as write queries.
* (T204531) rdbms: reduce LoadBalancer replication log spam.
* (T213489) Avoid session double-start in Setup.php.
* (T213717) Correct namespace 'Template' for gom-deva
* (T198054) Fix login page crash caused by unknown language via ?uselang
* (T215324) (T210937) list=users mistakenly reports user as missing.
* (T209483) Add ILBFactory::redefineLocalDomain method. This is intended for
use with scripts like addWiki.php to avoid mismatched domain errors.
* (T208871) The hard-coded Google search form on the database error page was
removed.
* (T204800) Fix Title::getFragmentForURL for bad interwiki prefix
* (T215566) Fix installer being unable to determine if the database exists
during a fresh installation.
== MediaWiki 1.32.0 ==
=== Changes since MediaWiki 1.32.0-rc.2 ===
* (T188327) Fix slow queries in migrateActors.php.
* (T102320) Fix $magicWords for the Sanskrit language.
=== Changes since MediaWiki 1.32.0-rc.1 ===
* Fix addition of ug_expiry column to user_groups table on MSSQL.
* (T210307) Fix the cache timestamp for forced updates.
* (T210621) User: Bypass repeatable-read when creating an actor_id.
* (T197535) Extensions can now specify PHP versions and PHP extensions they
depend on.
* Updated wikimedia/ip-set from v1.2.0 to v1.3.0.
* (T212356) When using action=delete on pages with many revisions, the module
may return a boolean-true 'scheduled' and no 'logid'. This signifies that the
deletion will be processed via the job queue.
* (T64103) Dropped columns category.cat_hidden, site_stats.ss_admins, and
recentchanges.rc_cur_time from the PostgreSQL schema.
=== Changes since MediaWiki 1.32.0-rc.0 ===
* (T209885) Prevent populateSearchIndex.php from breaking once actor migration
has been started.
* (T210998) Properly set $wgLanguageCode in the generated LocalSettings.php
if --lang is used with the command-line installer (install.php).
=== Configuration changes in 1.32 ===
==== New configuration ====
* $wgJpegQuality – The quality of JPEG thumbnails is now configurable through
this setting. The default is 80, which matches the quality of JPEG thumbnails
previously generated by ImageMagick. The quality of JPEG thumbnails generated
by GD was previously 95, but now uses the $wgJpegQuality setting as well.
* $wgCookieSetOnIpBlock - This determines whether to set a cookie when an IP
user is blocked. Doing so means that a blocked user, even after moving to a
new IP address, will still be blocked.
* $wgRawHtmlMessages – This new configuration setting is added for listing
messages which are displayed as raw HTML.
* $wgCSPHeader and $wgCSPReportOnlyHeader – You can now define a
"Content Security Policy" for your wiki. This adds a defense-in-depth feature
to stop an attacker who has found a bug in the parser allowing them to insert
malicious attributes. Disabled by default. (T135963)
* $wgGroupPermissions – A new user group, 'interface-admin', is added for
controlling access to sitewide CSS/JS (and editing other users' CSS/JS). No
other group has 'editsitecss', 'editusercss', 'editsitejs' or 'edituserjs'
by default.
* $wgGrantPermissions – A new grant group, 'editsiteconfig', is added for
granting the above rights.
* $wgDBDefaultGroup – A default database group for use by maintenance scripts.
* $wgResourceLoaderEnableJSProfiler – This new configuration setting lets you
enable client-side profiling of JavaScript modules; it is off by default.
* (T193868) $wgChangeTagsSchemaMigrationStage — This temporary configuration
setting allows sysadmins to gradually migrate the database table schema for
how change tags are stored.
* (T199334) $wgTagStatisticsNewTable — This temporary configuration setting
allows sysadmins to enable the caching of Special:Tags via the new
change_tag_def table.
==== Changed configuration ====
* $wgUseAjax – This setting, deprecated in 1.31, is now ignored.
* $wgDefaultUserOptions – The default watchlist view time (watchlistdays) has
been increased from 3 to 7 days. (T194414)
* $wgGroupPermissions – The right to edit sitewide Javascript
(e.g. MediaWiki:Common.js), CSS or JSON was separated from 'editinterface'
and is available under 'editsitejs'/'editsitecss'/'editsitejson'. Having
'editinterface' is still necessary to edit such pages.
* $wgMultiContentRevisionSchemaMigrationStage now defaults to writing both the
old and the new schema, but reading the new schema, so Multi-Content Revisions
(MCR) are now functional per default. The new default value of the setting is
SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW.
* $wgActorTableSchemaMigrationStage no longer accepts MIGRATION_WRITE_BOTH or
MIGRATION_WRITE_NEW. It instead uses SCHEMA_COMPAT_WRITE_BOTH |
SCHEMA_COMPAT_READ_OLD and SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW
for intermediate stages of migration.
* $wgDBTableOptions – The default table options now use the binary charset. The
default was already overridden in the installer-generated LocalSettings.php,
and so is always set to binary after the installer UI option was removed. The
default value is only used when the installer installs an extension.
* $wgPopularPasswordFile — The location of the default popular passwords file
has been moved to be in line with other non-PHP files used by libraries and
classes.
* $wgEnableImageWhitelist is now disabled by default, as it opens up a hole for
potential privacy leaks by administrators. You can check
"MediaWiki:External image whitelist" on your wiki to see whether the feature
was ever used, and whether it needs to be re-enabled.
==== Removed configuration ====
* $wgEnableAPI and $wgEnableWriteAPI – These settings, deprecated in 1.31,
have been removed. (T115414)
* $wgSiteSupportPage – This setting, unused since 1.5, was removed.
* $wgBrowserBlacklist – This setting, deprecated in 1.30, was removed.
* $wgExperimentalHtmlIds – This setting, deprecated since 1.30, was removed.
The 'html5-legacy' value for $wgFragmentMode is no longer accepted.
* $wgPasswordSenderName - This setting, ignored since 1.23 by MediaWiki and
most extensions, is no longer set. Instead, you can modify the system
message `emailsender`.
* $wgTidyConfig – The experimental Html5Internal and Html5Depurate tidy drivers
were removed. RemexHtml, which is the default, should be used instead.
* (T181318) The $wgStyleVersion setting and its appendage to various script and
style URLs in OutputPage, deprecated in 1.31, was removed.
* (T140807) The wgResourceLoaderLESSImportPaths configuration option was removed
from ResourceLoader. Instead, use `@import` statements in LESS to import
files directly from nearby directories within the same project.
* (T140804) The wgResourceLoaderLESSVars configuration option, deprecated
since 1.30, was removed. Instead, to expose variables from PHP to LESS, use
the ResourceLoaderModule::getLessVars() method.
* $wgResourceLoaderValidateStaticJS – This setting, unused since MediaWiki 1.18,
was removed.
* Two temporary variables for deploying the feature of filters on change lists,
$wgStructuredChangeFiltersShowPreference introduced in MediaWiki 1.30 and
$wgStructuredChangeFiltersOnWatchlist in 1.31, were removed.
=== New features in 1.32 ===
* (T112474) Generalized the ResourceLoader mechanism for overriding modules
using a particular page during edit previews.
* (T12331) You can now log page creation events by setting $wgPageCreationLog
to true.
* Added 'ApiParseMakeOutputPage' hook.
* (T174313) Added checkbox on Special:ListUsers to display only users in
temporary user groups.
* (T152462) A cookie can now be set when an IP user is blocked to track that
user if they move to a new IP address. This is disabled by default.
* (T194950) Added 'ApiMaxLagInfo' hook.
* SpecialPage::checkLoginSecurityLevel() will now preserve POST data when
reauthenticating.
* FormSpecialPage::execute() will now call checkLoginSecurityLevel() if
getLoginSecurityLevel() returns non-false.
* The 'ImageBeforeProduceHTML' hook is now passed three new parameters, $parser,
&$query and &$widthOption, allowing extensions even finer control over the
resulting HTML code.
* Added new 'ArticleShowPatrolFooter' hook, which allows extensions to determine
if the [mark as patrolled] link should be shown at the footer of patrollable
pages.
* The array of hidden options ($opts) passed to the 'SpecialSearchPowerBox' hook
is now passed by reference, allowing extensions to modify or even unset it.
* Added new 'OutputPageAfterGetHeadLinksArray' hook, allowing extensions to
modify the return value of OutputPage#getHeadLinksArray in order to add,
remove or otherwise alter the elements to be output in the page .
* (T28934) The 'HistoryPageToolLinks' hook allows extensions to append
additional links to the subtitle of a history page.
* The 'GetLinkColours' hook now receives an additional $title parameter,
the Title object of the page being parsed, on which the links will be shown.
* (T194731) DifferenceEngine supports multiple slots. Added SlotDiffRenderer to
render diffs between two Content objects, and DifferenceEngine::setRevisions()
to render diffs between two custom (potentially multi-content) revisions.
Added GetSlotDiffRenderer hook which works like GetDifferenceEngine for slots.
* Added a temporary action=mcrundo to the web UI, as the normal undo logic
can't yet handle MCR and deadlines are forcing is to put off fixing that.
This action should be considered deprecated and should not be used directly.
* Extensions overriding ContentHandler::getUndoContent() will need to be
updated for the changed method signature.
* Added a new hook, 'UserGetRightsRemove', which can be used to remove rights
from user. Unlike the 'UserGetRights' it will ensure that removed rights
will not be reinserted.
* (T197535) Extensions can now specify PHP versions and PHP extensions they
depend on.
=== External library changes in 1.32 ===
==== New external libraries ====
* Added pear/Net_SMTP v1.8.0.
* Added wikimedia/xmp-reader v0.6.0.
* Added cache/integration-tests v0.16.0 (dev-only).
* Added giorgiosironi/eris v0.10.0 (dev-only).
* Added seld/jsonlint v1.7.1 (dev-only).
* Added EasyDeflate (unversioned).
==== Changed external libraries ====
* Updated OOUI from v0.26.3 to v0.29.2.
* Updated wikimedia/base-convert from v1.0.1 to v2.0.0.
* Updated wikimedia/remex-html from v1.0.3 to v2.0.1.
* Updated wikimedia/scoped-callback from v1.0.0 to v2.0.0.
** ScopedCallback objects can no longer be serialized.
* Updated wikimedia/timestamp from v1.0.0 to v2.2.0.
* Updated wikimedia/wrappedstring from v2.3.0 to v3.0.1.
* oyejorge/less.php replaced with our fork wikimedia/less.php
* Updated wikimedia/ip-set from v1.2.0 to v1.3.0.
* Updated composer/spdx-licenses from v1.3.0 to v1.4.0 (dev-only).
* Updated mediawiki/mediawiki-codesniffer from v18.0.0 to v22.0.0 (dev-only).
* Updated psy/psysh from v0.8.11 to v0.9.6 (dev-only).
* Updated CLDRPluralRuleParser from v0.1.0 to v1.3.2-pre.
* Updated jquery from v3.2.1 to v3.3.1.
* Updated jquery.client from v2.0.0 to v2.0.1.
* Updated jquery.i18n from v1.0.4 to v1.0.5.
* Updated mustache.js from v0.8.2-d9aa703 to v1.0.0.
* Updated OOjs from v2.2.0 to v2.2.2.
* Updated qunitjs from v2.4.0 to v2.6.2.
* Updated sinonjs from v1.17.3 to v1.17.7.
==== Removed external libraries ====
* pear/mail_mime-decode was removed.
=== Bug fixes in 1.32 ===
* SpecialPage::execute() will now only call checkLoginSecurityLevel() if
getLoginSecurityLevel() returns non-false.
* (T43720, T46197) Improved page display title handling for category pages
* (T65080) Fixed resetting options of some types via API action=options.
=== Action API changes in 1.32 ===
* Added templated parameters.
* A module can define a templated parameter like "{fruit}-quantity", where
the actual parameters recognized correspond to the values of a multi-valued
parameter. Then clients can make requests like
"fruits=apples|bananas&apples-quantity=1&bananas-quantity=5".
* action=paraminfo will return templated parameter definitions separately
from normal parameters. All parameter definitions now include an "index"
key to allow clients to maintain parameter ordering when merging normal and
templated parameters.
* It is now an error to submit too many values for a multi-valued parameter.
This has generated a warning since MediaWiki 1.14.
* Assertion failures from the 'assert' and 'assertuser' parameters will no
longer use the action module's custom response format, for the few modules
that use custom formatters that handle errors.
* (T198935) User list preferences such as `email-blacklist` and similar
extension preferences are no longer represented as arrays when returned by
action=query&meta=userinfo&uiprop=options.
* 'missingparam' errors will now use the prefixed parameter name in the code
and error text, e.g. "noxxfoo" and "The 'xxfoo' parameter must be set" rather
than "nofoo" and "The 'foo' parameter must be set".
* action=query&prop=revisions now takes a 'rvslots' parameter to indicate the
multi-content revision slots for which content should be returned. It also
has a new rvprop, 'roles', to indicate which roles have slots. A deprecation
warning will be issued if rvprop=content or rvprop=contentmodel are used
without rvslots.
* The rvcontentformat parameter to action=query&prop=revisions has been
deprecated. Clients should be prepared to deal with the default format for
relevant models.
* Use of the deprecated parameters rvexpandtemplates, rvgeneratexml, rvparse,
rvdiffto, rvdifftotext, rvdifftotextpst, rvcontentformat, or the deprecated
rvprop=parsetree is forbidden with the new 'rvslots' parameter.
* action=query&prop=deletedrevisions, action=query&list=allrevisions, and
action=query&list=alldeletedrevisions are changed similarly to
&prop=revisions (see the three previous items).
* (T174032) action=compare now supports multi-content revisions.
* It has a 'slots' parameter to select diffing of individual slots. The
default behavior is to return one combined diff.
* The 'fromtext', 'fromsection', 'fromcontentmodel', 'fromcontentformat',
'totext', 'tosection', 'tocontentmodel', and 'tocontentformat' parameters
are deprecated. Specify the new 'fromslots' and 'toslots' to identify which
slots have text supplied and the corresponding templated parameters for
each slot.
* The behavior of 'fromsection' and 'tosection' of extracting one section's
content is not being preserved. 'fromsection-{slot}' and 'tosection-{slot}'
instead expand the given text as if for a section edit. This effectively
declines T183823 in favor of T185723.
* (T198214) The 'disabletidy' parameter to action=parse has been
deprecated; untidy output will not be supported by future wikitext
parsers.
* Added intestactionsdetail to action=query&prop=info to allow retrieving the
reasons an action is not allowed.
* Deprecated action=query&prop=info inprop=readable in favor of
intestactions=read.
* (T212356) When using action=delete on pages with many revisions, the module
may return a boolean-true 'scheduled' and no 'logid'. This signifies that the
deletion will be processed via the job queue.
=== Action API internal changes in 1.32 ===
* Added 'ApiParseMakeOutputPage' hook.
* Parameter names may no longer contain '{' or '}', as these are now used for
templated parameters.
* (T194950) Added 'ApiMaxLagInfo' hook.
* The following methods now take a RevisionRecord rather than a Revision. No
external callers are known.
* ApiFeedContributions::feedItemAuthor()
* ApiFeedContributions::feedItemDesc()
* ApiQueryRevisionsBase::extractRevisionInfo()
* The following deprecated methods have been removed:
* ApiBase::profileIn() (deprecated in 1.25)
* ApiBase::profileOut() (deprecated in 1.25)
* ApiBase::safeProfileOut() (deprecated in 1.25)
* ApiBase::profileDBIn() (deprecated in 1.25)
* ApiBase::profileDBOut() (deprecated in 1.25)
* ApiBase::dieUsage() (deprecated in 1.29)
* ApiBase::dieUsageMsg() (deprecated in 1.29)
* ApiBase::dieUsageMsgOrDebug() (deprecated in 1.29)
* ApiBase::getErrorFromStatus() (deprecated in 1.29)
* ApiBase::parseMsg() (deprecated in 1.29)
* ApiBase::setWarning() (deprecated in 1.29)
* ApiPageSet::getInvalidTitles() (deprecated in 1.26)
* ApiQueryLogEvents::addLogParams() (deprecated in 1.25)
* ApiUsageException::getCodeString() (deprecated in 1.29)
* ApiUsageException::getMessageArray() (deprecated in 1.29)
* Class UsageException, deprecated in 1.29, has been removed.
* ApiErrorFormatter: Added getFormat() and newWithFormat(). In particular, you
can now easily test $formatter->getFormat() === 'bc', and then call
$formatter->newWithFormat( 'plaintext' ) to get a non-BC formatter.
=== Languages updated in 1.32 ===
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.
* (T193566) Added language support for Ambonese Malay (abs).
* (T194047) Added language support for Shawiya, Latin script (shy-latn).
* (T195940) Added language support for Batak Mandailing (btm).
* (T137491) Added language support for Standard Moroccan Amazigh (zgh).
* (T198132) Added language support for Manipuri (mni).
* (T201276) Added language support for Western Armenian (hyw).
* (T201583) Added language support for Mon (mnw).
=== Breaking changes in 1.32 ===
* $wgRequestTime, deprecated in 1.25, was removed. Use
$_SERVER['REQUEST_TIME_FLOAT'] or WebRequest::getElapsedTime() instead.
* The MediaWikiI18N class, deprecated in 1.31, was removed.
* QuickTemplate::setTranslator(), deprecated in 1.31, was removed. Use
Skin::msg() instead.
* wfInitShellLocale(), deprecated in 1.30, was removed.
* wfShellExecDisabled(), deprecated in 1.30, was removed.
* The type string for the parameter $lang of DateFormatter::getInstance,
deprecated in 1.31, was removed.
* The EDIT_TOKEN_SUFFIX constant deprecated in 1.27, was removed. Use
MediaWiki\Session\Token::SUFFIX instead.
* EditPage::isOouiEnabled() deprecated in 1.30, was removed.
* mw.util.wikiGetlink(), deprecated in 1.23, was removed. Use mw.util.getUrl()
instead.
* (T61113) The following methods and constants from the Revision class, which
were deprecated in 1.25, have now been removed:
* Revision::getRawUser()
* Revision::getRawUserText()
* Revision::getRawComment()
* window.gM() from mediawiki.jqueryMsg, deprecated in 1.23, was removed. Use
mw.msg() or mw.message() instead.
* mw.util.escapeId(), deprecated in 1.30, was removed. Use
mw.util.escapeIdForAttribute or mw.util.escapeIdForLink instead.
* mw.util.updateTooltipAccessKeys(), deprecated in 1.24, was removed. Use
jquery.accessKeyLabel instead.
* The SqlDataUpdate class, deprecated in 1.28, has been removed.
* The Html5Internal and Html5Depurate tidy driver classes were removed, along
with the Balancer tidy implementation. Both implementations were experimental,
and were replaced by RemexHtml.
* (T179624) Job::insert() and ::batchInsert(), deprecated in 1.21, were both
removed. Use JobQueueGroup::singleton()->push() instead.
* The jquery.footHovzer module, for mediawiki.debug, was removed.
* The es5-shim module, empty and deprecated since 1.29, was removed.
* the dom-level2-shim module, empty and deprecated since 1.29, was removed.
* the json module, empty and deprecated since 1.29, was removed.
* The mediawiki.widgets.visibleByteLimit module alias, deprecated in 1.32, was
removed. Use mediawiki.widgets.visibleLengthLimit instead.
* The jquery.farbtastic module, unused since 1.18, was removed.
* The 'jquery.expandableField' module, unused since 1.22, was removed.
* The hooks 'PreferencesFormPreSave' and 'PreferencesGetLegend' may provide
any HTMLForm object rather than PreferencesForm.
* The non namespaced TimestampException class, deprecated in 1.29, was removed.
Use Wikimedia\Timestamp\TimestampException instead.
* The global functions codepointToUtf8, hexSequenceToUtf8, utf8ToHexSequence,
utf8ToCodepoint, and escapeSingleString (deprecated in 1.25) were removed.
The UtfNormal\Utils class from the utfnormal library should be used instead.
* The deprecated UTF8_ and UNICODE_ constants were removed. The class constants
from the UtfNormal\Constants class from the utfnormal library should be used
* The protected methods PHPSessionHandler::returnSuccess() and returnFailure(),
only needed for PHP5 compatibility, have been removed. It now uses the boolean
values `true` and `false` respectively.
* The $parserMemc global and wfGetParserCacheStorage(), deprecated since 1.30,
were removed. Use the ParserCache class instead.
* ScopedCallback (deprecated in 1.28) was removed. Use Wikimedia\ScopedCallback
instead.
* Support for ResourceLoaderModule::getModifiedTime() and getModifiedHash(),
deprecated since 1.26, was removed. Use getDefinitionSummary() instead.
* (T195256) Skins are recommended not to rely on JavaScript for the "mw-jump"
and "jump-to-nav" accessibility links. To this end, the "jquery.mw-jump"
is no longer loaded by default. The Vector and MonoBook skins have made a
minor change to implement the toggle feature with CSS instead. To restore
prior functionality, either explicitly load "jquery.mw-jump" in your skin
or refer to T195256 for details on how to make the same change.
* Hook 'EditPageBeforeEditChecks' was removed;
use 'EditPageGetCheckboxesDefinition' instead.
* Linker::getLinkColour() and DummyLinker::getLinkColour(), deprecated since
1.28, were removed. LinkRenderer::getLinkClasses() should be used instead.
* Wikimedia\Rdbms\LoadBalancer::getLaggedSlaveMode(), deprecated in 1.28, has
been removed. Use Wikimedia\Rdbms\LoadBalancer::getLaggedReplicaMode()
instead.
* mw.widgets.CategoryMultiselectWidget now uses TagMultiselectWidget instead of
CapsuleMultiselectWidget. The following methods may no longer be used:
* setItemsFromData: Use setValue instead
* getItemsData: Use getItems instead and get the data property
* Two OutputPage methods, addMetadataLink() and getMetadataAttribute(), were
removed. Use addLink() instead.
* Another two OutputPage methods, setPageTitleActionText() and
getPageTitleActionText(), were removed. They did nothing since 1.15 (almost
ten years). Use setHTMLTitle() directly.
* The return value of OutputPage::adaptCdnTTL() has been removed. The
value returned was misleading and probably not what any caller would
have wanted.
* All MagicWord static member variables have been removed. Use appropriate
hooks or MagicWordFactory methods instead.
* MagicWord::clearCache() has been removed. Instead, create a new
MagicWordFactory, such as by calling
resetServiceForTesting( 'MagicWordFactory' ) on a MediaWikiServices.
* mw.util.init() has been removed. This function is not needed anymore and was
a no-op function since 1.30.
* SpecialPageFactory::resetList() is a no-op. Call overrideMwServices()
instead.
* MediaWiki no longer supports a StartProfiler.php file. Instead, you can set
$wgProfiler and $wgEnableProfileInfo.
* The mw.loader.addSource() is now considered a private method, and no longer
supports the `id, url` signature. Use the `Object` parameter instead.
* The backwards-compatibility code in HTMLForm to add a drop-down control to an
option that is not set to be a drop-down if the "mw-chosen" class is present,
is now removed.
* Several collations were removed. They were workarounds for bugs in the ICU
library and they are no longer needed (as of ICU 57.1):
* 'uppercase-se' (NorthernSamiUppercaseCollation) - use 'uca-se' instead
* 'xx-uca-et' (CollationEt) - use 'uca-et' instead
* 'xx-uca-fa' (CollationFa) - use 'uca-fa' instead
* LanguageCode::bcp47() now always returns a valid BCP 47 code. This means
that some MediaWiki-specific language codes, such as `simple`, are mapped
into valid BCP 47 codes (eg `en-simple`).
* The hooks 'SpecialRecentChangesFilters' & 'SpecialWatchlistFilters' deprecated
in 1.23 were removed. Instead, use 'ChangesListSpecialPageStructuredFilters'.
The ChangesListSpecialPage code for these legacy hooks, and their use in
SpecialRecentchanges.php and SpecialWatchlist, was also removed:
* ChangesListSpecialPage->getCustomFilters()
* ChangesListSpecialPage->getFilterGroupDefinitionFromLegacyCustomFilters()
* ChangesListSpecialPage::customFilters
* The global function wfUseMW, deprecated since 1.26, has now been removed. Use
the "requires" property of static extension registration instead.
* $wgSpecialPages no longer accepts array syntax, deprecated since 1.18.
* The MailAddress constructor can no longer be called with a User object,
behaviour which has been deprecated since 1.24.
* LBFactory, deprecated since 1.28, has been removed. Instead, use
Wikimedia\Rdbms\LBFactory.
* The MimeMagic class, deprecated since 1.28 has been removed. Get a
MimeAnalyzer instance from MediaWikiServices instead.
* The '--tidy' option to maintenance/parse.php has been removed. Tidying
the output is now the default. Use '--no-tidy' to bypass the tidy
phase.
* The global function wfErrorLog, deprecated since 1.25, has now been removed.
Use MWLoggerLegacyLogger::emit or UDPTransport.
* The hooks 'SpecialRecentChangesQuery' & 'SpecialWatchlistQuery', deprecated in
1.23, were removed. Instead, use ChangesListSpecialPageStructuredFilters or
ChangesListSpecialPageQuery.
* The global function wfUsePHP, deprecated since 1.30, has now been removed. To
assert a newer version of PHP than MediaWiki does, use extension registration.
* The hook 'ChangesListSpecialPageFilters', deprecated in 1.29, has now been
removed. Use the 'ChangesListSpecialPageStructuredFilters' hook instead.
* DeferredUpdates::setImmediateMode(), deprecated since 1.29, has been removed.
* File / MediaHandler::getStreamHeaders(), deprecated since 1.30, was removed.
* The hook 'DoEditSectionLink', deprecated since 1.25, has been removed. Use
the hook 'SkinEditSectionLinks' instead.
* The hook 'UserGetImplicitGroups', deprecated since 1.25, has been removed.
* The global function wfRunHooks, deprecated since 1.25, has now been removed.
Use Hooks::run().
* The hook 'UnknownAction', deprecated since 1.19, has now been removed.
* The hook 'ParserLimitReport', deprecated since 1.22, has been removed. Use
the hooks 'ParserLimitReportPrepare' and 'ParserLimitReportFormat' instead.
* The following deprecated API methods have been removed:
* ApiBase::profileIn() (deprecated in 1.25)
* ApiBase::profileOut() (deprecated in 1.25)
* ApiBase::safeProfileOut() (deprecated in 1.25)
* ApiBase::profileDBIn() (deprecated in 1.25)
* ApiBase::profileDBOut() (deprecated in 1.25)
* ApiBase::dieUsage() (deprecated in 1.29)
* ApiBase::dieUsageMsg() (deprecated in 1.29)
* ApiBase::dieUsageMsgOrDebug() (deprecated in 1.29)
* ApiBase::getErrorFromStatus() (deprecated in 1.29)
* ApiBase::parseMsg() (deprecated in 1.29)
* ApiBase::setWarning() (deprecated in 1.29)
* ApiPageSet::getInvalidTitles() (deprecated in 1.26)
* ApiQueryLogEvents::addLogParams() (deprecated in 1.25)
* ApiUsageException::getCodeString() (deprecated in 1.29)
* ApiUsageException::getMessageArray() (deprecated in 1.29)
* Class UsageException, deprecated in 1.29, has been removed.
* MediaWiki no longer has a 'JavaScript-powered' wikitext toolbar built in. The
old "bulletin board style toolbar", known as "the 2006 wikitext editor", has
been removed, and instead sysadmins will be required to choose one (or more)
of the several extensions available for this purpose if they need the
functionality. The MediaWiki "tarball" releases have included the replacement
extension for this, the WikiEditor extension aka "the 2010 wikitext editor",
for many years now. As part of this, several parts of MediaWiki have been
removed or simplified:
* The user option 'showtoolbar' (shown as "Show edit toolbar") is no longer
available; if an extension adds a toolbar via the EditPageBeforeEditToolbar
hook, it will be shown; extensions should provide a specific user preference
to disable themselves as needed.
* The public methods Language::getImageFile() and ::getImageFiles(), and the
related specification of $imageFiles within individual languages' code file,
as well as the referenced static media assets, all of which were only used
inside MediaWiki itself for providing the icons for the old toolbar, have
been removed without explicit deprecation.
* The internal ResourceLoader module "mediawiki.toolbar", which is unused
except by MediaWiki itself and back-compatibility code, has been removed.
* The internal ResourceLoaderEditToolbarModule class has been removed.
=== Deprecations in 1.32 ===
* HTMLForm::setSubmitProgressive() is deprecated. No need to call it. Submit
button is already marked as progressive.
* Skin::setupSkinUserCss() is deprecated. Adding of modules to load
has been centralised to Skin::getDefaultModules(), which is now capable
of queueing style modules as well.
* OutputPage::addModuleScripts() and ParserOutput::addModuleScripts are
deprecated. Use addModules() instead.
* Overriding SearchEngine::{searchText,searchTitle,searchArchiveTitle}
in extending classes is deprecated. Extend related doSearch* methods
instead.
* The following 'mediawiki.api' plugin modules were merged into mediawiki.api
and deprecated: mediawiki.api.category, mediawiki.api.edit,
mediawiki.api.login, mediawiki.api.options, mediawiki.api.parse,
mediawiki.api.upload, mediawiki.api.user, mediawiki.api.watch,
mediawiki.api.messages, and mediawiki.api.rollback.
* ApiBase::truncateArray() is deprecated. No replacement, as nothing is known
to use it.
* WatchAction::getUnwatchToken is deprecated. Use WatchAction::getWatchToken
with the 'unwatch' action parameter instead.
* IcuCollation::getICUVersion() is deprecated, as you can just use the PHP
constant INTL_ICU_VERSION directly in all versions that MediaWiki supports.
* Parser::fetchFile() is deprecated. Use ::fetchFileAndTitle() instead.
* The ApiQueryContributions class has been renamed to ApiQueryUserContribs.
* The XMPInfo, XMPReader, and XMPValidate classes have been deprecated in favor
of the namespaced classes provided by the wikimedia/xmp-reader library.
* SearchResultSet::{next,rewind} are deprecated. Calling code should
use foreach on the SearchResultSet, or the extractResults method. Extending
code should override extractResults.
* Instantiating SearchResultSet directly is deprecated. SearchEngine
implementations must subclass SearchResultSet for their purposes.
* SearchResult::setExtensionData argument has been changed from accepting an
array to accepting a Closure that returns the array when called.
* Class CryptRand, everything in MWCryptRand except generateHex() and function
MediaWikiServices::getInstance()->getCryptRand() are deprecated, use
random_bytes() to generate cryptographically secure random byte sequences.
* Parser::getConverterLanguage() is deprecated. Use ::getTargetLanguage()
instead.
* Language::markNoConversion() is deprecated. It confused readers because
it had unexpected behavior (only marking text if it looked like a URL)
and was only used in a single place in the code. Use
LanguageConverter::markNoConversion() instead.
* (T197492) Language::truncate() was soft deprecated in 1.31 and is
hard deprecated in this release. It has been split into two similar
methods, Language::truncateForVisual() and Language::truncateForDatabase(),
which measure length in characters and bytes, respectively. Use
Language::truncateForVisual() when possible to provide equity to users
of multibyte scripts.
* (T176526) EditPage::getContextTitle() falling back to $wgTitle when the
context title is unset is now deprecated; anything creating an EditPage
instance should set the context title via ::setContextTitle().
* The 'jquery.hidpi' module (polyfill for IMG srcset) is deprecated.
* ResourceLoaderStartUpModule::getStartupModules() and ::getLegacyModules()
are deprecated. These concepts are obsolete and have no replacement.
* String type for $lang of DifferenceEngine::setTextLanguage is deprecated.
* The following methods of OutputPage are now deprecated in favour
of using showFatalError directly: OutputPage::showFileDeleteError()
OutputPage::showFileNotFoundError(), OutputPage::showFileRenameError()
OutputPage::showFileCopyError() and OutputPage::showUnexpectedValueError().
* The Replacer, DoubleReplacer, HashtableReplacer, and RegexlikeReplacer
classes are now deprecated. Use a Closure instead.
* (T194263) ContentHandler::makeParserOptions() is deprecated. Use
WikiPage::makeParserOptions() or ParserOptions::newCanonical() instead.
* (T100681) Use of the Parsoid v1 API with the VirtualRESTService, deprecated in
MediaWiki 1.26, is now hard-deprecated. All known clients were converted to
the Parsoid v3 API in May 2015.
* $input is deprecated in hook 'LogEventsListGetExtraInputs'. Use
$formDescriptor instead.
* SearchEngine::transformSearchTerm( $term ) should no longer be called prior
to running searchText. This method was mainly implemented to support the
'prefix' URI param in SpecialSearch, but there are no reasons to expose this
logic as it should be handled internally by SearchEngine implementations
supporting this feature. SearchEngine implementations should no longer
override this methods.
* SearchEngine::replacePrefixes( $query ) should no longer be called prior
to running searchText/searchTitle.
* (T199657) Messages for $wgFilterLogTypes labels should be no longer be in the
'log-show-hide-[type]' format. Instead use 'logeventslist-[type]-log'.
* Global functions wfArrayFilter() and wfArrayFilterByKey() are deprecated.
use array_filter() directly.
* The $wgShowSQLErrors global is deprecated and nonfunctional.
Set $wgShowExceptionDetails and/or $wgShowHostnames instead.
* The $wgShowDBErrorBacktrace global is deprecated and nonfunctional.
Set $wgShowExceptionDetails instead.
* Public access to the DifferenceEngine properties mOldid, mNewid, mOldRev,
mNewRev, mOldPage, mNewPage, mOldContent, mNewContent, mRevisionsLoaded,
mTextLoaded and mCacheHit is deprecated. Use getOldid() / getNewid() /
getOldRevision() / getNewRevision() for the first four (note that the
revision ones return a RevisionRecord, not a Revision), do your own lookup
for page/content.
* The $wgExternalDiffEngine value 'wikidiff2' is deprecated. To use wikidiff2
just enable the PHP extension, and it will be autodetected.
* (T194731) DifferenceEngine properties mOldContent and mNewContent and methods
setContent(), generateContentDiffBody(), generateTextDiffBody() and textDiff()
are deprecated. To interact with a single slot, use a SlotDiffRenderer (and
subclass it to customize diff rendering); to diff custom (e.g. unsaved)
content, use setRevisions(). Subclassing DifferenceEngine should only be done
to customize page-level diff properties (such as the navigation header).
* The wfUseMW function, soft-deprecated in 1.26, is now hard deprecated.
* All MagicWord static methods are now deprecated. Use the MagicWordFactory
methods instead.
* PasswordFactory::init is deprecated. To get a password factory with the
standard configuration, use
MediaWikiServices::getInstance()->getPasswordFactory.
* $wgContLang is deprecated, use
MediaWikiServices::getInstance()->getContentLanguage() instead.
* $wgParser is deprecated, use MediaWikiServices::getInstance()->getParser()
instead.
* wfGetMainCache() is deprecated, use ObjectCache::getLocalClusterInstance()
instead.
* wfGetCache() is deprecated, use ObjectCache::getInstance() instead.
* All SpecialPageFactory static methods are deprecated. Instead, call the
methods on a SpecialPageFactory instance, which may be obtained from
MediaWikiServices.
* mw.user.stickyRandomId was renamed to the more explicit
mw.user.getPageviewToken to better capture its function.
* Passing Revision objects to ContentHandler::getUndoContent() is deprecated,
Content object should be passed instead.
* (T197179) Parameters 'notice', 'notice-messages', 'notice-message',
previously used by OOUI HTMLForm fields, are now deprecated. Use
'help', 'help-message', 'help-messages' instead.
* (T197179) HTMLFormField::getNotices() is now deprecated.
* The jquery.localize module is now deprecated. Use jquery.i18n instead.
* The SecondaryDataUpdates hook was deprecated in favor of RevisionDataUpdates,
or overriding ContentHandler::getSecondaryDataUpdates (T194038).
* The WikiPageDeletionUpdates hook was deprecated in favor of
PageDeletionDataUpdates, or overriding ContentHandler::getDeletionDataUpdates
(T194038).
* Content::getSecondaryDataUpdates has been deprecated in favor of
ContentHandler::getSecondaryDataUpdates() for overriding by extensions
(T194038).
Application logic should call WikiPage::doSecondaryDataUpdates() (T194037).
* Content::getDeletionUpdates has been deprecated in favor of
ContentHandler::getDeletionUpdates() for overriding by extensions (T194038).
Application logic should call WikiPage::doSecondaryDataUpdates() (T194037).
* (T198214) Old Tidy-related configuration settings, which were soft-deprecated
in MediaWiki 1.26, have now been hard deprecated. This affects $wgUseTidy,
$wgTidyBin, $wgTidyConf, $wgTidyOpts, $wgTidyInternal, and $wgDebugTidy. Use
$wgTidyConfig instead.
* All Tidy configurations other than Remex have been hard deprecated;
future parsers will not emit compatible output for these configurations.
In particular, running MediaWiki with tidy disabled has been deprecated.
* (T198214) OutputPage::addWikiText(), OutputPage::addWikiTextWithTitle(),
and OutputPage::addWikiTextTitle() have been deprecated, since they
can result in untidy output. In addition OutputPage::addWikiTextTidy()
and OutputPage::addWikiTextTitleTidy() was deprecated to make naming new
methods consistent. Use OutputPage::addWikiTextAsInterface() or
OutputPage::addWikiTextAsContent() instead, which ensures the output is
tidy and clarifies whether content-language specific postprocessing should
be done on the text.
* OutputPage::parse() and OutputPage::parseInline() have been deprecated
due to untidy output and inconsistent handling of wrapper divs and
interface/content language defaults. Use OutputPage::parseAsContent(),
OutputPage::parseAsInterface(), or OutputPage::parseInlineAsInterface()
as appropriate.
* QuickTemplate::msgHtml() and BaseTemplate::msgHtml() have been deprecated
as they promote bad practises. I18n messages should always be properly
escaped.
* Skin::getDynamicStylesheetQuery() has been deprecated. It always
returns action=raw&ctype=text/css which callers should use directly.
* Class LegacyFormatter is deprecated.
* Use of CommentStore::insertWithTempTable() with 'img_description' is
deprecated. Use CommentStore::insert() instead.
* Language::setCode is deprecated as public function. Use Language::factory
to create a new Language object with a different language code.
* Several classes have been moved from the MediaWiki\Storage\ namespace to the
MediaWiki\Revision\ namespace. The old class names are aliased for
compatibility, but are deprecated. Classes are IncompleteRevisionException,
MutableRevisionRecord, MutableRevisionSlots, RevisionAccessException,
RevisionArchiveRecord, RevisionFactory, RevisionLookup, RevisionRecord,
RevisionSlots, RevisionStore, RevisionStoreRecord, SlotRecord, and
SuppressedDataException.
* When using OOUI HTMLForm containing an 'info' field which uses the 'rawrow'
option, it is now deprecated to give its contents (the 'default' option)
as a string. They should be given as a OOUI\FieldLayout object instead.
Notably, this affects fields defined in the 'GetPreferences' hook, because
Special:Preferences uses an OOUI form now. (If possible, don't use 'rawrow'.)
* In Skin::doEditSectionLink omitting the parameters $tooltip and $lang is
deprecated. For the $lang parameter, types other than Language are
deprecated.
* The $wgUseKeyHeader configuration option and the
OutputPage::getKeyHeader() method have been deprecated; the relevant
draft IETF spec expired without becoming a standard.
* Deprecated API action=query&prop=info inprop=readable in favor of
intestactions=read.
=== Other changes in 1.32 ===
* (T198811) The following tables have had their UNIQUE indexes turned into
proper PRIMARY KEYs for increased maintainability: interwiki, page_props,
protected_titles and site_identifiers.
* OOUI HTMLForm will now display help text inline after the input field,
rather than in a popup. Previous behavior can be restored by using
`'help-inline' => false`.
* The archive table's ar_rev_id field is now unique.
* Special:BotPasswords now requires reauthentication.
* (T174023) Multi-Content Revision (MCR) capabilities were introduced into the
storage layer and have basic support for display. No user interface exists
yet for creating or managing content in slots beides the main slot. See
for more
information.
* The image_comment_temp database table has been removed. Since all access
should be mediated by the CommentStore class, this change shouldn't affect
external code.
* (T206147) Database::close() will no longer commit any open transactions.
* (T64103) Dropped columns category.cat_hidden, site_stats.ss_admins, and
recentchanges.rc_cur_time from the PostgreSQL schema.
= MediaWiki 1.31 =
== MediaWiki 1.31.15 ==
This is a security and maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.14 ===
* (T270988) Fixup issues in SpecialChangeContentModel.php.
* (T278026) rdbms: Add DB_PRIMARY to replace DB_MASTER.
* (T276945) Define a batch size in maintenance/manageJobs.php.
* (T276945) Implement JobQueueDB::getAllAbandonedJobs.
* (T281549) WebInstaller: Don't show the announce-l subscribe
checkbox temporarily.
* (T283247) Freenode -> Libera per wikimedia moving from
freenode to libera.
* (T280226, CVE-2021-35197) SECURITY: Prevent blocked users from
purging pages.
== MediaWiki 1.31.14 ==
This is a maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.13 ===
* Make Title implement IDBAccessObject.
== MediaWiki 1.31.13 ==
This is a security and maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.12 ===
* (T115436) resourceloader: CSSMin::getLocalFileReferences now strips
anchors.
* Updating php-parallel-lint/php-parallel-lint (0.9.2 => 1.0.0).
* Updating mediawiki/codesniffer (19.1.0 => 19.4.0).
* DefaultSettings.php: Update $wgPingback documentation.
* PHPVersionCheck: The PHP Group only supports PHP >= 7.3.0.
* (T275261) Escape wikitext in the title in invalid title error messages.
* (T277009, CVE-2021-30158) SECURITY: Allow blocked users to access
Special:ResetTokens.
* pageExist.php: Output trailing newlines.
* (T278058, CVE-2021-30157) SECURITY: Escape rcfilters-filter-* messages
on ChangesList pages.
* (T277414) HTMLFormField: Use non namespaced class name rather than
static::class.
* (T268230) Switch to new MediaWiki logo by Serhio Magpie.
* (T271735) Expand config-pingback-help, link to privacy policy in
config-pingback.
* Fix documentation of user-global in $wgRateLimits.
* BackupDumper: Add -o as shortcode for --output.
* (T278014, CVE-2021-30154) SECURITY: Escape mediastatistics-header-*
messages on Special:NewFiles.
* (T270713, CVE-2021-30152) SECURITY: Allow user to only apply protection
they have right to do so via action=protect.
* (T272386, CVE-2021-30159) SECURITY: Non-admin deleted enwiki page in
fast double move.
* (T270988, CVE-2021-30155) SECURITY: ContentModelChange: Check that user
can create pages.
* (T276843, CVE-2021-20270, CVE-2021-27291) SECURITY:
SyntaxHighlight_GeSHi: Various lexers have been disabled due to DoS
vectors.
== MediaWiki 1.31.12 ==
This is a maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.11 ===
* Fixed issues relating to User::isRegistered() not existing in 1.31.
== MediaWiki 1.31.11 ==
This is a security and maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.10 ===
* Fix undefined $wgRedirectOnLogin.
* (T251661, T265313) CentralIdLookup::factoryNonLocal can return null.
* (T263592) media: Fix case of FlashPixVersion in
FormatMetadata::makeFormattedData().
* (T265223) BaseTemplate: Guard against passing zero arg to array_merge().
* (T266418) composer.json: add requirement for composer-plugin-api ^1.1.
* (T260631, T260633), BotPassword::save() now returns a Status object for the
result rather than a bool. The length of the bot password grants and
restriction fields are now validated, and an error will be thrown if it
would be truncated by the database.
* (T264536, T233012) SectionProfiler: Do not attempt to use null values as
arrays.
* (T269178) MemcachedClient: Cast Resource to integer.
* (T268917, CVE-2020-35475) SECURITY: Use Xml::element in SpecialUserrights for
sanity.
* (T268938, CVE-2020-35479) SECURITY: BlockLogFormatter can output raw html.
* (T205908, CVE-2020-35477) SECURITY: Unable to change visibility of log entries
when MediaWiki:Mainpage uses Special:MyLanguage.
* (T120883, CVE-2020-35480) SECURITY: Divergent behavior for contributions and
user pages of hidden users and missing users.
== MediaWiki 1.31.10 ==
This is a maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.9 ===
* Fixed issues relating to backporting of changes for T260485.
== MediaWiki 1.31.9 ==
This is a security and maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.8 ===
* In the web installer, use secure session cookies.
* (T257207) shell: Expand documentation in firejail.profile.
* Added $wgForceHTTPS, which makes the HTTP to HTTPS redirect be unconditional
and suppresses various hacks needed to support mixed HTTP/HTTPS wikis. We
recommend this be set to true on pure HTTPS wikis.
* Added $wgCookieSameSite, which allows login cookies to be sent with
SameSite=None. This is required for cross-site CentralAuth autologin after
Chrome 84.
* Added $wgUseSameSiteLegacyCookies, which adds a compatibility hack to
SameSite=None cookies for browsers which implemented an incompatible draft
version of the specification.
* (T191537) Disable WebResponse setters for post-send processing.
* (T198525) WebReponse: Use values altered in 'WebResponseSetCookie' hook.
* Fix runBatchedQuery.php for no result from select.
* (T130906) Add Edge to MediaWiki:Clearyourcache.
* Use IPset in MWRestrictions::checkIP.
* (T260031) Add application/font-sfnt to MimeMap for ttf files.
* shell: Make ->restrict( RESTRICT_NONE ) actually work.
* (T183759) Fixes shell edge-cases in Windows.
* (T258390) Add CentralIdLookup::factoryNonLocal().
* (T246991) User: Fix pingLimiter() to use makeGlobalKey() for global rate
limits.
* (T251661, CVE-2020-25827) SECURITY: User::pingLimiter: add user-global rate
limit type.
* (T246991) User: enforce pingLimiter() expiry time.
* (T260232) don't include null page ids in query list for category dumps.
* (T251506) Sanitizer: Truncate IDs to a reasonable length.
* Explicitly wrap some XML calls in libxml_disable_entity_loader().
* (T263455 T247285) Set EnableJavaScriptTest to true in
includes/DevelopmentSettings.php.
* (T232568, CVE-2020-25813) SECURITY: Special:UserRights exposes the existence
of hidden users.
* (T258763, CVE-2020-17367, CVE-2020-17368) SECURITY: Prevent invoking
firejail's --output functionality.
* (T86738, CVE-2020-25814) SECURITY: mediawiki.jqueryMsg: Sanitize URLs and
'style' attribute.
* (T115888, CVE-2020-25828) SECURITY: mediawiki.js: Escape HTML in
mw.message( ... ).parse().
* (T260485, CVE-2020-25869) SECURITY: ActorMigration: Load user from the correct
database.
* (T260485, CVE-2020-25869) SECURITY: ensure actor ID from correct wiki is used.
== MediaWiki 1.31.8 ==
This is a security and maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.7 ===
* (T199809) Don't invalidate BotPasswords if a password reset email is sent.
* (T247017) PasswordReset performance improvements.
* (T250568) Work around change in SimpleXMLElement behavior introduced in PHP
7.3.17.
* Remove some rotten and out of date documentation.
* (T252311) Improvements to some older SQLite update patches.
* (T240307) Minor fixes to extension.schema.v2.json and
extension.schema.v1.json.
* (T199474) Set rc_patrolled to 2 for autopatrolled changes in
rebuildrecentchanges.php.
* (T229461) Update the change_tag table in rebuildrecentchanges.php.
* (T206476) Call ob_start() before running tests.
* (T234450) Per-user concurrency in SpecialContributions can now be limited by
setting $wgPoolCounterConf['SpecialContributions'] appropriately.
* (T248947) SECURITY: img_auth.php may leak private extension images into the
public cache.
== MediaWiki 1.31.7 ==
This is a security and maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.6 ===
* (T193565, T234022) Re-add DB domain sanity checks to LoadBalancer.
* Use proper SemVer comparison in CheckComposerLockUpToDate.
* (T212738) Add the MW_VERSION constant, global $wgVersion is soft deprecated.
* Update comment about PHP versions supported by The PHP Group.
* (T247215) Fix output of RecountCategories::doWork().
* Add check for page existence to view.php maintenance script.
* (T247580) Disable some broken Selenium tests.
* (T236509) SECURITY: Fix HTML escaping in UserGroupMembership::getLink().
* (T246602) SECURITY: jquery.makeCollapsible allows applying event handler to
any CSS selector.
== MediaWiki 1.31.6 ==
This is a security and maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.5 ===
* (T181658) Do not insert page titles into querycache.qc_value.
* (T206013) Suppress errors when reading invalid XML file properties.
* (T237931) Remove references to pg_attrdef.adsrc in Postgres code.
* Use correct value for 'sslmode' in DatabasePostgres.
* (T232866) Fix support for HTTP/2 in MultiHttpClient.
* (T227461) Stop calling deprecated Redis delete functions.
* (T239561) Mark options as requiring parameters in addSite.php.
* (T239734) Replace deprecated lSize with lLen in Redis code.
* (T192134) SECURITY: Do not allow user scripts on Special:PasswordReset.
* (T239428) ApiEditPage: Test for bad redirect targets.
* (T233342) rdbms: Log debug message traces as 'exception.trace' instead of
'trace'.
* (T226751) media: Log and fail gracefully on invalid EXIF coordinates.
* (T212067) Work around PHP bug in parse_url.
== MediaWiki 1.31.5 ==
This is a maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.4 ===
* Fix extra newlines in installer.
* Followup T230402, PermissionManager doesn't exist until 1.33, so fix the
backported patches to use User::isAllowed() instead.
== MediaWiki 1.31.4 ==
This is a security and maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.3 ===
* (T207100) Updated LanguageTr for dotted and dotless I in PHP 7.3.
* The ImgAuthModifyHeaders hook was added to img_auth.php to allow modification
of headers in private wikis.
* (T230402) SECURITY: Add permission check for suppressed account to
Special:Redirect.
* Add helper for HTTPFileStreamer header syntax.
* (T118799) Fix XMP parser errors due to trailing nullchar.
* (T233119) Improve documentation for the MinimumPasswordLengthToLogin policy.
* (T202183) Give more specific error messages on Special:Redirect.
* Cache redirects from Special:Redirect.
* (T231386) dispatchUser() should use a 302 http status code.
* (T227662) Split down patch-comment-table.sql and patch-actor-table.sql into
separate files to help allieviate potential migration problems.
* Make SQLite's patch-add-3d.sql a no-op to prevent clobbering other database
updates.
== MediaWiki 1.31.3 ==
This is a maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.2 ===
* (T225558) Update installer link to PHP intl.
* (T225496) Detect APC for MainCacheType in CLI installer.
* (T226766) Remove jetbrains/phpstorm-stubs from composer dev dependencies.
* (T202211) Fix SQLite patch-(image|page|template)links-fix-pk.sql column order.
== MediaWiki 1.31.2 ==
This is a security and maintenance release of the MediaWiki 1.31 branch.
Required PHP version has been increased from 7.0.0 to 7.0.13.
=== Changes since MediaWiki 1.31.1 ===
* (T204729) WatchedItemStore::countVisitingWatchersMultiple() shouldn't query
all titles when asked for none.
* (T205967) Fix syntax error typo in postgres database upgrade file.
* (T200254) Add pear/Net_SMTP 1.7.3 to composer dependencies.
* (T206765) Load installer i18n when running update.php.
* (T109121) Remove deprecated pear/mail_mime-decode from composer suggested
libraries.
[Also in the bundled composer /vendor directory.]
* Various PHP 7.2 and 7.3 compatibility fixes:
* (T200595, T206974) Fix PHP 7.3 warnings of using "continue" in some
scenarios instead of "break".
* (T206976, T206977) Also in the bundled LocalisationUpdate and
ParserFunctions extensions.
* (T206979) Fix PHP 7.3 warnings of using "compact()" when some variables may
not be set.
* (T215632) FormatMetadata and UploadStash regexes fixed to be PHP
7.3-compatible.
* Fix PHP warnings "preg_replace(): [...] invalid range in character class.
* Avoid PHP 7.2 warnings in DBConRefTest about count() on non-Countable.
* Suppress "Headers already sent" in PHP 7.2 too.
* (T206476) Output only to stderr in unit tests.
* (T207112) Add session_write_close() calls to SessionManager tests.
* oyejorge/less.php replaced with our fork wikimedia/less.php
* (T209756) Updated wikimedia/ip-set from 1.2.0 to 1.3.0.
* (T213489) Avoid session double-start in Setup.php.
* (T206975) Switch to our fork of less.php.
* (T207540) Include IP address in "Login for $1 succeeded" log entry.
* (T201781) Database: Allow selectFieldValues() to accept SQL fragments.
* (T205765) installer: Don't link to the obsolete "Extension Matrix" page.
* (T206013) Update ImportableUploadRevisionImporter for interwiki usernames.
* (T207541) Pass an email address, not a MailAddress, to mail().
* (T207603) SECURITY: User JS may no longer be loaded with mime type
text/javascript if there is no account associated with the username.
* (T112937, T113042) SECURITY: Do not allow loading pages raw with a
text/javascript MIME
type if non-admins can edit the page.
* (T17491) / elements can be phrasing or flow.
* (T200827) RemexCompatMunger: Don't call endTag() in case B/b
* (T207088) Upgrade wikimedia/remex-html to 2.0.1.
[Also in the bundled composer /vendor directory.]
* (T194052) Updated wikimedia/base-convert from 1.0.1 to 2.0.0.
[Also in the bundled composer /vendor directory.]
* (T199494) Fix notices in maintenance/removeUnusuedAccounts.php.
* Require ext-fileinfo in composer.json, per PHPVersionCheck.
* (T176390) Bundled LocalisationUpdate extension: Handle exceptions from
GitHubFetcher.
* (T208255) Completion search should not change the search query.
* (T209870) Fix SQL syntax error in MS-SQL initialisation file for new wikis.
* (T185049) LogFormatter: Fail softer when trying to link an invalid titles.
* (T210998) Properly set $wgLanguageCode in the generated LocalSettings.php
if --lang is used with the command-line installer (install.php).
* (T211061) ImageListPager: Actor migration for buildQueryConds().
* (T209335) Clarify the default sidebar 'Help' link is about MediaWiki itself.
* Fix addition of ug_expiry column to user_groups table on MSSQL.
* (T204767) Add join conditions to ActiveUsersPager.
* (T210621) User: Bypass repeatable-read when creating an actor_id.
* (T204531) rdbms: reduce LoadBalancer replication log spam.
* (T195525) Fix db error outage page.
* (T208871) The hard-coded Google search form on the database error page was
removed.
* (T176097) Fix flaky MessageBlobStoreTest assertion failures.
* (T209423) Update required PHP version to 7.0.13.
* (T209885) Prevent populateSearchIndex.php from breaking once actor migration
has been started.
* (T216968) Return pageid as int in both list=iwbacklinks and
list=langbacklinks.
* (T215169) Fix for Database::update() with IGNORE option fails on PostgreSQL.
* (T204423) Backport support for hyphenated DB names in JobQueueGroup.
* (T199474) Fix typo in rebuildrecentchanges.php resulting in rogue flags.
* (T218608) SECURITY: Fix an issue that prevents Extension:OAuth working when
$wgBlockDisablesLogin is true.
* (T216029) Chrome redirects to Special:BadTitle after editing a section with
a non-Latin name on a page with non-Latin characters in title.
* (T219728) Added support for new Japanese era name "Reiwa".
* (T25227) SECURITY: action=logout now requires to be posted and have a csrf
token.
* Updated cssjanus/cssjanus from 1.2.0 to 1.3.0.
* (T222385) resourceloader: Use AND instead of OR for upsert conds in
saveFileDependencies().
* (T224374) Fix message parameters so that the message that says SQLite is out
of date makes sense.
* SpecialPage::checkLoginSecurityLevel() will now preserve POST data when
reauthenticating.
* FormSpecialPage::execute() will now call checkLoginSecurityLevel() if
getLoginSecurityLevel() returns non-false.
* (T197279) SECURITY: Fix reauth in Special:ChangeEmail.
* (T208881) SECURITY: blacklist CSS var().
* (T209794) SECURITY: rate-limit and prevent blocked users from changing email.
* (T199540) SECURITY: API: Respect $wgBlockCIDRLimit in action=block.
* (T212118) SECURITY: Fix cache mode for (un)patrolled recent changes query.
* (T222036, T222038) SECURITY: Add permission check for user is permitted to
view the log type.
* (T221739) SECURITY: resources: Patch jQuery 3.2.1 for CVE-2019-11358.
== MediaWiki 1.31.1 ==
This is a security and maintenance release of the MediaWiki 1.31 branch.
=== Changes since MediaWiki 1.31.0 ===
* (T169545, CVE-2018-0503) SECURITY: $wgRateLimits entry for 'user' overrides
'newbie'.
* (T194605, CVE-2018-0505) SECURITY: BotPasswords can bypass CentralAuth's
account lock.
* (T199029, CVE-2018-13258) SECURITY: Tarball was missing .htaccess files.
* (T197229) Bundle Nuke extension, it was accidentally omitted.
* (T193995) Fix undefined patchPath() method call in parser tests.
* (T198687) Fix various selectFields methods to use the string 'NULL', not null.
* Special:BotPasswords now requires reauthentication.
* (T191608, T187638) Add 'logid' parameter to Special:Log.
* (T193829) Indicate when a Bot Password needs reset.
* (T198037) GitInfo: Don't try shelling out if it's disabled.
* (T151415) Log email changes.
* (T197206) Fix performance regression when multiple DB used without caching.
* (T197030) PHPSessionHandler: Suppress headers warnings in initialize().
* (T182377, T196793) Exif: Guard against uncountable tag values.
* (T200861) Fix total breakage of SQLite web upgrade.
* (T200864) Fix pingback over-reporting on non-MySQL databases
* (T202550) Unbreak SpecialListusersHeaderForm and SpecialListusersHeader
hooks.
== MediaWiki 1.31.0 ==
=== Changes since MediaWiki 1.31.0-rc.2 ===
* (T195783) Initialize PSR-4 namespaces at same stage as normal autoloader.
* (T196092) Hide MySQL binary/utf-8 charset option in the installer.
* (T196185) Don't allow setting $wgDBmysql5 in the installer.
* (T196125) php-memcached 3.0 (provided with PHP 7.0) is now supported.
* (T182366) UploadBase::checkXMLEncodingMissmatch() now works on PHP 7.1+
* (T118683) Fix exception from &$user deref on HHVM in the TitleMoveComplete
hook.
* (T196672) The mtime of extension.json files is now able to be zero
* (T180403) Validate $length in padleft/padright parser functions.
* (T143790) Make $wgEmailConfirmToEdit only affect edit actions.
=== Changes since MediaWiki 1.31.0-rc.0 ===
* (T33223) Drop archive.ar_text and ar_flags.
* Add default edit rate limit of 90 edits/minute for all users.
* (T187645) Use codepoint as tiebreaker when getting first-letters in
IcuCollation.
* (T191947) Don't shell during the installer if shelling out is disabled.
* (T194319) Improve duplicate config setting exception as part of extension
registration.
* (T195211) Don't require trailing slash in PSR-4 autoloader directory.
* (T186565) Fix PHP Notice from `ob_end_flush()` in `FileRepo::streamFile()`.
* Do not incorrectly hide namespace input field in the installer.
* (T186456) Refactor checks looking for PEAR maik libraries to be clearer.
=== Important pre-upgrade notes for 1.31 ===
* If you're using MySQL, SQLite, or MSSQL, are not using update.php to apply
schema changes, and cannot have downtime to run migrateArchiveText.php and
apply patch-drop-ar_text.sql manually, you'll have to apply a default value
to the ar_text and ar_flags columns of the archive table or make those
columns nullable before upgrading to MediaWiki 1.31.
maintenance/archives/patch-nullable-ar_text.sql shows how to do this for
MySQL.
=== Configuration changes in 1.31 ===
* $wgEnableAPI and $wgEnableWriteAPI are now deprecated and will be removed in
a future version. The API is now considered to be stable, secure and
essential.
* $wgUsejQueryThree was removed, as it is now the default. This was documented
as a temporary variable during the migration period, deprecated since 1.29.
* $wgLogoHD has been updated to support svg images and uses $wgLogo where
possible for fallback images such as png.
* (T44246) $wgFilterLogTypes will no longer ignore 'patrol' when user does not
have the right to mark things patrolled.
* Wikis that contain imported revisions or CentralAuth global blocks should run
maintenance/cleanupUsersWithNoId.php.
* The configuration settings $wgResourceLoaderMinifierStatementsOnOwnLine and
$wgResourceLoaderMinifierMaxLineLength, deprecated since 1.27, were removed.
* (T180921) $wgReferrerPolicy now supports having fallbacks for browsers that
are not using the latest version of the Referrer Policy specification.
* $wgFragmentMode is now set to [ 'legacy', 'html5' ] by default. This is a
first step of migration to human-readable section IDs that will later result
in 'html5' being the default mode.
* CACHE_ACCEL now only supports APC(u) or WinCache. XCache support was removed
as upstream is inactive and has no plans to move to PHP 7.
* The old CategorizedRecentChanges feature, including its related configuration
option $wgAllowCategorizedRecentChanges, has been removed.
* (T188472) The 'comma' value for $wgArticleCountMethod is no longer supported
for performance reasons, and installations with this setting will now work as
if it was configured with 'any'.
* (T185753) MediaWiki now defaults to using RemexHtml to tidy up user input,
rather than being off by default. If you wish to disable HTML tidying
entirely, set $wgTidyConfig to null; if you wish to use the old, deprecated
Tidy external binary, both set $wgTidyConfig to null and $wgUseTidy to true.
* $wgLogAutopatrol now defaults to false instead of true.
* $wgValidateAllHtml was removed and will be ignored.
* $wgScriptExtension, deprecated and ignored since 1.25, was removed. See the
1.25 release notes for more information.
* $wgUseAjax is now marked as deprecated, just like the deprecated AJAX
framework that it enables. Some extensions mistakenly used this to check
whether any AJAX functionality at all should be enabled, further making this
problematic to retain.
* $wgDBmysql5 is now deprecated, and will be removed in a future version. It
has been marked as experimental ever since it was introduced.
=== New features in 1.31 ===
* (T76554) User sub-pages named ….json are now protected in the same way that
….js and ….css pages are, so that configuration options can safely be placed
there.
* Wikimedia\Rdbms\IDatabase->select() and similar methods now support joins
with parentheses for grouping.
* As a first pass in standardizing dialog boxes across the MediaWiki product,
Html class now provides helper methods for messageBox, successBox, errorBox
and warningBox generation.
* (T9240) Imports will now record unknown (and, optionally, known) usernames in
a format like "iw>Example".
* (T20209) Linker (used on history pages, log pages, and so on) will display
usernames formed like "iw>Example" as interwiki links, as if by wikitext like
[[iw:User:Example|iw>Example]].
* (T111605) The 'ImportHandleUnknownUser' hook allows extensions to auto-create
users during an import.
* Added a hook, ParserOutputPostCacheTransform, to allow extensions to affect
the ParserOutput::getText() post-cache transformations.
* Added a hook, UploadForm:getInitialPageText, to allow extensions to alter the
initial page text for file uploads.
* (T181651) The info page for File pages now displays the file's base-16 SHA1
hash value in the table of basic information.
* Style tags with a 'data-mw-deduplicate' attribute will be deduplicated as a
ParserOutput::getText() post-cache transformation. This may be disabled by
passing 'deduplicateStyles' => false to that method.
* The identity of the logged-in or IP "actor" for logged actions is being moved
into a new actor table, with the rows in tables such as revision and logging
referring to the actor ID instead of storing the user ID and name/IP in
every row.
* This is currently gated by $wgActorTableSchemaMigrationStage. Most wikis
can set this to MIGRATION_NEW and run maintenance/migrateActors.php as
soon as any necessary extensions are updated.
* Most code accessing rows for logged actions from the database should use
the relevant getQueryInfo() methods to get the information needed to build
the SQL query. The ActorMigration class may also be used to get feature
-flagged information needed to access actor-related fields during the
migration period.
* Added Wikimedia\Rdbms\IDatabase::cancelAtomic(), to roll back an atomic
section without having to roll back the whole transaction.
* Wikimedia\Rdbms\IDatabase::doAtomicSection(), non-native ::insertSelect(),
and non-MySQL ::replace() and ::upsert() no longer roll back the whole
transaction on failure.
* (T189785) Added a monthly heartbeat ping to the pingback feature.
* The CLI installer (maintenance/install.php) learned to detect and include
extensions. Pass --with-extensions to enable that feature.
* (T184791) rc_patrolled now has three states: "0" for unpatrolled,
"1" for manually patrolled and "2" for autopatrolled actions.
* Extensions can now set their type to "editor" if they provide an editor or
enhance the editing experience.
* Extensions can use a PSR-4 autoloader by setting an "AutoloadNamespaces"
property in extension.json. See the documentation at
for more details and an example.
* (T19099) Tabs which link to pages that don't exist (like those to uncreated
discussion pages) now have a tooltip to indicate state, not just colour.
=== External library changes in 1.31 ===
* pear/mail, pear/mail_mime and pear/mail_mime-decode have been moved from
suggested to required. These packages now must be installed via composer
and not via PEAR itself.
==== Upgraded external libraries ====
* Updated jquery.chosen from v0.9.14 to v1.8.2.
* Updated composer/spdx-licenses from 1.1.4 to 1.3.0 (development dependency).
* Updated nikic/php-parser from 2.1.0 to 3.1.3 (development dependency).
* Updated wikimedia/ip-set from 1.1.0 to 1.2.0.
* Updated wikimedia/relpath from 2.0.0 to 2.1.1.
* Updated wikimedia/running-stat from 1.1.0 to 1.2.0.
* Updated wikimedia/wrappedstring from 2.2.0 to 2.3.0.
* Updated mediawiki/at-ease from 1.1.0 to 1.2.0.
* Updated wikimedia/php-session-serializer from 1.0.4 to 1.0.6.
* Updated wikimedia/remex-html from 1.0.2 to 1.0.3.
* Updated wikimedia/html-formatter from 1.0.1 to 1.0.2.
==== New external libraries ====
* Added wikimedia/object-factory 1.0.0
==== Removed and replaced external libraries ====
* (T17845) The deprecated 'jquery.badge' module was removed.
* The deprecated 'jquery.autoEllipsis' module was removed. Use the CSS
text-overflow property instead.
* The deprecated 'jquery.placeholder' module was removed.
* The deprecated 'jquery.appear' module was removed. Use the
'mediawiki.viewport' module instead.
* mediawiki/at-ease was replaced with wikimedia/at-ease.
=== Bug fixes in 1.31 ===
* (T90902) Non-breaking space in header ID breaks anchor.
* (T189375) CSSMin now allows quoted urls in `url()` syntax to start with a
space.
* (T2087, T10897, T87753, T174639) Whitespace created by category and language
links is now stripped rather than leaving blank lines in odd places.
* (T3780) Uploads with UTF-8 names now work on PHP7.1+ on Windows servers.
* (T182366) UploadBase::checkXMLEncodingMissmatch() now works on PHP 7.1+
=== Action API changes in 1.31 ===
* (T185058) The 'name' value to tgprop for action=query&list=tags has been
removed. It has never made a difference in the output, the name was always
returned regardless.
* The 'watch' and 'unwatch' parameters for action=move have been removed. They
were deprecated and also accidentally nonfunctional since 1.17 in 2010. Use
'watchlist' instead.
=== Action API internal changes in 1.31 ===
* ApiBase::getProfileDBTime, deprecated since 1.25, was removed.
* ApiBase::getModuleProfileName, deprecated since 1.25, was removed.
* ApiBase::getProfileTime, deprecated since 1.25, was removed.
=== Languages updated in 1.31 ===
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.
* (T180052) Mirandese (mwl) now supports gendered NS_USER/NS_USER_TALK.
* (T182305) New language support: Nyungar (nys).
* (T186359) New language support: Siberian Tatar [себертатар] (sty).
* (T186635) New language support: Guianan Creole (gcr).
* (T186647) New language support: Kumyk [къумукъ] (kum).
* (T187750) New language support: Spanish formal address (es-formal).
* (T187824) New language support: Hungarian formal address (hu-formal).
* (T189127) New language support: Gorontalo (gor).
=== Breaking changes in 1.31 ===
* MessageBlobStore::insertMessageBlob(), deprecated in 1.27, was removed.
* The OutputPage class constructor now requires a context parameter.
Instantiating without context was deprecated in 1.18.
* The mw.page JavaScript singleton, deprecated in 1.30, was removed.
* Article::getLastPurgeTimestamp(), WikiPage::getLastPurgeTimestamp(), and the
related WikiPage::PURGE_* constants, deprecated in 1.29, were removed.
* The Article::selectFields(), ::onArticleCreate(), ::onArticleDelete(), and
::onArticleEdit() methods, deprecated in 1.24, were removed.
* Installer::locateExecutable() and ::locateExecutableInDefaultPaths() were
removed. Use ExecutableFinder::findInDefaultPaths() instead.
* The deprecated MW_DIFF_VERSION constant was removed.
DifferenceEngine::MW_DIFF_VERSION should be used instead.
* Due to significant refactoring, method ContribsPager::getUserCond() that had
no access restriction has been removed.
* The Block class will no longer accept usable-but-missing usernames for
'byText' or ->setBlocker(). Callers should either ensure the blocker exists
locally or use a new interwiki-format username like "iw>Example".
* The following methods and constants from the WatchedItem class, which were
deprecated in 1.27, have been removed:
* WatchedItem::getTitle()
* WatchedItem::fromUserTitle()
* WatchedItem::addWatch()
* WatchedItem::removeWatch()
* WatchedItem::isWatched()
* WatchedItem::duplicateEntries()
* WatchedItem::IGNORE_USER_RIGHTS
* WatchedItem::CHECK_USER_RIGHTS
* WatchedItem::DEPRECATED_USAGE_TIMESTAMP
* The $statementsOnOwnLine parameter of JavaScriptMinifier::minify was removed.
$wgResourceLoaderMinifierStatementsOnOwnLine, the corresponding configuration
variable, has been deprecated since 1.27 and was removed as well.
* The $maxLineLength parameter of JavaScriptMinifier::minify was removed.
$wgResourceLoaderMinifierMaxLineLength, the corresponding configuration
variable, has been deprecated since 1.27 and was removed as well.
* The HtmlFormatter class, deprecated in 1.27, was removed. The namespaced
HtmlFormatter\HtmlFormatter class should be used instead.
* The driver 'mysql' for MySQL, deprecated in MediaWiki 1.30, has been removed.
The driver has been deprecated since PHP 5.5 and was removed in PHP 7.0. The
default driver for MySQL has been 'mysqli' since MediaWiki 1.22.
* The following properties of PreparedEdit were deprecated in 1.21 and have
been removed:
* PreparedEdit->newText
* PreparedEdit->oldText
* PreparedEdit->pst
* ParserOutput objects which are generated using a non-default value for
ParserOptions::setWrapOutputClass() can no longer be added to the parser
cache.
* The following deprecated methods from the OutputPage class have been removed:
* OutputPage::addExtensionStyle(); deprecated in 1.27
* OutputPage::getExtStyle(); deprecated in 1.27
* OutputPage::setETag(); deprecated in 1.28 (obsolete no-op)
* OutputPage::setSquidMaxage(); deprecated in 1.27
* OutputPage::readOnlyPage(); deprecated in 1.25
* OutputPage::rateLimited(); deprecated in 1.25
* Additionally, the protected OutputPage::$mExtStyles array, only accessed
through the above and with no known uses, was removed.
* The no-op method Skin::showIPinHeader(), deprecated in 1.27, was removed.
* The following variables and methods in EditPage, deprecated in MediaWiki 1.30,
were removed:
* $isCssJsSubpage — use ::isUserConfigPage()
* $isCssSubpage — use ::isUserCssConfigPage()
* $isJsSubpage — use ::isUserJsConfigPage()
* $isWrongCaseCssJsPage – use ::isWrongCaseUserConfigPage()
* ::getSummaryInput() – use ::getSummaryInputWidget()
* ::getSummaryInputOOUI() – use ::getSummaryInputWidget()
* ::getCheckboxes() – use ::getCheckboxesWidget() or
::getCheckboxesDefinition()
* ::getCheckboxesOOUI() – use ::getCheckboxesWidget() or
::getCheckboxesDefinition()
* ResourceLoaderModule::getPosition(), deprecated in 1.29, has been removed.
* In User, the cookie-related methods which were wrappers for the functions on
the response object, and were deprecated in 1.27, have been removed:
* ::setCookie()
* ::clearCookie()
* ::setExtendedLoginCookie()
Note that User::setCookies() remains, and is not deprecated.
* Also in User, some auth-related methods which were deprecated in 1.27 have
been removed:
* ::getEditTokenTimestamp() – use MediaWiki\Session\Token::getTimestamp()
* ::getPasswordFactory() – create a PasswordFactory directly
* ::passwordChangeInputAttribs()
* The global functions wfProfileIn and wfProfileOut, deprecated in 1.25, have
been removed.
* SpecialPageFactory::getList(), deprecated in 1.24, has been removed. You can
use ::getNames() instead.
* OpenSearch::getOpenSearchTemplate(), deprecated in 1.25, has been removed. You
can use ApiOpenSearch::getOpenSearchTemplate() instead.
* The global function wfBaseConvert, deprecated in 1.27, has been removed. Use
Wikimedia\base_convert() directly.
* Calling Database::begin() explicitly during an implicit transaction or when
DBO_TRX is set results in an exception. Calling Database::commit() explicitly
for an implicit transaction also results in an exception. Previously these
were logged as errors. The startAtomic() and endAtomic() methods, or
AtomicSectionUpdate should be used instead.
* The global function wfOutputHandler() was removed, use the its replacement
MediaWiki\OutputHandler::handle() instead. The global function was only
sometimes defined. Its replacement is always available via the autoloader.
* ChangeTags::listExtensionActivatedTags and ::listExtensionDefinedTags,
deprecated in 1.28, have been removed. Use ::listSoftwareActivatedTags() and
::listSoftwareDefinedTags() instead.
* Title::getTitleInvalidRegex(), deprecated in 1.25, has been removed. You can
use MediaWikiTitleCodec::getTitleInvalidRegex() instead.
* HTMLForm & VFormHTMLForm::isVForm(), deprecated in 1.25, have been removed.
* The ProfileSection class, deprecated in 1.25 and unused, has been removed.
* The ResourceLoaderGetLessVars hook, deprecated in 1.30, has been removed. Use
ResourceLoaderModule::getLessVars() to expose local variables instead of
global ones.
* As part of work to modernise user-generated content clean-up, a config option
and some methods related to HTML validity were removed without deprecation.
The public methods MWTidy::checkErrors() and the path through which it was
called, TidyDriverBase::validate(), are removed, as are the testing methods
MediaWikiTestCase::assertValidHtmlSnippet() and ::assertValidHtmlDocument().
The $wgValidateAllHtml configuration option is removed and will be ignored.
* Execution of external programs using MediaWiki\Shell\Command now applies
the RESTRICT_DEFAULT Firejail restriction by default.
* The ResourceLoaderModule::getHashMtime() and ::getDefinitionMtime() methods,
deprecated in 1.26, were removed.
* The deprecated 'mediawiki.widgets.CategorySelector' module alias was removed.
Use the 'mediawiki.widgets.CategoryMultiselectWidget' module directly.
=== Deprecations in 1.31 ===
* The Revision class was deprecated in favor of RevisionStore, BlobStore, and
RevisionRecord and its subclasses.
* The global function wfBCP47 is deprecated in favour of LanguageCode::bcp47.
* The global function wfCountDown is now deprecated in favor of
Maintenance::countDown.
* Several methods for returning lists of fields to select from the database
have been deprecated in favor of similar methods that also return the tables
to select from and the join conditions for those tables.
* Block::selectFields() → Block::getQueryInfo()
* RecentChange::selectFields() → RecentChange::getQueryInfo()
* ArchivedFile::selectFields() → ArchivedFile::getQueryInfo()
* LocalFile::selectFields() → LocalFile::getQueryInfo()
* LocalFile::getCacheFields() with a prefix no longer works
* LocalFile::getLazyCacheFields() with a prefix no longer works
* OldLocalFile::selectFields() → OldLocalFile::getQueryInfo()
* RecentChange::selectFields() → RecentChange::getQueryInfo()
* Revision::userJoinCond() → Revision::getQueryInfo( [ 'user' ] )
* Revision::selectUserFields() → Revision::getQueryInfo( [ 'user' ] )
* Revision::pageJoinCond() → Revision::getQueryInfo( [ 'page' ] )
* Revision::selectPageFields() → Revision::getQueryInfo( [ 'page' ] )
* Revision::selectTextFields() → Revision::getQueryInfo( [ 'text' ] )
* Revision::selectFields() → Revision::getQueryInfo()
* Revision::selectArchiveFields() → Revision::getArchiveQueryInfo()
* User::selectFields() → User::getQueryInfo()
* WikiPage::selectFields() → WikiPage::getQueryInfo()
* Revision::setUserIdAndName() was deprecated.
* Access to TitleValue class properties was deprecated, the relevant getters
should be used instead.
* DifferenceEngine::getDiffBodyCacheKey() is deprecated. Subclasses should
override DifferenceEngine::getDiffBodyCacheKeyParams() instead.
* Use of Maintenance::error( $err, $die ) to exit script was deprecated. Use
Maintenance::fatalError() instead.
* Passing a ParserOptions object to OutputPage::parserOptions() is deprecated.
* The RevisionInsertComplete hook is now deprecated; use instead the hook
RevisionRecordInserted. RevisionInsertComplete is still called, but the second
and third parameter will always be null. Hard deprecation is scheduled for
1.32.
* The following methods that get and set ParserOutput state are deprecated.
Callers should use the new stateless $options parameter to
ParserOutput::getText() instead.
* ParserOptions::getEditSection()
* ParserOptions::setEditSection()
* ParserOutput::getEditSectionTokens()
* ParserOutput::setEditSectionTokens()
* ParserOutput::getTOCEnabled()
* ParserOutput::setTOCEnabled()
* OutputPage::enableSectionEditLinks()
* OutputPage::sectionEditLinksEnabled()
* The public ParserOutput state fields $mTOCEnabled and $mEditSectionTokens
are also deprecated.
* License::getLicenses has been deprecated; use License::getLines instead.
* QuickTemplate::setRef() was deprecated in favour of QuickTemplate::set().
Setting template variables by reference allowed violating the principle of
data being immutable once added to the skin template. In practice, this method
was not being used for that. Rather, setRef() existed as memory optimisation
for PHP 4.
* QuickTemplate::setTranslator() and MediaWikiI18N::set() were deprecated in
favour of Skin::msg() parameters.
* MediaWikiI18N::translate() was deprecated in favour of Skin::msg() or
wfMessage().
* Passing false to ParserOptions::setWrapOutputClass() is deprecated. Use the
'unwrap' transform to ParserOutput::getText() instead.
* \ObjectFactory (no namespace) is deprecated, the namespaced class
\Wikimedia\ObjectFactory from the wikimedia/object-factory library should be
used instead.
* CommentStore::newKey is deprecated. Instead, get an instance from
MediaWikiServices.
* The following CommentStore methods have had their signatures changed to
introduce a $key parameter, usage of the methods on instances retrieved from
CommentStore::newKey will remain unchanged but deprecated:
* CommentStore::getFields
* CommentStore::getJoin
* CommentStore::getComment
* CommentStore::getCommentLegacy
* CommentStore::insert
* CommentStore::insertWithTemplate
* The following methods in Title have been renamed, and the old ones are
deprecated:
* Title::getSkinFromCssJsSubpage – use ::getSkinFromConfigSubpage
* Title::isCssOrJsPage – use ::isSiteConfigPage
* Title::isCssJsSubpage – use ::isUserConfigPage
* Title::isCssSubpage – use ::isUserCssConfigPage
* Title::isJsSubpage – use ::isUserJsConfigPage
* The following methods related to caching of half-parsed HTML were deprecated:
* Parser::serializeHalfParsedText()
* Parser::unserializeHalfParsedText()
* Parser::isValidHalfParsedText()
* StripState::getSubState()
* StripState::merge()
* The DeferredStringifier class is deprecated, use Message::listParam() instead.
* The type string for the parameter $lang of DateFormatter::getInstance is
deprecated.
* Wikimedia\Rdbms\SavepointPostgres is deprecated.
* The DO_MAINTENANCE constant is deprecated. RUN_MAINTENANCE_IF_MAIN should be
used instead.
* The function wfShellWikiCmd() has been deprecated, use
MediaWiki\Shell::makeScriptCommand().
* In the future, the hooks 'PreferencesFormPreSave' and 'PreferencesGetLegend'
will be allowed to provide any HTMLForm object rather than PreferencesForm.
=== Other changes in 1.31 ===
* Browser support for Internet Explorer 10 was lowered from Grade A to Grade C.
* Browser support for Opera 12 and older was dropped entirely. Opera 15+
continues at Grade A.
* Multi-content-revision capability was introduced into the storage layer. See
.
* The "free" CSS class is now only applied to unbracketed URLs in wikitext.
Links written using square brackets will get the class "text" not "free".
* RFC 157418: Whitespace is trimmed from wikitext headings, wikitext list items,
wikitext table captions, wikitext table headings, wikitext table cells. HTML
headings, HTML list items, HTML table captions, HTML table headings, HTML
table cells will not have this trimming behavior.
== Compatibility ==
MediaWiki 1.31 requires PHP 7.0.0 or later. Although HHVM 3.18.5 or later is
supported, it is generally advised to use PHP 7.0.0 or later for long term
support.
MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used,
but support for them is somewhat less mature. There is experimental support for
Oracle and Microsoft SQL Server.
The supported versions are:
* MySQL 5.5.8 or later
* PostgreSQL 9.2 or later
* SQLite 3.3.7 or later
* Oracle 9.0.1 or later
* Microsoft SQL Server 2005 (9.00.1399)
== Upgrading ==
1.31 has several database changes since 1.30, and will not work without schema
updates. Note that due to changes to some very large tables like the revision
table, the schema update may take quite long (minutes on a medium sized site,
many hours on a large site).
Don't forget to always back up your database before upgrading!
See the file UPGRADE for more detailed upgrade instructions, including
important information when upgrading from versions prior to 1.11.
For notes on 1.30.x and older releases, see HISTORY.
== 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.freenode.net.
= MediaWiki 1.30 =
== MediaWiki 1.30.2 ==
This is a security and maintenance release of the MediaWiki 1.30 branch.
=== Changes since MediaWiki 1.30.1 ===
* (T204729) WatchedItemStore::countVisitingWatchersMultiple() shouldn't query
all titles when asked for none.
* (T109121) Remove deprecated pear/mail_mime-decode from composer suggested
libraries.
* (T207540) Include IP address in "Login for $1 succeeded" log entry.
* (T205765) Don't link to the obsolete "Extension Matrix" page in installer.
* (T207603) SECURITY: User JS may no longer be loaded with mime type
text/javascript if there is no account associated with the username.
* (T113042) SECURITY: Do not allow loading pages raw with a text/javascript MIME
type if non-admins can edit the page.
* (T207541) Pass email address to mail().
* Fix addition of ug_expiry column to user_groups table on MSSQL.
* (T204531) rdbms: reduce LoadBalancer replication log spam.
* (T213489) Avoid session double-start in Setup.php.
* (T195525) Fix db error outage page.
* (T208871) The hard-coded Google search form on the database error page was
removed.
* (T216968) Return pageid as int in both list=iwbacklinks and
list=langbacklinks.
* (T218608) SECURITY: Fix an issue that prevents Extension:OAuth working when
$wgBlockDisablesLogin is true.
* (T25227) SECURITY: action=logout now requires to be posted and have a csrf
token.
* (T222385) resourceloader: Use AND instead of OR for upsert conds in
saveFileDependencies().
* (T224374) Fix message parameters so that the message that says SQLite is out
of date makes sense.
* SpecialPage::checkLoginSecurityLevel() will now preserve POST data when
reauthenticating.
* FormSpecialPage::execute() will now call checkLoginSecurityLevel() if
getLoginSecurityLevel() returns non-false.
* (T197279) SECURITY: Fix reauth in Special:ChangeEmail.
* (T208881) SECURITY: blacklist CSS var().
* (T209794) SECURITY: rate-limit and prevent blocked users from changing email.
* (T199540) SECURITY: API: Respect $wgBlockCIDRLimit in action=block.
* (T212118) SECURITY: Fix cache mode for (un)patrolled recent changes query.
* (T222036, T222038) SECURITY: Add permission check for user is permitted to
view the log type.
* (T221739) SECURITY: resources: Patch jQuery 1.11.3 for CVE-2019-11358.
== MediaWiki 1.30.1 ==
This is a security and maintenance release of the MediaWiki 1.30 branch.
=== Changes since MediaWiki 1.30.0 ===
* (T169545, CVE-2018-0503) SECURITY: $wgRateLimits entry for 'user' overrides
'newbie'.
* (T194605, CVE-2018-0505) SECURITY: BotPasswords can bypass CentralAuth's
account lock.
* (T87572) Make FormatMetadata::flattenArrayReal() work for an associative
array.
* Updated composer/spdx-licenses from 1.1.4 to 1.3.0 (development dependency).
* (T189567) the CLI installer (maintenance/install.php) learned to detect and
include extensions. Pass --with-extensions to enable that feature.
* (T190503) Let built-in web server (maintenance/dev) handle .php requests.
* (T167507) selenium: Run Chrome headlessly.
* selenium: Pass -no-sandbox to Chrome under Docker.
* (T179190) selenium: Move logic for running tests from package.json to
selenium.sh
* (T192584) Stop incorrectly passing USE INDEX to RecentChange::newFromConds().
* Add default edit rate limit of 90 edits/minute for all users.
* (T186565) Fix PHP Notice from `ob_end_flush()` in `FileRepo::streamFile()`.
* oojs/oojs-ui updated to remove an unnecessary dependancy.
* (T196125) php-memcached 3.0 (provided with PHP 7.0) is now supported.
* (T118683) Fix exception from &$user deref on HHVM in the TitleMoveComplete
hook.
* (T196672) The mtime of extension.json files is now able to be zero
* (T180403) Validate $length in padleft/padright parser functions.
* (T143790) Make $wgEmailConfirmToEdit only affect edit actions.
* (T193995) Fix undefined patchPath() method call in parser tests.
* Special:BotPasswords now requires reauthentication.
* (T191608, T187638) Add 'logid' parameter to Special:Log.
* (T193829) Indicate when a Bot Password needs reset.
* (T151415) Log email changes.
* (T200861) Fix total breakage of SQLite web upgrade.
* (T202550) Unbreak SpecialListusersHeaderForm and SpecialListusersHeader
hooks.
* (T190539) Explicitly require Postgres 9.1.
* (T118420) Unbreak Oracle installer.
== MediaWiki 1.30.0 ==
=== Changes since MediaWiki 1.30.0-rc.0 ===
* Upgraded Moment.js from v2.15.0 to v2.19.3.
* Add ip_changes to postgres/tables.sql.
* Skip null shell parameters.
* Add wfWaitForSlaves() to maintenance/migrateComments.php.
* (T182245) Fix join conditions in ImageListPager.
* (T178626) Revert #contentSub and #jump-to-nav margin changes.
=== MySQL version requirement in 1.30 ===
As of 1.30, MediaWiki now requires MySQL 5.5.8 or higher (see Compatibility
section).
=== Configuration changes in 1.30 ===
* The "C.UTF-8" locale should be used for $wgShellLocale, if available, to avoid
unexpected behavior when code uses locale-sensitive string comparisons. For
example, the Scribunto extension considers "bar" < "Foo" in most locales
since it ignores case.
* $wgShellLocale now affects LC_ALL rather than only LC_CTYPE. See
documentation of $wgShellLocale for details.
* $wgShellLocale is now applied for all requests. wfInitShellLocale() is
deprecated and a no-op, as it is no longer needed.
* $wgJobClasses may now specify callback functions as an alternative to plain
class names. This is intended for extensions that want control over the
instantiation of their jobs, to allow for proper dependency injection.
* $wgResourceModules may now specify callback functions as an alternative
to plain class names, using the 'factory' key in the module description
array. This allows dependency injection to be used for ResourceLoader modules.
* $wgExceptionHooks has been removed.
* (T163562) $wgRangeContributionsCIDRLimit was introduced to control the size
of IP ranges that can be queried at Special:Contributions.
* (T45547) $wgUsePigLatinVariant added (off by default).
* (T152540) MediaWiki now supports a section ID escaping style that allows to
display non-Latin characters verbatim on many modern browsers. This is
controlled by the new configuration setting, $wgFragmentMode.
* $wgExperimentalHtmlIds is now deprecated and will be removed in a future
version, use $wgFragmentMode to migrate off it to a modern alternative.
* $wgExternalInterwikiFragmentMode was introduced to control how fragments in
sinterwikis going outside of current wiki farm are encoded.
* (T120333) Soft-deprecated the use of PHP extension 'mysql' in favor of
'mysqli'. This PHP extension was deprecated in PHP 5.5 and removed in PHP 7.0.
MediaWiki auto-selects the 'mysqli' driver since MediaWiki 1.22, except if
explicitly requested through the configuration parameter $wgDBservers.
* $wgOOUIEditPage was removed, as it is now the default. This was documented as
a temporary variable during the migration period.
=== New features in 1.30 ===
* (T37247) Output from Parser::parse() will now be wrapped in a div with
class="mw-parser-output" by default. This may be changed or disabled using
ParserOptions::setWrapOutputClass().
* (T163562) Added ability to search for contributions within an IP ranges
at Special:Contributions.
* Added 'ChangeTagsAllowedAdd' hook, enabling extensions to allow software-
specific tags to be added by users.
* Added a 'ParserOptionsRegister' hook to allow extensions to register
additional parser options.
* (T45547) Included Pig Latin, a language game in English, as a
LanguageConverter variant. This allows English-speaking developers
to develop and test LanguageConverter more easily. Pig Latin can be
enabled by setting $wgUsePigLatinVariant to true.
* Added RecentChangesPurgeRows hook to allow extensions to purge data that
depends on the recentchanges table.
* Added JS config values wgDiffOldId/wgDiffNewId to the output of diff pages.
* (T2424) Added direct unwatch links to entries in Special:Watchlist (if the
'watchlistunwatchlinks' preference option is enabled). With JavaScript
enabled, these links toggle so the user can also re-watch pages that have
just been unwatched.
* Added $wgParserTestMediaHandlers, where mock media handlers can be passed to
MediaHandlerFactory for parser tests.
* Edit summaries, block reasons, and other "comments" are now stored in a
separate database table. Use the CommentFormatter class to access them.
** This is currently gated by $wgCommentTableSchemaMigrationStage. Most wikis
can set this to MIGRATION_NEW and run maintenance/migrateComments.php as
soon as any necessary extensions are updated.
* (T138166) Added ability for users to prohibit other users from sending them
emails with Special:Emailuser. Can be enabled by setting
$wgEnableUserEmailBlacklist to true.
* (T67297) $wgBrowserBlacklist is deprecated, and changing it will have no
effect. Instead, users using browsers that do not support Unicode will be
unable to edit and should upgrade to a modern browser instead.
=== External library changes in 1.30 ===
==== Upgraded external libraries ====
* Updated justinrainbow/json-schema from v3.0 to v5.2.
* Updated mediawiki/mediawiki-codesniffer from v0.7.2 to v0.12.0.
* Updated wikimedia/composer-merge-plugin from v1.4.0 to v1.4.1.
* Updated wikimedia/relpath from v1.0.3 to v2.0.0.
* Updated OOjs from v2.0.0 to v2.1.0.
* Updated OOUI from v0.21.1 to v0.23.0.
* Updated QUnit from v1.23.1 to v2.4.0.
* Updated phpunit/phpunit from v4.8.35 to v4.8.36.
* Upgraded Moment.js from v2.15.0 to v2.19.3.
==== New external libraries ====
* The class \TestingAccessWrapper has been moved to the external library
wikimedia/testing-access-wrapper and renamed \Wikimedia\TestingAccessWrapper.
* Purtle, a fast, lightweight RDF generator.
=== Bug fixes in 1.30 ===
* (T151633) Ordered list items use now Devanagari digits in Nepalese
(thanks to Sfic)
=== Action API changes in 1.30 ===
* (T37247) action=parse output will be wrapped in a div with
class="mw-parser-output" by default. This may be changed or disabled using
the new 'wrapoutputclass' parameter.
* When errorformat is not 'bc', abort reasons from action=login will be
formatted as specified by the error formatter parameters.
* action=compare can now handle arbitrary text, deleted revisions, and
returning users and edit comments.
* (T164106) The 'rvdifftotext', 'rvdifftotextpst', 'rvdiffto',
'rvexpandtemplates', 'rvgeneratexml', 'rvparse', and 'rvprop=parsetree'
parameters to prop=revisions are deprecated, as are the similarly named
parameters to prop=deletedrevisions, list=allrevisions, and
list=alldeletedrevisions. Use action=compare, action=parse, or
action=expandtemplates instead.
=== Action API internal changes in 1.30 ===
* ApiBase::getDescriptionMessage() and the "apihelp-*-description" messages are
deprecated. The existing message should be split between "apihelp-*-summary"
and "apihelp-*-extended-description".
* (T123931) Individual values of multi-valued parameters can now be marked as
deprecated.
=== Languages updated in 1.30 ===
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.
* Added: kbp (Kabɩyɛ / Kabiyè)
* Added: skr (Saraiki, سرائیکی)
* Added: tay (Tayal / Atayal)
* Removed: tokipona (Toki Pona)
==== Pig Latin added ====
* (T45547) Added Pig Latin, a made-up English variant (en-x-piglatin),
for easier variant development and testing. Disabled by default. It can be
enabled by setting $wgUsePigLatinVariant to true.
=== Other changes in 1.30 ===
* The use of an associative array for $wgProxyList, where the IP address is in
the key instead of the value, is deprecated (e.g. [ '127.0.0.1' => 'value' ]).
Please convert these arrays to indexed/sequential ones (e.g. [ '127.0.0.1' ]).
* mw.user.bucket (deprecated in 1.23) was removed.
* LoadBalancer::getServerInfo() and LoadBalancer::setServerInfo() are
deprecated. There are no known callers.
* File::getStreamHeaders() was deprecated.
* MediaHandler::getStreamHeaders() was deprecated.
* Title::canTalk() was deprecated. The new Title::canHaveTalkPage() should be
used instead.
* MWNamespace::canTalk() was deprecated. The new MWNamespace::hasTalkNamespace()
should be used instead.
* The ExtractThumbParameters hook (deprecated in 1.21) was removed.
* The OutputPage::addParserOutputNoText and ::getHeadLinks methods (both
deprecated in 1.24) were removed.
* wfMemcKey() and wfGlobalCacheKey() were deprecated. BagOStuff::makeKey() and
BagOStuff::makeGlobalKey() should be used instead.
* (T146304) Preprocessor handling of LanguageConverter markup has been improved.
As a result of the new uniform handling, '-{' may need to be escaped
(for example, as '- {') where it occurs inside template arguments
or wikilinks.
* (T163966) Page moves are now counted as edits for the purposes of
autopromotion, i.e., they increment the user_editcount field in the database.
* Two new hooks, LogEventsListLineEnding and NewPagesLineEnding, were added for
manipulating Special:Log and Special:NewPages lines.
* The OldChangesListRecentChangesLine, EnhancedChangesListModifyLineData,
PageHistoryLineEnding, ContributionsLineEnding and
DeletedContributionsLineEnding hooks have an additional parameter, for
manipulating HTML data attributes of RC/history lines.
EnhancedChangesListModifyBlockLineData can do that via the
$data['attribs'] subarray.
* (T130632) The OutputPage::enableTOC() method was removed.
* WikiPage::getParserOutput() will now throw an exception if passed
ParserOptions that would pollute the parser cache. Callers should use
WikiPage::makeParserOptions() to create the ParserOptions object and only
change options that affect the parser cache key.
* Article::viewRedirect() is deprecated.
* IP::isValidBlock() was deprecated. Use the equivalent IP::isValidRange().
* DeprecatedGlobal no longer supports passing in a direct value, it requires a
callable factory function or a class name.
* The $parserMemc global, wfGetParserCacheStorage(), and
ParserCache::singleton() are all deprecated. The main ParserCache instance
should be obtained from MediaWikiServices instead. Access to the underlying
BagOStuff is possible through the new ParserCache::getCacheStorage() method.
* .mw-ui-constructive CSS class (deprecated in 1.27) was removed.
* Sanitizer::escapeId() was deprecated, use escapeIdForAttribute(),
escapeIdForLink() or escapeIdForExternalInterwiki() instead.
* Title::escapeFragmentForURL() was deprecated, use one of the aforementioned
Sanitizer functions or, if possible, Title::getFragmentForURL().
* Second parameter to Sanitizer::escapeIdReferenceList() ($options) now does
nothing and is deprecated.
* mw.util.escapeId() was deprecated, use escapeIdForAttribute() or
escapeIdForLink().
* MagicWord::replaceMultiple() (deprecated in 1.25) was removed.
* WikiImporter now requires the second parameter to be an instance of the
Config, class. Prior to that, the Config parameter was optional (a behavior
deprecated in 1.25).
* Removed 'jquery.mwExtension' module. (deprecated since 1.26)
* mediawiki.ui: Deprecate greys, which are not part of WikimediaUI color palette
any more.
* CdbReader, CdbWriter, CdbException classes (deprecated in 1.25) were removed.
The namespaced classes in the Cdb namespace should be used instead.
* IPSet class (deprecated in 1.26) was removed. The namespaced IPSet\IPSet
should be used instead.
* RunningStat class (deprecated in 1.27) was removed. The namespaced
RunningStat\RunningStat should be used instead.
* MWMemcached and MemCachedClientforWiki classes (deprecated in 1.27) were
removed.
The MemcachedClient class should be used instead.
* EditPage underwent some refactoring and deprecations:
* EditPage::isOouiEnabled() is deprecated and will always return true.
* EditPage::getSummaryInput() and ::getSummaryInputOOUI() are deprecated.
Please use ::getSummaryInputWidget() instead.
* EditPage::getCheckboxes() and ::getCheckboxesOOUI() are deprecated. Please
use ::getCheckboxesWidget() instead.
* Creating an EditPage instance without calling EditPage::setContextTitle()
should be avoided and will be deprecated in a future release.
* EditPage::safeUnicodeInput() and ::safeUnicodeOutput() are deprecated and
no-ops.
* EditPage::$isCssJsSubpage, ::$isCssSubpage, and ::$isJsSubpage are
deprecated. The corresponding methods from Title should be used instead.
* EditPage::$isWrongCaseCssJsPage is deprecated. There is no replacement.
* EditPage::$mArticle and ::$mTitle are deprecated for public usage. The
getters ::getArticle() and ::getTitle() should be used instead.
* Trying to control or fake EditPage context by overriding $wgUser,
$wgRequest, $wgOut, and $wgLang is no longer supported and won't work. The
IContextSource returned from EditPage::getContext() must be modified
instead.
* Parser::getRandomString() (deprecated in 1.26) was removed.
* Parser::uniqPrefix() (deprecated in 1.26) was removed.
* Parser::extractTagsAndParams() now only accepts three arguments. The fourth,
$uniq_prefix was deprecated in 1.26 and has now been removed.
* (T172514) The following tables have had their UNIQUE indexes turned into
proper PRIMARY KEYs for increased maintainability: categorylinks, imagelinks,
iwlinks, langlinks, log_search, module_deps, objectcache, pagelinks,
query_cache, site_stats, templatelinks, text, transcache, user_former_groups,
user_properties.
* IDatabase::nextSequenceValue() is no longer needed by any database backends
(formerly it was needed by PostgreSQL and Oracle), and is now deprecated.
* (T146591) The lc_lang_key index on the l10n_cache table has been changed into
a PRIMARY KEY.
* (T157227) bot_password.bp_user, change_tag.ct_log_id, change_tag.ct_rev_id,
page_restrictions.pr_user, tag_summary.ts_log_id, tag_summary.ts_rev_id and
user_properties.up_user have all been made unsigned on MySQL.
* DB_SLAVE is deprecated. DB_REPLICA should be used instead.
* wfUsePHP() is deprecated.
* wfFixSessionID() was removed.
* wfShellExec() and related functions are deprecated, use Shell::command(). This
also slightly changes the behavior of how execution time limits are calculated
when only some of defaults are overridden per-call. When in doubt, always
override both wall clock and CPU time.
* (T138166) SpecialEmailUser::getTarget() now requires a second argument, the
sending user object. Using the method without the second argument is
deprecated.
* (T67297) Browsers that don't support Unicode will have their edits rejected.
* (T178450) The module 'jquery.badge' is deprecated and will be removed in a
future release. For notifying the user of an event, the Notifications ("Echo")
system should be used instead.
* (T178451) SECURITY: Potential XSS when $wgShowExceptionDetails = false and
browser sends non-standard url escaping.
* (T165846) SECURITY: BotPassword login attempts weren't throttled.
= MediaWiki 1.29 =
== MediaWiki 1.29.3 ==
This is a security and maintenance release of the MediaWiki 1.29 branch.
=== Changes since 1.29.2 ===
* (T169545, CVE-2018-0503) SECURITY: $wgRateLimits entry for 'user' overrides
'newbie'.
* (T194605, CVE-2018-0505) SECURITY: BotPasswords can bypass CentralAuth's
account lock.
* (T180551) Fix LanguageSrTest for language converter
* (T180552) Fix language converter parser test with self-close tags
* (T180537) Remove $wgAuth usage from wrapOldPasswords.php
* (T180485) InputBox: Have inputbox langconvert certain attributes
* (T161732, T181547) Upgraded Moment.js from v2.15.0 to v2.19.3.
* (T172927) Drop vendor from MW release branch
* (T87572) Make FormatMetadata::flattenArrayReal() work for an associative array
* Updated composer/spdx-licenses from 1.1.4 to 1.3.0 (development dependency).
* (T189567) the CLI installer (maintenance/install.php) learned to detect and
include extensions. Pass --with-extensions to enable that feature.
* (T182381) Mask deprecated call in WatchedItemUnitTest
* (T190503) Let built-in web server (maintenance/dev) handle .php requests.
* The karma qunit tests would fail on some configuration due to headers already
sent. Check headers_sent() before sending cpPosTime headers
* (T167507) selenium: Run Chrome headlessly.
* selenium: Pass -no-sandbox to Chrome under Docker
* (T191247) Use MediaWiki\SuppressWarnings around trigger_error('') instead @
* (T75174, T161041) Unit test ChangesListSpecialPageTest::testFilterUserExpLevel
fails under SQLite.
* (T192584) Stop incorrectly passing USE INDEX to RecentChange::newFromConds().
* (T179190) selenium: Move test running logic from package.json to selenium.sh.
* (T117839, T193200) PDFHandler: Fix for pdfinfo changes in poppler-utils 0.48.
* Add default edit rate limit of 90 edits/minute for all users.
* (T196125) php-memcached 3.0 (provided with PHP 7.0) is now supported.
* (T196672) The mtime of extension.json files is now able to be zero
* (T180403) Validate $length in padleft/padright parser functions.
* (T143790) Make $wgEmailConfirmToEdit only affect edit actions.
* (T194237) Special:BotPasswords now requires reauthentication.
* (T191608, T187638) Add 'logid' parameter to Special:Log.
* (T176097) resourceloader: Disable a flaky MessageBlobStoreTest case
* (T193829) Indicate when a Bot Password needs reset.
* (T151415) Log email changes.
* (T118420) Unbreak Oracle installer.
== MediaWiki 1.29.2 ==
This is a security and maintenance release of the MediaWiki 1.29 branch.
=== Changes since 1.29.1 ===
* (T166757) Avoid scoped lock errors in Category::refreshCounts() due to
nesting.
* (T175439) Unbreak Postgres Updater when setting defaults for a column.
* (T160298) Remove use of implicitGroupBy() in ActiveUsersPager.
* Fixed login button label to accept RawMessage.
* Fixed case of SpecialRecentChanges class usage.
* (T174255) Declare uploadCount property in importDump.php.
* (T163646) Pass a string not an int to mysql_real_escape_string().
* (T180143) Bump justinrainbow/json-schema development dependency to ~5.2.
* Updated dev dependancy phpunit/phpunit from v4.8.35 to v4.8.36.
* (T178451) SECURITY: Potential XSS when $wgShowExceptionDetails = false and
browser sends non-standard url escaping.
* (T165846) SECURITY: BotPassword login attempts weren't throttled.
* (T128209) SECURITY: Reflected File Download from api.php.
* (T134100) SECURITY: Do not reveal if user exists during login failure.
* (T176247) SECURITY: Ensure Message::rawParams can't lead to XSS.
* (T125163) SECURITY: Make anchor for headlines escape > and <.
* (T180237) SECURITY: Protect vendor folder with .htaccess.
* (T180231) SECURITY: Remove PHPUnit file with known RCE if exists in
update.php.
* (T124404) SECURITY: XSS in langconverter when regex hits pcre.backtrack_limit.
* (T119158) SECURITY: Handle -{}- syntax in attributes safely.
* (T180488) (T125177) "api.log contains passwords in plaintext" wasn't correctly
fixed in all branches in the previous security release.
== MediaWiki 1.29.1 ==
This is a maintenance release of the MediaWiki 1.29 branch.
The SpamBlacklist and PdfHandler extensions were missing from the generated
packages.
=== Changes since 1.29.1 ===
* (T164999) Define mw.Upload.Dialog.static.name in mediawiki.Upload.Dialog.js.
* (T172061) Fix fatal when passing a category to refreshLinks.php.
== MediaWiki 1.29.0 ==
=== Configuration changes in 1.29 ===
* Default cookie expiration time has been reduced to 30 days. Login cookie
expiration time is kept at 180 days.
* A new configuration variable has been added: $wgCookieSetOnAutoblock. This
determines whether to set a cookie when a user is autoblocked. Doing so means
that a blocked user, even after logging out and moving to a new IP address,
will still be blocked.
* The resetpassword right and associated password reset capture feature has
been removed.
* The $error parameter to the EmailUser hook should be set to a Status object
or boolean false. This should be compatible with at least MediaWiki 1.23 if
not earlier. Returning a raw HTML string is now deprecated.
* The $message parameter to the ApiCheckCanExecute hook should be set to an
ApiMessage. This is compatible with MediaWiki 1.27 and later. Returning a
code for ApiBase::parseMsg() will no longer work.
* ApiBase::$messageMap is no longer public. Code attempting to access it will
result in a PHP fatal error.
* $wgUserEmailUseReplyTo is now true by default to work around restrictive DMARC
policies.
* Subpages are now enabled by default in the Template namespace. Set
$wgNamespacesWithSubpages[NS_TEMPLATE] to false to keep the old behavior.
* $wgRunJobsAsync is now false by default (T142751). This change only affects
wikis with $wgJobRunRate > 0.
* (T158474) "Unknown user" has been added to $wgReservedUsernames.
* (T156983) $wgRateLimitsExcludedIPs now accepts CIDR ranges as well as single
IPs.
* $wgDummyLanguageCodes is deprecated. Additional language code mappings may be
added to $wgExtraLanguageCodes instead.
* (T161453) LocalisationCache will no longer use the temporary directory in it's
fallback chain when trying to work out where to write the cache.
* The user right 'editusercssjs' (deprecated in 1.16) was removed. Use
'editusercss' and 'edituserjs' in $wgGroupPermissions and elsewhere instead.
=== New features in 1.29 ===
* (T5233) A cookie can now be set when a user is autoblocked, to track that user
if they move to a new IP address. This is disabled by default.
* Added ILocalizedException interface to standardize the use of localized
exceptions, largely so the API can handle them more sensibly.
* Blocks created automatically by MediaWiki, such as for configured proxies or
dnsbls, are now indicated as such and use a new i18n message when displayed.
* Added new $wgHTTPImportTimeout setting. Sets timeout for
downloading the XML dump during a transwiki import in seconds.
* Parser limit report is now available in machine-readable format to JavaScript
via mw.config.get('wgPageParseReport').
* Added $wgSoftBlockRanges, to allow for automatically blocking anonymous edits
from certain IP ranges (e.g. private IPs).
* (T59603) Added new magic word {{PAGELANGUAGE}} which returns the language code
of the page being parsed.
* HTML5 form validation attributes will no longer be suppressed. Originally
browsers had poor support for them, but modern browsers handle them fine.
This might affect some forms that used them and only worked because the
attributes were not actually being set.
* Expiry times can now be specified when users are added to user groups.
* Completely new user interface for the RecentChanges page, which
structures filters into user-friendly groups. This has corresponding
changes to how filters are registered by core and extensions.
* The edit form now uses pretty OOjs UI buttons, checkboxes and summary input.
Because this change can cause problems for extensions and on-wiki
scripts depending on the exact HTML, the old version is still available
and can be used by setting $wgOOUIEditPage = false; in LocalSettings.php.
This will be removed later and OOjs UI will become the only option.
To make testing easier, users can also force either mode by adding
&ooui=true or &ooui=false to the action=edit URL.
=== External library changes in 1.29 ===
==== Upgraded external libraries ====
* Updated QUnit from v1.22.0 to v1.23.1.
* Updated cssjanus from v1.1.2 to v1.2.0.
* Updated psr/log from v1.0.0 to v1.0.2.
* Update Moment.js from v2.8.4 to v2.15.0.
* Updated oyejorge/less.php from v1.7.0.10 to v1.7.0.14.
* Updated monolog from v1.18.2 to 1.22.1.
* Updated wikimedia/composer-merge-plugin from v1.3.1 to v1.4.0.
* Updated OOjs from v1.1.10 to v2.0.0.
* Updated jQuery from v1.11.3 to v3.2.1 (including jQuery Migrate v3.0.0).
==== New external libraries ====
* Added wikimedia/timestamp v1.0.0.
* Added wikimedia/remex-html v1.0.1.
==== Removed and replaced external libraries ====
=== Bug fixes in 1.29 ===
* (T62604) Core parser functions returning a number now format the number
according to the page content language, not wiki content language.
* (T27187) Search suggestions based on jquery.suggestions will now correctly
only highlight prefix matches in the results.
* (T157035) "new mw.Uri()" was ignoring options when using default URI.
* Special:Allpages can no longer be filtered by redirect in miser mode.
* (T160519) CACHE_ANYTHING will not be CACHE_ACCEL if no accelerator is
installed.
* (T109140) (T122209) SECURITY: Special:UserLogin and Special:Search allow
redirect to interwiki links.
* (T144845) SECURITY: XSS in SearchHighlighter::highlightText() when
$wgAdvancedSearchHighlighting is true.
* (T125177) SECURITY: API parameters may now be marked as "sensitive" to keep
their values out of the logs.
* (T150044) SECURITY: "Mark all pages visited" on the watchlist now requires a
CSRF token.
* (T156184) SECURITY: Escape content model/format url parameter in message.
* (T151735) SECURITY: SVG filter evasion using default attribute values in DTD
declaration.
* (T161453) SECURITY: LocalisationCache will no longer use the temporary
directory in it's fallback chain when trying to work out where to write the
cache.
* (T48143) SECURITY: Spam blacklist ineffective on encoded URLs inside file
inclusion syntax's link parameter.
* (T108138) SECURITY: Sysops can undelete pages, although the page is protected
against it.
=== Action API changes in 1.29 ===
* Submitting sensitive authentication request parameters to action=login,
action=clientlogin, action=createaccount, action=linkaccount, and
action=changeauthenticationdata in the query string is now an error. They
should be submitted in the POST body instead.
* The capture option for action=resetpassword has been removed
* action=clearhasmsg now requires a POST.
* (T47843) API errors and warnings may be requested in non-English languages
using the new 'errorformat', 'errorlang', and 'errorsuselocal' parameters.
* API error codes may have changed. Most notably, errors from modules using
parameter prefixes (e.g. all query submodules) will no longer be prefixed.
* ApiPageSet-using modules will report the 'invalidreason' using the specified
'errorformat'.
* action=emailuser may return a "Warnings" status, and now returns 'warnings'
and 'errors' subelements (as applicable) instead of 'message'.
* action=imagerotate returns an 'errors' subelement rather than 'errormessage'.
* action=move now reports errors when moving the talk page as an array under
key 'talkmove-errors', rather than using 'talkmove-error-code' and
'talkmove-error-info'. The format for subpage move errors has also changed.
* action=revisiondelete no longer includes a "rendered" property on warnings
and errors for each item. Use errorformat=wikitext if you're wanting parsed
output.
* action=rollback no longer returns a "messageHtml" property. Use
errorformat=html if you're wanting HTML formatting of error messages.
* action=upload now reports optional stash failures as an array under key
'stasherrors' rather than a 'stashfailed' text string.
* action=watch reports 'errors' and 'warnings' instead of a single 'error', and
no longer returns a 'message' on success.
* Added action=validatepassword to validate passwords for the account creation
and password change forms.
* action=purge now requires a POST.
* There is a new `languagevariants` siprop for action=query&meta=siteinfo,
which returns a list of languages with active LanguageConverter instances.
* action=query&query=allpages will no longer filter redirects using a database
query in miser mode. This may result in less results being returned than were
requested.
=== Action API internal changes in 1.29 ===
* New methods were added to ApiBase to handle errors and warnings using i18n
keys. Methods for using hard-coded English messages were deprecated:
* ApiBase::dieUsage() was deprecated
* ApiBase::dieUsageMsg() was deprecated
* ApiBase::dieUsageMsgOrDebug() was deprecated
* ApiBase::getErrorFromStatus() was deprecated
* ApiBase::parseMsg() was deprecated
* ApiBase::setWarning() was deprecated
* ApiBase::$messageMap is no longer public. Code attempting to access it will
result in a PHP fatal error.
* The $message parameter to the ApiCheckCanExecute hook should be set to an
ApiMessage. This is compatible with MediaWiki 1.27 and later. Returning a
code for ApiBase::parseMsg() will no longer work.
* UsageException is deprecated in favor of ApiUsageException. For the time
being ApiUsageException is a subclass of UsageException to allow things that
catch only UsageException to still function properly.
* If, for some strange reason, code was using an ApiErrorFormatter instead of
ApiErrorFormatter_BackCompat, note that the result format has changed and
various methods now take a module path rather than a module name.
* ApiMessageTrait::getApiCode() now strips 'apierror-' and 'apiwarn-' prefixes
from the message key, and maps some message keys for backwards compatibility.
* API parameters may now be marked as "sensitive" to keep their values out of
the logs.
=== Languages updated in 1.29 ===
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.
* Based as always on linguistic studies on intelligibility and language
knowledge by geography, language fallbacks have been expanded. When a
translation is missing in the user's preferred interface language, the
corresponding translation for the fallback language will be used instead.
English will only be used as last resort when there are no translations.
Some configurations (such as date formats and gender namespaces) have also
been updated when using the fallback language's configuration was inadequate.
The new or reinstated language fallbacks are (after cs ↔ sk in 1.28):
ca ↔ oc; hsb ↔ dsb; io → eo; mdf → ru; pnt → el; roa-tara → it; rup → ro;
sh → bs, sr-el, hr.
* (T137376) New language support: Atikamekw (atj).
* (T163600) New language support: Dinka (din).
* (T155957) Talk Namespaces for Javanese language (jv) have been updated.
==== No fallback for Ukrainian ====
* (T39314) The fallback from Ukrainian to Russian was removed. The Ukrainian
language will now use the default fallback language: English. When a
translation to Ukrainian is not available, an English string will be shown.
=== Other changes in 1.29 ===
* Database::getSearchEngine() (deprecated in 1.28) was removed. Use
SearchEngineFactory::getSearchEngineClass() instead.
* $wgSessionsInMemcached (deprecated in 1.20) was removed. No replacement is
required as all sessions are stored in Object Cache now.
* MWHttpRequest::execute() should be considered to return a StatusValue; the
Status return type is deprecated.
* User::edits() (deprecated in 1.21) was removed.
* Xml::escapeJsString() (deprecated in 1.21) was removed.
* Article::getText() and Article::prepareTextForEdit() (deprecated in 1.21)
were removed.
* Article::getAutosummary() and WikiPage::getAutosummary() (deprecated in 1.21)
were removed.
* Hook ArticleViewCustom (deprecated in 1.21) was removed. Use
ArticleContentViewCustom instead.
* Hooks EditPageGetDiffText and ShowRawCssJs (deprecated in 1.21) were removed.
* Class RevisiondeleteAction (deprecated in 1.25) was removed.
* WikiPage::prepareTextForEdit() (deprecated in 1.21) was removed.
* WikiPage::getText() (deprecated in 1.21) was removed.
* Article::fetchContent() (deprecated in 1.21) was removed.
* User::getPassword() (deprecated in 1.27) was removed.
* User::getTemporaryPassword() (deprecated in 1.27) was removed.
* User::isPasswordReminderThrottled() (deprecated in 1.27) was removed.
* Class FSRepo (deprecated in 1.19) was removed.
* WebRequest::checkSessionCookie() (deprecated in 1.27) was removed. Use
\MediaWiki\Session\SessionManager::singleton()->getPersistedSessionId()
instead.
* Class ImageGallery (deprecated in 1.22) was removed.
Use ImageGalleryBase::factory instead.
* Title::moveNoAuth() (deprecated in 1.25) was removed. Use MovePage class
instead.
* Hook UnknownAction (deprecated in 1.19) was actually deprecated (it will now
emit warnings). Create a subclass of Action and add it to $wgActions instead.
* WikiRevision::getText() (deprecated since 1.21) is no longer marked
deprecated.
* Linker::getInterwikiLinkAttributes() (deprecated since 1.25) was removed.
* Linker::getInternalLinkAttributes() (deprecated since 1.25) was removed.
* Linker::getInternalLinkAttributesObj() (deprecated since 1.25) was removed.
* Linker::getLinkAttributesInternal() (deprecated since 1.25) was removed.
* RedisConnectionPool::handleException (deprecated since 1.23) was removed.
* The static properties mw.Api.errors and mw.Api.warnings, containing incomplete
and outdated lists of errors/warnings returned by the API, are now deprecated.
* wiki.phtml entry point was removed. Refer to index.php instead. If you want
"wiki.phtml" URLs to continue to work, set up redirects. In Apache, this can
be done by enabling mod_rewrite and adding the following rules to your
configuration:
RewriteEngine On
RewriteBase /
RewriteRule ^/w/wiki\.phtml$ /w/index.php [R=301,L]
* Hook ArticleAfterFetchContent (deprecated in 1.21) was removed.
Use ArticleAfterFetchContentObject instead.
* Hook ArticleInsertComplete (deprecated in 1.21) was removed.
Use PageContentInsertComplete instead.
* Hook ArticleSave (deprecated in 1.21) was removed.
Use PageContentSave instead.
* Hook ArticleSaveComplete (deprecated in 1.21) was removed.
Use PageContentSaveComplete instead.
* Hook EditFilterMerged (deprecated in 1.21) was removed.
Use EditFilterMergedContent instead.
* Hook EditPageGetPreviewText (deprecated in 1.21) was removed.
Use EditPageGetPreviewContent instead.
* Hook TitleIsCssOrJsPage (deprecated in 1.21) was removed.
Use ContentHandlerDefaultModelFor instead.
* Hook TitleIsWikitextPage (deprecated in 1.21) was removed.
Use ContentHandlerDefaultModelFor instead.
* Article::getContent() (deprecated in 1.21) was removed.
* Revision::getText() (deprecated in 1.21) was removed.
* Article::doEdit() and WikiPage::doEdit() (deprecated in 1.21) were removed.
* Parser::replaceUnusualEscapes() (deprecated in 1.24) was removed.
* Article::doEditContent() was marked as deprecated, to be removed in 1.30
or later.
* ContentHandler::runLegacyHooks() was removed.
* refreshLinks.php now can be limited to a particular category with
--category=... or a tracking category with --tracking-category=...
* User-like objects that are passed to SpecialUserRights and its subclasses are
now required to have a getGroupMemberships() method. See UserRightsProxy for
an example.
* User::$mGroups (instance variable) was marked private. Use User::getGroups()
instead.
* User::getGroupName(), User::getGroupMember(), User:getGroupPage(),
User::makeGroupLinkHTML(), and User::makeGroupLinkWiki() were deprecated.
Use equivalent methods on the UserGroupMembership class.
* Maintenance scripts and tests that call User::addGroup() must now ensure that
User objects have been added to the database prior to calling addGroup().
* Protected function UsersPager::getGroups() was removed, and protected function
UsersPager::buildGroupLink() was changed from a static to an instance method.
* The third parameter ($cache) to the UsersPagerDoBatchLookups hook was changed;
see docs/hooks.txt.
* User::crypt() (deprecated in 1.24) was removed.
* User::comparePasswords() (deprecated in 1.24) was removed.
* ArchivedFile::getUserText() (deprecated in 1.23) was removed.
* HTMLFileCache::newFromTitle() (deprecated in 1.24) was removed.
* BREAKING CHANGE: Internal signature changes to ChangesListSpecialPage
and subclasses. It should only break if you call buildMainQueryConds
(changed to buildQuery with new signature) or doMainQuery (new
signature). Subclasses are likely to call at least doMainQuery
(possibly both), but other classes might too, because they were
public.
Also, some related hooks were deprecated, but this is not yet a
breaking change.
* Removed 'jquery.arrowSteps' module. (deprecated since 1.28)
* The 'jquery.autoEllipsis' ResourceLoader module is now deprecated.
* WikiRevision::$fileIsTemp was deprecated.
* WikiRevision::$importer was deprecated.
* WikiRevision::$user was deprecated.
* Article::getLastPurgeTimestamp(), WikiPage::getLastPurgeTimestamp(), and the
WikiPage::PURGE_* constants are deprecated, and the functions will always
return false. They were a hack for an issue that has since been fixed.
* Hook 'EditPageBeforeEditChecks' is now deprecated. Instead use the new hook
'EditPageGetCheckboxesDefinition', or 'EditPage::showStandardInputs:options'
if you don't actually care about checkboxes and just want to add some HTML
to the page.
* Selflinks are now rendered as href-less tags with the class mw-selflink
rather than tags. The old class name, "selflink", was deprecated
and will be removed in a future release. (T160480)
* (T156184) $wgRawHtml will no longer apply to internationalization messages.
* Browser support for non-ES5 JavaScript browsers, including Android 2,
Opera <12.10, and Internet Explorer 9, was lowered from Grade A to Grade C.
* Removed wikibits global methods deprecated since MediaWiki 1.17 (T122755):
is_gecko, is_chrome_mac, is_chrome, webkit_version, is_safari_win, is_safari,
webkit_match, is_ff2, ff2_bugs, is_ff2_win, is_ff2_x11, opera95_bugs,
opera7_bugs, opera6_bugs, is_opera_95, is_opera_preseven, is_opera,
ie6_bugs, clientPC, changeText, killEvt, addHandler, hookEvent,
addClickHandler, removeHandler, getElementsByClassName, getInnerText,
setupCheckboxShiftClick, addCheckboxClickHandlers, mwEditButtons,
mwCustomEditButtons, injectSpinner, removeSpinner, escapeQuotes,
escapeQuotesHTML, jsMsg, addPortletLink, appendCSS, tooltipAccessKeyPrefix,
tooltipAccessKeyRegexp, updateTooltipAccessKeys.
* The ID of the element containing the login link has changed from
'pt-login' to 'pt-login-private' in private wikis.
* The old, neglected "bulletin board style toolbar" in the edit form is now
deprecated (T30856). This old code dates from 2006, and was replaced in the
MediaWiki release tarball and in Wikimedia production by the WikiEditor
extension in 2010. It is only shown to users if no other editor was
installed, and leads to confusion.
* (T92459) Loading ResourceLoader modules containing JavaScript through
addModuleStyles() is deprecated and will log a warning server-side.
= MediaWiki 1.28 =
== MediaWiki 1.28.3 ==
This is a security and maintenance release of the MediaWiki 1.28 branch.
=== Changes since 1.28.2 ==
* (T168856) Allow SVGs created by Dia to be uploaded.
* (T157545) Add missing doUpdates() call to refreshLinks.php.
* (T165714) (T100085) Better handling of jobs execution in post-connection
shutdown.
* (T154425) (T154438) (T157679) Use AutoCommitUpdate instead of
Database->onTransactionIdle.
* (T154425) Make DeferredUpdates detect LBFactory transaction rounds.
* (T149454) Restore erroneously removed realTableName call from
DatabasePostgres.
* (T167798) Fix phrase search and highlighting for phrase queries.
* (T151136) Provide credits information to callbacks in extension registration.
* (T160462) Allow namespaces defined in extension.json to be overwritten
locally.
* (T168337) Fix ErrorPageError to work from non-UI contexts.
* (T143788) Backports for PHP 7.0 and 7.1 support.
* (T175439) Unbreak Postgres Updater when setting defaults for a column.
* (T160298) Remove use of implicitGroupBy() in ActiveUsersPager.
* (T174255) Declare uploadCount property in importDump.php.
* (T180231) SECURITY: Updated dev dependancy phpunit/phpunit from v4.8.24 to
v4.8.36.
* (T178451) SECURITY: Potential XSS when $wgShowExceptionDetails = false and
browser sends non-standard url escaping.
* (T165846) SECURITY: BotPassword login attempts weren't throttled.
* (T128209) SECURITY: Reflected File Download from api.php.
* (T134100) SECURITY: Do not reveal if user exists during login failure.
* (T176247) SECURITY: Ensure Message::rawParams can't lead to XSS.
* (T125163) SECURITY: Make anchor for headlines escape > and <.
* (T180237) SECURITY: Protect vendor folder with .htaccess.
* (T180231) SECURITY: Remove PHPUnit file with known RCE if exists in
update.php.
* (T124404) SECURITY: XSS in langconverter when regex hits pcre.backtrack_limit.
* (T119158) SECURITY: Handle -{}- syntax in attributes safely.
== MediaWiki 1.28.2 ==
Due to a packaging error, the wrong version of the SyntaxHighlight extension was
included in the tarball version of MediaWiki 1.28.1. The version included had a
serious security issue in it (T158689). There was also some minor code fixes in
MediaWiki itself since 1.28.1, but none of them were security relevant.
== MediaWiki 1.28.1 ==
This is a security and maintenance release of the MediaWiki 1.28 branch.
=== Changes since 1.28.0 ===
* $wgRunJobsAsync is now false by default (T142751). This change only affects
wikis with $wgJobRunRate > 0.
* Fix fatal from "WaitConditionLoop" not being found, experienced when a wiki
has more than one database server setup.
* (T152717) Better escaping for PHP mail() command,
* (T154670) A missing method causing the MySQL installer to fatal in rare
circumstances was restored.
* (T154672) Un-deprecate ArticleAfterFetchContentObject hook.
* (T158766) Avoid SQL error on MSSQL when using selectRowCount().
* (T145635) Fix too long index error when installing with MSSQL.
* (T156184) $wgRawHtml will no longer apply to internationalization messages.
* (T160519) CACHE_ANYTHING will not be CACHE_ACCEL if no accelerator is
installed.
* (T154872) Fix incorrect ar_usertext_timestamp index names in new 1.28
installs.
* (T109140) (T122209) SECURITY: Special:UserLogin and Special:Search allow
redirect to interwiki links.
* (T144845) SECURITY: XSS in SearchHighlighter::highlightText() when
$wgAdvancedSearchHighlighting is true.
* (T125177) SECURITY: API parameters may now be marked as "sensitive" to keep
their values out of the logs.
* (T150044) SECURITY: "Mark all pages visited" on the watchlist now requires a
CSRF token.
* (T156184) SECURITY: Escape content model/format url parameter in message.
* (T151735) SECURITY: SVG filter evasion using default attribute values in DTD
declaration.
* (T161453) SECURITY: LocalisationCache will no longer use the temporary
directory in it's fallback chain when trying to work out where to write the
cache.
* (T48143) SECURITY: Spam blacklist ineffective on encoded URLs inside file
inclusion syntax's link parameter.
* (T108138) SECURITY: Sysops can undelete pages, although the page is protected
against it.
== MediaWiki 1.28 ==
=== Changes since 1.28.0-rc1 ===
* (T148957) Replace wgShowExceptionDetails with wgShowDBErrorBacktrace on db
errors.
* (T148956) Only apply wgDBschema to postgres/mssql.
* (T145991) Introduce separate log action for deleting pages on move.
* (T141474) (T110464) Bypass login page if no user input is required.
=== Changes since 1.28.0-rc0 ===
* (T142210) The changes to move the parser "NewPP limit report" from a HTML
comment to a machine-readable JavaScript config option 'wgPageParseReport'
have been undone. They caused the human-readable limit report to be shown
incompletely or not at all. ParserOutput::setLimitReportData() and
getLimitReportData() behave as they did in MediaWiki 1.27 again.
* (T149510) Value of {{DISPLAYTITLE:}} parser function will not be used for
the text of subheadings on a category page when creating it. This wasn't
working correctly.
* (T106793) MediaWiki will no longer try to perform a HTTP redirect to the
canonical pretty URL when a non-pretty URL is used. It resulted in redirect
loops in some clients and in some server configurations. This undoes a change
made in MediaWiki 1.26.
* (T149759) manifest_version: 2 was removed.
=== Configuration changes in 1.28 ===
* $wgSend404Code now affects status code of action=history if the page is not
there.
* BREAKING CHANGE: $wgHTTPProxy is now *required* for all external requests
made by MediaWiki via a proxy. Relying on the http_proxy environment
variable is no longer supported.
* The load.php entry point now enforces the existing policy of not allowing
access to session data, which includes the session user and the session
user's language. If such access is attempted, an exception will be thrown.
* The number of internal PBKDF2 iterations used to derive the session secret
is configurable via $wgSessionPbkdf2Iterations.
* Upload dialog's file upload log comment can now be configured separately for
local and foreign uploads.
* $wgForeignUploadTargets now defaults to `[ 'local' ]`, where `'local'`
signifies local uploads. A value of `[]` (empty array) now means that
no upload targets are allowed, effectively disabling the upload dialog.
* The deprecated $wgEditEncoding variable has been removed; it was only used
for Esperanto language character conversion. You are now recommended to use
input methods provided by the UniversalLanguageSelector extension.
* When $wgPingback is true, MediaWiki will periodically ping
https://www.mediawiki.org/beacon with basic information about the local
MediaWiki installation. This data includes, for example, the type of system,
PHP version, and chosen database backend. This behavior is off by default.
* When $wgEditSubmitButtonLabelPublish is true, MediaWiki will label the button
to store-to-database-and-show-to-others as "Publish page"/"Publish changes";
if false, the default, they will be "Save page"/"Save changes".
* The 'editcontentmodel' permission is now granted to all logged-in users
('user').
instead of just administrators ('sysop'). Documentation for this feature is
available at .
* $wgRevisionCacheExpiry is now set to one week by default instead of being
disabled.
* Magic links are now disabled by default, and can be re-enabled by modifying
the value of $wgEnableMagicLinks. Their usage is discouraged, but if they are
manually enabled, a tracking category will be added to help identify usage and
make it easier to migrate away from. If you depend upon magic link
functionality, it is requested that you comment on
and explain your use case(s).
* New config variable $wgCSPFalsePositiveUrls to control what URLs to ignore
in upcoming Content-Security-Policy feature's reporting.
=== New features in 1.28 ===
* User::isBot() method for checking if an account is a bot role account.
* Added a new 'slideshow' mode for galleries.
* Added a new hook, 'UserIsBot', to aid in determining if a user is a bot.
* Added a new hook, 'ApiMakeParserOptions', to allow extensions to better
interact with API parsing.
* Added a new hook, 'UploadVerifyUpload', which can be used to reject a file
upload. Unlike 'UploadVerifyFile' it provides information about upload comment
and the file description page, but does not run for uploads to stash.
* (T141604) Extensions can now provide a better error message when their
maintenance scripts are run without the extension being installed.
* (T8948) Numeric sorting in categories is now supported by setting
$wgCategoryCollation to 'uca-default-u-kn' or 'uca--u-kn'. If you
can't use UCA collations, a 'numeric' collation is also available. If
migrating from another collation, you will need to run the updateCollation.php
maintenance script.
* Two new codes have been added to #time parser function: "xit" for days in
current month, and "xiz" for days passed in the year, both in Iranian
calendar.
* mw.Api has a new option, useUS, to use U+001F (Unit Separator) when
appropriate for sending multi-valued parameters. This defaults to true when
the mw.Api instance seems to be for the local wiki.
* After a client performs an action which alters a database that has replica
databases, MediaWiki will wait for the replica databases to synchronize with
the master database while it renders the HTML output. However, if the output
is a redirect to another wiki on the wiki farm with a different domain,
MediaWiki will instead alter the redirect URL to include a ?cpPosTime
parameter that triggers the database synchronization when the URL is followed
by the client. The same-domain case uses a new cpPosTime cookie.
* Added new hooks, 'ApiQueryBaseBeforeQuery', 'ApiQueryBaseAfterQuery', and
'ApiQueryBaseProcessRow', to make it easier for extensions to add 'prop' and
'show' parameters to existing API query modules.
=== External library changes in 1.28 ===
==== Upgraded external libraries ====
* Updated es5-shim from v4.1.5 to v4.5.8
* Updated composer/semver from v1.4.1 to v1.4.2
* Updated wikimedia/php-session-serializer from v1.0.3 to v1.0.4
==== New external libraries ====
* Added wikimedia/scoped-callback v1.0.0
* Added wikimedia/wait-condition-loop v1.0.1
=== Bug fixes in 1.28 ===
* (T146496) action=history pages should return 404 HTTP error code if the page
does not exist
* (T137264) SECURITY: XSS in unclosed internal links
* (T133147) SECURITY: Escape '<' and ']]>' in inline