61 parent::__construct(
'Emailuser' );
62 $this->userNameUtils = $userNameUtils;
63 $this->userNamePrefixSearch = $userNamePrefixSearch;
64 $this->userOptionsLookup = $userOptionsLookup;
65 $this->emailUserFactory = $emailUserFactory;
66 $this->userFactory = $userFactory;
74 return $this->
msg(
'emailuser-title-notarget' );
84 'default' => $linkRenderer->makeLink(
88 'label-message' =>
'emailfrom',
89 'id' =>
'mw-emailuser-sender',
94 'default' => $linkRenderer->makeLink(
98 'label-message' =>
'emailto',
99 'id' =>
'mw-emailuser-recipient',
103 'default' => $target->
getName(),
107 'default' => $this->
msg(
'defemailsubject', $user->getName() )->inContentLanguage()->text(),
108 'label-message' =>
'emailsubject',
114 'type' =>
'textarea',
116 'label-message' =>
'emailmessage',
121 'label-message' =>
'emailccme',
122 'default' => $this->userOptionsLookup->getBoolOption( $user,
'ccmeonemails' ),
133 $out->addModuleStyles(
'mediawiki.special' );
136 $emailUser = $this->emailUserFactory->newEmailUserBC(
140 $emailUser->setEditToken( (
string)$request->getVal(
'wpEditToken' ) );
141 $status = $emailUser->canSend();
143 if ( !$status->isGood() ) {
145 $status->throwErrorPageError();
146 } elseif ( $status->hasMessage(
'mailnologin' ) ) {
148 } elseif ( $status->hasMessage(
'usermaildisabled' ) ) {
149 throw new ErrorPageError(
'usermaildisabled',
'usermaildisabledtext' );
150 } elseif ( $status->getValue() !==
null ) {
153 $msg = $status->getMessages()[0];
163 $target = $par ?? $request->getVal(
'wpTarget', $request->getVal(
'target',
'' ) );
178 if ( !$targetObject instanceof
User ) {
183 ->newEmailUser( $sender )
184 ->validateTarget( $targetObject );
185 if ( !$status->isGood() ) {
186 $msg = $status->getMessages()[0]->getKey();
187 $ret = $msg ===
'emailnotarget' ?
'notarget' : preg_replace(
'/text$/',
'', $msg );
189 $ret = $targetObject;
200 $htmlForm = HTMLForm::factory(
'ooui', [
205 'label-message' =>
'emailusername',
206 'id' =>
'emailusertarget',
209 'excludetemp' =>
true,
213 'filter-callback' =>
static function ( $value ) use ( $name ) {
214 return str_replace(
'_',
' ',
215 ( $value !==
'' && $value !==
false && $value !==
null ) ? $value : $name );
217 'validation-callback' =>
function ( $value ) {
219 $target = $this->userFactory->newFromName( $value );
220 $statusValue = $this->emailUserFactory
222 ->newEmailUser( $this->
getUser() )->validateTarget( $target );
223 if ( !$statusValue->isGood() ) {
225 return Status::wrap( $statusValue )->getMessage();
235 ->setSubmitCallback( [ $this,
'sendEmailForm' ] )
236 ->setId(
'askusername' )
237 ->setWrapperLegendMsg(
'emailtarget' )
238 ->setSubmitTextMsg(
'emailusernamesubmit' )
250 $target = $this->userFactory->newFromName( $data[
'Target'] );
255 ->addPreHtml( $this->
msg(
'emailpagetext', $target->getName() )->parse() )
256 ->setSubmitTextMsg(
'emailsend' )
257 ->setSubmitCallback( [ $this,
'onFormSubmit' ] )
258 ->setWrapperLegendMsg(
'email-legend' )
261 if ( !$this->
getHookRunner()->onEmailUserForm( $htmlForm ) ) {
265 $result = $htmlForm->show();
267 if ( $result ===
true || ( $result instanceof
Status && $result->
isGood() ) ) {
268 $out->setPageTitleMsg( $this->
msg(
'emailsent' ) );
269 $out->addWikiMsg(
'emailsenttext', $target->getName() );
270 $out->returnToMain(
false, $target->getUserPage() );
272 $out->setPageTitleMsg( $this->
msg(
'emailuser-title-target', $target->getName() ) );
284 $target = $this->userFactory->newFromName( $data[
'Target'] );
286 $emailUser = $this->emailUserFactory->newEmailUser( $this->
getAuthority() );
287 $emailUser->setEditToken( $this->
getRequest()->getVal(
'wpEditToken' ) );
290 $status = $emailUser->authorizeSend();
292 if ( !$status->isOK() ) {
297 $res = $emailUser->sendEmailUnsafe(
304 if ( $res->hasMessage(
'hookaborted' ) ) {
309 $res = Status::wrap( $res );
323 $search = $this->userNameUtils->getCanonical( $search );
329 return $this->userNamePrefixSearch
346class_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.