MediaWiki 1.27/wmf.14/Changelog

Core changes

 * - Cache user data in memory
 * - Include ParserCache::save backtrace in MF pollution debug log
 * - [1.27.0-wmf.14] MF cache pollution debug log
 * - MimeMagic: Recognise font files
 * - Revert "Prevent duplicate memcached lookups for user record"
 * - Use sync writes for replication of 'store' operations
 * - Add TitleMoveStarting, mirroring TitleMoveCompleting
 * - Prevent duplicate memcached lookups for user record
 * - Revert "Revert "SessionBackend: skip isUserSessionPrevented check for anons""
 * - OOjs UI: Fix #gatherPreInfuseState called incorrectly, causing TypeErrors
 * - Revert "SessionBackend: skip isUserSessionPrevented check for anons"
 * - SessionBackend: skip isUserSessionPrevented check for anons
 * - Fix resource path check when ResourceBasePath is an empty string
 * - parserTest: Make $wgResourceBasePath match $wgScriptPath
 * - Do not unauthenticate if autocreation fails due to a race
 * - resourceloader: Remove $wgUser optimization that uses session
 * - Fix session store logging
 * - SessionManager: Autocreate should use READ_LATEST when necessary
 * - Session: Implement ArrayAccess
 * - CookieSessionProvider: It's persisted if we have a 'Token' cookie
 * - Revert "Log multiple IPs using the same session or the same user account"
 * - CachedBagOStuff: cache backend misses
 * - Enforce MW_NO_SESSION, add MW_NO_SESSION_HANDLER
 * - Update VE-MW submodule to wmf/1.27.0-wmf.14 HEAD (a0f62da)
 * - Don't send RC_CATEGORIZE events to the IRC feed
 * - Update VisualEditor for Ifebfb797
 * - MimeMagic: Recognise .htc as text/x-component
 * - Allow users to tag file uploads
 * - UploadBooklet: Show image thumbnail in both steps
 * - UploadBooklet: Switch on showDropTarget in the SelectFileWidget
 * - mediawiki.mixins: Remove `-o-transition`
 * - mw.Upload.BookletLayout: Use notice instead of popup for help text
 * - Use global cache keys login/create account rate limitting
 * - Document that Http::get and Http::post can return false
 * - TOC: Use padding instead of inline-block for space
 * - Make maintenance/findHooks.php pass again
 * - RELEASE-NOTES: Remove register_globals "Security reminder"
 * - Add 2 FIXMEs about confusingly named functions
 * - Remove references to safe_mode INI setting
 * - FormatJson: Remove PHP 5.3 compatibility code
 * - Upgrade mismatched commit warnings to exceptions
 * - Add 'reason' to UserGroupsChanged hook
 * - Update AutoLoaderTest and ran maintenance/generateLocalAutoload.php
 * - Remove REQUEST_TIME_FLOAT hack for old PHP
 * - SessionProvider::mergeMetadata: Log additional data
 * - .5.9...
 * - Follow-up I0a3bf8fb: Load oojs-ui-core.styles not the deprecated oojs-ui.styles
 * - Remove register_globals and magic_quotes_* checks
 * - Remove gzdecode polyfill from includes/GlobalFunctions.php
 * - Remove PHP < 5.3.6 compatibility in LegacyLogger
 * - Fix invalid key warning in CookieSessionProvider error handling code
 * - Log multiple IPs using the same session or the same user account
 * - InfoAction: Remove array dereferencing workaround
 * - Stop doing $that = $this in includes/parser
 * - mw.ForeignStructuredUpload.BookletLayout: Remove A/B test code
 * - Suppress SessionManager sessions in the installer
 * - Stop doing $that = $this in includes/specialpage
 * - Stop doing $that = $this in includes/changes
 * - Follow-up to 02818c441cb10ce6bec2bc673fefdf1513791dc3
 * - Stop doing $that = $this in includes/user
 * - Allow changing cookie options in WebResponseSetCookie hook
 * - Fix a bunch of call-time pass-by-reference errors
 * - Remove < PHP 5.4 register_shutdown_function from phpunit.php
 * - Add MediaWikiTestCase convenience method for mocking a logger
 * - Reduce conditional for calling openssl_random_pseudo_bytes
 * - Disable testIPTCParseForcedUTFButInvalid on PHP > 5.6.0 but < 5.6.10
 * - Improve docs for $wgPHPSessionHandling
 * - resourceloader: Remove obsolete '$that = $this' closure pattern
 * - Add support for traits in ClassCollector
 * - Stop doing $that = $this in includes/deferred
 * - Stop doing $that = $this in includes/jobqueue
 * - Stop doing $that = $this in includes/filebackend
 * - Stop doing $that = $this in includes/libs
 * - Remove "$that" from SessionManager
 * - Remove unused imports from Session classes
 * - Stop doing $that = $this in includes/db
 * - PHPSessionHandler: Implement SessionHandlerInterface
 * - ApiMessage: Use a trait to avoid code duplication
 * - resourceloader: Disable localStorage cache on FF, Opera
 * - Make change tagging of edits in RecentChange::notifyNew/Edit
 * - In Installer, set the context language early to avoid loading from User
 * - In Installer, set the user to an anon in RequestContext, not just wgUser
 * - Drop FastStringSearch support from ReplacementArray
 * - Add support for Laki
 * - Stop doing $that = $this in Tests
 * - Bump required PHP version to 5.5.9
 * - Add @since to ParserOptions::newFromAnon
 * - Fix EventRelayerGroup constructor
 * - Make CDN purges send EventRelayer events
 * - Update OOjs UI to v0.15.3
 * - Fix case of Html class in HtmlTest comments
 * - interwiki: Fix-up for I5a979f047031e
 * - Revert "Limit ip-all/subnet-all ping limts per wiki"
 * - jsduck: Remove broken url from custom_tags.rb
 * - resourceloader: Introduce window.NORLQ
 * - getFooterIcons returns an array
 * - Set doesWrites for SpecialWatchlist
 * - Avoid setRequestExpectations call in internal API mode
 * - mediawiki.action.edit.preview.js: Use formatversion=2 for API requests
 * - Don't try to auto-create users when MW_NO_SESSION is defined
 * - Add tests for LanguageConverter classes that didn't have them
 * - Remove extra line breaks in memcached debug output
 * - build: Bump grunt-contrib-jshint from 0.11.3 to 0.12.0
 * - build: Bump devDependencies to latest
 * - Get file from WikiFilePage, instead of ImagePage
 * - OutputPage.php: Remove misleading comment
 * - Clarify and expand messages mentioning "loss of session data"
 * - mediawiki.widgets: Use formatversion=2 for API requests
 * - mediawiki.Title: Fix typo "add" in documentation
 * - Set context on RedirectSpecialPage in MediaWiki.php
 * - Add IContextSource as parameter to ChangeTags::formatSummaryRow
 * - Work around T87871 to avoid double-loading OOjs UI PHP styles
 * - phpdoc @return MediaWikiTitleCodec in Title::getTitleParser
 * - Use LinkTarget in some namespaceDupes methods
 * - Use LinkTarget in EmailNotification::updateWatchlistTimestamp
 * - Use LinkTarget in Revision::newFromTitle
 * - Use LinkTarget in LinkBatch::addObj
 * - resourceloader: Reduce module_deps write slams after deployments
 * - Don't modify $wgHooks on language object construction
 * - DiffFormatter: Don't mess with PHP output buffering

