2020-05-01 02:23:27 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace MediaWiki\HookContainer;
|
|
|
|
|
|
2020-12-01 17:53:48 +00:00
|
|
|
use Article;
|
2021-12-02 05:42:04 +00:00
|
|
|
use File;
|
2023-05-22 14:58:04 +00:00
|
|
|
use MailAddress;
|
2021-08-23 12:11:22 +00:00
|
|
|
use ManualLogEntry;
|
auth: Add AuthManagerVerifyAuthentication hook
Add a new hook that can be used to prevent authentication just
before AuthManager takes the main action (writing the session
for login, creating the local user account for account creation).
The driving use case is a wiki which supports both a local and
a central (wiki-farm-level) login or signup flow - various
security options (such as 2FA) are needed during local login
but unnecessary during central login (which will have those
security features centrally), so we need to skip much of the
security when the user is taking the central route, and a bug
in how that's done could result in circumvention of security
features during local login. The hook makes it easy to inspect
and potentially interrupt login near the end, when we know for
sure what route it took. (Specifically, we know which primary
provider was used. The hook doesn't expose other details,
such as the list of preauth or secondary provders that were
invoked, because they were not needed for the immediate use
case, but they are easy to add in the future.)
The hook is called after the secondary providers for login
and before them for account creation, since secondaries can
interrupt login but cannot interrupt account creation.
A shortcoming is that since the hook is called after a primary
provider succeeded, it cannot prevent the primary provider from
doing work, ie. it cannot prevent creation of the remote account
during account creation (although it will prevent the creation
of the local account). This is not great but acceptable, since
creating a new account isn't very security-sensitive.
This also means the hook would not be useful during account
linking, as AuthManager does not do anything there, all the work
happens in the primary provider. This is even less great but
few authentication extensions implement account linking.
The hook is not called for authentication happening via
CreatedAccountAuthenticationRequest, which is a weird internal
hack hook handlers should not have to know about.
Also rename a confusingly named variable.
Change-Id: I835b2fe2f43e6e81f23348165cbb9c93832e6583
2024-08-18 11:13:17 +00:00
|
|
|
use MediaWiki\Auth\AuthenticationResponse;
|
|
|
|
|
use MediaWiki\Auth\AuthManager;
|
2024-09-27 20:18:58 +00:00
|
|
|
use MediaWiki\Content\ContentHandler;
|
2024-05-20 15:00:43 +00:00
|
|
|
use MediaWiki\Content\JsonContent;
|
2024-02-08 14:56:54 +00:00
|
|
|
use MediaWiki\Context\IContextSource;
|
2020-10-04 15:25:40 +00:00
|
|
|
use MediaWiki\Linker\LinkRenderer;
|
parser: new BeforeParserFetchTemplateRevisionRecord hook
This new hook provides for the use case in T47096 (allowing the
Translate extension to transclude a page from another language) by
adding a new hook which would let us deprecate and replace two awkward
legacy hooks (one with an embarrassing capitalization issue). The new
hook is a little more tightly scoped in terms of what it allows and
gives access to, and it uses the new RevisionRecord API.
In addition, the new hook uses LinkTarget instead of Title per
current best practices. (PageIdentity is not appropriate for
reasons documented at the hook invocation site.)
The original BeforeParserFetchTemplateAndtitle (sic) hook allowed
redirecting the revision id of a template inclusion, but not the
title. The only known current use is Extension:ApprovedRevs; the
FlaggedRevs extension replaces the entire function using
ParserOptions::setCurrentRevisionRecordCallback().
Extension:Translate would like to redirect the title as well, possibly
recursively (for a limited number of hops) to handle fallback
languages. That is, when invoked on Foo/fr, including Template:Bar
would redirect to Template:Bar/fr -- and, if that doesn't exist, then
Template:Bar/fr would redirect to its fallback language, say
Template:Bar/en. It uses the top-level page title as context to set
the desired page language. This would require 2 invocations of the
hook; we've set the recursion limit to 3 to provide a little bit
of future-proofing.
The hook added in this patch uses RevisionRecord instead of int
$rev_id, and thus can handle the case where the redirect is to a page
which doesn't exist (by setting the RevisionRecord to a
MutableRevisionRecord with the correct title and no main slot content)
in the fallback language case above.
The new hook deprecates BeforeParserFetchTemplateAndtitle and replaces
ParserFetchTemplate as well (deprecated in 1.35). Code search:
https://codesearch.wmcloud.org/search/?q=BeforeParserFetchTemplateAndtitle&i=nope&files=&repos=
Bug: T47096
Change-Id: Ia5b5d339706ce4084c16948300e0e3418b11792e
2020-07-29 23:32:45 +00:00
|
|
|
use MediaWiki\Linker\LinkTarget;
|
2023-05-22 14:58:04 +00:00
|
|
|
use MediaWiki\Mail\UserEmailContact;
|
2024-08-09 22:17:01 +00:00
|
|
|
use MediaWiki\Output\OutputPage;
|
2022-08-14 15:49:20 +00:00
|
|
|
use MediaWiki\Page\PageIdentity;
|
2021-08-23 12:11:22 +00:00
|
|
|
use MediaWiki\Page\ProperPageIdentity;
|
2023-12-13 22:50:44 +00:00
|
|
|
use MediaWiki\Parser\Parser;
|
2024-10-03 18:39:06 +00:00
|
|
|
use MediaWiki\Parser\ParserOptions;
|
2023-12-14 19:20:33 +00:00
|
|
|
use MediaWiki\Parser\ParserOutput;
|
2021-08-23 12:11:22 +00:00
|
|
|
use MediaWiki\Permissions\Authority;
|
2023-02-28 05:51:43 +00:00
|
|
|
use MediaWiki\RenameUser\RenameuserSQL;
|
2022-05-06 09:09:56 +00:00
|
|
|
use MediaWiki\ResourceLoader as RL;
|
parser: new BeforeParserFetchTemplateRevisionRecord hook
This new hook provides for the use case in T47096 (allowing the
Translate extension to transclude a page from another language) by
adding a new hook which would let us deprecate and replace two awkward
legacy hooks (one with an embarrassing capitalization issue). The new
hook is a little more tightly scoped in terms of what it allows and
gives access to, and it uses the new RevisionRecord API.
In addition, the new hook uses LinkTarget instead of Title per
current best practices. (PageIdentity is not appropriate for
reasons documented at the hook invocation site.)
The original BeforeParserFetchTemplateAndtitle (sic) hook allowed
redirecting the revision id of a template inclusion, but not the
title. The only known current use is Extension:ApprovedRevs; the
FlaggedRevs extension replaces the entire function using
ParserOptions::setCurrentRevisionRecordCallback().
Extension:Translate would like to redirect the title as well, possibly
recursively (for a limited number of hops) to handle fallback
languages. That is, when invoked on Foo/fr, including Template:Bar
would redirect to Template:Bar/fr -- and, if that doesn't exist, then
Template:Bar/fr would redirect to its fallback language, say
Template:Bar/en. It uses the top-level page title as context to set
the desired page language. This would require 2 invocations of the
hook; we've set the recursion limit to 3 to provide a little bit
of future-proofing.
The hook added in this patch uses RevisionRecord instead of int
$rev_id, and thus can handle the case where the redirect is to a page
which doesn't exist (by setting the RevisionRecord to a
MutableRevisionRecord with the correct title and no main slot content)
in the fallback language case above.
The new hook deprecates BeforeParserFetchTemplateAndtitle and replaces
ParserFetchTemplate as well (deprecated in 1.35). Code search:
https://codesearch.wmcloud.org/search/?q=BeforeParserFetchTemplateAndtitle&i=nope&files=&repos=
Bug: T47096
Change-Id: Ia5b5d339706ce4084c16948300e0e3418b11792e
2020-07-29 23:32:45 +00:00
|
|
|
use MediaWiki\Revision\RevisionRecord;
|
2022-03-23 23:24:38 +00:00
|
|
|
use MediaWiki\Session\Session;
|
2023-09-15 09:32:18 +00:00
|
|
|
use MediaWiki\SpecialPage\SpecialPage;
|
2023-03-01 20:33:26 +00:00
|
|
|
use MediaWiki\Title\Title;
|
2021-07-13 21:05:10 +00:00
|
|
|
use MediaWiki\User\UserIdentity;
|
2024-09-27 20:18:58 +00:00
|
|
|
use SearchEngine;
|
2020-05-18 01:09:16 +00:00
|
|
|
use Skin;
|
2021-08-23 12:11:22 +00:00
|
|
|
use StatusValue;
|
2023-09-26 19:50:01 +00:00
|
|
|
use Wikimedia\Rdbms\SelectQueryBuilder;
|
2024-09-27 20:18:58 +00:00
|
|
|
use WikiPage;
|
2020-05-01 02:23:27 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This class provides an implementation of the core hook interfaces,
|
|
|
|
|
* forwarding hook calls to HookContainer for dispatch to extensions.
|
2020-05-11 18:16:56 +00:00
|
|
|
* It is intended for use within MediaWiki core only. Extensions that
|
|
|
|
|
* need a hook runner should create one for the hooks they need to run.
|
2020-05-01 02:23:27 +00:00
|
|
|
*
|
|
|
|
|
* To use it, create a new HookRunner object from a HookContainer obtained
|
|
|
|
|
* by dependency injection, or as a last resort, from the global service
|
|
|
|
|
* container. Then call the relevant method on the object:
|
|
|
|
|
* ( new HookRunner( $hookContainer ) )->onSomeHook( $param );
|
|
|
|
|
*
|
2020-05-11 18:16:56 +00:00
|
|
|
* @internal
|
2020-05-01 02:23:27 +00:00
|
|
|
*/
|
|
|
|
|
class HookRunner implements
|
2021-07-28 10:31:27 +00:00
|
|
|
\MediaWiki\Actions\Hook\GetActionNameHook,
|
2024-07-28 14:54:28 +00:00
|
|
|
\MediaWiki\Auth\Hook\AuthManagerFilterProvidersHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Auth\Hook\AuthManagerLoginAuthenticateAuditHook,
|
auth: Add AuthManagerVerifyAuthentication hook
Add a new hook that can be used to prevent authentication just
before AuthManager takes the main action (writing the session
for login, creating the local user account for account creation).
The driving use case is a wiki which supports both a local and
a central (wiki-farm-level) login or signup flow - various
security options (such as 2FA) are needed during local login
but unnecessary during central login (which will have those
security features centrally), so we need to skip much of the
security when the user is taking the central route, and a bug
in how that's done could result in circumvention of security
features during local login. The hook makes it easy to inspect
and potentially interrupt login near the end, when we know for
sure what route it took. (Specifically, we know which primary
provider was used. The hook doesn't expose other details,
such as the list of preauth or secondary provders that were
invoked, because they were not needed for the immediate use
case, but they are easy to add in the future.)
The hook is called after the secondary providers for login
and before them for account creation, since secondaries can
interrupt login but cannot interrupt account creation.
A shortcoming is that since the hook is called after a primary
provider succeeded, it cannot prevent the primary provider from
doing work, ie. it cannot prevent creation of the remote account
during account creation (although it will prevent the creation
of the local account). This is not great but acceptable, since
creating a new account isn't very security-sensitive.
This also means the hook would not be useful during account
linking, as AuthManager does not do anything there, all the work
happens in the primary provider. This is even less great but
few authentication extensions implement account linking.
The hook is not called for authentication happening via
CreatedAccountAuthenticationRequest, which is a weird internal
hack hook handlers should not have to know about.
Also rename a confusingly named variable.
Change-Id: I835b2fe2f43e6e81f23348165cbb9c93832e6583
2024-08-18 11:13:17 +00:00
|
|
|
\MediaWiki\Auth\Hook\AuthManagerVerifyAuthenticationHook,
|
2024-05-22 14:03:32 +00:00
|
|
|
\MediaWiki\Auth\Hook\AuthPreserveQueryParamsHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Auth\Hook\ExemptFromAccountCreationThrottleHook,
|
|
|
|
|
\MediaWiki\Auth\Hook\LocalUserCreatedHook,
|
|
|
|
|
\MediaWiki\Auth\Hook\ResetPasswordExpirationHook,
|
|
|
|
|
\MediaWiki\Auth\Hook\SecuritySensitiveOperationStatusHook,
|
|
|
|
|
\MediaWiki\Auth\Hook\UserLoggedInHook,
|
|
|
|
|
\MediaWiki\Block\Hook\AbortAutoblockHook,
|
2021-04-19 10:18:20 +00:00
|
|
|
\MediaWiki\Block\Hook\GetAllBlockActionsHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Block\Hook\GetUserBlockHook,
|
|
|
|
|
\MediaWiki\Block\Hook\PerformRetroactiveAutoblockHook,
|
2024-09-23 23:02:24 +00:00
|
|
|
\MediaWiki\Block\Hook\SpreadAnyEditBlockHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Cache\Hook\BacklinkCacheGetConditionsHook,
|
|
|
|
|
\MediaWiki\Cache\Hook\BacklinkCacheGetPrefixHook,
|
|
|
|
|
\MediaWiki\Cache\Hook\HtmlCacheUpdaterAppendUrlsHook,
|
|
|
|
|
\MediaWiki\Cache\Hook\HtmlCacheUpdaterVaryUrlsHook,
|
|
|
|
|
\MediaWiki\Cache\Hook\HTMLFileCache__useFileCacheHook,
|
2023-01-28 11:31:48 +00:00
|
|
|
\MediaWiki\Cache\Hook\MessageCacheFetchOverridesHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Cache\Hook\MessageCacheReplaceHook,
|
|
|
|
|
\MediaWiki\Cache\Hook\MessageCache__getHook,
|
|
|
|
|
\MediaWiki\Cache\Hook\MessagesPreLoadHook,
|
|
|
|
|
\MediaWiki\Hook\TitleSquidURLsHook,
|
|
|
|
|
\MediaWiki\ChangeTags\Hook\ChangeTagAfterDeleteHook,
|
|
|
|
|
\MediaWiki\ChangeTags\Hook\ChangeTagCanCreateHook,
|
|
|
|
|
\MediaWiki\ChangeTags\Hook\ChangeTagCanDeleteHook,
|
|
|
|
|
\MediaWiki\ChangeTags\Hook\ChangeTagsAfterUpdateTagsHook,
|
|
|
|
|
\MediaWiki\ChangeTags\Hook\ChangeTagsAllowedAddHook,
|
|
|
|
|
\MediaWiki\ChangeTags\Hook\ChangeTagsListActiveHook,
|
|
|
|
|
\MediaWiki\ChangeTags\Hook\ListDefinedTagsHook,
|
|
|
|
|
\MediaWiki\Content\Hook\ContentAlterParserOutputHook,
|
|
|
|
|
\MediaWiki\Content\Hook\ContentGetParserOutputHook,
|
|
|
|
|
\MediaWiki\Content\Hook\ContentHandlerForModelIDHook,
|
|
|
|
|
\MediaWiki\Content\Hook\ContentModelCanBeUsedOnHook,
|
|
|
|
|
\MediaWiki\Content\Hook\ConvertContentHook,
|
|
|
|
|
\MediaWiki\Content\Hook\GetContentModelsHook,
|
|
|
|
|
\MediaWiki\Content\Hook\GetDifferenceEngineHook,
|
|
|
|
|
\MediaWiki\Content\Hook\GetSlotDiffRendererHook,
|
2022-08-14 15:49:20 +00:00
|
|
|
\MediaWiki\Content\Hook\JsonValidateSaveHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Content\Hook\PageContentLanguageHook,
|
|
|
|
|
\MediaWiki\Content\Hook\PlaceNewSectionHook,
|
|
|
|
|
\MediaWiki\Content\Hook\SearchDataForIndexHook,
|
2022-09-19 06:54:15 +00:00
|
|
|
\MediaWiki\Content\Hook\SearchDataForIndex2Hook,
|
2022-09-28 14:35:34 +00:00
|
|
|
\MediaWiki\Specials\Contribute\Hook\ContributeCardsHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Diff\Hook\AbortDiffCacheHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\ArticleContentOnDiffHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineAfterLoadNewTextHook,
|
2023-05-22 05:41:21 +00:00
|
|
|
\MediaWiki\Diff\Hook\TextSlotDiffRendererTablePrefixHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineLoadTextAfterNewContentIsLoadedHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineMarkPatrolledLinkHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineMarkPatrolledRCIDHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineNewHeaderHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineOldHeaderHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineOldHeaderNoOldRevHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineRenderRevisionAddParserOutputHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineRenderRevisionShowFinalPatrolLinkHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineShowDiffHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineShowDiffPageHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineShowDiffPageMaybeShowMissingRevisionHook,
|
|
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineShowEmptyOldContentHook,
|
2020-06-18 13:20:49 +00:00
|
|
|
\MediaWiki\Diff\Hook\DifferenceEngineViewHeaderHook,
|
2020-06-15 21:19:04 +00:00
|
|
|
\MediaWiki\Diff\Hook\DiffToolsHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Diff\Hook\NewDifferenceEngineHook,
|
|
|
|
|
\MediaWiki\Hook\AbortEmailNotificationHook,
|
|
|
|
|
\MediaWiki\Hook\AbortTalkPageEmailNotificationHook,
|
|
|
|
|
\MediaWiki\Hook\ActionBeforeFormDisplayHook,
|
|
|
|
|
\MediaWiki\Hook\ActionModifyFormFieldsHook,
|
|
|
|
|
\MediaWiki\Hook\AddNewAccountHook,
|
2024-02-06 17:22:55 +00:00
|
|
|
\MediaWiki\Output\Hook\AfterBuildFeedLinksHook,
|
|
|
|
|
\MediaWiki\Output\Hook\AfterFinalPageOutputHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\AfterImportPageHook,
|
|
|
|
|
\MediaWiki\Hook\AfterParserFetchFileAndTitleHook,
|
|
|
|
|
\MediaWiki\Hook\AlternateEditHook,
|
|
|
|
|
\MediaWiki\Hook\AlternateEditPreviewHook,
|
|
|
|
|
\MediaWiki\Hook\AlternateUserMailerHook,
|
|
|
|
|
\MediaWiki\Hook\AncientPagesQueryHook,
|
|
|
|
|
\MediaWiki\Hook\ApiBeforeMainHook,
|
|
|
|
|
\MediaWiki\Hook\ArticleMergeCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\ArticleRevisionVisibilitySetHook,
|
|
|
|
|
\MediaWiki\Hook\ArticleUpdateBeforeRedirectHook,
|
|
|
|
|
\MediaWiki\Hook\BadImageHook,
|
|
|
|
|
\MediaWiki\Hook\BeforeInitializeHook,
|
2024-02-06 17:22:55 +00:00
|
|
|
\MediaWiki\Output\Hook\BeforePageDisplayHook,
|
|
|
|
|
\MediaWiki\Output\Hook\BeforePageRedirectHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\BeforeParserFetchFileAndTitleHook,
|
parser: new BeforeParserFetchTemplateRevisionRecord hook
This new hook provides for the use case in T47096 (allowing the
Translate extension to transclude a page from another language) by
adding a new hook which would let us deprecate and replace two awkward
legacy hooks (one with an embarrassing capitalization issue). The new
hook is a little more tightly scoped in terms of what it allows and
gives access to, and it uses the new RevisionRecord API.
In addition, the new hook uses LinkTarget instead of Title per
current best practices. (PageIdentity is not appropriate for
reasons documented at the hook invocation site.)
The original BeforeParserFetchTemplateAndtitle (sic) hook allowed
redirecting the revision id of a template inclusion, but not the
title. The only known current use is Extension:ApprovedRevs; the
FlaggedRevs extension replaces the entire function using
ParserOptions::setCurrentRevisionRecordCallback().
Extension:Translate would like to redirect the title as well, possibly
recursively (for a limited number of hops) to handle fallback
languages. That is, when invoked on Foo/fr, including Template:Bar
would redirect to Template:Bar/fr -- and, if that doesn't exist, then
Template:Bar/fr would redirect to its fallback language, say
Template:Bar/en. It uses the top-level page title as context to set
the desired page language. This would require 2 invocations of the
hook; we've set the recursion limit to 3 to provide a little bit
of future-proofing.
The hook added in this patch uses RevisionRecord instead of int
$rev_id, and thus can handle the case where the redirect is to a page
which doesn't exist (by setting the RevisionRecord to a
MutableRevisionRecord with the correct title and no main slot content)
in the fallback language case above.
The new hook deprecates BeforeParserFetchTemplateAndtitle and replaces
ParserFetchTemplate as well (deprecated in 1.35). Code search:
https://codesearch.wmcloud.org/search/?q=BeforeParserFetchTemplateAndtitle&i=nope&files=&repos=
Bug: T47096
Change-Id: Ia5b5d339706ce4084c16948300e0e3418b11792e
2020-07-29 23:32:45 +00:00
|
|
|
\MediaWiki\Hook\BeforeParserFetchTemplateRevisionRecordHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\BeforeWelcomeCreationHook,
|
|
|
|
|
\MediaWiki\Hook\BitmapHandlerCheckImageAreaHook,
|
|
|
|
|
\MediaWiki\Hook\BitmapHandlerTransformHook,
|
|
|
|
|
\MediaWiki\Hook\BlockIpCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\BlockIpHook,
|
|
|
|
|
\MediaWiki\Hook\BookInformationHook,
|
|
|
|
|
\MediaWiki\Hook\CanonicalNamespacesHook,
|
|
|
|
|
\MediaWiki\Hook\CategoryViewer__doCategoryQueryHook,
|
|
|
|
|
\MediaWiki\Hook\CategoryViewer__generateLinkHook,
|
|
|
|
|
\MediaWiki\Hook\ChangesListInitRowsHook,
|
|
|
|
|
\MediaWiki\Hook\ChangesListInsertArticleLinkHook,
|
|
|
|
|
\MediaWiki\Hook\ChangeUserGroupsHook,
|
|
|
|
|
\MediaWiki\Hook\Collation__factoryHook,
|
|
|
|
|
\MediaWiki\Hook\ContentSecurityPolicyDefaultSourceHook,
|
|
|
|
|
\MediaWiki\Hook\ContentSecurityPolicyDirectivesHook,
|
|
|
|
|
\MediaWiki\Hook\ContentSecurityPolicyScriptSourceHook,
|
|
|
|
|
\MediaWiki\Hook\ContribsPager__getQueryInfoHook,
|
|
|
|
|
\MediaWiki\Hook\ContribsPager__reallyDoQueryHook,
|
|
|
|
|
\MediaWiki\Hook\ContributionsLineEndingHook,
|
|
|
|
|
\MediaWiki\Hook\ContributionsToolLinksHook,
|
|
|
|
|
\MediaWiki\Hook\CustomEditorHook,
|
|
|
|
|
\MediaWiki\Hook\DeletedContribsPager__reallyDoQueryHook,
|
|
|
|
|
\MediaWiki\Hook\DeletedContributionsLineEndingHook,
|
|
|
|
|
\MediaWiki\Hook\DeleteUnknownPreferencesHook,
|
|
|
|
|
\MediaWiki\Hook\EditFilterHook,
|
|
|
|
|
\MediaWiki\Hook\EditFilterMergedContentHook,
|
|
|
|
|
\MediaWiki\Hook\EditFormInitialTextHook,
|
|
|
|
|
\MediaWiki\Hook\EditFormPreloadTextHook,
|
|
|
|
|
\MediaWiki\Hook\EditPageBeforeConflictDiffHook,
|
|
|
|
|
\MediaWiki\Hook\EditPageBeforeEditButtonsHook,
|
|
|
|
|
\MediaWiki\Hook\EditPageBeforeEditToolbarHook,
|
|
|
|
|
\MediaWiki\Hook\EditPageCopyrightWarningHook,
|
|
|
|
|
\MediaWiki\Hook\EditPageGetCheckboxesDefinitionHook,
|
|
|
|
|
\MediaWiki\Hook\EditPageGetDiffContentHook,
|
|
|
|
|
\MediaWiki\Hook\EditPageGetPreviewContentHook,
|
|
|
|
|
\MediaWiki\Hook\EditPageNoSuchSectionHook,
|
|
|
|
|
\MediaWiki\Hook\EditPageTosSummaryHook,
|
|
|
|
|
\MediaWiki\Hook\EditPage__attemptSaveHook,
|
|
|
|
|
\MediaWiki\Hook\EditPage__attemptSave_afterHook,
|
|
|
|
|
\MediaWiki\Hook\EditPage__importFormDataHook,
|
|
|
|
|
\MediaWiki\Hook\EditPage__showEditForm_fieldsHook,
|
|
|
|
|
\MediaWiki\Hook\EditPage__showEditForm_initialHook,
|
|
|
|
|
\MediaWiki\Hook\EditPage__showReadOnlyForm_initialHook,
|
|
|
|
|
\MediaWiki\Hook\EditPage__showStandardInputs_optionsHook,
|
|
|
|
|
\MediaWiki\Hook\EmailUserCCHook,
|
|
|
|
|
\MediaWiki\Hook\EmailUserCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\EmailUserFormHook,
|
|
|
|
|
\MediaWiki\Hook\EmailUserHook,
|
|
|
|
|
\MediaWiki\Hook\EmailUserPermissionsErrorsHook,
|
2023-05-22 14:58:04 +00:00
|
|
|
\MediaWiki\Mail\Hook\EmailUserAuthorizeSendHook,
|
|
|
|
|
\MediaWiki\Mail\Hook\EmailUserSendEmailHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\EnhancedChangesListModifyBlockLineDataHook,
|
|
|
|
|
\MediaWiki\Hook\EnhancedChangesListModifyLineDataHook,
|
|
|
|
|
\MediaWiki\Hook\EnhancedChangesList__getLogTextHook,
|
|
|
|
|
\MediaWiki\Hook\ExtensionTypesHook,
|
|
|
|
|
\MediaWiki\Hook\FetchChangesListHook,
|
|
|
|
|
\MediaWiki\Hook\FileDeleteCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\FileTransformedHook,
|
|
|
|
|
\MediaWiki\Hook\FileUndeleteCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\FileUploadHook,
|
|
|
|
|
\MediaWiki\Hook\FormatAutocommentsHook,
|
|
|
|
|
\MediaWiki\Hook\GalleryGetModesHook,
|
2023-04-16 17:24:00 +00:00
|
|
|
\MediaWiki\Hook\GetBlockErrorMessageKeyHook,
|
2024-02-06 17:22:55 +00:00
|
|
|
\MediaWiki\Output\Hook\GetCacheVaryCookiesHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\GetCanonicalURLHook,
|
|
|
|
|
\MediaWiki\Hook\GetDefaultSortkeyHook,
|
|
|
|
|
\MediaWiki\Hook\GetDoubleUnderscoreIDsHook,
|
|
|
|
|
\MediaWiki\Hook\GetExtendedMetadataHook,
|
|
|
|
|
\MediaWiki\Hook\GetFullURLHook,
|
|
|
|
|
\MediaWiki\Hook\GetHumanTimestampHook,
|
|
|
|
|
\MediaWiki\Hook\GetInternalURLHook,
|
|
|
|
|
\MediaWiki\Hook\GetIPHook,
|
|
|
|
|
\MediaWiki\Hook\GetLangPreferredVariantHook,
|
|
|
|
|
\MediaWiki\Hook\GetLinkColoursHook,
|
|
|
|
|
\MediaWiki\Hook\GetLocalURLHook,
|
|
|
|
|
\MediaWiki\Hook\GetLocalURL__ArticleHook,
|
|
|
|
|
\MediaWiki\Hook\GetLocalURL__InternalHook,
|
|
|
|
|
\MediaWiki\Hook\GetLogTypesOnUserHook,
|
2020-06-10 16:28:20 +00:00
|
|
|
\MediaWiki\Hook\GetMagicVariableIDsHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\GetMetadataVersionHook,
|
|
|
|
|
\MediaWiki\Hook\GetNewMessagesAlertHook,
|
|
|
|
|
\MediaWiki\Hook\GetRelativeTimestampHook,
|
|
|
|
|
\MediaWiki\Hook\GitViewersHook,
|
|
|
|
|
\MediaWiki\Hook\HistoryPageToolLinksHook,
|
2020-06-15 21:19:04 +00:00
|
|
|
\MediaWiki\Hook\HistoryToolsHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\ImageBeforeProduceHTMLHook,
|
|
|
|
|
\MediaWiki\Hook\ImgAuthBeforeStreamHook,
|
|
|
|
|
\MediaWiki\Hook\ImgAuthModifyHeadersHook,
|
2020-11-02 15:17:34 +00:00
|
|
|
\MediaWiki\Hook\ImportHandleContentXMLTagHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\ImportHandleLogItemXMLTagHook,
|
|
|
|
|
\MediaWiki\Hook\ImportHandlePageXMLTagHook,
|
|
|
|
|
\MediaWiki\Hook\ImportHandleRevisionXMLTagHook,
|
|
|
|
|
\MediaWiki\Hook\ImportHandleToplevelXMLTagHook,
|
|
|
|
|
\MediaWiki\Hook\ImportHandleUnknownUserHook,
|
|
|
|
|
\MediaWiki\Hook\ImportHandleUploadXMLTagHook,
|
|
|
|
|
\MediaWiki\Hook\ImportLogInterwikiLinkHook,
|
|
|
|
|
\MediaWiki\Hook\ImportSourcesHook,
|
|
|
|
|
\MediaWiki\Hook\InfoActionHook,
|
|
|
|
|
\MediaWiki\Hook\InitializeArticleMaybeRedirectHook,
|
|
|
|
|
\MediaWiki\Hook\InternalParseBeforeLinksHook,
|
|
|
|
|
\MediaWiki\Hook\IRCLineURLHook,
|
|
|
|
|
\MediaWiki\Hook\IsTrustedProxyHook,
|
|
|
|
|
\MediaWiki\Hook\IsUploadAllowedFromUrlHook,
|
|
|
|
|
\MediaWiki\Hook\IsValidEmailAddrHook,
|
|
|
|
|
\MediaWiki\Hook\LanguageGetNamespacesHook,
|
2024-02-06 17:22:55 +00:00
|
|
|
\MediaWiki\Output\Hook\LanguageLinksHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\LanguageSelectorHook,
|
|
|
|
|
\MediaWiki\Hook\LinkerMakeExternalImageHook,
|
|
|
|
|
\MediaWiki\Hook\LinkerMakeExternalLinkHook,
|
|
|
|
|
\MediaWiki\Hook\LinkerMakeMediaLinkFileHook,
|
|
|
|
|
\MediaWiki\Hook\LinksUpdateCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\LinksUpdateHook,
|
|
|
|
|
\MediaWiki\Hook\LocalFilePurgeThumbnailsHook,
|
|
|
|
|
\MediaWiki\Hook\LocalFile__getHistoryHook,
|
|
|
|
|
\MediaWiki\Hook\LocalisationCacheRecacheFallbackHook,
|
|
|
|
|
\MediaWiki\Hook\LocalisationCacheRecacheHook,
|
|
|
|
|
\MediaWiki\Hook\LogEventsListGetExtraInputsHook,
|
|
|
|
|
\MediaWiki\Hook\LogEventsListLineEndingHook,
|
|
|
|
|
\MediaWiki\Hook\LogEventsListShowLogExtractHook,
|
|
|
|
|
\MediaWiki\Hook\LogExceptionHook,
|
|
|
|
|
\MediaWiki\Hook\LoginFormValidErrorMessagesHook,
|
|
|
|
|
\MediaWiki\Hook\LogLineHook,
|
|
|
|
|
\MediaWiki\Hook\LonelyPagesQueryHook,
|
|
|
|
|
\MediaWiki\Hook\MagicWordwgVariableIDsHook,
|
|
|
|
|
\MediaWiki\Hook\MaintenanceRefreshLinksInitHook,
|
2020-08-26 07:40:40 +00:00
|
|
|
\MediaWiki\Hook\MaintenanceShellStartHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\MaintenanceUpdateAddParamsHook,
|
2024-02-06 17:22:55 +00:00
|
|
|
\MediaWiki\Output\Hook\MakeGlobalVariablesScriptHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\ManualLogEntryBeforePublishHook,
|
|
|
|
|
\MediaWiki\Hook\MarkPatrolledCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\MarkPatrolledHook,
|
|
|
|
|
\MediaWiki\Hook\MediaWikiPerformActionHook,
|
|
|
|
|
\MediaWiki\Hook\MediaWikiServicesHook,
|
|
|
|
|
\MediaWiki\Hook\MimeMagicGuessFromContentHook,
|
|
|
|
|
\MediaWiki\Hook\MimeMagicImproveFromExtensionHook,
|
|
|
|
|
\MediaWiki\Hook\MimeMagicInitHook,
|
|
|
|
|
\MediaWiki\Hook\ModifyExportQueryHook,
|
|
|
|
|
\MediaWiki\Hook\MovePageCheckPermissionsHook,
|
|
|
|
|
\MediaWiki\Hook\MovePageIsValidMoveHook,
|
|
|
|
|
\MediaWiki\Hook\NamespaceIsMovableHook,
|
|
|
|
|
\MediaWiki\Hook\NewPagesLineEndingHook,
|
|
|
|
|
\MediaWiki\Hook\OldChangesListRecentChangesLineHook,
|
|
|
|
|
\MediaWiki\Hook\OpenSearchUrlsHook,
|
|
|
|
|
\MediaWiki\Hook\OtherAutoblockLogLinkHook,
|
|
|
|
|
\MediaWiki\Hook\OtherBlockLogLinkHook,
|
2024-02-06 17:22:55 +00:00
|
|
|
\MediaWiki\Output\Hook\OutputPageAfterGetHeadLinksArrayHook,
|
|
|
|
|
\MediaWiki\Output\Hook\OutputPageBeforeHTMLHook,
|
|
|
|
|
\MediaWiki\Output\Hook\OutputPageBodyAttributesHook,
|
|
|
|
|
\MediaWiki\Output\Hook\OutputPageCheckLastModifiedHook,
|
|
|
|
|
\MediaWiki\Output\Hook\OutputPageMakeCategoryLinksHook,
|
|
|
|
|
\MediaWiki\Output\Hook\OutputPageParserOutputHook,
|
2024-08-09 22:17:01 +00:00
|
|
|
\MediaWiki\Output\Hook\OutputPageRenderCategoryLinkHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\PageHistoryBeforeListHook,
|
|
|
|
|
\MediaWiki\Hook\PageHistoryLineEndingHook,
|
|
|
|
|
\MediaWiki\Hook\PageHistoryPager__doBatchLookupsHook,
|
|
|
|
|
\MediaWiki\Hook\PageHistoryPager__getQueryInfoHook,
|
2020-04-12 01:15:08 +00:00
|
|
|
\MediaWiki\Hook\PageMoveCompleteHook,
|
2020-06-17 05:23:50 +00:00
|
|
|
\MediaWiki\Hook\PageMoveCompletingHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\PageRenderingHashHook,
|
|
|
|
|
\MediaWiki\Hook\ParserAfterParseHook,
|
|
|
|
|
\MediaWiki\Hook\ParserAfterTidyHook,
|
|
|
|
|
\MediaWiki\Hook\ParserBeforeInternalParseHook,
|
|
|
|
|
\MediaWiki\Hook\ParserBeforePreprocessHook,
|
|
|
|
|
\MediaWiki\Hook\ParserCacheSaveCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\ParserClearStateHook,
|
|
|
|
|
\MediaWiki\Hook\ParserClonedHook,
|
2022-03-28 18:26:17 +00:00
|
|
|
\MediaWiki\Hook\ParserFetchTemplateDataHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\ParserFirstCallInitHook,
|
|
|
|
|
\MediaWiki\Hook\ParserGetVariableValueSwitchHook,
|
|
|
|
|
\MediaWiki\Hook\ParserGetVariableValueTsHook,
|
|
|
|
|
\MediaWiki\Hook\ParserLimitReportFormatHook,
|
|
|
|
|
\MediaWiki\Hook\ParserLimitReportPrepareHook,
|
2022-03-28 21:04:49 +00:00
|
|
|
\MediaWiki\Hook\ParserLogLinterDataHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\ParserMakeImageParamsHook,
|
2023-04-16 17:32:48 +00:00
|
|
|
\MediaWiki\Hook\ParserModifyImageHTMLHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\ParserOptionsRegisterHook,
|
|
|
|
|
\MediaWiki\Hook\ParserOutputPostCacheTransformHook,
|
|
|
|
|
\MediaWiki\Hook\ParserPreSaveTransformCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\ParserTestGlobalsHook,
|
|
|
|
|
\MediaWiki\Hook\PasswordPoliciesForUserHook,
|
|
|
|
|
\MediaWiki\Hook\PostLoginRedirectHook,
|
2022-10-11 23:01:38 +00:00
|
|
|
\MediaWiki\Hook\PreferencesGetIconHook,
|
2022-09-21 01:00:14 +00:00
|
|
|
\MediaWiki\Hook\PreferencesGetLayoutHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\PreferencesGetLegendHook,
|
|
|
|
|
\MediaWiki\Hook\PrefsEmailAuditHook,
|
|
|
|
|
\MediaWiki\Hook\ProtectionForm__buildFormHook,
|
|
|
|
|
\MediaWiki\Hook\ProtectionForm__saveHook,
|
|
|
|
|
\MediaWiki\Hook\ProtectionForm__showLogExtractHook,
|
2020-08-31 22:54:56 +00:00
|
|
|
\MediaWiki\Hook\ProtectionFormAddFormFieldsHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\RandomPageQueryHook,
|
|
|
|
|
\MediaWiki\Hook\RawPageViewBeforeOutputHook,
|
|
|
|
|
\MediaWiki\Hook\RecentChangesPurgeRowsHook,
|
|
|
|
|
\MediaWiki\Hook\RecentChange_saveHook,
|
|
|
|
|
\MediaWiki\Hook\RejectParserCacheValueHook,
|
|
|
|
|
\MediaWiki\Hook\RequestContextCreateSkinHook,
|
|
|
|
|
\MediaWiki\Hook\SelfLinkBeginHook,
|
|
|
|
|
\MediaWiki\Hook\SendWatchlistEmailNotificationHook,
|
|
|
|
|
\MediaWiki\Hook\SetupAfterCacheHook,
|
|
|
|
|
\MediaWiki\Hook\ShortPagesQueryHook,
|
|
|
|
|
\MediaWiki\Hook\SidebarBeforeOutputHook,
|
|
|
|
|
\MediaWiki\Hook\SiteNoticeAfterHook,
|
|
|
|
|
\MediaWiki\Hook\SiteNoticeBeforeHook,
|
2020-05-18 01:09:16 +00:00
|
|
|
\MediaWiki\Hook\SkinAddFooterLinksHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\SkinAfterBottomScriptsHook,
|
|
|
|
|
\MediaWiki\Hook\SkinAfterContentHook,
|
|
|
|
|
\MediaWiki\Hook\SkinBuildSidebarHook,
|
|
|
|
|
\MediaWiki\Hook\SkinCopyrightFooterHook,
|
2024-09-25 15:59:32 +00:00
|
|
|
\MediaWiki\Hook\SkinCopyrightFooterMessageHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\SkinEditSectionLinksHook,
|
|
|
|
|
\MediaWiki\Hook\SkinPreloadExistenceHook,
|
|
|
|
|
\MediaWiki\Hook\SkinSubPageSubtitleHook,
|
|
|
|
|
\MediaWiki\Hook\SkinTemplateGetLanguageLinkHook,
|
|
|
|
|
\MediaWiki\Hook\SkinTemplateNavigation__UniversalHook,
|
|
|
|
|
\MediaWiki\Hook\SoftwareInfoHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialBlockModifyFormFieldsHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialContributionsBeforeMainOutputHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialContributions__formatRow__flagsHook,
|
2023-01-30 00:16:54 +00:00
|
|
|
\MediaWiki\Hook\SpecialCreateAccountBenefitsHook,
|
2021-09-28 02:28:12 +00:00
|
|
|
\MediaWiki\Hook\SpecialExportGetExtraPagesHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\SpecialContributions__getForm__filtersHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialListusersDefaultQueryHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialListusersFormatRowHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialListusersHeaderFormHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialListusersHeaderHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialListusersQueryInfoHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialLogAddLogSearchRelationsHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialMovepageAfterMoveHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialMuteModifyFormFieldsHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialNewpagesConditionsHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialNewPagesFiltersHook,
|
2023-09-26 19:50:01 +00:00
|
|
|
\MediaWiki\Hook\SpecialPrefixIndexGetFormFiltersHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialPrefixIndexQueryHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\SpecialRandomGetRandomTitleHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialRecentChangesPanelHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialResetTokensTokensHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialSearchCreateLinkHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialSearchGoResultHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialSearchNogomatchHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialSearchProfilesHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialSearchResultsAppendHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialSearchResultsHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialSearchResultsPrependHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialSearchSetupEngineHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialStatsAddExtraHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialTrackingCategories__generateCatLinkHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialTrackingCategories__preprocessHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialUploadCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialVersionVersionUrlHook,
|
|
|
|
|
\MediaWiki\Hook\SpecialWatchlistGetNonRevisionTypesHook,
|
|
|
|
|
\MediaWiki\Hook\TestCanonicalRedirectHook,
|
|
|
|
|
\MediaWiki\Hook\ThumbnailBeforeProduceHTMLHook,
|
2022-03-23 23:24:38 +00:00
|
|
|
\MediaWiki\Hook\TempUserCreatedRedirectHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\TitleExistsHook,
|
|
|
|
|
\MediaWiki\Hook\TitleGetEditNoticesHook,
|
|
|
|
|
\MediaWiki\Hook\TitleGetRestrictionTypesHook,
|
|
|
|
|
\MediaWiki\Hook\TitleIsAlwaysKnownHook,
|
|
|
|
|
\MediaWiki\Hook\TitleIsMovableHook,
|
|
|
|
|
\MediaWiki\Hook\TitleMoveHook,
|
|
|
|
|
\MediaWiki\Hook\TitleMoveStartingHook,
|
|
|
|
|
\MediaWiki\Hook\UnblockUserCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\UnblockUserHook,
|
|
|
|
|
\MediaWiki\Hook\UndeleteForm__showHistoryHook,
|
|
|
|
|
\MediaWiki\Hook\UndeleteForm__showRevisionHook,
|
|
|
|
|
\MediaWiki\Hook\UndeletePageToolLinksHook,
|
|
|
|
|
\MediaWiki\Hook\UnitTestsAfterDatabaseSetupHook,
|
|
|
|
|
\MediaWiki\Hook\UnitTestsBeforeDatabaseTeardownHook,
|
|
|
|
|
\MediaWiki\Hook\UnitTestsListHook,
|
|
|
|
|
\MediaWiki\Hook\UnwatchArticleCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\UnwatchArticleHook,
|
|
|
|
|
\MediaWiki\Hook\UpdateUserMailerFormattedPageStatusHook,
|
|
|
|
|
\MediaWiki\Hook\UploadCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\UploadCreateFromRequestHook,
|
|
|
|
|
\MediaWiki\Hook\UploadFormInitDescriptorHook,
|
|
|
|
|
\MediaWiki\Hook\UploadFormSourceDescriptorsHook,
|
|
|
|
|
\MediaWiki\Hook\UploadForm_BeforeProcessingHook,
|
|
|
|
|
\MediaWiki\Hook\UploadForm_getInitialPageTextHook,
|
|
|
|
|
\MediaWiki\Hook\UploadForm_initialHook,
|
|
|
|
|
\MediaWiki\Hook\UploadStashFileHook,
|
|
|
|
|
\MediaWiki\Hook\UploadVerifyFileHook,
|
|
|
|
|
\MediaWiki\Hook\UploadVerifyUploadHook,
|
2022-01-31 03:34:39 +00:00
|
|
|
\MediaWiki\Hook\UserEditCountUpdateHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Hook\UserGetLanguageObjectHook,
|
|
|
|
|
\MediaWiki\Hook\UserLoginCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\UserLogoutCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\UserMailerChangeReturnPathHook,
|
|
|
|
|
\MediaWiki\Hook\UserMailerSplitToHook,
|
|
|
|
|
\MediaWiki\Hook\UserMailerTransformContentHook,
|
|
|
|
|
\MediaWiki\Hook\UserMailerTransformMessageHook,
|
|
|
|
|
\MediaWiki\Hook\UsersPagerDoBatchLookupsHook,
|
|
|
|
|
\MediaWiki\Hook\UserToolLinksEditHook,
|
|
|
|
|
\MediaWiki\Hook\ValidateExtendedMetadataCacheHook,
|
|
|
|
|
\MediaWiki\Hook\WantedPages__getQueryInfoHook,
|
|
|
|
|
\MediaWiki\Hook\WatchArticleCompleteHook,
|
|
|
|
|
\MediaWiki\Hook\WatchArticleHook,
|
|
|
|
|
\MediaWiki\Hook\WatchedItemQueryServiceExtensionsHook,
|
|
|
|
|
\MediaWiki\Hook\WatchlistEditorBeforeFormRenderHook,
|
|
|
|
|
\MediaWiki\Hook\WatchlistEditorBuildRemoveLineHook,
|
|
|
|
|
\MediaWiki\Hook\WebRequestPathInfoRouterHook,
|
|
|
|
|
\MediaWiki\Hook\WebResponseSetCookieHook,
|
|
|
|
|
\MediaWiki\Hook\WhatLinksHerePropsHook,
|
|
|
|
|
\MediaWiki\Hook\WikiExporter__dumpStableQueryHook,
|
|
|
|
|
\MediaWiki\Hook\XmlDumpWriterOpenPageHook,
|
|
|
|
|
\MediaWiki\Hook\XmlDumpWriterWriteRevisionHook,
|
|
|
|
|
\MediaWiki\Installer\Hook\LoadExtensionSchemaUpdatesHook,
|
|
|
|
|
\MediaWiki\Interwiki\Hook\InterwikiLoadPrefixHook,
|
|
|
|
|
\MediaWiki\Languages\Hook\LanguageGetTranslatedLanguageNamesHook,
|
|
|
|
|
\MediaWiki\Languages\Hook\Language__getMessagesFileNameHook,
|
2020-05-12 10:05:37 +00:00
|
|
|
\MediaWiki\Linker\Hook\LinkerGenerateRollbackLinkHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Linker\Hook\HtmlPageLinkRendererBeginHook,
|
|
|
|
|
\MediaWiki\Linker\Hook\HtmlPageLinkRendererEndHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleConfirmDeleteHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleDeleteAfterSuccessHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleDeleteCompleteHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleDeleteHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleFromTitleHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticlePageDataAfterHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticlePageDataBeforeHook,
|
2020-12-01 17:53:48 +00:00
|
|
|
\MediaWiki\Page\Hook\ArticleParserOptionsHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Page\Hook\ArticleProtectCompleteHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleProtectHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticlePurgeHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleRevisionViewCustomHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleShowPatrolFooterHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleUndeleteHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleViewFooterHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleViewHeaderHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ArticleViewRedirectHook,
|
|
|
|
|
\MediaWiki\Page\Hook\Article__MissingArticleConditionsHook,
|
|
|
|
|
\MediaWiki\Page\Hook\BeforeDisplayNoArticleTextHook,
|
|
|
|
|
\MediaWiki\Page\Hook\CategoryAfterPageAddedHook,
|
|
|
|
|
\MediaWiki\Page\Hook\CategoryAfterPageRemovedHook,
|
|
|
|
|
\MediaWiki\Page\Hook\CategoryPageViewHook,
|
|
|
|
|
\MediaWiki\Page\Hook\DisplayOldSubtitleHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ImageOpenShowImageInlineBeforeHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ImagePageAfterImageLinksHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ImagePageFileHistoryLineHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ImagePageFindFileHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ImagePageShowTOCHook,
|
|
|
|
|
\MediaWiki\Page\Hook\IsFileCacheableHook,
|
|
|
|
|
\MediaWiki\Page\Hook\OpportunisticLinksUpdateHook,
|
2021-08-23 12:11:22 +00:00
|
|
|
\MediaWiki\Page\Hook\PageDeleteCompleteHook,
|
|
|
|
|
\MediaWiki\Page\Hook\PageDeleteHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Page\Hook\PageDeletionDataUpdatesHook,
|
2023-01-09 23:32:35 +00:00
|
|
|
\MediaWiki\Page\Hook\PageUndeleteCompleteHook,
|
2021-09-27 22:50:14 +00:00
|
|
|
\MediaWiki\Page\Hook\PageUndeleteHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Page\Hook\PageViewUpdatesHook,
|
2020-05-15 07:27:03 +00:00
|
|
|
\MediaWiki\Page\Hook\RevisionFromEditCompleteHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Page\Hook\RevisionUndeletedHook,
|
|
|
|
|
\MediaWiki\Page\Hook\RollbackCompleteHook,
|
|
|
|
|
\MediaWiki\Page\Hook\ShowMissingArticleHook,
|
|
|
|
|
\MediaWiki\Page\Hook\WikiPageDeletionUpdatesHook,
|
|
|
|
|
\MediaWiki\Page\Hook\WikiPageFactoryHook,
|
2022-06-01 11:39:25 +00:00
|
|
|
\MediaWiki\Permissions\Hook\PermissionErrorAuditHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Permissions\Hook\GetUserPermissionsErrorsExpensiveHook,
|
|
|
|
|
\MediaWiki\Permissions\Hook\GetUserPermissionsErrorsHook,
|
|
|
|
|
\MediaWiki\Permissions\Hook\TitleQuickPermissionsHook,
|
|
|
|
|
\MediaWiki\Permissions\Hook\TitleReadWhitelistHook,
|
|
|
|
|
\MediaWiki\Permissions\Hook\UserCanHook,
|
|
|
|
|
\MediaWiki\Permissions\Hook\UserGetAllRightsHook,
|
|
|
|
|
\MediaWiki\Permissions\Hook\UserGetRightsHook,
|
|
|
|
|
\MediaWiki\Permissions\Hook\UserGetRightsRemoveHook,
|
|
|
|
|
\MediaWiki\Permissions\Hook\UserIsBlockedFromHook,
|
|
|
|
|
\MediaWiki\Permissions\Hook\UserIsEveryoneAllowedHook,
|
|
|
|
|
\MediaWiki\Preferences\Hook\GetPreferencesHook,
|
|
|
|
|
\MediaWiki\Preferences\Hook\PreferencesFormPreSaveHook,
|
2023-02-28 05:51:43 +00:00
|
|
|
\MediaWiki\RenameUser\Hook\RenameUserAbortHook,
|
|
|
|
|
\MediaWiki\RenameUser\Hook\RenameUserCompleteHook,
|
|
|
|
|
\MediaWiki\RenameUser\Hook\RenameUserPreRenameHook,
|
|
|
|
|
\MediaWiki\RenameUser\Hook\RenameUserSQLHook,
|
|
|
|
|
\MediaWiki\RenameUser\Hook\RenameUserWarningHook,
|
2020-05-11 05:17:10 +00:00
|
|
|
\MediaWiki\Rest\Hook\SearchResultProvideDescriptionHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Revision\Hook\ContentHandlerDefaultModelForHook,
|
|
|
|
|
\MediaWiki\Revision\Hook\RevisionRecordInsertedHook,
|
|
|
|
|
\MediaWiki\Search\Hook\PrefixSearchBackendHook,
|
|
|
|
|
\MediaWiki\Search\Hook\PrefixSearchExtractNamespaceHook,
|
|
|
|
|
\MediaWiki\Search\Hook\SearchableNamespacesHook,
|
|
|
|
|
\MediaWiki\Search\Hook\SearchAfterNoDirectMatchHook,
|
|
|
|
|
\MediaWiki\Search\Hook\SearchGetNearMatchBeforeHook,
|
|
|
|
|
\MediaWiki\Search\Hook\SearchGetNearMatchCompleteHook,
|
|
|
|
|
\MediaWiki\Search\Hook\SearchGetNearMatchHook,
|
|
|
|
|
\MediaWiki\Search\Hook\SearchIndexFieldsHook,
|
|
|
|
|
\MediaWiki\Search\Hook\SearchResultInitFromTitleHook,
|
2022-08-23 12:21:44 +00:00
|
|
|
\MediaWiki\Search\Hook\SearchResultProvideThumbnailHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Search\Hook\SearchResultsAugmentHook,
|
|
|
|
|
\MediaWiki\Search\Hook\ShowSearchHitHook,
|
|
|
|
|
\MediaWiki\Search\Hook\ShowSearchHitTitleHook,
|
|
|
|
|
\MediaWiki\Search\Hook\SpecialSearchPowerBoxHook,
|
|
|
|
|
\MediaWiki\Search\Hook\SpecialSearchProfileFormHook,
|
|
|
|
|
\MediaWiki\Session\Hook\SessionCheckInfoHook,
|
|
|
|
|
\MediaWiki\Session\Hook\SessionMetadataHook,
|
|
|
|
|
\MediaWiki\Shell\Hook\WfShellWikiCmdHook,
|
2020-06-08 07:33:11 +00:00
|
|
|
\MediaWiki\Skins\Hook\SkinAfterPortletHook,
|
2020-07-09 09:34:03 +00:00
|
|
|
\MediaWiki\Skins\Hook\SkinPageReadyConfigHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\SpecialPage\Hook\AuthChangeFormFieldsHook,
|
|
|
|
|
\MediaWiki\SpecialPage\Hook\ChangeAuthenticationDataAuditHook,
|
|
|
|
|
\MediaWiki\SpecialPage\Hook\ChangesListSpecialPageQueryHook,
|
|
|
|
|
\MediaWiki\SpecialPage\Hook\ChangesListSpecialPageStructuredFiltersHook,
|
|
|
|
|
\MediaWiki\SpecialPage\Hook\RedirectSpecialArticleRedirectParamsHook,
|
|
|
|
|
\MediaWiki\SpecialPage\Hook\SpecialPageAfterExecuteHook,
|
|
|
|
|
\MediaWiki\SpecialPage\Hook\SpecialPageBeforeExecuteHook,
|
|
|
|
|
\MediaWiki\SpecialPage\Hook\SpecialPageBeforeFormDisplayHook,
|
|
|
|
|
\MediaWiki\SpecialPage\Hook\SpecialPage_initListHook,
|
|
|
|
|
\MediaWiki\SpecialPage\Hook\WgQueryPagesHook,
|
|
|
|
|
\MediaWiki\Storage\Hook\ArticleEditUpdateNewTalkHook,
|
|
|
|
|
\MediaWiki\Storage\Hook\ArticlePrepareTextForEditHook,
|
2020-07-06 11:47:22 +00:00
|
|
|
\MediaWiki\Storage\Hook\BeforeRevertedTagUpdateHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Storage\Hook\MultiContentSaveHook,
|
|
|
|
|
\MediaWiki\Storage\Hook\PageContentSaveHook,
|
2020-06-01 01:31:00 +00:00
|
|
|
\MediaWiki\Storage\Hook\PageSaveCompleteHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\Storage\Hook\ParserOutputStashForEditHook,
|
|
|
|
|
\MediaWiki\Storage\Hook\RevisionDataUpdatesHook,
|
2020-06-04 16:41:12 +00:00
|
|
|
\MediaWiki\User\Hook\AutopromoteConditionHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\User\Hook\ConfirmEmailCompleteHook,
|
|
|
|
|
\MediaWiki\User\Hook\EmailConfirmedHook,
|
2020-06-04 16:41:12 +00:00
|
|
|
\MediaWiki\User\Hook\GetAutoPromoteGroupsHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\User\Hook\InvalidateEmailCompleteHook,
|
|
|
|
|
\MediaWiki\User\Hook\IsValidPasswordHook,
|
|
|
|
|
\MediaWiki\User\Hook\PingLimiterHook,
|
|
|
|
|
\MediaWiki\User\Hook\SpecialPasswordResetOnSubmitHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserAddGroupHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserArrayFromResultHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserCanSendEmailHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserClearNewTalkNotificationHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserEffectiveGroupsHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserGetDefaultOptionsHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserGetEmailAuthenticationTimestampHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserGetEmailHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserGetReservedNamesHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserGroupsChangedHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserIsBlockedGloballyHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserIsBotHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserIsLockedHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserLoadAfterLoadFromSessionHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserLoadDefaultsHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserLogoutHook,
|
2019-01-07 08:01:00 +00:00
|
|
|
\MediaWiki\User\Hook\UserPrivilegedGroupsHook,
|
2020-05-01 02:23:27 +00:00
|
|
|
\MediaWiki\User\Hook\UserRemoveGroupHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserSaveSettingsHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserSendConfirmationMailHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserSetEmailAuthenticationTimestampHook,
|
|
|
|
|
\MediaWiki\User\Hook\UserSetEmailHook,
|
2021-07-13 21:05:10 +00:00
|
|
|
\MediaWiki\User\Hook\User__mailPasswordInternalHook,
|
|
|
|
|
\MediaWiki\User\Options\Hook\LoadUserOptionsHook,
|
2024-10-10 14:34:51 +00:00
|
|
|
\MediaWiki\User\Options\Hook\SaveUserOptionsHook,
|
|
|
|
|
\MediaWiki\User\Options\Hook\ConditionalDefaultOptionsAddConditionHook
|
2020-05-01 02:23:27 +00:00
|
|
|
{
|
|
|
|
|
/** @var HookContainer */
|
|
|
|
|
private $container;
|
|
|
|
|
|
|
|
|
|
public function __construct( HookContainer $container ) {
|
|
|
|
|
$this->container = $container;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAbortAutoblock( $autoblockip, $block ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AbortAutoblock',
|
|
|
|
|
[ $autoblockip, $block ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAbortDiffCache( $diffEngine ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AbortDiffCache',
|
|
|
|
|
[ $diffEngine ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAbortEmailNotification( $editor, $title, $rc ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AbortEmailNotification',
|
|
|
|
|
[ $editor, $title, $rc ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAbortTalkPageEmailNotification( $targetUser, $title ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AbortTalkPageEmailNotification',
|
|
|
|
|
[ $targetUser, $title ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onActionBeforeFormDisplay( $name, $form, $article ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ActionBeforeFormDisplay',
|
|
|
|
|
[ $name, $form, $article ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onActionModifyFormFields( $name, &$fields, $article ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ActionModifyFormFields',
|
|
|
|
|
[ $name, &$fields, $article ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAddNewAccount( $user, $byEmail ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AddNewAccount',
|
|
|
|
|
[ $user, $byEmail ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAfterBuildFeedLinks( &$feedLinks ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AfterBuildFeedLinks',
|
|
|
|
|
[ &$feedLinks ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-22 03:11:47 +00:00
|
|
|
public function onAfterFinalPageOutput( $output ): void {
|
2020-06-17 02:47:41 +00:00
|
|
|
$this->container->run(
|
2020-05-01 02:23:27 +00:00
|
|
|
'AfterFinalPageOutput',
|
|
|
|
|
[ $output ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAfterImportPage( $title, $foreignTitle, $revCount,
|
|
|
|
|
$sRevCount, $pageInfo
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AfterImportPage',
|
|
|
|
|
[ $title, $foreignTitle, $revCount, $sRevCount, $pageInfo ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAfterParserFetchFileAndTitle( $parser, $ig, &$html ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AfterParserFetchFileAndTitle',
|
|
|
|
|
[ $parser, $ig, &$html ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAlternateEdit( $editPage ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AlternateEdit',
|
|
|
|
|
[ $editPage ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAlternateEditPreview( $editPage, &$content, &$previewHTML,
|
|
|
|
|
&$parserOutput
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AlternateEditPreview',
|
|
|
|
|
[ $editPage, &$content, &$previewHTML, &$parserOutput ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAlternateUserMailer( $headers, $to, $from, $subject, $body ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AlternateUserMailer',
|
|
|
|
|
[ $headers, $to, $from, $subject, $body ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAncientPagesQuery( &$tables, &$conds, &$joinConds ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AncientPagesQuery',
|
|
|
|
|
[ &$tables, &$conds, &$joinConds ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onApiBeforeMain( &$main ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ApiBeforeMain',
|
|
|
|
|
[ &$main ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleConfirmDelete( $article, $output, &$reason ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleConfirmDelete',
|
|
|
|
|
[ $article, $output, &$reason ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleContentOnDiff( $diffEngine, $output ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleContentOnDiff',
|
|
|
|
|
[ $diffEngine, $output ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleDelete( $wikiPage, $user, &$reason, &$error, &$status,
|
|
|
|
|
$suppress
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleDelete',
|
|
|
|
|
[ $wikiPage, $user, &$reason, &$error, &$status, $suppress ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleDeleteAfterSuccess( $title, $outputPage ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleDeleteAfterSuccess',
|
|
|
|
|
[ $title, $outputPage ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleDeleteComplete( $wikiPage, $user, $reason, $id,
|
|
|
|
|
$content, $logEntry, $archivedRevisionCount
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleDeleteComplete',
|
|
|
|
|
[ $wikiPage, $user, $reason, $id, $content, $logEntry,
|
|
|
|
|
$archivedRevisionCount ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleEditUpdateNewTalk( $wikiPage, $recipient ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleEditUpdateNewTalk',
|
|
|
|
|
[ $wikiPage, $recipient ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleFromTitle( $title, &$article, $context ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleFromTitle',
|
|
|
|
|
[ $title, &$article, $context ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleMergeComplete( $targetTitle, $destTitle ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleMergeComplete',
|
|
|
|
|
[ $targetTitle, $destTitle ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticlePageDataAfter( $wikiPage, &$row ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticlePageDataAfter',
|
|
|
|
|
[ $wikiPage, &$row ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticlePageDataBefore( $wikiPage, &$fields, &$tables,
|
|
|
|
|
&$joinConds
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticlePageDataBefore',
|
|
|
|
|
[ $wikiPage, &$fields, &$tables, &$joinConds ]
|
|
|
|
|
);
|
|
|
|
|
}
|
2020-12-01 17:53:48 +00:00
|
|
|
|
|
|
|
|
public function onArticleParserOptions( Article $article, ParserOptions $popts ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleParserOptions',
|
|
|
|
|
[ $article, $popts ]
|
|
|
|
|
);
|
|
|
|
|
}
|
2020-05-01 02:23:27 +00:00
|
|
|
|
|
|
|
|
public function onArticlePrepareTextForEdit( $wikiPage, $popts ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticlePrepareTextForEdit',
|
|
|
|
|
[ $wikiPage, $popts ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleProtect( $wikiPage, $user, $protect, $reason ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleProtect',
|
|
|
|
|
[ $wikiPage, $user, $protect, $reason ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleProtectComplete( $wikiPage, $user, $protect, $reason ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleProtectComplete',
|
|
|
|
|
[ $wikiPage, $user, $protect, $reason ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticlePurge( $wikiPage ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticlePurge',
|
|
|
|
|
[ $wikiPage ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleRevisionViewCustom( $revision, $title, $oldid,
|
|
|
|
|
$output
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleRevisionViewCustom',
|
|
|
|
|
[ $revision, $title, $oldid, $output ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleRevisionVisibilitySet( $title, $ids,
|
|
|
|
|
$visibilityChangeMap
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleRevisionVisibilitySet',
|
|
|
|
|
[ $title, $ids, $visibilityChangeMap ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleShowPatrolFooter( $article ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleShowPatrolFooter',
|
|
|
|
|
[ $article ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleUndelete( $title, $create, $comment, $oldPageId,
|
|
|
|
|
$restoredPages
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleUndelete',
|
|
|
|
|
[ $title, $create, $comment, $oldPageId, $restoredPages ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleUpdateBeforeRedirect( $article, &$sectionanchor,
|
|
|
|
|
&$extraq
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleUpdateBeforeRedirect',
|
|
|
|
|
[ $article, &$sectionanchor, &$extraq ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleViewFooter( $article, $patrolFooterShown ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleViewFooter',
|
|
|
|
|
[ $article, $patrolFooterShown ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-11-05 08:51:58 +00:00
|
|
|
public function onArticleViewHeader( $article, &$outputDone, &$pcache ) {
|
2020-05-01 02:23:27 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleViewHeader',
|
2020-11-05 08:51:58 +00:00
|
|
|
[ $article, &$outputDone, &$pcache ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticleViewRedirect( $article ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ArticleViewRedirect',
|
|
|
|
|
[ $article ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onArticle__MissingArticleConditions( &$conds, $logTypes ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'Article::MissingArticleConditions',
|
|
|
|
|
[ &$conds, $logTypes ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onAuthChangeFormFields( $requests, $fieldInfo,
|
|
|
|
|
&$formDescriptor, $action
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AuthChangeFormFields',
|
|
|
|
|
[ $requests, $fieldInfo, &$formDescriptor, $action ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-28 14:54:28 +00:00
|
|
|
public function onAuthManagerFilterProviders( array &$providers ): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'AuthManagerFilterProviders',
|
|
|
|
|
[ &$providers ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onAuthManagerLoginAuthenticateAudit( $response, $user,
|
|
|
|
|
$username, $extraData
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AuthManagerLoginAuthenticateAudit',
|
|
|
|
|
[ $response, $user, $username, $extraData ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
auth: Add AuthManagerVerifyAuthentication hook
Add a new hook that can be used to prevent authentication just
before AuthManager takes the main action (writing the session
for login, creating the local user account for account creation).
The driving use case is a wiki which supports both a local and
a central (wiki-farm-level) login or signup flow - various
security options (such as 2FA) are needed during local login
but unnecessary during central login (which will have those
security features centrally), so we need to skip much of the
security when the user is taking the central route, and a bug
in how that's done could result in circumvention of security
features during local login. The hook makes it easy to inspect
and potentially interrupt login near the end, when we know for
sure what route it took. (Specifically, we know which primary
provider was used. The hook doesn't expose other details,
such as the list of preauth or secondary provders that were
invoked, because they were not needed for the immediate use
case, but they are easy to add in the future.)
The hook is called after the secondary providers for login
and before them for account creation, since secondaries can
interrupt login but cannot interrupt account creation.
A shortcoming is that since the hook is called after a primary
provider succeeded, it cannot prevent the primary provider from
doing work, ie. it cannot prevent creation of the remote account
during account creation (although it will prevent the creation
of the local account). This is not great but acceptable, since
creating a new account isn't very security-sensitive.
This also means the hook would not be useful during account
linking, as AuthManager does not do anything there, all the work
happens in the primary provider. This is even less great but
few authentication extensions implement account linking.
The hook is not called for authentication happening via
CreatedAccountAuthenticationRequest, which is a weird internal
hack hook handlers should not have to know about.
Also rename a confusingly named variable.
Change-Id: I835b2fe2f43e6e81f23348165cbb9c93832e6583
2024-08-18 11:13:17 +00:00
|
|
|
public function onAuthManagerVerifyAuthentication(
|
|
|
|
|
?UserIdentity $user,
|
|
|
|
|
AuthenticationResponse &$response,
|
|
|
|
|
AuthManager $authManager,
|
|
|
|
|
array $info
|
|
|
|
|
): bool {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AuthManagerVerifyAuthentication',
|
|
|
|
|
[ $user, &$response, $authManager, $info ],
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-22 14:03:32 +00:00
|
|
|
public function onAuthPreserveQueryParams( &$params, $options ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AuthPreserveQueryParams', [ &$params, $options ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onAutopromoteCondition( $type, $args, $user, &$result ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'AutopromoteCondition',
|
|
|
|
|
[ $type, $args, $user, &$result ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBacklinkCacheGetConditions( $table, $title, &$conds ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BacklinkCacheGetConditions',
|
|
|
|
|
[ $table, $title, &$conds ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBacklinkCacheGetPrefix( $table, &$prefix ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BacklinkCacheGetPrefix',
|
|
|
|
|
[ $table, &$prefix ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBadImage( $name, &$bad ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BadImage',
|
|
|
|
|
[ $name, &$bad ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBeforeDisplayNoArticleText( $article ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BeforeDisplayNoArticleText',
|
|
|
|
|
[ $article ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBeforeInitialize( $title, $unused, $output, $user, $request,
|
|
|
|
|
$mediaWiki
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BeforeInitialize',
|
|
|
|
|
[ $title, $unused, $output, $user, $request, $mediaWiki ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-22 03:11:47 +00:00
|
|
|
public function onBeforePageDisplay( $out, $skin ): void {
|
2020-06-17 02:47:41 +00:00
|
|
|
$this->container->run(
|
2020-05-01 02:23:27 +00:00
|
|
|
'BeforePageDisplay',
|
|
|
|
|
[ $out, $skin ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBeforePageRedirect( $out, &$redirect, &$code ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BeforePageRedirect',
|
|
|
|
|
[ $out, &$redirect, &$code ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBeforeParserFetchFileAndTitle( $parser, $nt, &$options,
|
|
|
|
|
&$descQuery
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BeforeParserFetchFileAndTitle',
|
|
|
|
|
[ $parser, $nt, &$options, &$descQuery ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
parser: new BeforeParserFetchTemplateRevisionRecord hook
This new hook provides for the use case in T47096 (allowing the
Translate extension to transclude a page from another language) by
adding a new hook which would let us deprecate and replace two awkward
legacy hooks (one with an embarrassing capitalization issue). The new
hook is a little more tightly scoped in terms of what it allows and
gives access to, and it uses the new RevisionRecord API.
In addition, the new hook uses LinkTarget instead of Title per
current best practices. (PageIdentity is not appropriate for
reasons documented at the hook invocation site.)
The original BeforeParserFetchTemplateAndtitle (sic) hook allowed
redirecting the revision id of a template inclusion, but not the
title. The only known current use is Extension:ApprovedRevs; the
FlaggedRevs extension replaces the entire function using
ParserOptions::setCurrentRevisionRecordCallback().
Extension:Translate would like to redirect the title as well, possibly
recursively (for a limited number of hops) to handle fallback
languages. That is, when invoked on Foo/fr, including Template:Bar
would redirect to Template:Bar/fr -- and, if that doesn't exist, then
Template:Bar/fr would redirect to its fallback language, say
Template:Bar/en. It uses the top-level page title as context to set
the desired page language. This would require 2 invocations of the
hook; we've set the recursion limit to 3 to provide a little bit
of future-proofing.
The hook added in this patch uses RevisionRecord instead of int
$rev_id, and thus can handle the case where the redirect is to a page
which doesn't exist (by setting the RevisionRecord to a
MutableRevisionRecord with the correct title and no main slot content)
in the fallback language case above.
The new hook deprecates BeforeParserFetchTemplateAndtitle and replaces
ParserFetchTemplate as well (deprecated in 1.35). Code search:
https://codesearch.wmcloud.org/search/?q=BeforeParserFetchTemplateAndtitle&i=nope&files=&repos=
Bug: T47096
Change-Id: Ia5b5d339706ce4084c16948300e0e3418b11792e
2020-07-29 23:32:45 +00:00
|
|
|
public function onBeforeParserFetchTemplateRevisionRecord(
|
|
|
|
|
?LinkTarget $contextTitle, LinkTarget $title,
|
|
|
|
|
bool &$skip, ?RevisionRecord &$revRecord
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BeforeParserFetchTemplateRevisionRecord',
|
|
|
|
|
[ $contextTitle, $title, &$skip, &$revRecord ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-06 11:47:22 +00:00
|
|
|
public function onBeforeRevertedTagUpdate( $wikiPage, $user,
|
|
|
|
|
$summary, $flags, $revisionRecord, $editResult, &$approved
|
2021-07-22 03:11:47 +00:00
|
|
|
): void {
|
2020-07-06 11:47:22 +00:00
|
|
|
$this->container->run(
|
|
|
|
|
'BeforeRevertedTagUpdate',
|
|
|
|
|
[ $wikiPage, $user, $summary, $flags, $revisionRecord, $editResult,
|
|
|
|
|
&$approved ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onBeforeWelcomeCreation( &$welcome_creation_msg,
|
|
|
|
|
&$injected_html
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BeforeWelcomeCreation',
|
|
|
|
|
[ &$welcome_creation_msg, &$injected_html ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBitmapHandlerCheckImageArea( $image, &$params,
|
|
|
|
|
&$checkImageAreaHookResult
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BitmapHandlerCheckImageArea',
|
|
|
|
|
[ $image, &$params, &$checkImageAreaHookResult ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBitmapHandlerTransform( $handler, $image, &$scalerParams,
|
|
|
|
|
&$mto
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BitmapHandlerTransform',
|
|
|
|
|
[ $handler, $image, &$scalerParams, &$mto ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBlockIp( $block, $user, &$reason ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BlockIp',
|
|
|
|
|
[ $block, $user, &$reason ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBlockIpComplete( $block, $user, $priorBlock ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BlockIpComplete',
|
|
|
|
|
[ $block, $user, $priorBlock ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onBookInformation( $isbn, $output ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'BookInformation',
|
|
|
|
|
[ $isbn, $output ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onCanonicalNamespaces( &$namespaces ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'CanonicalNamespaces',
|
|
|
|
|
[ &$namespaces ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onCategoryAfterPageAdded( $category, $wikiPage ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'CategoryAfterPageAdded',
|
|
|
|
|
[ $category, $wikiPage ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onCategoryAfterPageRemoved( $category, $wikiPage, $id ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'CategoryAfterPageRemoved',
|
|
|
|
|
[ $category, $wikiPage, $id ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onCategoryPageView( $catpage ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'CategoryPageView',
|
|
|
|
|
[ $catpage ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onCategoryViewer__doCategoryQuery( $type, $res ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'CategoryViewer::doCategoryQuery',
|
|
|
|
|
[ $type, $res ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onCategoryViewer__generateLink( $type, $title, $html, &$link ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'CategoryViewer::generateLink',
|
|
|
|
|
[ $type, $title, $html, &$link ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangeAuthenticationDataAudit( $req, $status ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangeAuthenticationDataAudit',
|
|
|
|
|
[ $req, $status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangesListInitRows( $changesList, $rows ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangesListInitRows',
|
|
|
|
|
[ $changesList, $rows ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangesListInsertArticleLink( $changesList, &$articlelink,
|
|
|
|
|
&$s, $rc, $unpatrolled, $watched
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangesListInsertArticleLink',
|
|
|
|
|
[ $changesList, &$articlelink, &$s, $rc, $unpatrolled, $watched ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangesListSpecialPageQuery( $name, &$tables, &$fields,
|
|
|
|
|
&$conds, &$query_options, &$join_conds, $opts
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangesListSpecialPageQuery',
|
|
|
|
|
[ $name, &$tables, &$fields, &$conds, &$query_options,
|
|
|
|
|
&$join_conds, $opts ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangesListSpecialPageStructuredFilters( $special ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangesListSpecialPageStructuredFilters',
|
|
|
|
|
[ $special ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangeTagAfterDelete( $tag, &$status ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangeTagAfterDelete',
|
|
|
|
|
[ $tag, &$status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangeTagCanCreate( $tag, $user, &$status ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangeTagCanCreate',
|
|
|
|
|
[ $tag, $user, &$status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangeTagCanDelete( $tag, $user, &$status ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangeTagCanDelete',
|
|
|
|
|
[ $tag, $user, &$status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangeTagsAfterUpdateTags( $addedTags, $removedTags,
|
|
|
|
|
$prevTags, $rc_id, $rev_id, $log_id, $params, $rc, $user
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangeTagsAfterUpdateTags',
|
|
|
|
|
[ $addedTags, $removedTags, $prevTags, $rc_id, $rev_id, $log_id,
|
|
|
|
|
$params, $rc, $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangeTagsAllowedAdd( &$allowedTags, $addTags, $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangeTagsAllowedAdd',
|
|
|
|
|
[ &$allowedTags, $addTags, $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangeTagsListActive( &$tags ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangeTagsListActive',
|
|
|
|
|
[ &$tags ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onChangeUserGroups( $performer, $user, &$add, &$remove ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ChangeUserGroups',
|
|
|
|
|
[ $performer, $user, &$add, &$remove ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onCollation__factory( $collationName, &$collationObject ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'Collation::factory',
|
|
|
|
|
[ $collationName, &$collationObject ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onConfirmEmailComplete( $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ConfirmEmailComplete',
|
|
|
|
|
[ $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onContentAlterParserOutput( $content, $title, $parserOutput ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ContentAlterParserOutput',
|
|
|
|
|
[ $content, $title, $parserOutput ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onContentGetParserOutput( $content, $title, $revId, $options,
|
2023-08-14 18:23:17 +00:00
|
|
|
$generateHtml, &$parserOutput
|
2020-05-01 02:23:27 +00:00
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ContentGetParserOutput',
|
2023-08-14 18:23:17 +00:00
|
|
|
[ $content, $title, $revId, $options, $generateHtml, &$parserOutput ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onContentHandlerDefaultModelFor( $title, &$model ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ContentHandlerDefaultModelFor',
|
|
|
|
|
[ $title, &$model ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-30 11:12:02 +00:00
|
|
|
public function onContentHandlerForModelID( $modelName, &$handler ) {
|
2020-05-01 02:23:27 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'ContentHandlerForModelID',
|
2023-09-30 11:12:02 +00:00
|
|
|
[ $modelName, &$handler ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onContentModelCanBeUsedOn( $contentModel, $title, &$ok ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ContentModelCanBeUsedOn',
|
|
|
|
|
[ $contentModel, $title, &$ok ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onContentSecurityPolicyDefaultSource( &$defaultSrc,
|
|
|
|
|
$policyConfig, $mode
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ContentSecurityPolicyDefaultSource',
|
|
|
|
|
[ &$defaultSrc, $policyConfig, $mode ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onContentSecurityPolicyDirectives( &$directives, $policyConfig,
|
|
|
|
|
$mode
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ContentSecurityPolicyDirectives',
|
|
|
|
|
[ &$directives, $policyConfig, $mode ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onContentSecurityPolicyScriptSource( &$scriptSrc,
|
|
|
|
|
$policyConfig, $mode
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ContentSecurityPolicyScriptSource',
|
|
|
|
|
[ &$scriptSrc, $policyConfig, $mode ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onContribsPager__getQueryInfo( $pager, &$queryInfo ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ContribsPager::getQueryInfo',
|
|
|
|
|
[ $pager, &$queryInfo ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onContribsPager__reallyDoQuery( &$data, $pager, $offset,
|
|
|
|
|
$limit, $descending
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ContribsPager::reallyDoQuery',
|
|
|
|
|
[ &$data, $pager, $offset, $limit, $descending ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-30 00:18:41 +00:00
|
|
|
public function onContributeCards( &$cards ): void {
|
|
|
|
|
$this->container->run(
|
2022-09-28 14:35:34 +00:00
|
|
|
'ContributeCards',
|
|
|
|
|
[ &$cards ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onContributionsLineEnding( $page, &$ret, $row, &$classes,
|
|
|
|
|
&$attribs
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ContributionsLineEnding',
|
|
|
|
|
[ $page, &$ret, $row, &$classes, &$attribs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-04 15:25:40 +00:00
|
|
|
public function onContributionsToolLinks( $id, Title $title, array &$tools, SpecialPage $specialPage ) {
|
2020-05-01 02:23:27 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'ContributionsToolLinks',
|
|
|
|
|
[ $id, $title, &$tools, $specialPage ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onConvertContent( $content, $toModel, $lossy, &$result ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ConvertContent',
|
|
|
|
|
[ $content, $toModel, $lossy, &$result ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onCustomEditor( $article, $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'CustomEditor',
|
|
|
|
|
[ $article, $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDeletedContribsPager__reallyDoQuery( &$data, $pager, $offset,
|
|
|
|
|
$limit, $descending
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DeletedContribsPager::reallyDoQuery',
|
|
|
|
|
[ &$data, $pager, $offset, $limit, $descending ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDeletedContributionsLineEnding( $page, &$ret, $row,
|
|
|
|
|
&$classes, &$attribs
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DeletedContributionsLineEnding',
|
|
|
|
|
[ $page, &$ret, $row, &$classes, &$attribs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDeleteUnknownPreferences( &$where, $db ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DeleteUnknownPreferences',
|
|
|
|
|
[ &$where, $db ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineAfterLoadNewText( $differenceEngine ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineAfterLoadNewText',
|
|
|
|
|
[ $differenceEngine ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-22 05:41:21 +00:00
|
|
|
public function onTextSlotDiffRendererTablePrefix(
|
|
|
|
|
\TextSlotDiffRenderer $textSlotDiffRenderer,
|
|
|
|
|
IContextSource $context,
|
|
|
|
|
array &$parts
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TextSlotDiffRendererTablePrefix',
|
|
|
|
|
[ $textSlotDiffRenderer, $context, &$parts ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onDifferenceEngineLoadTextAfterNewContentIsLoaded(
|
|
|
|
|
$differenceEngine
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineLoadTextAfterNewContentIsLoaded',
|
|
|
|
|
[ $differenceEngine ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineMarkPatrolledLink( $differenceEngine,
|
|
|
|
|
&$markAsPatrolledLink, $rcid
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineMarkPatrolledLink',
|
|
|
|
|
[ $differenceEngine, &$markAsPatrolledLink, $rcid ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineMarkPatrolledRCID( &$rcid, $differenceEngine,
|
|
|
|
|
$change, $user
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineMarkPatrolledRCID',
|
|
|
|
|
[ &$rcid, $differenceEngine, $change, $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineNewHeader( $differenceEngine, &$newHeader,
|
|
|
|
|
$formattedRevisionTools, $nextlink, $rollback, $newminor, $diffOnly, $rdel,
|
|
|
|
|
$unhide
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineNewHeader',
|
|
|
|
|
[ $differenceEngine, &$newHeader, $formattedRevisionTools,
|
|
|
|
|
$nextlink, $rollback, $newminor, $diffOnly, $rdel, $unhide ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineOldHeader( $differenceEngine, &$oldHeader,
|
|
|
|
|
$prevlink, $oldminor, $diffOnly, $ldel, $unhide
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineOldHeader',
|
|
|
|
|
[ $differenceEngine, &$oldHeader, $prevlink, $oldminor, $diffOnly,
|
|
|
|
|
$ldel, $unhide ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineOldHeaderNoOldRev( &$oldHeader ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineOldHeaderNoOldRev',
|
|
|
|
|
[ &$oldHeader ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineRenderRevisionAddParserOutput(
|
|
|
|
|
$differenceEngine, $out, $parserOutput, $wikiPage
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineRenderRevisionAddParserOutput',
|
|
|
|
|
[ $differenceEngine, $out, $parserOutput, $wikiPage ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineRenderRevisionShowFinalPatrolLink() {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineRenderRevisionShowFinalPatrolLink',
|
|
|
|
|
[]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineShowDiff( $differenceEngine ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineShowDiff',
|
|
|
|
|
[ $differenceEngine ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineShowDiffPage( $out ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineShowDiffPage',
|
|
|
|
|
[ $out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineShowDiffPageMaybeShowMissingRevision(
|
|
|
|
|
$differenceEngine
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineShowDiffPageMaybeShowMissingRevision',
|
|
|
|
|
[ $differenceEngine ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onDifferenceEngineShowEmptyOldContent( $differenceEngine ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineShowEmptyOldContent',
|
|
|
|
|
[ $differenceEngine ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-18 13:20:49 +00:00
|
|
|
public function onDifferenceEngineViewHeader( $differenceEngine ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DifferenceEngineViewHeader',
|
|
|
|
|
[ $differenceEngine ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-15 21:19:04 +00:00
|
|
|
public function onDiffTools( $newRevRecord, &$links, $oldRevRecord, $userIdentity ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DiffTools',
|
|
|
|
|
[ $newRevRecord, &$links, $oldRevRecord, $userIdentity ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onDisplayOldSubtitle( $article, &$oldid ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'DisplayOldSubtitle',
|
|
|
|
|
[ $article, &$oldid ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditFilter( $editor, $text, $section, &$error, $summary ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditFilter',
|
|
|
|
|
[ $editor, $text, $section, &$error, $summary ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditFilterMergedContent( $context, $content, $status,
|
|
|
|
|
$summary, $user, $minoredit
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditFilterMergedContent',
|
|
|
|
|
[ $context, $content, $status, $summary, $user, $minoredit ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditFormInitialText( $editPage ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditFormInitialText',
|
|
|
|
|
[ $editPage ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditFormPreloadText( &$text, $title ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditFormPreloadText',
|
|
|
|
|
[ &$text, $title ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPageBeforeConflictDiff( $editor, $out ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPageBeforeConflictDiff',
|
|
|
|
|
[ $editor, $out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPageBeforeEditButtons( $editpage, &$buttons, &$tabindex ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPageBeforeEditButtons',
|
|
|
|
|
[ $editpage, &$buttons, &$tabindex ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPageBeforeEditToolbar( &$toolbar ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPageBeforeEditToolbar',
|
|
|
|
|
[ &$toolbar ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPageCopyrightWarning( $title, &$msg ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPageCopyrightWarning',
|
|
|
|
|
[ $title, &$msg ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPageGetCheckboxesDefinition( $editpage, &$checkboxes ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPageGetCheckboxesDefinition',
|
|
|
|
|
[ $editpage, &$checkboxes ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPageGetDiffContent( $editPage, &$newtext ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPageGetDiffContent',
|
|
|
|
|
[ $editPage, &$newtext ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPageGetPreviewContent( $editPage, &$content ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPageGetPreviewContent',
|
|
|
|
|
[ $editPage, &$content ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPageNoSuchSection( $editpage, &$res ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPageNoSuchSection',
|
|
|
|
|
[ $editpage, &$res ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPageTosSummary( $title, &$msg ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPageTosSummary',
|
|
|
|
|
[ $title, &$msg ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPage__attemptSave( $editpage_Obj ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPage::attemptSave',
|
|
|
|
|
[ $editpage_Obj ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPage__attemptSave_after( $editpage_Obj, $status,
|
|
|
|
|
$resultDetails
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPage::attemptSave:after',
|
|
|
|
|
[ $editpage_Obj, $status, $resultDetails ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPage__importFormData( $editpage, $request ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPage::importFormData',
|
|
|
|
|
[ $editpage, $request ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPage__showEditForm_fields( $editor, $out ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPage::showEditForm:fields',
|
|
|
|
|
[ $editor, $out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPage__showEditForm_initial( $editor, $out ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPage::showEditForm:initial',
|
|
|
|
|
[ $editor, $out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPage__showReadOnlyForm_initial( $editor, $out ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPage::showReadOnlyForm:initial',
|
|
|
|
|
[ $editor, $out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEditPage__showStandardInputs_options( $editor, $out,
|
|
|
|
|
&$tabindex
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EditPage::showStandardInputs:options',
|
|
|
|
|
[ $editor, $out, &$tabindex ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEmailConfirmed( $user, &$confirmed ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EmailConfirmed',
|
|
|
|
|
[ $user, &$confirmed ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEmailUser( &$to, &$from, &$subject, &$text, &$error ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EmailUser',
|
|
|
|
|
[ &$to, &$from, &$subject, &$text, &$error ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEmailUserCC( &$to, &$from, &$subject, &$text ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EmailUserCC',
|
|
|
|
|
[ &$to, &$from, &$subject, &$text ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEmailUserComplete( $to, $from, $subject, $text ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EmailUserComplete',
|
|
|
|
|
[ $to, $from, $subject, $text ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEmailUserForm( &$form ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EmailUserForm',
|
|
|
|
|
[ &$form ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEmailUserPermissionsErrors( $user, $editToken, &$hookErr ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EmailUserPermissionsErrors',
|
|
|
|
|
[ $user, $editToken, &$hookErr ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-22 14:58:04 +00:00
|
|
|
public function onEmailUserAuthorizeSend( Authority $sender, StatusValue $status ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EmailUserAuthorizeSend',
|
|
|
|
|
[ $sender, $status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEmailUserSendEmail(
|
|
|
|
|
Authority $from,
|
|
|
|
|
MailAddress $fromAddress,
|
|
|
|
|
UserEmailContact $to,
|
|
|
|
|
MailAddress $toAddress,
|
|
|
|
|
string $subject,
|
|
|
|
|
string $text,
|
|
|
|
|
StatusValue $status
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EmailUserSendEmail',
|
|
|
|
|
[ $from, $fromAddress, $to, $toAddress, $subject, $text, $status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onEnhancedChangesListModifyBlockLineData( $changesList, &$data,
|
|
|
|
|
$rc
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EnhancedChangesListModifyBlockLineData',
|
|
|
|
|
[ $changesList, &$data, $rc ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEnhancedChangesListModifyLineData( $changesList, &$data,
|
|
|
|
|
$block, $rc, &$classes, &$attribs
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EnhancedChangesListModifyLineData',
|
|
|
|
|
[ $changesList, &$data, $block, $rc, &$classes, &$attribs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onEnhancedChangesList__getLogText( $changesList, &$links,
|
|
|
|
|
$block
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'EnhancedChangesList::getLogText',
|
|
|
|
|
[ $changesList, &$links, $block ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onExemptFromAccountCreationThrottle( $ip ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ExemptFromAccountCreationThrottle',
|
|
|
|
|
[ $ip ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onExtensionTypes( &$extTypes ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ExtensionTypes',
|
|
|
|
|
[ &$extTypes ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onFetchChangesList( $user, $skin, &$list, $groups ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'FetchChangesList',
|
|
|
|
|
[ $user, $skin, &$list, $groups ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onFileDeleteComplete( $file, $oldimage, $article, $user,
|
|
|
|
|
$reason
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'FileDeleteComplete',
|
|
|
|
|
[ $file, $oldimage, $article, $user, $reason ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onFileTransformed( $file, $thumb, $tmpThumbPath, $thumbPath ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'FileTransformed',
|
|
|
|
|
[ $file, $thumb, $tmpThumbPath, $thumbPath ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onFileUndeleteComplete( $title, $fileVersions, $user, $reason ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'FileUndeleteComplete',
|
|
|
|
|
[ $title, $fileVersions, $user, $reason ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onFileUpload( $file, $reupload, $hasDescription ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'FileUpload',
|
|
|
|
|
[ $file, $reupload, $hasDescription ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onFormatAutocomments( &$comment, $pre, $auto, $post, $title,
|
|
|
|
|
$local, $wikiId
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'FormatAutocomments',
|
|
|
|
|
[ &$comment, $pre, $auto, $post, $title, $local, $wikiId ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGalleryGetModes( &$modeArray ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GalleryGetModes',
|
|
|
|
|
[ &$modeArray ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-04-19 10:18:20 +00:00
|
|
|
public function onGetAllBlockActions( &$actions ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetAllBlockActions',
|
|
|
|
|
[ &$actions ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onGetAutoPromoteGroups( $user, &$promote ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetAutoPromoteGroups',
|
|
|
|
|
[ $user, &$promote ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-28 10:31:27 +00:00
|
|
|
public function onGetActionName( IContextSource $context, string &$action ): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'GetActionName',
|
|
|
|
|
[ $context, &$action ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onGetCacheVaryCookies( $out, &$cookies ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetCacheVaryCookies',
|
|
|
|
|
[ $out, &$cookies ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetCanonicalURL( $title, &$url, $query ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetCanonicalURL',
|
|
|
|
|
[ $title, &$url, $query ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetContentModels( &$models ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetContentModels',
|
|
|
|
|
[ &$models ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetDefaultSortkey( $title, &$sortkey ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetDefaultSortkey',
|
|
|
|
|
[ $title, &$sortkey ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetDifferenceEngine( $context, $old, $new, $refreshCache,
|
|
|
|
|
$unhide, &$differenceEngine
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetDifferenceEngine',
|
|
|
|
|
[ $context, $old, $new, $refreshCache, $unhide,
|
|
|
|
|
&$differenceEngine ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetDoubleUnderscoreIDs( &$doubleUnderscoreIDs ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetDoubleUnderscoreIDs',
|
|
|
|
|
[ &$doubleUnderscoreIDs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetExtendedMetadata( &$combinedMeta, $file, $context,
|
|
|
|
|
$single, &$maxCacheTime
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetExtendedMetadata',
|
|
|
|
|
[ &$combinedMeta, $file, $context, $single, &$maxCacheTime ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetFullURL( $title, &$url, $query ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetFullURL',
|
|
|
|
|
[ $title, &$url, $query ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetHumanTimestamp( &$output, $timestamp, $relativeTo, $user,
|
|
|
|
|
$lang
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetHumanTimestamp',
|
|
|
|
|
[ &$output, $timestamp, $relativeTo, $user, $lang ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetInternalURL( $title, &$url, $query ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetInternalURL',
|
|
|
|
|
[ $title, &$url, $query ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetIP( &$ip ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetIP',
|
|
|
|
|
[ &$ip ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetLangPreferredVariant( &$req ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetLangPreferredVariant',
|
|
|
|
|
[ &$req ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetLinkColours( $linkcolour_ids, &$colours, $title ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetLinkColours',
|
|
|
|
|
[ $linkcolour_ids, &$colours, $title ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetLocalURL( $title, &$url, $query ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetLocalURL',
|
|
|
|
|
[ $title, &$url, $query ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetLocalURL__Article( $title, &$url ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetLocalURL::Article',
|
|
|
|
|
[ $title, &$url ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetLocalURL__Internal( $title, &$url, $query ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetLocalURL::Internal',
|
|
|
|
|
[ $title, &$url, $query ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetLogTypesOnUser( &$types ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetLogTypesOnUser',
|
|
|
|
|
[ &$types ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-10 16:28:20 +00:00
|
|
|
public function onGetMagicVariableIDs( &$variableIDs ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetMagicVariableIDs',
|
|
|
|
|
[ &$variableIDs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onGetMetadataVersion( &$version ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetMetadataVersion',
|
|
|
|
|
[ &$version ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetNewMessagesAlert( &$newMessagesAlert, $newtalks, $user,
|
|
|
|
|
$out
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetNewMessagesAlert',
|
|
|
|
|
[ &$newMessagesAlert, $newtalks, $user, $out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetPreferences( $user, &$preferences ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetPreferences',
|
|
|
|
|
[ $user, &$preferences ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetRelativeTimestamp( &$output, &$diff, $timestamp,
|
|
|
|
|
$relativeTo, $user, $lang
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetRelativeTimestamp',
|
|
|
|
|
[ &$output, &$diff, $timestamp, $relativeTo, $user, $lang ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetSlotDiffRenderer( $contentHandler, &$slotDiffRenderer,
|
|
|
|
|
$context
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetSlotDiffRenderer',
|
|
|
|
|
[ $contentHandler, &$slotDiffRenderer, $context ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetUserBlock( $user, $ip, &$block ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetUserBlock',
|
|
|
|
|
[ $user, $ip, &$block ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-01 11:39:25 +00:00
|
|
|
public function onPermissionErrorAudit(
|
|
|
|
|
LinkTarget $title,
|
|
|
|
|
UserIdentity $user,
|
|
|
|
|
string $action,
|
|
|
|
|
string $rigor,
|
|
|
|
|
array $errors
|
|
|
|
|
): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'PermissionErrorAudit',
|
|
|
|
|
[ $title, $user, $action, $rigor, $errors ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onGetUserPermissionsErrors( $title, $user, $action, &$result ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'getUserPermissionsErrors',
|
|
|
|
|
[ $title, $user, $action, &$result ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGetUserPermissionsErrorsExpensive( $title, $user, $action,
|
|
|
|
|
&$result
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'getUserPermissionsErrorsExpensive',
|
|
|
|
|
[ $title, $user, $action, &$result ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onGitViewers( &$extTypes ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GitViewers',
|
|
|
|
|
[ &$extTypes ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-04 15:25:40 +00:00
|
|
|
public function onHistoryPageToolLinks( IContextSource $context, LinkRenderer $linkRenderer, array &$links ) {
|
2020-05-01 02:23:27 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'HistoryPageToolLinks',
|
|
|
|
|
[ $context, $linkRenderer, &$links ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-15 21:19:04 +00:00
|
|
|
public function onHistoryTools( $revRecord, &$links, $prevRevRecord, $userIdentity ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'HistoryTools',
|
|
|
|
|
[ $revRecord, &$links, $prevRevRecord, $userIdentity ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onHtmlCacheUpdaterAppendUrls( $title, $mode, &$append ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'HtmlCacheUpdaterAppendUrls',
|
|
|
|
|
[ $title, $mode, &$append ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onHtmlCacheUpdaterVaryUrls( $urls, &$append ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'HtmlCacheUpdaterVaryUrls',
|
|
|
|
|
[ $urls, &$append ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onHTMLFileCache__useFileCache( $context ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'HTMLFileCache::useFileCache',
|
|
|
|
|
[ $context ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onHtmlPageLinkRendererBegin( $linkRenderer, $target, &$text,
|
|
|
|
|
&$customAttribs, &$query, &$ret
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'HtmlPageLinkRendererBegin',
|
|
|
|
|
[ $linkRenderer, $target, &$text, &$customAttribs, &$query, &$ret ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onHtmlPageLinkRendererEnd( $linkRenderer, $target, $isKnown,
|
|
|
|
|
&$text, &$attribs, &$ret
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'HtmlPageLinkRendererEnd',
|
|
|
|
|
[ $linkRenderer, $target, $isKnown, &$text, &$attribs, &$ret ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImageBeforeProduceHTML( $linker, &$title, &$file,
|
|
|
|
|
&$frameParams, &$handlerParams, &$time, &$res, $parser, &$query, &$widthOption
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImageBeforeProduceHTML',
|
|
|
|
|
[ $linker, &$title, &$file, &$frameParams, &$handlerParams, &$time,
|
|
|
|
|
&$res, $parser, &$query, &$widthOption ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImageOpenShowImageInlineBefore( $imagePage, $output ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImageOpenShowImageInlineBefore',
|
|
|
|
|
[ $imagePage, $output ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImagePageAfterImageLinks( $imagePage, &$html ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImagePageAfterImageLinks',
|
|
|
|
|
[ $imagePage, &$html ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImagePageFileHistoryLine( $imageHistoryList, $file, &$line, &$css ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImagePageFileHistoryLine',
|
|
|
|
|
[ $imageHistoryList, $file, &$line, &$css ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImagePageFindFile( $page, &$file, &$displayFile ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImagePageFindFile',
|
|
|
|
|
[ $page, &$file, &$displayFile ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImagePageShowTOC( $page, &$toc ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImagePageShowTOC',
|
|
|
|
|
[ $page, &$toc ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImgAuthBeforeStream( &$title, &$path, &$name, &$result ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImgAuthBeforeStream',
|
|
|
|
|
[ &$title, &$path, &$name, &$result ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImgAuthModifyHeaders( $title, &$headers ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImgAuthModifyHeaders',
|
|
|
|
|
[ $title, &$headers ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImportHandleLogItemXMLTag( $reader, $logInfo ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImportHandleLogItemXMLTag',
|
|
|
|
|
[ $reader, $logInfo ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImportHandlePageXMLTag( $reader, &$pageInfo ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImportHandlePageXMLTag',
|
|
|
|
|
[ $reader, &$pageInfo ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImportHandleRevisionXMLTag( $reader, $pageInfo,
|
|
|
|
|
$revisionInfo
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImportHandleRevisionXMLTag',
|
|
|
|
|
[ $reader, $pageInfo, $revisionInfo ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-06 09:16:17 +00:00
|
|
|
public function onImportHandleContentXMLTag( $reader, $contentInfo ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImportHandleContentXMLTag',
|
|
|
|
|
[ $reader, $contentInfo ] );
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onImportHandleToplevelXMLTag( $reader ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImportHandleToplevelXMLTag',
|
|
|
|
|
[ $reader ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImportHandleUnknownUser( $name ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImportHandleUnknownUser',
|
|
|
|
|
[ $name ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImportHandleUploadXMLTag( $reader, $revisionInfo ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImportHandleUploadXMLTag',
|
|
|
|
|
[ $reader, $revisionInfo ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImportLogInterwikiLink( &$fullInterwikiPrefix, &$pageTitle ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImportLogInterwikiLink',
|
|
|
|
|
[ &$fullInterwikiPrefix, &$pageTitle ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onImportSources( &$importSources ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ImportSources',
|
|
|
|
|
[ &$importSources ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onInfoAction( $context, &$pageInfo ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'InfoAction',
|
|
|
|
|
[ $context, &$pageInfo ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onInitializeArticleMaybeRedirect( $title, $request,
|
|
|
|
|
&$ignoreRedirect, &$target, &$article
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'InitializeArticleMaybeRedirect',
|
|
|
|
|
[ $title, $request, &$ignoreRedirect, &$target, &$article ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onInternalParseBeforeLinks( $parser, &$text, $stripState ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'InternalParseBeforeLinks',
|
|
|
|
|
[ $parser, &$text, $stripState ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onInterwikiLoadPrefix( $prefix, &$iwData ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'InterwikiLoadPrefix',
|
|
|
|
|
[ $prefix, &$iwData ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onInvalidateEmailComplete( $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'InvalidateEmailComplete',
|
|
|
|
|
[ $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onIRCLineURL( &$url, &$query, $rc ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'IRCLineURL',
|
|
|
|
|
[ &$url, &$query, $rc ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onIsFileCacheable( $article ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'IsFileCacheable',
|
|
|
|
|
[ $article ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onIsTrustedProxy( $ip, &$result ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'IsTrustedProxy',
|
|
|
|
|
[ $ip, &$result ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onIsUploadAllowedFromUrl( $url, &$allowed ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'IsUploadAllowedFromUrl',
|
|
|
|
|
[ $url, &$allowed ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onIsValidEmailAddr( $addr, &$result ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'isValidEmailAddr',
|
|
|
|
|
[ $addr, &$result ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onIsValidPassword( $password, &$result, $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'isValidPassword',
|
|
|
|
|
[ $password, &$result, $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-14 15:49:20 +00:00
|
|
|
public function onJsonValidateSave( JsonContent $content, PageIdentity $pageIdentity, StatusValue $status ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'JsonValidateSave',
|
|
|
|
|
[ $content, $pageIdentity, &$status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onLanguageGetNamespaces( &$namespaces ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LanguageGetNamespaces',
|
|
|
|
|
[ &$namespaces ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLanguageGetTranslatedLanguageNames( &$names, $code ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LanguageGetTranslatedLanguageNames',
|
|
|
|
|
[ &$names, $code ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLanguageLinks( $title, &$links, &$linkFlags ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LanguageLinks',
|
|
|
|
|
[ $title, &$links, &$linkFlags ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLanguageSelector( $out, $cssClassName ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LanguageSelector',
|
|
|
|
|
[ $out, $cssClassName ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLanguage__getMessagesFileName( $code, &$file ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'Language::getMessagesFileName',
|
|
|
|
|
[ $code, &$file ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-12 10:05:37 +00:00
|
|
|
public function onLinkerGenerateRollbackLink( $revRecord, $context, $options, &$inner ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LinkerGenerateRollbackLink',
|
|
|
|
|
[ $revRecord, $context, $options, &$inner ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onLinkerMakeExternalImage( &$url, &$alt, &$img ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LinkerMakeExternalImage',
|
|
|
|
|
[ &$url, &$alt, &$img ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLinkerMakeExternalLink( &$url, &$text, &$link, &$attribs,
|
|
|
|
|
$linkType
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LinkerMakeExternalLink',
|
|
|
|
|
[ &$url, &$text, &$link, &$attribs, $linkType ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLinkerMakeMediaLinkFile( $title, $file, &$html, &$attribs,
|
|
|
|
|
&$ret
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LinkerMakeMediaLinkFile',
|
|
|
|
|
[ $title, $file, &$html, &$attribs, &$ret ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLinksUpdate( $linksUpdate ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LinksUpdate',
|
|
|
|
|
[ $linksUpdate ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLinksUpdateComplete( $linksUpdate, $ticket ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LinksUpdateComplete',
|
|
|
|
|
[ $linksUpdate, $ticket ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onListDefinedTags( &$tags ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ListDefinedTags',
|
|
|
|
|
[ &$tags ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLoadExtensionSchemaUpdates( $updater ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LoadExtensionSchemaUpdates',
|
2020-08-10 00:24:11 +00:00
|
|
|
[ $updater ],
|
|
|
|
|
[ 'noServices' => true ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-05 21:03:14 +00:00
|
|
|
public function onLocalFilePurgeThumbnails( $file, $archiveName, $urls ) {
|
2020-05-01 02:23:27 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'LocalFilePurgeThumbnails',
|
2020-12-05 21:03:14 +00:00
|
|
|
[ $file, $archiveName, $urls ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLocalFile__getHistory( $file, &$tables, &$fields, &$conds,
|
|
|
|
|
&$opts, &$join_conds
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LocalFile::getHistory',
|
|
|
|
|
[ $file, &$tables, &$fields, &$conds, &$opts, &$join_conds ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLocalisationCacheRecache( $cache, $code, &$alldata, $unused ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LocalisationCacheRecache',
|
|
|
|
|
[ $cache, $code, &$alldata, $unused ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLocalisationCacheRecacheFallback( $cache, $code, &$alldata ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LocalisationCacheRecacheFallback',
|
|
|
|
|
[ $cache, $code, &$alldata ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLocalUserCreated( $user, $autocreated ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LocalUserCreated',
|
|
|
|
|
[ $user, $autocreated ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLogEventsListGetExtraInputs( $type, $logEventsList, &$input,
|
|
|
|
|
&$formDescriptor
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LogEventsListGetExtraInputs',
|
|
|
|
|
[ $type, $logEventsList, &$input, &$formDescriptor ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLogEventsListLineEnding( $page, &$ret, $entry, &$classes,
|
|
|
|
|
&$attribs
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LogEventsListLineEnding',
|
|
|
|
|
[ $page, &$ret, $entry, &$classes, &$attribs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLogEventsListShowLogExtract( &$s, $types, $page, $user,
|
|
|
|
|
$param
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LogEventsListShowLogExtract',
|
|
|
|
|
[ &$s, $types, $page, $user, $param ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLogException( $e, $suppressed ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LogException',
|
|
|
|
|
[ $e, $suppressed ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-14 09:55:35 +00:00
|
|
|
public function onLoginFormValidErrorMessages( array &$messages ) {
|
2020-05-01 02:23:27 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'LoginFormValidErrorMessages',
|
|
|
|
|
[ &$messages ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLogLine( $log_type, $log_action, $title, $paramArray,
|
|
|
|
|
&$comment, &$revert, $time
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LogLine',
|
|
|
|
|
[ $log_type, $log_action, $title, $paramArray, &$comment,
|
|
|
|
|
&$revert, $time ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onLonelyPagesQuery( &$tables, &$conds, &$joinConds ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'LonelyPagesQuery',
|
|
|
|
|
[ &$tables, &$conds, &$joinConds ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMagicWordwgVariableIDs( &$variableIDs ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MagicWordwgVariableIDs',
|
|
|
|
|
[ &$variableIDs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMaintenanceRefreshLinksInit( $refreshLinks ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MaintenanceRefreshLinksInit',
|
|
|
|
|
[ $refreshLinks ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-23 23:24:38 +00:00
|
|
|
public function onMaintenanceShellStart(): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'MaintenanceShellStart',
|
|
|
|
|
[],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onMaintenanceUpdateAddParams( &$params ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MaintenanceUpdateAddParams',
|
|
|
|
|
[ &$params ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-22 03:11:47 +00:00
|
|
|
public function onMakeGlobalVariablesScript( &$vars, $out ): void {
|
2021-03-10 23:57:43 +00:00
|
|
|
$this->container->run(
|
2020-05-01 02:23:27 +00:00
|
|
|
'MakeGlobalVariablesScript',
|
2021-03-10 23:57:43 +00:00
|
|
|
[ &$vars, $out ],
|
|
|
|
|
[ 'abortable' => false ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-22 03:11:47 +00:00
|
|
|
public function onManualLogEntryBeforePublish( $logEntry ): void {
|
2020-06-17 02:47:41 +00:00
|
|
|
$this->container->run(
|
2020-05-01 02:23:27 +00:00
|
|
|
'ManualLogEntryBeforePublish',
|
|
|
|
|
[ $logEntry ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMarkPatrolled( $rcid, $user, $wcOnlySysopsCanPatrol, $auto,
|
|
|
|
|
&$tags
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MarkPatrolled',
|
|
|
|
|
[ $rcid, $user, $wcOnlySysopsCanPatrol, $auto, &$tags ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMarkPatrolledComplete( $rcid, $user, $wcOnlySysopsCanPatrol,
|
|
|
|
|
$auto
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MarkPatrolledComplete',
|
|
|
|
|
[ $rcid, $user, $wcOnlySysopsCanPatrol, $auto ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMediaWikiPerformAction( $output, $article, $title, $user,
|
|
|
|
|
$request, $mediaWiki
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MediaWikiPerformAction',
|
|
|
|
|
[ $output, $article, $title, $user, $request, $mediaWiki ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMediaWikiServices( $services ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MediaWikiServices',
|
2021-06-22 15:14:02 +00:00
|
|
|
[ $services ],
|
|
|
|
|
[ 'noServices' => true ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-28 11:31:48 +00:00
|
|
|
public function onMessageCacheFetchOverrides( array &$messages ): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'MessageCacheFetchOverrides',
|
|
|
|
|
[ &$messages ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onMessageCacheReplace( $title, $text ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MessageCacheReplace',
|
|
|
|
|
[ $title, $text ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMessageCache__get( &$key ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MessageCache::get',
|
|
|
|
|
[ &$key ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMessagesPreLoad( $title, &$message, $code ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MessagesPreLoad',
|
|
|
|
|
[ $title, &$message, $code ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMimeMagicGuessFromContent( $mimeMagic, &$head, &$tail, $file,
|
|
|
|
|
&$mime
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MimeMagicGuessFromContent',
|
|
|
|
|
[ $mimeMagic, &$head, &$tail, $file, &$mime ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMimeMagicImproveFromExtension( $mimeMagic, $ext, &$mime ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MimeMagicImproveFromExtension',
|
|
|
|
|
[ $mimeMagic, $ext, &$mime ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMimeMagicInit( $mimeMagic ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MimeMagicInit',
|
|
|
|
|
[ $mimeMagic ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-14 18:24:53 +00:00
|
|
|
public function onGetBlockErrorMessageKey( $block, &$key ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'GetBlockErrorMessageKey',
|
|
|
|
|
[ $block, &$key ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onModifyExportQuery( $db, &$tables, $cond, &$opts,
|
|
|
|
|
&$join_conds, &$conds
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ModifyExportQuery',
|
|
|
|
|
[ $db, &$tables, $cond, &$opts, &$join_conds, &$conds ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMovePageCheckPermissions( $oldTitle, $newTitle, $user,
|
|
|
|
|
$reason, $status
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MovePageCheckPermissions',
|
|
|
|
|
[ $oldTitle, $newTitle, $user, $reason, $status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMovePageIsValidMove( $oldTitle, $newTitle, $status ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MovePageIsValidMove',
|
|
|
|
|
[ $oldTitle, $newTitle, $status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onMultiContentSave( $renderedRevision, $user, $summary, $flags,
|
|
|
|
|
$status
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'MultiContentSave',
|
|
|
|
|
[ $renderedRevision, $user, $summary, $flags, $status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onNamespaceIsMovable( $index, &$result ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'NamespaceIsMovable',
|
|
|
|
|
[ $index, &$result ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onNewDifferenceEngine( $title, &$oldId, &$newId, $old, $new ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'NewDifferenceEngine',
|
|
|
|
|
[ $title, &$oldId, &$newId, $old, $new ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onNewPagesLineEnding( $page, &$ret, $row, &$classes, &$attribs ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'NewPagesLineEnding',
|
|
|
|
|
[ $page, &$ret, $row, &$classes, &$attribs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onOldChangesListRecentChangesLine( $changeslist, &$s, $rc,
|
|
|
|
|
&$classes, &$attribs
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'OldChangesListRecentChangesLine',
|
|
|
|
|
[ $changeslist, &$s, $rc, &$classes, &$attribs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onOpenSearchUrls( &$urls ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'OpenSearchUrls',
|
|
|
|
|
[ &$urls ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onOpportunisticLinksUpdate( $page, $title, $parserOutput ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'OpportunisticLinksUpdate',
|
|
|
|
|
[ $page, $title, $parserOutput ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onOtherAutoblockLogLink( &$otherBlockLink ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'OtherAutoblockLogLink',
|
|
|
|
|
[ &$otherBlockLink ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onOtherBlockLogLink( &$otherBlockLink, $ip ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'OtherBlockLogLink',
|
|
|
|
|
[ &$otherBlockLink, $ip ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onOutputPageAfterGetHeadLinksArray( &$tags, $out ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'OutputPageAfterGetHeadLinksArray',
|
|
|
|
|
[ &$tags, $out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onOutputPageBeforeHTML( $out, &$text ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'OutputPageBeforeHTML',
|
|
|
|
|
[ $out, &$text ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-22 03:11:47 +00:00
|
|
|
public function onOutputPageBodyAttributes( $out, $sk, &$bodyAttrs ): void {
|
2020-06-27 02:26:21 +00:00
|
|
|
$this->container->run(
|
2020-05-01 02:23:27 +00:00
|
|
|
'OutputPageBodyAttributes',
|
2020-06-27 02:26:21 +00:00
|
|
|
[ $out, $sk, &$bodyAttrs ],
|
|
|
|
|
[ 'abortable' => false ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onOutputPageCheckLastModified( &$modifiedTimes, $out ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'OutputPageCheckLastModified',
|
|
|
|
|
[ &$modifiedTimes, $out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onOutputPageMakeCategoryLinks( $out, $categories, &$links ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'OutputPageMakeCategoryLinks',
|
|
|
|
|
[ $out, $categories, &$links ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-23 20:50:01 +00:00
|
|
|
public function onOutputPageParserOutput( $outputPage, $parserOutput ): void {
|
2020-06-17 02:47:41 +00:00
|
|
|
$this->container->run(
|
2020-05-01 02:23:27 +00:00
|
|
|
'OutputPageParserOutput',
|
2021-11-23 20:50:01 +00:00
|
|
|
[ $outputPage, $parserOutput ],
|
2020-05-01 02:23:27 +00:00
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-09 22:17:01 +00:00
|
|
|
public function onOutputPageRenderCategoryLink(
|
|
|
|
|
OutputPage $outputPage,
|
|
|
|
|
ProperPageIdentity $categoryTitle,
|
|
|
|
|
string $text,
|
|
|
|
|
?string &$link
|
|
|
|
|
): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'OutputPageRenderCategoryLink',
|
|
|
|
|
[ $outputPage, $categoryTitle, $text, &$link ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onPageContentLanguage( $title, &$pageLang, $userLang ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageContentLanguage',
|
|
|
|
|
[ $title, &$pageLang, $userLang ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPageContentSave( $wikiPage, $user, $content, &$summary,
|
|
|
|
|
$isminor, $iswatch, $section, $flags, $status
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageContentSave',
|
|
|
|
|
[ $wikiPage, $user, $content, &$summary, $isminor, $iswatch,
|
|
|
|
|
$section, $flags, $status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-23 12:11:22 +00:00
|
|
|
public function onPageDelete(
|
|
|
|
|
ProperPageIdentity $page,
|
|
|
|
|
Authority $deleter,
|
|
|
|
|
string $reason,
|
|
|
|
|
StatusValue $status,
|
|
|
|
|
bool $suppress
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageDelete',
|
|
|
|
|
[ $page, $deleter, $reason, $status, $suppress ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPageDeleteComplete(
|
|
|
|
|
ProperPageIdentity $page,
|
|
|
|
|
Authority $deleter,
|
|
|
|
|
string $reason,
|
|
|
|
|
int $pageID,
|
|
|
|
|
RevisionRecord $deletedRev,
|
|
|
|
|
ManualLogEntry $logEntry,
|
|
|
|
|
int $archivedRevisionCount
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageDeleteComplete',
|
|
|
|
|
[ $page, $deleter, $reason, $pageID, $deletedRev, $logEntry, $archivedRevisionCount ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onPageDeletionDataUpdates( $title, $revision, &$updates ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageDeletionDataUpdates',
|
|
|
|
|
[ $title, $revision, &$updates ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-27 22:50:14 +00:00
|
|
|
public function onPageUndelete(
|
|
|
|
|
ProperPageIdentity $page,
|
|
|
|
|
Authority $performer,
|
|
|
|
|
string $reason,
|
|
|
|
|
bool $unsuppress,
|
|
|
|
|
array $timestamps,
|
|
|
|
|
array $fileVersions,
|
|
|
|
|
StatusValue $status
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageUndelete',
|
|
|
|
|
[ $page, $performer, $reason, $unsuppress, $timestamps, $fileVersions, $status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-09 23:32:35 +00:00
|
|
|
public function onPageUndeleteComplete(
|
|
|
|
|
ProperPageIdentity $page,
|
|
|
|
|
Authority $restorer,
|
|
|
|
|
string $reason,
|
|
|
|
|
RevisionRecord $restoredRev,
|
|
|
|
|
ManualLogEntry $logEntry,
|
|
|
|
|
int $restoredRevisionCount,
|
|
|
|
|
bool $created,
|
|
|
|
|
array $restoredPageIds
|
|
|
|
|
): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'PageUndeleteComplete',
|
|
|
|
|
[
|
|
|
|
|
$page,
|
|
|
|
|
$restorer,
|
|
|
|
|
$reason,
|
|
|
|
|
$restoredRev,
|
|
|
|
|
$logEntry,
|
|
|
|
|
$restoredRevisionCount,
|
|
|
|
|
$created,
|
|
|
|
|
$restoredPageIds
|
|
|
|
|
],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onPageHistoryBeforeList( $article, $context ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageHistoryBeforeList',
|
|
|
|
|
[ $article, $context ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPageHistoryLineEnding( $historyAction, &$row, &$s, &$classes,
|
|
|
|
|
&$attribs
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageHistoryLineEnding',
|
|
|
|
|
[ $historyAction, &$row, &$s, &$classes, &$attribs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPageHistoryPager__doBatchLookups( $pager, $result ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageHistoryPager::doBatchLookups',
|
|
|
|
|
[ $pager, $result ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPageHistoryPager__getQueryInfo( $pager, &$queryInfo ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageHistoryPager::getQueryInfo',
|
|
|
|
|
[ $pager, &$queryInfo ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-12 01:15:08 +00:00
|
|
|
public function onPageMoveComplete( $old, $new, $user, $pageid, $redirid, $reason, $revision ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageMoveComplete',
|
|
|
|
|
[ $old, $new, $user, $pageid, $redirid, $reason, $revision ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-17 05:23:50 +00:00
|
|
|
public function onPageMoveCompleting( $old, $new, $user, $pageid, $redirid, $reason, $revision ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageMoveCompleting',
|
|
|
|
|
[ $old, $new, $user, $pageid, $redirid, $reason, $revision ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onPageRenderingHash( &$confstr, $user, &$forOptions ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageRenderingHash',
|
|
|
|
|
[ &$confstr, $user, &$forOptions ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-01 01:31:00 +00:00
|
|
|
public function onPageSaveComplete( $wikiPage, $user, $summary, $flags,
|
2020-06-22 09:40:39 +00:00
|
|
|
$revisionRecord, $editResult
|
2020-06-01 01:31:00 +00:00
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageSaveComplete',
|
2020-06-22 09:40:39 +00:00
|
|
|
[ $wikiPage, $user, $summary, $flags, $revisionRecord, $editResult ]
|
2020-06-01 01:31:00 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onPageViewUpdates( $wikipage, $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PageViewUpdates',
|
|
|
|
|
[ $wikipage, $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserAfterParse( $parser, &$text, $stripState ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserAfterParse',
|
|
|
|
|
[ $parser, &$text, $stripState ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserAfterTidy( $parser, &$text ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserAfterTidy',
|
|
|
|
|
[ $parser, &$text ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserBeforeInternalParse( $parser, &$text, $stripState ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserBeforeInternalParse',
|
|
|
|
|
[ $parser, &$text, $stripState ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserBeforePreprocess( $parser, &$text, $stripState ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserBeforePreprocess',
|
|
|
|
|
[ $parser, &$text, $stripState ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserCacheSaveComplete( $parserCache, $parserOutput, $title,
|
|
|
|
|
$popts, $revId
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserCacheSaveComplete',
|
|
|
|
|
[ $parserCache, $parserOutput, $title, $popts, $revId ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserClearState( $parser ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserClearState',
|
|
|
|
|
[ $parser ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserCloned( $parser ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserCloned',
|
|
|
|
|
[ $parser ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-28 18:26:17 +00:00
|
|
|
public function onParserFetchTemplateData( array $titles, array &$tplData ): bool {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserFetchTemplateData',
|
|
|
|
|
[ $titles, &$tplData ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onParserFirstCallInit( $parser ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserFirstCallInit',
|
|
|
|
|
[ $parser ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserGetVariableValueSwitch( $parser, &$variableCache,
|
|
|
|
|
$magicWordId, &$ret, $frame
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserGetVariableValueSwitch',
|
|
|
|
|
[ $parser, &$variableCache, $magicWordId, &$ret, $frame ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserGetVariableValueTs( $parser, &$time ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserGetVariableValueTs',
|
|
|
|
|
[ $parser, &$time ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserLimitReportFormat( $key, &$value, &$report, $isHTML,
|
|
|
|
|
$localize
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserLimitReportFormat',
|
|
|
|
|
[ $key, &$value, &$report, $isHTML, $localize ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserLimitReportPrepare( $parser, $output ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserLimitReportPrepare',
|
|
|
|
|
[ $parser, $output ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-28 21:04:49 +00:00
|
|
|
public function onParserLogLinterData( string $title, int $revId, array $lints ): bool {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserLogLinterData',
|
|
|
|
|
[ $title, $revId, $lints ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onParserMakeImageParams( $title, $file, &$params, $parser ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserMakeImageParams',
|
|
|
|
|
[ $title, $file, &$params, $parser ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-02 05:42:04 +00:00
|
|
|
public function onParserModifyImageHTML( Parser $parser, File $file,
|
|
|
|
|
array $params, string &$html
|
|
|
|
|
): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'ParserModifyImageHTML',
|
|
|
|
|
[ $parser, $file, $params, &$html ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onParserOptionsRegister( &$defaults, &$inCacheKey, &$lazyLoad ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserOptionsRegister',
|
|
|
|
|
[ &$defaults, &$inCacheKey, &$lazyLoad ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserOutputPostCacheTransform( $parserOutput, &$text,
|
|
|
|
|
&$options
|
2021-07-22 03:11:47 +00:00
|
|
|
): void {
|
2020-06-17 02:47:41 +00:00
|
|
|
$this->container->run(
|
2020-05-01 02:23:27 +00:00
|
|
|
'ParserOutputPostCacheTransform',
|
|
|
|
|
[ $parserOutput, &$text, &$options ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserOutputStashForEdit( $page, $content, $output, $summary,
|
|
|
|
|
$user
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserOutputStashForEdit',
|
|
|
|
|
[ $page, $content, $output, $summary, $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserPreSaveTransformComplete( $parser, &$text ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserPreSaveTransformComplete',
|
|
|
|
|
[ $parser, &$text ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onParserTestGlobals( &$globals ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ParserTestGlobals',
|
|
|
|
|
[ &$globals ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPasswordPoliciesForUser( $user, &$effectivePolicy ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PasswordPoliciesForUser',
|
|
|
|
|
[ $user, &$effectivePolicy ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPerformRetroactiveAutoblock( $block, &$blockIds ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PerformRetroactiveAutoblock',
|
|
|
|
|
[ $block, &$blockIds ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPingLimiter( $user, $action, &$result, $incrBy ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PingLimiter',
|
|
|
|
|
[ $user, $action, &$result, $incrBy ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPlaceNewSection( $content, $oldtext, $subject, &$text ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PlaceNewSection',
|
|
|
|
|
[ $content, $oldtext, $subject, &$text ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPostLoginRedirect( &$returnTo, &$returnToQuery, &$type ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PostLoginRedirect',
|
|
|
|
|
[ &$returnTo, &$returnToQuery, &$type ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPreferencesFormPreSave( $formData, $form, $user, &$result,
|
|
|
|
|
$oldUserOptions
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PreferencesFormPreSave',
|
|
|
|
|
[ $formData, $form, $user, &$result, $oldUserOptions ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-11 23:01:38 +00:00
|
|
|
public function onPreferencesGetIcon( &$iconNames ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PreferencesGetIcon',
|
|
|
|
|
[ &$iconNames ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-15 22:54:18 +00:00
|
|
|
public function onPreferencesGetLayout( &$useMobileLayout, $skinName,
|
|
|
|
|
$skinProperties = []
|
|
|
|
|
) {
|
2022-09-21 01:00:14 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'PreferencesGetLayout',
|
2022-11-15 22:54:18 +00:00
|
|
|
[ &$useMobileLayout, $skinName, $skinProperties ]
|
2022-09-21 01:00:14 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onPreferencesGetLegend( $form, $key, &$legend ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PreferencesGetLegend',
|
|
|
|
|
[ $form, $key, &$legend ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPrefixSearchBackend( $ns, $search, $limit, &$results,
|
|
|
|
|
$offset
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PrefixSearchBackend',
|
|
|
|
|
[ $ns, $search, $limit, &$results, $offset ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPrefixSearchExtractNamespace( &$namespaces, &$search ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PrefixSearchExtractNamespace',
|
|
|
|
|
[ &$namespaces, &$search ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onPrefsEmailAudit( $user, $oldaddr, $newaddr ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'PrefsEmailAudit',
|
|
|
|
|
[ $user, $oldaddr, $newaddr ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onProtectionForm__buildForm( $article, &$output ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ProtectionForm::buildForm',
|
|
|
|
|
[ $article, &$output ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-31 22:54:56 +00:00
|
|
|
public function onProtectionFormAddFormFields( $article, &$hookFormOptions ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ProtectionFormAddFormFields',
|
|
|
|
|
[ $article, &$hookFormOptions ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onProtectionForm__save( $article, &$errorMsg, $reasonstr ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ProtectionForm::save',
|
|
|
|
|
[ $article, &$errorMsg, $reasonstr ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onProtectionForm__showLogExtract( $article, $out ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ProtectionForm::showLogExtract',
|
|
|
|
|
[ $article, $out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRandomPageQuery( &$tables, &$conds, &$joinConds ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'RandomPageQuery',
|
|
|
|
|
[ &$tables, &$conds, &$joinConds ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRawPageViewBeforeOutput( $obj, &$text ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'RawPageViewBeforeOutput',
|
|
|
|
|
[ $obj, &$text ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-23 15:20:46 +00:00
|
|
|
public function onRecentChangesPurgeRows( $rows ): void {
|
|
|
|
|
$this->container->run(
|
2020-05-01 02:23:27 +00:00
|
|
|
'RecentChangesPurgeRows',
|
|
|
|
|
[ $rows ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRecentChange_save( $recentChange ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'RecentChange_save',
|
|
|
|
|
[ $recentChange ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRedirectSpecialArticleRedirectParams( &$redirectParams ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'RedirectSpecialArticleRedirectParams',
|
|
|
|
|
[ &$redirectParams ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRejectParserCacheValue( $parserOutput, $wikiPage,
|
|
|
|
|
$parserOptions
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'RejectParserCacheValue',
|
|
|
|
|
[ $parserOutput, $wikiPage, $parserOptions ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-28 05:51:43 +00:00
|
|
|
public function onRenameUserAbort( int $uid, string $old, string $new ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'RenameUserAbort',
|
|
|
|
|
[ $uid, $old, $new ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRenameUserComplete( int $uid, string $old, string $new ): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'RenameUserComplete',
|
|
|
|
|
[ $uid, $old, $new ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRenameUserPreRename( int $uid, string $old, string $new ): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'RenameUserPreRename',
|
|
|
|
|
[ $uid, $old, $new ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRenameUserSQL( RenameuserSQL $renameUserSql ): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'RenameUserSQL',
|
|
|
|
|
[ $renameUserSql ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRenameUserWarning( string $oldUsername, string $newUsername, array &$warnings ): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'RenameUserWarning',
|
|
|
|
|
[ $oldUsername, $newUsername, &$warnings ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onRequestContextCreateSkin( $context, &$skin ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'RequestContextCreateSkin',
|
|
|
|
|
[ $context, &$skin ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onResetPasswordExpiration( $user, &$newExpire ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ResetPasswordExpiration',
|
|
|
|
|
[ $user, &$newExpire ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRevisionDataUpdates( $title, $renderedRevision, &$updates ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'RevisionDataUpdates',
|
|
|
|
|
[ $title, $renderedRevision, &$updates ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-15 07:27:03 +00:00
|
|
|
public function onRevisionFromEditComplete( $wikiPage, $rev, $originalRevId, $user, &$tags ) {
|
2020-06-03 05:00:09 +00:00
|
|
|
return $this->container->run(
|
2020-05-15 07:27:03 +00:00
|
|
|
'RevisionFromEditComplete',
|
|
|
|
|
[ $wikiPage, $rev, $originalRevId, $user, &$tags ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onRevisionRecordInserted( $revisionRecord ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'RevisionRecordInserted',
|
|
|
|
|
[ $revisionRecord ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRevisionUndeleted( $revisionRecord, $oldPageID ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'RevisionUndeleted',
|
|
|
|
|
[ $revisionRecord, $oldPageID ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onRollbackComplete( $wikiPage, $user, $revision, $current ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'RollbackComplete',
|
|
|
|
|
[ $wikiPage, $user, $revision, $current ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSearchableNamespaces( &$arr ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchableNamespaces',
|
|
|
|
|
[ &$arr ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSearchAfterNoDirectMatch( $term, &$title ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchAfterNoDirectMatch',
|
|
|
|
|
[ $term, &$title ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-19 06:54:15 +00:00
|
|
|
public function onSearchDataForIndex( &$fields, $handler, $page, $output, $engine ) {
|
2020-05-01 02:23:27 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchDataForIndex',
|
|
|
|
|
[ &$fields, $handler, $page, $output, $engine ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-27 20:18:58 +00:00
|
|
|
public function onSearchDataForIndex2( array &$fields, ContentHandler $handler,
|
|
|
|
|
WikiPage $page, ParserOutput $output, SearchEngine $engine, RevisionRecord $revision
|
2022-09-19 06:54:15 +00:00
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchDataForIndex2',
|
|
|
|
|
[ &$fields, $handler, $page, $output, $engine, $revision ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onSearchGetNearMatch( $term, &$title ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchGetNearMatch',
|
|
|
|
|
[ $term, &$title ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSearchGetNearMatchBefore( $allSearchTerms, &$titleResult ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchGetNearMatchBefore',
|
|
|
|
|
[ $allSearchTerms, &$titleResult ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSearchGetNearMatchComplete( $term, &$title ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchGetNearMatchComplete',
|
|
|
|
|
[ $term, &$title ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSearchIndexFields( &$fields, $engine ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchIndexFields',
|
|
|
|
|
[ &$fields, $engine ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSearchResultInitFromTitle( $title, &$id ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchResultInitFromTitle',
|
|
|
|
|
[ $title, &$id ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-11 05:17:10 +00:00
|
|
|
public function onSearchResultProvideDescription( array $pageIdentities, &$descriptions ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchResultProvideDescription',
|
|
|
|
|
[ $pageIdentities, &$descriptions ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-23 12:21:44 +00:00
|
|
|
public function onSearchResultProvideThumbnail( array $pageIdentities, &$thumbnails, int $size = null ) {
|
2020-05-11 05:17:10 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchResultProvideThumbnail',
|
2022-08-23 12:21:44 +00:00
|
|
|
[ $pageIdentities, &$thumbnails, $size ]
|
2020-05-11 05:17:10 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onSearchResultsAugment( &$setAugmentors, &$rowAugmentors ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SearchResultsAugment',
|
|
|
|
|
[ &$setAugmentors, &$rowAugmentors ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSecuritySensitiveOperationStatus( &$status, $operation,
|
|
|
|
|
$session, $timeSinceAuth
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SecuritySensitiveOperationStatus',
|
|
|
|
|
[ &$status, $operation, $session, $timeSinceAuth ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSelfLinkBegin( $nt, &$html, &$trail, &$prefix, &$ret ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SelfLinkBegin',
|
|
|
|
|
[ $nt, &$html, &$trail, &$prefix, &$ret ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSendWatchlistEmailNotification( $targetUser, $title, $enotif ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SendWatchlistEmailNotification',
|
|
|
|
|
[ $targetUser, $title, $enotif ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSessionCheckInfo( &$reason, $info, $request, $metadata,
|
|
|
|
|
$data
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SessionCheckInfo',
|
|
|
|
|
[ &$reason, $info, $request, $metadata, $data ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSessionMetadata( $backend, &$metadata, $requests ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SessionMetadata',
|
|
|
|
|
[ $backend, &$metadata, $requests ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSetupAfterCache() {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SetupAfterCache',
|
|
|
|
|
[]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onShortPagesQuery( &$tables, &$conds, &$joinConds, &$options ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ShortPagesQuery',
|
|
|
|
|
[ &$tables, &$conds, &$joinConds, &$options ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onShowMissingArticle( $article ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ShowMissingArticle',
|
|
|
|
|
[ $article ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onShowSearchHit( $searchPage, $result, $terms, &$link,
|
|
|
|
|
&$redirect, &$section, &$extract, &$score, &$size, &$date, &$related, &$html
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ShowSearchHit',
|
|
|
|
|
[ $searchPage, $result, $terms, &$link, &$redirect, &$section,
|
|
|
|
|
&$extract, &$score, &$size, &$date, &$related, &$html ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onShowSearchHitTitle( &$title, &$titleSnippet, $result, $terms,
|
|
|
|
|
$specialSearch, &$query, &$attributes
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ShowSearchHitTitle',
|
|
|
|
|
[ &$title, &$titleSnippet, $result, $terms, $specialSearch,
|
|
|
|
|
&$query, &$attributes ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-22 03:11:47 +00:00
|
|
|
public function onSidebarBeforeOutput( $skin, &$sidebar ): void {
|
2020-06-17 00:29:38 +00:00
|
|
|
$this->container->run(
|
2020-05-01 02:23:27 +00:00
|
|
|
'SidebarBeforeOutput',
|
2020-06-17 00:29:38 +00:00
|
|
|
[ $skin, &$sidebar ],
|
|
|
|
|
[ 'abortable' => false ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSiteNoticeAfter( &$siteNotice, $skin ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SiteNoticeAfter',
|
|
|
|
|
[ &$siteNotice, $skin ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSiteNoticeBefore( &$siteNotice, $skin ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SiteNoticeBefore',
|
|
|
|
|
[ &$siteNotice, $skin ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-06 09:09:56 +00:00
|
|
|
public function onSkinPageReadyConfig( RL\Context $context,
|
2020-07-09 09:34:03 +00:00
|
|
|
array &$config
|
2021-07-22 03:11:47 +00:00
|
|
|
): void {
|
2020-07-09 09:34:03 +00:00
|
|
|
$this->container->run(
|
|
|
|
|
'SkinPageReadyConfig',
|
|
|
|
|
[ $context, &$config ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-18 01:09:16 +00:00
|
|
|
public function onSkinAddFooterLinks( Skin $skin, string $key, array &$footerItems ) {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'SkinAddFooterLinks',
|
|
|
|
|
[ $skin, $key, &$footerItems ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onSkinAfterBottomScripts( $skin, &$text ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SkinAfterBottomScripts',
|
|
|
|
|
[ $skin, &$text ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSkinAfterContent( &$data, $skin ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SkinAfterContent',
|
|
|
|
|
[ &$data, $skin ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-08 07:33:11 +00:00
|
|
|
public function onSkinAfterPortlet( $skin, $portlet, &$html ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SkinAfterPortlet',
|
|
|
|
|
[ $skin, $portlet, &$html ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onSkinBuildSidebar( $skin, &$bar ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SkinBuildSidebar',
|
|
|
|
|
[ $skin, &$bar ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSkinCopyrightFooter( $title, $type, &$msg, &$link ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SkinCopyrightFooter',
|
|
|
|
|
[ $title, $type, &$msg, &$link ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-25 15:59:32 +00:00
|
|
|
public function onSkinCopyrightFooterMessage( $title, $type, &$msg ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SkinCopyrightFooterMessage',
|
|
|
|
|
[ $title, $type, &$msg ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onSkinEditSectionLinks( $skin, $title, $section, $tooltip,
|
|
|
|
|
&$result, $lang
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SkinEditSectionLinks',
|
|
|
|
|
[ $skin, $title, $section, $tooltip, &$result, $lang ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSkinPreloadExistence( &$titles, $skin ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SkinPreloadExistence',
|
|
|
|
|
[ &$titles, $skin ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSkinSubPageSubtitle( &$subpages, $skin, $out ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SkinSubPageSubtitle',
|
|
|
|
|
[ &$subpages, $skin, $out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSkinTemplateGetLanguageLink( &$languageLink,
|
|
|
|
|
$languageLinkTitle, $title, $outputPage
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SkinTemplateGetLanguageLink',
|
|
|
|
|
[ &$languageLink, $languageLinkTitle, $title, $outputPage ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-22 03:11:47 +00:00
|
|
|
public function onSkinTemplateNavigation__Universal( $sktemplate, &$links ): void {
|
2020-06-17 02:47:41 +00:00
|
|
|
$this->container->run(
|
2020-05-01 02:23:27 +00:00
|
|
|
'SkinTemplateNavigation::Universal',
|
|
|
|
|
[ $sktemplate, &$links ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSoftwareInfo( &$software ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SoftwareInfo',
|
|
|
|
|
[ &$software ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialBlockModifyFormFields( $sp, &$fields ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialBlockModifyFormFields',
|
|
|
|
|
[ $sp, &$fields ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialContributionsBeforeMainOutput( $id, $user, $sp ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialContributionsBeforeMainOutput',
|
|
|
|
|
[ $id, $user, $sp ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialContributions__formatRow__flags( $context, $row,
|
|
|
|
|
&$flags
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialContributions::formatRow::flags',
|
|
|
|
|
[ $context, $row, &$flags ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialContributions__getForm__filters( $sp, &$filters ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialContributions::getForm::filters',
|
|
|
|
|
[ $sp, &$filters ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-30 00:16:54 +00:00
|
|
|
public function onSpecialCreateAccountBenefits( ?string &$html, array $info, array &$options ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialCreateAccountBenefits',
|
|
|
|
|
[ &$html, $info, &$options ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-28 02:28:12 +00:00
|
|
|
public function onSpecialExportGetExtraPages( $inputPages, &$extraPages ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialExportGetExtraPages',
|
|
|
|
|
[ $inputPages, &$extraPages ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onSpecialListusersDefaultQuery( $pager, &$query ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialListusersDefaultQuery',
|
|
|
|
|
[ $pager, &$query ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialListusersFormatRow( &$item, $row ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialListusersFormatRow',
|
|
|
|
|
[ &$item, $row ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialListusersHeader( $pager, &$out ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialListusersHeader',
|
|
|
|
|
[ $pager, &$out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialListusersHeaderForm( $pager, &$out ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialListusersHeaderForm',
|
|
|
|
|
[ $pager, &$out ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialListusersQueryInfo( $pager, &$query ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialListusersQueryInfo',
|
|
|
|
|
[ $pager, &$query ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialLogAddLogSearchRelations( $type, $request, &$qc ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialLogAddLogSearchRelations',
|
|
|
|
|
[ $type, $request, &$qc ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialMovepageAfterMove( $movePage, $oldTitle, $newTitle ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialMovepageAfterMove',
|
|
|
|
|
[ $movePage, $oldTitle, $newTitle ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-30 11:45:03 +00:00
|
|
|
public function onSpecialMuteModifyFormFields( $target, $user, &$fields ) {
|
2020-05-01 02:23:27 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialMuteModifyFormFields',
|
2020-10-30 11:45:03 +00:00
|
|
|
[ $target, $user, &$fields ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialNewpagesConditions( $special, $opts, &$conds,
|
|
|
|
|
&$tables, &$fields, &$join_conds
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialNewpagesConditions',
|
|
|
|
|
[ $special, $opts, &$conds, &$tables, &$fields, &$join_conds ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialNewPagesFilters( $special, &$filters ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialNewPagesFilters',
|
|
|
|
|
[ $special, &$filters ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialPageAfterExecute( $special, $subPage ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialPageAfterExecute',
|
|
|
|
|
[ $special, $subPage ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialPageBeforeExecute( $special, $subPage ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialPageBeforeExecute',
|
|
|
|
|
[ $special, $subPage ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialPageBeforeFormDisplay( $name, $form ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialPageBeforeFormDisplay',
|
|
|
|
|
[ $name, $form ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialPage_initList( &$list ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialPage_initList',
|
|
|
|
|
[ &$list ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialPasswordResetOnSubmit( &$users, $data, &$error ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialPasswordResetOnSubmit',
|
|
|
|
|
[ &$users, $data, &$error ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-26 19:50:01 +00:00
|
|
|
public function onSpecialPrefixIndexGetFormFilters( IContextSource $contextSource, array &$filters ) {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'SpecialPrefixIndexGetFormFilters',
|
|
|
|
|
[ $contextSource, &$filters ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialPrefixIndexQuery( array $fieldData, SelectQueryBuilder $queryBuilder ) {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'SpecialPrefixIndexQuery',
|
|
|
|
|
[ $fieldData, $queryBuilder ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onSpecialRandomGetRandomTitle( &$randstr, &$isRedir,
|
|
|
|
|
&$namespaces, &$extra, &$title
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialRandomGetRandomTitle',
|
|
|
|
|
[ &$randstr, &$isRedir, &$namespaces, &$extra, &$title ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialRecentChangesPanel( &$extraOpts, $opts ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialRecentChangesPanel',
|
|
|
|
|
[ &$extraOpts, $opts ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialResetTokensTokens( &$tokens ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialResetTokensTokens',
|
|
|
|
|
[ &$tokens ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialSearchCreateLink( $t, &$params ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialSearchCreateLink',
|
|
|
|
|
[ $t, &$params ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialSearchGoResult( $term, $title, &$url ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialSearchGoResult',
|
|
|
|
|
[ $term, $title, &$url ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialSearchNogomatch( &$title ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialSearchNogomatch',
|
|
|
|
|
[ &$title ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialSearchPowerBox( &$showSections, $term, &$opts ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialSearchPowerBox',
|
|
|
|
|
[ &$showSections, $term, &$opts ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialSearchProfileForm( $search, &$form, $profile, $term,
|
|
|
|
|
$opts
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialSearchProfileForm',
|
|
|
|
|
[ $search, &$form, $profile, $term, $opts ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialSearchProfiles( &$profiles ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialSearchProfiles',
|
|
|
|
|
[ &$profiles ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialSearchResults( $term, &$titleMatches, &$textMatches ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialSearchResults',
|
|
|
|
|
[ $term, &$titleMatches, &$textMatches ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialSearchResultsAppend( $specialSearch, $output, $term ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialSearchResultsAppend',
|
|
|
|
|
[ $specialSearch, $output, $term ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialSearchResultsPrepend( $specialSearch, $output, $term ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialSearchResultsPrepend',
|
|
|
|
|
[ $specialSearch, $output, $term ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialSearchSetupEngine( $search, $profile, $engine ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialSearchSetupEngine',
|
|
|
|
|
[ $search, $profile, $engine ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialStatsAddExtra( &$extraStats, $context ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialStatsAddExtra',
|
|
|
|
|
[ &$extraStats, $context ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialTrackingCategories__generateCatLink( $specialPage,
|
|
|
|
|
$catTitle, &$html
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialTrackingCategories::generateCatLink',
|
|
|
|
|
[ $specialPage, $catTitle, &$html ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialTrackingCategories__preprocess( $specialPage,
|
|
|
|
|
$trackingCategories
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialTrackingCategories::preprocess',
|
|
|
|
|
[ $specialPage, $trackingCategories ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialUploadComplete( $form ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialUploadComplete',
|
|
|
|
|
[ $form ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialVersionVersionUrl( $version, &$versionUrl ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialVersionVersionUrl',
|
|
|
|
|
[ $version, &$versionUrl ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onSpecialWatchlistGetNonRevisionTypes( &$nonRevisionTypes ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpecialWatchlistGetNonRevisionTypes',
|
|
|
|
|
[ &$nonRevisionTypes ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-23 23:02:24 +00:00
|
|
|
public function onSpreadAnyEditBlock( $user, bool &$blockWasSpread ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'SpreadAnyEditBlock',
|
|
|
|
|
[ $user, &$blockWasSpread ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-23 23:24:38 +00:00
|
|
|
public function onTempUserCreatedRedirect(
|
|
|
|
|
Session $session,
|
|
|
|
|
UserIdentity $user,
|
|
|
|
|
string $returnTo,
|
|
|
|
|
string $returnToQuery,
|
|
|
|
|
string $returnToAnchor,
|
|
|
|
|
&$redirectUrl
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TempUserCreatedRedirect',
|
|
|
|
|
[ $session, $user, $returnTo, $returnToQuery, $returnToAnchor, &$redirectUrl ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onTestCanonicalRedirect( $request, $title, $output ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TestCanonicalRedirect',
|
|
|
|
|
[ $request, $title, $output ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onThumbnailBeforeProduceHTML( $thumbnail, &$attribs,
|
|
|
|
|
&$linkAttribs
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ThumbnailBeforeProduceHTML',
|
|
|
|
|
[ $thumbnail, &$attribs, &$linkAttribs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onTitleExists( $title, &$exists ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TitleExists',
|
|
|
|
|
[ $title, &$exists ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onTitleGetEditNotices( $title, $oldid, &$notices ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TitleGetEditNotices',
|
|
|
|
|
[ $title, $oldid, &$notices ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onTitleGetRestrictionTypes( $title, &$types ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TitleGetRestrictionTypes',
|
|
|
|
|
[ $title, &$types ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onTitleIsAlwaysKnown( $title, &$isKnown ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TitleIsAlwaysKnown',
|
|
|
|
|
[ $title, &$isKnown ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onTitleIsMovable( $title, &$result ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TitleIsMovable',
|
|
|
|
|
[ $title, &$result ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onTitleMove( $old, $nt, $user, $reason, &$status ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TitleMove',
|
|
|
|
|
[ $old, $nt, $user, $reason, &$status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onTitleMoveStarting( $old, $nt, $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TitleMoveStarting',
|
|
|
|
|
[ $old, $nt, $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onTitleQuickPermissions( $title, $user, $action, &$errors,
|
|
|
|
|
$doExpensiveQueries, $short
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TitleQuickPermissions',
|
|
|
|
|
[ $title, $user, $action, &$errors, $doExpensiveQueries, $short ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onTitleReadWhitelist( $title, $user, &$whitelisted ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TitleReadWhitelist',
|
|
|
|
|
[ $title, $user, &$whitelisted ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onTitleSquidURLs( $title, &$urls ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'TitleSquidURLs',
|
|
|
|
|
[ $title, &$urls ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUnblockUser( $block, $user, &$reason ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UnblockUser',
|
|
|
|
|
[ $block, $user, &$reason ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUnblockUserComplete( $block, $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UnblockUserComplete',
|
|
|
|
|
[ $block, $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUndeleteForm__showHistory( &$archive, $title ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UndeleteForm::showHistory',
|
|
|
|
|
[ &$archive, $title ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUndeleteForm__showRevision( &$archive, $title ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UndeleteForm::showRevision',
|
|
|
|
|
[ &$archive, $title ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-04 15:25:40 +00:00
|
|
|
public function onUndeletePageToolLinks( IContextSource $context, LinkRenderer $linkRenderer, array &$links ) {
|
2020-05-01 02:23:27 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'UndeletePageToolLinks',
|
|
|
|
|
[ $context, $linkRenderer, &$links ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUnitTestsAfterDatabaseSetup( $database, $prefix ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UnitTestsAfterDatabaseSetup',
|
|
|
|
|
[ $database, $prefix ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUnitTestsBeforeDatabaseTeardown() {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UnitTestsBeforeDatabaseTeardown',
|
|
|
|
|
[]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUnitTestsList( &$paths ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UnitTestsList',
|
|
|
|
|
[ &$paths ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUnwatchArticle( $user, $page, &$status ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UnwatchArticle',
|
|
|
|
|
[ $user, $page, &$status ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUnwatchArticleComplete( $user, $page ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UnwatchArticleComplete',
|
|
|
|
|
[ $user, $page ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUpdateUserMailerFormattedPageStatus( &$formattedPageStatus ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UpdateUserMailerFormattedPageStatus',
|
|
|
|
|
[ &$formattedPageStatus ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUploadComplete( $uploadBase ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UploadComplete',
|
|
|
|
|
[ $uploadBase ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUploadCreateFromRequest( $type, &$className ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UploadCreateFromRequest',
|
|
|
|
|
[ $type, &$className ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUploadFormInitDescriptor( &$descriptor ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UploadFormInitDescriptor',
|
|
|
|
|
[ &$descriptor ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUploadFormSourceDescriptors( &$descriptor, &$radio,
|
|
|
|
|
$selectedSourceType
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UploadFormSourceDescriptors',
|
|
|
|
|
[ &$descriptor, &$radio, $selectedSourceType ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUploadForm_BeforeProcessing( $upload ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UploadForm:BeforeProcessing',
|
|
|
|
|
[ $upload ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUploadForm_getInitialPageText( &$pageText, $msg, $config ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UploadForm:getInitialPageText',
|
|
|
|
|
[ &$pageText, $msg, $config ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUploadForm_initial( $upload ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UploadForm:initial',
|
|
|
|
|
[ $upload ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUploadStashFile( $upload, $user, $props, &$error ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UploadStashFile',
|
|
|
|
|
[ $upload, $user, $props, &$error ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUploadVerifyFile( $upload, $mime, &$error ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UploadVerifyFile',
|
|
|
|
|
[ $upload, $mime, &$error ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUploadVerifyUpload( $upload, $user, $props, $comment,
|
|
|
|
|
$pageText, &$error
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UploadVerifyUpload',
|
|
|
|
|
[ $upload, $user, $props, $comment, $pageText, &$error ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserAddGroup( $user, &$group, &$expiry ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserAddGroup',
|
|
|
|
|
[ $user, &$group, &$expiry ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserArrayFromResult( &$userArray, $res ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserArrayFromResult',
|
|
|
|
|
[ &$userArray, $res ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserCan( $title, $user, $action, &$result ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'userCan',
|
|
|
|
|
[ $title, $user, $action, &$result ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-07 10:56:14 +00:00
|
|
|
public function onUserCanSendEmail( $user, &$hookErr ) {
|
2020-05-01 02:23:27 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'UserCanSendEmail',
|
2021-03-07 10:56:14 +00:00
|
|
|
[ $user, &$hookErr ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-29 09:21:19 +00:00
|
|
|
public function onUserClearNewTalkNotification( $userIdentity, $oldid ) {
|
2020-05-01 02:23:27 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'UserClearNewTalkNotification',
|
2020-05-29 09:21:19 +00:00
|
|
|
[ $userIdentity, $oldid ]
|
2020-05-01 02:23:27 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-31 03:34:39 +00:00
|
|
|
public function onUserEditCountUpdate( $infos ): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'UserEditCountUpdate',
|
|
|
|
|
[ $infos ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onUserEffectiveGroups( $user, &$groups ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserEffectiveGroups',
|
|
|
|
|
[ $user, &$groups ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserGetAllRights( &$rights ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserGetAllRights',
|
|
|
|
|
[ &$rights ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserGetDefaultOptions( &$defaultOptions ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserGetDefaultOptions',
|
|
|
|
|
[ &$defaultOptions ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-10 14:34:51 +00:00
|
|
|
public function onConditionalDefaultOptionsAddCondition( &$extraConditions ): void {
|
|
|
|
|
$this->container->run(
|
|
|
|
|
'ConditionalDefaultOptionsAddCondition',
|
|
|
|
|
[ &$extraConditions ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onUserGetEmail( $user, &$email ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserGetEmail',
|
|
|
|
|
[ $user, &$email ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserGetEmailAuthenticationTimestamp( $user, &$timestamp ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserGetEmailAuthenticationTimestamp',
|
|
|
|
|
[ $user, &$timestamp ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserGetLanguageObject( $user, &$code, $context ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserGetLanguageObject',
|
|
|
|
|
[ $user, &$code, $context ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-07 08:01:00 +00:00
|
|
|
public function onUserPrivilegedGroups( $userIdentity, &$groups ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserPrivilegedGroups',
|
|
|
|
|
[ $userIdentity, &$groups ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onUserGetReservedNames( &$reservedUsernames ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserGetReservedNames',
|
|
|
|
|
[ &$reservedUsernames ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserGetRights( $user, &$rights ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserGetRights',
|
|
|
|
|
[ $user, &$rights ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserGetRightsRemove( $user, &$rights ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserGetRightsRemove',
|
|
|
|
|
[ $user, &$rights ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserGroupsChanged( $user, $added, $removed, $performer,
|
|
|
|
|
$reason, $oldUGMs, $newUGMs
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserGroupsChanged',
|
|
|
|
|
[ $user, $added, $removed, $performer, $reason, $oldUGMs,
|
|
|
|
|
$newUGMs ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserIsBlockedFrom( $user, $title, &$blocked, &$allowUsertalk ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserIsBlockedFrom',
|
|
|
|
|
[ $user, $title, &$blocked, &$allowUsertalk ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserIsBlockedGlobally( $user, $ip, &$blocked, &$block ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserIsBlockedGlobally',
|
|
|
|
|
[ $user, $ip, &$blocked, &$block ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserIsBot( $user, &$isBot ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserIsBot',
|
|
|
|
|
[ $user, &$isBot ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserIsEveryoneAllowed( $right ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserIsEveryoneAllowed',
|
|
|
|
|
[ $right ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserIsLocked( $user, &$locked ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserIsLocked',
|
|
|
|
|
[ $user, &$locked ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserLoadAfterLoadFromSession( $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserLoadAfterLoadFromSession',
|
|
|
|
|
[ $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserLoadDefaults( $user, $name ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserLoadDefaults',
|
|
|
|
|
[ $user, $name ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-22 03:11:47 +00:00
|
|
|
public function onLoadUserOptions( UserIdentity $user, array &$options ): void {
|
2021-07-13 21:05:10 +00:00
|
|
|
$this->container->run(
|
|
|
|
|
'LoadUserOptions',
|
|
|
|
|
[ $user, &$options ],
|
|
|
|
|
[ 'abortable' => false ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onUserLoggedIn( $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserLoggedIn',
|
|
|
|
|
[ $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserLoginComplete( $user, &$inject_html, $direct ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserLoginComplete',
|
|
|
|
|
[ $user, &$inject_html, $direct ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserLogout( $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserLogout',
|
|
|
|
|
[ $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserLogoutComplete( $user, &$inject_html, $oldName ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserLogoutComplete',
|
|
|
|
|
[ $user, &$inject_html, $oldName ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserMailerChangeReturnPath( $to, &$returnPath ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserMailerChangeReturnPath',
|
|
|
|
|
[ $to, &$returnPath ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserMailerSplitTo( &$to ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserMailerSplitTo',
|
|
|
|
|
[ &$to ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserMailerTransformContent( $to, $from, &$body, &$error ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserMailerTransformContent',
|
|
|
|
|
[ $to, $from, &$body, &$error ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserMailerTransformMessage( $to, $from, &$subject, &$headers,
|
|
|
|
|
&$body, &$error
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserMailerTransformMessage',
|
|
|
|
|
[ $to, $from, &$subject, &$headers, &$body, &$error ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserRemoveGroup( $user, &$group ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserRemoveGroup',
|
|
|
|
|
[ $user, &$group ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-26 17:25:12 +00:00
|
|
|
public function onSaveUserOptions( UserIdentity $user, array &$modifiedOptions, array $originalOptions ) {
|
2021-07-13 21:05:10 +00:00
|
|
|
return $this->container->run(
|
|
|
|
|
'SaveUserOptions',
|
2021-07-26 17:25:12 +00:00
|
|
|
[ $user, &$modifiedOptions, $originalOptions ]
|
2021-07-13 21:05:10 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-01 02:23:27 +00:00
|
|
|
public function onUserSaveSettings( $user ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserSaveSettings',
|
|
|
|
|
[ $user ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserSendConfirmationMail( $user, &$mail, $info ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserSendConfirmationMail',
|
|
|
|
|
[ $user, &$mail, $info ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserSetEmail( $user, &$email ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserSetEmail',
|
|
|
|
|
[ $user, &$email ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserSetEmailAuthenticationTimestamp( $user, &$timestamp ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserSetEmailAuthenticationTimestamp',
|
|
|
|
|
[ $user, &$timestamp ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUsersPagerDoBatchLookups( $dbr, $userIds, &$cache, &$groups ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UsersPagerDoBatchLookups',
|
|
|
|
|
[ $dbr, $userIds, &$cache, &$groups ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUserToolLinksEdit( $userId, $userText, &$items ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'UserToolLinksEdit',
|
|
|
|
|
[ $userId, $userText, &$items ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onUser__mailPasswordInternal( $user, $ip, $u ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'User::mailPasswordInternal',
|
|
|
|
|
[ $user, $ip, $u ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onValidateExtendedMetadataCache( $timestamp, $file ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'ValidateExtendedMetadataCache',
|
|
|
|
|
[ $timestamp, $file ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWantedPages__getQueryInfo( $wantedPages, &$query ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WantedPages::getQueryInfo',
|
|
|
|
|
[ $wantedPages, &$query ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWatchArticle( $user, $page, &$status, $expiry ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WatchArticle',
|
|
|
|
|
[ $user, $page, &$status, $expiry ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWatchArticleComplete( $user, $page ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WatchArticleComplete',
|
|
|
|
|
[ $user, $page ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWatchedItemQueryServiceExtensions( &$extensions,
|
|
|
|
|
$watchedItemQueryService
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WatchedItemQueryServiceExtensions',
|
|
|
|
|
[ &$extensions, $watchedItemQueryService ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWatchlistEditorBeforeFormRender( &$watchlistInfo ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WatchlistEditorBeforeFormRender',
|
|
|
|
|
[ &$watchlistInfo ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWatchlistEditorBuildRemoveLine( &$tools, $title, $redirect,
|
|
|
|
|
$skin, &$link
|
|
|
|
|
) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WatchlistEditorBuildRemoveLine',
|
|
|
|
|
[ &$tools, $title, $redirect, $skin, &$link ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWebRequestPathInfoRouter( $router ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WebRequestPathInfoRouter',
|
|
|
|
|
[ $router ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWebResponseSetCookie( &$name, &$value, &$expire, &$options ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WebResponseSetCookie',
|
|
|
|
|
[ &$name, &$value, &$expire, &$options ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWfShellWikiCmd( &$script, &$parameters, &$options ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'wfShellWikiCmd',
|
|
|
|
|
[ &$script, &$parameters, &$options ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWgQueryPages( &$qp ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'wgQueryPages',
|
|
|
|
|
[ &$qp ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWhatLinksHereProps( $row, $title, $target, &$props ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WhatLinksHereProps',
|
|
|
|
|
[ $row, $title, $target, &$props ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWikiExporter__dumpStableQuery( &$tables, &$opts, &$join ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WikiExporter::dumpStableQuery',
|
|
|
|
|
[ &$tables, &$opts, &$join ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWikiPageDeletionUpdates( $page, $content, &$updates ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WikiPageDeletionUpdates',
|
|
|
|
|
[ $page, $content, &$updates ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onWikiPageFactory( $title, &$page ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'WikiPageFactory',
|
|
|
|
|
[ $title, &$page ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onXmlDumpWriterOpenPage( $obj, &$out, $row, $title ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'XmlDumpWriterOpenPage',
|
|
|
|
|
[ $obj, &$out, $row, $title ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function onXmlDumpWriterWriteRevision( $obj, &$out, $row, $text, $rev ) {
|
|
|
|
|
return $this->container->run(
|
|
|
|
|
'XmlDumpWriterWriteRevision',
|
|
|
|
|
[ $obj, &$out, $row, $text, $rev ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|