wikimedia/mediawiki-core

View on GitHub
includes/api/ApiHookRunner.php

Summary

Maintainability
C
1 day
Test Coverage
<?php

namespace MediaWiki\Api;

use Article;
use MediaWiki\HookContainer\HookContainer;
use MediaWiki\Session\Session;
use MediaWiki\User\UserIdentity;
use ParserOptions;

/**
 * This class provides an implementation of the hook interfaces used
 * by the core Action API, forwarding hook calls to HookContainer for
 * dispatch to extensions.
 *
 * To get an instance, use ApiBase::getHookRunner().
 */
class ApiHookRunner implements
    Hook\APIAfterExecuteHook,
    Hook\ApiCheckCanExecuteHook,
    Hook\ApiDeprecationHelpHook,
    Hook\ApiLogFeatureUsageHook,
    Hook\ApiFeedContributions__feedItemHook,
    Hook\ApiFormatHighlightHook,
    Hook\APIGetAllowedParamsHook,
    Hook\APIGetDescriptionMessagesHook,
    Hook\APIGetParamDescriptionMessagesHook,
    Hook\APIHelpModifyOutputHook,
    Hook\ApiMain__moduleManagerHook,
    Hook\ApiMain__onExceptionHook,
    Hook\ApiMakeParserOptionsHook,
    Hook\ApiMaxLagInfoHook,
    Hook\ApiOpenSearchSuggestHook,
    Hook\ApiOptionsHook,
    Hook\ApiParseMakeOutputPageHook,
    Hook\APIQueryAfterExecuteHook,
    Hook\ApiQueryBaseAfterQueryHook,
    Hook\ApiQueryBaseBeforeQueryHook,
    Hook\ApiQueryBaseProcessRowHook,
    Hook\APIQueryGeneratorAfterExecuteHook,
    Hook\APIQuerySiteInfoGeneralInfoHook,
    Hook\APIQuerySiteInfoStatisticsInfoHook,
    Hook\ApiQueryTokensRegisterTypesHook,
    Hook\ApiQueryWatchlistExtractOutputDataHook,
    Hook\ApiQueryWatchlistPrepareWatchedItemQueryServiceOptionsHook,
    Hook\ApiQuery__moduleManagerHook,
    Hook\ApiRsdServiceApisHook,
    Hook\ApiValidatePasswordHook,
    Hook\RequestHasSameOriginSecurityHook,
    \MediaWiki\Hook\EditFormPreloadTextHook,
    \MediaWiki\Hook\FileUndeleteCompleteHook,
    \MediaWiki\Hook\GetLinkColoursHook,
    \MediaWiki\Hook\ImportSourcesHook,
    \MediaWiki\Output\Hook\LanguageLinksHook,
    \MediaWiki\Output\Hook\OutputPageBeforeHTMLHook,
    \MediaWiki\Output\Hook\OutputPageCheckLastModifiedHook,
    \MediaWiki\Page\Hook\ArticleParserOptionsHook,
    \MediaWiki\Hook\TempUserCreatedRedirectHook,
    \MediaWiki\Hook\UserLoginCompleteHook,
    \MediaWiki\Hook\UserLogoutCompleteHook,
    \MediaWiki\SpecialPage\Hook\ChangeAuthenticationDataAuditHook
{
    private HookContainer $container;

    public function __construct( HookContainer $container ) {
        $this->container = $container;
    }

    public function onAPIAfterExecute( $module ) {
        return $this->container->run(
            'APIAfterExecute',
            [ $module ]
        );
    }

    public function onApiCheckCanExecute( $module, $user, &$message ) {
        return $this->container->run(
            'ApiCheckCanExecute',
            [ $module, $user, &$message ]
        );
    }

    public function onApiDeprecationHelp( &$msgs ) {
        return $this->container->run(
            'ApiDeprecationHelp',
            [ &$msgs ]
        );
    }

    public function onApiFeedContributions__feedItem( $row, $context, &$feedItem ) {
        return $this->container->run(
            'ApiFeedContributions::feedItem',
            [ $row, $context, &$feedItem ]
        );
    }

    public function onApiFormatHighlight( $context, $text, $mime, $format ) {
        return $this->container->run(
            'ApiFormatHighlight',
            [ $context, $text, $mime, $format ]
        );
    }

    public function onAPIGetAllowedParams( $module, &$params, $flags ) {
        return $this->container->run(
            'APIGetAllowedParams',
            [ $module, &$params, $flags ]
        );
    }

    public function onAPIGetDescriptionMessages( $module, &$msg ) {
        return $this->container->run(
            'APIGetDescriptionMessages',
            [ $module, &$msg ]
        );
    }

    public function onAPIGetParamDescriptionMessages( $module, &$msg ) {
        return $this->container->run(
            'APIGetParamDescriptionMessages',
            [ $module, &$msg ]
        );
    }

    public function onAPIHelpModifyOutput( $module, &$help, $options, &$tocData ) {
        return $this->container->run(
            'APIHelpModifyOutput',
            [ $module, &$help, $options, &$tocData ]
        );
    }

    public function onApiLogFeatureUsage( $feature, array $clientInfo ): void {
        $this->container->run(
            'ApiLogFeatureUsage',
            [ $feature, $clientInfo ]
        );
    }

    public function onApiMain__moduleManager( $moduleManager ) {
        return $this->container->run(
            'ApiMain::moduleManager',
            [ $moduleManager ]
        );
    }

    public function onApiMain__onException( $apiMain, $e ) {
        return $this->container->run(
            'ApiMain::onException',
            [ $apiMain, $e ]
        );
    }

    public function onApiMakeParserOptions( $options, $title, $params, $module,
        &$reset, &$suppressCache
    ) {
        return $this->container->run(
            'ApiMakeParserOptions',
            [ $options, $title, $params, $module, &$reset, &$suppressCache ]
        );
    }

    public function onApiMaxLagInfo( &$lagInfo ): void {
        $this->container->run(
            'ApiMaxLagInfo',
            [ &$lagInfo ],
            [ 'abortable' => false ]
        );
    }

    public function onApiOpenSearchSuggest( &$results ) {
        return $this->container->run(
            'ApiOpenSearchSuggest',
            [ &$results ]
        );
    }

    public function onApiOptions( $apiModule, $user, $changes, $resetKinds ) {
        return $this->container->run(
            'ApiOptions',
            [ $apiModule, $user, $changes, $resetKinds ]
        );
    }

    public function onApiParseMakeOutputPage( $module, $output ) {
        return $this->container->run(
            'ApiParseMakeOutputPage',
            [ $module, $output ]
        );
    }

    public function onAPIQueryAfterExecute( $module ) {
        return $this->container->run(
            'APIQueryAfterExecute',
            [ $module ]
        );
    }

    public function onApiQueryBaseAfterQuery( $module, $result, &$hookData ) {
        return $this->container->run(
            'ApiQueryBaseAfterQuery',
            [ $module, $result, &$hookData ]
        );
    }

    public function onApiQueryBaseBeforeQuery( $module, &$tables, &$fields,
        &$conds, &$query_options, &$join_conds, &$hookData
    ) {
        return $this->container->run(
            'ApiQueryBaseBeforeQuery',
            [ $module, &$tables, &$fields, &$conds, &$query_options,
                &$join_conds, &$hookData ]
        );
    }

    public function onApiQueryBaseProcessRow( $module, $row, &$data, &$hookData ) {
        return $this->container->run(
            'ApiQueryBaseProcessRow',
            [ $module, $row, &$data, &$hookData ]
        );
    }

    public function onAPIQueryGeneratorAfterExecute( $module, $resultPageSet ) {
        return $this->container->run(
            'APIQueryGeneratorAfterExecute',
            [ $module, $resultPageSet ]
        );
    }

    public function onAPIQuerySiteInfoGeneralInfo( $module, &$results ) {
        return $this->container->run(
            'APIQuerySiteInfoGeneralInfo',
            [ $module, &$results ]
        );
    }

    public function onAPIQuerySiteInfoStatisticsInfo( &$results ) {
        return $this->container->run(
            'APIQuerySiteInfoStatisticsInfo',
            [ &$results ]
        );
    }

    public function onApiQueryTokensRegisterTypes( &$salts ) {
        return $this->container->run(
            'ApiQueryTokensRegisterTypes',
            [ &$salts ]
        );
    }

    public function onApiQueryWatchlistExtractOutputData( $module, $watchedItem,
        $recentChangeInfo, &$vals
    ) {
        return $this->container->run(
            'ApiQueryWatchlistExtractOutputData',
            [ $module, $watchedItem, $recentChangeInfo, &$vals ]
        );
    }

    public function onApiQueryWatchlistPrepareWatchedItemQueryServiceOptions(
        $module, $params, &$options
    ) {
        return $this->container->run(
            'ApiQueryWatchlistPrepareWatchedItemQueryServiceOptions',
            [ $module, $params, &$options ]
        );
    }

    public function onApiQuery__moduleManager( $moduleManager ) {
        return $this->container->run(
            'ApiQuery::moduleManager',
            [ $moduleManager ]
        );
    }

    public function onApiRsdServiceApis( &$apis ) {
        return $this->container->run(
            'ApiRsdServiceApis',
            [ &$apis ]
        );
    }

    public function onApiValidatePassword( $module, &$r ) {
        return $this->container->run(
            'ApiValidatePassword',
            [ $module, &$r ]
        );
    }

    public function onArticleParserOptions( Article $article, ParserOptions $popts ) {
        return $this->container->run(
            'ArticleParserOptions',
            [ $article, $popts ]
        );
    }

    public function onChangeAuthenticationDataAudit( $req, $status ) {
        return $this->container->run(
            'ChangeAuthenticationDataAudit',
            [ $req, $status ]
        );
    }

    public function onEditFormPreloadText( &$text, $title ) {
        return $this->container->run(
            'EditFormPreloadText',
            [ &$text, $title ]
        );
    }

    public function onFileUndeleteComplete( $title, $fileVersions, $user, $reason ) {
        return $this->container->run(
            'FileUndeleteComplete',
            [ $title, $fileVersions, $user, $reason ]
        );
    }

    public function onGetLinkColours( $pagemap, &$classes, $title ) {
        return $this->container->run(
            'GetLinkColours',
            [ $pagemap, &$classes, $title ]
        );
    }

    public function onImportSources( &$importSources ) {
        return $this->container->run(
            'ImportSources',
            [ &$importSources ]
        );
    }

    public function onLanguageLinks( $title, &$links, &$linkFlags ) {
        return $this->container->run(
            'LanguageLinks',
            [ $title, &$links, &$linkFlags ]
        );
    }

    public function onOutputPageBeforeHTML( $out, &$text ) {
        return $this->container->run(
            'OutputPageBeforeHTML',
            [ $out, &$text ]
        );
    }

    public function onOutputPageCheckLastModified( &$modifiedTimes, $out ) {
        return $this->container->run(
            'OutputPageCheckLastModified',
            [ &$modifiedTimes, $out ]
        );
    }

    public function onRequestHasSameOriginSecurity( $request ) {
        return $this->container->run(
            'RequestHasSameOriginSecurity',
            [ $request ]
        );
    }

    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 ]
        );
    }

    public function onUserLoginComplete( $user, &$inject_html, $direct ) {
        return $this->container->run(
            'UserLoginComplete',
            [ $user, &$inject_html, $direct ]
        );
    }

    public function onUserLogoutComplete( $user, &$inject_html, $oldName ) {
        return $this->container->run(
            'UserLogoutComplete',
            [ $user, &$inject_html, $oldName ]
        );
    }
}