68 parent::__construct(
'Emailuser' );
69 $this->userNameUtils = $userNameUtils;
70 $this->userNamePrefixSearch = $userNamePrefixSearch;
71 $this->userOptionsLookup = $userOptionsLookup;
72 $this->emailUserFactory = $emailUserFactory;
73 $this->userFactory = $userFactory;
81 return $this->
msg(
'emailuser-title-notarget' );
91 'default' => $linkRenderer->makeLink(
95 'label-message' =>
'emailfrom',
96 'id' =>
'mw-emailuser-sender',
101 'default' => $linkRenderer->makeLink(
105 'label-message' =>
'emailto',
106 'id' =>
'mw-emailuser-recipient',
110 'default' => $target->
getName(),
114 'default' => $this->
msg(
'defemailsubject', $user->getName() )->inContentLanguage()->text(),
115 'label-message' =>
'emailsubject',
121 'type' =>
'textarea',
123 'label-message' =>
'emailmessage',
128 'label-message' =>
'emailccme',
129 'default' => $this->userOptionsLookup->getBoolOption( $user,
'ccmeonemails' ),
140 $out->addModuleStyles(
'mediawiki.special' );
143 $emailUser = $this->emailUserFactory->newEmailUserBC(
147 $emailUser->setEditToken( (
string)$request->getVal(
'wpEditToken' ) );
148 $status = $emailUser->canSend();
150 if ( !$status->isGood() ) {
152 $status->throwErrorPageError();
153 } elseif ( $status->hasMessage(
'mailnologin' ) ) {
155 } elseif ( $status->hasMessage(
'usermaildisabled' ) ) {
156 throw new ErrorPageError(
'usermaildisabled',
'usermaildisabledtext' );
157 } elseif ( $status->getValue() !==
null ) {
160 $msg = $status->getMessages()[0];
170 $target = $par ?? $request->getVal(
'wpTarget', $request->getVal(
'target',
'' ) );
185 if ( !$targetObject instanceof
User ) {
190 ->newEmailUser( $sender )
191 ->validateTarget( $targetObject );
192 if ( !$status->isGood() ) {
193 $msg = $status->getMessages()[0]->getKey();
194 $ret = $msg ===
'emailnotarget' ?
'notarget' : preg_replace(
'/text$/',
'', $msg );
196 $ret = $targetObject;
207 $htmlForm = HTMLForm::factory(
'ooui', [
212 'label-message' =>
'emailusername',
213 'id' =>
'emailusertarget',
216 'excludetemp' =>
true,
220 'filter-callback' =>
static function ( $value ) use ( $name ) {
221 return str_replace(
'_',
' ',
222 ( $value !==
'' && $value !==
false && $value !==
null ) ? $value : $name );
224 'validation-callback' =>
function ( $value ) {
226 $target = $this->userFactory->newFromName( $value );
227 $statusValue = $this->emailUserFactory
229 ->newEmailUser( $this->
getUser() )->validateTarget( $target );
230 if ( !$statusValue->isGood() ) {
232 return Status::wrap( $statusValue )->getMessage();
242 ->setSubmitCallback( [ $this,
'sendEmailForm' ] )
243 ->setId(
'askusername' )
244 ->setWrapperLegendMsg(
'emailtarget' )
245 ->setSubmitTextMsg(
'emailusernamesubmit' )
257 $target = $this->userFactory->newFromName( $data[
'Target'] );
262 ->addPreHtml( $this->
msg(
'emailpagetext', $target->getName() )->parse() )
263 ->setSubmitTextMsg(
'emailsend' )
264 ->setSubmitCallback( [ $this,
'onFormSubmit' ] )
265 ->setWrapperLegendMsg(
'email-legend' )
268 if ( !$this->
getHookRunner()->onEmailUserForm( $htmlForm ) ) {
272 $result = $htmlForm->show();
274 if ( $result ===
true || ( $result instanceof
Status && $result->
isGood() ) ) {
275 $out->setPageTitleMsg( $this->
msg(
'emailsent' ) );
276 $out->addWikiMsg(
'emailsenttext', $target->getName() );
277 $out->returnToMain(
false, $target->getUserPage() );
279 $out->setPageTitleMsg( $this->
msg(
'emailuser-title-target', $target->getName() ) );
291 $target = $this->userFactory->newFromName( $data[
'Target'] );
293 $emailUser = $this->emailUserFactory->newEmailUser( $this->
getAuthority() );
294 $emailUser->setEditToken( $this->
getRequest()->getVal(
'wpEditToken' ) );
297 $status = $emailUser->authorizeSend();
299 if ( !$status->isOK() ) {
304 $res = $emailUser->sendEmailUnsafe(
311 if ( $res->hasMessage(
'hookaborted' ) ) {
316 $res = Status::wrap( $res );
330 $search = $this->userNameUtils->getCanonical( $search );
336 return $this->userNamePrefixSearch
353class_alias( SpecialEmailUser::class,
'SpecialEmailUser' );
An error page which can definitely be safely rendered using the OutputPage.
A class containing constants representing the names of configuration variables.
const EnableUserEmail
Name constant for the EnableUserEmail setting, for use with Config::get()
Parent class for all special pages.
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes!
getUser()
Shortcut to get the User executing this instance.
getPageTitle( $subpage=false)
Get a self-referential title object.
getConfig()
Shortcut to get main config object.
getContext()
Gets the context this SpecialPage is executed in.
getRequest()
Get the WebRequest being used for this instance.
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
getOutput()
Get the OutputPage being used for this instance.
getAuthority()
Shortcut to get the Authority executing this instance.
getLanguage()
Shortcut to get user's language.
outputHeader( $summaryMessageKey='')
Outputs a summary message on top of special pages By default the message key is the canonical name of...
Generic operation result class Has warning/error list, boolean status and arbitrary value.
isGood()
Returns whether the operation completed and didn't have any error or warnings.