Extension:ImportUsers

The ImportUser extension adds special page Special:ImportUsers which can be used by bureaucrat (or others who have 'import_users' right) to imports users from a CSV file to MediaWiki's user database.

Import File Format
The CSV file consists of four columns:


 * 1) username
 * 2) password
 * 3) email
 * 4) real name

Delimited with commas. For an example:

user1,pass1,user1@gmail.com,User One user2,pass2,user2@gmail.com,User Two user3,pass3,user3@gmail.com,User Three user4,pass4,user4@gmail.com,User Four user5,pass5,user5@gmail.com,User Five user6,pass6,user6@gmail.com,User Six . . . userN,passN,userN@gmail.com,User Nnn

Duplicate/Collision handling
Extension:ImportUsers extension will never create duplicate user accounts.

Two accounts are in collision (or are duplicates of each other) if their login names (user names) are equal.
 * What is account collision?

Collision handling behavior is determined by the "Replace existing users" check box.

When "Replace existing users" check box is clear (unchecked), Extension:ImportUsers extension will ignore records in the input file which are duplicates of existing accounts.

When "Replace existing users" check box is checked, Extension:ImportUsers extension will update corresponding accounts with data from input file.

Note, that MediaWiki tolerates duplicate email addresses. In other words, there may be multiple accounts connected to the same email address. Extension:ImportUsers extension will not validate for duplicate email addresses.

Download and Installation
Step 1: Copy-paste this code into a file SpecialImportUsers.php and place it in extensions directory.

';     $output.=' '; $output.=' '; return $output; }

function AnalizeUsers($fileinfo,$replace_present) { global $IP, $wgOut; require_once "$IP/includes/User.php"; $summary=array('all'=>0,'added'=>0,'updated'=>0); $filedata=explode("\n",rtrim(file_get_contents($fileinfo['tmp_name']))); $output=' '.wfMsg( 'importusers_log' ).' '; foreach ($filedata as $line=>$newuserstr) { $newuserarray=explode(',', trim( $newuserstr ) ); if (count($newuserarray)<2) { $output.=sprintf(wfMsg( 'importusers_user_invalid_format' ) ,$line+1 ).' ';         continue; }       if (!IsSet($newuserarray[2])) $newuserarray[2]=''; if (!IsSet($newuserarray[3])) $newuserarray[3]=''; $NextUser=User::newFromName( $newuserarray[0] ); $NextUser->setEmail( $newuserarray[2] ); $NextUser->setRealName( $newuserarray[3] ); $uid=$NextUser->idForName; if ($uid===0) { $NextUser->addToDatabase; $NextUser->setPassword( $newuserarray[1] ); $NextUser->saveSettings; $output.=sprintf(wfMsg( 'importusers_user_added' ) ,$newuserarray[0] ).' ';         $summary['added']++; }       else { if ($replace_present) { $NextUser->setPassword( $newuserarray[1] ); $NextUser->saveSettings; $output.=sprintf( wfMsg( 'importusers_user_present_update' ) ,$newuserarray[0] ).' ';           $summary['updated']++; }         else $output.=sprintf(wfMsg( 'importusers_user_present_not_update' ) ,$newuserarray[0] ).' ';       }        $summary['all']++; }     $output.=''.wfMsg( 'importusers_log_summary' ).' ';     $output.=wfMsg( 'importusers_log_summary_all' ).': '.$summary['all'].' ';     $output.=wfMsg( 'importusers_log_summary_added' ).': '.$summary['added'].' ';     $output.=wfMsg( 'importusers_log_summary_updated' ).': '.$summary['updated']; return $output; } }

SpecialPage::addPage (new SpecialImportUsers); }

Step 2: Add the following line to LocalSettings.php:

That's it!

License
You are free to use this extension for any reason and mutilate it to your heart's liking. If you feel your work might benefit others, post your changes here.