Update to MediaWiki 1.33.0

This commit is contained in:
Pierre Schmitz 2019-08-31 08:35:41 +02:00 committed by Pierre Schmitz
parent c9a9459712
commit c93b1344da
5814 changed files with 308911 additions and 154730 deletions

143
.phan/config.php Normal file
View File

@ -0,0 +1,143 @@
<?php
/**
* 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
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
$cfg = require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php';
$cfg['file_list'] = array_merge(
$cfg['file_list'],
function_exists( 'register_postsend_function' ) ? [] : [ '.phan/stubs/hhvm.php' ],
function_exists( 'wikidiff2_do_diff' ) ? [] : [ '.phan/stubs/wikidiff.php' ],
class_exists( PEAR::class ) ? [] : [ '.phan/stubs/mail.php' ],
defined( 'PASSWORD_ARGON2I' ) ? [] : [ '.phan/stubs/password.php' ],
// Per composer.json, PHPUnit 6 is used for PHP 7.0+, PHPUnit 4 otherwise.
// Load the interface for the version of PHPUnit that isn't installed.
// Phan only supports PHP 7.0+ (and not HHVM), so we only need to stub PHPUnit 4.
class_exists( PHPUnit_TextUI_Command::class ) ? [] : [ '.phan/stubs/phpunit4.php' ],
class_exists( ProfilerExcimer::class ) ? [] : [ '.phan/stubs/excimer.php' ],
[
'maintenance/7zip.inc',
'maintenance/cleanupTable.inc',
'maintenance/CodeCleanerGlobalsPass.inc',
'maintenance/commandLine.inc',
'maintenance/sqlite.inc',
'maintenance/userDupes.inc',
'maintenance/language/checkLanguage.inc',
'maintenance/language/languages.inc',
]
);
$cfg['autoload_internal_extension_signatures'] = [
'memcached' => '.phan/internal_stubs/memcached.phan_php',
'oci8' => '.phan/internal_stubs/oci8.phan_php',
'sqlsrv' => '.phan/internal_stubs/sqlsrv.phan_php',
'tideways' => '.phan/internal_stubs/tideways.phan_php',
];
$cfg['directory_list'] = [
'includes/',
'languages/',
'maintenance/',
'mw-config/',
'resources/',
'vendor/',
'.phan/stubs/',
];
$cfg['exclude_analysis_directory_list'] = [
'vendor/',
'.phan/stubs/',
// The referenced classes are not available in vendor, only when
// included from composer.
'includes/composer/',
// Directly references classes that only exist in Translate extension
'maintenance/language/',
// External class
'includes/libs/jsminplus.php',
];
$cfg['suppress_issue_types'] = array_merge( $cfg['suppress_issue_types'], [
// approximate error count: 18
"PhanAccessMethodInternal",
// approximate error count: 17
"PhanCommentParamOnEmptyParamList",
// approximate error count: 29
"PhanCommentParamWithoutRealParam",
// approximate error count: 2
"PhanCompatibleNegativeStringOffset",
// approximate error count: 21
"PhanParamReqAfterOpt",
// approximate error count: 26
"PhanParamSignatureMismatch",
// approximate error count: 4
"PhanParamSignatureMismatchInternal",
// approximate error count: 127
"PhanParamTooMany",
// approximate error count: 2
"PhanTraitParentReference",
// approximate error count: 30
"PhanTypeArraySuspicious",
// approximate error count: 27
"PhanTypeArraySuspiciousNullable",
// approximate error count: 26
"PhanTypeComparisonFromArray",
// approximate error count: 63
"PhanTypeInvalidDimOffset",
// approximate error count: 7
"PhanTypeInvalidLeftOperandOfIntegerOp",
// approximate error count: 2
"PhanTypeInvalidRightOperandOfIntegerOp",
// approximate error count: 154
"PhanTypeMismatchArgument",
// approximate error count: 27
"PhanTypeMismatchArgumentInternal",
// approximate error count: 2
"PhanTypeMismatchDimEmpty",
// approximate error count: 27
"PhanTypeMismatchDimFetch",
// approximate error count: 10
"PhanTypeMismatchForeach",
// approximate error count: 77
"PhanTypeMismatchProperty",
// approximate error count: 84
"PhanTypeMismatchReturn",
// approximate error count: 12
"PhanTypeObjectUnsetDeclaredProperty",
// approximate error count: 9
"PhanTypeSuspiciousNonTraversableForeach",
// approximate error count: 3
"PhanTypeSuspiciousStringExpression",
// approximate error count: 22
"PhanUndeclaredConstant",
// approximate error count: 3
"PhanUndeclaredInvokeInCallable",
// approximate error count: 237
"PhanUndeclaredMethod",
// approximate error count: 846
"PhanUndeclaredProperty",
// approximate error count: 2
"PhanUndeclaredVariableAssignOp",
// approximate error count: 55
"PhanUndeclaredVariableDim",
] );
$cfg['ignore_undeclared_variables_in_global_scope'] = true;
$cfg['globals_type_map']['IP'] = 'string';
return $cfg;

View File

@ -0,0 +1,180 @@
<?php
// These stubs were generated by the phan stub generator.
// @phan-stub-for-extension memcached@3.0.1
namespace {
class Memcached {
// constants
const LIBMEMCACHED_VERSION_HEX = 16777240;
const OPT_COMPRESSION = -1001;
const OPT_COMPRESSION_TYPE = -1004;
const OPT_PREFIX_KEY = -1002;
const OPT_SERIALIZER = -1003;
const OPT_USER_FLAGS = -1006;
const OPT_STORE_RETRY_COUNT = -1005;
const HAVE_IGBINARY = true;
const HAVE_JSON = true;
const HAVE_MSGPACK = true;
const HAVE_SESSION = true;
const HAVE_SASL = true;
const OPT_HASH = 2;
const HASH_DEFAULT = 0;
const HASH_MD5 = 1;
const HASH_CRC = 2;
const HASH_FNV1_64 = 3;
const HASH_FNV1A_64 = 4;
const HASH_FNV1_32 = 5;
const HASH_FNV1A_32 = 6;
const HASH_HSIEH = 7;
const HASH_MURMUR = 8;
const OPT_DISTRIBUTION = 9;
const DISTRIBUTION_MODULA = 0;
const DISTRIBUTION_CONSISTENT = 1;
const DISTRIBUTION_VIRTUAL_BUCKET = 6;
const OPT_LIBKETAMA_COMPATIBLE = 16;
const OPT_LIBKETAMA_HASH = 17;
const OPT_TCP_KEEPALIVE = 32;
const OPT_BUFFER_WRITES = 10;
const OPT_BINARY_PROTOCOL = 18;
const OPT_NO_BLOCK = 0;
const OPT_TCP_NODELAY = 1;
const OPT_SOCKET_SEND_SIZE = 4;
const OPT_SOCKET_RECV_SIZE = 5;
const OPT_CONNECT_TIMEOUT = 14;
const OPT_RETRY_TIMEOUT = 15;
const OPT_DEAD_TIMEOUT = 36;
const OPT_SEND_TIMEOUT = 19;
const OPT_RECV_TIMEOUT = 20;
const OPT_POLL_TIMEOUT = 8;
const OPT_CACHE_LOOKUPS = 6;
const OPT_SERVER_FAILURE_LIMIT = 21;
const OPT_AUTO_EJECT_HOSTS = 28;
const OPT_HASH_WITH_PREFIX_KEY = 25;
const OPT_NOREPLY = 26;
const OPT_SORT_HOSTS = 12;
const OPT_VERIFY_KEY = 13;
const OPT_USE_UDP = 27;
const OPT_NUMBER_OF_REPLICAS = 29;
const OPT_RANDOMIZE_REPLICA_READ = 30;
const OPT_REMOVE_FAILED_SERVERS = 35;
const OPT_SERVER_TIMEOUT_LIMIT = 37;
const RES_SUCCESS = 0;
const RES_FAILURE = 1;
const RES_HOST_LOOKUP_FAILURE = 2;
const RES_UNKNOWN_READ_FAILURE = 7;
const RES_PROTOCOL_ERROR = 8;
const RES_CLIENT_ERROR = 9;
const RES_SERVER_ERROR = 10;
const RES_WRITE_FAILURE = 5;
const RES_DATA_EXISTS = 12;
const RES_NOTSTORED = 14;
const RES_NOTFOUND = 16;
const RES_PARTIAL_READ = 18;
const RES_SOME_ERRORS = 19;
const RES_NO_SERVERS = 20;
const RES_END = 21;
const RES_ERRNO = 26;
const RES_BUFFERED = 32;
const RES_TIMEOUT = 31;
const RES_BAD_KEY_PROVIDED = 33;
const RES_STORED = 15;
const RES_DELETED = 22;
const RES_STAT = 24;
const RES_ITEM = 25;
const RES_NOT_SUPPORTED = 28;
const RES_FETCH_NOTFINISHED = 30;
const RES_SERVER_MARKED_DEAD = 35;
const RES_UNKNOWN_STAT_KEY = 36;
const RES_INVALID_HOST_PROTOCOL = 34;
const RES_MEMORY_ALLOCATION_FAILURE = 17;
const RES_CONNECTION_SOCKET_CREATE_FAILURE = 11;
const RES_E2BIG = 37;
const RES_KEY_TOO_BIG = 39;
const RES_SERVER_TEMPORARILY_DISABLED = 47;
const RES_SERVER_MEMORY_ALLOCATION_FAILURE = 48;
const RES_AUTH_PROBLEM = 40;
const RES_AUTH_FAILURE = 41;
const RES_AUTH_CONTINUE = 42;
const RES_PAYLOAD_FAILURE = -1001;
const SERIALIZER_PHP = 1;
const SERIALIZER_IGBINARY = 2;
const SERIALIZER_JSON = 3;
const SERIALIZER_JSON_ARRAY = 4;
const SERIALIZER_MSGPACK = 5;
const COMPRESSION_FASTLZ = 2;
const COMPRESSION_ZLIB = 1;
const GET_PRESERVE_ORDER = 1;
const GET_EXTENDED = 2;
const GET_ERROR_RETURN_VALUE = false;
// methods
public function __construct($persistent_id = null, $callback = null) {}
public function getResultCode() {}
public function getResultMessage() {}
public function get($key, $cache_cb = null, $get_flags = null) {}
public function getByKey($server_key, $key, $cache_cb = null, $get_flags = null) {}
public function getMulti(array $keys, $get_flags = null) {}
public function getMultiByKey($server_key, array $keys, $get_flags = null) {}
public function getDelayed(array $keys, $with_cas = null, $value_cb = null) {}
public function getDelayedByKey($server_key, array $keys, $with_cas = null, $value_cb = null) {}
public function fetch() {}
public function fetchAll() {}
public function set($key, $value, $expiration = null) {}
public function setByKey($server_key, $key, $value, $expiration = null) {}
public function touch($key, $expiration) {}
public function touchByKey($server_key, $key, $expiration) {}
public function setMulti(array $items, $expiration = null) {}
public function setMultiByKey($server_key, array $items, $expiration = null) {}
public function cas($cas_token, $key, $value, $expiration = null) {}
public function casByKey($cas_token, $server_key, $key, $value, $expiration = null) {}
public function add($key, $value, $expiration = null) {}
public function addByKey($server_key, $key, $value, $expiration = null) {}
public function append($key, $value, $expiration = null) {}
public function appendByKey($server_key, $key, $value, $expiration = null) {}
public function prepend($key, $value, $expiration = null) {}
public function prependByKey($server_key, $key, $value, $expiration = null) {}
public function replace($key, $value, $expiration = null) {}
public function replaceByKey($server_key, $key, $value, $expiration = null) {}
public function delete($key, $time = null) {}
public function deleteMulti($keys, $time = null) {}
public function deleteByKey($server_key, $key, $time = null) {}
public function deleteMultiByKey($server_key, $keys, $time = null) {}
public function increment($key, $offset = null, $initial_value = null, $expiry = null) {}
public function decrement($key, $offset = null, $initial_value = null, $expiry = null) {}
public function incrementByKey($server_key, $key, $offset = null, $initial_value = null, $expiry = null) {}
public function decrementByKey($server_key, $key, $offset = null, $initial_value = null, $expiry = null) {}
public function addServer($host, $port, $weight = null) {}
public function addServers(array $servers) {}
public function getServerList() {}
public function getServerByKey($server_key) {}
public function resetServerList() {}
public function quit() {}
public function flushBuffers() {}
public function getLastErrorMessage() {}
public function getLastErrorCode() {}
public function getLastErrorErrno() {}
public function getLastDisconnectedServer() {}
public function getStats($args) {}
public function getVersion() {}
public function getAllKeys() {}
public function flush($delay = null) {}
public function getOption($option) {}
public function setOption($option, $value) {}
public function setOptions($options) {}
public function setBucket($host_map, $forward_map, $replicas) {}
public function setSaslAuthData($username, $password) {}
public function isPersistent() {}
public function isPristine() {}
}
class MemcachedException extends \RuntimeException {
// properties
protected $message;
protected $code;
protected $file;
protected $line;
}
}

View File

@ -0,0 +1,589 @@
<?php
// @phan-stub-for-extension oci8@2.0.7
class OCI_Lob {
public function load () {}
public function tell () {}
public function truncate ($length = 0) {}
public function erase ($offset = null, $length = null) {}
public function flush ($flag = null) {}
public function setbuffering ($on_off) {}
public function getbuffering () {}
public function rewind () {}
public function read ($length) {}
public function eof () {}
public function seek ($offset, $whence = OCI_SEEK_SET) {}
public function write ($data, $length = null) {}
public function append (OCI_Lob $lob_from) {}
public function size () {}
public function writetofile ($filename, $start, $length) {}
public function export ($filename, $start = null, $length = null) {}
public function import ($filename) {}
public function writeTemporary ($data, $lob_type = OCI_TEMP_CLOB) {}
public function close () {}
public function save ($data, $offset = null) {}
public function savefile ($filename) {}
public function free () {}
}
class OCI_Collection {
public function append ($value) {}
public function getelem ($index) {}
public function assignelem ($index, $value) {}
public function assign (OCI_Collection $from) {}
public function size () {}
public function max () {}
public function trim ($num) {}
public function free () {}
}
function oci_define_by_name ($statement, $column_name, &$variable, $type = SQLT_CHR) {}
function oci_bind_by_name ($statement, $bv_name, &$variable, $maxlength = -1, $type = SQLT_CHR) {}
function oci_bind_array_by_name ($statement, $name, array &$var_array, $max_table_length, $max_item_length = -1, $type = SQLT_AFC) {}
function oci_field_is_null ($statement, $field) {}
function oci_field_name ($statement, $field) {}
function oci_field_size ($statement, $field) {}
function oci_field_scale ($statement, $field) {}
function oci_field_precision ($statement, $field) {}
function oci_field_type ($statement, $field) {}
function oci_field_type_raw ($statement, $field) {}
function oci_execute ($statement, $mode = OCI_COMMIT_ON_SUCCESS) {}
function oci_cancel ($statement) {}
function oci_fetch ($statement) {}
function oci_fetch_object ($statement) {}
function oci_fetch_row ($statement) {}
function oci_fetch_assoc ($statement) {}
function oci_fetch_array ($statement, $mode = null) {}
function ocifetchinto ($statement_resource, &$result, $mode = null) {}
function oci_fetch_all ($statement, array &$output, $skip = 0, $maxrows = -1, $flags = OCI_FETCHSTATEMENT_BY_COLUMN | OCI_ASSOC) {}
function oci_free_statement ($statement) {}
function oci_internal_debug ($onoff) {}
function oci_num_fields ($statement) {}
function oci_parse ($connection, $sql_text) {}
function oci_get_implicit_resultset ($statement) {}
function oci_new_cursor ($connection) {}
function oci_result ($statement, $field) {}
function oci_client_version () {}
function oci_server_version ($connection) {}
function oci_statement_type ($statement) {}
function oci_num_rows ($statement) {}
function oci_close ($connection) {}
function oci_connect ($username, $password, $connection_string = null, $character_set = null, $session_mode = null) {}
function oci_new_connect ($username, $password, $connection_string = null, $character_set = null, $session_mode = null) {}
function oci_pconnect ($username, $password, $connection_string = null, $character_set = null, $session_mode = null) {}
function oci_error ($resource = null) {}
function oci_free_descriptor ($descriptor) {}
function oci_lob_is_equal (OCI_Lob $lob1, OCI_Lob $lob2) {}
function oci_lob_copy (OCI_Lob $lob_to, OCI_Lob $lob_from, $length = 0) {}
function oci_commit ($connection) {}
function oci_rollback ($connection) {}
function oci_new_descriptor ($connection, $type = OCI_DTYPE_LOB) {}
function oci_set_prefetch ($statement, $rows) {}
function oci_set_client_identifier ($connection, $client_identifier) {}
function oci_set_edition ($edition) {}
function oci_set_module_name ($connection, $module_name) {}
function oci_set_action ($connection, $action_name) {}
function oci_set_client_info ($connection, $client_info) {}
function oci_password_change ($connection, $username, $old_password, $new_password) {}
function oci_new_collection ($connection, $tdo, $schema = null) {}
function oci_free_cursor ($statement_resource) {}
function ocifreecursor ($statement_resource) {}
function ocibindbyname ($statement, $column_name, &$variable, $maximum_length = -1, $type = SQLT_CHR) {}
function ocidefinebyname ($statement, $column_name, &$variable, $type = SQLT_CHR) {}
function ocicolumnisnull ($statement, $column_number_or_name) {}
function ocicolumnname ($statement, $column_number) {}
function ocicolumnsize ($statement, $column_number_or_name) {}
function ocicolumnscale ($statement_resource, $column_number) {}
function ocicolumnprecision ($statement_resource, $column_number) {}
function ocicolumntype ($statement_resource, $column_number) {}
function ocicolumntyperaw ($statement_resource, $column_number) {}
function ociexecute ($statement_resource, $mode = OCI_COMMIT_ON_SUCCESS) {}
function ocicancel ($statement_resource) {}
function ocifetch ($statement_resource) {}
function ocifetchstatement ($statement_resource, &$output, $skip, $maximum_rows, $flags) {}
function ocifreestatement ($statement_resource) {}
function ociinternaldebug ($mode) {}
function ocinumcols ($statement_resource) {}
function ociparse ($connection_resource, $sql_text) {}
function ocinewcursor ($connection_resource) {}
function ociresult ($statement_resource, $column_number_or_name) {}
function ociserverversion ($connection_resource) {}
function ocistatementtype ($statement_resource) {}
function ocirowcount ($statement_resource) {}
function ocilogoff ($connection_resource) {}
function ocilogon ($username, $password, $connection_string, $character_set, $session_mode) {}
function ocinlogon ($username, $password, $connection_string, $character_set, $session_mode) {}
function ociplogon ($username, $password, $connection_string, $character_set, $session_mode) {}
function ocierror ($connection_or_statement_resource) {}
function ocifreedesc ($lob_descriptor) {}
function ocisavelob ($lob_descriptor, $data, $offset) {}
function ocisavelobfile ($lob_descriptor, $filename) {}
function ociwritelobtofile ($lob_descriptor, $filename, $start, $length) {}
function ociloadlob ($lob_descriptor) {}
function ocicommit ($connection_resource) {}
function ocirollback ($connection_resource) {}
function ocinewdescriptor ($connection_resource, $type = OCI_DTYPE_LOB) {}
function ocisetprefetch ($statement_resource, $number_of_rows) {}
function ocipasswordchange ($connection_resource_or_connection_string_or_dbname, $username, $old_password, $new_password) {}
function ocifreecollection ($collection) {}
function ocinewcollection ($connection_resource, $tdo, $schema = null) {}
function ocicollappend ($collection, $value) {}
function ocicollgetelem ($collection, $index) {}
function ocicollassignelem ($collection, $index, $value) {}
function ocicollsize ($collection) {}
function ocicollmax ($collection) {}
function ocicolltrim ($collection, $number) {}
function ociwritetemporarylob($lob_descriptor, $data, $lob_type = OCI_TEMP_CLOB ) {}
function ocicloselob($lob_descriptor){}
function ocicollassign($to, $from ) {}
define ('OCI_DEFAULT', 0);
define ('OCI_SYSOPER', 4);
define ('OCI_SYSDBA', 2);
define ('OCI_CRED_EXT', -2147483648);
define ('OCI_DESCRIBE_ONLY', 16);
define ('OCI_COMMIT_ON_SUCCESS', 32);
define ('OCI_NO_AUTO_COMMIT', 0);
define ('OCI_EXACT_FETCH', 2);
define ('OCI_SEEK_SET', 0);
define ('OCI_SEEK_CUR', 1);
define ('OCI_SEEK_END', 2);
define ('OCI_LOB_BUFFER_FREE', 1);
define ('SQLT_BFILEE', 114);
define ('SQLT_CFILEE', 115);
define ('SQLT_CLOB', 112);
define ('SQLT_BLOB', 113);
define ('SQLT_RDD', 104);
define ('SQLT_INT', 3);
define ('SQLT_NUM', 2);
define ('SQLT_RSET', 116);
define ('SQLT_AFC', 96);
define ('SQLT_CHR', 1);
define ('SQLT_VCS', 9);
define ('SQLT_AVC', 97);
define ('SQLT_STR', 5);
define ('SQLT_LVC', 94);
define ('SQLT_FLT', 4);
define ('SQLT_UIN', 68);
define ('SQLT_LNG', 8);
define ('SQLT_LBI', 24);
define ('SQLT_BIN', 23);
define ('SQLT_ODT', 156);
define ('SQLT_BDOUBLE', 22);
define ('SQLT_BFLOAT', 21);
define ('OCI_B_NTY', 108);
define ('SQLT_NTY', 108);
define ('OCI_SYSDATE', "SYSDATE");
define ('OCI_B_BFILE', 114);
define ('OCI_B_CFILEE', 115);
define ('OCI_B_CLOB', 112);
define ('OCI_B_BLOB', 113);
define ('OCI_B_ROWID', 104);
define ('OCI_B_CURSOR', 116);
define ('OCI_B_BIN', 23);
define ('OCI_B_INT', 3);
define ('OCI_B_NUM', 2);
define ('OCI_FETCHSTATEMENT_BY_COLUMN', 16);
define ('OCI_FETCHSTATEMENT_BY_ROW', 32);
define ('OCI_ASSOC', 1);
define ('OCI_NUM', 2);
define ('OCI_BOTH', 3);
define ('OCI_RETURN_NULLS', 4);
define ('OCI_RETURN_LOBS', 8);
define ('OCI_DTYPE_FILE', 56);
define ('OCI_DTYPE_LOB', 50);
define ('OCI_DTYPE_ROWID', 54);
define ('OCI_D_FILE', 56);
define ('OCI_D_LOB', 50);
define ('OCI_D_ROWID', 54);
define ('OCI_TEMP_CLOB', 2);
define ('OCI_TEMP_BLOB', 1);
define ('SQLT_BOL', 252);
define ('OCI_B_BOL', 252);

View File

@ -0,0 +1,276 @@
<?php
// @phan-stub-for-extension sqlsrv@3.0.1
define('SQLSRV_ERR_ERRORS', 0);
define('SQLSRV_ERR_WARNINGS', 1);
define('SQLSRV_ERR_ALL', 2);
define('SQLSRV_LOG_SYSTEM_ALL',-1);
define('SQLSRV_LOG_SYSTEM_OFF', 0);
define('SQLSRV_LOG_SYSTEM_INIT', 1);
define('SQLSRV_LOG_SYSTEM_CONN', 2);
define('SQLSRV_LOG_SYSTEM_STMT', 4);
define('SQLSRV_LOG_SYSTEM_UTIL', 8);
define('SQLSRV_LOG_SEVERITY_ALL', -1);
define('SQLSRV_LOG_SEVERITY_ERROR', 1);
define('SQLSRV_LOG_SEVERITY_NOTICE', 4);
define('SQLSRV_LOG_SEVERITY_WARNING', 2);
define('SQLSRV_FETCH_NUMERIC', 1);
define('SQLSRV_FETCH_ASSOC', 2);
define('SQLSRV_FETCH_BOTH', 3);
define('SQLSRV_PHPTYPE_NULL', 1);
define('SQLSRV_PHPTYPE_INT', 2);
define('SQLSRV_PHPTYPE_FLOAT', 3);
define('SQLSRV_PHPTYPE_DATETIME', 4);
define('SQLSRV_ENC_BINARY', 'binary');
define('SQLSRV_ENC_CHAR','char');
define('SQLSRV_NULLABLE_NO', 0);
define('SQLSRV_NULLABLE_YES', 1);
define('SQLSRV_NULLABLE_UNKNOWN', 2);
define('SQLSRV_SQLTYPE_BIGINT', -5);
define('SQLSRV_SQLTYPE_BIT', -7);
define('SQLSRV_SQLTYPE_DATETIME', 25177693);
define('SQLSRV_SQLTYPE_FLOAT', 6);
define('SQLSRV_SQLTYPE_IMAGE', -4);
define('SQLSRV_SQLTYPE_INT', 4);
define('SQLSRV_SQLTYPE_MONEY', 33564163);
define('SQLSRV_SQLTYPE_NTEXT', -10);
define('SQLSRV_SQLTYPE_TEXT', -1);
define('SQLSRV_SQLTYPE_REAL', 7);
define('SQLSRV_SQLTYPE_SMALLDATETIME', 8285);
define('SQLSRV_SQLTYPE_SMALLINT', 5);
define('SQLSRV_SQLTYPE_SMALLMONEY', 33559555);
define('SQLSRV_SQLTYPE_TIMESTAMP', 4606);
define('SQLSRV_SQLTYPE_TINYINT', -6);
define('SQLSRV_SQLTYPE_UDT', -151);
define('SQLSRV_SQLTYPE_UNIQUEIDENTIFIER', -11);
define('SQLSRV_SQLTYPE_XML', -152);
define('SQLSRV_SQLTYPE_DATE', 5211);
define('SQLSRV_SQLTYPE_TIME', 58728806);
define('SQLSRV_SQLTYPE_DATETIMEOFFSET', 58738021);
define('SQLSRV_SQLTYPE_DATETIME2', 58734173);
define('SQLSRV_PARAM_IN', 1);
define('SQLSRV_PARAM_INOUT', 2);
define('SQLSRV_PARAM_OUT', 4);
define('SQLSRV_TXN_READ_UNCOMMITTED', 1);
define('SQLSRV_TXN_READ_COMMITTED', 2);
define('SQLSRV_TXN_REPEATABLE_READ', 4);
define('SQLSRV_TXN_SERIALIZABLE', 8);
define('SQLSRV_TXN_SNAPSHOT', 32);
define('SQLSRV_SCROLL_NEXT', 1);
define('SQLSRV_SCROLL_PRIOR', 4);
define('SQLSRV_SCROLL_FIRST', 2);
define('SQLSRV_SCROLL_LAST', 3);
define('SQLSRV_SCROLL_ABSOLUTE', 5);
define('SQLSRV_SCROLL_RELATIVE', 6);
define('SQLSRV_CURSOR_FORWARD', 'forward');
define('SQLSRV_CURSOR_STATIC', 'static');
define('SQLSRV_CURSOR_DYNAMIC', 'dynamic');
define('SQLSRV_CURSOR_KEYSET', 'keyset');
define('SQLSRV_CURSOR_CLIENT_BUFFERED', 'buffered');
function sqlsrv_connect($server_name, $connection_info = array()){}
function sqlsrv_close($conn){}
function sqlsrv_commit($conn){}
function sqlsrv_begin_transaction($conn){}
function sqlsrv_rollback($conn){}
function sqlsrv_errors($errorsAndOrWarnings = SQLSRV_ERR_ALL){}
function sqlsrv_configure($setting, $value){}
function sqlsrv_get_config($setting){}
function sqlsrv_prepare($conn, $tsql, $params=array(), $options=array()){}
function sqlsrv_execute($stmt){}
function sqlsrv_query($conn, $tsql, $params=array(), $options=array()){}
function sqlsrv_fetch($stmt, $row=null, $offset=null){}
function sqlsrv_get_field($stmt, $field_index, $get_as_type){}
function sqlsrv_fetch_array($stmt, $fetch_type = null, $row=null, $offset=null){}
function sqlsrv_fetch_object($stmt, $class_name=null, $ctor_params=null, $row=null, $offset=null){}
function sqlsrv_has_rows($stmt){}
function sqlsrv_num_fields($stmt){}
function sqlsrv_next_result($stmt){}
function sqlsrv_num_rows($stmt){}
function sqlsrv_rows_affected($stmt){}
function sqlsrv_client_info($conn){}
function sqlsrv_server_info($conn){}
function sqlsrv_cancel($stmt){}
function sqlsrv_free_stmt($stmt){}
function sqlsrv_field_metadata($stmt){}
function sqlsrv_send_stream_data($stmt){}
function SQLSRV_PHPTYPE_STREAM($encoding){}
function SQLSRV_PHPTYPE_STRING($encoding){}
function SQLSRV_SQLTYPE_BINARY($byteCount){}
function SQLSRV_SQLTYPE_VARBINARY($byteCount){}
function SQLSRV_SQLTYPE_VARCHAR($charCount) {}
function SQLSRV_SQLTYPE_CHAR($charCount){}
function SQLSRV_SQLTYPE_NCHAR($charCount){}
function SQLSRV_SQLTYPE_NVARCHAR($charCount){}
function SQLSRV_SQLTYPE_DECIMAL($precision, $scale){}
function SQLSRV_SQLTYPE_NUMERIC($precision, $scale){}

View File

@ -0,0 +1,28 @@
<?php
// These stubs were generated by the phan stub generator.
// @phan-stub-for-extension tideways@4.0.7
namespace {
function tideways_disable() {}
function tideways_enable($flags = null, $options = null) {}
function tideways_fatal_backtrace() {}
function tideways_get_spans() {}
function tideways_last_detected_exception() {}
function tideways_last_fatal_error() {}
function tideways_prepend_overwritten() {}
function tideways_span_annotate($span = null, $annotations = null) {}
function tideways_span_callback($name = null, $callback = null) {}
function tideways_span_create($category = null) {}
function tideways_span_timer_start($span = null) {}
function tideways_span_timer_stop($span = null) {}
function tideways_span_watch($name = null, $category = null) {}
function tideways_sql_minify($sql = null) {}
function tideways_transaction_name() {}
const TIDEWAYS_FLAGS_CPU = 2;
const TIDEWAYS_FLAGS_MEMORY = 4;
const TIDEWAYS_FLAGS_NO_BUILTINS = 1;
const TIDEWAYS_FLAGS_NO_COMPILE = 16;
const TIDEWAYS_FLAGS_NO_HIERACHICAL = 64;
const TIDEWAYS_FLAGS_NO_SPANS = 32;
const TIDEWAYS_FLAGS_NO_USERLAND = 8;
}

89
.phan/stubs/excimer.php Normal file
View File

@ -0,0 +1,89 @@
<?php
// phpcs:ignoreFile
define( 'EXCIMER_REAL', 0 );
define( 'EXCIMER_CPU', 1 );
class ExcimerProfiler {
public function __construct() {
}
public function setPeriod( $period ) {
}
public function setEventType( $event_type ) {
}
public function setMaxDepth( $maxDepth ) {
}
public function setFlushCallback( $callback, $max_samples ) {
}
public function clearFlushCallback() {
}
public function start() {
}
public function stop() {
}
public function getLog() {
}
public function flush() {
}
}
class ExcimerLog {
private final function __construct() {
}
function formatCollapsed() {
}
function aggregateByFunction() {
}
function getEventCount() {
}
function current() {
}
function key() {
}
function next() {
}
function rewind() {
}
function valid() {
}
function count() {
}
function offsetExists( $offset ) {
}
function offsetGet( $offset ) {
}
function offsetSet( $offset, $value ) {
}
function offsetUnset( $offset ) {
}
}
class ExcimerLogEntry {
private final function __construct() {
}
function getTimestamp() {
}
function getEventCount() {
}
function getTrace() {
}
}
class ExcimerTimer {
function setEventType( $event_type ) {
}
function setInterval( $interval ) {
}
function setPeriod( $period ) {
}
function setCallback( $callback ) {
}
function start() {
}
function stop() {
}
function getTime() {
}
}

28
.phan/stubs/hhvm.php Normal file
View File

@ -0,0 +1,28 @@
<?php
/**
* 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
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*/
// phpcs:ignoreFile
define( 'HHVM_VERSION', '3.18.6-dev' );
/**
* @param callable $callback
* @param mixed ...$parameters
*/
function register_postsend_function( $callback ) {
}

11
.phan/stubs/password.php Normal file
View File

@ -0,0 +1,11 @@
<?php
// phpcs:ignoreFile
// Password constants added in PHP 7.2 & 7.3
const PASSWORD_ARGON2I = 2;
const PASSWORD_ARGON2ID = 3;
const PASSWORD_ARGON2_DEFAULT_MEMORY_COST = 1024;
const PASSWORD_ARGON2_DEFAULT_THREADS = 2;
const PASSWORD_ARGON2_DEFAULT_TIME_COST = 2;

12
CREDITS
View File

@ -16,6 +16,7 @@ The following list can be found parsed under Special:Version/Credits -->
* Aashaka Shah
* abhinand
* Abhishek Das
* Abián
* Ad Huikeshoven
* Adam Miller
* Adam Roses Wight
@ -101,6 +102,7 @@ The following list can be found parsed under Special:Version/Credits -->
* Bill Traynor
* Billinghurst
* billm
* Bjornskjald
* blackspirit96
* blotmandroid
* Bogdan Stancescu
@ -347,6 +349,7 @@ The following list can be found parsed under Special:Version/Credits -->
* Jonathan Wiltshire
* Jools Wills
* jsahleen
* Juan Osorio
* Julian Ostrow
* Juliano F. Ravasi
* Julien Girault
@ -402,6 +405,7 @@ The following list can be found parsed under Special:Version/Credits -->
* Lucas Werkmeister
* Luigi Corsaro
* Luis Felipe Schenone
* LukBukkit
* Luke Faraone
* Luke Welling
* Lupin
@ -475,6 +479,7 @@ The following list can be found parsed under Special:Version/Credits -->
* Misza13
* mjbmr
* moejoe0000
* Mogmog123
* Mohamed Magdy
* Molly White
* Moriel Schottlender
@ -506,6 +511,7 @@ The following list can be found parsed under Special:Version/Credits -->
* Nicolaie Constantinescu
* Nicolas Dumazet
* Nicolas Weeger
* Niedzielski
* Niharika Kohli
* Nik Everett
* Niklas Laxström
@ -561,6 +567,7 @@ The following list can be found parsed under Special:Version/Credits -->
* Pikne
* Piotr Miazga
* PiRSquared17
* pjht
* Platonides
* Pmlineditor
* pmolina
@ -578,10 +585,10 @@ The following list can be found parsed under Special:Version/Credits -->
* quiddity
* quietust
* Quim Gil
* Rafid Aslam
* rahul21
* Raimond Spekking
* Ramunas Geciauskas
* RazeSoldier
* Remember the dot
* René Kijewski
* Reza
@ -641,11 +648,13 @@ The following list can be found parsed under Special:Version/Credits -->
* Sethakill
* Sfic
* Shahyar
* shandrenkoff
* Shane Gibbons
* Shane King
* shanika
* Shinjiman
* shirayuki
* Shreyas Minocha
* Sidhant Gupta
* Siebrand Mazeland
* Simeon Dahl
@ -669,6 +678,7 @@ The following list can be found parsed under Special:Version/Credits -->
* Steve Sanbeg
* Steven Roddis
* Steven Walling
* stibba
* Str4nd
* Strainu
* Subin Siby

View File

