From: jenkins-bot Date: Wed, 28 Jun 2017 12:49:55 +0000 (+0000) Subject: Merge "User: Avoid deprecated Linker::link()" X-Git-Tag: 1.31.0-rc.0~2855 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=c6d1ceb90a9684fa0da758d88ba1e994fad4cffc;hp=559e3a4c5cff9b5eb1244342e8c86b440cb6a39d Merge "User: Avoid deprecated Linker::link()" --- diff --git a/autoload.php b/autoload.php index 293bf6a829..2560bdbdb9 100644 --- a/autoload.php +++ b/autoload.php @@ -192,6 +192,7 @@ $wgAutoloadLocalClasses = [ 'BenchmarkCSSMin' => __DIR__ . '/maintenance/benchmarks/benchmarkCSSMin.php', 'BenchmarkDeleteTruncate' => __DIR__ . '/maintenance/benchmarks/bench_delete_truncate.php', 'BenchmarkHooks' => __DIR__ . '/maintenance/benchmarks/benchmarkHooks.php', + 'BenchmarkJSMinPlus' => __DIR__ . '/maintenance/benchmarks/benchmarkJSMinPlus.php', 'BenchmarkParse' => __DIR__ . '/maintenance/benchmarks/benchmarkParse.php', 'BenchmarkPurge' => __DIR__ . '/maintenance/benchmarks/benchmarkPurge.php', 'BenchmarkTidy' => __DIR__ . '/maintenance/benchmarks/benchmarkTidy.php', diff --git a/includes/Defines.php b/includes/Defines.php index 6bc70edbc5..8ac84e5ab5 100644 --- a/includes/Defines.php +++ b/includes/Defines.php @@ -267,3 +267,28 @@ define( 'CONTENT_FORMAT_XML', 'application/xml' ); */ define( 'SHELL_MAX_ARG_STRLEN', '100000' ); /**@}*/ + +/**@{ + * Schema change migration flags. + * + * Used as values of a feature flag for an orderly transition from an old + * schema to a new schema. + * + * - MIGRATION_OLD: Only read and write the old schema. The new schema need not + * even exist. This is used from when the patch is merged until the schema + * change is actually applied to the database. + * - MIGRATION_WRITE_BOTH: Write both the old and new schema. Read the new + * schema preferentially, falling back to the old. This is used while the + * change is being tested, allowing easy roll-back to the old schema. + * - MIGRATION_WRITE_NEW: Write only the new schema. Read the new schema + * preferentially, falling back to the old. This is used while running the + * maintenance script to migrate existing entries in the old schema to the + * new schema. + * - MIGRATION_NEW: Only read and write the new schema. The old schema (and the + * feature flag) may now be removed. + */ +define( 'MIGRATION_OLD', 0 ); +define( 'MIGRATION_WRITE_BOTH', 1 ); +define( 'MIGRATION_WRITE_NEW', 2 ); +define( 'MIGRATION_NEW', 3 ); +/**@}*/ diff --git a/includes/EventRelayerGroup.php b/includes/EventRelayerGroup.php index 9360693a4b..18b1cd3f51 100644 --- a/includes/EventRelayerGroup.php +++ b/includes/EventRelayerGroup.php @@ -1,10 +1,28 @@ defineService( 'BootstrapConfig', function() use ( $config ) { + $this->defineService( 'BootstrapConfig', function () use ( $config ) { return $config; } ); } diff --git a/includes/PageProps.php b/includes/PageProps.php index 382d089c5b..dac756ed75 100644 --- a/includes/PageProps.php +++ b/includes/PageProps.php @@ -55,7 +55,7 @@ class PageProps { } $previousValue = self::$instance; self::$instance = $store; - return new ScopedCallback( function() use ( $previousValue ) { + return new ScopedCallback( function () use ( $previousValue ) { self::$instance = $previousValue; } ); } diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index 6afabedde1..2dfcc42b26 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -43,7 +43,7 @@ use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; return [ - 'DBLoadBalancerFactory' => function( MediaWikiServices $services ) { + 'DBLoadBalancerFactory' => function ( MediaWikiServices $services ) { $mainConfig = $services->getMainConfig(); $lbConf = MWLBFactory::applyDefaultConfig( @@ -56,12 +56,12 @@ return [ return new $class( $lbConf ); }, - 'DBLoadBalancer' => function( MediaWikiServices $services ) { + 'DBLoadBalancer' => function ( MediaWikiServices $services ) { // just return the default LB from the DBLoadBalancerFactory service return $services->getDBLoadBalancerFactory()->getMainLB(); }, - 'SiteStore' => function( MediaWikiServices $services ) { + 'SiteStore' => function ( MediaWikiServices $services ) { $rawSiteStore = new DBSiteStore( $services->getDBLoadBalancer() ); // TODO: replace wfGetCache with a CacheFactory service. @@ -71,7 +71,7 @@ return [ return new CachingSiteStore( $rawSiteStore, $cache ); }, - 'SiteLookup' => function( MediaWikiServices $services ) { + 'SiteLookup' => function ( MediaWikiServices $services ) { $cacheFile = $services->getMainConfig()->get( 'SitesCacheFile' ); if ( $cacheFile !== false ) { @@ -82,7 +82,7 @@ return [ } }, - 'ConfigFactory' => function( MediaWikiServices $services ) { + 'ConfigFactory' => function ( MediaWikiServices $services ) { // Use the bootstrap config to initialize the ConfigFactory. $registry = $services->getBootstrapConfig()->get( 'ConfigRegistry' ); $factory = new ConfigFactory(); @@ -93,12 +93,12 @@ return [ return $factory; }, - 'MainConfig' => function( MediaWikiServices $services ) { + 'MainConfig' => function ( MediaWikiServices $services ) { // Use the 'main' config from the ConfigFactory service. return $services->getConfigFactory()->makeConfig( 'main' ); }, - 'InterwikiLookup' => function( MediaWikiServices $services ) { + 'InterwikiLookup' => function ( MediaWikiServices $services ) { global $wgContLang; // TODO: manage $wgContLang as a service $config = $services->getMainConfig(); return new ClassicInterwikiLookup( @@ -111,26 +111,26 @@ return [ ); }, - 'StatsdDataFactory' => function( MediaWikiServices $services ) { + 'StatsdDataFactory' => function ( MediaWikiServices $services ) { return new BufferingStatsdDataFactory( rtrim( $services->getMainConfig()->get( 'StatsdMetricPrefix' ), '.' ) ); }, - 'EventRelayerGroup' => function( MediaWikiServices $services ) { + 'EventRelayerGroup' => function ( MediaWikiServices $services ) { return new EventRelayerGroup( $services->getMainConfig()->get( 'EventRelayerConfig' ) ); }, - 'SearchEngineFactory' => function( MediaWikiServices $services ) { + 'SearchEngineFactory' => function ( MediaWikiServices $services ) { return new SearchEngineFactory( $services->getSearchEngineConfig() ); }, - 'SearchEngineConfig' => function( MediaWikiServices $services ) { + 'SearchEngineConfig' => function ( MediaWikiServices $services ) { global $wgContLang; return new SearchEngineConfig( $services->getMainConfig(), $wgContLang ); }, - 'SkinFactory' => function( MediaWikiServices $services ) { + 'SkinFactory' => function ( MediaWikiServices $services ) { $factory = new SkinFactory(); $names = $services->getMainConfig()->get( 'ValidSkinNames' ); @@ -153,7 +153,7 @@ return [ return $factory; }, - 'WatchedItemStore' => function( MediaWikiServices $services ) { + 'WatchedItemStore' => function ( MediaWikiServices $services ) { $store = new WatchedItemStore( $services->getDBLoadBalancer(), new HashBagOStuff( [ 'maxKeys' => 100 ] ), @@ -163,11 +163,11 @@ return [ return $store; }, - 'WatchedItemQueryService' => function( MediaWikiServices $services ) { + 'WatchedItemQueryService' => function ( MediaWikiServices $services ) { return new WatchedItemQueryService( $services->getDBLoadBalancer() ); }, - 'CryptRand' => function( MediaWikiServices $services ) { + 'CryptRand' => function ( MediaWikiServices $services ) { $secretKey = $services->getMainConfig()->get( 'SecretKey' ); return new CryptRand( [ @@ -178,7 +178,7 @@ return [ // for a little more variance 'wfWikiID', // If we have a secret key set then throw it into the state as well - function() use ( $secretKey ) { + function () use ( $secretKey ) { return $secretKey ?: ''; } ], @@ -192,7 +192,7 @@ return [ ); }, - 'CryptHKDF' => function( MediaWikiServices $services ) { + 'CryptHKDF' => function ( MediaWikiServices $services ) { $config = $services->getMainConfig(); $secret = $config->get( 'HKDFSecret' ) ?: $config->get( 'SecretKey' ); @@ -215,13 +215,13 @@ return [ ); }, - 'MediaHandlerFactory' => function( MediaWikiServices $services ) { + 'MediaHandlerFactory' => function ( MediaWikiServices $services ) { return new MediaHandlerFactory( $services->getMainConfig()->get( 'MediaHandlers' ) ); }, - 'MimeAnalyzer' => function( MediaWikiServices $services ) { + 'MimeAnalyzer' => function ( MediaWikiServices $services ) { $logger = LoggerFactory::getInstance( 'Mime' ); $mainConfig = $services->getMainConfig(); $params = [ @@ -274,7 +274,7 @@ return [ return new MimeMagic( $params ); }, - 'ProxyLookup' => function( MediaWikiServices $services ) { + 'ProxyLookup' => function ( MediaWikiServices $services ) { $mainConfig = $services->getMainConfig(); return new ProxyLookup( $mainConfig->get( 'SquidServers' ), @@ -282,26 +282,26 @@ return [ ); }, - 'Parser' => function( MediaWikiServices $services ) { + 'Parser' => function ( MediaWikiServices $services ) { $conf = $services->getMainConfig()->get( 'ParserConf' ); return ObjectFactory::constructClassInstance( $conf['class'], [ $conf ] ); }, - 'LinkCache' => function( MediaWikiServices $services ) { + 'LinkCache' => function ( MediaWikiServices $services ) { return new LinkCache( $services->getTitleFormatter(), $services->getMainWANObjectCache() ); }, - 'LinkRendererFactory' => function( MediaWikiServices $services ) { + 'LinkRendererFactory' => function ( MediaWikiServices $services ) { return new LinkRendererFactory( $services->getTitleFormatter(), $services->getLinkCache() ); }, - 'LinkRenderer' => function( MediaWikiServices $services ) { + 'LinkRenderer' => function ( MediaWikiServices $services ) { global $wgUser; if ( defined( 'MW_NO_SESSION' ) ) { @@ -311,11 +311,11 @@ return [ } }, - 'GenderCache' => function( MediaWikiServices $services ) { + 'GenderCache' => function ( MediaWikiServices $services ) { return new GenderCache(); }, - '_MediaWikiTitleCodec' => function( MediaWikiServices $services ) { + '_MediaWikiTitleCodec' => function ( MediaWikiServices $services ) { global $wgContLang; return new MediaWikiTitleCodec( @@ -325,15 +325,15 @@ return [ ); }, - 'TitleFormatter' => function( MediaWikiServices $services ) { + 'TitleFormatter' => function ( MediaWikiServices $services ) { return $services->getService( '_MediaWikiTitleCodec' ); }, - 'TitleParser' => function( MediaWikiServices $services ) { + 'TitleParser' => function ( MediaWikiServices $services ) { return $services->getService( '_MediaWikiTitleCodec' ); }, - 'MainObjectStash' => function( MediaWikiServices $services ) { + 'MainObjectStash' => function ( MediaWikiServices $services ) { $mainConfig = $services->getMainConfig(); $id = $mainConfig->get( 'MainStash' ); @@ -345,7 +345,7 @@ return [ return \ObjectCache::newFromParams( $mainConfig->get( 'ObjectCaches' )[$id] ); }, - 'MainWANObjectCache' => function( MediaWikiServices $services ) { + 'MainWANObjectCache' => function ( MediaWikiServices $services ) { $mainConfig = $services->getMainConfig(); $id = $mainConfig->get( 'MainWANCache' ); @@ -365,7 +365,7 @@ return [ return \ObjectCache::newWANCacheFromParams( $params ); }, - 'LocalServerObjectCache' => function( MediaWikiServices $services ) { + 'LocalServerObjectCache' => function ( MediaWikiServices $services ) { $mainConfig = $services->getMainConfig(); if ( function_exists( 'apc_fetch' ) ) { @@ -388,7 +388,7 @@ return [ return \ObjectCache::newFromParams( $mainConfig->get( 'ObjectCaches' )[$id] ); }, - 'VirtualRESTServiceClient' => function( MediaWikiServices $services ) { + 'VirtualRESTServiceClient' => function ( MediaWikiServices $services ) { $config = $services->getMainConfig()->get( 'VirtualRestConfig' ); $vrsClient = new VirtualRESTServiceClient( new MultiHttpClient( [] ) ); @@ -406,11 +406,11 @@ return [ return $vrsClient; }, - 'ConfiguredReadOnlyMode' => function( MediaWikiServices $services ) { + 'ConfiguredReadOnlyMode' => function ( MediaWikiServices $services ) { return new ConfiguredReadOnlyMode( $services->getMainConfig() ); }, - 'ReadOnlyMode' => function( MediaWikiServices $services ) { + 'ReadOnlyMode' => function ( MediaWikiServices $services ) { return new ReadOnlyMode( $services->getConfiguredReadOnlyMode(), $services->getDBLoadBalancer() diff --git a/includes/WatchedItemQueryService.php b/includes/WatchedItemQueryService.php index 22d5439c06..1fafb24dbe 100644 --- a/includes/WatchedItemQueryService.php +++ b/includes/WatchedItemQueryService.php @@ -313,7 +313,7 @@ class WatchedItemQueryService { $allFields = get_object_vars( $row ); $rcKeys = array_filter( array_keys( $allFields ), - function( $key ) { + function ( $key ) { return substr( $key, 0, 3 ) === 'rc_'; } ); diff --git a/includes/WatchedItemStore.php b/includes/WatchedItemStore.php index 06f93c6b99..69a9df2d57 100644 --- a/includes/WatchedItemStore.php +++ b/includes/WatchedItemStore.php @@ -104,7 +104,7 @@ class WatchedItemStore implements StatsdAwareInterface { } $previousValue = $this->deferredUpdatesAddCallableUpdateCallback; $this->deferredUpdatesAddCallableUpdateCallback = $callback; - return new ScopedCallback( function() use ( $previousValue ) { + return new ScopedCallback( function () use ( $previousValue ) { $this->deferredUpdatesAddCallableUpdateCallback = $previousValue; } ); } @@ -127,7 +127,7 @@ class WatchedItemStore implements StatsdAwareInterface { } $previousValue = $this->revisionGetTimestampFromIdCallback; $this->revisionGetTimestampFromIdCallback = $callback; - return new ScopedCallback( function() use ( $previousValue ) { + return new ScopedCallback( function () use ( $previousValue ) { $this->revisionGetTimestampFromIdCallback = $previousValue; } ); } @@ -821,7 +821,7 @@ class WatchedItemStore implements StatsdAwareInterface { // Calls DeferredUpdates::addCallableUpdate in normal operation call_user_func( $this->deferredUpdatesAddCallableUpdateCallback, - function() use ( $job ) { + function () use ( $job ) { $job->run(); } ); diff --git a/includes/Xml.php b/includes/Xml.php index 8289b818c1..d0164331e1 100644 --- a/includes/Xml.php +++ b/includes/Xml.php @@ -826,4 +826,3 @@ class Xml { return $s; } } - diff --git a/includes/api/ApiAMCreateAccount.php b/includes/api/ApiAMCreateAccount.php index b8bd511bc0..72a36d71a6 100644 --- a/includes/api/ApiAMCreateAccount.php +++ b/includes/api/ApiAMCreateAccount.php @@ -1,6 +1,6 @@ + * Copyright © 2016 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiAuthManagerHelper.php b/includes/api/ApiAuthManagerHelper.php index 8862cc7f9f..3a9fb738b0 100644 --- a/includes/api/ApiAuthManagerHelper.php +++ b/includes/api/ApiAuthManagerHelper.php @@ -1,6 +1,6 @@ + * Copyright © 2016 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiChangeAuthenticationData.php b/includes/api/ApiChangeAuthenticationData.php index 35c4e568c6..d4a26ad9c8 100644 --- a/includes/api/ApiChangeAuthenticationData.php +++ b/includes/api/ApiChangeAuthenticationData.php @@ -1,6 +1,6 @@ + * Copyright © 2016 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiCheckToken.php b/includes/api/ApiCheckToken.php index 480915e60c..e1be8efad2 100644 --- a/includes/api/ApiCheckToken.php +++ b/includes/api/ApiCheckToken.php @@ -2,7 +2,7 @@ /** * Created on Jan 29, 2015 * - * Copyright © 2015 Brad Jorsch bjorsch@wikimedia.org + * Copyright © 2015 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiClientLogin.php b/includes/api/ApiClientLogin.php index 0d512b387f..65dea93bdd 100644 --- a/includes/api/ApiClientLogin.php +++ b/includes/api/ApiClientLogin.php @@ -1,6 +1,6 @@ + * Copyright © 2016 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiHelp.php b/includes/api/ApiHelp.php index 3fd29ae928..12e778bfb6 100644 --- a/includes/api/ApiHelp.php +++ b/includes/api/ApiHelp.php @@ -4,7 +4,7 @@ * * Created on Aug 29, 2014 * - * Copyright © 2014 Brad Jorsch + * Copyright © 2014 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiHelpParamValueMessage.php b/includes/api/ApiHelpParamValueMessage.php index ebe4e26c1e..162b7cd6be 100644 --- a/includes/api/ApiHelpParamValueMessage.php +++ b/includes/api/ApiHelpParamValueMessage.php @@ -4,7 +4,7 @@ * * Created on Dec 22, 2014 * - * Copyright © 2014 Brad Jorsch + * Copyright © 2014 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiLinkAccount.php b/includes/api/ApiLinkAccount.php index f5c5deeb74..9553f29767 100644 --- a/includes/api/ApiLinkAccount.php +++ b/includes/api/ApiLinkAccount.php @@ -1,6 +1,6 @@ + * Copyright © 2016 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiOpenSearch.php b/includes/api/ApiOpenSearch.php index 9eb57935da..419fd140d7 100644 --- a/includes/api/ApiOpenSearch.php +++ b/includes/api/ApiOpenSearch.php @@ -4,7 +4,7 @@ * * Copyright © 2006 Yuri Astrakhan "@gmail.com" * Copyright © 2008 Brion Vibber - * Copyright © 2014 Brad Jorsch + * Copyright © 2014 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiQueryAllDeletedRevisions.php b/includes/api/ApiQueryAllDeletedRevisions.php index 5682cc2034..b22bb1ff15 100644 --- a/includes/api/ApiQueryAllDeletedRevisions.php +++ b/includes/api/ApiQueryAllDeletedRevisions.php @@ -2,7 +2,7 @@ /** * Created on Oct 3, 2014 * - * Copyright © 2014 Brad Jorsch "bjorsch@wikimedia.org" + * Copyright © 2014 Wikimedia Foundation and contributors * * Heavily based on ApiQueryDeletedrevs, * Copyright © 2007 Roan Kattouw ".@gmail.com" diff --git a/includes/api/ApiQueryAllRevisions.php b/includes/api/ApiQueryAllRevisions.php index 20746c9a8c..8f7d6eb28f 100644 --- a/includes/api/ApiQueryAllRevisions.php +++ b/includes/api/ApiQueryAllRevisions.php @@ -2,7 +2,7 @@ /** * Created on Sep 27, 2015 * - * Copyright © 2015 Brad Jorsch "bjorsch@wikimedia.org" + * Copyright © 2015 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiQueryAuthManagerInfo.php b/includes/api/ApiQueryAuthManagerInfo.php index c775942e76..d23d8988f3 100644 --- a/includes/api/ApiQueryAuthManagerInfo.php +++ b/includes/api/ApiQueryAuthManagerInfo.php @@ -1,6 +1,6 @@ + * Copyright © 2016 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiQueryBacklinksprop.php b/includes/api/ApiQueryBacklinksprop.php index 00cbcd9fe4..1db15f87e8 100644 --- a/includes/api/ApiQueryBacklinksprop.php +++ b/includes/api/ApiQueryBacklinksprop.php @@ -4,7 +4,7 @@ * * Created on Aug 19, 2014 * - * Copyright © 2014 Brad Jorsch + * Copyright © 2014 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiQueryContributors.php b/includes/api/ApiQueryContributors.php index 693d954d90..f802d9ef8c 100644 --- a/includes/api/ApiQueryContributors.php +++ b/includes/api/ApiQueryContributors.php @@ -4,7 +4,7 @@ * * Created on Nov 14, 2013 * - * Copyright © 2013 Brad Jorsch + * Copyright © 2013 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiQueryDeletedRevisions.php b/includes/api/ApiQueryDeletedRevisions.php index 90fd6953d0..8e4752e8cf 100644 --- a/includes/api/ApiQueryDeletedRevisions.php +++ b/includes/api/ApiQueryDeletedRevisions.php @@ -2,7 +2,7 @@ /** * Created on Oct 3, 2014 * - * Copyright © 2014 Brad Jorsch "bjorsch@wikimedia.org" + * Copyright © 2014 Wikimedia Foundation and contributors * * Heavily based on ApiQueryDeletedrevs, * Copyright © 2007 Roan Kattouw ".@gmail.com" diff --git a/includes/api/ApiQueryInfo.php b/includes/api/ApiQueryInfo.php index c2cdfe4adc..6b8f98c7b9 100644 --- a/includes/api/ApiQueryInfo.php +++ b/includes/api/ApiQueryInfo.php @@ -766,7 +766,7 @@ class ApiQueryInfo extends ApiQueryBase { if ( $this->fld_watched ) { foreach ( $timestamps as $namespaceId => $dbKeys ) { $this->watched[$namespaceId] = array_map( - function( $x ) { + function ( $x ) { return $x !== false; }, $dbKeys @@ -847,7 +847,7 @@ class ApiQueryInfo extends ApiQueryBase { $timestamps[$row->page_namespace][$row->page_title] = $revTimestamp - $age; } $titlesWithThresholds = array_map( - function( LinkTarget $target ) use ( $timestamps ) { + function ( LinkTarget $target ) use ( $timestamps ) { return [ $target, $timestamps[$target->getNamespace()][$target->getDBkey()] ]; @@ -860,7 +860,7 @@ class ApiQueryInfo extends ApiQueryBase { $titlesWithThresholds = array_merge( $titlesWithThresholds, array_map( - function( LinkTarget $target ) { + function ( LinkTarget $target ) { return [ $target, null ]; }, $this->missing diff --git a/includes/api/ApiQueryPagePropNames.php b/includes/api/ApiQueryPagePropNames.php index ff97668117..2d56983c61 100644 --- a/includes/api/ApiQueryPagePropNames.php +++ b/includes/api/ApiQueryPagePropNames.php @@ -2,7 +2,7 @@ /** * Created on January 21, 2013 * - * Copyright © 2013 Brad Jorsch + * Copyright © 2013 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,7 +21,6 @@ * * @file * @since 1.21 - * @author Brad Jorsch */ /** diff --git a/includes/api/ApiQueryPagesWithProp.php b/includes/api/ApiQueryPagesWithProp.php index e90356d33e..97f79b66df 100644 --- a/includes/api/ApiQueryPagesWithProp.php +++ b/includes/api/ApiQueryPagesWithProp.php @@ -2,7 +2,7 @@ /** * Created on December 31, 2012 * - * Copyright © 2012 Brad Jorsch + * Copyright © 2012 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,7 +21,6 @@ * * @file * @since 1.21 - * @author Brad Jorsch */ /** diff --git a/includes/api/ApiQueryPrefixSearch.php b/includes/api/ApiQueryPrefixSearch.php index 5606f3c922..2fbc518b1e 100644 --- a/includes/api/ApiQueryPrefixSearch.php +++ b/includes/api/ApiQueryPrefixSearch.php @@ -54,7 +54,7 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase { $titles = $searchEngine->extractTitles( $searchEngine->completionSearchWithVariants( $search ) ); if ( $resultPageSet ) { - $resultPageSet->setRedirectMergePolicy( function( array $current, array $new ) { + $resultPageSet->setRedirectMergePolicy( function ( array $current, array $new ) { if ( !isset( $current['index'] ) || $new['index'] < $current['index'] ) { $current['index'] = $new['index']; } diff --git a/includes/api/ApiQueryTokens.php b/includes/api/ApiQueryTokens.php index 85205c8a41..0e46fd0572 100644 --- a/includes/api/ApiQueryTokens.php +++ b/includes/api/ApiQueryTokens.php @@ -4,7 +4,7 @@ * * Created on August 8, 2014 * - * Copyright © 2014 Brad Jorsch bjorsch@wikimedia.org + * Copyright © 2014 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiQueryUsers.php b/includes/api/ApiQueryUsers.php index a5d06c824c..5b094cd908 100644 --- a/includes/api/ApiQueryUsers.php +++ b/includes/api/ApiQueryUsers.php @@ -214,7 +214,7 @@ class ApiQueryUsers extends ApiQueryBase { } if ( isset( $this->prop['groupmemberships'] ) ) { - $data[$key]['groupmemberships'] = array_map( function( $ugm ) { + $data[$key]['groupmemberships'] = array_map( function ( $ugm ) { return [ 'group' => $ugm->getGroup(), 'expiry' => ApiResult::formatExpiry( $ugm->getExpiry() ), diff --git a/includes/api/ApiRemoveAuthenticationData.php b/includes/api/ApiRemoveAuthenticationData.php index 661b50c68e..e18484be2c 100644 --- a/includes/api/ApiRemoveAuthenticationData.php +++ b/includes/api/ApiRemoveAuthenticationData.php @@ -1,6 +1,6 @@ + * Copyright © 2016 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiResetPassword.php b/includes/api/ApiResetPassword.php index a4b51b5e34..77838269b4 100644 --- a/includes/api/ApiResetPassword.php +++ b/includes/api/ApiResetPassword.php @@ -1,6 +1,6 @@ + * Copyright © 2016 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiRevisionDelete.php b/includes/api/ApiRevisionDelete.php index 4580aa213e..9d71a7db7e 100644 --- a/includes/api/ApiRevisionDelete.php +++ b/includes/api/ApiRevisionDelete.php @@ -2,7 +2,7 @@ /** * Created on Jun 25, 2013 * - * Copyright © 2013 Brad Jorsch + * Copyright © 2013 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiSerializable.php b/includes/api/ApiSerializable.php index 70e93a6c2a..a41f655c94 100644 --- a/includes/api/ApiSerializable.php +++ b/includes/api/ApiSerializable.php @@ -2,7 +2,7 @@ /** * Created on Feb 25, 2015 * - * Copyright © 2015 Brad Jorsch "bjorsch@wikimedia.org" + * Copyright © 2015 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiSetNotificationTimestamp.php b/includes/api/ApiSetNotificationTimestamp.php index 1fc8fc25f9..663416e69e 100644 --- a/includes/api/ApiSetNotificationTimestamp.php +++ b/includes/api/ApiSetNotificationTimestamp.php @@ -5,7 +5,7 @@ * * Created on Jun 18, 2012 * - * Copyright © 2012 Brad Jorsch + * Copyright © 2012 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/api/ApiStashEdit.php b/includes/api/ApiStashEdit.php index 37ee3e7623..c7a00c6464 100644 --- a/includes/api/ApiStashEdit.php +++ b/includes/api/ApiStashEdit.php @@ -16,7 +16,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ use MediaWiki\Logger\LoggerFactory; diff --git a/includes/api/i18n/fr.json b/includes/api/i18n/fr.json index bf0f8e5ccc..8eda106a7d 100644 --- a/includes/api/i18n/fr.json +++ b/includes/api/i18n/fr.json @@ -26,10 +26,10 @@ "Yasten", "Trial", "Pols12", - "The RedBurn" + "The RedBurn", + "Umherirrender" ] }, - "apihelp-main-description": "
\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n
\nÉtat : Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en cours de développement et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\nRequêtes erronées : Si des requêtes erronées sont envoyées à l’API, un entête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet entête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\nTest : Pour faciliter le test des requêtes de l’API, voyez [[Special:ApiSandbox]].", "apihelp-main-param-action": "Quelle action effectuer.", "apihelp-main-param-format": "Le format de sortie.", "apihelp-main-param-maxlag": "La latence maximale peut être utilisée quand MédiaWiki est installé sur un cluster de base de données répliqué. Pour éviter des actions provoquant un supplément de latence de réplication de site, ce paramètre peut faire attendre le client jusqu’à ce que la latence de réplication soit inférieure à une valeur spécifiée. En cas de latence excessive, le code d’erreur maxlag est renvoyé avec un message tel que Attente de $host : $lag secondes de délai.
Voyez [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manuel: Maxlag parameter]] pour plus d’information.", @@ -46,7 +46,7 @@ "apihelp-main-param-errorformat": "Format à utiliser pour la sortie du texte d’avertissement et d’erreur.\n; plaintext: Wikitexte avec balises HTML supprimées et les entités remplacées.\n; wikitext: wikitexte non analysé.\n; html: HTML.\n; raw: Clé de message et paramètres.\n; none: Aucune sortie de texte, uniquement les codes erreur.\n; bc: Format utilisé avant MédiaWiki 1.29. errorlang et errorsuselocal sont ignorés.", "apihelp-main-param-errorlang": "Langue à utiliser pour les avertissements et les erreurs. [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] avec siprop=languages renvoyant une liste de codes de langue, ou spécifier content pour utiliser la langue du contenu de ce wiki, ou spécifier uselang pour utiliser la même valeur que le paramètre uselang.", "apihelp-main-param-errorsuselocal": "S’il est fourni, les textes d’erreur utiliseront des messages adaptés à la langue dans l’espace de noms {{ns:MediaWiki}}.", - "apihelp-block-description": "Bloquer un utilisateur.", + "apihelp-block-summary": "Bloquer un utilisateur.", "apihelp-block-param-user": "Nom d’utilisateur, adresse IP ou plage d’adresses IP que vous voulez bloquer. Ne peut pas être utilisé en même temps que $1userid", "apihelp-block-param-userid": "ID d'utilisateur à bloquer. Ne peut pas être utilisé avec $1user.", "apihelp-block-param-expiry": "Durée d’expiration. Peut être relative (par ex. 5 months ou 2 weeks) ou absolue (par ex. 2014-09-18T12:34:56Z). Si elle est mise à infinite, indefinite ou never, le blocage n’expirera jamais.", @@ -62,19 +62,18 @@ "apihelp-block-param-tags": "Modifier les balises à appliquer à l’entrée du journal des blocages.", "apihelp-block-example-ip-simple": "Bloquer l’adresse IP 192.0.2.5 pour trois jours avec le motif Premier avertissement.", "apihelp-block-example-user-complex": "Bloquer indéfiniment l’utilisateur Vandal avec le motif Vandalism, et empêcher la création de nouveau compte et l'envoi de courriel.", - "apihelp-changeauthenticationdata-description": "Modifier les données d’authentification pour l’utilisateur actuel.", + "apihelp-changeauthenticationdata-summary": "Modifier les données d’authentification pour l’utilisateur actuel.", "apihelp-changeauthenticationdata-example-password": "Tentative de modification du mot de passe de l’utilisateur actuel en ExempleMotDePasse.", - "apihelp-checktoken-description": "Vérifier la validité d'un jeton de [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].", + "apihelp-checktoken-summary": "Vérifier la validité d'un jeton de [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].", "apihelp-checktoken-param-type": "Type de jeton testé", "apihelp-checktoken-param-token": "Jeton à tester.", "apihelp-checktoken-param-maxtokenage": "Temps maximum autorisé pour l'utilisation du jeton, en secondes", "apihelp-checktoken-example-simple": "Tester la validité d'un jeton de csrf.", - "apihelp-clearhasmsg-description": "Efface le drapeau hasmsg pour l’utilisateur courant.", + "apihelp-clearhasmsg-summary": "Efface le drapeau hasmsg pour l’utilisateur courant.", "apihelp-clearhasmsg-example-1": "Effacer le drapeau hasmsg pour l’utilisateur courant", - "apihelp-clientlogin-description": "Se connecter au wiki en utilisant le flux interactif.", + "apihelp-clientlogin-summary": "Se connecter au wiki en utilisant le flux interactif.", "apihelp-clientlogin-example-login": "Commencer le processus de connexion au wiki en tant qu’utilisateur Exemple avec le mot de passe ExempleMotDePasse.", "apihelp-clientlogin-example-login2": "Continuer la connexion après une réponse de l’IHM pour l’authentification à deux facteurs, en fournissant un OATHToken valant 987654.", - "apihelp-compare-description": "Obtenir la différence entre 2 pages.\n\nVous devez passer un numéro de révision, un titre de page, ou un ID de page, à la fois pour « from » et « to ».", "apihelp-compare-param-fromtitle": "Premier titre à comparer.", "apihelp-compare-param-fromid": "ID de la première page à comparer.", "apihelp-compare-param-fromrev": "Première révision à comparer.", @@ -101,7 +100,7 @@ "apihelp-compare-paramvalue-prop-parsedcomment": "Le commentaire analysé des révisions 'depuis' et 'vers'.", "apihelp-compare-paramvalue-prop-size": "La taille des révisions 'depuis' et 'vers'.", "apihelp-compare-example-1": "Créer une différence entre les révisions 1 et 2", - "apihelp-createaccount-description": "Créer un nouveau compte utilisateur.", + "apihelp-createaccount-summary": "Créer un nouveau compte utilisateur.", "apihelp-createaccount-param-preservestate": "Si [[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]] a retourné true pour hasprimarypreservedstate, les demandes marquées comme primary-required doivent être omises. Si elle a retourné une valeur non vide pour preservedusername, ce nom d'utilisateur doit être utilisé pour le paramètre username.", "apihelp-createaccount-example-create": "Commencer le processus de création d’un utilisateur Exemple avec le mot de passe ExempleMotDePasse.", "apihelp-createaccount-param-name": "Nom d’utilisateur.", @@ -115,10 +114,10 @@ "apihelp-createaccount-param-language": "Code de langue à mettre par défaut pour l’utilisateur (facultatif, par défaut langue du contenu).", "apihelp-createaccount-example-pass": "Créer l’utilisateur testuser avec le mot de passe test123.", "apihelp-createaccount-example-mail": "Créer l’utilisateur testmailuser et envoyer par courriel un mot de passe généré aléatoirement.", - "apihelp-cspreport-description": "Utilisé par les navigateurs pour signaler les violations de la politique de confidentialité du contenu. Ce module ne devrait jamais être utilisé, sauf quand il est utilisé automatiquement par un navigateur web compatible avec CSP.", + "apihelp-cspreport-summary": "Utilisé par les navigateurs pour signaler les violations de la politique de confidentialité du contenu. Ce module ne devrait jamais être utilisé, sauf quand il est utilisé automatiquement par un navigateur web compatible avec CSP.", "apihelp-cspreport-param-reportonly": "Marquer comme étant un rapport d’une politique de surveillance, et non une politique exigée", "apihelp-cspreport-param-source": "Ce qui a généré l’entête CSP qui a déclenché ce rapport", - "apihelp-delete-description": "Supprimer une page.", + "apihelp-delete-summary": "Supprimer une page.", "apihelp-delete-param-title": "Titre de la page que vous voulez supprimer. Impossible à utiliser avec $1pageid.", "apihelp-delete-param-pageid": "ID de la page que vous voulez supprimer. Impossible à utiliser avec $1title.", "apihelp-delete-param-reason": "Motif de suppression. Si non défini, un motif généré automatiquement sera utilisé.", @@ -129,8 +128,8 @@ "apihelp-delete-param-oldimage": "Le nom de l’ancienne image à supprimer tel que fourni par [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].", "apihelp-delete-example-simple": "Supprimer Main Page.", "apihelp-delete-example-reason": "Supprimer Main Page avec le motif Preparing for move.", - "apihelp-disabled-description": "Ce module a été désactivé.", - "apihelp-edit-description": "Créer et modifier les pages.", + "apihelp-disabled-summary": "Ce module a été désactivé.", + "apihelp-edit-summary": "Créer et modifier les pages.", "apihelp-edit-param-title": "Titre de la page que vous voulez modifier. Impossible de l’utiliser avec $1pageid.", "apihelp-edit-param-pageid": "ID de la page que vous voulez modifier. Impossible à utiliser avec $1title.", "apihelp-edit-param-section": "Numéro de section. 0 pour la section de tête, new pour une nouvelle section.", @@ -161,13 +160,13 @@ "apihelp-edit-example-edit": "Modifier une page", "apihelp-edit-example-prepend": "Préfixer une page par __NOTOC__.", "apihelp-edit-example-undo": "Annuler les révisions 13579 à 13585 avec résumé automatique.", - "apihelp-emailuser-description": "Envoyer un courriel à un utilisateur.", + "apihelp-emailuser-summary": "Envoyer un courriel à un utilisateur.", "apihelp-emailuser-param-target": "Utilisateur à qui envoyer le courriel.", "apihelp-emailuser-param-subject": "Entête du sujet.", "apihelp-emailuser-param-text": "Corps du courriel.", "apihelp-emailuser-param-ccme": "M’envoyer une copie de ce courriel.", "apihelp-emailuser-example-email": "Envoyer un courriel à l’utilisateur WikiSysop avec le texte Content.", - "apihelp-expandtemplates-description": "Développe tous les modèles avec du wikitexte.", + "apihelp-expandtemplates-summary": "Développe tous les modèles avec du wikitexte.", "apihelp-expandtemplates-param-title": "Titre de la page.", "apihelp-expandtemplates-param-text": "Wikitexte à convertir.", "apihelp-expandtemplates-param-revid": "ID de révision, pour {{REVISIONID}} et les variables semblables.", @@ -184,7 +183,7 @@ "apihelp-expandtemplates-param-includecomments": "S’il faut inclure les commentaires HTML dans la sortie.", "apihelp-expandtemplates-param-generatexml": "Générer l’arbre d’analyse XML (remplacé par $1prop=parsetree).", "apihelp-expandtemplates-example-simple": "Développe le wikitexte {{Project:Sandbox}}.", - "apihelp-feedcontributions-description": "Renvoie le fil des contributions d’un utilisateur.", + "apihelp-feedcontributions-summary": "Renvoie le fil des contributions d’un utilisateur.", "apihelp-feedcontributions-param-feedformat": "Le format du flux.", "apihelp-feedcontributions-param-user": "Pour quels utilisateurs récupérer les contributions.", "apihelp-feedcontributions-param-namespace": "Par quels espaces de nom filtrer les contributions.", @@ -197,7 +196,7 @@ "apihelp-feedcontributions-param-hideminor": "Masquer les modifications mineures.", "apihelp-feedcontributions-param-showsizediff": "Afficher la différence de taille entre les révisions.", "apihelp-feedcontributions-example-simple": "Renvoyer les contributions de l'utilisateur Exemple.", - "apihelp-feedrecentchanges-description": "Renvoie un fil de modifications récentes.", + "apihelp-feedrecentchanges-summary": "Renvoie un fil de modifications récentes.", "apihelp-feedrecentchanges-param-feedformat": "Le format du flux.", "apihelp-feedrecentchanges-param-namespace": "Espace de noms auquel limiter les résultats.", "apihelp-feedrecentchanges-param-invert": "Tous les espaces de noms sauf celui sélectionné.", @@ -219,18 +218,18 @@ "apihelp-feedrecentchanges-param-categories_any": "Afficher plutôt uniquement les modifications sur les pages dans n’importe laquelle de ces catégories.", "apihelp-feedrecentchanges-example-simple": "Afficher les modifications récentes", "apihelp-feedrecentchanges-example-30days": "Afficher les modifications récentes sur 30 jours", - "apihelp-feedwatchlist-description": "Renvoie un flux de liste de suivi.", + "apihelp-feedwatchlist-summary": "Renvoie un flux de liste de suivi.", "apihelp-feedwatchlist-param-feedformat": "Le format du flux.", "apihelp-feedwatchlist-param-hours": "Lister les pages modifiées lors de ce nombre d’heures depuis maintenant.", "apihelp-feedwatchlist-param-linktosections": "Lier directement vers les sections modifées si possible.", "apihelp-feedwatchlist-example-default": "Afficher le flux de la liste de suivi", "apihelp-feedwatchlist-example-all6hrs": "Afficher toutes les modifications sur les pages suivies dans les dernières 6 heures", - "apihelp-filerevert-description": "Rétablir un fichier dans une ancienne version.", + "apihelp-filerevert-summary": "Rétablir un fichier dans une ancienne version.", "apihelp-filerevert-param-filename": "Nom de fichier cible, sans le préfixe File:.", "apihelp-filerevert-param-comment": "Téléverser le commentaire.", "apihelp-filerevert-param-archivename": "Nom d’archive de la révision à rétablir.", "apihelp-filerevert-example-revert": "Rétablir Wiki.png dans la version du 2011-03-05T15:27:40Z.", - "apihelp-help-description": "Afficher l’aide pour les modules spécifiés.", + "apihelp-help-summary": "Afficher l’aide pour les modules spécifiés.", "apihelp-help-param-modules": "Modules pour lesquels afficher l’aide (valeurs des paramètres action et format, ou main). Les sous-modules peuvent être spécifiés avec un +.", "apihelp-help-param-submodules": "Inclure l’aide pour les sous-modules du module nommé.", "apihelp-help-param-recursivesubmodules": "Inclure l’aide pour les sous-modules de façon récursive.", @@ -242,12 +241,11 @@ "apihelp-help-example-recursive": "Toute l’aide sur une page.", "apihelp-help-example-help": "Aide pour le module d’aide lui-même.", "apihelp-help-example-query": "Aide pour deux sous-modules de recherche.", - "apihelp-imagerotate-description": "Faire pivoter une ou plusieurs images.", + "apihelp-imagerotate-summary": "Faire pivoter une ou plusieurs images.", "apihelp-imagerotate-param-rotation": "Degrés de rotation de l’image dans le sens des aiguilles d’une montre.", "apihelp-imagerotate-param-tags": "Balises à appliquer à l’entrée dans le journal de téléversement.", "apihelp-imagerotate-example-simple": "Faire pivoter File:Example.png de 90 degrés.", "apihelp-imagerotate-example-generator": "Faire pivoter toutes les images de Category:Flip de 180 degrés.", - "apihelp-import-description": "Importer une page depuis un autre wiki, ou depuis un fichier XML.\n\nNoter que le POST HTTP doit être effectué comme un import de fichier (c’est-à-dire en utilisant multipart/form-data) lors de l’envoi d’un fichier pour le paramètre xml.", "apihelp-import-param-summary": "Résumé de l’importation de l’entrée de journal.", "apihelp-import-param-xml": "Fichier XML téléversé.", "apihelp-import-param-interwikisource": "Pour les importations interwiki : wiki depuis lequel importer.", @@ -258,19 +256,18 @@ "apihelp-import-param-rootpage": "Importer comme une sous-page de cette page. Impossible à utiliser avec $1namespace.", "apihelp-import-param-tags": "Modifier les balises à appliquer à l'entrée du journal d'importation et à la version zéro des pages importées.", "apihelp-import-example-import": "Importer [[meta:Help:ParserFunctions]] vers l’espace de noms 100 avec tout l’historique.", - "apihelp-linkaccount-description": "Lier un compte d’un fournisseur tiers à l’utilisateur actuel.", + "apihelp-linkaccount-summary": "Lier un compte d’un fournisseur tiers à l’utilisateur actuel.", "apihelp-linkaccount-example-link": "Commencer le processus de liaison d’un compte depuis Exemple.", - "apihelp-login-description": "Se connecter et obtenir les témoins d’authentification.\n\nCette action ne devrait être utilisée qu’en lien avec [[Special:BotPasswords]] ; l’utiliser pour la connexion du compte principal est désuet et peut échouer sans avertissement. Pour se connecter sans problème au compte principal, utiliser [[Special:ApiHelp/clientlogin|action=clientlogin]].", - "apihelp-login-description-nobotpasswords": "Se connecter et obtenir les témoins d’authentification.\n\nCette action est désuète et peut échouer sans prévenir. Pour se connecter sans problème, utiliser [[Special:ApiHelp/clientlogin|action=clientlogin]].", + "apihelp-login-summary": "Reconnecte et récupère les témoins (cookies) d'authentification.", "apihelp-login-param-name": "Nom d’utilisateur.", "apihelp-login-param-password": "Mot de passe.", "apihelp-login-param-domain": "Domaine (facultatif).", "apihelp-login-param-token": "Jeton de connexion obtenu à la première requête.", "apihelp-login-example-gettoken": "Récupérer un jeton de connexion", "apihelp-login-example-login": "Se connecter", - "apihelp-logout-description": "Se déconnecter et effacer les données de session.", + "apihelp-logout-summary": "Se déconnecter et effacer les données de session.", "apihelp-logout-example-logout": "Déconnecter l’utilisateur actuel.", - "apihelp-managetags-description": "Effectuer des tâches de gestion relatives à la modification des balises.", + "apihelp-managetags-summary": "Effectuer des tâches de gestion relatives à la modification des balises.", "apihelp-managetags-param-operation": "Quelle opération effectuer :\n;create:Créer une nouvelle balise de modification pour un usage manuel.\n;delete:Supprimer une balise de modification de la base de données, y compris la suppression de la marque de toutes les révisions, entrées de modification récente et entrées de journal dans lesquelles elle serait utilisée.\n;activate:Activer une balise de modification, permettant aux utilisateurs de l’appliquer manuellement.\n;deactivate:Désactiver une balise de modification, empêchant les utilisateurs de l’appliquer manuellement.", "apihelp-managetags-param-tag": "Balise à créer, supprimer, activer ou désactiver. Pour la création de balise, elle ne doit pas exister. Pour la suppression de balise, elle doit exister. Pour l’activation de balise, elle doit exister et ne pas être utilisée par une extension. Pour la désactivation de balise, elle doit être actuellement active et définie manuellement.", "apihelp-managetags-param-reason": "Un motif facultatif pour créer, supprimer, activer ou désactiver la balise.", @@ -280,7 +277,7 @@ "apihelp-managetags-example-delete": "Supprimer la balise vandlaism avec le motif Misspelt", "apihelp-managetags-example-activate": "Activer une balise nommée spam avec le motif For use in edit patrolling", "apihelp-managetags-example-deactivate": "Désactiver une balise nommée spam avec le motif No longer required", - "apihelp-mergehistory-description": "Fusionner les historiques des pages.", + "apihelp-mergehistory-summary": "Fusionner les historiques des pages.", "apihelp-mergehistory-param-from": "Titre de la page depuis laquelle l’historique sera fusionné. Impossible à utiliser avec $1fromid.", "apihelp-mergehistory-param-fromid": "ID de la page depuis laquelle l’historique sera fusionné. Impossible à utiliser avec $1from.", "apihelp-mergehistory-param-to": "Titre de la page vers laquelle l’historique sera fusionné. Impossible à utiliser avec $1toid.", @@ -289,7 +286,7 @@ "apihelp-mergehistory-param-reason": "Raison pour fusionner l’historique.", "apihelp-mergehistory-example-merge": "Fusionner l’historique complet de AnciennePage dans NouvellePage.", "apihelp-mergehistory-example-merge-timestamp": "Fusionner les révisions de la page AnciennePage jusqu’au 2015-12-31T04:37:41Z dans NouvellePage.", - "apihelp-move-description": "Déplacer une page.", + "apihelp-move-summary": "Déplacer une page.", "apihelp-move-param-from": "Titre de la page à renommer. Impossible de l’utiliser avec $1fromid.", "apihelp-move-param-fromid": "ID de la page à renommer. Impossible à utiliser avec $1from.", "apihelp-move-param-to": "Nouveau titre de la page.", @@ -303,7 +300,7 @@ "apihelp-move-param-ignorewarnings": "Ignorer tous les avertissements.", "apihelp-move-param-tags": "Modifier les balises à appliquer à l'entrée du journal des renommages et à la version zéro de la page de destination.", "apihelp-move-example-move": "Renommer Badtitle en Goodtitle sans garder de redirection.", - "apihelp-opensearch-description": "Rechercher dans le wiki en utilisant le protocole OpenSearch.", + "apihelp-opensearch-summary": "Rechercher dans le wiki en utilisant le protocole OpenSearch.", "apihelp-opensearch-param-search": "Chaîne de caractères cherchée.", "apihelp-opensearch-param-limit": "Nombre maximal de résultats à renvoyer.", "apihelp-opensearch-param-namespace": "Espaces de nom à rechercher.", @@ -312,7 +309,7 @@ "apihelp-opensearch-param-format": "Le format de sortie.", "apihelp-opensearch-param-warningsaserror": "Si des avertissements apparaissent avec format=json, renvoyer une erreur d’API au lieu de les ignorer.", "apihelp-opensearch-example-te": "Trouver les pages commençant par Te.", - "apihelp-options-description": "Modifier les préférences de l’utilisateur courant.\n\nSeules les options enregistrées dans le cœur ou dans l’une des extensions installées, ou les options avec des clés préfixées par userjs- (devant être utilisées dans les scripts utilisateur), peuvent être définies.", + "apihelp-options-summary": "Modifier les préférences de l'utilisateur courant.", "apihelp-options-param-reset": "Réinitialise les préférences avec les valeurs par défaut du site.", "apihelp-options-param-resetkinds": "Liste des types d’option à réinitialiser quand l’option $1reset est définie.", "apihelp-options-param-change": "Liste des modifications, au format nom=valeur (par ex. skin=vector). Si aucune valeur n’est fournie (pas même un signe égal), par ex., nomoption|autreoption|…, l’option sera réinitialisée à sa valeur par défaut. Pour toute valeur passée contenant une barre verticale (|), utiliser le [[Special:ApiHelp/main#main/datatypes|séparateur alternatif de valeur multiple]] pour que l'opération soit correcte.", @@ -321,7 +318,7 @@ "apihelp-options-example-reset": "Réinitialiser toutes les préférences", "apihelp-options-example-change": "Modifier les préférences skin et hideminor.", "apihelp-options-example-complex": "Réinitialiser toutes les préférences, puis définir skin et nickname.", - "apihelp-paraminfo-description": "Obtenir des informations sur les modules de l’API.", + "apihelp-paraminfo-summary": "Obtenir des informations sur les modules de l’API.", "apihelp-paraminfo-param-modules": "Liste des noms de module (valeurs des paramètres action et format, ou main). Peut spécifier des sous-modules avec un +, ou tous les sous-modules avec +*, ou tous les sous-modules récursivement avec +**.", "apihelp-paraminfo-param-helpformat": "Format des chaînes d’aide.", "apihelp-paraminfo-param-querymodules": "Liste des noms des modules de requête (valeur des paramètres prop, meta ou list). Utiliser $1modules=query+foo au lieu de $1querymodules=foo.", @@ -330,7 +327,6 @@ "apihelp-paraminfo-param-formatmodules": "Liste des noms de module de mise en forme (valeur du paramètre format). Utiliser plutôt $1modules.", "apihelp-paraminfo-example-1": "Afficher les informations pour [[Special:ApiHelp/parse|action=parse]], [[Special:ApiHelp/jsonfm|format=jsonfm]], [[Special:ApiHelp/query+allpages|action=query&list=allpages]] et [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]].", "apihelp-paraminfo-example-2": "Afficher les informations pour tous les sous-modules de [[Special:ApiHelp/query|action=query]].", - "apihelp-parse-description": "Analyse le contenu et renvoie le résultat de l’analyseur.\n\nVoyez les différents modules prop de [[Special:ApiHelp/query|action=query]] pour avoir de l’information sur la version actuelle d’une page.\n\nIl y a plusieurs moyens de spécifier le texte à analyser :\n# Spécifier une page ou une révision, en utilisant $1page, $1pageid ou $1oldid.\n# Spécifier explicitement un contenu, en utilisant $1text, $1title et $1contentmodel\n# Spécifier uniquement un résumé à analyser. $1prop doit recevoir une valeur vide.", "apihelp-parse-param-title": "Titre de la page à laquelle appartient le texte. Si omis, $1contentmodel doit être spécifié, et [[API]] sera utilisé comme titre.", "apihelp-parse-param-text": "Texte à analyser. utiliser $1title ou $1contentmodel pour contrôler le modèle de contenu.", "apihelp-parse-param-summary": "Résumé à analyser.", @@ -384,13 +380,13 @@ "apihelp-parse-example-text": "Analyser le wikitexte.", "apihelp-parse-example-texttitle": "Analyser du wikitexte, en spécifiant le titre de la page.", "apihelp-parse-example-summary": "Analyser un résumé.", - "apihelp-patrol-description": "Patrouiller une page ou une révision.", + "apihelp-patrol-summary": "Patrouiller une page ou une révision.", "apihelp-patrol-param-rcid": "ID de modification récente à patrouiller.", "apihelp-patrol-param-revid": "ID de révision à patrouiller.", "apihelp-patrol-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de surveillance.", "apihelp-patrol-example-rcid": "Patrouiller une modification récente", "apihelp-patrol-example-revid": "Patrouiller une révision", - "apihelp-protect-description": "Modifier le niveau de protection d’une page.", + "apihelp-protect-summary": "Modifier le niveau de protection d’une page.", "apihelp-protect-param-title": "Titre de la page à (dé)protéger. Impossible à utiliser avec $1pageid.", "apihelp-protect-param-pageid": "ID de la page à (dé)protéger. Impossible à utiliser avec $1title.", "apihelp-protect-param-protections": "Liste des niveaux de protection, au format action=niveau (par exemple edit=sysop). Un niveau de tout, indique que tout le monde est autorisé à faire l'action, c'est à dire aucune restriction.\n\nNOTE : Toutes les actions non listées auront leur restrictions supprimées.", @@ -403,12 +399,11 @@ "apihelp-protect-example-protect": "Protéger une page", "apihelp-protect-example-unprotect": "Enlever la protection d’une page en mettant les restrictions à all (c'est à dire tout le monde est autorisé à faire l'action).", "apihelp-protect-example-unprotect2": "Enlever la protection de la page en ne mettant aucune restriction", - "apihelp-purge-description": "Vider le cache des titres fournis.", + "apihelp-purge-summary": "Vider le cache des titres fournis.", "apihelp-purge-param-forcelinkupdate": "Mettre à jour les tables de liens.", "apihelp-purge-param-forcerecursivelinkupdate": "Mettre à jour la table des liens, et mettre à jour les tables de liens pour toute page qui utilise cette page comme modèle", "apihelp-purge-example-simple": "Purger les pages Main Page et API.", "apihelp-purge-example-generator": "Purger les 10 premières pages de l’espace de noms principal", - "apihelp-query-description": "Extraire des données de et sur MediaWiki.\n\nToutes les modifications de données devront d’abord utiliser une requête pour obtenir un jeton, afin d’éviter les abus de la part de sites malveillants.", "apihelp-query-param-prop": "Quelles propriétés obtenir pour les pages demandées.", "apihelp-query-param-list": "Quelles listes obtenir.", "apihelp-query-param-meta": "Quelles métadonnées obtenir.", @@ -419,7 +414,7 @@ "apihelp-query-param-rawcontinue": "Renvoyer les données query-continue brutes pour continuer.", "apihelp-query-example-revisions": "Récupérer [[Special:ApiHelp/query+siteinfo|l’info du site]] et [[Special:ApiHelp/query+revisions|les révisions]] de Main Page.", "apihelp-query-example-allpages": "Récupérer les révisions des pages commençant par API/.", - "apihelp-query+allcategories-description": "Énumérer toutes les catégories.", + "apihelp-query+allcategories-summary": "Énumérer toutes les catégories.", "apihelp-query+allcategories-param-from": "La catégorie depuis laquelle démarrer l’énumération.", "apihelp-query+allcategories-param-to": "La catégorie à laquelle terminer l’énumération.", "apihelp-query+allcategories-param-prefix": "Rechercher tous les titres de catégorie qui commencent avec cette valeur.", @@ -432,7 +427,7 @@ "apihelp-query+allcategories-paramvalue-prop-hidden": "Marque les catégories qui sont masquées avec __HIDDENCAT__.", "apihelp-query+allcategories-example-size": "Lister les catégories avec l’information sur le nombre de pages dans chacune", "apihelp-query+allcategories-example-generator": "Récupérer l’information sur la page de catégorie elle-même pour les catégories commençant par List.", - "apihelp-query+alldeletedrevisions-description": "Lister toutes les révisions supprimées par un utilisateur ou dans un espace de noms.", + "apihelp-query+alldeletedrevisions-summary": "Lister toutes les révisions supprimées par un utilisateur ou dans un espace de noms.", "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Utilisable uniquement avec $3user.", "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Impossible à utiliser avec $3user.", "apihelp-query+alldeletedrevisions-param-start": "L’horodatage auquel démarrer l’énumération.", @@ -448,7 +443,7 @@ "apihelp-query+alldeletedrevisions-param-generatetitles": "Utilisé comme générateur, générer des titres plutôt que des IDs de révision.", "apihelp-query+alldeletedrevisions-example-user": "Lister les 50 dernières contributions supprimées par l'utilisateur Example.", "apihelp-query+alldeletedrevisions-example-ns-main": "Lister les 50 premières révisions supprimées dans l’espace de noms principal.", - "apihelp-query+allfileusages-description": "Lister toutes les utilisations de fichiers, y compris ceux n’existant pas.", + "apihelp-query+allfileusages-summary": "Lister toutes les utilisations de fichiers, y compris ceux n’existant pas.", "apihelp-query+allfileusages-param-from": "Le titre du fichier depuis lequel commencer l’énumération.", "apihelp-query+allfileusages-param-to": "Le titre du fichier auquel arrêter l’énumération.", "apihelp-query+allfileusages-param-prefix": "Rechercher tous les fichiers dont le titre commence par cette valeur.", @@ -462,7 +457,7 @@ "apihelp-query+allfileusages-example-unique": "Lister les titres de fichier uniques.", "apihelp-query+allfileusages-example-unique-generator": "Obtient tous les titres de fichier, en marquant les manquants.", "apihelp-query+allfileusages-example-generator": "Obtient les pages contenant les fichiers.", - "apihelp-query+allimages-description": "Énumérer toutes les images séquentiellement.", + "apihelp-query+allimages-summary": "Énumérer toutes les images séquentiellement.", "apihelp-query+allimages-param-sort": "Propriété par laquelle trier.", "apihelp-query+allimages-param-dir": "L'ordre dans laquel lister.", "apihelp-query+allimages-param-from": "Le titre de l’image depuis laquelle démarrer l’énumération. Ne peut être utilisé qu’avec $1sort=name.", @@ -482,7 +477,7 @@ "apihelp-query+allimages-example-recent": "Afficher une liste de fichiers récemment téléversés, semblable à [[Special:NewFiles]].", "apihelp-query+allimages-example-mimetypes": "Afficher une liste de fichiers avec le type MIME image/png ou image/gif", "apihelp-query+allimages-example-generator": "Afficher l’information sur 4 fichiers commençant par la lettre T.", - "apihelp-query+alllinks-description": "Énumérer tous les liens pointant vers un espace de noms donné.", + "apihelp-query+alllinks-summary": "Énumérer tous les liens pointant vers un espace de noms donné.", "apihelp-query+alllinks-param-from": "Le titre du lien auquel démarrer l’énumération.", "apihelp-query+alllinks-param-to": "Le titre du lien auquel arrêter l’énumération.", "apihelp-query+alllinks-param-prefix": "Rechercher tous les titres liés commençant par cette valeur.", @@ -497,7 +492,7 @@ "apihelp-query+alllinks-example-unique": "Lister les titres liés uniques", "apihelp-query+alllinks-example-unique-generator": "Obtient tous les titres liés, en marquant les manquants", "apihelp-query+alllinks-example-generator": "Obtient les pages contenant les liens", - "apihelp-query+allmessages-description": "Renvoyer les messages depuis ce site.", + "apihelp-query+allmessages-summary": "Renvoyer les messages depuis ce site.", "apihelp-query+allmessages-param-messages": "Quels messages sortir. * (par défaut) signifie tous les messages.", "apihelp-query+allmessages-param-prop": "Quelles propriétés obtenir.", "apihelp-query+allmessages-param-enableparser": "Positionner pour activer l’analyseur, traitera en avance le wikitexte du message (substitution des mots magiques, gestion des modèles, etc.).", @@ -513,7 +508,7 @@ "apihelp-query+allmessages-param-prefix": "Renvoyer les messages avec ce préfixe.", "apihelp-query+allmessages-example-ipb": "Afficher les messages commençant par ipb-.", "apihelp-query+allmessages-example-de": "Afficher les messages august et mainpage en allemand.", - "apihelp-query+allpages-description": "Énumérer toutes les pages séquentiellement dans un espace de noms donné.", + "apihelp-query+allpages-summary": "Énumérer toutes les pages séquentiellement dans un espace de noms donné.", "apihelp-query+allpages-param-from": "Le titre de la page depuis lequel commencer l’énumération.", "apihelp-query+allpages-param-to": "Le titre de la page auquel stopper l’énumération.", "apihelp-query+allpages-param-prefix": "Rechercher tous les titres de page qui commencent par cette valeur.", @@ -531,7 +526,7 @@ "apihelp-query+allpages-example-B": "Afficher une liste des pages commençant par la lettre B.", "apihelp-query+allpages-example-generator": "Afficher l’information sur 4 pages commençant par la lettre T.", "apihelp-query+allpages-example-generator-revisions": "Afficher le contenu des 2 premières pages hors redirections commençant par Re.", - "apihelp-query+allredirects-description": "Lister toutes les redirections vers un espace de noms.", + "apihelp-query+allredirects-summary": "Lister toutes les redirections vers un espace de noms.", "apihelp-query+allredirects-param-from": "Le titre de la redirection auquel démarrer l’énumération.", "apihelp-query+allredirects-param-to": "Le titre de la redirection auquel arrêter l’énumération.", "apihelp-query+allredirects-param-prefix": "Rechercher toutes les pages cible commençant par cette valeur.", @@ -548,7 +543,7 @@ "apihelp-query+allredirects-example-unique": "Lister les pages cible unique", "apihelp-query+allredirects-example-unique-generator": "Obtient toutes les pages cible, en marquant les manquantes", "apihelp-query+allredirects-example-generator": "Obtient les pages contenant les redirections", - "apihelp-query+allrevisions-description": "Lister toutes les révisions.", + "apihelp-query+allrevisions-summary": "Lister toutes les révisions.", "apihelp-query+allrevisions-param-start": "L’horodatage auquel démarrer l’énumération.", "apihelp-query+allrevisions-param-end": "L’horodatage auquel arrêter l’énumération.", "apihelp-query+allrevisions-param-user": "Lister uniquement les révisions faites par cet utilisateur.", @@ -557,13 +552,13 @@ "apihelp-query+allrevisions-param-generatetitles": "Utilisé comme générateur, génère des titres plutôt que des IDs de révision.", "apihelp-query+allrevisions-example-user": "Lister les 50 dernières contributions de l’utilisateur Example.", "apihelp-query+allrevisions-example-ns-main": "Lister les 50 premières révisions dans l’espace de noms principal.", - "apihelp-query+mystashedfiles-description": "Obtenir une liste des fichiers dans le cache de téléversement de l’utilisateur actuel", + "apihelp-query+mystashedfiles-summary": "Obtenir une liste des fichiers dans le cache de téléversement de l’utilisateur actuel", "apihelp-query+mystashedfiles-param-prop": "Quelles propriétés récupérer pour les fichiers.", "apihelp-query+mystashedfiles-paramvalue-prop-size": "Récupérer la taille du fichier et les dimensions de l’image.", "apihelp-query+mystashedfiles-paramvalue-prop-type": "Récupérer le type MIME du fichier et son type de média.", "apihelp-query+mystashedfiles-param-limit": "Combien de fichiers obtenir.", "apihelp-query+mystashedfiles-example-simple": "Obtenir la clé du fichier, sa taille, et la taille en pixels des fichiers dans le cache de téléversement de l’utilisateur actuel.", - "apihelp-query+alltransclusions-description": "Lister toutes les transclusions (pages intégrées en utilisant {{x}}), y compris les inexistantes.", + "apihelp-query+alltransclusions-summary": "Lister toutes les transclusions (pages intégrées en utilisant {{x}}), y compris les inexistantes.", "apihelp-query+alltransclusions-param-from": "Le titre de la transclusion depuis lequel commencer l’énumération.", "apihelp-query+alltransclusions-param-to": "Le titre de la transclusion auquel arrêter l’énumération.", "apihelp-query+alltransclusions-param-prefix": "Rechercher tous les titres inclus qui commencent par cette valeur.", @@ -578,7 +573,7 @@ "apihelp-query+alltransclusions-example-unique": "Lister les titres inclus uniques", "apihelp-query+alltransclusions-example-unique-generator": "Obtient tous les titres inclus, en marquant les manquants.", "apihelp-query+alltransclusions-example-generator": "Obtient les pages contenant les transclusions.", - "apihelp-query+allusers-description": "Énumérer tous les utilisateurs enregistrés.", + "apihelp-query+allusers-summary": "Énumérer tous les utilisateurs enregistrés.", "apihelp-query+allusers-param-from": "Le nom d’utilisateur auquel démarrer l’énumération.", "apihelp-query+allusers-param-to": "Le nom d’utilisateur auquel stopper l’énumération.", "apihelp-query+allusers-param-prefix": "Rechercher tous les utilisateurs commençant par cette valeur.", @@ -599,13 +594,13 @@ "apihelp-query+allusers-param-activeusers": "Lister uniquement les utilisateurs actifs durant {{PLURAL:$1|le dernier jour|les $1 derniers jours}}.", "apihelp-query+allusers-param-attachedwiki": "Avec $1prop=centralids, indiquer aussi si l’utilisateur est attaché avec le wiki identifié par cet ID.", "apihelp-query+allusers-example-Y": "Lister les utilisateurs en commençant à Y.", - "apihelp-query+authmanagerinfo-description": "Récupérer les informations concernant l’état d’authentification actuel.", + "apihelp-query+authmanagerinfo-summary": "Récupérer les informations concernant l’état d’authentification actuel.", "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Tester si l’état d’authentification actuel de l’utilisateur est suffisant pour l’opération spécifiée comme sensible du point de vue sécurité.", "apihelp-query+authmanagerinfo-param-requestsfor": "Récupérer les informations sur les requêtes d’authentification nécessaires pour l’action d’authentification spécifiée.", "apihelp-query+authmanagerinfo-example-login": "Récupérer les requêtes qui peuvent être utilisées en commençant une connexion.", "apihelp-query+authmanagerinfo-example-login-merged": "Récupérer les requêtes qui peuvent être utilisées au début de la connexion, avec les champs de formulaire intégrés.", "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Tester si l’authentification est suffisante pour l’action foo.", - "apihelp-query+backlinks-description": "Trouver toutes les pages qui ont un lien vers la page donnée.", + "apihelp-query+backlinks-summary": "Trouver toutes les pages qui ont un lien vers la page donnée.", "apihelp-query+backlinks-param-title": "Titre à rechercher. Impossible à utiliser avec $1pageid.", "apihelp-query+backlinks-param-pageid": "ID de la page à chercher. Impossible à utiliser avec $1title.", "apihelp-query+backlinks-param-namespace": "L’espace de noms à énumérer.", @@ -615,7 +610,7 @@ "apihelp-query+backlinks-param-redirect": "Si le lien vers une page est une redirection, trouver également toutes les pages qui ont un lien vers cette redirection. La limite maximale est divisée par deux.", "apihelp-query+backlinks-example-simple": "Afficher les liens vers Main page.", "apihelp-query+backlinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers Main page.", - "apihelp-query+blocks-description": "Lister tous les utilisateurs et les adresses IP bloqués.", + "apihelp-query+blocks-summary": "Lister tous les utilisateurs et les adresses IP bloqués.", "apihelp-query+blocks-param-start": "L’horodatage auquel démarrer l’énumération.", "apihelp-query+blocks-param-end": "L’horodatage auquel arrêter l’énumération.", "apihelp-query+blocks-param-ids": "Liste des IDs de bloc à lister (facultatif).", @@ -636,7 +631,7 @@ "apihelp-query+blocks-param-show": "Afficher uniquement les éléments correspondant à ces critères.\nPar exemple, pour voir uniquement les blocages infinis sur les adresses IP, mettre $1show=ip|!temp.", "apihelp-query+blocks-example-simple": "Lister les blocages", "apihelp-query+blocks-example-users": "Lister les blocages des utilisateurs Alice et Bob.", - "apihelp-query+categories-description": "Lister toutes les catégories auxquelles les pages appartiennent.", + "apihelp-query+categories-summary": "Lister toutes les catégories auxquelles les pages appartiennent.", "apihelp-query+categories-param-prop": "Quelles propriétés supplémentaires obtenir de chaque catégorie :", "apihelp-query+categories-paramvalue-prop-sortkey": "Ajoute la clé de tri (chaîne hexadécimale) et son préfixe (partie lisible) de la catégorie.", "apihelp-query+categories-paramvalue-prop-timestamp": "Ajoute l’horodatage de l’ajout de la catégorie.", @@ -647,9 +642,9 @@ "apihelp-query+categories-param-dir": "La direction dans laquelle lister.", "apihelp-query+categories-example-simple": "Obtenir une liste des catégories auxquelles appartient la page Albert Einstein.", "apihelp-query+categories-example-generator": "Obtenir des informations sur toutes les catégories utilisées dans la page Albert Einstein.", - "apihelp-query+categoryinfo-description": "Renvoie les informations sur les catégories données.", + "apihelp-query+categoryinfo-summary": "Renvoie les informations sur les catégories données.", "apihelp-query+categoryinfo-example-simple": "Obtenir des informations sur Category:Foo et Category:Bar.", - "apihelp-query+categorymembers-description": "Lister toutes les pages d’une catégorie donnée.", + "apihelp-query+categorymembers-summary": "Lister toutes les pages d’une catégorie donnée.", "apihelp-query+categorymembers-param-title": "Quelle catégorie énumérer (obligatoire). Doit comprendre le préfixe {{ns:category}}:. Impossible à utiliser avec $1pageid.", "apihelp-query+categorymembers-param-pageid": "ID de la page de la catégorie à énumérer. Impossible à utiliser avec $1title.", "apihelp-query+categorymembers-param-prop": "Quelles informations inclure :", @@ -674,14 +669,13 @@ "apihelp-query+categorymembers-param-endsortkey": "Utiliser plutôt $1endhexsortkey.", "apihelp-query+categorymembers-example-simple": "Obtenir les 10 premières pages de Category:Physics.", "apihelp-query+categorymembers-example-generator": "Obtenir l’information sur les 10 premières pages de Category:Physics.", - "apihelp-query+contributors-description": "Obtenir la liste des contributeurs connectés et le nombre de contributeurs anonymes d’une page.", + "apihelp-query+contributors-summary": "Obtenir la liste des contributeurs connectés et le nombre de contributeurs anonymes d’une page.", "apihelp-query+contributors-param-group": "Inclut uniquement les utilisateurs dans les groupes donnés. N'inclut pas les groupes implicites ou auto-promus comme *, user ou autoconfirmed.", "apihelp-query+contributors-param-excludegroup": "Exclure les utilisateurs des groupes donnés. Ne pas inclure les groupes implicites ou auto-promus comme *, user ou autoconfirmed.", "apihelp-query+contributors-param-rights": "Inclure uniquement les utilisateurs ayant les droits donnés. Ne pas inclure les droits accordés par les groupes implicites ou auto-promus comme *, user ou autoconfirmed.", "apihelp-query+contributors-param-excluderights": "Exclure les utilisateurs ayant les droits donnés. Ne pas inclure les droits accordés par les groupes implicites ou auto-promus comme *, user ou autoconfirmed.", "apihelp-query+contributors-param-limit": "Combien de contributeurs renvoyer.", "apihelp-query+contributors-example-simple": "Afficher les contributeurs dans la Main Page.", - "apihelp-query+deletedrevisions-description": "Obtenir des informations sur la révision supprimée.\n\nPeut être utilisé de différentes manières :\n# Obtenir les révisions supprimées pour un ensemble de pages, en donnant les titres ou les ids de page. Ordonné par titre et horodatage.\n# Obtenir des données sur un ensemble de révisions supprimées en donnant leurs IDs et leurs ids de révision. Ordonné par ID de révision.", "apihelp-query+deletedrevisions-param-start": "L’horodatage auquel démarrer l’énumération. Ignoré lors du traitement d’une liste d’IDs de révisions.", "apihelp-query+deletedrevisions-param-end": "L’horodatage auquel arrêter l’énumération. Ignoré lors du traitement d’une liste d’IDs de révisions.", "apihelp-query+deletedrevisions-param-tag": "Lister uniquement les révisions marquées par cette balise.", @@ -689,7 +683,7 @@ "apihelp-query+deletedrevisions-param-excludeuser": "Ne pas lister les révisions faites par cet utilisateur.", "apihelp-query+deletedrevisions-example-titles": "Lister les révisions supprimées des pages Main Page et Talk:Main Page, avec leur contenu.", "apihelp-query+deletedrevisions-example-revids": "Lister les informations pour la révision supprimée 123456.", - "apihelp-query+deletedrevs-description": "Lister les révisions supprimées.\n\nOpère selon trois modes :\n# Lister les révisions supprimées pour les titres donnés, triées par horodatage.\n# Lister les contributions supprimées pour l’utilisateur donné, triées par horodatage (pas de titres spécifiés).\n# Lister toutes les révisions supprimées dans l’espace de noms donné, triées par titre et horodatage (aucun titre spécifié, $1user non positionné).\n\nCertains paramètres ne s’appliquent qu’à certains modes et sont ignorés dans les autres.", + "apihelp-query+deletedrevs-summary": "Afficher les versions supprimées.", "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mode|Modes}} : $2", "apihelp-query+deletedrevs-param-start": "L’horodatage auquel démarrer l’énumération.", "apihelp-query+deletedrevs-param-end": "L’horodatage auquel arrêter l’énumération.", @@ -707,14 +701,14 @@ "apihelp-query+deletedrevs-example-mode2": "Lister les 50 dernières contributions de Bob supprimées (mode 2).", "apihelp-query+deletedrevs-example-mode3-main": "Lister les 50 premières révisions supprimées dans l’espace de noms principal (mode 3)", "apihelp-query+deletedrevs-example-mode3-talk": "Lister les 50 premières pages supprimées dans l’espace de noms {{ns:talk}} (mode 3).", - "apihelp-query+disabled-description": "Ce module de requête a été désactivé.", - "apihelp-query+duplicatefiles-description": "Lister d’après leurs valeurs de hachage, tous les fichiers qui sont des doublons de fichiers donnés.", + "apihelp-query+disabled-summary": "Ce module de requête a été désactivé.", + "apihelp-query+duplicatefiles-summary": "Lister d’après leurs valeurs de hachage, tous les fichiers qui sont des doublons de fichiers donnés.", "apihelp-query+duplicatefiles-param-limit": "Combien de fichiers dupliqués à renvoyer.", "apihelp-query+duplicatefiles-param-dir": "La direction dans laquelle lister.", "apihelp-query+duplicatefiles-param-localonly": "Rechercher les fichiers uniquement dans le référentiel local.", "apihelp-query+duplicatefiles-example-simple": "Rechercher les doublons de [[:File:Albert Einstein Head.jpg]].", "apihelp-query+duplicatefiles-example-generated": "Rechercher les doublons de tous les fichiers", - "apihelp-query+embeddedin-description": "Trouver toutes les pages qui incluent (par transclusion) le titre donné.", + "apihelp-query+embeddedin-summary": "Trouver toutes les pages qui incluent (par transclusion) le titre donné.", "apihelp-query+embeddedin-param-title": "Titre à rechercher. Impossible à utiliser avec $1pageid.", "apihelp-query+embeddedin-param-pageid": "ID de la page à rechercher. Impossible à utiliser avec $1title.", "apihelp-query+embeddedin-param-namespace": "L’espace de noms à énumérer.", @@ -723,13 +717,12 @@ "apihelp-query+embeddedin-param-limit": "Combien de pages renvoyer au total.", "apihelp-query+embeddedin-example-simple": "Afficher les pages incluant Template:Stub.", "apihelp-query+embeddedin-example-generator": "Obtenir des informations sur les pages incluant Template:Stub.", - "apihelp-query+extlinks-description": "Renvoyer toutes les URLs externes (non interwikis) des pages données.", "apihelp-query+extlinks-param-limit": "Combien de liens renvoyer.", "apihelp-query+extlinks-param-protocol": "Protocole de l’URL. Si vide et $1query est positionné, le protocole est http. Laisser à la fois ceci et $1query vides pour lister tous les liens externes.", "apihelp-query+extlinks-param-query": "Rechercher une chaîne sans protocole. Utile pour vérifier si une certaine page contient une certaine URL externe.", "apihelp-query+extlinks-param-expandurl": "Étendre les URLs relatives au protocole avec le protocole canonique.", "apihelp-query+extlinks-example-simple": "Obtenir une liste des liens externes de Main Page.", - "apihelp-query+exturlusage-description": "Énumérer les pages contenant une URL donnée.", + "apihelp-query+exturlusage-summary": "Énumérer les pages contenant une URL donnée.", "apihelp-query+exturlusage-param-prop": "Quelles informations inclure :", "apihelp-query+exturlusage-paramvalue-prop-ids": "Ajoute l’ID de la page.", "apihelp-query+exturlusage-paramvalue-prop-title": "Ajoute le titre et l’ID de l’espace de noms de la page.", @@ -740,7 +733,7 @@ "apihelp-query+exturlusage-param-limit": "Combien de pages renvoyer.", "apihelp-query+exturlusage-param-expandurl": "Étendre les URLs relatives au protocole avec le protocole canonique.", "apihelp-query+exturlusage-example-simple": "Afficher les pages avec un lien vers http://www.mediawiki.org.", - "apihelp-query+filearchive-description": "Énumérer séquentiellement tous les fichiers supprimés.", + "apihelp-query+filearchive-summary": "Énumérer séquentiellement tous les fichiers supprimés.", "apihelp-query+filearchive-param-from": "Le titre de l’image auquel démarrer l’énumération.", "apihelp-query+filearchive-param-to": "Le titre de l’image auquel arrêter l’énumération.", "apihelp-query+filearchive-param-prefix": "Rechercher tous les titres d’image qui commencent par cette valeur.", @@ -762,10 +755,10 @@ "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Ajoute la profondeur de bit de la version.", "apihelp-query+filearchive-paramvalue-prop-archivename": "Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.", "apihelp-query+filearchive-example-simple": "Afficher une liste de tous les fichiers supprimés", - "apihelp-query+filerepoinfo-description": "Renvoyer les méta-informations sur les référentiels d’images configurés dans le wiki.", + "apihelp-query+filerepoinfo-summary": "Renvoyer les méta-informations sur les référentiels d’images configurés dans le wiki.", "apihelp-query+filerepoinfo-param-prop": "Quelles propriétés du référentiel récupérer (il peut y en avoir plus de disponibles sur certains wikis) :\n;apiurl:URL de l’API du référentiel - utile pour obtenir les infos de l’image depuis l’hôte.\n;name:La clé du référentiel - utilisé par ex. dans les valeurs de retour de [[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]] et [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:Le nom lisible du wiki référentiel.\n;rooturl:URL racine des chemins d’image.\n;local:Si ce référentiel est le référentiel local ou non.", "apihelp-query+filerepoinfo-example-simple": "Obtenir des informations sur les référentiels de fichier.", - "apihelp-query+fileusage-description": "Trouver toutes les pages qui utilisent les fichiers donnés.", + "apihelp-query+fileusage-summary": "Trouver toutes les pages qui utilisent les fichiers donnés.", "apihelp-query+fileusage-param-prop": "Quelles propriétés obtenir :", "apihelp-query+fileusage-paramvalue-prop-pageid": "ID de chaque page.", "apihelp-query+fileusage-paramvalue-prop-title": "Titre de chaque page.", @@ -775,7 +768,7 @@ "apihelp-query+fileusage-param-show": "Afficher uniquement les éléments qui correspondent à ces critères :\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.", "apihelp-query+fileusage-example-simple": "Obtenir une liste des pages utilisant [[:File:Example.jpg]]", "apihelp-query+fileusage-example-generator": "Obtenir l’information sur les pages utilisant [[:File:Example.jpg]]", - "apihelp-query+imageinfo-description": "Renvoyer l’information de fichier et l’historique de téléversement.", + "apihelp-query+imageinfo-summary": "Renvoyer l’information de fichier et l’historique de téléversement.", "apihelp-query+imageinfo-param-prop": "Quelle information obtenir du fichier :", "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Ajoute l’horodatage à la version téléversée.", "apihelp-query+imageinfo-paramvalue-prop-user": "Ajoute l’utilisateur qui a téléversé chaque version du fichier.", @@ -811,13 +804,13 @@ "apihelp-query+imageinfo-param-localonly": "Rechercher les fichiers uniquement dans le référentiel local.", "apihelp-query+imageinfo-example-simple": "Analyser les informations sur la version actuelle de [[:File:Albert Einstein Head.jpg]].", "apihelp-query+imageinfo-example-dated": "Analyser les informations sur les versions de [[:File:Test.jpg]] depuis 2008.", - "apihelp-query+images-description": "Renvoie tous les fichiers contenus dans les pages fournies.", + "apihelp-query+images-summary": "Renvoie tous les fichiers contenus dans les pages fournies.", "apihelp-query+images-param-limit": "Combien de fichiers renvoyer.", "apihelp-query+images-param-images": "Lister uniquement ces fichiers. Utile pour vérifier si une page donnée contient un fichier donné.", "apihelp-query+images-param-dir": "La direction dans laquelle lister.", "apihelp-query+images-example-simple": "Obtenir une liste des fichiers utilisés dans [[Main Page]]", "apihelp-query+images-example-generator": "Obtenir des informations sur tous les fichiers utilisés dans [[Main Page]]", - "apihelp-query+imageusage-description": "Trouver toutes les pages qui utilisent le titre de l’image donné.", + "apihelp-query+imageusage-summary": "Trouver toutes les pages qui utilisent le titre de l’image donné.", "apihelp-query+imageusage-param-title": "Titre à rechercher. Impossible à utiliser avec $1pageid.", "apihelp-query+imageusage-param-pageid": "ID de la page à rechercher. Impossible à utiliser avec $1title.", "apihelp-query+imageusage-param-namespace": "L’espace de noms à énumérer.", @@ -827,7 +820,7 @@ "apihelp-query+imageusage-param-redirect": "Si le lien vers une page est une redirection, trouver toutes les pages qui ont aussi un lien vers cette redirection. La limite maximale est divisée par deux.", "apihelp-query+imageusage-example-simple": "Afficher les pages utilisant [[:File:Albert Einstein Head.jpg]]", "apihelp-query+imageusage-example-generator": "Obtenir des informations sur les pages utilisant [[:File:Albert Einstein Head.jpg]]", - "apihelp-query+info-description": "Obtenir les informations de base sur la page.", + "apihelp-query+info-summary": "Obtenir les informations de base sur la page.", "apihelp-query+info-param-prop": "Quelles propriétés supplémentaires récupérer :", "apihelp-query+info-paramvalue-prop-protection": "Lister le niveau de protection de chaque page.", "apihelp-query+info-paramvalue-prop-talkid": "L’ID de la page de discussion de chaque page qui n’est pas de discussion.", @@ -844,7 +837,6 @@ "apihelp-query+info-param-token": "Utiliser plutôt [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].", "apihelp-query+info-example-simple": "Obtenir des informations sur la page Main Page.", "apihelp-query+info-example-protection": "Obtenir des informations générales et de protection sur la page Main Page.", - "apihelp-query+iwbacklinks-description": "Trouver toutes les pages qui ont un lien vers le lien interwiki indiqué.\n\nPeut être utilisé pour trouver tous les liens avec un préfixe, ou tous les liens vers un titre (avec un préfixe donné). Sans paramètre, équivaut à « tous les liens interwiki ».", "apihelp-query+iwbacklinks-param-prefix": "Préfixe pour l’interwiki.", "apihelp-query+iwbacklinks-param-title": "Lien interwiki à rechercher. Doit être utilisé avec $1blprefix.", "apihelp-query+iwbacklinks-param-limit": "Combien de pages renvoyer.", @@ -854,7 +846,7 @@ "apihelp-query+iwbacklinks-param-dir": "La direction dans laquelle lister.", "apihelp-query+iwbacklinks-example-simple": "Obtenir les pages qui ont un lien vers [[wikibooks:Test]].", "apihelp-query+iwbacklinks-example-generator": "Obtenir des informations sur les pages qui ont un lien vers [[wikibooks:Test]].", - "apihelp-query+iwlinks-description": "Renvoie tous les liens interwiki des pages indiquées.", + "apihelp-query+iwlinks-summary": "Renvoie tous les liens interwiki des pages indiquées.", "apihelp-query+iwlinks-param-url": "S'il faut obtenir l’URL complète (impossible à utiliser avec $1prop).", "apihelp-query+iwlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :", "apihelp-query+iwlinks-paramvalue-prop-url": "Ajoute l’URL complète.", @@ -863,7 +855,6 @@ "apihelp-query+iwlinks-param-title": "Lien interwiki à rechercher. Doit être utilisé avec $1prefix.", "apihelp-query+iwlinks-param-dir": "La direction dans laquelle lister.", "apihelp-query+iwlinks-example-simple": "Obtenir les liens interwiki de la page Main Page.", - "apihelp-query+langbacklinks-description": "Trouver toutes les pages qui ont un lien vers le lien de langue indiqué.\n\nPeut être utilisé pour trouver tous les liens avec un code de langue, ou tous les liens vers un titre (avec une langue donnée). N’utiliser aucun paramètre revient à « tous les liens de langue ».\n\nNotez que cela peut ne pas prendre en compte les liens de langue ajoutés par les extensions.", "apihelp-query+langbacklinks-param-lang": "Langue pour le lien de langue.", "apihelp-query+langbacklinks-param-title": "Lien interlangue à rechercher. Doit être utilisé avec $1lang.", "apihelp-query+langbacklinks-param-limit": "Combien de pages renvoyer au total.", @@ -873,7 +864,7 @@ "apihelp-query+langbacklinks-param-dir": "La direction dans laquelle lister.", "apihelp-query+langbacklinks-example-simple": "Obtenir les pages ayant un lien vers [[:fr:Test]].", "apihelp-query+langbacklinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[:fr:Test]].", - "apihelp-query+langlinks-description": "Renvoie tous les liens interlangue des pages fournies.", + "apihelp-query+langlinks-summary": "Renvoie tous les liens interlangue des pages fournies.", "apihelp-query+langlinks-param-limit": "Combien de liens interlangue renvoyer.", "apihelp-query+langlinks-param-url": "S’il faut récupérer l’URL complète (impossible à utiliser avec $1prop).", "apihelp-query+langlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :", @@ -885,7 +876,7 @@ "apihelp-query+langlinks-param-dir": "La direction dans laquelle lister.", "apihelp-query+langlinks-param-inlanguagecode": "Code de langue pour les noms de langue localisés.", "apihelp-query+langlinks-example-simple": "Obtenir les liens interlangue de la page Main Page.", - "apihelp-query+links-description": "Renvoie tous les liens des pages fournies.", + "apihelp-query+links-summary": "Renvoie tous les liens des pages fournies.", "apihelp-query+links-param-namespace": "Afficher les liens uniquement dans ces espaces de noms.", "apihelp-query+links-param-limit": "Combien de liens renvoyer.", "apihelp-query+links-param-titles": "Lister uniquement les liens vers ces titres. Utile pour vérifier si une certaine page a un lien vers un titre donné.", @@ -893,7 +884,7 @@ "apihelp-query+links-example-simple": "Obtenir les liens de la page Main Page", "apihelp-query+links-example-generator": "Obtenir des informations sur tous les liens de page dans Main Page.", "apihelp-query+links-example-namespaces": "Obtenir les liens de la page Main Page dans les espaces de nom {{ns:user}} et {{ns:template}}.", - "apihelp-query+linkshere-description": "Trouver toutes les pages ayant un lien vers les pages données.", + "apihelp-query+linkshere-summary": "Trouver toutes les pages ayant un lien vers les pages données.", "apihelp-query+linkshere-param-prop": "Quelles propriétés obtenir :", "apihelp-query+linkshere-paramvalue-prop-pageid": "ID de chaque page.", "apihelp-query+linkshere-paramvalue-prop-title": "Titre de chaque page.", @@ -903,7 +894,7 @@ "apihelp-query+linkshere-param-show": "Afficher uniquement les éléments qui correspondent à ces critères :\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.", "apihelp-query+linkshere-example-simple": "Obtenir une liste des pages liées à [[Main Page]]", "apihelp-query+linkshere-example-generator": "Obtenir des informations sur les pages liées à [[Main Page]]", - "apihelp-query+logevents-description": "Obtenir des événements des journaux.", + "apihelp-query+logevents-summary": "Récupère les événements à partir des journaux.", "apihelp-query+logevents-param-prop": "Quelles propriétés obtenir :", "apihelp-query+logevents-paramvalue-prop-ids": "Ajoute l’ID de l’événement.", "apihelp-query+logevents-paramvalue-prop-title": "Ajoute le titre de la page pour l’événement enregistré.", @@ -926,13 +917,13 @@ "apihelp-query+logevents-param-tag": "Lister seulement les entrées ayant cette balise.", "apihelp-query+logevents-param-limit": "Combien d'entrées renvoyer au total.", "apihelp-query+logevents-example-simple": "Liste les entrées de journal récentes.", - "apihelp-query+pagepropnames-description": "Lister les noms de toutes les propriétés de page utilisées sur le wiki.", + "apihelp-query+pagepropnames-summary": "Lister les noms de toutes les propriétés de page utilisées sur le wiki.", "apihelp-query+pagepropnames-param-limit": "Le nombre maximal de noms à renvoyer.", "apihelp-query+pagepropnames-example-simple": "Obtenir les 10 premiers noms de propriété.", - "apihelp-query+pageprops-description": "Obtenir diverses propriétés de page définies dans le contenu de la page.", + "apihelp-query+pageprops-summary": "Obtenir diverses propriétés de page définies dans le contenu de la page.", "apihelp-query+pageprops-param-prop": "Lister uniquement ces propriétés de page ([[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]] renvoie les noms de propriété de page utilisés). Utile pour vérifier si des pages utilisent une certaine propriété de page.", "apihelp-query+pageprops-example-simple": "Obtenir les propriétés des pages Main Page et MediaWiki.", - "apihelp-query+pageswithprop-description": "Lister toutes les pages utilisant une propriété de page donnée.", + "apihelp-query+pageswithprop-summary": "Lister toutes les pages utilisant une propriété de page donnée.", "apihelp-query+pageswithprop-param-propname": "Propriété de page pour laquelle énumérer les pages ([[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]] renvoie les noms de propriété de page utilisés).", "apihelp-query+pageswithprop-param-prop": "Quelles informations inclure :", "apihelp-query+pageswithprop-paramvalue-prop-ids": "Ajoute l’ID de la page.", @@ -942,14 +933,13 @@ "apihelp-query+pageswithprop-param-dir": "Dans quelle direction trier.", "apihelp-query+pageswithprop-example-simple": "Lister les 10 premières pages en utilisant {{DISPLAYTITLE:}}.", "apihelp-query+pageswithprop-example-generator": "Obtenir des informations supplémentaires sur les 10 premières pages utilisant __NOTOC__.", - "apihelp-query+prefixsearch-description": "Effectuer une recherche de préfixe sur les titres de page.\n\nMalgré les similarités dans le nom, ce module n’est pas destiné à être l’équivalent de [[Special:PrefixIndex]] ; pour cela, voyez [[Special:ApiHelp/query+allpages|action=query&list=allpages]] avec le paramètre apprefix. Le but de ce module est similaire à [[Special:ApiHelp/opensearch|action=opensearch]] : prendre l’entrée utilisateur et fournir les meilleurs titres s’en approchant. Selon le serveur du moteur de recherche, cela peut inclure corriger des fautes de frappe, éviter des redirections, ou d’autres heuristiques.", "apihelp-query+prefixsearch-param-search": "Chaîne de recherche.", "apihelp-query+prefixsearch-param-namespace": "Espaces de noms à rechercher.", "apihelp-query+prefixsearch-param-limit": "Nombre maximal de résultats à renvoyer.", "apihelp-query+prefixsearch-param-offset": "Nombre de résultats à sauter.", "apihelp-query+prefixsearch-example-simple": "Rechercher les titres de page commençant par meaning.", "apihelp-query+prefixsearch-param-profile": "Rechercher le profil à utiliser.", - "apihelp-query+protectedtitles-description": "Lister tous les titres protégés en création.", + "apihelp-query+protectedtitles-summary": "Lister tous les titres protégés en création.", "apihelp-query+protectedtitles-param-namespace": "Lister uniquement les titres dans ces espaces de nom.", "apihelp-query+protectedtitles-param-level": "Lister uniquement les titres avec ces niveaux de protection.", "apihelp-query+protectedtitles-param-limit": "Combien de pages renvoyer au total.", @@ -965,18 +955,18 @@ "apihelp-query+protectedtitles-paramvalue-prop-level": "Ajoute le niveau de protection.", "apihelp-query+protectedtitles-example-simple": "Lister les titres protégés", "apihelp-query+protectedtitles-example-generator": "Trouver les liens vers les titres protégés dans l’espace de noms principal.", - "apihelp-query+querypage-description": "Obtenir une liste fournie par une page spéciale basée sur QueryPage.", + "apihelp-query+querypage-summary": "Obtenir une liste fournie par une page spéciale basée sur QueryPage.", "apihelp-query+querypage-param-page": "Le nom de la page spéciale. Notez que ce nom est sensible à la casse.", "apihelp-query+querypage-param-limit": "Nombre de résultats à renvoyer.", "apihelp-query+querypage-example-ancientpages": "Renvoyer les résultats de [[Special:Ancientpages]].", - "apihelp-query+random-description": "Obtenir un ensemble de pages au hasard.\n\nLes pages sont listées dans un ordre prédéterminé, seul le point de départ est aléatoire. Par exemple, cela signifie que si la première page dans la liste est Accueil, la seconde sera toujours Liste des singes de fiction, la troisième Liste de personnes figurant sur les timbres de Vanuatu, etc.", + "apihelp-query+random-summary": "Récupèrer un ensemble de pages au hasard.", "apihelp-query+random-param-namespace": "Renvoyer seulement des pages de ces espaces de noms.", "apihelp-query+random-param-limit": "Limiter le nombre de pages aléatoires renvoyées.", "apihelp-query+random-param-redirect": "Utilisez $1filterredir=redirects au lieu de ce paramètre.", "apihelp-query+random-param-filterredir": "Comment filtrer les redirections.", "apihelp-query+random-example-simple": "Obtenir deux pages aléatoires de l’espace de noms principal.", "apihelp-query+random-example-generator": "Renvoyer les informations de la page sur deux pages au hasard de l’espace de noms principal.", - "apihelp-query+recentchanges-description": "Énumérer les modifications récentes.", + "apihelp-query+recentchanges-summary": "Énumérer les modifications récentes.", "apihelp-query+recentchanges-param-start": "L’horodatage auquel démarrer l’énumération.", "apihelp-query+recentchanges-param-end": "L’horodatage auquel arrêter l’énumération.", "apihelp-query+recentchanges-param-namespace": "Filtrer les modifications uniquement sur ces espaces de noms.", @@ -1006,7 +996,7 @@ "apihelp-query+recentchanges-param-generaterevisions": "Utilisé comme générateur, générer des IDs de révision plutôt que des titres.\nLes entrées de modification récentes sans IDs de révision associé (par ex. la plupart des entrées de journaux) ne généreront rien.", "apihelp-query+recentchanges-example-simple": "Lister les modifications récentes", "apihelp-query+recentchanges-example-generator": "Obtenir l’information de page sur les modifications récentes non patrouillées", - "apihelp-query+redirects-description": "Renvoie toutes les redirections vers les pages données.", + "apihelp-query+redirects-summary": "Renvoie toutes les redirections vers les pages données.", "apihelp-query+redirects-param-prop": "Quelles propriétés récupérer :", "apihelp-query+redirects-paramvalue-prop-pageid": "ID de page de chaque redirection.", "apihelp-query+redirects-paramvalue-prop-title": "Titre de chaque redirection.", @@ -1016,7 +1006,7 @@ "apihelp-query+redirects-param-show": "Afficher uniquement les éléments correspondant à ces critères :\n;fragment:Afficher uniquement les redirections avec un fragment.\n;!fragment:Afficher uniquement les redirections sans fragment.", "apihelp-query+redirects-example-simple": "Obtenir une liste des redirections vers [[Main Page]]", "apihelp-query+redirects-example-generator": "Obtenir des informations sur toutes les redirections vers [[Main Page]]", - "apihelp-query+revisions-description": "Obtenir des informations sur la révision.\n\nPeut être utilisé de différentes manières :\n# Obtenir des données sur un ensemble de pages (dernière révision), en mettant les titres ou les ids de page.\n# Obtenir les révisions d’une page donnée, en utilisant les titres ou les ids de page avec rvstart, rvend ou rvlimit.\n# Obtenir des données sur un ensemble de révisions en donnant leurs IDs avec revids.", + "apihelp-query+revisions-summary": "Récupèrer les informations de relecture.", "apihelp-query+revisions-paraminfo-singlepageonly": "Utilisable uniquement avec une seule page (mode #2).", "apihelp-query+revisions-param-startid": "Commencer l'énumération à partir de la date de cette revue. La revue doit exister, mais ne concerne pas forcément cette page.", "apihelp-query+revisions-param-endid": "Arrêter l’énumération à la date de cette revue. La revue doit exister mais ne concerne pas forcément cette page.", @@ -1055,7 +1045,7 @@ "apihelp-query+revisions+base-param-difftotext": "Texte auquel comparer chaque révision. Compare uniquement un nombre limité de révisions. Écrase $1diffto. Si $1section est positionné, seule cette section sera comparée avec ce texte.", "apihelp-query+revisions+base-param-difftotextpst": "Effectuer une transformation avant enregistrement sur le texte avant de le comparer. Valide uniquement quand c’est utilisé avec $1difftotext.", "apihelp-query+revisions+base-param-contentformat": "Format de sérialisation utilisé pour $1difftotext et attendu pour la sortie du contenu.", - "apihelp-query+search-description": "Effectuer une recherche en texte intégral.", + "apihelp-query+search-summary": "Effectuer une recherche en texte intégral.", "apihelp-query+search-param-search": "Rechercher les titres de page ou le contenu correspondant à cette valeur. Vous pouvez utiliser la chaîne de recherche pour invoquer des fonctionnalités de recherche spéciales, selon ce que le serveur de recherche du wiki implémente.", "apihelp-query+search-param-namespace": "Rechercher uniquement dans ces espaces de noms.", "apihelp-query+search-param-what": "Quel type de recherche effectuer.", @@ -1082,7 +1072,7 @@ "apihelp-query+search-example-simple": "Rechercher meaning.", "apihelp-query+search-example-text": "Rechercher des textes pour meaning.", "apihelp-query+search-example-generator": "Obtenir les informations sur les pages renvoyées par une recherche de meaning.", - "apihelp-query+siteinfo-description": "Renvoyer les informations générales sur le site.", + "apihelp-query+siteinfo-summary": "Renvoyer les informations générales sur le site.", "apihelp-query+siteinfo-param-prop": "Quelles informations obtenir :", "apihelp-query+siteinfo-paramvalue-prop-general": "Information globale du système.", "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Liste des espaces de noms déclarés avec leur nom canonique.", @@ -1115,12 +1105,12 @@ "apihelp-query+siteinfo-example-simple": "Extraire les informations du site.", "apihelp-query+siteinfo-example-interwiki": "Extraire une liste des préfixes interwiki locaux.", "apihelp-query+siteinfo-example-replag": "Vérifier la latence de réplication actuelle.", - "apihelp-query+stashimageinfo-description": "Renvoie les informations de fichier des fichiers mis en réserve.", + "apihelp-query+stashimageinfo-summary": "Renvoie les informations de fichier des fichiers mis en réserve.", "apihelp-query+stashimageinfo-param-filekey": "Clé qui identifie un téléversement précédent qui a été temporairement mis en réserve.", "apihelp-query+stashimageinfo-param-sessionkey": "Alias pour $1filekey, pour la compatibilité ascendante.", "apihelp-query+stashimageinfo-example-simple": "Renvoie les informations sur un fichier mis en réserve.", "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis de côté.", - "apihelp-query+tags-description": "Lister les balises de modification.", + "apihelp-query+tags-summary": "Lister les balises de modification.", "apihelp-query+tags-param-limit": "Le nombre maximal de balises à lister.", "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :", "apihelp-query+tags-paramvalue-prop-name": "Ajoute le nom de la balise.", @@ -1131,7 +1121,7 @@ "apihelp-query+tags-paramvalue-prop-source": "Retourne les sources de la balise, ce qui comprend extension pour les balises définies par une extension et manual pour les balises pouvant être appliquées manuellement par les utilisateurs.", "apihelp-query+tags-paramvalue-prop-active": "Si la balise est encore appliquée.", "apihelp-query+tags-example-simple": "Lister les balises disponibles.", - "apihelp-query+templates-description": "Renvoie toutes les pages incluses dans les pages fournies.", + "apihelp-query+templates-summary": "Renvoie toutes les pages incluses dans les pages fournies.", "apihelp-query+templates-param-namespace": "Afficher les modèles uniquement dans ces espaces de noms.", "apihelp-query+templates-param-limit": "Combien de modèles renvoyer.", "apihelp-query+templates-param-templates": "Lister uniquement ces modèles. Utile pour vérifier si une certaine page utilise un modèle donné.", @@ -1139,11 +1129,11 @@ "apihelp-query+templates-example-simple": "Obtenir les modèles utilisés sur la page Main Page.", "apihelp-query+templates-example-generator": "Obtenir des informations sur les pages modèle utilisé sur Main Page.", "apihelp-query+templates-example-namespaces": "Obtenir les pages des espaces de noms {{ns:user}} et {{ns:template}} qui sont inclues dans la page Main Page.", - "apihelp-query+tokens-description": "Récupère les jetons pour les actions de modification de données.", + "apihelp-query+tokens-summary": "Récupère les jetons pour les actions de modification de données.", "apihelp-query+tokens-param-type": "Types de jeton à demander.", "apihelp-query+tokens-example-simple": "Récupérer un jeton csrf (par défaut).", "apihelp-query+tokens-example-types": "Récupérer un jeton de suivi et un de patrouille.", - "apihelp-query+transcludedin-description": "Trouver toutes les pages qui incluent les pages données.", + "apihelp-query+transcludedin-summary": "Trouver toutes les pages qui incluent les pages données.", "apihelp-query+transcludedin-param-prop": "Quelles propriétés obtenir :", "apihelp-query+transcludedin-paramvalue-prop-pageid": "ID de page de chaque page.", "apihelp-query+transcludedin-paramvalue-prop-title": "Titre de chaque page.", @@ -1153,7 +1143,7 @@ "apihelp-query+transcludedin-param-show": "Afficher uniquement les éléments qui correspondent à ces critères:\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.", "apihelp-query+transcludedin-example-simple": "Obtenir une liste des pages incluant Main Page.", "apihelp-query+transcludedin-example-generator": "Obtenir des informations sur les pages incluant Main Page.", - "apihelp-query+usercontribs-description": "Obtenir toutes les modifications d'un utilisateur.", + "apihelp-query+usercontribs-summary": "Obtenir toutes les modifications d'un utilisateur.", "apihelp-query+usercontribs-param-limit": "Le nombre maximal de contributions à renvoyer.", "apihelp-query+usercontribs-param-start": "L’horodatage auquel démarrer le retour.", "apihelp-query+usercontribs-param-end": "L’horodatage auquel arrêter le retour.", @@ -1177,7 +1167,7 @@ "apihelp-query+usercontribs-param-toponly": "Lister uniquement les modifications de la dernière révision.", "apihelp-query+usercontribs-example-user": "Afficher les contributions de l'utilisateur Exemple.", "apihelp-query+usercontribs-example-ipprefix": "Afficher les contributions de toutes les adresses IP avec le préfixe 192.0.2..", - "apihelp-query+userinfo-description": "Obtenir des informations sur l’utilisateur courant.", + "apihelp-query+userinfo-summary": "Obtenir des informations sur l’utilisateur courant.", "apihelp-query+userinfo-param-prop": "Quelles informations inclure :", "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Marque si l’utilisateur actuel est bloqué, par qui, et pour quelle raison.", "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Ajoute une balise messages si l’utilisateur actuel a des messages en cours.", @@ -1199,7 +1189,7 @@ "apihelp-query+userinfo-param-attachedwiki": "Avec $1prop=centralids, indiquer si l’utilisateur est attaché au wiki identifié par cet ID.", "apihelp-query+userinfo-example-simple": "Obtenir des informations sur l’utilisateur actuel.", "apihelp-query+userinfo-example-data": "Obtenir des informations supplémentaires sur l’utilisateur actuel.", - "apihelp-query+users-description": "Obtenir des informations sur une liste d’utilisateurs", + "apihelp-query+users-summary": "Obtenir des informations sur une liste d’utilisateurs", "apihelp-query+users-param-prop": "Quelles informations inclure :", "apihelp-query+users-paramvalue-prop-blockinfo": "Marque si l’utilisateur est bloqué, par qui, et pour quelle raison.", "apihelp-query+users-paramvalue-prop-groups": "Liste tous les groupes auxquels appartient chaque utilisateur.", @@ -1217,7 +1207,7 @@ "apihelp-query+users-param-userids": "Une liste d’ID utilisateur pour lesquels obtenir des informations.", "apihelp-query+users-param-token": "Utiliser [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] à la place.", "apihelp-query+users-example-simple": "Renvoyer des informations pour l'utilisateur Example.", - "apihelp-query+watchlist-description": "Obtenir les modifications récentes des pages de la liste de suivi de l’utilisateur actuel.", + "apihelp-query+watchlist-summary": "Obtenir les modifications récentes des pages de la liste de suivi de l’utilisateur actuel.", "apihelp-query+watchlist-param-allrev": "Inclure les multiples révisions de la même page dans l’intervalle de temps fourni.", "apihelp-query+watchlist-param-start": "L’horodatage auquel démarrer l’énumération.", "apihelp-query+watchlist-param-end": "L’horodatage auquel arrêter l’énumération.", @@ -1253,7 +1243,7 @@ "apihelp-query+watchlist-example-generator": "Chercher l’information de la page sur les pages récemment modifiées de la liste de suivi de l’utilisateur actuel", "apihelp-query+watchlist-example-generator-rev": "Chercher l’information de la révision pour les modifications récentes des pages de la liste de suivi de l’utilisateur actuel.", "apihelp-query+watchlist-example-wlowner": "Lister la révision de tête des pages récemment modifiées de la liste de suivi de l'utilisateur Exemple.", - "apihelp-query+watchlistraw-description": "Obtenir toutes les pages de la liste de suivi de l’utilisateur actuel.", + "apihelp-query+watchlistraw-summary": "Obtenir toutes les pages de la liste de suivi de l’utilisateur actuel.", "apihelp-query+watchlistraw-param-namespace": "Lister uniquement les pages dans les espaces de noms fournis.", "apihelp-query+watchlistraw-param-limit": "Combien de résultats renvoyer au total par requête.", "apihelp-query+watchlistraw-param-prop": "Quelles propriétés supplémentaires obtenir :", @@ -1266,15 +1256,14 @@ "apihelp-query+watchlistraw-param-totitle": "Terminer l'énumération avec ce Titre (inclure le préfixe d'espace de noms) :", "apihelp-query+watchlistraw-example-simple": "Lister les pages dans la liste de suivi de l’utilisateur actuel.", "apihelp-query+watchlistraw-example-generator": "Chercher l’information sur les pages de la liste de suivi de l’utilisateur actuel.", - "apihelp-removeauthenticationdata-description": "Supprimer les données d’authentification pour l’utilisateur actuel.", + "apihelp-removeauthenticationdata-summary": "Supprimer les données d’authentification pour l’utilisateur actuel.", "apihelp-removeauthenticationdata-example-simple": "Tentative de suppression des données de l’utilisateur pour FooAuthenticationRequest.", - "apihelp-resetpassword-description": "Envoyer un courriel de réinitialisation du mot de passe à un utilisateur.", - "apihelp-resetpassword-description-noroutes": "Aucun chemin pour réinitialiser le mot de passe n’est disponible.\n\nActiver les chemins dans [[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]] pour utiliser ce module.", + "apihelp-resetpassword-summary": "Envoyer un courriel de réinitialisation du mot de passe à un utilisateur.", "apihelp-resetpassword-param-user": "Utilisateur ayant été réinitialisé.", "apihelp-resetpassword-param-email": "Adresse courriel de l’utilisateur ayant été réinitialisé.", "apihelp-resetpassword-example-user": "Envoyer un courriel de réinitialisation du mot de passe à l’utilisateur Exemple.", "apihelp-resetpassword-example-email": "Envoyer un courriel pour la réinitialisation de mot de passe à tous les utilisateurs avec l’adresse user@example.com.", - "apihelp-revisiondelete-description": "Supprimer et rétablir des révisions.", + "apihelp-revisiondelete-summary": "Supprimer et rétablir des révisions.", "apihelp-revisiondelete-param-type": "Type de suppression de révision en cours de traitement.", "apihelp-revisiondelete-param-target": "Titre de page pour la suppression de révision, s’il est nécessaire pour le type.", "apihelp-revisiondelete-param-ids": "Identifiants pour les révisions à supprimer.", @@ -1285,7 +1274,7 @@ "apihelp-revisiondelete-param-tags": "Balises à appliquer à l’entrée dans le journal de suppression.", "apihelp-revisiondelete-example-revision": "Masquer le contenu de la révision 12345 de la page Main Page.", "apihelp-revisiondelete-example-log": "Masquer toutes les données de l’entrée de journal 67890 avec le motif Violation de Biographie de Personne Vivante.", - "apihelp-rollback-description": "Annuler la dernière modification de la page.\n\nSi le dernier utilisateur à avoir modifié la page a fait plusieurs modifications sur une ligne, elles seront toutes annulées.", + "apihelp-rollback-summary": "Annuler les dernières modifications de la page.", "apihelp-rollback-param-title": "Titre de la page à restaurer. Impossible à utiliser avec $1pageid.", "apihelp-rollback-param-pageid": "ID de la page à restaurer. Impossible à utiliser avec $1title.", "apihelp-rollback-param-tags": "Balises à appliquer à la révocation.", @@ -1295,9 +1284,8 @@ "apihelp-rollback-param-watchlist": "Ajouter ou supprimer la page de la liste de suivi de l’utilisateur actuel sans condition, utiliser les préférences ou ne pas modifier le suivi.", "apihelp-rollback-example-simple": "Annuler les dernières modifications à Main Page par l’utilisateur Example.", "apihelp-rollback-example-summary": "Annuler les dernières modifications de la page Main Page par l’utilisateur à l’adresse IP 192.0.2.5 avec le résumé Annulation de vandalisme, et marquer ces modifications et l’annulation comme modifications de robots.", - "apihelp-rsd-description": "Exporter un schéma RSD (Découverte Très Simple).", + "apihelp-rsd-summary": "Exporter un schéma RSD (Découverte Très Simple).", "apihelp-rsd-example-simple": "Exporter le schéma RSD", - "apihelp-setnotificationtimestamp-description": "Mettre à jour l’horodatage de notification pour les pages suivies.\n\nCela affecte la mise en évidence des pages modifiées dans la liste de suivi et l’historique, et l’envoi de courriel quand la préférence « {{int:tog-enotifwatchlistpages}} » est activée.", "apihelp-setnotificationtimestamp-param-entirewatchlist": "Travailler sur toutes les pages suivies.", "apihelp-setnotificationtimestamp-param-timestamp": "Horodatage auquel dater la notification.", "apihelp-setnotificationtimestamp-param-torevid": "Révision pour laquelle fixer l’horodatage de notification (une page uniquement).", @@ -1306,8 +1294,8 @@ "apihelp-setnotificationtimestamp-example-page": "Réinitialiser l’état de notification pour la Page principale.", "apihelp-setnotificationtimestamp-example-pagetimestamp": "Fixer l’horodatage de notification pour Page principale afin que toutes les modifications depuis le 1 janvier 2012 soient non vues", "apihelp-setnotificationtimestamp-example-allpages": "Réinitialiser l’état de notification sur les pages dans l’espace de noms {{ns:user}}.", - "apihelp-setpagelanguage-description": "Modifier la langue d’une page.", - "apihelp-setpagelanguage-description-disabled": "Il n’est pas possible de modifier la langue d’une page sur ce wiki.\n\nActiver [[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]] pour utiliser cette action.", + "apihelp-setpagelanguage-summary": "Modifier la langue d’une page.", + "apihelp-setpagelanguage-extended-description-disabled": "Il n’est pas possible de modifier la langue d’une page sur ce wiki.\n\nActiver [[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]] pour utiliser cette action.", "apihelp-setpagelanguage-param-title": "Titre de la page dont vous souhaitez modifier la langue. Ne peut pas être utilisé avec $1pageid.", "apihelp-setpagelanguage-param-pageid": "Identifiant (ID) de la page dont vous souhaitez modifier la langue. Ne peut être utilisé avec $1title.", "apihelp-setpagelanguage-param-lang": "Code de langue vers lequel la page doit être changée. Utiliser defaut pour réinitialiser la page sur la langue par défaut du contenu du wiki.", @@ -1315,7 +1303,7 @@ "apihelp-setpagelanguage-param-tags": "Modifier les balises à appliquer à l'entrée du journal résultant de cette action.", "apihelp-setpagelanguage-example-language": "Changer la langue de la page principale en basque.", "apihelp-setpagelanguage-example-default": "Remplacer la langue de la page ayant l'ID 123 par la langue par défaut du contenu du wiki.", - "apihelp-stashedit-description": "Préparer une modification dans le cache partagé.\n\nCeci a pour but d’être utilisé via AJAX depuis le formulaire d’édition pour améliorer la performance de la sauvegarde de la page.", + "apihelp-stashedit-summary": "Préparer des modifications dans le cache partagé.", "apihelp-stashedit-param-title": "Titre de la page en cours de modification.", "apihelp-stashedit-param-section": "Numéro de section. 0 pour la section du haut, new pour une nouvelle section.", "apihelp-stashedit-param-sectiontitle": "Le titre pour une nouvelle section.", @@ -1325,7 +1313,7 @@ "apihelp-stashedit-param-contentformat": "Format de sérialisation de contenu utilisé pour le texte saisi.", "apihelp-stashedit-param-baserevid": "ID de révision de la révision de base.", "apihelp-stashedit-param-summary": "Résumé du changement", - "apihelp-tag-description": "Ajouter ou enlever des balises de modification aux révisions ou ou aux entrées de journal individuelles.", + "apihelp-tag-summary": "Ajouter ou enlever des balises de modification aux révisions ou ou aux entrées de journal individuelles.", "apihelp-tag-param-rcid": "Un ou plus IDs de modification récente à partir desquels ajouter ou supprimer la balise.", "apihelp-tag-param-revid": "Un ou plusieurs IDs de révision à partir desquels ajouter ou supprimer la balise.", "apihelp-tag-param-logid": "Un ou plusieurs IDs d’entrée de journal à partir desquels ajouter ou supprimer la balise.", @@ -1335,11 +1323,11 @@ "apihelp-tag-param-tags": "Balises à appliquer à l’entrée de journal qui sera créée en résultat de cette action.", "apihelp-tag-example-rev": "Ajoute la balise vandalism à partir de l’ID de révision 123 sans indiquer de motif", "apihelp-tag-example-log": "Supprimer la balise spam à partir de l’ID d’entrée de journal 123 avec le motif Wrongly applied", - "apihelp-tokens-description": "Obtenir les jetons pour les actions modifiant les données.\n\nCe module est désuet, remplacé par [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].", + "apihelp-tokens-summary": "Obtenir des jetons pour des actions de modification des données.", "apihelp-tokens-param-type": "Types de jeton à demander.", "apihelp-tokens-example-edit": "Récupérer un jeton de modification (par défaut).", "apihelp-tokens-example-emailmove": "Récupérer un jeton de courriel et un jeton de déplacement.", - "apihelp-unblock-description": "Débloquer un utilisateur.", + "apihelp-unblock-summary": "Débloquer un utilisateur.", "apihelp-unblock-param-id": "ID du blocage à lever (obtenu via list=blocks). Impossible à utiliser avec $1user ou $1userid.", "apihelp-unblock-param-user": "Nom d’utilisateur, adresse IP ou plage d’adresses IP à débloquer. Impossible à utiliser en même temps que $1id ou $1userid.", "apihelp-unblock-param-userid": "ID de l'utilisateur à débloquer. Ne peut être utilisé avec $1id ou $1user.", @@ -1347,7 +1335,7 @@ "apihelp-unblock-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de blocage.", "apihelp-unblock-example-id": "Lever le blocage d’ID #105.", "apihelp-unblock-example-user": "Débloquer l’utilisateur Bob avec le motif Désolé Bob.", - "apihelp-undelete-description": "Restaurer les révisions d’une page supprimée.\n\nUne liste des révisions supprimées (avec les horodatages) peut être récupérée via [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]], et une liste d’IDs de fichier supprimé peut être récupérée via [[Special:ApiHelp/query+filearchive|list=filearchive]].", + "apihelp-undelete-summary": "Restituer les versions d'une page supprimée.", "apihelp-undelete-param-title": "Titre de la page à restaurer.", "apihelp-undelete-param-reason": "Motif de restauration.", "apihelp-undelete-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de suppression.", @@ -1356,9 +1344,8 @@ "apihelp-undelete-param-watchlist": "Ajouter ou supprimer la page de la liste de suivi de l’utilisateur actuel sans condition, utiliser les préférences ou ne pas modifier le suivi.", "apihelp-undelete-example-page": "Annuler la suppression de la page Main Page.", "apihelp-undelete-example-revisions": "Annuler la suppression de deux révisions de la page Main Page.", - "apihelp-unlinkaccount-description": "Supprimer un compte tiers lié de l’utilisateur actuel.", + "apihelp-unlinkaccount-summary": "Supprimer un compte tiers lié de l’utilisateur actuel.", "apihelp-unlinkaccount-example-simple": "Essayer de supprimer le lien de l’utilisateur actuel pour le fournisseur associé avec FooAuthenticationRequest.", - "apihelp-upload-description": "Téléverser un fichier, ou obtenir l’état des téléversements en cours.\n\nPlusieurs méthodes sont disponibles :\n* Téléverser directement le contenu du fichier, en utilisant le paramètre $1file.\n* Téléverser le fichier par morceaux, en utilisant les paramètres $1filesize, $1chunk, and $1offset.\n* Pour que le serveur MédiaWiki cherche un fichier depuis une URL, utilisez le paramètre $1url.\n* Terminer un téléversement précédent qui a échoué à cause d’avertissements, en utilisant le paramètre $1filekey.\nNoter que le POST HTTP doit être fait comme un téléversement de fichier (par ex. en utilisant multipart/form-data) en envoyant le multipart/form-data.", "apihelp-upload-param-filename": "Nom de fichier cible.", "apihelp-upload-param-comment": "Téléverser le commentaire. Utilisé aussi comme texte de la page initiale pour les nouveaux fichiers si $1text n’est pas spécifié.", "apihelp-upload-param-tags": "Modifier les balises à appliquer à l’entrée du journal de téléversement et à la révision de la page du fichier.", @@ -1378,7 +1365,7 @@ "apihelp-upload-param-checkstatus": "Récupérer uniquement l’état de téléversement pour la clé de fichier donnée.", "apihelp-upload-example-url": "Téléverser depuis une URL", "apihelp-upload-example-filekey": "Terminer un téléversement qui a échoué à cause d’avertissements", - "apihelp-userrights-description": "Modifier l’appartenance d’un utilisateur à un groupe.", + "apihelp-userrights-summary": "Modifier l’appartenance d’un utilisateur à un groupe.", "apihelp-userrights-param-user": "Nom d’utilisateur.", "apihelp-userrights-param-userid": "ID de l’utilisateur.", "apihelp-userrights-param-add": "Ajouter l’utilisateur à ces groupes, ou s’ils sont déjà membres, mettre à jour la date d’expiration de leur appartenance à ce groupe.", @@ -1389,14 +1376,14 @@ "apihelp-userrights-example-user": "Ajouter l’utilisateur FooBot au groupe bot, et le supprimer des groupes sysop et bureaucrat.", "apihelp-userrights-example-userid": "Ajouter l’utilisateur d’ID 123 au groupe robot, et le supprimer des groupes sysop et bureaucrate.", "apihelp-userrights-example-expiry": "Ajouter l'utilisateur SometimeSysop au groupe sysop pour 1 mois.", - "apihelp-validatepassword-description": "Valider un mot de passe en suivant les règles des mots de passe du wiki.\n\nLa validation est Good si le mot de passe est acceptable, Change s'il peut être utilisé pour se connecter et doit être changé, ou Invalid s'il n'est pas utilisable.", + "apihelp-validatepassword-summary": "Valider un mot de passe conformément aux règles concernant les mots de passe du wiki.", "apihelp-validatepassword-param-password": "Mot de passe à valider.", "apihelp-validatepassword-param-user": "Nom de l'utilisateur, pour tester la création de compte. L'utilisateur ne doit pas déja exister.", "apihelp-validatepassword-param-email": "Adresse courriel, pour tester la création de compte.", "apihelp-validatepassword-param-realname": "Vrai nom, pour tester la création de compte.", "apihelp-validatepassword-example-1": "Valider le mot de passe foobar pour l'utilisateur actuel.", "apihelp-validatepassword-example-2": "Valider le mot de passe qwerty pour la création de l'utilisateur Example.", - "apihelp-watch-description": "Ajouter ou supprimer des pages de la liste de suivi de l’utilisateur actuel.", + "apihelp-watch-summary": "Ajouter ou supprimer des pages de la liste de suivi de l’utilisateur actuel.", "apihelp-watch-param-title": "La page à (ne plus) suivre. Utiliser plutôt $1titles.", "apihelp-watch-param-unwatch": "Si défini, la page ne sera plus suivie plutôt que suivie.", "apihelp-watch-example-watch": "Suivre la page Main Page.", @@ -1404,21 +1391,21 @@ "apihelp-watch-example-generator": "Suivre les quelques premières pages de l’espace de nom principal", "apihelp-format-example-generic": "Renvoyer le résultat de la requête dans le format $1.", "apihelp-format-param-wrappedhtml": "Renvoyer le HTML avec une jolie mise en forme et les modules ResourceLoader associés comme un objet JSON.", - "apihelp-json-description": "Extraire les données au format JSON.", + "apihelp-json-summary": "Extraire les données au format JSON.", "apihelp-json-param-callback": "Si spécifié, inclut la sortie dans l’appel d’une fonction fournie. Pour plus de sûreté, toutes les données spécifiques à l’utilisateur seront restreintes.", "apihelp-json-param-utf8": "Si spécifié, encode la plupart (mais pas tous) des caractères non ASCII en URF-8 au lieu de les remplacer par leur séquence d’échappement hexadécimale. Valeur par défaut quand formatversion ne vaut pas 1.", "apihelp-json-param-ascii": "Si spécifié, encode toutes ses séquences d’échappement non ASCII utilisant l’hexadécimal. Valeur par défaut quand formatversion vaut 1.", "apihelp-json-param-formatversion": "Mise en forme de sortie :\n;1:Format rétro-compatible (booléens de style XML, clés * pour les nœuds de contenu, etc.).\n;2:Format moderne expérimental. Des détails peuvent changer !\n;latest:Utilise le dernier format (actuellement 2), peut changer sans avertissement.", - "apihelp-jsonfm-description": "Extraire les données au format JSON (affiché proprement en HTML).", - "apihelp-none-description": "Ne rien extraire.", - "apihelp-php-description": "Extraire les données au format sérialisé de PHP.", + "apihelp-jsonfm-summary": "Extraire les données au format JSON (affiché proprement en HTML).", + "apihelp-none-summary": "Ne rien extraire.", + "apihelp-php-summary": "Extraire les données au format sérialisé de PHP.", "apihelp-php-param-formatversion": "Mise en forme de la sortie :\n;1:Format rétro-compatible (bool&ens de style XML, clés * pour les nœuds de contenu, etc.).\n;2:Format moderne expérimental. Des détails peuvent changer !\n;latest:Utilise le dernier format (actuellement 2), peut changer sans avertissement.", - "apihelp-phpfm-description": "Extraire les données au format sérialisé de PHP (affiché proprement en HTML).", - "apihelp-rawfm-description": "Extraire les données, y compris les éléments de débogage, au format JSON (affiché proprement en HTML).", - "apihelp-xml-description": "Extraire les données au format XML.", + "apihelp-phpfm-summary": "Extraire les données au format sérialisé de PHP (affiché proprement en HTML).", + "apihelp-rawfm-summary": "Extraire les données, y compris les éléments de débogage, au format JSON (affiché proprement en HTML).", + "apihelp-xml-summary": "Extraire les données au format XML.", "apihelp-xml-param-xslt": "Si spécifié, ajoute la page nommée comme une feuille de style XSL. La valeur doit être un titre dans l’espace de noms {{ns:MediaWiki}} se terminant par .xsl.", "apihelp-xml-param-includexmlnamespace": "Si spécifié, ajoute un espace de noms XML.", - "apihelp-xmlfm-description": "Extraire les données au format XML (affiché proprement en HTML).", + "apihelp-xmlfm-summary": "Extraire les données au format XML (affiché proprement en HTML).", "api-format-title": "Résultat de l’API de MediaWiki", "api-format-prettyprint-header": "Voici la représentation HTML du format $1. HTML est utile pour le débogage, mais inapproprié pour être utilisé dans une application.\n\nSpécifiez le paramètre format pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez format=$2.\n\nVoyez la [[mw:Special:MyLanguage/API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.", "api-format-prettyprint-header-only-html": "Ceci est une représentation HTML à des fins de débogage, et n’est pas approprié pour une utilisation applicative.\n\nVoir la [[mw:Special:MyLanguage/API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.", @@ -1437,6 +1424,7 @@ "api-help-title": "Aide de l’API de MediaWiki", "api-help-lead": "Ceci est une page d’aide de l’API de MediaWiki générée automatiquement.\n\nDocumentation et exemples : https://www.mediawiki.org/wiki/API", "api-help-main-header": "Module principal", + "api-help-undocumented-module": "Aucune documentation pour le module $1.", "api-help-flag-deprecated": "Ce module est désuet.", "api-help-flag-internal": "Ce module est interne ou instable. Son fonctionnement peut être modifié sans préavis.", "api-help-flag-readrights": "Ce module nécessite des droits de lecture.", diff --git a/includes/api/i18n/pl.json b/includes/api/i18n/pl.json index 3f5d531f8f..f4659beaac 100644 --- a/includes/api/i18n/pl.json +++ b/includes/api/i18n/pl.json @@ -378,6 +378,7 @@ "apihelp-query+blocks-paramvalue-prop-reason": "Dodaje powód zablokowania.", "apihelp-query+blocks-paramvalue-prop-range": "Dodaje zakres adresów IP, na który zastosowano blokadę.", "apihelp-query+blocks-example-simple": "Listuj blokady.", + "apihelp-query+categories-summary": "Lista kategorii, do których należą strony", "apihelp-query+categories-paramvalue-prop-timestamp": "Dodaje znacznik czasu dodania kategorii.", "apihelp-query+categories-param-limit": "Liczba kategorii do zwrócenia.", "apihelp-query+categoryinfo-summary": "Zwraca informacje o danych kategoriach.", @@ -589,6 +590,7 @@ "api-help-title": "Pomoc MediaWiki API", "api-help-lead": "To jest automatycznie wygenerowana strona dokumentacji MediaWiki API.\nDokumentacja i przykłady: https://www.mediawiki.org/wiki/API", "api-help-main-header": "Moduł główny", + "api-help-undocumented-module": "Brak dokumentacji dla modułu $1.", "api-help-flag-deprecated": "Ten moduł jest przestarzały.", "api-help-flag-internal": "Ten moduł jest wewnętrzny lub niestabilny. Jego działanie może się zmienić bez uprzedzenia.", "api-help-flag-readrights": "Ten moduł wymaga praw odczytu.", diff --git a/includes/cache/BacklinkCache.php b/includes/cache/BacklinkCache.php index 3ee6330019..11f3c2bb42 100644 --- a/includes/cache/BacklinkCache.php +++ b/includes/cache/BacklinkCache.php @@ -20,7 +20,6 @@ * * @file * @author Tim Starling - * @author Aaron Schulz * @copyright © 2009, Tim Starling, Domas Mituzas * @copyright © 2010, Max Sem * @copyright © 2011, Antoine Musso diff --git a/includes/changes/EnhancedChangesList.php b/includes/changes/EnhancedChangesList.php index cbbbfebc85..64d4aa79e4 100644 --- a/includes/changes/EnhancedChangesList.php +++ b/includes/changes/EnhancedChangesList.php @@ -685,7 +685,7 @@ class EnhancedChangesList extends ChangesList { } $attribs = $data['attribs']; unset( $data['attribs'] ); - $attribs = wfArrayFilterByKey( $attribs, function( $key ) { + $attribs = wfArrayFilterByKey( $attribs, function ( $key ) { return $key === 'class' || Sanitizer::isReservedDataAttribute( $key ); } ); diff --git a/includes/config/EtcdConfig.php b/includes/config/EtcdConfig.php index ae3df4996f..c57eba7ceb 100644 --- a/includes/config/EtcdConfig.php +++ b/includes/config/EtcdConfig.php @@ -1,7 +1,5 @@ newTablePrefix ); $newTableName = $this->db->tableName( $tbl, 'raw' ); + // Postgres: Temp tables are automatically deleted upon end of session + // Same Temp table name hides existing table for current session if ( $this->dropCurrentTables - && !in_array( $this->db->getType(), [ 'postgres', 'oracle' ] ) + && !in_array( $this->db->getType(), [ 'oracle' ] ) ) { if ( $oldTableName === $newTableName ) { // Last ditch check to avoid data loss diff --git a/includes/debug/logger/LegacyLogger.php b/includes/debug/logger/LegacyLogger.php index baf4637e83..6359509088 100644 --- a/includes/debug/logger/LegacyLogger.php +++ b/includes/debug/logger/LegacyLogger.php @@ -43,8 +43,7 @@ use UDPTransport; * * @see \MediaWiki\Logger\LoggerFactory * @since 1.25 - * @author Bryan Davis - * @copyright © 2014 Bryan Davis and Wikimedia Foundation. + * @copyright © 2014 Wikimedia Foundation and contributors */ class LegacyLogger extends AbstractLogger { diff --git a/includes/debug/logger/LegacySpi.php b/includes/debug/logger/LegacySpi.php index 4cf8313dc1..8e750cab25 100644 --- a/includes/debug/logger/LegacySpi.php +++ b/includes/debug/logger/LegacySpi.php @@ -32,8 +32,7 @@ namespace MediaWiki\Logger; * * @see \MediaWiki\Logger\LoggerFactory * @since 1.25 - * @author Bryan Davis - * @copyright © 2014 Bryan Davis and Wikimedia Foundation. + * @copyright © 2014 Wikimedia Foundation and contributors */ class LegacySpi implements Spi { diff --git a/includes/debug/logger/LoggerFactory.php b/includes/debug/logger/LoggerFactory.php index ce92dbd508..c183ff1538 100644 --- a/includes/debug/logger/LoggerFactory.php +++ b/includes/debug/logger/LoggerFactory.php @@ -40,8 +40,7 @@ use ObjectFactory; * * @see \MediaWiki\Logger\Spi * @since 1.25 - * @author Bryan Davis - * @copyright © 2014 Bryan Davis and Wikimedia Foundation. + * @copyright © 2014 Wikimedia Foundation and contributors */ class LoggerFactory { diff --git a/includes/debug/logger/MonologSpi.php b/includes/debug/logger/MonologSpi.php index f44ff1ceef..197b269b0a 100644 --- a/includes/debug/logger/MonologSpi.php +++ b/includes/debug/logger/MonologSpi.php @@ -110,8 +110,7 @@ use ObjectFactory; * * @see https://github.com/Seldaek/monolog * @since 1.25 - * @author Bryan Davis - * @copyright © 2014 Bryan Davis and Wikimedia Foundation. + * @copyright © 2014 Wikimedia Foundation and contributors */ class MonologSpi implements Spi { diff --git a/includes/debug/logger/NullSpi.php b/includes/debug/logger/NullSpi.php index 82308d0e9f..4862157d8c 100644 --- a/includes/debug/logger/NullSpi.php +++ b/includes/debug/logger/NullSpi.php @@ -34,8 +34,7 @@ use Psr\Log\NullLogger; * * @see \MediaWiki\Logger\LoggerFactory * @since 1.25 - * @author Bryan Davis - * @copyright © 2014 Bryan Davis and Wikimedia Foundation. + * @copyright © 2014 Wikimedia Foundation and contributors */ class NullSpi implements Spi { diff --git a/includes/debug/logger/Spi.php b/includes/debug/logger/Spi.php index 044789f201..8e0875f212 100644 --- a/includes/debug/logger/Spi.php +++ b/includes/debug/logger/Spi.php @@ -31,8 +31,7 @@ namespace MediaWiki\Logger; * * @see \MediaWiki\Logger\LoggerFactory * @since 1.25 - * @author Bryan Davis - * @copyright © 2014 Bryan Davis and Wikimedia Foundation. + * @copyright © 2014 Wikimedia Foundation and contributors */ interface Spi { diff --git a/includes/debug/logger/monolog/LegacyFormatter.php b/includes/debug/logger/monolog/LegacyFormatter.php index 9ec15cb85b..92624a0b3d 100644 --- a/includes/debug/logger/monolog/LegacyFormatter.php +++ b/includes/debug/logger/monolog/LegacyFormatter.php @@ -29,8 +29,7 @@ use Monolog\Formatter\NormalizerFormatter; * delegating the formatting to \MediaWiki\Logger\LegacyLogger. * * @since 1.25 - * @author Bryan Davis - * @copyright © 2013 Bryan Davis and Wikimedia Foundation. + * @copyright © 2013 Wikimedia Foundation and contributors * @see \MediaWiki\Logger\LegacyLogger */ class LegacyFormatter extends NormalizerFormatter { diff --git a/includes/debug/logger/monolog/LegacyHandler.php b/includes/debug/logger/monolog/LegacyHandler.php index d40414ce90..58fca8e9cc 100644 --- a/includes/debug/logger/monolog/LegacyHandler.php +++ b/includes/debug/logger/monolog/LegacyHandler.php @@ -44,8 +44,7 @@ use UnexpectedValueException; * replacement for \Monolog\Handler\StreamHandler. * * @since 1.25 - * @author Bryan Davis - * @copyright © 2013 Bryan Davis and Wikimedia Foundation. + * @copyright © 2013 Wikimedia Foundation and contributors */ class LegacyHandler extends AbstractProcessingHandler { diff --git a/includes/debug/logger/monolog/LineFormatter.php b/includes/debug/logger/monolog/LineFormatter.php index 0ad9b159fa..5a7ddb1ec5 100644 --- a/includes/debug/logger/monolog/LineFormatter.php +++ b/includes/debug/logger/monolog/LineFormatter.php @@ -37,8 +37,7 @@ use MWExceptionHandler; * will be used to redact the trace information. * * @since 1.26 - * @author Bryan Davis - * @copyright © 2015 Bryan Davis and Wikimedia Foundation. + * @copyright © 2015 Wikimedia Foundation and contributors */ class LineFormatter extends MonologLineFormatter { diff --git a/includes/debug/logger/monolog/SyslogHandler.php b/includes/debug/logger/monolog/SyslogHandler.php index 104ee5808f..780ea94d20 100644 --- a/includes/debug/logger/monolog/SyslogHandler.php +++ b/includes/debug/logger/monolog/SyslogHandler.php @@ -43,8 +43,7 @@ use Monolog\Logger; * default Logstash syslog input handler. * * @since 1.25 - * @author Bryan Davis - * @copyright © 2015 Bryan Davis and Wikimedia Foundation. + * @copyright © 2015 Wikimedia Foundation and contributors */ class SyslogHandler extends SyslogUdpHandler { diff --git a/includes/debug/logger/monolog/WikiProcessor.php b/includes/debug/logger/monolog/WikiProcessor.php index ad939a0932..5e32887a17 100644 --- a/includes/debug/logger/monolog/WikiProcessor.php +++ b/includes/debug/logger/monolog/WikiProcessor.php @@ -25,8 +25,7 @@ namespace MediaWiki\Logger\Monolog; * wiki / request ID, and MediaWiki version. * * @since 1.25 - * @author Bryan Davis - * @copyright © 2013 Bryan Davis and Wikimedia Foundation. + * @copyright © 2013 Wikimedia Foundation and contributors */ class WikiProcessor { diff --git a/includes/deferred/SearchUpdate.php b/includes/deferred/SearchUpdate.php index b9a259b1a4..c94ae2a772 100644 --- a/includes/deferred/SearchUpdate.php +++ b/includes/deferred/SearchUpdate.php @@ -124,7 +124,7 @@ class SearchUpdate implements DeferrableUpdate { # Language-specific strip/conversion $text = $wgContLang->normalizeForSearch( $text ); $se = $se ?: MediaWikiServices::getInstance()->newSearchEngine(); - $lc = $se->legalSearchChars() . '&#;'; + $lc = $se->legalSearchCharsForUpdate() . '&#;'; $text = preg_replace( "/<\\/?\\s*[A-Za-z][^>]*?>/", ' ', $wgContLang->lc( " " . $text . " " ) ); # Strip HTML markup @@ -207,7 +207,7 @@ class SearchUpdate implements DeferrableUpdate { $ns = $this->title->getNamespace(); $title = $this->title->getText(); - $lc = $search->legalSearchChars() . '&#;'; + $lc = $search->legalSearchCharsForUpdate() . '&#;'; $t = $wgContLang->normalizeForSearch( $title ); $t = preg_replace( "/[^{$lc}]+/", ' ', $t ); $t = $wgContLang->lc( $t ); diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index b0ab24488f..0b58cc1bc6 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -847,7 +847,7 @@ class DifferenceEngine extends ContextSource { * @return bool|string */ public function generateTextDiffBody( $otext, $ntext ) { - $diff = function() use ( $otext, $ntext ) { + $diff = function () use ( $otext, $ntext ) { $time = microtime( true ); $result = $this->textDiff( $otext, $ntext ); @@ -867,7 +867,7 @@ class DifferenceEngine extends ContextSource { * @param Status $status * @throws FatalError */ - $error = function( $status ) { + $error = function ( $status ) { throw new FatalError( $status->getWikiText() ); }; diff --git a/includes/exception/MWExceptionRenderer.php b/includes/exception/MWExceptionRenderer.php index 5162a1f7d5..579b6ca666 100644 --- a/includes/exception/MWExceptionRenderer.php +++ b/includes/exception/MWExceptionRenderer.php @@ -16,7 +16,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ use Wikimedia\Rdbms\DBConnectionError; diff --git a/includes/externalstore/ExternalStoreMedium.php b/includes/externalstore/ExternalStoreMedium.php index 260ee172b3..6cfa08389e 100644 --- a/includes/externalstore/ExternalStoreMedium.php +++ b/includes/externalstore/ExternalStoreMedium.php @@ -19,7 +19,6 @@ * * @file * @ingroup ExternalStorage - * @author Aaron Schulz */ /** diff --git a/includes/filebackend/FileBackendGroup.php b/includes/filebackend/FileBackendGroup.php index e65a5945ff..5d0da6d32a 100644 --- a/includes/filebackend/FileBackendGroup.php +++ b/includes/filebackend/FileBackendGroup.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ use \MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; diff --git a/includes/filebackend/filejournal/DBFileJournal.php b/includes/filebackend/filejournal/DBFileJournal.php index aa97c9a974..42b36ffe9c 100644 --- a/includes/filebackend/filejournal/DBFileJournal.php +++ b/includes/filebackend/filejournal/DBFileJournal.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileJournal - * @author Aaron Schulz */ use MediaWiki\MediaWikiServices; diff --git a/includes/filebackend/lockmanager/LockManagerGroup.php b/includes/filebackend/lockmanager/LockManagerGroup.php index 1e66e6e011..e6f992c321 100644 --- a/includes/filebackend/lockmanager/LockManagerGroup.php +++ b/includes/filebackend/lockmanager/LockManagerGroup.php @@ -27,7 +27,6 @@ use MediaWiki\Logger\LoggerFactory; * Class to handle file lock manager registration * * @ingroup LockManager - * @author Aaron Schulz * @since 1.19 */ class LockManagerGroup { diff --git a/includes/filerepo/FileBackendDBRepoWrapper.php b/includes/filerepo/FileBackendDBRepoWrapper.php index 23947048de..c37a942128 100644 --- a/includes/filerepo/FileBackendDBRepoWrapper.php +++ b/includes/filerepo/FileBackendDBRepoWrapper.php @@ -20,7 +20,6 @@ * @file * @ingroup FileRepo * @ingroup FileBackend - * @author Aaron Schulz */ use Wikimedia\Rdbms\DBConnRef; diff --git a/includes/filerepo/ForeignDBViaLBRepo.php b/includes/filerepo/ForeignDBViaLBRepo.php index f83fd1c813..bcd253fb4a 100644 --- a/includes/filerepo/ForeignDBViaLBRepo.php +++ b/includes/filerepo/ForeignDBViaLBRepo.php @@ -73,7 +73,7 @@ class ForeignDBViaLBRepo extends LocalRepo { * @return Closure */ protected function getDBFactory() { - return function( $index ) { + return function ( $index ) { return wfGetLB( $this->wiki )->getConnectionRef( $index, [], $this->wiki ); }; } diff --git a/includes/filerepo/LocalRepo.php b/includes/filerepo/LocalRepo.php index d91ab24e9c..20d51c254a 100644 --- a/includes/filerepo/LocalRepo.php +++ b/includes/filerepo/LocalRepo.php @@ -483,7 +483,7 @@ class LocalRepo extends FileRepo { * @return Closure */ protected function getDBFactory() { - return function( $index ) { + return function ( $index ) { return wfGetDB( $index ); }; } diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php index e1c2546d6b..a4122503a7 100644 --- a/includes/filerepo/file/LocalFile.php +++ b/includes/filerepo/file/LocalFile.php @@ -593,7 +593,7 @@ class LocalFile extends File { if ( $upgrade ) { $this->upgrading = true; // Defer updates unless in auto-commit CLI mode - DeferredUpdates::addCallableUpdate( function() { + DeferredUpdates::addCallableUpdate( function () { $this->upgrading = false; // avoid duplicate updates try { $this->upgradeRow(); diff --git a/includes/htmlform/HTMLFormElement.php b/includes/htmlform/HTMLFormElement.php index 089213cff5..10db90cca2 100644 --- a/includes/htmlform/HTMLFormElement.php +++ b/includes/htmlform/HTMLFormElement.php @@ -26,7 +26,7 @@ trait HTMLFormElement { // And it's not needed anymore after infusing, so we don't put it in JS config at all. $this->setAttributes( [ 'data-mw-modules' => implode( ',', $this->modules ) ] ); } - $this->registerConfigCallback( function( &$config ) { + $this->registerConfigCallback( function ( &$config ) { if ( $this->hideIf !== null ) { $config['hideIf'] = $this->hideIf; } diff --git a/includes/htmlform/fields/HTMLUsersMultiselectField.php b/includes/htmlform/fields/HTMLUsersMultiselectField.php index 8829f66877..53d1d06b23 100644 --- a/includes/htmlform/fields/HTMLUsersMultiselectField.php +++ b/includes/htmlform/fields/HTMLUsersMultiselectField.php @@ -23,7 +23,7 @@ class HTMLUsersMultiselectField extends HTMLUserTextField { $usersArray = explode( "\n", $request->getText( $this->mName ) ); // Remove empty lines - $usersArray = array_values( array_filter( $usersArray, function( $username ) { + $usersArray = array_values( array_filter( $usersArray, function ( $username ) { return trim( $username ) !== ''; } ) ); return $usersArray; diff --git a/includes/installer/DatabaseInstaller.php b/includes/installer/DatabaseInstaller.php index 61135736bd..6c56b3d430 100644 --- a/includes/installer/DatabaseInstaller.php +++ b/includes/installer/DatabaseInstaller.php @@ -336,7 +336,7 @@ abstract class DatabaseInstaller { $services = \MediaWiki\MediaWikiServices::getInstance(); $connection = $status->value; - $services->redefineService( 'DBLoadBalancerFactory', function() use ( $connection ) { + $services->redefineService( 'DBLoadBalancerFactory', function () use ( $connection ) { return LBFactorySingle::newFromConnection( $connection ); } ); } diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php index 70282248fb..168d7edbe1 100644 --- a/includes/installer/Installer.php +++ b/includes/installer/Installer.php @@ -384,7 +384,7 @@ abstract class Installer { // make sure we use the installer config as the main config $configRegistry = $baseConfig->get( 'ConfigRegistry' ); - $configRegistry['main'] = function() use ( $installerConfig ) { + $configRegistry['main'] = function () use ( $installerConfig ) { return $installerConfig; }; diff --git a/includes/jobqueue/JobQueue.php b/includes/jobqueue/JobQueue.php index 9701dd9929..d20a233ee2 100644 --- a/includes/jobqueue/JobQueue.php +++ b/includes/jobqueue/JobQueue.php @@ -19,7 +19,6 @@ * * @file * @defgroup JobQueue JobQueue - * @author Aaron Schulz */ use MediaWiki\MediaWikiServices; diff --git a/includes/jobqueue/JobQueueDB.php b/includes/jobqueue/JobQueueDB.php index 9b9928d1f3..cefe74df18 100644 --- a/includes/jobqueue/JobQueueDB.php +++ b/includes/jobqueue/JobQueueDB.php @@ -18,7 +18,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\DBConnRef; diff --git a/includes/jobqueue/JobQueueFederated.php b/includes/jobqueue/JobQueueFederated.php index bd832dbcd6..7fdd617ab3 100644 --- a/includes/jobqueue/JobQueueFederated.php +++ b/includes/jobqueue/JobQueueFederated.php @@ -18,7 +18,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ /** diff --git a/includes/jobqueue/JobQueueGroup.php b/includes/jobqueue/JobQueueGroup.php index 5d5ea26df6..ef0ecb3008 100644 --- a/includes/jobqueue/JobQueueGroup.php +++ b/includes/jobqueue/JobQueueGroup.php @@ -18,7 +18,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ /** diff --git a/includes/jobqueue/JobQueueMemory.php b/includes/jobqueue/JobQueueMemory.php index 2866c7f2fa..649e2af989 100644 --- a/includes/jobqueue/JobQueueMemory.php +++ b/includes/jobqueue/JobQueueMemory.php @@ -18,7 +18,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ /** diff --git a/includes/jobqueue/JobQueueRedis.php b/includes/jobqueue/JobQueueRedis.php index eb91680815..7dad014e45 100644 --- a/includes/jobqueue/JobQueueRedis.php +++ b/includes/jobqueue/JobQueueRedis.php @@ -18,7 +18,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ use Psr\Log\LoggerInterface; diff --git a/includes/jobqueue/aggregator/JobQueueAggregator.php b/includes/jobqueue/aggregator/JobQueueAggregator.php index 41699748ee..7ce2c74fc2 100644 --- a/includes/jobqueue/aggregator/JobQueueAggregator.php +++ b/includes/jobqueue/aggregator/JobQueueAggregator.php @@ -18,7 +18,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ /** diff --git a/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php b/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php index d9457c603f..db07086f21 100644 --- a/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php +++ b/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php @@ -18,7 +18,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ use Psr\Log\LoggerInterface; diff --git a/includes/jobqueue/jobs/ActivityUpdateJob.php b/includes/jobqueue/jobs/ActivityUpdateJob.php index 6357967638..da4ec2336d 100644 --- a/includes/jobqueue/jobs/ActivityUpdateJob.php +++ b/includes/jobqueue/jobs/ActivityUpdateJob.php @@ -16,7 +16,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz * @ingroup JobQueue */ diff --git a/includes/jobqueue/jobs/RecentChangesUpdateJob.php b/includes/jobqueue/jobs/RecentChangesUpdateJob.php index eb367aff23..ca57d62340 100644 --- a/includes/jobqueue/jobs/RecentChangesUpdateJob.php +++ b/includes/jobqueue/jobs/RecentChangesUpdateJob.php @@ -16,7 +16,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz * @ingroup JobQueue */ use MediaWiki\MediaWikiServices; diff --git a/includes/jobqueue/utils/BacklinkJobUtils.php b/includes/jobqueue/utils/BacklinkJobUtils.php index 1c12a1c9b4..76f8d6d2ac 100644 --- a/includes/jobqueue/utils/BacklinkJobUtils.php +++ b/includes/jobqueue/utils/BacklinkJobUtils.php @@ -19,7 +19,6 @@ * * @file * @ingroup JobQueue - * @author Aaron Schulz */ /** diff --git a/includes/libs/CSSMin.php b/includes/libs/CSSMin.php index c504f3531c..ea0f1b7c74 100644 --- a/includes/libs/CSSMin.php +++ b/includes/libs/CSSMin.php @@ -356,7 +356,7 @@ class CSSMin { // Re-insert comments $pattern = '/' . CSSMin::PLACEHOLDER . '(\d+)x/'; - $source = preg_replace_callback( $pattern, function( $match ) use ( &$comments ) { + $source = preg_replace_callback( $pattern, function ( $match ) use ( &$comments ) { return $comments[ $match[1] ]; }, $source ); diff --git a/includes/libs/HashRing.php b/includes/libs/HashRing.php index 4ddb8131d5..a4aabcd3fe 100644 --- a/includes/libs/HashRing.php +++ b/includes/libs/HashRing.php @@ -18,7 +18,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ /** @@ -179,7 +178,7 @@ class HashRing { if ( $this->liveRing === null || $this->ejectionNextExpiry <= $now ) { $this->ejectionExpiries = array_filter( $this->ejectionExpiries, - function( $expiry ) use ( $now ) { + function ( $expiry ) use ( $now ) { return ( $expiry > $now ); } ); diff --git a/includes/libs/IP.php b/includes/libs/IP.php index a6aa0a3f88..e8b0e6a770 100644 --- a/includes/libs/IP.php +++ b/includes/libs/IP.php @@ -18,7 +18,7 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Antoine Musso "", Aaron Schulz + * @author Antoine Musso "" */ use IPSet\IPSet; diff --git a/includes/libs/MappedIterator.php b/includes/libs/MappedIterator.php index 73ffb14747..d60af343c0 100644 --- a/includes/libs/MappedIterator.php +++ b/includes/libs/MappedIterator.php @@ -18,7 +18,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ /** diff --git a/includes/libs/MultiHttpClient.php b/includes/libs/MultiHttpClient.php index e9922b9edf..9d6b734c0e 100644 --- a/includes/libs/MultiHttpClient.php +++ b/includes/libs/MultiHttpClient.php @@ -43,7 +43,6 @@ use Psr\Log\NullLogger; * - relayResponseHeaders : write out header via header() * Request maps can use integer index 0 instead of 'method' and 1 instead of 'url'. * - * @author Aaron Schulz * @since 1.23 */ class MultiHttpClient implements LoggerAwareInterface { diff --git a/includes/libs/ObjectFactory.php b/includes/libs/ObjectFactory.php index c96a8a1643..6c47c3cafa 100644 --- a/includes/libs/ObjectFactory.php +++ b/includes/libs/ObjectFactory.php @@ -21,8 +21,7 @@ /** * Construct objects from configuration instructions. * - * @author Bryan Davis - * @copyright © 2014 Bryan Davis and Wikimedia Foundation. + * @copyright © 2014 Wikimedia Foundation and contributors */ class ObjectFactory { diff --git a/includes/libs/XhprofData.php b/includes/libs/XhprofData.php index c6da432eff..2383d2adc4 100644 --- a/includes/libs/XhprofData.php +++ b/includes/libs/XhprofData.php @@ -25,8 +25,7 @@ use RunningStat\RunningStat; * . XHProf can be installed as a PECL * package for use with PHP5 (Zend PHP) and is built-in to HHVM 3.3.0. * - * @author Bryan Davis - * @copyright © 2014 Bryan Davis and Wikimedia Foundation. + * @copyright © 2014 Wikimedia Foundation and contributors * @since 1.28 */ class XhprofData { diff --git a/includes/libs/eventrelayer/EventRelayer.php b/includes/libs/eventrelayer/EventRelayer.php index 304f6c12b8..0cc9b3d2e1 100644 --- a/includes/libs/eventrelayer/EventRelayer.php +++ b/includes/libs/eventrelayer/EventRelayer.php @@ -16,7 +16,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ use Psr\Log\LoggerInterface; use Psr\Log\LoggerAwareInterface; diff --git a/includes/libs/eventrelayer/EventRelayerNull.php b/includes/libs/eventrelayer/EventRelayerNull.php index b8ec55fc5d..d933dd4204 100644 --- a/includes/libs/eventrelayer/EventRelayerNull.php +++ b/includes/libs/eventrelayer/EventRelayerNull.php @@ -16,7 +16,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ /** diff --git a/includes/libs/filebackend/FSFileBackend.php b/includes/libs/filebackend/FSFileBackend.php index 4f0805bd2a..30548ef0c0 100644 --- a/includes/libs/filebackend/FSFileBackend.php +++ b/includes/libs/filebackend/FSFileBackend.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ use Wikimedia\Timestamp\ConvertibleTimestamp; diff --git a/includes/libs/filebackend/FileBackend.php b/includes/libs/filebackend/FileBackend.php index 15f13b9b89..6f5108149e 100644 --- a/includes/libs/filebackend/FileBackend.php +++ b/includes/libs/filebackend/FileBackend.php @@ -26,7 +26,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ use Psr\Log\LoggerAwareInterface; use Psr\Log\LoggerInterface; diff --git a/includes/libs/filebackend/FileBackendMultiWrite.php b/includes/libs/filebackend/FileBackendMultiWrite.php index 53bce33dad..f8ca7e5aef 100644 --- a/includes/libs/filebackend/FileBackendMultiWrite.php +++ b/includes/libs/filebackend/FileBackendMultiWrite.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ /** @@ -196,7 +195,7 @@ class FileBackendMultiWrite extends FileBackend { if ( $this->asyncWrites && !$this->hasVolatileSources( $ops ) ) { // Bind $scopeLock to the callback to preserve locks DeferredUpdates::addCallableUpdate( - function() use ( $backend, $realOps, $opts, $scopeLock, $relevantPaths ) { + function () use ( $backend, $realOps, $opts, $scopeLock, $relevantPaths ) { wfDebugLog( 'FileOperationReplication', "'{$backend->getName()}' async replication; paths: " . FormatJson::encode( $relevantPaths ) ); @@ -508,7 +507,7 @@ class FileBackendMultiWrite extends FileBackend { $realOps = $this->substOpBatchPaths( $ops, $backend ); if ( $this->asyncWrites && !$this->hasVolatileSources( $ops ) ) { DeferredUpdates::addCallableUpdate( - function() use ( $backend, $realOps ) { + function () use ( $backend, $realOps ) { $backend->doQuickOperations( $realOps ); } ); @@ -562,7 +561,7 @@ class FileBackendMultiWrite extends FileBackend { $realParams = $this->substOpPaths( $params, $backend ); if ( $this->asyncWrites ) { DeferredUpdates::addCallableUpdate( - function() use ( $backend, $method, $realParams ) { + function () use ( $backend, $method, $realParams ) { $backend->$method( $realParams ); } ); diff --git a/includes/libs/filebackend/FileBackendStore.php b/includes/libs/filebackend/FileBackendStore.php index 039bd42508..9bfdbe8cd6 100644 --- a/includes/libs/filebackend/FileBackendStore.php +++ b/includes/libs/filebackend/FileBackendStore.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ use Wikimedia\Timestamp\ConvertibleTimestamp; diff --git a/includes/libs/filebackend/FileOpBatch.php b/includes/libs/filebackend/FileOpBatch.php index 71b5c7d575..2324098dc2 100644 --- a/includes/libs/filebackend/FileOpBatch.php +++ b/includes/libs/filebackend/FileOpBatch.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ /** diff --git a/includes/libs/filebackend/MemoryFileBackend.php b/includes/libs/filebackend/MemoryFileBackend.php index 44fe2cbac6..0341a2af1d 100644 --- a/includes/libs/filebackend/MemoryFileBackend.php +++ b/includes/libs/filebackend/MemoryFileBackend.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ /** diff --git a/includes/libs/filebackend/SwiftFileBackend.php b/includes/libs/filebackend/SwiftFileBackend.php index 029f94c689..044e976bb0 100644 --- a/includes/libs/filebackend/SwiftFileBackend.php +++ b/includes/libs/filebackend/SwiftFileBackend.php @@ -20,7 +20,6 @@ * @file * @ingroup FileBackend * @author Russ Nelson - * @author Aaron Schulz */ /** diff --git a/includes/libs/filebackend/filejournal/FileJournal.php b/includes/libs/filebackend/filejournal/FileJournal.php index 116c303d61..5ba59c5c97 100644 --- a/includes/libs/filebackend/filejournal/FileJournal.php +++ b/includes/libs/filebackend/filejournal/FileJournal.php @@ -24,7 +24,6 @@ * * @file * @ingroup FileJournal - * @author Aaron Schulz */ /** diff --git a/includes/libs/filebackend/fileop/CopyFileOp.php b/includes/libs/filebackend/fileop/CopyFileOp.php index e3b8c51719..527de6a5e4 100644 --- a/includes/libs/filebackend/fileop/CopyFileOp.php +++ b/includes/libs/filebackend/fileop/CopyFileOp.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ /** diff --git a/includes/libs/filebackend/fileop/CreateFileOp.php b/includes/libs/filebackend/fileop/CreateFileOp.php index 120ca2b7de..f45b055cae 100644 --- a/includes/libs/filebackend/fileop/CreateFileOp.php +++ b/includes/libs/filebackend/fileop/CreateFileOp.php @@ -17,7 +17,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ /** diff --git a/includes/libs/filebackend/fileop/DeleteFileOp.php b/includes/libs/filebackend/fileop/DeleteFileOp.php index 0ccb1e3d7f..01f7df46a8 100644 --- a/includes/libs/filebackend/fileop/DeleteFileOp.php +++ b/includes/libs/filebackend/fileop/DeleteFileOp.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend -* @author Aaron Schulz */ /** diff --git a/includes/libs/filebackend/fileop/DescribeFileOp.php b/includes/libs/filebackend/fileop/DescribeFileOp.php index 9b53222433..0d1e553265 100644 --- a/includes/libs/filebackend/fileop/DescribeFileOp.php +++ b/includes/libs/filebackend/fileop/DescribeFileOp.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ /** diff --git a/includes/libs/filebackend/fileop/FileOp.php b/includes/libs/filebackend/fileop/FileOp.php index 79af194483..30578fa5da 100644 --- a/includes/libs/filebackend/fileop/FileOp.php +++ b/includes/libs/filebackend/fileop/FileOp.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ use Psr\Log\LoggerInterface; diff --git a/includes/libs/filebackend/fileop/MoveFileOp.php b/includes/libs/filebackend/fileop/MoveFileOp.php index fee3f4a0f0..55dca516cd 100644 --- a/includes/libs/filebackend/fileop/MoveFileOp.php +++ b/includes/libs/filebackend/fileop/MoveFileOp.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ /** diff --git a/includes/libs/filebackend/fileop/NullFileOp.php b/includes/libs/filebackend/fileop/NullFileOp.php index ed23e810d3..9121759613 100644 --- a/includes/libs/filebackend/fileop/NullFileOp.php +++ b/includes/libs/filebackend/fileop/NullFileOp.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ /** diff --git a/includes/libs/filebackend/fileop/StoreFileOp.php b/includes/libs/filebackend/fileop/StoreFileOp.php index b97b41076e..bba762f0dd 100644 --- a/includes/libs/filebackend/fileop/StoreFileOp.php +++ b/includes/libs/filebackend/fileop/StoreFileOp.php @@ -19,7 +19,6 @@ * * @file * @ingroup FileBackend - * @author Aaron Schulz */ /** diff --git a/includes/libs/lockmanager/LockManager.php b/includes/libs/lockmanager/LockManager.php index c629e7d9a9..a6257bfda9 100644 --- a/includes/libs/lockmanager/LockManager.php +++ b/includes/libs/lockmanager/LockManager.php @@ -26,7 +26,6 @@ use Wikimedia\WaitConditionLoop; * * @file * @ingroup LockManager - * @author Aaron Schulz */ /** diff --git a/includes/libs/lockmanager/NullLockManager.php b/includes/libs/lockmanager/NullLockManager.php index 5ad558fa74..b83462c798 100644 --- a/includes/libs/lockmanager/NullLockManager.php +++ b/includes/libs/lockmanager/NullLockManager.php @@ -19,7 +19,6 @@ * * @file * @ingroup LockManager - * @author Aaron Schulz */ /** diff --git a/includes/libs/lockmanager/ScopedLock.php b/includes/libs/lockmanager/ScopedLock.php index ac8bee8f70..e10606a8ce 100644 --- a/includes/libs/lockmanager/ScopedLock.php +++ b/includes/libs/lockmanager/ScopedLock.php @@ -19,7 +19,6 @@ * * @file * @ingroup LockManager - * @author Aaron Schulz */ /** diff --git a/includes/libs/objectcache/BagOStuff.php b/includes/libs/objectcache/BagOStuff.php index 77c4259a0d..7cd678b035 100644 --- a/includes/libs/objectcache/BagOStuff.php +++ b/includes/libs/objectcache/BagOStuff.php @@ -475,7 +475,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface { $lSince = microtime( true ); // lock timestamp - return new ScopedCallback( function() use ( $key, $lSince, $expiry ) { + return new ScopedCallback( function () use ( $key, $lSince, $expiry ) { $latency = .050; // latency skew (err towards keeping lock present) $age = ( microtime( true ) - $lSince + $latency ); if ( ( $age + $latency ) >= $expiry ) { diff --git a/includes/libs/objectcache/ReplicatedBagOStuff.php b/includes/libs/objectcache/ReplicatedBagOStuff.php index 3bc7ae2a8c..8239491f72 100644 --- a/includes/libs/objectcache/ReplicatedBagOStuff.php +++ b/includes/libs/objectcache/ReplicatedBagOStuff.php @@ -17,7 +17,6 @@ * * @file * @ingroup Cache - * @author Aaron Schulz */ /** diff --git a/includes/libs/objectcache/WANObjectCache.php b/includes/libs/objectcache/WANObjectCache.php index 0842e04c2f..ff7e91ac3e 100644 --- a/includes/libs/objectcache/WANObjectCache.php +++ b/includes/libs/objectcache/WANObjectCache.php @@ -17,7 +17,6 @@ * * @file * @ingroup Cache - * @author Aaron Schulz */ use Psr\Log\LoggerAwareInterface; diff --git a/includes/libs/objectcache/WANObjectCacheReaper.php b/includes/libs/objectcache/WANObjectCacheReaper.php index 956a3a9c3a..1696c59414 100644 --- a/includes/libs/objectcache/WANObjectCacheReaper.php +++ b/includes/libs/objectcache/WANObjectCacheReaper.php @@ -17,7 +17,6 @@ * * @file * @ingroup Cache - * @author Aaron Schulz */ use Psr\Log\LoggerAwareInterface; diff --git a/includes/libs/rdbms/TransactionProfiler.php b/includes/libs/rdbms/TransactionProfiler.php index 823e0dc5cd..256f744d32 100644 --- a/includes/libs/rdbms/TransactionProfiler.php +++ b/includes/libs/rdbms/TransactionProfiler.php @@ -19,7 +19,6 @@ * * @file * @ingroup Profiler - * @author Aaron Schulz */ namespace Wikimedia\Rdbms; @@ -156,11 +155,13 @@ class TransactionProfiler implements LoggerAwareInterface { */ public function recordConnection( $server, $db, $isMaster ) { // Report when too many connections happen... - if ( $this->hits['conns']++ == $this->expect['conns'] ) { - $this->reportExpectationViolated( 'conns', "[connect to $server ($db)]" ); + if ( $this->hits['conns']++ >= $this->expect['conns'] ) { + $this->reportExpectationViolated( + 'conns', "[connect to $server ($db)]", $this->hits['conns'] ); } - if ( $isMaster && $this->hits['masterConns']++ == $this->expect['masterConns'] ) { - $this->reportExpectationViolated( 'masterConns', "[connect to $server ($db)]" ); + if ( $isMaster && $this->hits['masterConns']++ >= $this->expect['masterConns'] ) { + $this->reportExpectationViolated( + 'masterConns', "[connect to $server ($db)]", $this->hits['masterConns'] ); } } @@ -211,11 +212,11 @@ class TransactionProfiler implements LoggerAwareInterface { } // Report when too many writes/queries happen... - if ( $this->hits['queries']++ == $this->expect['queries'] ) { - $this->reportExpectationViolated( 'queries', $query ); + if ( $this->hits['queries']++ >= $this->expect['queries'] ) { + $this->reportExpectationViolated( 'queries', $query, $this->hits['queries'] ); } - if ( $isWrite && $this->hits['writes']++ == $this->expect['writes'] ) { - $this->reportExpectationViolated( 'writes', $query ); + if ( $isWrite && $this->hits['writes']++ >= $this->expect['writes'] ) { + $this->reportExpectationViolated( 'writes', $query, $this->hits['writes'] ); } // Report slow queries... if ( !$isWrite && $elapsed > $this->expect['readQueryTime'] ) { diff --git a/includes/libs/rdbms/database/Database.php b/includes/libs/rdbms/database/Database.php index afeffb3048..559c28b7ad 100644 --- a/includes/libs/rdbms/database/Database.php +++ b/includes/libs/rdbms/database/Database.php @@ -1822,8 +1822,10 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware } /** - * @param string $name Table name - * @return array (DB name, schema name, table prefix, table name) + * Get the table components needed for a query given the currently selected database + * + * @param string $name Table name in the form of db.schema.table, db.table, or table + * @return array (DB name or "" for default, schema name, table prefix, table name) */ protected function qualifiedTableComponents( $name ) { # We reverse the explode so that database.table and table both output the correct table. diff --git a/includes/libs/rdbms/database/DatabaseMysqlBase.php b/includes/libs/rdbms/database/DatabaseMysqlBase.php index e237ef4899..8d19bc1b34 100644 --- a/includes/libs/rdbms/database/DatabaseMysqlBase.php +++ b/includes/libs/rdbms/database/DatabaseMysqlBase.php @@ -527,25 +527,23 @@ abstract class DatabaseMysqlBase extends Database { } public function tableExists( $table, $fname = __METHOD__ ) { - $table = $this->tableName( $table, 'raw' ); - if ( isset( $this->mSessionTempTables[$table] ) ) { - return true; // already known to exist and won't show in SHOW TABLES anyway - } - // Split database and table into proper variables as Database::tableName() returns // shared tables prefixed with their database, which do not work in SHOW TABLES statements - list( $database, $schema, $prefix, $table ) = $this->qualifiedTableComponents( $table ); + list( $database, , $prefix, $table ) = $this->qualifiedTableComponents( $table ); + $tableName = "{$prefix}{$table}"; - $table = $prefix . $table; + if ( isset( $this->mSessionTempTables[$tableName] ) ) { + return true; // already known to exist and won't show in SHOW TABLES anyway + } // We can't use buildLike() here, because it specifies an escape character // other than the backslash, which is the only one supported by SHOW TABLES - $encLike = $this->escapeLikeInternal( $table, '\\' ); + $encLike = $this->escapeLikeInternal( $tableName, '\\' ); - // If the database has been specified (such as for shared tables), add a FROM $database clause + // If the database has been specified (such as for shared tables), use "FROM" if ( $database !== '' ) { - $database = $this->addIdentifierQuotes( $database ); - $query = "SHOW TABLES FROM $database LIKE '$encLike'"; + $encDatabase = $this->addIdentifierQuotes( $database ); + $query = "SHOW TABLES FROM $encDatabase LIKE '$encLike'"; } else { $query = "SHOW TABLES LIKE '$encLike'"; } diff --git a/includes/libs/rdbms/database/DatabaseSqlite.php b/includes/libs/rdbms/database/DatabaseSqlite.php index 60b685562e..9242414dfe 100644 --- a/includes/libs/rdbms/database/DatabaseSqlite.php +++ b/includes/libs/rdbms/database/DatabaseSqlite.php @@ -1046,4 +1046,3 @@ class DatabaseSqlite extends Database { } class_alias( DatabaseSqlite::class, 'DatabaseSqlite' ); - diff --git a/includes/libs/rdbms/database/resultwrapper/FakeResultWrapper.php b/includes/libs/rdbms/database/resultwrapper/FakeResultWrapper.php index fd7af110e5..493cde8d9c 100644 --- a/includes/libs/rdbms/database/resultwrapper/FakeResultWrapper.php +++ b/includes/libs/rdbms/database/resultwrapper/FakeResultWrapper.php @@ -63,4 +63,3 @@ class FakeResultWrapper extends ResultWrapper { } class_alias( FakeResultWrapper::class, 'FakeResultWrapper' ); - diff --git a/includes/libs/rdbms/exception/DBTransactionError.php b/includes/libs/rdbms/exception/DBTransactionError.php index fd79773e47..62a078cdba 100644 --- a/includes/libs/rdbms/exception/DBTransactionError.php +++ b/includes/libs/rdbms/exception/DBTransactionError.php @@ -28,4 +28,3 @@ class DBTransactionError extends DBExpectedError { } class_alias( DBTransactionError::class, 'DBTransactionError' ); - diff --git a/includes/libs/rdbms/lbfactory/LBFactory.php b/includes/libs/rdbms/lbfactory/LBFactory.php index 3567204a82..919f103be1 100644 --- a/includes/libs/rdbms/lbfactory/LBFactory.php +++ b/includes/libs/rdbms/lbfactory/LBFactory.php @@ -530,7 +530,7 @@ abstract class LBFactory implements ILBFactory { $prefix ); - $this->forEachLB( function( ILoadBalancer $lb ) use ( $prefix ) { + $this->forEachLB( function ( ILoadBalancer $lb ) use ( $prefix ) { $lb->setDomainPrefix( $prefix ); } ); } diff --git a/includes/libs/rdbms/loadbalancer/ILoadBalancer.php b/includes/libs/rdbms/loadbalancer/ILoadBalancer.php index 79827a2638..acb4dce5f6 100644 --- a/includes/libs/rdbms/loadbalancer/ILoadBalancer.php +++ b/includes/libs/rdbms/loadbalancer/ILoadBalancer.php @@ -19,7 +19,6 @@ * * @file * @ingroup Database - * @author Aaron Schulz */ namespace Wikimedia\Rdbms; diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancer.php b/includes/libs/rdbms/loadbalancer/LoadBalancer.php index 0fc00a8ecb..0b70010e19 100644 --- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php +++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php @@ -1257,7 +1257,7 @@ class LoadBalancer implements ILoadBalancer { // This happens if onTransactionIdle() callbacks leave callbacks on *another* DB // (which finished its callbacks already). Warn and recover in this case. Let the // callbacks run in the final commitMasterChanges() in LBFactory::shutdown(). - $this->queryLogger->error( __METHOD__ . ": found writes/callbacks pending." ); + $this->queryLogger->info( __METHOD__ . ": found writes/callbacks pending." ); return; } elseif ( $conn->trxLevel() ) { // This happens for single-DB setups where DB_REPLICA uses the master DB, diff --git a/includes/libs/redis/RedisConnRef.php b/includes/libs/redis/RedisConnRef.php index f2bb8554c6..d330d3c4f9 100644 --- a/includes/libs/redis/RedisConnRef.php +++ b/includes/libs/redis/RedisConnRef.php @@ -16,7 +16,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ use Psr\Log\LoggerInterface; use Psr\Log\LoggerAwareInterface; diff --git a/includes/libs/redis/RedisConnectionPool.php b/includes/libs/redis/RedisConnectionPool.php index e3fc1a629e..99c2c3c287 100644 --- a/includes/libs/redis/RedisConnectionPool.php +++ b/includes/libs/redis/RedisConnectionPool.php @@ -19,7 +19,6 @@ * * @file * @defgroup Redis Redis - * @author Aaron Schulz */ use Psr\Log\LoggerAwareInterface; diff --git a/includes/libs/stats/SamplingStatsdClient.php b/includes/libs/stats/SamplingStatsdClient.php index a8af7142c4..526f12013d 100644 --- a/includes/libs/stats/SamplingStatsdClient.php +++ b/includes/libs/stats/SamplingStatsdClient.php @@ -55,7 +55,7 @@ class SamplingStatsdClient extends StatsdClient { $samplingRates = [ '*' => $sampleRate ]; } if ( $samplingRates ) { - array_walk( $data, function( $item ) use ( $samplingRates ) { + array_walk( $data, function ( $item ) use ( $samplingRates ) { /** @var $item StatsdData */ foreach ( $samplingRates as $pattern => $rate ) { if ( fnmatch( $pattern, $item->getKey(), FNM_NOESCAPE ) ) { diff --git a/includes/libs/virtualrest/VirtualRESTServiceClient.php b/includes/libs/virtualrest/VirtualRESTServiceClient.php index 1b7545a892..e3b9376f21 100644 --- a/includes/libs/virtualrest/VirtualRESTServiceClient.php +++ b/includes/libs/virtualrest/VirtualRESTServiceClient.php @@ -40,7 +40,6 @@ * - stream : resource to stream the HTTP response body to * Request maps can use integer index 0 instead of 'method' and 1 instead of 'url'. * - * @author Aaron Schulz * @since 1.23 */ class VirtualRESTServiceClient { @@ -103,7 +102,7 @@ class VirtualRESTServiceClient { * @return array (prefix,VirtualRESTService) or (null,null) if none found */ public function getMountAndService( $path ) { - $cmpFunc = function( $a, $b ) { + $cmpFunc = function ( $a, $b ) { $al = substr_count( $a, '/' ); $bl = substr_count( $b, '/' ); if ( $al === $bl ) { @@ -207,7 +206,7 @@ class VirtualRESTServiceClient { } // Function to get IDs that won't collide with keys in $armoredIndexMap - $idFunc = function() use ( &$curUniqueId ) { + $idFunc = function () use ( &$curUniqueId ) { return $curUniqueId++; }; diff --git a/includes/linkeddata/PageDataRequestHandler.php b/includes/linkeddata/PageDataRequestHandler.php index d26b304d4d..43cb44c854 100644 --- a/includes/linkeddata/PageDataRequestHandler.php +++ b/includes/linkeddata/PageDataRequestHandler.php @@ -38,7 +38,7 @@ class PageDataRequestHandler { $parts = explode( '/', $subPage, 2 ); if ( $parts !== 2 ) { $slot = $parts[0]; - if ( $slot === 'main' or $slot === '' ) { + if ( $slot === 'main' || $slot === '' ) { return true; } } diff --git a/includes/logging/LogEventsList.php b/includes/logging/LogEventsList.php index c5501cbf9b..1463499874 100644 --- a/includes/logging/LogEventsList.php +++ b/includes/logging/LogEventsList.php @@ -2,7 +2,7 @@ /** * Contain classes to list log entries * - * Copyright © 2004 Brion Vibber , 2008 Aaron Schulz + * Copyright © 2004 Brion Vibber * https://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify diff --git a/includes/logging/LogPager.php b/includes/logging/LogPager.php index e02b8a6618..11dce31bc7 100644 --- a/includes/logging/LogPager.php +++ b/includes/logging/LogPager.php @@ -2,7 +2,7 @@ /** * Contain classes to list log entries * - * Copyright © 2004 Brion Vibber , 2008 Aaron Schulz + * Copyright © 2004 Brion Vibber * https://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify diff --git a/includes/logging/RightsLogFormatter.php b/includes/logging/RightsLogFormatter.php index 791330c160..4b4d19f4fb 100644 --- a/includes/logging/RightsLogFormatter.php +++ b/includes/logging/RightsLogFormatter.php @@ -176,7 +176,7 @@ class RightsLogFormatter extends LogFormatter { $oldmetadata =& $params['oldmetadata']; // unset old metadata entry to ensure metadata goes at the end of the params array unset( $params['oldmetadata'] ); - $params['oldmetadata'] = array_map( function( $index ) use ( $params, $oldmetadata ) { + $params['oldmetadata'] = array_map( function ( $index ) use ( $params, $oldmetadata ) { $result = [ 'group' => $params['4:array:oldgroups'][$index] ]; if ( isset( $oldmetadata[$index] ) ) { $result += $oldmetadata[$index]; @@ -194,7 +194,7 @@ class RightsLogFormatter extends LogFormatter { $newmetadata =& $params['newmetadata']; // unset old metadata entry to ensure metadata goes at the end of the params array unset( $params['newmetadata'] ); - $params['newmetadata'] = array_map( function( $index ) use ( $params, $newmetadata ) { + $params['newmetadata'] = array_map( function ( $index ) use ( $params, $newmetadata ) { $result = [ 'group' => $params['5:array:newgroups'][$index] ]; if ( isset( $newmetadata[$index] ) ) { $result += $newmetadata[$index]; diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index 0e23a88c1d..5c7c7fef3b 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -3334,7 +3334,7 @@ class WikiPage implements Page, IDBAccessObject { HTMLFileCache::clearFileCache( $title ); $revid = $revision ? $revision->getId() : null; - DeferredUpdates::addCallableUpdate( function() use ( $title, $revid ) { + DeferredUpdates::addCallableUpdate( function () use ( $title, $revid ) { InfoAction::invalidateCache( $title, $revid ); } ); } diff --git a/includes/pager/RangeChronologicalPager.php b/includes/pager/RangeChronologicalPager.php index 901d576df9..d3cb566823 100644 --- a/includes/pager/RangeChronologicalPager.php +++ b/includes/pager/RangeChronologicalPager.php @@ -99,13 +99,6 @@ abstract class RangeChronologicalPager extends ReverseChronologicalPager { * @return array */ protected function buildQueryInfo( $offset, $limit, $descending ) { - if ( count( $this->rangeConds ) > 0 ) { - // If range conditions are set, $offset is not used. - // However, if range conditions aren't set, (such as when using paging links) - // use the provided offset to get the proper query. - $offset = ''; - } - list( $tables, $fields, $conds, $fname, $options, $join_conds ) = parent::buildQueryInfo( $offset, $limit, diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index c83198fdad..b0d0e5c8eb 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -6070,7 +6070,7 @@ class Parser { $e = new Exception; $this->mInParse = $e->getTraceAsString(); - $recursiveCheck = new ScopedCallback( function() { + $recursiveCheck = new ScopedCallback( function () { $this->mInParse = false; } ); diff --git a/includes/parser/ParserCache.php b/includes/parser/ParserCache.php index 1f0e19eb26..76a7e1ed7a 100644 --- a/includes/parser/ParserCache.php +++ b/includes/parser/ParserCache.php @@ -138,20 +138,6 @@ class ParserCache { * @return bool|mixed|string */ public function getKey( $article, $popts, $useOutdated = true ) { - $dummy = null; - return $this->getKeyReal( $article, $popts, $useOutdated, $dummy ); - } - - /** - * Temporary internal function to allow accessing $usedOptions - * @todo Merge this back to self::getKey() when ParserOptions::optionsHashPre30() is removed - * @param WikiPage $article - * @param ParserOptions $popts - * @param bool $useOutdated (default true) - * @param array &$usedOptions Don't use this, it will go away soon - * @return bool|mixed|string - */ - private function getKeyReal( $article, $popts, $useOutdated, &$usedOptions ) { global $wgCacheEpoch; if ( $popts instanceof User ) { @@ -218,8 +204,7 @@ class ParserCache { $touched = $article->getTouched(); - $usedOptions = null; - $parserOutputKey = $this->getKeyReal( $article, $popts, $useOutdated, $usedOptions ); + $parserOutputKey = $this->getKey( $article, $popts, $useOutdated ); if ( $parserOutputKey === false ) { wfIncrStats( 'pcache.miss.absent' ); return false; @@ -228,13 +213,6 @@ class ParserCache { $casToken = null; /** @var ParserOutput $value */ $value = $this->mMemc->get( $parserOutputKey, $casToken, BagOStuff::READ_VERIFIED ); - if ( !$value ) { - $parserOutputKey = $this->getParserOutputKey( - $article, - $popts->optionsHashPre30( $usedOptions, $article->getTitle() ) - ); - $value = $this->mMemc->get( $parserOutputKey, $casToken, BagOStuff::READ_VERIFIED ); - } if ( !$value ) { wfDebug( "ParserOutput cache miss.\n" ); wfIncrStats( "pcache.miss.absent" ); @@ -327,13 +305,6 @@ class ParserCache { // ...and its pointer $this->mMemc->set( $this->getOptionsKey( $page ), $optionsKey, $expire ); - // Normally, when there was no key change, the above would have - // overwritten the old entry. Delete that old entry to save disk - // space. - $oldParserOutputKey = $this->getParserOutputKey( $page, - $popts->optionsHashPre30( $optionsKey->mUsedOptions, $page->getTitle() ) ); - $this->mMemc->delete( $oldParserOutputKey ); - Hooks::run( 'ParserCacheSaveComplete', [ $this, $parserOutput, $page->getTitle(), $popts, $revId ] diff --git a/includes/parser/ParserOptions.php b/includes/parser/ParserOptions.php index 5be0321bbe..4809917b63 100644 --- a/includes/parser/ParserOptions.php +++ b/includes/parser/ParserOptions.php @@ -1269,8 +1269,7 @@ class ParserOptions { // Feb 2015 (instead the parser outputs a constant placeholder and post-parse // processing handles the option). But Wikibase forces it in $forOptions // and expects the cache key to still vary on it for T85252. - // @todo Deprecate and remove this behavior after optionsHashPre30() is - // removed (Wikibase can use addExtraKey() or something instead). + // @deprecated since 1.30, Wikibase should use addExtraKey() or something instead. if ( in_array( 'editsection', $forOptions, true ) ) { $options['editsection'] = $this->mEditSection; $defaults['editsection'] = true; @@ -1321,98 +1320,6 @@ class ParserOptions { return $confstr; } - /** - * Generate the hash used before MediaWiki 1.30 - * @since 1.30 - * @deprecated since 1.30. Do not use this unless you're ParserCache. - * @param array $forOptions - * @param Title $title Used to get the content language of the page (since r97636) - * @return string Page rendering hash - */ - public function optionsHashPre30( $forOptions, $title = null ) { - global $wgRenderHashAppend; - - // FIXME: Once the cache key is reorganized this argument - // can be dropped. It was used when the math extension was - // part of core. - $confstr = '*'; - - // Space assigned for the stubthreshold but unused - // since it disables the parser cache, its value will always - // be 0 when this function is called by parsercache. - if ( in_array( 'stubthreshold', $forOptions ) ) { - $confstr .= '!' . $this->options['stubthreshold']; - } else { - $confstr .= '!*'; - } - - if ( in_array( 'dateformat', $forOptions ) ) { - $confstr .= '!' . $this->getDateFormat(); - } - - if ( in_array( 'numberheadings', $forOptions ) ) { - $confstr .= '!' . ( $this->options['numberheadings'] ? '1' : '' ); - } else { - $confstr .= '!*'; - } - - if ( in_array( 'userlang', $forOptions ) ) { - $confstr .= '!' . $this->options['userlang']->getCode(); - } else { - $confstr .= '!*'; - } - - if ( in_array( 'thumbsize', $forOptions ) ) { - $confstr .= '!' . $this->options['thumbsize']; - } else { - $confstr .= '!*'; - } - - // add in language specific options, if any - // @todo FIXME: This is just a way of retrieving the url/user preferred variant - if ( !is_null( $title ) ) { - $confstr .= $title->getPageLanguage()->getExtraHashOptions(); - } else { - global $wgContLang; - $confstr .= $wgContLang->getExtraHashOptions(); - } - - $confstr .= $wgRenderHashAppend; - - // @note: as of Feb 2015, core never sets the editsection flag, since it uses - // tags to inject editsections on the fly. However, extensions - // may be using it by calling ParserOption::optionUsed resp. ParserOutput::registerOption - // directly. At least Wikibase does at this point in time. - if ( !in_array( 'editsection', $forOptions ) ) { - $confstr .= '!*'; - } elseif ( !$this->mEditSection ) { - $confstr .= '!edit=0'; - } - - if ( $this->options['printable'] && in_array( 'printable', $forOptions ) ) { - $confstr .= '!printable=1'; - } - - if ( $this->options['wrapclass'] !== 'mw-parser-output' && - in_array( 'wrapclass', $forOptions ) - ) { - $confstr .= '!wrapclass=' . $this->options['wrapclass']; - } - - if ( $this->mExtraKey != '' ) { - $confstr .= $this->mExtraKey; - } - - // Give a chance for extensions to modify the hash, if they have - // extra options or other effects on the parser cache. - Hooks::run( 'PageRenderingHash', [ &$confstr, $this->getUser(), &$forOptions ] ); - - // Make it a valid memcached key fragment - $confstr = str_replace( ' ', '_', $confstr ); - - return $confstr; - } - /** * Test whether these options are safe to cache * @since 1.30 diff --git a/includes/poolcounter/PoolCounterRedis.php b/includes/poolcounter/PoolCounterRedis.php index 5a15ddf6bb..65ea8333e3 100644 --- a/includes/poolcounter/PoolCounterRedis.php +++ b/includes/poolcounter/PoolCounterRedis.php @@ -16,7 +16,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ use Psr\Log\LoggerInterface; diff --git a/includes/profiler/ProfilerSectionOnly.php b/includes/profiler/ProfilerSectionOnly.php index 0ce8087675..41260a8388 100644 --- a/includes/profiler/ProfilerSectionOnly.php +++ b/includes/profiler/ProfilerSectionOnly.php @@ -27,7 +27,6 @@ * $wgProfiler['visible'] = true; * @endcode * - * @author Aaron Schulz * @ingroup Profiler * @since 1.25 */ @@ -73,7 +72,7 @@ class ProfilerSectionOnly extends Profiler { */ protected function getFunctionReport() { $data = $this->getFunctionStats(); - usort( $data, function( $a, $b ) { + usort( $data, function ( $a, $b ) { if ( $a['real'] === $b['real'] ) { return 0; } diff --git a/includes/profiler/ProfilerXhprof.php b/includes/profiler/ProfilerXhprof.php index 1bf4f54583..09191ee51d 100644 --- a/includes/profiler/ProfilerXhprof.php +++ b/includes/profiler/ProfilerXhprof.php @@ -47,8 +47,7 @@ * a drop-in replacement for Xhprof. Just change the XHPROF_FLAGS_* constants * to TIDEWAYS_FLAGS_*. * - * @author Bryan Davis - * @copyright © 2014 Bryan Davis and Wikimedia Foundation. + * @copyright © 2014 Wikimedia Foundation and contributors * @ingroup Profiler * @see Xhprof * @see https://php.net/xhprof @@ -201,7 +200,7 @@ class ProfilerXhprof extends Profiler { */ protected function getFunctionReport() { $data = $this->getFunctionStats(); - usort( $data, function( $a, $b ) { + usort( $data, function ( $a, $b ) { if ( $a['real'] === $b['real'] ) { return 0; } diff --git a/includes/profiler/SectionProfiler.php b/includes/profiler/SectionProfiler.php index 7e3c398bb0..fdfb24d8c4 100644 --- a/includes/profiler/SectionProfiler.php +++ b/includes/profiler/SectionProfiler.php @@ -19,7 +19,6 @@ * * @file * @ingroup Profiler - * @author Aaron Schulz */ use Wikimedia\ScopedCallback; diff --git a/includes/registration/ExtensionProcessor.php b/includes/registration/ExtensionProcessor.php index 39a8a3dec1..ce262bd23e 100644 --- a/includes/registration/ExtensionProcessor.php +++ b/includes/registration/ExtensionProcessor.php @@ -378,7 +378,7 @@ class ExtensionProcessor implements Processor { protected function extractExtensionMessagesFiles( $dir, array $info ) { if ( isset( $info['ExtensionMessagesFiles'] ) ) { - $this->globals["wgExtensionMessagesFiles"] += array_map( function( $file ) use ( $dir ) { + $this->globals["wgExtensionMessagesFiles"] += array_map( function ( $file ) use ( $dir ) { return "$dir/$file"; }, $info['ExtensionMessagesFiles'] ); } diff --git a/includes/registration/ExtensionRegistry.php b/includes/registration/ExtensionRegistry.php index 0c5a67e9a7..eac04a9b89 100644 --- a/includes/registration/ExtensionRegistry.php +++ b/includes/registration/ExtensionRegistry.php @@ -400,7 +400,7 @@ class ExtensionRegistry { protected function processAutoLoader( $dir, array $info ) { if ( isset( $info['AutoloadClasses'] ) ) { // Make paths absolute, relative to the JSON file - return array_map( function( $file ) use ( $dir ) { + return array_map( function ( $file ) use ( $dir ) { return "$dir/$file"; }, $info['AutoloadClasses'] ); } else { diff --git a/includes/resourceloader/ResourceLoaderJqueryMsgModule.php b/includes/resourceloader/ResourceLoaderJqueryMsgModule.php index 1704481224..01476ed17c 100644 --- a/includes/resourceloader/ResourceLoaderJqueryMsgModule.php +++ b/includes/resourceloader/ResourceLoaderJqueryMsgModule.php @@ -18,7 +18,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Brad Jorsch */ /** diff --git a/includes/search/SearchEngine.php b/includes/search/SearchEngine.php index 4473bb2927..7d05265bad 100644 --- a/includes/search/SearchEngine.php +++ b/includes/search/SearchEngine.php @@ -206,7 +206,7 @@ abstract class SearchEngine { } /** - * Get chars legal for search. + * Get chars legal for search (at query time). * NOTE: usage as static is deprecated and preserved only as BC measure * @return string */ @@ -214,6 +214,16 @@ abstract class SearchEngine { return "A-Za-z_'.0-9\\x80-\\xFF\\-"; } + /** + * Get chars legal for search (at index time). + * + * @since 1.30 + * @return string + */ + public function legalSearchCharsForUpdate() { + return static::legalSearchChars(); + } + /** * Set the maximum number of results to return * and how many to skip before returning the first. @@ -236,7 +246,7 @@ abstract class SearchEngine { if ( $namespaces ) { // Filter namespaces to only keep valid ones $validNs = $this->searchableNamespaces(); - $namespaces = array_filter( $namespaces, function( $ns ) use( $validNs ) { + $namespaces = array_filter( $namespaces, function ( $ns ) use( $validNs ) { return $ns < 0 || isset( $validNs[$ns] ); } ); } else { @@ -464,7 +474,7 @@ abstract class SearchEngine { } } - $ns = array_map( function( $space ) { + $ns = array_map( function ( $space ) { return $space == NS_MEDIA ? NS_FILE : $space; }, $ns ); @@ -550,7 +560,7 @@ abstract class SearchEngine { * @return Title[] */ public function extractTitles( SearchSuggestionSet $completionResults ) { - return $completionResults->map( function( SearchSuggestion $sugg ) { + return $completionResults->map( function ( SearchSuggestion $sugg ) { return $sugg->getSuggestedTitle(); } ); } @@ -564,14 +574,14 @@ abstract class SearchEngine { protected function processCompletionResults( $search, SearchSuggestionSet $suggestions ) { $search = trim( $search ); // preload the titles with LinkBatch - $titles = $suggestions->map( function( SearchSuggestion $sugg ) { + $titles = $suggestions->map( function ( SearchSuggestion $sugg ) { return $sugg->getSuggestedTitle(); } ); $lb = new LinkBatch( $titles ); $lb->setCaller( __METHOD__ ); $lb->execute(); - $results = $suggestions->map( function( SearchSuggestion $sugg ) { + $results = $suggestions->map( function ( SearchSuggestion $sugg ) { return $sugg->getSuggestedTitle()->getPrefixedText(); } ); diff --git a/includes/search/SearchMySQL.php b/includes/search/SearchMySQL.php index 36cbbaa856..2c7feeb752 100644 --- a/includes/search/SearchMySQL.php +++ b/includes/search/SearchMySQL.php @@ -149,8 +149,8 @@ class SearchMySQL extends SearchDatabase { return $regex; } - public static function legalSearchChars() { - return "\"*" . parent::legalSearchChars(); + public function legalSearchCharsForUpdate() { + return "\"*" . parent::legalSearchCharsForUpdate(); } /** diff --git a/includes/search/SearchOracle.php b/includes/search/SearchOracle.php index c5a5ef11a7..2e6cb84ca6 100644 --- a/includes/search/SearchOracle.php +++ b/includes/search/SearchOracle.php @@ -266,7 +266,7 @@ class SearchOracle extends SearchDatabase { [] ); } - public static function legalSearchChars() { - return "\"" . parent::legalSearchChars(); + public function legalSearchCharsForUpdate() { + return "\"" . parent::legalSearchCharsForUpdate(); } } diff --git a/includes/search/SearchSqlite.php b/includes/search/SearchSqlite.php index b40e1aaf38..5a8995d745 100644 --- a/includes/search/SearchSqlite.php +++ b/includes/search/SearchSqlite.php @@ -141,8 +141,8 @@ class SearchSqlite extends SearchDatabase { return $regex; } - public static function legalSearchChars() { - return "\"*" . parent::legalSearchChars(); + public function legalSearchCharsForUpdate() { + return "\"*" . parent::legalSearchCharsForUpdate(); } /** diff --git a/includes/search/SearchSuggestionSet.php b/includes/search/SearchSuggestionSet.php index caad38852e..6d54dada4e 100644 --- a/includes/search/SearchSuggestionSet.php +++ b/includes/search/SearchSuggestionSet.php @@ -180,7 +180,7 @@ class SearchSuggestionSet { */ public static function fromTitles( array $titles ) { $score = count( $titles ); - $suggestions = array_map( function( $title ) use ( &$score ) { + $suggestions = array_map( function ( $title ) use ( &$score ) { return SearchSuggestion::fromTitle( $score--, $title ); }, $titles ); return new SearchSuggestionSet( $suggestions ); @@ -196,7 +196,7 @@ class SearchSuggestionSet { */ public static function fromStrings( array $titles ) { $score = count( $titles ); - $suggestions = array_map( function( $title ) use ( &$score ) { + $suggestions = array_map( function ( $title ) use ( &$score ) { return SearchSuggestion::fromText( $score--, $title ); }, $titles ); return new SearchSuggestionSet( $suggestions ); diff --git a/includes/session/MetadataMergeException.php b/includes/session/MetadataMergeException.php index 882084d04e..074afe36e3 100644 --- a/includes/session/MetadataMergeException.php +++ b/includes/session/MetadataMergeException.php @@ -29,8 +29,7 @@ use UnexpectedValueException; * Subclass of UnexpectedValueException that can be annotated with additional * data for debug logging. * - * @author Bryan Davis - * @copyright © 2016 Bryan Davis and Wikimedia Foundation. + * @copyright © 2016 Wikimedia Foundation and contributors * @since 1.27 */ class MetadataMergeException extends UnexpectedValueException { diff --git a/includes/skins/SkinApi.php b/includes/skins/SkinApi.php index 1145efdd06..6679098fe6 100644 --- a/includes/skins/SkinApi.php +++ b/includes/skins/SkinApi.php @@ -6,7 +6,7 @@ * * Created on Sep 08, 2014 * - * Copyright © 2014 Brad Jorsch + * Copyright © 2014 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/skins/SkinApiTemplate.php b/includes/skins/SkinApiTemplate.php index f7d7cb2f74..d3e453a61a 100644 --- a/includes/skins/SkinApiTemplate.php +++ b/includes/skins/SkinApiTemplate.php @@ -6,7 +6,7 @@ * * Created on Sep 08, 2014 * - * Copyright © 2014 Brad Jorsch + * Copyright © 2014 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/includes/specialpage/SpecialPage.php b/includes/specialpage/SpecialPage.php index 9594952d02..67c14d81e2 100644 --- a/includes/specialpage/SpecialPage.php +++ b/includes/specialpage/SpecialPage.php @@ -456,7 +456,7 @@ class SpecialPage implements MessageLocalizer { $searchEngine->setLimitOffset( $limit, $offset ); $searchEngine->setNamespaces( [] ); $result = $searchEngine->defaultPrefixSearch( $search ); - return array_map( function( Title $t ) { + return array_map( function ( Title $t ) { return $t->getPrefixedText(); }, $result ); } diff --git a/includes/specials/SpecialActiveusers.php b/includes/specials/SpecialActiveusers.php index e7030c56e5..e7c9423c7f 100644 --- a/includes/specials/SpecialActiveusers.php +++ b/includes/specials/SpecialActiveusers.php @@ -2,8 +2,6 @@ /** * Implements Special:Activeusers * - * Copyright © 2008 Aaron Schulz - * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or diff --git a/includes/specials/SpecialBotPasswords.php b/includes/specials/SpecialBotPasswords.php index 1dd78d7cfc..dfdbb067c0 100644 --- a/includes/specials/SpecialBotPasswords.php +++ b/includes/specials/SpecialBotPasswords.php @@ -123,7 +123,7 @@ class SpecialBotPasswords extends FormSpecialPage { $showGrants ), 'default' => array_map( - function( $g ) { + function ( $g ) { return "grant-$g"; }, $this->botPassword->getGrants() @@ -131,14 +131,14 @@ class SpecialBotPasswords extends FormSpecialPage { 'tooltips' => array_combine( array_map( 'MWGrants::getGrantsLink', $showGrants ), array_map( - function( $rights ) use ( $lang ) { + function ( $rights ) use ( $lang ) { return $lang->semicolonList( array_map( 'User::getRightDescription', $rights ) ); }, array_intersect_key( MWGrants::getRightsByGrant(), array_flip( $showGrants ) ) ) ), 'force-options-on' => array_map( - function( $g ) { + function ( $g ) { return "grant-$g"; }, MWGrants::getHiddenGrants() diff --git a/includes/specials/SpecialChangeContentModel.php b/includes/specials/SpecialChangeContentModel.php index 8eaae4ca0f..bee6a39832 100644 --- a/includes/specials/SpecialChangeContentModel.php +++ b/includes/specials/SpecialChangeContentModel.php @@ -115,7 +115,7 @@ class SpecialChangeContentModel extends FormSpecialPage { 'reason' => [ 'type' => 'text', 'name' => 'reason', - 'validation-callback' => function( $reason ) { + 'validation-callback' => function ( $reason ) { $match = EditPage::matchSummarySpamRegex( $reason ); if ( $match ) { return $this->msg( 'spamprotectionmatch', $match )->parse(); diff --git a/includes/specials/SpecialLog.php b/includes/specials/SpecialLog.php index 195d08b1c5..1710b3991c 100644 --- a/includes/specials/SpecialLog.php +++ b/includes/specials/SpecialLog.php @@ -2,8 +2,6 @@ /** * Implements Special:Log * - * Copyright © 2008 Aaron Schulz - * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or diff --git a/includes/specials/SpecialMovepage.php b/includes/specials/SpecialMovepage.php index a2b5be4354..46d7cf7a87 100644 --- a/includes/specials/SpecialMovepage.php +++ b/includes/specials/SpecialMovepage.php @@ -105,7 +105,7 @@ class MovePageForm extends UnlistedSpecialPage { $permErrors = $this->oldTitle->getUserPermissionsErrors( 'move', $user ); if ( count( $permErrors ) ) { // Auto-block user's IP if the account was "hard" blocked - DeferredUpdates::addCallableUpdate( function() use ( $user ) { + DeferredUpdates::addCallableUpdate( function () use ( $user ) { $user->spreadAnyEditBlock(); } ); throw new PermissionsError( 'move', $permErrors ); diff --git a/includes/specials/SpecialPagesWithProp.php b/includes/specials/SpecialPagesWithProp.php index 37006d8f7a..5878e1ffb1 100644 --- a/includes/specials/SpecialPagesWithProp.php +++ b/includes/specials/SpecialPagesWithProp.php @@ -20,7 +20,6 @@ * @since 1.21 * @file * @ingroup SpecialPage - * @author Brad Jorsch */ /** diff --git a/includes/specials/SpecialRecentchanges.php b/includes/specials/SpecialRecentchanges.php index 5ec2064fb2..75d104bb14 100644 --- a/includes/specials/SpecialRecentchanges.php +++ b/includes/specials/SpecialRecentchanges.php @@ -521,6 +521,10 @@ class SpecialRecentChanges extends ChangesListSpecialPage { $userShowHiddenCats = $this->getUser()->getBoolOption( 'showhiddencats' ); $rclistOutput = $list->beginRecentChangesList(); + if ( $this->isStructuredFilterUiEnabled() ) { + $rclistOutput .= $this->makeLegend(); + } + foreach ( $rows as $obj ) { if ( $limit == 0 ) { break; @@ -588,7 +592,9 @@ class SpecialRecentChanges extends ChangesListSpecialPage { $nondefaults = $opts->getChangedValues(); $panel = []; - $panel[] = $this->makeLegend(); + if ( !$this->isStructuredFilterUiEnabled() ) { + $panel[] = $this->makeLegend(); + } $panel[] = $this->optionsPanel( $defaults, $nondefaults, $numRows ); $panel[] = '
'; diff --git a/includes/specials/SpecialRunJobs.php b/includes/specials/SpecialRunJobs.php index 761610e08f..cb1e892e2f 100644 --- a/includes/specials/SpecialRunJobs.php +++ b/includes/specials/SpecialRunJobs.php @@ -19,7 +19,6 @@ * * @file * @ingroup SpecialPage - * @author Aaron Schulz */ use MediaWiki\Logger\LoggerFactory; diff --git a/includes/specials/SpecialUserrights.php b/includes/specials/SpecialUserrights.php index 002b47cf7e..d0a0317fa8 100644 --- a/includes/specials/SpecialUserrights.php +++ b/includes/specials/SpecialUserrights.php @@ -344,7 +344,7 @@ class UserrightsPage extends SpecialPage { // UNLESS the user can only add this group (not remove it) and the expiry time // is being brought forward (T156784) $add = array_filter( $add, - function( $group ) use ( $groups, $groupExpiries, $removable, $ugms ) { + function ( $group ) use ( $groups, $groupExpiries, $removable, $ugms ) { if ( isset( $groupExpiries[$group] ) && !in_array( $group, $removable ) && isset( $ugms[$group] ) && @@ -437,12 +437,12 @@ class UserrightsPage extends SpecialPage { // make sure $oldUGMs and $newUGMs are in the same order, and serialise // each UGM object to a simplified array - $oldUGMs = array_map( function( $group ) use ( $oldUGMs ) { + $oldUGMs = array_map( function ( $group ) use ( $oldUGMs ) { return isset( $oldUGMs[$group] ) ? self::serialiseUgmForLog( $oldUGMs[$group] ) : null; }, $oldGroups ); - $newUGMs = array_map( function( $group ) use ( $newUGMs ) { + $newUGMs = array_map( function ( $group ) use ( $newUGMs ) { return isset( $newUGMs[$group] ) ? self::serialiseUgmForLog( $newUGMs[$group] ) : null; diff --git a/includes/specials/SpecialVersion.php b/includes/specials/SpecialVersion.php index caa0e1fe8b..30c4a0be8f 100644 --- a/includes/specials/SpecialVersion.php +++ b/includes/specials/SpecialVersion.php @@ -511,7 +511,7 @@ class SpecialVersion extends SpecialPage { // in their proper section continue; } - $authors = array_map( function( $arr ) { + $authors = array_map( function ( $arr ) { // If a homepage is set, link to it if ( isset( $arr['homepage'] ) ) { return "[{$arr['homepage']} {$arr['name']}]"; diff --git a/includes/specials/pagers/ActiveUsersPager.php b/includes/specials/pagers/ActiveUsersPager.php index e2f4d4b57d..0665e112ee 100644 --- a/includes/specials/pagers/ActiveUsersPager.php +++ b/includes/specials/pagers/ActiveUsersPager.php @@ -1,7 +1,5 @@ allowedHtmlElements, BalanceSets::$unsupportedSet[BalanceSets::HTML_NAMESPACE], - function( $a, $b ) { + function ( $a, $b ) { // Ignore the values (just intersect the keys) by saying // all values are equal to each other. return 0; diff --git a/includes/upload/UploadBase.php b/includes/upload/UploadBase.php index 0868ce669e..57bb22ab96 100644 --- a/includes/upload/UploadBase.php +++ b/includes/upload/UploadBase.php @@ -1411,7 +1411,9 @@ abstract class UploadBase { 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd', 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd', 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd', - 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd' + 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd', + // https://phabricator.wikimedia.org/T168856 + 'http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd', ]; if ( $type !== 'PUBLIC' || !in_array( $systemId, $allowedDTDs ) diff --git a/includes/user/User.php b/includes/user/User.php index 86c88a95e1..a1119fafc4 100644 --- a/includes/user/User.php +++ b/includes/user/User.php @@ -2506,7 +2506,7 @@ class User implements IDBAccessObject { $cache->delete( $key, 1 ); } else { wfGetDB( DB_MASTER )->onTransactionPreCommitOrIdle( - function() use ( $cache, $key ) { + function () use ( $cache, $key ) { $cache->delete( $key ); }, __METHOD__ @@ -3698,7 +3698,7 @@ class User implements IDBAccessObject { } // Try to update the DB post-send and only if needed... - DeferredUpdates::addCallableUpdate( function() use ( $title, $oldid ) { + DeferredUpdates::addCallableUpdate( function () use ( $title, $oldid ) { if ( !$this->getNewtalk() ) { return; // no notifications to clear } diff --git a/includes/utils/BatchRowUpdate.php b/includes/utils/BatchRowUpdate.php index 39b65c3fb3..fc8bde9ae6 100644 --- a/includes/utils/BatchRowUpdate.php +++ b/includes/utils/BatchRowUpdate.php @@ -77,7 +77,7 @@ class BatchRowUpdate { $this->reader = $reader; $this->writer = $writer; $this->generator = $generator; - $this->output = function() { + $this->output = function () { }; // nop } diff --git a/includes/utils/UIDGenerator.php b/includes/utils/UIDGenerator.php index c6d1a54dd2..dd9f2d9f61 100644 --- a/includes/utils/UIDGenerator.php +++ b/includes/utils/UIDGenerator.php @@ -18,7 +18,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ use Wikimedia\Assert\Assert; use MediaWiki\MediaWikiServices; diff --git a/includes/utils/ZipDirectoryReader.php b/includes/utils/ZipDirectoryReader.php index dd67fa8c4b..f0ace2ccb3 100644 --- a/includes/utils/ZipDirectoryReader.php +++ b/includes/utils/ZipDirectoryReader.php @@ -715,4 +715,3 @@ class ZipDirectoryReader { } } } - diff --git a/languages/ConverterRule.php b/languages/ConverterRule.php index 0d0d90dbc5..e51a8edbdb 100644 --- a/languages/ConverterRule.php +++ b/languages/ConverterRule.php @@ -230,7 +230,7 @@ class ConverterRule { if ( $disp === false && array_key_exists( $variant, $unidtable ) ) { $disp = array_values( $unidtable[$variant] )[0]; } - // or display frist text under disable manual convert + // or display first text under disable manual convert if ( $disp === false && $this->mConverter->mManualLevel[$variant] == 'disable' ) { if ( count( $bidtable ) > 0 ) { $disp = array_values( $bidtable )[0]; diff --git a/languages/FakeConverter.php b/languages/FakeConverter.php index 0cddc9957e..22377c28be 100644 --- a/languages/FakeConverter.php +++ b/languages/FakeConverter.php @@ -125,4 +125,12 @@ class FakeConverter { public function updateConversionTable( Title $title ) { } + + /** + * Used by test suites which need to reset the converter state. + * + * @private + */ + private function reloadTables() { + } } diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index 19d644c57e..213778682e 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -891,9 +891,11 @@ class LanguageConverter { /** * Reload the conversion tables. * + * Also used by test suites which need to reset the converter state. + * * @private */ - function reloadTables() { + private function reloadTables() { if ( $this->mTables ) { unset( $this->mTables ); } diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index 35c22ef8c1..546491ab0c 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -3835,6 +3835,7 @@ "specialpage-securitylevel-not-allowed": "Выбачайце, вам не дазволена выкарыстоўваць гэтую старонку, бо вашая асоба ня можа быць пацьверджаная.", "authpage-cannot-login": "Не атрымалася пачаць уваход у сыстэму.", "authpage-cannot-login-continue": "Немагчыма працягнуць уваход у сыстэму. Падобна, што тэрмін вашай сэсіі скончыўся.", + "authpage-cannot-create": "Немагчыма пачаць стварэньне рахунку.", "changecredentials": "Зьмена ўліковых зьвестак", "removecredentials": "Выдаленьне ўліковых зьвестак", "removecredentials-submit": "Выдаліць уліковыя зьвесткі", diff --git a/languages/i18n/bho.json b/languages/i18n/bho.json index 092f15980d..e93c8264a0 100644 --- a/languages/i18n/bho.json +++ b/languages/i18n/bho.json @@ -152,13 +152,7 @@ "anontalk": "बातचीत", "navigation": "नेविगेशन", "and": " अउर", - "qbfind": "खोज", - "qbbrowse": "ब्राउज", - "qbedit": "संपादन", - "qbpageoptions": "ई पन्ना", - "qbmyoptions": "हमार पन्ना", "faq": "आम सवाल", - "faqpage": "Project:अक्सर पूछल जाए वाला सवाल", "actions": "एक्शन", "namespaces": "नाँवस्थान", "variants": "अउरी प्रकार", @@ -185,32 +179,22 @@ "edit-local": "लोकल विवरण संपादन", "create": "बनाईं", "create-local": "लोकल विवरण जोड़ीं", - "editthispage": "ए पन्ना के संपादन करीं", - "create-this-page": "ई पन्ना बनाईं", "delete": "हटाईं", - "deletethispage": "ए पन्ना के हटाईं", - "undeletethispage": "हटावल पन्ना वापस ले आईं", "undelete_short": "{{PLURAL:$1|एक ठो हटावल गइल संपादन|$1 ठे हटावल गइल संपादन कुल}} वापस ले आईं", "viewdeleted_short": "{{PLURAL:$1|एक ठो हटावल गइल संपादन|$1 हटावल गइल संपादन}} देखीं", "protect": "सुरक्षित करीं", "protect_change": "बदलीं", - "protectthispage": "ए पन्ना के सुरक्षित करीं।", "unprotect": "सुरक्षा बदलीं", - "unprotectthispage": "ए पन्ना के सुरक्षा बदलीं", "newpage": "नया पन्ना", - "talkpage": "ए पन्ना पर चर्चा करीं", "talkpagelinktext": "बातचीत", "specialpage": "खास पन्ना", "personaltools": "निजी औजार", - "articlepage": "सामग्री पन्ना देखीं", "talk": "बातचीत", "views": "बिबिध रूप", "toolbox": "औजार", "tool-link-userrights": "{{GENDER:$1|प्रयोगकर्ता}} के मंडली बदलीं", "tool-link-userrights-readonly": "{{GENDER:$1|प्रयोगकर्ता}} मंडली देखीं", "tool-link-emailuser": "{{GENDER:$1|प्रयोगकर्ता}} के ईमेल करीं", - "userpage": "प्रयोगकर्ता पन्ना देखीं", - "projectpage": "प्रोजेक्ट पन्ना देखीं", "imagepage": "फाइल पन्ना देखीं", "mediawikipage": "सनेसा पन्ना देखीं", "templatepage": "टेम्पलेट पन्ना देखीं", @@ -906,9 +890,10 @@ "search-section": "(खंड $1)", "search-category": "(श्रेणी $1)", "search-suggest": "का राउर मतलब बा: $1", - "search-interwiki-caption": "भ्रातृ परियोजना", + "search-interwiki-caption": "साथी प्रोजेक्ट सभ से रिजल्ट", "search-interwiki-default": "$1 से परिणाम:", "search-interwiki-more": "(अउर)", + "search-interwiki-more-results": "अउरी रिजल्ट", "search-relatedarticle": "संबंधित", "searchrelated": "संबंधित", "searchall": "सगरी", @@ -943,7 +928,7 @@ "prefs-watchlist-token": "धियानसूची टोकन:", "prefs-misc": "बिबिध", "prefs-resetpass": "गुप्तशब्द बदलीं", - "prefs-changeemail": "ईमेल पता बदलीं", + "prefs-changeemail": "ईमेल पता बदलीं भा हटाईं", "prefs-setemail": "ईमेल पता सेट करीं", "prefs-email": "ईमेल बिकल्प", "prefs-rendering": "रंगरूप", @@ -951,6 +936,7 @@ "restoreprefs": "सगरी डिफाल्ट सेटिंग पहिले जइसन करीं (सगरी खंड में)", "prefs-editing": "संपादन", "searchresultshead": "खोज", + "stub-threshold-sample-link": "नमूना", "stub-threshold-disabled": "अक्षम", "recentchangesdays": "हाल में भइल परिवर्तन में देखावे खातिर दिन:", "recentchangesdays-max": "अधिकतम $1{{PLURAL:$1|दिन}}", @@ -1026,20 +1012,20 @@ "group-bot": "बॉट", "group-sysop": "प्रबंधक", "group-bureaucrat": "ब्यूरोक्रेट", - "group-suppress": "ओवरसाइटर", + "group-suppress": "सप्रेसर", "group-all": "(सब)", "group-user-member": "{{GENDER:$1|सदस्य}}", "group-autoconfirmed-member": "{{GENDER:$1|खुद अस्थापित सदस्य}}", "group-bot-member": "{{GENDER:$1|बॉट}}", "group-sysop-member": "{{GENDER:$1|प्रबंधक}}", "group-bureaucrat-member": "{{GENDER:$1|प्रशासक}}", - "group-suppress-member": "{{GENDER:$1|ओवरसाइट}}", + "group-suppress-member": "{{GENDER:$1|सप्रेस}}", "grouppage-user": "{{ns:project}}:सदस्य सभ", "grouppage-autoconfirmed": "{{ns:project}}:खुद अस्थापित सदस्य सभ", "grouppage-bot": "{{ns:project}}:बॉट सभ", "grouppage-sysop": "{{ns:project}}:प्रबंधक सभ", "grouppage-bureaucrat": "{{ns:project}}:प्रशासक सभ", - "grouppage-suppress": "{{ns:project}}:ओवरसाइटर सभ", + "grouppage-suppress": "{{ns:project}}:सप्रेस", "right-read": "पन्ना पढ़ीं", "right-edit": "पन्नवन के संपादन करीं", "right-createpage": "पन्ना बनाईं (बातचीत पन्ना की अलावा)", @@ -1301,7 +1287,7 @@ "unwatchedpages": "ध्यान न दिहल गइल पन्ना", "listredirects": "पुनर्निर्देशन के सूची", "unusedtemplates": "बिना प्रयोग के खाँचा", - "randompage": "कौनों एगो पन्ना", + "randompage": "अट्रेंडम पन्ना", "randomincategory": "श्रेणी में अनियमित पन्ना", "randomincategory-nopages": "[[:Category:$1|$1]] श्रेणी में कउनो पन्ना नइखे।", "randomincategory-category": "श्रेणी:", @@ -1550,7 +1536,7 @@ "tooltip-n-portal": "प्रोजेक्ट की बारे में, रउआँ का कर सकत बानी, कौनों चीज कहाँ खोजब", "tooltip-n-currentevents": "वर्तमान के घटना पर पृष्ठभूमी जानकारी खोजीं", "tooltip-n-recentchanges": "विकि पर तुरंत भइल बदलाव के लिस्ट", - "tooltip-n-randompage": "बेतरतीब पन्ना लोड करीं", + "tooltip-n-randompage": "कौनों एगो पन्ना अट्रेंडम लोड करीं", "tooltip-n-help": "जगह पता लगावे खातिर", "tooltip-t-whatlinkshere": "इहाँ जुड़े वाला सब विकि पन्नवन के लिस्ट", "tooltip-t-recentchangeslinked": "ए पन्ना से जुड़ल पन्नवन पर तुरंत भइल बदलाव", diff --git a/languages/i18n/ckb.json b/languages/i18n/ckb.json index c3c2109a93..117b558eed 100644 --- a/languages/i18n/ckb.json +++ b/languages/i18n/ckb.json @@ -49,7 +49,7 @@ "tog-shownumberswatching": "ژمارەی بەکارھێنەرە چاودێرەکان نیشان بدە", "tog-oldsig": "واژووی ئێستا:", "tog-fancysig": "وەکوو ویکیدەق واژووەکە لەبەر چاو بگرە (بێ بەستەرێکی خۆگەڕ)", - "tog-uselivepreview": "پێشبینینی زیندوو بە کار بھێنە", + "tog-uselivepreview": "پێشبینینی ڕاستەوخۆ بەکاربھێنە", "tog-forceeditsummary": "ئەگەر کورتەی دەستکاریم نەنووسی پێم بڵێ", "tog-watchlisthideown": "دەستکارییەکانم بشارەوە لە پێرستی چاودێری", "tog-watchlisthidebots": "دەستکارییەکانی بات بشارەوە لە لیستی چاودێری", @@ -165,13 +165,7 @@ "anontalk": "لێدوان", "navigation": "ڕێدۆزی", "and": " و", - "qbfind": "بدۆزەرەوە", - "qbbrowse": "بگەڕێ", - "qbedit": "دەستکاری", - "qbpageoptions": "ئەم پەڕەیە", - "qbmyoptions": "پەڕەکانم", "faq": "پرسیار و وەڵام (FAQ)", - "faqpage": "Project:پرسیار و وەڵام", "actions": "کردەوەکان", "namespaces": "شوێنناوەکان", "variants": "شێوەزارەکان", @@ -197,32 +191,22 @@ "edit-local": "دەستکاریکردنی زانیارییە ناوخۆییەکان", "create": "دروستکردن", "create-local": "وەسفی ناوچەیی زۆر بکە", - "editthispage": "دەستکاری ئەم پەڕەیە بکە‌", - "create-this-page": "ئەم پەڕەیە دروست بکە", "delete": "سڕینەوە", - "deletethispage": "سڕینەوه‌ی ئەم پەڕەیە", - "undeletethispage": "ئەم پەڕەیە بھێنەوە", "undelete_short": "{{PLURAL:$1|یەک گۆڕانکاریی|$1 گۆڕانکاریی}} سڕاوە بەجێبھێنەرەوە", "viewdeleted_short": "{{PLURAL:$1|یەک گۆڕانکاریی سڕاو|$1 گۆڕانکاریی سڕاو}} ببینە", "protect": "پاراستن", "protect_change": "گۆڕین", - "protectthispage": "ئەم پەڕەیە بپارێزە", "unprotect": "پاراستنی بگۆڕە", - "unprotectthispage": "پاراستنی ئەم پەڕەیە بگۆڕە", "newpage": "پەڕەی نوێ", - "talkpage": "باس لەسەر ئەم پەڕە بکە‌", "talkpagelinktext": "لێدوان", "specialpage": "پەڕەی تایبەت", "personaltools": "ئامڕازە تاکەکەسییەکان", - "articlepage": "پەڕەی ناوەرۆک ببینە", "talk": "وتووێژ", "views": "بینینەکان", "toolbox": "ئامرازەکان", "tool-link-userrights": "بینینی گرووپەکانی {{GENDER:$1|بەکارھێنەر}}", "tool-link-userrights-readonly": "بینینی گرووپەکانی {{GENDER:$1|بەکارھێنەر}}", "tool-link-emailuser": "ئیمەیلی ئەم {{GENDER:$1|بەکارھێنەر}}ە", - "userpage": "بینینی پەڕەی بەکارھێنەر", - "projectpage": "پەڕەی پرۆژە نیشان بدە", "imagepage": "پەڕەی پەڕگە نیشان بدە", "mediawikipage": "پەڕەی پەیام نیشان بدە", "templatepage": "پەڕەی داڕێژە ببینە", @@ -2745,6 +2729,7 @@ "version-ext-colheader-description": "وەسف", "version-ext-colheader-credits": "بەرھەمھێنەر", "version-poweredby-others": "دیکە", + "version-poweredby-translators": "وەرگێڕەرەکانی translatewiki.net", "version-software": "نەرمەکاڵای دامەزراو", "version-software-product": "بەرهەم", "version-software-version": "وەشان", diff --git a/languages/i18n/en.json b/languages/i18n/en.json index 430a0518ff..8db80e5632 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -1351,7 +1351,7 @@ "recentchanges-submit": "Show", "rcfilters-activefilters": "Active filters", "rcfilters-advancedfilters": "Advanced filters", - "rcfilters-quickfilters": "Saved filter settings", + "rcfilters-quickfilters": "Saved filters", "rcfilters-quickfilters-placeholder-title": "No links saved yet", "rcfilters-quickfilters-placeholder-description": "To save your filter settings and reuse them later, click the bookmark icon in the Active Filter area, below.", "rcfilters-savedqueries-defaultlabel": "Saved filters", diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json index 8189f9bb74..5353a8d5ad 100644 --- a/languages/i18n/fr.json +++ b/languages/i18n/fr.json @@ -2043,6 +2043,7 @@ "apisandbox-sending-request": "Envoi de la requête à l'API...", "apisandbox-loading-results": "Réception des résultats de l'API...", "apisandbox-results-error": "Une erreur s'est produite lors du chargement de la réponse à la requête de l'API: $1.", + "apisandbox-results-login-suppressed": "Cette requête a été exécutée en tant qu'utilisateur déconnecté et aurait pu être utilisée pour évincer la sécurité concernant le contrôle de la même source dans le navigateur. Notez que la gestion automatique du jeton de l'API du bac à sable ne fonctionne pas correctement avec de telles requêtes; vous devez les remplir manuellement.", "apisandbox-request-selectformat-label": "Afficher les données de la requête comme :", "apisandbox-request-format-url-label": "Chaîne de requête de l’URL", "apisandbox-request-url-label": "Requête URL :", @@ -2844,7 +2845,7 @@ "creditspage": "Crédits de la page", "nocredits": "Il n'y a pas d'informations d'attribution disponibles pour cette page.", "spamprotectiontitle": "Filtre de protection anti-pollupostage", - "spamprotectiontext": "La page que vous avez voulu sauvegarder a été bloquée par le filtre anti-pourriel. Ceci est probablement dû à l’introduction d’un lien vers un site externe apparaissant sur la liste noire.", + "spamprotectiontext": "La page que vous avez voulu sauvegarder a été bloquée par le filtre anti-pollupostage. \nCeci est probablement dû à l’introduction d’un lien vers un site externe apparaissant sur la liste noire.", "spamprotectionmatch": "Le texte suivant a déclenché notre filtre de protection anti-pollupostage : $1", "spambot_username": "Nettoyage de pourriels par MediaWiki", "spam_reverting": "Rétablissement de la dernière version ne contenant pas de lien vers $1", diff --git a/languages/i18n/frr.json b/languages/i18n/frr.json index 1b64081066..817b636e52 100644 --- a/languages/i18n/frr.json +++ b/languages/i18n/frr.json @@ -3106,6 +3106,7 @@ "htmlform-user-not-exists": "$1 jaft at ei.", "htmlform-user-not-valid": "$1 as nään tuläät brükernööm", "logentry-delete-delete": "$1 {{Gender:$2}} hää det sidj $3 stregen", + "logentry-delete-delete_redir": "$1 {{GENDER:$2|hää}} det widjerfeerang $3 stregen an auerskrewen", "logentry-delete-restore": "$1 {{GENDER:$2}} hää det sidj $3 weder iinsteld ($4)", "logentry-delete-event": "$1 {{GENDER:$2}} hää det uunsicht feranert faan {{PLURAL:$5|en logbuk iindrach|$5 logbuk iindracher}} üüb $3: $4", "logentry-delete-revision": "$1 {{GENDER:$2}} hää det uunsicht feranert faan {{PLURAL:$5|ian werjuun|$5 werjuunen}} faan det sidj $3: $4", diff --git a/languages/i18n/hr.json b/languages/i18n/hr.json index 195250dd1b..c4042f1c50 100644 --- a/languages/i18n/hr.json +++ b/languages/i18n/hr.json @@ -1927,7 +1927,7 @@ "historywarning": "Upozorenje: stranica koju želite izbrisati ima starije izmjene s $1 {{PLURAL:$1|inačicom|inačice|inačica}}:", "historyaction-submit": "Prikaži", "confirmdeletetext": "Zauvijek ćete izbrisati stranicu ili sliku zajedno s prijašnjim inačicama.\nMolim potvrdite svoju namjeru, da razumijete posljedice i da ovo radite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].", - "actioncomplete": "Zahvat završen", + "actioncomplete": "Radnja je dovršena", "actionfailed": "Radnja nije uspjela", "deletedtext": "\"$1\" je izbrisana.\nVidi $2 za evidenciju nedavnih brisanja.", "dellogpage": "Evidencija brisanja", @@ -2419,7 +2419,7 @@ "tooltip-ca-nstab-special": "Ovo je posebna stranica koju nije moguće izravno uređivati.", "tooltip-ca-nstab-project": "Pogledaj stranicu o projektu", "tooltip-ca-nstab-image": "Pogledaj stranicu o slici", - "tooltip-ca-nstab-mediawiki": "Pogledaj sistemske poruke", + "tooltip-ca-nstab-mediawiki": "Pogledaj sustavsku poruku", "tooltip-ca-nstab-template": "Pogledaj predložak", "tooltip-ca-nstab-help": "Pogledaj stranicu za pomoć", "tooltip-ca-nstab-category": "Pogledaj stranicu kategorije", @@ -2621,8 +2621,8 @@ "exif-software": "Korišteni softver", "exif-artist": "Autor", "exif-copyright": "Nositelj prava", - "exif-exifversion": "Exif verzija", - "exif-flashpixversion": "Podržana verzija Flashpixa", + "exif-exifversion": "Inačica Exifa", + "exif-flashpixversion": "Podržana inačica Flashpixa", "exif-colorspace": "Kolor prostor", "exif-componentsconfiguration": "Značenje pojedinih komponenti", "exif-compressedbitsperpixel": "Dubina boje poslije sažimanja", diff --git a/languages/i18n/lij.json b/languages/i18n/lij.json index bcce57130f..eab248b1b9 100644 --- a/languages/i18n/lij.json +++ b/languages/i18n/lij.json @@ -679,7 +679,7 @@ "readonlywarning": "Attençion: o database o l'è bloccou pe manutençion, no l'è momentaniamente poscibile sarvâ e modifiche effettuæ.\nPe no perdile, coppile in te'n file de testo e sarvilo in atteisa do sbrocco do database.\n\nL'amministratô de scistema ch'o l'ha misso l'abrocco o l'ha fornio questa spiegaçion: $1.", "protectedpagewarning": "'''Attençion: questa paggina a l'è stæta bloccâ de moddo che solo i utenti co-i privileggi d'amministratô possan modificala.'''\nL'urtimo elemento do registro o l'è riportou chì appreuvo pe referença:", "semiprotectedpagewarning": "'''Notta:''' Questa paggina a l'è stæta bloccä de moddo che solo i utenti registræ possan modificâla.\nL'urtimo elemento do registro o l'è riportou chì appreuvo pe referensa:", - "cascadeprotectedwarning": "'''Attençion:''' Questa paggina a l'è stæta bloccâ de moddo che solo i utenti co-i privileggi d'amministratô possan modificala da-o momento ch'a l'é inclusa seleçionando a proteçion \"ricorsciva\" {{PLURAL:$1|inta paggina|inte paggine}}:", + "cascadeprotectedwarning": "'''Attençion:''' Questa paggina a l'è stæta bloccâ de moddo che solo i utenti con [[Special:ListGroupRights|di driti speciffichi]] possan modificâla da-o momento ch'a l'è inclusa seleçionando a proteçion \"ricorsciva\" {{PLURAL:$1|inta paggina|inte paggine}}:", "titleprotectedwarning": "'''Attension: Questa paggina a l'è stæta bloccâ de moddo che seggian necessai [[Special:ListGroupRights|di driti speciffichi]] pe creâla.'''\nL'urtimo elemento do registro o l'è riportou chì appreuvo pe referensa:", "templatesused": "{{PLURAL:$1|Template dêuviòu|Template dêuviæ}} in sta pàgina:", "templatesusedpreview": "{{PLURAL:$1|Template deuviou|Template deuviæ}} in te st'anteprimma:", diff --git a/languages/i18n/lv.json b/languages/i18n/lv.json index 7dba2f2fcf..f2662c1c69 100644 --- a/languages/i18n/lv.json +++ b/languages/i18n/lv.json @@ -1075,6 +1075,7 @@ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (skatīt arī [[Special:NewPages|jaunās lapas]])", "recentchanges-submit": "Rādīt", "rcfilters-activefilters": "Aktīvie filtri", + "rcfilters-quickfilters": "Saglabātie filtra iestatījumi", "rcfilters-restore-default-filters": "Atjaunot noklusētos filtrus", "rcfilters-clear-all-filters": "Noņemt visus filtrus", "rcfilters-search-placeholder": "Filtrēt pēdējās izmaiņas (pārlūko vai sāc rakstīt)", diff --git a/languages/i18n/nn.json b/languages/i18n/nn.json index b548e848f1..0e286eb536 100644 --- a/languages/i18n/nn.json +++ b/languages/i18n/nn.json @@ -629,7 +629,7 @@ "copyrightwarning": "Merk deg at alle bidrag til {{SITENAME}} er å rekne som utgjevne under $2 (sjå $1 for detaljar). Om du ikkje vil ha teksten endra og kopiert under desse vilkåra, kan du ikkje leggje han her.
\nTeksten må du ha skrive sjølv, eller kopiert frå ein ressurs som er kompatibel med vilkåra eller ikkje verna av opphavsrett.\n\n'''LEGG ALDRI INN MATERIALE SOM ANDRE HAR OPPHAVSRETT TIL UTAN LØYVE FRÅ DEI!'''", "copyrightwarning2": "Merk deg at alle bidrag til {{SITENAME}} kan bli endra, omskrive og fjerna av andre bidragsytarar. Om du ikkje vil ha teksten endra under desse vilkåra, kan du ikkje leggje han her.
\nTeksten må du ha skrive sjølv eller ha kopiert frå ein ressurs som er kompatibel med vilkåra eller ikkje verna av opphavsrett (sjå $1 for detaljar).\n\n'''LEGG ALDRI INN MATERIALE SOM ANDRE HAR OPPHAVSRETT TIL UTAN LØYVE FRÅ DEI!'''", "longpageerror": "'''Feil: Teksten du sende inn er {{PLURAL:$1|éin kilobyte|$1 kilobyte}} stor, noko som er større enn øvstegrensa på {{PLURAL:$2|éin kilobyte|$2 kilobyte}}.''' Han kan difor ikkje lagrast.", - "readonlywarning": "'''ÅTVARING: Databasen er skriveverna på grunn av vedlikehald, så du kan ikkje lagre endringane dine akkurat no. Det kan vera lurt å kopiere teksten din til ei tekstfil, så du kan lagre han her seinare.'''\n\nSystemadministratoren som låste databasen gav denne årsaka: $1", + "readonlywarning": "ÅTVARING: Databasen er skriveverna på grunn av vedlikehald, så du kan ikkje lagre endringane dine akkurat no. Det kan vera lurt å kopiere teksten din til ei tekstfil, så du kan lagre han her seinare.\n\nSystemadministratoren som låste databasen gav denne årsaka: $1", "protectedpagewarning": "'''ÅTVARING: Denne sida er verna, slik at berre administratorar kan endra henne.'''\nDet siste loggelementet er oppgjeve under som referanse:", "semiprotectedpagewarning": "'''Merk:''' Denne sida er verna slik at berre registrerte brukarar kan endre henne.\nDet siste loggelementet er oppgjeve under som referanse:", "cascadeprotectedwarning": "'''Åtvaring:''' Denne sida er verna så berre brukarar med administratortilgang kan endre henne. Dette er fordi ho er inkludert i {{PLURAL:$1|denne djupverna sida|desse djupverna sidene}}:", @@ -1159,16 +1159,23 @@ "rcfilters-filter-bots-label": "Robot", "rcfilters-filter-bots-description": "Endringar gjorde med automatiske verktøy.", "rcfilters-filter-humans-label": "Menneske (ikkje robot)", + "rcfilters-filter-humans-description": "Endringar gjorde av menneske.", "rcfilters-filter-patrolled-description": "Endringar merkte som patruljerte.", "rcfilters-filter-unpatrolled-description": "Endringar ikkje merkte som patruljerte.", + "rcfilters-filtergroup-significance": "Vekt", "rcfilters-filter-minor-label": "Småplukk", + "rcfilters-filter-minor-description": "Endringar merkte som småplukk av forfattaren.", "rcfilters-filter-major-label": "Ikkje småplukk", + "rcfilters-filter-major-description": "Endringar ikkje merkte som småplukk.", "rcfilters-filter-pageedits-label": "Sideendringar", "rcfilters-filter-pageedits-description": "Endringar av wikiinnhald, diskusjonar, kategoriskildringar ...", "rcfilters-filter-newpages-label": "Sideopprettingar", + "rcfilters-filter-newpages-description": "Endringar som opprettar nye sider.", "rcfilters-filter-categorization-label": "Kategoriendringar", "rcfilters-filter-categorization-description": "Oppføringar av sider som vert lagde til eller fjerna frå katerogiar.", "rcfilters-filter-logactions-label": "Loggførte handlingar", + "rcfilters-filtergroup-lastRevision": "Siste versjonen", + "rcfilters-view-tags": "Endringar med merke", "rcnotefrom": "Nedanfor er endringane gjorde sidan $2 viste (opp til $1 stykke)", "rclistfrom": "Vis nye endringar sidan $3 $2", "rcshowhideminor": "$1 småplukk", @@ -1802,7 +1809,7 @@ "alreadyrolled": "Kan ikkje rulla attende den siste endringa på [[:$1]] gjord av [[User:$2|$2]] ([[User talk:$2|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) av di nokon andre alt har endra eller attenderulla sida.\n\nDen siste endringa vart gjord av [[User:$3|$3]] ([[User talk:$3|brukardiskusjon]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).", "editcomment": "Samandraget for endringa var: $1.", "revertpage": "Attenderulla endring gjord av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]]) til siste versjonen av [[User:$1|$1]]", - "revertpage-nouser": "Tilbakestilte endringar av (brukarnamn fjerna) til den siste versjonen av [[User:$1|$1]]", + "revertpage-nouser": "Attenderulla endring gjord av ein løynd brukar til siste versjonen av {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Rulla attende endringane av $1, attende til siste versjonen av $2.", "sessionfailure-title": "Feil med omgangen.", "sessionfailure": "Det ser ut til å vera eit problem med innloggingsøkta di. Handlinga er vorten avbroten for å vera føre var mot kidnapping av økta. Bruk attendeknappen i nettlesaren din og prøv om att.", @@ -2217,6 +2224,7 @@ "tooltip-pt-preferences": "{{GENDER:|Innstillingane}} dine", "tooltip-pt-watchlist": "Liste over sidene du overvakar.", "tooltip-pt-mycontris": "{{GENDER:|Liste}} over bidraga dine", + "tooltip-pt-anoncontribs": "Liste over endringar gjorde frå denne IP-adressa", "tooltip-pt-login": "Det er ikkje obligatorisk å logga inn, men medfører mange fordelar.", "tooltip-pt-logout": "Logg ut", "tooltip-pt-createaccount": "Me oppfordrar til at du oppretter ein konto og loggar inn, men det er ikkje påkravd.", diff --git a/languages/i18n/roa-tara.json b/languages/i18n/roa-tara.json index d6f2b7351c..d6b322a75f 100644 --- a/languages/i18n/roa-tara.json +++ b/languages/i18n/roa-tara.json @@ -155,13 +155,7 @@ "anontalk": "'Ngazzaminde", "navigation": "Naveghesce", "and": " e", - "qbfind": "Cirche", - "qbbrowse": "Sfoglie", - "qbedit": "Cange", - "qbpageoptions": "Pàgene currende", - "qbmyoptions": "Pàggene mije", "faq": "FAQ", - "faqpage": "Project:FAQ", "actions": "Aziune", "namespaces": "Namespace", "variants": "Variande", @@ -188,32 +182,22 @@ "edit-local": "Cange 'a descrizione locale", "create": "Ccreje", "create-local": "Aggiunge 'a descrizione locale", - "editthispage": "Cange sta pàgene", - "create-this-page": "Ccreje 'a pàgene", "delete": "Scangìlle", - "deletethispage": "Scangille sta pàgene", - "undeletethispage": "Repristine sta pàgene", "undelete_short": "Annulle {{PLURAL:$1|'nu camgiamende|$1 cangiaminde}}", "viewdeleted_short": "Vide {{PLURAL:$1|'nu cangiamende scangellate|$1 cangiaminde scangellate}}", "protect": "Prutette", "protect_change": "cange", - "protectthispage": "Prutigge sta pàgene", "unprotect": "Cange 'a protezione", - "unprotectthispage": "Cange 'a protezione de sta pàgene", "newpage": "Pàgene nova", - "talkpage": "'Ngazzete pe sta pàgene", "talkpagelinktext": "Parle", "specialpage": "Pàgene Speciele", "personaltools": "Struminde personele", - "articlepage": "Vide 'a pàgene de le condenute", "talk": "'Ngazzaminde", "views": "Visite", "toolbox": "Struminde", "tool-link-userrights": "Cange le gruppe {{GENDER:$1|utinde}}", "tool-link-userrights-readonly": "'Ndruche le gruppe {{GENDER:$1|utinde}}", "tool-link-emailuser": "Manne 'na mail a stu {{GENDER:$1|utende}}", - "userpage": "Vide a pàgene de l'utende", - "projectpage": "Vide a pàgene de le pruggette", "imagepage": "Vide a pàgene de le file", "mediawikipage": "Vide a pàgene de le messàgge", "templatepage": "Vide a pàgene de le template", @@ -2012,7 +1996,7 @@ "whatlinkshere-hideredirs": "$1 ridirezionaminde", "whatlinkshere-hidetrans": "$1 transclusiune", "whatlinkshere-hidelinks": "$1 collegaminde", - "whatlinkshere-hideimages": "$1 collegaminde a 'u file", + "whatlinkshere-hideimages": "$1 collegaminde da file", "whatlinkshere-filters": "Filtre", "autoblockid": "Autoblocche #$1", "block": "Bluècche l'utende", @@ -2327,7 +2311,7 @@ "tooltip-feed-rss": "RSS feed pe sta pàgene", "tooltip-feed-atom": "Atom feed pe sta pàgene", "tooltip-t-contributions": "Vide l'elenghe de le condrebbute de {{GENDER:$1|stu utende}}", - "tooltip-t-emailuser": "Manne n'e-mail a stu utende", + "tooltip-t-emailuser": "Manne n'e-mail a {{GENDER:$1stu utende}}", "tooltip-t-info": "Cchiù 'mbormaziune sus a sta pàgene", "tooltip-t-upload": "Careche le file", "tooltip-t-specialpages": "Liste de tutte le pàggene speciale", @@ -3142,8 +3126,8 @@ "version-libraries-license": "Licenze", "version-libraries-description": "Descrizione", "version-libraries-authors": "Auture", - "redirect": "Redirette da 'u file, utende o ID d'a revisione", - "redirect-summary": "Sta pàgena speciale redirezione a 'nu file (date 'u nome d'u file), 'na pàgene (date 'n'ID de revisione), o 'na pàgene utende (date 'n'ID numeriche de l'utende). Ause: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].", + "redirect": "Redirette da 'u file, utende, pàgene, revisione o ID de l'archivije", + "redirect-summary": "Sta pàgena speciale redirezione a 'nu file (date 'u nome d'u file), a 'na pàgene (date 'n'ID de revisione o 'n'ID de pàgene), o 'na pàgene utende (date 'n'ID a numere de l'utende), o a 'na vôsce de l'archivije (date 'n'ID de l'archivije). Ause: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]] o [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Véje", "redirect-lookup": "Mappature:", "redirect-value": "Valore:", diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json index 55f698c244..c7398cae66 100644 --- a/languages/i18n/ru.json +++ b/languages/i18n/ru.json @@ -247,6 +247,8 @@ "index-category": "Индексируемые страницы", "noindex-category": "Неиндексируемые страницы", "broken-file-category": "Страницы с неработающими файловыми ссылками", + "categoryviewer-pagedlinks": "($1) ($2)", + "category-header-numerals": "$1–$2", "about": "Описание", "article": "Статья", "newwindow": "(в новом окне)", @@ -348,6 +350,7 @@ "versionrequiredtext": "Для работы с этой страницей требуется MediaWiki версии $1. См. [[Special:Version|информацию об программном обеспечении]].", "ok": "OK", "pagetitle": "$1 — {{SITENAME}}", + "backlinksubtitle": "← $1", "retrievedfrom": "Источник — «$1»", "youhavenewmessages": "Вы получили $1 ($2).", "youhavenewmessagesfromusers": "{{PLURAL:$4|Вы получили}} $1 от {{PLURAL:$3|1=$3 участника|$3 участников|1=другого участника}} ($2).", @@ -697,7 +700,9 @@ "headline_tip": "Заголовок 2-го уровня", "nowiki_sample": "Вставьте сюда текст, который не нужно форматировать", "nowiki_tip": "Игнорировать вики-форматирование", + "image_sample": "Пример.jpg", "image_tip": "Встроенный файл", + "media_sample": "Пример.ogg", "media_tip": "Ссылка на файл", "sig_tip": "Ваша подпись и момент времени", "hr_tip": "Горизонтальная линия (не используйте слишком часто)", @@ -789,6 +794,7 @@ "template-semiprotected": "(частично защищено)", "hiddencategories": "Эта страница относится к {{PLURAL:$1|$1 скрытой категории|$1 скрытым категориям|1=одной скрытой категории}}:", "edittools": "", + "edittools-upload": "-", "nocreatetext": "На этом сайте ограничена возможность создания новых страниц.\nВы можете вернуться назад и отредактировать существующую страницу, [[Special:UserLogin|представиться системе или создать новую учётную запись]].", "nocreate-loggedin": "У вас нет разрешения создавать новые страницы.", "sectioneditnotsupported-title": "Редактирование разделов не поддерживается", @@ -822,6 +828,7 @@ "content-model-text": "обычный текст", "content-model-javascript": "JavaScript", "content-model-css": "CSS", + "content-model-json": "JSON", "content-json-empty-object": "Пустой объект", "content-json-empty-array": "Пустой массив", "deprecated-self-close-category": "Страницы, использующие недопустимые самозакрывающиеся HTML-теги", @@ -2402,7 +2409,7 @@ "whatlinkshere-hideredirs": "$1 перенаправления", "whatlinkshere-hidetrans": "$1 включения", "whatlinkshere-hidelinks": "$1 ссылки", - "whatlinkshere-hideimages": "$1 файл{{PLURAL:$1|овая ссылка|овых ссылки|овых ссылок}}", + "whatlinkshere-hideimages": "$1 файловые ссылки", "whatlinkshere-filters": "Фильтры", "whatlinkshere-submit": "Выполнить", "autoblockid": "Автоблокировка #$1", @@ -3128,8 +3135,12 @@ "exif-compression-2": "CCITT Group 3, 1-мерная модификация кодирования длин серий Хаффмана", "exif-compression-3": "CCITT Group 3, факсовое кодирование", "exif-compression-4": "CCITT Group 4, факсовое кодирование", + "exif-compression-5": "LZW", + "exif-compression-6": "JPEG (старый)", + "exif-compression-7": "JPEG", "exif-copyrighted-true": "Охраняется авторским правом", "exif-copyrighted-false": "Авторско-правовой статус не задан", + "exif-photometricinterpretation-0": "Чёрный и белый (белый — 0)", "exif-photometricinterpretation-1": "Чёрный и белый (чёрный — 0)", "exif-photometricinterpretation-4": "Маска прозрачности", "exif-photometricinterpretation-5": "Разделены (вероятно CMYK)", @@ -3365,11 +3376,21 @@ "size-kilobytes": "$1 КБ", "size-megabytes": "$1 МБ", "size-gigabytes": "$1 ГБ", + "size-terabytes": "$1 ТБ", + "size-petabytes": "$1 ПБ", + "size-exabytes": "$1 ЭБ", + "size-zetabytes": "$1 ЗБ", + "size-yottabytes": "$1 ИБ", + "size-pixel": "$1 {{PLURAL:$1|пиксель|пикселя|пикселей}}", "bitrate-bits": "$1 б/с", "bitrate-kilobits": "$1 Кб/с", "bitrate-megabits": "$1 Мб/с", "bitrate-gigabits": "$1 Гб/с", "bitrate-terabits": "$1 Тб/с", + "bitrate-petabits": "$1 Пб/с", + "bitrate-exabits": "$1 Эб/с", + "bitrate-zetabits": "$1 Зб/с", + "bitrate-yottabits": "$1 Иб/с", "lag-warn-normal": "Изменения, сделанные менее {{PLURAL:$1|$1 секунды|$1 секунд|1=секунды}} назад, могут не отображаться в этом списке.", "lag-warn-high": "Из-за большого отставания в синхронизации серверов, в этом списке могут не отображаться изменения, сделанные менее {{PLURAL:$1|$1 секунды|$1 секунд|1=секунды}} назад.", "watchlistedit-normal-title": "Изменение списка наблюдения", @@ -3450,6 +3471,7 @@ "hebrew-calendar-m11-gen": "Ава", "hebrew-calendar-m12-gen": "Элула", "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|обсуждение]])", + "timezone-utc": "UTC", "timezone-local": "Местное", "duplicate-defaultsort": "Внимание. Ключ сортировки по умолчанию «$2» переопределяет прежний ключ сортировки по умолчанию «$1».", "duplicate-displaytitle": "Внимание: Отображаемое название «$2» переопределяет ранее заданное отображаемое название «$1».", @@ -3462,6 +3484,7 @@ "version-parserhooks": "Перехватчики синтаксического анализатора", "version-variables": "Переменные", "version-antispam": "Антиспам", + "version-api": "API", "version-other": "Иное", "version-mediahandlers": "Обработчики медиа", "version-hooks": "Перехватчики", @@ -3800,13 +3823,17 @@ "limitreport-walltime": "Использование в режиме реального времени", "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунды|секунд}}", "limitreport-ppvisitednodes": "Количество узлов, посещённых препроцессором", + "limitreport-ppvisitednodes-value": "$1/$2", "limitreport-ppgeneratednodes": "Количество сгенерированных препроцессором узлов", + "limitreport-ppgeneratednodes-value": "$1/$2", "limitreport-postexpandincludesize": "Размер раскрытых включений", "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байт|байта|байт}}", "limitreport-templateargumentsize": "Размер аргумента шаблона", "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|байт|байта|байт}}", "limitreport-expansiondepth": "Наибольшая глубина расширения", + "limitreport-expansiondepth-value": "$1/$2", "limitreport-expensivefunctioncount": "Количество «дорогих» функций анализатора", + "limitreport-expensivefunctioncount-value": "$1/$2", "expandtemplates": "Развёртка шаблонов", "expand_templates_intro": "Эта служебная страница преобразует текст, рекурсивно разворачивая все шаблоны в нём.\nТакже развёртке подвергаются функции парсера\n{{#language:…}} и переменные вида\n{{CURRENTDAY}} — в общем, всё внутри двойных фигурных скобок.", "expand_templates_title": "Заголовок страницы для {{FULLPAGENAME}} и т. п.:", @@ -3845,6 +3872,7 @@ "default-skin-not-found-row-disabled": "* $1 / $2 (отключено)", "mediastatistics": "Медиа-статистика", "mediastatistics-summary": "Статистические данные о типах загруженных файлов. Она включает информацию только о последних версиях файлов. Более старые или удалённые версии файлов не учитываются.", + "mediastatistics-nfiles": "$1 ($2%)", "mediastatistics-nbytes": "$1 {{PLURAL:$1|байт|байта|байт}} ($2; $3%)", "mediastatistics-bytespertype": "Общий размер файла для этого раздела: $1 {{PLURAL:$1|байт|байта|байт}} ($2; $3%).", "mediastatistics-allbytes": "Общий размер всех файлов: $1 {{PLURAL:$1|байт|байта|байт}} ($2).", diff --git a/languages/i18n/tcy.json b/languages/i18n/tcy.json index bda032fcb2..200cd07d0d 100644 --- a/languages/i18n/tcy.json +++ b/languages/i18n/tcy.json @@ -135,7 +135,7 @@ "category-empty": "''ಈ ವರ್ಗೊಡು ಸದ್ಯಗ್ ಓವುಲ ಪುಟೊಕುಲಾವಡ್ ಅತ್ತಂಡ ಚಿತ್ರೊಲಾವಡ್ ಇಜ್ಜಿ.''", "hidden-categories": "{{PLURAL:$1|Hidden category|ದೆಂಗಾದ್ ದೀತಿನ ವರ್ಗೊಲು}}", "hidden-category-category": "ದೆಂಗಾದ್ ದೀತಿನ ವರ್ಗೊಲು", - "category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|ಈ ವರ್ಗೊಡು ಈ ತಿರ್ತ್‍ದ {{PLURAL:$1|subcategory|$1 ಉಪವರ್ಗೊಲೆನ್}} ಸೇರಾದ್, ಒಟ್ಟಿಗೆ $2 ಉಂಡು.}}", + "category-subcat-count": "{{PLURAL:$2|ಈ ವರ್ಗೊಡು ತಿರ್ತ್ ಕೊರ್ತಿನ ಒಂಜಿ ಉಪವರ್ಗೊ ಮಾತ್ರ ಉಂಡು.|ಈ ವರ್ಗೊಡು ತಿರ್ತ್ ಕೊರ್ತಿನ {{PLURAL:$1|ಉಪವರ್ಗೊ|$1 ಉಪವರ್ಗೊಲೆನ್}} ಸೇರಾದ್, ಒಟ್ಟುಗು $2 ಉಪವರ್ಗೊಲು ಉಂಡು.}}", "category-subcat-count-limited": "ಈ ವರ್ಗೊಡು ತಿರ್ತ್ ತೊಜ್ಪಾದಿನ {{PLURAL:$1|ಉಪವರ್ಗ|$1 ಉಪವರ್ಗೊಲು}} ಉಂಡು.", "category-article-count": "{{PLURAL:$2|ಈ ವರ್ಗೊಡು ತಿರ್ತ್ ಉಪ್ಪುನ ಒಂಜಿ ಪುಟೊ ಮಾತ್ರ ಉಂಡು|ಒಟ್ಟು $2 ಪುಟೊಕುಲೆಡ್ ತಿರ್ತ್ ಉಪ್ಪುನ {{PLURAL:$1|ಪುಟೊ|$1 ಪುಟೊಕುಲು}} ಈ ವರ್ಗೊಡು ಉಂಡು.}}", "category-article-count-limited": "ಪ್ರಸಕ್ತ ವರ್ಗೊಡು ಈ ತಿರ್ತ್’ದ {{PLURAL:$1|ಪುಟ ಉಂಡು|$1 ಪುಟೊಲು ಉಂಡು}}.", @@ -582,7 +582,7 @@ "searchresults": "ನಾಡ್‍ಪತ್ತ್‌ನೆತ ಪಲಿತಾಂಸೊಲು", "searchresults-title": "\"$1\"ಕ್ ನಾಡ್‍ಪತ್ತ್‌ನೆತ ಪಲಿತಾಂಸೊಲು", "notextmatches": "ವಾ ಪುಟೊತ ಪಠ್ಯೊಡುಲಾ ಹೋಲಿಕೆ ಇಜ್ಜಿ", - "prevn": "ದುಂಬುತ್ತ {{PLURAL:$1|$1}}", + "prevn": "ದುಂಬುದ {{PLURAL:$1|$1}}", "nextn": "ಬೊಕ್ಕದ {{PLURAL:$1|$1}}", "prev-page": "ದುಂಬುತ ಪುಟೊ", "next-page": "ನನತಾ ಪುಟ", @@ -591,14 +591,14 @@ "viewprevnext": "ತೂಲೆ ($1 {{int:pipe-separator}} $2) ($3)", "searchmenu-exists": "ಈ ವಿಕಿಟ್ \"[[:$1]]\" ಪುದರ್ದ ಪುಟೊ ಉಂಡು. {{PLURAL:$2|0=|ನಾಡಿನ ಪುದರ್ಗ್ ತಿಕ್ಕಿನ ಬೇತೆ ಫಲಿತಾಶೊಲೆನ್ಲಾ ತೂಲೆ.}}", "searchmenu-new": "ಈ ಪುಟೊನು ರಚಿಸಲೆ \"[[:$1]]\" ಈ ವಿಕಿಡ್! {{PLURAL:$2|0=|See also the page found with your search.|ನಾಡ್‍ನಗ ತೋಜಿದ್ ಬರ್ಪುನ ಪಲಿತಾಂಸೊನು ತೂಲೆ.}}", - "searchprofile-articles": "ಲೇಕನೊ ಪುಟೊ", + "searchprofile-articles": "ವಿಸಯ ಪುಟೊಕುಲು", "searchprofile-images": "ಮಲ್ಟಿಮೀಡಿಯೊ", "searchprofile-everything": "ಪ್ರತಿ ವಿಸಯೊ", - "searchprofile-advanced": "ಸುದಾರಣೆದ", + "searchprofile-advanced": "ಸುದಾರ್ತಿನ", "searchprofile-articles-tooltip": "$1ಟ್ ನಾಡ್‍ಲೆ", "searchprofile-images-tooltip": "ಫೈಲ್‍ನ್ ನಾಡ್‍ಲೆ", "searchprofile-everything-tooltip": "ಮಾತ ಮಾಹಿತಿಲೆನ್ ನಾಡ್‍ಲೆ (ಪಾತೆರದ ಪುಟೊಲ ಸೇರ್ದ್)", - "searchprofile-advanced-tooltip": "ಬಳಕೆದ ನಾಮೊವರ್ಗೊಡು ನಾಡ್‍ಲೆ", + "searchprofile-advanced-tooltip": "ವೈಯಕ್ತಿಕೊ ಪುದರ್-ಜಾಗೆಲೆಡ್ ನಾಡ್‍ಲೆ", "search-result-size": "$1 ({{PLURAL:$2|೧ ಪದೊ|$2 ಪದೊಕುಲು}})", "search-result-category-size": "{{PLURAL:$1|1 ಸದಸ್ಯೆರ್|$1 ಸದಸ್ಯೆರ್ಲು}} ({{PLURAL:$2|1 ಉಪವರ್ಗೊ|$2 ಉಪವರ್ಗೊಲು}}, {{PLURAL:$3|1 ಫೈಲ್|$3 ಫೈಲ್‍ಲು}})", "search-redirect": "($1 ಡ್ದ್ ಪಿರ ನಿರ್ದೇಸನೊ)", @@ -703,12 +703,12 @@ "grouppage-sysop": "{{ns:project}}:ನಿರ್ವಾಹಕೆರ್", "right-read": "ಪುಟಕ್‍ಲೆನ್ ಓದುಲೆ", "right-edit": "ಪುಟೊನ್ ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ", - "right-writeapi": "ಬರೆಯಿನ ಎಪಿಐದ ಬಳಕೆ", + "right-writeapi": "ಬರವು ಎ.ಪಿ.ಐ. ದ ಉಪಯೋಗೊ", "right-delete": "ಪುಟೊಕುಲೆನ್ ಮಾಜಾಲೆ", "right-undelete": "ಪುಟೊನ್ ಮಾಜಾವಡೆ", "grant-group-email": "ಇ-ಅಂಚೆ ಕಡಪುಡುಲೆ", "grant-createaccount": "ಪೊಸ ಕಾತೆ ಸುರು ಮಲ್ಪುಲೆ", - "newuserlogpage": "ಸದಸ್ಯೆರೆ ಸ್ರಿಸ್ಟಿದ ದಾಕಲೆ", + "newuserlogpage": "ಸದಸ್ಯೆರೆ ಉಂಡುಮಲ್ತಿನ ದಾಕಲೆ", "rightslog": "ಸದಸ್ಯೆರ್ನ ಹಕ್ಕು ದಾಖಲೆ", "action-read": "ಈ ಪುಟೊನು ಓದುಲೆ", "action-edit": "ಈ ಪುಟೊನು ಎಡಿಟ್ ಮಲ್ಪುಲೆ", @@ -730,13 +730,13 @@ "recentchanges-legend": "ಇಂಚಿಪೊದ ಬದಲಾವಣೆಲೆ ಆಯ್ಕೆಲು", "recentchanges-summary": "ಈ ವಿಕಿಟ್ ಇಂಚಿಪ್ಪ ಮಲ್ತ್‌ನ ಬದಲಾವಣೆನ್ ಈ ಪುಟೊಡು ಈರ್ ತೂವೊಲಿ", "recentchanges-feed-description": "ಈ ಫೀಡ್’ಡ್ ವಿಕಿಕ್ ಇಂಚಿಪ್ಪ ಆತಿನಂಚಿನ ಬದಲಾವಣೆಲೆನ್ ಟ್ರ್ಯಾಕ್ ಮಲ್ಪುಲೆ.", - "recentchanges-label-newpage": "ಇರ್ನ ಈ ಬದಲಾವಣೆ ಪೊಸ ಪುಟೊನು ಸುರು ಮಲ್ಪುಂಡು", + "recentchanges-label-newpage": "ಈ ಬದಲಾವಣೆ ಒಂಜಿ ಪೊಸ ಪುಟೊನು ಉಂಡು ಮಲ್ತ್‌ಂಡ್.", "recentchanges-label-minor": "ಉಂದು ಕಿಞ್ಞ ಬದಲಾವಣೆ", "recentchanges-label-bot": "ಈ ಸಂಪದನೆ ಒಂಜಿ ಬಾಟ್‍ಡ್ ಆತ್ಂಡ್", "recentchanges-label-unpatrolled": "ಈ ಸಂಪಾದನೆನ್ ನನಲಾ ಪರೀಕ್ಷೆ ಮಲ್ತ್‌ಜಿ.", "recentchanges-label-plusminus": "ಬೈಟ್ಸ್‌ದ ಲೆಕ್ಕೊಡು ಈ ಪುಟೊತ್ತ ಗಾತ್ರೊ ಬದಲಾತ್ಂಡ್", "recentchanges-legend-heading": "ಪರಿವಿಡಿ:", - "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ಬೊಕ್ಕೊಲಾ ತೂಲೆ [[Special:NewPages|ಪೊಸ ಪುಟೊದ ಪಟ್ಟಿ]])", + "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|ಪೊಸ ಪುಟೊಕ್ಲೆನ ಪಟ್ಟಿ]]ನ್ಲಾ ತೂಲೆ)", "recentchanges-submit": "ತೋಜಾಲೆ", "rcfilters-filterlist-whatsthis": "ಉಂದು ದಾದಾ?", "rcfilters-filter-user-experience-level-learner-label": "ಕಲ್ಪುನರ್", @@ -823,7 +823,7 @@ "listfiles-latestversion-no": "ಅತ್ತ್", "file-anchor-link": "ಫೈಲ್", "filehist": "ಫೈಲ್‍ದ ಇತಿಹಾಸೊ", - "filehist-help": "ದಿನೊ/ಪೊರ್ತುದ ಮಿತ್ತ್ ಒತ್ತ್‌ಂಡ ಈ ಫೈಲ್‍ದ ನಿಜೊಸ್ತಿತಿ ತೋಜುಂಡು.", + "filehist-help": "ದಿನೊ/ಪೊರ್ತುದ ಮಿತ್ತ್ ಒತ್ತ್‌ಂಡ ಫೈಲ್‍ ಆ ಪೊರ್ತುಡು ಎಂಚ ತೋಜೊಂದಿತ್ತ್ಂಡ್ ಪಂದ್ ತೂವೊಲಿ.", "filehist-deleteall": "ಮಾತಾ ಮಾಜಾಲೆ", "filehist-deleteone": "ಮಾಜಾಲೆ", "filehist-revert": "ದುಂಬುದ ಲೆಕ ಮಲ್ಪುಲೆ", @@ -832,16 +832,16 @@ "filehist-thumb": "ಎಲ್ಯಚಿತ್ರೊ", "filehist-thumbtext": "$1ತ ಆವೃತ್ತಿದ ಎಲ್ಯಚಿತ್ರೊ", "filehist-nothumb": "ಎಲ್ಯಚಿತ್ರೊ ಇಜ್ಜಿ", - "filehist-user": "ಬಳಕೆದಾರೆರ್", + "filehist-user": "ಸದಸ್ಯೆರ್", "filehist-dimensions": "ಆಯಾಮೊಲು", "filehist-filesize": "ಫೈಲ್’ದ ಗಾತ್ರ", "filehist-comment": "ಅಬಿಪ್ರಾಯೊ", "imagelinks": "ಫೈಲ್‍ದ ಉಪಯೋಗ", - "linkstoimage": "ಈ ತಿರ್ತ್‍ದ {{PLURAL:$1|page links|$1 ಪುಟೊಲೆ ಕೊಂಡಿ}}ಈ ಫೈಲ್‍ಗ್ ಕೊನಪೋಪುಂಡು.", + "linkstoimage": "ಈ ತಿರ್ತ್‍ದ {{PLURAL:$1|ಪುಟೊ|$1 ಪುಟೊಕುಲು}} ಈ ಫೈಲ್‍ಗ್ ಸಂಪರ್ಕೊ ಕೊರ್ಪುಂಡು.", "nolinkstoimage": "ಈ ಫೈಲ್‍ಗ್ ಸಂಪರ್ಕೊ ಉಪ್ಪುನ ವಾ ಪುಟೊಲಾ ಇದ್ದಿ.", "sharedupload": "ಈ ಫೈಲ್’ನ್ ಮಸ್ತ್ ಜನ ಪಟ್ಟ್’ದುಲ್ಲೆರ್ ಅಂಚೆನೆ ಉಂದು ಮಸ್ತ್ ಪ್ರೊಜೆಕ್ಟ್’ಲೆಡ್ ಉಪಯೋಗಿಸೊಲಿ", - "sharedupload-desc-here": "ಈ ಪುಟೊ $1ಡ್ದ್ ಬೊಕ್ಕ ಬೇತೆ ಯೋಜನೆಡ್ದ್ ಗಲಸೊಲಿ.\nಈ ಪುಟೊತ ವಿವರೊ [$2 ಪುಟೊತ ವಿವರೊ] ತಿರ್ತ ಸಾಲ್‍ಡ್ ತೋಜಾದ್ಂಡ್", - "upload-disallowed-here": "ಈರ್ ಈ ಫೈಲ್‍ನ್ ಕುಡೊರೊ ಬರೆವರೆ ಸಾದ್ಯೊ ಇದ್ದಿ.", + "sharedupload-desc-here": "ಈ ಪುಟೊ $1ಡ್ದ್ ಬೈದ್ಂಡ್ ಬೊಕ್ಕ ಬೇತೆ ಯೋಜನೆಲೆಡ್ ಗಲಸೊಲಿ.\n[$2 ಕಡತ ವಿವರಣೆ ಪುಟ]ತ ಮಿತ್ತ್ ವಿವರಣೆನ್ ತಿರ್ತ ಸಾಲ್‍ಡ್ ತೋಜಾದ್ಂಡ್.", + "upload-disallowed-here": "ಈರ್ ಈ ಫೈಲ್‍ನ್ ಕುಡೊರೊ ಬರೆಯೆರೆ ಸಾದ್ಯೊ ಇಜ್ಜಿ.", "filerevert-comment": "ಕಾರಣ:", "filerevert-submit": "ದುಂಬುದ ಲೆಕ ಮಲ್ಪುಲೆ", "filedelete": "$1 ನ್ ಮಾಜಾಲೆ", @@ -979,8 +979,8 @@ "deletecomment": "ಕಾರಣ:", "deletereasonotherlist": "ಬೇತೆ ಕಾರಣ", "delete-edit-reasonlist": "ಮಾಜಾಯಿನ ಕಾರಣೊಲೆನ್ ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ", - "rollbacklink": "ಪುಡತ್ತ್ ಪಾಡ್", - "rollbacklinkcount": "ಪಿರ ದೆತೊನ್ಲೆ $1 {{PLURAL:$1|edit|ಸಂಪದನೆಲು}}", + "rollbacklink": "ಪಿರ ತಿರ್ಗಾವ್", + "rollbacklinkcount": "$1 {{PLURAL:$1|ಸಂಪಾದನೆನ್|ಸಂಪಾದನೆಲೆನ್}} ಪಿರ ತಿರ್ಗಾವ್", "changecontentmodel": "ಪುಟೊತ ವಿಸಯ ಮಾದರಿನ್ ಬದಲ್ ಮಲ್ಪುಲೆ", "changecontentmodel-title-label": "ಪುಟೊದ ಪುದರ್", "changecontentmodel-reason-label": "ಕಾರಣ:", @@ -1055,7 +1055,7 @@ "blocklist-target": "ಗುರಿ", "blocklist-reason": "ಕಾರಣೊ", "ipblocklist-submit": "ನಾಡ್‍ಲೆ", - "blocklink": "ಅಡ್ಡ ಪತ್ತ್‌ಲೆ", + "blocklink": "ತಡೆಪುಲೆ", "unblocklink": "ಅಡ್ಡನ್ ದೆಪ್ಪುಲೆ", "change-blocklink": "ಬ್ಲಾಕ್’ನ್ ಬದಲಾಲೆ", "contribslink": "ಕಾಣಿಕೆಲು", @@ -1142,7 +1142,7 @@ "tooltip-watch": "ಈ ಪುಟನ್ ಈರ್ನ ತೂಪುನ ಪಟ್ಟಿಗ್ ಸೇರ್ಸಾಲೆ", "tooltip-recreate": "ಈ ಪುಟ ಇತ್ತೆ ಇಜ್ಜ೦ಡಲಾ ಐನ್ ಪಿರ ಮಲ್ಪ್", "tooltip-upload": "ಅಪ್ಲೋಡ್ ಸುರು ಮಲ್ಪು", - "tooltip-rollback": "ಅಕೇರಿದ ಸಂಪಾದಕೆರೆನ ಮಾಂತ ಸಂಪದನೆನ್ಲಾ ಮಾಜದ್ ಪಾಡುಂಡು", + "tooltip-rollback": "\"ಪಿರ ತಿರ್ಗಾವ್\" ಅಕೇರಿದ ಸಂಪಾದಕೆರೆನ ಸಂಪಾದನೆಲೆನ್ ಒಂಜೇ ಕ್ಲಿಕ್ಕ್‌ಡ್ ಈ ಪುಟೊಕು ಪಿರ ತಿರ್ಗಾವುಂಡು.", "tooltip-undo": "\"ವಜಾ ಮಲ್ಪುಲೆ\" ಈ ಬದಲಾವಣೆನ್ ದೆತೊನುಜಿ ಬುಕ್ಕೊ ಪ್ರಿವ್ಯೂ ಮೋಡ್‍ಡ್ ಬದಲಾವಣೆ ಮಲ್ಪೆರ್ ಕೊನೊಪು೦ಡು. ಅ೦ಚೆನೆ ಸಾರಾಂಸೊಡು ಬದಲಾವಣೆಗ್ ಕಾರಣ ಸೇರಾಯರ ಆಪು೦ಡು.", "tooltip-summary": "ಒಂಜಿ ಎಲ್ಯ ಸಾರಾಂಸೊ ಕೊರ್ಲೆ", "simpleantispam-label": "ಯಾಂಟಿ-ಸ್ಪಾಮ್ ಚೆಕ್.\nಮುಲ್ಪ ದಿಂಜಾವೊಡ್ಚಿ", @@ -1178,8 +1178,8 @@ "file-nohires": "ಇಂದೆರ್ದ್ ಜಾಸ್ತಿ ರೆಸಲ್ಯೂಶನ್ ಇಜ್ಜಿ.", "svg-long-desc": "ಎಸ್.ವಿ.ಜಿ ಫೈಲ್, ಸುಮಾರಾದ್ $1 × $2 ಚಿತ್ರೊಬಿಂದು, ಫೈಲ್‍ದ ಗಾತ್ರ: $3", "show-big-image": "ಮೂಲೊ ಫೈಲ್", - "show-big-image-preview": "ಪಿರವುದ ಪುಟೊತ ಗಾತ್ರೊ: $1.", - "show-big-image-other": "ಬೇತೆ{{PLURAL:$2|resolution|ಪಟೊತ್ತ ಗಾತ್ರೊ }}: $1.", + "show-big-image-preview": "ಈ ಮುನ್ನೋಟದ ಗಾತ್ರೊ: $1.", + "show-big-image-other": "ಬೇತೆ{{PLURAL:$2|ಪಟೊತ್ತ ಗಾತ್ರೊ|ಪಟೊತ್ತ ಗಾತ್ರೊ }}: $1.", "show-big-image-size": "$1 × $2 ಚಿತ್ರೊ ಬಿಂದುಲು", "newimages": "ಪೊಸ ಕಡತೊಲೆನ್ ಗ್ಯಾಲರಿ", "newimages-legend": "ಅರಿಪೆ", @@ -1188,10 +1188,10 @@ "days": "{{PLURAL:$1|$1 ದಿನೊ|$1 ದಿನೊಕುಲು}}", "bad_image_list": "ವ್ಯವಸ್ಥೆದ ಆಕಾರ ಈ ರೀತಿ ಉಂಡು:\n\nಪಟ್ಟಿಡುಪ್ಪುನಂಚಿನ ದಾಖಲೆಲೆನ್ (* ರ್ದ್ ಶುರು ಆಪುನ ಸಾಲ್’ಲು) ಮಾತ್ರ ಪರಿಗಣನೆಗ್ ದೆತೊನೆರಾಪುಂಡು.\nಪ್ರತಿ ಸಾಲ್’ದ ಶುರುತ ಲಿಂಕ್ ಒಂಜಿ ದೋಷ ಉಪ್ಪುನಂಚಿನ ಫೈಲ್’ಗ್ ಲಿಂಕಾದುಪ್ಪೊಡು.\nಅವ್ವೇ ಸಾಲ್’ದ ಶುರುತ ಪೂರಾ ಲಿಂಕ್’ಲೆನ್ ಪರಿಗನೆರ್ದ್ ದೆಪ್ಪೆರಾಪುಂಡು, ಪಂಡ ಓವು ಪುಟೊಲೆಡ್ ಫೈಲ್’ದ ಬಗ್ಗೆ ಬರ್ಪುಂಡೋ ಔಲು.", "metadata": "ಮೆಟಾಡೇಟಾ", - "metadata-help": "ಈ ಪೈಲ್‍ಡ್ ಜಾಸ್ತಿ ಮಾಹಿತಿ ಉಂಡು. ಹೆಚ್ಚಿನಂಸೊ ಪೈಲ್‍ನ್ ಉಂಡು ಮಲ್ಪೆರೆ ಉಪಯೋಗ ಮಲ್ತಿನ ಡಿಜಿಟಲ್ ಕ್ಯಾಮೆರರ್ದ್ ಅತ್ತ್ಂಡ ಸ್ಕ್ಯಾನರ್‌ರ್ದ್ ಈ ಮಾಹಿತಿ ಬೈದ್ಂಡ್.\nಮೂಲಪ್ರತಿರ್ದ್ ಈ ಪೈಲ್ ಬದಲಾದಿತ್ತ್ಂಡ, ಕೆಲವು ಮಾಹಿತಿ ಬದಲಾತಿನ ಪೈಲ್‍ದ ವಿವರೊಲೆಗ್ ಸರಿಯಾದ್ ಹೊಂದಂದೆ ಉಪ್ಪು.", + "metadata-help": "ಈ ಪೈಲ್‍ಡ್ ಜಾಸ್ತಿ ಮಾಹಿತಿ ಉಂಡು. ಹೆಚ್ಚಿನಂಸೊ ಪೈಲ್‍ನ್ ಉಂಡು ಮಲ್ಪೆರೆ ಉಪಯೋಗ ಮಲ್ತಿನ ಡಿಜಿಟಲ್ ಕ್ಯಾಮೆರರ್ದ್ ಅತ್ತ್ಂಡ ಸ್ಕ್ಯಾನರ್‌ರ್ದ್ ಈ ಮಾಹಿತಿ ಬೈದ್ಂಡ್.\nಮೂಲಪ್ರತಿರ್ದ್ ಈ ಪೈಲ್ ಬದಲಾದಿತ್ತ್ಂಡ, ಕೆಲವು ಮಾಹಿತಿ ಬದಲಾತಿನ ಪೈಲ್‍ದ ವಿವರೊಲೆಗ್ ಸರಿಯಾದ್ ಒಪ್ಪಂದೆ ಉಪ್ಪು.", "metadata-expand": "ವಿಸ್ತಾರವಾಯಿನ ವಿವರೊಲೆನ್ ತೊಜ್ಪಾವು", "metadata-collapse": "ವಿಸ್ತಾರವಾಯಿನ ವಿವರೊಲೆನ್ ದೆಂಗಾವು", - "metadata-fields": "ಈ ಸಂದೇಸೊಡು ಪಟ್ಟಿ ಮಲ್ತಿನಂಚಿನ EXIF ಮಿತ್ತ ದರ್ಜೆದ ಮಾಹಿತಿನ್ ಚಿತ್ರೊ ಪುಟೊಕು ಸೇರ್ಪಾಯೆರೆ ಆವೊಂದುಂಡು. ಪುಟೊಟು ಮಿತ್ತ ದರ್ಜೆ ಮಾಹಿತಿದ ಪಟ್ಟಿನ್ ದೆಪ್ಪುನಗ ಉಂದು ತೋಜುಂಡು.\nಒರಿದನವು ಮೂಲೊ ಸ್ಥಿತಿಟ್ ಅಡೆಂಗ್‍ದುಂಡು.\n*ಮಲ್ಪುಲೆ\n*ಮಾದರಿ\n*ದಿನೊ ಪೊರ್ತು ಮೂಲೊ\n*ಮಾನಾದಿಗೆದ ಸಮಯೊ\n*ಫ್‍ಸಂಖ್ಯೆ\n*ಐಎಸ್ಒ ವೇಗೊದ ರೇಟಿಂಗ್\n*ತೂಪಿನ ಜಾಗೆದ ದೂರ\n*ಕಲಾವಿದೆ\n*ಕೃತಿಸ್ವಾಮ್ಯೊ\n*ಚಿತ್ರೊ ವಿವರಣೆ\n*ಜಿಪಿಎಸ್ ಅಕ್ಷಾಂಸೊ\n*ಜಿಪಿಎಸ್ ರೇಖಾಂಸೊ\n*ಜಿಪಿಎಸ್ ಎತ್ತರೊ", + "metadata-fields": "ಮೆಟಾಡೇಟಾ ಟೇಬಲ್ ಎಲ್ಯ ಆನಗ, ಈ ಸಂದೇಸೊಡು ಪಟ್ಟಿ ಮಲ್ತಿನ ಚಿತ್ರ ಮೆಟಾಡೇಟಾ ಜಾಗೆಲು ಚಿತ್ರ ಪುಟ ಪ್ರದರ್ಶನೊಡು ಸೇರುಂಡು. ಒರಿದಿನವು ಮೂಲ ಸ್ಥಿತಿಟ್ ದೆಂಗ್‌ದುಪ್ಪುಂಡು. \n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude", "exif-imagewidth": "ಅಗೆಲ", "exif-imagelength": "ಎತ್ತರೊ", "exif-orientation": "ದಿಕ್ಕ್ ದಿಸೆ", @@ -1306,7 +1306,7 @@ "logentry-move-move": "$1 {{GENDER:$2|ಜಾರಲೆ}} ಪುಟೊ $3 ಡ್ದ್ $4", "logentry-move-move-noredirect": "$1 ಪುಟೊ $3 ನ್ ಪುಟೊ $4 ಕ್ ರೀಡೈರೆಕ್ಟ್ ಕೊರಂದೆ {{GENDER:$2|ವರ್ಗಾವಣೆ ಮಲ್ತೆರ್}}", "logentry-move-move_redir": "$1 ಪುಟೊ $3 ನ್ ಪುಟೊ $4 ಕ್ ರೀಡೈರೆಕ್ಟ್ ಕೊರ್ದು {{GENDER:$2|ವರ್ಗಾವಣೆ ಮಲ್ತೆರ್}}", - "logentry-newusers-create": "ಬಳಕೆದಾರೆರೆ ಕಾತೆ $1 ನ್ {{GENDER:$2|ಸ್ರಿಸ್ಟಿ ಮಲ್ತಾಂಡ್}}", + "logentry-newusers-create": "ಸದಸ್ಯೆರೆ ಕಾತೆ $1 ನ್ {{GENDER:$2|ಉಂಡು ಮಲ್ತ್‌ಂಡ್}}", "logentry-newusers-autocreate": "ಸದಸ್ಯೆರೆ ಖಾತೆ $1 ತನ್ನಾತೆಗ್ {{GENDER:$2|ಉಂಡಾತ್ಂಡ್}}", "logentry-upload-upload": "$1 {{GENDER:$2|ಅಪ್ಲೋಡ್ ಮಲ್ತ್‌ದೆರ್}} $3", "searchsuggest-search": "{{SITENAME}}ನ್ ನಾಡ್‍ಲೆ", diff --git a/maintenance/CodeCleanerGlobalsPass.inc b/maintenance/CodeCleanerGlobalsPass.inc index 5e8e754796..9ccf6d63b1 100644 --- a/maintenance/CodeCleanerGlobalsPass.inc +++ b/maintenance/CodeCleanerGlobalsPass.inc @@ -49,4 +49,3 @@ class CodeCleanerGlobalsPass extends \Psy\CodeCleaner\CodeCleanerPass { return $nodes; } } - diff --git a/maintenance/benchmarks/Benchmarker.php b/maintenance/benchmarks/Benchmarker.php index 0039d20632..832da4db79 100644 --- a/maintenance/benchmarks/Benchmarker.php +++ b/maintenance/benchmarks/Benchmarker.php @@ -35,15 +35,20 @@ require_once __DIR__ . '/../Maintenance.php'; */ abstract class Benchmarker extends Maintenance { protected $defaultCount = 100; + private $lang; public function __construct() { parent::__construct(); $this->addOption( 'count', 'How many times to run a benchmark', false, true ); + $this->addOption( 'verbose', 'Verbose logging of resource usage', false, false, 'v' ); } public function bench( array $benchs ) { + $this->lang = Language::factory( 'en' ); + $this->startBench(); $count = $this->getOption( 'count', $this->defaultCount ); + $verbose = $this->hasOption( 'verbose' ); foreach ( $benchs as $key => $bench ) { // Shortcut for simple functions if ( is_callable( $bench ) ) { @@ -66,6 +71,9 @@ abstract class Benchmarker extends Maintenance { $t = microtime( true ); call_user_func_array( $bench['function'], $bench['args'] ); $t = ( microtime( true ) - $t ) * 1000; + if ( $verbose ) { + $this->verboseRun( $i ); + } $times[] = $t; } @@ -104,6 +112,10 @@ abstract class Benchmarker extends Maintenance { 'median' => $median, 'mean' => $mean, 'max' => $max, + 'usage' => [ + 'mem' => memory_get_usage( true ), + 'mempeak' => memory_get_peak_usage( true ), + ], ] ); } } @@ -126,12 +138,32 @@ abstract class Benchmarker extends Maintenance { 'times', $res['count'] ); + foreach ( [ 'total', 'min', 'median', 'mean', 'max' ] as $metric ) { $ret .= sprintf( " %' 6s: %6.2fms\n", $metric, $res[$metric] ); } + + foreach ( [ + 'mem' => 'Current memory usage', + 'mempeak' => 'Peak memory usage' + ] as $key => $label ) { + $ret .= sprintf( "%' 20s: %s\n", + $label, + $this->lang->formatSize( $res['usage'][$key] ) + ); + } + $this->output( "$ret\n" ); } + + protected function verboseRun( $iteration ) { + $this->output( sprintf( "#%3d - memory: %-10s - peak: %-10s\n", + $iteration, + $this->lang->formatSize( memory_get_usage( true ) ), + $this->lang->formatSize( memory_get_peak_usage( true ) ) + ) ); + } } diff --git a/maintenance/benchmarks/benchmarkJSMinPlus.php b/maintenance/benchmarks/benchmarkJSMinPlus.php new file mode 100644 index 0000000000..dc92516018 --- /dev/null +++ b/maintenance/benchmarks/benchmarkJSMinPlus.php @@ -0,0 +1,62 @@ +addDescription( 'Benchmarks JSMinPlus.' ); + $this->addOption( 'file', 'Path to JS file', true, true ); + } + + public function execute() { + MediaWiki\suppressWarnings(); + $content = file_get_contents( $this->getOption( 'file' ) ); + MediaWiki\restoreWarnings(); + if ( $content === false ) { + $this->error( 'Unable to open input file', 1 ); + } + + $filename = basename( $this->getOption( 'file' ) ); + $parser = new JSParser(); + + $this->bench( [ + "JSParser::parse ($filename)" => [ + 'function' => function ( $parser, $content, $filename ) { + $parser->parse( $content, $filename, 1 ); + }, + 'args' => [ $parser, $content, $filename ] + ] + ] ); + } +} + +$maintClass = 'BenchmarkJSMinPlus'; +require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/maintenance/deleteArchivedFiles.php b/maintenance/deleteArchivedFiles.php index af05a81dee..0f33a14150 100644 --- a/maintenance/deleteArchivedFiles.php +++ b/maintenance/deleteArchivedFiles.php @@ -21,7 +21,6 @@ * * @file * @ingroup Maintenance - * @author Aaron Schulz */ require_once __DIR__ . '/Maintenance.php'; diff --git a/maintenance/deleteArchivedRevisions.php b/maintenance/deleteArchivedRevisions.php index 2fb83fccf7..905b5d9c08 100644 --- a/maintenance/deleteArchivedRevisions.php +++ b/maintenance/deleteArchivedRevisions.php @@ -21,7 +21,6 @@ * * @file * @ingroup Maintenance - * @author Aaron Schulz */ require_once __DIR__ . '/Maintenance.php'; diff --git a/maintenance/eraseArchivedFile.php b/maintenance/eraseArchivedFile.php index 1ddc0f5097..c90056db45 100644 --- a/maintenance/eraseArchivedFile.php +++ b/maintenance/eraseArchivedFile.php @@ -19,7 +19,6 @@ * * @file * @ingroup Maintenance - * @author Aaron Schulz */ require_once __DIR__ . '/Maintenance.php'; diff --git a/maintenance/findMissingFiles.php b/maintenance/findMissingFiles.php index 7979e7d3c1..4ce7ca68ae 100644 --- a/maintenance/findMissingFiles.php +++ b/maintenance/findMissingFiles.php @@ -16,7 +16,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ require_once __DIR__ . '/Maintenance.php'; diff --git a/maintenance/findOrphanedFiles.php b/maintenance/findOrphanedFiles.php index 5980631d03..765fbe4a0a 100644 --- a/maintenance/findOrphanedFiles.php +++ b/maintenance/findOrphanedFiles.php @@ -16,7 +16,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz */ require_once __DIR__ . '/Maintenance.php'; diff --git a/maintenance/jsparse.php b/maintenance/jsparse.php index 770251cf0d..49b945cbad 100644 --- a/maintenance/jsparse.php +++ b/maintenance/jsparse.php @@ -24,7 +24,7 @@ require_once __DIR__ . '/Maintenance.php'; /** - * Maintenance script to do test JavaScript validity parses using jsmin+'s parser + * Maintenance script to test JavaScript validity using JsMinPlus' parser * * @ingroup Maintenance */ diff --git a/maintenance/manageJobs.php b/maintenance/manageJobs.php index bbedf0c646..32333b768b 100644 --- a/maintenance/manageJobs.php +++ b/maintenance/manageJobs.php @@ -19,7 +19,6 @@ * * @file * @ingroup Maintenance - * @author Aaron Schulz */ require_once __DIR__ . '/Maintenance.php'; diff --git a/maintenance/refreshFileHeaders.php b/maintenance/refreshFileHeaders.php index e252256ae3..bca1c96435 100644 --- a/maintenance/refreshFileHeaders.php +++ b/maintenance/refreshFileHeaders.php @@ -20,7 +20,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Aaron Schulz * @ingroup Maintenance */ diff --git a/maintenance/validateRegistrationFile.php b/maintenance/validateRegistrationFile.php index 9906990bb5..aa1f668d3b 100644 --- a/maintenance/validateRegistrationFile.php +++ b/maintenance/validateRegistrationFile.php @@ -8,7 +8,7 @@ class ValidateRegistrationFile extends Maintenance { $this->addArg( 'path', 'Path to extension.json/skin.json file.', true ); } public function execute() { - $validator = new ExtensionJsonValidator( function( $msg ) { + $validator = new ExtensionJsonValidator( function ( $msg ) { $this->error( $msg, 1 ); } ); $validator->checkDependencies(); diff --git a/phpcs.xml b/phpcs.xml index 440604ea1e..197cc7860b 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -38,7 +38,7 @@ . - + */languages/messages/Messages*.php diff --git a/resources/Resources.php b/resources/Resources.php index 66ea2a9ec9..dc0538725a 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1418,6 +1418,7 @@ return [ 'jquery.accessKeyLabel', 'jquery.textSelection', 'jquery.byteLimit', + 'mediawiki.widgets.visibleByteLimit', 'mediawiki.api', ], ], @@ -2013,7 +2014,7 @@ return [ 'mediawiki.special.movePage' => [ 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.movePage.js', 'dependencies' => [ - 'jquery.byteLimit', + 'mediawiki.widgets.visibleByteLimit', 'mediawiki.widgets', ], ], @@ -2373,6 +2374,16 @@ return [ ], 'targets' => [ 'desktop', 'mobile' ], ], + 'mediawiki.widgets.visibleByteLimit' => [ + 'scripts' => [ + 'resources/src/mediawiki.widgets.visibleByteLimit/mediawiki.widgets.visibleByteLimit.js' + ], + 'dependencies' => [ + 'oojs-ui-core', + 'jquery.byteLimit' + ], + 'targets' => [ 'desktop', 'mobile' ] + ], 'mediawiki.widgets.datetime' => [ 'scripts' => [ 'resources/src/mediawiki.widgets.datetime/mediawiki.widgets.datetime.js', diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.js b/resources/src/mediawiki.action/mediawiki.action.edit.js index 8cde703e74..5b810174bf 100644 --- a/resources/src/mediawiki.action/mediawiki.action.edit.js +++ b/resources/src/mediawiki.action/mediawiki.action.edit.js @@ -27,18 +27,10 @@ // TODO: This should be an OOjs UI feature, or somehow happen automatically after infusing. wpSummary.$input.updateTooltipAccessKeys(); - // Make sure edit summary does not exceed byte limit - wpSummary.$input.byteLimit( 255 ); - // Show a byte-counter to users with how many bytes are left for their edit summary. // TODO: This looks a bit weird, as there is no unit in the UI, just numbers; showing // 'bytes' confused users in testing, and showing 'chars' would be a lie. See T42035. - function updateSummaryLabelCount() { - wpSummary.setLabel( String( 255 - $.byteLength( wpSummary.getValue() ) ) ); - } - wpSummary.on( 'change', updateSummaryLabelCount ); - // Initialise value - updateSummaryLabelCount(); + mw.widgets.visibleByteLimit( wpSummary, 255 ); } ); } else { // Make sure edit summary does not exceed byte limit diff --git a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js index eb52efb478..75431d95d1 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js @@ -326,7 +326,7 @@ // Collect views allViews = { 'default': { - label: mw.msg( 'rcfilters-filterlist-title' ), + title: mw.msg( 'rcfilters-filterlist-title' ), groups: filterGroups } }; @@ -912,10 +912,13 @@ /** * Get the label for the current view * + * @param {string} viewName View name * @return {string} Label for the current view */ - mw.rcfilters.dm.FiltersViewModel.prototype.getCurrentViewLabel = function () { - return this.views[ this.getCurrentView() ].title; + mw.rcfilters.dm.FiltersViewModel.prototype.getViewTitle = function ( viewName ) { + viewName = viewName || this.getCurrentView(); + + return this.views[ viewName ] && this.views[ viewName ].title; }; /** diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less index 6ab157547b..5ce798819f 100644 --- a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less +++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less @@ -4,6 +4,7 @@ .oo-ui-tagMultiselectWidget-input input { // Make sure this uses the interface direction, not the content direction direction: ltr; + border-bottom-right-radius: 0; } &.oo-ui-widget-enabled .oo-ui-tagMultiselectWidget-handle { @@ -53,7 +54,7 @@ } &.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child a.oo-ui-buttonElement-button { - border-radius: 0; + border-bottom-right-radius: 2px; } } diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuHeaderWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuHeaderWidget.js index fe9148903c..01388848c9 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuHeaderWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuHeaderWidget.js @@ -106,7 +106,7 @@ mw.rcfilters.ui.FilterMenuHeaderWidget.prototype.onModelUpdate = function () { var currentView = this.model.getCurrentView(); - this.setLabel( this.model.getCurrentViewLabel() ); + this.setLabel( this.model.getViewTitle( currentView ) ); this.invertNamespacesButton.toggle( currentView === 'namespaces' ); this.backButton.toggle( currentView !== 'default' ); diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js index 70381f22eb..0ab459e73d 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js @@ -47,6 +47,7 @@ footers: [ { name: 'viewSelect', + sticky: false, // View select menu, appears on default view only $element: $( '
' ) .append( new mw.rcfilters.ui.ViewSwitchWidget( this.controller, this.model ).$element ), diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FormWrapperWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FormWrapperWidget.js index 4e1ae973a2..dbee65c776 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FormWrapperWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FormWrapperWidget.js @@ -117,8 +117,7 @@ * Clean up the old-style show/hide that we have implemented in the filter list */ mw.rcfilters.ui.FormWrapperWidget.prototype.cleanUpFieldset = function () { - var $namespaceSelect = this.$element.find( '#namespace' ), - collapseCookieName = 'changeslist-state'; + var $namespaceSelect = this.$element.find( '#namespace' ); this.$element.find( '.rcshowhideoption[data-feature-in-structured-ui=1]' ).each( function () { // HACK: Remove the text node after the span. @@ -139,18 +138,8 @@ this.$element.find( '.mw-tagfilter-label' ).closest( 'tr' ).detach(); } - // Collapse legend - // see resources/src/mediawiki.special/mediawiki.special.changelist.legend.js - this.$element.find( '.mw-changeslist-legend' ) - .makeCollapsible( { - collapsed: mw.cookie.get( collapseCookieName ) === 'collapsed' - } ) - .on( 'beforeExpand.mw-collapsible', function () { - mw.cookie.set( collapseCookieName, 'expanded' ); - } ) - .on( 'beforeCollapse.mw-collapsible', function () { - mw.cookie.set( collapseCookieName, 'collapsed' ); - } ); - + if ( !this.$element.find( '.mw-recentchanges-table tr' ).length ) { + this.$element.find( 'hr' ).detach(); + } }; }( mediaWiki ) ); diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MenuSelectWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MenuSelectWidget.js index 74f8bcd9d2..c12e10eff4 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MenuSelectWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MenuSelectWidget.js @@ -82,17 +82,23 @@ // based on view config.footers = config.footers || []; config.footers.forEach( function ( footerData ) { - var adjustedData = { - // Wrap the element with our own footer wrapper - $element: $( '
' ) - .addClass( 'mw-rcfilters-ui-menuSelectWidget-footer' ) - .addClass( 'mw-rcfilters-ui-menuSelectWidget-footer-' + footerData.name ) - .append( footerData.$element ), - views: footerData.views - }; + var isSticky = footerData.sticky === undefined ? true : !!footerData.sticky, + adjustedData = { + // Wrap the element with our own footer wrapper + $element: $( '
' ) + .addClass( 'mw-rcfilters-ui-menuSelectWidget-footer' ) + .addClass( 'mw-rcfilters-ui-menuSelectWidget-footer-' + footerData.name ) + .append( footerData.$element ), + views: footerData.views + }; this.footers.push( adjustedData ); - this.$element.append( adjustedData.$element ); + + if ( isSticky ) { + this.$element.append( adjustedData.$element ); + } else { + this.$body.append( adjustedData.$element ); + } }.bind( this ) ); // Switch to the correct view diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SaveFiltersPopupButtonWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SaveFiltersPopupButtonWidget.js index 3f920f0013..fc0f3021e3 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SaveFiltersPopupButtonWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SaveFiltersPopupButtonWidget.js @@ -24,7 +24,7 @@ // Parent mw.rcfilters.ui.SaveFiltersPopupButtonWidget.parent.call( this, $.extend( { framed: false, - icon: 'clip', + icon: 'unClip', $overlay: this.$overlay, title: mw.msg( 'rcfilters-savedqueries-add-new-title' ), popup: { @@ -36,7 +36,7 @@ } }, config ) ); // // HACK: Add an icon to the popup head label - this.popup.$head.prepend( ( new OO.ui.IconWidget( { icon: 'clip' } ) ).$element ); + this.popup.$head.prepend( ( new OO.ui.IconWidget( { icon: 'unClip' } ) ).$element ); this.input = new OO.ui.TextInputWidget( { validate: /\S/ @@ -71,8 +71,7 @@ // Events this.popup.connect( this, { - ready: 'onPopupReady', - toggle: 'onPopupToggle' + ready: 'onPopupReady' } ); this.input.connect( this, { enter: 'onInputEnter' } ); this.input.$input.on( { @@ -109,15 +108,6 @@ } }; - /** - * Respond to popup toggle event - * - * @param {boolean} isVisible Popup is visible - */ - mw.rcfilters.ui.SaveFiltersPopupButtonWidget.prototype.onPopupToggle = function ( isVisible ) { - this.setIcon( isVisible ? 'unClip' : 'clip' ); - }; - /** * Respond to popup ready event */ diff --git a/resources/src/mediawiki.special/mediawiki.special.changeslist.legend.js b/resources/src/mediawiki.special/mediawiki.special.changeslist.legend.js index f217bf59aa..ea63e394b0 100644 --- a/resources/src/mediawiki.special/mediawiki.special.changeslist.legend.js +++ b/resources/src/mediawiki.special/mediawiki.special.changeslist.legend.js @@ -7,18 +7,21 @@ var cookieName = 'changeslist-state', // Expanded by default - isCollapsed = mw.cookie.get( cookieName ) === 'collapsed'; + isCollapsed = mw.cookie.get( cookieName ) === 'collapsed', + doCollapsibleLegend = function ( $container ) { + $container.find( '.mw-changeslist-legend' ) + .makeCollapsible( { + collapsed: isCollapsed + } ) + .on( 'beforeExpand.mw-collapsible', function () { + mw.cookie.set( cookieName, 'expanded' ); + } ) + .on( 'beforeCollapse.mw-collapsible', function () { + mw.cookie.set( cookieName, 'collapsed' ); + } ); + }; $( function () { - $( '.mw-changeslist-legend' ) - .makeCollapsible( { - collapsed: isCollapsed - } ) - .on( 'beforeExpand.mw-collapsible', function () { - mw.cookie.set( cookieName, 'expanded' ); - } ) - .on( 'beforeCollapse.mw-collapsible', function () { - mw.cookie.set( cookieName, 'collapsed' ); - } ); + mw.hook( 'wikipage.content' ).add( doCollapsibleLegend ); } ); }( mediaWiki, jQuery ) ); diff --git a/resources/src/mediawiki.special/mediawiki.special.movePage.js b/resources/src/mediawiki.special/mediawiki.special.movePage.js index bce512c44c..2e980ac9fd 100644 --- a/resources/src/mediawiki.special/mediawiki.special.movePage.js +++ b/resources/src/mediawiki.special/mediawiki.special.movePage.js @@ -1,13 +1,15 @@ /*! * JavaScript for Special:MovePage */ -jQuery( function ( $ ) { - // Infuse for pretty dropdown - OO.ui.infuse( 'wpNewTitle' ); - // Limit to 255 bytes, not characters - OO.ui.infuse( 'wpReason' ).$input.byteLimit(); - // Infuse for nicer "help" popup - if ( $( '#wpMovetalk-field' ).length ) { - OO.ui.infuse( 'wpMovetalk-field' ); - } -} ); +( function ( mw, $ ) { + $( function () { + // Infuse for pretty dropdown + OO.ui.infuse( $( '#wpNewTitle' ) ); + // Limit to bytes, not characters + mw.widgets.visibleByteLimit( OO.ui.infuse( $( '#wpReason' ) ) ); + // Infuse for nicer "help" popup + if ( $( '#wpMovetalk-field' ).length ) { + OO.ui.infuse( $( '#wpMovetalk-field' ) ); + } + } ); +}( mediaWiki, jQuery ) ); diff --git a/resources/src/mediawiki.widgets.visibleByteLimit/mediawiki.widgets.visibleByteLimit.js b/resources/src/mediawiki.widgets.visibleByteLimit/mediawiki.widgets.visibleByteLimit.js new file mode 100644 index 0000000000..5678a80efd --- /dev/null +++ b/resources/src/mediawiki.widgets.visibleByteLimit/mediawiki.widgets.visibleByteLimit.js @@ -0,0 +1,21 @@ +/** + * Add a visible byte limit label to a TextInputWidget + * + * Uses jQuery.byteLimit to enforce the limit. + + * @param {OO.ui.TextInputWidget} textInputWidget Text input widget + * @param {number} [limit] Byte limit, defaults to $input's maxlength + */ +mediaWiki.widgets.visibleByteLimit = function ( textInputWidget, limit ) { + limit = limit || +textInputWidget.$input.attr( 'maxlength' ); + + function updateCount() { + textInputWidget.setLabel( ( limit - $.byteLength( textInputWidget.getValue() ) ).toString() ); + } + textInputWidget.on( 'change', updateCount ); + // Initialise value + updateCount(); + + // Actually enforce limit + textInputWidget.$input.byteLimit( limit ); +}; diff --git a/tests/parser/ParserTestRunner.php b/tests/parser/ParserTestRunner.php index f44b0d5e26..a373142d7e 100644 --- a/tests/parser/ParserTestRunner.php +++ b/tests/parser/ParserTestRunner.php @@ -28,6 +28,7 @@ use Wikimedia\Rdbms\IDatabase; use MediaWiki\MediaWikiServices; use Wikimedia\ScopedCallback; +use Wikimedia\TestingAccessWrapper; /** * @ingroup Testing @@ -240,7 +241,7 @@ class ParserTestRunner { 'name' => 'nullLockManager', 'class' => 'NullLockManager', ] ]; - $reset = function() { + $reset = function () { LockManagerGroup::destroySingletons(); }; $setup[] = $reset; @@ -288,7 +289,7 @@ class ParserTestRunner { MediaWikiServices::getInstance()->disableService( 'MediaHandlerFactory' ); MediaWikiServices::getInstance()->redefineService( 'MediaHandlerFactory', - function() { + function () { return new MockMediaHandlerFactory(); } ); @@ -428,7 +429,7 @@ class ParserTestRunner { * @return ScopedCallback */ protected function createTeardownObject( $teardown, $nextTeardown = null ) { - return new ScopedCallback( function() use ( $teardown, $nextTeardown ) { + return new ScopedCallback( function () use ( $teardown, $nextTeardown ) { // Schedule teardown snippets in reverse order $teardown = array_reverse( $teardown ); @@ -1045,6 +1046,11 @@ class ParserTestRunner { $context->setUser( $user ); $context->setLanguage( $lang ); $teardown[] = function () use ( $context ) { + // Clear language conversion tables + $wrapper = TestingAccessWrapper::newFromObject( + $context->getLanguage()->getConverter() + ); + $wrapper->reloadTables(); // Reset context to the restored globals $context->setUser( $GLOBALS['wgUser'] ); $context->setLanguage( $GLOBALS['wgContLang'] ); diff --git a/tests/phpunit/MediaWikiTestCase.php b/tests/phpunit/MediaWikiTestCase.php index df3d5681d7..c1ada45af9 100644 --- a/tests/phpunit/MediaWikiTestCase.php +++ b/tests/phpunit/MediaWikiTestCase.php @@ -309,7 +309,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { ConfigFactory $oldFactory, array $configurations ) { - return function( MediaWikiServices $services ) use ( $oldFactory, $configurations ) { + return function ( MediaWikiServices $services ) use ( $oldFactory, $configurations ) { $factory = new ConfigFactory(); // clone configurations from $oldFactory that are not overwritten by $configurations diff --git a/tests/phpunit/data/resourceloader/script-comment.js b/tests/phpunit/data/resourceloader/script-comment.js new file mode 100644 index 0000000000..46b60f9c01 --- /dev/null +++ b/tests/phpunit/data/resourceloader/script-comment.js @@ -0,0 +1,3 @@ +/* eslint-disable */ +mw.foo() +// mw.bar(); diff --git a/tests/phpunit/data/resourceloader/script-nosemi.js b/tests/phpunit/data/resourceloader/script-nosemi.js new file mode 100644 index 0000000000..2b1550fa9e --- /dev/null +++ b/tests/phpunit/data/resourceloader/script-nosemi.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +mw.foo() diff --git a/tests/phpunit/includes/GlobalFunctions/wfArrayFilterTest.php b/tests/phpunit/includes/GlobalFunctions/wfArrayFilterTest.php index afd80ff7a2..388aee79d1 100644 --- a/tests/phpunit/includes/GlobalFunctions/wfArrayFilterTest.php +++ b/tests/phpunit/includes/GlobalFunctions/wfArrayFilterTest.php @@ -3,19 +3,19 @@ class WfArrayFilterTest extends \PHPUnit_Framework_TestCase { public function testWfArrayFilter() { $arr = [ 'a' => 1, 'b' => 2, 'c' => 3 ]; - $filtered = wfArrayFilter( $arr, function( $val, $key ) { + $filtered = wfArrayFilter( $arr, function ( $val, $key ) { return $key !== 'b'; } ); $this->assertSame( [ 'a' => 1, 'c' => 3 ], $filtered ); $arr = [ 'a' => 1, 'b' => 2, 'c' => 3 ]; - $filtered = wfArrayFilter( $arr, function( $val, $key ) { + $filtered = wfArrayFilter( $arr, function ( $val, $key ) { return $val !== 2; } ); $this->assertSame( [ 'a' => 1, 'c' => 3 ], $filtered ); $arr = [ 'a', 'b', 'c' ]; - $filtered = wfArrayFilter( $arr, function( $val, $key ) { + $filtered = wfArrayFilter( $arr, function ( $val, $key ) { return $key !== 0; } ); $this->assertSame( [ 1 => 'b', 2 => 'c' ], $filtered ); @@ -23,13 +23,13 @@ class WfArrayFilterTest extends \PHPUnit_Framework_TestCase { public function testWfArrayFilterByKey() { $arr = [ 'a' => 1, 'b' => 2, 'c' => 3 ]; - $filtered = wfArrayFilterByKey( $arr, function( $key ) { + $filtered = wfArrayFilterByKey( $arr, function ( $key ) { return $key !== 'b'; } ); $this->assertSame( [ 'a' => 1, 'c' => 3 ], $filtered ); $arr = [ 'a', 'b', 'c' ]; - $filtered = wfArrayFilterByKey( $arr, function( $key ) { + $filtered = wfArrayFilterByKey( $arr, function ( $key ) { return $key !== 0; } ); $this->assertSame( [ 1 => 'b', 2 => 'c' ], $filtered ); diff --git a/tests/phpunit/includes/LinkerTest.php b/tests/phpunit/includes/LinkerTest.php index 3edf99f2e2..2ca5935225 100644 --- a/tests/phpunit/includes/LinkerTest.php +++ b/tests/phpunit/includes/LinkerTest.php @@ -385,21 +385,21 @@ class LinkerTest extends MediaWikiLangTestCase { return [ // Override $html [ - function( $dummy, $title, $options, &$html, &$attribs, &$ret ) { + function ( $dummy, $title, $options, &$html, &$attribs, &$ret ) { $html = 'foobar'; }, 'foobar' ], // Modify $attribs [ - function( $dummy, $title, $options, &$html, &$attribs, &$ret ) { + function ( $dummy, $title, $options, &$html, &$attribs, &$ret ) { $attribs['bar'] = 'baz'; }, 'Special:BlankPage' ], // Fully override return value and abort hook [ - function( $dummy, $title, $options, &$html, &$attribs, &$ret ) { + function ( $dummy, $title, $options, &$html, &$attribs, &$ret ) { $ret = 'blahblahblah'; return false; }, diff --git a/tests/phpunit/includes/MediaWikiServicesTest.php b/tests/phpunit/includes/MediaWikiServicesTest.php index 037faa6fff..b4e9626904 100644 --- a/tests/phpunit/includes/MediaWikiServicesTest.php +++ b/tests/phpunit/includes/MediaWikiServicesTest.php @@ -77,7 +77,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase { $newServices->defineService( 'Test', - function() use ( $service1 ) { + function () use ( $service1 ) { return $service1; } ); @@ -121,7 +121,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase { $newServices->defineService( 'Test', - function() use ( &$instantiatorReturnValues ) { + function () use ( &$instantiatorReturnValues ) { return array_shift( $instantiatorReturnValues ); } ); @@ -150,7 +150,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase { $newServices->redefineService( 'DBLoadBalancerFactory', - function() use ( $lbFactory ) { + function () use ( $lbFactory ) { return $lbFactory; } ); @@ -194,7 +194,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase { $newServices->defineService( 'Test', - function() use ( &$instantiatorReturnValues ) { + function () use ( &$instantiatorReturnValues ) { return array_shift( $instantiatorReturnValues ); } ); @@ -217,7 +217,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase { $services->defineService( 'Test', - function() use ( &$serviceCounter ) { + function () use ( &$serviceCounter ) { $serviceCounter++; $service = $this->createMock( 'MediaWiki\Services\DestructibleService' ); $service->expects( $this->once() )->method( 'destroy' ); @@ -247,7 +247,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase { $services->defineService( 'Test', - function() { + function () { $service = $this->createMock( 'MediaWiki\Services\DestructibleService' ); $service->expects( $this->never() )->method( 'destroy' ); return $service; diff --git a/tests/phpunit/includes/Services/ServiceContainerTest.php b/tests/phpunit/includes/Services/ServiceContainerTest.php index 617e39cf9d..b68ee48b51 100644 --- a/tests/phpunit/includes/Services/ServiceContainerTest.php +++ b/tests/phpunit/includes/Services/ServiceContainerTest.php @@ -20,7 +20,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $this->assertEmpty( $names ); $name = 'TestService92834576'; - $services->defineService( $name, function() { + $services->defineService( $name, function () { return null; } ); @@ -34,7 +34,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $name = 'TestService92834576'; $this->assertFalse( $services->hasService( $name ) ); - $services->defineService( $name, function() { + $services->defineService( $name, function () { return null; } ); @@ -50,7 +50,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $services->defineService( $name, - function( $actualLocator, $extra ) use ( $services, $theService, &$count ) { + function ( $actualLocator, $extra ) use ( $services, $theService, &$count ) { $count++; PHPUnit_Framework_Assert::assertSame( $services, $actualLocator ); PHPUnit_Framework_Assert::assertSame( $extra, 'Foo' ); @@ -79,14 +79,14 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $services->defineService( 'Foo', - function() { + function () { return new stdClass(); } ); $services->defineService( 'Bar', - function() { + function () { return new stdClass(); } ); @@ -122,7 +122,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $theService = new stdClass(); $name = 'TestService92834576'; - $services->defineService( $name, function( $actualLocator ) use ( $services, $theService ) { + $services->defineService( $name, function ( $actualLocator ) use ( $services, $theService ) { PHPUnit_Framework_Assert::assertSame( $services, $actualLocator ); return $theService; } ); @@ -137,13 +137,13 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $theService = new stdClass(); $name = 'TestService92834576'; - $services->defineService( $name, function() use ( $theService ) { + $services->defineService( $name, function () use ( $theService ) { return $theService; } ); $this->setExpectedException( 'MediaWiki\Services\ServiceAlreadyDefinedException' ); - $services->defineService( $name, function() use ( $theService ) { + $services->defineService( $name, function () use ( $theService ) { return $theService; } ); } @@ -152,10 +152,10 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $services = $this->newServiceContainer(); $wiring = [ - 'Foo' => function() { + 'Foo' => function () { return 'Foo!'; }, - 'Bar' => function() { + 'Bar' => function () { return 'Bar!'; }, ]; @@ -170,13 +170,13 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $services = $this->newServiceContainer(); $wiring = [ - 'Foo' => function() { + 'Foo' => function () { return 'Foo!'; }, - 'Bar' => function() { + 'Bar' => function () { return 'Bar!'; }, - 'Car' => function() { + 'Car' => function () { return 'FUBAR!'; }, ]; @@ -187,7 +187,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { // define a service before importing, so we can later check that // existing service instances survive importWiring() - $newServices->defineService( 'Car', function() { + $newServices->defineService( 'Car', function () { return 'Car!'; } ); @@ -196,7 +196,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { // Define another service, so we can later check that extra wiring // is not lost. - $newServices->defineService( 'Xar', function() { + $newServices->defineService( 'Xar', function () { return 'Xar!'; } ); @@ -249,7 +249,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $theService1 = new stdClass(); $name = 'TestService92834576'; - $services->defineService( $name, function() { + $services->defineService( $name, function () { PHPUnit_Framework_Assert::fail( 'The original instantiator function should not get called' ); @@ -258,7 +258,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { // redefine before instantiation $services->redefineService( $name, - function( $actualLocator, $extra ) use ( $services, $theService1 ) { + function ( $actualLocator, $extra ) use ( $services, $theService1 ) { PHPUnit_Framework_Assert::assertSame( $services, $actualLocator ); PHPUnit_Framework_Assert::assertSame( 'Foo', $extra ); return $theService1; @@ -275,14 +275,14 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $theService1 = new stdClass(); $name = 'TestService92834576'; - $services->defineService( $name, function() { + $services->defineService( $name, function () { return 'Foo'; } ); // disable the service. we should be able to redefine it anyway. $services->disableService( $name ); - $services->redefineService( $name, function() use ( $theService1 ) { + $services->redefineService( $name, function () use ( $theService1 ) { return $theService1; } ); @@ -298,7 +298,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' ); - $services->redefineService( $name, function() use ( $theService ) { + $services->redefineService( $name, function () use ( $theService ) { return $theService; } ); } @@ -309,7 +309,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $theService = new stdClass(); $name = 'TestService92834576'; - $services->defineService( $name, function() { + $services->defineService( $name, function () { return 'Foo'; } ); @@ -318,7 +318,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $this->setExpectedException( 'MediaWiki\Services\CannotReplaceActiveServiceException' ); - $services->redefineService( $name, function() use ( $theService ) { + $services->redefineService( $name, function () use ( $theService ) { return $theService; } ); } @@ -331,13 +331,13 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $destructible->expects( $this->once() ) ->method( 'destroy' ); - $services->defineService( 'Foo', function() use ( $destructible ) { + $services->defineService( 'Foo', function () use ( $destructible ) { return $destructible; } ); - $services->defineService( 'Bar', function() { + $services->defineService( 'Bar', function () { return new stdClass(); } ); - $services->defineService( 'Qux', function() { + $services->defineService( 'Qux', function () { return new stdClass(); } ); @@ -377,7 +377,7 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' ); - $services->redefineService( $name, function() use ( $theService ) { + $services->redefineService( $name, function () use ( $theService ) { return $theService; } ); } @@ -390,11 +390,11 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase { $destructible->expects( $this->once() ) ->method( 'destroy' ); - $services->defineService( 'Foo', function() use ( $destructible ) { + $services->defineService( 'Foo', function () use ( $destructible ) { return $destructible; } ); - $services->defineService( 'Bar', function() { + $services->defineService( 'Bar', function () { return new stdClass(); } ); diff --git a/tests/phpunit/includes/Services/TestWiring1.php b/tests/phpunit/includes/Services/TestWiring1.php index 186021a98a..b6ff4eb3b4 100644 --- a/tests/phpunit/includes/Services/TestWiring1.php +++ b/tests/phpunit/includes/Services/TestWiring1.php @@ -4,7 +4,7 @@ */ return [ - 'Foo' => function() { + 'Foo' => function () { return 'Foo!'; }, ]; diff --git a/tests/phpunit/includes/Services/TestWiring2.php b/tests/phpunit/includes/Services/TestWiring2.php index 3b4fff03e4..dfff64f048 100644 --- a/tests/phpunit/includes/Services/TestWiring2.php +++ b/tests/phpunit/includes/Services/TestWiring2.php @@ -4,7 +4,7 @@ */ return [ - 'Bar' => function() { + 'Bar' => function () { return 'Bar!'; }, ]; diff --git a/tests/phpunit/includes/TestLogger.php b/tests/phpunit/includes/TestLogger.php index 84a6adf2ac..21d1bf2504 100644 --- a/tests/phpunit/includes/TestLogger.php +++ b/tests/phpunit/includes/TestLogger.php @@ -2,7 +2,7 @@ /** * Testing logger * - * Copyright (C) 2015 Brad Jorsch + * Copyright (C) 2015 Wikimedia Foundation and contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,7 +20,6 @@ * http://www.gnu.org/copyleft/gpl.html * * @file - * @author Brad Jorsch */ use Psr\Log\LogLevel; diff --git a/tests/phpunit/includes/WatchedItemQueryServiceUnitTest.php b/tests/phpunit/includes/WatchedItemQueryServiceUnitTest.php index 872c580fa8..6b436a8d6d 100644 --- a/tests/phpunit/includes/WatchedItemQueryServiceUnitTest.php +++ b/tests/phpunit/includes/WatchedItemQueryServiceUnitTest.php @@ -21,9 +21,9 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $this->isType( 'array' ), $this->isType( 'int' ) ) - ->will( $this->returnCallback( function( $a, $conj ) { + ->will( $this->returnCallback( function ( $a, $conj ) { $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR '; - return join( $sqlConj, array_map( function( $s ) { + return join( $sqlConj, array_map( function ( $s ) { return '(' . $s . ')'; }, $a ) ); @@ -31,7 +31,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $mock->expects( $this->any() ) ->method( 'addQuotes' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return "'$value'"; } ) ); @@ -41,7 +41,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $mock->expects( $this->any() ) ->method( 'bitAnd' ) - ->willReturnCallback( function( $a, $b ) { + ->willReturnCallback( function ( $a, $b ) { return "($a & $b)"; } ); @@ -106,12 +106,12 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $mock->expects( $this->any() ) ->method( 'isAllowed' ) - ->will( $this->returnCallback( function( $action ) use ( $notAllowedAction ) { + ->will( $this->returnCallback( function ( $action ) use ( $notAllowedAction ) { return $action !== $notAllowedAction; } ) ); $mock->expects( $this->any() ) ->method( 'isAllowedAny' ) - ->will( $this->returnCallback( function() use ( $notAllowedAction ) { + ->will( $this->returnCallback( function () use ( $notAllowedAction ) { $actions = func_get_args(); return !in_array( $notAllowedAction, $actions ); } ) ); @@ -1450,7 +1450,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $mockDb = $this->getMockDb(); $mockDb->expects( $this->any() ) ->method( 'addQuotes' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return "'$value'"; } ) ); $mockDb->expects( $this->any() ) @@ -1459,9 +1459,9 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase { $this->isType( 'array' ), $this->isType( 'int' ) ) - ->will( $this->returnCallback( function( $a, $conj ) { + ->will( $this->returnCallback( function ( $a, $conj ) { $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR '; - return join( $sqlConj, array_map( function( $s ) { + return join( $sqlConj, array_map( function ( $s ) { return '(' . $s . ')'; }, $a ) ); diff --git a/tests/phpunit/includes/WatchedItemStoreUnitTest.php b/tests/phpunit/includes/WatchedItemStoreUnitTest.php index f31028da6f..fa81eb1f23 100644 --- a/tests/phpunit/includes/WatchedItemStoreUnitTest.php +++ b/tests/phpunit/includes/WatchedItemStoreUnitTest.php @@ -48,7 +48,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { ->getMock(); $mock->expects( $this->any() ) ->method( 'makeKey' ) - ->will( $this->returnCallback( function() { + ->will( $this->returnCallback( function () { return implode( ':', func_get_args() ); } ) ); return $mock; @@ -313,12 +313,12 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { ->will( $this->returnValue( 7 ) ); $mockDb->expects( $this->exactly( 1 ) ) ->method( 'addQuotes' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return "'$value'"; } ) ); $mockDb->expects( $this->exactly( 1 ) ) ->method( 'timestamp' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return 'TS' . $value . 'TS'; } ) ); @@ -351,12 +351,12 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $mockDb = $this->getMockDb(); $mockDb->expects( $this->exactly( 2 * 3 ) ) ->method( 'addQuotes' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return "'$value'"; } ) ); $mockDb->expects( $this->exactly( 3 ) ) ->method( 'timestamp' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return 'TS' . $value . 'TS'; } ) ); $mockDb->expects( $this->any() ) @@ -365,9 +365,9 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $this->isType( 'array' ), $this->isType( 'int' ) ) - ->will( $this->returnCallback( function( $a, $conj ) { + ->will( $this->returnCallback( function ( $a, $conj ) { $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR '; - return join( $sqlConj, array_map( function( $s ) { + return join( $sqlConj, array_map( function ( $s ) { return '(' . $s . ')'; }, $a ) ); @@ -446,12 +446,12 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $mockDb = $this->getMockDb(); $mockDb->expects( $this->exactly( 2 * 3 ) ) ->method( 'addQuotes' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return "'$value'"; } ) ); $mockDb->expects( $this->exactly( 3 ) ) ->method( 'timestamp' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return 'TS' . $value . 'TS'; } ) ); $mockDb->expects( $this->any() ) @@ -460,9 +460,9 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $this->isType( 'array' ), $this->isType( 'int' ) ) - ->will( $this->returnCallback( function( $a, $conj ) { + ->will( $this->returnCallback( function ( $a, $conj ) { $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR '; - return join( $sqlConj, array_map( function( $s ) { + return join( $sqlConj, array_map( function ( $s ) { return '(' . $s . ')'; }, $a ) ); @@ -1970,7 +1970,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { // Note: This does not actually assert the job is correct $callableCallCounter = 0; - $mockCallback = function( $callable ) use ( &$callableCallCounter ) { + $mockCallback = function ( $callable ) use ( &$callableCallCounter ) { $callableCallCounter++; $this->assertInternalType( 'callable', $callable ); }; @@ -2011,7 +2011,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { // Note: This does not actually assert the job is correct $callableCallCounter = 0; - $mockCallback = function( $callable ) use ( &$callableCallCounter ) { + $mockCallback = function ( $callable ) use ( &$callableCallCounter ) { $callableCallCounter++; $this->assertInternalType( 'callable', $callable ); }; @@ -2105,13 +2105,13 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $callableCallCounter = 0; $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback( - function( $callable ) use ( &$callableCallCounter, $title, $user ) { + function ( $callable ) use ( &$callableCallCounter, $title, $user ) { $callableCallCounter++; $this->verifyCallbackJob( $callable, $title, $user->getId(), - function( $time ) { + function ( $time ) { return $time === null; } ); @@ -2172,13 +2172,13 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $addUpdateCallCounter = 0; $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback( - function( $callable ) use ( &$addUpdateCallCounter, $title, $user ) { + function ( $callable ) use ( &$addUpdateCallCounter, $title, $user ) { $addUpdateCallCounter++; $this->verifyCallbackJob( $callable, $title, $user->getId(), - function( $time ) { + function ( $time ) { return $time !== null && $time > '20151212010101'; } ); @@ -2187,7 +2187,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $getTimestampCallCounter = 0; $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback( - function( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) { + function ( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) { $getTimestampCallCounter++; $this->assertEquals( $title, $titleParam ); $this->assertEquals( $oldid, $oldidParam ); @@ -2248,13 +2248,13 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $callableCallCounter = 0; $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback( - function( $callable ) use ( &$callableCallCounter, $title, $user ) { + function ( $callable ) use ( &$callableCallCounter, $title, $user ) { $callableCallCounter++; $this->verifyCallbackJob( $callable, $title, $user->getId(), - function( $time ) { + function ( $time ) { return $time === null; } ); @@ -2315,13 +2315,13 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $addUpdateCallCounter = 0; $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback( - function( $callable ) use ( &$addUpdateCallCounter, $title, $user ) { + function ( $callable ) use ( &$addUpdateCallCounter, $title, $user ) { $addUpdateCallCounter++; $this->verifyCallbackJob( $callable, $title, $user->getId(), - function( $time ) { + function ( $time ) { return $time === '30151212010101'; } ); @@ -2330,7 +2330,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $getTimestampCallCounter = 0; $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback( - function( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) { + function ( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) { $getTimestampCallCounter++; $this->assertEquals( $title, $titleParam ); $this->assertEquals( $oldid, $oldidParam ); @@ -2393,13 +2393,13 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $addUpdateCallCounter = 0; $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback( - function( $callable ) use ( &$addUpdateCallCounter, $title, $user ) { + function ( $callable ) use ( &$addUpdateCallCounter, $title, $user ) { $addUpdateCallCounter++; $this->verifyCallbackJob( $callable, $title, $user->getId(), - function( $time ) { + function ( $time ) { return $time === false; } ); @@ -2408,7 +2408,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { $getTimestampCallCounter = 0; $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback( - function( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) { + function ( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) { $getTimestampCallCounter++; $this->assertEquals( $title, $titleParam ); $this->assertEquals( $oldid, $oldidParam ); @@ -2454,7 +2454,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { ->will( $this->returnValue( true ) ); $mockDb->expects( $this->exactly( 1 ) ) ->method( 'timestamp' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return 'TS' . $value . 'TS'; } ) ); @@ -2484,7 +2484,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { ->will( $this->returnValue( true ) ); $mockDb->expects( $this->exactly( 0 ) ) ->method( 'timestamp' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return 'TS' . $value . 'TS'; } ) ); @@ -2515,7 +2515,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase { ->will( $this->returnValue( true ) ); $mockDb->expects( $this->exactly( 1 ) ) ->method( 'timestamp' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return 'TS' . $value . 'TS'; } ) ); $mockDb->expects( $this->once() ) diff --git a/tests/phpunit/includes/api/ApiPageSetTest.php b/tests/phpunit/includes/api/ApiPageSetTest.php index 8a2146a15b..1aa0a133b9 100644 --- a/tests/phpunit/includes/api/ApiPageSetTest.php +++ b/tests/phpunit/includes/api/ApiPageSetTest.php @@ -14,7 +14,7 @@ class ApiPageSetTest extends ApiTestCase { ], 'A simple merge policy adds the redirect data in' => [ - function( $current, $new ) { + function ( $current, $new ) { if ( !isset( $current['index'] ) || $new['index'] < $current['index'] ) { $current['index'] = $new['index']; } diff --git a/tests/phpunit/includes/api/ApiQueryWatchlistIntegrationTest.php b/tests/phpunit/includes/api/ApiQueryWatchlistIntegrationTest.php index b508928381..4f4453fd1b 100644 --- a/tests/phpunit/includes/api/ApiQueryWatchlistIntegrationTest.php +++ b/tests/phpunit/includes/api/ApiQueryWatchlistIntegrationTest.php @@ -210,7 +210,7 @@ class ApiQueryWatchlistIntegrationTest extends ApiTestCase { // not checking values of all keys of the actual item, so removing unwanted keys from comparison $actualItemsOnlyComparedValues = array_map( - function( array $item ) use ( $keysUsedInValueComparison ) { + function ( array $item ) use ( $keysUsedInValueComparison ) { return array_intersect_key( $item, array_flip( $keysUsedInValueComparison ) ); }, $actualItems diff --git a/tests/phpunit/includes/api/RandomImageGenerator.php b/tests/phpunit/includes/api/RandomImageGenerator.php index d5c17ee8ba..50a59f97e8 100644 --- a/tests/phpunit/includes/api/RandomImageGenerator.php +++ b/tests/phpunit/includes/api/RandomImageGenerator.php @@ -87,7 +87,7 @@ class RandomImageGenerator { __DIR__ . '/words.txt' ] as $dictionaryFile ) { - if ( is_file( $dictionaryFile ) and is_readable( $dictionaryFile ) ) { + if ( is_file( $dictionaryFile ) && is_readable( $dictionaryFile ) ) { $this->dictionaryFile = $dictionaryFile; break; } diff --git a/tests/phpunit/includes/config/ConfigFactoryTest.php b/tests/phpunit/includes/config/ConfigFactoryTest.php index 8a766187c8..ba38128f17 100644 --- a/tests/phpunit/includes/config/ConfigFactoryTest.php +++ b/tests/phpunit/includes/config/ConfigFactoryTest.php @@ -63,7 +63,7 @@ class ConfigFactoryTest extends MediaWikiTestCase { // define new config instance $newFactory = new ConfigFactory(); $newFactory->register( 'foo', 'GlobalVarConfig::newInstance' ); - $newFactory->register( 'bar', function() { + $newFactory->register( 'bar', function () { return new HashConfig(); } ); diff --git a/tests/phpunit/includes/content/ContentHandlerTest.php b/tests/phpunit/includes/content/ContentHandlerTest.php index 403bee17b1..ee79ffa40f 100644 --- a/tests/phpunit/includes/content/ContentHandlerTest.php +++ b/tests/phpunit/includes/content/ContentHandlerTest.php @@ -28,7 +28,7 @@ class ContentHandlerTest extends MediaWikiTestCase { CONTENT_MODEL_CSS => 'CssContentHandler', CONTENT_MODEL_TEXT => 'TextContentHandler', 'testing' => 'DummyContentHandlerForTesting', - 'testing-callbacks' => function( $modelId ) { + 'testing-callbacks' => function ( $modelId ) { return new DummyContentHandlerForTesting( $modelId ); } ], @@ -418,7 +418,7 @@ class ContentHandlerTest extends MediaWikiTestCase { $searchEngine->expects( $this->any() ) ->method( 'makeSearchFieldMapping' ) - ->will( $this->returnCallback( function( $name, $type ) { + ->will( $this->returnCallback( function ( $name, $type ) { return new DummySearchIndexFieldDefinition( $name, $type ); } ) ); diff --git a/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php b/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php index f61569af8a..3dc810c811 100644 --- a/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php +++ b/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php @@ -19,10 +19,8 @@ * * @file * @author Antoine Musso - * @author Bryan Davis * @copyright © 2013 Antoine Musso - * @copyright © 2013 Bryan Davis - * @copyright © 2013 Wikimedia Foundation Inc. + * @copyright © 2013 Wikimedia Foundation and contributors */ use Wikimedia\Rdbms\TransactionProfiler; diff --git a/tests/phpunit/includes/jobqueue/JobTest.php b/tests/phpunit/includes/jobqueue/JobTest.php index 00c47c8ae8..6723a0bf9b 100644 --- a/tests/phpunit/includes/jobqueue/JobTest.php +++ b/tests/phpunit/includes/jobqueue/JobTest.php @@ -112,7 +112,7 @@ class JobTest extends MediaWikiTestCase { public function provideTestJobFactory() { return [ 'class name' => [ 'NullJob' ], - 'closure' => [ function( Title $title, array $params ) { + 'closure' => [ function ( Title $title, array $params ) { return new NullJob( $title, $params ); } ], 'function' => [ [ $this, 'newNullJob' ] ], diff --git a/tests/phpunit/includes/libs/DeferredStringifierTest.php b/tests/phpunit/includes/libs/DeferredStringifierTest.php index 5e1970b5e6..cba293926e 100644 --- a/tests/phpunit/includes/libs/DeferredStringifierTest.php +++ b/tests/phpunit/includes/libs/DeferredStringifierTest.php @@ -17,7 +17,7 @@ class DeferredStringifierTest extends PHPUnit_Framework_TestCase { // No args [ [ - function() { + function () { return 'foo'; } ], @@ -26,7 +26,7 @@ class DeferredStringifierTest extends PHPUnit_Framework_TestCase { // Has args [ [ - function( $i ) { + function ( $i ) { return $i; }, 'bar' @@ -41,7 +41,7 @@ class DeferredStringifierTest extends PHPUnit_Framework_TestCase { * it is never converted to a string */ public function testCallbackNotCalled() { - $ds = new DeferredStringifier( function() { + $ds = new DeferredStringifier( function () { throw new Exception( 'This should not be reached!' ); } ); // No exception was thrown diff --git a/tests/phpunit/includes/libs/ObjectFactoryTest.php b/tests/phpunit/includes/libs/ObjectFactoryTest.php index 3e0a61ee7c..35a7b6028d 100644 --- a/tests/phpunit/includes/libs/ObjectFactoryTest.php +++ b/tests/phpunit/includes/libs/ObjectFactoryTest.php @@ -27,13 +27,13 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase { $obj = ObjectFactory::getObjectFromSpec( [ 'class' => 'ObjectFactoryTestFixture', 'args' => [ - function() { + function () { return 'wrapped'; }, 'unwrapped', ], 'calls' => [ - 'setter' => [ function() { + 'setter' => [ function () { return 'wrapped'; }, ], ], @@ -54,13 +54,13 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase { $obj = ObjectFactory::getObjectFromSpec( [ 'class' => 'ObjectFactoryTestFixture', 'args' => [ - function() { + function () { return 'wrapped'; }, 'unwrapped', ], 'calls' => [ - 'setter' => [ function() { + 'setter' => [ function () { return 'wrapped'; }, ], ], @@ -74,11 +74,11 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase { $obj = ObjectFactory::getObjectFromSpec( [ 'class' => 'ObjectFactoryTestFixture', - 'args' => [ function() { + 'args' => [ function () { return 'unwrapped'; }, ], 'calls' => [ - 'setter' => [ function() { + 'setter' => [ function () { return 'unwrapped'; }, ], ], diff --git a/tests/phpunit/includes/libs/XhprofDataTest.php b/tests/phpunit/includes/libs/XhprofDataTest.php index a0fb563802..35e9005251 100644 --- a/tests/phpunit/includes/libs/XhprofDataTest.php +++ b/tests/phpunit/includes/libs/XhprofDataTest.php @@ -21,8 +21,7 @@ /** * @uses XhprofData * @uses AutoLoader - * @author Bryan Davis - * @copyright © 2014 Bryan Davis and Wikimedia Foundation. + * @copyright © 2014 Wikimedia Foundation and contributors * @since 1.25 */ class XhprofDataTest extends PHPUnit_Framework_TestCase { diff --git a/tests/phpunit/includes/libs/XmlTypeCheckTest.php b/tests/phpunit/includes/libs/XmlTypeCheckTest.php index 7f9a772aa7..5c5eeaa702 100644 --- a/tests/phpunit/includes/libs/XmlTypeCheckTest.php +++ b/tests/phpunit/includes/libs/XmlTypeCheckTest.php @@ -66,7 +66,7 @@ XML; null, false, [ - 'processing_instruction_handler' => function() use ( &$called ) { + 'processing_instruction_handler' => function () use ( &$called ) { $called = true; } ] diff --git a/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php b/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php index 2b0436614e..3d405faf3d 100644 --- a/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php +++ b/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php @@ -176,7 +176,7 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase { $priorValue = null; $priorAsOf = null; $wasSet = 0; - $func = function( $old, &$ttl, &$opts, $asOf ) + $func = function ( $old, &$ttl, &$opts, $asOf ) use ( &$wasSet, &$priorValue, &$priorAsOf, $value ) { ++$wasSet; @@ -583,7 +583,7 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase { $value = wfRandomString(); $calls = 0; - $func = function() use ( &$calls, $value, $cache, $key ) { + $func = function () use ( &$calls, $value, $cache, $key ) { ++$calls; // Immediately kill any mutex rather than waiting a second $cache->delete( $cache::MUTEX_KEY_PREFIX . $key ); @@ -625,7 +625,7 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase { $value = wfRandomString(); $calls = 0; - $func = function( $oldValue, &$ttl, &$setOpts ) use ( &$calls, $value, $cache, $key ) { + $func = function ( $oldValue, &$ttl, &$setOpts ) use ( &$calls, $value, $cache, $key ) { ++$calls; $setOpts['since'] = microtime( true ) - 10; // Immediately kill any mutex rather than waiting a second @@ -659,7 +659,7 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase { $busyValue = wfRandomString(); $calls = 0; - $func = function() use ( &$calls, $value, $cache, $key ) { + $func = function () use ( &$calls, $value, $cache, $key ) { ++$calls; // Immediately kill any mutex rather than waiting a second $cache->delete( $cache::MUTEX_KEY_PREFIX . $key ); @@ -921,7 +921,7 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase { $value = wfRandomString(); $wasSet = 0; - $func = function( $old, &$ttl ) use ( &$wasSet, $value ) { + $func = function ( $old, &$ttl ) use ( &$wasSet, $value ) { ++$wasSet; return $value; }; diff --git a/tests/phpunit/includes/libs/rdbms/TransactionProfilerTest.php b/tests/phpunit/includes/libs/rdbms/TransactionProfilerTest.php new file mode 100644 index 0000000000..cb18fb3dc3 --- /dev/null +++ b/tests/phpunit/includes/libs/rdbms/TransactionProfilerTest.php @@ -0,0 +1,141 @@ +getMockBuilder( LoggerInterface::class )->getMock(); + $logger->expects( $this->exactly( 3 ) )->method( 'info' ); + + $tp = new TransactionProfiler(); + $tp->setLogger( $logger ); + $tp->setExpectation( 'maxAffected', 100, __METHOD__ ); + + $tp->transactionWritingIn( 'srv1', 'db1', '123' ); + $tp->recordQueryCompletion( "SQL 1", microtime( true ) - 3, true, 200 ); + $tp->recordQueryCompletion( "SQL 2", microtime( true ) - 3, true, 200 ); + $tp->transactionWritingOut( 'srv1', 'db1', '123', 1, 400 ); + } + + public function testReadTime() { + $logger = $this->getMockBuilder( LoggerInterface::class )->getMock(); + // 1 per query + $logger->expects( $this->exactly( 2 ) )->method( 'info' ); + + $tp = new TransactionProfiler(); + $tp->setLogger( $logger ); + $tp->setExpectation( 'readQueryTime', 5, __METHOD__ ); + + $tp->transactionWritingIn( 'srv1', 'db1', '123' ); + $tp->recordQueryCompletion( "SQL 1", microtime( true ) - 10, false, 1 ); + $tp->recordQueryCompletion( "SQL 2", microtime( true ) - 10, false, 1 ); + $tp->transactionWritingOut( 'srv1', 'db1', '123', 0, 0 ); + } + + public function testWriteTime() { + $logger = $this->getMockBuilder( LoggerInterface::class )->getMock(); + // 1 per query, 1 per trx, and one "sub-optimal trx" entry + $logger->expects( $this->exactly( 4 ) )->method( 'info' ); + + $tp = new TransactionProfiler(); + $tp->setLogger( $logger ); + $tp->setExpectation( 'writeQueryTime', 5, __METHOD__ ); + + $tp->transactionWritingIn( 'srv1', 'db1', '123' ); + $tp->recordQueryCompletion( "SQL 1", microtime( true ) - 10, true, 1 ); + $tp->recordQueryCompletion( "SQL 2", microtime( true ) - 10, true, 1 ); + $tp->transactionWritingOut( 'srv1', 'db1', '123', 20, 1 ); + } + + public function testAffectedTrx() { + $logger = $this->getMockBuilder( LoggerInterface::class )->getMock(); + $logger->expects( $this->exactly( 1 ) )->method( 'info' ); + + $tp = new TransactionProfiler(); + $tp->setLogger( $logger ); + $tp->setExpectation( 'maxAffected', 100, __METHOD__ ); + + $tp->transactionWritingIn( 'srv1', 'db1', '123' ); + $tp->transactionWritingOut( 'srv1', 'db1', '123', 1, 200 ); + } + + public function testWriteTimeTrx() { + $logger = $this->getMockBuilder( LoggerInterface::class )->getMock(); + // 1 per trx, and one "sub-optimal trx" entry + $logger->expects( $this->exactly( 2 ) )->method( 'info' ); + + $tp = new TransactionProfiler(); + $tp->setLogger( $logger ); + $tp->setExpectation( 'writeQueryTime', 5, __METHOD__ ); + + $tp->transactionWritingIn( 'srv1', 'db1', '123' ); + $tp->transactionWritingOut( 'srv1', 'db1', '123', 10, 1 ); + } + + public function testConns() { + $logger = $this->getMockBuilder( LoggerInterface::class )->getMock(); + $logger->expects( $this->exactly( 2 ) )->method( 'info' ); + + $tp = new TransactionProfiler(); + $tp->setLogger( $logger ); + $tp->setExpectation( 'conns', 2, __METHOD__ ); + + $tp->recordConnection( 'srv1', 'db1', false ); + $tp->recordConnection( 'srv1', 'db2', false ); + $tp->recordConnection( 'srv1', 'db3', false ); // warn + $tp->recordConnection( 'srv1', 'db4', false ); // warn + } + + public function testMasterConns() { + $logger = $this->getMockBuilder( LoggerInterface::class )->getMock(); + $logger->expects( $this->exactly( 2 ) )->method( 'info' ); + + $tp = new TransactionProfiler(); + $tp->setLogger( $logger ); + $tp->setExpectation( 'masterConns', 2, __METHOD__ ); + + $tp->recordConnection( 'srv1', 'db1', false ); + $tp->recordConnection( 'srv1', 'db2', false ); + + $tp->recordConnection( 'srv1', 'db1', true ); + $tp->recordConnection( 'srv1', 'db2', true ); + $tp->recordConnection( 'srv1', 'db3', true ); // warn + $tp->recordConnection( 'srv1', 'db4', true ); // warn + } + + public function testReadQueryCount() { + $logger = $this->getMockBuilder( LoggerInterface::class )->getMock(); + $logger->expects( $this->exactly( 2 ) )->method( 'info' ); + + $tp = new TransactionProfiler(); + $tp->setLogger( $logger ); + $tp->setExpectation( 'queries', 2, __METHOD__ ); + + $tp->recordQueryCompletion( "SQL 1", microtime( true ) - .01, false, 0 ); + $tp->recordQueryCompletion( "SQL 2", microtime( true ) - .01, false, 0 ); + $tp->recordQueryCompletion( "SQL 3", microtime( true ) - .01, false, 0 ); // warn + $tp->recordQueryCompletion( "SQL 4", microtime( true ) - .01, false, 0 ); // warn + } + + public function testWriteQueryCount() { + $logger = $this->getMockBuilder( LoggerInterface::class )->getMock(); + $logger->expects( $this->exactly( 2 ) )->method( 'info' ); + + $tp = new TransactionProfiler(); + $tp->setLogger( $logger ); + $tp->setExpectation( 'writes', 2, __METHOD__ ); + + $tp->recordQueryCompletion( "SQL 1", microtime( true ) - .01, false, 0 ); + $tp->recordQueryCompletion( "SQL 2", microtime( true ) - .01, false, 0 ); + $tp->recordQueryCompletion( "SQL 3", microtime( true ) - .01, false, 0 ); + $tp->recordQueryCompletion( "SQL 4", microtime( true ) - .01, false, 0 ); + + $tp->transactionWritingIn( 'srv1', 'db1', '123' ); + $tp->recordQueryCompletion( "SQL 1w", microtime( true ) - .01, true, 2 ); + $tp->recordQueryCompletion( "SQL 2w", microtime( true ) - .01, true, 5 ); + $tp->recordQueryCompletion( "SQL 3w", microtime( true ) - .01, true, 3 ); + $tp->recordQueryCompletion( "SQL 4w", microtime( true ) - .01, true, 1 ); + $tp->transactionWritingOut( 'srv1', 'db1', '123', 1, 1 ); + } +} diff --git a/tests/phpunit/includes/parser/ParserOptionsTest.php b/tests/phpunit/includes/parser/ParserOptionsTest.php index d6061420e7..264e35d5a2 100644 --- a/tests/phpunit/includes/parser/ParserOptionsTest.php +++ b/tests/phpunit/includes/parser/ParserOptionsTest.php @@ -37,66 +37,6 @@ class ParserOptionsTest extends MediaWikiTestCase { ]; } - /** - * @dataProvider provideOptionsHashPre30 - * @param array $usedOptions Used options - * @param string $expect Expected value - * @param array $options Options to set - * @param array $globals Globals to set - */ - public function testOptionsHashPre30( $usedOptions, $expect, $options, $globals = [] ) { - global $wgHooks; - - $globals += [ - 'wgRenderHashAppend' => '', - 'wgHooks' => [], - ]; - $globals['wgHooks'] += [ - 'PageRenderingHash' => [], - ] + $wgHooks; - $this->setMwGlobals( $globals ); - - $popt = new ParserOptions(); - foreach ( $options as $setter => $value ) { - $popt->$setter( $value ); - } - $this->assertSame( $expect, $popt->optionsHashPre30( $usedOptions ) ); - } - - public static function provideOptionsHashPre30() { - $used = [ 'wrapclass', 'printable' ]; - - return [ - 'Canonical options, nothing used' => [ [], '*!*!*!*!*!*', [] ], - 'Canonical options, used some options' => [ $used, '*!*!*!*!*!*', [] ], - 'Used some options, non-default values' => [ - $used, - '*!*!*!*!*!*!printable=1!wrapclass=foobar', - [ - 'setWrapOutputClass' => 'foobar', - 'setIsPrintable' => true, - ] - ], - 'Canonical options, nothing used, but with hooks and $wgRenderHashAppend' => [ - [], - '*!*!*!*!*!wgRenderHashAppend!*!onPageRenderingHash', - [], - [ - 'wgRenderHashAppend' => '!wgRenderHashAppend', - 'wgHooks' => [ 'PageRenderingHash' => [ [ __CLASS__ . '::onPageRenderingHash' ] ] ], - ] - ], - - // Test weird historical behavior is still weird - 'Canonical options, editsection=true used' => [ [ 'editsection' ], '*!*!*!*!*', [ - 'setEditSection' => true, - ] ], - 'Canonical options, editsection=false used' => [ [ 'editsection' ], '*!*!*!*!*!edit=0', [ - 'setEditSection' => false, - ] ], - ]; - } - /** * @dataProvider provideOptionsHash * @param array $usedOptions Used options diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php index 7d12e59ee2..ded56e9201 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php @@ -41,6 +41,12 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase { ] ], + 'htmlTemplateUnknown' => $base + [ + 'templates' => [ + 'templates/notfound.html', + ] + ], + 'aliasedHtmlTemplateModule' => $base + [ 'templates' => [ 'foo.html' => 'templates/template.html', @@ -126,10 +132,30 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase { */ public function testDeprecatedModules( $name, $expected ) { $modules = self::getModules(); - $rl = new ResourceLoaderFileModule( $modules[$name] ); - $rl->setName( $name ); + $module = new ResourceLoaderFileModule( $modules[$name] ); + $module->setName( $name ); + $ctx = $this->getResourceLoaderContext(); + $this->assertEquals( $module->getScript( $ctx ), $expected ); + } + + /** + * @covers ResourceLoaderFileModule::getScript + */ + public function testGetScript() { + $module = new ResourceLoaderFileModule( [ + 'localBasePath' => __DIR__ . '/../../data/resourceloader', + 'scripts' => [ 'script-nosemi.js', 'script-comment.js' ], + ] ); + $module->setName( 'testing' ); $ctx = $this->getResourceLoaderContext(); - $this->assertEquals( $rl->getScript( $ctx ), $expected ); + $this->assertEquals( + "/* eslint-disable */\nmw.foo()\n" . + "\n" . + "/* eslint-disable */\nmw.foo()\n// mw.bar();\n" . + "\n", + $module->getScript( $ctx ), + 'scripts are concatenated with a new-line' + ); } /** @@ -259,6 +285,10 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase { 'bar.html' => "
goodbye
\n", ], ], + [ + $modules['htmlTemplateUnknown'], + false, + ], ]; } @@ -270,9 +300,17 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase { $rl = new ResourceLoaderFileModule( $module ); $rl->setName( 'testing' ); - $this->assertEquals( $rl->getTemplates(), $expected ); + if ( $expected === false ) { + $this->setExpectedException( MWException::class ); + $rl->getTemplates(); + } else { + $this->assertEquals( $rl->getTemplates(), $expected ); + } } + /** + * @covers ResourceLoaderFileModule::stripBom + */ public function testBomConcatenation() { $basePath = __DIR__ . '/../../data/css'; $testModule = new ResourceLoaderFileModule( [ diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php index 17861d8929..6057b9710b 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php @@ -94,6 +94,52 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase { ); } + public static function provideBuildContentScripts() { + return [ + [ + "mw.foo()", + "mw.foo();\n", + ], + [ + "mw.foo();", + "mw.foo();", + ], + [ + "mw.foo();\n", + "mw.foo();\n", + ], + [ + "mw.foo()\n", + "mw.foo()\n;\n", + ], + [ + "mw.foo()\n// mw.bar();", + "mw.foo()\n// mw.bar();", + ], + [ + "mw.foo()// mw.bar();", + "mw.foo()// mw.bar();", + ], + ]; + } + + /** + * @dataProvider provideBuildContentScripts + * @covers ResourceLoaderModule::buildContent + */ + public function testBuildContentScripts( $raw, $build, $message = null ) { + $context = $this->getResourceLoaderContext(); + $module = new ResourceLoaderTestModule( [ + 'script' => $raw + ] ); + $this->assertEquals( $raw, $module->getScript( $context ), 'Raw script' ); + $this->assertEquals( + [ 'scripts' => $build ], + $module->getModuleContent( $context ), + $message + ); + } + /** * @covers ResourceLoaderModule::getRelativePaths * @covers ResourceLoaderModule::expandRelativePaths diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php index 79d0784c27..b7b24731ee 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php @@ -165,6 +165,14 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { $this->assertSame( $expected, $rl->isFileModule( 'test' ) ); } + /** + * @covers ResourceLoader::isFileModule + */ + public function testIsFileModuleUnknown() { + $rl = TestingAccessWrapper::newFromObject( new EmptyResourceLoader() ); + $this->assertSame( false, $rl->isFileModule( 'unknown' ) ); + } + /** * @covers ResourceLoader::isModuleRegistered */ @@ -199,7 +207,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { * @covers ResourceLoader::getModule */ public function testGetModuleFactory() { - $factory = function( array $info ) { + $factory = function ( array $info ) { $this->assertArrayHasKey( 'kitten', $info ); return new ResourceLoaderTestModule( $info ); }; @@ -588,6 +596,12 @@ mw.example(); ] ); $context = $this->getResourceLoaderContext( [], $rl ); + $this->assertEquals( + '', + $rl->getCombinedVersion( $context, [] ), + 'empty list' + ); + $this->assertEquals( ResourceLoader::makeHash( self::BLANK_VERSION ), $rl->getCombinedVersion( $context, [ 'foo' ] ), @@ -603,10 +617,94 @@ mw.example(); ); } + public static function provideMakeModuleResponseConcat() { + $testcases = [ + [ + 'modules' => [ + 'foo' => 'foo()', + ], + 'expected' => "foo();\n" . 'mw.loader.state( { + "foo": "ready" +} );', + 'minified' => "foo();" . 'mw.loader.state({"foo":"ready"});', + 'message' => 'Script without semi-colon', + ], + [ + 'modules' => [ + 'foo' => 'foo()', + 'bar' => 'bar()', + ], + 'expected' => "foo();\nbar();\n" . 'mw.loader.state( { + "foo": "ready", + "bar": "ready" +} );', + 'minified' => "foo();bar();" . 'mw.loader.state({"foo":"ready","bar":"ready"});', + 'message' => 'Two scripts without semi-colon', + ], + [ + 'modules' => [ + 'foo' => "foo()\n// bar();" + ], + // FIXME: Invalid code (T162719) + 'expected' => "foo()\n// bar();" . 'mw.loader.state( { + "foo": "ready" +} );', + // FIXME: Invalid code (T162719) + 'minified' => "foo()" . 'mw.loader.state({"foo":"ready"});', + 'message' => 'Script with semi-colon in comment', + ], + ]; + $ret = []; + foreach ( $testcases as $i => $case ) { + $ret["#$i"] = [ + $case['modules'], + $case['expected'], + true, // debug + $case['message'], + ]; + $ret["#$i (minified)"] = [ + $case['modules'], + $case['minified'], + false, // debug + $case['message'], + ]; + } + return $ret; + } + + /** + * Verify how multiple scripts and mw.loader.state() calls are concatenated. + * + * @dataProvider provideMakeModuleResponseConcat + * @covers ResourceLoader::makeModuleResponse + */ + public function testMakeModuleResponseConcat( $scripts, $expected, $debug, $message = null ) { + $rl = new EmptyResourceLoader(); + $modules = array_map( function ( $script ) { + return self::getSimpleModuleMock( $script ); + }, $scripts ); + $rl->register( $modules ); + + $this->setMwGlobals( 'wgResourceLoaderDebug', $debug ); + $context = $this->getResourceLoaderContext( + [ + 'modules' => implode( '|', array_keys( $modules ) ), + 'only' => 'scripts', + ], + $rl + ); + + $response = $rl->makeModuleResponse( $context, $modules ); + $this->assertCount( 0, $rl->getErrors(), 'Error count' ); + $this->assertEquals( $expected, $response, $message ?: 'Response' ); + } + /** * Verify that when building module content in a load.php response, * an exception from one module will not break script output from * other modules. + * + * @covers ResourceLoader::makeModuleResponse */ public function testMakeModuleResponseError() { $modules = [ @@ -643,6 +741,8 @@ mw.example(); * Verify that when building the startup module response, * an exception from one module class will not break the entire * startup module response. See T152266. + * + * @covers ResourceLoader::makeModuleResponse */ public function testMakeModuleResponseStartupError() { $rl = new EmptyResourceLoader(); diff --git a/tests/phpunit/includes/search/SearchEnginePrefixTest.php b/tests/phpunit/includes/search/SearchEnginePrefixTest.php index fbbcee5897..4c5bab3fcc 100644 --- a/tests/phpunit/includes/search/SearchEnginePrefixTest.php +++ b/tests/phpunit/includes/search/SearchEnginePrefixTest.php @@ -185,7 +185,7 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase { public function testSearch( array $case ) { $this->search->setLimitOffset( 3 ); $results = $this->search->defaultPrefixSearch( $case['query'] ); - $results = array_map( function( Title $t ) { + $results = array_map( function ( Title $t ) { return $t->getPrefixedText(); }, $results ); @@ -203,7 +203,7 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase { public function testSearchWithOffset( array $case ) { $this->search->setLimitOffset( 3, 1 ); $results = $this->search->defaultPrefixSearch( $case['query'] ); - $results = array_map( function( Title $t ) { + $results = array_map( function ( Title $t ) { return $t->getPrefixedText(); }, $results ); @@ -349,7 +349,7 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase { $search->setLimitOffset( 3 ); $results = $search->completionSearch( $case['query'] ); - $results = $results->map( function( SearchSuggestion $s ) { + $results = $results->map( function ( SearchSuggestion $s ) { return $s->getText(); } ); diff --git a/tests/phpunit/includes/search/SearchEngineTest.php b/tests/phpunit/includes/search/SearchEngineTest.php index c74c893901..c945d1e217 100644 --- a/tests/phpunit/includes/search/SearchEngineTest.php +++ b/tests/phpunit/includes/search/SearchEngineTest.php @@ -121,7 +121,25 @@ class SearchEngineTest extends MediaWikiLangTestCase { $this->assertEquals( [ 'Smithee' ], $this->fetchIds( $this->search->searchText( 'smithee' ) ), - "Plain search failed" ); + "Plain search" ); + } + + public function testPhraseSearch() { + $res = $this->search->searchText( '"smithee is one who smiths"' ); + $this->assertEquals( + [ 'Smithee' ], + $this->fetchIds( $res ), + "Search a phrase" ); + $res = $this->search->searchText( '"smithee is one who smiths"' ); + $match = $res->next(); + $terms = [ 'smithee', 'is', 'one', 'who', 'smiths' ]; + $snippet = ""; + foreach ( $terms as $term ) { + $snippet .= " " . $term . ""; + } + $this->assertRegexp( '/' . preg_quote( $snippet, '/' ) . '/', + $match->getTextSnippet( $res->termMatches() ), + "Highlight a phrase search" ); } public function testTextPowerSearch() { @@ -132,7 +150,7 @@ class SearchEngineTest extends MediaWikiLangTestCase { 'Talk:Not Main Page', ], $this->fetchIds( $this->search->searchText( 'smithee' ) ), - "Power search failed" ); + "Power search" ); } public function testTitleSearch() { @@ -142,7 +160,7 @@ class SearchEngineTest extends MediaWikiLangTestCase { 'Smithee', ], $this->fetchIds( $this->search->searchTitle( 'smithee' ) ), - "Title search failed" ); + "Title search" ); } public function testTextTitlePowerSearch() { @@ -154,7 +172,7 @@ class SearchEngineTest extends MediaWikiLangTestCase { 'Talk:Smithee', ], $this->fetchIds( $this->search->searchTitle( 'smithee' ) ), - "Title power search failed" ); + "Title power search" ); } /** diff --git a/tests/phpunit/includes/search/SearchSuggestionSetTest.php b/tests/phpunit/includes/search/SearchSuggestionSetTest.php index 60559fcafc..28c69fa4b1 100644 --- a/tests/phpunit/includes/search/SearchSuggestionSetTest.php +++ b/tests/phpunit/includes/search/SearchSuggestionSetTest.php @@ -43,7 +43,7 @@ class SearchSuggestionSetTest extends \PHPUnit_Framework_TestCase { $this->assertEquals( 3, $set->getBestScore() ); $this->assertEquals( 1, $suggestion->getScore() ); - $scores = $set->map( function( $s ) { + $scores = $set->map( function ( $s ) { return $s->getScore(); } ); $sorted = $scores; @@ -80,7 +80,7 @@ class SearchSuggestionSetTest extends \PHPUnit_Framework_TestCase { $this->assertEquals( 6, $set->getBestScore() ); $this->assertEquals( 6, $suggestion->getScore() ); - $scores = $set->map( function( $s ) { + $scores = $set->map( function ( $s ) { return $s->getScore(); } ); $sorted = $scores; diff --git a/tests/phpunit/includes/site/CachingSiteStoreTest.php b/tests/phpunit/includes/site/CachingSiteStoreTest.php index 7e37907be0..adf95e6cde 100644 --- a/tests/phpunit/includes/site/CachingSiteStoreTest.php +++ b/tests/phpunit/includes/site/CachingSiteStoreTest.php @@ -101,7 +101,7 @@ class CachingSiteStoreTest extends MediaWikiTestCase { $dbSiteStore->expects( $this->any() ) ->method( 'getSites' ) - ->will( $this->returnCallback( function() { + ->will( $this->returnCallback( function () { $siteList = new SiteList(); $siteList->setSite( $this->getTestSite() ); diff --git a/tests/phpunit/includes/specials/SpecialSearchTest.php b/tests/phpunit/includes/specials/SpecialSearchTest.php index 4e9d826360..94924ee1e7 100644 --- a/tests/phpunit/includes/specials/SpecialSearchTest.php +++ b/tests/phpunit/includes/specials/SpecialSearchTest.php @@ -183,7 +183,7 @@ class SpecialSearchTest extends MediaWikiTestCase { $rewrittenQuery, array $resultTitles ) { - $results = array_map( function( $title ) { + $results = array_map( function ( $title ) { return SearchResult::newFromTitle( $title ); }, $resultTitles ); diff --git a/tests/phpunit/includes/utils/BatchRowUpdateTest.php b/tests/phpunit/includes/utils/BatchRowUpdateTest.php index 6506d58e21..017e97d357 100644 --- a/tests/phpunit/includes/utils/BatchRowUpdateTest.php +++ b/tests/phpunit/includes/utils/BatchRowUpdateTest.php @@ -36,7 +36,7 @@ class BatchRowUpdateTest extends MediaWikiTestCase { $batchSize = 2; $reader = new BatchRowIterator( $db, 'some_table', 'id_field', $batchSize ); - $response = $this->genSelectResult( $batchSize, /*numRows*/ 5, function() { + $response = $this->genSelectResult( $batchSize, /*numRows*/ 5, function () { static $i = 0; return [ 'id_field' => ++$i ]; } ); @@ -171,7 +171,7 @@ class BatchRowUpdateTest extends MediaWikiTestCase { public function testReaderSelectConditionsMultiplePrimaryKeys( $message, $expectedSecondIteration, $primaryKeys, $batchSize = 3 ) { - $results = $this->genSelectResult( $batchSize, $batchSize * 3, function() { + $results = $this->genSelectResult( $batchSize, $batchSize * 3, function () { static $i = 0, $j = 100, $k = 1000; return [ 'id_field' => ++$i, 'foo' => ++$j, 'bar' => ++$k ]; } ); @@ -204,7 +204,7 @@ class BatchRowUpdateTest extends MediaWikiTestCase { ->will( $this->consecutivelyReturnFromSelect( $retvals ) ); $db->expects( $this->any() ) ->method( 'addQuotes' ) - ->will( $this->returnCallback( function( $value ) { + ->will( $this->returnCallback( function ( $value ) { return "'$value'"; // not real quoting: doesn't matter in test } ) );