Rewrite Special:Confirmemail so it's not retarded
authorRob Church <robchurch@users.mediawiki.org>
Fri, 5 May 2006 16:15:03 +0000 (16:15 +0000)
committerRob Church <robchurch@users.mediawiki.org>
Fri, 5 May 2006 16:15:03 +0000 (16:15 +0000)
includes/SpecialConfirmemail.php
includes/templates/Confirmemail.php [deleted file]

index 7143d9d..9837c2e 100644 (file)
 <?php
+
 /**
- * Entry point to confirm a user's e-mail address.
- * When a new address is entered, a random unique code is generated and
- * mailed to the user. A clickable link to this page is provided.
+ * Special page allows users to request email confirmation message, and handles
+ * processing of the confirmation code when the link in the email is followed
  *
  * @package MediaWiki
- * @subpackage SpecialPage
+ * @subpackage Special pages
+ * @author Rob Church <robchur@gmail.com>
  */
-
-/** @todo document */
-function wfSpecialConfirmemail( $code ) {
-       $form = new ConfirmationForm();
-       $form->show( $code );
+/**
+ * Main execution point
+ *
+ * @param $par Parameters passed to the page
+ */
+function wfSpecialConfirmemail( $par ) {
+       $form = new EmailConfirmation();
+       $form->execute( $par );
 }
 
-/** @package MediaWiki */
-class ConfirmationForm {
-       /** */
-       function show( $code ) {
-               global $wgUser;
-               if( !$wgUser->isLoggedIn() ) {
-                       $this->showNeedLogin();
-               } elseif( empty( $code ) ) {
-                       $this->showEmpty( $this->checkAndSend() );
-               } else {
-                       $this->showCode( $code );
-               }
-       }
-
-       function showNeedLogin() {
-               global $wgOut, $wgUser;
-               
-               $title = Title::makeTitle( NS_SPECIAL, 'Userlogin' );
-               $self = Title::makeTitle( NS_SPECIAL, 'Confirmemail' );
-               $skin = $wgUser->getSkin();
-               $llink = $skin->makeKnownLinkObj( $title, wfMsgHtml( 'loginreqlink' ), 'returnto=' . $self->getPrefixedUrl() );
-               
-               $wgOut->setPageTitle( wfMsg( 'confirmemail' ) );
-               $wgOut->addHtml( wfMsgWikiHtml( 'confirmemail_needlogin', $llink ) );
-               return;
-       }
-
-       /** */
-       function showCode( $code ) {
-               $user = User::newFromConfirmationCode( $code );
-               if( is_null( $user ) ) {
-                       $this->showInvalidCode();
+class EmailConfirmation extends SpecialPage {
+       
+       function execute( $code ) {
+               global $wgUser, $wgOut;
+               #$this->setHeaders();
+               if( empty( $code ) ) {
+                       if( $wgUser->isLoggedIn() ) {
+                               $this->showRequestForm();
+                       } else {
+                               $title = Title::makeTitle( NS_SPECIAL, 'Userlogin' );
+                               $self = Title::makeTitle( NS_SPECIAL, 'Confirmemail' );
+                               $skin = $wgUser->getSkin();
+                               $llink = $skin->makeKnownLinkObj( $title, wfMsgHtml( 'loginreqlink' ), 'returnto=' . $self->getPrefixedUrl() );
+                               $wgOut->addHtml( wfMsgWikiHtml( 'confirmemail_needlogin', $llink ) );
+                       }
                } else {
-                       $this->confirmAndShow( $user );
+                       $this->attemptConfirm( $code );
                }
        }
-
-       /** */
-       function confirmAndShow( $user ) {
-               if( $user->confirmEmail() ) {
-                       $this->showSuccess();
+       
+       function showRequestForm() {
+               global $wgOut, $wgUser, $wgLang, $wgRequest;
+               if( $wgRequest->wasPosted() && $wgUser->matchEditToken( $wgRequest->getText( 'token' ) ) ) {
+                       $message = $wgUser->sendConfirmationMail() ? 'confirmemail_sent' : 'confirmemail_sendfailed';
+                       $wgOut->addWikiText( wfMsg( $message ) );
                } else {
-                       $this->showError();
-               }
+                       if( $wgUser->isEmailConfirmed() ) {
+                               $time = $wgLang->timeAndDate( $wgUser->mEmailAuthenticated, true );
+                               $wgOut->addWikiText( wfMsg( 'emailauthenticated', $time ) );
+                       }
+                       $wgOut->addWikiText( wfMsg( 'confirmemail_text' ) );
+                       $self = Title::makeTitle( NS_SPECIAL, 'Confirmemail' );         
+                       $form  = wfOpenElement( 'form', array( 'method' => 'post', 'action' => $self->getLocalUrl() ) );
+                       $form .= wfHidden( 'token', $wgUser->editToken() );
+                       $form .= wfSubmitButton( wfMsgHtml( 'confirmemail_send' ) );
+                       $form .= wfCloseElement( 'form' );
+                       $wgOut->addHtml( $form );
+               }                               
        }
-
-       /** */
-       function checkAndSend() {
-               global $wgUser, $wgRequest;
-               if( $wgRequest->wasPosted() &&
-                       $wgUser->isLoggedIn() &&
-                       $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) {
-                       $result = $wgUser->sendConfirmationMail();
-                       if( WikiError::isError( $result ) ) {
-                               return 'confirmemail_sendfailed';
+       
+       /**
+        * Attempt to confirm the user's email address and show success or failure
+        * as needed; if successful, take the user to log in
+        *
+        * @param $code Confirmation code
+        */
+       function attemptConfirm( $code ) {
+               global $wgUser, $wgOut;
+               $user = User::newFromConfirmationCode( $code );
+               if( is_object( $user ) ) {
+                       if( $user->confirmEmail() ) {
+                               $message = $wgUser->isLoggedIn() ? 'confirmemail_loggedin' : 'confirmemail_success';
+                               $wgOut->addWikiText( wfMsg( $message ) );
+                               if( !$wgUser->isLoggedIn() ) {
+                                       $title = Title::makeTitle( NS_SPECIAL, 'Userlogin' );
+                                       $wgOut->returnToMain( true, $title->getPrefixedText() );
+                               }
                        } else {
-                               return 'confirmemail_sent';
+                               $wgOut->addWikiText( 'confirmemail_error' );
                        }
                } else {
-                       # boo
-                       return '';
-               }
-       }
-
-       /** */
-       function showEmpty( $err ) {
-               require_once( 'templates/Confirmemail.php' );
-               global $wgOut, $wgUser;
-
-               $tpl = new ConfirmemailTemplate();
-               $tpl->set( 'error', $err );
-               $tpl->set( 'edittoken', $wgUser->editToken() );
-
-               $title = Title::makeTitle( NS_SPECIAL, 'Confirmemail' );
-               $tpl->set( 'action', $title->getLocalUrl() );
-
-
-               $wgOut->addTemplate( $tpl );
-       }
-
-       /** */
-       function showInvalidCode() {
-               global $wgOut;
-               $wgOut->addWikiText( wfMsg( 'confirmemail_invalid' ) );
-       }
-
-       /** */
-       function showError() {
-               global $wgOut;
-               $wgOut->addWikiText( wfMsg( 'confirmemail_error' ) );
-       }
-
-       /** */
-       function showSuccess() {
-               global $wgOut, $wgRequest, $wgUser;
-
-               if( $wgUser->isLoggedIn() ) {
-                       $wgOut->addWikiText( wfMsg( 'confirmemail_loggedin' ) );
-               } else {
-                       $wgOut->addWikiText( wfMsg( 'confirmemail_success' ) );
-                       require_once( 'SpecialUserlogin.php' );
-                       $form = new LoginForm( $wgRequest );
-                       $form->execute();
+                       $wgOut->addWikiText( 'confirmemail_invalid' );
                }
        }
+       
 }
 
 ?>
diff --git a/includes/templates/Confirmemail.php b/includes/templates/Confirmemail.php
deleted file mode 100644 (file)
index 07b2a64..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-/**
- * @package MediaWiki
- * @subpackage Templates
- */
-if( !defined( 'MEDIAWIKI' ) ) die( -1 );
-
-/** */
-require_once( 'includes/SkinTemplate.php' );
-
-/**
- * HTML template for Special:Confirmemail form
- * @package MediaWiki
- * @subpackage Templates
- */
-class ConfirmemailTemplate extends QuickTemplate {
-       function execute() {
-               if( $this->data['error'] ) {
-?>
-       <div class='error'><?php $this->msgWiki( $this->data['error']) ?></div>
-<?php } else { ?>
-       <div>
-       <?php $this->msgWiki( 'confirmemail_text' ) ?>
-       </div>
-<?php } ?>
-<form name="confirmemail" id="confirmemail" method="post" action="<?php $this->text('action') ?>">
-       <input type="hidden" name="action" value="submit" />
-       <input type="hidden" name="wpEditToken" value="<?php $this->text('edittoken') ?>" />
-       <table border='0'>
-               <tr>
-                       <td></td>
-                       <td><input type="submit" name="wpConfirm" value="<?php $this->msg('confirmemail_send') ?>" /></td>
-               </tr>
-       </table>
-</form>
-<?php
-       }
-}
-
-?>
\ No newline at end of file