X-Git-Url: https://git.heureux-cyclage.org/index.php?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialEmailuser.php;h=830b43817fa6f9a4de00add3b46826993b97a598;hb=464f0c72a5c97e741a7fd36998426f7efa5f9090;hp=a550e8853baef56b04950087249651b86359ada5;hpb=9964ca1a390c446397dcd466916ffed356cdc3c9;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialEmailuser.php b/includes/specials/SpecialEmailuser.php index a550e8853b..830b43817f 100644 --- a/includes/specials/SpecialEmailuser.php +++ b/includes/specials/SpecialEmailuser.php @@ -53,13 +53,14 @@ class SpecialEmailUser extends UnlistedSpecialPage { } protected function getFormFields() { + $linkRenderer = $this->getLinkRenderer(); return [ 'From' => [ 'type' => 'info', 'raw' => 1, - 'default' => Linker::link( + 'default' => $linkRenderer->makeLink( $this->getUser()->getUserPage(), - htmlspecialchars( $this->getUser()->getName() ) + $this->getUser()->getName() ), 'label-message' => 'emailfrom', 'id' => 'mw-emailuser-sender', @@ -67,9 +68,9 @@ class SpecialEmailUser extends UnlistedSpecialPage { 'To' => [ 'type' => 'info', 'raw' => 1, - 'default' => Linker::link( + 'default' => $linkRenderer->makeLink( $this->mTargetObj->getUserPage(), - htmlspecialchars( $this->mTargetObj->getName() ) + $this->mTargetObj->getName() ), 'label-message' => 'emailto', 'id' => 'mw-emailuser-recipient', @@ -230,14 +231,15 @@ class SpecialEmailUser extends UnlistedSpecialPage { return 'usermaildisabled'; } - if ( !$user->isAllowed( 'sendemail' ) ) { - return 'badaccess'; - } - + // Run this before $user->isAllowed, to show appropriate message to anons (T160309) if ( !$user->isEmailConfirmed() ) { return 'mailnologin'; } + if ( !$user->isAllowed( 'sendemail' ) ) { + return 'badaccess'; + } + if ( $user->isBlockedFromEmailuser() ) { wfDebug( "User is blocked from sending e-mail.\n" ); @@ -287,7 +289,7 @@ class SpecialEmailUser extends UnlistedSpecialPage { 'text', [ 'id' => 'emailusertarget', - 'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest + 'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest 'autofocus' => true, 'size' => 30, ] @@ -306,7 +308,7 @@ class SpecialEmailUser extends UnlistedSpecialPage { * @since 1.20 * @param array $data * @param HTMLForm $form - * @return Status|string|bool + * @return Status|bool */ public static function uiSubmit( array $data, HTMLForm $form ) { return self::submit( $data, $form->getContext() ); @@ -319,8 +321,7 @@ class SpecialEmailUser extends UnlistedSpecialPage { * * @param array $data * @param IContextSource $context - * @return Status|string|bool Status object, or potentially a String on error - * or maybe even true on success if anything uses the EmailUser hook. + * @return Status|bool */ public static function submit( array $data, IContextSource $context ) { $config = $context->getConfig(); @@ -328,7 +329,7 @@ class SpecialEmailUser extends UnlistedSpecialPage { $target = self::getTarget( $data['Target'] ); if ( !$target instanceof User ) { // Messages used here: notargettext, noemailtext, nowikiemailtext - return $context->msg( $target . 'text' )->parseAsBlock(); + return Status::newFatal( $target . 'text' ); } $to = MailAddress::newFromUser( $target ); @@ -341,9 +342,33 @@ class SpecialEmailUser extends UnlistedSpecialPage { $text .= $context->msg( 'emailuserfooter', $from->name, $to->name )->inContentLanguage()->text(); - $error = ''; + $error = false; if ( !Hooks::run( 'EmailUser', [ &$to, &$from, &$subject, &$text, &$error ] ) ) { - return $error; + if ( $error instanceof Status ) { + return $error; + } elseif ( $error === false || $error === '' || $error === [] ) { + // Possibly to tell HTMLForm to pretend there was no submission? + return false; + } elseif ( $error === true ) { + // Hook sent the mail itself and indicates success? + return Status::newGood(); + } elseif ( is_array( $error ) ) { + $status = Status::newGood(); + foreach ( $error as $e ) { + $status->fatal( $e ); + } + return $status; + } elseif ( $error instanceof MessageSpecifier ) { + return Status::newFatal( $error ); + } else { + // Ugh. Either a raw HTML string, or something that's supposed + // to be treated like one. + $type = is_object( $error ) ? get_class( $error ) : gettype( $error ); + wfDeprecated( "EmailUser hook returning a $type as \$error", '1.29' ); + return Status::newFatal( new ApiRawMessage( + [ '$1', Message::rawParam( (string)$error ) ], 'hookaborted' + ) ); + } } if ( $config->get( 'UserEmailUseReplyTo' ) ) {