http://www.mediawiki.org/wiki/Special:Code/MediaWiki/98104

Revision: 98104
Author:   aaron
Date:     2011-09-26 02:07:32 +0000 (Mon, 26 Sep 2011)
Log Message:
-----------
* Added new UserAccountRequest class
* Movied verify() et all to utility class
* Fixed missing static declarations

Modified Paths:
--------------
    trunk/extensions/ConfirmAccount/ConfirmAccount.php
    trunk/extensions/ConfirmAccount/dataclasses/ConfirmAccount.class.php
    
trunk/extensions/ConfirmAccount/presentation/specialpages/actions/ConfirmAccount_body.php
    
trunk/extensions/ConfirmAccount/presentation/specialpages/actions/RequestAccount_body.php

Added Paths:
-----------
    trunk/extensions/ConfirmAccount/dataclasses/UserAccountRequest.php

Modified: trunk/extensions/ConfirmAccount/ConfirmAccount.php
===================================================================
--- trunk/extensions/ConfirmAccount/ConfirmAccount.php  2011-09-26 02:04:17 UTC 
(rev 98103)
+++ trunk/extensions/ConfirmAccount/ConfirmAccount.php  2011-09-26 02:07:32 UTC 
(rev 98104)
@@ -166,9 +166,11 @@
 $wgAutoloadClasses['UserCredentialsPage'] = 
"$dir/actions/UserCredentials_body.php";
 $wgSpecialPageGroups['UserCredentials'] = 'users';
 
-# Data functions
 $dir = dirname( __FILE__ ) . '/dataclasses';
+# Utility functions
 $wgAutoloadClasses['ConfirmAccount'] = "$dir/ConfirmAccount.class.php";
+# Data access objects
+$wgAutoloadClasses['UserAccountRequest'] = "$dir/UserAccountRequest.php";
 
 $dir = dirname( __FILE__ ) . '/schema';
 # Schema changes

Modified: trunk/extensions/ConfirmAccount/dataclasses/ConfirmAccount.class.php
===================================================================
--- trunk/extensions/ConfirmAccount/dataclasses/ConfirmAccount.class.php        
2011-09-26 02:04:17 UTC (rev 98103)
+++ trunk/extensions/ConfirmAccount/dataclasses/ConfirmAccount.class.php        
2011-09-26 02:07:32 UTC (rev 98104)
@@ -50,7 +50,7 @@
         *
         * @param sring $name
         */
