--- /dev/null
+<?PHP // $Id$\r
+\r
+//Bulk user registration script from a comma separated file\r
+//Returns list of users with their user ids\r
+\r
+require_once("../config.php");\r
+require_once("../lib/countries.php");\r
+require_once("lib.php");\r
+\r
+\r
+require_login();\r
+\r
+if (!isadmin()) {\r
+ error("You must be an administrator to edit users this way.");\r
+}\r
+\r
+$notify = FALSE;\r
+\r
+// import users\r
+if ($filename = valid_uploaded_file($_FILES['userfile'])) {\r
+ optional_variable($numusers, 0);\r
+ \r
+ //Fix mac/dos newlines\r
+ $text = my_file_get_contents($filename);\r
+ $text = preg_replace('!\r\n?!',"\n",$text);\r
+ $fp = fopen($filename, "w");\r
+ fwrite($fp,$text);\r
+ fclose($fp);\r
+\r
+ $fp = fopen($filename, "r");\r
+\r
+ // make arrays of valid fields for error checking\r
+ $required = array("username" => 1, "password" => 1, \r
+ "firstname" => 1, "lastname" => 1,\r
+ "email" => 1);\r
+ $optionalDefaults = array("institution" => 1, "department" => 1, \r
+ "city" => 1, "country" => 1,\r
+ "lang" => 1, "timezone" => 1);\r
+ $optional = array("idnumber" => 1, "icq" => 1, \r
+ "phone1" => 1, "phone2" => 1,\r
+ "address" => 1, "url" => 1,\r
+ "description" => 1, "mailformat" => 1, \r
+ "htmleditor" => 1, "autosubscribe" => 1,\r
+ "idnumber" => 1, "icq" => 1, \r
+ "course1" => 1, "course2" => 1,\r
+ "course3" => 1, "course4" => 1, \r
+ "course5" => 1);\r
+\r
+ // --- get header (field names) ---\r
+ $header = split("\,", fgets($fp));\r
+ // check for valid field names\r
+ foreach ($header as $i => $h) {\r
+ $h = trim($h); $header[$i] = $h; // remove whitespace\r
+ if (!($required[$h] or $optionalDefaults[$h] or $optional[$h])) {\r
+ error("\"$h\" is not a valid field name.");\r
+ }\r
+ if ($required[$h]) {\r
+ $required[$h] = 2;\r
+ }\r
+ }\r
+ // check for required fields\r
+ foreach ($required as $key => $value) {\r
+ if ($value < 2) {\r
+ error("\"$key\" is a required field.");\r
+ }\r
+ }\r
+ $linenum = 2; // since header is line 1\r
+\r
+ while (!feof ($fp)) {\r
+ //Note: commas within a field should be encoded as ,\r
+ //Last field, courseid, is optional. If present it should be the Moodle\r
+ //course id number for the course in which student should be initially enroled\r
+ $line = split("\,", fgets($fp));\r
+ foreach ($line as $key => $value) {\r
+ $record[$header[$key]] = trim($value);\r
+ }\r
+ if ($record[$header[0]]) {\r
+ // add a new user to the database\r
+ optional_variable($newuser, ""); \r
+\r
+ // add fields to object $user\r
+ foreach ($record as $name => $value) {\r
+ // check for required values\r
+ if ($required[$name] and !$value) {\r
+ error("Missing \"$name\" on line $linenum.");\r
+ }\r
+ // password needs to be encrypted\r
+ else if ($name == "password") {\r
+ $user->password = md5($value);\r
+ }\r
+ // normal entry\r
+ else {\r
+ $user->{$name} = $value;\r
+ }\r
+ }\r
+ $user->confirmed = 1;\r
+ $user->timemodified = time();\r
+ $linenum++;\r
+\r
+ if (! $user->id = insert_record("user", $user)) {\r
+ if (!$user = get_record("user", "username", "changeme")) { // half finished user from another time\r
+ //Record not added - probably because user is already registered\r
+ //In this case, output userid from previous registration\r
+ //This can be used to obtain a list of userids for existing users\r
+ $error_uid = -1;\r
+ if ($user = get_record("user","username",$username)) {\r
+ $error_uid = $user->id;\r
+ }\r
+ $notifytext .= $error_uid . "," . $username . ",FAILED";\r
+ }\r
+ } elseif ($user->username != "changeme") {\r
+ $notifytext .= $user->id . "," . $user->username . ",";\r
+ $numusers++;\r
+ }\r
+ if ($courseid) {\r
+ if (enrol_student($user->id, $courseid)) {\r
+ $notifytext .= ",enroled in course $courseid<br>\n";\r
+ } else {\r
+ $notifytext .= ",error: enrolment in course $courseid failed<br>\n";\r
+ }\r
+ } else {$notifytext .= "<br>\n";}\r
+ unset ($user);\r
+ }\r
+ }\r
+ $notify = true;\r
+ fclose($fp);\r
+}\r
+\r
+// print page\r
+if (! $site = get_site()) {\r
+ error("Could not find site-level course");\r
+}\r
+$streditmyprofile = get_string("editmyprofile");\r
+$strnewuser = get_string("newuser");\r
+$userfullname = $strnewuser;\r
+$straddnewuser = get_string("importuser");\r
+$stradministration = get_string("administration");\r
+\r
+print_header("$site->shortname: $straddnewuser", "$site->fullname",\r
+ "<A HREF=\"$CFG->wwwroot/admin\">$stradministration</A> ->\r
+ $straddnewuser", "");\r
+if ($notify) {\r
+ notify("$notifytext <br>Added $numusers New Users");\r
+}\r
+// output form\r
+echo "<form METHOD=\"post\" ENCTYPE=\"multipart/form-data\" action=\"uploaduser.php\">\n".\r
+"<br><input type=\"submit\" value=\"Import Users\">".\r
+"<INPUT type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"get_max_upload_file_size()\">\n".\r
+"<input type=\"file\" name=\"userfile\" size=30>\n".\r
+"</form></br>";\r
+\r
+print_footer($course);\r
+\r
+function my_file_get_contents($filename, $use_include_path = 0) {\r
+ $data = ""; // just to be safe. Dunno, if this is really needed\r
+ $file = @fopen($filename, "rb", $use_include_path);\r
+ if ($file) {\r
+ while (!feof($file)) $data .= fread($file, 1024);\r
+ fclose($file);\r
+ }\r
+ return $data;\r
+}\r
+\r
+?>\r