diff --git a/admin/uploaduser.php b/admin/uploaduser.php
new file mode 100755
index 00000000000..8ae0d511486
--- /dev/null
+++ b/admin/uploaduser.php
@@ -0,0 +1,164 @@
+ 1, "password" => 1,
+ "firstname" => 1, "lastname" => 1,
+ "email" => 1);
+ $optionalDefaults = array("institution" => 1, "department" => 1,
+ "city" => 1, "country" => 1,
+ "lang" => 1, "timezone" => 1);
+ $optional = array("idnumber" => 1, "icq" => 1,
+ "phone1" => 1, "phone2" => 1,
+ "address" => 1, "url" => 1,
+ "description" => 1, "mailformat" => 1,
+ "htmleditor" => 1, "autosubscribe" => 1,
+ "idnumber" => 1, "icq" => 1,
+ "course1" => 1, "course2" => 1,
+ "course3" => 1, "course4" => 1,
+ "course5" => 1);
+
+ // --- get header (field names) ---
+ $header = split("\,", fgets($fp));
+ // check for valid field names
+ foreach ($header as $i => $h) {
+ $h = trim($h); $header[$i] = $h; // remove whitespace
+ if (!($required[$h] or $optionalDefaults[$h] or $optional[$h])) {
+ error("\"$h\" is not a valid field name.");
+ }
+ if ($required[$h]) {
+ $required[$h] = 2;
+ }
+ }
+ // check for required fields
+ foreach ($required as $key => $value) {
+ if ($value < 2) {
+ error("\"$key\" is a required field.");
+ }
+ }
+ $linenum = 2; // since header is line 1
+
+ while (!feof ($fp)) {
+ //Note: commas within a field should be encoded as ,
+ //Last field, courseid, is optional. If present it should be the Moodle
+ //course id number for the course in which student should be initially enroled
+ $line = split("\,", fgets($fp));
+ foreach ($line as $key => $value) {
+ $record[$header[$key]] = trim($value);
+ }
+ if ($record[$header[0]]) {
+ // add a new user to the database
+ optional_variable($newuser, "");
+
+ // add fields to object $user
+ foreach ($record as $name => $value) {
+ // check for required values
+ if ($required[$name] and !$value) {
+ error("Missing \"$name\" on line $linenum.");
+ }
+ // password needs to be encrypted
+ else if ($name == "password") {
+ $user->password = md5($value);
+ }
+ // normal entry
+ else {
+ $user->{$name} = $value;
+ }
+ }
+ $user->confirmed = 1;
+ $user->timemodified = time();
+ $linenum++;
+
+ if (! $user->id = insert_record("user", $user)) {
+ if (!$user = get_record("user", "username", "changeme")) { // half finished user from another time
+ //Record not added - probably because user is already registered
+ //In this case, output userid from previous registration
+ //This can be used to obtain a list of userids for existing users
+ $error_uid = -1;
+ if ($user = get_record("user","username",$username)) {
+ $error_uid = $user->id;
+ }
+ $notifytext .= $error_uid . "," . $username . ",FAILED";
+ }
+ } elseif ($user->username != "changeme") {
+ $notifytext .= $user->id . "," . $user->username . ",";
+ $numusers++;
+ }
+ if ($courseid) {
+ if (enrol_student($user->id, $courseid)) {
+ $notifytext .= ",enroled in course $courseid
\n";
+ } else {
+ $notifytext .= ",error: enrolment in course $courseid failed
\n";
+ }
+ } else {$notifytext .= "
\n";}
+ unset ($user);
+ }
+ }
+ $notify = true;
+ fclose($fp);
+}
+
+// print page
+if (! $site = get_site()) {
+ error("Could not find site-level course");
+}
+$streditmyprofile = get_string("editmyprofile");
+$strnewuser = get_string("newuser");
+$userfullname = $strnewuser;
+$straddnewuser = get_string("importuser");
+$stradministration = get_string("administration");
+
+print_header("$site->shortname: $straddnewuser", "$site->fullname",
+ "wwwroot/admin\">$stradministration ->
+ $straddnewuser", "");
+if ($notify) {
+ notify("$notifytext
Added $numusers New Users");
+}
+// output form
+echo "