wiki.techinc.nl/includes/api/ApiCreateTempUserTrait.php
Thalia 645915bf0f ApiCreateTempUserTrait: Pass a default value to redirect hook
TempUserCreatedRedirectHook::onTempUserCreatedRedirect expects a
string as its $returnTo argument. ApiCreateTempUserTrait passes
whatever the 'returnto' param is set to; however, this may be
null if not set.

Rather than require APIs that use the trait to set the 'returnto'
param, pass an empty string instead of null if not set.

Bug: T349223
Change-Id: I4fd445df67a63c5e357a3693e7f71519e5ebdd25
2023-11-06 13:03:34 +00:00

90 lines
2.2 KiB
PHP

<?php
use MediaWiki\Api\ApiHookRunner;
use MediaWiki\Request\WebRequest;
use MediaWiki\User\UserIdentity;
use Wikimedia\ParamValidator\ParamValidator;
/**
* Methods needed by APIs that create a temporary user.
*
* This should only be added to classes that extend ApiBase.
*
* @ingroup API
* @since 1.42
*/
trait ApiCreateTempUserTrait {
/**
* Get any login redirect URL added by TempUserCreatedRedirectHook.
*
* @param array $params
* @param UserIdentity $savedTempUser
* @return string The redirect URL, or '' if none was added
*/
protected function getTempUserRedirectUrl(
array $params,
UserIdentity $savedTempUser
): string {
$returnToQuery = $params['returntoquery'];
$returnToAnchor = $params['returntoanchor'];
if ( str_starts_with( $returnToQuery, '?' ) ) {
// Remove leading '?' if provided (both ways work, but this is more common elsewhere)
$returnToQuery = substr( $returnToQuery, 1 );
}
if ( $returnToAnchor !== '' && !str_starts_with( $returnToAnchor, '#' ) ) {
// Add leading '#' if missing (it's required)
$returnToAnchor = '#' . $returnToAnchor;
}
$redirectUrl = '';
$this->getHookRunner()->onTempUserCreatedRedirect(
$this->getRequest()->getSession(),
$savedTempUser,
$params['returnto'] ?: '',
$returnToQuery,
$returnToAnchor,
$redirectUrl
);
return $redirectUrl;
}
/**
* Add params needed for TempUserCreatedRedirectHook.
*
* @return array
*/
protected function getCreateTempUserParams(): array {
return [
'returnto' => [
ParamValidator::PARAM_TYPE => 'title',
],
'returntoquery' => [
ParamValidator::PARAM_TYPE => 'string',
ParamValidator::PARAM_DEFAULT => '',
],
'returntoanchor' => [
ParamValidator::PARAM_TYPE => 'string',
ParamValidator::PARAM_DEFAULT => '',
],
];
}
// region Methods required from ApiBase
/** @name Methods required from ApiBase
* @{
*/
/**
* @see ApiBase::getHookRunner
* @return ApiHookRunner
*/
abstract protected function getHookRunner();
/**
* @see IContextSource::getRequest
* @return WebRequest
*/
abstract public function getRequest();
/** @} */
// endregion -- end of methods required from ApiBase
}