-       public function confirmEmail( $name ) {
+       public static function confirmEmail( $name ) {
                global $wgMemc;
                $dbw = wfGetDB( DB_MASTER );
                $dbw->update( 'account_requests',
@@ -68,7 +68,7 @@
         * @param string $token
         * @return string
         */
-       public function confirmationTokenUrl( $token ) {
+       public static function confirmationTokenUrl( $token ) {
                $title = SpecialPage::getTitleFor( 'RequestAccount' );
                return $title->getFullUrl( array(
                        'action' => 'confirmemail',
@@ -83,11 +83,52 @@
         * @param string $expiration
         * @return string
         */
-       public function getConfirmationToken( $user, &$expiration ) {
+       public static function getConfirmationToken( $user, &$expiration ) {
                global $wgConfirmAccountRejectAge;
                $expires = time() + $wgConfirmAccountRejectAge;
                $expiration = wfTimestamp( TS_MW, $expires );
                $token = $user->generateToken( $user->getName() . 
$user->getEmail() . $expires );
                return $token;
        }
+
+       /**
+        * Verifies that it's ok to include the uploaded file
+        *
+        * @param string $tmpfile the full path of the temporary file to verify
+        * @param string $extension The filename extension that the file is to 
be served with
+        * @return Status object
+        */
+       public static function verifyAttachment( $tmpfile, $extension ) {
+               global $wgVerifyMimeType, $wgMimeTypeBlacklist;
+               # magically determine mime type
+               $magic =& MimeMagic::singleton();
+               $mime = $magic->guessMimeType( $tmpfile, false );
+               # check mime type, if desired
+               if ( $wgVerifyMimeType ) {
+                       wfDebug ( "\n\nmime: <$mime> extension: 
<$extension>\n\n" );
+                       # Check mime type against file extension
+                       if ( !UploadBase::verifyExtension( $mime, $extension ) 
) {
+                               return Status::newFatal( 'uploadcorrupt' );
+                       }
+                       # Check mime type blacklist
+                       if ( isset( $wgMimeTypeBlacklist ) && !is_null( 
$wgMimeTypeBlacklist )
+                               && self::checkFileExtension( $mime, 
$wgMimeTypeBlacklist ) ) {
+                               return Status::newFatal( 'filetype-badmime', 
$mime );
+                       }
+               }
+               wfDebug( __METHOD__ . ": all clear; passing.\n" );
+               return Status::newGood();
+       }
+
+       /**
+        * Perform case-insensitive match against a list of file extensions.
+        * Returns true if the extension is in the list.
+        *
+        * @param string $ext
+        * @param array $list
+        * @return bool
+        */
+       protected static function checkFileExtension( $ext, $list ) {
+               return in_array( strtolower( $ext ), $list );
+       }
 }

Added: trunk/extensions/ConfirmAccount/dataclasses/UserAccountRequest.php
===================================================================
--- trunk/extensions/ConfirmAccount/dataclasses/UserAccountRequest.php          
                (rev 0)
+++ trunk/extensions/ConfirmAccount/dataclasses/UserAccountRequest.php  
2011-09-26 02:07:32 UTC (rev 98104)
@@ -0,0 +1,257 @@
+<?php
+class UserAccountRequest {
+       /* Initially supplied fields */
+       protected $id;
+       protected $name;
+       protected $realName;
+       protected $email;
+       protected $registration;
+       protected $bio;
+       protected $notes;
+       protected $urls;
+       protected $type;
+       protected $areas;
+       protected $fileName;
+       protected $fileStorageKey;
+       protected $ip;
+       protected $emailToken;
+       protected $emailTokenExpires;
+       /* Fields set if user later confirms email */
+       protected $emailAuthTimestamp;
+       /* Fields used by the admins */
+       protected $deleted;
+       protected $rejectedTimestamp;
+       protected $heldTimestamp;
+       protected $user;
+       protected $comment;
+
+       private function __construct() {}
+
+       public static function newFromRow( Object $row ) {
+               $req = new self();
+
+               $req->id = (int)$row->acr_id;
+               $req->name = $row->acr_name;
+               $req->realName = $row->acr_real_name;
+               $req->email = $row->acr_email;
+               $req->registration = wfTimestampOrNull( TS_MW, 
$row->acr_registration );
+               $req->bio = $row->acr_bio;
+               $req->notes = $row->acr_notes;
+               $req->urls = $row->acr_urls;
+               $req->type = (int)$row->acr_type;
+               $req->areas = self::expandAreas( $row->acr_areas );
+               $req->fileName = $row->acr_filename;
+               $req->fileStorageKey = $row->acr_storage_key;
+               $req->ip = $row->acr_ip;
+               $req->emailToken = $row->acr_email_token; // MD5 of token
+               $req->emailTokenExpires = wfTimestampOrNull( TS_MW, 
$row->acr_email_token_expires );
+               $req->emailAuthTimestamp = wfTimestampOrNull( TS_MW, 
$row->acr_email_authenticated );
+               $req->deleted = (bool)$row->acr_deleted;
+               $req->rejectedTimestamp = wfTimestampOrNull( TS_MW, 
$row->acr_rejected );
+               $req->heldTimestamp = wfTimestampOrNull( TS_MW, $row->acr_held 
);
+               $req->user = (int)$row->acr_user;
+               $req->comment = $row->acr_comment;
+
+               return $req;
+       }
+
+       public static function newFromArray( array $fields ) {
+               $req = new self();
+
+               $req->id = isset( $fields['id'] )
+                       ? (int)$fields['id']
+                       : null; // determined on insertOn()
+               $req->name = $fields['name'];
+               $req->realName = $fields['real_name'];
+               $req->email = $fields['email'];
+               $req->registration = wfTimestampOrNull( TS_MW, 
$fields['registration'] );
+               $req->bio = $fields['bio'];
+               $req->notes = $fields['notes'];
+               $req->urls = $fields['urls'];
+               $req->type = (int)$fields['type'];
+               $req->areas = is_string( $fields['areas'] )
+                       ? self::expandAreas( $fields['areas'] ) // DB format
+                       : $fields['areas']; // already expanded
+               $req->fileName = $fields['filename'];
+               $req->fileStorageKey = $fields['storage_key'];
+               $req->ip = $fields['ip'];
+               $req->emailToken = $fields['email_token']; // MD5 of token
+               $req->emailTokenExpires = wfTimestampOrNull( TS_MW, 
$fields['email_token_expires'] );
+               // These fields are typically left to default on insertion...
+               $req->emailAuthTimestamp = isset( 
$fields['email_authenticated'] )
+                       ? wfTimestampOrNull( TS_MW, 
$fields['email_authenticated'] )
+                       : null;
+               $req->deleted = isset( $fields['deleted'] )
+                       ? $fields['deleted']
+                       : false;
+               $req->rejectedTimestamp = isset( $fields['rejected'] )
+                       ? wfTimestampOrNull( TS_MW, $fields['rejected'] )
+                       : null;
+               $req->heldTimestamp = isset( $fields['held'] )
+                       ? wfTimestampOrNull( TS_MW, $fields['held'] )
+                       : null;
+               $req->user = isset( $fields['user'] )
+                       ? (int)$fields['user']
+                       : 0;
+               $req->comment = isset( $fields['comment'] )
+                       ? $fields['comment']
+                       : '';
+
+               return $req;
+       }
+
+       public function getId() {
+               return  $this->id;
+       }
+
+       public function getName() {
+               return  $this->name;
+       }
+
+       public function getRealName() {
+               return  $this->realName;
+       }
+
+       public function getEmail() {
+               return  $this->email;
+       }
+
+       public function getRegistration() {
+               return  $this->registration;
+       }
+
+       public function getBio() {
+               return  $this->bio;
+       }
+
+       public function getNotes() {
+               return  $this->notes;
+       }
+
+       public function getUrls() {
+               return  $this->urls;
+       }
+
+       public function getAreas() {
+               return  $this->areas;
+       }
+
+       public function getFileName() {
+               return  $this->fileName;
+       }
+
+       public function getFileStorageKey() {
+               return  $this->fileStorageKey;
+       }
+
+       public function getIP() {
+               return  $this->ip;
+       }
+
+       public function getEmailToken() {
+               return  $this->emailToken;
+       }
+
+       public function getEmailTokenExpires() {
+               return  $this->emailTokenExpires;
+       }
+
+       public function getEmailAuthTimestamp() {
+               return  $this->emailAuthTimestamp;
+       }
+
+       public function isDeleted() {
+               return  $this->deleted;
+       }
+
+       public function getRejectTimestamp() {
+               return  $this->rejectedTimestamp;
+       }
+
+       public function getHeldTimestamp() {
+               return  $this->heldTimestamp;
+       }
+
+       public function getHandlingUser() {
+               return  $this->user;
+       }
+
+       public function getHandlingComment() {
+               return  $this->comment;
+       }
+
+       public function insertOn() {
+               $dbw = wfGetDB( DB_MASTER );
+               # Allow for some fields to be handled automatically...
+               $acr_id = is_null( $this->id )
+                       ? $this->id
+                       : $dbw->nextSequenceValue( 
'account_requests_acr_id_seq' );
+               # Insert into pending requests...
+               $dbw->insert( 'account_requests',
+                       array(
+                               'acr_id'                        => $acr_id,
+                               'acr_name'                      => strval( 
$this->name ),
+                               'acr_email'             => strval( $this->email 
),
+                               'acr_real_name'         => strval( 
$this->realName ),
+                               'acr_registration'      => $dbw->timestamp( 
$this->registration ),
+                               'acr_bio'                       => strval( 
$this->bio ),
+                               'acr_notes'             => strval( $this->notes 
),
+                               'acr_urls'                      => strval( 
$this->urls ),
+                               'acr_type'                      => strval( 
$this->type ),
+                               'acr_areas'             => self::flattenAreas( 
$this->areas ),
+                               'acr_filename'          => isset( 
$this->fileName )
+                                       ? $this->fileName
+                                       : null,
+                               'acr_storage_key'       => isset( 
$this->fileStorageKey )
+                                       ? $this->fileStorageKey
+                                       : null,
+                               'acr_comment'           => strval( 
$this->comment ),
+                               'acr_ip'                        => strval( 
$this->ip ), // possible use for spam blocking
+                               'acr_deleted'           => (int)$this->deleted,
+                               'acr_email_token'       => strval( 
$this->emailToken ), // MD5 of token
+                               'acr_email_token_expires' => $dbw->timestamp( 
$this->emailTokenExpires ),
+                       ),
+                       __METHOD__
+               );
+               $this->id = $acr_id; // set for accessors
+
+               return $this->id;
+       }
+
+       public function remove() {
+               if ( !$this->id ) {
+                       throw new MWException( "Account request ID is not set." 
);
+               }
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->delete( 'account_requests', array( 'acr_id' => $this->id 
), __METHOD__ );
+
+               return ( $dbw->affectedRows() > 0 );
+       }
+
+       /**
+        * Flatten areas of interest array
+        * Used by ConfirmAccountsPage
+        * @todo just serialize()
+        */
+       protected static function flattenAreas( array $areas ) {
+               $flatAreas = '';
+               foreach ( $areas as $area ) {
+                       $flatAreas .= $area . "\n";
+               }
+               return $flatAreas;
+       }
+
+       /**
+        * Expand areas of interest to array
+        * Used by ConfirmAccountsPage
+        * @todo just unserialize()
+        */
+       public static function expandAreas( $areas ) {
+               $list = explode( "\n", $areas );
+               foreach ( $list as $n => $item ) {
+                       $list[$n] = trim( "wpArea-" . str_replace( ' ', '_', 
$item ) );
+               }
+               unset( $list[count( $list ) - 1] );
+               return $list;
+       }
+}


Property changes on: 
trunk/extensions/ConfirmAccount/dataclasses/UserAccountRequest.php
___________________________________________________________________
Added: svn:eol-style
   + native

Modified: 
trunk/extensions/ConfirmAccount/presentation/specialpages/actions/ConfirmAccount_body.php
===================================================================
--- 
trunk/extensions/ConfirmAccount/presentation/specialpages/actions/ConfirmAccount_body.php
   2011-09-26 02:04:17 UTC (rev 98103)
+++ 
trunk/extensions/ConfirmAccount/presentation/specialpages/actions/ConfirmAccount_body.php
   2011-09-26 02:07:32 UTC (rev 98104)
@@ -754,7 +754,7 @@
                        $this->mUsername = $this->mUsername ? $this->mUsername 
: $row->acr_name;
                        $this->mBio = $this->mBio ? $this->mBio : $row->acr_bio;
                        $this->mType = !is_null($this->mType) ? $this->mType : 
$row->acr_type;
-                       $rowareas = RequestAccountPage::expandAreas( 
$row->acr_areas );
+                       $rowareas = UserAccountRequest::expandAreas( 
$row->acr_areas );
 
                        foreach( $this->mAreas as $area => $within ) {
                                # If admin didn't set any of these checks, go 
back to how the user set them

Modified: 
trunk/extensions/ConfirmAccount/presentation/specialpages/actions/RequestAccount_body.php
===================================================================
--- 
trunk/extensions/ConfirmAccount/presentation/specialpages/actions/RequestAccount_body.php
   2011-09-26 02:04:17 UTC (rev 98103)
+++ 
trunk/extensions/ConfirmAccount/presentation/specialpages/actions/RequestAccount_body.php
   2011-09-26 02:07:32 UTC (rev 98104)
@@ -335,7 +335,7 @@
                                $this->showForm( wfMsgHtml( 
'requestaccount-exts' ) );
                                return false;
                        }
-                       $veri = $this->verify( $this->mTempPath, $finalExt );
+                       $veri = ConfirmAccount::verifyAttachment( 
$this->mTempPath, $finalExt );
                        if ( !$veri->isGood() ) {
                                $this->mPrevAttachment = '';
                                $this->showForm( wfMsgHtml( 'uploadcorrupt' ) );
@@ -352,30 +352,25 @@
                $expires = null; // passed by reference
                $token = ConfirmAccount::getConfirmationToken( $u, $expires );
                # Insert into pending requests...
-               $acr_id = $dbw->nextSequenceValue( 
'account_requests_acr_id_seq' );
+               $req = UserAccountRequest::newFromArray( array(
+                       'name'                  => $u->getName(),
+                       'email'                 => $u->getEmail(),
+                       'real_name'     => $u->getRealName(),
+                       'registration'  => wfTimestampNow(),
+                       'bio'                   => $this->mBio,
+                       'notes'                 => $this->mNotes,
+                       'urls'                  => $this->mUrls,
+                       'filename'              => isset( $this->mSrcName ) ? 
$this->mSrcName : null,
+                       'type'                  => $this->mType,
+                       'areas'                 => $this->mAreaSet,
+                       'storage_key'   => isset( $key ) ? $key : null,
+                       'comment'               => '',
+                       'email_token'   => md5( $token ),
+                       'email_token_expires' => $expires,
+                       'ip'                    => wfGetIP(),
+               ) );
                $dbw->begin();
-               $dbw->insert( 'account_requests',
-                       array(
-                               'acr_id' => $acr_id,
-                               'acr_name' => $u->getName(),
-                               'acr_email' => $u->getEmail(),
-                               'acr_real_name' => $u->getRealName(),
-                               'acr_registration' => $dbw->timestamp(),
-                               'acr_bio' => $this->mBio,
-                               'acr_notes' => $this->mNotes,
-                               'acr_urls' => $this->mUrls,
-                               'acr_filename' => isset( $this->mSrcName ) ? 
$this->mSrcName : null,
-                               'acr_type' => $this->mType,
-                               'acr_areas' => self::flattenAreas( 
$this->mAreaSet ),
-                               'acr_storage_key' => isset( $key ) ? $key : 
null,
-                               'acr_comment' => '',
-                               'acr_email_token' => md5( $token ),
-                           'acr_email_token_expires' => $dbw->timestamp( 
$expires ),
-                               'acr_ip' => wfGetIP(), // Possible use for spam 
blocking
-                               'acr_deleted' => 0,
-                       ),
-                       __METHOD__
-               );
+               $req->insertOn();
                # Send confirmation, required!
                $result = $this->sendConfirmationMail( $u, $token, $expires );
                if ( !$result->isOK() ) {
@@ -409,30 +404,6 @@
        }
 
        /**
-        * Flatten areas of interest array
-        */
-       protected static function flattenAreas( $areas ) {
-               $flatAreas = '';
-               foreach ( $areas as $area ) {
-                       $flatAreas .= $area . "\n";
-               }
-               return $flatAreas;
-       }
-
-       /**
-        * Expand areas of interest to array
-        * Used by ConfirmAccountsPage
-        */
-       public static function expandAreas( $areas ) {
-               $list = explode( "\n", $areas );
-               foreach ( $list as $n => $item ) {
-                       $list[$n] = trim( "wpArea-" . str_replace( ' ', '_', 
$item ) );
-               }
-               unset( $list[count( $list ) - 1] );
-               return $list;
-       }
-
-       /**
         * Initialize the uploaded file from PHP data
         */
        protected function initializeUpload( $request ) {
@@ -443,49 +414,6 @@
        }
 
        /**
-        * Verifies that it's ok to include the uploaded file
-        *
-        * @param string $tmpfile the full path of the temporary file to verify
-        * @param string $extension The filename extension that the file is to 
be served with
-        * @return Status object
-        */
-       protected function verify( $tmpfile, $extension ) {
-               # magically determine mime type
-               $magic =& MimeMagic::singleton();
-               $mime = $magic->guessMimeType( $tmpfile, false );
-               # check mime type, if desired
-               global $wgVerifyMimeType;
-               if ( $wgVerifyMimeType ) {
-                       wfDebug ( "\n\nmime: <$mime> extension: 
<$extension>\n\n" );
-                       # check mime type against file extension
-                       if ( !UploadBase::verifyExtension( $mime, $extension ) 
) {
-                               return Status::newFatal( 'uploadcorrupt' );
-                       }
-
-                       # check mime type blacklist
-                       global $wgMimeTypeBlacklist;
-                       if ( isset( $wgMimeTypeBlacklist ) && !is_null( 
$wgMimeTypeBlacklist )
-                               && $this->checkFileExtension( $mime, 
$wgMimeTypeBlacklist ) ) {
-                               return Status::newFatal( 'filetype-badmime', 
$mime );
-                       }
-               }
-               wfDebug( __METHOD__ . ": all clear; passing.\n" );
-               return Status::newGood();
-       }
-
-       /**
-        * Perform case-insensitive match against a list of file extensions.
-        * Returns true if the extension is in the list.
-        *
-        * @param string $ext
-        * @param array $list
-        * @return bool
-        */
-       protected function checkFileExtension( $ext, $list ) {
-               return in_array( strtolower( $ext ), $list );
-       }
-
-       /**
         * @private
         * @param int $limit number of accounts allowed to be requested from 
the same IP
         */


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to