$user = $this->getUser();
$out = $this->getOutput();
- if ( $this->getRequest()->wasPosted() &&
- $user->matchEditToken( $this->getRequest()->getText( 'token' ) )
- ) {
- $status = $user->sendConfirmationMail();
- if ( $status->isGood() ) {
+ if ( !$user->isEmailConfirmed() ) {
+ $descriptor = array();
+ if ( $user->isEmailConfirmationPending() ) {
+ $descriptor += array(
+ 'pending' => array(
+ 'type' => 'info',
+ 'raw' => true,
+ 'default' => "<div class=\"error mw-confirmemail-pending\">\n" .
+ $this->msg( 'confirmemail_pending' )->escaped() .
+ "\n</div>",
+ ),
+ );
+ }
+
+ $out->addWikiMsg( 'confirmemail_text' );
+ $form = HTMLForm::factory( 'ooui', $descriptor, $this->getContext() );
+ $form
+ ->setMethod( 'post' )
+ ->setAction( $this->getPageTitle()->getLocalURL() )
+ ->setSubmitTextMsg( 'confirmemail_send' )
+ ->setSubmitCallback( array( $this, 'submitSend' ) );
+
+ $retval = $form->show();
+
+ if ( $retval === true ) {
+ // should never happen, but if so, don't let the user without any message
$out->addWikiMsg( 'confirmemail_sent' );
- } else {
- $out->addWikiText( $status->getWikiText( 'confirmemail_sendfailed' ) );
+ } elseif ( $retval instanceof Status && $retval->isGood() ) {
+ $out->addWikiText( $retval->getValue() );
}
- } elseif ( $user->isEmailConfirmed() ) {
+ } else {
// date and time are separate parameters to facilitate localisation.
// $time is kept for backward compat reasons.
// 'emailauthenticated' is also used in SpecialPreferences.php
$d = $lang->userDate( $emailAuthenticated, $user );
$t = $lang->userTime( $emailAuthenticated, $user );
$out->addWikiMsg( 'emailauthenticated', $time, $d, $t );
- } else {
- if ( $user->isEmailConfirmationPending() ) {
- $out->wrapWikiMsg(
- "<div class=\"error mw-confirmemail-pending\">\n$1\n</div>",
- 'confirmemail_pending'
- );
- }
+ }
+ }
- $out->addWikiMsg( 'confirmemail_text' );
- $form = Html::openElement(
- 'form',
- array( 'method' => 'post', 'action' => $this->getPageTitle()->getLocalURL() )
- ) . "\n";
- $form .= Html::hidden( 'token', $user->getEditToken() ) . "\n";
- $form .= Xml::submitButton( $this->msg( 'confirmemail_send' )->text() ) . "\n";
- $form .= Html::closeElement( 'form' ) . "\n";
- $out->addHTML( $form );
+ /**
+ * Callback for HTMLForm send confirmation mail.
+ *
+ * @return Status Status object with the result
+ */
+ public function submitSend() {
+ $status = $this->getUser()->sendConfirmationMail();
+ if ( $status->isGood() ) {
+ return Status::newGood( $this->msg( 'confirmemail_sent' )->text() );
+ } else {
+ return Status::newFatal( new RawMessage(
+ $status->getWikiText( 'confirmemail_sendfailed' )
+ ) );
}
}