From c1f9b1f7b1b77776192048005dcc66dcf3df2bfb Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sat, 27 Dec 2014 15:41:37 +0100 Subject: Update to MediaWiki 1.24.1 --- includes/DefaultSettings.php | 1382 +++++++++++++++++++++++++++--------------- 1 file changed, 895 insertions(+), 487 deletions(-) (limited to 'includes/DefaultSettings.php') diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 78568107..71268932 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -15,7 +15,7 @@ * performed in LocalSettings.php. * * Documentation is in the source and on: - * http://www.mediawiki.org/wiki/Manual:Configuration_settings + * https://www.mediawiki.org/wiki/Manual:Configuration_settings * * @warning Note: this (and other things) will break if the autoloader is not * enabled. Please include includes/AutoLoader.php before including this file. @@ -59,11 +59,23 @@ if ( !defined( 'MEDIAWIKI' ) ) { */ $wgConf = new SiteConfiguration; +/** + * Registry of factory functions to create config objects: + * The 'main' key must be set, and the value should be a valid + * callable. + * @since 1.23 + */ +$wgConfigRegistry = array( + 'main' => 'GlobalVarConfig::newInstance' +); + /** * MediaWiki version number + * Note that MediaWikiVersionFetcher::fetchVersion() uses a regex to check this. + * Using single quotes is, therefore, important here. * @since 1.2 */ -$wgVersion = '1.22.15'; +$wgVersion = '1.24.1'; /** * Name of the site. It must be changed in LocalSettings.php @@ -97,6 +109,13 @@ $wgServer = WebRequest::detectServer(); */ $wgCanonicalServer = false; +/** + * Server name. This is automatically computed by parsing the bare + * hostname out of $wgCanonicalServer. It should not be customized. + * @since 1.24 + */ +$wgServerName = false; + /************************************************************************//** * @name Script path settings * @{ @@ -236,7 +255,7 @@ $wgFileCacheDirectory = false; /** * The URL path of the wiki logo. The logo size should be 135x135 pixels. - * Defaults to "{$wgStylePath}/common/images/wiki.png". + * Defaults to "$wgResourceBasePath/resources/assets/wiki.png". */ $wgLogo = false; @@ -338,11 +357,6 @@ $wgEnableAsyncUploads = false; */ $wgIllegalFileChars = ":"; -/** - * @deprecated since 1.17 use $wgDeletedDirectory - */ -$wgFileStore = array(); - /** * What directory to place deleted uploads in. * Defaults to "{$wgUploadDirectory}/deleted". @@ -355,11 +369,20 @@ $wgDeletedDirectory = false; $wgImgAuthDetails = false; /** - * If this is enabled, img_auth.php will not allow image access unless the wiki - * is private. This improves security when image uploads are hosted on a - * separate domain. + * Map of relative URL directories to match to internal mwstore:// base storage paths. + * For img_auth.php requests, everything after "img_auth.php/" is checked to see + * if starts with any of the prefixes defined here. The prefixes should not overlap. + * The prefix that matches has a corresponding storage path, which the rest of the URL + * is assumed to be relative to. The file at that path (or a 404) is send to the client. + * + * Example: + * $wgImgAuthUrlPathMap['/timeline/'] = 'mwstore://local-fs/timeline-render/'; + * The above maps ".../img_auth.php/timeline/X" to "mwstore://local-fs/timeline-render/". + * The name "local-fs" should correspond by name to an entry in $wgFileBackends. + * + * @see $wgFileBackends */ -$wgImgAuthPublicTest = true; +$wgImgAuthUrlPathMap = array(); /** * File repository structures @@ -384,8 +407,6 @@ $wgImgAuthPublicTest = true; * url : base URL to the root of the zone * urlsByExt : map of file extension types to base URLs * (useful for using a different cache for videos) - * handlerUrl : base script-handled URL to the root of the zone - * (see FileRepo::getZoneHandlerUrl() function) * Zones default to using "-" as the container name * and default to using the container root as the zone's root directory. * Nesting of zone locations within other zones should be avoided. @@ -574,7 +595,7 @@ $wgCacheSharedUploads = true; /** * Allow for upload to be copied from an URL. - * The timeout for copy uploads is set by $wgHTTPTimeout. + * The timeout for copy uploads is set by $wgCopyUploadTimeout. * You have to assign the user right 'upload_by_url' to a user group, to use this. */ $wgAllowCopyUploads = false; @@ -739,7 +760,7 @@ $wgFileBlacklist = array( 'exe', 'scr', 'dll', 'msi', 'vbs', 'bat', 'com', 'pif', 'cmd', 'vxd', 'cpl' ); /** - * Files with these mime types will never be allowed as uploads + * Files with these MIME types will never be allowed as uploads * if $wgVerifyMimeType is enabled. */ $wgMimeTypeBlacklist = array( @@ -791,7 +812,7 @@ $wgDisableUploadScriptChecks = false; $wgUploadSizeWarning = false; /** - * list of trusted media-types and mime types. + * list of trusted media-types and MIME types. * Use the MEDIATYPE_xxx constants to represent media types. * This list is used by File::isSafeFile * @@ -839,12 +860,21 @@ $wgContentHandlers = array( CONTENT_MODEL_WIKITEXT => 'WikitextContentHandler', // dumb version, no syntax highlighting CONTENT_MODEL_JAVASCRIPT => 'JavaScriptContentHandler', + // simple implementation, for use by extensions, etc. + CONTENT_MODEL_JSON => 'JsonContentHandler', // dumb version, no syntax highlighting CONTENT_MODEL_CSS => 'CssContentHandler', - // plain text, for use by extensions etc + // plain text, for use by extensions, etc. CONTENT_MODEL_TEXT => 'TextContentHandler', ); +/** + * Whether to enable server-side image thumbnailing. If false, images will + * always be sent to the client in full resolution, with appropriate width= and + * height= attributes on the tag for the client to do its own scaling. + */ +$wgUseImageResize = true; + /** * Resizing can be done using PHP's internal image libraries or using * ImageMagick or another third-party converter, e.g. GraphicMagick. @@ -860,11 +890,6 @@ $wgUseImageMagick = false; */ $wgImageMagickConvertCommand = '/usr/bin/convert'; -/** - * The identify command shipped with ImageMagick - */ -$wgImageMagickIdentifyCommand = '/usr/bin/identify'; - /** * Sharpening parameter to ImageMagick */ @@ -921,7 +946,8 @@ $wgSVGConverters = array( 'ImageMagick' => '$path/convert -background white -thumbnail $widthx$height\! $input PNG:$output', 'sodipodi' => '$path/sodipodi -z -w $width -f $input -e $output', 'inkscape' => '$path/inkscape -z -w $width -f $input -e $output', - 'batik' => 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d $output $input', + 'batik' => 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d ' + . '$output $input', 'rsvg' => '$path/rsvg -w $width -h $height $input $output', 'imgserv' => '$path/imgserv-wrapper -i svg -o png -w$width $input $output', 'ImagickExt' => array( 'SvgHandler::rasterizeImagickExt' ), @@ -1007,6 +1033,14 @@ $wgTiffThumbnailType = false; */ $wgThumbnailEpoch = '20030516000000'; +/** + * Certain operations are avoided if there were too many recent failures, + * for example, thumbnail generation. Bump this value to invalidate all + * memory of failed operations and thus allow further attempts to resume. + * This is useful when a cause for the failures has been found and fixed. + */ +$wgAttemptFailureEpoch = 1; + /** * If set, inline scaled images will still produce "" tags ready for * output instead of showing an error message. @@ -1034,11 +1068,6 @@ $wgGenerateThumbnailOnParse = true; */ $wgShowArchiveThumbnails = true; -/** - * Obsolete, always true, kept for compatibility with extensions - */ -$wgUseImageResize = true; - /** * If set to true, images that contain certain the exif orientation tag will * be rotated accordingly. If set to null, try to auto-detect whether a scaler @@ -1108,45 +1137,45 @@ $wgAntivirusSetup = array( $wgAntivirusRequired = true; /** - * Determines if the mime type of uploaded files should be checked + * Determines if the MIME type of uploaded files should be checked */ $wgVerifyMimeType = true; /** - * Sets the mime type definition file to use by MimeMagic.php. + * Sets the MIME type definition file to use by MimeMagic.php. * Set to null, to use built-in defaults only. * example: $wgMimeTypeFile = '/etc/mime.types'; */ $wgMimeTypeFile = 'includes/mime.types'; /** - * Sets the mime type info file to use by MimeMagic.php. + * Sets the MIME type info file to use by MimeMagic.php. * Set to null, to use built-in defaults only. */ $wgMimeInfoFile = 'includes/mime.info'; /** - * Sets an external mime detector program. The command must print only - * the mime type to standard output. + * Sets an external MIME detector program. The command must print only + * the MIME type to standard output. * The name of the file to process will be appended to the command given here. - * If not set or NULL, mime_content_type will be used if available. + * If not set or NULL, PHP's fileinfo extension will be used if available. * * @par Example: * @code - * #$wgMimeDetectorCommand = "file -bi"; # use external mime detector (Linux) + * #$wgMimeDetectorCommand = "file -bi"; # use external MIME detector (Linux) * @endcode */ $wgMimeDetectorCommand = null; /** - * Switch for trivial mime detection. Used by thumb.php to disable all fancy + * Switch for trivial MIME detection. Used by thumb.php to disable all fancy * things, because only a few types of images are needed and file extensions * can be trusted. */ $wgTrivialMimeDetection = false; /** - * Additional XML types we can allow via mime-detection. + * Additional XML types we can allow via MIME-detection. * array = ( 'rootElement' => 'associatedMimeType' ) */ $wgXMLMimeTypes = array( @@ -1187,6 +1216,34 @@ $wgThumbLimits = array( 300 ); +/** + * When defined, is an array of image widths used as buckets for thumbnail generation. + * The goal is to save resources by generating thumbnails based on reference buckets instead of + * always using the original. This will incur a speed gain but cause a quality loss. + * + * The buckets generation is chained, with each bucket generated based on the above bucket + * when possible. File handlers have to opt into using that feature. For now only BitmapHandler + * supports it. + */ +$wgThumbnailBuckets = null; + +/** + * When using thumbnail buckets as defined above, this sets the minimum distance to the bucket + * above the requested size. The distance represents how many extra pixels of width the bucket + * needs in order to be used as the reference for a given thumbnail. For example, with the + * following buckets: + * + * $wgThumbnailBuckets = array ( 128, 256, 512 ); + * + * and a distance of 50: + * + * $wgThumbnailMinimumBucketDistance = 50; + * + * If we want to render a thumbnail of width 220px, the 512px bucket will be used, + * because 220 + 50 = 270 and the closest bucket bigger than 270px is 512. + */ +$wgThumbnailMinimumBucketDistance = 50; + /** * Default parameters for the "" tag */ @@ -1251,7 +1308,7 @@ $wgDjvuTxt = null; * Path of the djvutoxml executable * This works like djvudump except much, much slower as of version 3.5. * - * For now we recommend you use djvudump instead. The djvuxml output is + * For now we recommend you use djvudump instead. The djvuxml output is * probably more stable, so we'll switch back to it as soon as they fix * the efficiency problem. * http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583 @@ -1265,7 +1322,7 @@ $wgDjvuToXML = null; /** * Shell command for the DJVU post processor - * Default: pnmtopng, since ddjvu generates ppm output + * Default: pnmtojpeg, since ddjvu generates ppm output * Set this to false to output the ppm file directly. */ $wgDjvuPostProcessor = 'pnmtojpeg'; @@ -1284,24 +1341,27 @@ $wgDjvuOutputExtension = 'jpg'; * @{ */ -$serverName = substr( $wgServer, strrpos( $wgServer, '/' ) + 1 ); /** * Site admin email address. + * + * Defaults to "wikiadmin@{$wgServerName}". */ -$wgEmergencyContact = 'wikiadmin@' . $serverName; +$wgEmergencyContact = false; /** * Password reminder email address. * * The address we should use as sender when a user is requesting his password. + * + * Defaults to "apache@{$wgServerName}". */ -$wgPasswordSender = 'apache@' . $serverName; - -unset( $serverName ); # Don't leak local variables to global scope +$wgPasswordSender = false; /** * Password reminder name + * + * @deprecated since 1.23; use the system message 'emailsender' instead. */ $wgPasswordSenderName = 'MediaWiki Mail'; @@ -1351,6 +1411,18 @@ $wgNewPasswordExpiry = 3600 * 24 * 7; */ $wgUserEmailConfirmationTokenExpiry = 7 * 24 * 60 * 60; +/** + * The number of days that a user's password is good for. After this number of days, the + * user will be asked to reset their password. Set to false to disable password expiration. + */ +$wgPasswordExpirationDays = false; + +/** + * If a user's password is expired, the number of seconds when they can still login, + * and cancel their password change, but are sent to the password change form on each login. + */ +$wgPasswordExpireGrace = 3600 * 24 * 7; // 7 days + /** * SMTP Mode. * @@ -1469,7 +1541,7 @@ $wgUsersNotifiedOnAllChanges = array(); $wgDBserver = 'localhost'; /** - * Database port number (for PostgreSQL) + * Database port number (for PostgreSQL and Microsoft SQL Server). */ $wgDBport = 5432; @@ -1495,11 +1567,21 @@ $wgDBtype = 'mysql'; /** * Whether to use SSL in DB connection. + * + * This setting is only used $wgLBFactoryConf['class'] is set to + * 'LBFactorySimple' and $wgDBservers is an empty array; otherwise + * the DBO_SSL flag must be set in the 'flags' option of the database + * connection to achieve the same functionality. */ $wgDBssl = false; /** * Whether to use compression in DB connection. + * + * This setting is only used $wgLBFactoryConf['class'] is set to + * 'LBFactorySimple' and $wgDBservers is an empty array; otherwise + * the DBO_COMPRESS flag must be set in the 'flags' option of the database + * connection to achieve the same functionality. */ $wgDBcompress = false; @@ -1551,7 +1633,7 @@ $wgSQLMode = ''; /** * Mediawiki schema */ -$wgDBmwschema = 'mediawiki'; +$wgDBmwschema = null; /** * To override default SQLite data directory ($docroot/../data) @@ -1582,10 +1664,10 @@ $wgAllDBsAreLocalhost = false; * $wgSharedPrefix is the table prefix for the shared database. It defaults to * $wgDBprefix. * - * @deprecated In new code, use the $wiki parameter to wfGetLB() to access - * remote databases. Using wfGetLB() allows the shared database to reside on - * separate servers to the wiki's own database, with suitable configuration - * of $wgLBFactoryConf. + * @deprecated since 1.21 In new code, use the $wiki parameter to wfGetLB() to + * access remote databases. Using wfGetLB() allows the shared database to + * reside on separate servers to the wiki's own database, with suitable + * configuration of $wgLBFactoryConf. */ $wgSharedDB = null; @@ -1607,8 +1689,13 @@ $wgSharedTables = array( 'user', 'user_properties' ); * - dbname: Default database name * - user: DB user * - password: DB password - * - type: "mysql" or "postgres" - * - load: ratio of DB_SLAVE load, must be >=0, the sum of all loads must be >0 + * - type: DB type + * + * - load: Ratio of DB_SLAVE load, must be >=0, the sum of all loads must be >0. + * If this is zero for any given server, no normal query traffic will be + * sent to it. It will be excluded from lag checks in maintenance scripts. + * The only way it can receive traffic is if groupLoads is used. + * * - groupLoads: array of load ratios, the key is the query group name. A query may belong * to several groups, the most specific group defined here is used. * @@ -1623,7 +1710,6 @@ $wgSharedTables = array( 'user', 'user_properties' ); * if available * * - max lag: (optional) Maximum replication lag before a slave will taken out of rotation - * - max threads: (optional) Maximum number of running threads * * These and any other user-defined properties will be assigned to the mLBInfo member * variable of the Database object. @@ -1654,13 +1740,14 @@ $wgDBservers = false; * The class identified here is responsible for reading $wgDBservers, * $wgDBserver, etc., so overriding it may cause those globals to be ignored. * - * The LBFactory_Multi class is provided for this purpose, please see - * includes/db/LBFactory_Multi.php for configuration information. + * The LBFactoryMulti class is provided for this purpose, please see + * includes/db/LBFactoryMulti.php for configuration information. */ -$wgLBFactoryConf = array( 'class' => 'LBFactory_Simple' ); +$wgLBFactoryConf = array( 'class' => 'LBFactorySimple' ); /** * How long to wait for a slave to catch up to the master + * @deprecated since 1.24 */ $wgMasterWaitTimeout = 10; @@ -1689,11 +1776,6 @@ $wgDBerrorLog = false; */ $wgDBerrorLogTZ = false; -/** - * When to give an error message - */ -$wgDBClusterTimeout = 10; - /** * Scale load balancer polling time so that under overload conditions, the * database server receives a SHOW STATUS query at an average interval of this @@ -1767,6 +1849,11 @@ $wgSlaveLagWarning = 10; */ $wgSlaveLagCritical = 30; +/** + * Use Windows Authentication instead of $wgDBuser / $wgDBpassword for MS SQL Server + */ +$wgDBWindowsAuthentication = false; + /**@}*/ # End of DB settings } /************************************************************************//** @@ -1793,7 +1880,7 @@ $wgCompressRevisions = false; * * CAUTION: Access to database might lead to code execution */ -$wgExternalStores = false; +$wgExternalStores = array(); /** * An array of external MySQL servers. @@ -1806,7 +1893,7 @@ $wgExternalStores = false; * ); * @endcode * - * Used by LBFactory_Simple, may be ignored if $wgLBFactoryConf is set to + * Used by LBFactorySimple, may be ignored if $wgLBFactoryConf is set to * another class. */ $wgExternalServers = array(); @@ -1921,9 +2008,6 @@ $wgCacheDirectory = false; * - CACHE_DB: Store cache objects in the DB * - CACHE_MEMCACHED: MemCached, must specify servers in $wgMemCachedServers * - CACHE_ACCEL: APC, XCache or WinCache - * - CACHE_DBA: Use PHP's DBA extension to store in a DBM-style - * database. This is slow, and is not recommended for - * anything other than debugging. * - (other): A string may be used which identifies a cache * configuration in $wgObjectCaches. * @@ -1976,15 +2060,10 @@ $wgLanguageConverterCacheType = CACHE_ANYTHING; * the value is an associative array of parameters. The "class" parameter is the * class name which will be used. Alternatively, a "factory" parameter may be * given, giving a callable function which will generate a suitable cache object. - * - * The other parameters are dependent on the class used. - * - CACHE_DBA uses $wgTmpDirectory by default. The 'dir' parameter let you - * overrides that. */ $wgObjectCaches = array( CACHE_NONE => array( 'class' => 'EmptyBagOStuff' ), CACHE_DB => array( 'class' => 'SqlBagOStuff', 'table' => 'objectcache' ), - CACHE_DBA => array( 'class' => 'DBABagOStuff' ), CACHE_ANYTHING => array( 'factory' => 'ObjectCache::newAnything' ), CACHE_ACCEL => array( 'factory' => 'ObjectCache::newAccelerator' ), @@ -1999,16 +2078,32 @@ $wgObjectCaches = array( ); /** - * The expiry time for the parser cache, in seconds. - * The default is 86400 (one day). + * Map of bloom filter store names to configuration arrays. + * + * Example: + * $wgBloomFilterStores['main'] = array( + * 'cacheId' => 'main-v1', + * 'class' => 'BloomCacheRedis', + * 'redisServers' => array( '127.0.0.1:6379' ), + * 'redisConfig' => array( 'connectTimeout' => 2 ) + * ); + * + * A primary bloom filter must be created manually. + * Example in eval.php: + * + * BloomCache::get( 'main' )->init( 'shared', 1000000000, .001 ); + * + * The size should be as large as practical given wiki size and resources. + * + * @since 1.24 */ -$wgParserCacheExpireTime = 86400; +$wgBloomFilterStores = array(); /** - * Select which DBA handler - * to use as CACHE_DBA backend. + * The expiry time for the parser cache, in seconds. + * The default is 86400 (one day). */ -$wgDBAhandler = 'db3'; +$wgParserCacheExpireTime = 86400; /** * Deprecated alias for $wgSessionsInObjectCache. @@ -2117,6 +2212,12 @@ $wgCachePages = true; */ $wgCacheEpoch = '20030516000000'; +/** + * Directory where GitInfo will look for pre-computed cache files. If false, + * $wgCacheDirectory/gitinfo will be used. + */ +$wgGitInfoCacheDirectory = false; + /** * Bump this number when changing the global style sheets and JavaScript. * @@ -2129,7 +2230,7 @@ $wgStyleVersion = '303'; /** * This will cache static pages for non-logged-in users to reduce * database traffic on public sites. - * Must set $wgShowIPinHeader = false + * Automatically sets $wgShowIPinHeader = false * ResourceLoader requests to default language and skins are cached * as well as single module requests. */ @@ -2218,7 +2319,7 @@ $wgInvalidateCacheOnLocalSettingsChange = true; * although they are referred to as Squid settings for historical reasons. * * Achieving a high hit ratio with an HTTP proxy requires special - * configuration. See http://www.mediawiki.org/wiki/Manual:Squid_caching for + * configuration. See https://www.mediawiki.org/wiki/Manual:Squid_caching for * more details. * * @{ @@ -2226,7 +2327,7 @@ $wgInvalidateCacheOnLocalSettingsChange = true; /** * Enable/disable Squid. - * See http://www.mediawiki.org/wiki/Manual:Squid_caching + * See https://www.mediawiki.org/wiki/Manual:Squid_caching */ $wgUseSquid = false; @@ -2285,7 +2386,9 @@ $wgSquidServers = array(); /** * As above, except these servers aren't purged on page changes; use to set a - * list of trusted proxies, etc. + * list of trusted proxies, etc. Supports both individual IP addresses and + * CIDR blocks. + * @since 1.23 Supports CIDR ranges */ $wgSquidServersNoPurge = array(); @@ -2368,42 +2471,6 @@ $wgSquidPurgeUseHostHeader = true; */ $wgHTCPRouting = array(); -/** - * @deprecated since 1.22, please use $wgHTCPRouting instead. - * - * Whenever this is set and $wgHTCPRouting evaluates to false, $wgHTCPRouting - * will be set to this value. - * This is merely for back compatibility. - * - * @since 1.20 - */ -$wgHTCPMulticastRouting = null; - -/** - * HTCP multicast address. Set this to a multicast IP address to enable HTCP. - * - * Note that MediaWiki uses the old non-RFC compliant HTCP format, which was - * present in the earliest Squid implementations of the protocol. - * - * This setting is DEPRECATED in favor of $wgHTCPRouting , and kept for - * backwards compatibility only. If $wgHTCPRouting is set, this setting is - * ignored. If $wgHTCPRouting is not set and this setting is, it is used to - * populate $wgHTCPRouting. - * - * @deprecated since 1.20 in favor of $wgHTCPMulticastRouting and since 1.22 in - * favor of $wgHTCPRouting. - */ -$wgHTCPMulticastAddress = false; - -/** - * HTCP multicast port. - * @deprecated since 1.20 in favor of $wgHTCPMulticastRouting and since 1.22 in - * favor of $wgHTCPRouting. - * - * @see $wgHTCPMulticastAddress - */ -$wgHTCPPort = 4827; - /** * HTCP multicast TTL. * @see $wgHTCPRouting @@ -2466,6 +2533,21 @@ $wgInterwikiMagic = true; */ $wgHideInterlanguageLinks = false; +/** + * List of additional interwiki prefixes that should be treated as + * interlanguage links (i.e. placed in the sidebar). + * Notes: + * - This will not do anything unless the prefixes are defined in the interwiki + * map. + * - The display text for these custom interlanguage links will be fetched from + * the system message "interlanguage-link-xyz" where xyz is the prefix in + * this array. + * - A friendly name for each site, used for tooltip text, may optionally be + * placed in the system message "interlanguage-link-sitename-xyz" where xyz is + * the prefix in this array. + */ +$wgExtraInterlanguageLinkPrefixes = array(); + /** * List of language names or overrides for default names in Names.php */ @@ -2641,11 +2723,6 @@ $wgDisableLangConversion = false; */ $wgDisableTitleConversion = false; -/** - * Whether to enable canonical language links in meta data. - */ -$wgCanonicalLanguageLinks = true; - /** * Default variant code, if false, the default will be the language code */ @@ -2793,6 +2870,23 @@ $wgHtml5 = true; */ $wgHtml5Version = null; +/** + * Temporary variable that allows HTMLForms to be rendered as tables. + * Table based layouts cause various issues when designing for mobile. + * This global allows skins or extensions a means to force non-table based rendering. + * Setting to false forces form components to always render as div elements. + * @since 1.24 + */ +$wgHTMLFormAllowTableFormat = true; + +/** + * Temporary variable that applies MediaWiki UI wherever it can be supported. + * Temporary variable that should be removed when mediawiki ui is more + * stable and change has been communicated. + * @since 1.24 + */ +$wgUseMediaWikiUIEverywhere = false; + /** * Enabled RDFa attributes for use in wikitext. * NOTE: Interaction with HTML5 is somewhat underspecified. @@ -2834,7 +2928,7 @@ $wgWellFormedXml = true; * Normally we wouldn't have to define this in the root "" * element, but IE needs it there in some circumstances. * - * This is ignored if $wgMimeType is set to a non-XML mimetype. + * This is ignored if $wgMimeType is set to a non-XML MIME type. */ $wgXhtmlNamespaces = array(); @@ -2854,11 +2948,6 @@ $wgShowIPinHeader = true; */ $wgSiteNotice = ''; -/** - * A subtitle to add to the tagline, for skins that have it/ - */ -$wgExtraSubtitle = ''; - /** * If this is set, a "donate" link will appear in the sidebar. Set it to a URL. */ @@ -2873,23 +2962,28 @@ $wgValidateAllHtml = false; /** * Default skin, for new users and anonymous visitors. Registered users may * change this to any one of the other available skins in their preferences. - * This has to be completely lowercase; see the "skins" directory for the list - * of available skins. */ $wgDefaultSkin = 'vector'; /** - * Specify the name of a skin that should not be presented in the list of - * available skins. Use for blacklisting a skin which you do not want to - * remove from the .../skins/ directory + * Fallback skin used when the skin defined by $wgDefaultSkin can't be found. + * + * @since 1.24 */ -$wgSkipSkin = ''; +$wgFallbackSkin = 'fallback'; /** - * Array for more like $wgSkipSkin. + * Specify the names of skins that should not be presented in the list of + * available skins in user preferences. If you want to remove a skin entirely, + * remove it from the skins/ directory and its entry from LocalSettings.php. */ $wgSkipSkins = array(); +/** + * @deprecated since 1.23; use $wgSkipSkins instead + */ +$wgSkipSkin = ''; + /** * Allow user Javascript page? * This enables a lot of neat customizations, but may @@ -3010,7 +3104,8 @@ $wgFooterIcons = array( ), "poweredby" => array( "mediawiki" => array( - "src" => null, // Defaults to "$wgStylePath/common/images/poweredby_mediawiki_88x31.png" + // src defaults to "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png" + "src" => null, "url" => "//www.mediawiki.org/", "alt" => "Powered by MediaWiki", ) @@ -3025,33 +3120,11 @@ $wgFooterIcons = array( */ $wgUseCombinedLoginLink = false; -/** - * Search form look for Vector skin only. - * - true = use an icon search button - * - false = use Go & Search buttons - */ -$wgVectorUseSimpleSearch = true; - -/** - * Watch and unwatch as an icon rather than a link for Vector skin only. - * - true = use an icon watch/unwatch button - * - false = use watch/unwatch text link - */ -$wgVectorUseIconWatch = true; - /** * Display user edit counts in various prominent places. */ $wgEdititis = false; -/** - * Better directionality support (bug 6100 and related). - * Removed in 1.18, still kept here for LiquidThreads backwards compatibility. - * - * @deprecated since 1.18 - */ -$wgBetterDirectionality = true; - /** * Some web hosts attempt to rewrite all responses with a 404 (not found) * status code, mangling or hiding MediaWiki's output. If you are using such a @@ -3083,6 +3156,14 @@ $wgShowRollbackEditCount = 10; */ $wgEnableCanonicalServerLink = false; +/** + * When OutputHandler is used, mangle any output that contains + * . Without this, an attacker can send their own + * cross-domain policy unless it is prevented by the crossdomain.xml file at + * the domain root. + */ +$wgMangleFlashPolicy = true; + /** @} */ # End of output format settings } /*************************************************************************//** @@ -3109,6 +3190,111 @@ $wgEnableCanonicalServerLink = false; */ $wgResourceModules = array(); +/** + * Skin-specific styles for resource modules. + * + * These are later added to the 'skinStyles' list of the existing module. The 'styles' list can + * not be modified or disabled. + * + * For example, here is a module "bar" and how skin Foo would provide additional styles for it. + * + * @par Example: + * @code + * $wgResourceModules['bar'] = array( + * 'scripts' => 'resources/bar/bar.js', + * 'styles' => 'resources/bar/main.css', + * ); + * + * $wgResourceModuleSkinStyles['foo'] = array( + * 'bar' => 'skins/Foo/bar.css', + * ); + * @endcode + * + * This is mostly equivalent to: + * + * @par Equivalent: + * @code + * $wgResourceModules['bar'] = array( + * 'scripts' => 'resources/bar/bar.js', + * 'styles' => 'resources/bar/main.css', + * 'skinStyles' => array( + * 'foo' => skins/Foo/bar.css', + * ), + * ); + * @endcode + * + * If the module already defines its own entry in `skinStyles` for a given skin, then + * $wgResourceModuleSkinStyles is ignored. + * + * If a module defines a `skinStyles['default']` the skin may want to extend that instead + * of replacing them. This can be done using the `+` prefix. + * + * @par Example: + * @code + * $wgResourceModules['bar'] = array( + * 'scripts' => 'resources/bar/bar.js', + * 'styles' => 'resources/bar/basic.css', + * 'skinStyles' => array( + * 'default' => 'resources/bar/additional.css', + * ), + * ); + * // Note the '+' character: + * $wgResourceModuleSkinStyles['+foo'] = array( + * 'bar' => 'skins/Foo/bar.css', + * ); + * @endcode + * + * This is mostly equivalent to: + * + * @par Equivalent: + * @code + * $wgResourceModules['bar'] = array( + * 'scripts' => 'resources/bar/bar.js', + * 'styles' => 'resources/bar/basic.css', + * 'skinStyles' => array( + * 'default' => 'resources/bar/additional.css', + * 'foo' => array( + * 'resources/bar/additional.css', + * 'skins/Foo/bar.css', + * ), + * ), + * ); + * @endcode + * + * In other words, as a module author, use the `styles` list for stylesheets that may not be + * disabled by a skin. To provide default styles that may be extended or replaced, + * use `skinStyles['default']`. + * + * As with $wgResourceModules, paths default to being relative to the MediaWiki root. + * You should always provide a localBasePath and remoteBasePath (or remoteExtPath/remoteSkinPath). + * Either for all skin styles at once (first example below) or for each module separately (second + * example). + * + * @par Example: + * @code + * $wgResourceModuleSkinStyles['foo'] = array( + * 'bar' => 'bar.css', + * 'quux' => 'quux.css', + * 'remoteSkinPath' => 'Foo', + * 'localBasePath' => __DIR__, + * ); + * + * $wgResourceModuleSkinStyles['foo'] = array( + * 'bar' => array( + * 'bar.css', + * 'remoteSkinPath' => 'Foo', + * 'localBasePath' => __DIR__, + * ), + * 'quux' => array( + * 'quux.css', + * 'remoteSkinPath' => 'Foo', + * 'localBasePath' => __DIR__, + * ), + * ); + * @endcode + */ +$wgResourceModuleSkinStyles = array(); + /** * Extensions should register foreign module sources here. 'local' is a * built-in source that is not in this array, but defined by @@ -3116,10 +3302,7 @@ $wgResourceModules = array(); * * @par Example: * @code - * $wgResourceLoaderSources['foo'] = array( - * 'loadScript' => 'http://example.org/w/load.php', - * 'apiScript' => 'http://example.org/w/api.php' - * ); + * $wgResourceLoaderSources['foo'] = 'http://example.org/w/load.php'; * @endcode */ $wgResourceLoaderSources = array(); @@ -3132,14 +3315,23 @@ $wgResourceBasePath = null; /** * Maximum time in seconds to cache resources served by the resource loader. + * Used to set last modified headers (max-age/s-maxage). + * + * Following options to distinguish: + * - versioned: Used for modules with a version, because changing version + * numbers causes cache misses. This normally has a long expiry time. + * - unversioned: Used for modules without a version to propagate changes + * quickly to clients. Also used for modules with errors to recover quickly. + * This normally has a short expiry time. * - * @todo Document array structure + * Expiry time for the options to distinguish: + * - server: Squid/Varnish but also any other public proxy cache between the + * client and MediaWiki. + * - client: On the client side (e.g. in the browser cache). */ $wgResourceLoaderMaxage = array( 'versioned' => array( - // Squid/Varnish but also any other public proxy cache between the client and MediaWiki 'server' => 30 * 24 * 60 * 60, // 30 days - // On the client side (e.g. in the browser cache). 'client' => 30 * 24 * 60 * 60, // 30 days ), 'unversioned' => array( @@ -3181,6 +3373,15 @@ $wgResourceLoaderMinifierMaxLineLength = 1000; */ $wgIncludeLegacyJavaScript = true; +/** + * Whether to include the jQuery Migrate library, which lets legacy JS that + * requires jQuery 1.8.x to work and breaks with 1.9.x+. + * + * @since 1.24 + * @deprecated since 1.24, to be removed in 1.25 + */ +$wgIncludejQueryMigrate = false; + /** * Whether to preload the mediawiki.util module as blocking module in the top * queue. @@ -3270,12 +3471,14 @@ $wgResourceLoaderValidateStaticJS = false; $wgResourceLoaderExperimentalAsyncLoading = false; /** - * Global LESS variables. An associative array binding variable names to CSS - * string values. + * Global LESS variables. An associative array binding variable names to + * LESS code snippets representing their values. * - * Because the hashed contents of this array are used to construct the cache key - * that ResourceLoader uses to look up LESS compilation results, updating this - * array can be used to deliberately invalidate the set of cached results. + * Adding an item here is equivalent to writing `@variable: value;` + * at the beginning of all your .less files, with all the consequences. + * In particular, string values must be escaped and quoted. + * + * Changes to LESS variables do not trigger cache invalidation. * * @par Example: * @code @@ -3293,17 +3496,13 @@ $wgResourceLoaderLESSVars = array(); * Custom LESS functions. An associative array mapping function name to PHP * callable. * - * Changes to LESS functions do not trigger cache invalidation. If you update - * the behavior of a LESS function and need to invalidate stale compilation - * results, you can touch one of values in $wgResourceLoaderLESSVars, as - * documented above. + * Changes to LESS functions do not trigger cache invalidation. * * @since 1.22 + * @deprecated since 1.24 Questionable usefulness and problematic to support, + * will be removed in the future. */ -$wgResourceLoaderLESSFunctions = array( - 'embeddable' => 'ResourceLoaderLESSFunctions::embeddable', - 'embed' => 'ResourceLoaderLESSFunctions::embed', -); +$wgResourceLoaderLESSFunctions = array(); /** * Default import paths for LESS modules. LESS files referenced in @import @@ -3319,9 +3518,25 @@ $wgResourceLoaderLESSFunctions = array( * @since 1.22 */ $wgResourceLoaderLESSImportPaths = array( - "$IP/resources/mediawiki.less/", + "$IP/resources/src/mediawiki.less/", ); +/** + * Whether ResourceLoader should attempt to persist modules in localStorage on + * browsers that support the Web Storage API. + * + * @since 1.23 - Client-side module persistence is experimental. Exercise care. + */ +$wgResourceLoaderStorageEnabled = false; + +/** + * Cache version for client-side ResourceLoader module storage. You can trigger + * invalidation of the contents of the module store by incrementing this value. + * + * @since 1.23 + */ +$wgResourceLoaderStorageVersion = 1; + /** * Whether to allow site-wide CSS (MediaWiki:Common.css and friends) on * restricted pages like Special:UserLogin or Special:Preferences where @@ -3335,14 +3550,6 @@ $wgResourceLoaderLESSImportPaths = array( */ $wgAllowSiteCSSOnRestrictedPages = false; -/** - * When OutputHandler is used, mangle any output that contains - * . Without this, an attacker can send their own - * cross-domain policy unless it is prevented by the crossdomain.xml file at - * the domain root. - */ -$wgMangleFlashPolicy = true; - /** @} */ # End of resource loader settings } /*************************************************************************//** @@ -3452,9 +3659,21 @@ $wgLegalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+"; /** * The interwiki prefix of the current wiki, or false if it doesn't have one. + * + * @deprecated since 1.23; use $wgLocalInterwikis instead */ $wgLocalInterwiki = false; +/** + * Array for multiple $wgLocalInterwiki values, in case there are several + * interwiki prefixes that point to the current wiki. If $wgLocalInterwiki is + * set, its value is prepended to this array, for backwards compatibility. + * + * Note, recent changes feeds use only the first entry in this array (or + * $wgLocalInterwiki, if it is set). See $wgRCFeeds + */ +$wgLocalInterwikis = array(); + /** * Expiry time for cache of interwiki table */ @@ -3556,6 +3775,30 @@ $wgNamespacesWithSubpages = array( NS_CATEGORY_TALK => true ); +/** + * Array holding default tracking category names. + * + * Array contains the system messages for each tracking category. + * Tracking categories allow pages with certain characteristics to be tracked. + * It works by adding any such page to a category automatically. + * + * A message with the suffix '-desc' should be added as a description message + * to have extra information on Special:TrackingCategories. + * + * @since 1.23 + */ +$wgTrackingCategories = array( + 'index-category', + 'noindex-category', + 'expensive-parserfunction-category', + 'post-expand-template-argument-category', + 'post-expand-template-inclusion-category', + 'hidden-category-category', + 'broken-file-category', + 'node-count-exceeded-category', + 'expansion-depth-exceeded-category', +); + /** * Array of namespaces which can be deemed to contain valid "content", as far * as the site statistics are concerned. Useful if additional namespaces also @@ -3653,36 +3896,20 @@ $wgMaxTemplateDepth = 40; $wgMaxPPExpandDepth = 40; /** - * The external URL protocols + * URL schemes that should be recognized as valid by wfParseUrl(). + * + * WARNING: Do not add 'file:' to this or internal file links will be broken. + * Instead, if you want to support file links, add 'file://'. The same applies + * to any other protocols with the same name as a namespace. See bug #44011 for + * more information. + * + * @see wfParseUrl */ $wgUrlProtocols = array( - 'http://', - 'https://', - 'ftp://', - 'ftps://', // If we allow ftp:// we should allow the secure version. - 'ssh://', - 'sftp://', // SFTP > FTP - 'irc://', - 'ircs://', // @bug 28503 - 'xmpp:', // Another open communication protocol - 'sip:', - 'sips:', - 'gopher://', - 'telnet://', // Well if we're going to support the above.. -ævar - 'nntp://', // @bug 3808 RFC 1738 - 'worldwind://', - 'mailto:', - 'tel:', // If we can make emails linkable, why not phone numbers? - 'sms:', // Likewise this is standardized too - 'news:', - 'svn://', - 'git://', - 'mms://', - 'bitcoin:', // Even registerProtocolHandler whitelists this along with mailto: - 'magnet:', // No reason to reject torrents over magnet: when they're allowed over http:// - 'urn:', // Allow URNs to be used in Microdata/RDFa s - 'geo:', // urls define geo locations, they're useful in Microdata/RDFa and for coordinates - '//', // for protocol-relative URLs + 'bitcoin:', 'ftp://', 'ftps://', 'geo:', 'git://', 'gopher://', 'http://', + 'https://', 'irc://', 'ircs://', 'magnet:', 'mailto:', 'mms://', 'news:', + 'nntp://', 'redis://', 'sftp://', 'sip:', 'sips:', 'sms:', 'ssh://', + 'svn://', 'tel:', 'telnet://', 'urn:', 'worldwind://', 'xmpp:', '//' ); /** @@ -3809,13 +4036,16 @@ $wgNoFollowNsExceptions = array(); * (or any subdomains) will not be set to rel="nofollow" regardless of the * value of $wgNoFollowLinks. For instance: * - * $wgNoFollowDomainExceptions = array( 'en.wikipedia.org', 'wiktionary.org' ); + * $wgNoFollowDomainExceptions = array( 'en.wikipedia.org', 'wiktionary.org', + * 'mediawiki.org' ); * * This would add rel="nofollow" to links to de.wikipedia.org, but not * en.wikipedia.org, wiktionary.org, en.wiktionary.org, us.en.wikipedia.org, * etc. + * + * Defaults to mediawiki.org for the links included in the software by default. */ -$wgNoFollowDomainExceptions = array(); +$wgNoFollowDomainExceptions = array( 'mediawiki.org' ); /** * Allow DISPLAYTITLE to change title display @@ -3869,23 +4099,14 @@ $wgTranscludeCacheExpiry = 3600; * - 'any': all pages as considered as valid articles * - 'comma': the page must contain a comma to be considered valid * - 'link': the page must contain a [[wiki link]] to be considered valid - * - null: the value will be set at run time depending on $wgUseCommaCount: - * if $wgUseCommaCount is false, it will be 'link', if it is true - * it will be 'comma' * - * See also See http://www.mediawiki.org/wiki/Manual:Article_count + * See also See https://www.mediawiki.org/wiki/Manual:Article_count * * Retroactively changing this variable will not affect the existing count, * to update it, you will need to run the maintenance/updateArticleCount.php * script. */ -$wgArticleCountMethod = null; - -/** - * Backward compatibility setting, will set $wgArticleCountMethod if it is null. - * @deprecated since 1.18; use $wgArticleCountMethod instead - */ -$wgUseCommaCount = false; +$wgArticleCountMethod = 'link'; /** * wgHitcounterUpdateFreq sets how often page counters should be updated, higher @@ -3914,6 +4135,7 @@ $wgActiveUserDays = 30; /** * For compatibility with old installations set to false + * @deprecated since 1.24 will be removed in future */ $wgPasswordSalt = true; @@ -3923,6 +4145,72 @@ $wgPasswordSalt = true; */ $wgMinimalPasswordLength = 1; +/** + * Specifies if users should be sent to a password-reset form on login, if their + * password doesn't meet the requirements of User::isValidPassword(). + * @since 1.23 + */ +$wgInvalidPasswordReset = true; + +/** + * Default password type to use when hashing user passwords + * + * @since 1.24 + */ +$wgPasswordDefault = 'pbkdf2'; + +/** + * Configuration for built-in password types. Maps the password type + * to an array of options. The 'class' option is the Password class to + * use. All other options are class-dependent. + * + * An advanced example: + * @code + * $wgPasswordConfig['bcrypt-peppered'] = array( + * 'class' => 'EncryptedPassword', + * 'underlying' => 'bcrypt', + * 'secrets' => array(), + * 'cipher' => MCRYPT_RIJNDAEL_256, + * 'mode' => MCRYPT_MODE_CBC, + * 'cost' => 5, + * ); + * @endcode + * + * @since 1.24 + */ +$wgPasswordConfig = array( + 'A' => array( + 'class' => 'MWOldPassword', + ), + 'B' => array( + 'class' => 'MWSaltedPassword', + ), + 'pbkdf2-legacyA' => array( + 'class' => 'LayeredParameterizedPassword', + 'types' => array( + 'A', + 'pbkdf2', + ), + ), + 'pbkdf2-legacyB' => array( + 'class' => 'LayeredParameterizedPassword', + 'types' => array( + 'B', + 'pbkdf2', + ), + ), + 'bcrypt' => array( + 'class' => 'BcryptPassword', + 'cost' => 9, + ), + 'pbkdf2' => array( + 'class' => 'Pbkdf2Password', + 'algo' => 'sha256', + 'cost' => '10000', + 'length' => '128', + ), +); + /** * Whether to allow password resets ("enter some identifying data, and we'll send an email * with a temporary password you can use to get back into the account") identified by @@ -3963,8 +4251,8 @@ $wgReservedUsernames = array( /** * Settings added to this array will override the default globals for the user * preferences used by anonymous visitors and newly created accounts. - * For instance, to disable section editing links: - * $wgDefaultUserOptions ['editsection'] = 0; + * For instance, to disable editing on double clicks: + * $wgDefaultUserOptions ['editondblclick'] = 0; */ $wgDefaultUserOptions = array( 'ccmeonemails' => 0, @@ -3972,15 +4260,13 @@ $wgDefaultUserOptions = array( 'date' => 'default', 'diffonly' => 0, 'disablemail' => 0, - 'disablesuggest' => 0, 'editfont' => 'default', 'editondblclick' => 0, - 'editsection' => 1, 'editsectiononrightclick' => 0, 'enotifminoredits' => 0, 'enotifrevealaddr' => 0, 'enotifusertalkpages' => 1, - 'enotifwatchlistpages' => 0, + 'enotifwatchlistpages' => 1, 'extendwatchlist' => 0, 'fancysig' => 0, 'forceeditsummary' => 0, @@ -3988,34 +4274,28 @@ $wgDefaultUserOptions = array( 'hideminor' => 0, 'hidepatrolled' => 0, 'imagesize' => 2, - 'justify' => 0, 'math' => 1, 'minordefault' => 0, 'newpageshidepatrolled' => 0, - 'nocache' => 0, - 'noconvertlink' => 0, + 'nickname' => '', 'norollbackdiff' => 0, 'numberheadings' => 0, 'previewonfirst' => 0, 'previewontop' => 1, 'rcdays' => 7, 'rclimit' => 50, - 'rememberpassword' => 0, 'rows' => 25, - 'searchlimit' => 20, 'showhiddencats' => 0, 'shownumberswatching' => 1, - 'showtoc' => 1, 'showtoolbar' => 1, 'skin' => false, 'stubthreshold' => 0, - 'thumbsize' => 2, + 'thumbsize' => 5, 'underline' => 2, 'uselivepreview' => 0, 'usenewrc' => 0, - 'vector-simplesearch' => 1, - 'watchcreations' => 0, - 'watchdefault' => 0, + 'watchcreations' => 1, + 'watchdefault' => 1, 'watchdeletion' => 0, 'watchlistdays' => 3.0, 'watchlisthideanons' => 0, @@ -4025,6 +4305,7 @@ $wgDefaultUserOptions = array( 'watchlisthideown' => 0, 'watchlisthidepatrolled' => 0, 'watchmoves' => 0, + 'watchrollback' => 0, 'wllimit' => 250, 'useeditwarning' => 1, 'prefershttps' => 1, @@ -4126,7 +4407,7 @@ $wgBlockDisablesLogin = false; * * @note Also that this will only protect _pages in the wiki_. Uploaded files * will remain readable. You can use img_auth.php to protect uploaded files, - * see http://www.mediawiki.org/wiki/Manual:Image_Authorization + * see https://www.mediawiki.org/wiki/Manual:Image_Authorization */ $wgWhitelistRead = false; @@ -4211,6 +4492,7 @@ $wgGroupPermissions['*']['editmyoptions'] = true; $wgGroupPermissions['user']['move'] = true; $wgGroupPermissions['user']['move-subpages'] = true; $wgGroupPermissions['user']['move-rootuserpages'] = true; // can move root userpages +$wgGroupPermissions['user']['move-categorypages'] = true; $wgGroupPermissions['user']['movefile'] = true; $wgGroupPermissions['user']['read'] = true; $wgGroupPermissions['user']['edit'] = true; @@ -4258,6 +4540,7 @@ $wgGroupPermissions['sysop']['importupload'] = true; $wgGroupPermissions['sysop']['move'] = true; $wgGroupPermissions['sysop']['move-subpages'] = true; $wgGroupPermissions['sysop']['move-rootuserpages'] = true; +$wgGroupPermissions['sysop']['move-categorypages'] = true; $wgGroupPermissions['sysop']['patrol'] = true; $wgGroupPermissions['sysop']['autopatrol'] = true; $wgGroupPermissions['sysop']['protect'] = true; @@ -4279,8 +4562,9 @@ $wgGroupPermissions['sysop']['noratelimit'] = true; $wgGroupPermissions['sysop']['movefile'] = true; $wgGroupPermissions['sysop']['unblockself'] = true; $wgGroupPermissions['sysop']['suppressredirect'] = true; +#$wgGroupPermissions['sysop']['pagelang'] = true; #$wgGroupPermissions['sysop']['upload_by_url'] = true; -#$wgGroupPermissions['sysop']['mergehistory'] = true; +$wgGroupPermissions['sysop']['mergehistory'] = true; // Permission to change users' group assignments $wgGroupPermissions['bureaucrat']['userrights'] = true; @@ -4296,6 +4580,8 @@ $wgGroupPermissions['bureaucrat']['noratelimit'] = true; #$wgGroupPermissions['suppress']['hideuser'] = true; // To hide revisions/log items from users and Sysops #$wgGroupPermissions['suppress']['suppressrevision'] = true; +// To view revisions/log items hidden from users and Sysops +#$wgGroupPermissions['suppress']['viewsuppressed'] = true; // For private suppression log access #$wgGroupPermissions['suppress']['suppressionlog'] = true; @@ -4554,6 +4840,15 @@ $wgAvailableRights = array(); */ $wgDeleteRevisionsLimit = 0; +/** + * The maximum number of edits a user can have and + * can still be hidden by users with the hideuser permission. + * This is limited for performance reason. + * Set to false to disable the limit. + * @since 1.23 + */ +$wgHideUserContribLimit = 1000; + /** * Number of accounts each IP address may create, 0 to disable. * @@ -4586,12 +4881,6 @@ $wgSummarySpamRegex = array(); */ $wgEnableDnsBlacklist = false; -/** - * @deprecated since 1.17 Use $wgEnableDnsBlacklist instead, only kept for - * backward compatibility. - */ -$wgEnableSorbs = false; - /** * List of DNS blacklists to use, if $wgEnableDnsBlacklist is true. * @@ -4617,12 +4906,6 @@ $wgEnableSorbs = false; */ $wgDnsBlacklistUrls = array( 'http.dnsbl.sorbs.net.' ); -/** - * @deprecated since 1.17 Use $wgDnsBlacklistUrls instead, only kept for - * backward compatibility. - */ -$wgSorbsUrl = array(); - /** * Proxy whitelist, list of addresses that are assumed to be non-proxy despite * what the other methods might say. @@ -4690,10 +4973,19 @@ $wgRateLimits = array( 'ip' => null, 'subnet' => null, ), + 'renderfile-nonstandard' => array( // same as above but for non-standard thumbnails + 'anon' => null, + 'user' => null, + 'newbie' => null, + 'ip' => null, + 'subnet' => null, + ), ); /** * Set to a filename to log rate limiter hits. + * + * @deprecated since 1.23, use $wgDebugLogGroups['ratelimit'] instead */ $wgRateLimitLog = null; @@ -4746,11 +5038,6 @@ $wgSecretKey = false; */ $wgProxyList = array(); -/** - * @deprecated since 1.14 - */ -$wgProxyKey = false; - /** @} */ # end of proxy scanner settings /************************************************************************//** @@ -4759,7 +5046,7 @@ $wgProxyKey = false; */ /** - * Default cookie expiration time. Setting to 0 makes all cookies session-only. + * Default cookie lifetime, in seconds. Setting to 0 makes all cookies session-only. */ $wgCookieExpiration = 180 * 86400; @@ -4805,17 +5092,6 @@ $wgCookiePrefix = false; */ $wgCookieHttpOnly = true; -/** - * If the requesting browser matches a regex in this blacklist, we won't - * send it cookies with HttpOnly mode, even if $wgCookieHttpOnly is on. - */ -$wgHttpOnlyBlacklist = array( - // Internet Explorer for Mac; sometimes the cookies work, sometimes - // they don't. It's difficult to predict, as combinations of path - // and expiration options affect its parsing. - '/^Mozilla\/4\.0 \(compatible; MSIE \d+\.\d+; Mac_PowerPC\)/', -); - /** * A list of cookies that vary the cache (for use by extensions) */ @@ -4852,7 +5128,7 @@ $wgUseTeX = false; */ /** - * Filename for debug logging. See http://www.mediawiki.org/wiki/How_to_debug + * Filename for debug logging. See https://www.mediawiki.org/wiki/How_to_debug * The debug log file should be not be publicly accessible if it is used, as it * may contain private data. */ @@ -4895,15 +5171,48 @@ $wgDebugComments = false; $wgDebugDBTransactions = false; /** - * Write SQL queries to the debug log + * Write SQL queries to the debug log. + * + * This setting is only used $wgLBFactoryConf['class'] is set to + * 'LBFactorySimple' and $wgDBservers is an empty array; otherwise + * the DBO_DEBUG flag must be set in the 'flags' option of the database + * connection to achieve the same functionality. */ $wgDebugDumpSql = false; /** - * Set to an array of log group keys to filenames. + * Trim logged SQL queries to this many bytes. Set 0/false/null to do no + * trimming. + * @since 1.24 + */ +$wgDebugDumpSqlLength = 500; + +/** + * Map of string log group names to log destinations. + * * If set, wfDebugLog() output for that group will go to that file instead * of the regular $wgDebugLogFile. Useful for enabling selective logging * in production. + * + * Log destinations may be one of the following: + * - false to completely remove from the output, including from $wgDebugLogFile. + * - string values specifying a filename or URI. + * - associative array mapping 'destination' key to the desired filename or URI. + * The associative array may also contain a 'sample' key with an integer value, + * specifying a sampling factor. + * + * @par Example: + * @code + * $wgDebugLogGroups['redis'] = '/var/log/mediawiki/redis.log'; + * @endcode + * + * @par Advanced example: + * @code + * $wgDebugLogGroups['memcached'] = ( + * 'destination' => '/var/log/mediawiki/memcached.log', + * 'sample' => 1000, // log 1 message out of every 1,000. + * ); + * @endcode */ $wgDebugLogGroups = array(); @@ -4947,6 +5256,11 @@ $wgShowExceptionDetails = false; /** * If true, show a backtrace for database errors + * + * @note This setting only applies when connection errors and query errors are + * reported in the normal manner. $wgShowExceptionDetails applies in other cases, + * including those in which an uncaught exception is thrown from within the + * exception handler. */ $wgShowDBErrorBacktrace = false; @@ -4987,20 +5301,11 @@ $wgProfileLimit = 0.0; /** * Don't put non-profiling info into log file - */ -$wgProfileOnly = false; - -/** - * Log sums from profiling into "profiling" table in db. * - * You have to create a 'profiling' table in your database before using - * this feature. Run set $wgProfileToDatabase to true in - * LocalSettings.php and run maintenance/update.php or otherwise - * manually add patch-profiling.sql to your database. - * - * To enable profiling, edit StartProfiler.php + * @deprecated since 1.23, set the log file in + * $wgDebugLogGroups['profileoutput'] instead. */ -$wgProfileToDatabase = false; +$wgProfileOnly = false; /** * If true, print a raw call tree instead of per-function report @@ -5016,7 +5321,8 @@ $wgProfilePerHost = false; * Host for UDP profiler. * * The host should be running a daemon which can be obtained from MediaWiki - * Subversion at: http://svn.wikimedia.org/svnroot/mediawiki/trunk/udpprofile + * Git at: + * http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile */ $wgUDPProfilerHost = '127.0.0.1'; @@ -5028,20 +5334,15 @@ $wgUDPProfilerPort = '3811'; /** * Format string for the UDP profiler. The UDP profiler invokes sprintf() with - * (profile id, count, cpu, cpu_sq, real, real_sq, entry name) as arguments. - * You can use sprintf's argument numbering/swapping capability to repeat, - * re-order or omit fields. + * (profile id, count, cpu, cpu_sq, real, real_sq, entry name, memory) as + * arguments. You can use sprintf's argument numbering/swapping capability to + * repeat, re-order or omit fields. * * @see $wgStatsFormatString * @since 1.22 */ $wgUDPProfilerFormatString = "%s - %d %f %f %f %f %s\n"; -/** - * Detects non-matching wfProfileIn/wfProfileOut calls - */ -$wgDebugProfiling = false; - /** * Output debug message on every wfProfileIn/wfProfileOut */ @@ -5111,21 +5412,6 @@ $wgParserTestFiles = array( "$IP/tests/parser/extraParserTests.txt" ); -/** - * If configured, specifies target CodeReview installation to send test - * result data from 'parserTests.php --upload' - * - * Something like this: - * $wgParserTestRemote = array( - * 'api-url' => 'http://www.mediawiki.org/w/api.php', - * 'repo' => 'MediaWiki', - * 'suite' => 'ParserTests', - * 'path' => '/trunk/phase3', // not used client-side; for reference - * 'secret' => 'qmoicj3mc4mcklmqw', // Shared secret used in HMAC validation - * ); - */ -$wgParserTestRemote = false; - /** * Allow running of javascript test suites via [[Special:JavaScriptTest]] (such as QUnit). */ @@ -5189,18 +5475,6 @@ $wgAdvancedSearchHighlighting = false; */ $wgSearchHighlightBoundaries = '[\p{Z}\p{P}\p{C}]'; -/** - * Set to true to have the search engine count total - * search matches to present in the Special:Search UI. - * Not supported by every search engine shipped with MW. - * - * This could however be slow on larger wikis, and is pretty flaky - * with the current title vs content split. Recommend avoiding until - * that's been worked out cleanly; but this may aid in testing the - * search UI and API to confirm that the result count works. - */ -$wgCountTotalSearchHits = false; - /** * Template for OpenSearch suggestions, defaults to API action=opensearch * @@ -5219,6 +5493,12 @@ $wgOpenSearchTemplate = false; */ $wgEnableOpenSearchSuggest = true; +/** + * Integer defining default number of entries to show on + * OpenSearch call. + */ +$wgOpenSearchDefaultLimit = 10; + /** * Expiry time for search suggestion responses */ @@ -5243,25 +5523,6 @@ $wgNamespacesToBeSearchedDefault = array( NS_MAIN => true, ); -/** - * Namespaces to be searched when user clicks the "Help" tab - * on Special:Search. - * - * Same format as $wgNamespacesToBeSearchedDefault. - */ -$wgNamespacesToBeSearchedHelp = array( - NS_PROJECT => true, - NS_HELP => true, -); - -/** - * If set to true the 'searcheverything' preference will be effective only for - * logged-in users. - * Useful for big wikis to maintain different search profiles for anonymous and - * logged-in users. - */ -$wgSearchEverythingOnlyLoggedIn = false; - /** * Disable the internal MySQL-based search, to allow it to be * implemented by an extension instead. @@ -5349,11 +5610,6 @@ $wgPreviewOnOpenNamespaces = array( NS_CATEGORY => true ); -/** - * Go button goes straight to the edit screen if the article doesn't exist. - */ -$wgGoToEdit = false; - /** * Enable the UniversalEditButton for browsers that support it * (currently only Firefox with an extension) @@ -5390,13 +5646,6 @@ if ( !isset( $wgCommandLineMode ) ) { */ $wgCommandLineDarkBg = false; -/** - * Array for extensions to register their maintenance scripts with the - * system. The key is the name of the class and the value is the full - * path to the file - */ -$wgMaintenanceScripts = array(); - /** * Set this to a string to put the wiki into read-only mode. The text will be * used as an explanation to users. @@ -5445,9 +5694,10 @@ $wgGitBin = '/usr/bin/git'; * @since 1.20 */ $wgGitRepositoryViewers = array( - 'https://gerrit.wikimedia.org/r/p/(.*)' => 'https://git.wikimedia.org/commit/%r/%H', - 'ssh://(?:[a-z0-9_]+@)?gerrit.wikimedia.org:29418/(.*)' - => 'https://git.wikimedia.org/commit/%r/%H', + 'https://(?:[a-z0-9_]+@)?gerrit.wikimedia.org/r/(?:p/)?(.*)' => + 'https://git.wikimedia.org/tree/%r/%H', + 'ssh://(?:[a-z0-9_]+@)?gerrit.wikimedia.org:29418/(.*)' => + 'https://git.wikimedia.org/tree/%r/%H', ); /** @} */ # End of maintenance } @@ -5474,74 +5724,44 @@ $wgRCMaxAge = 13 * 7 * 24 * 3600; $wgRCFilterByAge = false; /** - * List of Days and Limits options to list in the Special:Recentchanges and + * List of Limits options to list in the Special:Recentchanges and * Special:Recentchangeslinked pages. */ $wgRCLinkLimits = array( 50, 100, 250, 500 ); -$wgRCLinkDays = array( 1, 3, 7, 14, 30 ); - -/** - * Send recent changes updates via UDP. The updates will be formatted for IRC. - * Set this to the IP address of the receiver. - * - * @deprecated since 1.22, use $wgRCFeeds - */ -$wgRC2UDPAddress = false; - -/** - * Port number for RC updates - * - * @deprecated since 1.22, use $wgRCFeeds - */ -$wgRC2UDPPort = false; - -/** - * Prefix to prepend to each UDP packet. - * This can be used to identify the wiki. A script is available called - * mxircecho.py which listens on a UDP port, and uses a prefix ending in a - * tab to identify the IRC channel to send the log line to. - * - * @deprecated since 1.22, use $wgRCFeeds - */ -$wgRC2UDPPrefix = ''; - -/** - * If this is set to true, $wgLocalInterwiki will be prepended to links in the - * IRC feed. If this is set to a string, that string will be used as the prefix. - * - * @deprecated since 1.22, use $wgRCFeeds - */ -$wgRC2UDPInterwikiPrefix = false; /** - * Set to true to omit "bot" edits (by users with the bot permission) from the - * UDP feed. - * - * @deprecated since 1.22, use $wgRCFeeds + * List of Days options to list in the Special:Recentchanges and + * Special:Recentchangeslinked pages. */ -$wgRC2UDPOmitBots = false; +$wgRCLinkDays = array( 1, 3, 7, 14, 30 ); /** * Destinations to which notifications about recent changes * should be sent. * - * As of MediaWiki 1.22, the only supported 'engine' parameter option in core - * is 'UDPRCFeedEngine', which is used to send recent changes over UDP to the - * specified server. + * As of MediaWiki 1.22, there are 2 supported 'engine' parameter option in core: + * * 'UDPRCFeedEngine', which is used to send recent changes over UDP to the + * specified server. + * * 'RedisPubSubFeedEngine', which is used to send recent changes to Redis. + * * The common options are: * * 'uri' -- the address to which the notices are to be sent. * * 'formatter' -- the class name (implementing RCFeedFormatter) which will - * produce the text to send. + * produce the text to send. This can also be an object of the class. * * 'omit_bots' -- whether the bot edits should be in the feed + * * 'omit_anon' -- whether anonymous edits should be in the feed + * * 'omit_user' -- whether edits by registered users should be in the feed + * * 'omit_minor' -- whether minor edits should be in the feed + * * 'omit_patrolled' -- whether patrolled edits should be in the feed + * * The IRC-specific options are: * * 'add_interwiki_prefix' -- whether the titles should be prefixed with - * $wgLocalInterwiki. + * the first entry in the $wgLocalInterwikis array (or the value of + * $wgLocalInterwiki, if set) + * * The JSON-specific options are: * * 'channel' -- if set, the 'channel' parameter is also set in JSON values. * - * To ensure backwards-compatability, whenever $wgRC2UDPAddress is set, a - * 'default' feed will be created reusing the deprecated $wgRC2UDP* variables. - * * @example $wgRCFeeds['example'] = array( * 'formatter' => 'JSONRCFeedFormatter', * 'uri' => "udp://localhost:1336", @@ -5567,13 +5787,6 @@ $wgRCEngines = array( 'udp' => 'UDPRCFeedEngine', ); -/** - * Enable user search in Special:Newpages - * This is really a temporary hack around an index install bug on some Wikipedias. - * Kill it once fixed. - */ -$wgEnableNewpagesUserFilter = true; - /** * Use RC Patrolling to check for vandalism */ @@ -5707,24 +5920,42 @@ $wgUnwatchedPageThreshold = false; * To register a new one: * @code * $wgRecentChangesFlags['flag'] => array( + * // message for the letter displayed next to rows on changes lists * 'letter' => 'letter-msg', - * 'title' => 'tooltip-msg' + * // message for the tooltip of the letter + * 'title' => 'tooltip-msg', + * // optional (defaults to 'tooltip-msg'), message to use in the legend box + * 'legend' => 'legend-msg', + * // optional (defaults to 'flag'), CSS class to put on changes lists rows + * 'class' => 'css-class', * ); * @endcode * - * Optional 'class' allows to set a css class different than the flag name. - * * @since 1.22 */ $wgRecentChangesFlags = array( - 'newpage' => array( 'letter' => 'newpageletter', - 'title' => 'recentchanges-label-newpage' ), - 'minor' => array( 'letter' => 'minoreditletter', - 'title' => 'recentchanges-label-minor', 'class' => 'minoredit' ), - 'bot' => array( 'letter' => 'boteditletter', - 'title' => 'recentchanges-label-bot', 'class' => 'botedit' ), - 'unpatrolled' => array( 'letter' => 'unpatrolledletter', - 'title' => 'recentchanges-label-unpatrolled' ), + 'newpage' => array( + 'letter' => 'newpageletter', + 'title' => 'recentchanges-label-newpage', + 'legend' => 'recentchanges-legend-newpage', + ), + 'minor' => array( + 'letter' => 'minoreditletter', + 'title' => 'recentchanges-label-minor', + 'legend' => 'recentchanges-legend-minor', + 'class' => 'minoredit', + ), + 'bot' => array( + 'letter' => 'boteditletter', + 'title' => 'recentchanges-label-bot', + 'legend' => 'recentchanges-legend-bot', + 'class' => 'botedit', + ), + 'unpatrolled' => array( + 'letter' => 'unpatrolledletter', + 'title' => 'recentchanges-label-unpatrolled', + 'legend' => 'recentchanges-legend-unpatrolled', + ), ); /** @} */ # end RC/watchlist } @@ -5763,11 +5994,6 @@ $wgRightsText = null; */ $wgRightsIcon = null; -/** - * Set to an array of metadata terms. Else they will be loaded based on $wgRightsUrl - */ -$wgLicenseTerms = false; - /** * Set this to some HTML to override the rights icon with an arbitrary logo * @deprecated since 1.18 Use $wgFooterIcons['copyright']['copyright'] @@ -5806,6 +6032,17 @@ $wgShowCreditsIfMax = true; * Special:Import (for sysops). Since complete page history can be imported, * these should be 'trusted'. * + * This can either be a regular array, or an associative map specifying + * subprojects on the interwiki map of the target wiki, or a mix of the two, + * e.g. + * @code + * $wgImportSources = array( + * 'wikipedia' => array( 'cs', 'en', 'fr', 'zh' ), + * 'wikispecies', + * 'wikia' => array( 'animanga', 'brickipedia', 'desserts' ), + * ); + * @endcode + * * If a user has the 'import' permission but not the 'importupload' permission, * they will only be able to run imports through this transwiki interface. */ @@ -5886,6 +6123,16 @@ $wgExtensionFunctions = array(); * Variables defined in extensions will override conflicting variables defined * in the core. * + * Since MediaWiki 1.23, use of this variable to define messages is discouraged; instead, store + * messages in JSON format and use $wgMessagesDirs. For setting other variables than + * $messages, $wgExtensionMessagesFiles should still be used. Use a DIFFERENT key because + * any entry having a key that also exists in $wgMessagesDirs will be ignored. + * + * Extensions using the JSON message format can preserve backward compatibility with + * earlier versions of MediaWiki by using a compatibility shim, such as one generated + * by the generateJsonI18n.php maintenance script, listing it under the SAME key + * as for the $wgMessagesDirs entry. + * * @par Example: * @code * $wgExtensionMessagesFiles['ConfirmEdit'] = __DIR__.'/ConfirmEdit.i18n.php'; @@ -5893,6 +6140,34 @@ $wgExtensionFunctions = array(); */ $wgExtensionMessagesFiles = array(); +/** + * Extension messages directories. + * + * Associative array mapping extension name to the path of the directory where message files can + * be found. The message files are expected to be JSON files named for their language code, e.g. + * en.json, de.json, etc. Extensions with messages in multiple places may specify an array of + * message directories. + * + * @par Simple example: + * @code + * $wgMessagesDirs['Example'] = __DIR__ . '/i18n'; + * @endcode + * + * @par Complex example: + * @code + * $wgMessagesDirs['Example'] = array( + * __DIR__ . '/lib/ve/i18n', + * __DIR__ . '/lib/oojs-ui/i18n', + * __DIR__ . '/i18n', + * ) + * @endcode + * @since 1.23 + */ +$wgMessagesDirs = array( + 'core' => "$IP/languages/i18n", + 'oojs-ui' => "$IP/resources/lib/oojs-ui/i18n", +); + /** * Array of files with list(s) of extension entry points to be used in * maintenance/mergeMessageFileList.php @@ -5922,19 +6197,20 @@ $wgParserOutputHooks = array(); $wgEnableParserLimitReporting = true; /** - * List of valid skin names. + * List of valid skin names + * * The key should be the name in all lower case, the value should be a properly - * cased name for the skin. This value will be prefixed with "Skin" to create the - * class name of the skin to load, and if the skin's class cannot be found through - * the autoloader it will be used to load a .php file by that name in the skins directory. - * The default skins will be added later, by Skin::getSkinNames(). Use - * Skin::getSkinNames() as an accessor if you wish to have access to the full list. + * cased name for the skin. This value will be prefixed with "Skin" to create + * the class name of the skin to load. Use Skin::getSkinNames() as an accessor + * if you wish to have access to the full list. */ $wgValidSkinNames = array(); /** - * Special page list. - * See the top of SpecialPage.php for documentation. + * Special page list. This is an associative array mapping the (canonical) names of + * special pages to either a class name to be instantiated, or a callback to use for + * creating the special page object. In both cases, the result must be an instance of + * SpecialPage. */ $wgSpecialPages = array(); @@ -5944,30 +6220,63 @@ $wgSpecialPages = array(); $wgAutoloadClasses = array(); /** - * An array of extension types and inside that their names, versions, authors, - * urls, descriptions and pointers to localized description msgs. Note that - * the version, url, description and descriptionmsg key can be omitted. + * Switch controlling legacy case-insensitive classloading. + * Do not disable if your wiki must support data created by PHP4, or by + * MediaWiki 1.4 or earlier. + */ +$wgAutoloadAttemptLowercase = true; + +/** + * An array of information about installed extensions keyed by their type. + * + * All but 'name', 'path' and 'author' can be omitted. * * @code * $wgExtensionCredits[$type][] = array( - * 'name' => 'Example extension', - * 'version' => 1.9, * 'path' => __FILE__, - * 'author' => 'Foo Barstein', - * 'url' => 'http://www.example.com/Example%20Extension/', - * 'description' => 'An example extension', + * 'name' => 'Example extension', + * 'namemsg' => 'exampleextension-name', + * 'author' => array( + * 'Foo Barstein', + * ), + * 'version' => '1.9.0', + * 'url' => 'http://example.org/example-extension/', * 'descriptionmsg' => 'exampleextension-desc', + * 'license-name' => 'GPL-2.0', * ); * @endcode * - * Where $type is 'specialpage', 'parserhook', 'variable', 'media' or 'other'. - * Where 'descriptionmsg' can be an array with message key and parameters: - * 'descriptionmsg' => array( 'exampleextension-desc', param1, param2, ... ), + * The extensions are listed on Special:Version. This page also looks for a file + * named COPYING or LICENSE (optional .txt extension) and provides a link to + * view said file. When the 'license-name' key is specified, this file is + * interpreted as wikitext. + * + * - $type: One of 'specialpage', 'parserhook', 'variable', 'media', 'antispam', + * 'skin', 'api', or 'other', or any additional types as specified through the + * ExtensionTypes hook as used in SpecialVersion::getExtensionTypes(). + * + * - name: Name of extension as an inline string instead of localizable message. + * Do not omit this even if 'namemsg' is provided, as it is used to override + * the path Special:Version uses to find extension's license info, and is + * required for backwards-compatibility with MediaWiki 1.23 and older. + * + * - namemsg (since MW 1.24): A message key for a message containing the + * extension's name, if the name is localizable. (For example, skin names + * usually are.) + * + * - author: A string or an array of strings. Authors can be linked using + * the regular wikitext link syntax. To have an internationalized version of + * "and others" show, add an element "...". This element can also be linked, + * for instance "[http://example ...]". + * + * - descriptionmsg: A message key or an an array with message key and parameters: + * `'descriptionmsg' => 'exampleextension-desc',` + * + * - description: Description of extension as an inline string instead of + * localizable message (omit in favour of 'descriptionmsg'). * - * author can be a string or an array of strings. Authors can be linked using - * the regular wikitext link syntax. To have an internationalized version of - * "and others" show, add an element "...". This element can also be linked, - * for instance "[http://example ...]". + * - license-name: Short name of the license (used as label for the link), such + * as "GPL-2.0" or "MIT" (https://spdx.org/licenses/ for a list of identifiers). */ $wgExtensionCredits = array(); @@ -6019,7 +6328,7 @@ $wgHooks = array(); */ $wgJobClasses = array( 'refreshLinks' => 'RefreshLinksJob', - 'refreshLinks2' => 'RefreshLinksJob2', + 'refreshLinks2' => 'RefreshLinksJob2', // b/c 'htmlCacheUpdate' => 'HTMLCacheUpdateJob', 'sendMail' => 'EmaillingJob', 'enotifNotify' => 'EnotifNotifyJob', @@ -6039,9 +6348,21 @@ $wgJobClasses = array( * - Jobs that you would never want to run as part of a page rendering request. * - Jobs that you want to run on specialized machines ( like transcoding, or a particular * machine on your cluster has 'outside' web access you could restrict uploadFromUrl ) + * These settings should be global to all wikis. */ $wgJobTypesExcludedFromDefaultQueue = array( 'AssembleUploadChunks', 'PublishStashedFile' ); +/** + * Map of job types to how many job "work items" should be run per second + * on each job runner process. The meaning of "work items" varies per job, + * but typically would be something like "pages to update". A single job + * may have a variable number of work items, as is the case with batch jobs. + * This is used by runJobs.php and not jobs run via $wgJobRunRate. + * These settings should be global to all wikis. + * @var float[] + */ +$wgJobBackoffThrottling = array(); + /** * Map of job types to configuration arrays. * This determines which queue class and storage system is used for each job type. @@ -6065,7 +6386,8 @@ $wgJobQueueAggregator = array( * Expensive Querypages are already updated. */ $wgSpecialPageCacheUpdates = array( - 'Statistics' => array( 'SiteStatsUpdate', 'cacheUpdate' ) + 'Statistics' => array( 'SiteStatsUpdate', 'cacheUpdate' ), + 'Activeusers' => array( 'SpecialActiveUsers', 'cacheUpdate' ), ); /** @@ -6262,9 +6584,6 @@ $wgLogActions = array( 'protect/modify' => 'modifiedarticleprotection', 'protect/unprotect' => 'unprotectedarticle', 'protect/move_prot' => 'movedarticleprotection', - 'upload/upload' => 'uploadedimage', - 'upload/overwrite' => 'overwroteimage', - 'upload/revert' => 'uploadedimage', 'import/upload' => 'import-logentry-upload', 'import/interwiki' => 'import-logentry-interwiki', 'merge/merge' => 'pagemerge-logentry', @@ -6291,6 +6610,9 @@ $wgLogActionsHandlers = array( 'patrol/patrol' => 'PatrolLogFormatter', 'rights/rights' => 'RightsLogFormatter', 'rights/autopromote' => 'RightsLogFormatter', + 'upload/upload' => 'LogFormatter', + 'upload/overwrite' => 'LogFormatter', + 'upload/revert' => 'LogFormatter', ); /** @@ -6324,11 +6646,6 @@ $wgDisableQueryPageUpdate = false; */ $wgSpecialPageGroups = array(); -/** - * Whether or not to sort special pages in Special:Specialpages - */ -$wgSortSpecialPages = true; - /** * On Special:Unusedimages, consider images "used", if they are put * into a category. Default (false) is not to count those as used. @@ -6379,12 +6696,6 @@ $wgActions = array( 'watch' => true, ); -/** - * Array of disabled article actions, e.g. view, edit, delete, etc. - * @deprecated since 1.18; just set $wgActions['action'] = false instead - */ -$wgDisabledActions = array(); - /** @} */ # end actions } /*************************************************************************//** @@ -6470,7 +6781,7 @@ $wgExemptFromUserRobotsControl = null; * Enable the MediaWiki API for convenient access to * machine-readable data via api.php * - * See http://www.mediawiki.org/wiki/API + * See https://www.mediawiki.org/wiki/API */ $wgEnableAPI = true; @@ -6499,13 +6810,76 @@ $wgDebugAPI = false; /** * API module extensions. - * Associative array mapping module name to class name. + * + * Associative array mapping module name to modules specs; + * Each module spec is an associative array containing at least + * the 'class' key for the module's class, and optionally a + * 'factory' key for the factory function to use for the module. + * + * That factory function will be called with two parameters, + * the parent module (an instance of ApiBase, usually ApiMain) + * and the name the module was registered under. The return + * value must be an instance of the class given in the 'class' + * field. + * + * For backward compatibility, the module spec may also be a + * simple string containing the module's class name. In that + * case, the class' constructor will be called with the parent + * module and module name as parameters, as described above. + * + * Examples for registering API modules: + * + * @code + * $wgAPIModules['foo'] = 'ApiFoo'; + * $wgAPIModules['bar'] = array( + * 'class' => 'ApiBar', + * 'factory' => function( $main, $name ) { ... } + * ); + * $wgAPIModules['xyzzy'] = array( + * 'class' => 'ApiXyzzy', + * 'factory' => array( 'XyzzyFactory', 'newApiModule' ) + * ); + * @endcode + * * Extension modules may override the core modules. - * @todo Describe each of the variables, group them and add examples + * See ApiMain::$Modules for a list of the core modules. */ $wgAPIModules = array(); + +/** + * API format module extensions. + * Associative array mapping format module name to module specs (see $wgAPIModules). + * Extension modules may override the core modules. + * + * See ApiMain::$Formats for a list of the core format modules. + */ +$wgAPIFormatModules = array(); + +/** + * API Query meta module extensions. + * Associative array mapping meta module name to module specs (see $wgAPIModules). + * Extension modules may override the core modules. + * + * See ApiQuery::$QueryMetaModules for a list of the core meta modules. + */ $wgAPIMetaModules = array(); + +/** + * API Query prop module extensions. + * Associative array mapping prop module name to module specs (see $wgAPIModules). + * Extension modules may override the core modules. + * + * See ApiQuery::$QueryPropModules for a list of the core prop modules. + */ $wgAPIPropModules = array(); + +/** + * API Query list module extensions. + * Associative array mapping list module name to module specs (see $wgAPIModules). + * Extension modules may override the core modules. + * + * See ApiQuery::$QueryListModules for a list of the core list modules. + */ $wgAPIListModules = array(); /** @@ -6683,12 +7057,12 @@ $wgShellLocale = 'en_US.utf8'; */ /** - * Timeout for HTTP requests done internally + * Timeout for HTTP requests done internally, in seconds. */ $wgHTTPTimeout = 25; /** - * Timeout for Asynchronous (background) HTTP requests + * Timeout for Asynchronous (background) HTTP requests, in seconds. */ $wgAsyncHTTPTimeout = 25; @@ -6719,6 +7093,14 @@ $wgHTTPConnectTimeout = 5e0; */ $wgJobRunRate = 1; +/** + * When $wgJobRunRate > 0, try to run jobs asynchronously, spawning a new process + * to handle the job execution, instead of blocking the request until the job + * execution finishes. + * @since 1.23 + */ +$wgRunJobsAsync = true; + /** * Number of rows to update per job */ @@ -6729,15 +7111,6 @@ $wgUpdateRowsPerJob = 500; */ $wgUpdateRowsPerQuery = 100; -/** - * Do not purge all the pages that use a page when it is edited - * if there are more than this many such pages. This is used to - * avoid invalidating a large portion of the squid/parser cache. - * - * This setting should factor in any squid/parser cache expiry settings. - */ -$wgMaxBacklinksInvalidate = false; - /** @} */ # End job queue } /************************************************************************//** @@ -6886,10 +7259,45 @@ $wgSiteTypes = array( ); /** - * Formerly a list of files for HipHop compilation - * @deprecated since 1.22 + * Whether the page_props table has a pp_sortkey column. Set to false in case + * the respective database schema change was not applied. + * @since 1.23 + */ +$wgPagePropsHaveSortkey = true; + +/** + * Port where you have HTTPS running + * Supports HTTPS on non-standard ports + * @see bug 65184 + * @since 1.24 + */ +$wgHttpsPort = 443; + +/** + * Secret and algorithm for hmac-based key derivation function (fast, + * cryptographically secure random numbers). + * This should be set in LocalSettings.php, otherwise wgSecretKey will + * be used. + * @since 1.24 + */ +$wgHKDFSecret = false; +$wgHKDFAlgorithm = 'sha256'; + +/** + * Enable page language feature + * Allows setting page language in database + * @var bool + * @since 1.24 + */ +$wgPageLanguageUseDB = false; + +/** + * Enable use of the *_namespace fields of the pagelinks, redirect, and templatelinks tables. + * Set this only if the fields are fully populated. This may be removed in 1.25. + * @var bool + * @since 1.24 */ -$wgCompiledFiles = array(); +$wgUseLinkNamespaceDBFields = true; /** * For really cool vim folding this needs to be at the end: -- cgit v1.2.2