wiki.techinc.nl/includes/api/ApiHookRunner.php
C. Scott Ananian 9dbce134c6 Allow ApiParse to use the ArticleParserOptions hook
Extensions can use the ArticleParserOptions hook to customize the
parser options used for article read views, and Visual Editor uses
ApiParse to regenerate the article read view HTML after edit.  In
order for VE to remain consistent with the original parse options,
provide a `usearticle` option to the parse API to allow it to invoke
the ArticleParserOptions hook.

Bug: T373212
Change-Id: I906affc8d2335b7bb48dff3a4b061fcf86b71cee
2024-08-29 11:33:35 -04:00

386 lines
9.5 KiB
PHP

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