├── .eslintignore ├── .eslintrc.json ├── .gitignore ├── .gitreview ├── .phan └── config.php ├── .phpcs.xml ├── .stylelintrc.json ├── CODE_OF_CONDUCT.md ├── COPYING ├── CheckUser.alias.php ├── Gruntfile.js ├── bundlesize.config.json ├── composer.json ├── extension.json ├── i18n ├── acm.json ├── af.json ├── alt.json ├── am.json ├── an.json ├── ang.json ├── ann.json ├── anp.json ├── api │ ├── ar.json │ ├── ast.json │ ├── az.json │ ├── ba.json │ ├── bg.json │ ├── bn.json │ ├── bs.json │ ├── cs.json │ ├── cy.json │ ├── da.json │ ├── de.json │ ├── en.json │ ├── es-formal.json │ ├── es.json │ ├── fa.json │ ├── fr.json │ ├── gl.json │ ├── got.json │ ├── gu.json │ ├── ha.json │ ├── he.json │ ├── hi.json │ ├── hu.json │ ├── ia.json │ ├── id.json │ ├── it.json │ ├── ja.json │ ├── ka.json │ ├── ko.json │ ├── ksh.json │ ├── lb.json │ ├── lt.json │ ├── mai.json │ ├── mk.json │ ├── mr.json │ ├── ms.json │ ├── nb.json │ ├── ne.json │ ├── nl.json │ ├── pl.json │ ├── pt-br.json │ ├── pt.json │ ├── qqq.json │ ├── roa-tara.json │ ├── ru.json │ ├── scn.json │ ├── sh-latn.json │ ├── sl.json │ ├── sr-ec.json │ ├── sr-el.json │ ├── sv.json │ ├── sw.json │ ├── tr.json │ ├── uk.json │ ├── vi.json │ ├── zh-hans.json │ └── zh-hant.json ├── ar.json ├── arc.json ├── ary.json ├── arz.json ├── as.json ├── ast.json ├── av.json ├── avk.json ├── awa.json ├── az.json ├── azb.json ├── ba.json ├── ban.json ├── bcc.json ├── bcl.json ├── be-tarask.json ├── be.json ├── bew.json ├── bg.json ├── bgc-arab.json ├── bgn.json ├── bjn.json ├── blk.json ├── bn.json ├── bnn.json ├── br.json ├── brx.json ├── bs.json ├── bxr.json ├── ca.json ├── cdo-hant.json ├── ce.json ├── ch.json ├── ckb.json ├── co.json ├── crh-latn.json ├── cs.json ├── csb.json ├── cu.json ├── cv.json ├── cy.json ├── da.json ├── dag.json ├── de.json ├── dga.json ├── diq.json ├── dsb.json ├── dv.json ├── ee.json ├── el.json ├── en.json ├── eo.json ├── es-formal.json ├── es.json ├── et.json ├── eu.json ├── ext.json ├── fa.json ├── fat.json ├── fi.json ├── fit.json ├── fo.json ├── fr.json ├── frc.json ├── frp.json ├── frr.json ├── fy.json ├── ga.json ├── gan-hans.json ├── gan-hant.json ├── gcr.json ├── gd.json ├── gl.json ├── got.json ├── grc.json ├── gsw.json ├── gu.json ├── gur.json ├── gv.json ├── ha.json ├── hak-latn.json ├── haw.json ├── he.json ├── hi.json ├── hif-latn.json ├── hil.json ├── hr.json ├── hsb.json ├── hu.json ├── hy.json ├── hyw.json ├── ia.json ├── id.json ├── ie.json ├── ig.json ├── ilo.json ├── inh.json ├── io.json ├── is.json ├── isv-cyrl.json ├── isv-latn.json ├── it.json ├── ja.json ├── jac.json ├── jut.json ├── jv.json ├── ka.json ├── kaa.json ├── kab.json ├── kcg.json ├── kg.json ├── kjh.json ├── kjp.json ├── kk-arab.json ├── kk-cyrl.json ├── kk-latn.json ├── kl.json ├── km.json ├── kn.json ├── ko.json ├── koi.json ├── krc.json ├── kri.json ├── krj.json ├── krl.json ├── ks.json ├── ksh.json ├── ksw.json ├── ku-latn.json ├── kv.json ├── kw.json ├── ky.json ├── la.json ├── lb.json ├── lfn.json ├── li.json ├── lij.json ├── lld.json ├── lmo.json ├── ln.json ├── lo.json ├── lt.json ├── ltg.json ├── lv.json ├── lzh.json ├── mad.json ├── mai.json ├── mey.json ├── mg.json ├── mhr.json ├── min.json ├── mk.json ├── ml.json ├── mn.json ├── mnw.json ├── mr.json ├── ms-arab.json ├── ms.json ├── mt.json ├── my.json ├── myv.json ├── nah.json ├── nb.json ├── nds-nl.json ├── nds.json ├── ne.json ├── niu.json ├── nl-informal.json ├── nl.json ├── nn.json ├── nov.json ├── nqo.json ├── nrm.json ├── nso.json ├── oc.json ├── om.json ├── or.json ├── os.json ├── pa.json ├── pag.json ├── pam.json ├── pdc.json ├── pfl.json ├── pl.json ├── pms.json ├── pnb.json ├── ps.json ├── pt-br.json ├── pt.json ├── qqq.json ├── qu.json ├── rif.json ├── rm.json ├── ro.json ├── roa-tara.json ├── rsk.json ├── ru.json ├── rue.json ├── rup.json ├── rw.json ├── ryu.json ├── sa.json ├── sah.json ├── sat.json ├── sc.json ├── scn.json ├── sco.json ├── sd.json ├── se.json ├── sh-latn.json ├── shn.json ├── si.json ├── sje.json ├── sk.json ├── skr-arab.json ├── sl.json ├── smj.json ├── smn.json ├── sms.json ├── sn.json ├── so.json ├── sq.json ├── sr-ec.json ├── sr-el.json ├── st.json ├── stq.json ├── su.json ├── sv.json ├── sw.json ├── szl.json ├── ta.json ├── te.json ├── tet.json ├── tg-cyrl.json ├── tg-latn.json ├── th.json ├── ti.json ├── tk.json ├── tl.json ├── tly.json ├── to.json ├── tpi.json ├── tr.json ├── trv.json ├── tsg.json ├── tt-cyrl.json ├── udm.json ├── ug-arab.json ├── uk.json ├── ur.json ├── uz.json ├── vec.json ├── vep.json ├── vi.json ├── vo.json ├── wa.json ├── wal.json ├── war.json ├── wuu-hans.json ├── xmf.json ├── yi.json ├── yue-hant.json ├── za.json ├── zgh.json ├── zh-hans.json ├── zh-hant.json └── zh-hk.json ├── images ├── temp-accounts-onboarding-ip-info-ltr.svg ├── temp-accounts-onboarding-ip-info-rtl.svg ├── temp-accounts-onboarding-ip-reveal-ltr.svg ├── temp-accounts-onboarding-ip-reveal-rtl.svg ├── temp-accounts-onboarding-temp-accounts-ltr.svg └── temp-accounts-onboarding-temp-accounts-rtl.svg ├── jest.config.js ├── jest.setup.js ├── maintenance ├── deleteReadOldRowsInCuChanges.php ├── fixTrailingSpacesInLogs.php ├── generateStatsAboutClientHintsData.php ├── migrateTemporaryAccountIPViewerGroup.php ├── moveLogEntriesFromCuChanges.php ├── populateCentralCheckUserIndexTables.php ├── populateCheckUserTable.php ├── populateCheckUserTablesWithSimulatedData.php ├── populateCucActor.php ├── populateCucComment.php ├── populateCulActor.php ├── populateCulComment.php └── purgeOldData.php ├── modules ├── .eslintrc.json ├── ext.checkUser.clientHints │ └── index.js ├── ext.checkUser.ipInfo.hooks │ ├── infobox.js │ └── init.js ├── ext.checkUser.styles │ ├── checkuser.less │ ├── cidr.less │ ├── investigate.less │ ├── investigateblock.less │ ├── temporaryaccount.less │ ├── temporaryaccount.minerva.less │ ├── temporaryaccountonboarding.less │ └── userInfoCard.less ├── ext.checkUser.tempAccounts │ ├── BlockDetailsPopupButtonWidget.js │ ├── ShowIPButton.vue │ ├── SpecialBlock.js │ ├── SpecialContributions.js │ ├── api.js │ ├── autoReveal.js │ ├── components │ │ ├── IPAutoRevealOffDialog.vue │ │ └── IPAutoRevealOnDialog.vue │ ├── dispatcher.js │ ├── initOnHook.js │ ├── initOnLoad.js │ ├── ipReveal.js │ ├── ipRevealUtils.js │ └── rest.js ├── ext.checkUser.tempAccountsOnboarding │ ├── components │ │ ├── App.vue │ │ ├── TempAccountsOnboardingDialog.vue │ │ ├── TempAccountsOnboardingIPInfoStep.vue │ │ ├── TempAccountsOnboardingIPRevealStep.vue │ │ ├── TempAccountsOnboardingIntroStep.vue │ │ ├── TempAccountsOnboardingStep.vue │ │ └── TempAccountsOnboardingStepper.vue │ └── init.js ├── ext.checkUser.userInfoCard │ ├── components │ │ ├── App.vue │ │ ├── InfoRowWithLinks.vue │ │ ├── UserCardBody.vue │ │ ├── UserCardHeader.vue │ │ ├── UserCardMenu.vue │ │ └── UserInfoCardError.vue │ ├── init.js │ └── stores │ │ └── UserInfoCardPopover.js ├── ext.checkUser │ ├── checkuser │ │ ├── checkUserHelper │ │ │ ├── addCopyElement.js │ │ │ ├── buildUserElement.js │ │ │ ├── createTable.js │ │ │ ├── createTableText.js │ │ │ ├── generateData.js │ │ │ ├── init.js │ │ │ └── utils.js │ │ └── getUsersBlockForm.js │ ├── checkuserlog │ │ └── highlightScroll.js │ ├── cidr │ │ └── cidr.js │ ├── dispatcher.js │ ├── investigate │ │ ├── InvestigateMenuSelectWidget.js │ │ ├── blockform.js │ │ ├── copy.js │ │ ├── init.js │ │ ├── resetGuidedTour.js │ │ └── tables.js │ └── investigateblock │ │ └── investigateblock.js ├── ext.guidedTour.tour.checkuserinvestigate │ └── checkuserinvestigate.js └── ext.guidedTour.tour.checkuserinvestigateform │ └── checkuserinvestigateform.js ├── package-lock.json ├── package.json ├── quibble.yaml ├── schema ├── abstractSchemaChanges │ ├── patch-cu_changes-add-cuc_agent_id.json │ ├── patch-cu_changes-add-cuc_only_for_read_old.json │ ├── patch-cu_changes-drop-cuc_actiontext.json │ ├── patch-cu_changes-drop-cuc_comment.json │ ├── patch-cu_changes-drop-cuc_only_for_read_old.json │ ├── patch-cu_changes-drop-cuc_private.json │ ├── patch-cu_changes-drop-cuc_user.json │ ├── patch-cu_changes-drop-defaults.json │ ├── patch-cu_changes-modify-cuc_id-bigint.json │ ├── patch-cu_log-actor.json │ ├── patch-cu_log-add-cul_result_id.json │ ├── patch-cu_log-comment_table_for_reason.json │ ├── patch-cu_log-drop-actor_default.json │ ├── patch-cu_log-drop-cul_reason.json │ ├── patch-cu_log-drop-cul_reason_id_default.json │ ├── patch-cu_log-drop-cul_user.json │ ├── patch-cu_log_event-add-cule_agent_id.json │ ├── patch-cu_private_event-add-cupe_agent_id.json │ └── patch-cu_private_event-modify-cupe_actor-nullable.json ├── cu_useragent.json ├── cu_useragent_clienthints.json ├── cu_useragent_clienthints_map.json ├── cuci_temp_edit.json ├── cuci_user.json ├── cuci_wiki_map.json ├── mysql │ ├── cu_useragent.sql │ ├── cu_useragent_clienthints.sql │ ├── cu_useragent_clienthints_map.sql │ ├── cuci_temp_edit.sql │ ├── cuci_user.sql │ ├── cuci_wiki_map.sql │ ├── patch-cu_changes-actor-comment.sql │ ├── patch-cu_changes-add-cuc_agent_id.sql │ ├── patch-cu_changes-add-cuc_only_for_read_old.sql │ ├── patch-cu_changes-cuc_timestamp.sql │ ├── patch-cu_changes-drop-cuc_actiontext.sql │ ├── patch-cu_changes-drop-cuc_comment.sql │ ├── patch-cu_changes-drop-cuc_only_for_read_old.sql │ ├── patch-cu_changes-drop-cuc_private.sql │ ├── patch-cu_changes-drop-cuc_user.sql │ ├── patch-cu_changes-drop-defaults.sql │ ├── patch-cu_changes-modify-cuc_id-bigint.sql │ ├── patch-cu_log-actor.sql │ ├── patch-cu_log-add-cul_result_id.sql │ ├── patch-cu_log-comment_table_for_reason.sql │ ├── patch-cu_log-drop-actor_default.sql │ ├── patch-cu_log-drop-cul_reason.sql │ ├── patch-cu_log-drop-cul_reason_id_default.sql │ ├── patch-cu_log-drop-cul_user.sql │ ├── patch-cu_log_event-add-cule_agent_id.sql │ ├── patch-cu_log_event-def.sql │ ├── patch-cu_private_event-add-cupe_agent_id.sql │ ├── patch-cu_private_event-def.sql │ ├── patch-cu_private_event-modify-cupe_actor-nullable.sql │ └── tables-generated.sql ├── postgres │ ├── cu_useragent.sql │ ├── cu_useragent_clienthints.sql │ ├── cu_useragent_clienthints_map.sql │ ├── cuci_temp_edit.sql │ ├── cuci_user.sql │ ├── cuci_wiki_map.sql │ ├── patch-cu_changes-add-cuc_agent_id.sql │ ├── patch-cu_changes-add-cuc_only_for_read_old.sql │ ├── patch-cu_changes-drop-cuc_actiontext.sql │ ├── patch-cu_changes-drop-cuc_comment.sql │ ├── patch-cu_changes-drop-cuc_only_for_read_old.sql │ ├── patch-cu_changes-drop-cuc_private.sql │ ├── patch-cu_changes-drop-cuc_user.sql │ ├── patch-cu_changes-drop-defaults.sql │ ├── patch-cu_changes-modify-cuc_id-bigint.sql │ ├── patch-cu_changes-pk.sql │ ├── patch-cu_log-actor.sql │ ├── patch-cu_log-add-cul_result_id.sql │ ├── patch-cu_log-comment_table_for_reason.sql │ ├── patch-cu_log-drop-actor_default.sql │ ├── patch-cu_log-drop-cul_reason.sql │ ├── patch-cu_log-drop-cul_reason_id_default.sql │ ├── patch-cu_log-drop-cul_user.sql │ ├── patch-cu_log-pk.sql │ ├── patch-cu_log_event-add-cule_agent_id.sql │ ├── patch-cu_log_event-def.sql │ ├── patch-cu_private_event-add-cupe_agent_id.sql │ ├── patch-cu_private_event-def.sql │ ├── patch-cu_private_event-modify-cupe_actor-nullable.sql │ └── tables-generated.sql ├── sqlite │ ├── cu_useragent.sql │ ├── cu_useragent_clienthints.sql │ ├── cu_useragent_clienthints_map.sql │ ├── cuci_temp_edit.sql │ ├── cuci_user.sql │ ├── cuci_wiki_map.sql │ ├── patch-cu_changes-actor-comment.sql │ ├── patch-cu_changes-add-cuc_agent_id.sql │ ├── patch-cu_changes-add-cuc_only_for_read_old.sql │ ├── patch-cu_changes-drop-cuc_actiontext.sql │ ├── patch-cu_changes-drop-cuc_comment.sql │ ├── patch-cu_changes-drop-cuc_only_for_read_old.sql │ ├── patch-cu_changes-drop-cuc_private.sql │ ├── patch-cu_changes-drop-cuc_user.sql │ ├── patch-cu_changes-drop-defaults.sql │ ├── patch-cu_log-actor.sql │ ├── patch-cu_log-add-cul_result_id.sql │ ├── patch-cu_log-comment_table_for_reason.sql │ ├── patch-cu_log-drop-actor_default.sql │ ├── patch-cu_log-drop-cul_reason.sql │ ├── patch-cu_log-drop-cul_reason_id_default.sql │ ├── patch-cu_log-drop-cul_user.sql │ ├── patch-cu_log_event-add-cule_agent_id.sql │ ├── patch-cu_log_event-def.sql │ ├── patch-cu_private_event-add-cupe_agent_id.sql │ ├── patch-cu_private_event-def.sql │ ├── patch-cu_private_event-modify-cupe_actor-nullable.sql │ └── tables-generated.sql └── tables.json ├── src ├── Api │ ├── ApiQueryCheckUser.php │ ├── ApiQueryCheckUserLog.php │ ├── ApiQueryFormattedBlockInfo.php │ ├── CheckUser │ │ ├── ApiQueryCheckUserAbstractResponse.php │ │ ├── ApiQueryCheckUserActionsResponse.php │ │ ├── ApiQueryCheckUserIpUsersResponse.php │ │ └── ApiQueryCheckUserUserIpsResponse.php │ ├── GlobalContributions │ │ └── ApiQueryGlobalContributions.php │ └── Rest │ │ └── Handler │ │ ├── AbstractTemporaryAccountHandler.php │ │ ├── AbstractTemporaryAccountIPHandler.php │ │ ├── AbstractTemporaryAccountNameHandler.php │ │ ├── BatchTemporaryAccountHandler.php │ │ ├── TemporaryAccountHandler.php │ │ ├── TemporaryAccountIPHandler.php │ │ ├── TemporaryAccountLogHandler.php │ │ ├── TemporaryAccountLogTrait.php │ │ ├── TemporaryAccountNameTrait.php │ │ ├── TemporaryAccountRevisionHandler.php │ │ ├── TemporaryAccountRevisionTrait.php │ │ ├── UserAgentClientHintsHandler.php │ │ └── UserInfoHandler.php ├── CheckUser │ ├── CheckUserPagerNavigationBuilder.php │ ├── Pagers │ │ ├── AbstractCheckUserPager.php │ │ ├── CheckUserGetActionsPager.php │ │ ├── CheckUserGetIPsPager.php │ │ ├── CheckUserGetUsersPager.php │ │ └── CheckUserLogPager.php │ ├── SpecialCheckUser.php │ ├── SpecialCheckUserLog.php │ └── Widgets │ │ ├── CIDRCalculator.php │ │ ├── CIDRCalculatorResultBox.php │ │ └── HTMLFieldsetCheckUser.php ├── CheckUserPermissionStatus.php ├── CheckUserQueryInterface.php ├── ClientHints │ ├── ClientHintsBatchFormatterResults.php │ ├── ClientHintsData.php │ ├── ClientHintsLookupResults.php │ ├── ClientHintsReferenceIds.php │ └── UserAgentClientHintsManagerHelperTrait.php ├── EncryptedData.php ├── GlobalContributions │ ├── CheckUserApiRequestAggregator.php │ ├── CheckUserGlobalContributionsLookup.php │ ├── GlobalContributionsPager.php │ ├── GlobalContributionsPagerFactory.php │ └── SpecialGlobalContributions.php ├── GuidedTour │ └── TourLauncher.php ├── Hook │ ├── CheckUserFormatRowHook.php │ ├── CheckUserInsertChangesRowHook.php │ ├── CheckUserInsertLogEventRowHook.php │ ├── CheckUserInsertPrivateEventRowHook.php │ ├── CheckUserSubtitleLinksHook.php │ ├── HookRunner.php │ └── SpecialCheckUserGetLinksFromRowHook.php ├── HookHandler │ ├── AbuseFilterHandler.php │ ├── CentralAuthHandler.php │ ├── CheckUserPrivateEventsHandler.php │ ├── ClientHints.php │ ├── ConditionalRegistrationHandler.php │ ├── DurationMessages.php │ ├── GlobalBlockingHandler.php │ ├── GlobalPreferencesHandler.php │ ├── GroupsHandler.php │ ├── IPInfoHandler.php │ ├── LogDisplayHandler.php │ ├── PageDisplay.php │ ├── PerformRetroactiveAutoblockHandler.php │ ├── Preferences.php │ ├── RLRegisterModulesHandler.php │ ├── RecentChangeSaveHandler.php │ ├── RenameUserSQLHandler.php │ ├── SchemaChangesHandler.php │ ├── SidebarLinksHandler.php │ ├── SpecialPageBeforeExecuteHandler.php │ ├── ToolLinksHandler.php │ ├── UserLinkRendererUserLinkPostRenderHandler.php │ └── UserMergeHandler.php ├── Hooks.php ├── IPContributions │ ├── IPContributionsPager.php │ ├── IPContributionsPagerFactory.php │ └── SpecialIPContributions.php ├── Investigate │ ├── Pagers │ │ ├── ComparePager.php │ │ ├── ComparePagerFactory.php │ │ ├── PagerFactory.php │ │ ├── PreliminaryCheckPager.php │ │ ├── PreliminaryCheckPagerFactory.php │ │ ├── TimelinePager.php │ │ ├── TimelinePagerFactory.php │ │ ├── TimelineRowFormatter.php │ │ └── TimelineRowFormatterFactory.php │ ├── Services │ │ ├── ChangeService.php │ │ ├── CompareService.php │ │ ├── PreliminaryCheckService.php │ │ └── TimelineService.php │ ├── SpecialInvestigate.php │ ├── SpecialInvestigateBlock.php │ └── Utilities │ │ ├── DurationManager.php │ │ └── EventLogger.php ├── Jobs │ ├── LogTemporaryAccountAccessJob.php │ ├── PruneCheckUserDataJob.php │ ├── StoreClientHintsDataJob.php │ └── UpdateUserCentralIndexJob.php ├── Logging │ ├── CheckUserPrivateEventLogFormatter.php │ ├── TemporaryAccountLogFormatter.php │ ├── TemporaryAccountLogger.php │ └── TemporaryAccountLoggerFactory.php ├── ServiceWiring.php ├── Services │ ├── AccountCreationDetailsLookup.php │ ├── ApiQueryCheckUserResponseFactory.php │ ├── CheckUserCentralIndexLookup.php │ ├── CheckUserCentralIndexManager.php │ ├── CheckUserDataPurger.php │ ├── CheckUserInsert.php │ ├── CheckUserLogService.php │ ├── CheckUserLookupUtils.php │ ├── CheckUserPermissionManager.php │ ├── CheckUserTemporaryAccountAutoRevealLookup.php │ ├── CheckUserTemporaryAccountsByIPLookup.php │ ├── CheckUserUserInfoCardService.php │ ├── CheckUserUtilityService.php │ ├── TokenManager.php │ ├── TokenQueryManager.php │ ├── UserAgentClientHintsFormatter.php │ ├── UserAgentClientHintsLookup.php │ └── UserAgentClientHintsManager.php └── ToolLinksMessages.php ├── templates ├── GetActionsLine.mustache ├── GetIPsLine.mustache ├── GetUsersLine.mustache └── SpecialGlobalContributionsLine.mustache └── tests ├── jest ├── .eslintrc.json ├── components │ ├── IPAutoRevealOffDialog.test.js │ ├── IPAutoRevealOnDialog.test.js │ ├── app.test.js │ ├── showIPButton.test.js │ ├── tempAccountsOnboardingDialog.test.js │ ├── tempAccountsOnboardingDialogStepper.test.js │ ├── tempAccountsOnboardingIPInfoStep.test.js │ ├── tempAccountsOnboardingIPRevealStep.test.js │ ├── tempAccountsOnboardingIntroStep.test.js │ └── tempAccountsOnboardingStep.test.js └── utils.js ├── phpunit ├── CheckUserClientHintsCommonTraitTest.php ├── CheckUserServiceWiringTest.php ├── integration │ ├── Api │ │ ├── ApiQueryCheckUserLogTest.php │ │ ├── ApiQueryCheckUserTest.php │ │ ├── ApiQueryFormattedBlockInfoTest.php │ │ ├── CheckUser │ │ │ ├── ApiQueryCheckUserAbstractResponseTest.php │ │ │ └── ApiQueryCheckUserActionsResponseTest.php │ │ ├── GlobalContributions │ │ │ └── ApiQueryGlobalContributionsTest.php │ │ └── Rest │ │ │ └── Handler │ │ │ ├── BatchTemporaryAccountHandlerTest.php │ │ │ ├── TemporaryAccountHandlerTest.php │ │ │ ├── TemporaryAccountIPHandlerTest.php │ │ │ ├── TemporaryAccountLogHandlerTest.php │ │ │ ├── TemporaryAccountRevisionHandlerTest.php │ │ │ ├── UserAgentClientHintsHandlerTest.php │ │ │ └── UserInfoHandlerTest.php │ ├── CheckUser │ │ ├── Pagers │ │ │ ├── AbstractCheckUserPagerTest.php │ │ │ ├── CheckUserGetActionsPagerTest.php │ │ │ ├── CheckUserGetIPsPagerTest.php │ │ │ ├── CheckUserGetUsersPagerTest.php │ │ │ ├── CheckUserPagerTestBase.php │ │ │ ├── DeAbstractedCheckUserPagerTest.php │ │ │ └── Mocks │ │ │ │ └── MockTemplateParser.php │ │ ├── SpecialCheckUserLogTest.php │ │ ├── SpecialCheckUserTest.php │ │ └── Widgets │ │ │ └── CIDRCalculatorTest.php │ ├── CheckUserCommonTraitTest.php │ ├── CheckUserExtensionJsonTest.php │ ├── CheckUserSchemaTest.php │ ├── CheckUserTempUserTestTrait.php │ ├── GlobalContributions │ │ ├── CheckUserApiRequestAggregatorTest.php │ │ ├── CheckUserGlobalContributionsLookupTest.php │ │ ├── GlobalContributionsPagerFactoryTest.php │ │ ├── GlobalContributionsPagerTest.php │ │ └── SpecialGlobalContributionsTest.php │ ├── HookHandler │ │ ├── AbuseFilterHandlerTest.php │ │ ├── CentralAuthHandlerTest.php │ │ ├── CheckUserPrivateEventsHandlerTest.php │ │ ├── ConditionalRegistrationHandlerTest.php │ │ ├── GlobalBlockingHandlerTest.php │ │ ├── GlobalBlockingHandlerWithDatabaseRowsTest.php │ │ ├── GlobalPreferencesHandlerTest.php │ │ ├── GroupsHandlerTest.php │ │ ├── IPInfoHandlerTest.php │ │ ├── PageDisplayDatabaseTest.php │ │ ├── PageDisplayTest.php │ │ ├── PerformRetroactiveAutoblockHandlerTest.php │ │ ├── PreferencesTest.php │ │ ├── RecentChangeSaveHandlerTest.php │ │ ├── SidebarLinksHandlerTest.php │ │ ├── SpecialPageBeforeExecuteHandlerTest.php │ │ ├── ToolLinksHandlerTest.php │ │ ├── UserLinkRendererUserLinkPostRenderHandlerTest.php │ │ └── UserMergeHandlerTest.php │ ├── IPContributions │ │ ├── IPContributionsPagerFactoryTest.php │ │ └── SpecialIPContributionsTest.php │ ├── Investigate │ │ ├── CompareTabTestDataTrait.php │ │ ├── Pagers │ │ │ ├── ComparePagerFactoryTest.php │ │ │ ├── ComparePagerTest.php │ │ │ ├── PreliminaryCheckPagerFactoryTest.php │ │ │ ├── PreliminaryCheckPagerTest.php │ │ │ ├── TimelinePagerFactoryTest.php │ │ │ ├── TimelinePagerTest.php │ │ │ ├── TimelineRowFormatterFactoryTest.php │ │ │ └── TimelineRowFormatterTest.php │ │ ├── Services │ │ │ ├── CompareServiceTest.php │ │ │ ├── PreliminaryCheckServiceDatabaseTest.php │ │ │ ├── PreliminaryCheckServiceTest.php │ │ │ └── TimelineServiceTest.php │ │ ├── SpecialInvestigateBlockTest.php │ │ ├── SpecialInvestigateTest.php │ │ └── Utilities │ │ │ └── DurationManagerTest.php │ ├── Jobs │ │ ├── LogTemporaryAccountAccessJobTest.php │ │ ├── PruneCheckUserDataJobTest.php │ │ ├── StoreClientHintsDataJobTest.php │ │ └── UpdateUserCentralIndexJobTest.php │ ├── Logging │ │ ├── CheckUserPrivateEventLogFormatterTest.php │ │ ├── TemporaryAccountLogFormatterTest.php │ │ └── TemporaryAccountLoggerTest.php │ ├── Services │ │ ├── AccountCreationDetailsLookupTest.php │ │ ├── CheckUserCentralIndexLookupTest.php │ │ ├── CheckUserCentralIndexManagerTest.php │ │ ├── CheckUserInsertTest.php │ │ ├── CheckUserLogServiceTest.php │ │ ├── CheckUserLookupUtilsTest.php │ │ ├── CheckUserUserInfoCardServiceTest.php │ │ ├── TokenManagerTest.php │ │ ├── TokenQueryManagerTest.php │ │ ├── UserAgentClientHintsFormatterTest.php │ │ ├── UserAgentClientHintsLookupTest.php │ │ └── UserAgentClientHintsManagerTest.php │ └── maintenance │ │ ├── DeleteReadOldRowsInCuChangesTest.php │ │ ├── DeleteReadOldRowsInCuChangesWithoutReadOldColumnTest.php │ │ ├── FixTrailingSpacesInLogsTest.php │ │ ├── GenerateStatsAboutClientHintsDataTest.php │ │ ├── MigrateTemporaryAccountIPViewerGroupTest.php │ │ ├── MoveLogEntriesFromCuChangesTest.php │ │ ├── MoveLogEntriesFromCuChangesWithoutReadOldColumnTest.php │ │ ├── PopulateCentralCheckUserIndexTablesTest.php │ │ ├── PopulateCheckUserTableTest.php │ │ ├── PopulateCheckUserTablesWithSimulatedDataTest.php │ │ ├── PopulateCulActorTest.php │ │ ├── PopulateCulActorWithoutUpdateAppliedTest.php │ │ ├── PopulateCulCommentTest.php │ │ ├── PurgeOldDataTest.php │ │ ├── mocks │ │ └── SemiMockedCheckUserDataPurger.php │ │ └── patches │ │ ├── mysql │ │ ├── patch-cu_changes-add-cuc_actiontext.sql │ │ ├── patch-cu_changes-add-cuc_only_for_read_old.sql │ │ ├── patch-cu_changes-add-cuc_private.sql │ │ ├── patch-cu_log-add-cul_reason.sql │ │ └── patch-cu_log-add-cul_user.sql │ │ ├── postgres │ │ ├── patch-cu_changes-add-cuc_actiontext.sql │ │ ├── patch-cu_changes-add-cuc_only_for_read_old.sql │ │ ├── patch-cu_changes-add-cuc_private.sql │ │ ├── patch-cu_log-add-cul_reason.sql │ │ └── patch-cu_log-add-cul_user.sql │ │ └── sqlite │ │ ├── patch-cu_changes-add-cuc_actiontext.sql │ │ ├── patch-cu_changes-add-cuc_only_for_read_old.sql │ │ ├── patch-cu_changes-add-cuc_private.sql │ │ ├── patch-cu_log-add-cul_reason.sql │ │ └── patch-cu_log-add-cul_user.sql ├── structure │ └── BundleSizeTest.php └── unit │ ├── Api │ └── Rest │ │ └── Handler │ │ └── UserAgentClientHintsHandlerTest.php │ ├── CheckUser │ ├── Pagers │ │ ├── AbstractCheckUserPagerTest.php │ │ ├── CheckUserGetActionsPagerTest.php │ │ ├── CheckUserGetIPsPagerTest.php │ │ ├── CheckUserGetUsersPagerTest.php │ │ ├── CheckUserLogPagerTest.php │ │ └── CheckUserPagerUnitTestBase.php │ ├── SpecialCheckUserLogTest.php │ ├── SpecialCheckUserTest.php │ └── Widgets │ │ └── CIDRCalculatorResultBoxTest.php │ ├── CheckUserPermissionStatusTest.php │ ├── ClientHints │ ├── ClientHintsBatchFormatterResultsTest.php │ ├── ClientHintsDataTest.php │ ├── ClientHintsLookupResultsTest.php │ └── ClientHintsReferenceIdsTest.php │ ├── GlobalContributions │ └── CheckUserGlobalContributionsLookupTest.php │ ├── GuidedTour │ └── TourLauncherTest.php │ ├── HookHandler │ ├── CheckUserPrivateEventsHandlerTest.php │ ├── ClientHintsTest.php │ ├── LogDisplayHandlerTest.php │ ├── PerformRetroactiveAutoblockHandlerTest.php │ ├── RLRegisterModulesHandlerTest.php │ ├── RecentChangeSaveHandlerTest.php │ ├── RenameUserSQLHandlerTest.php │ └── ToolLinksHandlerTest.php │ ├── HookRunnerTest.php │ ├── Investigate │ └── Services │ │ └── CompareServiceTest.php │ ├── Jobs │ ├── LogTemporaryAccountAccessJobTest.php │ └── StoreClientHintsDataJobTest.php │ ├── Logging │ ├── TemporaryAccountLoggerFactoryTest.php │ └── TemporaryAccountLoggerTest.php │ ├── Services │ ├── AccountCreationDetailsLookupTest.php │ ├── ApiQueryCheckUserResponseFactoryTest.php │ ├── CheckUserDataPurgerTest.php │ ├── CheckUserInsertTest.php │ ├── CheckUserLogServiceTest.php │ ├── CheckUserPermissionManagerTest.php │ ├── UserAgentClientHintsFormatterTest.php │ ├── UserAgentClientHintsLookupTest.php │ └── UserAgentClientHintsManagerTest.php │ ├── ToolLinksMessagesTest.php │ └── maintenance │ ├── GenerateStatsAboutClientHintsDataTest.php │ ├── MoveLogEntriesFromCuChangesTest.php │ └── PopulateCheckUserTablesWithSimulatedDataTest.php ├── qunit ├── .eslintrc.json ├── ext.checkUser.clientHints │ └── index.test.js ├── ext.checkUser.ipInfo.hooks │ └── ext.ipinfo.infobox.widget.test.js ├── ext.checkUser.tempAccounts │ ├── BlockDetailsPopupButtonWidget.test.js │ ├── SpecialBlock.test.js │ ├── SpecialContributions.test.js │ ├── initOnHook.test.js │ ├── initOnLoad.test.js │ ├── ipReveal.test.js │ ├── ipRevealUtils.test.js │ ├── rest.test.js │ └── utils.js ├── ext.checkUser │ ├── checkuser │ │ ├── checkUserHelper │ │ │ ├── buildUserElement.test.js │ │ │ ├── cases │ │ │ │ ├── buildUserElement.json │ │ │ │ ├── calculateIPNumber.json │ │ │ │ ├── compareIPs.json │ │ │ │ ├── createTable.json │ │ │ │ ├── createTableText.json │ │ │ │ └── generateData.json │ │ │ ├── createTable.test.js │ │ │ ├── createTableText.test.js │ │ │ ├── generateData.test.js │ │ │ └── utils.test.js │ │ └── getUsersBlockForm.test.js │ └── investigate │ │ ├── blockform.test.js │ │ └── cases │ │ └── blockFormWidgetVisibility.json └── index.js └── selenium ├── .eslintrc.json ├── LocalSettingsSetup.js ├── README.md ├── checkuserlogin.js ├── fixtures └── ExtraLocalSettings.php ├── pageobjects ├── checkuser.page.js ├── checkuserlog.page.js ├── edit.page.js ├── historyWithOnboardingDialog.page.js ├── investigate.page.js └── logout.page.js ├── specs ├── checkuser.js ├── checkuserlog.js ├── clienthints.js ├── investigate.js └── tempAccountsOnboarding.js └── wdio.conf.js /.eslintignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | /coverage/ 3 | 4 | # Language files written automatically by TranslateWiki 5 | /**/i18n/**/*.json 6 | !/**/i18n/**/en.json 7 | !/**/i18n/**/qqq.json 8 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "wikimedia/server" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /composer.lock 2 | /node_modules/ 3 | /vendor/ 4 | tests/selenium/log 5 | /coverage/ 6 | 7 | # Editors 8 | *.kate-swp 9 | *~ 10 | \#*# 11 | .#* 12 | .*.swp 13 | .project 14 | .buildpath 15 | .classpath 16 | .settings 17 | .env 18 | cscope.files 19 | cscope.out 20 | *.orig 21 | ## NetBeans 22 | nbproject* 23 | project.index 24 | ## Sublime 25 | sublime-* 26 | sftp-config.json 27 | /.eslintcache 28 | ## vscode 29 | .vscode/ 30 | /.stylelintcache 31 | -------------------------------------------------------------------------------- /.gitreview: -------------------------------------------------------------------------------- 1 | [gerrit] 2 | host=gerrit.wikimedia.org 3 | port=29418 4 | project=mediawiki/extensions/CheckUser.git 5 | track=1 6 | -------------------------------------------------------------------------------- /.phan/config.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CheckUser\.alias\.php 6 | 7 | 8 | src/Hooks\.php 9 | 10 | . 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "stylelint-config-wikimedia/support-modern", 4 | "stylelint-config-wikimedia/mediawiki" 5 | ], 6 | "rules": { 7 | "selector-class-pattern": "^(mw|oo-ui|ext-checkuser)-" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct). 2 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = function ( grunt ) { 3 | const conf = grunt.file.readJSON( 'extension.json' ); 4 | grunt.loadNpmTasks( 'grunt-eslint' ); 5 | grunt.loadNpmTasks( 'grunt-banana-checker' ); 6 | grunt.loadNpmTasks( 'grunt-stylelint' ); 7 | 8 | grunt.initConfig( { 9 | eslint: { 10 | options: { 11 | cache: true, 12 | fix: grunt.option( 'fix' ) 13 | }, 14 | all: '.' 15 | }, 16 | stylelint: { 17 | options: { 18 | cache: true 19 | }, 20 | all: [ 21 | '**/*.{css,less}', 22 | '!vendor/**', 23 | '!node_modules/**', 24 | '!coverage/**' 25 | ] 26 | }, 27 | banana: conf.MessagesDirs 28 | } ); 29 | 30 | grunt.registerTask( 'test', [ 'eslint', 'banana', 'stylelint' ] ); 31 | }; 32 | -------------------------------------------------------------------------------- /bundlesize.config.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "resourceModule": "ext.checkUser.clientHints", 4 | "maxSize": null 5 | } 6 | ] 7 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require-dev": { 3 | "mediawiki/mediawiki-codesniffer": "47.0.0", 4 | "mediawiki/mediawiki-phan-config": "0.15.1", 5 | "mediawiki/minus-x": "1.1.3", 6 | "php-parallel-lint/php-console-highlighter": "1.0.0", 7 | "php-parallel-lint/php-parallel-lint": "1.4.0" 8 | }, 9 | "scripts": { 10 | "test": [ 11 | "parallel-lint . --exclude vendor --exclude node_modules", 12 | "@phpcs", 13 | "minus-x check ." 14 | ], 15 | "fix": [ 16 | "minus-x fix .", 17 | "phpcbf" 18 | ], 19 | "phan": "phan -d . --long-progress-bar", 20 | "phpcs": "phpcs -sp --cache" 21 | }, 22 | "require": { 23 | "firebase/php-jwt": "6.10.0" 24 | }, 25 | "config": { 26 | "allow-plugins": { 27 | "dealerdirect/phpcodesniffer-composer-installer": true 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /i18n/acm.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ahmedadeljaff", 5 | "MRidhaAJ" 6 | ] 7 | }, 8 | "checkuser-contribs-log": "مراجعات المستخدم" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/alt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz" 5 | ] 6 | }, 7 | "checkuser-investigateblock-warning-confirmaction": "Слер чындап мыны эдерге турган болзор, алдында \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" темдекти тургузар." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/am.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Codex Sinaiticus" 5 | ] 6 | }, 7 | "checkuser-reason": "ምክንያት:", 8 | "checkuser-all": "ሁሉ", 9 | "checkuser-search": "ፍለጋ", 10 | "checkuser-search-submit": "ፍለጋ" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/ang.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "checkuser-reason": "Racu:" 6 | } 7 | -------------------------------------------------------------------------------- /i18n/ann.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Katelem" 5 | ] 6 | }, 7 | "checkuser-investigateblock-email-label": "Gban inyi ikaria etip-olik", 8 | "checkuser-investigateblock-notice-position-label": "Irek", 9 | "checkuser-investigate-subtitle-cancel-button-label": "Gwak", 10 | "checkuser-investigate-subtitle-continue-button-label": "Fo isi", 11 | "checkuser-investigate-tour-block-title": "Ìre oweek igbagban?" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/anp.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Proabscorp!" 5 | ] 6 | }, 7 | "group-checkuser": "सदस्य जाँचकर्ता सिनी", 8 | "checkuser-all": "सब्भे", 9 | "checkuser-investigate-duration-option-all": "सब्भे" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/api/az.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Nemoralis" 5 | ] 6 | }, 7 | "checkuser-api-useragent-clienthints-explanation": "{{SITENAME}} vandalizm və sui-istifadənin tənzimlənməsinə kömək etmək üçün istifadəçi-agent client hint məlumatlarını toplayır. Ətraflı məlumat üçün: https://www.mediawiki.org/wiki/Extension:CheckUser/Client_Hints" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/api/bn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "আফতাবুজ্জামান" 5 | ] 6 | }, 7 | "apihelp-query+checkuser-param-reason": "পরীক্ষার কারণ।", 8 | "checkuser-api-useragent-clienthints-revision-user-mismatch": "ব্যবহারকারী $1 $2 নং সংস্করণের লেখক নয়" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/bs.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Srdjan m", 5 | "Srđan" 6 | ] 7 | }, 8 | "apihelp-query+checkuser-param-timecond": "Vremensko ograničenje za korisničke podatke (npr, \"-2 weeks\" ili \"2 weeks ago\").", 9 | "apierror-checkuser-timelimit": "Morate koristiti ispravno vremensko ograničenje (npr, \"-2 weeks\" ili \"2 weeks ago\")." 10 | } 11 | -------------------------------------------------------------------------------- /i18n/api/cs.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Martin Urbanec" 5 | ] 6 | }, 7 | "apihelp-query+checkuser-param-request": "Typ požadavku CheckUser:", 8 | "apihelp-query+checkuser-param-reason": "Důvod kontroly.", 9 | "apihelp-query+checkuser-param-limit": "Omezení počtu výsledků.", 10 | "apihelp-query+checkuserlog-param-limit": "Omezení počtu výsledků.", 11 | "apierror-checkuser-missingsummary": "Musíte uvést důvod kontroly.", 12 | "apierror-checkuser-invalidmode": "Neznámý režim požadavku" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/api/da.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Cgtdk", 5 | "Saederup92" 6 | ] 7 | }, 8 | "apihelp-query+checkuser-param-target": "Brugernavn, ip-adresse eller CIDR-interval at tjekke.", 9 | "apihelp-query+checkuser-param-reason": "Begrundelse for tjek.", 10 | "apihelp-query+checkuser-example-2": "Tjek redigeringer fra 192.0.2.0/24", 11 | "apihelp-query+checkuserlog-param-user": "Brugernavnet på tjekbrugeren.", 12 | "apierror-checkuser-missingsummary": "Du skal angive en begrundelse for tjekket." 13 | } 14 | -------------------------------------------------------------------------------- /i18n/api/es-formal.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "MarcoAurelio" 5 | ] 6 | }, 7 | "apierror-checkuser-missingsummary": "Debe introducir una razón para la comprobación.", 8 | "apierror-checkuser-timelimit": "Necesita introducir un plazo máximo de tiempo correcto (como \"-2 weeks\" o \"2 weeks ago\")." 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/got.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Gothicspeaker" 5 | ] 6 | }, 7 | "apihelp-query+checkuser-param-target": "𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽𐌰𐌼𐍉, IP 𐍂𐌰𐌸𐌾𐍉, 𐌰𐌹𐌸𐌸𐌰𐌿 CIDR", 8 | "apihelp-query+checkuser-param-xff": "𐌱𐍂𐌿𐌺𐌴𐌹 𐍇𐍆𐍆 𐌲𐌹𐌱𐍉𐍃 𐌽𐌹𐌷 IP 𐍂𐌰𐌸𐌾𐍉." 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/gu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "CptViraj" 5 | ] 6 | }, 7 | "apihelp-query+checkuser-param-reason": "તપાસ માટેનું કારણ.", 8 | "apihelp-query+checkuserlog-param-user": "સભ્યતપાસકનું સભ્યનામ.", 9 | "apierror-checkuser-missingsummary": "તમારે તપાસ માટેનું કારણ આપવું જરૂરી છે." 10 | } 11 | -------------------------------------------------------------------------------- /i18n/api/ha.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ezeone10" 5 | ] 6 | }, 7 | "apihelp-query+globalcontributions-param-target": "Sunan mai amfani don duba (bai kamata ya zama IP ba)", 8 | "apihelp-query+globalcontributions-param-offset": "Ci gaba da daidaitawa don ci gaba da ƙididdigar daga." 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/hi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Sfic" 5 | ] 6 | }, 7 | "apihelp-query+checkuser-param-limit": "पंक्तियों की सीमा", 8 | "apihelp-query+checkuserlog-param-limit": "पंक्तियों की सीमा" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/ka.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Otogi" 5 | ] 6 | }, 7 | "apihelp-query+checkuser-param-reason": "შეჩერების მიზეზი", 8 | "apihelp-query+checkuser-param-limit": "რიგების ლიმიტი", 9 | "apihelp-query+checkuserlog-param-limit": "რიგების ლიმიტი" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/api/lb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Robby", 5 | "Volvox" 6 | ] 7 | }, 8 | "apihelp-query+checkuser-param-reason": "Grond fir nozekucken.", 9 | "apihelp-query+globalcontributions-param-target": "Benotzernumm fir nozekucken (däerf keng IP sinn).", 10 | "apihelp-query+globalcontributions-param-limit": "Limitt vun den Zeilen.", 11 | "checkuser-api-useragent-clienthints-nonexistent-id": "D'$1-ID $2 gëtt et net" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/api/mai.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Tulsi Bhagat" 5 | ] 6 | }, 7 | "apihelp-query+checkuser-param-reason": "जाँच करे के कारण" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/api/mr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "McDutchie", 5 | "V.narsikar" 6 | ] 7 | }, 8 | "apihelp-query+checkuser-param-target": "तपासावयाचे सदस्यनाव, अंकपत्ता किंवा सीआयडीआर रेंज.", 9 | "apihelp-query+checkuser-param-reason": "तपासण्याचे कारण.", 10 | "apihelp-query+checkuser-param-limit": "ओळींची मर्यादा.", 11 | "apihelp-query+checkuser-param-timecond": "सदस्यडाटाची काल मर्यादा(जसे \"-2 weeks\" किंवा \"2 weeks ago\").", 12 | "apihelp-query+checkuserlog-param-limit": "ओळींची मर्यादा." 13 | } 14 | -------------------------------------------------------------------------------- /i18n/api/ms.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Anakmalaysia" 5 | ] 6 | }, 7 | "apihelp-query+checkuser-param-target": "Nama pengguna, alamat IP atau 'CIDR range' untuk disemak.", 8 | "apihelp-query+checkuser-param-xff": "Gunakan data XFF daripada alamat IP.", 9 | "apihelp-query+checkuser-example-1": "Semak alamat IP untuk [[User:Example]]" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/api/ne.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "बिप्लब आनन्द" 5 | ] 6 | }, 7 | "apihelp-query+checkuser-param-reason": "जाँच्ने कारण।", 8 | "apihelp-query+checkuser-param-limit": "पङ्क्तिहरूको सीमा।", 9 | "apihelp-query+checkuserlog-param-user": "प्रयोगकर्ताजाँचको प्रयोगकर्ता नाम।", 10 | "apihelp-query+checkuserlog-param-target": "प्रयोगकर्ता जाँच, आइपी ठेगाना, वा सिआइडिआर सीमा।", 11 | "apihelp-query+checkuserlog-param-limit": "पङ्क्तिहरूको सीमा।" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/api/sr-ec.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Milicevic01" 5 | ] 6 | }, 7 | "apihelp-query+checkuser-param-request": "Врста Чекјузер захтева:", 8 | "apihelp-query+checkuserlog-param-reason": "Разлог за ову проверу.", 9 | "checkuser-api-useragent-clienthints-revision-user-mismatch": "Корисник $1 није аутор измене $2", 10 | "checkuser-api-useragent-clienthints-nonexistent-id": "$1 ID $2 не постоји" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/api/sr-el.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "apihelp-query+checkuser-param-request": "Vrsta Čekjuzer zahteva:", 6 | "apihelp-query+checkuserlog-param-reason": "Razlog za ovu proveru.", 7 | "checkuser-api-useragent-clienthints-revision-user-mismatch": "Korisnik $1 nije autor izmene $2", 8 | "checkuser-api-useragent-clienthints-nonexistent-id": "$1 ID $2 ne postoji" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/api/sw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Joeamj" 5 | ] 6 | }, 7 | "apihelp-query+globalcontributions-summary": "Onyesha mabadiliko ya hivi karibuni kwenye wiki zote kwa mtumiaji aliyesajiliwa.", 8 | "apihelp-query+globalcontributions-param-target": "Jina la mtumiaji la kutafuta (lazima lisiwe IP).", 9 | "apihelp-query+globalcontributions-param-limit": "Ukomo wa safu.", 10 | "apihelp-query+globalcontributions-param-offset": "Muendelezo kukabiliana na kuendelea kuhesabu kutoka.", 11 | "apihelp-query+globalcontributions-example-1": "Onyesha mabadiliko ya hivi karibuni kwenye wiki zote kwa mtumiaji fulani.", 12 | "apihelp-query+globalcontributions-example-2": "Onyesha masahihisho ya hivi majuzi kwenye wiki zote kwa mtumiaji fulani kutoka kwa mwendelezo fulani, na kikomo maalum." 13 | } 14 | -------------------------------------------------------------------------------- /i18n/arc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "334a", 5 | "Basharh" 6 | ] 7 | }, 8 | "checkuser-reason": "ܥܠܬܐ:", 9 | "checkuser-showlog": "ܚܘܝ ܣܓܠܐ", 10 | "checkuser-week-1": "ܫܒܘܥܐ ܐܚܪܝܐ", 11 | "checkuser-week-2": "ܬܪܝܢ ܫܒܘܥ̈ܐ ܐܚܪ̈ܝܐ", 12 | "checkuser-month": "ܬܠܬܝܢ ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ", 13 | "checkuser-all": "ܟܠ", 14 | "checkuser-blocked": "ܚܪܝܡܐ", 15 | "checkuser-locked": "ܩܦܝܠܐ", 16 | "checkuser-search": "ܒܨܝܐ", 17 | "checkuser-search-submit": "ܒܨܝܐ" 18 | } 19 | -------------------------------------------------------------------------------- /i18n/ary.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ideophagous", 5 | "Reda Benkhadra" 6 | ] 7 | }, 8 | "checkuser-target": "لادريسة د لأيپي ؤلا السمية د لخدايمي:", 9 | "checkuser-all": "كلشي", 10 | "checkuser-investigate-preliminary-table-header-groups": "لݣروپات" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/as.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bishnu Saikia", 5 | "Chaipau", 6 | "Simbu123" 7 | ] 8 | }, 9 | "checkuser-desc": "উপযুক্ত অনুমতিৰ সৈতে সদস্যসকলক অন্য সদস্যৰ আইপি ঠিকনা আৰু অন্যান্য তথ্য পৰীক্ষা কৰাৰ ক্ষমতা প্ৰদান কৰে", 10 | "checkuser": "সদস্য পৰীক্ষণ", 11 | "checkuserlog": "সদস্য পৰীক্ষণ অভিলেখ", 12 | "checkuser-contribs": "সদস্যৰ আইপি ঠিকনাসমূহ পৰীক্ষা কৰক", 13 | "checkuser-contribs-log": "শেহতীয়া সদস্য পৰীক্ষণ", 14 | "group-checkuser": "সদস্য পৰীক্ষক", 15 | "group-checkuser-member": "{{GENDER:$1|সদস্য পৰীক্ষক}}", 16 | "action-checkuser": "সদস্যৰ আইপি ঠিকনা আৰু অন্যান্য তথ্য পৰীক্ষা কৰক", 17 | "grouppage-checkuser": "{{ns:project}}:সদস্য পৰীক্ষক", 18 | "checkuser-reason": "কাৰণ:", 19 | "checkuser-period": "সময়কাল:", 20 | "checkuser-week-1": "যোৱা সপ্তাহ", 21 | "checkuser-week-2": "যোৱা দুই সপ্তাহ", 22 | "checkuser-month": "যোৱা ৩০ দিন", 23 | "checkuser-all": "সকলো", 24 | "checkuser-search": "সদস্য পৰীক্ষণৰ অভিলেখ সন্ধান কৰক", 25 | "checkuser-search-submit": "সন্ধান কৰক" 26 | } 27 | -------------------------------------------------------------------------------- /i18n/av.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Omarov M.", 5 | "Аль-Гимравий" 6 | ] 7 | }, 8 | "checkuser-reason": "ГӀилла:", 9 | "checkuser-target": "IP-адрес яги хӀалтӀизабунцӀар:" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/avk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Wikimistusik" 5 | ] 6 | }, 7 | "checkuser": "Stujera va favesik", 8 | "group-checkuser": "Stujera va favesik", 9 | "group-checkuser-member": "Stujera va favesik", 10 | "grouppage-checkuser": "{{ns:project}}:Stujera va favesik", 11 | "checkuser-reason": "Lazava :", 12 | "checkuser-showlog": "Nedira va \"log\"", 13 | "checkuser-target": "Favesik ok IP mane", 14 | "checkuser-empty": "\"Log\" iyeltak tir vlardaf.", 15 | "checkuser-nomatch": "Nedoy trasiks", 16 | "checkuser-check": "Stujera", 17 | "checkuser-blocked": "Elekan", 18 | "checkuser-search": "Aneyara", 19 | "checkuser-search-submit": "Aneyara" 20 | } 21 | -------------------------------------------------------------------------------- /i18n/awa.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz" 5 | ] 6 | }, 7 | "checkuser-investigateblock-warning-confirmaction": "यदि आप विश्वासपूर्ण रूप से यही करना चाहते हैं, तो कृपया \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" की फ़ील्ड को नीचे से चुनिए।" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/azb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz", 5 | "E THP", 6 | "Ebrahimi-amir", 7 | "පසිඳු කාවින්ද" 8 | ] 9 | }, 10 | "checkuser": "تفتیشچیلر", 11 | "grouppage-checkuser": "{{ns:project}}:تفتیشچیلر", 12 | "checkuser-reason": "ندن:", 13 | "checkuser-all": "بوتون", 14 | "checkuser-search": "آختار", 15 | "checkuser-search-submit": "آختار", 16 | "checkuser-investigateblock-warning-confirmaction": "Əgər həqiqətən bunu etmək istədiyinizə əminsinizsə, lütfən, aşağıdakı \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" seçimini işarələyin." 17 | } 18 | -------------------------------------------------------------------------------- /i18n/ban.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Chinamoonroll", 5 | "Dreamy Jazz" 6 | ] 7 | }, 8 | "grant-checkuser": "Ngaksés data panuréksa", 9 | "checkuser-investigateblock-warning-confirmaction": "Pinaka ragané seken-seken jagi ngamargiang, turéksa kolom \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" ring wagian metén." 10 | } 11 | -------------------------------------------------------------------------------- /i18n/bcc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Moshtank", 5 | "Mostafadaneshvar", 6 | "Sultanselim baloch" 7 | ] 8 | }, 9 | "checkuser-desc": "کاربرانء اجازت دن گون مناسبین اجازت آدرسان آی پی یک کاربری و دگه اطلاعاتء کنترل بکنت", 10 | "checkuser": "کنترل کاربر", 11 | "checkuserlog": "آمار کنترل کاربر", 12 | "group-checkuser": "کنترل کابران", 13 | "group-checkuser-member": "کنترل کاربر", 14 | "right-checkuser": "کنترل کن آی پی کاربران و دگه اطلاعاتء", 15 | "grouppage-checkuser": "{{ns:project}}:کنترل کاربر", 16 | "checkuser-reason": "دلیل:", 17 | "checkuser-showlog": "آمار پیش دار", 18 | "checkuser-query": "درخواست نوکین تغییرات", 19 | "checkuser-target": "کاربر یا آی پی", 20 | "checkuser-users": "بگر کابرانء", 21 | "checkuser-ips": "آی پی آن گر", 22 | "checkuser-empty": "آمار شمال هچ آیتمی نهنت.", 23 | "checkuser-nomatch": "هچ همدابی در نکپت", 24 | "checkuser-check": "کنترل", 25 | "checkuser-blocked": "محدود", 26 | "checkuser-search": "گردگ", 27 | "checkuser-search-submit": "شۏھاز", 28 | "checkuser-ipeditcount": "~$1 چه کلی کابران", 29 | "checkuser-showmain": "په فرم اصلی کنترل کاربر تر" 30 | } 31 | -------------------------------------------------------------------------------- /i18n/bew.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz" 5 | ] 6 | }, 7 | "checkuser-investigateblock-warning-confirmaction": "Kalo lu yakin èmang pèngèn nglakoninnya, tulung perèksa kotak \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" di bawah." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/bgc-arab.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "امین اکبر" 5 | ] 6 | }, 7 | "checkuser-search-submit": "ٹوھؤ" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/bgn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ibrahim khashrowdi" 5 | ] 6 | }, 7 | "checkuser-all": "موچین" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/bjn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ezagren" 5 | ] 6 | }, 7 | "checkuser-investigate-legend": "Gagai ngaran pamakai, alamat IP, atawa rantang IP", 8 | "checkuser-investigate-notice-no-results": "Kadada hasil.", 9 | "checkuser-investigate-filters-legend": "Panyaring", 10 | "checkuser-investigate-compare-table-cell-unregistered": "Kada tadaptar" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/blk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Khun Kt", 5 | "咽頭べさ" 6 | ] 7 | }, 8 | "group-checkuser": "စောႏတနာႏစဲစ်ထွားသားဖိုင်ႏ", 9 | "checkuser-target": "အုဲင်ပီလိပ်စာ တဝ်းလဲ့ ကေားသုင်ꩻသားမိဥ်ꩻ:", 10 | "checkuser-month-2": "အဆုဲင်ꩻသွတ်ꩻ လꩻလဲဉ်း မွူးနီꩻ ၆၀" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/bnn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Akamycoco" 5 | ] 6 | }, 7 | "checkuser-investigate-preliminary-table-header-editcount": "Kapha mapatas" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/brx.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bkbrahma1" 5 | ] 6 | }, 7 | "checkuser-userinfocard-active-blocks-row-main-label": "सांग्रां ब्लकफोर।", 8 | "checkuser-userinfocard-global-edits-row-main-label": "बुहुमनां सुजुनायफोर", 9 | "checkuser-userinfocard-local-edits-row-suffix-label": "गिदिंफिननाय।", 10 | "checkuser-userinfocard-new-articles-row-main-label": "गोदान लिरबिदांफोर।", 11 | "checkuser-userinfocard-thanks-row-suffix-label": "होनाय", 12 | "checkuser-userinfocard-checks-row-suffix-label": "जोबथा नायसंनाय जाबाय।", 13 | "checkuser-userinfocard-error-title": "मोनसे गोरोन्थि जादों।", 14 | "checkuser-userinfocard-error-no-data": "बे बाहायगिरिनि थाखाय खौरांखौ मोनफिननो हायाखै। अन्नानै उनाव नाजाफिन।" 15 | } 16 | -------------------------------------------------------------------------------- /i18n/bxr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz" 5 | ] 6 | }, 7 | "checkuser-investigateblock-warning-confirmaction": "Хэрбээ та үнэхөөрөө иигэжэ хэхэеэ бодобол, доро байһан «{{int:checkuser-investigateblock-confirm-blocks-label}}» тэмдэг табиит даа." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/cdo-hant.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Winston Sung" 5 | ] 6 | }, 7 | "checkuser-search": "尋討檢查用戶其記錄條目" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/ch.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jatrobat" 5 | ] 6 | }, 7 | "checkuser-search": "Aligao", 8 | "checkuser-search-submit": "Aligao" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/co.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "group-checkuser": "Controllori", 6 | "group-checkuser-member": "Controllore", 7 | "grouppage-checkuser": "{{ns:project}}:Controllori" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/crh-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Don Alessandro" 5 | ] 6 | }, 7 | "checkuser-global-contributions-link": "global isseler", 8 | "checkuser-global-contributions-link-sidebar": "Global isseler", 9 | "checkuser-global-contributions": "Global isselerni qıdıruv", 10 | "checkuser-global-contributions-subtitle": "İsselerni körmek aqqıñız olğan bütün vikiler içün soñki {{PLURAL:$1|künden}} neticeler kösterile. Viki başına $2 netice ile sıñırlıdır.", 11 | "checkuser-global-contributions-target-label": "Qullanıcı adı, IP adresi ve ya aralığı:", 12 | "checkuser-global-contributions-target-placeholder": "Qullanıcı adı, IP adresi ve ya aralığı", 13 | "checkuser-global-contributions-search-form-wrapper": "Global isselerni qıdıruv", 14 | "checkuser-global-contributions-results-title": "$1 içün global isseler" 15 | } 16 | -------------------------------------------------------------------------------- /i18n/csb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Byulent", 5 | "Kaszeba", 6 | "Kirsan" 7 | ] 8 | }, 9 | "checkuser-all": "wszëtczé", 10 | "checkuser-search": "Szëkna w registrze sprôwdzających brëkòwników", 11 | "checkuser-log-search-target": "Cél:" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/cu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ОйЛ" 5 | ] 6 | }, 7 | "checkuser-reason": "какъ съмꙑслъ :", 8 | "checkuser-showlog": "виждь їсторїѩ", 9 | "checkuser-target": "IP число или польꙃєватєлꙗ имѧ :", 10 | "checkuser-all": "вьсꙗ", 11 | "checkuser-search": "исканиѥ", 12 | "checkuser-search-submit": "ищи" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/cv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Chuvash2014" 5 | ] 6 | }, 7 | "checkuser-target": "IP адрес е усă куракан ят:", 8 | "checkuser-search": "Шыра", 9 | "checkuser-search-submit": "Туп" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/dag.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kalakpagh" 5 | ] 6 | }, 7 | "right-checkuser-temporary-account-no-preference": "Lihimi IP fasara nima shɛli bɛ ni zaŋ saha bela akuanti nima niŋ ŋɔ ka di bɛ bori suhiyurilim lihibu", 8 | "action-checkuser-temporary-account-no-preference": "Lihimi IP fasara nima shɛli bɛ ni zaŋ saha bela akuanti niŋ ŋɔ" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/dga.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Domo John", 5 | "Kuukye", 6 | "Robert" 7 | ] 8 | }, 9 | "checkuser-contribs-log": "Detona kaa nyaabo", 10 | "checkuser-contribs-log-initiator": "Detona ŋa kaa nyaabo baarɛɛŋ", 11 | "checkuser-showlog": "Kaa nyaabo sɛgepoɔbo", 12 | "checkuser-recent-checks": "Kaa nyaabo kyaare boɔbo zie ŋa", 13 | "checkuser-showmain": "Leɛre eŋ {{#special:CheckUser}}", 14 | "checkuser-show-investigate": "Leɛre eŋ", 15 | "checkuser-link-investigate-label": "E nyɛ" 16 | } 17 | -------------------------------------------------------------------------------- /i18n/dv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "MAL MALDIVE" 5 | ] 6 | }, 7 | "checkuser-ip-contributions-deleted-contributions-link": "ފޮހެލާފައިވާ މެމްބަރުގެ ޙިއްޞާ", 8 | "checkuser-ip-contributions-contributions-link": "ޙިއްޞާ", 9 | "checkuser-ip-contributions-special-ip-contributions-button": "ވަގުތީ އައިޕީ އެޑިޓުތައް", 10 | "checkuser-ip-contributions-special-contributions-button": "ކުރީގެ އައިޕީ އެޑިޓުތައް" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/ee.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Aguve" 5 | ] 6 | }, 7 | "checkuser-search": "Dii", 8 | "checkuser-search-submit": "Dii", 9 | "checkuser-token-fail": "Kadodoa medze edzi o. Gatee kpɔ." 10 | } 11 | -------------------------------------------------------------------------------- /i18n/es-formal.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "MarcoAurelio" 5 | ] 6 | }, 7 | "checkuser-summary": "Esta herramienta explora los cambios recientes para obtener las direcciones IP utilizadas por un usuario, o para mostrar la información de ediciones y usuarios de una cierta dirección IP.\nSe pueden obtener los usuarios y las ediciones de una dirección IP cliente vía XFF añadiendo \"/xff\" al final de la dirección IP. Funciona con IPv4 (CIDR $1-32) e IPv6 (CIDR $2-128).\nNo se muestran más de 5000 ediciones por motivos de rendimiento.\nUtilícela de acuerdo con las políticas correspondientes.", 8 | "checkuser-noreason": "Debe dar una razón para esta consulta.", 9 | "checkuser-token-fail": "Fallo en la sesión. Por favor, inténtelo de nuevo." 10 | } 11 | -------------------------------------------------------------------------------- /i18n/ext.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Better" 5 | ] 6 | }, 7 | "checkuser-reason": "Razón:", 8 | "checkuser-search": "Landeal" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/fat.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Assilidjoe" 5 | ] 6 | }, 7 | "logentry-checkuser-temporary-account-view-temp-accounts-on-ip-global": "$1 wiadze nyina{{GENDER:$2|viewed}} akawonto a onnyi hɔ afe bɔɔ $3" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/fit.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Pyscowicz" 5 | ] 6 | }, 7 | "checkuser-check": "Jysteeraa" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/fo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "EileenSanda", 5 | "Spacebirdy" 6 | ] 7 | }, 8 | "checkuser": "Rannsakanar brúkari", 9 | "group-checkuser": "Rannsakanar brúkari", 10 | "group-checkuser-member": "{{GENDER:$1|kanna brúkara}}", 11 | "grouppage-checkuser": "{{ns:project}}:Rannsakanar brúkari", 12 | "checkuser-search": "Leita" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/frr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Murma174" 5 | ] 6 | }, 7 | "group-checkuser": "Checkusern", 8 | "group-checkuser-member": "{{GENDER:$1|Checkuser}}", 9 | "grant-checkuser": "Üüb Checkuser-dooten tugrip", 10 | "checkuser-global-contributions-link": "globaal bidracher" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/fy.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "PiefPafPier", 5 | "Robin van der Vliet", 6 | "Robin0van0der0vliet", 7 | "Snakesteuben" 8 | ] 9 | }, 10 | "group-checkuser": "Meidoggerneisjoggers", 11 | "group-checkuser-member": "meidogger{{GENDER:$1|neisjogger|neisjochster}}", 12 | "right-checkuser": "YP-adressen en oare ynformaasje fan meidoggers kontrolearje", 13 | "grouppage-checkuser": "{{ns:project}}:Meidoggerneisjoggers", 14 | "checkuser-reason": "Reden:", 15 | "checkuser-search": "Sykje", 16 | "checkuser-search-submit": "Sykje" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/gan-hans.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "checkuser-search": "寻吖", 6 | "checkuser-search-submit": "寻吖" 7 | } 8 | -------------------------------------------------------------------------------- /i18n/gan-hant.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Symane" 5 | ] 6 | }, 7 | "checkuser-search": "尋吖", 8 | "checkuser-search-submit": "尋吖" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/gcr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "LeGuyanaisPure" 5 | ] 6 | }, 7 | "group-checkuser": "Vérifikatò di itilizatò" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/gd.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz" 5 | ] 6 | }, 7 | "checkuser-investigateblock-warning-confirmaction": "Ma tha thu cinnteach gu bheil thu airson seo a dhèanamh, cuir cromag san raon \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" aig a' bhonn." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/got.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Gothicspeaker" 5 | ] 6 | }, 7 | "checkuser-reason": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰:" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/grc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Crazymadlover", 5 | "Omnipaedista", 6 | "SPQRobin" 7 | ] 8 | }, 9 | "grouppage-checkuser": "{{ns:project}}:Ἔλεγχος χρωμένου", 10 | "checkuser-reason": "Αἰτία:", 11 | "checkuser-period": "Διάρκεια:", 12 | "checkuser-all": "ἅπασαι", 13 | "checkuser-check": "Ἐλέγχειν", 14 | "checkuser-wasblocked": "Προηγουμένως πεφραγμένος", 15 | "checkuser-search": "Ζητεῖν", 16 | "checkuser-search-submit": "Ζητεῖν" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/gu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "CptViraj", 5 | "Dsvyas", 6 | "KartikMistry" 7 | ] 8 | }, 9 | "group-checkuser": "સભ્ય તપાસકો", 10 | "checkuser-reason": "કારણ:", 11 | "checkuser-all": "બધા", 12 | "checkuser-locked": "તાળું મારેલ", 13 | "checkuser-search": "શોધો", 14 | "checkuser-search-submit": "શોધો", 15 | "checkuser-investigate-reason-label": "કારણ", 16 | "checkuser-investigate-preliminary-table-header-name": "સભ્યનામ", 17 | "checkuser-investigate-compare-table-header-username": "સભ્યનામ", 18 | "checkuser-ip-contributions-tab-label-contributions": "યોગદાનો" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/gur.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Baba Ayɛ'ɛra" 5 | ] 6 | }, 7 | "checkuser-torexitnode": "Tor yese node" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/gv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "MacTire02" 5 | ] 6 | }, 7 | "checkuser-reason": "Fa:", 8 | "checkuser-search": "Ronsee", 9 | "checkuser-search-submit": "Ronsee" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/ha.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "action-checkuser": "duba adireshin IP na edita da wasu sauran bayanan na'ura", 6 | "action-checkuser-log": "duba rajistan check user", 7 | "checkuser-reason": "Dalili:", 8 | "checkuser-all": "duka", 9 | "checkuser-search": "Nema", 10 | "checkuser-search-submit": "Nema" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/hak-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Winston Sung" 5 | ] 6 | }, 7 | "checkuser-search": "Chhìm", 8 | "checkuser-search-submit": "Chhìm" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/haw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kalani", 5 | "Singularity" 6 | ] 7 | }, 8 | "checkuser-reason": "Kumu:", 9 | "checkuser-search": "Huli", 10 | "checkuser-search-submit": "Huli" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/hil.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jose77" 5 | ] 6 | }, 7 | "checkuser-reason": "Rason:", 8 | "checkuser-search": "Pangita-a", 9 | "checkuser-search-submit": "Pangita-a" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/hyw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Azniv Stepanian", 5 | "Շահէն" 6 | ] 7 | }, 8 | "checkuser-investigate-preliminary-table-header-groups": "Խումբեր", 9 | "checkuser-investigate-compare-table-button-contribs-label": "Ներդրումներ" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/ig.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Meritkosy", 5 | "Okenwa", 6 | "Timzy D'Great", 7 | "Ukabia" 8 | ] 9 | }, 10 | "checkuser": "Lé ọ'bànifé anya", 11 | "group-checkuser": "Lèma òjìème", 12 | "group-checkuser-member": "Lé ọ'bànifé anya", 13 | "action-checkuser-temporary-account-no-preference": "lelee adreesị IP nke akaụntụ nwa oge na-eji", 14 | "checkuser-reason": "Mgbághapụtà:", 15 | "checkuser-showlog": "Zí ndétu nchétá", 16 | "checkuser-users": "Nàta òjìème", 17 | "checkuser-ips": "Gá nwèté ónúọgụgụ IP", 18 | "checkuser-period": "Ógè ȯ wèrè:", 19 | "checkuser-week-1": "izù nke gáráni", 20 | "checkuser-month": "úbochi 30 gárání", 21 | "checkuser-all": "nke nílé", 22 | "checkuser-check": "Lechányá", 23 | "checkuser-blocked": "Kwàchịrị", 24 | "checkuser-locked": "Gbàchịrị", 25 | "checkuser-centralauth-multilock-list-item": "Njikọ $1", 26 | "checkuser-search": "Chọwa", 27 | "checkuser-search-submit": "Tùwe" 28 | } 29 | -------------------------------------------------------------------------------- /i18n/inh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Adam-Yourist" 5 | ] 6 | }, 7 | "group-checkuser": "Доакъашхой тохкараш", 8 | "checkuser-search": "Доакъашхо тахкара тептара дӀаяздаьрашка гӀолла лахар", 9 | "checkuser-search-submit": "Лаха" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/isv-cyrl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Danvintius Bookix" 5 | ] 6 | }, 7 | "checkuser-global-contributions-link-sidebar": "Глобалны вклад" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/isv-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "IJzeren Jan" 5 | ] 6 | }, 7 | "prefs-checkuser-tempaccount": "Razkrytje IP-adresov vrěmennyh kont", 8 | "checkuser-tempaccount-enable-preference": "Vključiti razkryvanje IP-adresov vrěmennyh konto", 9 | "checkuser-tempaccount-reveal-blocked-header": "Razkrytje IP-adresov vrěmennyh kont jest izključeno" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/jac.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "HylianAngel" 5 | ] 6 | }, 7 | "checkuser-global-contributions-link-sidebar": "Hej kolwal nanan b'ay titnajikoj", 8 | "checkuser-ipinfo-global-contributions-url-text": "Il hej kolwal nanantaj b'ay titnajikoj" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/kaa.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ajiniyaz Nurniyazov", 5 | "Nurlan" 6 | ] 7 | }, 8 | "group-checkuser": "Paydalanıwshılardı tekseriwshiler", 9 | "group-checkuser-member": "paydalanıwshılardı tekseriwshi", 10 | "grouppage-checkuser": "{{ns:project}}:Paydalanıwshılardı tekseriwshi", 11 | "checkuser-period": "Dawamlılıq:", 12 | "checkuser-week-1": "ótken hápte", 13 | "checkuser-month": "sońǵı 30 kúnde", 14 | "checkuser-all": "hámme", 15 | "checkuser-centralauth-multilock-list-item": "Silteme $1", 16 | "checkuser-helper-user": "Paydalanıwshı", 17 | "checkuser-investigate-subtitle-cancel-button-label": "Biykar etiw", 18 | "checkuser-investigate-preliminary-table-header-registration": "Tirkelgen waqıt" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/kab.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ButterflyOfFire", 5 | "Dreamy Jazz" 6 | ] 7 | }, 8 | "checkuser-investigateblock-warning-confirmaction": "Ma teḥsiḍ tebɣiḍ at xeddemeḍ, ilaq ad rnuḍ amidag deg tankult « {{int:checkuser-investigateblock-confirm-blocks-label}} » ddaw-agi.", 9 | "checkuser-userinfocard-close-button-aria-label": "Mdel" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/kcg.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kambai Akau" 5 | ] 6 | }, 7 | "checkuser-ip-auto-reveal-on-dialog-default-action": "Lyang", 8 | "checkuser-ip-auto-reveal-on-dialog-select-label": "Labeang:" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/kg.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "BOKOBA VEROLY" 5 | ] 6 | }, 7 | "group-temporary-account-viewer": "Bantu yina ke talaka masolo ya IP sambu na ntangu fioti", 8 | "grouppage-temporary-account-viewer": "{{ns:project}}:Temporary account IP viewer" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/kjh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz" 5 | ] 6 | }, 7 | "checkuser-investigateblock-warning-confirmaction": "Сiрер сынап пу нименi идерге сағынчатсар, алтында \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" танығны турғыс салыңар." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/kjp.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Rul1902" 5 | ] 6 | }, 7 | "checkuser-target": "အါင်ပီလင်ဍာ မွာဲအိုဝ် ဆ်ုသုံႋဏင့်ဆာႋမိင်:", 8 | "checkuser-all": "လုက်ဆိင့်", 9 | "checkuser-search-submit": "မ်ုအင်းၰူ့" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/kk-arab.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "checkuser-summary": "بۇل قۇرال پايدالانۋشى قولدانعان IP جايلار ٴۇشىن, نەمەسە IP جاي تۇزەتۋ/پايدالانۋشى دەرەكتەرىن كورسەتۋ ٴۇشىن جۋىقتاعى وزگەرىستەردى قاراپ شىعادى.\n\tپايدالانۋشىلاردى مەن تۇزەتۋلەردى XFF IP ارقىلى IP جايعا «/xff» دەگەندى قوسىپ كەلتىرۋگە بولادى. IPv4 (CIDR $1-32) جانە IPv6 (CIDR $2-128) ارقاۋلانادى.\n\tورىنداۋشىلىق سەبەپتەرىمەن 5000 تۇزەتۋدەن ارتىق قايتارىلمايدى. بۇنى ەرەجەلەرگە سايكەس پايدالانىڭىز.", 6 | "checkuser": "قاتىسۋشىنى سىناۋ", 7 | "checkuserlog": "قاتىسۋشى سىناۋ جۋرنالى", 8 | "group-checkuser": "قاتىسۋشى سىناۋشىلار", 9 | "group-checkuser-member": "قاتىسۋشى سىناۋشى", 10 | "grouppage-checkuser": "{{ns:project}}:قاتىسۋشىنى سىناۋ", 11 | "checkuser-reason": "سەبەبى:", 12 | "checkuser-showlog": "جۋرنالدى كورسەت", 13 | "checkuser-query": "جۋىقتاعى وزگەرىستەردى سۇرانىمداۋ", 14 | "checkuser-target": "قاتىسۋشى اتى / IP جاي", 15 | "checkuser-users": "قاتىسۋشىلاردى كەلتىرۋ", 16 | "checkuser-ips": "IP جايلاردى كەلتىرۋ", 17 | "checkuser-empty": "جۋرنالدا ەش جازبا جوق.", 18 | "checkuser-nomatch": "سايكەس تابىلمادى.", 19 | "checkuser-check": "سىناۋ", 20 | "checkuser-blocked": "بۇعاتتالعان", 21 | "checkuser-search": "ىزدەۋ", 22 | "checkuser-search-submit": "ىزدەۋ", 23 | "checkuser-showmain": "CheckUser باسقى پىشىنىنە ورالۋ" 24 | } 25 | -------------------------------------------------------------------------------- /i18n/kk-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "checkuser-summary": "Bul qural paýdalanwşı qoldanğan IP jaýlar üşin, nemese IP jaý tüzetw/paýdalanwşı derekterin körsetw üşin jwıqtağı özgeristerdi qarap şığadı.\n\tPaýdalanwşılardı men tüzetwlerdi XFF IP arqılı IP jaýğa «/xff» degendi qosıp keltirwge boladı. IPv4 (CIDR $1-32) jäne IPv6 (CIDR $2-128) arqawlanadı.\n\tOrındawşılıq sebepterimen 5000 tüzetwden artıq qaýtarılmaýdı. Bunı erejelerge säýkes paýdalanıñız.", 6 | "checkuser": "Qatıswşını sınaw", 7 | "checkuserlog": "Qatıswşı sınaw jwrnalı", 8 | "group-checkuser": "Qatıswşı sınawşılar", 9 | "group-checkuser-member": "qatıswşı sınawşı", 10 | "grouppage-checkuser": "{{ns:project}}:Qatıswşını sınaw", 11 | "checkuser-reason": "Sebebi:", 12 | "checkuser-showlog": "Jwrnaldı körset", 13 | "checkuser-query": "Jwıqtağı özgeristerdi suranımdaw", 14 | "checkuser-target": "Qatıswşı atı / IP jaý", 15 | "checkuser-users": "Qatıswşılardı keltirw", 16 | "checkuser-ips": "IP jaýlardı keltirw", 17 | "checkuser-empty": "Jwrnalda eş jazba joq.", 18 | "checkuser-nomatch": "Säýkes tabılmadı.", 19 | "checkuser-check": "Sınaw", 20 | "checkuser-blocked": "Buğattalğan", 21 | "checkuser-search": "İzdew", 22 | "checkuser-search-submit": "İzdew", 23 | "checkuser-showmain": "CheckUser basqı pişinine oralw" 24 | } 25 | -------------------------------------------------------------------------------- /i18n/kl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Qaqqalik" 5 | ] 6 | }, 7 | "checkuser-search": "Ujarlerit", 8 | "checkuser-search-submit": "Ujarlerit" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/kn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "HPNadig", 5 | "Nayvik" 6 | ] 7 | }, 8 | "checkuser": "ಸದಸ್ಯನನ್ನು ಚೆಕ್ ಮಾಡಿ", 9 | "checkuser-reason": "ಕಾರಣ:", 10 | "checkuser-all": "ಎಲ್ಲಾ", 11 | "checkuser-search": "ಹುಡುಕು", 12 | "checkuser-search-submit": "ಹುಡುಕು" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/koi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Римма" 5 | ] 6 | }, 7 | "checkuser-helper-ips": "IP адрес", 8 | "checkuser-helper-uas": "Вӧдитчись агенттэз", 9 | "checkuser-helper-client-hints": "Клиентлӧ велӧтӧм" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/krc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz", 5 | "Ernác", 6 | "Iltever", 7 | "Къарачайлы" 8 | ] 9 | }, 10 | "group-checkuser": "Къошулуучуланы тинтиучюле", 11 | "checkuser-investigateblock-warning-confirmaction": "Буну кертиден этерге излегенигизге ишексиз эсегиз, тилейбиз, эм тюбюндеги \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" тиекни белгилегиз.", 12 | "checkuser-global-contributions-link": "глобал къошумла", 13 | "checkuser-global-contributions-link-sidebar": "Глобал къошумла", 14 | "checkuser-global-contributions": "Глобал къошумланы изле", 15 | "checkuser-global-contributions-search-form-wrapper": "Глобал къошумланы изле", 16 | "checkuser-ipinfo-global-contributions-url-text": "Глобал къошумланы кёргюз" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/kri.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jose77", 5 | "Protostar" 6 | ] 7 | }, 8 | "checkuser-search": "Sarch", 9 | "checkuser-search-submit": "Sarch" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/krj.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jose77" 5 | ] 6 | }, 7 | "checkuser-search": "Sagap", 8 | "checkuser-search-submit": "Sagap" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/krl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Flrn", 5 | "Likopiän tyttö" 6 | ] 7 | }, 8 | "checkuser-search": "Ečindy", 9 | "checkuser-search-submit": "Eči" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/ks.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "checkuser": "صٲرِف چَک", 6 | "checkuser-reason": "وَضاحَت:", 7 | "checkuser-search-submit": "تَلاش", 8 | "checkuser-investigateblock-reason": "وَضاحَت", 9 | "checkuser-investigate-subtitle-cancel-button-label": "مَنسوٗخ", 10 | "checkuser-investigate-duration-option-all": "سٲری", 11 | "checkuser-investigate-reason-label": "وَضاحَت", 12 | "checkuser-investigate-preliminary-table-header-name": "صٲرِف ناو:", 13 | "checkuser-investigate-preliminary-table-header-wiki": "وِکی" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/ksw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "SawJaemin" 5 | ] 6 | }, 7 | "checkuser-all": "ခဲလၢာ်" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/ku-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Balyozxane", 5 | "Bangin", 6 | "Bikarhêner", 7 | "George Animal" 8 | ] 9 | }, 10 | "checkuser-reason": "Sedem:", 11 | "checkuser-week-1": "hefteya dawî", 12 | "checkuser-week-2": "du hefteyên dawî", 13 | "checkuser-month": "30 rojên dawî", 14 | "checkuser-all": "hemû", 15 | "checkuser-search": "Li qeydên têkitinên bikarhênerên kontrolê bigere", 16 | "checkuser-search-submit": "Lêbigere", 17 | "checkuser-ipeditcount": "~$1 ji hemû bikarhêneran", 18 | "checkuser-investigateblock-notice-text-label": "Wîkînivîs", 19 | "checkuser-investigate-duration-label": "Mawe", 20 | "checkuser-investigate-duration-option-all": "Hemû", 21 | "checkuser-investigate-duration-option-1w": "Hefteya dawî", 22 | "checkuser-investigate-duration-option-2w": "2 heftiyên dawîn", 23 | "checkuser-investigate-duration-option-30d": "30 rojên dawî", 24 | "checkuser-global-contributions-link-sidebar": "Beşdariyên global" 25 | } 26 | -------------------------------------------------------------------------------- /i18n/kv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz" 5 | ] 6 | }, 7 | "checkuser-investigateblock-warning-confirmaction": "Ті кӧ стӧча тӧданныд, мый збыль кӧсъянныд вӧчны тайӧс, корам улынджык пуктыны \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" пас." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/kw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "GwikorFrank" 5 | ] 6 | }, 7 | "checkuser-investigate-duration-option-all": "Oll" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/ky.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bosogo", 5 | "Growingup" 6 | ] 7 | }, 8 | "checkuser-reason": "Себеп:", 9 | "checkuser-blocked": "Бөгөттөлгөн", 10 | "checkuser-search-submit": "Издөө", 11 | "checkuser-temporary-accounts-onboarding-dialog-close-label": "Жабуу", 12 | "checkuser-investigate-subtitle-cancel-button-label": "Жокко чыгаруу", 13 | "checkuser-investigate-subtitle-continue-button-label": "Улантуу" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/la.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "SPQRobin", 5 | "UV" 6 | ] 7 | }, 8 | "checkuser-reason": "Causa:", 9 | "checkuser-search": "Quaerere" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/lfn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz", 5 | "Malafaya" 6 | ] 7 | }, 8 | "checkuser-search": "Xerca", 9 | "checkuser-search-submit": "Xerca", 10 | "checkuser-investigateblock-warning-confirmaction": "Si tu es serta ce tu vole vera fa esta, marca la campo \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" a su, per favore." 11 | } 12 | -------------------------------------------------------------------------------- /i18n/lij.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz", 5 | "S4b1nuz E.656" 6 | ] 7 | }, 8 | "group-checkuser": "Check users", 9 | "group-checkuser-member": "{{GENDER:$1|check user}}", 10 | "grouppage-checkuser": "{{ns:project}}:Check users", 11 | "checkuser-investigateblock-warning-confirmaction": "Se t'ê segûo de voéilo fâ davéi, contròlla o cànpo \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" in fóndo." 12 | } 13 | -------------------------------------------------------------------------------- /i18n/lld.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Asenoner", 5 | "Starladin" 6 | ] 7 | }, 8 | "checkuser-investigate-notice-no-results": "Degügn resultac.", 9 | "checkuser-investigate-preliminary-table-header-blocked": "Status", 10 | "checkuser-investigate-compare-copy-button-label-hide": "Nascuend l wikitest" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/lmo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Salvemm el lombard" 5 | ] 6 | }, 7 | "group-checkuser": "Controlloeur" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/ln.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "BOKOBA VEROLY" 5 | ] 6 | }, 7 | "group-temporary-account-viewer": "Bato oyo batalaka makambo ya IP mpo na mwa ntango", 8 | "group-temporary-account-viewer-member": "{{GENDER:$1| motali IP ya compte temporaire}}", 9 | "right-checkuser-temporary-account-auto-reveal": "Bimisa automatiquement ba adresses IP oyo ba comptes temporaires esalela", 10 | "action-checkuser-temporary-account-auto-reveal": "emonisaka mbala moko adrɛsi IP oyo basalelaka na ba compte ya ntango mokuse", 11 | "grouppage-temporary-account-viewer": "{{ns:project}}:Motali IP ya compte ya ntango moke", 12 | "checkuser-global-contributions-link-sidebar": "Makabo ya mokili mobimba", 13 | "checkuser-global-contributions-no-results-when-filters-applied": "Ba résultats oyo ekokani na query te. Okoki kozwa makabo soki obongoli ba paramètres ya boluki na yo.", 14 | "checkuser-ip-auto-reveal-link-sidebar": "IP Komimonisa ye moko" 15 | } 16 | -------------------------------------------------------------------------------- /i18n/lo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Aefgh39622", 5 | "Kimmie023" 6 | ] 7 | }, 8 | "checkuser": "ກວດຜູ້ໃຊ້", 9 | "checkuserlog": "ບັນທຶກການກວດຜູ້ໃຊ້", 10 | "right-checkuser-temporary-account": "ເບິ່ງທີ່ຢູ່ IP ທີ່ໃຊ້ໂດຍບັນຊີຊົ່ວຄາວ", 11 | "action-checkuser-temporary-account": "ເບິ່ງທີ່ຢູ່ IP ທີ່ໃຊ້ໂດຍບັນຊີຊົ່ວຄາວ", 12 | "checkuser-reason": "ເຫດຜົນ:", 13 | "checkuser-showlog": "ສະແດງບັນທຶກ", 14 | "checkuser-target": "ທີ່ຢູ່ IP ຫຼື ຊື່ຜູ້ໃຊ້:", 15 | "checkuser-ips": "ເອົາ ທີ່ຢູ່ IP", 16 | "checkuser-empty": "ບໍ່ມີເນື້ອໃນຖືກບັນທຶກ", 17 | "checkuser-nomatch": "ບໍ່ພົບສິ່ງທີ່ຊອກຫາ", 18 | "checkuser-check": "ກວດ", 19 | "checkuser-search": "ຊອກຫາ", 20 | "checkuser-helper-label": "ເບິ່ງຜົນໄດ້ຮັບໃນຕາຕະລາງ", 21 | "checkuser-helper-copy-success": "ສຳເນົາແລ້ວ", 22 | "checkuser-helper-copy-failed": "ບໍ່ສາມາດສຳເນົາໄດ້", 23 | "checkuser-helper-user": "ຜູ້ໃຊ້", 24 | "checkuser-helper-ips": "ໄອພີ(s)", 25 | "checkuser-helper-uas": "ຕົວແທນຜູ້ໃຊ້", 26 | "checkuser-rest-access-denied": "ທ່ານບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ປະຕິບັດການດໍາເນີນການນີ້", 27 | "checkuser-rest-access-denied-blocked-user": "ທ່ານບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ດໍາເນີນການດັ່ງກ່າວເນື່ອງຈາກວ່າບັນຊີຂອງທ່ານຖືກບລັອກ" 28 | } 29 | -------------------------------------------------------------------------------- /i18n/ltg.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dark Eagle" 5 | ] 6 | }, 7 | "checkuser-all": "vyss" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/lzh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "LNDDYL", 5 | "WAN233", 6 | "逆襲的天邪鬼" 7 | ] 8 | }, 9 | "group-checkuser": "知簿", 10 | "group-checkuser-member": "{{GENDER:$1|知簿}}", 11 | "checkuser-search": "尋", 12 | "checkuser-search-submit": "尋", 13 | "checkuser-helper-user": "用戶" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/mad.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Boesenbergia" 5 | ] 6 | }, 7 | "checkuser-temporary-accounts-onboarding-dialog-ip-info-save-preference": "Sèmpen kaenḍâ'ân", 8 | "checkuser-global-contributions-link-sidebar": "Dhurrun global" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/mey.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Tidsaleh" 5 | ] 6 | }, 7 | "checkuser-helper-copy-failed": "ما گد ينسخ", 8 | "checkuser-tempaccount-reveal-ip-missing": "ماهو صايب" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/mg.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jagwar" 5 | ] 6 | }, 7 | "checkuser-search-submit": "Hikaroka" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/mhr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Lifeway", 5 | "Сай" 6 | ] 7 | }, 8 | "checkuser-reason": "Амал:", 9 | "checkuser-all": "чыла", 10 | "checkuser-search": "Ушнышын тергыме журнал возыш дене кычалмаш", 11 | "checkuser-search-submit": "Кычал" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/min.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Iwan Novirion" 5 | ] 6 | }, 7 | "group-checkuser": "Pamareso", 8 | "group-checkuser-member": "{{GENDER:$1|pamareso}}", 9 | "right-checkuser": "Mamareso alamaik IP pangguno dan informasi lainnyo", 10 | "right-checkuser-log": "Mancaliak log pamareso", 11 | "action-checkuser": "alamaik IP jo informasi pamaresoan lainnyo", 12 | "action-checkuser-log": "caliak log pamareso", 13 | "grouppage-checkuser": "{{ns:project}}:Pamareso", 14 | "checkuser-week-1": "pakan lalu", 15 | "checkuser-week-2": "duo pakan tarakhia", 16 | "checkuser-massblock-text": "Akun-akun nan dipiliah ka disakek salamonyo, alamaik-alamaik IP tarakhia nan digunoan otomatih disakek dan indak dipabuliahan mambuek akun.\nAlamaik-alamaik IP ka disakek salamo 1 pakan untuak pangguno anonim dan indak dipabuliahan mambuek akun." 17 | } 18 | -------------------------------------------------------------------------------- /i18n/mn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Chinneeb", 5 | "Munkhzaya.E" 6 | ] 7 | }, 8 | "checkuser": "Шалгагч хэрэглэгч", 9 | "group-checkuser": "Шалгагч хэрэглэгчид", 10 | "group-checkuser-member": "Шалгагч хэрэглэгч", 11 | "grouppage-checkuser": "{{ns:project}}:Шалгагч хэрэглэгч", 12 | "checkuser-reason": "Шалтгаан:", 13 | "checkuser-all": "бүгдийг", 14 | "checkuser-blocked": "Түгжигдсэн", 15 | "checkuser-search": "Хайх", 16 | "checkuser-search-submit": "Хайх", 17 | "checkuser-log-search-target": "Зорилго:" 18 | } 19 | -------------------------------------------------------------------------------- /i18n/mnw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "咽頭べさ" 5 | ] 6 | }, 7 | "checkuser-all": "သီုဖအိုတ်" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/ms-arab.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Tofeiku" 5 | ] 6 | }, 7 | "checkuser-investigate-compare-table-button-contribs-label": "سومبڠن" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/myv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Amdf", 5 | "Botuzhaleny-sodamo", 6 | "Rueter", 7 | "Tupikovs" 8 | ] 9 | }, 10 | "checkuser-reason": "Тувталось:", 11 | "checkuser-showlog": "Ванны журналонть", 12 | "checkuser-target": "IP-адресэсь эли совицясь:", 13 | "checkuser-period": "Зярс моли:", 14 | "checkuser-week-1": "меельсе тарго", 15 | "checkuser-week-2": "меельсе кавто таргт", 16 | "checkuser-month": "меельсе 30 чить", 17 | "checkuser-all": "весе", 18 | "checkuser-blocked": "Саймес саезь", 19 | "checkuser-locked": "Сёлгозь", 20 | "checkuser-search": "Вешнемс совицятнеде журналонть эйстэ", 21 | "checkuser-search-submit": "Вешнемс" 22 | } 23 | -------------------------------------------------------------------------------- /i18n/nah.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Akapochtli", 5 | "Fluence", 6 | "Languaeditor", 7 | "Teòtlalili" 8 | ] 9 | }, 10 | "checkuser-reason": "Īxtlamatiliztli:", 11 | "checkuser-search": "Motemoz icalaquiyan CheckUser", 12 | "checkuser-search-submit": "Xiktemo" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/niu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jose77" 5 | ] 6 | }, 7 | "checkuser-reason": "Kakano:", 8 | "checkuser-search": "Kumi", 9 | "checkuser-search-submit": "Kumi" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/nl-informal.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jeroen N", 5 | "McDutchie", 6 | "Siebrand" 7 | ] 8 | }, 9 | "checkuser-noreason": "Je moet een reden opgeven voor deze zoekopdracht.", 10 | "checkuser-temporary-accounts-onboarding-dialog-stepper-label": "$1 van $2", 11 | "checkuser-rest-access-denied": "Je hebt geen rechten om de handeling uit te voeren", 12 | "checkuser-rest-access-denied-blocked-user": "Je mag de handeling niet uitvoeren omdat je account is geblokkeerd" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/nov.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "MF-Warburg", 5 | "Malafaya" 6 | ] 7 | }, 8 | "checkuser-reason": "Resone:", 9 | "checkuser-search": "Sercha" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/nqo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Aboubacar.banamoridou.toure", 5 | "Lancine.kounfantoh.fofana" 6 | ] 7 | }, 8 | "checkuser-month-2": "ߞߐߟߊ߫ ߕߟߋ߫ ߆߀ ߟߎ߫", 9 | "checkuser-investigate-this-user": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߬ߟߊ ߣߌ߲߬ ߢߊߢߌߣߌ߲߫", 10 | "checkuser-log-checks-on": "ߝߛߍ߬ߝߛߍ߬ ߘߊ߫", 11 | "checkuser-show-investigate": "ߊ߬ ߡߊߦߟߍ߬ߡߊ߲߫ ߞߊ߬ ߢߊߢߌߣߌ߲ߠߌ߲ ߠߊߕߊ߯ ߦߌ߬ߘߊ߬ߥߟߊ ߓߊߖߎߡߊ ߘߐ߫" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/nrm.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Crochet.david" 5 | ] 6 | }, 7 | "checkuser-all": "touot", 8 | "checkuser-search": "Trachi", 9 | "checkuser-search-submit": "Trachi" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/nso.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mohau" 5 | ] 6 | }, 7 | "checkuser-reason": "Lebaka:", 8 | "checkuser-target": "IP atrese goba Mošomiši", 9 | "checkuser-week-1": "Beke yago feta", 10 | "checkuser-week-2": "Beke tše pedi tšago feta", 11 | "checkuser-blocked": "Thibilwe", 12 | "checkuser-search": "Fetleka", 13 | "checkuser-search-submit": "Fetleka" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/om.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ahrada2016" 5 | ] 6 | }, 7 | "checkuser-block-reason-dropdown": "*Sababni ugguraa dhaabbataa\n**Akkaawuntii hedduutti fayyadamuu\n** Liinkii gara marsariitiiwwan hin barbaachifneetti erguu.\n** Fuulduree waan miidhu gochuu" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/os.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Amikeco" 5 | ] 6 | }, 7 | "checkuser-reason": "Аххос:" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/pag.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "checkuser-reason": "Katonongan", 6 | "checkuser-target": "Manag-usar odino IP", 7 | "checkuser-users": "Alaen so manag-usar", 8 | "checkuser-search": "Anapen" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/pam.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "checkuser": "Surian ya ing gagamit", 6 | "checkuser-reason": "Sangkan:", 7 | "checkuser-showlog": "Pakit ya ing log", 8 | "checkuser-search": "Manintun" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/pdc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Xqt" 5 | ] 6 | }, 7 | "checkuser-reason": "Grund:", 8 | "checkuser-target": "IP-Adress odder Yuusernaame:", 9 | "checkuser-week-1": "letscht Woch", 10 | "checkuser-week-2": "letschte zwo Woche", 11 | "checkuser-month": "letschte 30 Daag", 12 | "checkuser-all": "all", 13 | "checkuser-blocked": "g'baerrt", 14 | "checkuser-gblocked": "Iwwerall g'baerrt", 15 | "checkuser-search": "Uffgucke", 16 | "checkuser-search-submit": "Guck uff" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/pfl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Manuae" 5 | ] 6 | }, 7 | "checkuser-week-1": "ledschd Woch", 8 | "checkuser-week-2": "ledschde zwee Woche", 9 | "checkuser-month": "ledschde Monad", 10 | "checkuser-locked": "gschberd", 11 | "checkuser-wasblocked": "Frija gschberd", 12 | "checkuser-search": "Suche" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/pnb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Abbas dhothar" 5 | ] 6 | }, 7 | "group-checkuser": "توثیق شدہ ورتنوالے", 8 | "checkuser-reason": "وجہ:", 9 | "checkuser-month": "پچھلے 30 دن", 10 | "checkuser-investigateblock-notice-replace": "بدلے صفحے", 11 | "checkuser-investigate-subtitle-cancel-button-label": "رد کرو", 12 | "checkuser-investigate-duration-option-30d": "پچھلے 30 دن", 13 | "checkuser-investigate-compare-table-button-contribs-label": "شراکتاں", 14 | "checkuser-investigate-compare-table-cell-unregistered": "غیر رجسٹرڈ" 15 | } 16 | -------------------------------------------------------------------------------- /i18n/rif.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "AjellidnArif", 5 | "Amara-Amaziɣ", 6 | "Jose77" 7 | ] 8 | }, 9 | "checkuser-search": "Tarzzut", 10 | "checkuser-search-submit": "Arzu" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/rm.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Gion-andri", 5 | "Kazu89" 6 | ] 7 | }, 8 | "checkuser-reason": "Motiv:", 9 | "checkuser-showlog": "Mussar il protocol", 10 | "checkuser-target": "Adressa IP u num d'utilisader:", 11 | "checkuser-search": "Tschertgar" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/rsk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Keresturec" 5 | ] 6 | }, 7 | "checkuser-tempaccount-reveal-ip-button-label": "Прикаж IP" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/rup.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "D'AroemenenZullenNiVergaan", 5 | "Hakka" 6 | ] 7 | }, 8 | "checkuser-reason": "Furńie:", 9 | "checkuser-search": "Caftâ" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/rw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Germain92" 5 | ] 6 | }, 7 | "checkuser-range-outside-limit": "urutonde $1 ruri hanze yimipaka yemewe. is outside." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/ryu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ChoiChong", 5 | "Tmv" 6 | ] 7 | }, 8 | "checkuser-investigate-subtitle-cancel-button-label": "とぅりちゃーすん" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/sa.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ansumang", 5 | "Naveen Sankar", 6 | "NehalDaveND", 7 | "Svartava" 8 | ] 9 | }, 10 | "group-checkuser": "सदस्यान्वेषिणः", 11 | "checkuser-reason": "कारणम् :", 12 | "checkuser-reason-api": "API: $1", 13 | "checkuser-period": "कालः :", 14 | "checkuser-week-1": "गतसप्ताहः", 15 | "checkuser-week-2": "गतसप्ताहद्वयम्", 16 | "checkuser-month": "गतानि त्रिंशत् दिनानि", 17 | "checkuser-all": "सर्वाणि", 18 | "checkuser-check": "परीक्ष्यताम्", 19 | "checkuser-blocked": "अवरुद्धम्", 20 | "checkuser-locked": "कीलितम्", 21 | "checkuser-search": "अन्वेषणम्", 22 | "checkuser-search-submit": "अन्वेषणम्", 23 | "checkuser-global-contributions-link": "वैश्विकानि योगदानानि" 24 | } 25 | -------------------------------------------------------------------------------- /i18n/sat.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Durga Soren" 5 | ] 6 | }, 7 | "checkuser-investigate-compare-table-button-contribs-label": "ᱮᱱᱮᱢᱠᱚ" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/sc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Andria", 5 | "Marzedu", 6 | "Taxandru" 7 | ] 8 | }, 9 | "checkuser-reason": "Motivu:", 10 | "checkuser-target": "Indiritzu IP o nùmene impitadore:", 11 | "checkuser-period": "Durada:", 12 | "checkuser-week-1": "ùrtima chida", 13 | "checkuser-week-2": "ùrtimas duas chidas", 14 | "checkuser-month": "ùrtimas 30 dies", 15 | "checkuser-all": "totu", 16 | "checkuser-search": "Chirca", 17 | "checkuser-search-submit": "Chirca", 18 | "checkuser-ipeditcount": "~$1 dae totus is impitadores" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/sco.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dreamy Jazz" 5 | ] 6 | }, 7 | "checkuser-investigateblock-warning-confirmaction": "Gif ye'r sair that ye reelie want tae dae it, please check the \"{{int:checkuser-investigateblock-confirm-blocks-label}}\" field at the bottom." 8 | } 9 | -------------------------------------------------------------------------------- /i18n/sd.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Indus Asia", 5 | "Mehtab ahmed", 6 | "Tweety" 7 | ] 8 | }, 9 | "group-checkuser": "واپرائيندڙ چڪاسڪار", 10 | "group-temporary-account-viewer": "عارضي کاتن جي آئپي ڏسندڙ", 11 | "right-checkuser-temporary-account": "عارضي کاتن پاران استعمال ٿيندڙ آئپي پتا ڏسو", 12 | "action-checkuser-temporary-account": "عارضي کاتن پاران استعمال ٿيندڙ آئپي پتا ڏسو", 13 | "checkuser-target": "آئپي پتو يا واپرائيندڙنانءُ:", 14 | "checkuser-month": "گذريل 30 ڏينھن", 15 | "checkuser-all": "سڀ", 16 | "checkuser-check-this-user": "هن واپرائيندڙ کي چڪاسيو", 17 | "checkuser-investigate-indicator-logs": "لاگس", 18 | "checkuser-investigate-duration-option-all": "سڀ", 19 | "checkuser-investigate-duration-option-2w": "گذريل 2 ھفتا", 20 | "checkuser-investigate-preliminary-table-header-editcount": "سنوارون", 21 | "checkuser-investigate-preliminary-table-header-groups": "گروھَ", 22 | "checkuser-investigate-filters-legend": "ڇاڻيون", 23 | "prefs-checkuser-tempaccount": "عارضي کاتن جون آئپي ظاھر ڪريو", 24 | "checkuser-tempaccount-enable-preference": "عارضي کاتن جي آئپي پتن کي ظاھر ڪرڻ کي فعال ڪريو" 25 | } 26 | -------------------------------------------------------------------------------- /i18n/shn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Saimawnkham" 5 | ] 6 | }, 7 | "checkuser-investigate-subtitle-cancel-button-label": "ယႃႉၶိုၼ်း" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/sje.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Olve Utne" 5 | ] 6 | }, 7 | "checkuser-blocked": "Buđđusum", 8 | "checkuser-investigateblock": "Buđđusä adnejijt", 9 | "checkuser-investigate-indicator-logs": "Låggå", 10 | "checkuser-investigate-preliminary-table-cell-blocked": "Buđđusum" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/smj.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Yupik" 5 | ] 6 | }, 7 | "checkuser-search-submit": "Åtså" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/smn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Seipinne", 5 | "Yupik" 6 | ] 7 | }, 8 | "checkuser-clienthints-name-architecture": "Arkkitektuur", 9 | "checkuser-reason": "Suijâ:", 10 | "checkuser-target": "IP-čujottâs teikâ kevtteenommâ:", 11 | "checkuser-all": "puoh", 12 | "checkuser-search-submit": "Uusâ", 13 | "checkuser-investigateblock-target": "Kevtteenoomah já IP-čujottâsah", 14 | "checkuser-investigate-subtitle-cancel-button-label": "Jooskâ", 15 | "checkuser-investigate-subtitle-continue-button-label": "Juáđhi", 16 | "checkuser-investigate-targets-label": "Kevtteenoomah já IP-čujottâsah:", 17 | "checkuser-investigate-targets-placeholder": "Kevtteenommâ teikâ 1.1.1.1", 18 | "checkuser-investigate-reason-label": "Suijâ", 19 | "checkuser-investigate-preliminary-table-header-name": "Kevtteenommâ", 20 | "checkuser-investigate-filters-legend": "Silleeh", 21 | "checkuser-investigate-compare-copy-button-label": "Čääiti wikiteevstâ", 22 | "checkuser-investigate-compare-copy-button-label-hide": "Čievâ wikiteevstâ", 23 | "checkuser-investigate-compare-table-button-contribs-label": "Hammiimeh", 24 | "checkuser-investigate-compare-table-header-username": "Kevtteenommâ" 25 | } 26 | -------------------------------------------------------------------------------- /i18n/sn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Masiziva" 5 | ] 6 | }, 7 | "checkuser-clienthints-value-yes": "Hongu" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/so.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Maax" 5 | ] 6 | }, 7 | "checkuser-search": "Raadi", 8 | "checkuser-search-submit": "Raadi" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/sq.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ammartivari", 5 | "Dori", 6 | "Toplove12", 7 | "Vanished 456321456" 8 | ] 9 | }, 10 | "checkuser": "Kontrollo përdoruesin", 11 | "checkuser-reason": "Arsyeja:", 12 | "checkuser-blocked": "Bllokuar", 13 | "checkuser-wasblocked": "Bllokuar më parë" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/st.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "checkuser-reason": "Lebaka:" 6 | } 7 | -------------------------------------------------------------------------------- /i18n/su.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Irwangatot", 5 | "Kandar", 6 | "Uchup19" 7 | ] 8 | }, 9 | "checkuser-desc": "Leler kawenangan pikeun mariksa alamat IP jeung émbaran lianna ti hiji pamaké", 10 | "checkuser": "Pamaké pamariksa", 11 | "checkuserlog": "Log PamakéPamariksa", 12 | "group-checkuser": "Pamaké pamariksa", 13 | "group-checkuser-member": "{{GENDER:$1|pamariksa}}", 14 | "grouppage-checkuser": "{{ns:project}}:Pamaké pamariksa", 15 | "checkuser-reason": "Alesan:", 16 | "checkuser-showlog": "Témbongkeun log", 17 | "checkuser-target": "Sandiasma atawa alamat IP:", 18 | "checkuser-users": "Paluruh pamaké", 19 | "checkuser-ips": "Paluruh IP", 20 | "checkuser-empty": "Logna kosong.", 21 | "checkuser-nomatch": "Euweuh nu cocog.", 22 | "checkuser-check": "Pariksa", 23 | "checkuser-blocked": "Dipeungpeuk", 24 | "checkuser-search": "Paluruh éntri log pamaké", 25 | "checkuser-search-submit": "Paluruh", 26 | "checkuser-ipeditcount": "~$1 ti sakumna pamaké", 27 | "checkuser-showmain": "Balik ka formulir utama PamakéPamariksa" 28 | } 29 | -------------------------------------------------------------------------------- /i18n/szl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Herr Kriss", 5 | "Uostofchuodnego" 6 | ] 7 | }, 8 | "checkuser-reason": "Powōd:", 9 | "checkuser-search": "Šnupej", 10 | "checkuser-search-submit": "Šnupej" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/tet.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ankry", 5 | "Chaduvari", 6 | "MF-Warburg" 7 | ] 8 | }, 9 | "checkuser": "Verifika uza-na'in", 10 | "checkuserlog": "Lista checkuser", 11 | "checkuser-contribs": "verifika diresaun IP uza-na'in nian", 12 | "group-checkuser": "CheckUser", 13 | "group-checkuser-member": "{{GENDER:$1|Ema ne'ebé bele halo CheckUser}}", 14 | "right-checkuser": "verifika diresaun IP uza-na'in nian no informasaun seluk", 15 | "grouppage-checkuser": "{{ns:project}}:CheckUser", 16 | "checkuser-reason": "Motivu:", 17 | "checkuser-target": "Diresaun IP ka naran uza-na'in:", 18 | "checkuser-users": "Uza-na'in sira", 19 | "checkuser-ips": "IP sira", 20 | "checkuser-all": "hotu", 21 | "checkuser-search": "Buka", 22 | "checkuser-search-submit": "Buka" 23 | } 24 | -------------------------------------------------------------------------------- /i18n/ti.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Joanmp17" 5 | ] 6 | }, 7 | "checkuser-investigate-preliminary-table-header-editcount": "ኣርትዖታት", 8 | "checkuser-investigate-compare-table-button-contribs-label": "ኣበርክቶታት" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/tly.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jamil", 5 | "Karsiptar", 6 | "Patriot Kor", 7 | "Patriot Kur", 8 | "Гусейн" 9 | ] 10 | }, 11 | "checkuser-all": "həmə", 12 | "logentry-checkuser-private-event-create-account": "Ofəje be", 13 | "checkuser-investigate-duration-option-all": "Həmmə" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/to.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "checkuser": "Siviʻi ʻa e ʻetita", 6 | "group-checkuser": "Siviʻi kau ʻetita", 7 | "group-checkuser-member": "Siviʻi ʻa e ʻetita" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/tpi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Iketsi" 5 | ] 6 | }, 7 | "checkuser-search": "Painim", 8 | "checkuser-search-submit": "Painim" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/trv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "checkuser-search-submit": "Miying" 6 | } 7 | -------------------------------------------------------------------------------- /i18n/tsg.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Zetareyy" 5 | ] 6 | }, 7 | "checkuser-investigateblock-newblock-label": "Dugangan pa manga bluk naaawn", 8 | "checkuser-investigateblock-failure-multi": "Way manga user na'block. Pagdugang sin block dugaing pa manga block naaawn, tandinga: \"{{int:checkuser-investigateblock-newblock-label}}\"." 9 | } 10 | -------------------------------------------------------------------------------- /i18n/tt-cyrl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Don Alessandro", 5 | "Ерней", 6 | "Ильгиз", 7 | "Ильнар" 8 | ] 9 | }, 10 | "group-checkuser": "Кулланучыларны тикшереп торучылар", 11 | "group-checkuser-member": "{{GENDER:$1|кулланучыларны тикшерүче}}", 12 | "right-checkuser": "Кулланучыларның IP адресларын һәм башка мәгълүматларын тикшерү", 13 | "checkuser-all": "барысы", 14 | "checkuser-toollink-check": "тикшерү" 15 | } 16 | -------------------------------------------------------------------------------- /i18n/udm.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kaganer", 5 | "Kotwys", 6 | "Света Поторочина" 7 | ] 8 | }, 9 | "checkuser-all": "ваньмыз", 10 | "checkuser-investigate-compare-table-button-checks-label": "Эскеронъёс", 11 | "checkuser-investigate-subtitle-link-restart-tour": "Турез выльысь кутсконо" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/ur.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "BukhariSaeed", 5 | "Muhammad Shuaib", 6 | "පසිඳු කාවින්ද" 7 | ] 8 | }, 9 | "checkuser": "صارف کو چیک کریں", 10 | "checkuserlog": "صارف لاگ ان کریں چیک کریں", 11 | "checkuser-contribs-log": "حال ہی میں صارف کي", 12 | "group-checkuser": "پڑتال کنندگان", 13 | "group-checkuser-member": "{{GENDER:$1|پڑتال کنندہ}}", 14 | "right-checkuser": "صارف کے آئی پی پتوں اور دیگر متعلقہ معلومات کی جانچ", 15 | "right-checkuser-log": "نوشتہ صارف پڑتال کا مشاہدہ", 16 | "action-checkuser-log": "نوشتۂ صارف پڑتال دیکھیں", 17 | "grouppage-checkuser": "{{ns:project}}:پڑتال کنندہ", 18 | "checkuser-reason": "وجہ:", 19 | "checkuser-showlog": "شو کے لاگ ان کریں", 20 | "checkuser-week-1": "گزشتہ ہفتے", 21 | "checkuser-week-2": "گزشتہ دو ہفتوں", 22 | "checkuser-month": "گزشتہ 30 دن میں", 23 | "checkuser-all": "سب", 24 | "checkuser-nomatch": "کوئی میچ پایا.", 25 | "checkuser-check": "چیک کریں", 26 | "checkuser-search": "تلاش", 27 | "checkuser-search-submit": "تلاش", 28 | "checkuser-global-contributions-link": "عالمی شراکتیں" 29 | } 30 | -------------------------------------------------------------------------------- /i18n/uz.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "CoderSI", 5 | "Jamshiduralovofficial", 6 | "Sociologist" 7 | ] 8 | }, 9 | "group-checkuser": "Foydalanuvchilarni tekshiruvchilar" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/vep.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Игорь Бродский" 5 | ] 6 | }, 7 | "checkuser": "Kodvda kävutajad", 8 | "checkuserlog": "Kävutajiden kodvindan aigkirj", 9 | "group-checkuser": "Kodvda kävutajid", 10 | "checkuser-reason": "Sü:", 11 | "checkuser-showlog": "Ozutada aigkirj", 12 | "checkuser-query": "Ozutada veresid toižetusid", 13 | "checkuser-target": "Kävutai vai IP-adres", 14 | "checkuser-users": "Sada kävutajid", 15 | "checkuser-all": "kaik", 16 | "checkuser-blocked": "Blokiruidud", 17 | "checkuser-locked": "Luklostadud", 18 | "checkuser-search": "Ectä", 19 | "checkuser-search-submit": "Ectä" 20 | } 21 | -------------------------------------------------------------------------------- /i18n/wal.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Malaalaa" 5 | ] 6 | }, 7 | "checkuser-ip-contributions-contributions-link": "Oosota" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/war.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "BaRaN6161 TURK", 5 | "JinJian" 6 | ] 7 | }, 8 | "group-checkuser": "Mga manginginsayod hin gumaramit", 9 | "group-checkuser-member": "{{GENDER:$1|manginginsayod hin gumaramit}}", 10 | "checkuser-all": "ngatanan", 11 | "checkuser-check": "Panginsayori", 12 | "checkuser-massblock": "Pugngi an mga ginpili nga gumaramit", 13 | "checkuser-search-submit": "Bilnga" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/wuu-hans.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Winston Sung" 5 | ] 6 | }, 7 | "checkuser-reason": "理由:" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/xmf.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Narazeni" 5 | ] 6 | }, 7 | "grant-checkuser": "მახვარებუეფიშ გინოჯინეფიშ მუნაჩემეფშა მიშულა", 8 | "checkuser-investigate-preliminary-table-cell-blocked": "ბლოკირი რე", 9 | "checkuser-investigate-preliminary-table-cell-edits": "$1 {{PLURAL:$1|რედაქტირაფა|რედაქტირაფა}}", 10 | "checkuser-investigate-preliminary-table-cell-unblocked": "ვა რე ბლოკირი", 11 | "checkuser-investigate-preliminary-table-header-editcount": "რედაქტირაფეფი", 12 | "checkuser-investigate-preliminary-table-header-groups": "ბუნეფი", 13 | "checkuser-investigate-preliminary-table-header-name": "მახვარებუშ ჯოხო", 14 | "checkuser-investigate-preliminary-table-header-registration": "თარიღი ეკოჸუნს", 15 | "checkuser-investigate-preliminary-table-header-wiki": "ვიკი:", 16 | "checkuser-investigate-compare-table-button-add-user-targets-label": "თე მახვარებუშ არძა IP-მიოწურაფუშ ძირაფა" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/za.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Midleading" 5 | ] 6 | }, 7 | "checkuser-all": "sojmiz" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/zgh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Hakim1bal" 5 | ] 6 | }, 7 | "checkuser-search-submit": "ⵔⵣⵓ", 8 | "checkuser-investigate-preliminary-table-header-editcount": "ⵉⵙⵏⴼⵍⵏ" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/zh-hk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "A2093064", 5 | "Dabao qian", 6 | "Liuxinyu970226", 7 | "LuciferianThomas", 8 | "Xiplus", 9 | "捍粵者", 10 | "星海" 11 | ] 12 | }, 13 | "checkuser": "查核用戶", 14 | "checkuserlog": "用戶查核日誌", 15 | "group-checkuser": "用戶查核員", 16 | "group-checkuser-member": "{{GENDER:$1|用戶查核員}}", 17 | "right-checkuser": "檢查用戶IP位址與其它資訊", 18 | "right-checkuser-log": "檢視用戶查核日誌", 19 | "grouppage-checkuser": "{{ns:project}}:用戶查核員", 20 | "checkuser-target": "IP位址或用戶名:", 21 | "checkuser-users": "查詢用戶", 22 | "checkuser-ipeditcount": "~於全部用戶中 $1", 23 | "tooltip-t-global-contributions": "檢視{{GENDER:$1|該用戶}}的全域貢獻清單" 24 | } 25 | -------------------------------------------------------------------------------- /jest.setup.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /* eslint-disable no-undef */ 4 | const { config } = require( '@vue/test-utils' ); 5 | const mockMediaWiki = require( '@wikimedia/mw-node-qunit/src/mockMediaWiki.js' ); 6 | 7 | // Mock Vue plugins in test suites 8 | global.mw = mockMediaWiki(); 9 | 10 | global.mw.message = jest.fn( ( ...messageKeyAndParams ) => ( { 11 | text: () => `(${ messageKeyAndParams.join( ', ' ) })`, 12 | parse: () => `(${ messageKeyAndParams.join( ', ' ) })` 13 | } ) ); 14 | 15 | global.mw.msg = jest.fn( ( ...messageKeyAndParams ) => `(${ messageKeyAndParams.join( ', ' ) })` ); 16 | 17 | global.mw.storage = { 18 | session: { 19 | get: jest.fn(), 20 | set: jest.fn() 21 | }, 22 | set: jest.fn() 23 | }; 24 | 25 | global.mw.notify = jest.fn(); 26 | 27 | config.global.mocks = { 28 | $i18n: ( ...messageKeyAndParams ) => ( { 29 | text: () => '(' + messageKeyAndParams.join( ', ' ) + ')', 30 | parse: () => '(' + messageKeyAndParams.join( ', ' ) + ')' 31 | } ) 32 | }; 33 | config.global.directives = { 34 | 'i18n-html': ( el, binding ) => { 35 | el.innerHTML = `${ binding.arg } (${ binding.value })`; 36 | } 37 | }; 38 | 39 | // Ignore all "teleport" behavior for the purpose of testing Dialog; 40 | // see https://test-utils.vuejs.org/guide/advanced/teleport.html 41 | config.global.stubs = { 42 | teleport: true 43 | }; 44 | -------------------------------------------------------------------------------- /modules/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "wikimedia/client", 5 | "wikimedia/jquery", 6 | "wikimedia/mediawiki" 7 | ], 8 | "rules": { 9 | "no-jquery/no-global-selector": "off" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /modules/ext.checkUser.ipInfo.hooks/init.js: -------------------------------------------------------------------------------- 1 | ( function () { 2 | /* 3 | * Add Special:GlobalContributions link to IPInfo's infobox widget 4 | * if target associated with the page is also supported by Special:GC: 5 | * - Special:IPContributions (temporary accounts associated w/an IP address) 6 | * - Special:Contributions or Special:DeletedContributions for temporary accounts 7 | */ 8 | const target = mw.config.get( 'wgRelevantUserName' ); 9 | const pageName = mw.config.get( 'wgCanonicalSpecialPageName' ); 10 | mw.hook( 'ext.ipinfo.infobox.widget' ).add( ( $info, info, generateMarkup ) => { 11 | // Definition imported by module registration in RLRegisterModulesHandler 12 | // eslint-disable-next-line no-undef 13 | addSpecialGlobalContributionsLink( $info, info, generateMarkup, target, pageName ); 14 | } ); 15 | }() ); 16 | -------------------------------------------------------------------------------- /modules/ext.checkUser.styles/cidr.less: -------------------------------------------------------------------------------- 1 | .mw-checkuser-cidrform { 2 | .oo-ui-labelWidget { 3 | margin-top: 12px; 4 | } 5 | 6 | .mw-checkuser-cidr-res-label { 7 | padding-bottom: 4px; 8 | } 9 | 10 | .mw-checkuser-cidr-tool-links-hidden { 11 | display: none; 12 | margin-top: 0; 13 | } 14 | 15 | .mw-checkuser-cidr-ipnote { 16 | font-weight: 600; 17 | } 18 | 19 | .mw-checkuser-cidr-tool-links { 20 | display: block; 21 | } 22 | } 23 | 24 | .mw-checkuser-cidr-calculator-hidden { 25 | display: none; 26 | } 27 | -------------------------------------------------------------------------------- /modules/ext.checkUser.styles/investigateblock.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Styles for Special:InvestigateBlock 3 | */ 4 | @import 'mediawiki.skin.variables.less'; 5 | 6 | // OOUIHTMLForm specifics 7 | @ooui-font-size-browser: 16; // Assumed browser default of `16px`. 8 | @ooui-font-size-base: 0.875em; // Equals `14px` at browser default of `16px`. 9 | 10 | @ooui-spacing-radio-label: (26 / @ooui-font-size-browser / @ooui-font-size-base); // Equals `1.85714286em`≈`26px`. 11 | 12 | .ext-checkuser-investigate-block-notice.oo-ui-fieldLayout { 13 | margin-left: @ooui-spacing-radio-label; 14 | max-width: 50em - @ooui-spacing-radio-label; 15 | } 16 | 17 | .mw-special-InvestigateBlock .mw-htmlform { 18 | > .oo-ui-panelLayout-framed { 19 | border: 0; 20 | } 21 | 22 | > .oo-ui-panelLayout-padded { 23 | padding: 0; 24 | } 25 | 26 | .mw-htmlform-select-and-other-field { 27 | .oo-ui-textInputWidget, 28 | .oo-ui-dropdownInputWidget { 29 | display: block; 30 | max-width: 50em; 31 | } 32 | 33 | .oo-ui-textInputWidget { 34 | margin-top: 0.5em; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /modules/ext.checkUser.styles/temporaryaccount.minerva.less: -------------------------------------------------------------------------------- 1 | @import 'mediawiki.skin.variables.less'; 2 | 3 | .mw-special-Watchlist, 4 | .mw-special-Recentchanges { 5 | .ext-checkuser-tempaccount-reveal-ip, 6 | .ext-checkuser-tempaccount-reveal-ip-button.oo-ui-buttonElement { 7 | float: none; 8 | margin-top: -5px; 9 | margin-right: 0; 10 | 11 | .oo-ui-buttonElement-button { 12 | padding: 1px; 13 | min-height: 0; 14 | } 15 | } 16 | } 17 | 18 | .mw-special-Contributions .ext-checkuser-tempaccount-reveal-ip-button { 19 | margin-right: 0; 20 | margin-top: -4.5px; 21 | } 22 | -------------------------------------------------------------------------------- /modules/ext.checkUser.styles/userInfoCard.less: -------------------------------------------------------------------------------- 1 | @import 'mediawiki.skin.variables.less'; 2 | 3 | .ext-checkuser-userinfocard-button { 4 | vertical-align: top; 5 | 6 | &.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button { 7 | padding: 0; 8 | margin-left: 2px; 9 | min-width: 20px; 10 | // min-height adjusted to fix clipping when language is ar, see T298942 11 | min-height: 22px; 12 | overflow: hidden; 13 | 14 | & > .oo-ui-iconElement-icon { 15 | left: -1px; 16 | margin: 0; 17 | opacity: @opacity-icon-subtle; 18 | } 19 | } 20 | 21 | &.oo-ui-buttonWidget { 22 | margin-right: 5px; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /modules/ext.checkUser.tempAccounts/SpecialContributions.js: -------------------------------------------------------------------------------- 1 | const ipReveal = require( './ipReveal.js' ); 2 | 3 | /** 4 | * Add IP reveal functionality to contributions pages that show contributions made by a single 5 | * temporary user. See ipReveal#enableIpRevealForContributionsPage for details. 6 | * 7 | * @param {string|*} documentRoot A Document or selector to use as the root of the 8 | * search for elements 9 | * @param {string} pageTitle Declare what page this is being run on. 10 | * This is for compatibility across Special:Contributions and Special:DeletedContributions, 11 | * as they have different guaranteed existing elements. 12 | */ 13 | module.exports = function ( documentRoot, pageTitle ) { 14 | ipReveal.enableIpRevealForContributionsPage( documentRoot, pageTitle ); 15 | }; 16 | -------------------------------------------------------------------------------- /modules/ext.checkUser.tempAccounts/api.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Get formatted block details for the current user via the API. 3 | * 4 | * @return {mw.Api~AbortablePromise} 5 | */ 6 | function getFormattedBlockDetails() { 7 | const api = new mw.Api(); 8 | 9 | return api.get( { 10 | action: 'query', 11 | meta: 'checkuserformattedblockinfo', 12 | format: 'json', 13 | formatversion: '2' 14 | } ); 15 | } 16 | 17 | module.exports = { getFormattedBlockDetails }; 18 | -------------------------------------------------------------------------------- /modules/ext.checkUser.tempAccounts/initOnHook.js: -------------------------------------------------------------------------------- 1 | const ipReveal = require( './ipReveal.js' ); 2 | 3 | /** 4 | * Add IP reveal functionality to a page that automatically updates. 5 | * 6 | * This is very similar to initOnLoad, except: 7 | * - Multi-reveal functionality is enabled once, on page load. 8 | * - New buttons and new revealed IPs are potentially added each time the page updates. 9 | * 10 | * @param {string|jQuery|*} documentRoot A DOM Element, Document, jQuery or selector 11 | * to use as context 12 | */ 13 | module.exports = function ( documentRoot ) { 14 | if ( !documentRoot ) { 15 | documentRoot = document; 16 | } 17 | 18 | mw.hook( 'wikipage.content' ).add( ( $content ) => { 19 | const $ipRevealButtons = ipReveal.addIpRevealButtons( $content ); 20 | ipReveal.automaticallyRevealUsers( $ipRevealButtons ); 21 | } ); 22 | 23 | ipReveal.enableMultiReveal( $( documentRoot ) ); 24 | }; 25 | -------------------------------------------------------------------------------- /modules/ext.checkUser.tempAccountsOnboarding/components/TempAccountsOnboardingStep.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 44 | -------------------------------------------------------------------------------- /modules/ext.checkUser.tempAccountsOnboarding/init.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | $( () => { 4 | const Vue = require( 'vue' ); 5 | const App = require( './components/App.vue' ); 6 | 7 | Vue.createMwApp( App ).mount( '#ext-checkuser-tempaccountsonboarding-app' ); 8 | } ); 9 | -------------------------------------------------------------------------------- /modules/ext.checkUser.userInfoCard/components/UserInfoCardError.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 30 | 31 | 36 | -------------------------------------------------------------------------------- /modules/ext.checkUser.userInfoCard/init.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | $( () => { 4 | const Vue = require( 'vue' ); 5 | const App = require( './components/App.vue' ); 6 | const Pinia = require( 'pinia' ); 7 | const pinia = Pinia.createPinia(); 8 | 9 | const popover = document.createElement( 'div' ); 10 | popover.id = 'ext-checkuser-userinfocard-popover'; 11 | popover.classList.add( 'ext-checkuser-userinfocard-popover' ); 12 | document.body.appendChild( popover ); 13 | const popoverApp = Vue.createMwApp( App ).use( pinia ).mount( popover ); 14 | 15 | const buttons = document.querySelectorAll( '.ext-checkuser-userinfocard-button' ); 16 | buttons.forEach( ( button ) => { 17 | $( button ).on( 'click', ( event ) => { 18 | event.preventDefault(); 19 | 20 | // fetch wikiId and userId from the classname 21 | // ext-checkuser-userinfocard-id-$wikiId:$userId 22 | const idClass = Array.from( button.classList ).find( 23 | ( cls ) => cls.startsWith( 'ext-checkuser-userinfocard-id-' ) 24 | ); 25 | if ( idClass ) { 26 | const [ wikiId, userId ] = idClass.replace( 27 | 'ext-checkuser-userinfocard-id-', '' 28 | ).split( ':' ); 29 | if ( wikiId && userId ) { 30 | popoverApp.store.fetchUserInfo( userId, wikiId ); 31 | popoverApp.store.open( event.target ); 32 | } 33 | } 34 | } ); 35 | } ); 36 | } ); 37 | -------------------------------------------------------------------------------- /modules/ext.checkUser/checkuser/checkUserHelper/addCopyElement.js: -------------------------------------------------------------------------------- 1 | // Licence: GPLv3 & GPLv2 (dual licensed) 2 | // Original source: https://github.com/Ladsgroup/CheckUserHelper 3 | 'use strict'; 4 | 5 | /** 6 | * Adds a button underneath the summary table that when 7 | * pressed adds the table in a wikitext format to the 8 | * clipboard of the user. 9 | * 10 | * @param {string} copyText The wikitext table to copied (generated by createTableText.js) 11 | */ 12 | function addCopyElement( copyText ) { 13 | const copyTextLayout = new mw.widgets.CopyTextLayout( { 14 | align: 'top', 15 | copyText: copyText, 16 | successMessage: mw.message( 'checkuser-helper-copy-success' ), 17 | multiline: true, 18 | failMessage: mw.message( 'checkuser-helper-copy-failed' ) 19 | } ); 20 | copyTextLayout.$element.addClass( 'mw-checkuser-helper-copy-text-layout' ); 21 | $( '.mw-checkuser-helper-table' ).after( copyTextLayout.$element ); 22 | } 23 | 24 | module.exports = addCopyElement; 25 | -------------------------------------------------------------------------------- /modules/ext.checkUser/checkuser/checkUserHelper/utils.js: -------------------------------------------------------------------------------- 1 | // Licence: GPLv3 & GPLv2 (dual licensed) 2 | // Original source: https://github.com/Ladsgroup/CheckUserHelper 3 | 'use strict'; 4 | 5 | /** 6 | * Compare IP addresses in a way that is 7 | * compatible with Array.sort. 8 | * 9 | * @param {string} a The first IP 10 | * @param {string} b The second IP 11 | * @return {number} An integer that can be used by Array.sort 12 | */ 13 | function compareIPs( a, b ) { 14 | return calculateIPNumber( a ) - calculateIPNumber( b ); 15 | } 16 | 17 | /** 18 | * Converts a string IP address to an integer 19 | * representation such that IP addresses can 20 | * be numerically compared. 21 | * 22 | * @param {string} ip 23 | * @return {number} 24 | */ 25 | function calculateIPNumber( ip ) { 26 | return ip.includes( '.' ) ? 27 | Number( 28 | ip.split( '.' ).map( 29 | ( num ) => ( '000' + num ).slice( -3 ) 30 | ).join( '' ) 31 | ) : Number( 32 | '0x' + ip.split( ':' ).map( 33 | ( num ) => ( '0000' + num ).slice( -4 ) 34 | ).join( '' ) 35 | ); 36 | } 37 | 38 | module.exports = { 39 | compareIPs: compareIPs, 40 | calculateIPNumber: calculateIPNumber 41 | }; 42 | -------------------------------------------------------------------------------- /modules/ext.checkUser/checkuserlog/highlightScroll.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Scroll to the highlighted log entry in Special:CheckUserLog. 3 | * 4 | * If the page includes at least one entry that is highlighted, scroll to the first one. 5 | */ 6 | ( function () { 7 | const $highlightEntry = $( '.mw-checkuser-log-highlight-entry' ).first(); 8 | if ( 9 | $highlightEntry.length > 0 && 10 | $highlightEntry.offset().top > $( window ).height() 11 | ) { 12 | $( window ).scrollTop( 13 | $highlightEntry.offset().top - 100 14 | ); 15 | } 16 | }() ); 17 | -------------------------------------------------------------------------------- /modules/ext.checkUser/dispatcher.js: -------------------------------------------------------------------------------- 1 | ( function () { 2 | // Include resources for specific special pages 3 | switch ( mw.config.get( 'wgCanonicalSpecialPageName' ) ) { 4 | case 'Investigate': 5 | require( './investigate/init.js' ); 6 | break; 7 | case 'InvestigateBlock': 8 | require( './investigateblock/investigateblock.js' ); 9 | break; 10 | case 'CheckUser': { 11 | require( './cidr/cidr.js' ); 12 | require( './checkuser/getUsersBlockForm.js' )(); 13 | const CheckUserHelper = require( './checkuser/checkUserHelper/init.js' ); 14 | CheckUserHelper.init(); 15 | break; 16 | } 17 | case 'CheckUserLog': 18 | require( './checkuserlog/highlightScroll.js' ); 19 | break; 20 | } 21 | }() ); 22 | -------------------------------------------------------------------------------- /modules/ext.checkUser/investigate/init.js: -------------------------------------------------------------------------------- 1 | ( function () { 2 | const addBlockForm = require( './blockform.js' ), 3 | setupTables = require( './tables.js' ), 4 | addCopyFeature = require( './copy.js' ), 5 | setUpResetGuidedTourLinks = require( './resetGuidedTour.js' ); 6 | 7 | if ( $( '.ext-checkuser-investigate-subtitle-block-button' ).length > 0 ) { 8 | addBlockForm(); 9 | } 10 | 11 | setupTables(); 12 | 13 | if ( $( '.ext-checkuser-investigate-table-compare' ).length > 0 ) { 14 | addCopyFeature(); 15 | } 16 | 17 | setUpResetGuidedTourLinks(); 18 | 19 | }() ); 20 | -------------------------------------------------------------------------------- /modules/ext.checkUser/investigate/resetGuidedTour.js: -------------------------------------------------------------------------------- 1 | function resetGuidedTour( clickedLink ) { 2 | const api = new mw.Api(); 3 | const redirectTarget = clickedLink.attr( 'href' ); 4 | const options = { 'checkuser-investigate-tour-seen': null }; 5 | if ( clickedLink.hasClass( 'ext-checkuser-investigate-reset-form-guided-tour' ) ) { 6 | // Only reset the form guided tour if specifically requested. 7 | options[ 'checkuser-investigate-form-tour-seen' ] = null; 8 | } 9 | api.saveOptions( options ).then( () => { 10 | // Now that the preference is saved, refresh the page so that the 11 | // ResourceLoader modules get loaded and the tour gets shown. 12 | window.location.href = redirectTarget; 13 | } ); 14 | } 15 | 16 | /** 17 | * Sets up event listeners for the links that reset the guided tours. 18 | */ 19 | function setUpResetGuidedTourLinks() { 20 | $( '.ext-checkuser-investigate-reset-guided-tour' ).on( 'click', function ( event ) { 21 | event.preventDefault(); 22 | resetGuidedTour( $( this ) ); 23 | } ); 24 | } 25 | 26 | module.exports = setUpResetGuidedTourLinks; 27 | -------------------------------------------------------------------------------- /modules/ext.guidedTour.tour.checkuserinvestigateform/checkuserinvestigateform.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Special:Invesitgate form guided tour 3 | */ 4 | ( function ( gt ) { 5 | if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Investigate' ) { 6 | return; 7 | } 8 | 9 | if ( $( '#targets' ).length === 0 ) { 10 | return; 11 | } 12 | 13 | const tour = new gt.TourBuilder( { 14 | name: 'checkuserinvestigateform', 15 | shouldLog: true, 16 | isSinglePage: false 17 | } ); 18 | 19 | tour.firstStep( { 20 | name: 'targets', 21 | titlemsg: 'checkuser-investigate-tour-targets-title', 22 | description: mw.message( 'checkuser-investigate-tour-targets-desc', mw.config.get( 'wgCheckUserInvestigateMaxTargets' ) ).parse(), 23 | attachTo: '#targets', 24 | position: 'bottom', 25 | closeOnClickOutside: false, 26 | overlay: true, 27 | onHide: function () { 28 | // Api.saveOption will save a string instead of a bool. :( 29 | ( new mw.Api() ).saveOption( 'checkuser-investigate-form-tour-seen', 1 ); 30 | }, 31 | buttons: [ 32 | { 33 | action: 'end' 34 | } 35 | ] 36 | } ); 37 | 38 | }( mw.guidedTour ) ); 39 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CheckUser", 3 | "private": true, 4 | "scripts": { 5 | "test": "npm run test:grunt && npm run test:unit", 6 | "coverage": "npm run test:unit", 7 | "test:grunt": "grunt test", 8 | "test:unit": "jest", 9 | "lint:fix": "grunt fix", 10 | "selenium-daily": "npm run selenium-test", 11 | "selenium-test": "wdio tests/selenium/wdio.conf.js" 12 | }, 13 | "devDependencies": { 14 | "@babel/preset-env": "7.26.0", 15 | "@vue/compiler-dom": "3.5.13", 16 | "@vue/test-utils": "2.4.6", 17 | "@vue/vue3-jest": "29.2.6", 18 | "@wdio/cli": "7.40.0", 19 | "@wdio/junit-reporter": "7.40.0", 20 | "@wdio/local-runner": "7.40.0", 21 | "@wdio/mocha-framework": "7.40.0", 22 | "@wdio/spec-reporter": "7.40.0", 23 | "@wikimedia/codex": "2.0.0-rc.1", 24 | "@wikimedia/mw-node-qunit": "7.2.0", 25 | "eslint-config-wikimedia": "0.30.0", 26 | "grunt": "1.6.1", 27 | "grunt-banana-checker": "0.13.0", 28 | "grunt-eslint": "24.3.0", 29 | "grunt-stylelint": "0.20.1", 30 | "jest": "29.7.0", 31 | "jest-environment-jsdom": "29.7.0", 32 | "moment": "2.30.1", 33 | "pinia": "3.0.2", 34 | "stylelint-config-wikimedia": "0.18.0", 35 | "vue": "3.5.13", 36 | "wdio-mediawiki": "2.7.1" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /quibble.yaml: -------------------------------------------------------------------------------- 1 | earlywarning: 2 | should_comment: 1 3 | -------------------------------------------------------------------------------- /schema/cu_useragent.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "cu_useragent", 4 | "comment": "The user agent string header provided by the browser for requests is stored here for de-duplication. There MAY be rows with the same user agent string.", 5 | "columns": [ 6 | { 7 | "name": "cuua_id", 8 | "comment": "Unique ID to identify each user agent", 9 | "type": "bigint", 10 | "options": { "unsigned": true, "notnull": true, "autoincrement": true } 11 | }, 12 | { 13 | "name": "cuua_text", 14 | "comment": "The user agent string", 15 | "type": "binary", 16 | "options": { "notnull": true, "length": 255 } 17 | } 18 | ], 19 | "indexes": [ 20 | { 21 | "name": "cuua_text", 22 | "columns": [ "cuua_text" ], 23 | "unique": false, 24 | "comment": "Used to find rows with a given user agent string when attempting to insert a new row to one of cu_changes, cu_log_event, cu_private_event, or cu_private_event_no_actor." 25 | } 26 | ], 27 | "pk": [ "cuua_id" ] 28 | } 29 | ] 30 | -------------------------------------------------------------------------------- /schema/cu_useragent_clienthints.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "cu_useragent_clienthints", 4 | "columns": [ 5 | { 6 | "name": "uach_id", 7 | "comment": "Primary key", 8 | "type": "integer", 9 | "options": { "autoincrement": true, "notnull": true, "unsigned": true } 10 | }, 11 | { 12 | "name": "uach_name", 13 | "comment": "Name of the user-agent client hint. See https://wicg.github.io/ua-client-hints/#http-ua-hints for a list.", 14 | "type": "string", 15 | "options": { "notnull": true, "length": 32 } 16 | }, 17 | { 18 | "name": "uach_value", 19 | "comment": "Value of the user-agent client hint, see https://wicg.github.io/ua-client-hints/#http-ua-hints for a list of client hint names.", 20 | "type": "string", 21 | "options": { "notnull": true, "length": 255 } 22 | } 23 | ], 24 | "indexes": [ 25 | { 26 | "name": "uach_name_value", 27 | "columns": [ "uach_name", "uach_value" ], 28 | "unique": true 29 | } 30 | ], 31 | "pk": [ "uach_id" ] 32 | } 33 | ] 34 | -------------------------------------------------------------------------------- /schema/cu_useragent_clienthints_map.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "cu_useragent_clienthints_map", 4 | "columns": [ 5 | { 6 | "name": "uachm_uach_id", 7 | "comment": "Foreign key to cu_useragent_clienthints uach_id.", 8 | "type": "integer", 9 | "options": { "notnull": true, "unsigned": true } 10 | }, 11 | { 12 | "name": "uachm_reference_id", 13 | "comment": "Foreign key to one of cu_changes, cu_log_event, or cu_private_event. Consult uachm_reference_type to determine which table this row relates to.", 14 | "type": "integer", 15 | "options": { "unsigned": true, "notnull": true } 16 | }, 17 | { 18 | "name": "uachm_reference_type", 19 | "comment": "Integer mapping identifier specifying which table the data in this row relates to. See UserAgentClientHintsManager for the mapping.", 20 | "type": "mwtinyint", 21 | "options": { "notnull": true, "length": 1, "default": 0 } 22 | } 23 | ], 24 | "indexes": [ 25 | { "name": "uachm_reference_id", "columns": [ "uachm_reference_id" ], "unique": false } 26 | ], 27 | "pk": [ "uachm_uach_id", "uachm_reference_type", "uachm_reference_id" ] 28 | } 29 | ] 30 | -------------------------------------------------------------------------------- /schema/cuci_wiki_map.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "cuci_wiki_map", 4 | "comment": "A central table used to map an integer ID to wiki DB name. Used to make storage of the wiki IDs more efficient.", 5 | "columns": [ 6 | { 7 | "name": "ciwm_id", 8 | "comment": "Unique ID to identify each wiki ID. This is the primary key, but can be a smallint as it will never exceed the number of wikis in an install (so ~65,000 is enough).", 9 | "type": "smallint", 10 | "options": { "unsigned": true, "notnull": true, "autoincrement": true } 11 | }, 12 | { 13 | "name": "ciwm_wiki", 14 | "comment": "The wiki DB name associated with this row.", 15 | "type": "binary", 16 | "options": { "notnull": true, "length": 255 } 17 | } 18 | ], 19 | "indexes": [ 20 | { 21 | "name": "ciwm_wiki", 22 | "columns": [ "ciwm_wiki" ], 23 | "unique": true, 24 | "comment": "Used to find the integer ID for a given wiki DB name." 25 | } 26 | ], 27 | "pk": [ "ciwm_id" ] 28 | } 29 | ] 30 | -------------------------------------------------------------------------------- /schema/mysql/cu_useragent.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cu_useragent.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cu_useragent ( 6 | cuua_id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, 7 | cuua_text VARBINARY(255) NOT NULL, 8 | INDEX cuua_text (cuua_text), 9 | PRIMARY KEY(cuua_id) 10 | ) /*$wgDBTableOptions*/; 11 | -------------------------------------------------------------------------------- /schema/mysql/cu_useragent_clienthints.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cu_useragent_clienthints.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cu_useragent_clienthints ( 6 | uach_id INT UNSIGNED AUTO_INCREMENT NOT NULL, 7 | uach_name VARCHAR(32) NOT NULL, 8 | uach_value VARCHAR(255) NOT NULL, 9 | UNIQUE INDEX uach_name_value (uach_name, uach_value), 10 | PRIMARY KEY(uach_id) 11 | ) /*$wgDBTableOptions*/; 12 | -------------------------------------------------------------------------------- /schema/mysql/cu_useragent_clienthints_map.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cu_useragent_clienthints_map.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cu_useragent_clienthints_map ( 6 | uachm_uach_id INT UNSIGNED NOT NULL, 7 | uachm_reference_id INT UNSIGNED NOT NULL, 8 | uachm_reference_type TINYINT(1) DEFAULT 0 NOT NULL, 9 | INDEX uachm_reference_id (uachm_reference_id), 10 | PRIMARY KEY( 11 | uachm_uach_id, uachm_reference_type, 12 | uachm_reference_id 13 | ) 14 | ) /*$wgDBTableOptions*/; 15 | -------------------------------------------------------------------------------- /schema/mysql/cuci_temp_edit.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cuci_temp_edit.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cuci_temp_edit ( 6 | cite_ip_hex VARBINARY(255) NOT NULL, 7 | cite_ciwm_id SMALLINT UNSIGNED NOT NULL, 8 | cite_timestamp BINARY(14) NOT NULL, 9 | INDEX cite_timestamp (cite_timestamp), 10 | INDEX cite_ip_hex_timestamp (cite_ip_hex, cite_timestamp), 11 | PRIMARY KEY(cite_ip_hex, cite_ciwm_id) 12 | ) /*$wgDBTableOptions*/; 13 | -------------------------------------------------------------------------------- /schema/mysql/cuci_user.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cuci_user.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cuci_user ( 6 | ciu_central_id INT UNSIGNED NOT NULL, 7 | ciu_ciwm_id SMALLINT UNSIGNED NOT NULL, 8 | ciu_timestamp BINARY(14) NOT NULL, 9 | INDEX ciu_timestamp (ciu_timestamp), 10 | INDEX ciu_central_id_timestamp (ciu_central_id, ciu_timestamp), 11 | PRIMARY KEY(ciu_central_id, ciu_ciwm_id) 12 | ) /*$wgDBTableOptions*/; 13 | -------------------------------------------------------------------------------- /schema/mysql/cuci_wiki_map.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cuci_wiki_map.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cuci_wiki_map ( 6 | ciwm_id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL, 7 | ciwm_wiki VARBINARY(255) NOT NULL, 8 | UNIQUE INDEX ciwm_wiki (ciwm_wiki), 9 | PRIMARY KEY(ciwm_id) 10 | ) /*$wgDBTableOptions*/; 11 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_changes-actor-comment.sql: -------------------------------------------------------------------------------- 1 | -- Add column for storing actor and comment 2 | ALTER TABLE /*_*/cu_changes 3 | ADD COLUMN cuc_actor bigint unsigned NOT NULL DEFAULT 0 AFTER cuc_user_text, 4 | ADD COLUMN cuc_comment_id bigint unsigned NOT NULL DEFAULT 0 AFTER cuc_comment; 5 | 6 | CREATE INDEX /*i*/cuc_actor_ip_time ON /*_*/cu_changes (cuc_actor, cuc_ip, cuc_timestamp); 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_changes-add-cuc_agent_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-add-cuc_agent_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_changes 6 | ADD cuc_agent_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_changes-add-cuc_only_for_read_old.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-add-cuc_only_for_read_old.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_changes 6 | ADD cuc_only_for_read_old TINYINT(1) DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_changes-cuc_timestamp.sql: -------------------------------------------------------------------------------- 1 | -- Standardise type for timestamp columns 2 | ALTER TABLE /*_*/cu_changes 3 | CHANGE cuc_timestamp cuc_timestamp BINARY(14) NOT NULL; 4 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_changes-drop-cuc_actiontext.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-cuc_actiontext.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_changes 6 | DROP cuc_actiontext; 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_changes-drop-cuc_comment.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-cuc_comment.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_changes 6 | DROP cuc_comment; 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_changes-drop-cuc_only_for_read_old.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-cuc_only_for_read_old.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_changes 6 | DROP cuc_only_for_read_old; 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_changes-drop-cuc_private.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-cuc_private.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_changes 6 | DROP cuc_private; 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_changes-drop-cuc_user.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-cuc_user.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | DROP INDEX cuc_user_ip_time ON /*_*/cu_changes; 6 | ALTER TABLE /*_*/cu_changes 7 | DROP cuc_user, 8 | DROP cuc_user_text; 9 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_changes-drop-defaults.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-defaults.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_changes 6 | CHANGE cuc_actor cuc_actor BIGINT UNSIGNED NOT NULL, 7 | CHANGE cuc_comment_id cuc_comment_id BIGINT UNSIGNED NOT NULL; 8 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_changes-modify-cuc_id-bigint.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-modify-cuc_id-bigint.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_changes 6 | CHANGE cuc_id cuc_id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_log-actor.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-actor.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log 6 | ADD cul_actor BIGINT UNSIGNED DEFAULT 0 NOT NULL; 7 | 8 | CREATE INDEX cul_actor_time ON /*_*/cu_log (cul_actor, cul_timestamp); 9 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_log-add-cul_result_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-add-cul_result_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log 6 | ADD cul_result_id BIGINT UNSIGNED DEFAULT 0 NOT NULL, 7 | ADD cul_result_plaintext_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 8 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_log-comment_table_for_reason.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-comment_table_for_reason.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log 6 | ADD cul_reason_id BIGINT UNSIGNED DEFAULT 0 NOT NULL, 7 | ADD cul_reason_plaintext_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 8 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_log-drop-actor_default.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-drop-actor_default.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log 6 | CHANGE cul_actor cul_actor BIGINT UNSIGNED NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_log-drop-cul_reason.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-drop-cul_reason.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log 6 | DROP cul_reason; 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_log-drop-cul_reason_id_default.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-drop-cul_reason_id_default.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log 6 | CHANGE cul_reason_id cul_reason_id BIGINT UNSIGNED NOT NULL, 7 | CHANGE cul_reason_plaintext_id cul_reason_plaintext_id BIGINT UNSIGNED NOT NULL; 8 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_log-drop-cul_user.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-drop-cul_user.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | DROP INDEX cul_user ON /*_*/cu_log; 6 | ALTER TABLE /*_*/cu_log 7 | DROP cul_user, 8 | DROP cul_user_text; 9 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_log_event-add-cule_agent_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log_event-add-cule_agent_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log_event 6 | ADD cule_agent_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_log_event-def.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE /*_*/cu_log_event ( 2 | cule_id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, 3 | cule_log_id INT UNSIGNED DEFAULT 0 NOT NULL, 4 | cule_actor BIGINT UNSIGNED NOT NULL, 5 | cule_timestamp BINARY(14) NOT NULL, 6 | cule_ip VARCHAR(255) DEFAULT '', 7 | cule_ip_hex VARCHAR(255) DEFAULT NULL, 8 | cule_xff VARBINARY(255) DEFAULT '', 9 | cule_xff_hex VARCHAR(255) DEFAULT NULL, 10 | cule_agent VARBINARY(255) DEFAULT NULL, 11 | INDEX cule_ip_hex_time (cule_ip_hex, cule_timestamp), 12 | INDEX cule_xff_hex_time (cule_xff_hex, cule_timestamp), 13 | INDEX cule_timestamp (cule_timestamp), 14 | INDEX cule_actor_ip_time ( 15 | cule_actor, cule_ip, cule_timestamp 16 | ), 17 | PRIMARY KEY(cule_id) 18 | ) /*$wgDBTableOptions*/; 19 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_private_event-add-cupe_agent_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_private_event-add-cupe_agent_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_private_event 6 | ADD cupe_agent_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_private_event-def.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE /*_*/cu_private_event ( 2 | cupe_id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, 3 | cupe_namespace INT DEFAULT 0 NOT NULL, 4 | cupe_title VARBINARY(255) DEFAULT '' NOT NULL, 5 | cupe_actor BIGINT UNSIGNED DEFAULT 0 NOT NULL, 6 | cupe_log_type VARBINARY(32) DEFAULT '' NOT NULL, 7 | cupe_log_action VARBINARY(32) DEFAULT '' NOT NULL, 8 | cupe_params BLOB NOT NULL, 9 | cupe_comment_id BIGINT UNSIGNED DEFAULT 0 NOT NULL, 10 | cupe_page INT UNSIGNED DEFAULT 0 NOT NULL, 11 | cupe_timestamp BINARY(14) NOT NULL, 12 | cupe_ip VARCHAR(255) DEFAULT '', 13 | cupe_ip_hex VARCHAR(255) DEFAULT NULL, 14 | cupe_xff VARBINARY(255) DEFAULT '', 15 | cupe_xff_hex VARCHAR(255) DEFAULT NULL, 16 | cupe_agent VARBINARY(255) DEFAULT NULL, 17 | cupe_private MEDIUMBLOB DEFAULT NULL, 18 | INDEX cupe_ip_hex_time (cupe_ip_hex, cupe_timestamp), 19 | INDEX cupe_xff_hex_time (cupe_xff_hex, cupe_timestamp), 20 | INDEX cupe_timestamp (cupe_timestamp), 21 | INDEX cupe_actor_ip_time ( 22 | cupe_actor, cupe_ip, cupe_timestamp 23 | ), 24 | PRIMARY KEY(cupe_id) 25 | ) /*$wgDBTableOptions*/; 26 | -------------------------------------------------------------------------------- /schema/mysql/patch-cu_private_event-modify-cupe_actor-nullable.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_private_event-modify-cupe_actor-nullable.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_private_event 6 | CHANGE cupe_actor cupe_actor BIGINT UNSIGNED DEFAULT 0; 7 | -------------------------------------------------------------------------------- /schema/postgres/cu_useragent.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cu_useragent.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE cu_useragent ( 6 | cuua_id BIGSERIAL NOT NULL, 7 | cuua_text TEXT NOT NULL, 8 | PRIMARY KEY(cuua_id) 9 | ); 10 | 11 | CREATE INDEX cuua_text ON cu_useragent (cuua_text); 12 | -------------------------------------------------------------------------------- /schema/postgres/cu_useragent_clienthints.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cu_useragent_clienthints.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE cu_useragent_clienthints ( 6 | uach_id SERIAL NOT NULL, 7 | uach_name VARCHAR(32) NOT NULL, 8 | uach_value VARCHAR(255) NOT NULL, 9 | PRIMARY KEY(uach_id) 10 | ); 11 | 12 | CREATE UNIQUE INDEX uach_name_value ON cu_useragent_clienthints (uach_name, uach_value); 13 | -------------------------------------------------------------------------------- /schema/postgres/cu_useragent_clienthints_map.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cu_useragent_clienthints_map.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE cu_useragent_clienthints_map ( 6 | uachm_uach_id INT NOT NULL, 7 | uachm_reference_id INT NOT NULL, 8 | uachm_reference_type SMALLINT DEFAULT 0 NOT NULL, 9 | PRIMARY KEY( 10 | uachm_uach_id, uachm_reference_type, 11 | uachm_reference_id 12 | ) 13 | ); 14 | 15 | CREATE INDEX uachm_reference_id ON cu_useragent_clienthints_map (uachm_reference_id); 16 | -------------------------------------------------------------------------------- /schema/postgres/cuci_temp_edit.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cuci_temp_edit.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE cuci_temp_edit ( 6 | cite_ip_hex TEXT NOT NULL, 7 | cite_ciwm_id SMALLINT NOT NULL, 8 | cite_timestamp TIMESTAMPTZ NOT NULL, 9 | PRIMARY KEY(cite_ip_hex, cite_ciwm_id) 10 | ); 11 | 12 | CREATE INDEX cite_timestamp ON cuci_temp_edit (cite_timestamp); 13 | 14 | CREATE INDEX cite_ip_hex_timestamp ON cuci_temp_edit (cite_ip_hex, cite_timestamp); 15 | -------------------------------------------------------------------------------- /schema/postgres/cuci_user.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cuci_user.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE cuci_user ( 6 | ciu_central_id INT NOT NULL, 7 | ciu_ciwm_id SMALLINT NOT NULL, 8 | ciu_timestamp TIMESTAMPTZ NOT NULL, 9 | PRIMARY KEY(ciu_central_id, ciu_ciwm_id) 10 | ); 11 | 12 | CREATE INDEX ciu_timestamp ON cuci_user (ciu_timestamp); 13 | 14 | CREATE INDEX ciu_central_id_timestamp ON cuci_user (ciu_central_id, ciu_timestamp); 15 | -------------------------------------------------------------------------------- /schema/postgres/cuci_wiki_map.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cuci_wiki_map.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE cuci_wiki_map ( 6 | ciwm_id SMALLSERIAL NOT NULL, 7 | ciwm_wiki TEXT NOT NULL, 8 | PRIMARY KEY(ciwm_id) 9 | ); 10 | 11 | CREATE UNIQUE INDEX ciwm_wiki ON cuci_wiki_map (ciwm_wiki); 12 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_changes-add-cuc_agent_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-add-cuc_agent_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_changes 6 | ADD cuc_agent_id BIGINT DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_changes-add-cuc_only_for_read_old.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-add-cuc_only_for_read_old.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_changes 6 | ADD cuc_only_for_read_old SMALLINT DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_changes-drop-cuc_actiontext.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-cuc_actiontext.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_changes 6 | DROP cuc_actiontext; 7 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_changes-drop-cuc_comment.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-cuc_comment.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_changes 6 | DROP cuc_comment; 7 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_changes-drop-cuc_only_for_read_old.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-cuc_only_for_read_old.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_changes 6 | DROP cuc_only_for_read_old; 7 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_changes-drop-cuc_private.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-cuc_private.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_changes 6 | DROP cuc_private; 7 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_changes-drop-cuc_user.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-cuc_user.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | DROP INDEX cuc_user_ip_time; 6 | ALTER TABLE cu_changes 7 | DROP cuc_user; 8 | ALTER TABLE cu_changes 9 | DROP cuc_user_text; 10 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_changes-drop-defaults.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-drop-defaults.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_changes 6 | ALTER cuc_actor 7 | DROP DEFAULT; 8 | ALTER TABLE cu_changes 9 | ALTER cuc_comment_id 10 | DROP DEFAULT; 11 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_changes-modify-cuc_id-bigint.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-modify-cuc_id-bigint.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_changes 6 | ALTER cuc_id TYPE BIGINT; 7 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_changes-pk.sql: -------------------------------------------------------------------------------- 1 | CREATE INDEX cuc_timestamp ON cu_changes (cuc_timestamp); 2 | ALTER TABLE cu_changes ADD PRIMARY KEY (cuc_id); 3 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_log-actor.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-actor.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_log 6 | ADD cul_actor BIGINT DEFAULT 0 NOT NULL; 7 | 8 | CREATE INDEX cul_actor_time ON cu_log (cul_actor, cul_timestamp); 9 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_log-add-cul_result_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-add-cul_result_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_log 6 | ADD cul_result_id BIGINT DEFAULT 0 NOT NULL; 7 | ALTER TABLE cu_log 8 | ADD cul_result_plaintext_id BIGINT DEFAULT 0 NOT NULL; 9 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_log-comment_table_for_reason.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-comment_table_for_reason.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_log 6 | ADD cul_reason_id BIGINT DEFAULT 0 NOT NULL; 7 | ALTER TABLE cu_log 8 | ADD cul_reason_plaintext_id BIGINT DEFAULT 0 NOT NULL; 9 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_log-drop-actor_default.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-drop-actor_default.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_log 6 | ALTER cul_actor 7 | DROP DEFAULT; 8 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_log-drop-cul_reason.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-drop-cul_reason.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_log 6 | DROP cul_reason; 7 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_log-drop-cul_reason_id_default.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-drop-cul_reason_id_default.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_log 6 | ALTER cul_reason_id 7 | DROP DEFAULT; 8 | ALTER TABLE cu_log 9 | ALTER cul_reason_plaintext_id 10 | DROP DEFAULT; 11 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_log-drop-cul_user.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-drop-cul_user.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | DROP INDEX cul_user; 6 | ALTER TABLE cu_log 7 | DROP cul_user; 8 | ALTER TABLE cu_log 9 | DROP cul_user_text; 10 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_log-pk.sql: -------------------------------------------------------------------------------- 1 | DROP INDEX cul_user; 2 | DROP INDEX cul_type_target; 3 | DROP INDEX cul_target_hex; 4 | DROP INDEX cul_range_start; 5 | CREATE INDEX cul_user ON cu_log (cul_user, cul_timestamp); 6 | CREATE INDEX cul_type_target ON cu_log (cul_type, cul_target_id, cul_timestamp); 7 | CREATE INDEX cul_target_hex ON cu_log (cul_target_hex, cul_timestamp); 8 | CREATE INDEX cul_range_start ON cu_log (cul_range_start, cul_timestamp); 9 | ALTER TABLE cu_log ADD PRIMARY KEY (cul_id); 10 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_log_event-add-cule_agent_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log_event-add-cule_agent_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_log_event 6 | ADD cule_agent_id BIGINT DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_log_event-def.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE cu_log_event ( 2 | cule_id BIGSERIAL NOT NULL, 3 | cule_log_id INT DEFAULT 0 NOT NULL, 4 | cule_actor BIGINT NOT NULL, 5 | cule_timestamp TIMESTAMPTZ NOT NULL, 6 | cule_ip VARCHAR(255) DEFAULT '', 7 | cule_ip_hex VARCHAR(255) DEFAULT NULL, 8 | cule_xff TEXT DEFAULT '', 9 | cule_xff_hex VARCHAR(255) DEFAULT NULL, 10 | cule_agent TEXT DEFAULT NULL, 11 | PRIMARY KEY(cule_id) 12 | ); 13 | 14 | CREATE INDEX cule_ip_hex_time ON cu_log_event (cule_ip_hex, cule_timestamp); 15 | 16 | CREATE INDEX cule_xff_hex_time ON cu_log_event (cule_xff_hex, cule_timestamp); 17 | 18 | CREATE INDEX cule_timestamp ON cu_log_event (cule_timestamp); 19 | 20 | CREATE INDEX cule_actor_ip_time ON cu_log_event ( 21 | cule_actor, cule_ip, cule_timestamp 22 | ); 23 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_private_event-add-cupe_agent_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_private_event-add-cupe_agent_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_private_event 6 | ADD cupe_agent_id BIGINT DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_private_event-def.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE cu_private_event ( 2 | cupe_id BIGSERIAL NOT NULL, 3 | cupe_namespace INT DEFAULT 0 NOT NULL, 4 | cupe_title TEXT DEFAULT '' NOT NULL, 5 | cupe_actor BIGINT DEFAULT 0 NOT NULL, 6 | cupe_log_type TEXT DEFAULT '' NOT NULL, 7 | cupe_log_action TEXT DEFAULT '' NOT NULL, 8 | cupe_params TEXT NOT NULL, 9 | cupe_comment_id BIGINT DEFAULT 0 NOT NULL, 10 | cupe_page INT DEFAULT 0 NOT NULL, 11 | cupe_timestamp TIMESTAMPTZ NOT NULL, 12 | cupe_ip VARCHAR(255) DEFAULT '', 13 | cupe_ip_hex VARCHAR(255) DEFAULT NULL, 14 | cupe_xff TEXT DEFAULT '', 15 | cupe_xff_hex VARCHAR(255) DEFAULT NULL, 16 | cupe_agent TEXT DEFAULT NULL, 17 | cupe_private TEXT DEFAULT NULL, 18 | PRIMARY KEY(cupe_id) 19 | ); 20 | 21 | CREATE INDEX cupe_ip_hex_time ON cu_private_event (cupe_ip_hex, cupe_timestamp); 22 | 23 | CREATE INDEX cupe_xff_hex_time ON cu_private_event (cupe_xff_hex, cupe_timestamp); 24 | 25 | CREATE INDEX cupe_timestamp ON cu_private_event (cupe_timestamp); 26 | 27 | CREATE INDEX cupe_actor_ip_time ON cu_private_event ( 28 | cupe_actor, cupe_ip, cupe_timestamp 29 | ); 30 | -------------------------------------------------------------------------------- /schema/postgres/patch-cu_private_event-modify-cupe_actor-nullable.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_private_event-modify-cupe_actor-nullable.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_private_event 6 | ALTER cupe_actor 7 | DROP NOT NULL; 8 | -------------------------------------------------------------------------------- /schema/sqlite/cu_useragent.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cu_useragent.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cu_useragent ( 6 | cuua_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 7 | cuua_text BLOB NOT NULL 8 | ); 9 | 10 | CREATE INDEX cuua_text ON /*_*/cu_useragent (cuua_text); 11 | -------------------------------------------------------------------------------- /schema/sqlite/cu_useragent_clienthints.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cu_useragent_clienthints.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cu_useragent_clienthints ( 6 | uach_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 7 | uach_name VARCHAR(32) NOT NULL, 8 | uach_value VARCHAR(255) NOT NULL 9 | ); 10 | 11 | CREATE UNIQUE INDEX uach_name_value ON /*_*/cu_useragent_clienthints (uach_name, uach_value); 12 | -------------------------------------------------------------------------------- /schema/sqlite/cu_useragent_clienthints_map.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cu_useragent_clienthints_map.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cu_useragent_clienthints_map ( 6 | uachm_uach_id INTEGER UNSIGNED NOT NULL, 7 | uachm_reference_id INTEGER UNSIGNED NOT NULL, 8 | uachm_reference_type SMALLINT DEFAULT 0 NOT NULL, 9 | PRIMARY KEY( 10 | uachm_uach_id, uachm_reference_type, 11 | uachm_reference_id 12 | ) 13 | ); 14 | 15 | CREATE INDEX uachm_reference_id ON /*_*/cu_useragent_clienthints_map (uachm_reference_id); 16 | -------------------------------------------------------------------------------- /schema/sqlite/cuci_temp_edit.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cuci_temp_edit.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cuci_temp_edit ( 6 | cite_ip_hex BLOB NOT NULL, 7 | cite_ciwm_id SMALLINT UNSIGNED NOT NULL, 8 | cite_timestamp BLOB NOT NULL, 9 | PRIMARY KEY(cite_ip_hex, cite_ciwm_id) 10 | ); 11 | 12 | CREATE INDEX cite_timestamp ON /*_*/cuci_temp_edit (cite_timestamp); 13 | 14 | CREATE INDEX cite_ip_hex_timestamp ON /*_*/cuci_temp_edit (cite_ip_hex, cite_timestamp); 15 | -------------------------------------------------------------------------------- /schema/sqlite/cuci_user.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cuci_user.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cuci_user ( 6 | ciu_central_id INTEGER UNSIGNED NOT NULL, 7 | ciu_ciwm_id SMALLINT UNSIGNED NOT NULL, 8 | ciu_timestamp BLOB NOT NULL, 9 | PRIMARY KEY(ciu_central_id, ciu_ciwm_id) 10 | ); 11 | 12 | CREATE INDEX ciu_timestamp ON /*_*/cuci_user (ciu_timestamp); 13 | 14 | CREATE INDEX ciu_central_id_timestamp ON /*_*/cuci_user (ciu_central_id, ciu_timestamp); 15 | -------------------------------------------------------------------------------- /schema/sqlite/cuci_wiki_map.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaSql.php. 2 | -- Source: schema/cuci_wiki_map.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | CREATE TABLE /*_*/cuci_wiki_map ( 6 | ciwm_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 7 | ciwm_wiki BLOB NOT NULL 8 | ); 9 | 10 | CREATE UNIQUE INDEX ciwm_wiki ON /*_*/cuci_wiki_map (ciwm_wiki); 11 | -------------------------------------------------------------------------------- /schema/sqlite/patch-cu_changes-actor-comment.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_changes 2 | ADD COLUMN cuc_actor bigint unsigned NOT NULL DEFAULT 0; 3 | ALTER TABLE /*_*/cu_changes 4 | ADD COLUMN cuc_comment_id bigint unsigned NOT NULL DEFAULT 0; 5 | CREATE INDEX /*i*/cuc_actor_ip_time ON /*_*/cu_changes (cuc_actor, cuc_ip, cuc_timestamp); -------------------------------------------------------------------------------- /schema/sqlite/patch-cu_changes-add-cuc_agent_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-add-cuc_agent_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_changes 6 | ADD COLUMN cuc_agent_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/sqlite/patch-cu_changes-add-cuc_only_for_read_old.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_changes-add-cuc_only_for_read_old.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_changes 6 | ADD COLUMN cuc_only_for_read_old SMALLINT DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/sqlite/patch-cu_log-add-cul_result_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-add-cul_result_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log 6 | ADD COLUMN cul_result_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 7 | ALTER TABLE /*_*/cu_log 8 | ADD COLUMN cul_result_plaintext_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 9 | -------------------------------------------------------------------------------- /schema/sqlite/patch-cu_log-comment_table_for_reason.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-comment_table_for_reason.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log 6 | ADD COLUMN cul_reason_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 7 | ALTER TABLE /*_*/cu_log 8 | ADD COLUMN cul_reason_plaintext_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 9 | -------------------------------------------------------------------------------- /schema/sqlite/patch-cu_log_event-add-cule_agent_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log_event-add-cule_agent_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log_event 6 | ADD COLUMN cule_agent_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/sqlite/patch-cu_log_event-def.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE /*_*/cu_log_event ( 2 | cule_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 3 | cule_log_id INTEGER UNSIGNED DEFAULT 0 NOT NULL, 4 | cule_actor BIGINT UNSIGNED NOT NULL, 5 | cule_timestamp BLOB NOT NULL, 6 | cule_ip VARCHAR(255) DEFAULT '', 7 | cule_ip_hex VARCHAR(255) DEFAULT NULL, 8 | cule_xff BLOB DEFAULT '', 9 | cule_xff_hex VARCHAR(255) DEFAULT NULL, 10 | cule_agent BLOB DEFAULT NULL 11 | ); 12 | 13 | CREATE INDEX cule_ip_hex_time ON /*_*/cu_log_event (cule_ip_hex, cule_timestamp); 14 | 15 | CREATE INDEX cule_xff_hex_time ON /*_*/cu_log_event (cule_xff_hex, cule_timestamp); 16 | 17 | CREATE INDEX cule_timestamp ON /*_*/cu_log_event (cule_timestamp); 18 | 19 | CREATE INDEX cule_actor_ip_time ON /*_*/cu_log_event ( 20 | cule_actor, cule_ip, cule_timestamp 21 | ); 22 | -------------------------------------------------------------------------------- /schema/sqlite/patch-cu_private_event-add-cupe_agent_id.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_private_event-add-cupe_agent_id.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_private_event 6 | ADD COLUMN cupe_agent_id BIGINT UNSIGNED DEFAULT 0 NOT NULL; 7 | -------------------------------------------------------------------------------- /schema/sqlite/patch-cu_private_event-def.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE /*_*/cu_private_event ( 2 | cupe_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 3 | cupe_namespace INTEGER DEFAULT 0 NOT NULL, 4 | cupe_title BLOB DEFAULT '' NOT NULL, 5 | cupe_actor BIGINT UNSIGNED DEFAULT 0 NOT NULL, 6 | cupe_log_type BLOB DEFAULT '' NOT NULL, 7 | cupe_log_action BLOB DEFAULT '' NOT NULL, 8 | cupe_params BLOB NOT NULL, 9 | cupe_comment_id BIGINT UNSIGNED DEFAULT 0 NOT NULL, 10 | cupe_page INTEGER UNSIGNED DEFAULT 0 NOT NULL, 11 | cupe_timestamp BLOB NOT NULL, 12 | cupe_ip VARCHAR(255) DEFAULT '', 13 | cupe_ip_hex VARCHAR(255) DEFAULT NULL, 14 | cupe_xff BLOB DEFAULT '', 15 | cupe_xff_hex VARCHAR(255) DEFAULT NULL, 16 | cupe_agent BLOB DEFAULT NULL, 17 | cupe_private BLOB DEFAULT NULL 18 | ); 19 | 20 | CREATE INDEX cupe_ip_hex_time ON /*_*/cu_private_event (cupe_ip_hex, cupe_timestamp); 21 | 22 | CREATE INDEX cupe_xff_hex_time ON /*_*/cu_private_event (cupe_xff_hex, cupe_timestamp); 23 | 24 | CREATE INDEX cupe_timestamp ON /*_*/cu_private_event (cupe_timestamp); 25 | 26 | CREATE INDEX cupe_actor_ip_time ON /*_*/cu_private_event ( 27 | cupe_actor, cupe_ip, cupe_timestamp 28 | ); 29 | -------------------------------------------------------------------------------- /src/CheckUser/Widgets/CIDRCalculatorResultBox.php: -------------------------------------------------------------------------------- 1 | input->setAttributes( [ 'disabled' => 'disabled' ] ); 15 | } 16 | 17 | /** 18 | * Because this widget is always disabled 19 | * by definition this does nothing. 20 | * 21 | * @param bool $disabled unused 22 | * @return $this 23 | */ 24 | public function setDisabled( $disabled ) { 25 | // Ignore calls to setDisabled as it should always be disabled. 26 | return $this; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/CheckUserQueryInterface.php: -------------------------------------------------------------------------------- 1 | 'cuc_', 30 | self::LOG_EVENT_TABLE => 'cule_', 31 | self::PRIVATE_LOG_EVENT_TABLE => 'cupe_', 32 | ]; 33 | 34 | /** @var string The virtual database domain for the central index tables */ 35 | public const VIRTUAL_GLOBAL_DB_DOMAIN = 'virtual-checkuser-global'; 36 | } 37 | -------------------------------------------------------------------------------- /src/Hook/CheckUserFormatRowHook.php: -------------------------------------------------------------------------------- 1 | globalContributionsLookup = $globalContributionsLookup; 17 | } 18 | 19 | /** 20 | * @inheritDoc 21 | */ 22 | public function onIPInfoHandlerRun( 23 | string $target, 24 | Authority $performer, 25 | string $dataContext, 26 | array &$dataContainer 27 | ): void { 28 | if ( $dataContext !== 'infobox' ) { 29 | return; 30 | } 31 | try { 32 | $globalContributionsCount = $this->globalContributionsLookup->getGlobalContributionsCount( 33 | $target, 34 | $performer 35 | ); 36 | $dataContainer['ipinfo-source-checkuser'] = [ 37 | 'globalContributionsCount' => $globalContributionsCount 38 | ]; 39 | } catch ( LogicException $e ) { 40 | // Do nothing if the count could not be found and passed through 41 | return; 42 | } 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/HookHandler/RenameUserSQLHandler.php: -------------------------------------------------------------------------------- 1 | tables['cu_log'] = [ 'cul_target_text', 'cul_target_id' ]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/HookHandler/UserMergeHandler.php: -------------------------------------------------------------------------------- 1 | 'cuc_id', 13 | 'actorId' => 'cuc_actor', 14 | 'actorStage' => SCHEMA_COMPAT_NEW 15 | ]; 16 | $updateFields[] = [ 17 | 'cu_log_event', 18 | 'batch_key' => 'cule_id', 19 | 'actorId' => 'cule_actor', 20 | 'actorStage' => SCHEMA_COMPAT_NEW 21 | ]; 22 | $updateFields[] = [ 23 | 'cu_private_event', 24 | 'batch_key' => 'cupe_id', 25 | 'actorId' => 'cupe_actor', 26 | 'actorStage' => SCHEMA_COMPAT_NEW 27 | ]; 28 | $updateFields[] = [ 29 | 'cu_log', 30 | 'batch_key' => 'cul_id', 31 | 'actorId' => 'cul_actor', 32 | 'actorStage' => SCHEMA_COMPAT_NEW 33 | ]; 34 | $updateFields[] = [ 'cu_log', 'cul_target_id' ]; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Hooks.php: -------------------------------------------------------------------------------- 1 | get( 'CheckUserInsert' ); 25 | $checkUserInsert->updateCheckUserData( $rc ); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Investigate/Pagers/PagerFactory.php: -------------------------------------------------------------------------------- 1 | extensionRegistry = $extensionRegistry; 15 | } 16 | 17 | /** 18 | * If the EventLogging extension is loaded, then submit an analytics event to the event 19 | * ingestion service. 20 | * 21 | * The event will be validated using the /analytics/legacy/specialinvestigate schema. 22 | * 23 | * @param array $event 24 | */ 25 | public function logEvent( $event ): void { 26 | if ( $this->extensionRegistry->isLoaded( 'EventLogging' ) ) { 27 | EventLogging::submit( 28 | 'eventlogging_SpecialInvestigate', 29 | [ 30 | '$schema' => '/analytics/legacy/specialinvestigate/1.0.0', 31 | 'event' => $event, 32 | ] 33 | ); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Logging/TemporaryAccountLoggerFactory.php: -------------------------------------------------------------------------------- 1 | actorStore = $actorStore; 31 | $this->logger = $logger; 32 | $this->dbProvider = $dbProvider; 33 | $this->titleFactory = $titleFactory; 34 | } 35 | 36 | /** 37 | * @param int $delay 38 | * @return TemporaryAccountLogger 39 | */ 40 | public function getLogger( 41 | int $delay = self::DEFAULT_DEBOUNCE_DELAY 42 | ) { 43 | return new TemporaryAccountLogger( 44 | $this->actorStore, 45 | $this->logger, 46 | $this->dbProvider, 47 | $this->titleFactory, 48 | $delay 49 | ); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/ToolLinksMessages.php: -------------------------------------------------------------------------------- 1 | $context->msg( $messageKey )->parse() ]; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /templates/GetActionsLine.mustache: -------------------------------------------------------------------------------- 1 |
  • 2 | {{#showLinks}} 3 | {{{links}}} 4 | 5 | {{/showLinks}} 6 | {{timestamp}} 7 | 8 | 9 | {{{userLink}}} 10 | 11 | {{{userToolLinks}}} 12 | {{#flags}} 13 | {{{ . }}} 14 | {{/flags}} 15 | {{{actionText}}} 16 | {{{comment}}} 17 |
    18 | IP: {{{ipLink}}}{{#xff}}   19 | XFF: {{{ . }}}{{/xff}} 20 |   {{userAgent}} 21 | {{#clientHints}} 22 |
    {{ . }} 23 | {{/clientHints}} 24 |
    25 |
  • 26 | -------------------------------------------------------------------------------- /templates/GetIPsLine.mustache: -------------------------------------------------------------------------------- 1 |
  • 2 | {{{ipLink}}} 3 | {{#ip64Link}} 4 | {{{ip64Link}}} 5 | {{/ip64Link}} 6 | {{{blockLink}}} 7 | {{timeRange}} 8 | {{editCount}} 9 | {{#showIpCounts}} 10 | {{#ipEditCount}}{{ipEditCount}}{{/ipEditCount}}{{#ip64EditCount}}{{ip64EditCount}}{{/ip64EditCount}} 13 | {{/showIpCounts}} 14 | {{{blockInfo}}} 15 |
    {{{toolLinks}}}
    16 |
  • 17 | -------------------------------------------------------------------------------- /templates/SpecialGlobalContributionsLine.mustache: -------------------------------------------------------------------------------- 1 | {{{ del }}}{{{ timestamp }}} 2 | {{{ diffHistLinks }}}{{{ charDifference }}}{{{ sourceWiki }}}{{# flags }}{{{ . }}}{{/ flags }} 3 | {{{ articleLink }}}{{{ userlink }}} 4 | {{{ logText }}} 5 | {{{ topmarktext }}}{{# rev-deleted-user-contribs }} {{{ . }}}{{/ rev-deleted-user-contribs }} 6 | {{{ tagSummary }}} 7 | -------------------------------------------------------------------------------- /tests/jest/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "wikimedia/common", 5 | "wikimedia/vue/common", 6 | "wikimedia/jquery", 7 | "wikimedia/mediawiki", 8 | "wikimedia/language/es2022" 9 | ], 10 | "env": { 11 | "jest": true, 12 | "node": true 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tests/phpunit/CheckUserServiceWiringTest.php: -------------------------------------------------------------------------------- 1 | markTestSkippedIfExtensionNotLoaded( 'GlobalPreferences' ); 21 | } 22 | 23 | // CheckUserUserInfoCardService has dependencies provided by the GrowthExperiments extension. 24 | if ( $name === 'CheckUserUserInfoCardService' ) { 25 | $this->markTestSkippedIfExtensionNotLoaded( 'GrowthExperiments' ); 26 | } 27 | 28 | $this->getServiceContainer()->get( $name ); 29 | $this->addToAssertionCount( 1 ); 30 | } 31 | 32 | public static function provideService() { 33 | $wiring = require __DIR__ . '/../../src/ServiceWiring.php'; 34 | foreach ( $wiring as $name => $_ ) { 35 | yield $name => [ $name ]; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /tests/phpunit/integration/CheckUser/Pagers/Mocks/MockTemplateParser.php: -------------------------------------------------------------------------------- 1 | lastCalledWith = [ $templateName, $args, $scopes ]; 27 | return ''; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tests/phpunit/integration/CheckUserExtensionJsonTest.php: -------------------------------------------------------------------------------- 1 | 'Abuse Filter', 20 | 'CentralAuthHandler' => 'CentralAuth', 21 | 'GlobalPreferencesHandler' => 'GlobalPreferences', 22 | 'GlobalBlockingHandler' => 'GlobalBlocking', 23 | 'UserMerge' => 'UserMerge', 24 | ]; 25 | foreach ( self::getExtensionJson()['HookHandlers'] ?? [] as $name => $specification ) { 26 | if ( 27 | array_key_exists( $name, $extHookHandlers ) && 28 | !ExtensionRegistry::getInstance()->isLoaded( $extHookHandlers[$name] ) 29 | ) { 30 | continue; 31 | } 32 | yield [ $name ]; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /tests/phpunit/integration/CheckUserSchemaTest.php: -------------------------------------------------------------------------------- 1 | __DIR__ . '/../../../schema/mysql', 24 | 'sqlite' => __DIR__ . '/../../../schema/sqlite', 25 | 'postgres' => __DIR__ . '/../../../schema/postgres', 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tests/phpunit/integration/CheckUserTempUserTestTrait.php: -------------------------------------------------------------------------------- 1 | parentEnableAutoCreateTempUser( 18 | array_merge( 19 | [ 'genPattern' => '~check-user-test-$1' ], 20 | $configOverrides 21 | ) 22 | ); 23 | } 24 | 25 | public function disableAutoCreateTempUser( array $configOverrides = [] ): void { 26 | $this->parentDisableAutoCreateTempUser( 27 | array_merge( 28 | [ 'known' => true, 'matchPattern' => '~check-user-test-$1' ], 29 | $configOverrides 30 | ) 31 | ); 32 | } 33 | 34 | /** 35 | * Defined to ensure that the class has the overrideConfigValue method that we can use. 36 | * 37 | * @see \MediaWikiIntegrationTestCase::overrideConfigValue 38 | * 39 | * @param string $key 40 | * @param mixed $value 41 | */ 42 | abstract protected function overrideConfigValue( string $key, $value ); 43 | 44 | } 45 | -------------------------------------------------------------------------------- /tests/phpunit/integration/GlobalContributions/GlobalContributionsPagerFactoryTest.php: -------------------------------------------------------------------------------- 1 | markTestSkippedIfExtensionNotLoaded( 'GlobalPreferences' ); 20 | } 21 | 22 | public function testCreatePager() { 23 | // Tests that the factory creates a GlobalContributionsPager instance and does not throw an exception. 24 | $this->assertInstanceOf( 25 | GlobalContributionsPager::class, 26 | $this->getServiceContainer()->get( 'CheckUserGlobalContributionsPagerFactory' ) 27 | ->createPager( 28 | RequestContext::getMain(), 29 | [], 30 | new UserIdentityValue( 0, '127.0.0.1' ) 31 | ), 32 | 'CheckUserGlobalContributionsPagerFactory::createPager should create a GlobalContributionsPager instance' 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /tests/phpunit/integration/HookHandler/UserMergeHandlerTest.php: -------------------------------------------------------------------------------- 1 | markTestSkippedIfExtensionNotLoaded( 'UserMerge' ); 19 | } 20 | 21 | public function testOnUserMergeAccountFields() { 22 | // @todo Test that the array items of $updateFields are as expected? 23 | $updateFields = []; 24 | $expectedCount = 5; 25 | $objectUnderTest = new UserMergeHandler(); 26 | $objectUnderTest->onUserMergeAccountFields( $updateFields ); 27 | $this->assertCount( 28 | $expectedCount, 29 | $updateFields, 30 | 'The expected number of updates were not added to $updateFields by ::onUserMergeAccountFields.' 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /tests/phpunit/integration/Investigate/Pagers/ComparePagerFactoryTest.php: -------------------------------------------------------------------------------- 1 | newServiceInstance( ComparePagerFactory::class, [] ); 23 | $pager = $factory->createPager( RequestContext::getMain() ); 24 | 25 | $this->assertInstanceOf( ComparePager::class, $pager ); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /tests/phpunit/integration/Investigate/Pagers/PreliminaryCheckPagerFactoryTest.php: -------------------------------------------------------------------------------- 1 | newServiceInstance( PreliminaryCheckPagerFactory::class, [] ); 22 | $pager = $factory->createPager( RequestContext::getMain() ); 23 | 24 | $this->assertInstanceOf( PreliminaryCheckPager::class, $pager ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tests/phpunit/integration/Investigate/Pagers/TimelinePagerFactoryTest.php: -------------------------------------------------------------------------------- 1 | newServiceInstance( TimelinePagerFactory::class, [ 22 | 'rowFormatterFactory' => $this->getServiceContainer()->get( 'CheckUserTimelineRowFormatterFactory' ), 23 | ] ); 24 | $pager = $factory->createPager( RequestContext::getMain() ); 25 | 26 | $this->assertInstanceOf( TimelinePager::class, $pager ); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tests/phpunit/integration/Investigate/Pagers/TimelineRowFormatterFactoryTest.php: -------------------------------------------------------------------------------- 1 | newServiceInstance( TimelineRowFormatterFactory::class, [] ); 22 | $formatter = $factory->createRowFormatter( 23 | $this->createMock( User::class ), 24 | $this->getServiceContainer()->getLanguageFactory()->getLanguage( 'en' ) 25 | ); 26 | 27 | $this->assertInstanceOf( TimelineRowFormatter::class, $formatter ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tests/phpunit/integration/Jobs/LogTemporaryAccountAccessJobTest.php: -------------------------------------------------------------------------------- 1 | 'Template:InvalidUser#test', 17 | 'target' => 'test', 'timestamp' => 0, 'type' => 'view-ips', 18 | ] ); 19 | $this->assertFalse( $job->run() ); 20 | $this->assertSame( 'Invalid performer', $job->getLastError() ); 21 | } 22 | 23 | public function testRunOnInvalidType() { 24 | $job = new LogTemporaryAccountAccessJob( 'unused', [ 25 | 'performer' => $this->getTestUser()->getUserIdentity()->getName(), 26 | 'type' => 'invalidtype', 'target' => 'test', 'timestamp' => 0, 27 | ] ); 28 | $this->assertFalse( $job->run() ); 29 | $this->assertSame( "Invalid type 'invalidtype'", $job->getLastError() ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/mysql/patch-cu_changes-add-cuc_actiontext.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_changes 2 | ADD cuc_actiontext VARBINARY(255) DEFAULT '' NOT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/mysql/patch-cu_changes-add-cuc_only_for_read_old.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_changes 2 | ADD cuc_only_for_read_old TINYINT(1) DEFAULT 0 NOT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/mysql/patch-cu_changes-add-cuc_private.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_changes 2 | ADD cuc_private MEDIUMBLOB DEFAULT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/mysql/patch-cu_log-add-cul_reason.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_log 2 | ADD cul_reason VARBINARY(255) DEFAULT '' NOT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/mysql/patch-cu_log-add-cul_user.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-add-cul_user.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log 6 | ADD cul_user INT UNSIGNED NOT NULL; 7 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/postgres/patch-cu_changes-add-cuc_actiontext.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_changes 2 | ADD cuc_actiontext TEXT DEFAULT '' NOT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/postgres/patch-cu_changes-add-cuc_only_for_read_old.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_changes 2 | ADD cuc_only_for_read_old SMALLINT DEFAULT 0 NOT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/postgres/patch-cu_changes-add-cuc_private.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_changes 2 | ADD cuc_private TEXT DEFAULT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/postgres/patch-cu_log-add-cul_reason.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_log 2 | ADD cul_reason TEXT DEFAULT '' NOT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/postgres/patch-cu_log-add-cul_user.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-add-cul_user.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE cu_log 6 | ADD cul_user INT NOT NULL; 7 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/sqlite/patch-cu_changes-add-cuc_actiontext.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_changes 2 | ADD COLUMN cuc_actiontext BLOB DEFAULT '' NOT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/sqlite/patch-cu_changes-add-cuc_only_for_read_old.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_changes 2 | ADD COLUMN cuc_only_for_read_old SMALLINT DEFAULT 0 NOT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/sqlite/patch-cu_changes-add-cuc_private.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_changes 2 | ADD COLUMN cuc_private BLOB DEFAULT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/sqlite/patch-cu_log-add-cul_reason.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE /*_*/cu_log 2 | ADD cul_reason BLOB DEFAULT '' NOT NULL; 3 | -------------------------------------------------------------------------------- /tests/phpunit/integration/maintenance/patches/sqlite/patch-cu_log-add-cul_user.sql: -------------------------------------------------------------------------------- 1 | -- This file is automatically generated using maintenance/generateSchemaChangeSql.php. 2 | -- Source: schema/abstractSchemaChanges/patch-cu_log-add-cul_user.json 3 | -- Do not modify this file directly. 4 | -- See https://www.mediawiki.org/wiki/Manual:Schema_changes 5 | ALTER TABLE /*_*/cu_log 6 | ADD COLUMN cul_user INTEGER UNSIGNED NOT NULL; 7 | -------------------------------------------------------------------------------- /tests/phpunit/structure/BundleSizeTest.php: -------------------------------------------------------------------------------- 1 | getMockBuilder( RenameuserSQL::class ) 17 | ->disableOriginalConstructor() 18 | ->getMock(); 19 | $mockRenameUserSqlObject->tables = []; 20 | ( new RenameUserSQLHandler() )->onRenameUserSQL( $mockRenameUserSqlObject ); 21 | $this->assertArrayEquals( 22 | [ 'cu_log' => [ 'cul_target_text', 'cul_target_id' ] ], 23 | $mockRenameUserSqlObject->tables, 24 | true, 25 | true, 26 | 'RenameUserSQL hook handler did not add the correct tables and fields.' 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tests/phpunit/unit/HookRunnerTest.php: -------------------------------------------------------------------------------- 1 | [ HookRunner::class ]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tests/phpunit/unit/Jobs/LogTemporaryAccountAccessJobTest.php: -------------------------------------------------------------------------------- 1 | assertSame( LogTemporaryAccountAccessJob::TYPE, $spec->getType() ); 26 | $this->assertSame( $performer->getName(), $spec->getParams()['performer'] ); 27 | $this->assertSame( $type, $spec->getParams()['type'] ); 28 | $this->assertSame( 1704067200, $spec->getParams()['timestamp'] ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tests/phpunit/unit/Jobs/StoreClientHintsDataJobTest.php: -------------------------------------------------------------------------------- 1 | getExampleClientHintsDataObjectFromJsApi(); 20 | 21 | $spec = StoreClientHintsDataJob::newSpec( $clientHintsData, 1234, 'privatelog' ); 22 | 23 | $this->assertSame( StoreClientHintsDataJob::TYPE, $spec->getType() ); 24 | $this->assertClientHintsDataObjectsEqual( 25 | $clientHintsData, 26 | ClientHintsData::newFromSerialisedJsonArray( $spec->getParams()['clientHintsData'] ) 27 | ); 28 | $this->assertSame( 1234, $spec->getParams()['referenceId'] ); 29 | $this->assertSame( 'privatelog', $spec->getParams()['referenceType'] ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /tests/phpunit/unit/Services/CheckUserDataPurgerTest.php: -------------------------------------------------------------------------------- 1 | assertSame( 'enwiki:PruneCheckUserData', CheckUserDataPurger::getPurgeLockKey( 'enwiki' ) ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tests/phpunit/unit/ToolLinksMessagesTest.php: -------------------------------------------------------------------------------- 1 | createMock( Message::class ); 20 | $msg->method( 'parse' )->willReturn( 'Parsed result' ); 21 | 22 | $context = $this->createMock( Context::class ); 23 | $context->method( 'msg' ) 24 | ->with( 'message key' ) 25 | ->willReturn( $msg ); 26 | 27 | $res = ToolLinksMessages::getParsedMessage( 28 | $context, 29 | new HashConfig( [] ), 30 | 'message key' 31 | ); 32 | $this->assertEquals( 33 | [ 'message key' => 'Parsed result' ], 34 | $res 35 | ); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /tests/phpunit/unit/maintenance/GenerateStatsAboutClientHintsDataTest.php: -------------------------------------------------------------------------------- 1 | getMockBuilder( GenerateStatsAboutClientHintsData::class ) 17 | ->onlyMethods( [ 'generateCounts', 'output' ] ) 18 | ->getMock(); 19 | $objectUnderTest->expects( $this->once() ) 20 | ->method( 'generateCounts' ) 21 | ->with( WikiMap::getCurrentWikiDbDomain(), 30 ) 22 | ->willReturn( [ 'test' => 'value' ] ); 23 | $objectUnderTest->expects( $this->once() ) 24 | ->method( 'output' ) 25 | ->with( "{\"test\":\"value\"}\n" ); 26 | $objectUnderTest->setOption( 'averages-accuracy', 30 ); 27 | $objectUnderTest->execute(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tests/qunit/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "wikimedia/client/common", 5 | "wikimedia/language/es2020", 6 | "wikimedia/jquery", 7 | "wikimedia/mediawiki", 8 | "wikimedia/qunit" 9 | ], 10 | "globals": { 11 | "sinon": "readonly" 12 | }, 13 | "env": { 14 | "browser": true 15 | }, 16 | "rules": { 17 | "compat/compat": "off" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tests/qunit/ext.checkUser.clientHints/index.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | QUnit.module( 'ext.checkUser.clientHints', QUnit.newMwEnvironment( {} ) ); 4 | 5 | QUnit.test( 'Client hints code is setup if navigator.userAgentData.getHighEntropyValues() is available', function ( assert ) { 6 | const clientHints = require( 'ext.checkUser.clientHints/index.js' ); 7 | const responseMock = { 8 | platform: 'macOS' 9 | }; 10 | const navigatorData = { 11 | userAgentData: { 12 | getHighEntropyValues: this.sandbox.stub().returns( 13 | $.Deferred().resolve( responseMock ) 14 | ) 15 | } 16 | }; 17 | assert.true( clientHints.init( navigatorData ) ); 18 | } ); 19 | 20 | QUnit.test( 'Client hints code is not setup if navigator.userAgentData is available but navigator.userAgentData.getHighEntropyValues() is not available', ( assert ) => { 21 | const clientHints = require( 'ext.checkUser.clientHints/index.js' ); 22 | const navigatorData = { userAgentData: {} }; 23 | assert.false( clientHints.init( navigatorData ) ); 24 | } ); 25 | QUnit.test( 'Client hints code is not setup if navigator.userAgentData is not defined', ( assert ) => { 26 | const clientHints = require( 'ext.checkUser.clientHints/index.js' ); 27 | const navigatorData = {}; 28 | assert.false( clientHints.init( navigatorData ) ); 29 | } ); 30 | -------------------------------------------------------------------------------- /tests/qunit/ext.checkUser/checkuser/checkUserHelper/buildUserElement.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const buildUserElement = require( 'ext.checkUser/checkuser/checkUserHelper/buildUserElement.js' ); 4 | 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.buildUserElement', QUnit.newMwEnvironment( { 6 | beforeEach: function () { 7 | mw.config.set( { 8 | wgArticlePath: '/wiki/$1' 9 | } ); 10 | } 11 | } ) ); 12 | 13 | QUnit.test( 'buildUserElement formats usernames as expected', ( assert ) => { 14 | const cases = require( './cases/buildUserElement.json' ); 15 | 16 | cases.forEach( ( caseItem ) => { 17 | const element = buildUserElement( 18 | caseItem.userName, 19 | caseItem.userData 20 | ); 21 | 22 | assert.strictEqual( element.outerHTML, caseItem.expected, caseItem.msg ); 23 | } ); 24 | } ); 25 | -------------------------------------------------------------------------------- /tests/qunit/ext.checkUser/checkuser/checkUserHelper/cases/calculateIPNumber.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "IP": "127.0.0.1", 4 | "expectedIPNumber": 127000000001, 5 | "msg": "Example IPv4 address" 6 | }, 7 | { 8 | "IP": "124.5.6.7", 9 | "expectedIPNumber": 124005006007, 10 | "msg": "Second example IPv4 address" 11 | }, 12 | { 13 | "IP": "0.0.0.0", 14 | "expectedIPNumber": 0, 15 | "msg": "IPv4 address with all zeros" 16 | }, 17 | { 18 | "IP": "2001:0db8:85a3:0000:0000:8a2e:0370:7334", 19 | "expectedIPNumber": 4.254076645264115e+37, 20 | "msg": "Example IPv6 address" 21 | }, 22 | { 23 | "IP": "::a", 24 | "expectedIPNumber": 10, 25 | "msg": "Second example IPv6 address" 26 | }, 27 | { 28 | "IP": "::", 29 | "expectedIPNumber": 0, 30 | "msg": "IPv6 address with all zeros" 31 | } 32 | ] 33 | -------------------------------------------------------------------------------- /tests/qunit/ext.checkUser/checkuser/checkUserHelper/createTableText.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const createTableText = require( 'ext.checkUser/checkuser/checkUserHelper/createTableText.js' ); 4 | 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.createTableText' ); 6 | 7 | QUnit.test( 'Test that createTableText returns the expected wikitext', ( assert ) => { 8 | const cases = require( './cases/createTableText.json' ); 9 | 10 | cases.forEach( ( caseItem ) => { 11 | mw.config.set( 'wgCheckUserDisplayClientHints', false ); 12 | assert.strictEqual( 13 | createTableText( caseItem.data, caseItem.showCounts ), 14 | caseItem.expectedWikitext, 15 | caseItem.msg 16 | ); 17 | 18 | mw.config.set( 'wgCheckUserDisplayClientHints', true ); 19 | assert.strictEqual( 20 | createTableText( caseItem.data, caseItem.showCounts ), 21 | caseItem.expectedWikitextWhenClientHintsEnabled, 22 | caseItem.msg + ' with Client Hints display enabled.' 23 | ); 24 | } ); 25 | } ); 26 | -------------------------------------------------------------------------------- /tests/qunit/ext.checkUser/checkuser/checkUserHelper/utils.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const Utils = require( 'ext.checkUser/checkuser/checkUserHelper/utils.js' ); 4 | 5 | QUnit.module( 'ext.checkUser.checkuser.checkUserHelper.utils' ); 6 | 7 | QUnit.test( 'Test that calculateIPNumber returns the expected value', ( assert ) => { 8 | const cases = require( './cases/calculateIPNumber.json' ); 9 | 10 | cases.forEach( ( caseItem ) => { 11 | assert.strictEqual( 12 | Utils.calculateIPNumber( caseItem.IP ), 13 | caseItem.expectedIPNumber, 14 | caseItem.msg 15 | ); 16 | } ); 17 | } ); 18 | 19 | QUnit.test( 'Test that compareIPs returns the expected value', ( assert ) => { 20 | const cases = require( './cases/compareIPs.json' ); 21 | 22 | cases.forEach( ( caseItem ) => { 23 | assert.strictEqual( 24 | Utils.compareIPs( caseItem.IP1, caseItem.IP2 ), 25 | caseItem.expectedReturnValue, 26 | caseItem.msg 27 | ); 28 | } ); 29 | } ); 30 | -------------------------------------------------------------------------------- /tests/qunit/ext.checkUser/investigate/cases/blockFormWidgetVisibility.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "cssClass": ".ext-checkuser-investigate-subtitle-continue-button", 4 | "visibleOnLoad": false, 5 | "visibleAfterBlockClick": true, 6 | "visibleAfterCancelClick": false, 7 | "msg": "The continue button" 8 | }, 9 | { 10 | "cssClass": ".ext-checkuser-investigate-subtitle-cancel-button", 11 | "visibleOnLoad": false, 12 | "visibleAfterBlockClick": true, 13 | "visibleAfterCancelClick": false, 14 | "msg": "The cancel button" 15 | }, 16 | { 17 | "cssClass": ".ext-checkuser-investigate-subtitle-targets-widget", 18 | "visibleOnLoad": false, 19 | "visibleAfterBlockClick": true, 20 | "visibleAfterCancelClick": false, 21 | "msg": "The targets widget" 22 | }, 23 | { 24 | "cssClass": ".ext-checkuser-investigate-subtitle-block-accounts-button", 25 | "visibleOnLoad": true, 26 | "visibleAfterBlockClick": false, 27 | "visibleAfterCancelClick": true, 28 | "msg": "The Block accounts button" 29 | }, 30 | { 31 | "cssClass": ".ext-checkuser-investigate-subtitle-block-ips-button", 32 | "visibleOnLoad": true, 33 | "visibleAfterBlockClick": false, 34 | "visibleAfterCancelClick": true, 35 | "msg": "The Block IPs button" 36 | } 37 | ] 38 | -------------------------------------------------------------------------------- /tests/qunit/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | QUnit.dump.maxDepth = 999; 4 | 5 | // List all test files here. 6 | require( './ext.checkUser/checkuser/getUsersBlockForm.test.js' ); 7 | require( './ext.checkUser/checkuser/checkUserHelper/utils.test.js' ); 8 | require( './ext.checkUser/checkuser/checkUserHelper/buildUserElement.test.js' ); 9 | require( './ext.checkUser/checkuser/checkUserHelper/createTableText.test.js' ); 10 | require( './ext.checkUser/checkuser/checkUserHelper/createTable.test.js' ); 11 | require( './ext.checkUser/checkuser/checkUserHelper/generateData.test.js' ); 12 | require( './ext.checkUser.clientHints/index.test.js' ); 13 | require( './ext.checkUser.ipInfo.hooks/ext.ipinfo.infobox.widget.test.js' ); 14 | require( './ext.checkUser/investigate/blockform.test.js' ); 15 | require( './ext.checkUser.tempAccounts/ipRevealUtils.test.js' ); 16 | require( './ext.checkUser.tempAccounts/ipReveal.test.js' ); 17 | require( './ext.checkUser.tempAccounts/initOnLoad.test.js' ); 18 | require( './ext.checkUser.tempAccounts/initOnHook.test.js' ); 19 | require( './ext.checkUser.tempAccounts/rest.test.js' ); 20 | require( './ext.checkUser.tempAccounts/SpecialBlock.test.js' ); 21 | require( './ext.checkUser.tempAccounts/SpecialContributions.test.js' ); 22 | require( './ext.checkUser.tempAccounts/BlockDetailsPopupButtonWidget.test.js' ); 23 | -------------------------------------------------------------------------------- /tests/selenium/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "wikimedia/selenium" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /tests/selenium/README.md: -------------------------------------------------------------------------------- 1 | # Selenium tests 2 | 3 | For more information see https://www.mediawiki.org/wiki/Selenium 4 | 5 | ## Setup 6 | 7 | See https://www.mediawiki.org/wiki/MediaWiki-Docker/Extension/CheckUser 8 | 9 | ## Run all specs 10 | 11 | npm run selenium-test 12 | 13 | ## Run specific tests 14 | 15 | Filter by file name: 16 | 17 | npm run selenium-test -- --spec tests/selenium/specs/[FILE-NAME] 18 | 19 | Filter by file name and test name: 20 | 21 | npm run selenium-test -- --spec tests/selenium/specs/[FILE-NAME] --mochaOpts.grep [TEST-NAME] 22 | -------------------------------------------------------------------------------- /tests/selenium/checkuserlogin.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const LoginPage = require( 'wdio-mediawiki/LoginPage' ); 4 | 5 | class LoginAsCheckUser { 6 | /** 7 | * Returns the password and username for the account that has the checkuser group. 8 | * 9 | * @return {{password: string, username: string}} 10 | */ 11 | getCheckUserAccountDetails() { 12 | return { username: 'SeleniumCheckUserAccount', password: 'SeleniumCheckUserPassword' }; 13 | } 14 | 15 | /** 16 | * Logs in to the account created for CheckUser by 17 | * this.createCheckUserAccount. 18 | * 19 | * @return {Promise} 20 | */ 21 | async loginAsCheckUser() { 22 | const checkUserAccountDetails = this.getCheckUserAccountDetails(); 23 | await LoginPage.login( checkUserAccountDetails.username, checkUserAccountDetails.password ); 24 | } 25 | } 26 | 27 | module.exports = new LoginAsCheckUser(); 28 | -------------------------------------------------------------------------------- /tests/selenium/fixtures/ExtraLocalSettings.php: -------------------------------------------------------------------------------- 1 | { 7 | describe( 'Without CheckUser user group', () => { 8 | it( 'Should display permission error to logged-out user', async () => { 9 | await InvestigatePage.open(); 10 | 11 | await expect( await InvestigatePage.hasPermissionErrors ).toExist(); 12 | } ); 13 | } ); 14 | describe( 'With CheckUser user group', () => { 15 | before( async () => { 16 | await LoginAsCheckUser.loginAsCheckUser(); 17 | await InvestigatePage.open(); 18 | } ); 19 | it( 'Should show targets input', async () => { 20 | await expect( await InvestigatePage.targetsInput ).toExist(); 21 | } ); 22 | it( 'Should show duration selector', async () => { 23 | await expect( await InvestigatePage.durationSelector ).toExist(); 24 | } ); 25 | it( 'Should show reason field', async () => { 26 | await expect( await InvestigatePage.reasonInput ).toExist(); 27 | } ); 28 | } ); 29 | } ); 30 | --------------------------------------------------------------------------------