* Requires PHP's Exif extension: http://www.php.net/manual/en/ref.exif.php
*
* @note FOR WINDOWS USERS:
- * To enable Exif functions, add the following lines to the "Windows
+ * To enable Exif functions, add the following line to the "Windows
* extensions" section of php.ini:
* @code{.ini}
- * extension=extensions/php_mbstring.dll
* extension=extensions/php_exif.dll
* @endcode
*/
*/
$wgJpegTran = '/usr/bin/jpegtran';
+/**
+ * At default setting of 'yuv420', JPEG thumbnails will use 4:2:0 chroma
+ * subsampling to reduce file size, at the cost of possible color fringing
+ * at sharp edges.
+ *
+ * See https://en.wikipedia.org/wiki/Chroma_subsampling
+ *
+ * Supported values:
+ * false - use scaling system's default (same as pre-1.27 behavior)
+ * 'yuv444' - luma and chroma at same resolution
+ * 'yuv422' - chroma at 1/2 resolution horizontally, full vertically
+ * 'yuv420' - chroma at 1/2 resolution in both dimensions
+ *
+ * This setting is currently supported only for the ImageMagick backend;
+ * others may default to 4:2:0 or 4:4:4 or maintaining the source file's
+ * sampling in the thumbnail.
+ *
+ * @since 1.27
+ */
+$wgJpegPixelFormat = 'yuv420';
+
/**
* Some tests and extensions use exiv2 to manipulate the Exif metadata in some
* image formats.
* given, giving a callable function which will generate a suitable cache object.
*/
$wgObjectCaches = [
- CACHE_NONE => [ 'class' => 'EmptyBagOStuff' ],
+ CACHE_NONE => [ 'class' => 'EmptyBagOStuff', 'reportDupes' => false ],
CACHE_DB => [ 'class' => 'SqlBagOStuff', 'loggroup' => 'SQLBagOStuff' ],
CACHE_ANYTHING => [ 'factory' => 'ObjectCache::newAnything' ],
'loggroup' => 'SQLBagOStuff'
],
- 'apc' => [ 'class' => 'APCBagOStuff' ],
- 'xcache' => [ 'class' => 'XCacheBagOStuff' ],
- 'wincache' => [ 'class' => 'WinCacheBagOStuff' ],
+ 'apc' => [ 'class' => 'APCBagOStuff', 'reportDupes' => false ],
+ 'xcache' => [ 'class' => 'XCacheBagOStuff', 'reportDupes' => false ],
+ 'wincache' => [ 'class' => 'WinCacheBagOStuff', 'reportDupes' => false ],
'memcached-php' => [ 'class' => 'MemcachedPhpBagOStuff', 'loggroup' => 'memcached' ],
'memcached-pecl' => [ 'class' => 'MemcachedPeclBagOStuff', 'loggroup' => 'memcached' ],
- 'hash' => [ 'class' => 'HashBagOStuff' ],
+ 'hash' => [ 'class' => 'HashBagOStuff', 'reportDupes' => false ],
];
/**
*
* The format is an associative array where the key is a cache identifier, and
* the value is an associative array of parameters. The "cacheId" parameter is
- * a cache identifier from $wgObjectCaches. The "relayerConfig" parameter is an
- * array used to construct an EventRelayer object. The "pool" parameter is a
- * string that is used as a PubSub channel prefix. The "loggroup" parameter
- * controls where log events are sent.
+ * a cache identifier from $wgObjectCaches. The "channels" parameter is a map of
+ * actions ('purge') to PubSub channels defined in $wgEventRelayerConfig.
+ * The "loggroup" parameter controls where log events are sent.
*
* @since 1.26
*/
$wgWANObjectCaches = [
CACHE_NONE => [
- 'class' => 'WANObjectCache',
- 'cacheId' => CACHE_NONE,
- 'pool' => 'mediawiki-main-none',
- 'relayerConfig' => [ 'class' => 'EventRelayerNull' ]
+ 'class' => 'WANObjectCache',
+ 'cacheId' => CACHE_NONE,
+ 'channels' => []
]
/* Example of a simple single data-center cache:
- 'memcached-php' => array(
- 'class' => 'WANObjectCache',
- 'cacheId' => 'memcached-php',
- 'pool' => 'mediawiki-main-memcached',
- 'relayerConfig' => array( 'class' => 'EventRelayerNull' )
- )
+ 'memcached-php' => [
+ 'class' => 'WANObjectCache',
+ 'cacheId' => 'memcached-php',
+ 'channels' => [ 'purge' => 'wancache-main-memcached-purge' ]
+ ]
*/
];
$wgObjectCacheSessionExpiry = 3600;
/**
- * @deprecated since 1.27, MediaWiki\\Session\\SessionManager doesn't use PHP session storage.
+ * @deprecated since 1.27, MediaWiki\Session\SessionManager doesn't use PHP session storage.
*/
$wgSessionHandler = null;
*/
$wgCdnReboundPurgeDelay = 0;
+/**
+ * Cache timeout for the CDN when a response is known to be wrong or incomplete (due to load)
+ * @see $wgSquidMaxage
+ * @since 1.27
+ */
+$wgCdnMaxageSubstitute = 60;
+
/**
* Default maximum age for raw CSS/JS accesses
*
'watchcreations' => 1,
'watchdefault' => 1,
'watchdeletion' => 0,
+ 'watchuploads' => 1,
'watchlistdays' => 3.0,
'watchlisthideanons' => 0,
'watchlisthidebots' => 0,
/**
* Prefix for metric names sent to $wgStatsdServer.
*
- * @see RequestContext::getStats
+ * @see MediaWikiServices::getStatsdDataFactory
* @see BufferingStatsdDataFactory
* @since 1.25
*/
* 'legend' => 'legend-msg',
* // optional (defaults to 'flag'), CSS class to put on changes lists rows
* 'class' => 'css-class',
+ * // optional (defaults to 'any'), how top-level flag is determined. 'any'
+ * // will set the top-level flag if any line contains the flag, 'all' will
+ * // only be set if all lines contain the flag.
+ * 'grouping' => 'any',
* );
* @endcode
*
'letter' => 'newpageletter',
'title' => 'recentchanges-label-newpage',
'legend' => 'recentchanges-legend-newpage',
+ 'grouping' => 'any',
],
'minor' => [
'letter' => 'minoreditletter',
'title' => 'recentchanges-label-minor',
'legend' => 'recentchanges-legend-minor',
'class' => 'minoredit',
+ 'grouping' => 'all',
],
'bot' => [
'letter' => 'boteditletter',
'title' => 'recentchanges-label-bot',
'legend' => 'recentchanges-legend-bot',
'class' => 'botedit',
+ 'grouping' => 'all',
],
'unpatrolled' => [
'letter' => 'unpatrolledletter',
'title' => 'recentchanges-label-unpatrolled',
'legend' => 'recentchanges-legend-unpatrolled',
+ 'grouping' => 'any',
],
];
*/
$wgRightsIcon = null;
-/**
- * Set this to some HTML to override the rights icon with an arbitrary logo
- * @deprecated since 1.18 Use $wgFooterIcons['copyright']['copyright']
- */
-$wgCopyrightIcon = null;
-
/**
* Set this to true if you want detailed copyright information forms on Upload.
*/
*/
$wgHooks = [];
+/**
+ * List of service wiring files to be loaded by the default instance of MediaWikiServices.
+ * Each file listed here is expected to return an associative array mapping service names
+ * to instantiator functions. Extensions may add wiring files to define their own services.
+ * However, this cannot be used to replace existing services - use the MediaWikiServices
+ * hook for that.
+ *
+ * @see MediaWikiServices
+ * @see ServiceContainer::loadWiringFiles() for details on loading service instantiator functions.
+ * @see docs/injection.txt for an overview of dependency injection in MediaWiki.
+ */
+$wgServiceWiringFiles = [
+ __DIR__ . '/ServiceWiring.php'
+];
+
/**
* Maps jobs to their handling classes; extensions
* can add to this to provide custom jobs
'reblock' => [ 'reblock' ],
'unblock' => [ 'unblock' ],
],
+ 'contentmodel' => [
+ 'change' => [ 'change' ],
+ 'new' => [ 'new' ],
+ ],
'delete' => [
'delete' => [ 'delete' ],
'restore' => [ 'restore' ],
'event' => [ 'event' ],
'revision' => [ 'revision' ],
],
+ 'import' => [
+ 'interwiki' => [ 'interwiki' ],
+ 'upload' => [ 'upload' ],
+ ],
+ 'managetags' => [
+ 'create' => [ 'create' ],
+ 'delete' => [ 'delete' ],
+ 'activate' => [ 'activate' ],
+ 'deactivate' => [ 'deactivate' ],
+ ],
+ 'move' => [
+ 'move' => [ 'move' ],
+ 'move_redir' => [ 'move_redir' ],
+ ],
+ 'newusers' => [
+ 'create' => [ 'create', 'newusers' ],
+ 'create2' => ['create2' ],
+ 'autocreate' => [ 'autocreate' ],
+ 'byemail' => [ 'byemail' ],
+ ],
'patrol' => [
'patrol' => [ 'patrol' ],
'autopatrol' => [ 'autopatrol' ],
'protect' => [ 'protect' ],
'modify' => [ 'modify' ],
'unprotect' => [ 'unprotect' ],
+ 'move_prot' => ['move_prot'],
+ ],
+ 'rights' => [
+ 'rights' => [ 'rights' ],
+ 'autopromote' => [ 'autopromote' ],
+ ],
+ 'suppress' => [
+ 'event' => [ 'event' ],
+ 'revision' => [ 'revision' ],
+ 'delete' => [ 'delete' ],
+ 'block' => [ 'block' ],
+ 'reblock' => [ 'reblock' ],
],
'upload' => [
'upload' => [ 'upload' ],
/**
* Name of the external diff engine to use. Supported values:
- * * false: default PHP implementation, DairikiDiff
+ * * false: default PHP implementation
* * 'wikidiff2': Wikimedia's fast difference engine implemented as a PHP/HHVM module
- * * 'wikidiff3': newer PHP-based difference engine
+ * * 'wikidiff' and 'wikidiff3' are treated as false for backwards compatibility
* * any other string is treated as a path to external diff executable
*/
$wgExternalDiffEngine = false;
$wgMaxUserDBWriteDuration = false;
/**
- * Mapping of event channels to EventRelayer configuration.
+ * Mapping of event channels (or channel categories) to EventRelayer configuration.
*
* By setting up a PubSub system (like Kafka) and enabling a corresponding EventRelayer class
* that uses it, MediaWiki can broadcast events to all subscribers. Certain features like WAN
* subscribe to the channel and take actions based on the events. For example, a local daemon
* can run on each CDN cache node and perfom local purges based on the URL purge channel events.
*
- * The 'default' channel is for all channels without an explicit entry here.
+ * Some extensions may want to use "channel categories" so that different channels can also share
+ * the same custom relayer instance (e.g. when it's likely to be overriden). They can use
+ * EventRelayerGroup::getRelayer() based on the category but call notify() on various different
+ * actual channels. One reason for this would be that some system have very different performance
+ * vs durability needs, so one system (e.g. Kafka) may not be suitable for all uses.
+ *
+ * The 'default' key is for all channels (or channel categories) without an explicit entry here.
*
* @since 1.27
*/