diff options
58 files changed, 689 insertions, 328 deletions
diff --git a/UserMerge/.gitignore b/UserMerge/.gitignore index 322df574..466fb70e 100644 --- a/UserMerge/.gitignore +++ b/UserMerge/.gitignore @@ -2,6 +2,7 @@ node_modules/ composer.lock vendor/ +tests/phan/issues/ # Editors *.kate-swp diff --git a/UserMerge/.phpcs.xml b/UserMerge/.phpcs.xml new file mode 100644 index 00000000..2b0ed1bb --- /dev/null +++ b/UserMerge/.phpcs.xml @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<ruleset> + <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki"> + <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" /> + </rule> + <rule ref="Generic.Files.LineLength"> + <exclude-pattern>UserMerge\.alias\.php</exclude-pattern> + </rule> + <file>.</file> + <arg name="extensions" value="php,php5,inc" /> + <arg name="encoding" value="UTF-8" /> +</ruleset> diff --git a/UserMerge/CODE_OF_CONDUCT.md b/UserMerge/CODE_OF_CONDUCT.md index d8e5d087..498acf76 100644 --- a/UserMerge/CODE_OF_CONDUCT.md +++ b/UserMerge/CODE_OF_CONDUCT.md @@ -1 +1 @@ -The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Code_of_Conduct). +The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct). diff --git a/UserMerge/Gruntfile.js b/UserMerge/Gruntfile.js index 78ba56a3..c07280d8 100644 --- a/UserMerge/Gruntfile.js +++ b/UserMerge/Gruntfile.js @@ -23,7 +23,8 @@ module.exports = function ( grunt ) { jsonlint: { all: [ '**/*.json', - '!node_modules/**' + '!node_modules/**', + '!vendor/**' ] } } ); diff --git a/UserMerge/UserMerge.alias.php b/UserMerge/UserMerge.alias.php index b5aef905..ffa00b0e 100644 --- a/UserMerge/UserMerge.alias.php +++ b/UserMerge/UserMerge.alias.php @@ -238,6 +238,16 @@ $specialPageAliases['sk'] = [ 'UserMerge' => [ 'ZlúčeniePoužívateľov' ], ]; +/** Serbian (Cyrillic script) (српски (ћирилица)) */ +$specialPageAliases['sr-ec'] = [ + 'UserMerge' => [ 'СпајањеКорисника', 'Спајање_корисника' ], +]; + +/** Serbian (Latin script) (srpski (latinica)) */ +$specialPageAliases['sr-el'] = [ + 'UserMerge' => [ 'SpajanjeKorisnika', 'Spajanje_korisnika' ], +]; + /** Telugu (తెలుగు) */ $specialPageAliases['te'] = [ 'UserMerge' => [ 'సభ్యునివిలీనం' ], @@ -263,6 +273,11 @@ $specialPageAliases['uk'] = [ 'UserMerge' => [ 'Об\'єднання_користувачів' ], ]; +/** Urdu (اردو) */ +$specialPageAliases['ur'] = [ + 'UserMerge' => [ 'ضم_صارف' ], +]; + /** Vietnamese (Tiếng Việt) */ $specialPageAliases['vi'] = [ 'UserMerge' => [ 'Hợp_nhất_người_dùng' ], diff --git a/UserMerge/UserMergeLogger.php b/UserMerge/UserMergeLogger.php deleted file mode 100644 index 89f38ac4..00000000 --- a/UserMerge/UserMergeLogger.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php - -class UserMergeLogger implements IUserMergeLogger { - - /** - * Adds a merge log entry - * - * @todo Stop using this deprecated format - * @param User $performer - * @param User $oldUser - * @param User $newUser - */ - public function addMergeEntry( User $performer, User $oldUser, User $newUser ) { - $log = new LogPage( 'usermerge' ); - $log->addEntry( - 'mergeuser', - $performer->getUserPage(), - '', - [ - $oldUser->getName(), $oldUser->getId(), - $newUser->getName(), $newUser->getId() - ], - $performer - ); - } - - /** - * Adds a user deletion log entry - * - * @todo Stop using this deprecated format - * @param User $perfomer - * @param User $oldUser - */ - public function addDeleteEntry( User $perfomer, User $oldUser ) { - $log = new LogPage( 'usermerge' ); - $log->addEntry( - 'deleteuser', - $perfomer->getUserPage(), - '', - [ $oldUser->getName(), $oldUser->getId() ], - $perfomer - ); - } -} diff --git a/UserMerge/composer.json b/UserMerge/composer.json index 7c63cad5..0ec61337 100644 --- a/UserMerge/composer.json +++ b/UserMerge/composer.json @@ -1,14 +1,23 @@ { "require-dev": { - "jakub-onderka/php-parallel-lint": "0.9.2", - "mediawiki/mediawiki-codesniffer": "0.12.0", - "jakub-onderka/php-console-highlighter": "0.3.2" + "jakub-onderka/php-parallel-lint": "1.0.0", + "mediawiki/mediawiki-codesniffer": "22.0.0", + "jakub-onderka/php-console-highlighter": "0.3.2", + "mediawiki/minus-x": "0.3.1", + "mediawiki/mediawiki-phan-config": "0.3.0" }, "scripts": { - "fix": "phpcbf", + "fix": [ + "phpcbf", + "minus-x fix ." + ], "test": [ - "parallel-lint . --exclude vendor", - "phpcs -p -s" + "parallel-lint . --exclude vendor --exclude node_modules", + "phpcs -p -s", + "minus-x check ." ] + }, + "extra": { + "phan-taint-check-plugin": "1.5.0" } } diff --git a/UserMerge/extension.json b/UserMerge/extension.json index ddca3eb4..8a22bc6d 100644 --- a/UserMerge/extension.json +++ b/UserMerge/extension.json @@ -8,9 +8,9 @@ ], "url": "https://www.mediawiki.org/wiki/Extension:UserMerge", "descriptionmsg": "usermerge-desc", - "license-name": "GPL-2.0+", + "license-name": "GPL-2.0-or-later", "requires": { - "MediaWiki": ">= 1.28.0" + "MediaWiki": ">= 1.31.0" }, "type": "specialpage", "AvailableRights": [ @@ -28,9 +28,14 @@ "LogHeaders": { "usermerge": "usermerge-logpagetext" }, - "LogActions": { - "usermerge/mergeuser": "usermerge-success-log", - "usermerge/deleteuser": "usermerge-userdeleted-log" + "ActionFilteredLogs": { + "usermerge": { + "mergeuser": [ "mergeuser" ], + "deleteuser": [ "deleteuser" ] + } + }, + "LogActionsHandlers": { + "usermerge/*": "UserMergeLogFormatter" }, "MessagesDirs": { "UserMerge": [ @@ -41,10 +46,11 @@ "UserMergeAlias": "UserMerge.alias.php" }, "AutoloadClasses": { - "SpecialUserMerge": "SpecialUserMerge.php", - "MergeUser": "MergeUser.php", - "IUserMergeLogger": "IUserMergeLogger.php", - "UserMergeLogger": "UserMergeLogger.php" + "SpecialUserMerge": "includes/SpecialUserMerge.php", + "MergeUser": "includes/MergeUser.php", + "IUserMergeLogger": "includes/IUserMergeLogger.php", + "UserMergeLogger": "includes/UserMergeLogger.php", + "UserMergeLogFormatter": "includes/UserMergeLogFormatter.php" }, "config": { "UserMergeEnableDelete": true, diff --git a/UserMerge/gitinfo.json b/UserMerge/gitinfo.json index 86d4d6a1..4a8958d5 100644 --- a/UserMerge/gitinfo.json +++ b/UserMerge/gitinfo.json @@ -1 +1 @@ -{"headSHA1": "45465372c950653e260aa41e57522b4d58ab632a\n", "head": "45465372c950653e260aa41e57522b4d58ab632a\n", "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/extensions/UserMerge", "branch": "45465372c950653e260aa41e57522b4d58ab632a\n", "headCommitDate": "1504241965"}
\ No newline at end of file +{"remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/extensions/UserMerge", "headCommitDate": "1547405747", "branch": "66c703068fa0089cb5644129158a8c50b0b12fef\n", "head": "66c703068fa0089cb5644129158a8c50b0b12fef\n", "headSHA1": "66c703068fa0089cb5644129158a8c50b0b12fef\n"}
\ No newline at end of file diff --git a/UserMerge/i18n/ar.json b/UserMerge/i18n/ar.json index ba4a2c90..d6323b45 100644 --- a/UserMerge/i18n/ar.json +++ b/UserMerge/i18n/ar.json @@ -14,21 +14,24 @@ "usermerge-badnewuser": "اسم المستخدم الجديد غير صحيح", "usermerge-nonewuser": "اسم مستخدم جديد فارغ - افتراض الدمج إلى \"$1\".<br />\nاضغط \"{{int:usermerge-submit}}\" للقبول.", "usermerge-noolduser": "اسم المستخدم القديم فارغ", + "usermerge-same-old-and-new-user": "يجب أن تكون أسماء المستخدمين القديمة والجديدة مميزة.", "usermerge-fieldset": "أسماء المستخدمين للدمج", "usermerge-olduser": "مستخدم قديم (دمج من):", "usermerge-newuser": "مستخدم جديد (دمج إلى):", "usermerge-deleteolduser": "حذف المستخدم القديم", "usermerge-submit": "دمج المستخدم", "usermerge-badtoken": "نص تعديل غير صحيح", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) تم حذفه.", - "usermerge-userdeleted-log": "حذف المستخدم: $2($3)", - "usermerge-success": "الدمج من {{GENDER:$1|$1}} ($2) إلى{{GENDER:$3|$3}} ($4) اكتمل.", - "usermerge-success-log": "المستخدم {{GENDER:$2|$2}} ($3) تم دمجه مع {{GENDER:$4|$4}} ($5)", + "usermerge-userdeleted": "$1 ($2) تم حذفه.", + "usermerge-userdeleted-log": "تم حذف حساب المستخدم: $2($3)", + "usermerge-success": "الدمج من $1 ($2) إلى $3 ($4) اكتمل.", + "usermerge-success-log": "تم دمج المستخدم \"$2\" ($3) إلى \"[[User:$4|$4]]\" ($5)", "usermerge-logpage": "سجل دمج المستخدم", "usermerge-logpagetext": "هذا سجل بأفعال دمج المستخدمين.", "usermerge-noselfdelete": "لا يمكنك حذف أو دمج {{GENDER:$1|نفسك}}!", - "usermerge-protectedgroup": "غير قادر على دمج {{GENDER:$1|المستخدم}}: المستخدم في مجموعة محمية.", + "usermerge-protectedgroup": "غير قادر على دمج {{GENDER:$1|المستخدم}}; المستخدم في مجموعة محمية.", "right-usermerge": "دمج المستخدمين", "action-usermerge": "دمج المستخدمين", - "usermerge-page-unmoved": "تعذر نقل الصفحة $1 إلى $2." + "usermerge-autopagedelete": "تم حذف الصفحة تلقائيا أثناء دمج المستخدمين", + "usermerge-page-unmoved": "تعذر نقل الصفحة $1 إلى $2.", + "usermerge-move-log": "تم نقل الصفحة تلقائيا عند دمج الحساب \"$1\" إلى \"[[User:$2|$2]]\"" } diff --git a/UserMerge/i18n/be-tarask.json b/UserMerge/i18n/be-tarask.json index 2c978287..8514d286 100644 --- a/UserMerge/i18n/be-tarask.json +++ b/UserMerge/i18n/be-tarask.json @@ -5,7 +5,8 @@ "Jim-by", "Red Winged Duck", "Renessaince", - "Wizardist" + "Wizardist", + "Artsiom91" ] }, "usermerge": "Аб'яднаньне і выдаленьне рахункаў удзельнікаў", @@ -16,22 +17,22 @@ "usermerge-noolduser": "Пустое старое імя ўдзельніка", "usermerge-same-old-and-new-user": "Старое і новае імя ўдзельніка мусяць адрозьнівацца.", "usermerge-fieldset": "Імёны ўдзельнікаў для аб'яднаньня", - "usermerge-olduser": "Стары ўдзельнік (аб'яднаць з):", - "usermerge-newuser": "Новы ўдзельнік (аб'яднаць з):", + "usermerge-olduser": "Стары ўдзельнік (аб’яднаць з):", + "usermerge-newuser": "Новы ўдзельнік (аб’яднаць з):", "usermerge-deleteolduser": "Выдаліць стары рахунак удзельніка", - "usermerge-submit": "Аб'яднаць рахункі ўдзельнікаў", + "usermerge-submit": "Аб’яднаць уліковыя запісы ўдзельнікаў", "usermerge-badtoken": "Няслушны знак рэдагаваньня", - "usermerge-userdeleted": "$1 ($2) {{GENDER:$1|быў выдалены|была выдаленая}}.", - "usermerge-userdeleted-log": "Выдалены рахунак удзельніка: $2 ($3)", - "usermerge-success": "Аб'яднаньне {{GENDER:$1|$1}} ($2) з {{GENDER:$3|$3}} ($4) скончанае.", - "usermerge-success-log": "{{GENDER:$2|Удзельнік|Удзельніца}} $2 ($3) {{GENDER:$2|аб’яднаны|аб’яднаная}} з $4 ($5)", + "usermerge-userdeleted": "$1 ($2) быў выдалены.", + "usermerge-userdeleted-log": "выдалены рахунак удзельніка «$2» ($3)", + "usermerge-success": "Аб’яднаньне $1 ($2) з $3 ($4) завершанае.", + "usermerge-success-log": "далучаны рахунак «$2» ($3) да «[[User:$4|$4]]» ($5)", "usermerge-logpage": "Журнал аб’яднаньня рахункаў удзельнікаў", "usermerge-logpagetext": "Гэта журнал аб’яднаньня рахункаў удзельнікаў.", "usermerge-noselfdelete": "Вы ня можаце выдаліць ці аб’яднаць {{GENDER:$1|уласны рахунак}}!", - "usermerge-protectedgroup": "Немагчыма аб’яднаць рахунак {{GENDER:$1|удзельніка|удзельніцы}}: {{GENDER:$1|ён|яна}} знаходзіцца ў абароненай групе.", + "usermerge-protectedgroup": "Немагчыма далучыць рахунак {{GENDER:$1|удзельніка|удзельніцы}}: {{GENDER:$1|ён|яна}} знаходзіцца ў абароненай групе.", "right-usermerge": "аб'яднаньне рахункаў удзельнікаў", "action-usermerge": "аб’ядноўваць удзельнікаў", - "usermerge-autopagedelete": "Аўтаматычна выдалены падчас аб’яднаньня рахункаў ўдзельнікаў", + "usermerge-autopagedelete": "Аўтаматычна выдаленая старонка падчас аб’яднаньня рахункаў удзельнікаў", "usermerge-page-unmoved": "Старонка $1 ня можа быць перанесеная ў $2.", - "usermerge-move-log": "Аўтаматычна перанесеная старонка падчас аб’яднаньня рахунку ўдзельніка «[[User:$1|$1]]» з «[[User:$2|{{GENDER:$2|$2}}]]»" + "usermerge-move-log": "Аўтаматычна перанесеная старонка падчас далучэньня рахунку «$1» да «[[User:$2|$2]]»" } diff --git a/UserMerge/i18n/be.json b/UserMerge/i18n/be.json new file mode 100644 index 00000000..1de443d1 --- /dev/null +++ b/UserMerge/i18n/be.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Artsiom91" + ] + }, + "usermerge-logpage": "Журнал аб’яднання ўдзельнікаў", + "usermerge-logpagetext": "Гэта журнал аб’яднання ўліковых запісаў удзельнікаў." +} diff --git a/UserMerge/i18n/bg.json b/UserMerge/i18n/bg.json index c0d3f3fc..bc9c9079 100644 --- a/UserMerge/i18n/bg.json +++ b/UserMerge/i18n/bg.json @@ -2,7 +2,9 @@ "@metadata": { "authors": [ "DCLXVI", - "Termininja" + "Termininja", + "StanProg", + "Vlad5250" ] }, "usermerge": "Сливане и изтриване на потребители", @@ -15,14 +17,14 @@ "usermerge-newuser": "Нов потребител (за сливане в):", "usermerge-deleteolduser": "Изтриване на стария потребител", "usermerge-submit": "Сливане", - "usermerge-userdeleted": "$1($2) беше изтрит.", - "usermerge-userdeleted-log": "Изтрит потребител: $2($3)", + "usermerge-userdeleted": "$1 ($2) беше изтрит.", + "usermerge-userdeleted-log": "изтри потребителска сметка „$2“ ($3)", "usermerge-success": "Сливането от $1 ($2) към $3 ($4) приключи.", - "usermerge-success-log": "Потребител $2 ($3) беше слят с $4 ($5)", + "usermerge-success-log": "сля сметка „$2“ ($3) в „[[User:$4|$4]]“ ($5)", "usermerge-logpage": "Дневник на потребителските сливания", "usermerge-logpagetext": "Тази страница съдържа дневник на потребителските сливания.", - "usermerge-noselfdelete": "Не е възможно да изтривате или сливате от себе си!", - "usermerge-protectedgroup": "Невъзможно е да се извърши сливане от потребител - потребителят е в защитена група.", - "right-usermerge": "сливане на потребители", + "usermerge-noselfdelete": "Не е възможно да изтривате или сливате от {{GENDER:$1|себе си}}!", + "usermerge-protectedgroup": "Невъзможно е да се извърши сливане от {{GENDER:$1|потребител}}: потребителят е в защитена група.", + "right-usermerge": "Сливане на потребители", "action-usermerge": "сливане на потребителски сметки" } diff --git a/UserMerge/i18n/bn.json b/UserMerge/i18n/bn.json index 67ef192e..748ce1ef 100644 --- a/UserMerge/i18n/bn.json +++ b/UserMerge/i18n/bn.json @@ -4,7 +4,9 @@ "Bellayet", "Zaheen", "Aftab1995", - "Aftabuzzaman" + "Aftabuzzaman", + "Rasal Lia", + "আফতাবুজ্জামান" ] }, "usermerge": "ব্যবহারকারী একত্রীকরণ এবং মুছে ফেলা", @@ -20,10 +22,10 @@ "usermerge-deleteolduser": "পুরনো ব্যবহারকারী অপসারণ করুন", "usermerge-submit": "ব্যবহারকারী একত্রীত করুন", "usermerge-badtoken": "সম্পাদনা টোকেন অবৈধ।", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) মুছে ফেলা হয়েছে।", - "usermerge-userdeleted-log": "অপসারিত ব্যবহারকারী: $2 ($3)", - "usermerge-success": "{{GENDER:$1|$1}} ($2) থেকে {{GENDER:$3|$3}} ($4)-এ একত্রীকরণ সম্পন্ন হয়েছে।", - "usermerge-success-log": "ব্যবহারকারী {{GENDER:$2|$2}} ($3)-কে {{GENDER:$4|$4}} ($5)-এর সাথে একত্রিত করা হয়েছে", + "usermerge-userdeleted": "$1 ($2) মুছে ফেলা হয়েছে।", + "usermerge-userdeleted-log": "ব্যবহারকারী এক্যাউন্ট \"$2\" ($3) বাতিল হয়েছে", + "usermerge-success": "$1 ($2) থেকে $3 ($4)-এ একত্রীকরণ সম্পন্ন হয়েছে।", + "usermerge-success-log": "\"$2\" ($3) এক্যাউন্টটি \"[[User:$4|$4]]\" ($5) এর সাথে একত্রিত হয়েছে", "usermerge-logpage": "ব্যবহারকারী একত্রীকরণ লগ", "usermerge-logpagetext": "এটি ব্যবহারকারী একত্রীকরনের একটি লগ।", "usermerge-noselfdelete": "আপনি {{GENDER:$1|নিজের}} ব্যবহারকারী নাম মুছে ফেলতে বা এটি থেকে অন্য নামে একত্রিত করতে পারবেন না!", @@ -32,5 +34,5 @@ "action-usermerge": "ব্যবহারকারী একত্রিত করার", "usermerge-autopagedelete": "ব্যবহারকারী একত্রীত করার সময় স্বয়ংক্রিয়ভাবে অপসারিত", "usermerge-page-unmoved": "$1 পাতাটি $2-এ সরিয়ে নেওয়া সম্ভব নয়।", - "usermerge-move-log": "ব্যবহারকারী \"[[User:$1|$1]]\" কে \"[[User:$2|{{GENDER:$2|$2}}]]\"-এ একত্রীত করার সময় স্বয়ংক্রিয়ভাবে পাতা স্থানান্তরিত" + "usermerge-move-log": "\"$1\" অ্যাকাউন্টটি \"[[User:$2|$2]]\"-এ একত্রীত করার সময় স্বয়ংক্রিয়ভাবে পাতা স্থানান্তরিত" } diff --git a/UserMerge/i18n/da.json b/UserMerge/i18n/da.json new file mode 100644 index 00000000..a8877633 --- /dev/null +++ b/UserMerge/i18n/da.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Saederup92" + ] + }, + "usermerge-deleteolduser": "Slet gammel bruger" +} diff --git a/UserMerge/i18n/de.json b/UserMerge/i18n/de.json index 857a236a..81ed2886 100644 --- a/UserMerge/i18n/de.json +++ b/UserMerge/i18n/de.json @@ -23,17 +23,17 @@ "usermerge-deleteolduser": "Alten Benutzernamen löschen", "usermerge-submit": "Benutzerkonten zusammenführen", "usermerge-badtoken": "Ungültiges Bearbeitungstoken", - "usermerge-userdeleted": "„{{GENDER:$1|$1}}“ ($2) wurde gelöscht.", - "usermerge-userdeleted-log": "hat „$2“ ($3) gelöscht", - "usermerge-success": "Die Zusammenführung von „{{GENDER:$1|$1}}“ ($2) nach „{{GENDER:$3|$3}}“ ($4) war erfolgreich.", - "usermerge-success-log": "hat „{{GENDER:$2|$2}}“ ($3) mit „{{GENDER:$4|$4}}“ ($5) zusammengeführt", + "usermerge-userdeleted": "„$1“ ($2) wurde gelöscht.", + "usermerge-userdeleted-log": "hat das Benutzerkonto „$2“ ($3) gelöscht", + "usermerge-success": "Die Zusammenführung von „$1“ ($2) nach „$3“ ($4) war erfolgreich.", + "usermerge-success-log": "hat das Benutzerkonto „$2“ ($3) in „[[User:$4|$4]]“ ($5) zusammengeführt", "usermerge-logpage": "Benutzerkontenzusammenführungs-Logbuch", "usermerge-logpagetext": "Dies ist das Logbuch der Benutzerkontenzusammenführungen.", "usermerge-noselfdelete": "Die Zusammenführung mit {{GENDER:$1|dem eigenen Benutzerkonto}} ist nicht möglich.", "usermerge-protectedgroup": "Die Zusammenführung ist nicht möglich: {{GENDER:$1|Der Benutzer|Die Benutzerin}} befindet sich in einer hierfür geschützten Benutzergruppe.", "right-usermerge": "Benutzerkonten zusammenführen", "action-usermerge": "Benutzer zusammenzuführen", - "usermerge-autopagedelete": "Automatisch während der Benutzerkontenzusammenführung gelöscht", + "usermerge-autopagedelete": "Bei der Zusammenführung der Benutzer automatisch gelöschte Seite", "usermerge-page-unmoved": "Die Seite „$1“ konnte nicht nach „$2“ verschoben werden.", - "usermerge-move-log": "Die Seite wurde während der Benutzerkontenzusammenführung von „[[User:$1|$1]]“ nach „[[User:$2|{{GENDER:$2|$2}}]]“ automatisch verschoben" + "usermerge-move-log": "Die Seite wurde während der Benutzerkontenzusammenführung von „$1“ nach „[[User:$2|$2]]“ automatisch verschoben" } diff --git a/UserMerge/i18n/el.json b/UserMerge/i18n/el.json index 852d53cc..4d1ea3df 100644 --- a/UserMerge/i18n/el.json +++ b/UserMerge/i18n/el.json @@ -5,7 +5,8 @@ "Crazymadlover", "Omnipaedista", "Protnet", - "ZaDiak" + "ZaDiak", + "KATRINE1992" ] }, "usermerge": "Συγχώνευση και διαγραφή χρηστών", diff --git a/UserMerge/i18n/en.json b/UserMerge/i18n/en.json index 87affa08..ad8cb139 100644 --- a/UserMerge/i18n/en.json +++ b/UserMerge/i18n/en.json @@ -15,17 +15,20 @@ "usermerge-deleteolduser": "Delete old user", "usermerge-submit": "Merge user", "usermerge-badtoken": "Invalid edit token.", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) has been deleted.", - "usermerge-userdeleted-log": "Deleted user: $2 ($3)", - "usermerge-success": "Merge from {{GENDER:$1|$1}} ($2) to {{GENDER:$3|$3}} ($4) is complete.", - "usermerge-success-log": "User {{GENDER:$2|$2}} ($3) merged to {{GENDER:$4|$4}} ($5)", + "usermerge-userdeleted": "$1 ($2) has been deleted.", + "usermerge-success": "Merge from $1 ($2) to $3 ($4) is complete.", "usermerge-logpage": "User merge log", "usermerge-logpagetext": "This is a log of user merge actions.", "usermerge-noselfdelete": "You cannot delete or merge from {{GENDER:$1|yourself}}!", - "usermerge-protectedgroup": "Unable to merge from {{GENDER:$1|user}}: User is in a protected group.", + "usermerge-protectedgroup": "Unable to merge from {{GENDER:$1|user}}: user is in a protected group.", "right-usermerge": "Merge users", "action-usermerge": "merge users", - "usermerge-autopagedelete": "Automatically deleted when merging users", + "usermerge-autopagedelete": "Automatically deleted page while merging users", "usermerge-page-unmoved": "The page $1 could not be moved to $2.", - "usermerge-move-log": "Automatically moved page while merging the user \"[[User:$1|$1]]\" to \"[[User:$2|{{GENDER:$2|$2}}]]\"" + "usermerge-move-log": "Automatically moved page while merging the account \"$1\" to \"[[User:$2|$2]]\"", + "logentry-usermerge-mergeuser": "$1 {{GENDER:$2|merged}} the user account \"$4\" ($5) into {{GENDER:$8|$6}} ($7)", + "logentry-usermerge-deleteuser": "$1 {{GENDER:$2|deleted}} the user account \"$4\" ($5)", + "log-action-filter-usermerge": "Type of action:", + "log-action-filter-usermerge-mergeuser": "User account merge", + "log-action-filter-usermerge-deleteuser": "User account deletion" } diff --git a/UserMerge/i18n/es.json b/UserMerge/i18n/es.json index 667159d7..93ccd946 100644 --- a/UserMerge/i18n/es.json +++ b/UserMerge/i18n/es.json @@ -26,17 +26,17 @@ "usermerge-deleteolduser": "Borrar antiguo usuario", "usermerge-submit": "Fusionar usuario", "usermerge-badtoken": "Ficha de edición inválida", - "usermerge-userdeleted": "Se borró {{GENDER:$1|el usuario|la usuaria}} $1 ($2).", + "usermerge-userdeleted": "Se borró a $1 ($2).", "usermerge-userdeleted-log": "borró la cuenta de usuario «$2» ($3)", - "usermerge-success": "La fusión de $1 ($2) a $3 ($4) ha sido completada.", - "usermerge-success-log": "fusionó al usuario «$2» ($3) con el usuario «$4» ($5)", + "usermerge-success": "Se completó la combinación de $1 ($2) a $3 ($4).", + "usermerge-success-log": "fusionó la cuenta «$2» ($3) con «[[User:$4|$4]]» ($5)", "usermerge-logpage": "Registro de fusiones del usuario", "usermerge-logpagetext": "Este es un registro de fusiones de cuentas de usuario.", "usermerge-noselfdelete": "No puedes borrarte o fusionarte tú {{GENDER:$1|mismo|misma}}.", - "usermerge-protectedgroup": "Imposible fusionar desde {{GENDER:$1|el usuario|la usuaria}}: está en un grupo protegido.", + "usermerge-protectedgroup": "Imposible fusionar desde {{GENDER:$1|el usuario|la usuaria}}: la cuenta de usuario está en un grupo protegido.", "right-usermerge": "Fusionar usuarios", "action-usermerge": "fusionar usuarios", - "usermerge-autopagedelete": "Eliminado automáticamente al fusionar usuarios", + "usermerge-autopagedelete": "Borrada automáticamente al fusionar usuarios", "usermerge-page-unmoved": "La página $1 no pudo trasladarse a $2.", - "usermerge-move-log": "Página trasladada automáticamente al fusionar al usuario «[[User:$1|$1]]» con «[[User:$2|$2]]»" + "usermerge-move-log": "Página trasladada automáticamente al fusionar la cuenta «$1» con «[[User:$2|$2]]»" } diff --git a/UserMerge/i18n/et.json b/UserMerge/i18n/et.json index a13834ae..41b13f05 100644 --- a/UserMerge/i18n/et.json +++ b/UserMerge/i18n/et.json @@ -7,7 +7,7 @@ "usermerge-desc": "[[Special:UserMerge|Ühendab vikiandmebaasis kasutaja nimetamised teise kasutajaga]]. Ühendamise järel kustutab vanad kasutajad. Nõuab õigust \"usermerge\".", "usermerge-badolduser": "Vigane vana kasutajanimi", "usermerge-badnewuser": "Vigane uus kasutajanimi", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) on kustutatud.", + "usermerge-userdeleted": "$1 ($2) on kustutatud.", "usermerge-logpage": "Kasutajate ühendamislogi", "usermerge-logpagetext": "See on kasutajaühendamistoimingute logi." } diff --git a/UserMerge/i18n/eu.json b/UserMerge/i18n/eu.json index c74b8871..a5fe1784 100644 --- a/UserMerge/i18n/eu.json +++ b/UserMerge/i18n/eu.json @@ -3,7 +3,8 @@ "authors": [ "An13sa", "Theklan", - "Xabier Armendaritz" + "Xabier Armendaritz", + "Mikel Ibaiba" ] }, "usermerge-badolduser": "Baliogabeko lankide izen zaharra", @@ -14,7 +15,7 @@ "usermerge-deleteolduser": "Ezabatu lankide zaharra", "usermerge-submit": "Lankidea batu", "usermerge-badtoken": "Aldaketa token ez baliagarria", - "usermerge-userdeleted": "$1 ($2) ezabatua izan da.", + "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) ezabatua izan da.", "usermerge-userdeleted-log": "Ezabatutako lankidea: $2 ($3)", "usermerge-success": "$1(e)tik ($2) $3(e)ra ($4) batzea burutu da.", "usermerge-success-log": "$2 ($3) lankidea $4 ($5) lankidera batu da", diff --git a/UserMerge/i18n/fa.json b/UserMerge/i18n/fa.json index 8d2db599..ab7bc888 100644 --- a/UserMerge/i18n/fa.json +++ b/UserMerge/i18n/fa.json @@ -9,7 +9,8 @@ "Mjbmr", "Reza1615", "ZxxZxxZ", - "Alirezaaa" + "Alirezaaa", + "Ladsgroup" ] }, "usermerge": "ادغام و حذفکردن کاربران", @@ -25,10 +26,10 @@ "usermerge-deleteolduser": "پاککردن کاربر قدیمی", "usermerge-submit": "یکی کردن کاربر", "usermerge-badtoken": "نشانهٔ ویرایش نامعتبر.", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) پاک شد.", - "usermerge-userdeleted-log": "کاربر حذف شده: $2 ($3)", - "usermerge-success": "یکیکردن از {{GENDER:$1|$1}} ($2) به {{GENDER:$3|$3}} ($4) کامل شد.", - "usermerge-success-log": "کاربر {{GENDER:$2|$2}} ($3) با {{GENDER:$4|$4}} ($5) یکی شد", + "usermerge-userdeleted": "$1 ($2) پاک شد.", + "usermerge-userdeleted-log": "کاربر «$2» حذف شد ($3)", + "usermerge-success": "یکیکردن از $1 ($2) به $3 ($4) کامل شد.", + "usermerge-success-log": "کاربر «$2» ($3) با «[[User:$4|$4]]» ($5) یکی شد", "usermerge-logpage": "سیاههٔ ادغام کاربر", "usermerge-logpagetext": "این سیاههی ادغام فعالیتهای کاربر است.", "usermerge-noselfdelete": "شما نمیتوانید {{GENDER:$1|خودتان}} را یکی یا حذف کنید!", @@ -37,5 +38,5 @@ "action-usermerge": "ادغام کاربران", "usermerge-autopagedelete": "حذف به طور خودکار هنگام ادغام کاربران", "usermerge-page-unmoved": "امکان انتقال صفحهٔ $1 به $2 وجود ندارد.", - "usermerge-move-log": "انتقال خودکار صفحه هنگام ادغام کاربر «[[User:$1|$1]]» به «[[User:$2|{{GENDER:$2|$2}}]]»" + "usermerge-move-log": "انتقال خودکار صفحه هنگام ادغام کاربر «$1» به «[[User:$2|$2]]»" } diff --git a/UserMerge/i18n/fi.json b/UserMerge/i18n/fi.json index 8a93c6c7..27f5c610 100644 --- a/UserMerge/i18n/fi.json +++ b/UserMerge/i18n/fi.json @@ -8,14 +8,17 @@ "Str4nd", "Stryn", "VezonThunder", - "Vililikku" + "Vililikku", + "01miki10" ] }, "usermerge": "Käyttäjätunnusten yhdistys ja poisto", + "usermerge-desc": "[[Special:UserMerge|Yhdistää viittaukset yhdestä käyttäjästä toiseen]] wikin tietokannassa - poistaa myös vanhat käyttäjät yhdistämisen jälkeen. Vaatii oikeuden \"usermerge\"", "usermerge-badolduser": "Vanha käyttäjätunnus ei kelpaa", "usermerge-badnewuser": "Uusi käyttäjätunnus ei kelpaa", - "usermerge-nonewuser": "Uusi käyttäjätunnus -kenttä on tyhjä - oletetaan yhdistäminen tunnukseen \"$1\". <br /> \nNapsauta \"{{int:usermerge-submit}}\" hyväksyäksesi.", + "usermerge-nonewuser": "Uusi käyttäjätunnus -kenttä on tyhjä. Oletetaan yhdistäminen tunnukseen \"{{GENDER:$1|$1}}\". <br /> \nNapsauta \"{{int:usermerge-submit}}\" hyväksyäksesi.", "usermerge-noolduser": "Vanha käyttäjätunnus ei voi olla tyhjä.", + "usermerge-same-old-and-new-user": "Vanhan ja uuden käyttäjänimen on oltava eroavat.", "usermerge-fieldset": "Yhdistettävät käyttäjänimet", "usermerge-olduser": "Vanha käyttäjä (mikä yhdistetään)", "usermerge-newuser": "Uusi käyttäjä (mihin yhdistetään)", @@ -23,15 +26,16 @@ "usermerge-submit": "Yhdistä käyttäjä", "usermerge-badtoken": "Virheellinen muokkauslipuke", "usermerge-userdeleted": "$1 ($2) on poistettu.", - "usermerge-userdeleted-log": "Poistettiin käyttäjä: $2 ($3)", - "usermerge-success": "Yhdistäminen tunnuksesta $1 ($2) tunnukseen {{GENDER:$3|$3}} ($4) on suoritettu.", - "usermerge-success-log": "Käyttäjä $2 ($3) yhdistettiin käyttäjään {{GENDER:$4|$4}} ($5)", + "usermerge-userdeleted-log": "poisti käyttäjätunnuksen \"$2\" ($3)", + "usermerge-success": "Yhdistäminen tunnuksesta $1 ($2) tunnukseen $3 ($4) on suoritettu.", + "usermerge-success-log": "yhdisti käyttäjän \"$2\" ($3) käyttäjään \"[[User:$4|$4]]\" ($5)", "usermerge-logpage": "Käyttäjien yhdistämisloki", "usermerge-logpagetext": "Tämä on loki käyttäjätunnuksien yhdistämistoimista.", - "usermerge-noselfdelete": "Et voi poistaa tai yhdistää itseltäsi.", - "usermerge-protectedgroup": "Ei voi yhdistää käyttäjänimestä - käyttäjänimi kuuluu suojattuun ryhmään.", + "usermerge-noselfdelete": "Et voi poistaa tai yhdistää {{GENDER:$1|itseäsi}}!", + "usermerge-protectedgroup": "Ei voi yhdistää {{GENDER:$1|käyttäjästä}}: käyttäjä kuuluu suojattuun ryhmään.", "right-usermerge": "Yhdistää käyttäjiä", - "usermerge-autopagedelete": "Poistettiin automaattisesti käyttäjien yhdistämisessä", + "action-usermerge": "yhdistää käyttäjiä", + "usermerge-autopagedelete": "Sivu poistettiin automaattisesti käyttäjien yhdistämisessä", "usermerge-page-unmoved": "Sivua $1 ei voitu siirtää nimelle $2.", - "usermerge-move-log": "Sivu siirretty automaattisesti yhdistettäessä käyttäjä \"[[User:$1|$1]]\" käyttäjään \"[[User:$2|{{GENDER:$2|$2}}]]\"" + "usermerge-move-log": "Sivu siirrettiin automaattisesti yhdistettäessä käyttäjä \"$1\" käyttäjään \"[[User:$2|$2]]\"" } diff --git a/UserMerge/i18n/fr.json b/UserMerge/i18n/fr.json index fce8e046..d81c2a7b 100644 --- a/UserMerge/i18n/fr.json +++ b/UserMerge/i18n/fr.json @@ -10,7 +10,8 @@ "PieRRoMaN", "Seb35", "Sherbrooke", - "Urhixidur" + "Urhixidur", + "Wladek92" ] }, "usermerge": "Fusionner et supprimer des utilisateurs", @@ -27,16 +28,16 @@ "usermerge-submit": "Fusionner l’utilisateur", "usermerge-badtoken": "Jeton de modification invalide", "usermerge-userdeleted": "$1 ($2) a été supprimé{{GENDER:$1||e}}.", - "usermerge-userdeleted-log": "Contributeur supprimé : $2 ($3)", - "usermerge-success": "La fusion de {{GENDER:$1|$1}} ($2) avec {{GENDER:$3|$3}} ($4) est terminée.", - "usermerge-success-log": "{{GENDER:$2|Utilisateur|Utilisatrice}} $2 ($3) fusionné{{GENDER:$2||e}} avec {{GENDER:$4|$4}} ($5)", - "usermerge-logpage": "Journal des fusions de comptes utilisateur", + "usermerge-userdeleted-log": "contributeur supprimé : « $2 » ($3)", + "usermerge-success": "La fusion de $1 ($2) avec $3 ($4) est terminée.", + "usermerge-success-log": "compte « $2 » ($3) fusionné avec « [[User:$4|$4]] » ($5)", + "usermerge-logpage": "Journal des fusions de comptes d’utilisateurs", "usermerge-logpagetext": "Voici un journal des actions de fusions d’utilisateurs.", "usermerge-noselfdelete": "Vous ne pouvez pas vous supprimer ou vous fusionner {{GENDER:$1|vous-même}} !", - "usermerge-protectedgroup": "Impossible de fusionner l’{{GENDER:$1|utilisateur|utilisatrice}} : l’{{GENDER:$1|utilisateur|utilisatrice}} est dans un groupe protégé.", + "usermerge-protectedgroup": "Impossible de fusionner l’{{GENDER:$1|utilisateur|utilisatrice}} : l’{{GENDER:$1|il|elle}} est dans un groupe protégé.", "right-usermerge": "Fusionner des utilisateurs", "action-usermerge": "fusionner les utilisateurs", - "usermerge-autopagedelete": "Supprimé automatiquement lors de la fusion de utilisateurs", + "usermerge-autopagedelete": "Page supprimée automatiquement lors de la fusion des utilisateurs", "usermerge-page-unmoved": "Cette page $1 ne peut pas être déplacée vers $2.", - "usermerge-move-log": "Page déplacée automatiquement lors de la fusion de l’utilisateur \"[[User:$1|$1]]\" en \"[[User:$2|{{GENDER:$2|$2}}]]\"" + "usermerge-move-log": "Page renommée automatiquement lors de la fusion du compte d’utilisat{{GENDER:$1|eur|rice}} « $1 » en « [[User:$2|]] »" } diff --git a/UserMerge/i18n/gl.json b/UserMerge/i18n/gl.json index 19690558..8127ef55 100644 --- a/UserMerge/i18n/gl.json +++ b/UserMerge/i18n/gl.json @@ -3,7 +3,8 @@ "authors": [ "Alma", "Toliño", - "Elisardojm" + "Elisardojm", + "Banjo" ] }, "usermerge": "Fusionar e eliminar usuario", @@ -19,17 +20,17 @@ "usermerge-deleteolduser": "Borrar o usuario antigo", "usermerge-submit": "Fusionar o usuario", "usermerge-badtoken": "Sinal de edición non válido", - "usermerge-userdeleted": "Borrouse {{GENDER:$1|o usuario|a usuaria}} $1 ($2).", - "usermerge-userdeleted-log": "Usuario eliminado: $2 ($3)", - "usermerge-success": "A fusión desde {{GENDER:$1|$1}} ($2) a {{GENDER:$3|$3}} ($4) foi completada.", - "usermerge-success-log": "Usuario {{GENDER:$2|$2}} ($3) fusionado con {{GENDER:$4|$4}} ($5)", + "usermerge-userdeleted": "$1 ($2) foi eliminado.", + "usermerge-userdeleted-log": "eliminouse a conta de usuario \"$2\" ($3)", + "usermerge-success": "Completouse a fusión desde $1 ($2) a $3 ($4).", + "usermerge-success-log": "Fusionouse a conta \"$2\" ($3) con \"[[User:$4|$4]]\" ($5)", "usermerge-logpage": "Rexistro de fusión de usuarios", "usermerge-logpagetext": "Este é un rexistro das accións de fusión de usuarios.", "usermerge-noselfdelete": "Non se pode eliminar ou fusionar a si {{GENDER:$1|mesmo|mesma}}!", - "usermerge-protectedgroup": "Non se pode fusionar {{GENDER:$1|o usuario|a usuaria}}: Está nun grupo protexido.", + "usermerge-protectedgroup": "Non se pode fusionar {{GENDER:$1|o usuario|a usuaria}}: está nun grupo protexido.", "right-usermerge": "Fusionar usuarios", "action-usermerge": "fusionar usuarios", - "usermerge-autopagedelete": "Borrada automaticamente ao fusionar os usuarios", + "usermerge-autopagedelete": "Páxina borrada automaticamente ao fusionar os usuarios", "usermerge-page-unmoved": "A páxina \"$1\" non pode ser movida a \"$2\".", - "usermerge-move-log": "A páxina moveuse automaticamente cando se fusionou o usuario \"[[User:$1|$1]]\" con \"[[User:$2|{{GENDER:$2|$2}}]]\"" + "usermerge-move-log": "A páxina moveuse automaticamente cando se fusionou o usuario \"$1\" con \"[[User:$2|$2]]\"" } diff --git a/UserMerge/i18n/he.json b/UserMerge/i18n/he.json index 0ab3c12d..8b42dd5b 100644 --- a/UserMerge/i18n/he.json +++ b/UserMerge/i18n/he.json @@ -21,16 +21,16 @@ "usermerge-submit": "מיזוג משתמש", "usermerge-badtoken": "אסימון עריכה שגוי.", "usermerge-userdeleted": "$1 ($2) {{GENDER:$1|נמחק|נמחקה}}.", - "usermerge-userdeleted-log": "המשתמש נמחק: $2‏ ($3)", - "usermerge-success": "המיזוג מ־$1 ($2) ל־$3 ($4) בוצע בהצלחה.", - "usermerge-success-log": "ה{{GENDER:$2|משתמש|משתמשת}} $2‏ ($3) {{GENDER:$2|מוזג|מוזגה}} אל $4‏ ($5)", + "usermerge-userdeleted-log": "מחק את החשבון \"$2\" ($3)", + "usermerge-success": "המיזוג של $1 ($2) לתוך $3 ($4) הושלם.", + "usermerge-success-log": "החשבון \"$2\" ($3) מוזג לתוך \"[[User:$4|$4]]\" ($5)", "usermerge-logpage": "יומן מיזוג משתמשים", "usermerge-logpagetext": "זהו יומן של פעולות מיזוג המשתמשים.", "usermerge-noselfdelete": "לא ניתן למחוק או למזג מ{{GENDER:$1|עצמך}}!", - "usermerge-protectedgroup": "לא ניתן למזג מה{{GENDER:$1|משתמש|משתמשת}}: ה{{GENDER:$1|משתמש נמצא|משתמשת נמצאת}} בקבוצה מוגנת.", + "usermerge-protectedgroup": "לא ניתן למזג {{GENDER:$1|מהמשתמש|מהמשתמשת}}: {{GENDER:$1|המשתמש נמצא|המשתמשת נמצאת}} בקבוצה מוגנת.", "right-usermerge": "מיזוג משתמשים", "action-usermerge": "למזג משתמשים", - "usermerge-autopagedelete": "נמחק אוטומטית בזמן מיזוג חשבונות", + "usermerge-autopagedelete": "הדף נמחק אוטומטית בזמן מיזוג חשבונות", "usermerge-page-unmoved": "לא ניתן להעביר את הדף $1 לשם $2.", - "usermerge-move-log": "הדף הועבר אוטומטית בזמן מיזוג חשבון \"[[User:$1|$1]]\" אל \"[[User:$2|$2]]\"" + "usermerge-move-log": "הדף הועבר אוטומטית בזמן מיזוג חשבון \"$1\" אל \"[[User:$2|$2]]\"" } diff --git a/UserMerge/i18n/hu.json b/UserMerge/i18n/hu.json index 3b906f19..d51b5f04 100644 --- a/UserMerge/i18n/hu.json +++ b/UserMerge/i18n/hu.json @@ -2,15 +2,17 @@ "@metadata": { "authors": [ "Dani", - "Glanthor Reviol" + "Glanthor Reviol", + "Tacsipacsi" ] }, "usermerge": "Felhasználói fiókok összevonása és törlése", "usermerge-desc": "[[Special:UserMerge|Beolvasztja egy felhasználó közreműködéseit egy másikéba]] a wiki adatbázisában, majd törli a beolvasztott felhasználói fiókot. ''Szerkesztők egyesítése'' jogosultság kell hozzá", "usermerge-badolduser": "Érvénytelen régi felhasználói név", "usermerge-badnewuser": "Érvénytelen új felhasználói név", - "usermerge-nonewuser": "Üres új felhasználónév – feltételezett cél: „$1”<br />\nKattints a „{{int:usermerge-submit}}”-ra az elfogadáshoz.", + "usermerge-nonewuser": "Üres új felhasználónév. Feltételezett cél: „$1”<br />\nKattints a „{{int:usermerge-submit}}”-ra az elfogadáshoz.", "usermerge-noolduser": "A régi felhasználói név üres", + "usermerge-same-old-and-new-user": "A régi és az új felhasználónévnek különbözőnek kell lennie.", "usermerge-fieldset": "Összevonandó felhasználói nevek", "usermerge-olduser": "Régi felhasználói név (honnan):", "usermerge-newuser": "Új felhasználói név (hová):", @@ -18,12 +20,16 @@ "usermerge-submit": "Felhasználói fiók összevonása", "usermerge-badtoken": "Érvénytelen szerkesztési token", "usermerge-userdeleted": "„$1” ($2) törölve.", - "usermerge-userdeleted-log": "Törölt felhasználó: $2 ($3)", + "usermerge-userdeleted-log": "törölte a(z) „$2” ($3) felhasználói fiókot", "usermerge-success": "„$1” ($2) fiók beolvasztása a(z) „$3” ($4) felhasználói fiókba elkészült.", - "usermerge-success-log": "„$2” ($3) felhasználó beolvasztva a(z) „$4” ($5) felhasználói fiókba", + "usermerge-success-log": "„$2” ($3) felhasználó beolvasztva a(z) „[[User:$4|$4]]” ($5) felhasználói fiókba", "usermerge-logpage": "Felhasználói nevek egyesítésének naplója", "usermerge-logpagetext": "Ez a felhasználó nevek összevonásának naplója.", - "usermerge-noselfdelete": "Nem tudsz törölni vagy összevonni a saját fiókodból!", - "usermerge-protectedgroup": "Nem lehetséges beolvasztani a felhasználói fiókot – a felhasználó védett csoportban van.", - "right-usermerge": "szerkesztők egyesítése" + "usermerge-noselfdelete": "Nem tudsz törölni vagy összevonni a saját {{GENDER:$1|fiókodból}}!", + "usermerge-protectedgroup": "Nem lehet beolvasztani a felhasználói fiókot: a {{GENDER:$1|felhasználó}} védett csoportban van.", + "right-usermerge": "szerkesztők egyesítése", + "action-usermerge": "felhasználók összevonása", + "usermerge-autopagedelete": "Lap automatikusan törölve a felhasználók összevonása közben", + "usermerge-page-unmoved": "A(z) $1 lap nem mozgatható $2 címre.", + "usermerge-move-log": "Lap automatikusan átmozgatva „$1” „[[User:$2|$2]]” felhasználóba történő összevonása közben" } diff --git a/UserMerge/i18n/io.json b/UserMerge/i18n/io.json new file mode 100644 index 00000000..9f6d1014 --- /dev/null +++ b/UserMerge/i18n/io.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Joao Xavier" + ] + }, + "usermerge-noolduser": "Anciena uzeronomo vakua.", + "usermerge-page-unmoved": "La pagino $1 ne povas rinomizesar \"$2\"." +} diff --git a/UserMerge/i18n/is.json b/UserMerge/i18n/is.json new file mode 100644 index 00000000..e0d6875e --- /dev/null +++ b/UserMerge/i18n/is.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Sveinn í Felli" + ] + }, + "usermerge-userdeleted": "$1 ($2) hefur verið eytt.", + "right-usermerge": "Sameina notendur", + "action-usermerge": "sameina notendur", + "usermerge-page-unmoved": "Ekki var hægt að færa síðuna $1 á $2." +} diff --git a/UserMerge/i18n/it.json b/UserMerge/i18n/it.json index 820f3259..96a51b6a 100644 --- a/UserMerge/i18n/it.json +++ b/UserMerge/i18n/it.json @@ -20,17 +20,17 @@ "usermerge-deleteolduser": "Cancella vecchio utente", "usermerge-submit": "Unisci utente", "usermerge-badtoken": "Token di modifica non valido.", - "usermerge-userdeleted": "$1 ($2) è {{GENDER:$1|stato cancellato|stata cancellata}}.", - "usermerge-userdeleted-log": "Utente cancellato: $2 ($3)", - "usermerge-success": "L'unione di {{GENDER:$1|$1}} ($2) a {{GENDER:$3|$3}} ($4) è completa.", - "usermerge-success-log": "Utente $2 ($3) {{GENDER:$2|unito|unita}} a {{GENDER:$4|$4}} ($5)", + "usermerge-userdeleted": "$1 ($2) è stato cancellato.", + "usermerge-userdeleted-log": "cancellato l'utenza \"$2\" ($3)", + "usermerge-success": "L'unione di $1 ($2) a $3 ($4) è completa.", + "usermerge-success-log": "unito l'utente \"$2\" ($3) in \"[[User:$4|$4]]\" ($5)", "usermerge-logpage": "Unioni delle utenze", "usermerge-logpagetext": "Di seguito sono elencate le azioni di unione di utenti.", "usermerge-noselfdelete": "Non puoi cancellare o unire la {{GENDER:$1|tua}} stessa utenza!", - "usermerge-protectedgroup": "Impossibile unire da {{GENDER:$1|questo|questa}} utente - l'utente fa parte di un gruppo protetto.", + "usermerge-protectedgroup": "Impossibile unire da {{GENDER:$1|questo|questa}} utente: l'utente fa parte di un gruppo protetto.", "right-usermerge": "Unisce utenti", "action-usermerge": "unire utenti", - "usermerge-autopagedelete": "Cancellata automaticamente quando si uniscono gli utenti", + "usermerge-autopagedelete": "Cancellata automaticamente durante l'unione di utenti", "usermerge-page-unmoved": "La pagina $1 non può essere spostata a $2.", - "usermerge-move-log": "Pagina spostata automaticamente durante l'unione dell'utente \"[[User:$1|$1]]\" a \"[[User:$2|{{GENDER:$2|$2}}]]\"" + "usermerge-move-log": "Spostata automaticamente la pagina durante l'unione dell'utente \"$1\" a \"[[User:$2|$2]]\"" } diff --git a/UserMerge/i18n/ja.json b/UserMerge/i18n/ja.json index 4acb0199..256f08b4 100644 --- a/UserMerge/i18n/ja.json +++ b/UserMerge/i18n/ja.json @@ -6,7 +6,8 @@ "Fryed-peach", "Mzm5zbC3", "Shirayuki", - "Azeha" + "Azeha", + "Omotecho" ] }, "usermerge": "利用者の統合と削除", @@ -22,17 +23,17 @@ "usermerge-deleteolduser": "旧利用者を削除", "usermerge-submit": "利用者の統合", "usermerge-badtoken": "編集トークンが無効です。", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) は削除されました。", - "usermerge-userdeleted-log": "利用者: $2 ($3) を削除しました", - "usermerge-success": "{{GENDER:$1|$1}} ($2) の {{GENDER:$3|$3}} ($4) への統合が完了しました。", - "usermerge-success-log": "利用者 {{GENDER:$2|$2}} ($3) を {{GENDER:$4|$4}} ($5) へ統合しました", + "usermerge-userdeleted": "$1 ($2) は削除されました。", + "usermerge-userdeleted-log": "利用者アカウント「$2」 ($3) を削除しました", + "usermerge-success": "$1 ($2) の $3 ($4) への統合が完了しました。", + "usermerge-success-log": "利用者「$2」($3) を「[[User:$4|$4]]」($5) へ統合しました", "usermerge-logpage": "利用者統合記録", "usermerge-logpagetext": "これは、利用者の統合を記録したものです。", "usermerge-noselfdelete": "{{GENDER:$1|自分自身}}の削除や{{GENDER:$1|自分自身}}との統合はできません。", "usermerge-protectedgroup": "{{GENDER:$1|利用者}}を統合できません: この利用者は被保護グループに属しています。", "right-usermerge": "利用者を統合", "action-usermerge": "利用者の統合", - "usermerge-autopagedelete": "利用者の統合と共に自動的に削除しました", + "usermerge-autopagedelete": "利用者の統合と共に自動的にページを削除しました", "usermerge-page-unmoved": "ページ「$1」を「$2」に移動できませんでした。", - "usermerge-move-log": "統合と共に「[[User:$1|$1]]」を「[[User:$2|{{GENDER:$2|$2}}]]」へ自動的に移動しました" + "usermerge-move-log": "統合と共にアカウント「$1」を「[[User:$2|$2]]」へ自動的に移動しました" } diff --git a/UserMerge/i18n/ko.json b/UserMerge/i18n/ko.json index 0db9c5a7..de93be72 100644 --- a/UserMerge/i18n/ko.json +++ b/UserMerge/i18n/ko.json @@ -3,7 +3,8 @@ "authors": [ "Kwj2772", "아라", - "Hwangjy9" + "Hwangjy9", + "Ykhwong" ] }, "usermerge": "사용자 합치기 및 삭제", @@ -19,17 +20,17 @@ "usermerge-deleteolduser": "이전 사용자를 삭제하기", "usermerge-submit": "사용자 합치기", "usermerge-badtoken": "잘못된 편집 토큰", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2)님이 삭제되었습니다.", - "usermerge-userdeleted-log": "님이 사용자: $2 ($3) 계정을 삭제했습니다", - "usermerge-success": "{{GENDER:$1|$1}} ($2)님을 {{GENDER:$3|$3}} ($4)에 합치는 것을 완료했습니다.", - "usermerge-success-log": "님이 {{GENDER:$2|$2}} ($3) 사용자를 {{GENDER:$4|$4}} ($5) 계정으로 합쳤습니다", + "usermerge-userdeleted": "$1 ($2)님이 삭제되었습니다.", + "usermerge-userdeleted-log": "님이 \"$2\" ($3) 사용자 계정을 삭제했습니다", + "usermerge-success": "$1 ($2)님을 $3 ($4)에 합치는 것을 완료했습니다.", + "usermerge-success-log": "님이 \"$2\" ($3) 계정을 \"[[User:$4|$4]]\" ($5) 계정으로 합쳤습니다", "usermerge-logpage": "사용자 병합 기록", "usermerge-logpagetext": "사용자 병합 동작의 기록입니다.", "usermerge-noselfdelete": "{{GENDER:$1|자신}}으로부터 삭제나 합치기를 할 수 없습니다!", "usermerge-protectedgroup": "{{GENDER:$1|사용자}}로부터 합칠 수 없습니다: 사용자는 보호된 그룹에 있습니다.", "right-usermerge": "사용자 합치기", "action-usermerge": "사용자 합치기", - "usermerge-autopagedelete": "사용자를 합칠 때 자동으로 삭제했습니다", + "usermerge-autopagedelete": "사용자를 합치는 동안 자동으로 문서를 삭제했습니다", "usermerge-page-unmoved": "$1 문서를 $2 문서로 이동하지 못했습니다.", - "usermerge-move-log": "\"[[User:$1|$1]]\" 사용자를 \"[[User:$2|{{GENDER:$2|$2}}]]\"(으)로 합치면서 문서를 자동으로 이동했습니다" + "usermerge-move-log": "\"$1\" 계정을 \"[[User:$2|$2]]\"(으)로 합치면서 문서를 자동으로 이동했습니다" } diff --git a/UserMerge/i18n/lb.json b/UserMerge/i18n/lb.json index 54fa0e81..bfea9173 100644 --- a/UserMerge/i18n/lb.json +++ b/UserMerge/i18n/lb.json @@ -19,17 +19,17 @@ "usermerge-deleteolduser": "Ale Benotzer läschen", "usermerge-submit": "Benotzerkonten zesummeféieren", "usermerge-badtoken": "Ännerungs-Jeton net valabel", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) gouf geläscht.", - "usermerge-userdeleted-log": "Geläschte Benotzer: $2($3)", + "usermerge-userdeleted": "$1 ($2) gouf geläscht.", + "usermerge-userdeleted-log": "huet de Benotzerkont \"$2\" ($3) geläscht", "usermerge-success": "D'Zesummeféierung vum {{GENDER:$1|$1}} ($2) op {{GENDER:$3|$3}} ($4) ass net komplett.", - "usermerge-success-log": "Benotzer {{GENDER:$2|$2}} ($3) gouf zesummegeféiert mat {{GENDER:$4|$4}} ($5)", + "usermerge-success-log": "huet de Benotzer \"$2\" ($3) zesummegeféiert mam \"[[User:$4|$4]]\" ($5)", "usermerge-logpage": "Lëscht vun de Benotzerkonten déi zesummegeféiert goufen", "usermerge-logpagetext": "Dëst ass eng Lëscht vun de Benotzerkonten, déi zesummegeféiert goufen.", "usermerge-noselfdelete": "Dir kënnt {{GENDER:$1|Iech net selwer}} läschen oder mat {{GENDER:$1|Iech selwer}} zesummeféieren!", - "usermerge-protectedgroup": "D'Zesammenféierung vum {{GENDER:$1|Benotzer}} ass net méiglech: De Benotzer ass an engem geschützte Grupp.", + "usermerge-protectedgroup": "D'Zesummenféierung vum {{GENDER:$1|Benotzer}} ass net méiglech: De Benotzer ass an engem geschützte Grupp.", "right-usermerge": "Benotzer zesummeféieren", "action-usermerge": "Benotzer zesummeféieren", "usermerge-autopagedelete": "Automatesch geläscht wéi d'Benotzer zesummegeluecht goufen", "usermerge-page-unmoved": "D'Säit $1 konnt net op $2 geréckelt ginn.", - "usermerge-move-log": "D'Säit gouf automatesch geréckelt wéi de Benotzer \"[[User:$1|$1]]\" mam \"[[User:$2|$2{{GENDER:$2|$2}}]]\" zesummegeluecht gouf" + "usermerge-move-log": "D'Säit gouf automatesch geréckelt wéi de Benotzer \"$1\" mam \"[[User:$2|$2]]\" zesummegeluecht gouf" } diff --git a/UserMerge/i18n/lt.json b/UserMerge/i18n/lt.json new file mode 100644 index 00000000..9ae32f8b --- /dev/null +++ b/UserMerge/i18n/lt.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Manvydasz" + ] + }, + "usermerge-page-unmoved": "Puslapis $1 negali būti pervadintas į $2." +} diff --git a/UserMerge/i18n/my.json b/UserMerge/i18n/my.json new file mode 100644 index 00000000..b17487c2 --- /dev/null +++ b/UserMerge/i18n/my.json @@ -0,0 +1,18 @@ +{ + "@metadata": { + "authors": [ + "Dr Lotus Black" + ] + }, + "usermerge": "အသုံးပြုသူများကို ပေါင်းစပ်/ဖျက်ပစ်ရန်", + "usermerge-badolduser": "မဆီလျော်သော အသုံးပြုသူအမည်ဟောင်း။", + "usermerge-badnewuser": "မဆီလျော်သော အသုံးပြုသူအမည်သစ်။", + "usermerge-fieldset": "ပေါင်းစပ်ရန် အသုံးပြုသူအမည်များ", + "usermerge-submit": "အသုံးပြုသူ ပေါင်းစပ်ရန်", + "usermerge-userdeleted": "$1 ($2) ကို ဖျက်လိုက်ပြီ။", + "usermerge-success": "$1 ($2) မှ $3 ($4) သို့ ပေါင်းစပ်ခြင်း အောင်မြင်သည်။", + "usermerge-logpage": "အသုံးပြုသူ ပေါင်းစပ်ခြင်း မှတ်တမ်း", + "usermerge-logpagetext": "အသုံးပြုသူ ပေါင်းစပ်ခြင်း လုပ်ဆောင်ချက်များအတွက် မှတ်တမ်းဖြစ်သည်။", + "right-usermerge": "အသုံးပြုသူများ ပေါင်းစပ်ရန်", + "usermerge-page-unmoved": "စာမျက်နှာ $1 ကို $2 သို့ မရွေ့ပြောင်းနိုင်ခဲ့ပါ။" +} diff --git a/UserMerge/i18n/nb.json b/UserMerge/i18n/nb.json index 4dff2d7c..cf7d5a65 100644 --- a/UserMerge/i18n/nb.json +++ b/UserMerge/i18n/nb.json @@ -18,18 +18,18 @@ "usermerge-newuser": "Nytt brukernavn (slå sammen til):", "usermerge-deleteolduser": "Slett gammel bruker", "usermerge-submit": "Slå sammen brukere", - "usermerge-badtoken": "Ugyldig redigeringstegn", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) har blitt slettet.", - "usermerge-userdeleted-log": "Slettet bruker: $2 ($3)", - "usermerge-success": "Sammenslåing fra {{GENDER:$1|$1}} ($2) til {{GENDER:$3|$3}} ($4) er fullført.", - "usermerge-success-log": "Brukeren {{GENDER:$2|$2}} ($3) slått sammen med {{GENDER:$4|$4}} ($5)", + "usermerge-badtoken": "Ugyldig redigeringsnøkkel.", + "usermerge-userdeleted": "$1 ($2) har blitt slettet.", + "usermerge-userdeleted-log": "slettet brukerkontoen «$2» ($3)", + "usermerge-success": "Sammenslåing fra $1 ($2) til $3 ($4) er fullført.", + "usermerge-success-log": "slo brukerkontoen «$2» ($3) sammen med «[[User:$4|$4]]» ($5)", "usermerge-logpage": "Brukersammenslåingslogg", "usermerge-logpagetext": "Dette er en logg over brukersammenslåinger.", "usermerge-noselfdelete": "Du kan ikke slette eller slå sammen {{GENDER:$1|din}} egen konto!", - "usermerge-protectedgroup": "Kan ikke slå sammen den gamle {{GENDER:$1|kontoen}}: Brukeren er medlem i en beskyttet brukergruppe.", + "usermerge-protectedgroup": "Kunne ikke slå sammen den gamle {{GENDER:$1|kontoen}}: Brukeren er medlem i en beskyttet brukergruppe.", "right-usermerge": "Slå sammen kontoer", "action-usermerge": "slå sammen brukere", - "usermerge-autopagedelete": "Automatisk slettet ved brukersammenslåing", - "usermerge-page-unmoved": "Side $1 kunne ikke flyttes til $2.", - "usermerge-move-log": "Flyttet siden automatisk i forbindelse med sammenslåing av bruker \"[[User:$1|$1]]\" til \"[[User:$2|{{GENDER:$2|$2}}]]\"" + "usermerge-autopagedelete": "Siden ble automatisk slettet ved kontosammenslåing", + "usermerge-page-unmoved": "Siden $1 kunne ikke flyttes til $2.", + "usermerge-move-log": "Flyttet siden automatisk i forbindelse med sammenslåing av kontoen «$1» til «[[User:$2|$2]]»" } diff --git a/UserMerge/i18n/pl.json b/UserMerge/i18n/pl.json index 2cb7fc49..593b0dcd 100644 --- a/UserMerge/i18n/pl.json +++ b/UserMerge/i18n/pl.json @@ -34,7 +34,7 @@ "usermerge-protectedgroup": "Nie można zintegrować {{GENDER:$1|użytkownika|użytkowniczki}} – jest członkiem zabezpieczonej grupy.", "right-usermerge": "Łączenie kont użytkowników", "action-usermerge": "łączenie kont użytkowników", - "usermerge-autopagedelete": "Automatycznie usuwane podczas scalania użytkowników", + "usermerge-autopagedelete": "Automatycznie usuwane strony podczas scalania użytkowników", "usermerge-page-unmoved": "Strona $1 nie mogła zostać przeniesiona pod nazwę $2.", "usermerge-move-log": "Automatyczne przeniesiono stronę po zmianie nazwy konta z \"[[User:$1|$1]]\" na \"[[User:$2|$2]]\"" } diff --git a/UserMerge/i18n/pt-br.json b/UserMerge/i18n/pt-br.json index 768f35b6..d3cfd4b2 100644 --- a/UserMerge/i18n/pt-br.json +++ b/UserMerge/i18n/pt-br.json @@ -11,7 +11,8 @@ "Araceletorres", "Opraco", "!Silent", - "Felipe L. Ewald" + "Felipe L. Ewald", + "Eduardo Addad de Oliveira" ] }, "usermerge": "Fusão e eliminação de utilizadores", @@ -28,16 +29,16 @@ "usermerge-submit": "Fundir usuário", "usermerge-badtoken": "Token de edição inválido.", "usermerge-userdeleted": "$1 ($2) foi eliminado.", - "usermerge-userdeleted-log": "Usuário apagado: $2 ($3)", - "usermerge-success": "Fusão de $1 ($2) para $3 ($4) está completa.", - "usermerge-success-log": "Usuário $2 ($3) fundido com {{GENDER:$4|$4}} ($5)", + "usermerge-userdeleted-log": "apagou a conta do usuário \"$2\" ($3)", + "usermerge-success": "A fusão de $1 ($2) com $3 ($4) está completa.", + "usermerge-success-log": "a conta \"$2\" ($3) foi fundida no usuário \"[[User:$4|$4]]\" ($5)", "usermerge-logpage": "Registro de fusão de usuários", "usermerge-logpagetext": "Este é um registro de ações de fusão de utilizadores.", "usermerge-noselfdelete": "Não pode apagar ou fundir a sua {{GENDER:$1|própria}} conta!", "usermerge-protectedgroup": "Não é possível fundir a conta {{GENDER:$1|deste usuário|desta usuária}}: {{GENDER:$1|o usuário|a usuária}} está num grupo protegido.", "right-usermerge": "Fundir usuários", "action-usermerge": "fundir usuários", - "usermerge-autopagedelete": "Excluída automaticamente ao fundir usuários", + "usermerge-autopagedelete": "Página eliminada automaticamente ao fundir usuários", "usermerge-page-unmoved": "A página $1 não pode ser movida para $2.", - "usermerge-move-log": "Página movida automaticamente ao fundir {{GENDER:$1|o usuário|os usuários}} \"[[User:$1|$1]]\" com \"[[User:$2|$2]]\"" + "usermerge-move-log": "Página movida automaticamente ao fundir a conta \"$1\" no usuário\"[[User:$2|$2]]\"" } diff --git a/UserMerge/i18n/pt.json b/UserMerge/i18n/pt.json index 5b91108c..41964197 100644 --- a/UserMerge/i18n/pt.json +++ b/UserMerge/i18n/pt.json @@ -11,7 +11,9 @@ "Waldir", "Vitorvicentevalente", "Helder.wiki", - "He7d3r" + "He7d3r", + "MokaAkashiyaPT", + "Athena in Wonderland" ] }, "usermerge": "Fusão e eliminação de utilizadores", @@ -27,17 +29,17 @@ "usermerge-deleteolduser": "Apagar utilizador antigo", "usermerge-submit": "Fundir utilizador", "usermerge-badtoken": "Chave de edição inválida.", - "usermerge-userdeleted": "$1 ($2) foi {{GENDER:$1|eliminado|eliminada|eliminado(a)}}.", - "usermerge-userdeleted-log": "Utilizador apagado: $2 ($3)", - "usermerge-success": "A fusão de {{GENDER:$1|$1}} ($2) com {{GENDER:$3|$3}} ($4) está completa.", - "usermerge-success-log": "Conta de {{GENDER:$2|utilizador $2|utilizadora $2}} ($3) fundida com {{GENDER:$4|$4}} ($5)", + "usermerge-userdeleted": "$1 ($2) foi eliminado.", + "usermerge-userdeleted-log": "apagou a conta do utilizador \"$2\" ($3)", + "usermerge-success": "A fusão de $1 ($2) com $3 ($4) está completa.", + "usermerge-success-log": "a conta \"$2\" ($3) foi fundida no utilizador \"[[User:$4|$4]]\" ($5)", "usermerge-logpage": "Registo de fusão de utilizadores", "usermerge-logpagetext": "Este é um registo de ações de fusão de utilizadores.", "usermerge-noselfdelete": "Não pode apagar ou fundir a sua {{GENDER:$1|própria}} conta!", "usermerge-protectedgroup": "Não é possível fundir a conta {{GENDER:$1|deste utilizador|desta utilizadora}}: {{GENDER:$1|o utilizador|a utilizadora}} está num grupo protegido.", "right-usermerge": "Fundir utilizadores", "action-usermerge": "fundir utilizadores", - "usermerge-autopagedelete": "Eliminada automaticamente ao fundir utilizadores", + "usermerge-autopagedelete": "Página eliminada automaticamente ao fundir utilizadores", "usermerge-page-unmoved": "Não foi possível mover a página $1 para $2.", - "usermerge-move-log": "Página movida automaticamente ao fundir {{GENDER:$1|o utilizador|a utilizadora|o(a) utilizador(a)}} \"[[User:$1|$1]]\" com \"[[User:$2|$2]]\"" + "usermerge-move-log": "Página movida automaticamente ao fundir a conta \"$1\" no utilizador \"[[User:$2|$2]]\"" } diff --git a/UserMerge/i18n/qqq.json b/UserMerge/i18n/qqq.json index 07640ef7..fde37cc5 100644 --- a/UserMerge/i18n/qqq.json +++ b/UserMerge/i18n/qqq.json @@ -26,9 +26,7 @@ "usermerge-submit": "Used in {{msg-mw|Usermerge-nonewuser}}.\n{{Identical|Merge user}}", "usermerge-badtoken": "Used as error message if the Edit Token is invalid.", "usermerge-userdeleted": "Status message. Parameters:\n* $1 is the name of a user that was deleted (not linked).\n* $2 is the ID of a user that was deleted.", - "usermerge-userdeleted-log": "Parameters:\n* $2 is a user name (not linked) of the deleted user\n* $3 is a user ID of the deleted user", "usermerge-success": "Status message. Parameters:\n* $1 is a user name (not linked) that is merged into another user\n* $2 is a user ID of the source user\n* $3 is a user name (not linked) that the other user is merged into; can be used for GENDER\n* $4 is a user ID of the target user", - "usermerge-success-log": "Parameters:\n* $1 - (Unused)\n* $2 - a user name (not linked) that is merged into another user\n* $3 - a user ID of the source user\n* $4 - a user name (not linked) that the other user is merged into; can be used for GENDER\n* $5 - a user ID of the target user", "usermerge-logpage": "{{doc-logpage}}", "usermerge-logpagetext": "Used as heading in [[Special:Log/usermerge]].", "usermerge-noselfdelete": "Used as error message when merging users. Parameters:\n* $1 - the current user's name, for GENDER", @@ -37,5 +35,10 @@ "action-usermerge": "{{doc-action|usermerge}}\n{{Identical|Merge user}}", "usermerge-autopagedelete": "Used as reason for deleting page.", "usermerge-page-unmoved": "Used as failure message when moving a page. Parameters:\n* $1 - old page title (with link)\n* $2 - new page title (with link)\nSee also:\n* {{msg-mw|Usermerge-page-moved}}", - "usermerge-move-log": "Parameters:\n* $1 - old username\n* $2 - new username" + "usermerge-move-log": "Parameters:\n* $1 - old username\n* $2 - new username", + "logentry-usermerge-mergeuser": "Message template for Special:Log when a user was merged into another one. Parameters:\n* $1 - The performer of the merge as a user link with actions (talk, contribs, block)\n* $2 - The username of the performer as a plain string.\n* $3 - (unused)\n* $4 - The username of the merged user as a plain string.\n* $5 - The user id of the merged user.\n* $6 - The username of the target user as a user page link.\n* $7 - The user id of the target user.\n* $8 - The username of the target user as a plain string.", + "logentry-usermerge-deleteuser": "Message template for Special:Log when a user was deleted. Parameters:\n* $1 - The performer of the deletion as a user link with actions (talk, contribs, block)\n* $2 - The username of the performer as a plain string.\n* $3 - (unused)\n* $4 - The username of the deleted user as a plain string.\n* $5 - The user id of the deleted user.", + "log-action-filter-usermerge": "{{doc-log-action-filter-type|usermerge}}\n{{Related|Log-action-filter}}", + "log-action-filter-usermerge-mergeuser": "{{doc-log-action-filter-action|usermerge|mergeuser}}", + "log-action-filter-usermerge-deleteuser": "{{doc-log-action-filter-action|usermerge|deleteuser}}" } diff --git a/UserMerge/i18n/ru.json b/UserMerge/i18n/ru.json index d599e066..c470fcdc 100644 --- a/UserMerge/i18n/ru.json +++ b/UserMerge/i18n/ru.json @@ -8,7 +8,8 @@ "Kaganer", "Okras", "Ole Yves", - "Александр Сигачёв" + "Александр Сигачёв", + "Movses" ] }, "usermerge": "Объединение и удаление учётных записей", @@ -25,16 +26,16 @@ "usermerge-submit": "Объединить участников", "usermerge-badtoken": "Недействительный маркер правки", "usermerge-userdeleted": "$1 ($2) {{GENDER:$1|был удалён|была удалена}}.", - "usermerge-userdeleted-log": "Удалён участник $2 ($3)", - "usermerge-success": "Объединение {{GENDER:$1|$1}} ($2) с {{GENDER:$3|$3}} ($4) завершено.", - "usermerge-success-log": "Учётная запись {{GENDER:$2|участника|участницы}} $2 ($3) {{GENDER:$2|присоединён|присоединена}} к {{GENDER:$4|$4}} ($5)", + "usermerge-userdeleted-log": "удалена учётная запись участника «$2» ($3)", + "usermerge-success": "Объединение $1 ($2) с $3 ($4) завершено.", + "usermerge-success-log": "Учётная запись {{GENDER:$2|участника|участницы}} $2 ($3) присоединена к учётной записи {{GENDER:$4|участника|участницы}} \"[[User:$4|$4]]\" ($5)", "usermerge-logpage": "Журнал объединения участников", "usermerge-logpagetext": "Это журнал объединения учётных записей.", "usermerge-noselfdelete": "Вы не можете удалять или объединять {{GENDER:$1|себя самого}}!", "usermerge-protectedgroup": "Невозможно объединить {{GENDER:$1|участников}} — участник относится к защищённой группе.", "right-usermerge": "объединение участников", "action-usermerge": "объединение участников", - "usermerge-autopagedelete": "Автоматически удаляются при объединении пользователей", + "usermerge-autopagedelete": "Автоматически удалённая страница при объединении участников", "usermerge-page-unmoved": "Страница $1 не может быть переименована в $2.", - "usermerge-move-log": "Автоматически переименовано во время объединения учетной записи «[[User:$1|$1]]» с «[[User:$2|{{GENDER:$2|$2}}]]»" + "usermerge-move-log": "Автоматически переименованная страница во время объединения учётной записи «$1» с «[[User:$2|$2]]»" } diff --git a/UserMerge/i18n/sl.json b/UserMerge/i18n/sl.json index 3cdb129c..37358a94 100644 --- a/UserMerge/i18n/sl.json +++ b/UserMerge/i18n/sl.json @@ -17,17 +17,17 @@ "usermerge-deleteolduser": "Izbriši starega uporabnika", "usermerge-submit": "Spoji uporabnika", "usermerge-badtoken": "Neveljavni žeton urejanja", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) smo izbrisali.", - "usermerge-userdeleted-log": "Izbrisal(-a) uporabnika: $2 ($3)", - "usermerge-success": "Združitev iz {{GENDER:$1|$1}} ($2) v {{GENDER:$3|$3}} ($4) je končana.", - "usermerge-success-log": "{{GENDER:$2|Uporabnika|Uporabnico}} $2 ($3) smo spojili z {{GENDER:$4|$4}} ($5)", + "usermerge-userdeleted": "$1 ($2) smo izbrisali.", + "usermerge-userdeleted-log": "izbrisal(-a) uporabnika »$2« ($3)", + "usermerge-success": "Združitev iz $1 ($2) v $3 ($4) je končana.", + "usermerge-success-log": "spojil(-a) račun »$2« ($3) z »[[User:$4|$4]]« ($5)", "usermerge-logpage": "Dnevnik spajanja uporabnikov", "usermerge-logpagetext": "To je dnevnik dejanj spajanja uporabnikov.", "usermerge-noselfdelete": "Ne morete izbrisati ali združevati {{GENDER:$1|sebe}}!", "usermerge-protectedgroup": "Ne morem združiti {{GENDER:$1|uporabnika|uporabnice}} – {{GENDER:$1|uporabnik|uporabnica}} je v zaščiteni skupini.", "right-usermerge": "Spajanje uporabnikov", "action-usermerge": "spajanje uporabnikov", - "usermerge-autopagedelete": "Samodejno izbrisano med združevanjem uporabnikov", + "usermerge-autopagedelete": "Samodejno izbrisana stran med združevanjem uporabnikov", "usermerge-page-unmoved": "Strani $1 ni bilo mogoče prestaviti na $2.", - "usermerge-move-log": "Samodejno prestavljena stran med združevanjem uporabnika »[[User:$1|$1]]« z »[[User:$2|{{GENDER:$2|$2}}]]«" + "usermerge-move-log": "Samodejno prestavljena stran med združevanjem računa »$1« z »[[User:$2|$2]]«" } diff --git a/UserMerge/i18n/sr-ec.json b/UserMerge/i18n/sr-ec.json index 90a7336b..ac7fd751 100644 --- a/UserMerge/i18n/sr-ec.json +++ b/UserMerge/i18n/sr-ec.json @@ -4,33 +4,35 @@ "Milicevic01", "Rancher", "Жељко Тодоровић", - "Михајло Анђелковић" + "Михајло Анђелковић", + "BadDog", + "Zoranzoki21" ] }, "usermerge": "Обједињавање и брисање налога", "usermerge-desc": "[[Special:UserMerge|Преноси доприносе једног корисника на другог]] у бази викија; биће избрисани и стари корисници. Потребно је право ''usermerge''.", - "usermerge-badolduser": "Неисправно старо корисничко име.", + "usermerge-badolduser": "Неважеће старо корисничко име.", "usermerge-badnewuser": "Неисправно ново корисничко име.", - "usermerge-nonewuser": "Ново корисничко име је празно. Предложено је обједињавање са „{{GENDER:$1|$1}}“.<br />\nКликните на „{{int:usermerge-submit}}“ да бисте прихватили.", + "usermerge-nonewuser": "Ново корисничко име је празно. Претпостављам са се спаја на „{{GENDER:$1|$1}}“.<br />\nКликните на „{{int:usermerge-submit}}“ да бисте прихватили.", "usermerge-noolduser": "Старо корисничко име је празно.", "usermerge-same-old-and-new-user": "Ново име налога се мора разликовати од старог.", "usermerge-fieldset": "Налози за обједињавање", "usermerge-olduser": "Стари налог:", "usermerge-newuser": "Нови налог:", "usermerge-deleteolduser": "Избриши стари налог", - "usermerge-submit": "Обједини налоге", - "usermerge-badtoken": "Неисправан токен измене.", + "usermerge-submit": "Споји корисника", + "usermerge-badtoken": "Неважећи токен измене.", "usermerge-userdeleted": "$1 ($2) је {{GENDER:$1|избрисан|избрисана}}.", - "usermerge-userdeleted-log": "Избрисан корисник: $2 ($3)", - "usermerge-success": "Обједињавање корисника {{GENDER:$1|$1}} ($2) и {{GENDER:$3|$3}} ($4) је завршено.", - "usermerge-success-log": "Налози корисника $2 ($3) и $4 ($5) су обједињени.", - "usermerge-logpage": "Дневник обједињавања налога", - "usermerge-logpagetext": "Ово је дневник обједињавања налога.", + "usermerge-userdeleted-log": "избрисан кориснички налог: „$2“ ($3)", + "usermerge-success": "Обједињавање корисника $1 ($2) и $3 ($4) је завршено.", + "usermerge-success-log": "Налози корисника $2 ($3) и \"[[User:$4|$4]]\" ($5) су обједињени.", + "usermerge-logpage": "Дневник спајања корисника", + "usermerge-logpagetext": "Ово је дневник радња спајања корисника.", "usermerge-noselfdelete": "Не можете избрисати или објединити {{GENDER:$1|сами себе}}!", - "usermerge-protectedgroup": "Не могу да објединим налоге {{GENDER:$1|корисника|кориснице}} јер је у заштићеној групи.", - "right-usermerge": "обједињавање налога", - "action-usermerge": "обједињавање налога", + "usermerge-protectedgroup": "Не могу да објединим налоге {{GENDER:$1|корисника|кориснице}}: Корисник је у заштићеној групи.", + "right-usermerge": "спајање корисника", + "action-usermerge": "спајате кориснике", "usermerge-autopagedelete": "Аутоматски се брише при обједињавању налога.", "usermerge-page-unmoved": "Не могу да преместим страницу $1 у $2.", - "usermerge-move-log": "Аутоматски премештено при обједињавању налога „[[User:$1|$1]]“ и „[[User:$2|$2]]“." + "usermerge-move-log": "Аутоматски премештено при обједињавању налога „$1“ и „[[User:$2|$2]]“." } diff --git a/UserMerge/i18n/sv.json b/UserMerge/i18n/sv.json index 8e8e68c1..a19db006 100644 --- a/UserMerge/i18n/sv.json +++ b/UserMerge/i18n/sv.json @@ -23,17 +23,17 @@ "usermerge-deleteolduser": "Ta bort den gamla användaren", "usermerge-submit": "Förena konton", "usermerge-badtoken": "Ogiltigt redigeringstecken", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) har raderats.", - "usermerge-userdeleted-log": "Raderad användare: $2 ($3)", - "usermerge-success": "Sammanslagning från {{GENDER:$1|$1}} ($2) till {{GENDER:$3|$3}} ($4) är slutfört.", - "usermerge-success-log": "Användare {{GENDER:$2|$2}} ($3) slogs samman med {{GENDER:$4|$4}} ($5)", + "usermerge-userdeleted": "$1 ($2) har raderats.", + "usermerge-userdeleted-log": "raderade användarkontot \"$2\" ($3)", + "usermerge-success": "Sammanslagning från $1 ($2) till $3 ($4) har slutförts.", + "usermerge-success-log": "slog samman användare \"$2\" ($3) med \"[[User:$4|$4]]\" ($5)", "usermerge-logpage": "Användarsammanslagningslogg", "usermerge-logpagetext": "Det här är en logg över sammanslagningar av användarkonton.", "usermerge-noselfdelete": "Du kan inte radera eller slå samman {{GENDER:$1|ditt}} eget konto!", "usermerge-protectedgroup": "Kan inte sammanfoga från {{GENDER:$1|användaren}}: Användaren är medlem i en skyddad användargrupp.", "right-usermerge": "Slå ihop användarkonton", "action-usermerge": "slå ihop användarkonton", - "usermerge-autopagedelete": "Ta bort automatiskt när användare slås ihop", + "usermerge-autopagedelete": "Ta bort sida automatiskt när användare sammanfogas", "usermerge-page-unmoved": "Sidan $1 kan inte tas bort till $2", - "usermerge-move-log": "Ta automatiskt bort sidan när du slår ihop användare \"[[User:$1|$1]]\" med \"[[User:$2|{{GENDER:$2|$2}}]]\"" + "usermerge-move-log": "Ta automatiskt bort sidan när du slår ihop användare \"$1\" med \"[[User:$2|]]\"" } diff --git a/UserMerge/i18n/ur.json b/UserMerge/i18n/ur.json new file mode 100644 index 00000000..90eaf0dd --- /dev/null +++ b/UserMerge/i18n/ur.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "Zainab Meher", + "BukhariSaeed" + ] + }, + "usermerge-userdeleted": "$1 ($2) حذف کیا جا چکا ہے۔", + "usermerge-userdeleted-log": "\"$2\" ($3) صارف کا کھاتہ حذف کر دیا گیا", + "usermerge-success": " $1 ($2) کا $3 ($4) میں حذف مکمل ہو گیا ہے۔", + "usermerge-success-log": " \"$2\" ($3) کا کھاتہ \"[[User:$4|$4]]\" ($5) میں ضم کر دیا گیا", + "usermerge-autopagedelete": "صارفین کو ضم کرنے کے دوران میں صفحہ خودکار طریقے سے حذف کر دیا گیا", + "usermerge-move-log": "\"$1\" کھاتے کو ضم کرنے کے دوران صفحے کو خودکار طور پر \"[[User:$2|$2]]\"میں منتقل کر دیا گیا" +} diff --git a/UserMerge/i18n/yi.json b/UserMerge/i18n/yi.json new file mode 100644 index 00000000..51f15dba --- /dev/null +++ b/UserMerge/i18n/yi.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "פוילישער" + ] + }, + "usermerge": "צונויפֿגיסן און אויסמעקן באניצער" +} diff --git a/UserMerge/i18n/zh-hans.json b/UserMerge/i18n/zh-hans.json index 898c6aa7..d17b0646 100644 --- a/UserMerge/i18n/zh-hans.json +++ b/UserMerge/i18n/zh-hans.json @@ -24,17 +24,17 @@ "usermerge-deleteolduser": "删除旧用户", "usermerge-submit": "合并用户", "usermerge-badtoken": "无效的编辑令牌。", - "usermerge-userdeleted": "{{GENDER:$1|$1}}($2) 已删除。", - "usermerge-userdeleted-log": "已删除的用户: $2 ($3)", - "usermerge-success": "由{{GENDER:$1|$1}}($2)到{{GENDER:$3|$3}}($4)的合并已经完成。", - "usermerge-success-log": "用户{{GENDER:$2|$2}}($3)已合并到{{GENDER:$4|$4}}($5)", + "usermerge-userdeleted": "$1($2)已删除。", + "usermerge-userdeleted-log": "已删除用户账户“$2”($3)", + "usermerge-success": "由$1($2)到$3($4)的合并已经完成。", + "usermerge-success-log": "账户“$2”($3)已合并到“[[User:$4|$4]]”($5)", "usermerge-logpage": "用户合并日志", "usermerge-logpagetext": "这是一份用户合并动作的记录。", "usermerge-noselfdelete": "您不能将{{GENDER:$1|自己}}删除或者合并!", - "usermerge-protectedgroup": "无法完成{{GENDER:$1|用户}}合并:用户位于受保护组中。", + "usermerge-protectedgroup": "无法从{{GENDER:$1|用户}}合并:用户属于受保护组。", "right-usermerge": "合并用户", "action-usermerge": "合并用户", - "usermerge-autopagedelete": "合并用户时自动删除", + "usermerge-autopagedelete": "在合并用户时自动删除页面", "usermerge-page-unmoved": "页面$1无法被移动到$2。", - "usermerge-move-log": "合并用户“[[User:$1|$1]]”到“[[User:$2|{{GENDER:$2|$2}}]]”时自动移动页面" + "usermerge-move-log": "在合并账户“$1”到“[[User:$2|$2]]”时自动移动页面" } diff --git a/UserMerge/i18n/zh-hant.json b/UserMerge/i18n/zh-hant.json index 70ecaa15..c1edcbe3 100644 --- a/UserMerge/i18n/zh-hant.json +++ b/UserMerge/i18n/zh-hant.json @@ -6,7 +6,8 @@ "Mark85296341", "Wrightbus", "Cwlin0416", - "LNDDYL" + "LNDDYL", + "Hello903hello" ] }, "usermerge": "合併並刪除使用者", @@ -22,17 +23,17 @@ "usermerge-deleteolduser": "刪除舊使用者", "usermerge-submit": "合併使用者", "usermerge-badtoken": "無效的編輯權杖。", - "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) 已刪除。", - "usermerge-userdeleted-log": "已刪除使用者:$2 ($3)", - "usermerge-success": "已完成由 {{GENDER:$1|$1}} ($2) 至 {{GENDER:$3|$3}} ($4) 的合併。", - "usermerge-success-log": "使用者 {{GENDER:$2|$2}} ($3) 已合併至 {{GENDER:$4|$4}} ($5)", + "usermerge-userdeleted": "$1($2)已刪除。", + "usermerge-userdeleted-log": "已刪除使用者賬戶「$2」($3)", + "usermerge-success": "已完成由 $1($2)至 $3($4)的合併。", + "usermerge-success-log": "使用者賬戶「$2」($3)已合併至「[[User:$4|$4]]」($5)", "usermerge-logpage": "使用者合併日誌", "usermerge-logpagetext": "此頁為使用者合併動作的記錄。", "usermerge-noselfdelete": "您無法刪除或合併{{GENDER:$1|自己}}!", "usermerge-protectedgroup": "無法完成{{GENDER:$1|使用者}}合併:使用者屬於受保護群組成員。", "right-usermerge": "合併使用者", "action-usermerge": "合併使用者", - "usermerge-autopagedelete": "合併後自動刪除使用者", + "usermerge-autopagedelete": "合併使用者時自動刪除頁面", "usermerge-page-unmoved": "頁面 $1 無法移動至 $2。", - "usermerge-move-log": "合併 \"[[User:$1|$1]]\" 至 \"[[User:$2|{{GENDER:$2|$2}}]]\" 時已自動移動頁面" + "usermerge-move-log": "合併賬戶「$1」到「[[User:$2|$2]]」時已自動移動頁面" } diff --git a/UserMerge/IUserMergeLogger.php b/UserMerge/includes/IUserMergeLogger.php index da9febc7..da9febc7 100644 --- a/UserMerge/IUserMergeLogger.php +++ b/UserMerge/includes/IUserMergeLogger.php diff --git a/UserMerge/MergeUser.php b/UserMerge/includes/MergeUser.php index 2292d8ab..6a959c2f 100644 --- a/UserMerge/MergeUser.php +++ b/UserMerge/includes/MergeUser.php @@ -1,5 +1,6 @@ <?php use MediaWiki\MediaWikiServices; +use Wikimedia\Rdbms\IDatabase; /** * Contains the actual database backend logic for merging users @@ -99,7 +100,13 @@ class MergeUser { $dbw->endAtomic( __METHOD__ ); } - private function mergeBlocks( DatabaseBase $dbw ) { + /** + * @param IDatabase $dbw + * @return void + * @suppress PhanTypeMismatchArgument Phan thinks that $newBlock and $oldBlock are both null when + * Block::newFromRow is called, although the previous if/elseif returns if any of them is null. + */ + private function mergeBlocks( IDatabase $dbw ) { $dbw->startAtomic( __METHOD__ ); // Pull blocks directly from master @@ -111,8 +118,8 @@ class MergeUser { ] ); - $newBlock = false; - $oldBlock = false; + $newBlock = null; + $oldBlock = null; foreach ( $rows as $row ) { if ( (int)$row->ipb_user === $this->oldUser->getId() ) { $oldBlock = $row; @@ -141,7 +148,7 @@ class MergeUser { return; } - // Okay, lets pick the "strongest" block, and re-apply it to + // Okay, let's pick the "strongest" block, and re-apply it to // the new user. $oldBlockObj = Block::newFromRow( $oldBlock ); $newBlockObj = Block::newFromRow( $newBlock ); @@ -194,6 +201,36 @@ class MergeUser { return $b2; } + private function stageNeedsUser( $stage ) { + if ( !defined( 'MIGRATION_NEW' ) ) { + return true; + } + if ( !class_exists( ActorMigration::class ) ) { + return false; + } + + if ( defined( 'ActorMigration::MIGRATION_STAGE_SCHEMA_COMPAT' ) ) { + return (bool)( $stage & SCHEMA_COMPAT_WRITE_OLD ); + } else { + return $stage < MIGRATION_NEW; + } + } + + private function stageNeedsActor( $stage ) { + if ( !defined( 'MIGRATION_NEW' ) ) { + return false; + } + if ( !class_exists( ActorMigration::class ) ) { + return true; + } + + if ( defined( 'ActorMigration::MIGRATION_STAGE_SCHEMA_COMPAT' ) ) { + return (bool)( $stage & SCHEMA_COMPAT_WRITE_NEW ); + } else { + return $stage > MIGRATION_OLD; + } + } + /** * Function to merge database references from one user to another user * @@ -203,26 +240,43 @@ class MergeUser { * @param string $fnameTrxOwner */ private function mergeDatabaseTables( $fnameTrxOwner ) { + global $wgActorTableSchemaMigrationStage; + // Fields to update with the format: // [ // tableName, idField, textField, - // 'batchKey' => unique field, 'options' => array(), 'db' => DatabaseBase + // 'batchKey' => unique field, 'options' => array(), 'db' => IDatabase + // 'actorId' => actor ID field, // ]; // textField, batchKey, db, and options are optional $updateFields = [ - [ 'archive', 'ar_user', 'ar_user_text', 'batchKey' => 'ar_id' ], - [ 'revision', 'rev_user', 'rev_user_text', 'batchKey' => 'rev_id' ], - [ 'filearchive', 'fa_user', 'fa_user_text', 'batchKey' => 'fa_id' ], - [ 'image', 'img_user', 'img_user_text', 'batchKey' => 'img_name' ], - [ 'oldimage', 'oi_user', 'oi_user_text', 'batchKey' => 'oi_archive_name' ], - [ 'recentchanges', 'rc_user', 'rc_user_text', 'batchKey' => 'rc_id' ], - [ 'logging', 'log_user', 'batchKey' => 'log_id' ], - [ 'ipblocks', 'ipb_by', 'ipb_by_text', 'batchKey' => 'ipb_id' ], + [ 'archive', 'ar_user', 'ar_user_text', 'batchKey' => 'ar_id', 'actorId' => 'ar_actor', + 'actorStage' => $wgActorTableSchemaMigrationStage ], + [ 'revision', 'rev_user', 'rev_user_text', 'batchKey' => 'rev_id', 'actorId' => '', + 'actorStage' => $wgActorTableSchemaMigrationStage ], + [ 'filearchive', 'fa_user', 'fa_user_text', 'batchKey' => 'fa_id', 'actorId' => 'fa_actor', + 'actorStage' => $wgActorTableSchemaMigrationStage ], + [ 'image', 'img_user', 'img_user_text', 'batchKey' => 'img_name', 'actorId' => 'img_actor', + 'actorStage' => $wgActorTableSchemaMigrationStage ], + [ 'oldimage', 'oi_user', 'oi_user_text', 'batchKey' => 'oi_archive_name', + 'actorId' => 'oi_actor', 'actorStage' => $wgActorTableSchemaMigrationStage ], + [ 'recentchanges', 'rc_user', 'rc_user_text', 'batchKey' => 'rc_id', 'actorId' => 'rc_actor', + 'actorStage' => $wgActorTableSchemaMigrationStage ], + [ 'logging', 'log_user', 'log_user_text', 'batchKey' => 'log_id', 'actorId' => 'log_actor', + 'actorStage' => $wgActorTableSchemaMigrationStage ], + [ 'ipblocks', 'ipb_by', 'ipb_by_text', 'batchKey' => 'ipb_id', 'actorId' => 'ipb_by_actor', + 'actorStage' => $wgActorTableSchemaMigrationStage ], [ 'watchlist', 'wl_user', 'batchKey' => 'wl_title' ], [ 'user_groups', 'ug_user', 'options' => [ 'IGNORE' ] ], [ 'user_properties', 'up_user', 'options' => [ 'IGNORE' ] ], [ 'user_former_groups', 'ufg_user', 'options' => [ 'IGNORE' ] ], ]; + if ( $this->stageNeedsActor( $wgActorTableSchemaMigrationStage ) ) { + $updateFields[] = [ + 'revision_actor_temp', 'batchKey' => 'revactor_rev', 'actorId' => 'revactor_actor', + 'actorStage' => $wgActorTableSchemaMigrationStage + ]; + } Hooks::run( 'UserMergeAccountFields', [ &$updateFields ] ); @@ -239,6 +293,11 @@ class MergeUser { } foreach ( $updateFields as $fieldInfo ) { + if ( !isset( $fieldInfo[1] ) ) { + // Actors only + continue; + } + $options = isset( $fieldInfo['options'] ) ? $fieldInfo['options'] : []; unset( $fieldInfo['options'] ); $db = isset( $fieldInfo['db'] ) ? $fieldInfo['db'] : $dbw; @@ -248,6 +307,11 @@ class MergeUser { $keyField = isset( $fieldInfo['batchKey'] ) ? $fieldInfo['batchKey'] : null; unset( $fieldInfo['batchKey'] ); + if ( isset( $fieldInfo['actorId'] ) && !$this->stageNeedsUser( $fieldInfo['actorStage'] ) ) { + continue; + } + unset( $fieldInfo['actorId'], $fieldInfo['actorStage'] ); + if ( $db->trxLevel() || $keyField === null ) { // Can't batch/wait when in a transaction or when no batch key is given $db->update( @@ -293,6 +357,67 @@ class MergeUser { } } + if ( $this->stageNeedsActor( $wgActorTableSchemaMigrationStage ) && + $this->oldUser->getActorId() + ) { + $oldActorId = $this->oldUser->getActorId(); + $newActorId = $this->newUser->getActorId( $db ); + + foreach ( $updateFields as $fieldInfo ) { + if ( empty( $fieldInfo['actorId'] ) || !$this->stageNeedsActor( $fieldInfo['actorStage'] ) ) { + continue; + } + + $options = isset( $fieldInfo['options'] ) ? $fieldInfo['options'] : []; + $db = isset( $fieldInfo['db'] ) ? $fieldInfo['db'] : $dbw; + $tableName = array_shift( $fieldInfo ); + $idField = $fieldInfo['actorId']; + $keyField = isset( $fieldInfo['batchKey'] ) ? $fieldInfo['batchKey'] : null; + + if ( $db->trxLevel() || $keyField === null ) { + // Can't batch/wait when in a transaction or when no batch key is given + $db->update( + $tableName, + [ $idField => $newActorId ], + [ $idField => $oldActorId ], + __METHOD__, + $options + ); + } else { + $limit = 200; + do { + $checkSince = microtime( true ); + // Note that UPDATE with ORDER BY + LIMIT is not well supported. + // Grab a batch of values on a mostly unique column for this user ID. + $res = $db->select( + $tableName, + [ $keyField ], + [ $idField => $oldActorId ], + __METHOD__, + [ 'LIMIT' => $limit ] + ); + $keyValues = []; + foreach ( $res as $row ) { + $keyValues[] = $row->$keyField; + } + // Update only those rows with the given column values + if ( count( $keyValues ) ) { + $db->update( + $tableName, + [ $idField => $newActorId ], + [ $idField => $oldActorId, $keyField => $keyValues ], + __METHOD__, + $options + ); + } + // Wait for replication to catch up + $opts = [ 'ifWritesSince' => $checkSince ]; + $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket, $opts ); + } while ( count( $keyValues ) >= $limit ); + } + } + } + $dbw->delete( 'user_newtalk', [ 'user_id' => $this->oldUser->getId() ] ); Hooks::run( 'MergeAccountFromTo', [ &$this->oldUser, &$this->newUser ] ); @@ -302,7 +427,7 @@ class MergeUser { * Deduplicate watchlist entries * which old (merge-from) and new (merge-to) users are watching * - * @param DatabaseBase $dbw + * @param IDatabase $dbw */ private function deduplicateWatchlistEntries( $dbw ) { $dbw->startAtomic( __METHOD__ ); @@ -371,6 +496,7 @@ class MergeUser { * Deletes the old user page when the target user page exists * * @todo This code is a duplicate of Renameuser and GlobalRename + * @suppress PhanParamTooMany Several calls to $message, which is a variadic closure * * @param User $performer * @param callable $msg Function that returns a Message object @@ -384,7 +510,7 @@ class MergeUser { $newusername = Title::makeTitleSafe( NS_USER, $wgContLang->ucfirst( $this->newUser->getName() ) ); # select all user pages and sub-pages - $dbr = wfGetDB( DB_SLAVE ); + $dbr = wfGetDB( DB_REPLICA ); $pages = $dbr->select( 'page', [ 'page_namespace', 'page_title' ], @@ -411,9 +537,11 @@ class MergeUser { if ( $this->newUser->getName() === 'Anonymous' ) { # delete ALL old pages if ( $oldPage->exists() ) { + $error = ''; $oldPageArticle = new Article( $oldPage, 0 ); $oldPageArticle->doDeleteArticle( - $message( 'usermerge-autopagedelete' )->inContentLanguage()->text() + $message( 'usermerge-autopagedelete' )->inContentLanguage()->text(), + false, null, null, $error, true ); } } elseif ( $newPage->exists() @@ -421,17 +549,21 @@ class MergeUser { && $newPage->getLength() > 0 ) { # delete old pages that can't be moved + $error = ''; $oldPageArticle = new Article( $oldPage, 0 ); $oldPageArticle->doDeleteArticle( - $message( 'usermerge-autopagedelete' )->inContentLanguage()->text() + $message( 'usermerge-autopagedelete' )->inContentLanguage()->text(), + false, null, null, $error, true ); } else { # move content to new page # delete target page if it exists and is blank if ( $newPage->exists() ) { + $error = ''; $newPageArticle = new Article( $newPage, 0 ); $newPageArticle->doDeleteArticle( - $message( 'usermerge-autopagedelete' )->inContentLanguage()->text() + $message( 'usermerge-autopagedelete' )->inContentLanguage()->text(), + false, null, null, $error, true ); } @@ -456,9 +588,11 @@ class MergeUser { ); if ( !$dbr->numRows( $res ) ) { # nothing links here, so delete unmoved page/redirect + $error = ''; $oldPageArticle = new Article( $oldPage, 0 ); $oldPageArticle->doDeleteArticle( - $message( 'usermerge-autopagedelete' )->inContentLanguage()->text() + $message( 'usermerge-autopagedelete' )->inContentLanguage()->text(), + false, null, null, $error, true ); } } @@ -482,7 +616,7 @@ class MergeUser { * Format is: table => user_id column * * If you want it to use a different db object: - * table => array( user_id colum, 'db' => DatabaseBase ); + * table => array( user_id colum, 'db' => IDatabase ); */ $tablesToDelete = [ 'user_groups' => 'ug_user', @@ -492,7 +626,11 @@ class MergeUser { Hooks::run( 'UserMergeAccountDeleteTables', [ &$tablesToDelete ] ); - $tablesToDelete['user'] = 'user_id'; // Make sure this always set and last + // Make sure these are always set and last + if ( $dbw->tableExists( 'actor', __METHOD__ ) ) { + $tablesToDelete['actor'] = 'actor_user'; + } + $tablesToDelete['user'] = 'user_id'; foreach ( $tablesToDelete as $table => $field ) { // Check if a different database object was passed (Echo or Flow) diff --git a/UserMerge/SpecialUserMerge.php b/UserMerge/includes/SpecialUserMerge.php index 9af48d51..76f2b96c 100644 --- a/UserMerge/SpecialUserMerge.php +++ b/UserMerge/includes/SpecialUserMerge.php @@ -24,21 +24,20 @@ class SpecialUserMerge extends FormSpecialPage { * @return array */ protected function getFormFields() { - $us = $this; return [ 'olduser' => [ 'type' => 'text', 'label-message' => 'usermerge-olduser', 'required' => true, - 'validation-callback' => function ( $val ) use ( $us ) { + 'validation-callback' => function ( $val ) { // only pass strings to User::newFromName if ( !is_string( $val ) ) { return true; } - $key = $us->validateOldUser( $val ); + $key = $this->validateOldUser( $val ); if ( is_string( $key ) || is_array( $key ) ) { - return $us->msg( $key )->escaped(); + return $this->msg( $key )->escaped(); } return true; }, @@ -47,15 +46,15 @@ class SpecialUserMerge extends FormSpecialPage { 'type' => 'text', 'required' => true, 'label-message' => 'usermerge-newuser', - 'validation-callback' => function ( $val ) use ( $us ) { + 'validation-callback' => function ( $val ) { // only pass strings to User::newFromName if ( !is_string( $val ) ) { return true; } - $key = $us->validateNewUser( $val ); + $key = $this->validateNewUser( $val ); if ( is_string( $key ) ) { - return $us->msg( $key )->escaped(); + return $this->msg( $key )->escaped(); } return true; }, @@ -68,11 +67,11 @@ class SpecialUserMerge extends FormSpecialPage { } /** - * @param $val user's input for username - * @return bool|string true if valid, a string of the error's message key if validation failed + * @param string $val user's input for username + * @return bool|string|string[] true if valid, a string or string[] of the error's message key + * if validation failed */ public function validateOldUser( $val ) { - global $wgUserMergeProtectedGroups; $oldUser = User::newFromName( $val ); if ( !$oldUser || $oldUser->getId() === 0 ) { return 'usermerge-badolduser'; @@ -80,7 +79,8 @@ class SpecialUserMerge extends FormSpecialPage { if ( $this->getUser()->getId() === $oldUser->getId() ) { return [ 'usermerge-noselfdelete', $this->getUser()->getName() ]; } - if ( count( array_intersect( $oldUser->getGroups(), $wgUserMergeProtectedGroups ) ) ) { + $protectedGroups = $this->getConfig()->get( 'UserMergeProtectedGroups' ); + if ( count( array_intersect( $oldUser->getGroups(), $protectedGroups ) ) ) { return [ 'usermerge-protectedgroup', $oldUser->getName() ]; } @@ -88,12 +88,12 @@ class SpecialUserMerge extends FormSpecialPage { } /** - * @param $val user's input for username + * @param string $val user's input for username * @return bool|string true if valid, a string of the error's message key if validation failed */ public function validateNewUser( $val ) { - global $wgUserMergeEnableDelete; - if ( $wgUserMergeEnableDelete && $val === 'Anonymous' ) { + $enableDelete = $this->getConfig()->get( 'UserMergeEnableDelete' ); + if ( $enableDelete && $val === 'Anonymous' ) { return true; // Special case } $newUser = User::newFromName( $val ); @@ -109,7 +109,6 @@ class SpecialUserMerge extends FormSpecialPage { */ protected function alterForm( HTMLForm $form ) { $form->setSubmitTextMsg( 'usermerge-submit' ); - $form->setWrapperLegendMsg( 'usermerge-fieldset' ); } /** @@ -117,12 +116,12 @@ class SpecialUserMerge extends FormSpecialPage { * @return Status */ public function onSubmit( array $data ) { - global $wgUserMergeEnableDelete; + $enableDelete = $this->getConfig()->get( 'UserMergeEnableDelete' ); // Most of the data has been validated using callbacks // still need to check if the users are different $newUser = User::newFromName( $data['newuser'] ); // Handle "Anonymous" as a special case for user deletion - if ( $wgUserMergeEnableDelete && $data['newuser'] === 'Anonymous' ) { + if ( $enableDelete && $data['newuser'] === 'Anonymous' ) { $newUser->mId = 0; } @@ -171,6 +170,16 @@ class SpecialUserMerge extends FormSpecialPage { return Status::newGood(); } + /** + * @inheritDoc + */ + protected function getDisplayFormat() { + return 'ooui'; + } + + /** + * @inheritDoc + */ protected function getGroupName() { return 'users'; } diff --git a/UserMerge/includes/UserMergeLogFormatter.php b/UserMerge/includes/UserMergeLogFormatter.php new file mode 100644 index 00000000..7de03811 --- /dev/null +++ b/UserMerge/includes/UserMergeLogFormatter.php @@ -0,0 +1,53 @@ +<?php + +class UserMergeLogFormatter extends LogFormatter { + + private static $mapLegacy = [ + 'oldName' => 0, + 'oldId' => 1, + 'newName' => 2, + 'newId' => 3, + ]; + + /** + * @return string + */ + protected function getMessageKey() { + if ( $this->entry->getSubtype() === 'deleteuser' ) { + return 'logentry-usermerge-deleteuser'; + } else { + return 'logentry-usermerge-mergeuser'; + } + } + + /** + * @param string $param + * @return mixed + */ + private function getParameter( $param ) { + $parameters = $this->entry->getParameters(); + if ( $this->entry->isLegacy() ) { + $param = self::$mapLegacy[$param]; + } + return $parameters[$param]; + } + + /** + * @return array + */ + protected function extractParameters() { + $params = []; + // 0-2 are set in LogFormatter::getMessageParameters() + $params[3] = $this->getParameter( 'oldName' ); + $params[4] = $this->getParameter( 'oldId' ); + if ( $this->entry->getSubtype() !== 'deleteuser' ) { + $params[5] = $this->formatParameterValue( + 'user-link', $this->getParameter( 'newName' ) ); + $params[6] = $this->getParameter( 'newId' ); + $params[7] = $this->formatParameterValue( + 'user', $this->getParameter( 'newName' ) ); + } + return $params; + } + +} diff --git a/UserMerge/includes/UserMergeLogger.php b/UserMerge/includes/UserMergeLogger.php new file mode 100644 index 00000000..8c63d075 --- /dev/null +++ b/UserMerge/includes/UserMergeLogger.php @@ -0,0 +1,42 @@ +<?php + +class UserMergeLogger implements IUserMergeLogger { + + /** + * Adds a merge log entry + * + * @param User $performer + * @param User $oldUser + * @param User $newUser + */ + public function addMergeEntry( User $performer, User $oldUser, User $newUser ) { + $logEntry = new ManualLogEntry( 'usermerge', 'mergeuser' ); + $logEntry->setPerformer( $performer ); + $logEntry->setTarget( $newUser->getUserPage() ); + $logEntry->setParameters( [ + 'oldName' => $oldUser->getName(), + 'oldId' => $oldUser->getId(), + 'newName' => $newUser->getName(), + 'newId' => $newUser->getId(), + ] ); + $logEntry->setRelations( [ 'oldname' => $oldUser->getName() ] ); + $logEntry->insert(); + } + + /** + * Adds a user deletion log entry + * + * @param User $performer + * @param User $oldUser + */ + public function addDeleteEntry( User $performer, User $oldUser ) { + $logEntry = new ManualLogEntry( 'usermerge', 'deleteuser' ); + $logEntry->setPerformer( $performer ); + $logEntry->setTarget( $oldUser->getUserPage() ); + $logEntry->setParameters( [ + 'oldName' => $oldUser->getName(), + 'oldId' => $oldUser->getId(), + ] ); + $logEntry->insert(); + } +} diff --git a/UserMerge/package.json b/UserMerge/package.json index d0e4bbfd..48588196 100644 --- a/UserMerge/package.json +++ b/UserMerge/package.json @@ -1,15 +1,15 @@ { - "name": "usermerge", - "version": "0.0.0", - "private": true, - "description": "Build tools for the UserMerge extension.", - "scripts": { - "test": "grunt test" - }, - "devDependencies": { - "grunt": "1.0.1", - "grunt-banana-checker": "0.4.0", - "grunt-contrib-jshint": "1.1.0", - "grunt-jsonlint": "1.0.7" - } + "name": "usermerge", + "version": "0.0.0", + "private": true, + "description": "Build tools for the UserMerge extension.", + "scripts": { + "test": "grunt test" + }, + "devDependencies": { + "grunt": "1.0.3", + "grunt-banana-checker": "0.6.0", + "grunt-contrib-jshint": "1.1.0", + "grunt-jsonlint": "1.1.0" + } } diff --git a/UserMerge/phpcs.xml b/UserMerge/phpcs.xml deleted file mode 100644 index 68d59638..00000000 --- a/UserMerge/phpcs.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0"?> -<ruleset> - <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki"> - <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamComment" /> - <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamName" /> - <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamTag" /> - <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" /> - <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" /> - </rule> - <rule ref="Generic.Files.LineLength"> - <exclude-pattern>UserMerge.alias.php</exclude-pattern> - </rule> - <file>.</file> - <arg name="extensions" value="php,php5,inc" /> - <arg name="encoding" value="UTF-8" /> - <exclude-pattern>vendor</exclude-pattern> -</ruleset> diff --git a/UserMerge/tests/phan/config.php b/UserMerge/tests/phan/config.php new file mode 100644 index 00000000..f2660b8a --- /dev/null +++ b/UserMerge/tests/phan/config.php @@ -0,0 +1,3 @@ +<?php + +return require __DIR__ . '/../../vendor/mediawiki/mediawiki-phan-config/src/config.php'; diff --git a/UserMerge/tests/phpunit/MergeUserTest.php b/UserMerge/tests/phpunit/MergeUserTest.php index 6ae2e4e4..06d8a287 100644 --- a/UserMerge/tests/phpunit/MergeUserTest.php +++ b/UserMerge/tests/phpunit/MergeUserTest.php @@ -16,6 +16,7 @@ class MergeUserTest extends MediaWikiTestCase { } $user->setName( $name ); $user->addToDatabase(); + SiteStatsUpdate::factory( [ 'users' => 1 ] )->doUpdate(); return $user; } @@ -28,6 +29,9 @@ class MergeUserTest extends MediaWikiTestCase { $u = User::newFromName( $u->getName() ); } + /** + * @covers MergeUser::merge + */ public function testBasicMerge() { $user1 = $this->getNewTestUser(); $user1->addToDatabase(); @@ -45,6 +49,9 @@ class MergeUserTest extends MediaWikiTestCase { $this->assertEquals( 'baz', $user2->getOption( 'foo' ) ); } + /** + * @covers MergeUser::merge + */ public function testMergeOfUserGroups() { $user1 = $this->getNewTestUser(); $user1->addGroup( 'group1' ); @@ -62,6 +69,9 @@ class MergeUserTest extends MediaWikiTestCase { $this->assertArrayEquals( [ 'group1', 'group2' ], $user2->getGroups() ); } + /** + * @covers MergeUser::delete + */ public function testDeleteUser() { $user1 = $this->getNewTestUser(); $user2 = $this->getNewTestUser(); diff --git a/UserMerge/version b/UserMerge/version index eaf77c86..d117710b 100644 --- a/UserMerge/version +++ b/UserMerge/version @@ -1,4 +1,4 @@ -UserMerge: REL1_30 -2017-09-21T22:24:00 +UserMerge: REL1_32 +2019-01-13T20:10:45 -4546537 +66c7030 |