(bug 13879) Special:Emailuser now asks for suitable target user if called without.
authorPurodha B Blissenbach <purodha@users.mediawiki.org>
Tue, 12 Apr 2011 12:49:56 +0000 (12:49 +0000)
committerPurodha B Blissenbach <purodha@users.mediawiki.org>
Tue, 12 Apr 2011 12:49:56 +0000 (12:49 +0000)
RELEASE-NOTES
includes/specials/SpecialEmailuser.php
languages/messages/MessagesEn.php

index 1f537f8..7f1b5c8 100644 (file)
@@ -130,6 +130,7 @@ PHP if you have not done so prior to upgrading MediaWiki.
   to avoid loops and confusion; auth plugins like CentralAuth need to handle
   AbortNewAccount separately.
 * Special:ListFiles is now transcludable.
+* (bug 13879) Special:Emailuser asks for suitable target user if called without.
 
 
 === Bug fixes in 1.18 ===
index 098d936..851be6b 100644 (file)
@@ -89,19 +89,10 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                $this->setHeaders();
                $this->outputHeader();
                $wgOut->addModuleStyles( 'mediawiki.special' );
-
                $this->mTarget = is_null( $par )
                        ? $wgRequest->getVal( 'wpTarget', $wgRequest->getVal( 'target', '' ) )
                        : $par;
-
-               $ret = self::getTarget( $this->mTarget );
-               if( $ret instanceof User ){
-                       $this->mTargetObj = $ret;
-               } else {
-                       $wgOut->showErrorPage( "{$ret}title", "{$ret}text" );
-                       return false;
-               }
-
+               // error out if sending user cannot do this
                $error = self::getPermissionsError( $wgUser, $wgRequest->getVal( 'wpEditToken' ) );
                switch ( $error ) {
                        case null:
@@ -126,6 +117,18 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                                $wgOut->showErrorPage( $title, $msg, $params );
                                return;
                }
+               // Got a valid target user name? Else ask for one.
+               $ret = self::getTarget( $this->mTarget );
+               if( ! $ret instanceof User ){
+                       if( $this->mTarget != '' ) {
+                               $ret = ( $ret == 'notarget' ) ? 'emailnotarget' : ( $ret . 'text' ) ;
+                               $wgOut->addHtml ( '<p class="error">' . wfMessage( $ret )->parse() . '</p>' );
+                       }
+                       $wgOut->addHtml (self::userForm( $this->mTarget ) );
+                       return false;
+               }
+
+               $this->mTargetObj = $ret;
 
                $form = new HTMLForm( $this->getFormFields() );
                $form->addPreText( wfMsgExt( 'emailpagetext', 'parseinline' ) );
@@ -216,6 +219,23 @@ class SpecialEmailUser extends UnlistedSpecialPage {
 
                return null;
        }
+       
+       /**
+        * Form to ask for target user name.
+        * @author purodha
+        * @param $name string User name submitted.
+        * @return string form asking for user name.
+        */
+       static function userForm( $name ) {
+               $string =       Xml::openElement( 'form', array( 'method' => 'get', 'action' => '', 'id' => 'askusername' ) ) .
+                               Xml::openElement( 'fieldset' ) .
+                               Html::rawElement( 'legend', null, wfMessage( 'emailtarget' )->parse() ) .
+                               Xml::inputLabel( wfMessage('emailusername')->text(), 'target', 'emailusertarget', 30, $name ) . ' ' .
+                               Xml::submitButton( wfMessage('emailusernamesubmit')->text() ) .
+                               Xml::closeElement( 'fieldset' ) .
+                               Xml::closeElement( 'form' ) . "\n";
+               return $string;
+       }
 
        /**
         * Really send a mail. Permissions should have been checked using
index 46f5faf..6859bc5 100644 (file)
@@ -2679,6 +2679,10 @@ The e-mail address you entered in [[Special:Preferences|your user preferences]]
 'noemailtext'          => 'This user has not specified a valid e-mail address.',
 'nowikiemailtitle'     => 'No e-mail allowed',
 'nowikiemailtext'      => 'This user has chosen not to receive e-mail from other users.',
+'emailnotarget'        => 'Nonexistent or invalid user name to receive e-mail.',
+'emailtarget'          => 'Enter user to receive e-mail',
+'emailusername'        => 'User name:',
+'emailusernamesubmit'  => 'Submit',
 'email-legend'         => 'Send an e-mail to another {{SITENAME}} user',
 'emailfrom'            => 'From:',
 'emailto'              => 'To:',