Vendor

 * - Update wikimedia/textcat to version with autoloading
 * - Re-add psr/log Traits
 * - Bump required PHP version to 5.5.9
 * - Add wikimedia/textcat to vendor repository

CentralAuth

 * - Avoid using "new CentralAuthUser" since it avoids the cache
 * - Reduce memcache traffic for central session storage
 * - Cache CentralAuthUsers more aggressively
 * - CentralAuth sessions should always be persistent

CirrusSearch

 * - Fix undefined variable $term in InterwikiSearcher
 * - Allow access to $config from extending classes
 * - Woops, another silly typo :(
 * - Some typo fixes for lang detectors
 * - Add implementation for TextCat language detection
 * - Adjust rounding of rate in forceSearchIndex.php output
 * - Remove unused imports from suggest(er) classes
 * - Fix: Call to undefined function CirrusSearch\Search\getScore
 * - Replace usage of wgMemc with ObjectCache::getLocalClusterInstance
 * - Access first heading by class name, not by id
 * - Added few params useful to debug primary lucene score
 * - Use $this for private, non-static Searcher methods
 * - Add limit param to runSearch

Cite

 * - Change Mediawiki:Cite error ref_no_key text
 * - #cite_note and #cite_ref links generated from empty references are broken
 * - Store references in page_props and cache
 * - VE: Fix i18n names broken during migration

Citoid

 * - VE: Fix i18n names broken during migration

CleanChanges

 * - Require extension registration
 * - Add linters and "beautify"
 * - Use non-deprecated hooks

ConfirmEdit

 * - Use global cache keys bad login rate limitting captcha trigger
 * - Fix case of Html class

ContentTranslation

 * - Validations should not fail the translation save
 * - Add mapping from be-tarask to be-x-old
 * - Fresh translation after deletion should have correct author and dates
 * - Animation on 'Favorite' and 'Discard' actions
 * - ext.cx.translation.storage: Store the whole section HTML
 * - Update ContentTranslation notification text
 * - Cherry-pick rebase fix from Ic4d581b4d0
 * - Do not delete the translation which was once published
 * - Linker: Do not show the tool for headings
 * - Linter card: Validate the translation on save
 * - Add translation validator module
 * - Validate sections against AbuseFilter on save
 * - Expand documentation of ContentTranslation messages
 * - Document mw.cx.cta.shown event
 * - Moving stats scripts to report generator repo

DonationInterface

 * - Remove France from GlobalCollect forms.
 * - Use composer-managed Minfraud classes
 * - Nonsense Name Fraud Filter
 * - Ensure Adyen result switcher logs correct OID

Echo

 * - Add some debug logging to thank-you-edit notifications
 * - Echo API returns absolute URLs in notification links
 * - Allow setting the unread counts to 0 in the echo_unread_wikis
 * - Truncate section names to 50 char
 * - Increase space between notification header and body
 * - Increase contrast between header and body text in notifications
 * - generateSampleNotifications.php: Generate OpenStackManager notifications
 * - Avoiding the use of
 * - Run scripts/gen-autoload.php
 * - Get rid of pre-5.4 CallbackFilterIterator implementation
 * - Have EventPresentationModel implement JsonSerializable
 * - Introduce congratulatory notifications for reaching edit thresholds
 * - Add email body preview to emailuser notification
 * - Generate bundled page-linked notifications in test script
 * - Bold pages and sections in notifications
 * - Comparing User objects is unreliable
 * - Crush trash.svg
 * - Convert secondary actions to their own class
 * - Add subject to email notification body
 * - If user only has foreign messages, the messages badge should not be suppressed
 * - Truncate usernames to 20 char in notifications
 * - Add thank icon
 * - Generate CX notifications in maintenance script
 * - Get rid of old flyout formatter code
 * - Use new trash icon
 * - Use current HTML formatter (for special page) instead of previous

EducationProgram

 * - Rephrase notifications

Flow

 * - Fix board move DB issue using new hook TitleMoveStarting
 * - Make sure UUID::getAlphadecimal output can always feed back into ::create
 * - ref_target should be NOT NULL
 * - Make some functions actually abstract since PHP 5.3.9+ lets us
 * - Do not bold the quotes in notifications
 * - Don't send mention notification for first-post if already mentioned in title
 * - Don't trigger new-topic notification when user is also mentioned in first post
 * - Fix issues with incorrect HTML->plaintext and double escaping
 * - Bold pages and topic names in notifications

GWToolset

 * - Revert "Convert GWToolset to extension registration"
 * - Revert "Fix fatal in beta that threatens to be propagated to production"
 * - Fix fatal in beta that threatens to be propagated to producton
 * - Convert GWToolset to extension registration
 * - Add PHP linting with mediawiki-codesniffer
 * - Don't roll your own PHP version checking; core already has it

Gather

 * - Use deviceTabletWidth from core

GeoData

 * - Removing PHP 5.3 support

Graph

 * - Bumped graph2.compiled, package ref
 * - Removed recursive parse from body
 * - Fixed api origin parameter
 * - Removing obsolete html Width attribute
 * - Regression: Treat-As-Untrusted and origin headers

Math

 * - Argument #4 for ValueValidators\Error::newError needs to be an array
 * - Fixed broken Selenium test
 * - RDF Formatter for Math data type
 * - Add more complete PHPDoc tags to all tests

MobileFrontend

 * - Remove RejectParserCacheValue hook handler
 * - Decode an escaped data attribute before making an API request
 * - Fix Browser#isWideScreen
 * - Don't use 'qlow' for NetSpeed=B
 * - Hide cancel and pipe seaparator in editor in nojs
 * - Also fade out image container when image loads
 * - Use new scrollIntoView method, now in surface
 * - Add "_merge_strategy": "array_plus_2d" to config wgMFExperiments
 * - Structured language overlay filtering fix
 * - Replace transition with animation
 * - Lazy load images (only JS, when configured)
 * - Add feature flag for lazy loading images
 * - Fix failing mainmenu_loggedin step
 * - Hygiene: Remove writeOutput function from InlineDiffFormatter
 * - InlineDiffFormatter: Use writeOutput when available
 * - Hygiene: Obtain device width from value in core
 * - New language overlay
 * - Fix the refresh button on Special:Nearby
 * - Make SchemaEdit#log always return jQuery.Promise
 * - Hygiene: Cleanup history link generation
 * - Allow other skins to be the mobile skin
 * - Provide low-resolution NetSpeed option in Special:MobileOptions

MultimediaViewer

 * - Set a user-agent in browser tests
 * - Fix "undefined method test_name" error message in Selenium tests
 * - jsduck: Output to "docs/" like all other extensions

ORES

 * Newly deployed extension

OpenStackManager

 * - OpenStackNovaUser: set $this->username to the actual username, always
 * - Increase the chances of getting the project name when checking hiera permission
 * - Change getProjectsForUser to getRoleAssignmentsForUser
 * - Added OpenStackNovaRole::getRoleNameForId
 * - Cache project name
 * - SpecialNovaProject: Don't pass in both projectid and projectname to actions
 * - SpecialNovaRole: Fix policy check for member add/delete
 * - Added a v3 call to get projects for a given user.
 * - Add a keystone v3 call to determine role membership.
 * - Added migration tool to adopt keystone-based projects and role assignment
 * - Modify projects and roles using keystone calls
 * - OpenStackNovaProject:: Replace the getServiceGroupHomedirPattern function
 * - Change OpenStackNovaUser::inRole to take a projectName instead of an ID
 * - Add a cache for the members of a given project/role combination.
 * - Do not bold project name in notification
 * - memberDNs should be based off the userid, not the username.
 * - Update OpenStackNovaUser to use proper OpenStackNovaProject calls
 * - Distinguish between project names and project IDs
 * - Keep track of roleids as a separate thing from rolenames
 * - Get projects and membership via the keystone api
 * - Rephrase notifications

PageImages

 * - Rename class to plural ParserFileProcessingHookHandlers

QuickSurveys

 * - Do not show a survey if DNT is enabled

RelatedArticles

 * - Replace title case with sentence case
 * - Fixed Selenium tests
 * - Fixed failing Selenium Jenkins job

Scribunto

 * - Namespace correction for Module talk in ur
 * - Update grunt-jscs to 2.7.0
 * - Waste CPU cycles, not wall clock time

SemanticForms

 * - Fix calling init functions of input types
 * - Better fix for #formredlink with 'create page'
 * - Add autoload autoload.php to SemanticForms.php and extension.json
 * - Follow-up: I04679e8f6f895b97b7bafd36916aeb2e79d3dd25

SpamBlacklist

 * - Pre-cache the link list for external link filters

Thanks

 * - Use plaintextParams for topic title escaping
 * - Bold pages and topics in notifications

TimedMediaHandler

 * - Fix method signature of getBitRate
 * - Use CanonicalNamespaces hook instead of SetupAfterCache

Translate

 * - Statsbar tweaks
 * - Change default to UnsupportedTranslationAid
 * - Add support for nested objects in JsonFFS
 * - Fix message issue on Special:PagePreparation
 * - Fix tux-editor-proofread-button-label missing from resources
 * - Fix Special:Translate editor
 * - Attack of the sort-it-all for Resources.php
 * - Save button in proofreading could be more context sensitive
 * - Add banana checker
 * - Removed unused message translate-manage-fuzzy-summary

UniversalLanguageSelector

 * - Use mw.Api.plugin.options to set user options
 * - Use spaces inside of brackets in JavaScript
 * - Ensure module 'jquery.tipsy' is loaded before using
 * - Use .prop instead of .attr/.removeAttr to set boolean attributes

UploadWizard

 * - Sort language names for the dropdown case-insensitively
 * - Allow 'descriptionlang' to be provided without 'description'
 * - Define required 'defaults' field in licensing config, correct the code using it

VisualEditor

 * - Update VE core submodule to wmf/1.27.0-wmf.14 HEAD (59c0f02)
 * - Don't remove .ve-activated after successfully activating
 * - Revert "Re-add null appendix tab messages to extension.json"
 * - [BrowserTest] Jenkins runs only passing Cucumber scenarios
 * - Update VE core submodule to master (6f0c9c2)
 * - Unbreak VE
 * - Update VE core submodule to master (55dd20e)
 * - Try to make MW->VE switching failures break less things
 * - Remove code for varying MWLinkInspectorTool title
 * - Update VE core submodule to master (5ea4fdf)
 * - Edit mode switch: Show popup next to VE switch button
 * - Don't try to tell the server to set preferences to their current values
 * - Remove translations of messages since moved to Cite/Citoid
 * - Send users whose browsers support JS but are unsupported by MW to the WTE using venoscript=1

WikimediaMaintenance

 * - Fix constructor function name in SetZoneAccess

WikimediaMessages

 * - Avoid unstubbing $wgUser in ResourceLoaderGetConfigVars hook
 * - Add i18n messages for Wikiversity site link section on Wikidata
 * - Add new messages for new enwiki group/right/protection level - proposed name 'establishededitor'
 * - Rename message mwoauth-grant-checkuser to grant-checkuser

wikihiero

 * - Revert "Compress PNGs with zopflipng"
 * - Compress PNGs with zopflipng
 * - Add version hash to wikihiero images