@ -8,11 +8,11 @@ module.exports = function ( grunt ) {
grunt.loadNpmTasks( 'grunt-banana-checker' );
grunt.loadNpmTasks( 'grunt-contrib-copy' );
grunt.loadNpmTasks( 'grunt-contrib-watch' );
grunt.loadNpmTasks( 'grunt-eslint' );
grunt.loadNpmTasks( 'grunt-jsonlint' );
grunt.loadNpmTasks( 'grunt-karma' );
grunt.loadNpmTasks( 'grunt-stylelint' );
grunt.loadNpmTasks( 'grunt-svgmin' );
karmaProxy[ wgScriptPath ] = {
target: wgServer + wgScriptPath,
@ -21,6 +21,10 @@ module.exports = function ( grunt ) {
grunt.initConfig( {
eslint: {
options: {
reportUnusedDisableDirectives: true,
cache: true
},
all: [
'**/*.js',
'!docs/**',
@ -47,12 +51,48 @@ module.exports = function ( grunt ) {
disallowBlankTranslations: false
},
core: 'languages/i18n/',
exif: 'languages/i18n/exif/',
api: 'includes/api/i18n/',
installer: 'includes/installer/i18n/'
},
stylelint: {
src: '{resources/src,mw-config}/**/*.{css,less}'
},
svgmin: {
options: {
js2svg: {
indent: '\t',
pretty: true
},
multipass: true,
plugins: [ {
cleanupIDs: false
}, {
removeDesc: false
}, {
removeRasterImages: true
}, {
removeTitle: false
}, {
removeViewBox: false
}, {
removeXMLProcInst: false
}, {
sortAttrs: true
} ]
},
all: {
files: [ {
expand: true,
cwd: 'resources/src',
src: [
'**/*.svg'
],
dest: 'resources/src/',
ext: '.svg'
} ]
}
},
watch: {
files: [
'.{stylelintrc,eslintrc.json}',
@ -63,6 +103,18 @@ module.exports = function ( grunt ) {
},
karma: {
options: {
customLaunchers: {
ChromeCustom: {
base: 'ChromeHeadless',
// Chrome requires --no-sandbox in Docker/CI.
// Newer CI images expose CHROMIUM_FLAGS which sets this (and
// anything else it might need) automatically. Older CI images,
// (including Quibble for MW) don't set it yet.
flags: ( process.env.CHROMIUM_FLAGS ||
( process.env.ZUUL_PROJECT ? '--no-sandbox' : '' )
).split( ' ' )
}
},
proxies: karmaProxy,
files: [ {
pattern: wgServer + wgScriptPath + '/index.php?title=Special:JavaScriptTest/qunit/export',
@ -82,13 +134,10 @@ module.exports = function ( grunt ) {
crossOriginAttribute: false
},
main: {
browsers: [ 'Chrome' ]
},
chromium: {
browsers: [ 'Chromium' ]
browsers: [ 'ChromeCustom' ]
},
firefox: {
browsers: [ 'Firefox' ]
browsers: [ 'FirefoxHeadless' ]
}
},
copy: {
@ -116,9 +165,7 @@ module.exports = function ( grunt ) {
return !!( process.env.MW_SERVER && process.env.MW_SCRIPT_PATH );
} );
grunt.registerTask( 'minify', 'svgmin' );
grunt.registerTask( 'lint', [ 'eslint', 'banana', 'stylelint' ] );
grunt.registerTask( 'qunit', [ 'assert-mw-env', 'karma:main' ] );
grunt.registerTask( 'test', [ 'lint' ] );
grunt.registerTask( 'default', 'test' );
};

5134
HISTORY

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@ Required software:
* A SQL server, the following types are supported
** MySQL 5.5.8 or higher
** PostgreSQL 9.2 or higher
** SQLite 3.3.7 or higher
** SQLite 3.8.0 or higher
** Oracle 9.0.1 or higher
** Microsoft SQL Server 2005 (9.00.1399)

View File

@ -1,813 +0,0 @@
== MediaWiki 1.32.3 ==
This is a maintenance release of the MediaWiki 1.32 branch.
=== Changes since MediaWiki 1.32.2 ===
* (T225558) Update installer link to PHP intl.
* (T225496) Detect APC for MainCacheType in CLI installer.
* (T226766) Remove jetbrains/phpstorm-stubs from composer dev dependancies.
* (T202211) Fix SQLite patch-(image|page|template)links-fix-pk.sql column order.
== MediaWiki 1.32.2 ==
This is a security and maintenance release of the MediaWiki 1.32 branch.
=== Changes since MediaWiki 1.32.1 ===
* (T204423) Backport support for hyphenated DB names in JobQueueGroup.
* (T216968) Return pageid as int in both list=iwbacklinks and
list=langbacklinks.
* (T215169) Fix for Database::update() with IGNORE option fails on PostgreSQL.
* (T199474) Fix typo in rebuildrecentchanges.php resulting in rogue flags.
* (T218608) SECURITY: Fix an issue that prevents Extension:OAuth working when
$wgBlockDisablesLogin is true.
* (T216029) Chrome redirects to Special:BadTitle after editing a section with
a non-Latin name on a page with non-Latin characters in title.
* Unbreak language related maintenance scripts that use StaticArrayWriter.
* (T219728) Added support for new Japanese era name "Reiwa".
* (T25227) SECURITY: action=logout now requires to be posted and have a csrf
token.
* Updated cssjanus/cssjanus from 1.2.0 to 1.3.0.
* (T221045) Remove orphaned code from ConfigRepository.
* (T222385) resourceloader: Use AND instead of OR for upsert conds in
saveFileDependencies().
* (T224374) Fix message parameters so that the message that says SQLite is
out of date makes sense.
* (T200471) Prevent LBFactorySimple breaking ExternalStorage, when trying to
connect to external server with local database name.
* (T197279) SECURITY: Fix reauth in Special:ChangeEmail.
* (T208881) SECURITY: blacklist CSS var().
* (T209794) SECURITY: rate-limit and prevent blocked users from changing email.
* (T199540) SECURITY: API: Respect $wgBlockCIDRLimit in action=block.
* (T212118) SECURITY: Fix cache mode for (un)patrolled recent changes query.
* (T222036, T222038) SECURITY: Add permission check for user is permitted to
view the log type.
* (T221739) SECURITY: resources: Patch jQuery 3.3.1 for CVE-2019-11358.
== MediaWiki 1.32.1 ==
This is a maintenance release of the MediaWiki 1.32 branch.
=== Changes since MediaWiki 1.32.0 ===
* (T213577) rdbms: avoid transaction status errors from ping() in rollback().
* rdbms: Pass required parameter.
* rdbms: do not treat SAVEPOINT and RELEASE SAVEPOINT as write queries.
* (T204531) rdbms: reduce LoadBalancer replication log spam.
* (T213489) Avoid session double-start in Setup.php.
* (T213717) Correct namespace 'Template' for gom-deva
* (T198054) Fix login page crash caused by unknown language via ?uselang
* (T215324) (T210937) list=users mistakenly reports user as missing.
* (T209483) Add ILBFactory::redefineLocalDomain method. This is intended for
use with scripts like addWiki.php to avoid mismatched domain errors.
* (T208871) The hard-coded Google search form on the database error page was
removed.
* (T204800) Fix Title::getFragmentForURL for bad interwiki prefix
* (T215566) Fix installer being unable to determine if the database exists
during a fresh installation.
== MediaWiki 1.32.0 ==
=== Changes since MediaWiki 1.32.0-rc.2 ===
* (T188327) Fix slow queries in migrateActors.php.
* (T102320) Fix $magicWords for the Sanskrit language.
=== Changes since MediaWiki 1.32.0-rc.1 ===
* Fix addition of ug_expiry column to user_groups table on MSSQL.
* (T210307) Fix the cache timestamp for forced updates.
* (T210621) User: Bypass repeatable-read when creating an actor_id.
* (T197535) Extensions can now specify PHP versions and PHP extensions they
depend on.
* Updated wikimedia/ip-set from v1.2.0 to v1.3.0.
* (T212356) When using action=delete on pages with many revisions, the module
may return a boolean-true 'scheduled' and no 'logid'. This signifies that the
deletion will be processed via the job queue.
* (T64103) Dropped columns category.cat_hidden, site_stats.ss_admins, and
recentchanges.rc_cur_time from the PostgreSQL schema.
=== Changes since MediaWiki 1.32.0-rc.0 ===
* (T209885) Prevent populateSearchIndex.php from breaking once actor migration
has been started.
* (T210998) Properly set $wgLanguageCode in the generated LocalSettings.php
if --lang is used with the command-line installer (install.php).
=== Configuration changes in 1.32 ===
==== New configuration ====
* $wgJpegQuality The quality of JPEG thumbnails is now configurable through
this setting. The default is 80, which matches the quality of JPEG thumbnails
previously generated by ImageMagick. The quality of JPEG thumbnails generated
by GD was previously 95, but now uses the $wgJpegQuality setting as well.
* $wgCookieSetOnIpBlock - This determines whether to set a cookie when an IP
user is blocked. Doing so means that a blocked user, even after moving to a
new IP address, will still be blocked.
* $wgRawHtmlMessages This new configuration setting is added for listing
messages which are displayed as raw HTML.
* $wgCSPHeader and $wgCSPReportOnlyHeader You can now define a
"Content Security Policy" for your wiki. This adds a defense-in-depth feature
to stop an attacker who has found a bug in the parser allowing them to insert
malicious attributes. Disabled by default. (T135963)
* $wgGroupPermissions A new user group, 'interface-admin', is added for
controlling access to sitewide CSS/JS (and editing other users' CSS/JS). No
other group has 'editsitecss', 'editusercss', 'editsitejs' or 'edituserjs'
by default.
* $wgGrantPermissions A new grant group, 'editsiteconfig', is added for
granting the above rights.
* $wgDBDefaultGroup A default database group for use by maintenance scripts.
* $wgResourceLoaderEnableJSProfiler  This new configuration setting lets you
enable client-side profiling of JavaScript modules; it is off by default.
* (T193868) $wgChangeTagsSchemaMigrationStage — This temporary configuration
setting allows sysadmins to gradually migrate the database table schema for
how change tags are stored.
* (T199334) $wgTagStatisticsNewTable — This temporary configuration setting
allows sysadmins to enable the caching of Special:Tags via the new
change_tag_def table.
==== Changed configuration ====
* $wgUseAjax This setting, deprecated in 1.31, is now ignored.
* $wgDefaultUserOptions The default watchlist view time (watchlistdays) has
been increased from 3 to 7 days. (T194414)
* $wgGroupPermissions The right to edit sitewide Javascript
(e.g. MediaWiki:Common.js), CSS or JSON was separated from 'editinterface'
and is available under 'editsitejs'/'editsitecss'/'editsitejson'. Having
'editinterface' is still necessary to edit such pages.
* $wgMultiContentRevisionSchemaMigrationStage now defaults to writing both the
old and the new schema, but reading the new schema, so Multi-Content Revisions
(MCR) are now functional per default. The new default value of the setting is
SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW.
* $wgActorTableSchemaMigrationStage no longer accepts MIGRATION_WRITE_BOTH or
MIGRATION_WRITE_NEW. It instead uses SCHEMA_COMPAT_WRITE_BOTH |
SCHEMA_COMPAT_READ_OLD and SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW
for intermediate stages of migration.
* $wgDBTableOptions  The default table options now use the binary charset. The
default was already overridden in the installer-generated LocalSettings.php,
and so is always set to binary after the installer UI option was removed. The
default value is only used when the installer installs an extension.
* $wgPopularPasswordFile — The location of the default popular passwords file
has been moved to be in line with other non-PHP files used by libraries and
classes.
* $wgEnableImageWhitelist is now disabled by default, as it opens up a hole for
potential privacy leaks by administrators. You can check
"MediaWiki:External image whitelist" on your wiki to see whether the feature
was ever used, and whether it needs to be re-enabled.
==== Removed configuration ====
* $wgEnableAPI and $wgEnableWriteAPI These settings, deprecated in 1.31,
have been removed. (T115414)
* $wgSiteSupportPage  This setting, unused since 1.5, was removed.
* $wgBrowserBlacklist  This setting, deprecated in 1.30, was removed.
* $wgExperimentalHtmlIds This setting, deprecated since 1.30, was removed.
The 'html5-legacy' value for $wgFragmentMode is no longer accepted.
* $wgPasswordSenderName - This setting, ignored since 1.23 by MediaWiki and
most extensions, is no longer set. Instead, you can modify the system
message `emailsender`.
* $wgTidyConfig The experimental Html5Internal and Html5Depurate tidy drivers
were removed. RemexHtml, which is the default, should be used instead.
* (T181318) The $wgStyleVersion setting and its appendage to various script and
style URLs in OutputPage, deprecated in 1.31, was removed.
* (T140807) The wgResourceLoaderLESSImportPaths configuration option was removed
from ResourceLoader. Instead, use `@import` statements in LESS to import
files directly from nearby directories within the same project.
* (T140804) The wgResourceLoaderLESSVars configuration option, deprecated
since 1.30, was removed. Instead, to expose variables from PHP to LESS, use
the ResourceLoaderModule::getLessVars() method.
* $wgResourceLoaderValidateStaticJS  This setting, unused since MediaWiki 1.18,
was removed.
* Two temporary variables for deploying the feature of filters on change lists,
$wgStructuredChangeFiltersShowPreference introduced in MediaWiki 1.30 and
$wgStructuredChangeFiltersOnWatchlist in 1.31, were removed.
=== New features in 1.32 ===
* (T112474) Generalized the ResourceLoader mechanism for overriding modules
using a particular page during edit previews.
* (T12331) You can now log page creation events by setting $wgPageCreationLog
to true.
* Added 'ApiParseMakeOutputPage' hook.
* (T174313) Added checkbox on Special:ListUsers to display only users in
temporary user groups.
* (T152462) A cookie can now be set when an IP user is blocked to track that
user if they move to a new IP address. This is disabled by default.
* (T194950) Added 'ApiMaxLagInfo' hook.
* SpecialPage::checkLoginSecurityLevel() will now preserve POST data when
reauthenticating.
* FormSpecialPage::execute() will now call checkLoginSecurityLevel() if
getLoginSecurityLevel() returns non-false.
* The 'ImageBeforeProduceHTML' hook is now passed three new parameters, $parser,
&$query and &$widthOption, allowing extensions even finer control over the
resulting HTML code.
* Added new 'ArticleShowPatrolFooter' hook, which allows extensions to determine
if the [mark as patrolled] link should be shown at the footer of patrollable
pages.
* The array of hidden options ($opts) passed to the 'SpecialSearchPowerBox' hook
is now passed by reference, allowing extensions to modify or even unset it.
* Added new 'OutputPageAfterGetHeadLinksArray' hook, allowing extensions to
modify the return value of OutputPage#getHeadLinksArray in order to add,
remove or otherwise alter the elements to be output in the page <head>.
* (T28934) The 'HistoryPageToolLinks' hook allows extensions to append
additional links to the subtitle of a history page.
* The 'GetLinkColours' hook now receives an additional $title parameter,
the Title object of the page being parsed, on which the links will be shown.
* (T194731) DifferenceEngine supports multiple slots. Added SlotDiffRenderer to
render diffs between two Content objects, and DifferenceEngine::setRevisions()
to render diffs between two custom (potentially multi-content) revisions.
Added GetSlotDiffRenderer hook which works like GetDifferenceEngine for slots.
* Added a temporary action=mcrundo to the web UI, as the normal undo logic
can't yet handle MCR and deadlines are forcing is to put off fixing that.
This action should be considered deprecated and should not be used directly.
* Extensions overriding ContentHandler::getUndoContent() will need to be
updated for the changed method signature.
* Added a new hook, 'UserGetRightsRemove', which can be used to remove rights
from user. Unlike the 'UserGetRights' it will ensure that removed rights
will not be reinserted.
* (T197535) Extensions can now specify PHP versions and PHP extensions they
depend on.
=== External library changes in 1.32 ===
==== New external libraries ====
* Added pear/Net_SMTP v1.8.0.
* Added wikimedia/xmp-reader v0.6.0.
* Added cache/integration-tests v0.16.0 (dev-only).
* Added giorgiosironi/eris v0.10.0 (dev-only).
* Added seld/jsonlint v1.7.1 (dev-only).
* Added EasyDeflate (unversioned).
==== Changed external libraries ====
* Updated OOUI from v0.26.3 to v0.29.2.
* Updated wikimedia/base-convert from v1.0.1 to v2.0.0.
* Updated wikimedia/remex-html from v1.0.3 to v2.0.1.
* Updated wikimedia/scoped-callback from v1.0.0 to v2.0.0.
** ScopedCallback objects can no longer be serialized.
* Updated wikimedia/timestamp from v1.0.0 to v2.2.0.
* Updated wikimedia/wrappedstring from v2.3.0 to v3.0.1.
* oyejorge/less.php replaced with our fork wikimedia/less.php
* Updated wikimedia/ip-set from v1.2.0 to v1.3.0.
* Updated composer/spdx-licenses from v1.3.0 to v1.4.0 (dev-only).
* Updated mediawiki/mediawiki-codesniffer from v18.0.0 to v22.0.0 (dev-only).
* Updated psy/psysh from v0.8.11 to v0.9.6 (dev-only).
* Updated CLDRPluralRuleParser from v0.1.0 to v1.3.2-pre.
* Updated jquery from v3.2.1 to v3.3.1.
* Updated jquery.client from v2.0.0 to v2.0.1.
* Updated jquery.i18n from v1.0.4 to v1.0.5.
* Updated mustache.js from v0.8.2-d9aa703 to v1.0.0.
* Updated OOjs from v2.2.0 to v2.2.2.
* Updated qunitjs from v2.4.0 to v2.6.2.
* Updated sinonjs from v1.17.3 to v1.17.7.
==== Removed external libraries ====
* pear/mail_mime-decode was removed.
=== Bug fixes in 1.32 ===
* SpecialPage::execute() will now only call checkLoginSecurityLevel() if
getLoginSecurityLevel() returns non-false.
* (T43720, T46197) Improved page display title handling for category pages.
* (T65080) Fixed resetting options of some types via API action=options.
* (T198054) Fixed login crash caused by invalid/unknown language code for
the 'uselang' parameter.
=== Action API changes in 1.32 ===
* Added templated parameters.
* A module can define a templated parameter like "{fruit}-quantity", where
the actual parameters recognized correspond to the values of a multi-valued
parameter. Then clients can make requests like
"fruits=apples|bananas&apples-quantity=1&bananas-quantity=5".
* action=paraminfo will return templated parameter definitions separately
from normal parameters. All parameter definitions now include an "index"
key to allow clients to maintain parameter ordering when merging normal and
templated parameters.
* It is now an error to submit too many values for a multi-valued parameter.
This has generated a warning since MediaWiki 1.14.
* Assertion failures from the 'assert' and 'assertuser' parameters will no
longer use the action module's custom response format, for the few modules
that use custom formatters that handle errors.
* (T198935) User list preferences such as `email-blacklist` and similar
extension preferences are no longer represented as arrays when returned by
action=query&meta=userinfo&uiprop=options.
* 'missingparam' errors will now use the prefixed parameter name in the code
and error text, e.g. "noxxfoo" and "The 'xxfoo' parameter must be set" rather
than "nofoo" and "The 'foo' parameter must be set".
* action=query&prop=revisions now takes a 'rvslots' parameter to indicate the
multi-content revision slots for which content should be returned. It also
has a new rvprop, 'roles', to indicate which roles have slots. A deprecation
warning will be issued if rvprop=content or rvprop=contentmodel are used
without rvslots.
* The rvcontentformat parameter to action=query&prop=revisions has been
deprecated. Clients should be prepared to deal with the default format for
relevant models.
* Use of the deprecated parameters rvexpandtemplates, rvgeneratexml, rvparse,
rvdiffto, rvdifftotext, rvdifftotextpst, rvcontentformat, or the deprecated
rvprop=parsetree is forbidden with the new 'rvslots' parameter.
* action=query&prop=deletedrevisions, action=query&list=allrevisions, and
action=query&list=alldeletedrevisions are changed similarly to
&prop=revisions (see the three previous items).
* (T174032) action=compare now supports multi-content revisions.
* It has a 'slots' parameter to select diffing of individual slots. The
default behavior is to return one combined diff.
* The 'fromtext', 'fromsection', 'fromcontentmodel', 'fromcontentformat',
'totext', 'tosection', 'tocontentmodel', and 'tocontentformat' parameters
are deprecated. Specify the new 'fromslots' and 'toslots' to identify which
slots have text supplied and the corresponding templated parameters for
each slot.
* The behavior of 'fromsection' and 'tosection' of extracting one section's
content is not being preserved. 'fromsection-{slot}' and 'tosection-{slot}'
instead expand the given text as if for a section edit. This effectively
declines T183823 in favor of T185723.
* (T198214) The 'disabletidy' parameter to action=parse has been
deprecated; untidy output will not be supported by future wikitext
parsers.
* Added intestactionsdetail to action=query&prop=info to allow retrieving the
reasons an action is not allowed.
* Deprecated action=query&prop=info inprop=readable in favor of
intestactions=read.
* (T212356) When using action=delete on pages with many revisions, the module
may return a boolean-true 'scheduled' and no 'logid'. This signifies that the
deletion will be processed via the job queue.
=== Action API internal changes in 1.32 ===
* Added 'ApiParseMakeOutputPage' hook.
* Parameter names may no longer contain '{' or '}', as these are now used for
templated parameters.
* (T194950) Added 'ApiMaxLagInfo' hook.
* The following methods now take a RevisionRecord rather than a Revision. No
external callers are known.
* ApiFeedContributions::feedItemAuthor()
* ApiFeedContributions::feedItemDesc()
* ApiQueryRevisionsBase::extractRevisionInfo()
* The following deprecated methods have been removed:
* ApiBase::profileIn() (deprecated in 1.25)
* ApiBase::profileOut() (deprecated in 1.25)
* ApiBase::safeProfileOut() (deprecated in 1.25)
* ApiBase::profileDBIn() (deprecated in 1.25)
* ApiBase::profileDBOut() (deprecated in 1.25)
* ApiBase::dieUsage() (deprecated in 1.29)
* ApiBase::dieUsageMsg() (deprecated in 1.29)
* ApiBase::dieUsageMsgOrDebug() (deprecated in 1.29)
* ApiBase::getErrorFromStatus() (deprecated in 1.29)
* ApiBase::parseMsg() (deprecated in 1.29)
* ApiBase::setWarning() (deprecated in 1.29)
* ApiPageSet::getInvalidTitles() (deprecated in 1.26)
* ApiQueryLogEvents::addLogParams() (deprecated in 1.25)
* ApiUsageException::getCodeString() (deprecated in 1.29)
* ApiUsageException::getMessageArray() (deprecated in 1.29)
* Class UsageException, deprecated in 1.29, has been removed.
* ApiErrorFormatter: Added getFormat() and newWithFormat(). In particular, you
can now easily test $formatter->getFormat() === 'bc', and then call
$formatter->newWithFormat( 'plaintext' ) to get a non-BC formatter.
=== Languages updated in 1.32 ===
MediaWiki supports over 350 languages. Many localisations are updated regularly.
Below only new and removed languages are listed, as well as changes to languages
because of Phabricator reports.
* (T193566) Added language support for Ambonese Malay (abs).
* (T194047) Added language support for Shawiya, Latin script (shy-latn).
* (T195940) Added language support for Batak Mandailing (btm).
* (T137491) Added language support for Standard Moroccan Amazigh (zgh).
* (T198132) Added language support for Manipuri (mni).
* (T201276) Added language support for Western Armenian (hyw).
* (T201583) Added language support for Mon (mnw).
* (T213717) Fixed a translation error on Goan Konkani (gom-deva) translations
for NS_TEMPLATE.
=== Breaking changes in 1.32 ===
* $wgRequestTime, deprecated in 1.25, was removed. Use
$_SERVER['REQUEST_TIME_FLOAT'] or WebRequest::getElapsedTime() instead.
* The MediaWikiI18N class, deprecated in 1.31, was removed.
* QuickTemplate::setTranslator(), deprecated in 1.31, was removed. Use
Skin::msg() instead.
* wfInitShellLocale(), deprecated in 1.30, was removed.
* wfShellExecDisabled(), deprecated in 1.30, was removed.
* The type string for the parameter $lang of DateFormatter::getInstance,
deprecated in 1.31, was removed.
* The EDIT_TOKEN_SUFFIX constant deprecated in 1.27, was removed. Use
MediaWiki\Session\Token::SUFFIX instead.
* EditPage::isOouiEnabled() deprecated in 1.30, was removed.
* mw.util.wikiGetlink(), deprecated in 1.23, was removed. Use mw.util.getUrl()
instead.
* (T61113) The following methods and constants from the Revision class, which
were deprecated in 1.25, have now been removed:
* Revision::getRawUser()
* Revision::getRawUserText()
* Revision::getRawComment()
* window.gM() from mediawiki.jqueryMsg, deprecated in 1.23, was removed. Use
mw.msg() or mw.message() instead.
* mw.util.escapeId(), deprecated in 1.30, was removed. Use
mw.util.escapeIdForAttribute or mw.util.escapeIdForLink instead.
* mw.util.updateTooltipAccessKeys(), deprecated in 1.24, was removed. Use
jquery.accessKeyLabel instead.
* The SqlDataUpdate class, deprecated in 1.28, has been removed.
* The Html5Internal and Html5Depurate tidy driver classes were removed, along
with the Balancer tidy implementation. Both implementations were experimental,
and were replaced by RemexHtml.
* (T179624) Job::insert() and ::batchInsert(), deprecated in 1.21, were both
removed. Use JobQueueGroup::singleton()->push() instead.
* The jquery.footHovzer module, for mediawiki.debug, was removed.
* The es5-shim module, empty and deprecated since 1.29, was removed.
* the dom-level2-shim module, empty and deprecated since 1.29, was removed.
* the json module, empty and deprecated since 1.29, was removed.
* The mediawiki.widgets.visibleByteLimit module alias, deprecated in 1.32, was
removed. Use mediawiki.widgets.visibleLengthLimit instead.
* The jquery.farbtastic module, unused since 1.18, was removed.
* The 'jquery.expandableField' module, unused since 1.22, was removed.
* The hooks 'PreferencesFormPreSave' and 'PreferencesGetLegend' may provide
any HTMLForm object rather than PreferencesForm.
* The non namespaced TimestampException class, deprecated in 1.29, was removed.
Use Wikimedia\Timestamp\TimestampException instead.
* The global functions codepointToUtf8, hexSequenceToUtf8, utf8ToHexSequence,
utf8ToCodepoint, and escapeSingleString (deprecated in 1.25) were removed.
The UtfNormal\Utils class from the utfnormal library should be used instead.
* The deprecated UTF8_ and UNICODE_ constants were removed. The class constants
from the UtfNormal\Constants class from the utfnormal library should be used
* The protected methods PHPSessionHandler::returnSuccess() and returnFailure(),
only needed for PHP5 compatibility, have been removed. It now uses the boolean
values `true` and `false` respectively.
* The $parserMemc global and wfGetParserCacheStorage(), deprecated since 1.30,
were removed. Use the ParserCache class instead.
* ScopedCallback (deprecated in 1.28) was removed. Use Wikimedia\ScopedCallback
instead.
* Support for ResourceLoaderModule::getModifiedTime() and getModifiedHash(),
deprecated since 1.26, was removed. Use getDefinitionSummary() instead.
* (T195256) Skins are recommended not to rely on JavaScript for the "mw-jump"
and "jump-to-nav" accessibility links. To this end, the "jquery.mw-jump"
is no longer loaded by default. The Vector and MonoBook skins have made a
minor change to implement the toggle feature with CSS instead. To restore
prior functionality, either explicitly load "jquery.mw-jump" in your skin
or refer to T195256 for details on how to make the same change.
* Hook 'EditPageBeforeEditChecks' was removed;
use 'EditPageGetCheckboxesDefinition' instead.
* Linker::getLinkColour() and DummyLinker::getLinkColour(), deprecated since
1.28, were removed. LinkRenderer::getLinkClasses() should be used instead.
* Wikimedia\Rdbms\LoadBalancer::getLaggedSlaveMode(), deprecated in 1.28, has
been removed. Use Wikimedia\Rdbms\LoadBalancer::getLaggedReplicaMode()
instead.
* mw.widgets.CategoryMultiselectWidget now uses TagMultiselectWidget instead of
CapsuleMultiselectWidget. The following methods may no longer be used:
* setItemsFromData: Use setValue instead
* getItemsData: Use getItems instead and get the data property
* Two OutputPage methods, addMetadataLink() and getMetadataAttribute(), were
removed. Use addLink() instead.
* Another two OutputPage methods, setPageTitleActionText() and
getPageTitleActionText(), were removed. They did nothing since 1.15 (almost
ten years). Use setHTMLTitle() directly.
* The return value of OutputPage::adaptCdnTTL() has been removed. The
value returned was misleading and probably not what any caller would
have wanted.
* All MagicWord static member variables have been removed. Use appropriate
hooks or MagicWordFactory methods instead.
* MagicWord::clearCache() has been removed. Instead, create a new
MagicWordFactory, such as by calling
resetServiceForTesting( 'MagicWordFactory' ) on a MediaWikiServices.
* mw.util.init() has been removed. This function is not needed anymore and was
a no-op function since 1.30.
* SpecialPageFactory::resetList() is a no-op. Call overrideMwServices()
instead.
* MediaWiki no longer supports a StartProfiler.php file. Instead, you can set
$wgProfiler and $wgEnableProfileInfo.
* The mw.loader.addSource() is now considered a private method, and no longer
supports the `id, url` signature. Use the `Object` parameter instead.
* The backwards-compatibility code in HTMLForm to add a drop-down control to an
option that is not set to be a drop-down if the "mw-chosen" class is present,
is now removed.
* Several collations were removed. They were workarounds for bugs in the ICU
library and they are no longer needed (as of ICU 57.1):
* 'uppercase-se' (NorthernSamiUppercaseCollation) - use 'uca-se' instead
* 'xx-uca-et' (CollationEt) - use 'uca-et' instead
* 'xx-uca-fa' (CollationFa) - use 'uca-fa' instead
* LanguageCode::bcp47() now always returns a valid BCP 47 code. This means
that some MediaWiki-specific language codes, such as `simple`, are mapped
into valid BCP 47 codes (eg `en-simple`).
* The hooks 'SpecialRecentChangesFilters' & 'SpecialWatchlistFilters' deprecated
in 1.23 were removed. Instead, use 'ChangesListSpecialPageStructuredFilters'.
The ChangesListSpecialPage code for these legacy hooks, and their use in
SpecialRecentchanges.php and SpecialWatchlist, was also removed:
* ChangesListSpecialPage->getCustomFilters()
* ChangesListSpecialPage->getFilterGroupDefinitionFromLegacyCustomFilters()
* ChangesListSpecialPage::customFilters
* The global function wfUseMW, deprecated since 1.26, has now been removed. Use
the "requires" property of static extension registration instead.
* $wgSpecialPages no longer accepts array syntax, deprecated since 1.18.
* The MailAddress constructor can no longer be called with a User object,
behaviour which has been deprecated since 1.24.
* LBFactory, deprecated since 1.28, has been removed. Instead, use
Wikimedia\Rdbms\LBFactory.
* The MimeMagic class, deprecated since 1.28 has been removed. Get a
MimeAnalyzer instance from MediaWikiServices instead.
* The '--tidy' option to maintenance/parse.php has been removed. Tidying
the output is now the default. Use '--no-tidy' to bypass the tidy
phase.
* The global function wfErrorLog, deprecated since 1.25, has now been removed.
Use MWLoggerLegacyLogger::emit or UDPTransport.
* The hooks 'SpecialRecentChangesQuery' & 'SpecialWatchlistQuery', deprecated in
1.23, were removed. Instead, use ChangesListSpecialPageStructuredFilters or
ChangesListSpecialPageQuery.
* The global function wfUsePHP, deprecated since 1.30, has now been removed. To
assert a newer version of PHP than MediaWiki does, use extension registration.
* The hook 'ChangesListSpecialPageFilters', deprecated in 1.29, has now been
removed. Use the 'ChangesListSpecialPageStructuredFilters' hook instead.
* DeferredUpdates::setImmediateMode(), deprecated since 1.29, has been removed.
* File / MediaHandler::getStreamHeaders(), deprecated since 1.30, was removed.
* The hook 'DoEditSectionLink', deprecated since 1.25, has been removed. Use
the hook 'SkinEditSectionLinks' instead.
* The hook 'UserGetImplicitGroups', deprecated since 1.25, has been removed.
* The global function wfRunHooks, deprecated since 1.25, has now been removed.
Use Hooks::run().
* The hook 'UnknownAction', deprecated since 1.19, has now been removed.
* The hook 'ParserLimitReport', deprecated since 1.22, has been removed. Use
the hooks 'ParserLimitReportPrepare' and 'ParserLimitReportFormat' instead.
* The following deprecated API methods have been removed:
* ApiBase::profileIn() (deprecated in 1.25)
* ApiBase::profileOut() (deprecated in 1.25)
* ApiBase::safeProfileOut() (deprecated in 1.25)
* ApiBase::profileDBIn() (deprecated in 1.25)
* ApiBase::profileDBOut() (deprecated in 1.25)
* ApiBase::dieUsage() (deprecated in 1.29)
* ApiBase::dieUsageMsg() (deprecated in 1.29)
* ApiBase::dieUsageMsgOrDebug() (deprecated in 1.29)
* ApiBase::getErrorFromStatus() (deprecated in 1.29)
* ApiBase::parseMsg() (deprecated in 1.29)
* ApiBase::setWarning() (deprecated in 1.29)
* ApiPageSet::getInvalidTitles() (deprecated in 1.26)
* ApiQueryLogEvents::addLogParams() (deprecated in 1.25)
* ApiUsageException::getCodeString() (deprecated in 1.29)
* ApiUsageException::getMessageArray() (deprecated in 1.29)
* Class UsageException, deprecated in 1.29, has been removed.
* MediaWiki no longer has a 'JavaScript-powered' wikitext toolbar built in. The
old "bulletin board style toolbar", known as "the 2006 wikitext editor", has
been removed, and instead sysadmins will be required to choose one (or more)
of the several extensions available for this purpose if they need the
functionality. The MediaWiki "tarball" releases have included the replacement
extension for this, the WikiEditor extension aka "the 2010 wikitext editor",
for many years now. As part of this, several parts of MediaWiki have been
removed or simplified:
* The user option 'showtoolbar' (shown as "Show edit toolbar") is no longer
available; if an extension adds a toolbar via the EditPageBeforeEditToolbar
hook, it will be shown; extensions should provide a specific user preference
to disable themselves as needed.
* The public methods Language::getImageFile() and ::getImageFiles(), and the
related specification of $imageFiles within individual languages' code file,
as well as the referenced static media assets, all of which were only used
inside MediaWiki itself for providing the icons for the old toolbar, have
been removed without explicit deprecation.
* The internal ResourceLoader module "mediawiki.toolbar", which is unused
except by MediaWiki itself and back-compatibility code, has been removed.
* The internal ResourceLoaderEditToolbarModule class has been removed.
=== Deprecations in 1.32 ===
* HTMLForm::setSubmitProgressive() is deprecated. No need to call it. Submit
button is already marked as progressive.
* Skin::setupSkinUserCss() is deprecated. Adding of modules to load
has been centralised to Skin::getDefaultModules(), which is now capable
of queueing style modules as well.
* OutputPage::addModuleScripts() and ParserOutput::addModuleScripts are
deprecated. Use addModules() instead.
* Overriding SearchEngine::{searchText,searchTitle,searchArchiveTitle}
in extending classes is deprecated. Extend related doSearch* methods
instead.
* The following 'mediawiki.api' plugin modules were merged into mediawiki.api
and deprecated: mediawiki.api.category, mediawiki.api.edit,
mediawiki.api.login, mediawiki.api.options, mediawiki.api.parse,
mediawiki.api.upload, mediawiki.api.user, mediawiki.api.watch,
mediawiki.api.messages, and mediawiki.api.rollback.
* ApiBase::truncateArray() is deprecated. No replacement, as nothing is known
to use it.
* WatchAction::getUnwatchToken is deprecated. Use WatchAction::getWatchToken
with the 'unwatch' action parameter instead.
* IcuCollation::getICUVersion() is deprecated, as you can just use the PHP
constant INTL_ICU_VERSION directly in all versions that MediaWiki supports.
* Parser::fetchFile() is deprecated. Use ::fetchFileAndTitle() instead.
* The ApiQueryContributions class has been renamed to ApiQueryUserContribs.
* The XMPInfo, XMPReader, and XMPValidate classes have been deprecated in favor
of the namespaced classes provided by the wikimedia/xmp-reader library.
* SearchResultSet::{next,rewind} are deprecated. Calling code should
use foreach on the SearchResultSet, or the extractResults method. Extending
code should override extractResults.
* Instantiating SearchResultSet directly is deprecated. SearchEngine
implementations must subclass SearchResultSet for their purposes.
* SearchResult::setExtensionData argument has been changed from accepting an
array to accepting a Closure that returns the array when called.
* Class CryptRand, everything in MWCryptRand except generateHex() and function
MediaWikiServices::getCryptRand() are deprecated, use random_bytes() to
generate cryptographically secure random byte sequences.
* Parser::getConverterLanguage() is deprecated. Use ::getTargetLanguage()
instead.
* Language::markNoConversion() is deprecated. It confused readers because
it had unexpected behavior (only marking text if it looked like a URL)
and was only used in a single place in the code. Use
LanguageConverter::markNoConversion() instead.
* (T197492) Language::truncate() was soft deprecated in 1.31 and is
hard deprecated in this release. It has been split into two similar
methods, Language::truncateForVisual() and Language::truncateForDatabase(),
which measure length in characters and bytes, respectively. Use
Language::truncateForVisual() when possible to provide equity to users
of multibyte scripts.
* (T176526) EditPage::getContextTitle() falling back to $wgTitle when the
context title is unset is now deprecated; anything creating an EditPage
instance should set the context title via ::setContextTitle().
* The 'jquery.hidpi' module (polyfill for IMG srcset) is deprecated.
* ResourceLoaderStartUpModule::getStartupModules() and ::getLegacyModules()
are deprecated. These concepts are obsolete and have no replacement.
* String type for $lang of DifferenceEngine::setTextLanguage is deprecated.
* The following methods of OutputPage are now deprecated in favour
of using showFatalError directly: OutputPage::showFileDeleteError()
OutputPage::showFileNotFoundError(), OutputPage::showFileRenameError()
OutputPage::showFileCopyError() and OutputPage::showUnexpectedValueError().
* The Replacer, DoubleReplacer, HashtableReplacer, and RegexlikeReplacer
classes are now deprecated. Use a Closure instead.
* (T194263) ContentHandler::makeParserOptions() is deprecated. Use
WikiPage::makeParserOptions() or ParserOptions::newCanonical() instead.
* (T100681) Use of the Parsoid v1 API with the VirtualRESTService, deprecated in
MediaWiki 1.26, is now hard-deprecated. All known clients were converted to
the Parsoid v3 API in May 2015.
* $input is deprecated in hook 'LogEventsListGetExtraInputs'. Use
$formDescriptor instead.
* SearchEngine::transformSearchTerm( $term ) should no longer be called prior
to running searchText. This method was mainly implemented to support the
'prefix' URI param in SpecialSearch, but there are no reasons to expose this
logic as it should be handled internally by SearchEngine implementations
supporting this feature. SearchEngine implementations should no longer
override this methods.
* SearchEngine::replacePrefixes( $query ) should no longer be called prior
to running searchText/searchTitle.
* (T199657) Messages for $wgFilterLogTypes labels should be no longer be in the
'log-show-hide-[type]' format. Instead use 'logeventslist-[type]-log'.
* Global functions wfArrayFilter() and wfArrayFilterByKey() are deprecated.
use array_filter() directly.
* The $wgShowSQLErrors global is deprecated and nonfunctional.
Set $wgShowExceptionDetails and/or $wgShowHostnames instead.
* The $wgShowDBErrorBacktrace global is deprecated and nonfunctional.
Set $wgShowExceptionDetails instead.
* Public access to the DifferenceEngine properties mOldid, mNewid, mOldRev,
mNewRev, mOldPage, mNewPage, mOldContent, mNewContent, mRevisionsLoaded,
mTextLoaded and mCacheHit is deprecated. Use getOldid() / getNewid() /
getOldRevision() / getNewRevision() for the first four (note that the
revision ones return a RevisionRecord, not a Revision), do your own lookup
for page/content.
* The $wgExternalDiffEngine value 'wikidiff2' is deprecated. To use wikidiff2
just enable the PHP extension, and it will be autodetected.
* (T194731) DifferenceEngine properties mOldContent and mNewContent and methods
setContent(), generateContentDiffBody(), generateTextDiffBody() and textDiff()
are deprecated. To interact with a single slot, use a SlotDiffRenderer (and
subclass it to customize diff rendering); to diff custom (e.g. unsaved)
content, use setRevisions(). Subclassing DifferenceEngine should only be done
to customize page-level diff properties (such as the navigation header).
* The wfUseMW function, soft-deprecated in 1.26, is now hard deprecated.
* All MagicWord static methods are now deprecated. Use the MagicWordFactory
methods instead.
* PasswordFactory::init is deprecated. To get a password factory with the
standard configuration, use MediaWikiServices::getPasswordFactory.
* $wgContLang is deprecated, use MediaWikiServices::getContentLanguage()
instead.
* $wgParser is deprecated, use MediaWikiServices::getParser() instead.
* wfGetMainCache() is deprecated, use ObjectCache::getLocalClusterInstance()
instead.
* wfGetCache() is deprecated, use ObjectCache::getInstance() instead.
* All SpecialPageFactory static methods are deprecated. Instead, call the
methods on a SpecialPageFactory instance, which may be obtained from
MediaWikiServices.
* mw.user.stickyRandomId was renamed to the more explicit
mw.user.getPageviewToken to better capture its function.
* Passing Revision objects to ContentHandler::getUndoContent() is deprecated,
Content object should be passed instead.
* (T197179) Parameters 'notice', 'notice-messages', 'notice-message',
previously used by OOUI HTMLForm fields, are now deprecated. Use
'help', 'help-message', 'help-messages' instead.
* (T197179) HTMLFormField::getNotices() is now deprecated.
* The jquery.localize module is now deprecated. Use jquery.i18n instead.
* The SecondaryDataUpdates hook was deprecated in favor of RevisionDataUpdates,
or overriding ContentHandler::getSecondaryDataUpdates (T194038).
* The WikiPageDeletionUpdates hook was deprecated in favor of
PageDeletionDataUpdates, or overriding ContentHandler::getDeletionDataUpdates
(T194038).
* Content::getSecondaryDataUpdates has been deprecated in favor of
ContentHandler::getSecondaryDataUpdates() for overriding by extensions
(T194038).
Application logic should call WikiPage::doSecondaryDataUpdates() (T194037).
* Content::getDeletionUpdates has been deprecated in favor of
ContentHandler::getDeletionUpdates() for overriding by extensions (T194038).
Application logic should call WikiPage::doSecondaryDataUpdates() (T194037).
* (T198214) Old Tidy-related configuration settings, which were soft-deprecated
in MediaWiki 1.26, have now been hard deprecated. This affects $wgUseTidy,
$wgTidyBin, $wgTidyConf, $wgTidyOpts, $wgTidyInternal, and $wgDebugTidy. Use
$wgTidyConfig instead.
* All Tidy configurations other than Remex have been hard deprecated;
future parsers will not emit compatible output for these configurations.
In particular, running MediaWiki with tidy disabled has been deprecated.
* (T198214) OutputPage::addWikiText(), OutputPage::addWikiTextWithTitle(),
and OutputPage::addWikiTextTitle() have been deprecated, since they
can result in untidy output. In addition OutputPage::addWikiTextTidy()
and OutputPage::addWikiTextTitleTidy() was deprecated to make naming new
methods consistent. Use OutputPage::addWikiTextAsInterface() or
OutputPage::addWikiTextAsContent() instead, which ensures the output is
tidy and clarifies whether content-language specific postprocessing should
be done on the text.
* OutputPage::parse() and OutputPage::parseInline() have been deprecated
due to untidy output and inconsistent handling of wrapper divs and
interface/content language defaults. Use OutputPage::parseAsContent(),
OutputPage::parseAsInterface(), or OutputPage::parseInlineAsInterface()
as appropriate.
* QuickTemplate::msgHtml() and BaseTemplate::msgHtml() have been deprecated
as they promote bad practises. I18n messages should always be properly
escaped.
* Skin::getDynamicStylesheetQuery() has been deprecated. It always
returns action=raw&ctype=text/css which callers should use directly.
* Class LegacyFormatter is deprecated.
* Use of CommentStore::insertWithTempTable() with 'img_description' is
deprecated. Use CommentStore::insert() instead.
* Language::setCode is deprecated as public function. Use Language::factory
to create a new Language object with a different language code.
* Several classes have been moved from the MediaWiki\Storage\ namespace to the
MediaWiki\Revision\ namespace. The old class names are aliased for
compatibility, but are deprecated. Classes are IncompleteRevisionException,
MutableRevisionRecord, MutableRevisionSlots, RevisionAccessException,
RevisionArchiveRecord, RevisionFactory, RevisionLookup, RevisionRecord,
RevisionSlots, RevisionStore, RevisionStoreRecord, SlotRecord, and
SuppressedDataException.
* When using OOUI HTMLForm containing an 'info' field which uses the 'rawrow'
option, it is now deprecated to give its contents (the 'default' option)
as a string. They should be given as a OOUI\FieldLayout object instead.
Notably, this affects fields defined in the 'GetPreferences' hook, because
Special:Preferences uses an OOUI form now. (If possible, don't use 'rawrow'.)
* In Skin::doEditSectionLink omitting the parameters $tooltip and $lang is
deprecated. For the $lang parameter, types other than Language are
deprecated.
* The $wgUseKeyHeader configuration option and the
OutputPage::getKeyHeader() method have been deprecated; the relevant
draft IETF spec expired without becoming a standard.
* Deprecated API action=query&prop=info inprop=readable in favor of
intestactions=read.
=== Other changes in 1.32 ===
* (T198811) The following tables have had their UNIQUE indexes turned into
proper PRIMARY KEYs for increased maintainability: interwiki, page_props,
protected_titles and site_identifiers.
* OOUI HTMLForm will now display help text inline after the input field,
rather than in a popup. Previous behavior can be restored by using
`'help-inline' => false`.
* The archive table's ar_rev_id field is now unique.
* Special:BotPasswords now requires reauthentication.
* (T174023) Multi-Content Revision (MCR) capabilities were introduced into the
storage layer and have basic support for display. No user interface exists
yet for creating or managing content in slots beides the main slot. See
<https://www.mediawiki.org/wiki/Multi-Content_Revisions> for more
information.
* The image_comment_temp database table has been removed. Since all access
should be mediated by the CommentStore class, this change shouldn't affect
external code.
* (T206147) Database::close() will no longer commit any open transactions.
* (T64103) Dropped columns category.cat_hidden, site_stats.ss_admins, and
recentchanges.rc_cur_time from the PostgreSQL schema.
== Compatibility ==
MediaWiki 1.32 requires PHP 7.0.13 or later. Although HHVM 3.18.5 or later is
supported, it is generally advised to use PHP 7.0.13 or later for long term
support. MediaWiki requires that the mbstring, xml, ctype, json, iconv and
fileinfo PHP extensions are loaded to work.
MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used,
but support for them is somewhat less mature. There is experimental support for
Oracle and Microsoft SQL Server.
The supported versions are:
* MySQL 5.5.8 or later
* PostgreSQL 9.2 or later
* SQLite 3.3.7 or later
* Oracle 9.0.1 or later
* Microsoft SQL Server 2005 (9.00.1399)
== Upgrading ==
1.32 has several database changes since 1.31, and will not work without schema
updates. Note that due to changes to some very large tables like the revision
table, the schema update may take quite long (minutes on a medium sized site,
many hours on a large site).
Don't forget to always back up your database before upgrading!
See the file UPGRADE for more detailed upgrade instructions, including
important information when upgrading from versions prior to 1.11.
For notes on 1.31.x and older releases, see HISTORY.
== Online documentation ==
Documentation for both end-users and site administrators is available on
MediaWiki.org, and is covered under the GNU Free Documentation License (except
for pages that explicitly state that their contents are in the public domain):
https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation
== Mailing list ==
A mailing list is available for MediaWiki user support and discussion:
https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
A low-traffic announcements-only list is also available:
https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
It's highly recommended that you sign up for one of these lists if you're
going to run a public MediaWiki, so you can be notified of security fixes.
== IRC help ==
There's usually someone online in #mediawiki on irc.freenode.net.

513
RELEASE-NOTES-1.33 Normal file
View File

@ -0,0 +1,513 @@
== MediaWiki 1.33 ==
=== Upgrading notes for 1.33 ===
1.33 has several database changes since 1.32, and will not work without schema
updates. Note that due to changes to some very large tables like the revision
table, the schema update may take quite long (minutes on a medium sized site,
many hours on a large site).
Don't forget to always back up your database before upgrading!
See the file UPGRADE for more detailed upgrade instructions, including
important information when upgrading from versions prior to 1.11.
Some specific notes for MediaWiki 1.33 upgrades are below:
* Some external link searches will not work correctly until update.php (or
refreshExternallinksIndex.php) is run. These include searches for links using
IP addresses, internationalized domain names, and possibly mailto links.
* If you ran migrateActors.php using an older version of MediaWiki and want to
run your wiki with $wgActorTableSchemaMigrationStage SCHEMA_COMPAT_READ_OLD,
note that log_search rows needed to find revision deletions by target user
were incorrectly deleted. See T215464 for details.
* If revision deletions were performed when the wiki was configured with
$wgActorTableSchemaMigrationStage SCHEMA_COMPAT_WRITE_BOTH and without
migrateActors.php having been run, the log_search table may contain rows with
empty values for "target_author_actor" which will prevent log searches for
revision deletions by target user from finding those log entries. These rows
may be corrected by (re-)running migrateActors.php.
For notes on 1.32.x and older releases, see HISTORY.
=== Changes since MediaWiki 1.33.0-rc.0 ===
* (T225558) Update installer link to PHP intl.
* (T225901) Only attempt to deduplicate if there is data in archive and revision
tables.
* (T225564) Fetch tag ID before calling undefineTag().
* (T225496) Detect APC for MainCacheType in CLI installer.
* Call unpack() with correct parameters in MimeAnalyzer.php for PHP 7.0 support.
* (T212613) Style change tags correctly on Special:Newpages.
* (T202211) Fix SQLite patch-(page|template)links-fix-pk.sql column order.
== MediaWiki 1.33.0-rc.0 ==
=== Configuration changes for system administrators in 1.33 ===
==== New configuration ====
* $wgEnablePartialBlocks This enables the Partial Blocks feature, which gives
accounts with block permissions the ability to block users, IPs, and IP ranges
from editing specific pages, while allowing them to edit the rest of the wiki.
It is a temporary setting for gradual enablement, current default to `false`,
and will be set to `true` and then removed once initial development completes.
==== Changed configuration ====
* $wgChangeTagsSchemaMigrationStage (T193868) — This temporary setting, added in
MediaWiki 1.32, now defaults to MIGRATION_NEW instead of MIGRATION_WRITE_BOTH.
* $wgPasswordPolicy  There is a new password policy to check that the account's
password is not in the large blacklist. This is enabled by default for the
built-in user groups bureaucrat, sysop, interface-admin, and bot. To configure
this for other user groups, set the `PasswordNotInLargeBlacklist` flag `true`.
* $wgPasswordDefault  There is a new password type configuration using Argon2
password hashing (which requires PHP 7.2 and above). It's designed to resist
timing attacks, and (on systems with PHP 7.3+) GPU hacking; if you configure
argon2 to be used, by default, it will automatically choose the best available
algorithm depending on which version of PHP you have available. To use this,
you can set `$wgPasswordDefault = 'argon2';`.
* $wgActorTableSchemaMigrationStage now defaults to reading the new schema.
update.php will back-populate the new database fields due to the changed
setting, which may take some time on large wikis. You can avoid downtime by
following a process like that described in T188327.
==== Removed configuration ====
* $wgTagStatisticsNewTable (T199334) — This temporary setting, added in
MediaWiki 1.32, has now been removed. When loading Special:Tags, MediaWiki
will now always use the `change_tag_def` instead of the `change_tag` table.
* $wgUseTidy, $wgTidyBin, $wgTidyConf, $wgTidyOpts, $wgTidyInternal, and
$wgDebugTidy  These options, all deprecated since 1.26, have now all been
removed, as MediaWiki now always tidies user output. The $wgTidyConfig setting
remains only for experimental features and debugging, and should not be used.
* $wgEnableParserCache  This setting has been deprecated since 1.26, has now
been removed. If you still desire to disable the parser cache, instead you can
set `$wgParserCacheType = CACHE_NONE;`.
* $wgCommentTableSchemaMigrationStage  This temporary migration setting has now
been removed. Code finding it unset should treat it as being MIGRATION_NEW.
* $wgAuth  This old setting, deprecated in 1.27, has been removed as part of
the removal of AuthPlugin.
* $wgSitesCacheFile  This configuration was introduced in 1.25 with the intent
to allow sites to configure a file in which to cache the SiteStore database
table, but it was never used. SiteStore already caches its information by
default using BagOStuff (e.g. Memcached or APC).
* $wgClockSkewFudge This setting was used by User.php to let sites adjust by
how much MediaWiki would fudge when trying to minimize the chances of a
user.user_touched database update to the "current" timestamp being before the
value already there (e.g. due to clock skew between different servers). This
is no longer a problem, because the code now ensures the timestamp is always
higher than the previous one. The writes are guarded with CAS logic (check
and set), which prevents updates that would overlap.
* $wgDBmysql5 (T196185) - This experimental setting, deprecated in 1.31, has
been removed.
=== New user-facing features in 1.33 ===
* (T96041) __EXPECTUNUSEDCATEGORY__ on a category page causes the category
to be hidden on Special:UnusedCategories.
* (T210814) SVGs are now by default displayed in wiki language on image
pages.
* Special:CreateAccount now warns the user if their chosen username has to be
normalized.
* (T205040) Multilingual images are now be displayed in the current parse
language where available.
* Special:ActiveUsers will no longer filter out users who became inactive since
the last time the active users query cache was updated.
* (T215675) RecentChange and ManualLogEntry implement new Taggable interface.
* (T215675) Added a hook, ManualLogEntryBeforePublish, to allow extensions
to modify (example: add tags) log entries.
=== New developer features in 1.33 ===
* The AuthManagerLoginAuthenticateAudit hook has a new parameter for
additional information about the authentication event.
* TextContent::getText() was introduced as a replacement for
Content::getNativeData() for text-based content models.
* (T214706) LinksUpdate::getAddedExternalLinks() and
LinksUpdate::getRemovedExternalLinks() were introduced.
* (T213893) Added 'MaintenanceUpdateAddParams' hook
* (T219655) The MarkPatrolled hook has a new parameter for the tags
associated with this entry in the patrol log.
* (T212472) Extensions can now specify platform abilities they require to work,
limited to shell access for now.
=== External library changes in 1.33 ===
==== New external libraries ====
* Added wikimedia/password-blacklist 0.1.4.
* Added guzzlehttp/guzzle 6.3.3.
==== Changed external libraries ====
* Updated OOUI from v0.29.2 to v0.31.3.
* Updated OOjs Router from pre-release to v0.2.0.
* Updated moment from v2.19.3 to v2.24.0.
* Updated wikimedia/xmp-reader from 0.6.0 to 0.6.2.
* Updated wikimedia/scoped-callback from 2.0.0 to 3.0.0.
* Updated jquery-client from 2.0.1 to 2.0.2.
* Updated pear/net_smtp from 1.8.0 to 1.8.1.
* Updated cssjanus/cssjanus from 1.2.0 to 1.3.0.
* Updated wikimedia/php-session-serializer from 1.0.6 to 1.0.7.
==== Removed external libraries ====
* (T219403) jquery.ui.spinner, deprecated since 1.31, was removed.
=== Developer library changes in 1.33 ===
==== New developer libraries ====
* Added jakub-onderka/php-console-highlighter 0.3.2 explicitly (dev-only).
* Added mediawiki/mediawiki-phan-config 0.5.0 (dev-only).
==== Changed developer libraries ====
* Updated wikimedia/ip-set from 1.3.0 to 2.0.1.
* The deprecated IPSet\IPSet alias was removed, Wikimedia\IPSet must be
used instead.
* Updated psy/psysh from 0.9.6 to 0.9.9 (dev-only).
* Updated nikic/php-parser from 3.1.3 to 3.1.5 (dev-only).
* Updated mediawiki/mediawiki-codesniffer from 22.0.0 to 25.0.0 (dev-only).
* Updated qunitjs from 2.6.2 to 2.9.1.
==== Removed developer libraries ====
* The jetbrains/phpstorm-stubs repository was removed in favour of the minimal
stubs we need, which are kept in the new `.phan/internal_stubs` directory
(dev-only).
=== Bug fixes in 1.33 ===
* (T164211) Special:UserRights could sometimes fail with a
"conflict detected" error when there weren't any conflicts.
* (T216029) Chrome redirects to Special:BadTitle after editing a section with
a non-Latin name on a page with non-Latin characters in title.
* (T222385) resourceloader: Use AND instead of OR for upsert conds in
saveFileDependencies().
=== Action API changes in 1.33 ===
* (T198913) Added 'ApiOptions' hook.
* The JSON formatversion=2 is no longer experimental.
* Internal API errors (those with code beginning "internal_api_error") will
include the exception class name in a data field named "errorclass".
* Class names are not guaranteed to remain stable, and in particular database
exceptions will now include the "Wikimedia\Rdbms\" prefix in the class name.
* The code including an exception class name is deprecated. In the future,
all internal errors will use code "internal_api_error".
* (T212356) When using action=delete on pages with many revisions, the module
may return a boolean-true 'scheduled' and no 'logid'. This signifies that the
deletion will be processed via the job queue.
* action=setnotificationtimestamp will now update the watchlist asynchronously
if entirewatchlist is set, so updates may not be visible immediately
* Block info will be added to "blocked" errors from more modules.
* (T216245) Autoblocks will now be spread by action=edit and action=move.
* action=query&meta=userinfo has a new uiprop, 'latestcontrib', that returns
the date of user's latest contribution.
* (T25227) action=logout now requires to be posted and have a csrf token.
=== Action API internal changes in 1.33 ===
* A number of deprecated methods for API documentation, intended for overriding
by extensions, are no longer called by MediaWiki, and will emit deprecation
notices if your extension attempts to use them:
* ApiBase::getDescription() (deprecated in 1.25)
* ApiBase::getParamDescription() (deprecated in 1.25)
* ApiBase::getExamples() (deprecated in 1.25)
* ApiBase::getDescriptionMessage() (deprecated in 1.30)
Additionally, the 'APIGetDescription' and 'APIGetParamDescription' hooks have
been removed, as their only use was to let extensions override values returned
by getDescription() and getParamDescription(), respectively.
* API error codes may only contain ASCII letters, numbers, underscore, and
hyphen. Methods such as ApiBase::dieWithError() and
ApiMessageTrait::setApiCode() will throw an InvalidArgumentException if
passed a bad code.
* ApiBase::checkTitleUserPermissions() now takes an options array as its third
parameter. Passing a User object or null is deprecated.
* The api-feature-usage log channel now has log context. The text message is
deprecated and will be removed in the future.
=== Languages updated in 1.33 ===
MediaWiki supports over 350 languages. Many localisations are updated regularly.
Below only new and removed languages are listed, as well as changes to languages
because of Phabricator reports.
* (T203908) Added language support for Eastern Pwo (kjp).
* (T213717) Fixed a translation error on Goan Konkani (gom-deva) translations
for NS_TEMPLATE.
* (T212221) Added $digitTransformTable for Santali (sat).
* (T216479) Added language support for Saisiyat (xsy).
* (T219728) Added support for new Japanese era name "Reiwa"
=== Breaking changes in 1.33 ===
* The parameteter $lang in DifferenceEngine::setTextLanguage must be of type
Language. Other types are deprecated since 1.32.
* Skin::doEditSectionLink requires type Language for the parameter $lang.
The parameters $tooltip and $lang are mandatory. Omitting the parameters is
deprecated since 1.32.
* Language::truncate(), deprecated in 1.31, has been removed.
* UtfNormal, deprecated in 1.25, was removed. Use UtfNormal\Validator directly
instead.
* (T197179) In OOUI HTMLForm fields, the parameters 'notice', 'notice-messages',
and 'notice-message', which were deprecated in 1.32, were removed. Instead,
use 'help', 'help-message', and 'help-messages'.
* (T197179) HTMLFormField::getNotices(), deprecated in 1.32, was removed.
* The "Parsoid v1" compatibility mappings in ParsoidVirtualRESTService and
RestbaseVirtualRESTService, deprecated since 1.26, have been removed.
Use the RESTBase v1 or Parsoid v3 API instead.
* ParserOptions defaults 'tidy' to true now, since the untidy modes of the
parser are being deprecated and ParserOptions::getCanonicalOverrides()
has always been true at any rate.
* Support for disabling tidy and external tidy implementations has been removed.
This was deprecated in 1.32. The pure PHP Remex tidy implementation is now
used and no configuration is necessary.
* A number of deprecated methods for API documentation, intended for overriding
by extensions, are no longer called by MediaWiki, and will emit deprecation
notices if your extension attempts to use them:
* ApiBase::getDescription() (deprecated in 1.25)
* ApiBase::getParamDescription() (deprecated in 1.25)
* ApiBase::getExamples() (deprecated in 1.25)
* ApiBase::getDescriptionMessage() (deprecated in 1.30)
Additionally, the 'APIGetDescription' and 'APIGetParamDescription' hooks have
been removed, as their only use was to let extensions override values returned
by getDescription() and getParamDescription(), respectively.
* The authentication hooks 'AbortAutoAccount' 'AbortNewAccount', 'AbortLogin',
'LoginUserMigrated', 'UserCreateForm', and 'UserLoginForm', all deprecated by
the creation of AuthManager in 1.27, have been removed. This also means that
the FakeAuthTemplate and LoginForm classes are removed, that FakeAuthTemplate
is no longer passed into LoginSignupSpecialPage->getFieldDefinitions(), and
that LoginSignupSpecialPage->getBCFieldDefinitions() is removed.
* The 'jquery.localize' module, deprecated in 1.32, has been removed. Instead,
use 'jquery.i18n'.
* The hooks LanguageGetSpecialPageAliases and LanguageGetMagic, deprecated since
1.16, have now been removed. Instead, use $specialPageAliases or $magicWords
respectively in a $wgExtensionMessagesFiles file.
* The following methods of the Preferences class, deprecated in 1.31, have been
removed:
* getSaveBlacklist()
* loadPreferenceValues()
* getOptionFromUser()
* profilePreferences()
* skinPreferences()
* filesPreferences()
* datetimePreferences()
* renderingPreferences()
* editingPreferences()
* rcPreferences()
* watchlistPreferences()
* searchPreferences()
* miscPreferences()
* generateSkinOptions()
* getDateOptions()
* getImageSizes()
* getThumbSizes()
* validateSignature()
* cleanSignature()
* getTimezoneOptions()
* filterIntval()
* filterTimezoneInput()
* getTimeZoneList()
* mw.util.jsMessage(), deprecated in 1.20, was removed. Use mw.notify instead.
* (T61113) User::EDIT_TOKEN_SUFFIX was removed. It was deprecated since 1.27.
* The 'mediawiki.api' module aliases, deprecated in 1.32, have been removed.
Specifically: mediawiki.api.category, mediawiki.api.edit,
mediawiki.api.login, mediawiki.api.options, mediawiki.api.parse,
mediawiki.api.upload, mediawiki.api.user, mediawiki.api.watch,
mediawiki.api.messages, and mediawiki.api.rollback.
* The 'jquery.byteLimit' module alias for 'jquery.lengthLimit',
deprecated in 1.31, was removed.
* Revision::fetchRevision(), deprecated in 1.28, was removed.
* Class SquidUpdate, deprecated in 1.27, was removed.
* Title->getSquidURLs(), deprecated in 1.27, was removed. Instead, use
Title->getCdnUrls().
* Title::escapeFragmentForURL(), deprecated in 1.30, was removed. Use
Sanitizer::escapeIdForLink() or escapeIdForExternalInterwiki() instead.
* Title->canTalk(), deprecated in 1.30, was removed. Instead, use
Title->canHaveTalkPage().
* Title's methods for site and user page related to CSS and JS, deprecated in
1.31, were removed:
* Title->isCssOrJsPage() — Use Title->isSiteConfigPage()
* Title->isCssJsSubpage()  Use Title->isUserConfigPage()
* Title->getSkinFromCssJsSubpage()  Use Title->getSkinFromConfigSubpage()
* Title->isCssSubpage()  Use Title->isUserCssConfigPage()
* Title->isJsSubpage()  Use Title->isUserJsConfigPage()
* SiteSQLStore, deprecated in 1.27 and whose only method, ::newInstance(),
would return the global SiteStore instance, has been removed. You can get to
this via MediaWiki\MediaWikiServices::getInstance()->getSiteStore() directly.
* Linker::formatSize, deprecated in 1.28, has been removed (with DummyLinker's).
Instead, use Language->formatSize() with the relevant Language object.
* Linker::formatTemplates, deprecated in 1.28, has been removed (along with the
version in DummyLinker). You can use TemplatesOnThisPageFormatter directly.
* EventRelayerGroup::singleton(), deprecated in 1.27, has been removed. You can
use MediaWikiServices::getInstance()->getEventRelayerGroup() directly.
* LinkCache->addLink(), deprecated in 1.27, has been removed. It is thought to
be unused, and is distinct from OutputPage->addLink(), which remains.
* JsonContent->getJsonData(), deprecated in 1.25, has been removed. Instead, use
JsonContent->getData().
* MWExceptionHandler::getLogId(), deprecated in 1.27, has been removed, as the
exception ID is the same as the request ID, from WebRequest::getRequestId().
* SearchEngine::getNearMatchResultSet(), deprecated in 1.27, has been removed.
You can use SearchEngine::getNearMatcher() instead.
* EmailNotification::updateWatchlistTimestamp, deprecated in 1.27, has been
removed. Instead, use WatchedItemStore::updateNotificationTimestamp directly.
* User::getGroupName() and ::getGroupMember(), both deprecated in 1.29, have
been removed. Instead, please use UserGroupMembership::getGroupName() and
UserGroupMembership::getGroupMemberName().
* Backwards compatibility for setting wgSessionsInObjectCache to false or using
wgSessionHandler, both of which were deprecated in 1.27 with the introduction
of SessionManager, has been removed.
* SessionManager::autoCreateUser, deprecated in 1.27, has been removed. Use
MediaWiki\Auth\AuthManager::autoCreateUser instead.
* The mw.libs.jpegmeta property, deprecated in 1.31, was removed.
Use require( 'mediawiki.libs.jpegmeta' ) instead.
* The mw.user.stickyRandomId() method, deprecated in 1.32, was removed.
Use mw.user.getPageviewToken() instead.
* Removed deprecated class property WikiRevision::$importer.
* ResourceLoaderFileModule::readStyleFiles() now requires its $context
parameter.
* The ChangeList::insertArticleLink() method, that was deprecated in 1.27, has
been removed.
* MessageBlobStore::__construct() now requires its $rl parameter.
* Second parameter to Sanitizer::escapeIdReferenceList() (deprecated in 1.31)
has been removed.
* The 'jquery.xmldom' module has been removed.
* The 'jquery.mockjax' module has been removed.
* The 'jquery.hidpi' module, deprecated in 1.32, has been removed.
* AuthPlugin and related code, deprecated in 1.27, has been removed. Extensions
should instead use AuthManager. The following no longer exist:
* The AuthPlugin class itself and the related AuthPluginUser class and i18n
* The AuthPluginSetup and AuthPluginAutoCreate hooks
* The transitional wrapper classes AuthPluginPrimaryAuthenticationProvider,
AuthManagerAuthPlugin, and AuthManagerAuthPluginUser.
* The $wgAuth configuration setting and its use in Setup.php and unit tests
* (T217772) The 'wgAvailableSkins' mw.config key in JavaScript, was removed.
* Language::markNoConversion, deprecated in 1.32, has been removed. Use
LanguageConverter::markNoConversion instead.
* BagOStuff::modifySimpleRelayEvent() method has been removed.
* ParserOutput::getLegacyOptions, deprecated in 1.30, has been removed.
Use ParserOutput::allCacheVaryingOptions instead.
* CdnCacheUpdate::newSimplePurge, deprecated in 1.27, has been removed.
Use CdnCacheUpdate::newFromTitles() instead.
* Handling of multiple arguments by the Block constructor, deprecated in 1.26,
has been removed.
* The translation of main page in Sardinian (sc) was changed from "Pàgina Base"
to "Pàgina printzipale". Existing wikis using this content language need to
move the main page or change the name through MediaWiki:Mainpage page.
* wfSplitWikiID(), deprecated in 1.32, has been removed.
* MessageBlobStore::getBlob(), deprecated in 1.27, has been removed.
Use ::getBlobs() instead.
* The .background-size() LESS mixin, deprecated in 1.27, has been removed.
* ReadOnlyMode::clearCache() and ConfiguredReadOnlyMode::clearCache() have been
removed. Use MediaWikiTestCase::overrideMwServices() instead.
=== Deprecations in 1.33 ===
* The configuration option $wgUseESI has been deprecated, and is expected
to be removed in a future release.
* The configuration option $wgSquidPurgeUseHostHeader has been deprecated,
and is expected to be removed in a future release.
* The configuration options $wgFixArabicUnicode and $wgFixMalayalamUnicode,
introduced in MW 1.17, have been deprecated. These fixes will always be
applied for Arabic and Malayalam in the future. Please enable these on
your local wiki (if you have them explicitly set to false) and run
maintenance/cleanupTitles.php to fix any existing page titles.
* The LegacyHookPreAuthenticationProvider class, deprecated since its creation
in 1.27 as part of the AuthManager re-write, now emits deprecation warnings.
This will help identify the issue if you added it to $wgAuthManagerConfig.
* wfSplitWikiId() is now deprecated. Cache key generation should have the wiki
domain ID as a key component and use makeGlobalKey().
* (T202094) Title::getUserCaseDBKey() is deprecated; instead, please use
Title::getDBKey(), which doesn't vary case.
* User::getPasswordValidity() is now deprecated. User::checkPasswordValidity()
returns the same information in a more useful format.
* For Linker::generateTOC() and Linker::tocList(), passing strings or booleans
as the $lang parameter was deprecated. The same applies to DummyLinker.
* The PasswordPolicy 'PasswordCannotBePopular' has been deprecated. To
follow best practices, it is reccommended to use 'PasswordNotInLargeBlacklist'
instead which blacklists 100,000 commonly used passwords.
* (T208862) Action::requiresUnblock() is now called from
Title::getUserPermissionsErrors() and Title::userCan(). Previously, the method
was only called in Action::checkCanExecute(). Actions should ensure that their
requiresUnblock() returns the proper result (the default is `true`).
* (T211608) The MediaWiki\Services namespace has been renamed to
Wikimedia\Services. The old name is still supported, but deprecated.
* (T155582) Content::getNativeData has been deprecated. Please use model-
specific getters, such as TextContent::getText().
* The class WebInstallerOutput is now marked as @private.
* (T209699) The jquery.async module has been deprecated. JavaScript code that
needs asynchronous behaviour should use Promises.
* Password::equals() is deprecated, use verify().
* BaseTemplate::msgWiki() and QuickTemplate::msgWiki() will be removed. Use
other means to fetch a properly escaped message string or Message object.
* (T126091) The 'ResourceLoaderTestModules' hook, which lets you declare QUnit
testing code for your JavaScript modules, is deprecated. Instead, you can now
use the new extension registration key 'QUnitTestModule'.
* (T213426) The jquery.throttle-debounce module has been deprecated. JavaScript
code that needs this behaviour should use OO.ui.debounce/throttle.
* The mw.language.specialCharacters property from the
'mediawiki.language.specialCharacters' module has been deprecated.
Use require( 'mediawiki.language.specialCharacters' ) instead.
* ChangeTags::purgeTagUsageCache() has been deprecated, and is expected to be
removed in a future release.
* Passing a User object or null as the third parameter to
ApiBase::checkTitleUserPermissions() has been deprecated. Pass an array
[ 'user' => $user ] instead.
* (T211578) Block::prevents is deprecated. Use Block::isEmailBlocked,
Block::isCreateAccountBlocked and Block::isUsertalkEditAllowed to get and set
block properties; use Block::appliesToRight and Block::appliesToUsertalk to
check block behaviour.
* The api-feature-usage log channel now has log context. The text message is
deprecated and will be removed in the future.
* The FileBasedSiteLookup class has been deprecated. For a cacheable SiteLookup
implementation, use CachingSiteStore instead.
* Language::viewPrevNext function is deprecated, use
SpecialPage::buildPrevNextNavigation instead
* ManualLogEntry::setTags() is deprecated, use ManualLogEntry::addTags()
instead. The setTags() method was overriding the tags, addTags() doesn't
override, only adds new tags.
* Block::isValid is deprecated, since it is no longer needed in core.
* Calling Maintenance::hasArg() as well as Maintenance::getArg() with no
parameter has been deprecated. Please pass the argument number 0.
* ResourceLoaderContext::expandModuleNames has been deprecated.
Use ResourceLoader::expandModuleNames instead.
=== Other changes in 1.33 ===
* (T201747) Html::openElement() warns if given an element name with a space
in it.
* The implementation of buildStringCast() in Wikimedia\Rdbms\Database has
changed to explicitly cast. Subclasses relying on the base-class
implementation should check whether they need to override it now.
* BagOStuff::add is now abstract and must explicitly be defined in subclasses.
* LinksDeletionUpdate is now a subclass of LinksUpdate. As a consequence,
the following hooks will now be triggered upon page deletion in addition
to page updates: LinksUpdateConstructed, LinksUpdate, LinksUpdateComplete.
LinksUpdateAfterInsert is not triggered since deletions do not cause
insertions into links tables.
* Category::newFromID( $id )->getID() will now return $id without any
validation, to avoid a mostly unnecessary DB query.
* On Special:Version, the name for an extension can no longer be arbitrary
html when no link is specified.
== Compatibility ==
MediaWiki 1.33 requires PHP 7.0.13 or later. Although HHVM 3.18.5 or later is
supported, it is generally advised to use PHP 7.0.13 or later for long term
support.
MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used,
but support for them is somewhat less mature. There is experimental support for
Oracle and Microsoft SQL Server.
The supported versions are:
* MySQL 5.5.8 or later
* PostgreSQL 9.2 or later
* SQLite 3.8.0 or later
* Oracle 9.0.1 or later
* Microsoft SQL Server 2005 (9.00.1399)
== Online documentation ==
Documentation for both end-users and site administrators is available on
MediaWiki.org, and is covered under the GNU Free Documentation License (except
for pages that explicitly state that their contents are in the public domain):
https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation
== Mailing list ==
A mailing list is available for MediaWiki user support and discussion:
https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
A low-traffic announcements-only list is also available:
https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
It's highly recommended that you sign up for one of these lists if you're
going to run a public MediaWiki, so you can be notified of security fixes.
== IRC help ==
There's usually someone online in #mediawiki on irc.freenode.net.

View File

@ -156,6 +156,7 @@ $wgAutoloadLocalClasses = [
'ApiValidatePassword' => __DIR__ . '/includes/api/ApiValidatePassword.php',
'ApiWatch' => __DIR__ . '/includes/api/ApiWatch.php',
'ArchivedFile' => __DIR__ . '/includes/filerepo/file/ArchivedFile.php',
'Argon2Password' => __DIR__ . '/includes/password/Argon2Password.php',
'ArrayDiffFormatter' => __DIR__ . '/includes/diff/ArrayDiffFormatter.php',
'ArrayUtils' => __DIR__ . '/includes/libs/ArrayUtils.php',
'Article' => __DIR__ . '/includes/page/Article.php',
@ -165,8 +166,6 @@ $wgAutoloadLocalClasses = [
'AttachLatest' => __DIR__ . '/maintenance/attachLatest.php',
'AugmentPageProps' => __DIR__ . '/includes/search/AugmentPageProps.php',
'AuthManagerSpecialPage' => __DIR__ . '/includes/specialpage/AuthManagerSpecialPage.php',
'AuthPlugin' => __DIR__ . '/includes/AuthPlugin.php',
'AuthPluginUser' => __DIR__ . '/includes/AuthPlugin.php',
'AutoCommitUpdate' => __DIR__ . '/includes/deferred/AutoCommitUpdate.php',
'AutoLoader' => __DIR__ . '/includes/AutoLoader.php',
'AutoloadGenerator' => __DIR__ . '/includes/utils/AutoloadGenerator.php',
@ -218,7 +217,7 @@ $wgAutoloadLocalClasses = [
'BufferingStatsdDataFactory' => __DIR__ . '/includes/libs/stats/BufferingStatsdDataFactory.php',
'CLIParser' => __DIR__ . '/maintenance/parse.php',
'CSSMin' => __DIR__ . '/includes/libs/CSSMin.php',
'CacheDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
'CacheDependency' => __DIR__ . '/includes/cache/dependency/CacheDependency.php',
'CacheHelper' => __DIR__ . '/includes/cache/CacheHelper.php',
'CacheTime' => __DIR__ . '/includes/parser/CacheTime.php',
'CachedAction' => __DIR__ . '/includes/actions/CachedAction.php',
@ -299,12 +298,12 @@ $wgAutoloadLocalClasses = [
'ComposerVendorHtaccessCreator' => __DIR__ . '/includes/composer/ComposerVendorHtaccessCreator.php',
'ComposerVersionNormalizer' => __DIR__ . '/includes/composer/ComposerVersionNormalizer.php',
'CompressOld' => __DIR__ . '/maintenance/storage/compressOld.php',
'ConcatenatedGzipHistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
'ConcatenatedGzipHistoryBlob' => __DIR__ . '/includes/historyblob/ConcatenatedGzipHistoryBlob.php',
'Config' => __DIR__ . '/includes/config/Config.php',
'ConfigException' => __DIR__ . '/includes/config/ConfigException.php',
'ConfigFactory' => __DIR__ . '/includes/config/ConfigFactory.php',
'ConfiguredReadOnlyMode' => __DIR__ . '/includes/ConfiguredReadOnlyMode.php',
'ConstantDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
'ConstantDependency' => __DIR__ . '/includes/cache/dependency/ConstantDependency.php',
'Content' => __DIR__ . '/includes/content/Content.php',
'ContentHandler' => __DIR__ . '/includes/content/ContentHandler.php',
'ContentModelLogFormatter' => __DIR__ . '/includes/logging/ContentModelLogFormatter.php',
@ -388,7 +387,7 @@ $wgAutoloadLocalClasses = [
'DeleteSelfExternals' => __DIR__ . '/maintenance/deleteSelfExternals.php',
'DeletedContribsPager' => __DIR__ . '/includes/specials/pagers/DeletedContribsPager.php',
'DeletedContributionsPage' => __DIR__ . '/includes/specials/SpecialDeletedContributions.php',
'DependencyWrapper' => __DIR__ . '/includes/cache/CacheDependency.php',
'DependencyWrapper' => __DIR__ . '/includes/cache/dependency/DependencyWrapper.php',
'DeprecatedGlobal' => __DIR__ . '/includes/DeprecatedGlobal.php',
'DeprecatedInterfaceFinder' => __DIR__ . '/maintenance/findDeprecated.php',
'DeprecationHelper' => __DIR__ . '/includes/debug/DeprecationHelper.php',
@ -399,7 +398,7 @@ $wgAutoloadLocalClasses = [
'Diff' => __DIR__ . '/includes/diff/DairikiDiff.php',
'DiffEngine' => __DIR__ . '/includes/diff/DiffEngine.php',
'DiffFormatter' => __DIR__ . '/includes/diff/DiffFormatter.php',
'DiffHistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
'DiffHistoryBlob' => __DIR__ . '/includes/historyblob/DiffHistoryBlob.php',
'DiffOp' => __DIR__ . '/includes/diff/DairikiDiff.php',
'DiffOpAdd' => __DIR__ . '/includes/diff/DairikiDiff.php',
'DiffOpChange' => __DIR__ . '/includes/diff/DairikiDiff.php',
@ -408,6 +407,7 @@ $wgAutoloadLocalClasses = [
'DifferenceEngine' => __DIR__ . '/includes/diff/DifferenceEngine.php',
'DifferenceEngineSlotDiffRenderer' => __DIR__ . '/includes/diff/DifferenceEngineSlotDiffRenderer.php',
'Digit2Html' => __DIR__ . '/maintenance/language/digit2html.php',
'DisabledSpecialPage' => __DIR__ . '/includes/specialpage/DisabledSpecialPage.php',
'DjVuHandler' => __DIR__ . '/includes/media/DjVuHandler.php',
'DjVuImage' => __DIR__ . '/includes/media/DjVuImage.php',
'DnsSrvDiscoverer' => __DIR__ . '/includes/libs/DnsSrvDiscoverer.php',
@ -426,6 +426,7 @@ $wgAutoloadLocalClasses = [
'DumpFilter' => __DIR__ . '/includes/export/DumpFilter.php',
'DumpGZipOutput' => __DIR__ . '/includes/export/DumpGZipOutput.php',
'DumpIterator' => __DIR__ . '/maintenance/dumpIterator.php',
'DumpLBZip2Output' => __DIR__ . '/includes/export/DumpLBZip2Output.php',
'DumpLatestFilter' => __DIR__ . '/includes/export/DumpLatestFilter.php',
'DumpLinks' => __DIR__ . '/maintenance/dumpLinks.php',
'DumpMessages' => __DIR__ . '/maintenance/language/dumpMessages.php',
@ -491,13 +492,12 @@ $wgAutoloadLocalClasses = [
'FSFileBackendList' => __DIR__ . '/includes/libs/filebackend/FSFileBackend.php',
'FSFileOpHandle' => __DIR__ . '/includes/libs/filebackend/FSFileBackend.php',
'FSLockManager' => __DIR__ . '/includes/libs/lockmanager/FSLockManager.php',
'FakeAuthTemplate' => __DIR__ . '/includes/specialpage/LoginSignupSpecialPage.php',
'FakeConverter' => __DIR__ . '/languages/FakeConverter.php',
'FakeMaintenance' => __DIR__ . '/maintenance/Maintenance.php',
'FakeResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/FakeResultWrapper.php',
'FatalError' => __DIR__ . '/includes/exception/FatalError.php',
'FauxRequest' => __DIR__ . '/includes/FauxRequest.php',
'FauxResponse' => __DIR__ . '/includes/WebResponse.php',
'FauxResponse' => __DIR__ . '/includes/FauxResponse.php',
'FeedItem' => __DIR__ . '/includes/Feed.php',
'FeedUtils' => __DIR__ . '/includes/FeedUtils.php',
'FetchText' => __DIR__ . '/maintenance/fetchText.php',
@ -520,7 +520,7 @@ $wgAutoloadLocalClasses = [
'FileContentHandler' => __DIR__ . '/includes/content/FileContentHandler.php',
'FileContentsHasher' => __DIR__ . '/includes/utils/FileContentsHasher.php',
'FileDeleteForm' => __DIR__ . '/includes/FileDeleteForm.php',
'FileDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
'FileDependency' => __DIR__ . '/includes/cache/dependency/FileDependency.php',
'FileDuplicateSearchPage' => __DIR__ . '/includes/specials/SpecialFileDuplicateSearch.php',
'FileJournal' => __DIR__ . '/includes/libs/filebackend/filejournal/FileJournal.php',
'FileOp' => __DIR__ . '/includes/libs/filebackend/fileop/FileOp.php',
@ -543,6 +543,7 @@ $wgAutoloadLocalClasses = [
'ForeignDBFile' => __DIR__ . '/includes/filerepo/file/ForeignDBFile.php',
'ForeignDBRepo' => __DIR__ . '/includes/filerepo/ForeignDBRepo.php',
'ForeignDBViaLBRepo' => __DIR__ . '/includes/filerepo/ForeignDBViaLBRepo.php',
'ForeignResourceManager' => __DIR__ . '/includes/ForeignResourceManager.php',
'ForeignTitle' => __DIR__ . '/includes/title/ForeignTitle.php',
'ForeignTitleFactory' => __DIR__ . '/includes/title/ForeignTitleFactory.php',
'ForkController' => __DIR__ . '/includes/ForkController.php',
@ -569,8 +570,9 @@ $wgAutoloadLocalClasses = [
'GetReplicaServer' => __DIR__ . '/maintenance/getReplicaServer.php',
'GetTextMaint' => __DIR__ . '/maintenance/getText.php',
'GitInfo' => __DIR__ . '/includes/GitInfo.php',
'GlobalDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
'GlobalDependency' => __DIR__ . '/includes/cache/dependency/GlobalDependency.php',
'GlobalVarConfig' => __DIR__ . '/includes/config/GlobalVarConfig.php',
'GuzzleHttpRequest' => __DIR__ . '/includes/http/GuzzleHttpRequest.php',
'HHVMMakeRepo' => __DIR__ . '/maintenance/hhvm/makeRepo.php',
'HTMLApiField' => __DIR__ . '/includes/htmlform/fields/HTMLApiField.php',
'HTMLAutoCompleteSelectField' => __DIR__ . '/includes/htmlform/fields/HTMLAutoCompleteSelectField.php',
@ -597,11 +599,13 @@ $wgAutoloadLocalClasses = [
'HTMLInfoField' => __DIR__ . '/includes/htmlform/fields/HTMLInfoField.php',
'HTMLIntField' => __DIR__ . '/includes/htmlform/fields/HTMLIntField.php',
'HTMLMultiSelectField' => __DIR__ . '/includes/htmlform/fields/HTMLMultiSelectField.php',
'HTMLNamespacesMultiselectField' => __DIR__ . '/includes/htmlform/fields/HTMLNamespacesMultiselectField.php',
'HTMLNestedFilterable' => __DIR__ . '/includes/htmlform/HTMLNestedFilterable.php',
'HTMLRadioField' => __DIR__ . '/includes/htmlform/fields/HTMLRadioField.php',
'HTMLRestrictionsField' => __DIR__ . '/includes/htmlform/fields/HTMLRestrictionsField.php',
'HTMLSelectAndOtherField' => __DIR__ . '/includes/htmlform/fields/HTMLSelectAndOtherField.php',
'HTMLSelectField' => __DIR__ . '/includes/htmlform/fields/HTMLSelectField.php',
'HTMLSelectLanguageField' => __DIR__ . '/includes/htmlform/fields/HTMLSelectLanguageField.php',
'HTMLSelectLimitField' => __DIR__ . '/includes/htmlform/fields/HTMLSelectLimitField.php',
'HTMLSelectNamespace' => __DIR__ . '/includes/htmlform/fields/HTMLSelectNamespace.php',
'HTMLSelectNamespaceWithButton' => __DIR__ . '/includes/htmlform/fields/HTMLSelectNamespaceWithButton.php',
@ -613,6 +617,7 @@ $wgAutoloadLocalClasses = [
'HTMLTextField' => __DIR__ . '/includes/htmlform/fields/HTMLTextField.php',
'HTMLTextFieldWithButton' => __DIR__ . '/includes/htmlform/fields/HTMLTextFieldWithButton.php',
'HTMLTitleTextField' => __DIR__ . '/includes/htmlform/fields/HTMLTitleTextField.php',
'HTMLTitlesMultiselectField' => __DIR__ . '/includes/htmlform/fields/HTMLTitlesMultiselectField.php',
'HTMLUserTextField' => __DIR__ . '/includes/htmlform/fields/HTMLUserTextField.php',
'HTMLUsersMultiselectField' => __DIR__ . '/includes/htmlform/fields/HTMLUsersMultiselectField.php',
'HTTPFileStreamer' => __DIR__ . '/includes/libs/filebackend/HTTPFileStreamer.php',
@ -623,10 +628,10 @@ $wgAutoloadLocalClasses = [
'HashSiteStore' => __DIR__ . '/includes/site/HashSiteStore.php',
'HashtableReplacer' => __DIR__ . '/includes/libs/replacers/HashtableReplacer.php',
'HistoryAction' => __DIR__ . '/includes/actions/HistoryAction.php',
'HistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
'HistoryBlobCurStub' => __DIR__ . '/includes/HistoryBlob.php',
'HistoryBlobStub' => __DIR__ . '/includes/HistoryBlob.php',
'HistoryPager' => __DIR__ . '/includes/actions/HistoryAction.php',
'HistoryBlob' => __DIR__ . '/includes/historyblob/HistoryBlob.php',
'HistoryBlobCurStub' => __DIR__ . '/includes/historyblob/HistoryBlobCurStub.php',
'HistoryBlobStub' => __DIR__ . '/includes/historyblob/HistoryBlobStub.php',
'HistoryPager' => __DIR__ . '/includes/actions/pagers/HistoryPager.php',
'Hooks' => __DIR__ . '/includes/Hooks.php',
'Html' => __DIR__ . '/includes/Html.php',
'HtmlArmor' => __DIR__ . '/includes/libs/HtmlArmor.php',
@ -635,15 +640,15 @@ $wgAutoloadLocalClasses = [
'HttpStatus' => __DIR__ . '/includes/libs/HttpStatus.php',
'IApiMessage' => __DIR__ . '/includes/api/IApiMessage.php',
'IBufferingStatsdDataFactory' => __DIR__ . '/includes/libs/stats/IBufferingStatsdDataFactory.php',
'ICacheHelper' => __DIR__ . '/includes/cache/CacheHelper.php',
'ICacheHelper' => __DIR__ . '/includes/cache/ICacheHelper.php',
'IContextSource' => __DIR__ . '/includes/context/IContextSource.php',
'IDBAccessObject' => __DIR__ . '/includes/dao/IDBAccessObject.php',
'IDatabase' => __DIR__ . '/includes/libs/rdbms/database/IDatabase.php',
'IEContentAnalyzer' => __DIR__ . '/includes/libs/mime/IEContentAnalyzer.php',
'IEUrlExtension' => __DIR__ . '/includes/libs/IEUrlExtension.php',
'IExpiringStore' => __DIR__ . '/includes/libs/objectcache/IExpiringStore.php',
'IJobSpecification' => __DIR__ . '/includes/jobqueue/JobSpecification.php',
'ILocalizedException' => __DIR__ . '/includes/exception/LocalizedException.php',
'IJobSpecification' => __DIR__ . '/includes/jobqueue/IJobSpecification.php',
'ILocalizedException' => __DIR__ . '/includes/exception/ILocalizedException.php',
'IMaintainableDatabase' => __DIR__ . '/includes/libs/rdbms/database/IMaintainableDatabase.php',
'IP' => __DIR__ . '/includes/libs/IP.php',
'IPTC' => __DIR__ . '/includes/media/IPTC.php',
@ -700,17 +705,14 @@ $wgAutoloadLocalClasses = [
'JavaScriptMinifier' => __DIR__ . '/includes/libs/JavaScriptMinifier.php',
'Job' => __DIR__ . '/includes/jobqueue/Job.php',
'JobQueue' => __DIR__ . '/includes/jobqueue/JobQueue.php',
'JobQueueAggregator' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregator.php',
'JobQueueAggregatorNull' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregator.php',
'JobQueueAggregatorRedis' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php',
'JobQueueConnectionError' => __DIR__ . '/includes/jobqueue/JobQueue.php',
'JobQueueConnectionError' => __DIR__ . '/includes/jobqueue/exception/JobQueueConnectionError.php',
'JobQueueDB' => __DIR__ . '/includes/jobqueue/JobQueueDB.php',
'JobQueueEnqueueUpdate' => __DIR__ . '/includes/deferred/JobQueueEnqueueUpdate.php',
'JobQueueError' => __DIR__ . '/includes/jobqueue/JobQueue.php',
'JobQueueError' => __DIR__ . '/includes/jobqueue/exception/JobQueueError.php',
'JobQueueFederated' => __DIR__ . '/includes/jobqueue/JobQueueFederated.php',
'JobQueueGroup' => __DIR__ . '/includes/jobqueue/JobQueueGroup.php',
'JobQueueMemory' => __DIR__ . '/includes/jobqueue/JobQueueMemory.php',
'JobQueueReadOnlyError' => __DIR__ . '/includes/jobqueue/JobQueue.php',
'JobQueueReadOnlyError' => __DIR__ . '/includes/jobqueue/exception/JobQueueReadOnlyError.php',
'JobQueueRedis' => __DIR__ . '/includes/jobqueue/JobQueueRedis.php',
'JobRunner' => __DIR__ . '/includes/jobqueue/JobRunner.php',
'JobSpecification' => __DIR__ . '/includes/jobqueue/JobSpecification.php',
@ -807,13 +809,14 @@ $wgAutoloadLocalClasses = [
'LogPager' => __DIR__ . '/includes/logging/LogPager.php',
'LoggedOutEditToken' => __DIR__ . '/includes/user/LoggedOutEditToken.php',
'LoggedUpdateMaintenance' => __DIR__ . '/maintenance/Maintenance.php',
'LoginForm' => __DIR__ . '/includes/specialpage/LoginSignupSpecialPage.php',
'LoginHelper' => __DIR__ . '/includes/specials/helpers/LoginHelper.php',
'LoginSignupSpecialPage' => __DIR__ . '/includes/specialpage/LoginSignupSpecialPage.php',
'LonelyPagesPage' => __DIR__ . '/includes/specials/SpecialLonelypages.php',
'LongPagesPage' => __DIR__ . '/includes/specials/SpecialLongpages.php',
'MIMEsearchPage' => __DIR__ . '/includes/specials/SpecialMIMEsearch.php',
'MSCompoundFileReader' => __DIR__ . '/includes/libs/mime/MSCompoundFileReader.php',
'MWCallableUpdate' => __DIR__ . '/includes/deferred/MWCallableUpdate.php',
'MWCallbackStream' => __DIR__ . '/includes/http/MWCallbackStream.php',
'MWContentSerializationException' => __DIR__ . '/includes/exception/MWContentSerializationException.php',
'MWCryptHKDF' => __DIR__ . '/includes/utils/MWCryptHKDF.php',
'MWCryptHash' => __DIR__ . '/includes/libs/MWCryptHash.php',
@ -840,12 +843,12 @@ $wgAutoloadLocalClasses = [
'MagicWordArray' => __DIR__ . '/includes/MagicWordArray.php',
'MagicWordFactory' => __DIR__ . '/includes/MagicWordFactory.php',
'MailAddress' => __DIR__ . '/includes/mail/MailAddress.php',
'MainConfigDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
'MainConfigDependency' => __DIR__ . '/includes/cache/dependency/MainConfigDependency.php',
'MaintainableDBConnRef' => __DIR__ . '/includes/libs/rdbms/database/MaintainableDBConnRef.php',
'Maintenance' => __DIR__ . '/maintenance/Maintenance.php',
'MakeTestEdits' => __DIR__ . '/maintenance/makeTestEdits.php',
'MalformedTitleException' => __DIR__ . '/includes/title/MalformedTitleException.php',
'ManageForeignResources' => __DIR__ . '/maintenance/resources/manageForeignResources.php',
'ManageForeignResources' => __DIR__ . '/maintenance/manageForeignResources.php',
'ManageJobs' => __DIR__ . '/maintenance/manageJobs.php',
'ManualLogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
'MapCacheLRU' => __DIR__ . '/includes/libs/MapCacheLRU.php',
@ -857,7 +860,7 @@ $wgAutoloadLocalClasses = [
'MediaHandler' => __DIR__ . '/includes/media/MediaHandler.php',
'MediaHandlerFactory' => __DIR__ . '/includes/media/MediaHandlerFactory.php',
'MediaStatisticsPage' => __DIR__ . '/includes/specials/SpecialMediaStatistics.php',
'MediaTransformError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
'MediaTransformError' => __DIR__ . '/includes/media/MediaTransformError.php',
'MediaTransformInvalidParametersException' => __DIR__ . '/includes/media/MediaTransformInvalidParametersException.php',
'MediaTransformOutput' => __DIR__ . '/includes/media/MediaTransformOutput.php',
'MediaWiki' => __DIR__ . '/includes/MediaWiki.php',
@ -865,6 +868,7 @@ $wgAutoloadLocalClasses = [
'MediaWikiSite' => __DIR__ . '/includes/site/MediaWikiSite.php',
'MediaWikiTitleCodec' => __DIR__ . '/includes/title/MediaWikiTitleCodec.php',
'MediaWikiVersionFetcher' => __DIR__ . '/includes/MediaWikiVersionFetcher.php',
'MediaWiki\\ChangeTags\\Taggable' => __DIR__ . '/includes/changetags/Taggable.php',
'MediaWiki\\Config\\ConfigRepository' => __DIR__ . '/includes/config/ConfigRepository.php',
'MediaWiki\\DB\\PatchFileLocation' => __DIR__ . '/includes/db/PatchFileLocation.php',
'MediaWiki\\Diff\\ComplexityException' => __DIR__ . '/includes/diff/ComplexityException.php',
@ -882,15 +886,18 @@ $wgAutoloadLocalClasses = [
'MediaWiki\\Logger\\ConsoleSpi' => __DIR__ . '/includes/debug/logger/ConsoleSpi.php',
'MediaWiki\\Logger\\LegacyLogger' => __DIR__ . '/includes/debug/logger/LegacyLogger.php',
'MediaWiki\\Logger\\LegacySpi' => __DIR__ . '/includes/debug/logger/LegacySpi.php',
'MediaWiki\\Logger\\LogCapturingSpi' => __DIR__ . '/includes/debug/logger/LogCapturingSpi.php',
'MediaWiki\\Logger\\LoggerFactory' => __DIR__ . '/includes/debug/logger/LoggerFactory.php',
'MediaWiki\\Logger\\MonologSpi' => __DIR__ . '/includes/debug/logger/MonologSpi.php',
'MediaWiki\\Logger\\Monolog\\AvroFormatter' => __DIR__ . '/includes/debug/logger/monolog/AvroFormatter.php',
'MediaWiki\\Logger\\Monolog\\BufferHandler' => __DIR__ . '/includes/debug/logger/monolog/BufferHandler.php',
'MediaWiki\\Logger\\Monolog\\CeeFormatter' => __DIR__ . '/includes/debug/logger/monolog/CeeFormatter.php',
'MediaWiki\\Logger\\Monolog\\KafkaHandler' => __DIR__ . '/includes/debug/logger/monolog/KafkaHandler.php',
'MediaWiki\\Logger\\Monolog\\LegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php',
'MediaWiki\\Logger\\Monolog\\LegacyHandler' => __DIR__ . '/includes/debug/logger/monolog/LegacyHandler.php',
'MediaWiki\\Logger\\Monolog\\LineFormatter' => __DIR__ . '/includes/debug/logger/monolog/LineFormatter.php',
'MediaWiki\\Logger\\Monolog\\LogstashFormatter' => __DIR__ . '/includes/debug/logger/monolog/LogstashFormatter.php',
'MediaWiki\\Logger\\Monolog\\MwlogHandler' => __DIR__ . '/includes/debug/logger/monolog/MwlogHandler.php',
'MediaWiki\\Logger\\Monolog\\SyslogHandler' => __DIR__ . '/includes/debug/logger/monolog/SyslogHandler.php',
'MediaWiki\\Logger\\Monolog\\WikiProcessor' => __DIR__ . '/includes/debug/logger/monolog/WikiProcessor.php',
'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
@ -899,6 +906,14 @@ $wgAutoloadLocalClasses = [
'MediaWiki\\OutputHandler' => __DIR__ . '/includes/OutputHandler.php',
'MediaWiki\\ProcOpenError' => __DIR__ . '/includes/exception/ProcOpenError.php',
'MediaWiki\\Search\\ParserOutputSearchDataExtractor' => __DIR__ . '/includes/search/ParserOutputSearchDataExtractor.php',
'MediaWiki\\Services\\CannotReplaceActiveServiceException' => __DIR__ . '/includes/libs/services/CannotReplaceActiveServiceException.php',
'MediaWiki\\Services\\ContainerDisabledException' => __DIR__ . '/includes/libs/services/ContainerDisabledException.php',
'MediaWiki\\Services\\DestructibleService' => __DIR__ . '/includes/libs/services/DestructibleService.php',
'MediaWiki\\Services\\NoSuchServiceException' => __DIR__ . '/includes/libs/services/NoSuchServiceException.php',
'MediaWiki\\Services\\SalvageableService' => __DIR__ . '/includes/libs/services/SalvageableService.php',
'MediaWiki\\Services\\ServiceAlreadyDefinedException' => __DIR__ . '/includes/libs/services/ServiceAlreadyDefinedException.php',
'MediaWiki\\Services\\ServiceContainer' => __DIR__ . '/includes/libs/services/ServiceContainer.php',
'MediaWiki\\Services\\ServiceDisabledException' => __DIR__ . '/includes/libs/services/ServiceDisabledException.php',
'MediaWiki\\ShellDisabledError' => __DIR__ . '/includes/exception/ShellDisabledError.php',
'MediaWiki\\Site\\MediaWikiPageNameNormalizer' => __DIR__ . '/includes/site/MediaWikiPageNameNormalizer.php',
'MediaWiki\\Special\\SpecialPageFactory' => __DIR__ . '/includes/specialpage/SpecialPageFactory.php',
@ -924,6 +939,8 @@ $wgAutoloadLocalClasses = [
'MediaWiki\\Widget\\DateTimeInputWidget' => __DIR__ . '/includes/widget/DateTimeInputWidget.php',
'MediaWiki\\Widget\\ExpiryInputWidget' => __DIR__ . '/includes/widget/ExpiryInputWidget.php',
'MediaWiki\\Widget\\NamespaceInputWidget' => __DIR__ . '/includes/widget/NamespaceInputWidget.php',
'MediaWiki\\Widget\\NamespacesMultiselectWidget' => __DIR__ . '/includes/widget/NamespacesMultiselectWidget.php',
'MediaWiki\\Widget\\PendingTextInputWidget' => __DIR__ . '/includes/widget/PendingTextInputWidget.php',
'MediaWiki\\Widget\\SearchInputWidget' => __DIR__ . '/includes/widget/SearchInputWidget.php',
'MediaWiki\\Widget\\Search\\BasicSearchResultSetWidget' => __DIR__ . '/includes/widget/search/BasicSearchResultSetWidget.php',
'MediaWiki\\Widget\\Search\\DidYouMeanWidget' => __DIR__ . '/includes/widget/search/DidYouMeanWidget.php',
@ -937,7 +954,9 @@ $wgAutoloadLocalClasses = [
'MediaWiki\\Widget\\Search\\SimpleSearchResultWidget' => __DIR__ . '/includes/widget/search/SimpleSearchResultWidget.php',
'MediaWiki\\Widget\\SelectWithInputWidget' => __DIR__ . '/includes/widget/SelectWithInputWidget.php',
'MediaWiki\\Widget\\SizeFilterWidget' => __DIR__ . '/includes/widget/SizeFilterWidget.php',
'MediaWiki\\Widget\\TagMultiselectWidget' => __DIR__ . '/includes/widget/TagMultiselectWidget.php',
'MediaWiki\\Widget\\TitleInputWidget' => __DIR__ . '/includes/widget/TitleInputWidget.php',
'MediaWiki\\Widget\\TitlesMultiselectWidget' => __DIR__ . '/includes/widget/TitlesMultiselectWidget.php',
'MediaWiki\\Widget\\UserInputWidget' => __DIR__ . '/includes/widget/UserInputWidget.php',
'MediaWiki\\Widget\\UsersMultiselectWidget' => __DIR__ . '/includes/widget/UsersMultiselectWidget.php',
'MemcLockManager' => __DIR__ . '/includes/libs/lockmanager/MemcLockManager.php',
@ -953,13 +972,13 @@ $wgAutoloadLocalClasses = [
'MergeMessageFileList' => __DIR__ . '/maintenance/mergeMessageFileList.php',
'MergeableUpdate' => __DIR__ . '/includes/deferred/MergeableUpdate.php',
'Message' => __DIR__ . '/includes/Message.php',
'MessageBlobStore' => __DIR__ . '/includes/cache/MessageBlobStore.php',
'MessageBlobStore' => __DIR__ . '/includes/resourceloader/MessageBlobStore.php',
'MessageCache' => __DIR__ . '/includes/cache/MessageCache.php',
'MessageCacheUpdate' => __DIR__ . '/includes/deferred/MessageCacheUpdate.php',
'MessageContent' => __DIR__ . '/includes/content/MessageContent.php',
'MessageLocalizer' => __DIR__ . '/languages/MessageLocalizer.php',
'MessageSpecifier' => __DIR__ . '/includes/libs/MessageSpecifier.php',
'MigrateActors' => __DIR__ . '/maintenance/migrateActors.php',
'MigrateActors' => __DIR__ . '/maintenance/includes/MigrateActors.php',
'MigrateArchiveText' => __DIR__ . '/maintenance/migrateArchiveText.php',
'MigrateComments' => __DIR__ . '/maintenance/migrateComments.php',
'MigrateFileRepoLayout' => __DIR__ . '/maintenance/migrateFileRepoLayout.php',
@ -1051,7 +1070,7 @@ $wgAutoloadLocalClasses = [
'PPNode_Hash_Tree' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
'PPTemplateFrame_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
'PPTemplateFrame_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
'PackedHoverImageGallery' => __DIR__ . '/includes/gallery/PackedOverlayImageGallery.php',
'PackedHoverImageGallery' => __DIR__ . '/includes/gallery/PackedHoverImageGallery.php',
'PackedImageGallery' => __DIR__ . '/includes/gallery/PackedImageGallery.php',
'PackedOverlayImageGallery' => __DIR__ . '/includes/gallery/PackedOverlayImageGallery.php',
'Page' => __DIR__ . '/includes/page/Page.php',
@ -1087,10 +1106,10 @@ $wgAutoloadLocalClasses = [
'PhpXmlBugTester' => __DIR__ . '/includes/installer/PhpBugTests.php',
'Pingback' => __DIR__ . '/includes/Pingback.php',
'PoolCounter' => __DIR__ . '/includes/poolcounter/PoolCounter.php',
'PoolCounterNull' => __DIR__ . '/includes/poolcounter/PoolCounterNull.php',
'PoolCounterRedis' => __DIR__ . '/includes/poolcounter/PoolCounterRedis.php',
'PoolCounterWork' => __DIR__ . '/includes/poolcounter/PoolCounterWork.php',
'PoolCounterWorkViaCallback' => __DIR__ . '/includes/poolcounter/PoolCounterWorkViaCallback.php',
'PoolCounter_Stub' => __DIR__ . '/includes/poolcounter/PoolCounter.php',
'PoolWorkArticleView' => __DIR__ . '/includes/poolcounter/PoolWorkArticleView.php',
'PopulateArchiveRevId' => __DIR__ . '/maintenance/populateArchiveRevId.php',
'PopulateBacklinkNamespace' => __DIR__ . '/maintenance/populateBacklinkNamespace.php',
@ -1117,7 +1136,7 @@ $wgAutoloadLocalClasses = [
'PreferencesForm' => __DIR__ . '/includes/specials/forms/PreferencesFormLegacy.php',
'PreferencesFormLegacy' => __DIR__ . '/includes/specials/forms/PreferencesFormLegacy.php',
'PreferencesFormOOUI' => __DIR__ . '/includes/specials/forms/PreferencesFormOOUI.php',
'PrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
'PrefixSearch' => __DIR__ . '/includes/search/PrefixSearch.php',
'PrefixingStatsdDataFactoryProxy' => __DIR__ . '/includes/libs/stats/PrefixingStatsdDataFactoryProxy.php',
'PreprocessDump' => __DIR__ . '/maintenance/preprocessDump.php',
'Preprocessor' => __DIR__ . '/includes/parser/Preprocessor.php',
@ -1126,6 +1145,7 @@ $wgAutoloadLocalClasses = [
'ProcessCacheLRU' => __DIR__ . '/includes/libs/ProcessCacheLRU.php',
'Processor' => __DIR__ . '/includes/registration/Processor.php',
'Profiler' => __DIR__ . '/includes/profiler/Profiler.php',
'ProfilerExcimer' => __DIR__ . '/includes/profiler/ProfilerExcimer.php',
'ProfilerOutput' => __DIR__ . '/includes/profiler/output/ProfilerOutput.php',
'ProfilerOutputDb' => __DIR__ . '/includes/profiler/output/ProfilerOutputDb.php',
'ProfilerOutputDump' => __DIR__ . '/includes/profiler/output/ProfilerOutputDump.php',
@ -1166,7 +1186,7 @@ $wgAutoloadLocalClasses = [
'RSSFeed' => __DIR__ . '/includes/Feed.php',
'RandomPage' => __DIR__ . '/includes/specials/SpecialRandompage.php',
'RangeChronologicalPager' => __DIR__ . '/includes/pager/RangeChronologicalPager.php',
'RangeDifference' => __DIR__ . '/includes/diff/DiffEngine.php',
'RangeDifference' => __DIR__ . '/includes/diff/RangeDifference.php',
'RawAction' => __DIR__ . '/includes/actions/RawAction.php',
'RawMessage' => __DIR__ . '/includes/RawMessage.php',
'ReadOnlyError' => __DIR__ . '/includes/exception/ReadOnlyError.php',
@ -1177,19 +1197,19 @@ $wgAutoloadLocalClasses = [
'RebuildLocalisationCache' => __DIR__ . '/maintenance/rebuildLocalisationCache.php',
'RebuildMessages' => __DIR__ . '/maintenance/rebuildmessages.php',
'RebuildRecentchanges' => __DIR__ . '/maintenance/rebuildrecentchanges.php',
'RebuildSitesCache' => __DIR__ . '/maintenance/rebuildSitesCache.php',
'RebuildTextIndex' => __DIR__ . '/maintenance/rebuildtextindex.php',
'RecentChange' => __DIR__ . '/includes/changes/RecentChange.php',
'RecentChangesUpdateJob' => __DIR__ . '/includes/jobqueue/jobs/RecentChangesUpdateJob.php',
'RecompressTracked' => __DIR__ . '/maintenance/storage/recompressTracked.php',
'RecountCategories' => __DIR__ . '/maintenance/recountCategories.php',
'RedirectSpecialArticle' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
'RedirectSpecialArticle' => __DIR__ . '/includes/specialpage/RedirectSpecialArticle.php',
'RedirectSpecialPage' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
'RedisBagOStuff' => __DIR__ . '/includes/libs/objectcache/RedisBagOStuff.php',
'RedisConnRef' => __DIR__ . '/includes/libs/redis/RedisConnRef.php',
'RedisConnectionPool' => __DIR__ . '/includes/libs/redis/RedisConnectionPool.php',
'RedisLockManager' => __DIR__ . '/includes/libs/lockmanager/RedisLockManager.php',
'RedisPubSubFeedEngine' => __DIR__ . '/includes/rcfeed/RedisPubSubFeedEngine.php',
'RefreshExternallinksIndex' => __DIR__ . '/maintenance/refreshExternallinksIndex.php',
'RefreshFileHeaders' => __DIR__ . '/maintenance/refreshFileHeaders.php',
'RefreshImageMetadata' => __DIR__ . '/maintenance/refreshImageMetadata.php',
'RefreshLinks' => __DIR__ . '/maintenance/refreshLinks.php',
@ -1206,6 +1226,7 @@ $wgAutoloadLocalClasses = [
'RepoGroup' => __DIR__ . '/includes/filerepo/RepoGroup.php',
'RequestContext' => __DIR__ . '/includes/context/RequestContext.php',
'ResetAuthenticationThrottle' => __DIR__ . '/maintenance/resetAuthenticationThrottle.php',
'ResetPageRandom' => __DIR__ . '/maintenance/resetPageRandom.php',
'ResetUserEmail' => __DIR__ . '/maintenance/resetUserEmail.php',
'ResetUserTokens' => __DIR__ . '/maintenance/resetUserTokens.php',
'ResourceFileCache' => __DIR__ . '/includes/cache/ResourceFileCache.php',
@ -1217,11 +1238,8 @@ $wgAutoloadLocalClasses = [
'ResourceLoaderForeignApiModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderForeignApiModule.php',
'ResourceLoaderImage' => __DIR__ . '/includes/resourceloader/ResourceLoaderImage.php',
'ResourceLoaderImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderImageModule.php',
'ResourceLoaderJqueryMsgModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderJqueryMsgModule.php',
'ResourceLoaderLanguageDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageDataModule.php',
'ResourceLoaderLanguageNamesModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageNamesModule.php',
'ResourceLoaderLessVarFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLessVarFileModule.php',
'ResourceLoaderMediaWikiUtilModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderMediaWikiUtilModule.php',
'ResourceLoaderModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderModule.php',
'ResourceLoaderOOUIFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderOOUIFileModule.php',
'ResourceLoaderOOUIImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderOOUIImageModule.php',
@ -1229,9 +1247,7 @@ $wgAutoloadLocalClasses = [
'ResourceLoaderSiteModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSiteModule.php',
'ResourceLoaderSiteStylesModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSiteStylesModule.php',
'ResourceLoaderSkinModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSkinModule.php',
'ResourceLoaderSpecialCharacterDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php',
'ResourceLoaderStartUpModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderStartUpModule.php',
'ResourceLoaderUploadDialogModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUploadDialogModule.php',
'ResourceLoaderUserDefaultsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserDefaultsModule.php',
'ResourceLoaderUserModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserModule.php',
'ResourceLoaderUserOptionsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserOptionsModule.php',
@ -1261,10 +1277,10 @@ $wgAutoloadLocalClasses = [
'Revision' => __DIR__ . '/includes/Revision.php',
'RevisionDeleteUser' => __DIR__ . '/includes/revisiondelete/RevisionDeleteUser.php',
'RevisionDeleter' => __DIR__ . '/includes/revisiondelete/RevisionDeleter.php',
'RevisionItem' => __DIR__ . '/includes/RevisionList.php',
'RevisionItemBase' => __DIR__ . '/includes/RevisionList.php',
'RevisionList' => __DIR__ . '/includes/RevisionList.php',
'RevisionListBase' => __DIR__ . '/includes/RevisionList.php',
'RevisionItem' => __DIR__ . '/includes/revisionlist/RevisionItem.php',
'RevisionItemBase' => __DIR__ . '/includes/revisionlist/RevisionItemBase.php',
'RevisionList' => __DIR__ . '/includes/revisionlist/RevisionList.php',
'RevisionListBase' => __DIR__ . '/includes/revisionlist/RevisionListBase.php',
'RiffExtractor' => __DIR__ . '/includes/libs/RiffExtractor.php',
'RightsLogFormatter' => __DIR__ . '/includes/logging/RightsLogFormatter.php',
'RollbackAction' => __DIR__ . '/includes/actions/RollbackAction.php',
@ -1282,7 +1298,7 @@ $wgAutoloadLocalClasses = [
'SearchDump' => __DIR__ . '/maintenance/dumpIterator.php',
'SearchEngine' => __DIR__ . '/includes/search/SearchEngine.php',
'SearchEngineConfig' => __DIR__ . '/includes/search/SearchEngineConfig.php',
'SearchEngineDummy' => __DIR__ . '/includes/search/SearchEngine.php',
'SearchEngineDummy' => __DIR__ . '/includes/search/SearchEngineDummy.php',
'SearchEngineFactory' => __DIR__ . '/includes/search/SearchEngineFactory.php',
'SearchExactMatchRescorer' => __DIR__ . '/includes/search/SearchExactMatchRescorer.php',
'SearchHighlighter' => __DIR__ . '/includes/search/SearchHighlighter.php',
@ -1313,12 +1329,10 @@ $wgAutoloadLocalClasses = [
'SiteImporter' => __DIR__ . '/includes/site/SiteImporter.php',
'SiteList' => __DIR__ . '/includes/site/SiteList.php',
'SiteLookup' => __DIR__ . '/includes/site/SiteLookup.php',
'SiteSQLStore' => __DIR__ . '/includes/site/SiteSQLStore.php',
'SiteStats' => __DIR__ . '/includes/SiteStats.php',
'SiteStatsInit' => __DIR__ . '/includes/SiteStatsInit.php',
'SiteStatsUpdate' => __DIR__ . '/includes/deferred/SiteStatsUpdate.php',
'SiteStore' => __DIR__ . '/includes/site/SiteStore.php',
'SitesCacheFileBuilder' => __DIR__ . '/includes/site/SitesCacheFileBuilder.php',
'Skin' => __DIR__ . '/includes/skins/Skin.php',
'SkinApi' => __DIR__ . '/includes/skins/SkinApi.php',
'SkinApiTemplate' => __DIR__ . '/includes/skins/SkinApiTemplate.php',
@ -1331,7 +1345,7 @@ $wgAutoloadLocalClasses = [
'SlotDiffRenderer' => __DIR__ . '/includes/diff/SlotDiffRenderer.php',
'SpecialActiveUsers' => __DIR__ . '/includes/specials/SpecialActiveusers.php',
'SpecialAllMessages' => __DIR__ . '/includes/specials/SpecialAllMessages.php',
'SpecialAllMyUploads' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
'SpecialAllMyUploads' => __DIR__ . '/includes/specials/redirects/SpecialAllMyUploads.php',
'SpecialAllPages' => __DIR__ . '/includes/specials/SpecialAllPages.php',
'SpecialApiHelp' => __DIR__ . '/includes/specials/SpecialApiHelp.php',
'SpecialApiSandbox' => __DIR__ . '/includes/specials/SpecialApiSandbox.php',
@ -1361,8 +1375,8 @@ $wgAutoloadLocalClasses = [
'SpecialImport' => __DIR__ . '/includes/specials/SpecialImport.php',
'SpecialJavaScriptTest' => __DIR__ . '/includes/specials/SpecialJavaScriptTest.php',
'SpecialLinkAccounts' => __DIR__ . '/includes/specials/SpecialLinkAccounts.php',
'SpecialListAdmins' => __DIR__ . '/includes/specials/SpecialListusers.php',
'SpecialListBots' => __DIR__ . '/includes/specials/SpecialListusers.php',
'SpecialListAdmins' => __DIR__ . '/includes/specials/redirects/SpecialListAdmins.php',
'SpecialListBots' => __DIR__ . '/includes/specials/redirects/SpecialListBots.php',
'SpecialListFiles' => __DIR__ . '/includes/specials/SpecialListfiles.php',
'SpecialListGrants' => __DIR__ . '/includes/specials/SpecialListgrants.php',
'SpecialListGroupRights' => __DIR__ . '/includes/specials/SpecialListgrouprights.php',
@ -1371,10 +1385,10 @@ $wgAutoloadLocalClasses = [
'SpecialLog' => __DIR__ . '/includes/specials/SpecialLog.php',
'SpecialMergeHistory' => __DIR__ . '/includes/specials/SpecialMergeHistory.php',
'SpecialMyLanguage' => __DIR__ . '/includes/specials/SpecialMyLanguage.php',
'SpecialMycontributions' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
'SpecialMypage' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
'SpecialMytalk' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
'SpecialMyuploads' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
'SpecialMycontributions' => __DIR__ . '/includes/specials/redirects/SpecialMycontributions.php',
'SpecialMypage' => __DIR__ . '/includes/specials/redirects/SpecialMypage.php',
'SpecialMytalk' => __DIR__ . '/includes/specials/redirects/SpecialMytalk.php',
'SpecialMyuploads' => __DIR__ . '/includes/specials/redirects/SpecialMyuploads.php',
'SpecialNewFiles' => __DIR__ . '/includes/specials/SpecialNewimages.php',
'SpecialNewpages' => __DIR__ . '/includes/specials/SpecialNewpages.php',
'SpecialPage' => __DIR__ . '/includes/specialpage/SpecialPage.php',
@ -1396,7 +1410,7 @@ $wgAutoloadLocalClasses = [
'SpecialRecentChanges' => __DIR__ . '/includes/specials/SpecialRecentchanges.php',
'SpecialRecentChangesLinked' => __DIR__ . '/includes/specials/SpecialRecentchangeslinked.php',
'SpecialRedirect' => __DIR__ . '/includes/specials/SpecialRedirect.php',
'SpecialRedirectToSpecial' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
'SpecialRedirectToSpecial' => __DIR__ . '/includes/specialpage/SpecialRedirectToSpecial.php',
'SpecialRemoveCredentials' => __DIR__ . '/includes/specials/SpecialRemoveCredentials.php',
'SpecialResetTokens' => __DIR__ . '/includes/specials/SpecialResetTokens.php',
'SpecialRevisionDelete' => __DIR__ . '/includes/specials/SpecialRevisiondelete.php',
@ -1412,7 +1426,7 @@ $wgAutoloadLocalClasses = [
'SpecialUnlockdb' => __DIR__ . '/includes/specials/SpecialUnlockdb.php',
'SpecialUpload' => __DIR__ . '/includes/specials/SpecialUpload.php',
'SpecialUploadStash' => __DIR__ . '/includes/specials/SpecialUploadStash.php',
'SpecialUploadStashTooLargeException' => __DIR__ . '/includes/specials/SpecialUploadStash.php',
'SpecialUploadStashTooLargeException' => __DIR__ . '/includes/specials/exception/SpecialUploadStashTooLargeException.php',
'SpecialUserLogin' => __DIR__ . '/includes/specials/SpecialUserLogin.php',
'SpecialUserLogout' => __DIR__ . '/includes/specials/SpecialUserLogout.php',
'SpecialVersion' => __DIR__ . '/includes/specials/SpecialVersion.php',
@ -1426,7 +1440,6 @@ $wgAutoloadLocalClasses = [
'SqliteUpdater' => __DIR__ . '/includes/installer/SqliteUpdater.php',
'SquidPurgeClient' => __DIR__ . '/includes/clientpool/SquidPurgeClient.php',
'SquidPurgeClientPool' => __DIR__ . '/includes/clientpool/SquidPurgeClientPool.php',
'SquidUpdate' => __DIR__ . '/includes/deferred/CdnCacheUpdate.php',
'SrConverter' => __DIR__ . '/languages/classes/LanguageSr.php',
'StatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
'StatsdAwareInterface' => __DIR__ . '/includes/libs/stats/StatsdAwareInterface.php',
@ -1435,7 +1448,7 @@ $wgAutoloadLocalClasses = [
'StorageTypeStats' => __DIR__ . '/maintenance/storage/storageTypeStats.php',
'StoreFileOp' => __DIR__ . '/includes/libs/filebackend/fileop/StoreFileOp.php',
'StreamFile' => __DIR__ . '/includes/StreamFile.php',
'StringPrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
'StringPrefixSearch' => __DIR__ . '/includes/search/StringPrefixSearch.php',
'StringUtils' => __DIR__ . '/includes/libs/StringUtils.php',
'StripState' => __DIR__ . '/includes/parser/StripState.php',
'StubObject' => __DIR__ . '/includes/StubObject.php',
@ -1465,7 +1478,7 @@ $wgAutoloadLocalClasses = [
'TextStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
'TgConverter' => __DIR__ . '/languages/classes/LanguageTg.php',
'ThrottledError' => __DIR__ . '/includes/exception/ThrottledError.php',
'ThumbnailImage' => __DIR__ . '/includes/media/MediaTransformOutput.php',
'ThumbnailImage' => __DIR__ . '/includes/media/ThumbnailImage.php',
'ThumbnailRenderJob' => __DIR__ . '/includes/jobqueue/jobs/ThumbnailRenderJob.php',
'TidyUpT39714' => __DIR__ . '/maintenance/tidyUpT39714.php',
'TiffHandler' => __DIR__ . '/includes/media/TiffHandler.php',
@ -1476,14 +1489,14 @@ $wgAutoloadLocalClasses = [
'TitleCleanup' => __DIR__ . '/maintenance/cleanupTitles.php',
'TitleFormatter' => __DIR__ . '/includes/title/TitleFormatter.php',
'TitleParser' => __DIR__ . '/includes/title/TitleParser.php',
'TitlePrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
'TitlePrefixSearch' => __DIR__ . '/includes/search/TitlePrefixSearch.php',
'TitleValue' => __DIR__ . '/includes/title/TitleValue.php',
'TrackBlobs' => __DIR__ . '/maintenance/storage/trackBlobs.php',
'TrackingCategories' => __DIR__ . '/includes/TrackingCategories.php',
'TraditionalImageGallery' => __DIR__ . '/includes/gallery/TraditionalImageGallery.php',
'TransactionRoundDefiningUpdate' => __DIR__ . '/includes/deferred/TransactionRoundDefiningUpdate.php',
'TransformParameterError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
'TransformTooBigImageAreaError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
'TransformParameterError' => __DIR__ . '/includes/media/TransformParameterError.php',
'TransformTooBigImageAreaError' => __DIR__ . '/includes/media/TransformTooBigImageAreaError.php',
'TransformationalImageHandler' => __DIR__ . '/includes/media/TransformationalImageHandler.php',
'UDPRCFeedEngine' => __DIR__ . '/includes/rcfeed/UDPRCFeedEngine.php',
'UDPTransport' => __DIR__ . '/includes/libs/UDPTransport.php',
@ -1513,9 +1526,9 @@ $wgAutoloadLocalClasses = [
'UpdateSearchIndex' => __DIR__ . '/maintenance/updateSearchIndex.php',
'UpdateSpecialPages' => __DIR__ . '/maintenance/updateSpecialPages.php',
'UploadBase' => __DIR__ . '/includes/upload/UploadBase.php',
'UploadChunkFileException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
'UploadChunkVerificationException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
'UploadChunkZeroLengthFileException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
'UploadChunkFileException' => __DIR__ . '/includes/upload/exception/UploadChunkFileException.php',
'UploadChunkVerificationException' => __DIR__ . '/includes/upload/exception/UploadChunkVerificationException.php',
'UploadChunkZeroLengthFileException' => __DIR__ . '/includes/upload/exception/UploadChunkZeroLengthFileException.php',
'UploadForm' => __DIR__ . '/includes/specials/forms/UploadForm.php',
'UploadFromChunks' => __DIR__ . '/includes/upload/UploadFromChunks.php',
'UploadFromFile' => __DIR__ . '/includes/upload/UploadFromFile.php',
@ -1526,15 +1539,15 @@ $wgAutoloadLocalClasses = [
'UploadSourceAdapter' => __DIR__ . '/includes/import/UploadSourceAdapter.php',
'UploadSourceField' => __DIR__ . '/includes/specials/formfields/UploadSourceField.php',
'UploadStash' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashBadPathException' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashException' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashBadPathException' => __DIR__ . '/includes/upload/exception/UploadStashBadPathException.php',
'UploadStashException' => __DIR__ . '/includes/upload/exception/UploadStashException.php',
'UploadStashFile' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashFileException' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashFileNotFoundException' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashNoSuchKeyException' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashNotLoggedInException' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashWrongOwnerException' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashZeroLengthFileException' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashFileException' => __DIR__ . '/includes/upload/exception/UploadStashFileException.php',
'UploadStashFileNotFoundException' => __DIR__ . '/includes/upload/exception/UploadStashFileNotFoundException.php',
'UploadStashNoSuchKeyException' => __DIR__ . '/includes/upload/exception/UploadStashNoSuchKeyException.php',
'UploadStashNotLoggedInException' => __DIR__ . '/includes/upload/exception/UploadStashNotLoggedInException.php',
'UploadStashWrongOwnerException' => __DIR__ . '/includes/upload/exception/UploadStashWrongOwnerException.php',
'UploadStashZeroLengthFileException' => __DIR__ . '/includes/upload/exception/UploadStashZeroLengthFileException.php',
'UppercaseCollation' => __DIR__ . '/includes/collation/UppercaseCollation.php',
'User' => __DIR__ . '/includes/user/User.php',
'UserArray' => __DIR__ . '/includes/user/UserArray.php',
@ -1542,6 +1555,7 @@ $wgAutoloadLocalClasses = [
'UserBlockedError' => __DIR__ . '/includes/exception/UserBlockedError.php',
'UserCache' => __DIR__ . '/includes/cache/UserCache.php',
'UserDupes' => __DIR__ . '/maintenance/userDupes.inc',
'UserEditCountUpdate' => __DIR__ . '/includes/deferred/UserEditCountUpdate.php',
'UserGroupExpiryJob' => __DIR__ . '/includes/jobqueue/jobs/UserGroupExpiryJob.php',
'UserGroupMembership' => __DIR__ . '/includes/user/UserGroupMembership.php',
'UserMailer' => __DIR__ . '/includes/mail/UserMailer.php',
@ -1552,7 +1566,6 @@ $wgAutoloadLocalClasses = [
'UserRightsProxy' => __DIR__ . '/includes/user/UserRightsProxy.php',
'UserrightsPage' => __DIR__ . '/includes/specials/SpecialUserrights.php',
'UsersPager' => __DIR__ . '/includes/specials/pagers/UsersPager.php',
'UtfNormal' => __DIR__ . '/includes/compat/normal/UtfNormal.php',
'UzConverter' => __DIR__ . '/languages/classes/LanguageUz.php',
'VFormHTMLForm' => __DIR__ . '/includes/htmlform/VFormHTMLForm.php',
'ValidateRegistrationFile' => __DIR__ . '/maintenance/validateRegistrationFile.php',
@ -1610,7 +1623,7 @@ $wgAutoloadLocalClasses = [
'WikiTextStructure' => __DIR__ . '/includes/content/WikiTextStructure.php',
'Wikimedia\\Http\\HttpAcceptNegotiator' => __DIR__ . '/includes/libs/http/HttpAcceptNegotiator.php',
'Wikimedia\\Http\\HttpAcceptParser' => __DIR__ . '/includes/libs/http/HttpAcceptParser.php',
'Wikimedia\\Rdbms\\AtomicSectionIdentifier' => __DIR__ . '/includes/libs/rdbms/database/AtomicSectionIdentifier.php',
'Wikimedia\\Rdbms\\AtomicSectionIdentifier' => __DIR__ . '/includes/libs/rdbms/database/utils/AtomicSectionIdentifier.php',
'Wikimedia\\Rdbms\\Blob' => __DIR__ . '/includes/libs/rdbms/encasing/Blob.php',
'Wikimedia\\Rdbms\\ChronologyProtector' => __DIR__ . '/includes/libs/rdbms/ChronologyProtector.php',
'Wikimedia\\Rdbms\\ConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/ConnectionManager.php',
@ -1623,13 +1636,14 @@ $wgAutoloadLocalClasses = [
'Wikimedia\\Rdbms\\DBQueryError' => __DIR__ . '/includes/libs/rdbms/exception/DBQueryError.php',
'Wikimedia\\Rdbms\\DBQueryTimeoutError' => __DIR__ . '/includes/libs/rdbms/exception/DBQueryTimeoutError.php',
'Wikimedia\\Rdbms\\DBReadOnlyError' => __DIR__ . '/includes/libs/rdbms/exception/DBReadOnlyError.php',
'Wikimedia\\Rdbms\\DBReadOnlyRoleError' => __DIR__ . '/includes/libs/rdbms/exception/DBReadOnlyRoleError.php',
'Wikimedia\\Rdbms\\DBReplicationWaitError' => __DIR__ . '/includes/libs/rdbms/exception/DBReplicationWaitError.php',
'Wikimedia\\Rdbms\\DBTransactionError' => __DIR__ . '/includes/libs/rdbms/exception/DBTransactionError.php',
'Wikimedia\\Rdbms\\DBTransactionSizeError' => __DIR__ . '/includes/libs/rdbms/exception/DBTransactionSizeError.php',
'Wikimedia\\Rdbms\\DBTransactionStateError' => __DIR__ . '/includes/libs/rdbms/exception/DBTransactionStateError.php',
'Wikimedia\\Rdbms\\DBUnexpectedError' => __DIR__ . '/includes/libs/rdbms/exception/DBUnexpectedError.php',
'Wikimedia\\Rdbms\\Database' => __DIR__ . '/includes/libs/rdbms/database/Database.php',
'Wikimedia\\Rdbms\\DatabaseDomain' => __DIR__ . '/includes/libs/rdbms/database/DatabaseDomain.php',
'Wikimedia\\Rdbms\\DatabaseDomain' => __DIR__ . '/includes/libs/rdbms/database/domain/DatabaseDomain.php',
'Wikimedia\\Rdbms\\DatabaseMssql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMssql.php',
'Wikimedia\\Rdbms\\DatabaseMysqlBase' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqlBase.php',
'Wikimedia\\Rdbms\\DatabaseMysqli' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqli.php',
@ -1677,7 +1691,7 @@ $wgAutoloadLocalClasses = [
'WithoutInterwikiPage' => __DIR__ . '/includes/specials/SpecialWithoutinterwiki.php',
'WordLevelDiff' => __DIR__ . '/includes/diff/WordLevelDiff.php',
'WrapOldPasswords' => __DIR__ . '/maintenance/wrapOldPasswords.php',
'XCFHandler' => __DIR__ . '/includes/media/XCF.php',
'XCFHandler' => __DIR__ . '/includes/media/XCFHandler.php',
'XMLRCFeedFormatter' => __DIR__ . '/includes/rcfeed/XMLRCFeedFormatter.php',
'XMPInfo' => __DIR__ . '/includes/compat/XMPReader.php',
'XMPReader' => __DIR__ . '/includes/compat/XMPReader.php',
@ -1692,8 +1706,8 @@ $wgAutoloadLocalClasses = [
'ZhConverter' => __DIR__ . '/languages/classes/LanguageZh.php',
'ZipDirectoryReader' => __DIR__ . '/includes/utils/ZipDirectoryReader.php',
'ZipDirectoryReaderError' => __DIR__ . '/includes/utils/ZipDirectoryReaderError.php',
'concatenatedgziphistoryblob' => __DIR__ . '/includes/HistoryBlob.php',
'historyblobcurstub' => __DIR__ . '/includes/HistoryBlob.php',
'historyblobstub' => __DIR__ . '/includes/HistoryBlob.php',
'concatenatedgziphistoryblob' => __DIR__ . '/includes/historyblob/ConcatenatedGzipHistoryBlob.php',
'historyblobcurstub' => __DIR__ . '/includes/historyblob/HistoryBlobCurStub.php',
'historyblobstub' => __DIR__ . '/includes/historyblob/HistoryBlobStub.php',
'profile_point' => __DIR__ . '/profileinfo.php',
];

View File

@ -25,11 +25,12 @@
"ext-json": "*",
"ext-mbstring": "*",
"ext-xml": "*",
"guzzlehttp/guzzle": "6.3.3",
"liuggio/statsd-php-client": "1.0.18",
"oojs/oojs-ui": "0.29.2",
"oojs/oojs-ui": "0.31.3",
"pear/mail": "1.4.1",
"pear/mail_mime": "1.10.2",
"pear/net_smtp": "1.8.0",
"pear/net_smtp": "1.8.1",
"php": ">=5.6.99",
"psr/log": "1.0.2",
"wikimedia/assert": "0.2.2",
@ -39,20 +40,21 @@
"wikimedia/cldr-plural-rule-parser": "1.0.0",
"wikimedia/composer-merge-plugin": "1.4.1",
"wikimedia/html-formatter": "1.0.2",
"wikimedia/ip-set": "1.3.0",
"wikimedia/ip-set": "2.0.1",
"wikimedia/less.php": "1.8.0",
"wikimedia/object-factory": "1.0.0",
"wikimedia/php-session-serializer": "1.0.6",
"wikimedia/password-blacklist": "0.1.4",
"wikimedia/php-session-serializer": "1.0.7",
"wikimedia/purtle": "1.0.7",
"wikimedia/relpath": "2.1.1",
"wikimedia/remex-html": "2.0.1",
"wikimedia/running-stat": "1.2.1",
"wikimedia/scoped-callback": "2.0.0",
"wikimedia/scoped-callback": "3.0.0",
"wikimedia/utfnormal": "2.0.0",
"wikimedia/timestamp": "2.2.0",
"wikimedia/wait-condition-loop": "1.0.1",
"wikimedia/wrappedstring": "3.0.1",
"wikimedia/xmp-reader": "0.6.0",
"wikimedia/xmp-reader": "0.6.2",
"zordius/lightncandy": "0.23"
},
"require-dev": {
@ -60,18 +62,24 @@
"composer/spdx-licenses": "1.4.0",
"giorgiosironi/eris": "^0.10.0",
"hamcrest/hamcrest-php": "^2.0",
"jakub-onderka/php-console-highlighter": "0.3.2",
"jakub-onderka/php-parallel-lint": "0.9.2",
"justinrainbow/json-schema": "~5.2",
"mediawiki/mediawiki-codesniffer": "22.0.0",
"mediawiki/mediawiki-codesniffer": "25.0.0",
"monolog/monolog": "~1.22.1",
"nikic/php-parser": "3.1.3",
"nikic/php-parser": "3.1.5",
"seld/jsonlint": "1.7.1",
"nmred/kafka-php": "0.1.5",
"phpunit/phpunit": "4.8.36 || ^6.5",
"psy/psysh": "0.9.6",
"psy/psysh": "0.9.9",
"wikimedia/avro": "1.8.0",
"wikimedia/testing-access-wrapper": "~1.0",
"wmde/hamcrest-html-matchers": "^0.1.0"
"wmde/hamcrest-html-matchers": "^0.1.0",
"mediawiki/mediawiki-phan-config": "0.5.0"
},
"replace": {
"symfony/polyfill-ctype": "1.99",
"symfony/polyfill-mbstring": "1.99"
},
"suggest": {
"ext-apcu": "Local data cache for greatly improved performance",

View File

@ -1,2 +0,0 @@
This directory is for the auto-generated phpunit code coverage.
Run 'make coverage' in the tests/phpunit subdirectory to build.

View File

@ -224,7 +224,7 @@
<!-- This isn't a good idea; we should be using "ID" instead of "NMTOKEN" -->
<!-- However, "NMTOKEN" is strictest definition that is both compatible with existing -->
<!-- usage ([0-9]+) and with the "ID" type. -->
<attribute name="id" type="NMTOKEN" />
<attribute name="id" use="optional" type="NMTOKEN" />
<attribute name="bytes" use="optional" type="nonNegativeInteger" />
</extension>
</simpleContent>

View File

@ -70,9 +70,14 @@
"php": {
"type": "string",
"description": "Version constraint string against PHP."
},
"ability-shell": {
"type": "boolean",
"default": false,
"description": "Whether this extension requires shell access."
}
},
"patternProprties": {
"patternProperties": {
"^ext-": {
"type": "string",
"description": "Required PHP extension.",
@ -253,6 +258,10 @@
"noflip": {
"type": "boolean",
"description": "Whether to skip CSSJanus LTR-to-RTL flipping for this module. Recommended for styles imported from libraries that already properly handle their RTL styles. Default is false, meaning CSSJanus will be applied on RTL-mode output."
},
"packageFiles": {
"type": ["object", "array"],
"description": "Package files that can be require()d"
}
}
},
@ -343,7 +352,7 @@
"properties": {
"class": {
"type": "string",
"pattern": "^((?!ResourceLoader(File|Image)Module).)*$"
"pattern": "^(?!ResourceLoader(File|Image|Wiki)Module).*$"
}
},
"required": ["class"]
@ -360,6 +369,10 @@
"type": "object",
"description": "ResourceLoader sources to register"
},
"QUnitTestModule": {
"type": "object",
"description": "A ResourceLoaderFileModule definition registered only when wgEnableJavaScriptTest is true."
},
"ConfigRegistry": {
"type": "object",
"description": "Registry of factory functions to create Config objects"
@ -693,6 +706,14 @@
"type": "string"
}
},
"ReauthenticateTime": {
"type": "object",
"patternProperties": {
".*": {
"type": "integer"
}
}
},
"callback": {
"type": [
"array",

View File

@ -3,6 +3,12 @@
"description": "MediaWiki extension.json schema",
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^@": {
"type": "string",
"description": "Arbitrary notes, ignored by the parser."
}
},
"properties": {
"manifest_version": {
"type": "integer",
@ -71,9 +77,14 @@
"php": {
"type": "string",
"description": "Version constraint string against PHP."
},
"ability-shell": {
"type": "boolean",
"default": false,
"description": "Whether this extension requires shell access."
}
},
"patternProprties": {
"patternProperties": {
"^ext-": {
"type": "string",
"description": "Required PHP extension.",
@ -254,6 +265,10 @@
"noflip": {
"type": "boolean",
"description": "Whether to skip CSSJanus LTR-to-RTL flipping for this module. Recommended for styles imported from libraries that already properly handle their RTL styles. Default is false, meaning CSSJanus will be applied on RTL-mode output."
},
"packageFiles": {
"type": ["object", "array"],
"description": "Package files that can be require()d"
}
}
},
@ -346,7 +361,7 @@
"properties": {
"class": {
"type": "string",
"pattern": "^((?!ResourceLoader(File|Image)Module).)*$"
"pattern": "^(?!ResourceLoader(File|Image|Wiki)Module).*$"
}
},
"required": ["class"]
@ -373,6 +388,53 @@
"type": "object",
"description": "ResourceLoader sources to register"
},
"QUnitTestModule": {
"type": "object",
"description": "A ResourceLoaderFileModule definition registered only when wgEnableJavaScriptTest is true.",
"additionalProperties": false,
"properties": {
"localBasePath": {
"type": "string",
"description": "Prefix for local paths to files in $options, relative to extenion directory"
},
"remoteExtPath": {
"type": "string",
"description": "Prefix for URLs to files in $options, relative to $wgExtensionAssetsPath"
},
"remoteSkinPath": {
"type": "string",
"description": "Prefix for URLs to files in $options, relative to $wgStylePath"
},
"scripts": {
"type": ["string", "array"],
"description": "Scripts to include (array of file paths)",
"items": {
"type": "string"
}
},
"dependencies": {
"type": ["string", "array"],
"description": "Modules which must be loaded before this module",
"items": {
"type": "string"
}
},
"styles": {
"type": ["string", "array", "object"],
"description": "Styles to load",
"items": {
"type": "string"
}
},
"messages": {
"type": ["string", "array"],
"description": "Messages to load",
"items": {
"type": "string"
}
}
}
},
"ConfigRegistry": {
"type": "object",
"description": "Registry of factory functions to create Config objects"
@ -715,6 +777,14 @@
"type": "string"
}
},
"ReauthenticateTime": {
"type": "object",
"patternProperties": {
".*": {
"type": "integer"
}
}
},
"callback": {
"type": [
"array",

View File

@ -226,27 +226,15 @@ Hooks::run() returns true if the calling function should continue processing
error occurred, or one of the hooks handled the action already). Checking the
return value matters more for "before" hooks than for "complete" hooks.
Hooks::run() was added in MediaWiki 1.18, before that the global function
wfRunHooks must be used, which was deprecated in MediaWiki 1.25.
Note that hook parameters are passed in an array; this is a necessary
inconvenience to make it possible to pass reference values (that can be changed)
into the hook code. Also note that earlier versions of wfRunHooks took a
variable number of arguments; the array calling protocol came about after
MediaWiki 1.4rc1.
inconvenience to make it possible to pass reference values (which can be changed)
by the hook callback.
==Events and parameters==
This is a list of known events and parameters; please add to it if you're going
to add events to the MediaWiki code.
'AbortAutoAccount': DEPRECATED since 1.27! Create a PreAuthenticationProvider
instead. Return false to cancel automated local account creation, where normally
authentication against an external auth plugin would be creating a local
account.
$user: the User object about to be created (read-only, incomplete)
&$abortMsg: out parameter: name of error message to be displayed to user
'AbortAutoblock': Return false to cancel an autoblock.
$autoblockip: The IP going to be autoblocked.
&$block: The block from which the autoblock is coming.
@ -259,25 +247,6 @@ $editor: The User who made the change.
$title: The Title of the page that was edited.
$rc: The current RecentChange object.
'AbortLogin': DEPRECATED since 1.27! Create a PreAuthenticationProvider instead.
Return false to cancel account login.
$user: the User object being authenticated against
$password: the password being submitted, not yet checked for validity
&$retval: a LoginForm class constant to return from authenticateUserData();
default is LoginForm::ABORTED. Note that the client may be using a machine
API rather than the HTML user interface.
&$msg: the message identifier for abort reason (new in 1.18, not available
before 1.18)
'AbortNewAccount': DEPRECATED since 1.27! Create a PreAuthenticationProvider
instead. Return false to cancel explicit account creation.
$user: the User object about to be created (read-only, incomplete)
&$msg: out parameter: HTML to display on abort
&$status: out parameter: Status object to return, replaces the older $msg param
(added in 1.23)
Create the object with Status::newFatal() to ensure proper API error
messages are returned when creating account through API clients.
'AbortTalkPageEmailNotification': Return false to cancel talk page email
notification
$targetUser: the user whom to send talk page email notification
@ -415,21 +384,10 @@ $format: API format code for $text.
&$params: Array of parameters
$flags: int zero or OR-ed flags like ApiBase::GET_VALUES_FOR_HELP
'APIGetDescription': DEPRECATED since 1.25! Use APIGetDescriptionMessages
instead. Use this hook to modify a module's description.
&$module: ApiBase Module object
&$desc: String description, or array of description strings
'APIGetDescriptionMessages': Use this hook to modify a module's help message.
$module: ApiBase Module object
&$msg: Array of Message objects
'APIGetParamDescription': DEPRECATED since 1.25! Use
APIGetParamDescriptionMessages instead.
Use this hook to modify a module's parameter descriptions.
&$module: ApiBase Module object
&$desc: Array of parameter descriptions
'APIGetParamDescriptionMessages': Use this hook to modify a module's parameter
descriptions.
$module: ApiBase Module object
@ -473,6 +431,15 @@ can alter or append to the array.
(url), 'width', 'height', 'alt', 'align'.
- url: Url for the given title.
'ApiOptions': Called by action=options before applying changes to user
preferences.
$apiModule: Calling ApiOptions object
$user: User object whose preferences are being changed
$changes: Associative array of preference name => value
$resetKinds: Array of strings specifying which options kinds to reset.
See User::resetOptions() and User::getOptionKinds() for possible
values.
'ApiParseMakeOutputPage': Called when preparing the OutputPage object for
ApiParse. This is mainly intended for calling OutputPage::addContentOverride()
or OutputPage::addContentOverrideCallback().
@ -814,17 +781,11 @@ $response: The MediaWiki\Auth\AuthenticationResponse in either a PASS or FAIL
$user: The User object being authenticated against, or null if authentication
failed before getting that far.
$username: A guess at the user name being authenticated, or null if we can't
even determine that.
'AuthPluginAutoCreate': DEPRECATED since 1.27! Use the 'LocalUserCreated' hook
instead. Called when creating a local account for an user logged in from an
external authentication method.
$user: User object created locally
'AuthPluginSetup': DEPRECATED since 1.27! Extensions should be updated to use
AuthManager. Update or replace authentication plugin object ($wgAuth). Gives a
chance for an extension to set it programmatically to a variable class.
&$auth: the $wgAuth object, probably a stub
even determine that. When $user is not null, it can be in the form of
<username>@<more info> (e.g. for bot passwords).
$extraData: An array (string => string) with extra information, intended to be
added to log contexts. Fields it might include:
- appId: the application ID, only if the login was with a bot password
'AutopromoteCondition': Check autopromote condition for user.
$type: condition type
@ -1651,7 +1612,7 @@ $out: OutputPage object
notifications.
&$title: Title object of page
&$url: string value as output (out parameter, can modify)
$query: query options passed to Title::getCanonicalURL()
$query: query options as string passed to Title::getCanonicalURL()
'GetContentModels': Add content models to the list of available models.
&$models: array containing current model list, as strings. Extensions should add to this list.
@ -1689,7 +1650,7 @@ $single: Only extract the current language; if false, the prop value should
'GetFullURL': Modify fully-qualified URLs used in redirects/export/offsite data.
&$title: Title object of page
&$url: string value as output (out parameter, can modify)
$query: query options passed to Title::getFullURL()
$query: query options as string passed to Title::getFullURL()
'GetHumanTimestamp': Pre-emptively override the human-readable timestamp
generated by MWTimestamp::getHumanTimestamp(). Return false in this hook to use
@ -1703,7 +1664,7 @@ $lang: Language that will be used to render the timestamp
'GetInternalURL': Modify fully-qualified URLs used for squid cache purging.
&$title: Title object of page
&$url: string value as output (out parameter, can modify)
$query: query options passed to Title::getInternalURL()
$query: query options as string passed to Title::getInternalURL()
'GetIP': modify the ip of the current user (called only once).
&$ip: string holding the ip as determined so far
@ -1728,7 +1689,7 @@ be buggy for internal urls on render if you do not re-implement the horrible
hack that Title::getLocalURL uses in your own extension.
&$title: Title object of page
&$url: string value as output (out parameter, can modify)
$query: query options passed to Title::getLocalURL()
$query: query options as string passed to Title::getLocalURL()
'GetLocalURL::Article': Modify local URLs specifically pointing to article paths
without any fancy queries or variants.
@ -1738,7 +1699,7 @@ without any fancy queries or variants.
'GetLocalURL::Internal': Modify local URLs to internal pages.
&$title: Title object of page
&$url: string value as output (out parameter, can modify)
$query: query options passed to Title::getLocalURL()
$query: query options as string passed to Title::getLocalURL()
'GetLogTypesOnUser': Add log types where the target is a userpage
&$types: Array of log types
@ -1990,23 +1951,11 @@ $user: User the password is being validated for
$code: The language code or the language we're looking for a messages file for
&$file: The messages file path, you can override this to change the location.
'LanguageGetMagic': DEPRECATED since 1.16! Use $magicWords in a file listed in
$wgExtensionMessagesFiles instead.
Use this to define synonyms of magic words depending of the language
&$magicExtensions: associative array of magic words synonyms
$lang: language code (string)
'LanguageGetNamespaces': Provide custom ordering for namespaces or
remove namespaces. Do not use this hook to add namespaces. Use
CanonicalNamespaces for that.
&$namespaces: Array of namespaces indexed by their numbers
'LanguageGetSpecialPageAliases': DEPRECATED! Use $specialPageAliases in a file
listed in $wgExtensionMessagesFiles instead.
Use to define aliases of special pages names depending of the language
&$specialPageAliases: associative array of magic words synonyms
$lang: language code (string)
'LanguageGetTranslatedLanguageNames': Provide translated language names.
&$names: array of language code => language name
$code: language of the preferred translations
@ -2226,15 +2175,6 @@ in LoginForm::$validErrorMessages).
&$messages: Already added messages (inclusive messages from
LoginForm::$validErrorMessages)
'LoginUserMigrated': DEPRECATED since 1.27! Create a PreAuthenticationProvider
instead. Called during login to allow extensions the opportunity to inform a
user that their username doesn't exist for a specific reason, instead of letting
the login form give the generic error message that the account does not exist.
For example, when the account has been renamed or deleted.
$user: the User object being authenticated against.
&$msg: the message identifier for abort reason, or an array to pass a message
key and parameters.
'LogLine': Processes a single log entry on Special:Log.
$log_type: string for the type of log entry (e.g. 'move'). Corresponds to
logging.log_type database field.
@ -2258,6 +2198,16 @@ Special:LonelyPages.
'MagicWordwgVariableIDs': When defining new magic words IDs.
&$variableIDs: array of strings
'MaintenanceUpdateAddParams': allow extensions to add params to the update.php
maintenance script.
&$params: array to populate with the params to be added. Array elements are keyed by
the param name. Each param is an associative array that must include the following keys:
- desc The description of the param to show on --help
- require Is the param required? Defaults to false if not set.
- withArg Is an argument required with this option? Defaults to false if not set.
- shortName Character to use as short name, or false if none. Defaults to false if not set.
- multiOccurrence Can this option be passed multiple times? Defaults to false if not set.
'MaintenanceRefreshLinksInit': before executing the refreshLinks.php maintenance
script.
$refreshLinks: RefreshLinks object
@ -2270,12 +2220,17 @@ ResourceLoaderGetConfigVars instead.
Skin::makeVariablesScript
$out: The OutputPage which called the hook, can be used to get the real title.
'ManualLogEntryBeforePublish': Allows to access or modify log entry just before it is
published.
$logEntry: ManualLogEntry object
'MarkPatrolled': Before an edit is marked patrolled.
$rcid: ID of the revision to be marked patrolled
&$user: the user (object) marking the revision as patrolled
$wcOnlySysopsCanPatrol: config setting indicating whether the user needs to be a
sysop in order to mark an edit patrolled.
$auto: true if the edit is being marked as patrolled automatically
&$tags: the tags to be applied to the patrol log entry
'MarkPatrolledComplete': After an edit is marked patrolled.
$rcid: ID of the revision marked as patrolled
@ -2491,19 +2446,25 @@ $flags: Flags passed to WikiPage::doEditContent()
$revision: New Revision of the article
'PageContentLanguage': Allows changing the language in which the content of a
page is written. Defaults to the wiki content language ($wgContLang).
page is written. Defaults to the wiki content language.
$title: Title object
&$pageLang: the page content language (either an object or a language code)
$wgLang: the user language
&$pageLang: the page content language. Input can be anything (under control of
hook subscribers), but hooks should return Language objects. Language code
strings are deprecated.
$userLang: the user language (Language or StubUserLang object)
'PageContentSave': Before an article is saved.
$wikiPage: the WikiPage (object) being saved
$user: the user (object) saving the article
$content: the new article content, as a Content object
$summary: the article summary (comment)
$isminor: minor flag
$iswatch: watch flag
$section: section #
&$summary: CommentStoreComment object containing the edit comment. Can be replaced with a new one.
$isminor: Boolean flag specifying if the edit was marked as minor.
$iswatch: Previously a watch flag. Currently unused, always null.
$section: Previously the section number being edited. Currently unused, always null.
$flags: All EDIT_… flags (including EDIT_MINOR) as an integer number. See WikiPage::doEditContent
documentation for flags' definition.
$status: StatusValue object for the hook handlers resulting status. Either set $status->fatal() or
return false to abort the save action.
'PageContentSaveComplete': After an article has been updated.
$wikiPage: WikiPage modified
@ -2867,7 +2828,9 @@ $context: ResourceLoaderContext|null
ResourceLoaderStartUpModule::getConfigSettings(). Use this to export static
configuration variables to JavaScript. Things that depend on the current page
or request state must be added through MakeGlobalVariablesScript instead.
Skin is made available for skin specific config.
&$vars: [ variable name => value ]
$skin: Skin
'ResourceLoaderJqueryMsgModuleMagicWords': Called in
ResourceLoaderJqueryMsgModule to allow adding magic words for jQueryMsg.
@ -2881,17 +2844,17 @@ such as when responding to a resource
loader request or generating HTML output.
&$resourceLoader: ResourceLoader object
'ResourceLoaderTestModules': Let you add new JavaScript testing modules. This is
called after the addition of 'qunit' and MediaWiki testing resources.
&$testModules: array of JavaScript testing modules. The 'qunit' framework,
included in core, is fed using tests/qunit/QUnitTestResources.php.
To add a new qunit module named 'myext.tests':
$testModules['qunit']['myext.tests'] = [
'script' => 'extension/myext/tests.js',
'dependencies' => <any module dependency you might have>
'ResourceLoaderTestModules': DEPRECATED since 1.33! Register ResourceLoader modules
that are only available when `$wgEnableJavaScriptTest` is true. Use this for test
suites and other test-only resources.
&$testModules: one array of modules per test framework. The modules array
follows the same format as `$wgResourceModules`. For example:
$testModules['qunit']['ext.Example.test'] = [
'localBasePath' => __DIR__ . '/tests/qunit',
'remoteExtPath' => 'Example/tests/qunit',
'script' => [ 'tests/qunit/foo.js' ],
'dependencies' => [ 'ext.Example.foo' ]
];
For QUnit framework, the mediawiki.tests.qunit.testrunner dependency will be
added to any module.
&$ResourceLoader: object
'RevisionDataUpdates': Called when constructing a list of DeferrableUpdate to be
@ -3464,6 +3427,9 @@ $title: Title object that is being checked
$old: old title
$nt: new title
$user: user who does the move
$reason: string of the reason provided by the user
&$status: Status object. To abort the move, add a fatal error to this object
(i.e. call $status->fatal()).
'TitleMoveStarting': Before moving an article (title), but just after the atomic
DB section starts.
@ -3682,10 +3648,6 @@ messages!" message, return false to not delete it.
&$user: User (object) that will clear the message
$oldid: ID of the talk page revision being viewed (0 means the most recent one)
'UserCreateForm': DEPRECATED since 1.27! Create an AuthenticationProvider
instead. Manipulate the login form.
&$template: SimpleTemplate instance for the form
'UserEffectiveGroups': Called in User::getEffectiveGroups().
&$user: User to get groups for
&$groups: Current effective groups
@ -3804,10 +3766,6 @@ $direct: (bool) The hook is called directly after a successful login. This will
only happen once per login. A UserLoginComplete call with direct=false can
happen when the user visits the login page while already logged in.
'UserLoginForm': DEPRECATED since 1.27! Create an AuthenticationProvider
instead. Manipulate the login form.
&$template: QuickTemplate instance for the form
'UserLogout': Before a user logs out.
&$user: the user object that is about to be logged out
@ -3890,6 +3848,23 @@ the database) have been saved. Compare to the UserSaveOptions hook, which is
called before.
$user: The User for which the options have been saved
'UserSendConfirmationMail': Called just before a confirmation email is sent to
a user. Hook handlers can modify the email that will be sent.
$user: The User for which the confirmation email is going to be sent
&$mail: Associative array describing the email, with the following keys:
- subject: Subject line of the email
- body: Email body. Can be a string, or an array with keys 'text' and 'html'
- from: User object, or null meaning $wgPasswordSender will be used
- replyTo: MailAddress object or null
$info: Associative array with additional information:
- type: 'created' if the user's account was just created; 'set' if the user
set an email address when they previously didn't have one; 'changed' if
the user had an email address and changed it
- ip: The IP address from which the user set/changed their email address
- confirmURL: URL the user should visit to confirm their email
- invalidateURL: URL the user should visit to invalidate confirmURL
- expiration: time and date when confirmURL expires
'UserSetCookies': DEPRECATED since 1.27! If you're trying to replace core
session cookie handling, you want to create a subclass of
MediaWiki\Session\CookieSessionProvider instead. Otherwise, you can no longer

View File

@ -219,7 +219,7 @@ already known to MediaWikiServices (if not, see above).
variables.
* Add a constructor to MyExtHooks that takes a Bar service as a parameter.
* Add a static method called newFromGlobalState() with no parameters. It should
just return new MyExtHooks( MediaWikiServices::getBar() ).
just return new MyExtHooks( MediaWikiServices::getInstance()->getBar() ).
* The original static handler method onFoo( $x ) is then implemented as
self::newFromGlobalState()->doFoo( $x ).

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rdf:RDF [
<!ENTITY cc "http://creativecommons.org/ns#">
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#">
@ -13,11 +14,13 @@
xmlns:rdf="&rdf;"
xmlns:rdfs="&rdfs;"
xmlns:owl="&owl;"
xmlns:cc="&cc;"
>
<owl:Ontology rdf:about="&mediawiki;">
<rdfs:label>MediaWiki ontology</rdfs:label>
<rdfs:comment>The ontology of MediaWiki</rdfs:comment>
<cc:licence rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</owl:Ontology>
<!--

View File

@ -1,42 +0,0 @@
MediaWiki's SiteStore can be cached and stored in a flat file,
in a json format. If the SiteStore is frequently accessed, the
file cache may provide a performance benefit over a database
store, even with memcached in front of it.
Configuration:
File-based caching can be enabled by setting $wgSitesCacheFile
to the file path of the cache file.
The file can then be generated with the rebuildSitesCache.php
maintenance script.
Format:
In the sites cache file, sites are listed in a key-value
map, with the key being the site's global id (e.g. "enwiki")
and a key-value map as the value. The site list is wrapped
with in a "sites" key.
Example:
"sites": {
"aawiktionary": {
"globalid": "aawiktionary",
"type": "mediawiki",
"group": "wiktionary",
"source": "local",
"language": "aa",
"localids": [],
"config": [],
"data": {
"paths": {
"file_path": "http:\/\/aa.wiktionary.org\/w\/$1",
"page_path": "http:\/\/aa.wiktionary.org\/wiki\/$1"
}
},
"forward": false,
"internalid": 2666,
"identifiers": []
}
}

View File

@ -0,0 +1,3 @@
<?php
return require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php';

View File

@ -15,4 +15,4 @@ they are mentioned in each file individually. Also thanks to Tim Starling
for his contributions.
Instructions on installing and using this extension are available at
<http://www.mediawiki.org/wiki/Extension:CategoryTree>
<https://www.mediawiki.org/wiki/Extension:CategoryTree>

View File

@ -2,9 +2,9 @@
"require-dev": {
"jakub-onderka/php-parallel-lint": "1.0.0",
"jakub-onderka/php-console-highlighter": "0.3.2",
"mediawiki/mediawiki-codesniffer": "22.0.0",
"mediawiki/mediawiki-codesniffer": "24.0.0",
"mediawiki/minus-x": "0.3.1",
"mediawiki/mediawiki-phan-config": "0.3.0"
"mediawiki/mediawiki-phan-config": "0.5.0"
},
"scripts": {
"fix": [

View File

@ -5,6 +5,9 @@
"descriptionmsg": "categorytree-desc",
"license-name": "GPL-2.0-or-later",
"type": "parserhook",
"requires": {
"MediaWiki": ">= 1.33.0"
},
"ConfigRegistry": {
"categorytree": "GlobalVarConfig::newInstance"
},
@ -38,7 +41,16 @@
},
"ResourceModules": {
"ext.categoryTree": {
"scripts": "ext.categoryTree.js",
"localBasePath": "modules/ext.categoryTree",
"remoteExtPath": "CategoryTree/modules/ext.categoryTree",
"styles": "ext.categoryTree.css",
"packageFiles": [
"ext.categoryTree.js",
{
"name": "data.json",
"callback": "CategoryTreeHooks::getDataForJs"
}
],
"targets": [
"desktop",
"mobile"
@ -61,12 +73,12 @@
"mediawiki.api"
]
},
"ext.categoryTree.css": {
"ext.categoryTree.styles": {
"targets": [
"desktop",
"mobile"
],
"styles": "ext.categoryTree.css"
"styles": "ext.categoryTree.styles.css"
}
},
"ResourceFileModulePaths": {
@ -74,20 +86,12 @@
"remoteExtPath": "CategoryTree/modules"
},
"Hooks": {
"ArticleFromTitle": [
"CategoryTreeHooks::articleFromTitle"
],
"SpecialTrackingCategories::preprocess": [
"CategoryTreeHooks::onSpecialTrackingCategoriesPreprocess"
],
"SpecialTrackingCategories::generateCatLink": [
"CategoryTreeHooks::onSpecialTrackingCategoriesGenerateCatLink"
],
"SkinTemplateOutputPageBeforeExec": "CategoryTreeHooks::skinTemplateOutputPageBeforeExec",
"MakeGlobalVariablesScript": "CategoryTreeHooks::getConfigVars",
"ArticleFromTitle": "CategoryTreeHooks::articleFromTitle",
"SpecialTrackingCategories::preprocess": "CategoryTreeHooks::onSpecialTrackingCategoriesPreprocess",
"SpecialTrackingCategories::generateCatLink": "CategoryTreeHooks::onSpecialTrackingCategoriesGenerateCatLink",
"SkinBuildSidebar": "CategoryTreeHooks::onSkinBuildSidebar",
"ParserFirstCallInit": "CategoryTreeHooks::setHooks",
"OutputPageMakeCategoryLinks": "CategoryTreeHooks::outputPageMakeCategoryLinks",
"SkinJoinCategoryLinks": "CategoryTreeHooks::skinJoinCategoryLinks",
"BeforePageDisplay": "CategoryTreeHooks::addHeaders",
"BeforePageDisplayMobile": "CategoryTreeHooks::addHeaders",
"OutputPageParserOutput": "CategoryTreeHooks::parserOutput"
@ -96,7 +100,6 @@
"CategoryTreeMaxChildren": 200,
"CategoryTreeAllowTag": true,
"CategoryTreeDisableCache": 21600,
"CategoryTreeHTTPCache": false,
"CategoryTreeMaxDepth": {
"10": 1,
"20": 1,

View File

@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
"Wikimistusik"
"Wikimistusik",
"Axel xadolik"
]
},
"categorytree": "LomaAal",
@ -14,6 +15,10 @@
"categorytree-mode-all": "bueem",
"categorytree-collapse": "koatcera",
"categorytree-expand": "divatcera",
"categorytree-member-counts": "Tir dem {{PLURAL:$1|1 veyloma}}, {{PLURAL:$2|1 bu|$2 bu}}, is {{PLURAL:$3|1 iyeltak|$3 iyeltak}}",
"categorytree-num-categories": "$1 P",
"categorytree-num-pages": "$1 P",
"categorytree-num-files": "$1 iy-",
"categorytree-load": "vajara",
"categorytree-loading": "vajas",
"categorytree-nothing-found": "mek trasiks",

View File

@ -2,14 +2,37 @@
"@metadata": {
"authors": [
"Bonevarluri",
"Mogoeilor"
"Mogoeilor",
"Kikumoron"
]
},
"categorytree-mode-all": "همه بلگه آ",
"categorytree-collapse": "جم كردن",
"categorytree-expand": "وا كردن",
"categorytree-member-counts": "هو د ڤر گرهڌإ {{PLURAL:$1|1 زیردسدأ|$1 زيردسدأ آ}}, {{PLURAL:$2|1 بألگأ|$2 بألگإیل}}, و {{PLURAL:$3|1 جانيا|$3 جانيایل}} إ",
"categorytree": "دار دٱسداْ",
"categorytree-portlet": "دٱسداْیٱل",
"categorytree-legend": "دار دٱسداْ ناْ دیاری کو",
"categorytree-category": "دٱسداْ:",
"categorytree-go": "ڤا شیڤات دار دیاریس کو",
"categorytree-parents": "دا بڤۊ",
"categorytree-mode-label": "مود:",
"categorytree-mode-categories": "فٱقٱت دٱسداْیٱل",
"categorytree-mode-pages": "بٱلگاْیٱل جوز جانیایٱل",
"categorytree-mode-all": "تٱموم بٱلگاْیٱل",
"categorytree-collapse": "جٱم كردن",
"categorytree-expand": "گٱپ کلوݩ کردن",
"categorytree-member-counts": "هو ز ڤٱر گرهڌاْ {{PLURAL:$1|1 زیردٱسداْ|$1 زيردٱسداْیٱل}}, {{PLURAL:$2|1 بٱلگاْ|$2 بٱلگاْیٱل}}, و {{PLURAL:$3|1 جانيا|$3 جانيایٱل}} اْ",
"categorytree-num-categories": "$1 س",
"categorytree-num-pages": " $1 پ",
"categorytree-num-files": " $1 ف"
"categorytree-num-files": " $1 ف",
"categorytree-num-empty": "هالی",
"categorytree-load": "سوڤار كرد",
"categorytree-loading": "ب هال و بال سوڤار كرد",
"categorytree-nothing-found": "هیچی دیاری نکرد",
"categorytree-no-subcategories": "بی زیر دٱسداْیٱل",
"categorytree-no-parent-categories": "دٱسداْ ڤاروتری ناراْ",
"categorytree-no-pages": "هیژ بٱلگاْ یا زیردٱسداْیی ناراْ.",
"categorytree-not-found": "دٱسداْ <i>$1</i> دیاری نکرد",
"categorytree-error": "موشگل میٛن سوڤارکرد داڌاْیٱل",
"categorytree-retry": "لوتف کونین یٱ گوری ڤاستین و ز نۉ تلاش کونین.",
"apihelp-categorytree-description": "ماجۊل داخلی سی دیندادیس دار دٱسداْ.",
"apihelp-categorytree-summary": "ماجۊل داخلی سی دیندادیس دار دٱسداْ.",
"apierror-categorytree-invalidjson": "گوزیناْیٱل ڤا یٱ چی JSON جادیار بوݩ."
}

View File

@ -2,9 +2,13 @@
"@metadata": {
"authors": [
"ⲁϩⲙⲉⲧ",
"Ⲁϩⲙⲉⲧ"
"Ⲁϩⲙⲉⲧ",
"Bloomaround"
]
},
"categorytree-expand": "ⲟⲩⲱϣⲥ",
"categorytree-num-pages": "$1 `ⲛⲥ"
"categorytree-member-counts": "ϥ̀ⲱⲗⲓ {{PLURAL:$1|1 ⲛ̀ⲟⲩϦⲁϫⲓⲛⲫⲱϣ|$1 ⲛ̀ϩⲁⲛϦⲁϫⲓⲛⲫⲱϣ}}, {{PLURAL:$2|1 ⲛ̀ⲟⲩⲥⲉⲗⲓⲥ|$2 ⲛ̀ϩⲁⲛⲥⲉⲗⲓⲥ}}, ⲛⲉⲙ {{PLURAL:$3|1 ⲛ̀ⲟⲩⲥϦⲓ|$3 ⲛ̀ϩⲁⲛⲥϦⲓ}}",
"categorytree-num-categories": "$1 ⲛ̀ϣ",
"categorytree-num-pages": "$1 ⲛ̀ⲥ",
"categorytree-num-files": "$1 ⲛ̀ⲥ"
}

View File

@ -8,7 +8,9 @@
"Raimond Spekking",
"SVG",
"MGChecker",
"Umherirrender"
"Umherirrender",
"Hwboehm",
"Sushi"
]
},
"categorytree": "Kategorienbaum",
@ -36,7 +38,7 @@
"categorytree-no-subcategories": "Keine Unterkategorien",
"categorytree-no-parent-categories": "Keine Oberkategorien",
"categorytree-no-pages": "Keine Seiten oder Unterkategorien",
"categorytree-not-found": "Kategorie „$1“ wurde nicht nicht gefunden",
"categorytree-not-found": "Kategorie <i>$1</i> wurde nicht gefunden",
"categorytree-error": "Beim Laden der Daten ist ein Problem aufgetreten.",
"categorytree-retry": "Bitte warte einen Moment und versuche es dann erneut.",
"apihelp-categorytree-description": "Internes Modul für die Erweiterung „CategoryTree“.",

View File

@ -7,7 +7,8 @@
"Xoser",
"Kumkumuk",
"1917 Ekim Devrimi",
"Gırd"
"Gırd",
"Orbot707"
]
},
"categorytree": "Dara Kategoriya",
@ -22,8 +23,8 @@
"categorytree-mode-categories": "tenya kategoriy",
"categorytree-mode-pages": "Teyna pelan, dosyayan hesab meke",
"categorytree-mode-all": "peley pêro",
"categorytree-collapse": "teng kı",
"categorytree-expand": "Hera ke",
"categorytree-collapse": "teng ke",
"categorytree-expand": "hera kerê",
"categorytree-member-counts": "Tede {{PLURAL:$1|1 bınkategoriye|$1 bınkategoriy}}, {{PLURAL:$2|1 pele|$2 peli}} û {{PLURAL:$3|1 dosya|$3 dosyey}} estê",
"categorytree-num-categories": "$1 K",
"categorytree-num-pages": "$1 P",
@ -39,6 +40,7 @@
"categorytree-error": "Barkerdış de malumati dı problem esta.",
"categorytree-retry": ıma ra reca tenekê pıpawê, bahdo fına bıcerbnê.",
"apihelp-categorytree-description": "Derganiya zerre de Module Categorytree.",
"apihelp-categorytree-summary": "Seba derganiya CategoryTree rê modulê miyani",
"apihelp-categorytree-param-category": "Serekê canameya kategori, verole grotış do nê gêriyeno",
"apihelp-categorytree-param-options": "İnşaya weçeneganê Categorytree JSON objeyan vıraziya.\nHesıbyaye xoriyeya weçena <kbd>1</kbd> a.",
"apierror-categorytree-invalidjson": "Weçenegê objeyê JSON'i ravêreno"

View File

@ -0,0 +1,11 @@
{
"@metadata": {
"authors": [
"Mahuton"
]
},
"categorytree-expand": "Hun bo xá",
"categorytree-num-categories": "$1 C",
"categorytree-num-pages": "$1 P",
"categorytree-num-files": "$1 F"
}

View File

@ -5,7 +5,8 @@
"Snakesteuben",
"Robin0van0der0vliet",
"Ieneach fan 'e Esk",
"Robin van der Vliet"
"Robin van der Vliet",
"PiefPafPier"
]
},
"categorytree": "Kategorybeam",
@ -17,12 +18,12 @@
"categorytree-mode-categories": "allinne kategoryen",
"categorytree-mode-pages": "alle siden útsein ôfbylden",
"categorytree-mode-all": "alle siden",
"categorytree-collapse": "ticht",
"categorytree-expand": "iepen",
"categorytree-member-counts": "befettet {{PLURAL:$1|1 subkategory|$1 subkategoryen}}, {{PLURAL:$2|1 side|$2 siden}} en {{PLURAL:$3|1 triem|$3 triemmen}}",
"categorytree-collapse": "ynklappe",
"categorytree-expand": "útklappe",
"categorytree-member-counts": "Befettet {{PLURAL:$1|1 subkategory|$1 subkategoryen}}, {{PLURAL:$2|1 side|$2 siden}} en {{PLURAL:$3|1 bestân|$3 bestannen}}",
"categorytree-num-categories": "$1 K",
"categorytree-num-pages": "$1 S",
"categorytree-num-files": "$1 T",
"categorytree-num-files": "$1 B",
"categorytree-num-empty": "leech",
"categorytree-load": "ynlade",
"categorytree-loading": "ynlade...",

View File

@ -6,7 +6,8 @@
"Moilleadóir",
"Spacebirdy",
"Xosé",
"පසිඳු කාවින්ද"
"පසිඳු කාවින්ද",
"Kwekubo"
]
},
"categorytree": "Crann na gCatagóirí",
@ -24,8 +25,8 @@
"categorytree-expand": "oscail",
"categorytree-member-counts": "tá {{PLURAL:$1|fo-chatagóir amháin|$1 fo-chatagóirí}}, {{PLURAL:$2|leathanach amháin|$2 leathanaigh}}, agus {{PLURAL:$3|comhad amháin|$3 comhaid}} laistigh",
"categorytree-num-categories": "$1 C",
"categorytree-num-pages": "$1 P",
"categorytree-num-files": "$1 F",
"categorytree-num-pages": "$1 L",
"categorytree-num-files": "$1 C",
"categorytree-load": "lódáil",
"categorytree-loading": "ag lódáil…",
"categorytree-nothing-found": "Ní bhfuarthas dada",

View File

@ -5,7 +5,7 @@
]
},
"categorytree-expand": "Dévlopé",
"categorytree-member-counts": "Ka kontni $1 soukatégori{{PLURAL:$1|}}, $2 paj{{PLURAL:$2|}} é $3 fiché{{PLURAL:$3|}}",
"categorytree-member-counts": "Ka kontni $1 sibkatégori{{PLURAL:$1|}}, $2 paj{{PLURAL:$2|}} ké $3 fiché{{PLURAL:$3|}}",
"categorytree-num-categories": "$1 C",
"categorytree-num-pages": "$1 P",
"categorytree-num-files": "$1 F"

View File

@ -5,7 +5,7 @@
]
},
"categorytree-expand": "vistarit kor",
"categorytree-member-counts": "Hantunt asat {{PLURAL:$1|1 upvorg|$1 upvorg}}, {{PLURAL:$2|1 pan|$2 panam}}, ani {{PLURAL:$3|1 fail|$3 faili}}",
"categorytree-member-counts": "Hantunt asat {{PLURAL:$1|1 upvorg|$1 upvorg}}, {{PLURAL:$2|1 pan|$2 panam}}, ani {{PLURAL:$3|1 fayl|$3 fayli}}",
"categorytree-num-categories": "$1 V",
"categorytree-num-pages": "$1 P",
"categorytree-num-files": "$1 F",

View File

@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
"Ukabia"
"Ukabia",
"Uzoma Ozurumba"
]
},
"categorytree": "Egbü nke ébéanọr",
@ -14,6 +15,10 @@
"categorytree-mode-all": "Ihü nílé",
"categorytree-collapse": "zekpùdo",
"categorytree-expand": "Sá àsáá",
"categorytree-member-counts": "O nwere {{PLURAL:$1|1 subcategory|$1 subcategories}}, {{PLURAL:$2|1 page|$2 pages}}, and {{PLURAL:$3|1 file|$3 files}}",
"categorytree-num-categories": "$1 C",
"categorytree-num-pages": "$1 P",
"categorytree-num-files": "$1 F",
"categorytree-load": "mmẹ̀wẹ́òbú",
"categorytree-loading": "ọ byáwálá...",
"categorytree-no-subcategories": "ụdàkọòkpurù adịghị̀",

View File

@ -11,7 +11,8 @@
"Nemo bis",
"Lucas2",
"FRacco",
"Nemo ter"
"Nemo ter",
"Ruthven"
]
},
"categorytree": "Albero delle categorie",
@ -28,7 +29,7 @@
"categorytree-mode-all": "tutte le pagine",
"categorytree-collapse": "comprimi",
"categorytree-expand": "espandi",
"categorytree-member-counts": "contiene {{PLURAL:$1|1 sottocategoria|$1 sottocategorie}}, {{PLURAL:$2|1 pagina|$2 pagine}} e {{PLURAL:$3|1 file|$3 file}}",
"categorytree-member-counts": "Contiene {{PLURAL:$1|1 sottocategoria|$1 sottocategorie}}, {{PLURAL:$2|1 pagina|$2 pagine}} e {{PLURAL:$3|1 file|$3 file}}",
"categorytree-num-categories": "$1 C",
"categorytree-num-pages": "$1 P",
"categorytree-num-files": "$1 F",

View File

@ -13,8 +13,8 @@
"categorytree-mode-categories": "ကၞါင့်လ်ုဖးလှ်",
"categorytree-mode-pages": "ဖိုင်ႋလ်ုမွာဲၜး လိက်မေံၜၠာ်လုက်ဆိင့်",
"categorytree-mode-all": "လိက်မေံၜၠာ်လုက်ဆိင့်",
"categorytree-collapse": "မ်ုပေဝ်ႋက္ဍာ",
"categorytree-expand": "လဝ်လဲာ",
"categorytree-collapse": "မာအိင်း",
"categorytree-expand": "မာလာဲ",
"categorytree-member-counts": "{{PLURAL:$1|အ်ုဆုဂ်ကါင်ဖါ ၁ ၮါင်း|$1 အ်ုဆုဂ်ကါင်ဖါလ်ုဖး}}၊ {{PLURAL:$2|လိက်မေံသး ၁ ၮါင်း| လိက်မေံသး $2 ၮါင်း}}၊ လ်ု {{PLURAL:$3|ဖိုင်ႋ ၁ ၮါင်း| ဖိုင်ႋ $3 ၮါင်း }} အွးလင်ထဆေဝ်ႋ",
"categorytree-num-categories": "$1 ကဏ္ဍ",
"categorytree-num-pages": "$1 လိက်မေံသး",

View File

@ -11,6 +11,7 @@
"categorytree": "មែកធាងនៃចំណាត់ថ្នាក់ក្រុម",
"categorytree-portlet": "ចំណាត់ថ្នាក់ក្រុម",
"categorytree-legend": "បង្ហាញមែកធាងចំណាត់ថ្នាក់ក្រុម",
"categorytree-header": "បញ្ចូលឈ្មោះចំណាត់ថ្នាក់ក្រុមមួយដើម្បីមើលខ្លឹមសារវាជាទម្រង់មែកធាង។ (ត្រូវការ JavaScript។)",
"categorytree-category": "ចំណាត់ថ្នាក់ក្រុម:",
"categorytree-go": "បង្ហាញមែកធាង",
"categorytree-parents": "ចំណាត់ថ្នាក់ក្រុមកម្រិតខ្ពស់",

View File

@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Bonevarluri",
"Mogoeilor"
"Mogoeilor",
"Lorestani"
]
},
"categorytree": "دار دسه",
@ -10,27 +11,27 @@
"categorytree-legend": "دار دسه نه نشو بیئه",
"categorytree-desc": "وه شلک جمشدار [[ویجه:دار دسه|ساختار دسه]] ناوجوری بک",
"categorytree-header": "یه گل نوم دسه سی دیئن چیا مئن وه شکل یه سازه داری وارد بکید.\nبنیسید که که یه تاوع جاوا اسکریپت پیشکرده که چی آجاکس اشناخته با میها.\nار جاگردتو فره قدیمیه،یا جاوا اسکریپت فعال نئ،وه کار نمی که.",
"categorytree-category": سه:",
"categorytree-category": ٱسٱ:",
"categorytree-go": "وه شلك دار نشون بيه",
"categorytree-parents": "ریشه",
"categorytree-mode-label": د:",
"categorytree-parents": "ریشٱ",
"categorytree-mode-label": ود:",
"categorytree-mode-categories": "فقط دسه یا",
"categorytree-mode-pages": "بلگیا وه جؤز فایلیا",
"categorytree-mode-all": "همه بلگيا",
"categorytree-collapse": "جم كردن",
"categorytree-expand": "گٱپ کلون کردن",
"categorytree-member-counts": "وه د ور گرته {{PLURAL:$1|1 زیردسه|$1 زیردسه یا}}, {{PLURAL:$2|1 بلگه|$2 بلگه}}, و {{PLURAL:$3|1 جانیا|$3 جانیایا}} ئه",
"categorytree-member-counts": "ڤٱ د ڤٱر گرتٱ {{PLURAL:$1|1 زؽردٱسٱ|$1 زؽردٱسٱیا}}, {{PLURAL:$2|1 بٱلگٱ|$2 بٱلگٱ}}, ۉ {{PLURAL:$3|1 جانؽا|$3 جانؽایا}} ٱ",
"categorytree-num-categories": "$1 س",
"categorytree-num-pages": " $1 پ",
"categorytree-num-files": " $1 ف",
"categorytree-num-empty": "حالی",
"categorytree-load": وۋار كرد",
"categorytree-loading": حالت سوار كرد",
"categorytree-num-empty": "هالٛی",
"categorytree-load": ڤار كرد",
"categorytree-loading": هال ۉ بال سڤار كرد",
"categorytree-nothing-found": "هيچی پيدا نبی",
"categorytree-no-subcategories": "بی زيردسه يا",
"categorytree-no-parent-categories": "نه دسه یا ایسنی",
"categorytree-no-pages": "نه بلگه ای نه زیر دسه ای",
"categorytree-not-found": سه <i>$1</i> دیاری نکرد",
"categorytree-not-found": ٱسٱ<i>$1</i> دیاری نکرد",
"categorytree-error": "مشگل د سواركرد داديا",
"categorytree-retry": "لطفا يه دم صبر بكيد و هنی تلاش بكيد"
}

View File

@ -1,8 +1,13 @@
{
"@metadata": {
"authors": [
"Velg"
"Velg",
"Cem Rize"
]
},
"categorytree-num-pages": "$1 B"
"categorytree-expand": "genişlet",
"categorytree-member-counts": "{{PLURAL:$1|1 alt kategori|$1 alt kategori}}, {{PLURAL:$2|1 sayfa|$2 sayfa}} ve {{PLURAL:$3|1 dosya|$3 dosya}} içeriyor",
"categorytree-num-categories": "$1 B",
"categorytree-num-pages": "$1 B",
"categorytree-num-files": "$1 B"
}

View File

@ -9,7 +9,7 @@
"categorytree-mode-all": "ꯂꯃꯥꯏꯁꯤꯡ ꯂꯣꯏꯅꯥ",
"categorytree-collapse": "ꯁꯨꯞꯆꯤꯟꯕ",
"categorytree-expand": "ꯄꯥꯛꯊꯣꯛꯄꯥ",
"categorytree-member-counts": "Contains {{PLURAL:$1|1 subcategory|$1 subcategories}}, {{PLURAL:$2|1 page|$2 pages}}, and {{PLURAL:$3|1 file|$3 files}}",
"categorytree-member-counts": "ꯌꯥꯎ ꯏ {{PLURAL:$1|1 ꯄꯤꯛꯊꯕ ꯃꯆꯥꯈꯥꯏꯕ|$1 ꯄꯤꯛꯊꯕ ꯃꯆꯥꯈꯕꯁꯤꯡ}}, {{PLURAL:$2|1 ꯂꯃꯥꯏ|$2 ꯂꯃꯥꯏꯁꯤꯡ}}, ꯑꯃꯁꯨꯡ {{PLURAL:$3|1 ꯐꯥꯏꯜ|$3 ꯐꯥꯏꯜꯁꯤꯡ}}",
"categorytree-num-categories": "$1 C",
"categorytree-num-pages": "$1 P",
"categorytree-num-files": "$1 F",

View File

@ -1,12 +1,13 @@
{
"@metadata": {
"authors": [
"Jawadywn"
"Jawadywn",
"Masjawad99"
]
},
"categorytree-expand": "jéjérke",
"categorytree-member-counts": "punyo {{PLURAL:$1|$1 sub-bangso}}, {{PLURAL:$2|$2 karangan}}, samo {{PLURAL:$3|$3 berkas}}",
"categorytree-num-categories": "$1 B",
"categorytree-num-pages": "$1 K",
"categorytree-num-pages": "$1 L",
"categorytree-num-files": "$1 B"
}

View File

@ -0,0 +1,13 @@
{
"@metadata": {
"authors": [
"Youssoufkadialy",
"Amire80",
"Babamamadidianee"
]
},
"categorytree-expand": "ߊ߬ ߘߐߥߙߊ߬",
"categorytree-member-counts": "ߊ߬ ߟߊߞߎ߲ߣߍ߲߫ {{PLURAL:$1|ߦߌߟߡߊߘߎ߯ߟߊ|$1 ߦߌߟߡߊߘߎ߯ߟߊ ߟߎ߬}}, {{PLURAL:$2|1ߞߐߜߍ|$2 ߞߐߜߍ ߟߎ߬}}ߟߋ߬ ߡߊ߬, ߊ߬ ߣߌ߫ {{PLURAL:$3|1 ߞߐߕߐ߮|$3 ߞߐߕߐ߮ ߟߎ߬}}",
"categorytree-num-categories": "$1 ߦߌߟߡߊ",
"categorytree-num-pages": "$1 ߞߐߜߍ"
}

View File

@ -9,6 +9,7 @@
"categorytree-category": "Categoria:",
"categorytree-mode-all": "totu is pàginas",
"categorytree-expand": "ismànnia",
"categorytree-member-counts": "Tenet {{PLURAL:$1|1 sutacategoria|$1 sutacategorias}}, {{PLURAL:$2|1 pàgina|$2 pàginas}}, and {{PLURAL:$3|1 documentu|$3 documentos}}",
"categorytree-num-categories": "$1 C",
"categorytree-num-pages": "$1 P",
"categorytree-num-files": "$1 F"

View File

@ -0,0 +1,12 @@
{
"@metadata": {
"authors": [
"Songhay"
]
},
"categorytree-expand": "hayandi",
"categorytree-member-counts": "Goo nda {{PLURAL:$1|dumi-ize 1|dumi-ize $1}}, {{PLURAL:$2|moo 1 |moo $2}}, nda {{PLURAL:$3|tuku 1|tuku $3}}",
"categorytree-num-categories": "C $1",
"categorytree-num-pages": "P $1",
"categorytree-num-files": "F $1"
}

View File

@ -4,9 +4,15 @@
"Saimawnkham"
]
},
"categorytree": "ၵိင်ႇပိူင်ထၢၼ်ႈ",
"categorytree-legend": "ၼႄ ၵိင်ႇပိူင်ထၢၼ်ႈ",
"categorytree-desc": "ၸီႉႁႃတူင်ႉၶီး [[Special:CategoryTree|ပိူင်သၢင်ႈထၢၼ်ႈ]]",
"categorytree-category": "ပိူင်ထၢၼ်ႈ:",
"categorytree-expand": "ၶႂၢၵ်ႈ",
"categorytree-member-counts": "ၶဝ်ႈပႃးဝႆႉ {{PLURAL:$1|1 ၵၼ်ၽႄ|$1 ၵၼ်ၽႄ}}, {{PLURAL:$2|1 ၼႃႈလိၵ်ႈ|$2 ၼႃႈလိၵ်ႈ}}, လႄႈ {{PLURAL:$3|1 ၾၢႆႇ|$3 ၾၢႆႇ}}",
"categorytree-num-categories": "$1 C",
"categorytree-num-pages": "$1 P",
"categorytree-num-files": "$1 F"
"categorytree-num-files": "$1 F",
"categorytree-not-found": "ပိူင်ထၢၼ်ႈ <i>$1</i> ၼႆႉ ဢမ်ႇႁႃႁၼ်",
"apihelp-categorytree-description": "မေႃႇၵျူးၽၢႆႇၼႂ်း တွၼ်ႈတႃႇ သၢႆလင် ၵိင်ႇပိူင်ထၢၼ်ႈ။"
}

View File

@ -9,7 +9,8 @@
"M.M.S.",
"Sannab",
"WikiPhoenix",
"Jopparn"
"Jopparn",
"Sturban"
]
},
"categorytree": "Kategoriträd",
@ -25,7 +26,7 @@
"categorytree-mode-pages": "sidor utom filer",
"categorytree-mode-all": "alla sidor",
"categorytree-collapse": "göm",
"categorytree-expand": "expandera",
"categorytree-expand": "visa",
"categorytree-member-counts": "Innehåller {{PLURAL:$1|1 underkategori|$1 underkategorier}}, {{PLURAL:$2|1 sida|$2 sidor}}, och {{PLURAL:$3|1 fil|$3 filer}}",
"categorytree-num-categories": "$1 K",
"categorytree-num-pages": "$1 S",

View File

@ -0,0 +1,15 @@
{
"@metadata": {
"authors": [
"Iyuqciyang"
]
},
"categorytree-portlet": "keelgan",
"categorytree-category": "keelgan:",
"categorytree-mode-all": "kana ruwahan patas",
"categorytree-expand": "muda",
"categorytree-member-counts": "supu kana $1 keelgan spiq kngkingal, $2 pnseupu ruwahan patas kngkingal ni $3 patas pusu kngkingal",
"categorytree-num-categories": "$1 keelgan",
"categorytree-num-pages": "$1 ruwahan patas",
"categorytree-num-files": "$1 pusu patas"
}

View File

@ -0,0 +1,8 @@
{
"@metadata": {
"authors": [
"Nomden"
]
},
"categorytree-expand": "Yandisa"
}

View File

@ -0,0 +1,15 @@
{
"@metadata": {
"authors": [
"Lalotahes"
]
},
"categorytree-portlet": " aapolen",
"categorytree-category": " aapolen:",
"categorytree-mode-all": " saeboeh ye:myen",
"categorytree-expand": "pawSika:",
"categorytree-member-counts": " hani saeboeh $1 ka aapolan 、$2 ka ye:myen ki $3 ka tangan",
"categorytree-num-categories": "$1 aapolen",
"categorytree-num-pages": "$1 ye:myen",
"categorytree-num-files": "$1 tangan"
}

View File

@ -33,9 +33,9 @@
"categorytree-num-pages": "$1 頁面",
"categorytree-num-files": "$1 檔案",
"categorytree-num-empty": "空的",
"categorytree-load": "讀取",
"categorytree-loading": "讀取中…",
"categorytree-nothing-found": "查無任何項目",
"categorytree-load": "載入",
"categorytree-loading": "載入中…",
"categorytree-nothing-found": "查無內容",
"categorytree-no-subcategories": "無子分類",
"categorytree-no-parent-categories": "無上層分類",
"categorytree-no-pages": "無頁面或子分類",

View File

@ -17,56 +17,33 @@
*/
class ApiCategoryTree extends ApiBase {
/**
* @inheritDoc
*/
public function execute() {
$params = $this->extractRequestParams();
$options = [];
if ( isset( $params['options'] ) ) {
$options = FormatJson::decode( $params['options'] );
if ( !is_object( $options ) ) {
if ( is_callable( [ $this, 'dieWithError' ] ) ) {
$this->dieWithError( 'apierror-categorytree-invalidjson', 'invalidjson' );
} else {
$this->dieUsage( 'Options must be valid a JSON object', 'invalidjson' );
}
return;
$this->dieWithError( 'apierror-categorytree-invalidjson', 'invalidjson' );
}
$options = get_object_vars( $options );
}
$title = CategoryTree::makeTitle( $params['category'] );
if ( !$title || $title->isExternal() ) {
if ( is_callable( [ $this, 'dieWithError' ] ) ) {
$this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['category'] ) ] );
} else {
$this->dieUsageMsg( [ 'invalidtitle', wfEscapeWikiText( $params['category'] ) ] );
}
$this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['category'] ) ] );
}
$depth = isset( $options['depth'] ) ? (int)$options['depth'] : 1;
$ct = new CategoryTree( $options );
$depth = CategoryTree::capDepth( $ct->getOption( 'mode' ), $depth );
$config = $this->getConfig();
$ctConfig = ConfigFactory::getDefaultInstance()->makeConfig( 'categorytree' );
$html = $this->getHTML( $ct, $title, $depth, $ctConfig );
if (
$ctConfig->get( 'CategoryTreeHTTPCache' ) &&
$config->get( 'SquidMaxage' ) &&
$config->get( 'UseSquid' )
) {
if ( $config->get( 'UseESI' ) ) {
$this->getRequest()->response()->header(
'Surrogate-Control: max-age=' . $config->get( 'SquidMaxage' ) . ', content="ESI/1.0"'
);
$this->getMain()->setCacheMaxAge( 0 );
} else {
$this->getMain()->setCacheMaxAge( $config->get( 'SquidMaxage' ) );
}
// cache for anons only
$this->getRequest()->response()->header( 'Vary: Accept-Encoding, Cookie' );
// TODO: purge the squid cache when a category page is invalidated
}
$this->getMain()->setCacheMode( 'public' );
$this->getResult()->addContentValue( $this->getModuleName(), 'html', $html );
}
@ -99,7 +76,7 @@ class ApiCategoryTree extends ApiBase {
* @param Config $ctConfig Config for CategoryTree
* @return string HTML
*/
private function getHTML( $ct, $title, $depth, $ctConfig ) {
private function getHTML( CategoryTree $ct, Title $title, $depth, Config $ctConfig ) {
global $wgContLang, $wgMemc;
$mckey = wfMemcKey(
@ -134,6 +111,9 @@ class ApiCategoryTree extends ApiBase {
return trim( $html );
}
/**
* @inheritDoc
*/
public function getAllowedParams() {
return [
'category' => [
@ -146,6 +126,9 @@ class ApiCategoryTree extends ApiBase {
];
}
/**
* @inheritDoc
*/
public function isInternal() {
return true;
}

View File

@ -30,9 +30,10 @@ class CategoryTree {
public $mOptions = [];
/**
* @suppress PhanTypeInvalidDimOffset
* @param array $options
*/
public function __construct( $options ) {
public function __construct( array $options ) {
global $wgCategoryTreeDefaultOptions;
// ensure default values and order of options.
@ -126,7 +127,8 @@ class CategoryTree {
}
}
sort( $namespaces ); # get elements into canonical order
# get elements into canonical order
sort( $namespaces );
return $namespaces;
}
@ -249,9 +251,9 @@ class CategoryTree {
* Add ResourceLoader modules to the OutputPage object
* @param OutputPage $outputPage
*/
public static function setHeaders( $outputPage ) {
public static function setHeaders( OutputPage $outputPage ) {
# Add the modules
$outputPage->addModuleStyles( 'ext.categoryTree.css' );
$outputPage->addModuleStyles( 'ext.categoryTree.styles' );
$outputPage->addModules( 'ext.categoryTree' );
}
@ -261,7 +263,7 @@ class CategoryTree {
* @return mixed
* @throws Exception
*/
protected static function encodeOptions( $options, $enc ) {
protected static function encodeOptions( array $options, $enc ) {
if ( $enc == 'mode' || $enc == '' ) {
$opt = $options['mode'];
} elseif ( $enc == 'json' ) {
@ -319,7 +321,8 @@ class CategoryTree {
/**
* Custom tag implementation. This is called by CategoryTreeHooks::parserHook, which is used to
* load CategoryTreeFunctions.php on demand.
* @param Parser $parser
* @suppress PhanParamReqAfterOpt $parser is not optional but nullable
* @param Parser|null $parser
* @param string $category
* @param bool $hideroot
* @param array $attr
@ -327,8 +330,8 @@ class CategoryTree {
* @param bool $allowMissing
* @return bool|string
*/
public function getTag( $parser, $category, $hideroot = false, $attr = [], $depth = 1,
$allowMissing = false
public function getTag( Parser $parser = null, $category, $hideroot = false, array $attr = [],
$depth = 1, $allowMissing = false
) {
global $wgCategoryTreeDisableCache;
@ -391,7 +394,7 @@ class CategoryTree {
* @param int $depth
* @return string
*/
public function renderChildren( $title, $depth = 1 ) {
public function renderChildren( Title $title, $depth = 1 ) {
global $wgCategoryTreeMaxChildren, $wgCategoryTreeUseCategoryTable;
if ( $title->getNamespace() != NS_CATEGORY ) {
@ -489,7 +492,7 @@ class CategoryTree {
* @param Title $title
* @return string
*/
public function renderParents( $title ) {
public function renderParents( Title $title ) {
global $wgCategoryTreeMaxChildren;
$dbr = wfGetDB( DB_REPLICA );
@ -538,7 +541,7 @@ class CategoryTree {
* @param int $children
* @return string
*/
public function renderNode( $title, $children = 0 ) {
public function renderNode( Title $title, $children = 0 ) {
global $wgCategoryTreeUseCategoryTable;
if ( $wgCategoryTreeUseCategoryTable && $title->getNamespace() == NS_CATEGORY
@ -556,11 +559,11 @@ class CategoryTree {
* Returns a string with a HTML represenation of the given page.
* $info must be an associative array, containing at least a Title object under the 'title' key.
* @param Title $title
* @param Category $cat
* @param Category|null $cat
* @param int $children
* @return string
*/
public function renderNodeInfo( $title, $cat, $children = 0 ) {
public function renderNodeInfo( Title $title, Category $cat = null, $children = 0 ) {
$mode = $this->getOption( 'mode' );
$ns = $title->getNamespace();
@ -637,20 +640,19 @@ class CategoryTree {
$linkattr[ 'class' ] = "CategoryTreeToggle";
$linkattr['data-ct-title'] = $key;
$tag = 'span';
if ( $children == 0 ) {
// Use ->plain() and htmlspecialchars() to ensure
// identical to what is done by JS, which does:
// $link.text( mw.msg( 'categorytree-expand-bullet' ) )
$txt = htmlspecialchars( wfMessage( 'categorytree-expand-bullet' )->plain() );
// Use ->plain() to ensure identical result as JS,
// which does:
// $link.text( mw.msg( 'categorytree-expand-bullet' ) );
$txt = wfMessage( 'categorytree-expand-bullet' )->plain();
$linkattr[ 'data-ct-state' ] = 'collapsed';
} else {
$txt = htmlspecialchars( wfMessage( 'categorytree-collapse-bullet' )->plain() );
$txt = wfMessage( 'categorytree-collapse-bullet' )->plain();
$linkattr[ 'data-ct-loaded' ] = true;
$linkattr[ 'data-ct-state' ] = 'expanded';
}
$bullet = Xml::openElement( $tag, $linkattr ) . $txt . Xml::closeElement( $tag ) . ' ';
$bullet = Html::element( 'span', $linkattr, $txt ) . ' ';
}
} else {
$bullet = wfMessage( 'categorytree-page-bullet' )->escaped();
@ -707,12 +709,15 @@ class CategoryTree {
/**
* Create a string which format the page, subcat and file counts of a category
* @suppress PhanParamReqAfterOpt $cat is not optional but nullable
* @param IContextSource $context
* @param Category|null $cat
* @param int $countMode
* @return string
*/
public static function createCountString( IContextSource $context, $cat, $countMode ) {
public static function createCountString( IContextSource $context, Category $cat = null,
$countMode
) {
global $wgContLang;
# Get counts, with conversion to integer so === works
@ -726,7 +731,8 @@ class CategoryTree {
$attr = [
'title' => $context->msg( 'categorytree-member-counts' )
->numParams( $subcatCount, $pages, $fileCount, $allCount, $countMode )->text(),
'dir' => $context->getLanguage()->getDir() # numbers and commas get messed up in a mixed dir env
# numbers and commas get messed up in a mixed dir env
'dir' => $context->getLanguage()->getDir()
];
$s = $wgContLang->getDirMark() . ' ';
@ -788,6 +794,7 @@ class CategoryTree {
/**
* Internal function to cap depth
* @suppress PhanPluginDuplicateConditionalNullCoalescing until PHP7 is required
* @param string $mode
* @param int $depth
* @return int|mixed

View File

@ -64,11 +64,17 @@ class CategoryTreeCategoryViewer extends CategoryViewer {
$this->children_start_char[] = $this->getSubcategorySortChar( $title, $sortkey );
}
/**
* @inheritDoc
*/
public function clearCategoryState() {
$this->child_cats = [];
parent::clearCategoryState();
}
/**
* @inheritDoc
*/
public function finaliseCategoryState() {
if ( $this->flip ) {
$this->child_cats = array_reverse( $this->child_cats );

View File

@ -28,11 +28,13 @@
*/
class CategoryTreeHooks {
/**
* @internal For use by CategoryTreeCategoryViewer and CategoryTreePage only!
* @return bool
*/
public static function shouldForceHeaders() {
global $wgCategoryTreeSidebarRoot, $wgCategoryTreeHijackPageCategories,
$wgCategoryTreeForceHeaders;
return $wgCategoryTreeForceHeaders || $wgCategoryTreeSidebarRoot
|| $wgCategoryTreeHijackPageCategories;
global $wgCategoryTreeForceHeaders;
return $wgCategoryTreeForceHeaders;
}
/**
@ -69,7 +71,7 @@ class CategoryTreeHooks {
/**
* @param Parser $parser
*/
public static function setHooks( $parser ) {
public static function setHooks( Parser $parser ) {
global $wgCategoryTreeAllowTag;
if ( !$wgCategoryTreeAllowTag ) {
return;
@ -82,15 +84,14 @@ class CategoryTreeHooks {
* Entry point for the {{#categorytree}} tag parser function.
* This is a wrapper around CategoryTreeHooks::parserHook
* @param Parser $parser
* @param string ...$params
* @return array|string
*/
public static function parserFunction( $parser ) {
$params = func_get_args();
array_shift( $params ); // first is $parser, strip it
public static function parserFunction( Parser $parser, ...$params ) {
// first user-supplied parameter must be category name
if ( !$params ) {
return ''; // no category specified, return nothing
// no category specified, return nothing
return '';
}
$cat = array_shift( $params );
@ -99,7 +100,8 @@ class CategoryTreeHooks {
foreach ( $params as $p ) {
if ( preg_match( '/^\s*(\S.*?)\s*=\s*(.*?)\s*$/', $p, $m ) ) {
$k = $m[1];
$v = preg_replace( '/^"\s*(.*?)\s*"$/', '$1', $m[2] ); // strip any quotes enclusing the value
// strip any quotes enclusing the value
$v = preg_replace( '/^"\s*(.*?)\s*"$/', '$1', $m[2] );
} else {
$k = trim( $p );
$v = true;
@ -117,9 +119,9 @@ class CategoryTreeHooks {
* Hook implementation for injecting a category tree into the sidebar.
* Only does anything if $wgCategoryTreeSidebarRoot is set to a category name.
* @param Skin $skin
* @param SkinTemplate $tpl
* @param array &$sidebar
*/
public static function skinTemplateOutputPageBeforeExec( $skin, $tpl ) {
public static function onSkinBuildSidebar( Skin $skin, array &$sidebar ) {
global $wgCategoryTreeSidebarRoot, $wgCategoryTreeSidebarOptions;
if ( !$wgCategoryTreeSidebarRoot ) {
@ -128,26 +130,30 @@ class CategoryTreeHooks {
$html = self::parserHook( $wgCategoryTreeSidebarRoot, $wgCategoryTreeSidebarOptions );
if ( $html ) {
$tpl->data['sidebar']['categorytree-portlet'] = $html;
$sidebar['categorytree-portlet'] = $html;
CategoryTree::setHeaders( $skin->getOutput() );
}
}
/**
* Entry point for the <categorytree> tag parser hook.
* This loads CategoryTreeFunctions.php and calls CategoryTree::getTag()
* @suppress PhanUndeclaredProperty ParserOutput->mCategoryTreeTag
* @param string $cat
* @param array $argv
* @param Parser|null $parser
* @param bool $allowMissing
* @return bool|string
*/
public static function parserHook( $cat, $argv, $parser = null, $allowMissing = false ) {
global $wgOut;
public static function parserHook(
$cat,
array $argv,
Parser $parser = null,
$allowMissing = false
) {
if ( $parser ) {
$parser->mOutput->mCategoryTreeTag = true; # flag for use by CategoryTreeHooks::parserOutput
} else {
CategoryTree::setHeaders( $wgOut );
# flag for use by CategoryTreeHooks::parserOutput
$parser->mOutput->mCategoryTreeTag = true;
}
$ct = new CategoryTree( $argv );
@ -172,10 +178,11 @@ class CategoryTreeHooks {
* Hook callback that injects messages and things into the <head> tag,
* if needed in the current page.
* Does nothing if $parserOutput->mCategoryTreeTag is not set
* @suppress PhanUndeclaredProperty ParserOutput->mCategoryTreeTag
* @param OutputPage $outputPage
* @param ParserOutput $parserOutput
*/
public static function parserOutput( $outputPage, $parserOutput ) {
public static function parserOutput( OutputPage $outputPage, ParserOutput $parserOutput ) {
if ( self::shouldForceHeaders() ) {
// Skip, we've already set the headers unconditionally
return;
@ -202,14 +209,12 @@ class CategoryTreeHooks {
* ArticleFromTitle hook, override category page handling
*
* @param Title $title
* @param Article &$article
* @return bool
* @param Article|null &$article Article (object) that will be returned
*/
public static function articleFromTitle( $title, &$article ) {
public static function articleFromTitle( Title $title, Article &$article = null ) {
if ( $title->getNamespace() == NS_CATEGORY ) {
$article = new CategoryTreeCategoryPage( $title );
}
return true;
}
/**
@ -219,7 +224,11 @@ class CategoryTreeHooks {
* @param array &$links
* @return bool
*/
public static function outputPageMakeCategoryLinks( &$out, $categories, &$links ) {
public static function outputPageMakeCategoryLinks(
OutputPage &$out,
array $categories,
array &$links
) {
global $wgCategoryTreePageCategoryOptions, $wgCategoryTreeHijackPageCategories;
if ( !$wgCategoryTreeHijackPageCategories ) {
@ -229,52 +238,37 @@ class CategoryTreeHooks {
foreach ( $categories as $category => $type ) {
$links[$type][] = self::parserHook( $category, $wgCategoryTreePageCategoryOptions, null, true );
CategoryTree::setHeaders( $out );
}
return false;
}
/**
* @param Skin $skin
* @param array &$links
* @param string &$result
* @return bool
* Get exported data for the "ext.categoryTree" ResourceLoader module.
*
* @internal For use in extension.json only.
* @return array Data to be serialised as data.json
*/
public static function skinJoinCategoryLinks( $skin, &$links, &$result ) {
global $wgCategoryTreeHijackPageCategories;
if ( !$wgCategoryTreeHijackPageCategories ) {
// Not enabled, don't do anything.
return true;
}
$embed = '<div class="CategoryTreeCategoryBarItem">';
$pop = '</div>';
$sep = ' ';
$result = $embed . implode( "{$pop} {$sep} {$embed}", $links ) . $pop;
return false;
}
/**
* @param array &$vars
* @return bool
*/
public static function getConfigVars( &$vars ) {
public static function getDataForJs() {
global $wgCategoryTreeCategoryPageOptions;
// Look this is pretty bad but Category tree is just whacky, it needs to be rewritten
// Look, this is pretty bad but CategoryTree is just whacky, it needs to be rewritten
$ct = new CategoryTree( $wgCategoryTreeCategoryPageOptions );
$vars['wgCategoryTreePageCategoryOptions'] = $ct->getOptionsAsJsStructure();
return true;
return [
'defaultCtOptions' => $ct->getOptionsAsJsStructure(),
];
}
/**
* Hook handler for the SpecialTrackingCategories::preprocess hook
* @suppress PhanUndeclaredProperty SpecialPage->categoryTreeCategories
* @param SpecialPage $specialPage SpecialTrackingCategories object
* @param array $trackingCategories [ 'msg' => Title, 'cats' => Title[] ]
*/
public static function onSpecialTrackingCategoriesPreprocess(
$specialPage, $trackingCategories
SpecialPage $specialPage, array $trackingCategories
) {
$categoryDbKeys = [];
foreach ( $trackingCategories as $catMsg => $data ) {
@ -300,12 +294,13 @@ class CategoryTreeHooks {
/**
* Hook handler for the SpecialTrackingCategories::generateCatLink hook
* @suppress PhanUndeclaredProperty SpecialPage->categoryTreeCategories
* @param SpecialPage $specialPage SpecialTrackingCategories object
* @param Title $catTitle Title object of the linked category
* @param string &$html Result html
*/
public static function onSpecialTrackingCategoriesGenerateCatLink(
$specialPage, $catTitle, &$html
SpecialPage $specialPage, Title $catTitle, &$html
) {
if ( !isset( $specialPage->categoryTreeCategories ) ) {
return;

View File

@ -22,6 +22,8 @@
* @author Daniel Kinzler, brightbyte.de
*/
use MediaWiki\MediaWikiServices;
/**
* Special page for the CategoryTree extension, an AJAX based gadget
* to display the category structure of a wiki
@ -197,9 +199,11 @@ class CategoryTreePage extends SpecialPage {
// No prefix suggestion outside of category namespace
return [];
}
$searchEngine = MediaWikiServices::getInstance()->newSearchEngine();
$searchEngine->setLimitOffset( $limit, $offset );
// Autocomplete subpage the same as a normal search, but just for categories
$prefixSearcher = new TitlePrefixSearch;
$result = $prefixSearcher->search( $title->getPrefixedText(), $limit, [ NS_CATEGORY ], $offset );
$searchEngine->setNamespaces( [ NS_CATEGORY ] );
$result = $searchEngine->defaultPrefixSearch( $search );
return array_map( function ( Title $t ) {
// Remove namespace in search suggestion
@ -207,6 +211,9 @@ class CategoryTreePage extends SpecialPage {
}, $result );
}
/**
* @inheritDoc
*/
protected function getGroupName() {
return 'pages';
}

View File

@ -1,118 +0,0 @@
/**
* Stylesheet for the CategoryTree extension.
*
* © 2006 Daniel Kinzler
*
* 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
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
* @ingroup Extensions
* @author Daniel Kinzler, brightbyte.de
*/
.client-js #mw-subcategories ul {
list-style: none none;
margin-left: 0.25em;
}
#mw-panel div.portal div.body .CategoryTreeTag {
margin: 0;
font-size: 0.75em;
line-height: 1.125em;
}
#mw-panel div.portal div.body .CategoryTreeItem {
padding: 0.25em 0;
}
.CategoryTreeChildren {
margin-left: 1.25em;
}
.CategoryTreeBullet,
.CategoryTreeEmptyBullet {
cursor: default;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.CategoryTreeToggleHandlerAttached {
cursor: pointer;
}
.CategoryTreeEmptyBullet {
color: #c0c0c0;
}
.CategoryTreeBullet a,
.CategoryTreeBullet a:link,
.CategoryTreeBullet a:active,
.CategoryTreeBullet a:visited {
text-decoration: none;
color: inherit;
speak: none;
}
/* Hide toggle buttons for clients without JavaScript */
.client-nojs .CategoryTreeBullet,
.client-nojs .CategoryTreeEmptyBullet {
display: none;
}
.CategoryTreeToggle {
color: #0645ad;
}
.CategoryTreeLabelPage {
font-style: italic;
}
.CategoryTreeParents {
margin-top: 1.5ex;
font-style: italic;
}
.CategoryTreeResult {
margin-top: 1.5ex;
}
.CategoryTreeTag {
margin-top: 0.5ex;
margin-bottom: 0.5ex;
}
.CategoryTreeNotice {
font-style: italic;
}
.CategoryTreeCategoryBarItem {
/* yes, specify display twice! quirk for FF2 */
display: -moz-inline-box;
display: inline-block;
/* why is the -0.5ex needed? */
margin: -0.5ex 0 0 1ex;
padding: 0;
vertical-align: top;
/* IE6-7 Hack for display: inline-block */
zoom: 1;
*display: inline; /* stylelint-disable-line declaration-block-no-duplicate-properties */
}
.CategoryTreeSection {
direction: ltr;
}

View File

@ -1,208 +0,0 @@
/**
* JavaScript for the CategoryTree extension.
*
* © 2006 Daniel Kinzler
*
* 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
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
* @ingroup Extensions
* @author Daniel Kinzler, brightbyte.de
*/
( function ( $, mw ) {
var loadChildren;
/**
* Expands a given node (loading it's children if not loaded)
*
* @param {jQuery} $link
*/
function expandNode( $link ) {
// Show the children node
var $children = $link.parents( '.CategoryTreeItem' )
.siblings( '.CategoryTreeChildren' );
$children.show();
$link
.text( mw.msg( 'categorytree-collapse-bullet' ) )
.attr( 'title', mw.msg( 'categorytree-collapse' ) )
.data( 'ct-state', 'expanded' );
if ( !$link.data( 'ct-loaded' ) ) {
loadChildren( $link, $children );
}
}
/**
* Collapses a node
*
* @param {jQuery} $link
*/
function collapseNode( $link ) {
// Hide the children node
$link.parents( '.CategoryTreeItem' )
.siblings( '.CategoryTreeChildren' ).hide();
$link
.text( mw.msg( 'categorytree-expand-bullet' ) )
.attr( 'title', mw.msg( 'categorytree-expand' ) )
.data( 'ct-state', 'collapsed' );
}
/**
* Handles clicks on the expand buttons, and calls the appropriate function
*
* @context {Element} CategoryTreeToggle
*/
function handleNode() {
var $link = $( this );
if ( $link.data( 'ct-state' ) === 'collapsed' ) {
expandNode( $link );
} else {
collapseNode( $link );
}
}
/**
* Attach click handler to buttons
*
* @param {jQuery} $content
*/
function attachHandler( $content ) {
$content.find( '.CategoryTreeToggle' )
.click( handleNode )
.attr( 'title', function () {
return mw.msg(
$( this ).data( 'ct-state' ) === 'collapsed' ?
'categorytree-expand' :
'categorytree-collapse'
);
} )
.addClass( 'CategoryTreeToggleHandlerAttached' );
}
/**
* Loads children for a node via an HTTP call
*
* @param {jQuery} $link
* @param {jQuery} $children
*/
loadChildren = function ( $link, $children ) {
var $linkParentCTTag, ctTitle, ctMode, ctOptions;
/**
* Error callback
*/
function error() {
var $retryLink;
$retryLink = $( '<a>' )
.text( mw.msg( 'categorytree-retry' ) )
.attr( {
role: 'button',
tabindex: 0
} )
.on( 'click keypress', function ( e ) {
if (
e.type === 'click' ||
e.type === 'keypress' && e.which === 13
) {
loadChildren( $link, $children );
}
} );
$children
.text( mw.msg( 'categorytree-error' ) + ' ' )
.append( $retryLink );
}
$link.data( 'ct-loaded', true );
$children.empty().append(
$( '<i class="CategoryTreeNotice"></i>' )
.text( mw.msg( 'categorytree-loading' ) )
);
$linkParentCTTag = $link.parents( '.CategoryTreeTag' );
// Element may not have a .CategoryTreeTag parent, fallback to defauls
// Probably a CategoryPage (@todo: based on what?)
ctTitle = $link.attr( 'data-ct-title' );
ctMode = $linkParentCTTag.data( 'ct-mode' );
ctMode = typeof ctMode === 'number' ? ctMode : undefined;
ctOptions = $linkParentCTTag.attr( 'data-ct-options' );
if ( !ctOptions ) {
ctOptions = mw.config.get( 'wgCategoryTreePageCategoryOptions' );
}
// Mode and options have defaults or fallbacks, title does not.
// Don't make a request if there is no title.
if ( !ctTitle ) {
error();
return;
}
new mw.Api().get( {
action: 'categorytree',
category: ctTitle,
options: ctOptions,
uselang: mw.config.get( 'wgUserLanguage' ),
formatversion: 2
} ).done( function ( data ) {
var $data;
data = data.categorytree.html;
if ( data === '' ) {
switch ( ctMode ) {
// CategoryTreeMode::CATEGORIES = 0
case 0:
data = mw.msg( 'categorytree-no-subcategories' );
break;
// CategoryTreeMode::PAGES = 10
case 10:
data = mw.msg( 'categorytree-no-pages' );
break;
// CategoryTreeMode::PARENTS = 100
case 100:
data = mw.msg( 'categorytree-no-parent-categories' );
break;
// CategoryTreeMode::ALL = 20
default:
data = mw.msg( 'categorytree-nothing-found' );
}
$data = $( '<i class="CategoryTreeNotice"></i>' ).text( data );
} else {
$data = $( $.parseHTML( data ) );
attachHandler( $data );
}
$children.empty().append( $data );
} )
.fail( error );
};
// Register click events
mw.hook( 'wikipage.content' ).add( attachHandler );
$( function () {
// Attach click handler for sidebar
attachHandler( $( '#p-categorytree-portlet' ) );
} );
}( jQuery, mediaWiki ) );

View File

@ -0,0 +1,101 @@
/**
* Stylesheet for the CategoryTree extension.
*
* © 2006 Daniel Kinzler
*
* 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
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
* @ingroup Extensions
* @author Daniel Kinzler, brightbyte.de
*/
.client-js #mw-subcategories ul {
list-style: none none;
margin-left: 0.25em;
}
#mw-panel div.portal div.body .CategoryTreeTag {
margin: 0;
font-size: 0.75em;
line-height: 1.125em;
}
#mw-panel div.portal div.body .CategoryTreeItem {
padding: 0.25em 0;
}
.CategoryTreeChildren {
margin-left: 1.25em;
}
.CategoryTreeBullet,
.CategoryTreeEmptyBullet {
cursor: default;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.CategoryTreeEmptyBullet {
color: #c0c0c0;
}
.CategoryTreeBullet a,
.CategoryTreeBullet a:link,
.CategoryTreeBullet a:active,
.CategoryTreeBullet a:visited {
text-decoration: none;
color: inherit;
speak: none;
}
/* Hide toggle buttons for clients without JavaScript */
.client-nojs .CategoryTreeBullet,
.client-nojs .CategoryTreeEmptyBullet {
display: none;
}
.CategoryTreeToggle {
color: #0645ad;
}
.CategoryTreeLabelPage {
font-style: italic;
}
.CategoryTreeParents {
margin-top: 1.5ex;
font-style: italic;
}
.CategoryTreeResult {
margin-top: 1.5ex;
}
.CategoryTreeTag {
margin-top: 0.5ex;
margin-bottom: 0.5ex;
}
.CategoryTreeNotice {
font-style: italic;
}
.CategoryTreeSection {
direction: ltr;
}

View File

@ -0,0 +1,3 @@
.CategoryTreeToggleHandlerAttached {
cursor: pointer;
}

View File

@ -0,0 +1,210 @@
/**
* JavaScript for the CategoryTree extension.
*
* © 2006 Daniel Kinzler
*
* 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
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
* @ingroup Extensions
* @author Daniel Kinzler, brightbyte.de
*/
( function () {
var loadChildren,
data = require( './data.json' );
/**
* Expands a given node (loading it's children if not loaded)
*
* @param {jQuery} $link
*/
function expandNode( $link ) {
// Show the children node
var $children = $link.parents( '.CategoryTreeItem' )
.siblings( '.CategoryTreeChildren' );
$children.show();
$link
.text( mw.msg( 'categorytree-collapse-bullet' ) )
.attr( 'title', mw.msg( 'categorytree-collapse' ) )
.data( 'ct-state', 'expanded' );
if ( !$link.data( 'ct-loaded' ) ) {
loadChildren( $link, $children );
}
}
/**
* Collapses a node
*
* @param {jQuery} $link
*/
function collapseNode( $link ) {
// Hide the children node
$link.parents( '.CategoryTreeItem' )
.siblings( '.CategoryTreeChildren' ).hide();
$link
.text( mw.msg( 'categorytree-expand-bullet' ) )
.attr( 'title', mw.msg( 'categorytree-expand' ) )
.data( 'ct-state', 'collapsed' );
}
/**
* Handles clicks on the expand buttons, and calls the appropriate function
*
* @context {Element} CategoryTreeToggle
*/
function handleNode() {
var $link = $( this );
if ( $link.data( 'ct-state' ) === 'collapsed' ) {
expandNode( $link );
} else {
collapseNode( $link );
}
}
/**
* Attach click handler to buttons
*
* @param {jQuery} $content
*/
function attachHandler( $content ) {
$content.find( '.CategoryTreeToggle' )
.click( handleNode )
.attr( 'title', function () {
return mw.msg(
$( this ).data( 'ct-state' ) === 'collapsed' ?
'categorytree-expand' :
'categorytree-collapse'
);
} )
.addClass( 'CategoryTreeToggleHandlerAttached' );
}
/**
* Loads children for a node via an HTTP call
*
* @param {jQuery} $link
* @param {jQuery} $children
*/
loadChildren = function ( $link, $children ) {
var $linkParentCTTag, ctTitle, ctMode, ctOptions;
/**
* Error callback
*/
function error() {
var $retryLink;
$retryLink = $( '<a>' )
.text( mw.msg( 'categorytree-retry' ) )
.attr( {
role: 'button',
tabindex: 0
} )
.on( 'click keypress', function ( e ) {
if (
e.type === 'click' ||
e.type === 'keypress' && e.which === 13
) {
loadChildren( $link, $children );
}
} );
$children
.text( mw.msg( 'categorytree-error' ) + ' ' )
.append( $retryLink );
}
$link.data( 'ct-loaded', true );
$children.empty().append(
$( '<i class="CategoryTreeNotice"></i>' )
.text( mw.msg( 'categorytree-loading' ) )
);
$linkParentCTTag = $link.parents( '.CategoryTreeTag' );
// Element may not have a .CategoryTreeTag parent, fallback to defauls
// Probably a CategoryPage (@todo: based on what?)
ctTitle = $link.attr( 'data-ct-title' );
ctMode = $linkParentCTTag.data( 'ct-mode' );
ctMode = typeof ctMode === 'number' ? ctMode : undefined;
ctOptions = $linkParentCTTag.attr( 'data-ct-options' ) || data.defaultCtOptions;
// Mode and options have defaults or fallbacks, title does not.
// Don't make a request if there is no title.
if ( !ctTitle ) {
error();
return;
}
new mw.Api().get( {
action: 'categorytree',
category: ctTitle,
options: ctOptions,
uselang: mw.config.get( 'wgUserLanguage' ),
formatversion: 2
} ).done( function ( data ) {
var $data;
data = data.categorytree.html;
if ( data === '' ) {
switch ( ctMode ) {
// CategoryTreeMode::CATEGORIES = 0
case 0:
data = mw.msg( 'categorytree-no-subcategories' );
break;
// CategoryTreeMode::PAGES = 10
case 10:
data = mw.msg( 'categorytree-no-pages' );
break;
// CategoryTreeMode::PARENTS = 100
case 100:
data = mw.msg( 'categorytree-no-parent-categories' );
break;
// CategoryTreeMode::ALL = 20
default:
data = mw.msg( 'categorytree-nothing-found' );
}
$data = $( '<i class="CategoryTreeNotice"></i>' ).text( data );
} else {
$data = $( $.parseHTML( data ) );
attachHandler( $data );
}
$children.empty().append( $data );
} )
.fail( error );
};
// Register click events
mw.hook( 'wikipage.content' ).add( attachHandler );
// Attach click handler for categories.
// This is needed when wgCategoryTreeHijackPageCategories is enabled.
mw.hook( 'wikipage.categories' ).add( attachHandler );
$( function () {
// Attach click handler for sidebar
attachHandler( $( '#p-categorytree-portlet' ) );
} );
}() );

View File

@ -1,11 +0,0 @@
<?php
$cfg = require __DIR__ . '/../../vendor/mediawiki/mediawiki-phan-config/src/config.php';
// SpecialPage->categoryTreeCategories
$cfg['suppress_issue_types'][] = 'PhanUndeclaredProperty';
// ApiCategoryTree::dieUsage
$cfg['suppress_issue_types'][] = 'PhanUndeclaredMethod';
return $cfg;

View File

@ -0,0 +1,7 @@
<?php
$cfg = require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php';
// Due to creation of Parser::$extCite property
$cfg['suppress_issue_types'][] = 'PhanUndeclaredProperty';
return $cfg;

View File

@ -17,10 +17,15 @@ module.exports = function ( grunt ) {
grunt.initConfig( {
eslint: {
options: {
reportUnusedDisableDirectives: true,
cache: true
},
all: [
'**/*.js',
'{.jsduck,build}/**/*.js',
'modules/**/*.js',
'tests/**/*.js',
'!node_modules/**',
'!vendor/**'
]

View File

@ -1,10 +1,10 @@
{
"require-dev": {
"jakub-onderka/php-parallel-lint": "1.0.0",
"mediawiki/mediawiki-codesniffer": "22.0.0",
"mediawiki/mediawiki-codesniffer": "24.0.0",
"jakub-onderka/php-console-highlighter": "0.3.2",
"mediawiki/minus-x": "0.3.1",
"mediawiki/mediawiki-phan-config": "0.3.0"
"mediawiki/mediawiki-phan-config": "0.5.0"
},
"scripts": {
"test": [

View File

@ -77,6 +77,22 @@
"cite_references_link_many_accessibility_label"
]
},
"ext.cite.ux-enhancements": {
"scripts": [
"ext.cite.a11y.js",
"ext.cite.highlighting.js"
],
"styles": [
"ext.cite.a11y.css",
"ext.cite.highlighting.css"
],
"messages": [
"cite_reference_link_prefix",
"cite_references_link_accessibility_label",
"cite_references_link_many_accessibility_label",
"cite_references_link_accessibility_back_label"
]
},
"ext.cite.style": {
"class": "CiteCSSFileModule",
"styles": "ext.cite.style.css",

View File

@ -6,7 +6,7 @@
"Fwolff"
]
},
"cite-desc": "Maak <code><nowiki><ref[ name=id]></nowiki></code> en <code><nowiki><references/></nowiki></code> etikette beskikbaar vir sitasie.",
"cite-desc": "Maak <code>&lt;ref[ name=id]&gt;</code> en <code>&lt;references/&gt;</code> etikette beskikbaar vir sitasie.",
"cite_error": "Verwysingfout: $1",
"cite_error_ref_numeric_key": "Ongeldige etiket <code>&lt;ref&gt;</code>;\ndie naam kan nie 'n eenvoudige heelgetal wees nie.\nGebruik 'n beskrywende titel",
"cite_error_ref_no_key": "Ongeldige etiket <code>&lt;ref&gt;</code>;\n\"refs\" sonder inhoud moet 'n naam hê",

View File

@ -6,7 +6,7 @@
"Tokoabibi"
]
},
"cite-desc": "midama <code><nowiki><ref[ name=id]></nowiki></code> atu <code><nowiki><references/></nowiki></code> aazihen-paya, kapah pabacuen miazih tu tatengaay nasulitan",
"cite-desc": "midama <code>&lt;ref[ name=id]&gt;</code> atu <code>&lt;references/&gt;</code> aazihen-paya, kapah pabacuen miazih tu tatengaay nasulitan",
"cite_error": "nicaliwan mungangaw: $1",
"cite_error_ref_numeric_key": "lacus <code>&lt;ref&gt;</code> aazihen-paya, kya susin amama pisaungay asip-bacu, pisaungay taneng misapuelac lacul a satangahan",
"cite_error_ref_no_key": "<code>&lt;ref&gt;</code> aazihen-paya angangan a kese mungangaw saca kalungangan caay kalucek.",

View File

@ -4,7 +4,7 @@
"Juanpabl"
]
},
"cite-desc": "Adibe as etiquetas <code><nowiki><ref[ name=id]></nowiki></code> y <code><nowiki><references/></nowiki></code> ta fer citas",
"cite-desc": "Adibe as etiquetas <code>&lt;ref[ name=id]&gt;</code> y <code>&lt;references/&gt;</code> ta fer citas",
"cite_error": "Error en a cita: $1",
"cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; o nombre d'a etiqueta no puede estar un numero entero, faiga servir un títol descriptivo",
"cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; as referencias sin de conteniu han de tener un nombre",

View File

@ -14,7 +14,7 @@
"apihelp-query+references-summary": "يرجع تمثيل بيانات للمراجع المصاحبة للصفحات المعطاة.",
"apihelp-query+references-example-1": "المراجع المرتبطة ب<kbd>Albert Einstein</kbd>.",
"apierror-citestoragedisabled": "تخزين مراجع امتداد Cite غير مفعل.",
"cite-desc": "يضيف وسوم <code><nowiki><ref[ name=id]></nowiki></code> و <code><nowiki><references/></nowiki></code> ، للاستشهادات",
"cite-desc": "يضيف وسمي <code>&lt;ref[ name=id]&gt;</code> و <code>&lt;references/&gt;</code>، للاستشهادات",
"cite_error": "خطأ استشهاد: $1",
"cite_error_ref_invalid_dir": "وسم <code>&lt;ref&gt;</code> غير صالح، سمة dir \"$1\" غير معروفة; يجب أن تكون ltr أو rtl",
"cite_error_ref_numeric_key": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nالاسم لا يمكن أن يكون عددا صحيحا بسيطا. استخدم عنوانا وصفيا",
@ -24,7 +24,7 @@
"cite_error_references_duplicate_key": "وسم <code>&lt;ref&gt;</code> غير صالح؛ الاسم \"$1\" معرف أكثر من مرة بمحتويات مختلفة.",
"cite_error_references_invalid_parameters": "محدد غير صحيح في وسم <code>&lt;references&gt;</code>",
"cite_error_references_no_backlink_label": "نفدت علامات الوصلات الراجعة المخصصة.\nعرف المزيد في رسالة <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
"cite_error_no_link_label_group": "تم الإنتهاء من تسمية الارتباطات المخصصة لمجموعة \"$1\".\n\nللحصول على تعريف أكثر أنظر هذه <nowiki>[[MediaWiki:$2]]</nowiki> الرسالة.",
"cite_error_no_link_label_group": "تم الانتهاء من تسمية الارتباطات المخصصة لمجموعة \"$1\".\n\nللحصول على تعريف أكثر انظر هذه <nowiki>[[MediaWiki:$2]]</nowiki> الرسالة.",
"cite_error_references_no_text": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nلا نص تم توفيره للمراجع المسماة <code>$1</code>",
"cite_error_included_ref": "إغلاق <code>&lt;/ref&gt;</code> مفقود لوسم <code>&lt;ref&gt;</code>",
"cite_error_group_refs_without_references": "وسوم <code>&lt;ref&gt;</code> موجودة لمجموعة اسمها \"$1\"، ولكن لم يتم العثور على وسم <code>&lt;references group=\"$1\"/&gt;</code> أو هناك وسم <code>&lt;/ref&gt;</code> ناقص",
@ -38,6 +38,7 @@
"cite_references_link_many_format_backlink_labels": "أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي أأ أب أت أث أج أح أخ أد أذ أر أز أس أش أص أض أط أظ أع أغ أف أق أك أل أم أن أه أو أي بأ بب بت بث بج بح بخ بد بذ بر بز بس بش بص بض بط بظ بع بغ بف بق بك بل بم بن به بو بي تأ تب تت تث تج تح تخ تد تذ تر تز تس تش تص تض تط تظ تع تغ تف تق تك تل تم تن ته تو تي ثأ ثب ثت ثث ثج ثح ثخ ثد ثذ ثر ثز ثس ثش ثص ثض ثط ثظ ثع ثغ ثف ثق ثك ثل ثم ثن ثه ثو ثي جأ جب جت جث جج جح جخ جد جذ جر جز جس جش جص جض جط جظ جع جغ جف جق جك جل جم جن جه جو جي حأ حب حت حث حج حح حخ حد حذ حر حز حس حش حص حض حط حظ حع حغ حف حق حك حل حم حن حه حو حي خأ خب خت خث خج خح خخ خد خذ خر خز خس خش خص خض خط خظ خع خغ خف خق خك خل خم خن خه خو خي دأ دب دت دث دج دح دخ دد دذ در دز دس دش دص دض دط دظ دع دغ دف دق دك دل دم دن ده دو دي ذأ ذب ذت ذث ذج ذح ذخ ذد ذذ ذر ذز ذس ذش ذص ذض ذط ذظ ذع ذغ ذف ذق ذك ذل ذم ذن ذه ذو ذي رأ رب رت رث رج رح رخ رد رذ رر رز رس رش رص رض رط رظ رع رغ رف رق رك رل رم رن ره رو ري زأ زب زت زث زج زح زخ زد زذ زر زز زس زش زص زض زط زظ زع زغ زف زق زك زل زم زن زه زو زي سأ سب ست سث سج سح سخ سد سذ سر سز سس سش سص سض سط سظ سع سغ سف سق سك سل سم سن سه سو سي شأ شب شت شث شج شح شخ شد شذ شر شز شس شش شص شض شط شظ شع شغ شف شق شك شل شم شن شه شو شي صأ صب صت صث صج صح صخ صد صذ صر صز صس صش صص صض صط صظ صع صغ صف صق صك صل صم صن صه صو صي ضأ ضب ضت ضث ضج ضح ضخ ضد ضذ ضر ضز ضس ضش ضص ضض ضط ضظ ضع ضغ ضف ضق ضك ضل ضم ضن ضه ضو ضي طأ طب طت طث طج طح طخ طد طذ طر طز طس طش طص طض طط طظ طع طغ طف طق طك طل طم طن طه طو طي ظأ ظب ظت ظث ظج ظح ظخ ظد ظذ ظر ظز ظس ظش ظص ظض ظط ظظ ظع ظغ ظف ظق ظك ظل ظم ظن ظه ظو ظي عأ عب عت عث عج عح عخ عد عذ عر عز عس عش عص عض عط عظ عع عغ عف عق عك عل عم عن عه عو عي غأ غب غت غث غج غح غخ غد غذ غر غز غس غش غص غض غط غظ غع غغ غف غق غك غل غم غن غه غو غي فأ فب فت فث فج فح فخ فد فذ فر فز فس فش فص فض فط فظ فع فغ فف فق فك فل فم فن فه فو في قأ قب قت قث قج قح قخ قد قذ قر قز قس قش قص قض قط قظ قع قغ قف قق قك قل قم قن قه قو قي كأ كب كت كث كج كح كخ كد كذ كر كز كس كش كص كض كط كظ كع كغ كف كق كك كل كم كن كه كو كي لأ لب لت لث لج لح لخ لد لذ لر لز لس لش لص لض لط لظ لع لغ لف لق لك لل لم لن له لو لي مأ مب مت مث مج مح مخ مد مذ مر مز مس مش مص مض مط مظ مع مغ مف مق مك مل مم من مه مو مي نأ نب نت نث نج نح نخ ند نذ نر نز نس نش نص نض نط نظ نع نغ نف نق نك نل نم نن نه نو ني هأ هب هت هث هج هح هخ هد هذ هر هز هس هش هص هض هط هظ هع هغ هف هق هك هل هم هن هه هو هي وأ وب وت وث وج وح وخ ود وذ ور وز وس وش وص وض وط وظ وع وغ وف وق وك ول وم ون وه وو وي يأ يب يت يث يج يح يخ يد يذ ير يز يس يش يص يض يط يظ يع يغ يف يق يك يل يم ين يه يو يي",
"cite_references_link_accessibility_label": "تعدى المحتوى الحالي إلى أعلى الصفحة",
"cite_references_link_many_accessibility_label": "تعدى إلى الأعلى ل:",
"cite_references_link_accessibility_back_label": "اقفز للخلف",
"cite_section_preview_references": "معاينة المراجع",
"cite_warning": "تحذير استشهاد: $1",
"cite_warning_sectionpreview_no_text": "لا يمكن معاينة الوسم <code>&lt;ref&gt;</code> الذي يحمل اسم <code>$1</code> لأنه معرف خارج القسم الحالي أو غير معرف على الإطلاق."

View File

@ -6,7 +6,7 @@
"Ramsis II"
]
},
"cite-desc": "بيضيف التاجز <code><nowiki><ref[ name=id]></nowiki></code> و <code><nowiki><references/></nowiki></code> ، للاستشهاد",
"cite-desc": "بيضيف التاجز <code>&lt;ref[ name=id]&gt;</code> و <code>&lt;references/&gt;</code> ، للاستشهاد",
"cite_error": "المرجع غلط: $1",
"cite_error_ref_numeric_key": "التاج <code>&lt;ref&gt;</code> مش صحيح؛\nالاسم ماينفعش يكون عدد صحيح بسيط. استخدم عنوان بيوصف",
"cite_error_ref_no_key": "التاج <code>&lt;ref&gt;</code> مش صحيح؛\nالمراجع اللى من غير محتوى لازميكون ليها اسم",

View File

@ -7,7 +7,7 @@
"Dibya Dutta"
]
},
"cite-desc": "উদ্ধৃতিৰ বাবে <code><nowiki><ref[ name=id]></nowiki></code> আৰু <code><nowiki><references/></nowiki></code> টেগ্‌সমূহ যোগ কৰে",
"cite-desc": "উদ্ধৃতিৰ বাবে <code>&lt;ref[ name=id]&gt;</code> আৰু <code>&lt;references/&gt;</code> টেগ্‌সমূহ যোগ কৰে",
"cite_error": "উদ্ধৃতি ত্ৰুটি: $1",
"cite_error_ref_numeric_key": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\nনাম কোনো সৰল পূৰ্ণসংখ্যা হ'ব নোৱাৰে। এটা বৰ্ণনামূলক শিৰোনাম ব্যৱহাৰ কৰক।",
"cite_error_ref_no_key": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\nসমলবিহীন refসমূহৰ অৱশ্যেই এটা নাম থাকিব লাগিব।",

View File

@ -9,7 +9,7 @@
"apihelp-query+references-summary": "Devolver una representación de datos de les referencies asociaes coles páxines indicaes.",
"apihelp-query+references-example-1": "Referencies asociaes con <kbd>Albert Einstein</kbd>.",
"apierror-citestoragedisabled": "L'almacenamientu de referencies de la estensión Cite nun ta activáu.",
"cite-desc": "Añade les etiquetes <code><nowiki><ref[ name=id]></nowiki></code> y <code><nowiki><references/></nowiki></code> pa les cites",
"cite-desc": "Añade les etiquetes <code>&lt;ref[ name=id]&gt;</code> y <code>&lt;references/&gt;</code> pa les cites",
"cite_error": "Error de cita: $1",
"cite_error_ref_invalid_dir": "La etiqueta <code>&lt;ref&gt;</code> nun ye válida; desconozse l'atributu de direición «$1». Tien De ser «ltr» o «rtl»",
"cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> non válida; el nome nun pue ser un enteru simple, usa un títulu descriptivu",

View File

@ -0,0 +1,8 @@
{
"@metadata": {
"authors": [
"Axel xadolik"
]
},
"cite_error": "Ozwaraja : $1"
}

View File

@ -4,6 +4,6 @@
"Amir a57"
]
},
"cite-desc": "گؤتورمه‌لر اوچون، <code><nowiki><ref[ name=id]></nowiki></code> ve <code><nowiki><references/></nowiki></code> ائلئمئنت‌لری‌نین علاوه‌لر",
"cite-desc": "گؤتورمه‌لر اوچون، <code>&lt;ref[ name=id]&gt;</code> ve <code>&lt;references/&gt;</code> ائلئمئنت‌لری‌نین علاوه‌لر",
"cite_error": "قایناق خطاسی $1"
}

View File

@ -10,7 +10,7 @@
},
"apihelp-query+references-description": "Был бит менән бәйле һылтанмаларҙың мәғлүмәттәрен сағылдыра.",
"apihelp-query+references-example-1": "<kbd>Albert Einstein</kbd> менән бәйле һылтанмалар.",
"cite-desc": "Төшөрмәләр өсөн <code><nowiki><ref[ name=id]></nowiki></code> һәм <code><nowiki><references/></nowiki></code> билдәләрен өҫтәй",
"cite-desc": "Төшөрмәләр өсөн <code>&lt;ref[ name=id]&gt;</code> һәм <code>&lt;references/&gt;</code> билдәләрен өҫтәй",
"cite_error": "Өҙөмтә хатаһы: $1",
"cite_error_ref_numeric_key": "<code>&lt;ref&gt;</code> билдәһе дөрөҫ түгел;\nисем бөтөн һан була алмай. Тасуирларлыҡ исем ҡулланығыҙ.",
"cite_error_ref_no_key": "Асыусы тег <code>&lt;ref&gt;</code> билдәһе- дөрөҫ түгел йәки мәғәнәһеҙ исем йөрөтә.",

View File

@ -4,7 +4,7 @@
"Mostafadaneshvar"
]
},
"cite-desc": "اضفافه کنت<code><nowiki><ref[ name=id]></nowiki></code> و <code><nowiki><references/></nowiki></code> تگ, په ارجاع دهگ",
"cite-desc": "اضفافه کنت<code>&lt;ref[ name=id]&gt;</code> و <code>&lt;references/&gt;</code> تگ, په ارجاع دهگ",
"cite_error": "حطا ارجاع: $1",
"cite_error_ref_numeric_key": "نامعتبر <code>&lt;ref&gt;</code>تگ;\nنام یک سادگین هوری نه نه بیت. یک توضیحی عنوانی استفاده کنیت",
"cite_error_ref_no_key": "نامعتبر<code>&lt;ref&gt;</code>تگ;\nمراجع بی محتوا بایدن نامی داشته بنت",

View File

@ -4,7 +4,7 @@
"Geopoet"
]
},
"cite-desc": "Minadugang nin <code><nowiki><ref[ name=id]></nowiki></code> asin <code><nowiki><references/></nowiki></code> na mga tatak, para sa mga toltolan",
"cite-desc": "Minadugang nin <code>&lt;ref[ name=id]&gt;</code> asin <code>&lt;references/&gt;</code> na mga tatak, para sa mga toltolan",
"cite_error": "Sambiton an kasalaan: $1",
"cite_error_ref_numeric_key": "Imbalido an <code>&lt;ref&gt;</code> tatak; an pangaran dae puwede na magin sarong simplehon na bilog na numero. Maggamit nin sarong deskriptibong titulo",
"cite_error_ref_no_key": "Imbalido an <code>&lt;ref&gt;</code> tatak; an mga toltolan na mayong kalamnan dapat magkaigwa nin pangaran",

View File

@ -11,7 +11,7 @@
"apihelp-query+references-summary": "Вяртае прадстаўленьне зьвестак крыніц, злучаных з пададзенымі старонкамі.",
"apihelp-query+references-example-1": "Крыніцы, зьвязаныя з старонкай <kbd>Albert Einstein</kbd>.",
"apierror-citestoragedisabled": "Сховішча зносак пашырэньня цытаваньня ня ўключанае.",
"cite-desc": "Дадае тэгі <code><nowiki><ref[ name=id]></nowiki></code> і <code><nowiki><references/></nowiki></code> для зносак",
"cite-desc": "Дадае тэгі <code>&lt;ref[ name=id]&gt;</code> і <code>&lt;references/&gt;</code> для зносак",
"cite_error": "Памылка цытаваньня: $1",
"cite_error_ref_invalid_dir": "Няслушны тэг <code>&lt;ref&gt;</code>; атрыбут dir «$1» невядомы. Мусіць быць ltr ці rtl",
"cite_error_ref_numeric_key": "Няслушны тэг <code>&lt;ref&gt;</code>;\nназва ня можа быць проста лікам, ужывайце апісальную назву",
@ -34,6 +34,7 @@
"cite-tracking-category-cite-error-desc": "Старонкі ў гэтай катэгорыі маюць памылкі ў спасылках на крыніцы.",
"cite_references_link_accessibility_label": "Угару",
"cite_references_link_many_accessibility_label": "Угару да:",
"cite_references_link_accessibility_back_label": "Вярнуцца назад",
"cite_section_preview_references": "Папярэдні прагляд спасылак на крыніцы",
"cite_warning": "Папярэджаньне ў крыніцах: $1",
"cite_warning_sectionpreview_no_text": "Тэг <code>&lt;ref&gt;</code> з назвай <code>$1</code> ня можа быць паказаны ў папярэднім праглядзе, бо ён вызначаны па-за межамі гэтага разьдзелу або ня вызначаны наогул."

View File

@ -15,5 +15,5 @@
"cite-tracking-category-cite-error-desc": "Старонка мае памылкі ў выкарыстанні тэгаў зносак",
"cite_section_preview_references": "Перадпрагляд зносак",
"cite_warning": "Папярэджанне пра цытаванне: $1",
"cite_warning_sectionpreview_no_text": "Тэг <code>&lt;ref&gt;</code> з імем <code>$1</code> не може быць перадпрагледжаны, бо ён вызначаны за межамі рэдагуемага раздзела або не вызначаны ўвогуле."
"cite_warning_sectionpreview_no_text": "Тэг <code>&lt;ref&gt;</code> з імем <code>$1</code> не можа быць перадпрагледжаны, бо ён вызначаны за межамі рэдагуемага раздзела або не вызначаны ўвогуле."
}

View File

@ -5,10 +5,11 @@
"DCLXVI",
"Spiritia",
"Termininja",
"StanProg"
"StanProg",
"Ted Masters"
]
},
"cite-desc": "Добавя етикетите <code><nowiki><ref[ name=id]></nowiki></code> и <code><nowiki><references/></nowiki></code>, подходящи за цитиране",
"cite-desc": "Добавя етикетите <code>&lt;ref[ name=id]&gt;</code> и <code>&lt;references/&gt;</code>, подходящи за цитиране",
"cite_error": "Грешка при цитиране: $1",
"cite_error_ref_numeric_key": "Грешка в етикет <code>&lt;ref&gt;</code>;\nимето не може да бъде число. Използвайте описателно име",
"cite_error_ref_no_key": "Отварящият таг <code>&lt;ref&gt;</code> е неправилен или съдържа некоректно име.",
@ -20,5 +21,6 @@
"cite_error_included_ref": "Липсва затварящ етикет <code>&lt;/ref&gt;</code> след отварящия етикет <code>&lt;ref&gt;</code>",
"cite_error_group_refs_without_references": "Тагове <code>&lt;ref&gt;</code> съществуват за група „$1“, но липсва таг <code>&lt;references group=\"$1\"/&gt;</code> или затварящ таг <code>&lt;/ref&gt;</code>",
"cite-tracking-category-cite-error": "Страници с грешка в източник",
"cite-tracking-category-cite-error-desc": "Страниците в тази категория имат грешки при използването на таговете за източници.",
"cite_section_preview_references": "Преглед на бележките"
}

View File

@ -9,8 +9,9 @@
"আফতাবুজ্জামান"
]
},
"cite-desc": "উদ্ধৃতির জন্য, <code><nowiki><ref[ name=id]></nowiki></code> এবং <code><nowiki><references/></nowiki></code> ট্যাগসমূহ যোগ করুন",
"cite-desc": "উদ্ধৃতির জন্য, <code>&lt;ref[ name=id]&gt;</code> এবং <code>&lt;references/&gt;</code> ট্যাগসমূহ যোগ করুন",
"cite_error": "উদ্ধৃতি ত্রুটি: $1",
"cite_error_ref_invalid_dir": "<code>&lt;ref&gt;</code> ট্যাগ অবৈধ; dir বৈশিষ্ট্য \"$1\" অজানা। অবশই ltr বা rtl হতে হবে",
"cite_error_ref_numeric_key": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; নাম কোন সরল পূর্ণসংখ্যা হতে পারবে না। একটি বিবরণমূলক শিরোনাম ব্যবহার করুন",
"cite_error_ref_no_key": "শুরুর <code>&lt;ref&gt;</code> ট্যাগ সঠিক নয় বা ভুল নামে রয়েছে",
"cite_error_ref_too_many_keys": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; অবৈধ নাম (যেমন- সংখ্যাতিরিক্ত)",

View File

@ -1,8 +1,22 @@
{
"@metadata": {
"authors": [
"Mogoeilor"
"Mogoeilor",
"Kikumoron"
]
},
"cite_error": "خطا جاگه:$1"
"cite_error": "خٱتا جاگٱ:$1",
"cite_error_ref_no_key": "سردیس گوشنیٛداْ <code><ref></code> بی بارتاْ یا نوم گٱنی داراْ.",
"cite_error_ref_too_many_keys": "سردیس <code>&lt;ref&gt;</code> نادیار؛ نومٱل گٱن، چی هونو کاْ غٱلٱڤاْ گٱپن",
"cite_error_ref_no_input": "سردیس <code><ref></code> نادیار؛ سرچشماْیٱل بی نوم ڤا میٛنوناْ داشداْ بوݩ.",
"cite_error_references_duplicate_key": "سردیس <code>&lt;ref&gt;</code> نادیار؛ نوم «$1» چٱن کرٱت ڤا میٛنوناْ جۊر ڤا جۊر موشقٱس ڤابیڌاْ.",
"cite_error_references_invalid_parameters": "پینیار نادیار میٛن سردیس <code><references></code> سردیس",
"cite_error_references_no_backlink_label": "سردیسٱل دیندا پاٛیڤٱند سٱفارشدی خلاس ڤابیڌن.\nچیات تازاْتر ناْ میٛن پاٛیغوم <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> موشقٱس کونین.",
"cite_error_included_ref": "سردیس خلاس کون <code>&lt;/ref&gt;</code> سی سردیس <code>&lt;ref&gt;</code> بیٛلا ڤابیڌاْ.",
"cite-tracking-category-cite-error": "بٱلگاْیٱلی کاْ سرچشماْسوݩ خٱتا داراْ",
"cite_references_link_accessibility_label": "رٱهڌن ڤارو",
"cite_references_link_many_accessibility_label": "رٱهڌن ڤارو سی:",
"cite_references_link_accessibility_back_label": "رٱهڌن ڤاپوشت",
"cite_section_preview_references": "پیش ساٛیل سرچشماْیٱل",
"cite_warning": "تی ترس دیارگٱ: $1"
}

View File

@ -6,7 +6,7 @@
"VIGNERON"
]
},
"cite-desc": "Ouzhpennañ a ra ar tikedennoù <code><nowiki><ref[ name=id]></nowiki></code> ha <code><nowiki><references/></nowiki></code>, evit an arroudoù.",
"cite-desc": "Ouzhpennañ a ra ar tikedennoù <code>&lt;ref[ name=id]&gt;</code> ha <code>&lt;references/&gt;</code>, evit an arroudoù.",
"cite_error": "Fazi arroud : $1",
"cite_error_ref_numeric_key": "Fazi implijout an dikedenn <code>&lt;ref&gt;</code> ;\nn'hall ket an anv bezañ un niver anterin. Grit gant un titl deskrivus",
"cite_error_ref_no_key": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nret eo d'an daveennoù goullo kaout un anv",

View File

@ -8,7 +8,7 @@
"Srdjan m"
]
},
"cite-desc": "Dodaje oznake <code><nowiki><ref[ name=id]></nowiki></code> i <code><nowiki><references/></nowiki></code> za citiranje",
"cite-desc": "Dodaje oznake <code>&lt;ref[ name=id]&gt;</code> i <code>&lt;references/&gt;</code> za citiranje",
"cite_error": "Greška kod citiranja: $1",
"cite_error_ref_numeric_key": "Nevaljana oznaka <code>&lt;ref&gt;</code>;\nnaslov ne može biti jednostavni cijeli broj. Koristite opisni naslov",
"cite_error_ref_no_key": "Početna oznaka <code>&lt;ref&gt;</code> nije ispravno oblikovana ili sadrži neispravan naziv",

View File

@ -8,12 +8,13 @@
"Pere prlpz"
]
},
"cite-desc": "Afegeix les etiquetes <code><nowiki><ref[ name=id]></nowiki></code> i <code><nowiki><references/></nowiki></code>, per a cites",
"cite-desc": "Afegeix les etiquetes <code>&lt;ref[ name=id]&gt;</code> i <code>&lt;references/&gt;</code>, per a cites",
"cite_error": "Error de citació: $1",
"cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> no vàlida;\nel nom no pot ser un nombre. Empreu una paraula o un títol descriptiu",
"cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> no vàlida;\nles refs sense contingut han de tenir nom",
"cite_error_ref_too_many_keys": "Etiqueta <code>&lt;ref&gt;</code> no vàlida;\nempreu l'estructura <code>&lt;ref name=\"Nom\"&gt;</code>",
"cite_error_ref_no_input": "Etiqueta <code>&lt;ref&gt;</code> no vàlida; \nles referències sense nom han de tenir contingut",
"cite_error_references_duplicate_key": "Etiqueta <code>&lt;ref&gt;</code> no vàlida; el nom «$1» està definit diverses vegades amb contingut diferent.",
"cite_error_references_invalid_parameters": "Etiqueta <code>&lt;references&gt;</code> no vàlida; \nno es permeten paràmetres. \nUseu <code>&lt;references /&gt;</code>",
"cite_error_references_no_backlink_label": "Hi ha massa etiquetes personalitzades.\nSe'n poden definir més a <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
"cite_error_no_link_label_group": "No hi ha etiquetes vincle personalitzat per al grup \"$1\".\nDefineix més al missatge <nowiki>[[MediaWiki:$2]]</nowiki>.",

View File

@ -4,5 +4,7 @@
"Davidzdh"
]
},
"cite_error": "Īng-ê̤ṳng chó̤-nguô: $1"
"cite_error": "Īng-ê̤ṳng chó̤-nguô: $1",
"cite_error_references_no_text": "Ù-hâu gì <code>&lt;ref&gt;</code> biĕu-chiĕng;\ngó muôi dêng-ngiê miàng-cê sê <code>$1</code> gì chăng-kō̤ ùng-hióng nó̤i-ṳ̀ng ùng-cê.",
"cite-tracking-category-cite-error": "Chăng-kō̤ lài-nguòng ô dâng gì hiĕk"
}

View File

@ -4,7 +4,7 @@
"Умар"
]
},
"cite-desc": "<code><nowiki><ref[ name=id]></nowiki></code> а <code><nowiki><references/></nowiki></code> тегаш тӀетовжарийн тӀетуху",
"cite-desc": "<code>&lt;ref[ name=id]&gt;</code> а <code>&lt;references/&gt;</code> тегаш тӀетовжарийн тӀетуху",
"cite_error": "ГӀалат дешнаш далорна $1",
"cite_error_ref_numeric_key": "Нийса йоцу тег <code>&lt;ref&gt;</code>;\nцӀе дуьззина терахь хилийла дац. Лелае йозанан цӀе",
"cite_error_ref_no_key": "Нийса йоцу тег <code>&lt;ref&gt;</code>;\nчулацам боцу элементан цӀе хийла еза.",

View File

@ -10,7 +10,7 @@
"Matěj Suchánek"
]
},
"cite-desc": "Přidává značky <code><nowiki><ref[ name=id]></nowiki></code> a&nbsp;<code><nowiki><references/></nowiki></code> na označení citací",
"cite-desc": "Přidává značky <code>&lt;ref[ name=id]&gt;</code> a&nbsp;<code>&lt;references/&gt;</code> na označení citací",
"cite_error": "Chybná citace: $1",
"cite_error_ref_invalid_dir": "Chyba v tagu <code>&lt;ref&gt;</code>; hodnota atributu dir „$1“ není známa. Musí být „ltr“ nebo „rtl“.",
"cite_error_ref_numeric_key": "Chyba v tagu <code>&lt;ref&gt;</code>; názvem nesmí být prosté číslo, použijte popisné označení",
@ -33,6 +33,7 @@
"cite-tracking-category-cite-error-desc": "Stránky v této kategorii obsahují chyby v použití značek pro reference.",
"cite_references_link_accessibility_label": "Skočit nahoru",
"cite_references_link_many_accessibility_label": "Skočit nahoru k:",
"cite_references_link_accessibility_back_label": "Skočit zpátky nahoru",
"cite_section_preview_references": "Náhled referencí",
"cite_warning": "Upozornění k citaci: $1",
"cite_warning_sectionpreview_no_text": "Nelze zobrazit náhled značky <code>&lt;ref&gt;</code> se jménem <code>$1</code>, protože je definována mimo aktuální sekci nebo není definována vůbec."

View File

@ -6,7 +6,7 @@
"Robin Owain"
]
},
"cite-desc": "Yn ychwanegu tagiau <code><nowiki><ref[ name=id]></nowiki></code> a <code><nowiki><references/></nowiki></code>, ar gyfer cyfeiriadau",
"cite-desc": "Yn ychwanegu tagiau <code>&lt;ref[ name=id]&gt;</code> a <code>&lt;references/&gt;</code>, ar gyfer cyfeiriadau",
"cite_error": "Gwall cyfeirio: $1",
"cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> annilys;\nni all enw fod yn rif yn unig. Defnyddiwch deitl disgrifiadol.",
"cite_error_ref_no_key": "Mae'r <code>&lt;ref&gt;</code> tag yn annilys neu rhoddwyd iddo enw annilys",

View File

@ -6,10 +6,11 @@
"Emilkris33",
"Morten LJ",
"Peter Alberti",
"Jhertel"
"Jhertel",
"Saederup92"
]
},
"cite-desc": "Tilføjer <code><nowiki><ref[ name=id]></nowiki></code> og <code><nowiki><references/></nowiki></code>-elementer til referencer.",
"cite-desc": "Tilføjer <code>&lt;ref[ name=id]&gt;</code> og <code>&lt;references/&gt;</code>-elementer til referencer.",
"cite_error": "Fodnotefejl: $1",
"cite_error_ref_numeric_key": "Ugyldigt <code>&lt;ref&gt;</code>-tag; \"name\" kan ikke være et simpelt heltal, brug en beskrivende titel",
"cite_error_ref_no_key": "Det indledende <code>&lt;ref&gt;</code>-tag har en forkert form eller har et ugyldigt navn",
@ -31,6 +32,7 @@
"cite-tracking-category-cite-error-desc": "Sider i denne kategori har fejl i brugen af reference-tags.",
"cite_references_link_accessibility_label": "Hop op",
"cite_references_link_many_accessibility_label": "Hop op til:",
"cite_references_link_accessibility_back_label": "Spring tilbage op",
"cite_section_preview_references": "Forhåndsvisning af referencer",
"cite_warning": "Referenceadvarsel: $1",
"cite_warning_sectionpreview_no_text": "<code>&lt;ref&gt;</code>-tag med navnet <code>$1</code> kan ikke forhåndsvises, fordi det er defineret uden for det aktuelle afsnit eller ikke defineret overhovedet."

View File

@ -15,7 +15,7 @@
"apihelp-query+references-summary": "Gibt eine Datendarstellung der Referenzen zurück, die mit den angegebenen Seiten verbunden sind.",
"apihelp-query+references-example-1": "Referenzen, die mit <kbd>Albert Einstein</kbd> verbunden sind.",
"apierror-citestoragedisabled": "Der Referenzspeicher der Erweiterung „Cite“ ist nicht aktiviert.",
"cite-desc": "Ermöglicht Referenzierungen mittels <code><nowiki><ref[ name=id]></nowiki></code> und <code><nowiki><references/></nowiki></code>",
"cite-desc": "Ermöglicht Referenzierungen mittels <code>&lt;ref[ name=id]&gt;</code> und <code>&lt;references/&gt;</code>",
"cite_error": "Referenzfehler: $1",
"cite_error_ref_invalid_dir": "Ungültiges <code>&lt;ref&gt;</code>-Tag. Das dir-Attribut „$1“ ist unbekannt und muss ltr oder rtl sein.",
"cite_error_ref_numeric_key": "Ungültige Verwendung von <code>&lt;ref&gt;</code>: Der Parameter „name“ darf kein reiner Zahlenwert sein. Benutze einen beschreibenden Namen.",
@ -38,6 +38,7 @@
"cite-tracking-category-cite-error-desc": "Seiten in dieser Kategorie haben Fehler in der Verwendung von Einzelnachweis-Tags.",
"cite_references_link_accessibility_label": "Hochspringen",
"cite_references_link_many_accessibility_label": "Hochspringen nach:",
"cite_references_link_accessibility_back_label": "Zurück nach oben springen",
"cite_section_preview_references": "Vorschau von Einzelnachweisen",
"cite_warning": "Referenzwarnung: $1",
"cite_warning_sectionpreview_no_text": "Das Tag <code>&lt;ref&gt;</code> mit dem Namen <code>$1</code> kann nicht in der Vorschau angezeigt werden, da es außerhalb des aktuellen Abschnitts liegt oder überhaupt nicht definiert ist."

Some files were not shown because too many files have changed in this diff Show More