├── .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 |
2 |
3 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
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 |
2 |
6 | {{ strongMessage }}
7 | {{ message }}
8 |
9 |
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 |
--------------------------------------------------------------------------------